From e0d2c1e8c84804e1469686c83ea354cd2348c829 Mon Sep 17 00:00:00 2001 From: Mitsuaki Kawamura Date: Thu, 23 Dec 2021 16:08:17 +0900 Subject: [PATCH 01/73] Unify to HPhi Thu Dec 23 15:58:36 2021 92660825b3e1aac445c13783931d5fd26a4b8d75 BugFix : greenr2k+multi-orbital+TPQ/mVMC case The ordering of average and standard error is not the same as written in the comment. --- tool/CMakeLists.txt | 3 +-- tool/greenr2k.F90 | 28 ++++++++++++++++++++-------- tool/key2lower.c | 7 ------- 3 files changed, 21 insertions(+), 17 deletions(-) delete mode 100644 tool/key2lower.c diff --git a/tool/CMakeLists.txt b/tool/CMakeLists.txt index ae13a4f8..4c225b44 100644 --- a/tool/CMakeLists.txt +++ b/tool/CMakeLists.txt @@ -6,9 +6,8 @@ if(${CMAKE_PROJECT_NAME} STREQUAL "Project") message(FATAL_ERROR "cmake should be executed not for 'src' subdirectory, but for the top directory of mVMC.") endif(${CMAKE_PROJECT_NAME} STREQUAL "Project") -add_library(key2lower STATIC key2lower.c) add_executable(greenr2k greenr2k.F90) -target_link_libraries(greenr2k key2lower ${LAPACK_LIBRARIES}) +target_link_libraries(greenr2k ${LAPACK_LIBRARIES}) install(TARGETS greenr2k RUNTIME DESTINATION bin) # diff --git a/tool/greenr2k.F90 b/tool/greenr2k.F90 index eba207f0..5abfe150 100644 --- a/tool/greenr2k.F90 +++ b/tool/greenr2k.F90 @@ -75,15 +75,21 @@ MODULE fourier_routine ! IMPLICIT NONE ! - INTERFACE - SUBROUTINE key2lower(key) BIND(c) - USE,INTRINSIC :: iso_c_binding - CHARACTER(KIND=C_CHAR) :: key(*) - END SUBROUTINE key2lower - END INTERFACE - ! CONTAINS ! +SUBROUTINE key2lower(key) + CHARACTER(*) :: key + ! + INTEGER :: ii, acode + ! + DO ii = 1, LEN(TRIM(key)) + acode = IACHAR(key(ii:ii)) + IF(65 <= acode .AND. acode <= 90) THEN + key(ii:ii) = ACHAR(acode + 32) + END IF + END DO +END SUBROUTINE key2lower +! ! Read from HPhi/mVMC input files ! SUBROUTINE read_filename() @@ -861,7 +867,13 @@ SUBROUTINE output_cor() END DO ! DO ik = 1, ikk - WRITE(fo,'(1000e15.5)') xk(ik), cor_ave(ik,1:6, 1:norb, 1:norb), cor_err(ik,1:6, 1:norb, 1:norb) + WRITE(fo,'(e15.5)',advance="no") xk(ik) + DO iorb = 1, norb + DO jorb = 1, norb + WRITE(fo,'(24e15.5)',advance="no") cor_ave(ik,1:6, jorb, iorb), cor_err(ik,1:6, jorb, iorb) + END DO + END DO + WRITE(fo,*) END DO ! CLOSE(fo) diff --git a/tool/key2lower.c b/tool/key2lower.c deleted file mode 100644 index f416eade..00000000 --- a/tool/key2lower.c +++ /dev/null @@ -1,7 +0,0 @@ -#include -#include - -void key2lower(char *key){ - unsigned int ii; - for (ii = 0; ii < strlen(key); ii++) key[ii] = tolower(key[ii]); -} From ffb45a68693083fc4fc4658f45d67caa41f08e88 Mon Sep 17 00:00:00 2001 From: Mitsuaki Kawamura Date: Wed, 5 Jan 2022 13:03:21 +0900 Subject: [PATCH 02/73] Unify to HPhi c52763a78314b087eaf36b8d6fa456b3aad62a0e at Wed Jan 5 12:51:02 2022 +0900 Checking R=0 for the left operator of each correlation. If R != 0, it is ignored. --- tool/greenr2k.F90 | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tool/greenr2k.F90 b/tool/greenr2k.F90 index 5abfe150..e7590ca9 100644 --- a/tool/greenr2k.F90 +++ b/tool/greenr2k.F90 @@ -467,7 +467,7 @@ END SUBROUTINE set_kpoints SUBROUTINE read_corrindx() ! USE fourier_val, ONLY : file_one, file_two, ncor1, ncor2, ncor, indx, & - & calctype, nr, rindx, orb, norb + & calctype, nr, rindx, orb, norb, irv IMPLICIT NONE ! INTEGER :: fi = 10, itmp(8), icor @@ -495,7 +495,14 @@ SUBROUTINE read_corrindx() ! ncor(1:2) = 0 DO icor = 1, ncor1 + ! READ(fi,*) itmp(1:4) + ! + IF(ANY(irv(1:3,1,rindx(itmp(1)+1)) /= 0)) THEN + WRITE(*,'(a,i0,a)') " REMARK : The left operator at # ", icor, " is not at R=0." + CYCLE + END IF + ! IF(itmp(2) == 0 .AND. itmp(4) == 0) THEN ! ! Up-Up correlation @@ -533,6 +540,11 @@ SUBROUTINE read_corrindx() READ(fi,*) itmp(1:8) ! IF(itmp(1) == itmp(3) .AND. itmp(5) == itmp(7)) THEN + ! + IF(ANY(irv(1:3,1,rindx(itmp(1)+1)) /= 0)) THEN + WRITE(*,'(a,i0,a)') " REMARK : The left operator at # ", icor, " is not at R=0." + CYCLE + END IF ! IF(itmp(2) == 0 .AND. itmp(4) == 0) THEN ! @@ -583,6 +595,11 @@ SUBROUTINE read_corrindx() END IF ! IF(calctype == 4 .AND. (itmp(1) == itmp(7) .AND. itmp(3) == itmp(5))) THEN + ! + IF(ANY(irv(1:3,1,rindx(itmp(1)+1)) /= 0)) THEN + WRITE(*,'(a,i0,a)') " REMARK : The left operator at # ", icor, " is not at R=0." + CYCLE + END IF ! ! S+S- & S-S+ for mVMC ! From 5f70a4eab35ba0058cb56a4d1e82e655ce7459b4 Mon Sep 17 00:00:00 2001 From: Mitsuaki Kawamura Date: Tue, 11 Jan 2022 16:45:57 +0900 Subject: [PATCH 03/73] Unify to HPhi 29e64a48c5ae78b25e4b7391d70d1c5707bb8e5b Tue Jan 11 16:43:41 2022 +0900 Checking whether the required indices for the to-body Green function is complete. If not, print missing indices and abort. --- tool/greenr2k.F90 | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/tool/greenr2k.F90 b/tool/greenr2k.F90 index e7590ca9..5d1795d1 100644 --- a/tool/greenr2k.F90 +++ b/tool/greenr2k.F90 @@ -470,7 +470,7 @@ SUBROUTINE read_corrindx() & calctype, nr, rindx, orb, norb, irv IMPLICIT NONE ! - INTEGER :: fi = 10, itmp(8), icor + INTEGER :: fi = 10, itmp(8), icor, ir, iorb, jorb CHARACTER(100) :: ctmp ! WRITE(*,*) @@ -619,6 +619,35 @@ SUBROUTINE read_corrindx() ! END DO ! + IF(COUNT(indx(1:nr,3:8,1:norb,1:norb) == 0) /= 0) THEN + WRITE(*,*) "ERROR! The following correelation function is missed:" + WRITE(*,*) "R, kind, orb1, orb2" + DO icor = 3, 8 + DO ir = 1, nr + DO iorb = 1, norb + DO jorb = 1, norb + IF(indx(ir,icor,iorb,jorb) == 0) THEN + IF(icor == 3) THEN + WRITE(*,'(i0,a,i0,2x,i0)') ir, " Up-Up-Up-Up ", iorb, jorb + ELSE IF(icor == 4) THEN + WRITE(*,'(i0,a,i0,2x,i0)') ir, " Up-Up-Down-Down ", iorb, jorb + ELSE IF(icor == 5) THEN + WRITE(*,'(i0,a,i0,2x,i0)') ir, " Down-Down-Up-Up ", iorb, jorb + ELSE IF(icor == 6) THEN + WRITE(*,'(i0,a,i0,2x,i0)') ir, " Down-Down-Down-Down ", iorb, jorb + ELSE IF(icor == 7) THEN + WRITE(*,'(i0,a,i0,2x,i0)') ir, " Up-Down-Down-Up ", iorb, jorb + ELSE + WRITE(*,'(i0,a,i0,2x,i0)') ir, " Down-Up-Up-Down ", iorb, jorb + END IF + END IF + END DO + END DO + END DO + END DO + STOP "Missing indices for the Green function." + END IF + ! WRITE(*,*) " Number of UpUpUpUp Index : ", COUNT(indx(1:nr, 3, 1:norb, 1:norb) /= 0) WRITE(*,*) " Number of UpUpDownDown Index : ", COUNT(indx(1:nr, 4, 1:norb, 1:norb) /= 0) WRITE(*,*) " Number of DownDownUpUp Index : ", COUNT(indx(1:nr, 5, 1:norb, 1:norb) /= 0) From 246a30b8d888a518b0ebd796ba3401b7975e5a4b Mon Sep 17 00:00:00 2001 From: Mitsuaki Kawamura Date: Tue, 11 Jan 2022 16:52:31 +0900 Subject: [PATCH 04/73] Fix typo --- tool/greenr2k.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tool/greenr2k.F90 b/tool/greenr2k.F90 index 5d1795d1..1472978f 100644 --- a/tool/greenr2k.F90 +++ b/tool/greenr2k.F90 @@ -620,7 +620,7 @@ SUBROUTINE read_corrindx() END DO ! IF(COUNT(indx(1:nr,3:8,1:norb,1:norb) == 0) /= 0) THEN - WRITE(*,*) "ERROR! The following correelation function is missed:" + WRITE(*,*) "ERROR! The following correlation function is missed:" WRITE(*,*) "R, kind, orb1, orb2" DO icor = 3, 8 DO ir = 1, nr From 20050fb0bece0bbcaabae2f851ee6d7c9a34d650 Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Sat, 12 Mar 2022 03:11:46 +0900 Subject: [PATCH 05/73] Replace Pfaffine w/ Pfapack77-Based ltl2inv --- .gitmodules | 4 - src/ltl2inv/blalink.hh | 457 ++++++++++++++++++++++++++++++++ src/ltl2inv/blalink_fort.h | 172 ++++++++++++ src/ltl2inv/colmaj.hh | 26 ++ src/ltl2inv/invert.tcc | 61 +++++ src/ltl2inv/ltl2inv.cc | 25 ++ src/ltl2inv/makefile_ltl2inv | 17 ++ src/ltl2inv/pfaffian.tcc | 23 ++ src/ltl2inv/testinv.cc | 78 ++++++ src/mVMC/include/blas_externs.h | 22 +- src/mVMC/locgrn.c | 5 - src/mVMC/locgrn_real.c | 3 - src/mVMC/makefile_src | 8 +- src/mVMC/matrix.c | 4 - src/mVMC/pfupdate.c | 10 - src/mVMC/pfupdate_real.c | 6 +- src/pfaffine | 1 - 17 files changed, 874 insertions(+), 48 deletions(-) create mode 100644 src/ltl2inv/blalink.hh create mode 100644 src/ltl2inv/blalink_fort.h create mode 100644 src/ltl2inv/colmaj.hh create mode 100644 src/ltl2inv/invert.tcc create mode 100644 src/ltl2inv/ltl2inv.cc create mode 100644 src/ltl2inv/makefile_ltl2inv create mode 100644 src/ltl2inv/pfaffian.tcc create mode 100644 src/ltl2inv/testinv.cc delete mode 160000 src/pfaffine diff --git a/.gitmodules b/.gitmodules index 99e901f0..44e5b4ac 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,3 @@ -[submodule "src/pfaffine"] - path = src/pfaffine - url = https://github.com/xrq-phys/Pfaffine - branch = blis [submodule "src/blis"] path = src/blis url = https://github.com/xrq-phys/blis diff --git a/src/ltl2inv/blalink.hh b/src/ltl2inv/blalink.hh new file mode 100644 index 00000000..fe218cc9 --- /dev/null +++ b/src/ltl2inv/blalink.hh @@ -0,0 +1,457 @@ +/** + * \file blalink.hh + * C++ to C type wrapper for BLIS type-apis. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#pragma once +#include +typedef std::complex ccscmplx; +typedef std::complex ccdcmplx; +// BLIS definitions. +#include "blis.h" +// BLAS definitions +#include "blalink_fort.h" + +// error info +typedef enum { + Pfaffine_SIGN_ERR = 1, + Pfaffine_OUT_OF_BOUND, + Pfaffine_BAD_SCRATCHPAD, + Pfaffine_BAD_REPRESENTATION, + Pfaffine_INTEGER_OVERFLOW, + Pfaffine_DOUBLE_NAN_DETECTED, + Pfaffine_NOT_IMPLEMNTED, + Pfaffine_NUM_ERROR_TYPE +} skpfa_error_t; +inline signed err_info(signed type, signed pos) +{ return type * Pfaffine_NUM_ERROR_TYPE + pos; } + +// gemm +template +inline void gemm(trans_t transa, trans_t transb, + dim_t m, dim_t n, dim_t k, + T alpha, + T *a, inc_t lda, + T *b, inc_t ldb, + T beta, + T *c, inc_t ldc); +#ifndef BLAS_EXTERNAL +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void gemm(trans_t transa, trans_t transb, \ + dim_t m, dim_t n, dim_t k, \ + cctype alpha, \ + cctype *a, inc_t lda, \ + cctype *b, inc_t ldb, \ + cctype beta, \ + cctype *c, inc_t ldc) \ + { \ + bli_##cchar##gemm(transa, transb, \ + m, n, k, \ + (ctype *)&alpha, \ + (ctype *)a, 1, lda, \ + (ctype *)b, 1, ldb, \ + (ctype *)&beta, \ + (ctype *)c, 1, ldc); \ + } +#else +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void gemm(trans_t transa, trans_t transb, \ + dim_t m, dim_t n, dim_t k, \ + cctype alpha, \ + cctype *a, inc_t lda, \ + cctype *b, inc_t ldb, \ + cctype beta, \ + cctype *c, inc_t ldc) \ + { \ + char ta = trans2char(transa), \ + tb = trans2char(transb); \ + cchar##gemm_(&ta, &tb, &m, &n, &k, \ + (ctype *)&alpha, \ + (ctype *)a, &lda, \ + (ctype *)b, &ldb, \ + (ctype *)&beta, \ + (ctype *)c, &ldc); \ + } +#endif +BLALINK_MAC( float, float, s ) +BLALINK_MAC( double, double, d ) +BLALINK_MAC( ccscmplx, scomplex, c ) +BLALINK_MAC( ccdcmplx, dcomplex, z ) +#undef BLALINK_MAC + + +// ger +template +inline void ger(dim_t m, dim_t n, + T alpha, + T *x, inc_t incx, + T *y, inc_t incy, + T *a, inc_t lda); +#ifndef BLAS_EXTERNAL +#define BLALINK_MAC(cctype, ctype, cchar, cfunc) \ + template <> inline void ger(dim_t m, dim_t n, \ + cctype alpha, \ + cctype *x, inc_t incx, \ + cctype *y, inc_t incy, \ + cctype *a, inc_t lda) \ + { \ + bli_##cchar##ger(BLIS_NO_CONJUGATE, \ + BLIS_NO_CONJUGATE, \ + m, n, \ + (ctype *)&alpha, \ + (ctype *)x, incx, \ + (ctype *)y, incy, \ + (ctype *)a, 1, lda); \ + } +#else +#define BLALINK_MAC(cctype, ctype, cchar, cfunc) \ + template <> inline void ger(dim_t m, dim_t n, \ + cctype alpha, \ + cctype *x, inc_t incx, \ + cctype *y, inc_t incy, \ + cctype *a, inc_t lda) \ + { \ + cchar##cfunc##_(&m, &n, \ + (ctype *)&alpha, \ + (ctype *)x, &incx, \ + (ctype *)y, &incy, \ + (ctype *)a, &lda); \ + } +#endif +BLALINK_MAC( float, float, s, ger ) +BLALINK_MAC( double, double, d, ger ) +BLALINK_MAC( ccscmplx, scomplex, c, geru ) +BLALINK_MAC( ccdcmplx, dcomplex, z, geru ) +#undef BLALINK_MAC + + +// gemv +template +inline void gemv(trans_t trans, + dim_t m, dim_t n, + T alpha, + T *a, inc_t lda, + T *x, inc_t incx, + T beta, + T *y, inc_t incy); +#ifndef BLAS_EXTERNAL +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void gemv(trans_t trans, \ + dim_t m, dim_t n, \ + cctype alpha, \ + cctype *a, inc_t lda, \ + cctype *x, inc_t incx, \ + cctype beta, \ + cctype *y, inc_t incy) \ + { \ + bli_##cchar##gemv(trans, \ + BLIS_NO_CONJUGATE, \ + m, n, \ + (ctype *)&alpha, \ + (ctype *)a, 1, lda, \ + (ctype *)x, incx, \ + (ctype *)&beta, \ + (ctype *)y, incy); \ + } +#else +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void gemv(trans_t trans, \ + dim_t m, dim_t n, \ + cctype alpha, \ + cctype *a, inc_t lda, \ + cctype *x, inc_t incx, \ + cctype beta, \ + cctype *y, inc_t incy) \ + { \ + char t = trans2char(trans); \ + cchar##gemv_(&t, &m, &n, \ + (ctype *)&alpha, \ + (ctype *)a, &lda, \ + (ctype *)x, &incx, \ + (ctype *)&beta, \ + (ctype *)y, &incy); \ + } +#endif +BLALINK_MAC( float, float, s ) +BLALINK_MAC( double, double, d ) +BLALINK_MAC( ccscmplx, scomplex, c ) +BLALINK_MAC( ccdcmplx, dcomplex, z ) +#undef BLALINK_MAC + + +// trmm +template +inline void trmm(side_t sidea, + uplo_t uploa, + trans_t transa, + diag_t diaga, + dim_t m, dim_t n, + T alpha, + T *a, inc_t lda, + T *b, inc_t ldb); +#ifndef BLAS_EXTERNAL +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void trmm(side_t sidea, uplo_t uploa, trans_t transa, diag_t diaga, \ + dim_t m, dim_t n, \ + cctype alpha, \ + cctype *a, inc_t lda, \ + cctype *b, inc_t ldb) \ + { \ + bli_##cchar##trmm(sidea, uploa, transa, diaga, \ + m, n, \ + (ctype *)&alpha, \ + (ctype *)a, 1, lda, \ + (ctype *)b, 1, ldb); \ + } +#else +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void trmm(side_t sidea, uplo_t uploa, trans_t transa, diag_t diaga, \ + dim_t m, dim_t n, \ + cctype alpha, \ + cctype *a, inc_t lda, \ + cctype *b, inc_t ldb) \ + { \ + char ul = uplo2char(uploa), \ + si = side2char(sidea), \ + tr = trans2char(transa), \ + dg = diag2char(diaga); \ + cchar##trmm_(&si, &ul, &tr, &dg, \ + &m, &n, \ + (ctype *)&alpha, \ + (ctype *)&a, &lda, \ + (ctype *)&b, &ldb); \ + } +#endif +BLALINK_MAC( float, float, s ) +BLALINK_MAC( double, double, d ) +BLALINK_MAC( ccscmplx, scomplex, c ) +BLALINK_MAC( ccdcmplx, dcomplex, z ) +#undef BLALINK_MAC + + +// trmv +template +inline void trmv(uplo_t uploa, + trans_t transa, + dim_t m, + T alpha, + T *a, inc_t lda, + T *x, inc_t incx); +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void trmv(uplo_t uploa, trans_t transa, dim_t m, \ + cctype alpha, \ + cctype *a, inc_t lda, \ + cctype *x, inc_t incx) \ + { \ + bli_##cchar##trmv(uploa, transa, \ + BLIS_NONUNIT_DIAG, m, \ + (ctype *)&alpha, \ + (ctype *)a, 1, lda, \ + (ctype *)x, incx); \ + } +/* + * TRMV has alpha in its templated interface, which is absent in BLAS. + * +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void trmv(uplo_t uploa, trans_t transa, dim_t m, \ + cctype alpha, \ + cctype *a, inc_t lda, \ + cctype *x, inc_t incx) \ + { \ + char ul = uplo2char(uploa), \ + tr = trans2char(transa), \ + dg = 'N'; \ + cchar##trmv_(&ul, &tr, &dg, &m, \ + (ctype *)a, &lda, \ + (ctype *)x, *incx); \ + } + */ +BLALINK_MAC( float, float, s ) +BLALINK_MAC( double, double, d ) +BLALINK_MAC( ccscmplx, scomplex, c ) +BLALINK_MAC( ccdcmplx, dcomplex, z ) +#undef BLALINK_MAC + + +// swap +template +inline void swap(dim_t n, + T *x, inc_t incx, + T *y, inc_t incy); +#ifndef BLAS_EXTERNAL +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void swap(dim_t n, \ + cctype *x, inc_t incx, \ + cctype *y, inc_t incy) \ + { \ + bli_##cchar##swapv(n, \ + (ctype *)x, incx, \ + (ctype *)y, incy); \ + } +#else +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void swap(dim_t n, \ + cctype *x, inc_t incx, \ + cctype *y, inc_t incy) \ + { \ + cchar##swap_(&n, \ + (ctype *)x, &incx, \ + (ctype *)y, &incy); \ + } +#endif +BLALINK_MAC( float, float, s ) +BLALINK_MAC( double, double, d ) +BLALINK_MAC( ccscmplx, scomplex, c ) +BLALINK_MAC( ccdcmplx, dcomplex, z ) +#undef BLALINK_MAC + + +// axpy +template +inline void axpy(dim_t n, + T alpha, + T *x, inc_t incx, + T *y, inc_t incy); +#ifndef BLAS_EXTERNAL +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void axpy(dim_t n, \ + cctype alpha, \ + cctype *x, inc_t incx, \ + cctype *y, inc_t incy) \ + { \ + bli_##cchar##axpyv(BLIS_NO_CONJUGATE, n, \ + (ctype *)&alpha, \ + (ctype *)x, incx, \ + (ctype *)y, incy); \ + } +#else +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void axpy(dim_t n, \ + cctype alpha, \ + cctype *x, inc_t incx, \ + cctype *y, inc_t incy) \ + { \ + cchar##axpy_(&n, \ + (ctype *)&alpha, \ + (ctype *)x, &incx, \ + (ctype *)y, &incy); \ + } +#endif +BLALINK_MAC( float, float, s ) +BLALINK_MAC( double, double, d ) +BLALINK_MAC( ccscmplx, scomplex, c ) +BLALINK_MAC( ccdcmplx, dcomplex, z ) +#undef BLALINK_MAC + +// dot +template +inline T dot(dim_t n, + T *sx, inc_t incx, + T *sy, inc_t incy); +#ifndef BLAS_EXTERNAL +#define BLALINK_MAC(cctype, ctype, cchar, cfunc) \ + template <> inline cctype dot(dim_t n, \ + cctype *sx, inc_t incx, \ + cctype *sy, inc_t incy) \ + { \ + cctype rho; \ + bli_##cchar##dotv(BLIS_NO_CONJUGATE, \ + BLIS_NO_CONJUGATE, \ + n, \ + (ctype *)sx, incx, \ + (ctype *)sy, incy, \ + (ctype *)&rho); \ + return rho; \ + } +#else +#define BLALINK_MAC(cctype, ctype, cchar, cfunc) \ + template <> inline cctype dot(dim_t n, \ + cctype *sx, inc_t incx, \ + cctype *sy, inc_t incy) \ + { \ + ctype rho = cchar##cfunc##_(&n, \ + (ctype *)sx, &incx, \ + (ctype *)sy, &incy); \ + return *((cctype *)&rho); \ + } +#endif +BLALINK_MAC( float, float, s, dot ) +BLALINK_MAC( double, double, d, dot ) +BLALINK_MAC( ccscmplx, scomplex, c, dotc ) +BLALINK_MAC( ccdcmplx, dcomplex, z, dotc ) +#undef BLALINK_MAC + +// [LAPACK] lacpy +template +inline void lacpy(uplo_t uploa, + dim_t m, dim_t n, + T *a, inc_t lda, + T *b, inc_t ldb); +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void lacpy(uplo_t uploa, \ + dim_t m, dim_t n, \ + cctype *a, inc_t lda, \ + cctype *b, inc_t ldb) \ + { \ + char ul = uplo2char(uploa); \ + cchar##lacpy_(&ul, &m, &n, a, &lda, b, &ldb); \ + } +BLALINK_MAC( float, float, s ) +BLALINK_MAC( double, double, d ) +BLALINK_MAC( ccscmplx, scomplex, c ) +BLALINK_MAC( ccdcmplx, dcomplex, z ) +#undef BLALINK_MAC + +// [LAPACK] trtri +template +inline int trtri(uplo_t uploa, + diag_t diaga, + dim_t n, + T *a, inc_t lda); +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline int trtri(uplo_t uploa, \ + diag_t diaga, \ + dim_t n, \ + cctype *a, inc_t lda) \ + { \ + char ul = uplo2char(uploa); \ + char dg = diag2char(diaga); \ + int info; \ + cchar##trtri_(&ul, &dg, &n, a, &lda, &info); \ + return info; \ + } +BLALINK_MAC( float, float, s ) +BLALINK_MAC( double, double, d ) +BLALINK_MAC( ccscmplx, scomplex, c ) +BLALINK_MAC( ccdcmplx, dcomplex, z ) +#undef BLALINK_MAC + +// [PFAPACK] sktrf +template +inline int sktrf(uplo_t uploa, + dim_t n, + T *a, inc_t lda, + int *ipiv, + T *work, dim_t lwork); +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline int sktrf(uplo_t uploa, \ + dim_t n, \ + cctype *a, inc_t lda, \ + int *ipiv, \ + cctype *work, dim_t lwork) \ + { \ + char ul = uplo2char(uploa); \ + char mode = 'N'; \ + int info; \ + cchar##sktrf_(&ul, &mode, &n, a, &lda, ipiv, work, &lwork, &info); \ + return info; \ + } +BLALINK_MAC( float, float, s ) +BLALINK_MAC( double, double, d ) +BLALINK_MAC( ccscmplx, scomplex, c ) +BLALINK_MAC( ccdcmplx, dcomplex, z ) +#undef BLALINK_MAC + diff --git a/src/ltl2inv/blalink_fort.h b/src/ltl2inv/blalink_fort.h new file mode 100644 index 00000000..3dd402d8 --- /dev/null +++ b/src/ltl2inv/blalink_fort.h @@ -0,0 +1,172 @@ +/** + * \file blalink_fort.hh + * Wrapper for external BLAS. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#pragma once +#include +#include "blis.h" + + +// converter from BLIS enum to BLAS char. +BLIS_INLINE char trans2char(trans_t t) +{ + switch (t) { + case BLIS_NO_TRANSPOSE: + return 'N'; + case BLIS_TRANSPOSE: + return 'T'; + case BLIS_CONJ_NO_TRANSPOSE: + return 'C'; + default: + abort(); + } +} +BLIS_INLINE char uplo2char(uplo_t t) +{ + switch (t) { + case BLIS_UPPER: + return 'U'; + case BLIS_LOWER: + return 'L'; + default: + abort(); + } +} +BLIS_INLINE char side2char(side_t t) +{ + switch (t) { + case BLIS_LEFT: + return 'L'; + case BLIS_RIGHT: + return 'R'; + default: + abort(); + } +} +BLIS_INLINE char diag2char(diag_t t) +{ + switch (t) { + case BLIS_UNIT_DIAG: + return 'U'; + case BLIS_NONUNIT_DIAG: + return 'N'; + } +} + + +#ifdef __cplusplus +extern "C" +{ +#endif + +// BLAS { +#ifdef BLAS_EXTERNAL + +// gemm +void sgemm_(char *transa, char *transb, dim_t *m, dim_t *n, dim_t *k, float *alpha, + float *a, dim_t *lda, float *b, dim_t *ldb, float *beta, float *c, dim_t *ldc); +void dgemm_(char *transa, char *transb, dim_t *m, dim_t *n, dim_t *k, double *alpha, + double *a, dim_t *lda, double *b, dim_t *ldb, double *beta, double *c, dim_t *ldc); +void cgemm_(char *transa, char *transb, dim_t *m, dim_t *n, dim_t *k, void *alpha, + void *a, dim_t *lda, void *b, dim_t *ldb, void *beta, void *c, dim_t *ldc); +void zgemm_(char *transa, char *transb, dim_t *m, dim_t *n, dim_t *k, void *alpha, + void *a, dim_t *lda, void *b, dim_t *ldb, void *beta, void *c, dim_t *ldc); + + +// ger +void sger_(dim_t *m, dim_t *n, float *alpha, + float *x, dim_t *incx, float *y, dim_t *incy, float *a, dim_t *lda); +void dger_(dim_t *m, dim_t *n, double *alpha, + double *x, dim_t *incx, double *y, dim_t *incy, double *a, dim_t *lda); +void cgeru_(dim_t *m, dim_t *n, void *alpha, + void *x, dim_t *incx, void *y, dim_t *incy, void *a, dim_t *lda); +void zgeru_(dim_t *m, dim_t *n, void *alpha, + void *x, dim_t *incx, void *y, dim_t *incy, void *a, dim_t *lda); + + +// gemv +void sgemv_(char *trans, dim_t *m, dim_t *n, float *alpha, float *a, dim_t *lda, + float *x, dim_t *incx, float *beta, float *y, dim_t *incy); +void dgemv_(char *trans, dim_t *m, dim_t *n, double *alpha, double *a, dim_t *lda, + double *x, dim_t *incx, double *beta, double *y, dim_t *incy); +void cgemv_(char *trans, dim_t *m, dim_t *n, void *alpha, void *a, dim_t *lda, + void *x, dim_t *incx, void *beta, void *y, dim_t *incy); +void zgemv_(char *trans, dim_t *m, dim_t *n, void *alpha, void *a, dim_t *lda, + void *x, dim_t *incx, void *beta, void *y, dim_t *incy); + + +// trmm +void strmm_(char *side, char *uplo, char *transa, char *diag, dim_t *m, dim_t *n, + float *alpha, float *a, inc_t *lda, float *b, inc_t *ldb); +void dtrmm_(char *side, char *uplo, char *transa, char *diag, dim_t *m, dim_t *n, + double *alpha, double *a, inc_t *lda, double *b, inc_t *ldb); +void ctrmm_(char *side, char *uplo, char *transa, char *diag, dim_t *m, dim_t *n, + void *alpha, void *a, inc_t *lda, void *b, inc_t *ldb); +void ztrmm_(char *side, char *uplo, char *transa, char *diag, dim_t *m, dim_t *n, + void *alpha, void *a, inc_t *lda, void *b, inc_t *ldb); + + +// trmv +void strmv_(char *uplo, char *transa, char *diag, dim_t *n, + float *a, inc_t *lda, float *b, inc_t *ldb); +void dtrmv_(char *uplo, char *transa, char *diag, dim_t *n, + double *a, inc_t *lda, double *b, inc_t *ldb); +void ctrmv_(char *uplo, char *transa, char *diag, dim_t *n, + void *a, inc_t *lda, void *b, inc_t *ldb); +void ztrmv_(char *uplo, char *transa, char *diag, dim_t *n, + void *a, inc_t *lda, void *b, inc_t *ldb); + +// swap +void sswap_(dim_t *n, float *sx, dim_t *incx, float *sy, dim_t *incy); +void dswap_(dim_t *n, double *sx, dim_t *incx, double *sy, dim_t *incy); +void cswap_(dim_t *n, void *sx, dim_t *incx, void *sy, dim_t *incy); +void zswap_(dim_t *n, void *sx, dim_t *incx, void *sy, dim_t *incy); + +// axpy +void saxpy_(dim_t *n, float *alpha, float *sx, dim_t *incx, float *sy, dim_t *incy); +void daxpy_(dim_t *n, double *alpha, double *sx, dim_t *incx, double *sy, dim_t *incy); +void caxpy_(dim_t *n, void *alpha, void *sx, dim_t *incx, void *sy, dim_t *incy); +void zaxpy_(dim_t *n, void *alpha, void *sx, dim_t *incx, void *sy, dim_t *incy); + +// dot +float sdot_(dim_t *n, float *sx, dim_t *incx, float *sy, dim_t *incy); +double ddot_(dim_t *n, double *sx, dim_t *incx, double *sy, dim_t *incy); +scomplex cdotc_(dim_t *n, void *sx, dim_t *incx, void *sy, dim_t *incy); +dcomplex zdotc_(dim_t *n, void *sx, dim_t *incx, void *sy, dim_t *incy); + +// } +#endif + +// LAPACK { + +// lacpy +void slacpy_(char *uplo, dim_t *m, dim_t *n, float *a, inc_t *lda, float *b, inc_t *ldb); +void dlacpy_(char *uplo, dim_t *m, dim_t *n, double *a, inc_t *lda, double *b, inc_t *ldb); +void clacpy_(char *uplo, dim_t *m, dim_t *n, void *a, inc_t *lda, void *b, inc_t *ldb); +void zlacpy_(char *uplo, dim_t *m, dim_t *n, void *a, inc_t *lda, void *b, inc_t *ldb); + +// trtri +void strtri_(char *uplo, char *diag, dim_t *n, float *a, inc_t *lda, int *info); +void dtrtri_(char *uplo, char *diag, dim_t *n, double *a, inc_t *lda, int *info); +void ctrtri_(char *uplo, char *diag, dim_t *n, void *a, inc_t *lda, int *info); +void ztrtri_(char *uplo, char *diag, dim_t *n, void *a, inc_t *lda, int *info); + +// } + +// PFAPACK77 { + +void ssktrf_(char *uplo, char *mode, dim_t *n, float *a, dim_t *lda, int *ipiv, float *work, dim_t *lwork, int *info); +void dsktrf_(char *uplo, char *mode, dim_t *n, double *a, dim_t *lda, int *ipiv, double *work, dim_t *lwork, int *info); +void csktrf_(char *uplo, char *mode, dim_t *n, void *a, dim_t *lda, int *ipiv, void *work, dim_t *lwork, int *info); +void zsktrf_(char *uplo, char *mode, dim_t *n, void *a, dim_t *lda, int *ipiv, void *work, dim_t *lwork, int *info); + +// } + +#ifdef __cplusplus +} +#endif + diff --git a/src/ltl2inv/colmaj.hh b/src/ltl2inv/colmaj.hh new file mode 100644 index 00000000..d9a03c1e --- /dev/null +++ b/src/ltl2inv/colmaj.hh @@ -0,0 +1,26 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#pragma once + +template +struct colmaj +{ + T *dat; + int ld; + + colmaj() = delete; + colmaj(T *dat_, int ld_) + : dat(dat_), ld(ld_) { } + + T &operator()(int i, int j) + { + return dat[ i + j * ld ]; + } + T &operator()() + { + return dat[ 0 ]; + } +}; diff --git a/src/ltl2inv/invert.tcc b/src/ltl2inv/invert.tcc new file mode 100644 index 00000000..cf88c36b --- /dev/null +++ b/src/ltl2inv/invert.tcc @@ -0,0 +1,61 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#pragma once +#include "colmaj.hh" +#include "blalink.hh" + +template +void sktdsmx(int n, T *vT, T *B_, int ldB, T *C_, int ldC) +{ + colmaj B(B_, ldB); + colmaj C(C_, ldC); + + for (int j = 0; j < n; ++j) + C(1, j) = B(0, j) / -vT[0]; + for (int i = 2; i < n; i += 2) + for (int j = 0; j < n; ++j) + C(i+1, j) = (B(i, j) - C(i-1, j) * vT[i-1]) / -vT[i]; + + for (int j = 0; j < n; ++j) + C(n-2, j) = B(n-1, j) / vT[n-2]; + for (int i = n-3; i >= 0; i -= 2) + for (int j = 0; j < n; ++j) + C(i-1, j) = (B(i, j) + C(i+1, j) * vT[i]) / vT[i-1]; +} + +template +void ltl2inv(int n, T *A_, int ldA, int *iPiv, T *vT, T *M_, int ldM) +{ + colmaj A(A_, ldA); + colmaj M(M_, ldM); + + // Set M. + for (int j = 0; j < n; ++j) + for (int i = 0; i < n; ++i) + M(i, j) = T(!(i - j)); + + trtri(BLIS_LOWER, BLIS_UNIT_DIAG, n-1, &A(1, 0), ldA); + lacpy(BLIS_LOWER, n-2, n-2, &A(2, 0), ldA, &M(2, 1), ldM); + + for (int i = 0; i < n-1; ++i) + vT[i] = A(i+1, i); + sktdsmx(n, vT, &M(0, 0), ldM, &A(0, 0), ldA); + + // In-place permute columns. + for (int j = n-1; j >= 0; --j) + if (iPiv[j]-1 != j) + swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); + + // TODO: GEMMT? + trmm(BLIS_LEFT, BLIS_LOWER, BLIS_TRANSPOSE, BLIS_UNIT_DIAG, + n, n, T(1.0), &M(0, 0), ldM, &A(0, 0), ldA); + + // In-place permute rows. + for (int i = n-1; i >= 0; --i) + if (iPiv[i]-1 != i) + swap(n, &A(i, 0), ldA, &A(iPiv[i]-1, 0), ldA); +} + diff --git a/src/ltl2inv/ltl2inv.cc b/src/ltl2inv/ltl2inv.cc new file mode 100644 index 00000000..c490fb52 --- /dev/null +++ b/src/ltl2inv/ltl2inv.cc @@ -0,0 +1,25 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#include "pfaffian.tcc" +#include "invert.tcc" + + + +extern "C" { + +void ltl2inv_s(int n, float *A_, int ldA, int *iPiv, float *vT, float *M_, int ldM) { ltl2inv(n, A_, ldA, iPiv, vT, M_, ldM); } +void ltl2inv_d(int n, double *A_, int ldA, int *iPiv, double *vT, double *M_, int ldM) { ltl2inv(n, A_, ldA, iPiv, vT, M_, ldM); } +void ltl2inv_c(int n, ccscmplx *A_, int ldA, int *iPiv, ccscmplx *vT, ccscmplx *M_, int ldM) { ltl2inv(n, A_, ldA, iPiv, vT, M_, ldM); } +void ltl2inv_z(int n, ccdcmplx *A_, int ldA, int *iPiv, ccdcmplx *vT, ccdcmplx *M_, int ldM) { ltl2inv(n, A_, ldA, iPiv, vT, M_, ldM); } + + +void ltl2pfa_s(int n, float *A_, int ldA, int *iPiv) { ltl2pfa(n, A_, ldA, iPiv); } +void ltl2pfa_d(int n, double *A_, int ldA, int *iPiv) { ltl2pfa(n, A_, ldA, iPiv); } +void ltl2pfa_c(int n, ccscmplx *A_, int ldA, int *iPiv) { ltl2pfa(n, A_, ldA, iPiv); } +void ltl2pfa_z(int n, ccdcmplx *A_, int ldA, int *iPiv) { ltl2pfa(n, A_, ldA, iPiv); } + +} + diff --git a/src/ltl2inv/makefile_ltl2inv b/src/ltl2inv/makefile_ltl2inv new file mode 100644 index 00000000..c08c9719 --- /dev/null +++ b/src/ltl2inv/makefile_ltl2inv @@ -0,0 +1,17 @@ +include ../make.sys + +ifeq ($(BLIS_ROOT),) + BLIS_ROOT = ../pfaffine/src/dep +endif + +OBJ = ltl2inv.o +SRC = ltl2inv.cc +HDR = blalink.hh blalink_fort.h colmaj.hh invert.tcc pfaffian.tcc + +$(OBJ): $(SRC) $(HDR) + $(CXX) $(CXXFLAGS) -D_CC_IMPL -c $< -o $@ \ + -I$(BLIS_ROOT)/include \ + -I$(BLIS_ROOT)/include/blis + +clean: + rm -f $(OBJ) diff --git a/src/ltl2inv/pfaffian.tcc b/src/ltl2inv/pfaffian.tcc new file mode 100644 index 00000000..58b525a1 --- /dev/null +++ b/src/ltl2inv/pfaffian.tcc @@ -0,0 +1,23 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#pragma once +#include "colmaj.hh" +#include "blalink.hh" + +template +T ltl2pfa(int n, T *A_, int ldA, int *iPiv) +{ + T pfa = 1.0; + colmaj A(A_, ldA); + + for (int i = 0; i < n; i += 2) { + pfa *= -A(i+1, i); + + if (iPiv[i+1]-1 != i+1) pfa = -pfa; + } + return pfa; +} + diff --git a/src/ltl2inv/testinv.cc b/src/ltl2inv/testinv.cc new file mode 100644 index 00000000..dc256e8c --- /dev/null +++ b/src/ltl2inv/testinv.cc @@ -0,0 +1,78 @@ +#include +#include + +#include "colmaj.hh" +#include "invert.tcc" + +template +double test_ltl2inv(int n) +{ + colmaj A(new T[n * n], n); + colmaj M(new T[n * n], n); + colmaj X(new T[n * n], n); + int *ipiv = new int[n]; + T *vT = new T[n-1]; + + for (int j = 0; j < n; ++j) { + A(j, j) = 0.0; + X(j, j) = 0.0; + + for (int i = j+1; i < n; ++i) { + A(i, j) = rand(); + A(i, j) /= RAND_MAX; + + A(j, i) = -A(i, j); + X(i, j) = A(i, j); + } + } + + sktrf(BLIS_LOWER, n, &X(0, 0), n, ipiv, &M(0, 0), n*n); + ltl2inv(n, &X(0, 0), n, ipiv, vT, &M(0, 0), n); + + gemm(BLIS_NO_TRANSPOSE, BLIS_NO_TRANSPOSE, + n, n, n, + 1.0, + &A(0, 0), n, + &X(0, 0), n, + 0.0, + &M(0, 0), n); + +#ifdef VERBOSE + for (int i = 0; i < n; ++i) + printf("%d ", ipiv[i]); + printf("\n"); + + for (int i = 0; i < n; ++i) { + for (int j = 0; j < n; ++j) + printf("%10.6f ", M(i, j)); + printf("\n"); + } +#endif + + double err = 0.0; + for (int j = 0; j < n; ++j) + for (int i = 0; i < n; ++i) + err += std::abs(M(i, j) - double(!(i - j))); + err /= n; // sqrt(n*n); + + delete[] &A(0, 0); + delete[] &M(0, 0); + delete[] &X(0, 0); + delete[] ipiv; + delete[] vT; + + return err; +} + +int main(void) +{ + printf("double 10x10 err=%e.\n", test_ltl2inv(10)); + printf("float 10x10 err=%e.\n", test_ltl2inv(10)); + printf("dcomplex 10x10 err=%e.\n", test_ltl2inv(10)); + printf("double 200x200 err=%e.\n", test_ltl2inv(200)); + printf("float 200x200 err=%e.\n", test_ltl2inv(200)); + printf("dcomplex 200x200 err=%e.\n", test_ltl2inv(200)); + + return 0; +} + diff --git a/src/mVMC/include/blas_externs.h b/src/mVMC/include/blas_externs.h index c1df0682..4a05f6e8 100644 --- a/src/mVMC/include/blas_externs.h +++ b/src/mVMC/include/blas_externs.h @@ -46,15 +46,11 @@ along with this program. If not, see http://www.gnu.org/licenses/. #define M_ZGETRI zgetri_ #define M_ZPOSV zposv_ -// Skew-symmetric LAPACK-level routines: -// Vendor switch: PFAPACK77 or Pfaffine -#ifdef _pfaffine -#define M_DSKPFA m_dskpfa_ -#define M_ZSKPFA m_zskpfa_ -#else +// Pfapack #define M_DSKPFA dskpfa_ #define M_ZSKPFA zskpfa_ -#endif +#define M_DSKTRF dsktrf_ +#define M_ZSKTRF zsktrf_ // pBLAS #define M_PDGEMV pdgemv_ @@ -116,11 +112,13 @@ extern int M_DSKPFA(const char *uplo, const char *mthd, const int *n, double *work, const int *lwork, int *info); extern int M_ZSKPFA(const char *uplo, const char *mthd, const int *n, double complex *a, const int *lda, double complex *pfaff, int *iwork, - double complex *work, const int *lwork, -#ifndef _pfaffine - double *rwork, -#endif - int *info); + double complex *work, const int *lwork, double *rwork, int *info); +extern int M_DSKTRF(const char *uplo, const char *mode, const int *n, + double *a, const int *lda, int *ipiv, + double *work, const int *lwork, int *info); +extern int M_ZSKTRF(const char *uplo, const char *mode, const int *n, + double complex *a, const int *lda, int *ipiv, + double complex *work, const int *lwork, int *info); // pBLAS extern void M_PDGEMV(const char *trans, const int *m, const int *n, diff --git a/src/mVMC/locgrn.c b/src/mVMC/locgrn.c index 0f8837c3..b1fdd7c5 100644 --- a/src/mVMC/locgrn.c +++ b/src/mVMC/locgrn.c @@ -392,12 +392,7 @@ double complex calculateNewPfMN_child(const int qpidx, const int n, const int *m /* calculate Pf M */ //M_DSKPFA(&uplo, &mthd, &nn, mat, &lda, &pfaff, iwork, work, &lwork, &info); //M_ZSKPFA(&uplo, &mthd, &n, mat, &lda, &pfaff, iwork, work, &lwork, rwork, &info); //TBC -#ifdef _pfaffine - info = 1; // Skip inverse. - M_ZSKPFA(&uplo, &mthd, &n, mat, &lda, &pfaff, iwork, work, &lwork/*, rwork*/, &info); -#else M_ZSKPFA(&uplo, &mthd, &n, mat, &lda, &pfaff, iwork, work, &lwork, rwork, &info); -#endif sgn = ( (n*(n-1)/2)%2==0 ) ? 1.0 : -1.0; return sgn * pfaff * PfM[qpidx]; diff --git a/src/mVMC/locgrn_real.c b/src/mVMC/locgrn_real.c index 4991a54e..82cc4037 100644 --- a/src/mVMC/locgrn_real.c +++ b/src/mVMC/locgrn_real.c @@ -397,9 +397,6 @@ double calculateNewPfMN_real_child(const int qpidx, const int n, const int *msa, } /* calculate Pf M */ - // TODO: Maybe block updating is faster than recalculation of Pfaffian. - // Maybe I'll also give support for this in Pfaffine. - info = 1; // Skip inverse. M_DSKPFA(&uplo, &mthd, &nn, mat, &lda, &pfaff, iwork, work, &lwork, &info); sgn = ( (n*(n-1)/2)%2==0 ) ? 1.0 : -1.0; diff --git a/src/mVMC/makefile_src b/src/mVMC/makefile_src index 52ac8076..14513558 100644 --- a/src/mVMC/makefile_src +++ b/src/mVMC/makefile_src @@ -1,8 +1,8 @@ include ../make.sys PFAPACK = ../pfapack/fortran/libpfapack.a -PFAFFINE = ../pfaffine/src/libpfaffine.a PFUPDATES = ../pfupdates/pfupdates.o +LTL2INV = ../ltl2inv/ltl2inv.o SFMT = ../sfmt/SFMT.o STDFACE = ../StdFace/src/libStdFace.a OPTION = -D_mpi_use @@ -19,7 +19,7 @@ OBJS = \ splitloop.o \ vmcmain.o \ $(PFAPACK) $(SFMT) $(STDFACE) \ - $(PFUPDATES) $(PFAFFINE) + $(PFUPDATES) $(LTL2INV) SOURCES = \ average.c \ @@ -107,7 +107,7 @@ HEADERS = \ all : $(MAKE) -C ../pfapack/fortran libpfapack.a - $(MAKE) -C ../pfaffine/src libpfaffine.a + $(MAKE) -C ../ltl2inv -f makefile_ltl2inv $(MAKE) -C ../pfupdates -f makefile_pfupdates $(MAKE) -C ../sfmt -f makefile_sfmt $(MAKE) -C ../StdFace/src -f makefile_StdFace libStdFace.a @@ -130,7 +130,7 @@ clean : rm -f *.o vmc.out vmcdry.out $(MAKE) -C ../sfmt -f makefile_sfmt clean $(MAKE) -C ../pfapack/fortran -f makefile clean - $(MAKE) -C ../pfaffine -f makefile clean + $(MAKE) -C ../ltl2inv -f makefile_ltl2inv clean $(MAKE) -C ../pfupdates -f makefile_pfupdates clean $(MAKE) -C ../StdFace/src -f makefile_StdFace clean $(MAKE) -C ../ComplexUHF -f makefile_uhf clean diff --git a/src/mVMC/matrix.c b/src/mVMC/matrix.c index a86330ca..97e91a67 100644 --- a/src/mVMC/matrix.c +++ b/src/mVMC/matrix.c @@ -69,11 +69,7 @@ int getLWork_fcmp() { lwork=-1; M_ZGETRI(&n, &a, &lda, &iwork, &optSize1, &lwork, &info); lwork=-1; -#ifdef _pfaffine - M_ZSKPFA(&uplo, &mthd, &n, &a, &lda, &pfaff, &iwork, &optSize2, &lwork/*, &rwork*/, &info); -#else M_ZSKPFA(&uplo, &mthd, &n, &a, &lda, &pfaff, &iwork, &optSize2, &lwork, &rwork, &info); -#endif lwork = (creal(optSize1)>creal(optSize2)) ? (int)creal(optSize1) : (int)creal(optSize2); return lwork; diff --git a/src/mVMC/pfupdate.c b/src/mVMC/pfupdate.c index 42b82b35..5dc67cec 100644 --- a/src/mVMC/pfupdate.c +++ b/src/mVMC/pfupdate.c @@ -352,12 +352,7 @@ double complex calculateNewPfMBFN4_child(const int qpidx, const int n, const int /* Calculate Pf M */ //TODO: CHECK rwork is real <-- [R-Xu] Not needed anymore? -#ifdef _pfaffine - info = 1; // Skipping inverse. - M_ZSKPFA(&uplo, &mthd, &nn, mat, &lda, &pfaff, iwork, work, &lwork/*, rwork*/, &info); -#else M_ZSKPFA(&uplo, &mthd, &nn, mat, &lda, &pfaff, iwork, work, &lwork, rwork, &info); -#endif //M_DSKPFA(&uplo, &mthd, &nn, mat, &lda, &pfaff, iwork, work, &lwork, &info); sgn = ( (n*(n-1)/2)%2==0 ) ? 1.0 : -1.0; @@ -593,12 +588,7 @@ double complex updateMAll_BF_fcmp_child( } /* Calculate Pf M */ -#ifdef _pfaffine - info = 1; // Skip Pfaffine inverse. - M_ZSKPFA(&uplo, &mthd, &nn, mat, &lda, &pfaff, iwork, work, &lwork/*, rwork*/, &info); -#else M_ZSKPFA(&uplo, &mthd, &nn, mat, &lda, &pfaff, iwork, work, &lwork, rwork, &info); -#endif //M_DSKPFA(&uplo, &mthd, &nn, invM, &lda, &pfaff, iwork, work, &lwork, &info); //M_DSKPFA(&uplo, &mthd, &nn, mat, &lda, &pfaff, iwork, work, &lwork, &info); diff --git a/src/mVMC/pfupdate_real.c b/src/mVMC/pfupdate_real.c index 2b25909d..690b7c86 100644 --- a/src/mVMC/pfupdate_real.c +++ b/src/mVMC/pfupdate_real.c @@ -361,8 +361,6 @@ double calculateNewPfMBFN4_real_child(const int qpidx, const int n, const int *m } /* calculate Pf M */ - //M_ZSKPFA(&uplo, &mthd, &nn, mat, &lda, &pfaff, iwork, work, &lwork, rwork, &info); - info = 1; // Skip Pfaffine's inverse. M_DSKPFA(&uplo, &mthd, &nn, mat, &lda, &pfaff, iwork, work, &lwork, &info); sgn = ( (n*(n-1)/2)%2==0 ) ? 1.0 : -1.0; @@ -547,7 +545,7 @@ double updateMAll_BF_real_child(const int qpidx, const int n, const int *msa, // NOTE: This routines is not called in current version (i.e. lcoal coverage 0), // hence cannot be tested. I'm keeping GETRF and GETRI here. // TODO: If anyone's interested in utilizing this routine, she or he might want to - // utilize inverse feature of Pfaffine skpfa. + // utilize DSKTRF+LTL2INV m=nn=lda=n2; //M_ZGETRF(&m, &nn, invMat, &lda, iwork2, &info); /* ipiv = iwork */ M_DGETRF(&m, &nn, invMat, &lda, iwork2, &info); /* ipiv = iwork */ @@ -601,8 +599,6 @@ double updateMAll_BF_real_child(const int qpidx, const int n, const int *msa, /* calculate Pf M */ //M_ZSKPFA(&uplo, &mthd, &nn, mat, &lda, &pfaff, iwork, work, &lwork, rwork, &info); //M_DSKPFA(&uplo, &mthd, &nn, invM, &lda, &pfaff, iwork, work, &lwork, &info); - // As stated above, I'm now only setting Pfaffine to skip optinal inverse. - info = 1; // This is parameter for skipping inversion. M_DSKPFA(&uplo, &mthd, &nn, mat, &lda, &pfaff, iwork, work, &lwork, &info); sgn = ( (n*(n-1)/2)%2==0 ) ? 1.0 : -1.0; diff --git a/src/pfaffine b/src/pfaffine deleted file mode 160000 index ebbb37ee..00000000 --- a/src/pfaffine +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ebbb37ee4ac9b08b0907e81c5b593df5c975514a From 2f5a1a01fa4f4d8a06a29fbd8759d9fb4b7b6655 Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Sun, 13 Mar 2022 21:06:00 +0900 Subject: [PATCH 06/73] Install LTL2Inv to PfUpdates & matrix.c - Pull headers from old Pfaffine + Add Pfapack77 linkage + Complete GEMMT + Add LAPACK linkage - Adapt PfUpdates - Remove boost C++ from PfUpdates - Remove Pfaffine from mVMC --- src/{ltl2inv => common}/blalink.hh | 140 ++++++++++++++++-- src/{ltl2inv => common}/blalink_fort.h | 25 ++++ src/{ltl2inv => common}/colmaj.hh | 0 src/ltl2inv/invert.tcc | 50 ++++++- src/ltl2inv/ltl2inv.cc | 8 +- src/ltl2inv/makefile_ltl2inv | 4 +- src/ltl2inv/pfaffian.tcc | 29 ++++ src/ltl2inv/testinv.cc | 56 ++++++-- src/ltl2inv/testinv.x | Bin 0 -> 1751606 bytes src/mVMC/include/blas_externs.h | 4 + src/mVMC/matrix.c | 188 ++++++------------------- src/pfupdates/makefile_pfupdates | 5 +- src/pfupdates/orbital_mat.tcc | 21 +-- src/pfupdates/skmv.tcc | 2 +- src/pfupdates/skr2k.tcc | 34 +++++ src/pfupdates/skslc.tcc | 33 +++++ src/pfupdates/updated_tdi.tcc | 184 +++++------------------- tool/makefile_tool | 6 +- 18 files changed, 444 insertions(+), 345 deletions(-) rename src/{ltl2inv => common}/blalink.hh (76%) rename src/{ltl2inv => common}/blalink_fort.h (78%) rename src/{ltl2inv => common}/colmaj.hh (100%) create mode 100755 src/ltl2inv/testinv.x create mode 100644 src/pfupdates/skr2k.tcc create mode 100644 src/pfupdates/skslc.tcc diff --git a/src/ltl2inv/blalink.hh b/src/common/blalink.hh similarity index 76% rename from src/ltl2inv/blalink.hh rename to src/common/blalink.hh index fe218cc9..0d1cc3e3 100644 --- a/src/ltl2inv/blalink.hh +++ b/src/common/blalink.hh @@ -8,6 +8,7 @@ */ #pragma once #include +#include typedef std::complex ccscmplx; typedef std::complex ccdcmplx; // BLIS definitions. @@ -221,8 +222,8 @@ inline void trmm(side_t sidea, cchar##trmm_(&si, &ul, &tr, &dg, \ &m, &n, \ (ctype *)&alpha, \ - (ctype *)&a, &lda, \ - (ctype *)&b, &ldb); \ + (ctype *)a, &lda, \ + (ctype *)b, &ldb); \ } #endif BLALINK_MAC( float, float, s ) @@ -240,6 +241,7 @@ inline void trmv(uplo_t uploa, T alpha, T *a, inc_t lda, T *x, inc_t incx); +#ifndef BLAS_EXTERNAL #define BLALINK_MAC(cctype, ctype, cchar) \ template <> inline void trmv(uplo_t uploa, trans_t transa, dim_t m, \ cctype alpha, \ @@ -252,9 +254,7 @@ inline void trmv(uplo_t uploa, (ctype *)a, 1, lda, \ (ctype *)x, incx); \ } -/* - * TRMV has alpha in its templated interface, which is absent in BLAS. - * +#else #define BLALINK_MAC(cctype, ctype, cchar) \ template <> inline void trmv(uplo_t uploa, trans_t transa, dim_t m, \ cctype alpha, \ @@ -264,11 +264,15 @@ inline void trmv(uplo_t uploa, char ul = uplo2char(uploa), \ tr = trans2char(transa), \ dg = 'N'; \ + /* + * TRMV has alpha in its templated interface, which is absent in BLAS. + */ \ + assert(alpha == cctype(1.0)); \ cchar##trmv_(&ul, &tr, &dg, &m, \ (ctype *)a, &lda, \ - (ctype *)x, *incx); \ + (ctype *)x, &incx); \ } - */ +#endif BLALINK_MAC( float, float, s ) BLALINK_MAC( double, double, d ) BLALINK_MAC( ccscmplx, scomplex, c ) @@ -380,10 +384,88 @@ inline T dot(dim_t n, #endif BLALINK_MAC( float, float, s, dot ) BLALINK_MAC( double, double, d, dot ) -BLALINK_MAC( ccscmplx, scomplex, c, dotc ) -BLALINK_MAC( ccdcmplx, dcomplex, z, dotc ) +#if defined(BLAS_EXTERNAL) && defined(F77_COMPLEX_RET_INTEL) +// Intel style complex return. +#undef BLALINK_MAC +#define BLALINK_MAC(cctype, ctype, cchar, cfunc) \ + template <> inline cctype dot(dim_t n, \ + cctype *sx, inc_t incx, \ + cctype *sy, inc_t incy) \ + { \ + cctype rho; \ + cchar##cfunc##_((ctype *)&rho, &n, \ + (ctype *)sx, &incx, \ + (ctype *)sy, &incy); \ + return rho; \ + } +#endif +BLALINK_MAC( ccscmplx, scomplex, c, dotu ) +BLALINK_MAC( ccdcmplx, dcomplex, z, dotu ) +#undef BLALINK_MAC + + +// gemmt is not part of BLAS standard. +// It's currently know as exposed by BLIS and MKL. +template +inline void gemmt(uplo_t uploc, + trans_t transa, trans_t transb, + dim_t m, dim_t k, + T alpha, + T *a, inc_t lda, + T *b, inc_t ldb, + T beta, + T *c, inc_t ldc); +#if !( defined(BLAS_EXTERNAL) && defined(MKL) ) +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void gemmt(uplo_t uploc, \ + trans_t transa, trans_t transb, \ + dim_t m, dim_t k, \ + cctype alpha, \ + cctype *a, inc_t lda, \ + cctype *b, inc_t ldb, \ + cctype beta, \ + cctype *c, inc_t ldc) \ + { \ + bli_##cchar##gemmt(uploc, \ + transa, transb, \ + m, k, \ + (ctype *)&alpha, \ + (ctype *)a, 1, lda, \ + (ctype *)b, 1, ldb, \ + (ctype *)&beta, \ + (ctype *)c, 1, ldc); \ + } +#else +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void gemmt(uplo_t uploc, \ + trans_t transa, trans_t transb, \ + dim_t m, dim_t k, \ + cctype alpha, \ + cctype *a, inc_t lda, \ + cctype *b, inc_t ldb, \ + cctype beta, \ + cctype *c, inc_t ldc) \ + { \ + char ul = uplo2char(uploc); \ + char ta = trans2char(transa); \ + char tb = trans2char(transb); \ + cchar##gemmt_(&ul, \ + &ta, &tb, \ + &m, &k, \ + (ctype *)&alpha, \ + (ctype *)a, &lda, \ + (ctype *)b, &ldb, \ + (ctype *)&beta, \ + (ctype *)c, &ldc); \ + } +#endif +BLALINK_MAC( float, float, s ) +BLALINK_MAC( double, double, d ) +BLALINK_MAC( ccscmplx, scomplex, c ) +BLALINK_MAC( ccdcmplx, dcomplex, z ) #undef BLALINK_MAC + // [LAPACK] lacpy template inline void lacpy(uplo_t uploa, @@ -455,3 +537,43 @@ BLALINK_MAC( ccscmplx, scomplex, c ) BLALINK_MAC( ccdcmplx, dcomplex, z ) #undef BLALINK_MAC +// [PFAPACK] skpfa +template +inline int skpfa(uplo_t uploa, + dim_t n, + T *a, inc_t lda, + T *pfa, int *ipiv, + T *work, dim_t lwork); +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline int skpfa(uplo_t uploa, \ + dim_t n, \ + cctype *a, inc_t lda, \ + cctype *pfa, int *ipiv, \ + cctype *work, dim_t lwork) \ + { \ + char ul = uplo2char(uploa); \ + char mthd = 'P'; \ + int info; \ + cchar##skpfa_(&ul, &mthd, &n, a, &lda, pfa, ipiv, work, &lwork, &info); \ + return info; \ + } +BLALINK_MAC( float, float, s ) +BLALINK_MAC( double, double, d ) +#undef BLALINK_MAC +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline int skpfa(uplo_t uploa, \ + dim_t n, \ + cctype *a, inc_t lda, \ + cctype *pfa, int *ipiv, \ + cctype *work, dim_t lwork) \ + { \ + char ul = uplo2char(uploa); \ + char mthd = 'P'; \ + int info; \ + cchar##skpfa_(&ul, &mthd, &n, a, &lda, pfa, ipiv, work, &lwork, 0, &info); \ + return info; \ + } +BLALINK_MAC( ccscmplx, scomplex, c ) +BLALINK_MAC( ccdcmplx, dcomplex, z ) +#undef BLALINK_MAC + diff --git a/src/ltl2inv/blalink_fort.h b/src/common/blalink_fort.h similarity index 78% rename from src/ltl2inv/blalink_fort.h rename to src/common/blalink_fort.h index 3dd402d8..c9323a73 100644 --- a/src/ltl2inv/blalink_fort.h +++ b/src/common/blalink_fort.h @@ -137,6 +137,26 @@ float sdot_(dim_t *n, float *sx, dim_t *incx, float *sy, dim_t *incy); double ddot_(dim_t *n, double *sx, dim_t *incx, double *sy, dim_t *incy); scomplex cdotc_(dim_t *n, void *sx, dim_t *incx, void *sy, dim_t *incy); dcomplex zdotc_(dim_t *n, void *sx, dim_t *incx, void *sy, dim_t *incy); +#ifndef F77_COMPLEX_RET_INTEL +scomplex cdotu_(dim_t *n, void *sx, dim_t *incx, void *sy, dim_t *incy); +dcomplex zdotu_(dim_t *n, void *sx, dim_t *incx, void *sy, dim_t *incy); +#else +void cdotu_(scomplex *rho, dim_t *n, void *sx, dim_t *incx, void *sy, dim_t *incy); +void zdotu_(dcomplex *rho, dim_t *n, void *sx, dim_t *incx, void *sy, dim_t *incy); +#endif + +// gemmt is not part of BLAS standard, +// but exposed by BLIS>v0.8 and recent versions of MKL. +#ifdef MKL +void sgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, float *alpha, + float *a, dim_t *lda, float *b, dim_t *ldb, float *beta, float *c, dim_t *ldc); +void dgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, double *alpha, + double *a, dim_t *lda, double *b, dim_t *ldb, double *beta, double *c, dim_t *ldc); +void cgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, void *alpha, + void *a, dim_t *lda, void *b, dim_t *ldb, void *beta, void *c, dim_t *ldc); +void zgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, void *alpha, + void *a, dim_t *lda, void *b, dim_t *ldb, void *beta, void *c, dim_t *ldc); +#endif // } #endif @@ -164,6 +184,11 @@ void dsktrf_(char *uplo, char *mode, dim_t *n, double *a, dim_t *lda, int *ipiv, void csktrf_(char *uplo, char *mode, dim_t *n, void *a, dim_t *lda, int *ipiv, void *work, dim_t *lwork, int *info); void zsktrf_(char *uplo, char *mode, dim_t *n, void *a, dim_t *lda, int *ipiv, void *work, dim_t *lwork, int *info); +void sskpfa_(char *uplo, char *mthd, dim_t *n, float *a, dim_t *lda, float *pfa, int *ipiv, float *work, dim_t *lwork, int *info); +void dskpfa_(char *uplo, char *mthd, dim_t *n, double *a, dim_t *lda, double *pfa, int *ipiv, double *work, dim_t *lwork, int *info); +void cskpfa_(char *uplo, char *mthd, dim_t *n, void *a, dim_t *lda, void *pfa, int *ipiv, void *work, dim_t *lwork, void *rwork, int *info); +void zskpfa_(char *uplo, char *mthd, dim_t *n, void *a, dim_t *lda, void *pfa, int *ipiv, void *work, dim_t *lwork, void *rwork, int *info); + // } #ifdef __cplusplus diff --git a/src/ltl2inv/colmaj.hh b/src/common/colmaj.hh similarity index 100% rename from src/ltl2inv/colmaj.hh rename to src/common/colmaj.hh diff --git a/src/ltl2inv/invert.tcc b/src/ltl2inv/invert.tcc index cf88c36b..aab21ed8 100644 --- a/src/ltl2inv/invert.tcc +++ b/src/ltl2inv/invert.tcc @@ -49,9 +49,9 @@ void ltl2inv(int n, T *A_, int ldA, int *iPiv, T *vT, T *M_, int ldM) if (iPiv[j]-1 != j) swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); - // TODO: GEMMT? + // TODO: Write triangular also. trmm(BLIS_LEFT, BLIS_LOWER, BLIS_TRANSPOSE, BLIS_UNIT_DIAG, - n, n, T(1.0), &M(0, 0), ldM, &A(0, 0), ldA); + n, n, T(1.0), &M(0, 0), ldM, &A(0, 0), ldA); // In-place permute rows. for (int i = n-1; i >= 0; --i) @@ -59,3 +59,49 @@ void ltl2inv(int n, T *A_, int ldA, int *iPiv, T *vT, T *M_, int ldM) swap(n, &A(i, 0), ldA, &A(iPiv[i]-1, 0), ldA); } +template +void utu2inv(int n, T *A_, int ldA, int *iPiv, T *vT, T *M_, int ldM) +{ + colmaj A(A_, ldA); + colmaj M(M_, ldM); + + // Set M. + for (int j = 0; j < n; ++j) + for (int i = 0; i < n; ++i) + M(i, j) = T(!(i - j)); + + trtri(BLIS_UPPER, BLIS_UNIT_DIAG, n-1, &A(0, 1), ldA); + lacpy(BLIS_UPPER, n-2, n-2, &A(0, 2), ldA, &M(0, 1), ldM); + + for (int i = 0; i < n-1; ++i) + vT[i] = -A(i, i+1); + sktdsmx(n, vT, &M(0, 0), ldM, &A(0, 0), ldA); + + // In-place permute columns. + for (int j = 0; j < n; ++j) + if (iPiv[j]-1 != j) + swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); + + // TODO: Write triangular also. + trmm(BLIS_LEFT, BLIS_UPPER, BLIS_TRANSPOSE, BLIS_UNIT_DIAG, + n, n, T(1.0), &M(0, 0), ldM, &A(0, 0), ldA); + + // In-place permute rows. + for (int i = 0; i < n; ++i) + if (iPiv[i]-1 != i) + swap(n, &A(i, 0), ldA, &A(iPiv[i]-1, 0), ldA); +} + +template +void ltl2inv(uplo_t uplo, int n, T *A_, int ldA, int *iPiv, T *vT, T *M_, int ldM) +{ + switch (uplo) { + case BLIS_LOWER: + ltl2inv(n, A_, ldA, iPiv, vT, M_, ldM); break; + case BLIS_UPPER: + utu2inv(n, A_, ldA, iPiv, vT, M_, ldM); break; + default: + break; + } +} + diff --git a/src/ltl2inv/ltl2inv.cc b/src/ltl2inv/ltl2inv.cc index c490fb52..9086b73b 100644 --- a/src/ltl2inv/ltl2inv.cc +++ b/src/ltl2inv/ltl2inv.cc @@ -16,10 +16,10 @@ void ltl2inv_c(int n, ccscmplx *A_, int ldA, int *iPiv, ccscmplx *vT, ccscmplx * void ltl2inv_z(int n, ccdcmplx *A_, int ldA, int *iPiv, ccdcmplx *vT, ccdcmplx *M_, int ldM) { ltl2inv(n, A_, ldA, iPiv, vT, M_, ldM); } -void ltl2pfa_s(int n, float *A_, int ldA, int *iPiv) { ltl2pfa(n, A_, ldA, iPiv); } -void ltl2pfa_d(int n, double *A_, int ldA, int *iPiv) { ltl2pfa(n, A_, ldA, iPiv); } -void ltl2pfa_c(int n, ccscmplx *A_, int ldA, int *iPiv) { ltl2pfa(n, A_, ldA, iPiv); } -void ltl2pfa_z(int n, ccdcmplx *A_, int ldA, int *iPiv) { ltl2pfa(n, A_, ldA, iPiv); } +void ltl2pfa_s(int n, float *A_, int ldA, int *iPiv, float *Pfa) { *Pfa = ltl2pfa(n, A_, ldA, iPiv); } +void ltl2pfa_d(int n, double *A_, int ldA, int *iPiv, double *Pfa) { *Pfa = ltl2pfa(n, A_, ldA, iPiv); } +void ltl2pfa_c(int n, ccscmplx *A_, int ldA, int *iPiv, ccscmplx *Pfa) { *Pfa = ltl2pfa(n, A_, ldA, iPiv); } +void ltl2pfa_z(int n, ccdcmplx *A_, int ldA, int *iPiv, ccdcmplx *Pfa) { *Pfa = ltl2pfa(n, A_, ldA, iPiv); } } diff --git a/src/ltl2inv/makefile_ltl2inv b/src/ltl2inv/makefile_ltl2inv index c08c9719..e17ee070 100644 --- a/src/ltl2inv/makefile_ltl2inv +++ b/src/ltl2inv/makefile_ltl2inv @@ -6,10 +6,12 @@ endif OBJ = ltl2inv.o SRC = ltl2inv.cc -HDR = blalink.hh blalink_fort.h colmaj.hh invert.tcc pfaffian.tcc +HDR = invert.tcc pfaffian.tcc \ + ../common/blalink.hh ../common/blalink_fort.h ../common/colmaj.hh $(OBJ): $(SRC) $(HDR) $(CXX) $(CXXFLAGS) -D_CC_IMPL -c $< -o $@ \ + -I../common \ -I$(BLIS_ROOT)/include \ -I$(BLIS_ROOT)/include/blis diff --git a/src/ltl2inv/pfaffian.tcc b/src/ltl2inv/pfaffian.tcc index 58b525a1..c62836fc 100644 --- a/src/ltl2inv/pfaffian.tcc +++ b/src/ltl2inv/pfaffian.tcc @@ -17,7 +17,36 @@ T ltl2pfa(int n, T *A_, int ldA, int *iPiv) pfa *= -A(i+1, i); if (iPiv[i+1]-1 != i+1) pfa = -pfa; + if (iPiv[i+2]-1 != i+2) pfa = -pfa; } return pfa; } +template +T utu2pfa(int n, T *A_, int ldA, int *iPiv) +{ + T pfa = 1.0; + colmaj A(A_, ldA); + + for (int i = 0; i < n; i += 2) { + pfa *= A(i, i+1); + + if (iPiv[i+1]-1 != i+1) pfa = -pfa; + if (iPiv[i+2]-1 != i+2) pfa = -pfa; + } + return pfa; +} + +template +T ltl2pfa(uplo_t uplo, int n, T *A_, int ldA, int *iPiv) +{ + switch (uplo) { + case BLIS_LOWER: + return ltl2pfa(n, A_, ldA, iPiv); + case BLIS_UPPER: + return utu2pfa(n, A_, ldA, iPiv); + default: + return 0.0; + } +} + diff --git a/src/ltl2inv/testinv.cc b/src/ltl2inv/testinv.cc index dc256e8c..9da6c59e 100644 --- a/src/ltl2inv/testinv.cc +++ b/src/ltl2inv/testinv.cc @@ -1,11 +1,12 @@ #include #include +#include #include "colmaj.hh" #include "invert.tcc" template -double test_ltl2inv(int n) +double test_decomp2inv(uplo_t uplo, int n) { colmaj A(new T[n * n], n); colmaj M(new T[n * n], n); @@ -13,6 +14,12 @@ double test_ltl2inv(int n) int *ipiv = new int[n]; T *vT = new T[n-1]; + assert(&A(0, 0)); + assert(&M(0, 0)); + assert(&X(0, 0)); + assert(ipiv); + assert(vT); + for (int j = 0; j < n; ++j) { A(j, j) = 0.0; X(j, j) = 0.0; @@ -22,12 +29,26 @@ double test_ltl2inv(int n) A(i, j) /= RAND_MAX; A(j, i) = -A(i, j); - X(i, j) = A(i, j); + switch (uplo) { + case BLIS_LOWER: + X(i, j) = A(i, j); break; + case BLIS_UPPER: + X(j, i) = A(j, i); break; + default: + break; + } } } - sktrf(BLIS_LOWER, n, &X(0, 0), n, ipiv, &M(0, 0), n*n); - ltl2inv(n, &X(0, 0), n, ipiv, vT, &M(0, 0), n); + sktrf(uplo, n, &X(0, 0), n, ipiv, &M(0, 0), n*n); + switch (uplo) { + case BLIS_LOWER: + ltl2inv(n, &X(0, 0), n, ipiv, vT, &M(0, 0), n); break; + case BLIS_UPPER: + utu2inv(n, &X(0, 0), n, ipiv, vT, &M(0, 0), n); break; + default: + break; + } gemm(BLIS_NO_TRANSPOSE, BLIS_NO_TRANSPOSE, n, n, n, @@ -38,10 +59,16 @@ double test_ltl2inv(int n) &M(0, 0), n); #ifdef VERBOSE + printf("iPiv = [ "); for (int i = 0; i < n; ++i) printf("%d ", ipiv[i]); - printf("\n"); + printf("]\n"); + printf("vT = [ "); + for (int i = 0; i < n-1; ++i) + printf("%f ", vT[i]); + printf("]\n"); + printf("A*inv(A) =\n"); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) printf("%10.6f ", M(i, j)); @@ -66,12 +93,19 @@ double test_ltl2inv(int n) int main(void) { - printf("double 10x10 err=%e.\n", test_ltl2inv(10)); - printf("float 10x10 err=%e.\n", test_ltl2inv(10)); - printf("dcomplex 10x10 err=%e.\n", test_ltl2inv(10)); - printf("double 200x200 err=%e.\n", test_ltl2inv(200)); - printf("float 200x200 err=%e.\n", test_ltl2inv(200)); - printf("dcomplex 200x200 err=%e.\n", test_ltl2inv(200)); + printf("double 10x10 lower err=%e.\n", test_decomp2inv (BLIS_LOWER, 10)); + printf("float 10x10 lower err=%e.\n", test_decomp2inv (BLIS_LOWER, 10)); + printf("dcomplex 10x10 lower err=%e.\n", test_decomp2inv(BLIS_LOWER, 10)); + printf("double 200x200 lower err=%e.\n", test_decomp2inv (BLIS_LOWER, 200)); + printf("float 200x200 lower err=%e.\n", test_decomp2inv (BLIS_LOWER, 200)); + printf("dcomplex 200x200 lower err=%e.\n", test_decomp2inv(BLIS_LOWER, 200)); + + printf("double 10x10 upper err=%e.\n", test_decomp2inv (BLIS_UPPER, 10)); + printf("float 10x10 upper err=%e.\n", test_decomp2inv (BLIS_UPPER, 10)); + printf("dcomplex 10x10 upper err=%e.\n", test_decomp2inv(BLIS_UPPER, 10)); + printf("double 200x200 upper err=%e.\n", test_decomp2inv (BLIS_UPPER, 200)); + printf("float 200x200 upper err=%e.\n", test_decomp2inv (BLIS_UPPER, 200)); + printf("dcomplex 200x200 upper err=%e.\n", test_decomp2inv(BLIS_UPPER, 200)); return 0; } diff --git a/src/ltl2inv/testinv.x b/src/ltl2inv/testinv.x new file mode 100755 index 0000000000000000000000000000000000000000..c6f41bf0f2ec84571159d394c3dc9681f2f075f2 GIT binary patch literal 1751606 zcmeFa3wTuJx%d67SviMOAdry6WCB_wcxX2us9+{U#S%qQ%nGn%Ts9V47wq|O431k;f*owARw{N#IIYU5g5y{A8=l$Jl%}gd?f>_(V zzwf%>x`vsxp40u@&wYCC=f75d_vNww8lse@_-Emh%4b=;Qjb(t%PlpQ&vkrCN^UBc zea&sx%)e3Y_Wx%z?tkmFE9qw)1C*2$Uvq15|6;TK$o@B#c^%7L`9PBKucYL@yVl(o zyx?nKfA@aJoXk_}QjAJ+9n)7`E-E80OG?(>cmLwG;adayOQ=gRm@`F);GbLzpF;l< zg8jim<6lWh`RY|``v@G^pY3_GzY7!0`f}ZmzFe)Jtt-Fl-up`KD_cCU zzhy6*{Y?)xkn2eLLj8okp>OSd-(S9JY4FCt{#?QSF3&M5$aUnufqj>h+`sC9<*SyI zEMIl^YAO!w@Bh4S(zi|ofPZp5un)7u{J*5+u4N^6f4^+yU7_p#@^b5EW`DKA&2qWc zBRd%ITZVm#Pf5wu1;qs=g*VP!5R|@=rqJ6$4TAC)yp}%YBeFSy59_eHZ&e5H&lM(S zWIwv%=tKAu`X_XKK<6f1p}TzB2GGT|@y}*{h3E>3Bkh-z-B)Io$^V1(mmcK5^dBa% zuUYsP`nBx)ca<$E`9azDMJopOm;ODIzHbLx$aQ3YqryFzKf?V5$sE|qz0n36n$N}a`mdvoq_aOZ#U=L8LGhdnfenpoA&bh z@6Ii{=IZYTrA<|a)-|a3T+6@9t}w5Ku1MOZC{-zPC+%#>N=*)4+Z-cR?IotIPM6}} z(eKSlS;wcVb!8SsRdtiJ<6rkY^YaS4co910nzy6=zbz+SwL~cy#yu+^v2T~&zxMl= z-m`r1rAr>XX9?HxFO!eZ@j+4S{(V!YRXo;y^L^P3`+xrr+_UmA=Oi9xi1FLx-D{RS z%8dE(E&ncLD$&SmHuFOZuB9>HLy87PxE?u^I?RnxX!As&VVwf9E)Gjsxd7aE=4#IB<>w z=QwbV1Lrt!jsxd7aE=4#IB<>w=QwbV1Lrt!jsxd7aE=4#IB<>w=QwbV1Lrt!jsxd7 zaE=4#IB<>w=QwbV1Lrt!jsxd7aE=4#IB<>w=QwbV1OFf7KyQ;e)U(0j?y)Opf~uTf zYtO0Q+mutU(kthCla;4HtDNr}t~?jq8MC7?L2Xl&+0IT~If0z^baT%)+~)Bn+dS4# zxylKbe-=?bGE`pKSKi4zX{(K8j8V!nBveOP!+m@#eT*{4h!2%l_LcuJqTGK+kVcgo zZvQ(ehekD|a=xoDr~Y`TPGw)61Hn43!jk$=Lgi{)xR3uGQSJ?uSN4_vDoBI0|0quXQfF%qOGUf{gogOWp6e zZ`IUGrc9sj+=p!EHlFVsXQ`au#P9N>=R5yI9T)QnwRvrjHnT!)MqJ>0N7^ulP@7*5 z(q?g}&6EqAP1LE?7j<74g`S5)^=`eu>5+Q&+oIOn6{>g71$u ziliZ`xSH!-d}N(>P)D_@)h>Hl0JGE+E`#>RDRbEu8uz6Sc$`wJ)1MyEU!p3`VcnEk zob9rY4pdVX>f5D{>E3AcadW`ny?#r#*o#n|`zhMNpzRjg@K8&SOOK$L zIo~9G={FmF4dt=3&=|t2?}pmgQ^RA+8W$Sl7n|cVMu<

g`Pn^Nn@*gx|*CP+w%d^xgDiWqArV=Z8;g~732 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%0DD1yQ@`_enb!HV|qv*U!HDw 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 Hygv9plYB7= literal 0 HcmV?d00001 diff --git a/src/mVMC/include/blas_externs.h b/src/mVMC/include/blas_externs.h index 4a05f6e8..7daa6e4a 100644 --- a/src/mVMC/include/blas_externs.h +++ b/src/mVMC/include/blas_externs.h @@ -119,6 +119,10 @@ extern int M_DSKTRF(const char *uplo, const char *mode, const int *n, extern int M_ZSKTRF(const char *uplo, const char *mode, const int *n, double complex *a, const int *lda, int *ipiv, double complex *work, const int *lwork, int *info); +extern void ltl2pfa_d(int n, double *A_, int ldA, int *iPiv, double *Pfa); +extern void ltl2inv_d(int n, double *A_, int ldA, int *iPiv, double *vT, double *M_, int ldM); +extern void ltl2pfa_z(int n, double complex *A_, int ldA, int *iPiv, double complex *Pfa); +extern void ltl2inv_z(int n, double complex *A_, int ldA, int *iPiv, double complex *vT, double complex *M_, int ldM); // pBLAS extern void M_PDGEMV(const char *trans, const int *m, const int *n, diff --git a/src/mVMC/matrix.c b/src/mVMC/matrix.c index 97e91a67..bc4aa634 100644 --- a/src/mVMC/matrix.c +++ b/src/mVMC/matrix.c @@ -32,8 +32,6 @@ along with this program. If not, see http://www.gnu.org/licenses/. #include "./include/global.h" #include "workspace.c" -//int calculateMAll_child_real(const int *eleIdx, const int qpStart, const int qpEnd, const int qpidx, -// double *bufM, int *iwork, double *work, int lwork); #define D_PfLimit 1.0e-100 int getLWork() { @@ -131,7 +129,6 @@ int calculateMAll_child_fsz(const int *eleIdx,const int *eleSpn, const int qpSta int msi,msj; int rsi,rsj; - char uplo='U', mthd='P'; int m,n,nsq,one,lda,info=0; //int nspn = 2*Ne+2*Nsite+2*Nsite+NProj; this is useful? double complex pfaff,minus_one; @@ -143,60 +140,40 @@ int calculateMAll_child_fsz(const int *eleIdx,const int *eleSpn, const int qpSta const double complex *sltE_i; double complex *invM = InvM + qpidx*Nsize*Nsize; - double complex *invM_i; - - double complex *bufM_i, *bufM_i2; + double complex *invM_i, *invM_i2; m=n=lda=Nsize; nsq=n*n; one=1; minus_one=-1.0; - /* store bufM */ - /* Note that bufM is column-major and skew-symmetric. */ - /* bufM[msj][msi] = -sltE[rsi][rsj] */ + /* store invM */ + /* Note that invM is column-major and skew-symmetric. */ + /* invM[msj][msi] = -sltE[rsi][rsj] */ #pragma loop noalias for(msi=0;msi InvM(T) -> -InvM */ M_ZSCAL(&nsq, &minus_one, invM, &one); -#endif return info; } @@ -250,7 +227,6 @@ int calculateMAll_child_fsz_real(const int *eleIdx,const int *eleSpn, const int int msi,msj; int rsi,rsj; - char uplo='U', mthd='P'; int m,n,lda,one,nsq,info=0; //int nspn = 2*Ne+2*Nsite+2*Nsite+NProj; this is useful? double pfaff,minus_one; @@ -262,61 +238,41 @@ int calculateMAll_child_fsz_real(const int *eleIdx,const int *eleSpn, const int const double *sltE_i; double *invM = InvM_real + qpidx*Nsize*Nsize; - double *invM_i; - - double *bufM_i, *bufM_i2; + double *invM_i, *invM_i2; m=n=lda=Nsize; nsq=n*n; one=1; minus_one=-1.0; - /* store bufM */ - /* Note that bufM is column-major and skew-symmetric. */ - /* bufM[msj][msi] = -sltE[rsi][rsj] */ + /* store invM */ + /* Note that invM is column-major and skew-symmetric. */ + /* invM[msj][msi] = -sltE[rsi][rsj] */ #pragma loop noalias for(msi=0;msi InvM(T) -> -InvM */ M_DSCAL(&nsq, &minus_one, invM, &one); -#endif return info; } @@ -380,7 +336,6 @@ int calculateMAll_child_fcmp(const int *eleIdx, const int qpStart, const int qpE int msi,msj; int rsi,rsj; - char uplo='U', mthd='P'; int m,n,nsq,lda,one,info=0; double complex pfaff,minus_one; @@ -391,61 +346,42 @@ int calculateMAll_child_fcmp(const int *eleIdx, const int qpStart, const int qpE const double complex *sltE_i; double complex *invM = InvM + qpidx*Nsize*Nsize; - double complex *invM_i; - - double complex *bufM_i, *bufM_i2; + double complex *invM_i, *invM_i2; m=n=lda=Nsize; nsq=n*n; one=1; minus_one=-1.0; - /* store bufM */ - /* Note that bufM is column-major and skew-symmetric. */ - /* bufM[msj][msi] = -sltE[rsi][rsj] */ + /* store invM */ + /* Note that invM is column-major and skew-symmetric. */ + /* invM[msj][msi] = -sltE[rsi][rsj] */ #pragma loop noalias for(msi=0;msi -InvM according antisymmetric properties. */ M_ZSCAL(&nsq, &minus_one, invM, &one); -#endif return info; } @@ -549,10 +485,6 @@ int calculateMAll_BF_fcmp_child( } } -#ifdef _pfaffine - info=0; /* Fused Pfaffian/inverse computation. */ - M_ZSKPFA(&uplo, &mthd, &n, bufM, &lda, &pfaff, iwork, work, &lwork/*, rwork*/, &info); -#else /* Pfaffian/inverse computed separately. */ /* Copy bufM to invM before using bufM to compute Pfaffian. */ for(msi=0;msi InvM(T) -> -InvM */ M_ZSCAL(&nsq, &minus_one, invM, &one); -#endif return info; } @@ -630,8 +554,6 @@ int CalculateMAll_real(const int *eleIdx, const int qpStart, const int qpEnd) { return info; } -//int calculateMAll_child_real(const int *eleIdx, const int qpStart, const int qpEnd, const int qpidx, -// double *bufM, int *iwork, double *work, int lwork) { int calculateMAll_child_real(const int *eleIdx, const int qpStart, const int qpEnd, const int qpidx, double *bufM, int *iwork, double *work, int lwork, double* PfM_real, double *InvM_real) { #pragma procedure serial @@ -650,60 +572,43 @@ int calculateMAll_child_real(const int *eleIdx, const int qpStart, const int qpE const double *sltE_i; double *invM = InvM_real + qpidx*Nsize*Nsize; - double *invM_i; - - double *bufM_i, *bufM_i2; + double *invM_i, *invM_i2; m=n=lda=Nsize; nsq=n*n; one=1; minus_one=-1.0; - /* store bufM */ - /* Note that bufM is column-major and skew-symmetric. */ - /* bufM[msj][msi] = -sltE[rsi][rsj] */ + /* store invM */ + /* Note that invM is column-major and skew-symmetric. */ + /* invM[msj][msi] = -sltE[rsi][rsj] */ #pragma loop noalias for(msi=0;msi InvM' = -InvM + // TODO: Include this in ltl2inv M_DSCAL(&nsq, &minus_one, invM, &one); -#endif return info; } @@ -789,14 +694,10 @@ int calculateMAll_BF_real_child(const int *eleIdx, const int qpStart, const int } } -#ifdef _pfaffine - info=0; /* Fused Pfaffian/inverse computation. */ -#else /* Pfaffian/inverse computed separately. */ /* Copy bufM to invM before using bufM to compute Pfaffian. */ for(msi=0;msi InvM' = -InvM M_DSCAL(&nsq, &minus_one, invM, &one); -#endif return info; } diff --git a/src/pfupdates/makefile_pfupdates b/src/pfupdates/makefile_pfupdates index ee946fc0..4484795c 100644 --- a/src/pfupdates/makefile_pfupdates +++ b/src/pfupdates/makefile_pfupdates @@ -6,11 +6,12 @@ endif OBJ = pfupdates.o SRC = pf_interface.cc -HDR = pf_interface.h orbital_mat.tcc skmv.tcc updated_tdi.tcc +HDR = pf_interface.h orbital_mat.tcc skmv.tcc skr2k.tcc skslc.tcc updated_tdi.tcc \ + ../common/blalink.hh ../common/blalink_fort.h ../common/colmaj.hh $(OBJ): $(SRC) $(HDR) $(CXX) $(CXXFLAGS) -D_CC_IMPL -c $< -o $@ \ - -I../pfaffine/src \ + -I../common -I../ltl2inv \ -I$(BLIS_ROOT)/include \ -I$(BLIS_ROOT)/include/blis diff --git a/src/pfupdates/orbital_mat.tcc b/src/pfupdates/orbital_mat.tcc index cb8a6117..3e7ccf76 100644 --- a/src/pfupdates/orbital_mat.tcc +++ b/src/pfupdates/orbital_mat.tcc @@ -7,20 +7,10 @@ */ #pragma once #include "blis.h" -#include "colmaj.tcc" +#include "colmaj.hh" #include -#ifdef UseBoost -#include -#include -#include -template -using matrix_t = boost::numeric::ublas::matrix; -template -using vector_t = boost::numeric::ublas::vector; -#else template using matrix_t = colmaj; -#endif template struct orbital_mat @@ -31,16 +21,7 @@ struct orbital_mat orbital_mat(uplo_t uplo_, dim_t nsite_, T *X_, inc_t ldX) : uplo(uplo_), nsite(nsite_), - #ifdef UseBoost - X(nsite, nsite) { - colmaj X_tmp(X_, ldX); - for (dim_t j = 0; j < nsite; ++j) - for (dim_t i = 0; i < nsite; ++i) - X(i, j) = X_tmp(i, j); - } - #else X(X_, ldX) { } - #endif orbital_mat(uplo_t uplo_, dim_t nsite_, matrix_t &X_) : uplo(uplo_), nsite(nsite_), X(X_) { } diff --git a/src/pfupdates/skmv.tcc b/src/pfupdates/skmv.tcc index 5f484c53..2abc2c6d 100644 --- a/src/pfupdates/skmv.tcc +++ b/src/pfupdates/skmv.tcc @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ #pragma once -#include "colmaj.tcc" +#include "colmaj.hh" #include "blalink.hh" #include diff --git a/src/pfupdates/skr2k.tcc b/src/pfupdates/skr2k.tcc new file mode 100644 index 00000000..6d0d893f --- /dev/null +++ b/src/pfupdates/skr2k.tcc @@ -0,0 +1,34 @@ +/** + * \file skr2k.tcc + * Dispatcher and minimal implementation for SKR2k. + * Minimal implementation is used when M is extremely small. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#include "blalink.hh" +#include "colmaj.hh" +#include + + +template +inline void skr2k(uplo_t uploc, + trans_t transab, + dim_t m, dim_t k, + T alpha, + T *_A, inc_t ldA, + T *_B, inc_t ldB, + T beta, + T *_C, inc_t ldC) +{ + T one = 1.0; + if (transab == BLIS_NO_TRANSPOSE) { + gemmt(uploc, BLIS_NO_TRANSPOSE, BLIS_TRANSPOSE, m, k, alpha, _A, ldA, _B, ldB, beta, _C, ldC); + gemmt(uploc, BLIS_NO_TRANSPOSE, BLIS_TRANSPOSE, m, k,-alpha, _B, ldB, _A, ldA, one , _C, ldC); + } else { + gemmt(uploc, BLIS_TRANSPOSE, BLIS_NO_TRANSPOSE, m, k, alpha, _A, ldA, _B, ldB, beta, _C, ldC); + gemmt(uploc, BLIS_TRANSPOSE, BLIS_NO_TRANSPOSE, m, k,-alpha, _B, ldB, _A, ldA, one , _C, ldC); + } +} + diff --git a/src/pfupdates/skslc.tcc b/src/pfupdates/skslc.tcc new file mode 100644 index 00000000..0fd5a4cf --- /dev/null +++ b/src/pfupdates/skslc.tcc @@ -0,0 +1,33 @@ +/** + * \file skslc.tcc + * Get a slice from antisymmetric matrix. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#include "colmaj.hh" + +template +inline signed skslc(uplo_t uploA, + unsigned n, + unsigned i, + T *x, + T *_A, unsigned ldA) +{ + colmaj A(_A, ldA); + x[i] = 0.0; + switch (uploA) { + case BLIS_UPPER: + for (unsigned j = 0; j < i; ++j) + x[j] = A(j, i); + for (unsigned j = i+1; j < n; ++j) + x[j] = -A(i, j); + return 0; + + default: + std::cerr << "SKSLC: Lower triangular storage not implemented. Sorry." << std::endl; + return err_info(Pfaffine_NOT_IMPLEMNTED, 0); + } +} + diff --git a/src/pfupdates/updated_tdi.tcc b/src/pfupdates/updated_tdi.tcc index 63bc035f..8da27da0 100644 --- a/src/pfupdates/updated_tdi.tcc +++ b/src/pfupdates/updated_tdi.tcc @@ -8,12 +8,11 @@ #pragma once #include "orbital_mat.tcc" #include "blalink.hh" -#include "skpfa.hh" -#include "sktdi.hh" +#include "pfaffian.tcc" +#include "invert.tcc" #include "skr2k.tcc" #include "skslc.tcc" #include "skmv.tcc" -#include "optpanel.hh" #include #include @@ -26,8 +25,6 @@ template struct updated_tdi { // Performance tuning constants. const bool single_hop_alpha; ///< Whether to simplify k=1 situations. - const dim_t npanel_big; - const dim_t npanel_sub; // Matrix M. matrix_t M; @@ -42,7 +39,7 @@ template struct updated_tdi { matrix_t W; matrix_t UMU, UMV, VMV; matrix_t Cp; ///< C+BMB = [ W -I; I 0 ] + [ UMU UMV; -UMV VMV ] - matrix_t Gc; ///< Gaussian vectors when tri-diagonalizing C. + matrix_t Gc; ///< Used to be Gaussian vectors. Now just scratchpads. signed *const cPov; ///< Pivot when tri-diagonalizing C. T Pfa; T PfaRatio; //< Updated Pfaffian / Base Pfaffian. @@ -55,11 +52,7 @@ template struct updated_tdi { void initialize() { using namespace std; auto &cfg = elem_cfg; - #ifdef UseBoost - matrix_t G(nelec, nelec); - #else matrix_t G(new T[nelec * nelec], nelec); - #endif from_idx.clear(); to_site.clear(); from_idx.reserve(mmax * sizeof(dim_t)); @@ -81,30 +74,23 @@ template struct updated_tdi { } // Allocate scratchpad. - signed *iPivFull = new signed[nelec + 1]; - dim_t lwork = nelec * npanel_big; - T *pfwork = new T[lwork]; + T *vT = new T[nelec-1]; + signed *iPiv = new signed[nelec]; - #ifdef UseBoost - signed info = skpfa(uplo, nelec, &M(0, 0), M.size1(), &G(0, 0), G.size1(), iPivFull, - true, &Pfa, pfwork, lwork); - #else - signed info = skpfa(uplo, nelec, &M(0, 0), M.ld, &G(0, 0), G.ld, iPivFull, - true, &Pfa, pfwork, lwork); - #endif + // Perform LTL factorization regardless of `uplo`. + signed info = sktrf(uplo, nelec, &M(0, 0), M.ld, iPiv, &G(0, 0), G.ld * nelec); + Pfa = ltl2pfa(uplo, nelec, &M(0, 0), M.ld, iPiv); + ltl2inv(uplo, nelec, &M(0, 0), M.ld, iPiv, vT, &G(0, 0), G.ld); #ifdef _DEBUG cerr << "SKPFA+INV: n=" << nelec << " info=" << info << endl; #endif - delete[] iPivFull; - delete[] pfwork; - #ifndef UseBoost + delete[] vT; + delete[] iPiv; delete[](&G(0, 0)); - #endif } ~updated_tdi() { - #ifndef UseBoost delete[](&U(0, 0)); delete[](&Q(0, 0)); @@ -115,7 +101,6 @@ template struct updated_tdi { delete[](&UMU(0, 0)); delete[](&UMV(0, 0)); delete[](&VMV(0, 0)); - #endif delete[] cPov; } @@ -123,30 +108,14 @@ template struct updated_tdi { updated_tdi(orbital_mat &Xij_, std::vector &cfg, T *M_, inc_t ldM, dim_t mmax_) : Xij(Xij_), nelec(cfg.size()), mmax(mmax_), nq_updated(0), - single_hop_alpha(true), npanel_big(optpanel(nelec, 4)), npanel_sub(4), - #ifdef UseBoost - M(nelec, nelec), - U(nelec, mmax * 2), Q(nelec, mmax * 2), - P(nelec, mmax), W(mmax, mmax), - UMU(mmax, mmax), UMV(mmax, mmax), - VMV(mmax, mmax), Cp(2 * mmax, 2 * mmax), - Gc(2 * mmax, 2 * mmax), - #else - M(M_, ldM), + single_hop_alpha(true), M(M_, ldM), U(new T[nelec * mmax * 2], nelec), Q(new T[nelec * mmax * 2], nelec), P(&Q(0, mmax), Q.ld), W(new T[mmax * mmax], mmax), UMU(new T[mmax * mmax], mmax), UMV(new T[mmax * mmax], mmax), VMV(new T[mmax * mmax], mmax), Cp(new T[2 * mmax * 2 * mmax], 2 * mmax), Gc(new T[2 * mmax * 2 * mmax], 2 * mmax), - #endif cPov(new signed[2 * mmax + 1]), Pfa(0.0), PfaRatio(1.0), elem_cfg(cfg), from_idx(0), to_site(0), uplo(BLIS_UPPER) { - #ifdef UseBoost - colmaj M_tmp(M_, ldM); - for (dim_t j = 0; j < nelec; ++j) - for (dim_t i = 0; i < nelec; ++i) - M(i, j) = M_tmp(i, j); - #endif initialize(); } @@ -154,8 +123,7 @@ template struct updated_tdi { updated_tdi(orbital_mat &Xij_, std::vector &cfg, matrix_t &M_, dim_t mmax_) : Xij(Xij_), nelec(cfg.size()), mmax(mmax_), nq_updated(0), - single_hop_alpha(true), npanel_big(optpanel(nelec, 4)), npanel_sub(4), - M(M_), + single_hop_alpha(true), M(M_), U(new T[nelec * mmax * 2], nelec), Q(new T[nelec * mmax * 2], nelec), P(&Q(0, mmax), Q.ld), W(new T[mmax * mmax], mmax), UMU(new T[mmax * mmax], mmax), UMV(new T[mmax * mmax], mmax), @@ -169,31 +137,14 @@ template struct updated_tdi { // Unsafe construction without initializaion. updated_tdi(orbital_mat &Xij_, dim_t nelec_, T *M_, inc_t ldM, dim_t mmax_) : Xij(Xij_), nelec(nelec_), mmax(mmax_), nq_updated(0), - single_hop_alpha(true), npanel_big(optpanel(nelec, 4)), npanel_sub(4), - #ifdef UseBoost - M(nelec, nelec), - U(nelec, mmax * 2), Q(nelec, mmax * 2), - P(nelec, mmax), W(mmax, mmax), - UMU(mmax, mmax), UMV(mmax, mmax), - VMV(mmax, mmax), Cp(2 * mmax, 2 * mmax), - Gc(2 * mmax, 2 * mmax), - #else - M(M_, ldM), + single_hop_alpha(true), M(M_, ldM), U(new T[nelec * mmax * 2], nelec), Q(new T[nelec * mmax * 2], nelec), P(&Q(0, mmax), Q.ld), W(new T[mmax * mmax], mmax), UMU(new T[mmax * mmax], mmax), UMV(new T[mmax * mmax], mmax), VMV(new T[mmax * mmax], mmax), Cp(new T[2 * mmax * 2 * mmax], 2 * mmax), Gc(new T[2 * mmax * 2 * mmax], 2 * mmax), - #endif cPov(new signed[2 * mmax + 1]), Pfa(0.0), PfaRatio(1.0), elem_cfg(nelec, 0), - from_idx(0), to_site(0), uplo(BLIS_UPPER) { - #ifdef UseBoost - colmaj M_tmp(M_, ldM); - for (dim_t j = 0; j < nelec; ++j) - for (dim_t i = 0; i < nelec; ++i) - M(i, j) = M_tmp(i, j); - #endif - } + from_idx(0), to_site(0), uplo(BLIS_UPPER) { } T get_Pfa() { return Pfa * PfaRatio; } @@ -241,22 +192,12 @@ template struct updated_tdi { for (; nq_updated < k_cal; ++nq_updated) { // Update single column. Use SKMV. - #ifdef UseBoost - skmv(uplo, n, T(1.0), &M(0, 0), M.size1(), &U(0, nq_updated), &Q(0, nq_updated)); - #else skmv(uplo, n, T(1.0), &M(0, 0), M.ld, &U(0, nq_updated), &Q(0, nq_updated)); - #endif } /* else { // Update multiple columns. Use SKMM. - #ifdef UseBoost - skmm(BLIS_LEFT, uplo, BLIS_NO_CONJUGATE, BLIS_NO_TRANSPOSE, n, k_cal - nq_updated, - T(1.0), &M(0, 0), M.size1(), &U(0, nq_updated), U.size1(), - T(0.0), &Q(0, nq_updated), Q.size1()); - #else skmm(BLIS_LEFT, uplo, BLIS_NO_CONJUGATE, BLIS_NO_TRANSPOSE, n, k_cal - nq_updated, T(1.0), &M(0, 0), M.ld, &U(0, nq_updated), U.ld, T(0.0), &Q(0, nq_updated), Q.ld); - #endif } nq_updated = k_cal; */ @@ -279,6 +220,8 @@ template struct updated_tdi { // Always assume l < o to calculate one less column of Q. UMU(o, l) = dot(n, &U(0, o), 1, &Q(0, l), 1); break; + default: + break; } return true; } @@ -372,9 +315,6 @@ template struct updated_tdi { if (compute_pfa) { // NOTE: Update k to be new size. k += 1; - // Allocate scratchpad. - dim_t lwork = 2 * k * npanel_sub; - T *pfwork = new T[lwork]; // Calculate unupdated columns of U. require_Q(false); @@ -386,25 +326,17 @@ template struct updated_tdi { // If it's the first update Pfafian can be directly read out. if (k == 1) { PfaRatio = -UMV(0, 0) + T(1.0); - delete[] pfwork; return; } // Compute pfaffian. - #ifdef UseBoost - signed info = skpfa(uplo, 2 * k, &Cp(0, 0), Cp.size1(), &Gc(0, 0), Gc.size1(), cPov, - false, &PfaRatio, pfwork, lwork); - #else - signed info = skpfa(uplo, 2 * k, &Cp(0, 0), Cp.ld, &Gc(0, 0), Gc.ld, cPov, - false, &PfaRatio, pfwork, lwork); - #endif + signed info = skpfa(uplo, 2 * k, &Cp(0, 0), Cp.ld, &PfaRatio, cPov, &Gc(0, 0), Gc.ld * 2 * k); #ifdef _DEBUG cerr << "SKPFA: info=" << info << endl; #endif // Pfaffian of C = [ W -I; I 0 ]. PfaRatio *= pow(-1.0, k * (k + 1) / 2); - delete[] pfwork; } else // Set to 0.0 to denote dirty. PfaRatio = 0.0; @@ -483,19 +415,10 @@ template struct updated_tdi { require_UMU(); // Reassemble C and scratchpads. assemble_C_BMB(); - dim_t lwork = 2 * k * npanel_sub; - T *pfwork = new T[lwork]; - - #ifdef UseBoost - signed info = skpfa(uplo, 2 * k, &Cp(0, 0), Cp.size1(), &Gc(0, 0), Gc.size1(), cPov, - false, &PfaRatio, pfwork, lwork); - #else - signed info = skpfa(uplo, 2 * k, &Cp(0, 0), Cp.ld, &Gc(0, 0), Gc.ld, cPov, - false, &PfaRatio, pfwork, lwork); - #endif + + signed info = skpfa(uplo, 2 * k, &Cp(0, 0), Cp.ld, &PfaRatio, cPov, &Gc(0, 0), Gc.ld * 2 * k); PfaRatio *= pow(-1.0, k * (k + 1) / 2); - delete[] pfwork; } else // Set to 0.0 to denote dirty. PfaRatio = 0.0; @@ -510,38 +433,31 @@ template struct updated_tdi { return; // Allocate scratchpad. - dim_t lwork = 2 * k * npanel_sub; - T *pfwork = new T[lwork]; - + T *vT = new T[2 * k - 1]; + // Update whole Q. require_Q(true); - // If M is dirty, redo the tridiagonal factorization. - if (PfaRatio == T(0.0)) { - require_UMU(); - assemble_C_BMB(); - #ifdef UseBoost - signed info = skpfa(uplo, 2 * k, &Cp(0, 0), Cp.size1(), &Gc(0, 0), Gc.size1(), cPov, - false, &PfaRatio, pfwork, lwork); - #else - signed info = skpfa(uplo, 2 * k, &Cp(0, 0), Cp.ld, &Gc(0, 0), Gc.ld, cPov, - false, &PfaRatio, pfwork, lwork); - #endif - PfaRatio *= pow(-1.0, k * (k + 1) / 2); - } - if (k == 1) { + // M is dirty. + if (PfaRatio == T(0.0)) { + require_UMU(); + assemble_C_BMB(); + PfaRatio = -Cp(0, 1); + } // Trivial inverse. Cp(0, 1) = T(-1.0) / Cp(0, 1); Cp(1, 0) = T(-1.0) / Cp(1, 0); - } else - #ifdef UseBoost - signed info = sktdi(uplo, 2 * k, &Cp(0, 0), Cp.size1(), &Gc(0, 0), Gc.size1(), cPov, - pfwork, lwork); - #else - signed info = sktdi(uplo, 2 * k, &Cp(0, 0), Cp.ld, &Gc(0, 0), Gc.ld, cPov, - pfwork, lwork); - #endif + } else { + // Redo the tridiagonal factorization. + require_UMU(); + assemble_C_BMB(); + signed info = sktrf(uplo, 2 * k, &Cp(0, 0), Cp.ld, cPov, &Gc(0, 0), Gc.ld * 2 * k); + // PfaRatio is dirty. + if (PfaRatio == T(0.0)) + PfaRatio = ltl2pfa(uplo, 2 * k, &Cp(0, 0), Cp.ld, cPov) * T(pow(-1.0, k * (k + 1) / 2)); + ltl2inv(uplo, 2 * k, &Cp(0, 0), Cp.ld, cPov, vT, &Gc(0, 0), Gc.ld); + } inv_update(k, Cp); // Apply hopping. @@ -553,36 +469,24 @@ template struct updated_tdi { Pfa *= PfaRatio; PfaRatio = 1.0; - delete[] pfwork; + delete[] vT; } void inv_update(dim_t k, matrix_t &C) { - #ifdef UseBoost - matrix_t &ABC = U; ///< Use U as inv(A)*B*upper(C) buffer. - matrix_t &AB = Q; - #else matrix_t ABC(&U(0, 0), U.ld); ///< Use U as inv(A)*B*upper(C) buffer. matrix_t AB(&Q(0, 0), Q.ld); - #endif if (k == 1 && single_hop_alpha) { // k == 1 requires no copying - #ifdef UseBoost - skr2k(uplo, BLIS_NO_TRANSPOSE, nelec, 1, C(0, 1), &Q(0, 0), Q.size1(), - &P(0, 0), P.size1(), T(1.0), &M(0, 0), M.size1()); - #else skr2k(uplo, BLIS_NO_TRANSPOSE, nelec, 1, C(0, 1), &Q(0, 0), Q.ld, &P(0, 0), P.ld, T(1.0), &M(0, 0), M.ld); - #endif // See below for reason of calling this procedule. // update_uplo(uplo); return; } // Close empty space between Q and P. - #ifndef UseBoost if (k != mmax) - #endif for (dim_t j = 0; j < k; ++j) memcpy(&AB(0, k + j), &P(0, j), nelec * sizeof(T)); @@ -594,22 +498,12 @@ template struct updated_tdi { // 0 0 0 + // 0 0 0 0 ] => AB[:, 0:2] -> ABC[:, 1:3] memcpy(&ABC(0, j + 1), &AB(0, j), nelec * sizeof(T)); - #ifdef UseBoost - trmm(BLIS_RIGHT, BLIS_UPPER, BLIS_NO_TRANSPOSE, nelec, 2 * k - 1, T(1.0), - &C(0, 1), C.size1(), &ABC(0, 1), ABC.size1()); - #else trmm(BLIS_RIGHT, BLIS_UPPER, BLIS_NO_TRANSPOSE, nelec, 2 * k - 1, T(1.0), &C(0, 1), C.ld, &ABC(0, 1), ABC.ld); - #endif // Update: write to M. - #ifdef UseBoost - skr2k(uplo, BLIS_NO_TRANSPOSE, nelec, 2 * k - 1, T(1.0), &ABC(0, 1), ABC.size1(), - &AB(0, 1), AB.size1(), T(1.0), &M(0, 0), M.size1()); - #else skr2k(uplo, BLIS_NO_TRANSPOSE, nelec, 2 * k - 1, T(1.0), &ABC(0, 1), ABC.ld, &AB(0, 1), AB.ld, T(1.0), &M(0, 0), M.ld); - #endif #else gemm(BLIS_NO_TRANSPOSE, BLIS_NO_TRANSPOSE, nelec, 2 * k, 2 * k, diff --git a/tool/makefile_tool b/tool/makefile_tool index 1d2a177b..e89c7a9a 100644 --- a/tool/makefile_tool +++ b/tool/makefile_tool @@ -4,10 +4,10 @@ include ../src/make.sys .SUFFIXES : .o .F90 .SUFFIXES : .o .c -all:greenr2k +all: greenr2k -greenr2k:greenr2k.o key2lower.o - $(F90) greenr2k.o key2lower.o $(LIBS) -o $@ +greenr2k: greenr2k.o + $(F90) greenr2k.o $(LIBS) -o $@ .F90.o: $(F90) -c $< $(FFLAGS) From 553e425277a0b5623622afacf183e493d7851360 Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Sun, 13 Mar 2022 21:56:39 +0900 Subject: [PATCH 07/73] Build LTL2Inv --- CMakeLists.txt | 11 +- mVMCconfig.sh | 17 +- src/common/blalink.hh | 61 ---- src/common/blalink_fort.h | 13 - src/common/deps/blis.h | 509 +++++++++++++++++++++++++++++++ src/ltl2inv/CMakeLists.txt | 14 + src/ltl2inv/makefile_ltl2inv | 4 - src/ltl2inv/testinv.x | Bin 1751606 -> 0 bytes src/mVMC/CMakeLists.txt | 1 + src/pfupdates/CMakeLists.txt | 9 +- src/pfupdates/blalink_gemmt.hh | 78 +++++ src/pfupdates/makefile_pfupdates | 4 - src/pfupdates/skr2k.tcc | 1 + src/pfupdates/updated_tdi.tcc | 1 + 14 files changed, 621 insertions(+), 102 deletions(-) create mode 100644 src/common/deps/blis.h create mode 100644 src/ltl2inv/CMakeLists.txt delete mode 100755 src/ltl2inv/testinv.x create mode 100644 src/pfupdates/blalink_gemmt.hh diff --git a/CMakeLists.txt b/CMakeLists.txt index 70851aa8..e34f0620 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,11 +17,8 @@ message(STATUS "Build type: " ${CMAKE_BUILD_TYPE}) option(BUILD_SHARED_LIBS "Build shared libraries" ON) option(GIT_SUBMODULE_UPDATE "execute `git submodule update` automatically" ON) -enable_language(C Fortran) -if(PFAFFIAN_BLOCKED) - enable_language(CXX) - set(CMAKE_CXX_STANDARD 11) -endif(PFAFFIAN_BLOCKED) +enable_language(C CXX Fortran) +set(CMAKE_CXX_STANDARD 11) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") set(CMAKE_SKIP_BUILD_RPATH FALSE) @@ -103,7 +100,11 @@ if(PFAFFIAN_BLOCKED) # Must set BLIS artifact BEFORE adding pfupdates target. add_subdirectory(src/pfupdates) add_dependencies(pfupdates blis_include) +else(PFAFFIAN_BLOCKED) + # Use bundled blis.h + include_directories(src/common/deps) endif(PFAFFIAN_BLOCKED) +add_subdirectory(src/ltl2inv) if (Document) add_subdirectory(doc) diff --git a/mVMCconfig.sh b/mVMCconfig.sh index f731ccc7..0b7e1d62 100755 --- a/mVMCconfig.sh +++ b/mVMCconfig.sh @@ -40,7 +40,7 @@ F90 = frt FFLAGS = -DNDEBUG -DFUJITSU -Kfast CFLAGS = -DNDEBUG -Ofast -fopenmp CXXFLAGS = -DNDEBUG -Ofast -fopenmp -CFLAGS += -D_lapack -D_pf_block_update # -D_pfaffine +CFLAGS += -D_lapack -D_pf_block_update CXXFLAGS += -DBLAS_EXTERNAL BLIS_ROOT = ${PWD}/src/blis-install @@ -74,7 +74,7 @@ F90 = ifort FFLAGS = -O3 -implicitnone CFLAGS = -O3 -qopenmp -Wno-unknown-pragmas CXXFLAGS = -O3 -std=gnu++14 -fpic -qopenmp -CFLAGS += -D_lapack -D_pf_block_update -D_pfaffine +CFLAGS += -D_lapack -D_pf_block_update CXXFLAGS += -DMKL -DBLAS_EXTERNAL -DF77_COMPLEX_RET_INTEL BLIS_ROOT = ${PWD}/src/blis-install @@ -100,7 +100,7 @@ F90 = ifort FFLAGS = -O3 -implicitnone CFLAGS = -O3 -qopenmp -Wno-unknown-pragmas CXXFLAGS = -O3 -std=gnu++14 -fpic -qopenmp -CFLAGS += -D_lapack -D_pf_block_update -D_pfaffine +CFLAGS += -D_lapack -D_pf_block_update CXXFLAGS += -DMKL -DBLAS_EXTERNAL -DF77_COMPLEX_RET_INTEL BLIS_ROOT = ${PWD}/src/blis-install @@ -124,7 +124,7 @@ F90 = flang FFLAGS = -O3 CFLAGS = -O3 -fopenmp CXXFLAGS = -O3 -fPIC -CFLAGS += -D_lapack -D_pf_block_update -D_pfaffine +CFLAGS += -D_lapack -D_pf_block_update CXXFLAGS += BLIS_ROOT = ${PWD}/src/blis-install @@ -148,7 +148,7 @@ F90 = gfortran FFLAGS = -O3 -fimplicit-none CFLAGS = -O3 -fopenmp CXXFLAGS = -O3 -fPIC -CFLAGS += -D_lapack -D_pf_block_update -D_pfaffine +CFLAGS += -D_lapack -D_pf_block_update CXXFLAGS += BLIS_ROOT = ${PWD}/src/blis-install @@ -172,7 +172,7 @@ F90 = gfortran FFLAGS = -O3 -fimplicit-none CFLAGS = -O3 -fopenmp CXXFLAGS = -O3 -CFLAGS += -D_lapack -D_pf_block_update -D_pfaffine +CFLAGS += -D_lapack -D_pf_block_update CXXFLAGS += -DMKL -DBLAS_EXTERNAL -DF77_COMPLEX_RET_INTEL BLIS_ROOT = ${PWD}/src/blis-install @@ -196,7 +196,7 @@ F90 = gfortran FFLAGS = -O3 -fimplicit-none CFLAGS = -O3 -fopenmp CXXFLAGS = -O3 -CFLAGS += -D_lapack -D_pf_block_update -D_pfaffine +CFLAGS += -D_lapack -D_pf_block_update CXXFLAGS += BLIS_ROOT = ${PWD}/src/blis-install @@ -220,7 +220,7 @@ F90 = gfortran FFLAGS = -O3 -fimplicit-none CFLAGS = -O3 -fopenmp CXXFLAGS = -O3 -CFLAGS += -D_lapack -D_pf_block_update -D_pfaffine +CFLAGS += -D_lapack -D_pf_block_update CXXFLAGS += # -DBLAS_EXTERNAL # -DF77_COMPLEX_RET_INTEL # For Apple. BLIS_ROOT = ${PWD}/src/blis-install @@ -242,7 +242,6 @@ EOF cat src/make.sys cat src/make-ext.sys ln -s $PWD/src/make.sys src/StdFace/make.sys; - ln -s $PWD/src/make.sys src/pfaffine/make.inc; ln -s $PWD/src/make.sys src/pfapack/fortran/make.inc; cat > makefile < -inline void gemmt(uplo_t uploc, - trans_t transa, trans_t transb, - dim_t m, dim_t k, - T alpha, - T *a, inc_t lda, - T *b, inc_t ldb, - T beta, - T *c, inc_t ldc); -#if !( defined(BLAS_EXTERNAL) && defined(MKL) ) -#define BLALINK_MAC(cctype, ctype, cchar) \ - template <> inline void gemmt(uplo_t uploc, \ - trans_t transa, trans_t transb, \ - dim_t m, dim_t k, \ - cctype alpha, \ - cctype *a, inc_t lda, \ - cctype *b, inc_t ldb, \ - cctype beta, \ - cctype *c, inc_t ldc) \ - { \ - bli_##cchar##gemmt(uploc, \ - transa, transb, \ - m, k, \ - (ctype *)&alpha, \ - (ctype *)a, 1, lda, \ - (ctype *)b, 1, ldb, \ - (ctype *)&beta, \ - (ctype *)c, 1, ldc); \ - } -#else -#define BLALINK_MAC(cctype, ctype, cchar) \ - template <> inline void gemmt(uplo_t uploc, \ - trans_t transa, trans_t transb, \ - dim_t m, dim_t k, \ - cctype alpha, \ - cctype *a, inc_t lda, \ - cctype *b, inc_t ldb, \ - cctype beta, \ - cctype *c, inc_t ldc) \ - { \ - char ul = uplo2char(uploc); \ - char ta = trans2char(transa); \ - char tb = trans2char(transb); \ - cchar##gemmt_(&ul, \ - &ta, &tb, \ - &m, &k, \ - (ctype *)&alpha, \ - (ctype *)a, &lda, \ - (ctype *)b, &ldb, \ - (ctype *)&beta, \ - (ctype *)c, &ldc); \ - } -#endif -BLALINK_MAC( float, float, s ) -BLALINK_MAC( double, double, d ) -BLALINK_MAC( ccscmplx, scomplex, c ) -BLALINK_MAC( ccdcmplx, dcomplex, z ) -#undef BLALINK_MAC - // [LAPACK] lacpy template diff --git a/src/common/blalink_fort.h b/src/common/blalink_fort.h index c9323a73..eb0b3a39 100644 --- a/src/common/blalink_fort.h +++ b/src/common/blalink_fort.h @@ -145,19 +145,6 @@ void cdotu_(scomplex *rho, dim_t *n, void *sx, dim_t *incx, void *sy, dim_t *inc void zdotu_(dcomplex *rho, dim_t *n, void *sx, dim_t *incx, void *sy, dim_t *incy); #endif -// gemmt is not part of BLAS standard, -// but exposed by BLIS>v0.8 and recent versions of MKL. -#ifdef MKL -void sgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, float *alpha, - float *a, dim_t *lda, float *b, dim_t *ldb, float *beta, float *c, dim_t *ldc); -void dgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, double *alpha, - double *a, dim_t *lda, double *b, dim_t *ldb, double *beta, double *c, dim_t *ldc); -void cgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, void *alpha, - void *a, dim_t *lda, void *b, dim_t *ldb, void *beta, void *c, dim_t *ldc); -void zgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, void *alpha, - void *a, dim_t *lda, void *b, dim_t *ldb, void *beta, void *c, dim_t *ldc); -#endif - // } #endif diff --git a/src/common/deps/blis.h b/src/common/deps/blis.h new file mode 100644 index 00000000..812d7f50 --- /dev/null +++ b/src/common/deps/blis.h @@ -0,0 +1,509 @@ +/* + * blis.h + This header is cut out from BLIS v0.8.0, + containing necessary type definitions & macros. + User can use this file to avert BLIS dependency + if their BLAS library vendors a GEMMT implementation. + Here begins 3-clause BSD-style license of BLIS: + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + Copyright (C) 2016, Hewlett Packard Enterprise Development LP + Copyright (C) 2020, Advanced Micro Devices, Inc. + + 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(s) of the copyright holder(s) 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. + +*/ + +#ifndef BLIS_H +#define BLIS_H + + +// Allow C++ users to include this header file in their source code. However, +// we make the extern "C" conditional on whether we're using a C++ compiler, +// since regular C compilers don't understand the extern "C" construct. +#ifdef __cplusplus +extern "C" { +#endif + +// NOTE: PLEASE DON'T CHANGE THE ORDER IN WHICH HEADERS ARE INCLUDED UNLESS +// YOU ARE SURE THAT IT DOESN'T BREAK INTER-HEADER MACRO DEPENDENCIES. + +#include // skipped +#include // skipped +#include // skipped +#include // skipped +#include // skipped +#include // skipped +#include // skipped +#include // skipped +#include // skipped + +// -- STATIC INLINE FUNCTIONS -------------------------------------------------- + +// C and C++ have different semantics for defining "inline" functions. In C, +// the keyword phrase "static inline" accomplishes this, though the "inline" +// is optional. In C++, the "inline" keyword is required and obviates "static" +// altogether. Why does this matter? While BLIS is compiled in C99, blis.h may +// be #included by a source file that is compiled with C++. +#ifdef __cplusplus + #define BLIS_INLINE inline +#else + //#define BLIS_INLINE static inline + #define BLIS_INLINE static +#endif + +// -- Common BLIS definitions -- + +// begin bli_type_defs.h + + +#ifndef BLIS_TYPE_DEFS_H +#define BLIS_TYPE_DEFS_H + + +// +// -- BLIS basic types --------------------------------------------------------- +// + +#ifdef __cplusplus + // For C++, include stdint.h. +#include // skipped +#elif __STDC_VERSION__ >= 199901L + // For C99 (or later), include stdint.h. +#include // skipped +#include // skipped +#else + // When stdint.h is not available, manually typedef the types we will use. + #ifdef _WIN32 + typedef __int32 int32_t; + typedef unsigned __int32 uint32_t; + typedef __int64 int64_t; + typedef unsigned __int64 uint64_t; + #else + #error "Attempting to compile on pre-C99 system without stdint.h." + #endif +#endif + +// -- General-purpose integers -- + +// If BLAS integers are 64 bits, mandate that BLIS integers also be 64 bits. +// NOTE: This cpp guard will only meaningfully change BLIS's behavior on +// systems where the BLIS integer size would have been automatically selected +// to be 32 bits, since explicit selection of 32 bits is prohibited at +// configure-time (and explicit or automatic selection of 64 bits is fine +// and would have had the same result). +#if BLIS_BLAS_INT_SIZE == 64 + #undef BLIS_INT_TYPE_SIZE + #define BLIS_INT_TYPE_SIZE 64 +#endif + +// Define integer types depending on what size integer was requested. +#if BLIS_INT_TYPE_SIZE == 32 +typedef int32_t gint_t; +typedef uint32_t guint_t; +#elif BLIS_INT_TYPE_SIZE == 64 +typedef int64_t gint_t; +typedef uint64_t guint_t; +#else +typedef signed long int gint_t; +typedef unsigned long int guint_t; +#endif + +// -- Boolean type -- + +// NOTE: bool_t is no longer used and has been replaced with C99's bool type. +//typedef bool bool_t; + +// BLIS uses TRUE and FALSE macro constants as possible boolean values, but we +// define these macros in terms of true and false, respectively, which are +// defined by C99 in stdbool.h. +#ifndef TRUE + #define TRUE true +#endif + +#ifndef FALSE + #define FALSE false +#endif + +// -- Special-purpose integers -- + +// This cpp guard provides a temporary hack to allow libflame +// interoperability with BLIS. +#ifndef _DEFINED_DIM_T +#define _DEFINED_DIM_T +typedef gint_t dim_t; // dimension type +#endif +typedef gint_t inc_t; // increment/stride type +typedef gint_t doff_t; // diagonal offset type +typedef guint_t siz_t; // byte size type +typedef uint32_t objbits_t; // object information bit field + +// -- Real types -- + +// Define the number of floating-point types supported, and the size of the +// largest type. +#define BLIS_NUM_FP_TYPES 4 +#define BLIS_MAX_TYPE_SIZE sizeof(dcomplex) + +// There are some places where we need to use sizeof() inside of a C +// preprocessor #if conditional, and so here we define the various sizes +// for those purposes. +#define BLIS_SIZEOF_S 4 // sizeof(float) +#define BLIS_SIZEOF_D 8 // sizeof(double) +#define BLIS_SIZEOF_C 8 // sizeof(scomplex) +#define BLIS_SIZEOF_Z 16 // sizeof(dcomplex) + +// -- Complex types -- + +#ifdef BLIS_ENABLE_C99_COMPLEX + + #if __STDC_VERSION__ >= 199901L +#include // skipped + + // Typedef official complex types to BLIS complex type names. + typedef float complex scomplex; + typedef double complex dcomplex; + #else + #error "Configuration requested C99 complex types, but C99 does not appear to be supported." + #endif + +#else // ifndef BLIS_ENABLE_C99_COMPLEX + + // This cpp guard provides a temporary hack to allow libflame + // interoperability with BLIS. + #ifndef _DEFINED_SCOMPLEX + #define _DEFINED_SCOMPLEX + typedef struct + { + float real; + float imag; + } scomplex; + #endif + + // This cpp guard provides a temporary hack to allow libflame + // interoperability with BLIS. + #ifndef _DEFINED_DCOMPLEX + #define _DEFINED_DCOMPLEX + typedef struct + { + double real; + double imag; + } dcomplex; + #endif + +#endif // BLIS_ENABLE_C99_COMPLEX + +// -- Atom type -- + +// Note: atom types are used to hold "bufferless" scalar object values. Note +// that it needs to be as large as the largest possible scalar value we might +// want to hold. Thus, for now, it is a dcomplex. +typedef dcomplex atom_t; + +// -- Fortran-77 types -- + +// Note: These types are typically only used by BLAS compatibility layer, but +// we must define them even when the compatibility layer isn't being built +// because they also occur in bli_slamch() and bli_dlamch(). + +// Define f77_int depending on what size of integer was requested. +#if BLIS_BLAS_INT_TYPE_SIZE == 32 +typedef int32_t f77_int; +#elif BLIS_BLAS_INT_TYPE_SIZE == 64 +typedef int64_t f77_int; +#else +typedef long int f77_int; +#endif + +typedef char f77_char; +typedef float f77_float; +typedef double f77_double; +typedef scomplex f77_scomplex; +typedef dcomplex f77_dcomplex; + +// -- Void function pointer types -- + +// Note: This type should be used in any situation where the address of a +// *function* will be conveyed or stored prior to it being typecast back +// to the correct function type. It does not need to be used when conveying +// or storing the address of *data* (such as an array of float or double). + +//typedef void (*void_fp)( void ); +typedef void* void_fp; + + +// +// -- BLIS info bit field offsets ---------------------------------------------- +// + + + +// info +#define BLIS_DATATYPE_SHIFT 0 +#define BLIS_DOMAIN_SHIFT 0 +#define BLIS_PRECISION_SHIFT 1 +#define BLIS_CONJTRANS_SHIFT 3 +#define BLIS_TRANS_SHIFT 3 +#define BLIS_CONJ_SHIFT 4 +#define BLIS_UPLO_SHIFT 5 +#define BLIS_UPPER_SHIFT 5 +#define BLIS_DIAG_SHIFT 6 +#define BLIS_LOWER_SHIFT 7 +#define BLIS_UNIT_DIAG_SHIFT 8 +#define BLIS_INVERT_DIAG_SHIFT 9 +#define BLIS_TARGET_DT_SHIFT 10 +#define BLIS_TARGET_DOMAIN_SHIFT 10 +#define BLIS_TARGET_PREC_SHIFT 11 +#define BLIS_EXEC_DT_SHIFT 13 +#define BLIS_EXEC_DOMAIN_SHIFT 13 +#define BLIS_EXEC_PREC_SHIFT 14 +#define BLIS_PACK_SCHEMA_SHIFT 16 +#define BLIS_PACK_RC_SHIFT 16 +#define BLIS_PACK_PANEL_SHIFT 17 +#define BLIS_PACK_FORMAT_SHIFT 18 +#define BLIS_PACK_SHIFT 22 +#define BLIS_PACK_REV_IF_UPPER_SHIFT 23 +#define BLIS_PACK_REV_IF_LOWER_SHIFT 24 +#define BLIS_PACK_BUFFER_SHIFT 25 +#define BLIS_STRUC_SHIFT 27 +#define BLIS_COMP_DT_SHIFT 29 +#define BLIS_COMP_DOMAIN_SHIFT 29 +#define BLIS_COMP_PREC_SHIFT 30 + +// info2 +#define BLIS_SCALAR_DT_SHIFT 0 +#define BLIS_SCALAR_DOMAIN_SHIFT 0 +#define BLIS_SCALAR_PREC_SHIFT 1 + +// +// -- BLIS info bit field masks ------------------------------------------------ +// + +// info +#define BLIS_DATATYPE_BITS ( 0x7 << BLIS_DATATYPE_SHIFT ) +#define BLIS_DOMAIN_BIT ( 0x1 << BLIS_DOMAIN_SHIFT ) +#define BLIS_PRECISION_BIT ( 0x1 << BLIS_PRECISION_SHIFT ) +#define BLIS_CONJTRANS_BITS ( 0x3 << BLIS_CONJTRANS_SHIFT ) +#define BLIS_TRANS_BIT ( 0x1 << BLIS_TRANS_SHIFT ) +#define BLIS_CONJ_BIT ( 0x1 << BLIS_CONJ_SHIFT ) +#define BLIS_UPLO_BITS ( 0x7 << BLIS_UPLO_SHIFT ) +#define BLIS_UPPER_BIT ( 0x1 << BLIS_UPPER_SHIFT ) +#define BLIS_DIAG_BIT ( 0x1 << BLIS_DIAG_SHIFT ) +#define BLIS_LOWER_BIT ( 0x1 << BLIS_LOWER_SHIFT ) +#define BLIS_UNIT_DIAG_BIT ( 0x1 << BLIS_UNIT_DIAG_SHIFT ) +#define BLIS_INVERT_DIAG_BIT ( 0x1 << BLIS_INVERT_DIAG_SHIFT ) +#define BLIS_TARGET_DT_BITS ( 0x7 << BLIS_TARGET_DT_SHIFT ) +#define BLIS_TARGET_DOMAIN_BIT ( 0x1 << BLIS_TARGET_DOMAIN_SHIFT ) +#define BLIS_TARGET_PREC_BIT ( 0x1 << BLIS_TARGET_PREC_SHIFT ) +#define BLIS_EXEC_DT_BITS ( 0x7 << BLIS_EXEC_DT_SHIFT ) +#define BLIS_EXEC_DOMAIN_BIT ( 0x1 << BLIS_EXEC_DOMAIN_SHIFT ) +#define BLIS_EXEC_PREC_BIT ( 0x1 << BLIS_EXEC_PREC_SHIFT ) +#define BLIS_PACK_SCHEMA_BITS ( 0x7F << BLIS_PACK_SCHEMA_SHIFT ) +#define BLIS_PACK_RC_BIT ( 0x1 << BLIS_PACK_RC_SHIFT ) +#define BLIS_PACK_PANEL_BIT ( 0x1 << BLIS_PACK_PANEL_SHIFT ) +#define BLIS_PACK_FORMAT_BITS ( 0xF << BLIS_PACK_FORMAT_SHIFT ) +#define BLIS_PACK_BIT ( 0x1 << BLIS_PACK_SHIFT ) +#define BLIS_PACK_REV_IF_UPPER_BIT ( 0x1 << BLIS_PACK_REV_IF_UPPER_SHIFT ) +#define BLIS_PACK_REV_IF_LOWER_BIT ( 0x1 << BLIS_PACK_REV_IF_LOWER_SHIFT ) +#define BLIS_PACK_BUFFER_BITS ( 0x3 << BLIS_PACK_BUFFER_SHIFT ) +#define BLIS_STRUC_BITS ( 0x3 << BLIS_STRUC_SHIFT ) +#define BLIS_COMP_DT_BITS ( 0x7 << BLIS_COMP_DT_SHIFT ) +#define BLIS_COMP_DOMAIN_BIT ( 0x1 << BLIS_COMP_DOMAIN_SHIFT ) +#define BLIS_COMP_PREC_BIT ( 0x1 << BLIS_COMP_PREC_SHIFT ) + +// info2 +#define BLIS_SCALAR_DT_BITS ( 0x7 << BLIS_SCALAR_DT_SHIFT ) +#define BLIS_SCALAR_DOMAIN_BIT ( 0x1 << BLIS_SCALAR_DOMAIN_SHIFT ) +#define BLIS_SCALAR_PREC_BIT ( 0x1 << BLIS_SCALAR_PREC_SHIFT ) + + +// +// -- BLIS enumerated type value definitions ----------------------------------- +// + +#define BLIS_BITVAL_REAL 0x0 +#define BLIS_BITVAL_COMPLEX BLIS_DOMAIN_BIT +#define BLIS_BITVAL_SINGLE_PREC 0x0 +#define BLIS_BITVAL_DOUBLE_PREC BLIS_PRECISION_BIT +#define BLIS_BITVAL_FLOAT_TYPE 0x0 +#define BLIS_BITVAL_SCOMPLEX_TYPE BLIS_DOMAIN_BIT +#define BLIS_BITVAL_DOUBLE_TYPE BLIS_PRECISION_BIT +#define BLIS_BITVAL_DCOMPLEX_TYPE ( BLIS_DOMAIN_BIT | BLIS_PRECISION_BIT ) +#define BLIS_BITVAL_INT_TYPE 0x04 +#define BLIS_BITVAL_CONST_TYPE 0x05 +#define BLIS_BITVAL_NO_TRANS 0x0 +#define BLIS_BITVAL_TRANS BLIS_TRANS_BIT +#define BLIS_BITVAL_NO_CONJ 0x0 +#define BLIS_BITVAL_CONJ BLIS_CONJ_BIT +#define BLIS_BITVAL_CONJ_TRANS ( BLIS_CONJ_BIT | BLIS_TRANS_BIT ) +#define BLIS_BITVAL_ZEROS 0x0 +#define BLIS_BITVAL_UPPER ( BLIS_UPPER_BIT | BLIS_DIAG_BIT ) +#define BLIS_BITVAL_LOWER ( BLIS_LOWER_BIT | BLIS_DIAG_BIT ) +#define BLIS_BITVAL_DENSE BLIS_UPLO_BITS +#define BLIS_BITVAL_NONUNIT_DIAG 0x0 +#define BLIS_BITVAL_UNIT_DIAG BLIS_UNIT_DIAG_BIT +#define BLIS_BITVAL_INVERT_DIAG BLIS_INVERT_DIAG_BIT +#define BLIS_BITVAL_NOT_PACKED 0x0 +#define BLIS_BITVAL_4MI ( 0x1 << BLIS_PACK_FORMAT_SHIFT ) +#define BLIS_BITVAL_3MI ( 0x2 << BLIS_PACK_FORMAT_SHIFT ) +#define BLIS_BITVAL_4MS ( 0x3 << BLIS_PACK_FORMAT_SHIFT ) +#define BLIS_BITVAL_3MS ( 0x4 << BLIS_PACK_FORMAT_SHIFT ) +#define BLIS_BITVAL_RO ( 0x5 << BLIS_PACK_FORMAT_SHIFT ) +#define BLIS_BITVAL_IO ( 0x6 << BLIS_PACK_FORMAT_SHIFT ) +#define BLIS_BITVAL_RPI ( 0x7 << BLIS_PACK_FORMAT_SHIFT ) +#define BLIS_BITVAL_1E ( 0x8 << BLIS_PACK_FORMAT_SHIFT ) +#define BLIS_BITVAL_1R ( 0x9 << BLIS_PACK_FORMAT_SHIFT ) +#define BLIS_BITVAL_PACKED_UNSPEC ( BLIS_PACK_BIT ) +#define BLIS_BITVAL_PACKED_ROWS ( BLIS_PACK_BIT ) +#define BLIS_BITVAL_PACKED_COLUMNS ( BLIS_PACK_BIT | BLIS_PACK_RC_BIT ) +#define BLIS_BITVAL_PACKED_ROW_PANELS ( BLIS_PACK_BIT | BLIS_PACK_PANEL_BIT ) +#define BLIS_BITVAL_PACKED_COL_PANELS ( BLIS_PACK_BIT | BLIS_PACK_PANEL_BIT | BLIS_PACK_RC_BIT ) +#define BLIS_BITVAL_PACKED_ROW_PANELS_4MI ( BLIS_PACK_BIT | BLIS_BITVAL_4MI | BLIS_PACK_PANEL_BIT ) +#define BLIS_BITVAL_PACKED_COL_PANELS_4MI ( BLIS_PACK_BIT | BLIS_BITVAL_4MI | BLIS_PACK_PANEL_BIT | BLIS_PACK_RC_BIT ) +#define BLIS_BITVAL_PACKED_ROW_PANELS_3MI ( BLIS_PACK_BIT | BLIS_BITVAL_3MI | BLIS_PACK_PANEL_BIT ) +#define BLIS_BITVAL_PACKED_COL_PANELS_3MI ( BLIS_PACK_BIT | BLIS_BITVAL_3MI | BLIS_PACK_PANEL_BIT | BLIS_PACK_RC_BIT ) +#define BLIS_BITVAL_PACKED_ROW_PANELS_4MS ( BLIS_PACK_BIT | BLIS_BITVAL_4MS | BLIS_PACK_PANEL_BIT ) +#define BLIS_BITVAL_PACKED_COL_PANELS_4MS ( BLIS_PACK_BIT | BLIS_BITVAL_4MS | BLIS_PACK_PANEL_BIT | BLIS_PACK_RC_BIT ) +#define BLIS_BITVAL_PACKED_ROW_PANELS_3MS ( BLIS_PACK_BIT | BLIS_BITVAL_3MS | BLIS_PACK_PANEL_BIT ) +#define BLIS_BITVAL_PACKED_COL_PANELS_3MS ( BLIS_PACK_BIT | BLIS_BITVAL_3MS | BLIS_PACK_PANEL_BIT | BLIS_PACK_RC_BIT ) +#define BLIS_BITVAL_PACKED_ROW_PANELS_RO ( BLIS_PACK_BIT | BLIS_BITVAL_RO | BLIS_PACK_PANEL_BIT ) +#define BLIS_BITVAL_PACKED_COL_PANELS_RO ( BLIS_PACK_BIT | BLIS_BITVAL_RO | BLIS_PACK_PANEL_BIT | BLIS_PACK_RC_BIT ) +#define BLIS_BITVAL_PACKED_ROW_PANELS_IO ( BLIS_PACK_BIT | BLIS_BITVAL_IO | BLIS_PACK_PANEL_BIT ) +#define BLIS_BITVAL_PACKED_COL_PANELS_IO ( BLIS_PACK_BIT | BLIS_BITVAL_IO | BLIS_PACK_PANEL_BIT | BLIS_PACK_RC_BIT ) +#define BLIS_BITVAL_PACKED_ROW_PANELS_RPI ( BLIS_PACK_BIT | BLIS_BITVAL_RPI | BLIS_PACK_PANEL_BIT ) +#define BLIS_BITVAL_PACKED_COL_PANELS_RPI ( BLIS_PACK_BIT | BLIS_BITVAL_RPI | BLIS_PACK_PANEL_BIT | BLIS_PACK_RC_BIT ) +#define BLIS_BITVAL_PACKED_ROW_PANELS_1E ( BLIS_PACK_BIT | BLIS_BITVAL_1E | BLIS_PACK_PANEL_BIT ) +#define BLIS_BITVAL_PACKED_COL_PANELS_1E ( BLIS_PACK_BIT | BLIS_BITVAL_1E | BLIS_PACK_PANEL_BIT | BLIS_PACK_RC_BIT ) +#define BLIS_BITVAL_PACKED_ROW_PANELS_1R ( BLIS_PACK_BIT | BLIS_BITVAL_1R | BLIS_PACK_PANEL_BIT ) +#define BLIS_BITVAL_PACKED_COL_PANELS_1R ( BLIS_PACK_BIT | BLIS_BITVAL_1R | BLIS_PACK_PANEL_BIT | BLIS_PACK_RC_BIT ) +#define BLIS_BITVAL_PACK_FWD_IF_UPPER 0x0 +#define BLIS_BITVAL_PACK_REV_IF_UPPER BLIS_PACK_REV_IF_UPPER_BIT +#define BLIS_BITVAL_PACK_FWD_IF_LOWER 0x0 +#define BLIS_BITVAL_PACK_REV_IF_LOWER BLIS_PACK_REV_IF_LOWER_BIT +#define BLIS_BITVAL_BUFFER_FOR_A_BLOCK 0x0 +#define BLIS_BITVAL_BUFFER_FOR_B_PANEL ( 0x1 << BLIS_PACK_BUFFER_SHIFT ) +#define BLIS_BITVAL_BUFFER_FOR_C_PANEL ( 0x2 << BLIS_PACK_BUFFER_SHIFT ) +#define BLIS_BITVAL_BUFFER_FOR_GEN_USE ( 0x3 << BLIS_PACK_BUFFER_SHIFT ) +#define BLIS_BITVAL_GENERAL 0x0 +#define BLIS_BITVAL_HERMITIAN ( 0x1 << BLIS_STRUC_SHIFT ) +#define BLIS_BITVAL_SYMMETRIC ( 0x2 << BLIS_STRUC_SHIFT ) +#define BLIS_BITVAL_TRIANGULAR ( 0x3 << BLIS_STRUC_SHIFT ) + + +// +// -- BLIS enumerated type definitions ----------------------------------------- +// + +// -- Operational parameter types -- + +typedef enum +{ + BLIS_NO_TRANSPOSE = 0x0, + BLIS_TRANSPOSE = BLIS_BITVAL_TRANS, + BLIS_CONJ_NO_TRANSPOSE = BLIS_BITVAL_CONJ, + BLIS_CONJ_TRANSPOSE = BLIS_BITVAL_CONJ_TRANS +} trans_t; + +typedef enum +{ + BLIS_NO_CONJUGATE = 0x0, + BLIS_CONJUGATE = BLIS_BITVAL_CONJ +} conj_t; + +typedef enum +{ + BLIS_ZEROS = BLIS_BITVAL_ZEROS, + BLIS_LOWER = BLIS_BITVAL_LOWER, + BLIS_UPPER = BLIS_BITVAL_UPPER, + BLIS_DENSE = BLIS_BITVAL_DENSE +} uplo_t; + +typedef enum +{ + BLIS_LEFT = 0x0, + BLIS_RIGHT +} side_t; + +typedef enum +{ + BLIS_NONUNIT_DIAG = 0x0, + BLIS_UNIT_DIAG = BLIS_BITVAL_UNIT_DIAG +} diag_t; + +typedef enum +{ + BLIS_NO_INVERT_DIAG = 0x0, + BLIS_INVERT_DIAG = BLIS_BITVAL_INVERT_DIAG +} invdiag_t; + +typedef enum +{ + BLIS_GENERAL = BLIS_BITVAL_GENERAL, + BLIS_HERMITIAN = BLIS_BITVAL_HERMITIAN, + BLIS_SYMMETRIC = BLIS_BITVAL_SYMMETRIC, + BLIS_TRIANGULAR = BLIS_BITVAL_TRIANGULAR +} struc_t; + + +// -- Data type -- + +typedef enum +{ + BLIS_FLOAT = BLIS_BITVAL_FLOAT_TYPE, + BLIS_DOUBLE = BLIS_BITVAL_DOUBLE_TYPE, + BLIS_SCOMPLEX = BLIS_BITVAL_SCOMPLEX_TYPE, + BLIS_DCOMPLEX = BLIS_BITVAL_DCOMPLEX_TYPE, + BLIS_INT = BLIS_BITVAL_INT_TYPE, + BLIS_CONSTANT = BLIS_BITVAL_CONST_TYPE, + BLIS_DT_LO = BLIS_FLOAT, + BLIS_DT_HI = BLIS_DCOMPLEX +} num_t; + +typedef enum +{ + BLIS_REAL = BLIS_BITVAL_REAL, + BLIS_COMPLEX = BLIS_BITVAL_COMPLEX +} dom_t; + +typedef enum +{ + BLIS_SINGLE_PREC = BLIS_BITVAL_SINGLE_PREC, + BLIS_DOUBLE_PREC = BLIS_BITVAL_DOUBLE_PREC +} prec_t; + +#endif +// end bli_type_defs.h + +// End extern "C" construct block. +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/src/ltl2inv/CMakeLists.txt b/src/ltl2inv/CMakeLists.txt new file mode 100644 index 00000000..4b35a668 --- /dev/null +++ b/src/ltl2inv/CMakeLists.txt @@ -0,0 +1,14 @@ +# include guard +cmake_minimum_required(VERSION 2.8.0 ) + +if(${CMAKE_PROJECT_NAME} STREQUAL "Project") + message(FATAL_ERROR "cmake should be executed not for 'src' subdirectory, but for the top directory of mVMC.") +endif(${CMAKE_PROJECT_NAME} STREQUAL "Project") + +add_definitions(-DBLAS_EXTERNAL) +add_definitions(-DF77_COMPLEX_RET_INTEL) +include_directories(../common) + +add_library(ltl2inv STATIC ltl2inv.cc) +target_compile_definitions(ltl2inv PRIVATE -D_CC_IMPL) + diff --git a/src/ltl2inv/makefile_ltl2inv b/src/ltl2inv/makefile_ltl2inv index e17ee070..a6772ef7 100644 --- a/src/ltl2inv/makefile_ltl2inv +++ b/src/ltl2inv/makefile_ltl2inv @@ -1,9 +1,5 @@ include ../make.sys -ifeq ($(BLIS_ROOT),) - BLIS_ROOT = ../pfaffine/src/dep -endif - OBJ = ltl2inv.o SRC = ltl2inv.cc HDR = invert.tcc pfaffian.tcc \ diff --git a/src/ltl2inv/testinv.x b/src/ltl2inv/testinv.x deleted file mode 100755 index c6f41bf0f2ec84571159d394c3dc9681f2f075f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1751606 zcmeFa3wTuJx%d67SviMOAdry6WCB_wcxX2us9+{U#S%qQ%nGn%Ts9V47wq|O431k;f*owARw{N#IIYU5g5y{A8=l$Jl%}gd?f>_(V zzwf%>x`vsxp40u@&wYCC=f75d_vNww8lse@_-Emh%4b=;Qjb(t%PlpQ&vkrCN^UBc zea&sx%)e3Y_Wx%z?tkmFE9qw)1C*2$Uvq15|6;TK$o@B#c^%7L`9PBKucYL@yVl(o zyx?nKfA@aJoXk_}QjAJ+9n)7`E-E80OG?(>cmLwG;adayOQ=gRm@`F);GbLzpF;l< zg8jim<6lWh`RY|``v@G^pY3_GzY7!0`f}ZmzFe)Jtt-Fl-up`KD_cCU zzhy6*{Y?)xkn2eLLj8okp>OSd-(S9JY4FCt{#?QSF3&M5$aUnufqj>h+`sC9<*SyI zEMIl^YAO!w@Bh4S(zi|ofPZp5un)7u{J*5+u4N^6f4^+yU7_p#@^b5EW`DKA&2qWc zBRd%ITZVm#Pf5wu1;qs=g*VP!5R|@=rqJ6$4TAC)yp}%YBeFSy59_eHZ&e5H&lM(S zWIwv%=tKAu`X_XKK<6f1p}TzB2GGT|@y}*{h3E>3Bkh-z-B)Io$^V1(mmcK5^dBa% zuUYsP`nBx)ca<$E`9azDMJopOm;ODIzHbLx$aQ3YqryFzKf?V5$sE|qz0n36n$N}a`mdvoq_aOZ#U=L8LGhdnfenpoA&bh z@6Ii{=IZYTrA<|a)-|a3T+6@9t}w5Ku1MOZC{-zPC+%#>N=*)4+Z-cR?IotIPM6}} z(eKSlS;wcVb!8SsRdtiJ<6rkY^YaS4co910nzy6=zbz+SwL~cy#yu+^v2T~&zxMl= z-m`r1rAr>XX9?HxFO!eZ@j+4S{(V!YRXo;y^L^P3`+xrr+_UmA=Oi9xi1FLx-D{RS z%8dE(E&ncLD$&SmHuFOZuB9>HLy87PxE?u^I?RnxX!As&VVwf9E)Gjsxd7aE=4#IB<>w z=QwbV1Lrt!jsxd7aE=4#IB<>w=QwbV1Lrt!jsxd7aE=4#IB<>w=QwbV1Lrt!jsxd7 zaE=4#IB<>w=QwbV1Lrt!jsxd7aE=4#IB<>w=QwbV1OFf7KyQ;e)U(0j?y)Opf~uTf zYtO0Q+mutU(kthCla;4HtDNr}t~?jq8MC7?L2Xl&+0IT~If0z^baT%)+~)Bn+dS4# zxylKbe-=?bGE`pKSKi4zX{(K8j8V!nBveOP!+m@#eT*{4h!2%l_LcuJqTGK+kVcgo zZvQ(ehekD|a=xoDr~Y`TPGw)61Hn43!jk$=Lgi{)xR3uGQSJ?uSN4_vDoBI0|0quXQfF%qOGUf{gogOWp6e zZ`IUGrc9sj+=p!EHlFVsXQ`au#P9N>=R5yI9T)QnwRvrjHnT!)MqJ>0N7^ulP@7*5 z(q?g}&6EqAP1LE?7j<74g`S5)^=`eu>5+Q&+oIOn6{>g71$u ziliZ`xSH!-d}N(>P)D_@)h>Hl0JGE+E`#>RDRbEu8uz6Sc$`wJ)1MyEU!p3`VcnEk zob9rY4pdVX>f5D{>E3AcadW`ny?#r#*o#n|`zhMNpzRjg@K8&SOOK$L zIo~9G={FmF4dt=3&=|t2?}pmgQ^RA+8W$Sl7n|cVMu<

g`Pn^Nn@*gx|*CP+w%d^xgDiWqArV=Z8;g~732 zG{<^d<}3W2AZ_`c6#TxFK3GT5$>!PSxWAWiXEW~PV4Z2^nh2kzAEWHbU|D`24F`k< z+BHwG`CBGI!==zL+2(JbX7hJkY4dmG+x$nEzl`tIwK_FoRrX>0pKj24PHaXe{x-I zzq7%bRXtZdZ5^(CP*8v8ZdUlG|Jdy^P$ z|BL#8e(_T3p2;r`q-{L)qxr=Y?thhEOruWZ8pjOMCekk^NgL)6@{1=IMIR^9FZNL9 zZ2aPJsdpBB@i6ti$}b+Gj^P)Z(i-rKuSWXCHz{*9Ei~?j?RylzD0;2bxNKM9n1)E- zgYWA0NFRl_G?=_M{Nk&jI{!*p-+kMwiC*{oTx~+OO3xL)7_L`4pq{ejGFDnc*k>7I z1nCs}Z;$Yc_UL|bJ8iHfuj0G=XlA`0m%j8{j5!bVi$4stX&T)(Hf<`UP1DULpU%cF z7LJBS)8~a`WLMM3da(~H>1$Wh{CXFD(5#ah^oyxszqo`t)%e3*_`@2#7{6F-`o+SV zqx!{h)HnR1eRQ8+wBP)desK=%&ekvHQ};}MaTMie@{5BsPii|~oJxqI0c%3d+B`hVjOHFr;;a`rYQ9g4PBtSuZ_AKFK`i9wSr zmG2t+DfShS`^BFcs^faa0WuM1qM7P8|5=Tr< zQajxGJj!nBPAE{$L@lvP>h1fl-eOaC&Hd+e>V;xi*~50eta(Co9sXGP2cv5>baj4g z^SksBLAq}0KJs#b*%rDEzo-12e^h?&A8mf`@61?C=o-p+hu^dLJAY^Mhv<@eCS5mS zQ=p5r899)yMDJ^x)A5x?X{c=7xC|>?UnOH9`p=&PCkHra_7Pbnx7w><}9K4dFXjDNb`%( zyfA|18fbnNnxCc4&OVxdEi~6a^UesGsV6jd(nl?N9kMrKPd@t|^u?%`TZPqiQ>kXzP5sIaQ?@l&=7m?0?V2gu z6e@$J$g+dNp#5>m zyj8ZI`$e8)FJbKY`|m$iB&gzX$cF6sy-&z~zOQfZcIDqFeLP|7SwbJ)?KXd?{0H2x zO;GPB_V{-XC|gb0>fk+>o*t;S^AVcqdl_Xe{eu}iia%5Qb?2p;C$zusytKg6x4-YB zW0BC{P~ovzx2ug-%umh zLZ7aA48OP*zZjH<(EffZ{mK5``#{ilZs42s@7&zyUoWDL?C+Z&z=v+Yhi(q;Z}kHD zJ$-+FYil|z@;xlrWXcw z>9+)G?6(9YClJa9gkqjz`ZMzYqsaph3lp~*Ib8PhKQ`hX?&*E^Rv2;5&Ex@YHhj}B zXm6BrJunBL$N^N3*U9US3d~G~Cpy1%@>t}u^0+o*Ao5;DUSKqN0s1g>e{_9|A?Lws z==zVSF%WHyyuj#wd4UIIPC3CCD97gC%5|h&T_fcYG0sLQ56X_L$8sr8>&pw=$F-p^ zqx$j!tL2`^YeZgPh4f>;IY6A_?AcI29JIeyVj!1(M|ao4m>rSl9WHxLw=Y@wn>pVg zzut}h_?o;vZ$)2u5`SG>)?Otbk9$J;zdbepFl(dL=6 zDLHeZmXxgCp6KW$-ZFCaO&Vt`ah$Pec=s!X2xrUz7FyqvQNbKIy-l&%Y9YK`FdjI{LU(Md5!(f?%nn~ zy4%UMh@5rWm6N=(|B7+UXS~hRv*B9K5VT;fB#vCk7-GXTawV~5t^^u(HJw*qgP(oc zp4Giu&+2}rDYL#>zmxlS)XN$@-`o3SwSGI-i^wHwhxTwC_C44mk-;A$qv8Bj@ZJi^ z%VO8v*x6`uD!J&8&yap)y~25D+J$^l*8uz59JIf=Gzy_7wVonB<~i)}5SPv0xblbG1oXRSV( z8060Se)sI7yZ6%8_lnK4tEsqNa^SV}UCW+d=2A~twSF_}eKUL1Tj1?2!9D82`e&M| z>eo=dw<*28w&~V-H+@fJ4#J~1HF(B74V~P@x6EZXb&b5A{q}Bm(^K{8!HEH>WAKMQ zJ`M5%*}!ky-rYGH9zcUJ|3}Sz-VXX`ew29@VeeQ+WXB_Yi|##68TQTJTm+A*Y@Sv_ z)@+{LtbYY%GIz#WQ)`D_`>plMV!Ef*qF-+NQ}qcCE;q{D+!y+JIT7?@v$3bUxM!@z zG-5{K>r&2A2w}(i!$FHWCR-_vObGGBXzwKTM||OgYCqAoTmR$hD{k% z|0$2A|3}dO>Lz4~54wx`f1+GJh2ak z4cOji10EB43y~@8K+E=^4S3SD0V{;opze#U5_w)hoD!+GB6FwN0CYQS111O8qC|Pt z$XF#o8!(wMu@8}bi49mLb+8YHd}9kjHXw!jK^u@F_DE#h(0%kOWDCMJV39fRn`zU$ zh$zg2-&{5l(nKiZP_7*0z_0<-H*5fMGMEiGd9&=nOx+Lhr7pymGuZ%i zI&1^*`GyThQ=UmeXIjt(;Pb&qKrc2xY=PLw2peFfE;tE4^-UgO3&aMz0Zl<0kRmqV zL&FB#f(^KtI3PA?19ak(Vd%f^tRuc~Ggd8qNvu+B&#B)-ywU}YyNFlzl=B+lu&0LKVsGu|1$GlV>}lZ|zCJ??@hmaKp7Ho|Y;B!AlYEhO=m_gyt!D<@ z_6+=ncIdFN<{8}*>ueR8AJqPd;ppEne{odU1nThE5M@Ip6vQE0?? zJ>GcqtFbgY9K$hJFKZKu7rpSP6JGJQJbx$gVnTxQ^b%_s@g8+U`8L7OP|riWXY5^F zO7>{f=WJSj^B&RE+9Yr{$8)ChBDd5Z5y#1I-Yu8<{_%8)W5a#JyPgd(U_Q)P zQr4#ynu!OE^^tXvm`~!%R^&zaxt)I4XF4Uu^lny{3qOA({M6xPd@z<|F1`)a*E=gGPcCBwdH19D>1Favb8m4Tsv4yyOREW(9jGG64$m1 zPh|~*acvDTXB%?7lY0H*R*~0aVpfY0Plw{@n!@aQ8EbdpdB`pCY9YBhT|1=r;H&I+ za83LQ|9S)XswVIZP2d^ekJzs|V$)q*OMUSX*E6OOW9cQ`nr7?C#n#F`hrDi&QICFd zsW(e_G#*(2Lm~ZP_fl%<`!ITT9p(56Pban`G)@xd?!61Sx3KTt5o`p$!PCq=8UNzo z*zA9Lq^@}<+^tPv@htRJ;{h;N+dpALriVZ-&5Sj zJDK-HVrLDS4E~K0K2e{0Mt$b=XX<-L1;?ikV|>Oja`3V~Ly5g_WZWBVp3d0rX}v}K zF6yJ{Kk%p?S4i-ue+{=Yi#+m*lstr+dUrpj4iLl zb{n>sv1=z_pT)kc&73Ya<^j1kiF??1S2_0zOX^3;y-T@=zj7_$o?cSFf_ou9)r#!4 zVb9y~wO#ny&PhQVeyPo0GZ`CRm^uAf{f_QBY`EBO!BB*9CN=cakDrCu=LlQdsnnEC z!_LO6*@vAK8_OQ#a^Clu`nv3u`R&bbygbsrN3+?rp?;8oki8DsXtCGV1#P$3>vCv1 z&0fRjX#IlEFzL%xYdG6AeL{ixJ1Iz`_yPP&>W?D)!?J`v|1dk+cujqH&NJmV9{Q&F zjW_l_BMZ?{Koif^4pxPhjP{0pXNi3mVk3y%3-D1sa9NT2n_6-ir|oaZ zXZ)D9z8A@FNZygWhQy+^dYX~nuv1n|Zi75$H+jzPr}c$qexu3EZ_J=P+Wsb5e&b&1 z$~kVt-lidHe&Y;#n-cmMY;SWbWrOW)E~8B5jvfDc`3+*#XnUKPGS*k@ZKg<_D0`bf z&4(6yl>EjS_BOfnHQ3%JgR(R3ZTjUm%=7tBexpff3GpSk$2qI~2L2}6-sU9zo$cP{ zD0M?V!`T1fH$<*~Dl`=i%x?_b+x&Gl;O~>)INb)k#2mhk4UqiCu7NgSf%sfv8*G4) z-$0*t3V#l(@I~1)kKEK|Ffad5prZpKDmhJO<_(R?6JIBG+&+bpAba4fCPlY;p~L z>h;StG+Bt>lgN#oU9Q0zk!$dhGs)t*H@J5V?*C=3@5* z^9cs;RjDWadYqBGO0MBmV{a+@bovhG8V2l(jacPWBPBRzsbQlaBb|Dq0z`S$o^S!4a~#HH55X7VIS@Nat+*Yru{gxd!a$+2k6QFz11}hTG-d zfLz1L8@V?i*Ki~CLUH3a$u%fr{t>yG0efun4n1H3c#gxw5O|YqT-$p75^aw?plv9h z9BLcFAAAz6ZK08yK0Exup@{u?upRgY$!q(;H5mEIoEYT~=RXG2!B$d-4>?cCZ5r1x z!Rr{+6K)qVAHhaQ|8GLOBG(ui?;zJ2&!5P+l7sXXDyQtR4L*@O>xZ#uijrTZ-%yVC zY_Jl4L>9hDF5%P#QE~}|f|UR#u_2w@d+@mua%W$KmDoA}D^VE*EAeI&tc3W8Gh!ul z%OSx!-C^|Kms6->?qSSa1ZF~fL>Sk{Gd^CqW#kY6Bd1+`ru_zd;J+C~E2u~yT z6YLc^<1{c6^Q7!~Y~G@XoWd*pa|)g160Z)#Or&lhJKLexzAyqa@ni&MLY~bS zh?y|y7d(DwKQT_mS_;qPtc1KlA7;Yr%R=sAtkj9JpV&WF_+ZSN{6<=RRLn%VC5)x} z4d?pd^V1-P!b0E8<*c{lga=?KPSO9F_7^TNaMfVqBC!;b+YRLzYJ|QJuL{R-wslJc zj^dyDc*XtGaTK>0YweBLWBif+&b-Gk`;@rnAa$edG421g`A6p za1>%6#$q3M_RJpVti>+!yeH?G*>cw57dxSozmCLIX^F^olZmNXKLAhhgD7~4Z(=7F z82$Iz2`6*>+ZmYE zrBa78@CtGsHQJ#PDJww-uoEpyIY+E8F|)3w1%{1Cr#zaC$iu!?qyJ(9&=&(&aXodf z7kQUwjPYY@6Q-$FOCN7=b128)9G(8d+{Bidk}juTxbr;eklJ?XW$5myAw3d z=L=1l6?t?A^}rg!6G;w&dqzGe!e)%7&sx2>d!XHj>`&}Qvd|U9Zv5K~VI5$fJ;uNh zgzy#NJVaBU-FTUO&p^BJIeiRfH;z$uM!UhY+2of3T10*#(r)~e_IsOnzPhP6oU@U= zj?CGZW7Cd4+d&<%9i<_jNq&NR2G1gF$Llg@+7GlJZshMUdCkav#eOtUKbrlxOZt&9 z4PTR5FMFMy4Yy%GzDJB6v>$~r*pK1Zj}gQdG5v5D2F`->IG3Ic53&P$uq|DaS!ew` zFvaHuTuoV=cW2e_A^|} zGxpoMp98O3XTNn&JjNBsU(be{;LVNL)|k`r6u}siKg$O`*NkVU@H-S=J`Y{}@Dc;! zQ=iVfh*1^K0!SR{jjx>9Np3=MhMpcnpAx$dj7jZg&LkA)v!C-zJ&B8ncYBn?!}dPx z$Jyss%y{0U$JQ597e?HVjlBQ$^D(Kib_1{kO=3_p&9$kTkX4c|N z*bmXEe)$-?@YU=Fbp3w7*(2|Vb z#d@G_|ACZZRqIYle6v-LQ^p--g9rFSd}46?6d8Yu%u~lN%Ck9K8@7#kNZ!VH z_Xc?!nd@)3?%hldWwYc^OkO7$cK1#bGs1nD zGxstnvmY?Vm%e3u|l}c6cedEqFE8s0*)}upgPw2cE`l?AOVejpurT$=k#96E0h*onuC`{wT_jQg3~ zzday0!fN}XKrY{ESy^^E7Vk(Qw{?48d-@8upDz9NwU>5TwDTh4w(A} zm8rq`(k{UYt=I#T_B#TfQ{D*X#<*t8&$xD3)U?ptbn-|E|Mls+nzr;8@@$smK*n`@ zSBd{G%i6W72HJ8H%CmjYT*G|JvTEj9xi52;xeHx(gV%QieCAkY-<1D}>(cnpTHGG^ zcdos0AzBs%8l^mR%{VxU9pH1;7|)zx2jrOmo_XrgvdXe|Q7-fqWbK-3fyPCh1=ng9b62dd&{4x$ z&w?jvI=HqV4+?_v=7I)Sc+SWl>v1tYDYPDTDG$vVx;Ard4P7(FHm<`w0Iz89fLy4_ z19KkzctE^m^1zhgO4>^d)e_%0li0aO`m(@-r=i&f?;g&2daf<2W|hdd@E|-dXbI2j z!r;8la_%y>$dAaW57~5K=l=0a(d`oKTnX=%xtxIR@HlC5V1*Vf>*VT+czSP|F63hIEXZp3>vwM`aEW2~z&Wyu9_*#r2H(>8z|M?8 z%Ln$!d(8UPjj+KXY-=rNZt|=H^!hJi44Wt^d@4{bM&n{f`>hzmyH^-{b}7Zw5c`Ag89sb8NI){YMq4V35 z<#FzldTd=A&yjO(;yE{c5YF!8CKi(QX zjJN8$F+0HCeK6TOJ_R0tCfFUf+f?dk2U+CeRr?&l+mUU-*Js@ z^VqPRZ6%tgPNf(1mTR5@_E`B!Rajk>8Qv!4*~{;)`&Drz{rmOUyoMMx?_`Pct8MhZ zR{7=rBb#m8zkD&)*{x^gDHr!2RetO6-)EfEN7e0#QHR>)ersx`cc_{obp+oQV9fM& zlj`MJK1~tJHrYHmDyw2hiYlI-tmgTtm(TS|-j&f@Uf?Mq{FixUuKqw)LX|g3IXYOg1Jrwj_FL5`$ItCEovewwnf=@=%=Ofbn)`x{shQU%#yNaz zW1X!@F^(4a>eaLAe2!u6w$+-aP0y&i9^N)HC%NAO-9G5O8+vCmep|^F&td32@blEn z^SOQ&I<_jk$e;;2eU7>`7>7%ZuIgQHt#2Ii`wYJxm#3ae&E%|k z&DM;9_10WfJR@GslXa8zj9jD`$Z5 zjwg+B_*nB-uZ!6+gfZK@Y@Sv65XTXHNL|+kc(Q&~Lz|svv#i!^Z5nHdyrXBH%1?Wz z%5Ra0EM#8fBbsd7@M&+cx7UVFq}81)vHA0qDk>rGazlnHwjs9x_}#peJ{kLG%tdV+ zT~$c`;8uDp%zsv6o@3ei#SNQT_sz)G_1CE4Q^;*+O|0`N`1y}~9{FKLrWZYmK|VNJ zd3QH`9WT+`?RsWi3%uRU+T?DT=}bfxT1F}NZe?+FEMl*lY;oU}6zgbV{AS+o>#gDW z#0uW)17GG@vD?Um587o)g5Ye`3)!Zfm0zTCEMo z7hLTI|I-tCCQ$mBj?PM7-SA5f&aV_16a5w4#ZKhqzEhduYf*B&=Is%t{)&xA7;#DV ziI0-qxyXxeCwhD@`pO#OuTy=FBKH^Y!wVm)sCz}i*s2_9&%WbRcv7T~bxe#`heYRj zF3Lag#6$0OvYwwJclT_cDep!0lPYnpN=i2LX^AD#F;OKtHm{#le=)o)$Hsi}qH>or zXVI%;-klLW7Kb^ve0HQ%qefJZYs*(Wk?#lZ^RG#(oSL@jhzv%ebN^9gKN2xJGxuzT~|3hUsO4qM%5P9D>yieXsl``Z#U1XgxyY@C z6B~>EjgCjgu{k;MYRxbI(pxO_?S{U+K^<<)WDKKyfoJr(%j?srFMUXV($A5e-r^G< z6^S3o6L}FC5_u`&JVslu!lxfb2I{NzLLy=2KiKQ^MvGwN4Z#yaj#8twRBYOEti zX%&x6K3%W7kQ*y9BYN%CE!fPlhCYi9x4?%AWcWl-&qcq#i(M97Zqt(tT^5}_jI4CA z)_3Hn9n03wXc&xN1NBvSBWq;kJxyNh))kvnmABmH&q6+Wm0nSiZQf5$Rw=x5d0s2_ zErYVBnx;FX-nyi8$42DuHeESx)A2ugdR;UAMPzV&QikI&_P7Px+%EPwS@TSVKOLh? z+w=dzZCNa;ED;ie%iDB;8@?(F2MYBBSo8u6d5-q_~f6 zSN`_N$R9Sl?OEl&5}Jjar2^Ygtj*X@FT(oaj$Fvl=8w&=I?Q>JSUp-;wC$3|>E_~3Op58QhCyP&LVxB@z zxr#3mITqb~V}z<|CAJrN6Fr>>jkzkz@E?ZkB_%q3L!TYUn&_kG?U%?BaqbJ~(_1af zC6{%*9QhTSE3u2jd9B#8W+N8Otdo9r(+Ba)3nH(?G%xtD*N2JK#deDSlzzU&@2wAK zWQq^yz(*cXSw$`E*EC`h(UnekJ`VbA*ov)uAK=r$SP~~o{CvO~TeW$ewcd)Yl=vxY z?M&wt*jM6i$5w1t0Dmk#-d~})?@owwEFoTQlNbuSLf+ip%pSs9j;z2>AGY-&Xcl^j zYhP$bCOWXazrhy7KxZ>F`h<4ciyi+l{$=;J)XZEJXRN=B@eK5x&!-KXiP&u&vO0fcQ`1WTB6Iz5i}vX`apY2PP=D&>%5^pSa=t#2AOz`R_r~m(b!JKgTUJ z97eunuad|3*0=H;IgL5>_p#=&j4N^JKSR5$iP$lT3B2()xQ{Sb;kT^E`~Ni4iEXX& zGLKedpqbBZXz}Tz>&g>i9n%=E)p5OB)~sXF9QQ@=Q)K@zvhzd66+S1!XTjd=W6V}~ z(FLDbuX$fg*4(++E?JLU`s|?oR@U_}bQyeyh7Ofj)UniD!^P-BGwUsWZS%U^df)a~ zXN#U(=aY50beOvxp0y)Wt%iIh)r}F_SQDYC-F|~x*69&h6X+Cd&o1aWCiI9dK$FmO zb$U#djQ<5=v!9sft0{6n$J!hf+MrR^;xR3;NcjHm$VY3Co_2h$thLCsV2_SMa~Jd+ zgO<;)K~A<`@0Qp@#uk65*jsm^Z-+P7{AyWDRWtp6%sxj)cYN$wPX^?C?%y~!QpjVB z>>FP=vB={7f_?Z2J+3adX{PgJxz7GQrmhu#+l>w%U!b{i@#yo-#tl_(p?-srVOMhx@teezYnA`hq2k#0 zSN_uzams0X-RijL^%;&?uTOO3zCO*d6kiyJ?2sRKJcrF1qTwgm&p7ebKNzW;ZhXgQ z%<*dGG*x&BzYnuLyO(g;BM{?6O9G`MwhXu3v~_stipv8zdPaqzBv zA^r!RgDc>B2YUD0-ExA{XskrDUapwk`=Tj}s!QOD*R+Z)$ zuk_>!E!E+>(&qmT`&ahpj)D!P4U6fo0AEvr}~A`4HiD{CM_SS-}7U#c=`O z2UvHFx#d{(KU6OB&1hQgo3V>e>A`Oq>tDI7dPXkmk1a9Q{}=aXkMybRwhu4{($|%b6U1zmdbXdv+loO{hx!cv)BjZ()Iu!efhe;Z?$aJ ze`R3Tvc;_bR@Q$D>wj@zr=DFwUbVPvU#>&{@NU+86>DGCP|3Pmjdjm$*r1P1=DmYy z3fY(#v>BOCTQW~!Gmc}AOOXGvKlK)W#&6-l;VG*45_tPKeAuU191kNKGd6GBK7I2; z+ppR@uIjUn)QQbE+WgP4KA$bU&izB?EwS7wu5vP#zJf@SL(CM;Xkus9}lm5X~9EPJS- zNj1)tm~4Mc)+#Ue3lDy0u8ZG`Ij^=Hd|~eXm@PB*YH?i!todgh#S;t^ zal?jY=B^%^xmSb#Cwq(IEOE)J_KkDoB5yY!Gg)tZ%TfP&F8h{M4fdvz1`D4)-d)o0 zv1MpQ@)u^imHRFxHXNJGJW|qW_b*1fl?^&=_V0^qcQNfO6-A$$?G^{elXZxrUA56} zaYIvMNy9ikedCR5C}5qQK{h{TO>$d$P5peYxA-T>${XmJo}!$)Mkwd+kdZEQ?_Tt7 z2yz*Z&Po17Y@)og_d3xpYz#Kt^D#1i&!OI8*2`I;4R?UEnO9C9v-osiD<9K_Im)2J z*pKloI;60VHteIcxA4rG=#KPr(eJRQmbjuE}9-ak)~X zledaq@F`ufBoMQ_EKswoEKoV(;o+r*KAa!Ow~Vf6#2!k%QIkEjQjVAh%M5#1gI%zx z81zCn>|sMBuV3#q{NKfViwzXtCb=~6WtFdCx8qYCV!OnT{StXz3EvBtulTHiekeES zhthTNL*&|+Tg7kS=Z3Ndudd~_@Yw=Q3Gg}Ohb-vkX4ZUG;}0{oB;*=?C?7v`I9(NA zz0tCuCNaIA9}*sy!dD$1w2N=?L#~6n=9UKiP>8>U_nCfZv$9m!@ISN2p@_bFu^BPs zi07^o{_2i$c&gMegTMOna_mfbKzQ8eYt9dps9_aW{HgF3dO6ZfcjylWea$+)m6l_x zj4^n-7vB2xv^;Vmc{+TuVs{F#FQ4d{?C0Y1vbpyv*AK(%GGuovF+v=?odX@?hzAba zZTRsR#{}YopQzNgti%f2utT|&EypLzJ~B>=cRaZ9+g0n?3xBrh+f|ELpBO#Hv5Gx1 zHqo(5SsV{++_?RVO&ho0zj4#{KX2N!ed)%Bwg=X-_ak;}-}KOS@lmYf{2}O!tj9k1 z!uqA;Blk+hW0&I`yrY)=Q>x>)TBajkWmKq_dyCm~ylUekx?)3Dy3o7n@HPFlof%8f zn|Ac2gLPyL*Bs;Te+?y;_&>bM{}B3N*iF9W?;rhq!NrcFv&nzz!|KYHFKsBJ?c(M4 zH!NBHU_%8yunZem$vyk>yBi)^zNVo7`&Y_6`|^7mc7e-%OdI3af-Q7$e;jtPl;46O z(Xflvv0@jq47=F1*5=6~CV8Cv<2@H;WwJN+bX}a4nWJY_RH83WVH1Adc(LOlzVA^( zlDo9zWXp%^8tUO~DLK9B4<15y;?SLV)^|ojj;>X_iCxTo<08jXDw^)|&EdX&FU7ka1A@dXz4 z51a*BuX3JPq_fwEsXJL7<32%r+|9Y2zarKx@$%2u7ksRc5oDuzf$YchI(aAVx>+$h zi1W8eozIE6<$kX1Dsq>j>ef(3k~;7A;M4e?BKzi1^m9C>`!buV99a&n@(hEOe%V`W z^Su~j?kz4QPwl$OxsUdO#Xi1Z7W<1r_7_*Pzqp1xuZimpjcexf7`OB)Cqds1SD<$) zc6TH+8GDLwJ!mrMtGvoNhkDlOeKc)9)jMtNsrYI8@H5!CHF>lx-T&i^Q)}bg;MRNc z$^Ru^M*b6e6?1T1rl!7^tfqXIn1H#=M>qbQMh2)Bl#Crrd{rIzB=3 zR1q(Z+Hht4X0hX(50-M>o}BoWj?Ku$rY3QQ#+l`zu^SVs$VqQYe`~U%3tJIGZclBD zt0HEtnxl~ed_s|9j&TUTF4q&^YDmg*)FmZ3RO3}nPtsUN!8=zuH>4$24IR((L)eWk z;ps{CiS3ILS=-U?df`pygzz=j6G=M`nwyBjK9GxHb?xlDI0S3 ztEPg{r(SB_ACT*4GI46{wXBnk^Cwd__&WmrcJ}0LoDCL3T=BR?d0%|nzQo^~ViBDcx7@;46T+|9M0_)GMW zHl5@YC3oFPE;0rgv!drd&YRodmBg>2d%l_&r<_sAIkV*5B{$PLZHT+;J=T7;;=OF- zm@d^`ed83k68e@Lpl^GTJ0aMwQH~92p+CuMc2c(v+PdDed5$fGAFG89oBtNpK1ruf z~z;3~anOXCHO*5OG;{#x{*1O8i?SL^UO?qts3I|9`$o_O>|0wizkt4z2 zIaO+C5r10&-!saw3qQLGpUYmvp%`xh-&;inME2On%);h~tmaZzk?Bw1hu|o7L$i;1$5=ZV zQ`UJmG>V+dSydafi2o5e7a9Mv&6M$@$oONdV;S?b-!PW5!{nk?WJ&V!B2(qWb-8M& z;~0K7bneo%2bn<6I2nXZ30raue|r=jx6%JY^k0cjtie}>Y-O$) zFN`eYUN*nM=M;$zmGZ1$%)m2Lf*;x@SfCJoRr6itJhe97eTsRsVl$2}(A@#%bz)JB zo80oY&#^5h%gwl<8(s8Q#1Uh})}7=`VJEUIJXoT`qX~)bcKl@Pi^_91bnmm|JIAvQ zC(sM2BYC@0?mq=zC64$*D30LT8yQ1DgOz>_n>9HYLkyP~BH#G}?FFNCd_f^G#MQ(Q z*APQo%X#ta@bh8e_@GGaB5{N@-#LqRk#U6ljmvO7bkC?~%Xdzvo^=#)1T>M)oK{K< zkwY%BjQOd5->2rpcP}i> zck+B9IE8%t5_$=3V&`vLknenra{0Ri?bu4e^0e}ahYmkuNLwHMdXqJI&#GVFI5u+} zWBBk<%lMmu7xM0xS>I7p$+vySHH^Q(i`{q}JCUQtR?Ojh3w`7(y<*bEs#tg)S`)E1 zGUq@(dMk6qE?GC^EXYx@6=UCdB*Xh+CH9iP3GLeXGr@Ctb!(j$-!T>5l)ia^qYdAg zFZo*b0$8&geF_h)igB20j^qlkt-czY=X2&^MVB>VKcU-;uIH%K zinrNE-uLDd#{?OlF$L!;^bjWzdx^cwtTX6vfAcvISi$~UcP0Eu?4$p@?`Ix^IAAdi24Df$-Um$lsgKp%Y%7+~KkUt;t zH-#|_Y$5Tr7u)Oqh@2s@G&x;=*+}xkn~~Ed;(?EBo@%9vcB@q5{Lck_Pg*R=yQ!0p z%uE6^D9@e~Px%F>#5-V+Y4kTYE^k$1*0pOx|-?}CBihN7C6R>NZ#!q_DLu3bj$UF_5gr|b7+KH|RKRxJM2mVX= zEIbum^u~XexH;X>P2uSk;BP(qbL!T1?| z>I;&`IwTIdoSacPdpGGv&P+dN43YJ~RWUm@TgF!Kw=Ih0{wd18pzR6t>!8tpY~G7} z&q7Af>7s&!eWrY3lP~V-EzYOxG9%_6i=Au?+sPyE_ZCm5Y}}9!GfMe8cj70+N2tbp zFlrffCCIn3LmPPrR)kp7NWq2=I- zhYi3JSD1L>rkN3VV(9LNCtmao@x;Tx6AugHiMKsHBmz$i-}~W-p~nR+?Tb#s6LOyWojSqvMH@iEo4_hTqND#IL{;2f!0|hw;S7Z6{a?@E+U1 zacm3YiIER{XmmWW{M}Ws8mHljhYi3JF9p*FUtS&aSL2BTXT%f3FTu76Ub+;U-;4f= z?h>Cy!xL{48-XuS{~w-XaSnCPh$p6>QPhcwC#Gx&WrFWC&mSW2#OQbe zWujMMJTdEChOPQaJTdbX9A+y#?}sPGUKn`dVFsQ!pvIPFdtX*PT~`Lj>59M;BRi+z ziILYO^nDthn0b^Tzo+4ek<-`dyN!Nj9=iv_6C-b8Gru;Tm~pEk@x;Tx6N?@ZZyULC z^0U$K#QzFSUmH(M{Ll|i%s2*~7#e;db7X$~@WjIg!4uQ&6WTaw)6Mswcw*M*5$c?V zC#H?$-5;V%e9bq;6C-D5#1pfI)k8GLU5s}+o_LkuiMI{F69;tcmes%$m-WXJBadEW zP-Jc{{ryew#PGwAyJ|_SpyEiQ$=n zCpP3OsqS&1jo3PbCzf^k#&}}ZB8(?SJ_f}TLvt7O9D|k$k(0B-6L;(E*Zc6qFNg8O z4?=rCJh5H%;fcvH4a5@*2KN*>`?e?I3=Dwee|w(*mk2FwHP^bq?)AeI|2l{%-X*wQ z`paSONk~m8qPmaMtVycib$zS*;2QkI;ts0fHiTpud zpN1y}XGH7-o>=95sSlqR#uCG~oddDNj6ap}4JY zRq&qI#0&dBCdbvKWh4uJ_{aK~WU!ohACm*}g3YsCtfn5Ged9#I0twE_XA!(`jDuXw zKMDSA(!og%%R#Wh2lE{2;CCEDwPeRq{GDKae#yC!;0^B`r<}=P7V9{VhUf2I%ADkH zL|rKHIr+F8aB1ZxKFcqd9yzc6m@|N`c-G9#IQcS% zM6kHzY~_r%6nyfLjoO0hAqsq<$=eI~o^#B^7uvwR3BGVVpUQ)GgD-5GYYXA9H4}$@ z5`0^uN=q)&(vp9yrzQ7V;tjm4@HXZ{@Pi+$FnDWISA%UTH2C^+Ju&$;c&nI~U}Lgs zEty}g9X|0&?v+5-mUc5IDKu7s&sU8T9VemlBz!EeDW?m1F9&mW6SPjdX_{k#&~8Mec@xe;t>UQjL`L$6|Tc|O#toN>sAVC6(UeCQKr z@BUua@aTuV#TDT71$#dSe8?=$-nUY}oX-}<H)#tL`YY=$Yn}_VEW$?5!9EuvcPFtovkuM>d!QsuYI}9o@n`D|%`}PfJv`p{JZ#d9tzZ z7VLZL(Co~nwPP|r)<;w{;um>VWnOdRIC|r%fbIL7t%s z*MlY#r=U59QSZME?>K%CyyNg7-VxgoiFaJg`g|4MQTS!x9fyH;9ERRhYEI8E@QyC6 z5AR4`=Sz5c)_6zg{JY^DS<{`kF!7F@3;cKB9ii!rct>(D(eREpGmo>zJF*Y& zhj+vW^us$sLjnB_ig#ph8WrzIyUDaW4e!W(1Mf)A#UTY zj(1#@?RvN*fPB3p=j$fkk@rjq-VqtYo}7+%-2N4K#|i9#pHw~7oGDA+eRxN+-%cs# zJUWbbq^|!m6AKm!6LHJXWcgx0TxcN{+e@5mT`GrS`*VBj6$ z|9>*CLGX@-kFUmu`DRDKJ3`+#!8;0%`r#enPaEe{ox{Ec-Vyr$8T!L`M{G|R?`Q`n zh`#)U@~C)6+D76Xw@@!C-jRCiDU&^gfp=uy(eaL}47}qK<~1nZQDi`5YyGM~f4pPq z;CM%5S>_SOJEE_`r>J;G29|P}5TO0F~Iesm?V=yn=H4yIz z-vsY?iS)VWZ;N*X-|$X9yyHG?P`o3#uXp|$ykj18?`zgh!#keO{il!xi6g!W?`YU8 zFiQKeQ7vFjRHemvAMFRjfQ9g1#0SWbiBmJ;17&f>(JnHMkeo@lo`E}(c*EihO#R#7 z9i?xfU+kHIceL?01LPdF)Y2dCNNy+^-tjHy_-ef4V!=E1d@a0Va7{vZ$418a|0~{c z^vV9%!gF}XzXI<#{IA42^8Af`xQTa+MTYXv9`D%mKZ-kaJvA#o)+DUbN%&%yOKS0x+oQ0)N6cmj-44)lw^+)rE}m`5+~E6Md* zoPvS(@}AZEd3Wl4Cy0bDkjQqDr}60~T`Fdl`?C z-|iy6EjckidoK0PsLV#*ry}*_-EaZM^|jc*=S(s%w&bM1Y-LqEHcA!$6zuuu)XU-e z2A)A^e!#>%Ud%hmI^%CN-lKZ>(wp3zy}cu6^;;`PWy*VM?%_H~vw800Ti&Buy(GR$ za%o$^=$5;5;~lEwRJ=pzmUH8+OL(`^MTu4NzLMou+sXr!&E7OBQ_gR9SafHHoxH_7 z-PvZbIFwCy`bNq-6K(#_{E=fI9p znT(er_^u0>Q`e)+nK{Wjm=5qg2bzVBwvoJd^`eBT&(oCq0QK6SRnBoJ}c;CD#A3>+o$Hc-xv@f=?c=L^1R1z^QT<;lBQ6BX}OAP;(s_lAlt zAYU&uL%Z=lG~_3DqovBvS~Y|Jz6`k+nYo%Vo00EvCTOoB*zWdt4rXm=y2CsNtE?!Uz?AkC@K9_CSyD zO2$66M|5p$od&N0FDu>yJG!X(3FG}RDLh~5|718m3_6ZUpU}|-{jD`Tvy4BGXFZY` zL;5=Mtoba1&?hw25Bq(F`eSOQD~IQg*4q4q*j<@ZnM!lC(T9b(mtnW$UE0mVN4g*V zhnO8%yd$I?ztNtld7h$vnx5u3$=PSAB@MZKAfTaRbEqde)}D#H51;SOmG{5~b*xmL zjpFxce3a01f-}+pACUvG?IIICbUkZbZoL;B%~7L`cftM&8}J2w0SdlT2wHD+LKUuMY^H!0mQslWE z`T2p!HuCj8@YLr(G-ZR1S@4S#gG4`!GAMY9qGoB(iidXJ41=V+=mr4IdsH zITl`=M2DvZUKbsnR5^3Aim4cat%;_?k{1-+?cjOV<%}UR<40%P#J)qP=<9XZ^NGAi zE~L|fzck)U3XP)EqQ9N2|6$hc-681hq{f-0D_)+FDd!i=OZ;G4=1p$j5>@4;%`E2G zEPfkb#Ca$-ly$}r3GP&MhI12er+R&5{DEhOZ)@UQ3w;uKvo~9Tb_AcT~!Az9Ne!nD=eaBz?PUp_C-K=ND^{j}3o`kzfbdDgx~=;K<-q~8MRm-X>7f5FJ<=((oGIK1fiOv*xY z_ri~A`W_AMEXY$c^oc#Yf%jpFZIXNP?BH&Bj*EI?1I7)pR24K%b;$W^IXqarqAXC3 z4%r$@v&;B=8$CM6dF_()#o1b`x>Wvd$Kr&mb1FGc%$>d@TX8>^PYe7~JO^dGGa){G z`h?rXQ&G$Y3e>~56_IdaFviDwV@4fa~ zYp=cbA&1q~5`3f$6|6J0hSsCY;nTIO@f$cBFKw*ldnxB5{-br#J;lsoDtXvC^m%W@9lhkV3fB5A) z)S8G^s*J@b+NAkwGL~c4at&CD39X3aJ+ zUP@W7MLrYWUdmXUMcul*6+-M#^p5;_p8i>`bRI3Tgv5wFjIXk(B|JmsHuQ0yRVQX9 zeLWHSPNJN{_;uDYev%pUX6Az-rG5H0i9z1qq%dz% z!utttOdG4t0f%#p72(aN$04gJowr26(`0G0RFTz&^PG*0b`U=PBmFdy=VH#78sW3q;4S=d7-^ozpJyOzLDd0t z1f_G1_#TLi{s}UiAA9#WuDFV0{BszP$mXmutPB3rqt8{b#>l-1B7=w=;~VNr+dFff zyM6v-^ogphVD%t`1>Hq2X{3PSQR(OLcmhK^5JBSi3oLS4ax7 zjdr$iHhdVFSL79G&s6jX(I-Uq6n)~mKJNBO{Xfz!p{qajN1_`gyhc=5pLWYton%d=@j1d_dW#ydZd6C!+2IFYy$8zGdNdL(i zzYzT7{JF%yk+a36JzA(o=fV%b?JzRK654s#)6UW!HsZXu&#ziLTK$Z6O#!5jrEQ17 z;d$zJ|DOFe-I>y<*l@_fuRswBwBF=6s=%Jrq3v z+L)kI3+QtIeYO;t6*+lUFg`WH>+7MH5T@rq0{N_mo(*^Od$+#Q*gAow1IXoiUEyJ8y9;5?yTP z0LL@LjtT|$GP2HqM*;JH1i1DALe2JZEj)g6k>**N z4}`Qu?k_F2;xi7&xQ-cUE{QdO~8THN7Kv z-e0u1W9xvF@SE^S4GEYWeh+EuJBCJt6sAPnJw7qw=6xv<5%@dd!$1DMOv7D+<|$6j zaNjAhX%3oNB1ih?f8%Shtpf(mT%FUN^kqQo2a^{a7?S|RADEnBJuoHX#zodKQ9JNq z-7(qbcVJS6?}3zzs67wcls&U;mD|g0hqq6%b=^~G^VxIQ)^*WqV~Dv>Q$}0wBc^G* zNx8Ay*dfqJ3{2S{h$Oa6-mYlJ{9Rof^9rMgO_P}}JaeceGhO7&WdV#OV8eoxh+Jc0 zL{`A0a3f&)0Yf9EB8N^v9*ByW%DtUa!lQ0s&Aeq&_(b?^GWZp0N_l zSXmFPa?!sc7>@;&_)5a3chJ{26y7E_v&C=WgZ7)Mxx3$P)k5o689UqQ*IN2}q4+-T zy3KLK)HzOKT=+r1G~x#sJpQtw^lJ=#W2IlqkcXsSW!}O^(g&K1_|3LY3*t_K6#8^I zzO%9T%}UI8;lUD*b31;M$w8Uv*}Dd6{&96C|F|ybuF~K0phq(0D$sFg8*92>du#f` z^zj;e15+$h!r#M>c13$7z14_e5vE0xBbJOwh*-LFVuaNBU@7rXX-5S5sQA@RBqrDe z8S{OW@n`TQoXc1smc^Z&8Jn-r=XK2e$4L)j7kCUGxcg^*l5;oD*Z=Xrm~3qvOl2HQ z%eaSeP`1^@IGAb+VQd%~8&P{6WgN`0y}R`X+w0pW+pgbp!sfT=-EhAoO};S69a?yKdF&f3xU^ zZ072)z|8b3^~E&$;(A}1qtob%sTcJ{q_1-RHu|B4@tMioj7J}nxw&ogh4I^%mog`X zzg98d49vv>=ApmnU(CA|zyiRB`PagWugW}$V*W)j{|pBBJ9mAIA)c#+doPI9qQ$*k z#P3RYt?=A3@JNIIZe;Gs{8jjW)_ZN9b!VQn(&pJD?tztgmJ;sQK}o-ndA4LsB6Dm~ z#P#;c5mHA_{7#1me<99KSNxV=WUR_FFKz2a4-DZKa8J^PEcPY%H#E3-8!{G^*so_QNkOcUv^qrf(O5b_&*De}= zm6#!NPFv=Q;WJ|AvIZafL|cOw%NiL=L>+3(Y{O8&Jg-H82*~-;jeoC%DQh{g7a z5r1Os{PVs^+S-}RnVGKm3eRci*EX!3t&z(E8`jS3-@V(gb~ar%TY2^CmDWw~evQO$ zcy+zoXWPhL$4~XA!SV>>^wIE%*^fpfD|geMf1p1f3eQ^fP{e%8c-Bk3Kbx+Xjs3}8 zLvh62ii;Ay2oEIgQQSd%jsL=L_BYm5AQKfMBgwwTF#2yB^3k(9@slP->vF}{@f>o} zJmjRg*uS#L-^!XA2w#7aKF&g?f1TLvA|&SvcYnf3G~(w7+vOU76u9{wUZ z;?dtGM9kSgF=7bvQz2_-C3E{D#z6THY#%beSqDsv&$GgCjPEDP2?mfl`aqJz#_Rr0j43v_;0hqG& zj4g|MoqhK|p3xV0W6vLKiCdqrP1^H_t*G;xw&<<(wy5ycwgr32;q#AaeEv;%!v)1h zZgA%5@jUELhn@b{v^Xh$BrL3H|T_`?+L zBQP+Y6w4gO)EvgtJ&dW@jH!niQx7wy?qW=(oLkJMZm$mjU@Q6cUwperv?VbyL zJf$+8BFP)Yd*)Ew9-bBcJpSvK#Osy2I?L>4&4*p|6nD&Cvlg%Suc8Mi%DO|0mBY8A z_hI7@9j27{Rf~FRd&!Hn|3Tl-bemjat+A#&!#mCZ#(hPcJ<|SSi?dKxm3OSY+li4y z*|HXu;RCsmy33>SJyU#~U-JJ~@L$*JZSY?&G&@uIA8)@ikN>*+JKChRuhi`PFTS%5 zX>8L%V(q0$tUd1MSO(7}_RTnD!;+2?uXhOc+qA*hDQT-h`;!xtn_{@r^Je5nE8mGu z<*&3KEqc{q^r*vw6xW<^rGFS_bgHn~9bzocMF(5?*q{$1m=9KLo(i&YWmwxSX6zUn zu)lR?Zg1pw$0yt7psO#Q+o^5N@-Jc>fx?rX^dnxcIp4R7A^YOBr; z2RvPg^l`p|oqQi->ojzHCz2SNqZL=O)yH{M>;~8a&Y_FcW7|FrPd)XTANsQ;PV82) zPkI)4_=hCy3eS3C_$FFif87-E;Yr#r>$%i*+8FGxU_Z@7){W$B$86cN4fwX>A@=qE zh%M2@KB%&@QzzLERsKc%Ui5T1lPtCsx%=oiarh1u5odC3kb06nKGnm#v<)_hLhiI9 z?!3cAjIe{yN_cQQ_JOjQ+-H&M-n0FHZ)J@+PJFyWMU0_)iAA|~j9TXL_Z8cam3^gt zj3sHuPR4z6V@G09>gOLyv4I@I57b|=IMy4(-0^(5x8=>J+vcnQw@TV5wuWg&_W01@ zDrtWa?Gl@73N}H(>oE2hu@fD^CUd+}Sy#2Dg?cPgaoxiBDmUG(E@S`caEjFxUlipy z7&cNB{#mS;i6>txWI`e15<#Ge5-0UP_z%Aik@n z9rC+8$^D(QRqA9-$~W`AY7KVtO74J4lf6Z3))9tv^Mf zG;K@QE?3tU@ue1pcF8;lV{B>jm$RQ%&X3#= zh)i0~eCs4-5Ffad_`t-%j(~*d+Fh^N;mcA4}w=?iRf7VzjuL>JH{DJtu13xUy zA%;2SM<`)w>Fh-&x7got3ghN+c!si-`0>bp5<^(=#0M^AZi+vA*&ysRPj<+;9sTsdYNCRY5Q6BP*2jv(_&i!pH7br_)yNuT4~Dx_=8>IThh)cv`O086InSE zf1n!9*h%|S+4HM_<{aF?XT`^{a6^ovl)64v8!`P7bKKY5f6P#+mc{cqu2fodD#k3jd0D_-FY+Z%&xB&5regF~~80#)Iebe5~ia=S)}j!>=@F$|-*mafn^a8}V0`bTUmmE_4>swBT0{aEIh%&%v$qX`|w9)6s){225* zDmG>2Snin%FAKiMCcs~r^U`kdhZh`VFVY)d*`GYlSP~wvi2Yt~eCAs?L)~P5QuOvcB9nklwlOBc_97=;=^MHK!226hP=eRq zlY3w3bD0ZXbv5_RLcU=iY_zON=)`XMEYVyt0yrCbUuXJ7@p8pehv6MAQlgA2uoM&P$mfPgKK*M*e z8E(1F$9aP9tXGJST+>W^OX&OK;kd_Z;6wf`)`Vq zydRnVn&Tvg{lvKe#{1VXzwF$A$o$R4N#0DH^sILWeh95JyM&sw1*`(D+#fg5R8 z0&8v$Oq)zvPP@z%RdI1-dx8PiNW` zfn8bF!#7&JtlecAmFtT>)HYxKU;eKmPg&QB?=GNoh&@LkE_lP*tjWpjXBYZ9{rLue z;r`MNZGG2#*iHE+@~!0Ov4)igu=h?nu~q$m(md7^hDbl|$O){trWwt~2r`}WCgQ4A-eUfvSlyQFUQ0|==Mt=|I-ih0}cVYzhPK;C; zBhEt8guN-yQtBux_r$-Vzqnt`DfGY6|I%OM>KNON{VL}V=+{zT=MrcW$z1@6d?WU> za#FcdS7;*lh+`xEG?F`(O5yDlE9}x|b=jOxk$c-pOegC-Ed+r+S13RVvIJ$7}o!pr?n!EaB|J6-rOPuWISkYA_ zM!!FEOk(sOk$oM}U*QQ+ce>;AEBm`-D8yKi^=6(PmmiuAVa_G9_qPGRQh%Q14pfEv z_mZE8`b6gA^VkbE;LoMtgX;ZG_RR8$#b3z($(_0G|B3u$y+y$WW@g_o09`fE5n(W; zZJ^KZ_QKPOJw(S-@JeNjh(E|w@DzOg*q;=hN<2Lc&rE5fVjMjMKc(fli#iIf6YU94 zNGza0+P(~&{o{3k~c$YT8`v7>0&r30QTe$a-J_((mn9@oQ%6M1ec7Q*!=eRdXz4^cJbnaNz z__*-!v+#ad3-04AkgN@I@7^i+e^j)e^9+1m_@{eq;4U4;M>O+6?D85<_wfH$uW#W0 zJF{E;+0Fm0ewsbZoBzMWcNf-T`)TC=JKg2UJ{^1_+0XeL-w6Mg`n~JQB47A_mWTgu zXu|)8{zCq*5PwK)!x!`a4B`Lht&tNw{C^_6C@g=Vr)~E_GdKT-Pft+J-%lHb|DT@k z2mf!MFR|~N}J~!1~ygwe^-^d3iY5aePqG(U~m?He!(@v}0cgH#gLz(cIxX?nHGmo?l?E3<-&J=s=cwqNh_os5|=U(Up3ax zxH8%;brzE8~LwdxrG1T$afdkUnGBD z%zq;-&RD*QYytnJesBI8O@6M2|0V|3Yj=`P3~Q9XoATc@k-xG1>hgCQXHQD!Tq=Lp z5YIFZ`P+!U0Wy8M5;+O~RQx=U!^=btN2W1yR>g!5)KZ9kli=Z_Hz18$+b8m z>5D74TXepdqRLnk( zw>-R?^L+W@$2BQTarg=E4)fFEPriW9mhkTu_`i7b??To&;omiOU5-U|@A-C)(9wvG zOWpoS89RZJt>v~8TT^UZ@m=x3Pf`4ygr}F$FT&Fo7?hjs@O0U4pUC}JlhcyVbz={( z3qE;y@c7p`QzQPaDQS`Cy5MUfIAklFG2!mWM2j(9e1e4MM-c;5?uQm!W5G4r3)fuY z&I+!pG+ZsV8HtKhVrynF)&$=)@HTta0PZ#!*AiR>k4(ikZIiYRyr8WEFCe?iIxq&` zAh*5}kRR3Oog8m`XKg)v3BIy62)^EHgPk>{IlSkCvyOMxqT~j=1s}nClxNLw;~t0~ zoGC50%)NH(0e@LL-Xc9W^Y5x2AM%2!4LX=|!cu2;R^@4X0VgaQZgy6!;I0^Sb<02S zi7{ARE3?AuOTUGWean5qy_BU@q@&;))jP=J9LN!q;*>KdLkxhA=A*GQEi~HM!=LA1 zAXIV1wNYHeM?EoWbx&tp2lB3?z9_|Y!wA#T>K*JkQ>L9VOE)Plt-Kd02N|hmjpFLz zDVMmjI~O^FoINRb5%1(|T~AN>ynA=ihJMbT)U%axj=sY?>WQNs?VW-DqrM*9$cxq5 z^6sdp2xnX`+R;~W`HwLzJ@^juW({pA_jgvUS6qt0pv6S4_*iTw=KMjonwFL=K^Nwm zijVnjJvIh|5&mq>@6Wr&Jd@MV(!Ohc1iY1Zy)JrZb{g)m?=srw?K-&DU2Zoicdd7s zK2D>Ot^IE}@1&mEP3(C>rx1gWvxULz4B-5CFm(sgMxmYPWUIluu1MCEP1$G#Ie$_RHoP1+F5eG?jycfgH8(y&L-|JNP;<#UiGSsOSHZjE{15k4x@y4l z*lzBP<9|1Uqu?iFLdMq(;L;0Rq~Cjhi;Sxna42OQ)#mZPEBN1cC}$1+AVpT!iA`2l z9c2pbswq=1>&PnTKzThWuQ%nzQC=M7$@noaPNPl?a7IzCj2{^{LX+OHJokd8eR+l^ zJqGeDG>PYV81F~&JeD@z$@AT$in4h7#2Dud_mTg5+C7o{Dg57bp3~XehUUFyk@pCB zkCXQlxXe>r+ef;`V&iyfq~R+os7SOMbL2*<8TY~-2t63=nlXcoLGG121s*4{0mzxo zwLKD4H6>ofPF45dn@e7q&|ayV2=6XLN4#Jr#xj0m@UOaL(&`IFIafEX=72#xQm$}j z4Sqm>iCxav**@+wQaKA!iH&{G8-}H4@tqO-_Lcrm{6O^o>&5@AZ>!WTx=tDYny*qf znzU`pHV%s~=c9<7e1>(sO>mnnVrLbfqYmJ_*Vw_qnT@)M*uK7_PRIH9CC|GuUz%YI z*kVAQRj?^Uv4#jf25=kW6X?MCqAm>|<}m@vfNFIAd-*?wbxyvS$G7@7qmiYzwswE> zHs5d$tn;;CrH(!vU&H_PBrl!3qv)mUB_CN@^5>D?leO{~zJkYj*V4y6uJ+xQIVZqD zvl&98I_y7+p>VK;^GyZ~3I}(=t`$T4eR($Vt}D+`JjZZGrW?O~Z`okG{gxuz;#)qq zDUWTi#XnYLoB!D7w(G-{f<6KE!Cj0Yj(B`#t!AYl!D1hr2A;$r9dBXn?}0zy=2psk zz0l*Pqo38#7HM}2+IH-{7C8!W*Dd&qE6;2lYw-Lw@S8J$TE6j_ZDS*!8B);2$39r} zu~C#gk+oWIReY=kMt^K_eoBEc&_37_?C%I@+0Jnk-^Cs+mG>O}iZhmak5Z@pt<{G% z`r8Kw8~hzBfn3UXoifJKhJ1jr$1^ziD0pzCqys?qelOKED*Xc`0! zgB(VFM{6{7Kbv_LI*MP4(DZtK8}?7kFd~1M_NQc+_fO97**_)2cmLFk?ze2TJ#@=w zw$-;3+oB%ZXq)udXSVJMN!9g=2=_#kAJx+&pc! zjx~AcY=X|-ZHjtsNI|q0%?;3@D|9gUTMJCk%llhHpi*FJN`KSE^l$F};{CzFt1p&O zc3zXR^?q5#w|QRuvWW8*3(+rLU{2s~S2vpU$kSmt{w@6-)zaS;%FM`lN!7=VNAc0i7TD=NXoU8Lpj=oqZiX z77iba^zboKjgMKH=VO(T7xS?n>EEm7WAMla1Km6-ng45+k8#fL!FKL%KI5CFeC$T@ zy!luHI*ahJm&m_}kNN$4KBn_EALgLUJDsm}=XVHv?N0dGOYpVbw`{tIw-r6M$<}AM zQgEZqP;e1{3o;Z4e{;_{H-8Ig(jD$-G-E^c7wg z9ABXEx|W6lZ(bJ|dhuM-ztwnMu%X~0UPl@FoYHt5@4b25Bh=Nv>xAwx38j zLU*CH&infO1n=|PKP{s#{O@7-U*AzmLCF4xGK3F)f6LAWUa0ZGQH^~fe6Z}Xowh`? zr(f6`(s|)1%fL=7n3wnmv5c+=MR*ua5GEH-g}F-lrO$7H2BmImjGI@oFpqB==#lw;eA+GZ`8UdZ zuSQ(VD{rAr$N7XM&;RhWN9MZ$nJ?;Mna|%X^R2@7eNjs{AJpU)_9z=D}&f^C~ zy1(K4MC%8k)oa(eWxk{E#5)*Y>Es<{FM2)slkkxiUdg6pYsu5+?297v$(#j;OJzRy zoD^BbE%Ujbb(v3}vpTQTpZ)k==B@r5%JYpphsDgZDXH^p@iAF8eSY^RKOr^CmU8O` zTN~!`#3we`mc%?`%T9g9_Ib>+w&K)hZPRZ3+}1YEX^TdFG|h0@ZjW1P+j%Se7Wrne z$UVrDU63blvML34%vfrh#r*G!tfPoL^u*`3Y-FL&pV(xRxj&J)Ka6*B?~x{hhA0K` z9=RwA|7+m|J&}u^@1VR_BXnXv_&MazqtNG%jWXz`7Gz7sxg}Vcw`DA;$f8=Ffjk3w zq#~1Qc}DV#j9*iub@oSNd{EqU{R=!vgv%NZ+&A1kpTTND_d_{=ukGghoJ zURrzUE1bcLL09R4-V-P527ROHD_-NoJtmkl&aI3I^cAP3r!Xdv`N=bqM=CP4mS-Z* zM4pLp;!U%rvUNOT=3?2pk-pm6(RBRiYlmn2XzPw9H#h#@-TnS0XNXkwUjS51K}0ICy+r)M28>6 zx$6SHk4Lu=8^I*@+s+98@vJch;yUPMI>Oy$Mq-2TE>p&jK0amKG%ede*`HHp(>3Wf z^1RoijhxMuHEALF7p+OAf8Uzq$C{(_6j_t>^+(p6a^(3?)|@hI6tY&#Z&-I0W54)Z zTW^ZsCkx;$3D__6b*687r63D_A?r!QIs(7Y>=+(-Qd>h>H?xL-n@7&q)`p*6L)`0y zoR8P-7%xJr2LA0ur(eRq^}ZDT>`klYcy(X+vG8G?CksFB3O~LP8g=pT(L8vw#*5+4 zv*5etp-MpobX`EaYwO2Hf0D}>hy9W@@ydaTireL$VRjtXePUp+LuI{wdQud6l8i^0BQg)7Ict;_iv7oHjg@(W9h3Vi{T(uoM$iudfI_~kwer5e%Pyqz z$6T3j_{n94A}_+LyLi=uJ@cY^n$9J?KJR?JUITM&S(CY^*YBOLw?kz6hIU|I6Z=QH z$Ntenw|{u^XfK(5*%fRbwSzuLKi1EXUem*vek9tIer_hQv8MT8Bf)R@Ud{n0Vb7iG zub#(N;@^7yxQB@G6!JFvF2*5yFZfwYE@T-?-Wn9I=7(8b>AWjo&#Hhus{&Ko`ihno z^>8~sb?h>$dMv_M9TlWFC$P^vYW4hA#v(%>i}q3R(|c)@60qfH4>RXBxyx{XvTg`E zg5fuESEy3AfwR@Gi4BLeD#hR=ww|-5961i3=VL_%=kaKxvo_k`EKf8zEAkA^%5sDA z9QJ3siM=F+GoS!5&RmCS(+oiT0`I`LE|l24{eV9Je*!)Lz5?oj4yFLdt-u3-Rk4Gs z-4zKW19l)6C0tNdtiPA=ybCL*7X0+&()gy!{(VQvX2m29YZWOtQFy4dde8+Gpn-lN_xfe)zn zE8s)w`G|Txp`O1>-64g8zb5Zn^8QKQ0jaxn;b0%~8*u0OvbeW*<1TpXIA0Op&duN( z3H>Rn0bjnkEWTac_zJF9jb}_Vc=i;Vi-|LzM!5&OMEZRqJ_Xm>@7IL;zp1aU3HSd+ zeXRHI<@#2}@wMRAbnHf1jZV3P@PN#7GxOZM;Wh)%1&9W^0>$*TKDIA6u4O)7OTRXq zzfyk`>rWwkbQ$3Lg>`IqAd=s#;jU76Q5kR$C<8P;~Wxz(D959D1Na_Z#_E3(Ua_p32ryM)w zTp9lu>WihmQKX|uA0$mDy&V2V#m?OWcGn2%oDMt>tOB+I$AB2>jiugEq@zh6Buyus zWmH-pU!$ni$PCp3*jr|=HUQgQb)HGZ$H7@m3=~g9lhw-Pb%46LxH)v~m6ypqgjB5(80N4!tx~6-rYv!L=*OXt^^lRaN(Z8T7x~zc-*mU1?4Gbxr^OV@<$2o%le6=D5^Zw=6I*R^&41e-8LvTRwu_s?T zj!s(Zhc6qt_~JuP?5;yjh@8*)PM$5;Sg?^fw`1QF-L(?GnZCT6VDPC)7JnxLF}bl@ zxntG@=UdI01qneL-%2(QDVT))Nn-eATite1i9f#HV5zZVyD?HOzQntX2J@Dzr_4F! z7L%iE0I`jRT0g;$;ZunplOXy2+s?VMTg&`@i^_3W*5XK$qsdnyDMsz#2qT$$#hT$7HR6P=%h%G4rn^Jsw?V!yM%Gu*#?YYzYTI@`% zvc=A{xWUd8h@A;vLoYki;*0G}e%P6OJ$5E+N|)G~%wBdTlX_v0Q5_PAZD|NLCVUX* zk;)j2C#^#EJc8_5lZTC|Nb$(0$fh0{wIT%@Qy%B-iww?W<7I42_@0f&#&kKmlGv2& zKVe6zYH87IM@J;h6&n(1q1cc}OYN?sq{o2cfY^^}CAEtki8R;lsw4d#I0>8regJ+1 zP6PFT3pfLu11V*S{ivZL&0vP zx8s;sJ5ESDup#K}I7vH<*o5?U{3z|{S^JCGTr9SSxw zp@+~yum2J{L^js1(Sc{ZevJ-Y8|&BT5aU%pZE2{VIvePK{YUDTx&?o|ZoxgePvKy_ z9|V6R-+JTUwSQy%g8xOh-{Ms_?P{o-HZ|aW8)HL}`%%mdwx_6C_ToM5X-W$j2YP#C zT*x@k+avUlao|l4y*<}DCYq%MeWur~(Sp9#>z1(~eXrMj2`#Q+95gouqUmS7ZVm4y zh(3nRmQv66J_q{eXjSnf?Y~%Ldjk>DWjK7svEzr zZ?H|d$7Itnptncpptnc*UT;rR{Pp>#w?!ZK(hl*>Yp_ji#Wn>r+NLbnricX&lmqNd zV4JdFn@YaOHkH5_%)&mCjeX{s0I|(%!Zx)D+tem(Q=70&ZNfIS3ELEO0TO@|ARAZ? z=(ec@{0*{M*rqmNo7#kJY7@4pVr)~z*rtlHO%-FCD#kWdoV1cURqD*A&Mo}j%I|IbE~UPo z!oQR{%c%1pb(*jXnXwD`1YRD0J9RAsHUi~Ds9^1+Yc zO8D!xsW|E!P5oo2e=NT*hkv7Osumg_J?y0NAj>up+AXjY7+1aFqP-c=ue}5l?8s41%8zUw0)>wWr0iO!Cz&8 z=5>UBhb&MEAKn1?dSn6d37Ck^cBQq@s<`*5ew79O-1(#GZxy@mlOz&M?lt zn*2&?2erb^6^6a5HNI1A@SSRl9jqPpu=d!+I$$5`i0@P<^?Z@9^As_;&LJyGtgW{O z4O3Tk=PY!R;`*Q{Q7u@JpuV#zUR{OF@y(ZSQZvE*ID4eW`UR=;5|r@^v1h%;7`3d< ze#IZZDGNSR3l+q(rC2;;T1tyNx@Zw#5PC z038R@j!at*;4VPNCyI6p-e$_{35@qD*N5_Y0e5?q>q~hz0QY#6>qmLLfqT8m{V6(S zV{=c2&;GxF%d6PU{}Xt4_l0*Kc++0lGchB6PfEu8JySA@_Dst#e>pv4*q3P;3%*Rx z*!1Ph49nhG86)@3&Uk+BBNJUQSg(`6pej~6d3z7DKIvZ6c`&7 zi7qT-|Cx=!z}T-z74qz1`;wLc8-a2lyVJg;@$>zA*Yp%`T%X{to-gci3OP!~XIe_LuLlzkHWe3{(OZ=XcmgzQaE9 z9rls$l60Q3f&G=LXyX2XQ%~f%UgpBVH&_Y>_r`83d`5i8`;vDfdHpY_kl9x~3Do@@tcv?`*XSU$f&ullud~WNV`nm0nm}1+Vsl~R3V>a1lr*5(d zPPxpNNZKm%wSTrXn6xBH@pD8q=8e_!x_I(#^7>BfuJXU+HGHR?{U`5cukW<8>+ZaU z@3gbDgM9DE8I z^Tz6VZ+r4oukYSz%xn1WT~A)V*LTEc(drY3$x27?#;k!kwpSi@rNM#Rk zTYpQ=s2EGmL&RXNW&J$Xk2_}uai9Cka$in|{EEcU>Z#kUu1~V=uFub#t$q-}T0E06 z&e|LBR6x#xmI018v)a_hJY~uGqJ_n=Qv9ANKaF$K64R-R&vUOVXa6m~rPZ~n6R}eU znbo7L=O_A^)S76cdSn1GF?uLk{6`ahRVQgfC2)%MJiV2&bS3p#Lc<&@sbeK|TS8lF zb!=gLWp-BTj&cqpGeoI7)FV(m(mOz{VJ(>u#JLvEVXtHlw#wn7R#Bhj$lTpkJrtM4 zH^dQ&EW6ORwZlSMg`98>zb=sz0x7e~F-)xuwm5$L_;$6bht;*0yLrFBZ~g#srrhUq z?&INVI=;t0zUW7c>CW6K)dE?lZT^p}H4>}(2ikp-*d0f?ms#rlA=;!KnT`jr8q&+`?gWewRzOc4)w?|@*oS>c3F7Cf-Xq$|cAE;B>_>Szk3caCi1MPZltc^bK`LKMHLNu)R-U4Xt7CSH_9_uhw4fz1Ha`cV|g^<*w{A(78NO zaY?)7j#PKMJ3~MB7&=Mch^!}l5<>eW?r?b`v1y>S&`HMoDQJBBB0SpjeFqJXFTvvj z#`8P)?MeHjZL8qLGKRFVbC*SJ7)QvsG9Jq2D(htI;uDx(Px~c~;%hCHI_BEA`D+%w zB6ywRuJ0pWI0-&wbGaLd*fJ6?S*L#`bdvGq0*BJJ%F=S$SxeiFgNOH+r~)S$r_#?d zCSIk!2N@F|GiRjz=jT3v{C+=j{C&vtzeTRUm;LQ~*x$Yzd4D`||6S~Fk4r}n&|*mJ zZed>f1@J9!Axm_F)_l{3Z`-09v_m&&PZ=F3t0QH0qU_G-2G?<}!q4eKH;`EDXX&2; zbc46<9jdOJov7v~C8(<&h*w1?kXSiK84q#};wSY1&I(_UJLguv{7MYE!aDSUw|3m9 zzHe$(FSw#&&|2BP~%%cy8oybi4s?c9VA4t9meL&XJ%gMQ-AAIZ45B|IL0>z^jh#nwv zzsUKzj?xu*z8m@1li!_uU1t$}McO`s_ak{fiua>=FS?Ah{Xz26$@aW z--`S&uX_5Ee-rsPlRv<#o-658LPOC9B9U*blo3xE36zoO)t1TRPa%IQ`P01GqT^uU zy+7{*cpvE1Cedd^e-V8}^b;L-(VawB65U92Asy#GkpBqzkCH#ftDdXDAr~I_Kh^%G z?fyA>K<;Jqfac_WWdE_>ApZkny>)>3$oqLfHgf)QU_qy^lU4u=!@fZW_$KN3PTwT0 z0z?NWhh9UOb1}fbQwNyGI1+ie)Jq2t+5ZOQ-`>di-gaUJo&mVAo(|wKfsg! zbM*ny171h2%tPk))(PbIo8+(XD~EpA-_+%;W+_IE+A5j{cVfAOslzZ!WKnZ7&E zF`nmGp5u7#;d#E2EZ-Wv=qBJEU=AR%d;#r#8{J0ac#+TF<$1N|S!C`tJiq68exK(L zcwXyy)@AL5$lAw{wPzq}|5dyDggDweMytouu;K6E9y-?gqsT+9Iab#PEs2w98egAp zx~u*ZWZw5pSyPADRQa8R%*{G|3Y=wqJ~Uf#)z^$rf0#LnJ73!6S9Kbz){D#%fdIlN# zEI9B#;Ba58Eqnfw5pxV(Y-?~4_h zADWG94vj8w2Hw$C8UJ=~WL5g${XFWVO`qhM)T+@|*BbWHtL~*w@(gO#UGz(!LY&G@ zn*1*Jrd3Sf-a-28{M_Fo2mKCt=mF%S`;m|CL&o|oGSYx{d^j|q#FFHsY~=Pt=#USe<8az;3ao_hz#8! zKY_CMGhe0O4oz#JN`IbA;SN~(Y&7e$)|d37*1z@LEpo5)wF|n4J~WdyOW&?)ql{M%Ke1cdFa2sE242+)UsZ6JPQKvuMMwun)e0Zx zqI*obp!-Q=@-uvY%A~~oVCociwtTeuBlunDg6$eTwft`jUlHBo$2|N-i5q!_I}EBA zqZ&>r=(Kqw)hdmy5^uXregb_adWVkF2Q7$wJAivYX?Mf_w^LkI4~$gnWvoG)AM+G# z%vG5bV&gWJqw6p-_7C^w?n)_ZkZ0WYbC3Jev~v;X{;&7YAr1bp5`1M23ht@$8+-(R zq0QL|G9Q?O;4E}FxqF1_x_6Z7jjznflQJivdp&dVl;BH0{t#_YU7mR{n5#b&)qT^*EI~}^qrdBa_(vVr9rK@TcZDL-YT|w;gywPga zDmR_Zc+p88Lo!B0pZLE9(uV;nU zpPZ|>4xq0s8?KBmV2?3H3EuMBVB&mWgE|VI^TUtn<2++Ysb5HJ-Fk~!8R)C7E^_N; z@0&~|6^zsO%8e!Ey&0FB!55vZzR2WUm&blhmZ{{EBKC1oOeOCono9m&t~l4G;QNHm zv&}@@Us4BYxq&;0`8^4^o@YNm?q!hJnwQhvtXHv@V_^L1x>hn}W>fx3K-0AtQ@0?0 z3`G9875QV3W`{L7ZX<6ndA}iVh$l~UmYvW1BN!N4LJExK+_OXSckv92-AxKKqcHI zdA-OJoD;|!PTnZ;Y~%?IQplS|UK)8b$rGAf4tIPt9rmzY*xq*`Ywu24)Mnrg3%7fQl@Y)Mr zUxC+G9=!H~*Iw}Y3cSAZ;I$XL_JY?};Pq7lUd{Ep)b$cN$-leL{yX}nxju-ZPrT`$ zz_T~)Q+W2KyFKh;x-R3{o2DCi_NHe!&)&4u_l}yIx0f5IqW3kWZ`1kEbS^ZV2eNmh z>5cG?hJ7Dm5iMpPDU^Mrm@eE&y?7`4M?2X++R6UWPWF#>vVXLb{iB`iA2A=D%s*fh zkOnLQ3V`iEEszU8(se=aeW6Qn^>x@=mEaRwf=_G-KCvbE#FpR_Taq*!m899iwwu|5 z8ZdpE?YHQi_r-3v-H*=s!1V35C($>birry*8eKDU`VQM4p?OPa9`e%mq`ts7U^cK6 zcpumcoCex2*`72IxF47cyb62@d`K{}#k{=SXgO~<8 zlEwkEfu+Fvz+T`qaINLF=YIwQ_XBf*SAkD~?|=({>?^HCR~5Zh*JI`Pd*r|G$^U@g zYdya|)Rp>DJrn~D!E;%|EpW~+jb1cCD4$(2dNNovIGqqZXZN zKF=?IDRgf)BWgh_o2i67Fp_EWU716;qFdH#?tKM!~D%lZw0R9 zJlKUqU*w#y*p;-sYP8~7{q0ay-JOWfOoF=dK)m`1@|Ny5GZA~ombO;cB9H8~2-)ie zWUqpE`lySLy%s4!Ti!B-)E_-*_}hbb|LOZNcOUwG%#&ks7M&mCsO%T2o}L||*4@=o zmHoK*|5C?AYHCye`ilb#a-Y4WVAS#_LgWq=p;4xxO^uwHs74RU&kCy_wNBCAeFI;W_DWmJ z(H%vvNE_d1E2($~{jImVt)gc)ZR^X>rf!0tx;oETQW<7ZPo4BpKPpn3?_?p5vTyi_ z$&Ad&zCnuFDKhDaa+C9<$?SX&8k~(bJAX(tJJ*#f&L4Z=AC;mwAjW)`e-|`HMZBCy3 zrSj&Le1@#-`-+c-_+^NnhWKWPPsSqbvf`IfK)M*)>{9Hqt4ZG{)!QjP9pc9!ejVb= zq2npO9NYOn@#m-|)$!iN|L^7hPm-P{)#Y-X9^P`iJ?vZB^et`rmNtD$oA%MBeY9yG zZQ4hhzNSrI)26R!)7M^Y`j$3*OPju>P2VQzwB5}AZRh`LNNc^?x{Lqc%m1GwJx!{& zNpG`vn?!E6GuQ33Kb!V1BVA6qkh&I8mr7bdx|lkaQpal2_emS+^$l(NhPHh}+rCNC z@!rh;ZRh`LNNc^?yo>+e%m1GwJx!{&O{cSW+w8PIoAxgwT}~=C^+nVncJ%_%#gx62 zvR9M7Pukd~uW8fQwCQWw)Yw;>`M>S_Ukz!kS6g@S|9koWlcc9f^)~5r_HNS*c*g%E zt-RZEt@POlJ-q4Clpam#Ao8yGyIyI&>vZ>So5;P_ItQE1y{2=n>0H}KUsRyGkAOEd z$i>`${1;@j4#;R7<(`u0C&D9HE0x9jkdOBvAMZmxhBpAqfnuN%usHW2AMZmx-iLh5 zyaWn>?LaLM^3p!!y?w}g`;hmT3&8upUf?tk!~ToxpWcf6HVFCcHgwFvn*Q$VutN8V zz04spzWM7fdoBLl~_LF^&XiuFZC}TSCJg^D~3i%p8rLXZ*`Wio_ z=G)L*Id|~Cvw)X?H9%|r_a@*TU=DD#K3~nrQ6SzfVPWpN8CSiQ8lI zpRval7x$&D$BZv+W8(JO#?IJl%ZU5RHgm>THeHu$C1a+`!`hf>zhoye{7z)}oyhPz zk>PhD!|z0f--!&rlURMfOy?54trRQSpXdu8^DKLTt31zFgYSP){#4+PzDfugPEkMql&NLBKWX z99cg2wQ!%d=A)+Me{}CK_3hdCWlcYIf2-#z$1fO_U$_KG4#;ycH_3cgY& zhZyjil6@-iZR?aTI-B@PiH;z5fd7b$AAjb;%T?%>wd^Gv7GE#q{ptrsQSJye0Uy32 z=$m_u{*EK`f3f24n1FxKTkI9dUYYnw9j89=@!E2?GXA4`eV~yU8kwMx5gHj9>Xv#h zWcgfmzqQ_HYJKkB0Aj-WtMBF+OHPC5S^UIYY0A3t-P~u6P9-|U-?Q*VGU0nvj&D-5 ziSr4jk~MkwA!V6L))pB{K2E_GDG{Hfa>Yr|6YYG$Hgtxbtc^9KS%9ujOy&30=n{oj zVdIW$a-PB4=B-dqS3vhK65XLWS>a0Zg}m2gv0rtEUv-CHb%&p)XL-x#|0&(!=gjy2 zl;Rw~+HO`REgtr~Gp)EjbUvzC|p4d;jR@_SGwA-(pm>)n)aIFGvhT zhj^Af3x`jE19`R@KMC2l(EY+{ij2-0xEMv*RB0p7^snS5&5>MFF+-Q~yWEfc9T@vhQef;DAAisa9jGc>rr@a+>&>eTOPs~0v=|<9G(sI&DQmI?)8H+l)_kasX zWgmDusn{24Nw0=3a<)iaTn&xA@zwo&bl)D`pGWuM(eR}I z#0NUd;&sUnu5^Glc-{kDWCAL=V0>9LjD)#>ak;FLVUL>)r3SYg{55>=MsXvR~&+uny zzMO0KXYp(1%(S0FKO50_X4=njsr}r~!9_T~*q=pwS*oIv!z0<}(e3|o7NpT9#n;Ox z#kb)Mg?w}MJ}FmM-qri0_MyjQAI0OBnb)DJ?ACexkRgrz(%DS^& zdIS;op zsdBb@UKjV7>xral^iVaw9X51izovdFx{u1y0r>kz;H!;4yqw$I5Q#5(nAH`*?|J-w z2U+bzx#FzLQk*CABt8pgIHU2INK~AsQxxZi<%)A1>6s$MX@$2$0SDnTMSu^#-z0q& zXzIs1nY^ZPP#)qOpu|C$|XdZu6wuNfq8*tISj=d+ysFvb_O( z0nFPr%eEZ&2QYuz!?rhp%|O<+*|rtH7C_GA{gO6nKDyZO|I_sr%UXJkxL)o&pR8kc z){ExicSJ@0bi9tHXZ2)VJ4)Nkj0Le#>u2&V7mMSFCyviNXjsL5uR=R|(*M1D*e^41 z-j3hBJ-_?#yRYZ><<8ROvOgs{_fMUfy9ple8?({o$2qtd&cDTS?oH}WrVUbeEO-6( zf5sY2S`usUbM$J=8>{C@yX3o@yuRz*nAh;#0?xFp0KNc@0NKR(SPsa!z2%JYH@sp; ztZ2+@h#ev8mVCF|>pQhEui?A%bH~6tI5Wc;lKKfF@ueGqAKmTnnBnl6VffJvO^5er zestR|n3iq?)&g$<*UXbRPriYePjU`!8Rn%ur~iAzME6u-HqJjrltBTw2e z@ISVF>7VnVvE_tiT6S@d}eu@T#J07uZ*zu@sp`B5gWk3=yc^3q8}D>nW|H?1d9%pVarvn}5T30B zz_Y<=9yrbS!ZVM&H^^J=g=aB&o5=fuJRO%K2?{u7clh=p5 zzU1jR{S^JI;1mx|30`=nkT;pUDPDLkAn#f77Lup;l}cVdd8^3N`$})yR^Dyn-FDvT zxYUw&g1kENbXDEV zz;M9OX@62z;C8?m_D_8J|Cuxbkae>18rDhgm{t0kS%$pRI%b2dP3i{Qqxka7!Ix(r zzB^yzyQ8h8=pS*+RavKQZCIy#9X%TJJnNLNLtpm>d3~p^d*n5Ir>}drd3~p^d*n5I zH=ecb5#Z0jT3{dG0usUw;FCoRCqVp?WNmxBVQuqu$a!v0o@Z@y>mL`dfxeElm#l$q z-9)}y=~bTi?|AYW%InJdFZ3z&$QmMF+{j(%`dZ(I=YF1N!B=FC{+{Q{$sOJ?y+j7d zLk5wUUE;5^jORCaUg3FuUE0L6?qhT@4|0Gn@_-+@1b6V7j84%bs^4JE?yA&nCS8gCAnWw=Z)CqBdO^J8d2|E=zgMln zKOQ^#NLS`d&k^&{PQ24nlYQ_av*I*xm%H4T+y%eD*8FY-Mi>%MKCv8Tcgt#5$z`$)!*}{N*#PIkY7|Ofh-ZGF;q zH}CEte-5yn`-Vndmv8I8^(otkh>vVfM|^A>(s`L}h@nM|{Q>9=KBMvZm=@f^QAJ&) z*wmj5YT@`7za@@V8qb?}zQFS)&PImOHfig0+81}7+R$eCb}Z+M!}wP6XYf9g*Z`cU zAK#BW!R-mj<4i#h>I-YpLMvx3dCBz`#-F5q!F?jnh43Az<5SYH=i`^Wg}%HwB-rr| zJW2d<3OI8Z9H|VDzBx`DCh05bGwD0&L+MNDQ|VjjW9e(@bLo2-12Pt5Ovu=HF+q8M zDSHQ*l*>7Y%l0exP>u_w?-cq?`fqZSS?fE!ucdFLucgnWzptZD2YKkT0bGWoEBq50 zo}f>R^iN-)h~IxD{>qXaskXoDm~MNCcq~K7A5Q)>pc{SmryVnFf8Ozg?d2VFwZ5D{ zUoPD-QR~a;^yP0neHqE#i}a=RpD*8ja1qveO?XSrGKQI z(vJo7V|V&T@~fpB`Z1S&?C$BuGm_`&M?b!ka?X-hNIzE6k5Wz<&qef~yp#US^|5|m z8s?^N2=hkfODOYZR#a$?nR(L&`YK1C+%0|Dv_B2dUGGz&yYy=q{m`1Z^GH;ioEFgf z&F#sy@59&H_Jx07TND1it@ZTdw=E{`b)W<&2MQQJ+gWQOlomC~j3J@dD(Lm68OLuE zKex6KAKFZmCFvvKYi#$1|IJpIdi*w_NiWW0-^lNwlq2-8<0rO+=cznPy_x77!SHLL ziqOt3p|7H#b;$82cXtK{@4Vl$7KSjE4l<@f8DG)BUuoA8#@=5T zdoMBeKI7fRE(aW^VTaasTwcN5?tsf@c=#$7CYIT_ukkp5PvBfN92MjHpT2{p8E z$n$TQ&$*n#3FXc+Y2&S4JRsB%;*fR@k~t3zLb1IG4pBVIJzer{Cuy8Ebs_YgcG*cj-@fJXb+f2iXu(mzw{ZVP8Ulzw$wr;P8&7?8LlNBI6~c!iXYJ+5KR zumlG=F1K#zYr=CoF1){xSST%74?-Bn4-E{-2_Zgq31hY|v9J}!H8jdm3Ki!D#%vVn zXN=oy(lGjU_Q0^5*?ixcx$uX9t#g+0yA$mlzU@IsHxp%=w3qfhTQ$gqT#1 z*b+(a*zve+`7L8r_mypfZ$M|6O50@KD9oWpnM1-?)1m2~`QN?9?{3q1)Xh8>%Co1Awmg5u^Ipcu zI^V*<-_EcW==BVso>RQb22YuL6Ok*6`F);wCu3|s^JaZO;ovU-9iNve@0{^~hR*2?|BwH+~psjeBuRDemuUZ3!tGI@u_VKWBd7tPi$|s;LaLA%CF&no=>g4 zEtj+hsgygK-~OK8W52&JzW8(|+4Ax44fC!-~LIMauw2fMocuD!apFN!HoFtG~`|G`btk)jav)6vsGkn&w zhP^i5(g|K<^6cH@|CanGIKIg7M?CvJw5zfItGOq#d)<(&Jo`~()3f)GFS7ejjv~`& z^zlBlM#kr5;@3o`_ZF` zZ@J_ZlNONQpY(g^#a6$;QFJeSi*BCeC^Fp2G4YcJ-g4#EYw{|l&Rg+a2iLNGRN7|2 zegA=bRcXf~_TQ^YyL~&jB=XGzTl4wGuq$OKxgU=eJrxeneO220$bI*!(zf>i=L9z{ zf;G~{iw&AF-lRSo)HvQH?Y_`RzR;OIZqk{tpkT&9_>tJ+V~!F_ybV7ROI+Z16*&4j z@q7Yp%15j>o|&k;C^&F1K3c=;^t)7~ofe zhrx$3jz_?UZ5-vBzGuPa-+|E*4+*b-Ko_(2=c*gH|1oJd>D&7ksxLruf%LaRC3uKq zWeon!e6i^dzeB(8pkMKCv6Ew*oBkm7^DftWuwMr{mHTOi&+g!Uon&Qd2SV~fSsZ-IBgrxVbf<@rC7zTo-8q+OIDdRfO&Wbxk| zrQHa%55K&$?ON=mH)%cl_{Wy+n3>4G2&R?nn3=+PF2|Gn6UxuMUvhqebdj{3H2U!! ze0Q{CW+#rfaeRjKN75Qe8KTvcuC-AGI3j%Wm>yYIp z{8V%*KKo>Dou=PHFfxX6Vo5*Zy*1Rq!T-i~vhP=!tw6_N-uHO!rm=$(l~K1QDkB}( z`X=@T4suU;TTK3g*myZu=Aaz2yb@xGX!w(NZsDD4I(IJa%{{r6y{}DLp)=o`MeJT? zQyPWlJm-(!mv(VacV(2LhxNTF7v;T!*#qhs-djuAW?52?V*GdoW!8~ry?>f(d9Iv! zX1Oo4Yw)?uHVxBBFMGVBb$UE+@Ute5bst7P(3N*6!pVnD8YsGV3e# z*ub^uXb{P&^Md+I8GqlGjSpwzzuD?A&P^MLC2vsurIDrgRgR6RzcfnZC_0t>fPW;m z#I-L>|E5k0#kR?h1N*l?|HIrZWB1sUQG@Kt$QW={WL%V6F*e1mjO+|=XL#>K-an7j zk8^o;Dtia7{l}$|F<`IIKMeh#e_R^1#)(}Je~CRlggw?vU7?X{&Bg^s@FNHBk$dZe zSMJ%Ix{N+CWFvC1+F{N4OBvm(!eyb`wN)M|7oRibfsJauC-Oianmo9t*)sRCuurj( zZH7F=H$)~s5gg=bULWAPHTw*=OKaP0w#QEFQ_7NZ#rEbf7TTRX{|_Bq6(~6RK;Uz* z=MC0>lw()o|AXQ42{0%go_ZjI48tznViV*K;y=KGnT60l0cOPT-(@?rxr%Z_Srq^E z<6LmmM}Aq1(zr-bMwZ4DjO!%#(T_Y=+ErqH%{vf)~HOgB{d2;U^FkE{lyvRG{p7dYef%Xx2lIwTD zc89^&PLl>~dKa37MtN(D@^*s#T6ypoDi2@Z3GMKs%L1<-UJ@u`%sG>PDx5;53&C^Y z&y;CtZsk~!=~c*dlHq5q$+Yyo!543})MYJv4nVF^!Y6gfqD<``vXy$sc{1|VWP*I< zo!UKQJjGInHP9)@Su00u4?680vTj^Ch4IA6j4MuJesLmmixU`c9M8C;pSeXJbBlIu zZqfAlLi{8o>m_F1BI{5XqfCiZw#h#r7c*uygEr$gw%Fn&jCoAQ_A;ZqrP78}k>+A|GlnP` z^%qvX^*8#>(%wipQl6A6<;#2Ieezy;zwjaa2w%cqLA0_hJ%Kg2v}NY|*}p^^AB`g} z&l;*^$T;kbsMun8uL|bLyQJNbag1IhiKitllK7|xw$az_ZIr&;E76X?P1vNJ`JQCb zMADt4?u>7aBHd0}N*YMaKaBqG(0wbw`<3eJZY7xNVXT6!rXKrL1;wF6lb>jV0{8#MPJeTK$m)EN9 zSEDHF496o?E7@~;rTPg+dG8L!PlTU0rJv7H`ulIg<2dl)-S}N&Q}Oo=Jo_T!guf>L z9e5iXwR7xh$|&RBkGS_Sau}1abL`E;vXb|DffBUlFP8BD`l;ddl(NQ1T-lELy-EGt z)UP-7GtcF@o!E3X{4IxTR;YWR`Gj+MM;2p!+Iw^V7JAQz$lNT;p#1s>3ysz2Y9@ko~7=hXW>!GwDKrAGI<a0Tx?qG!n|kdOzhoiBQn17187A*Caozu%{TB-lfTZNU&?p_ zTI;*aI+*2}wEMBe7oe4Tr19@}D|QKP$^UM9akS!=V4TF%S0TrSRxoQM7&Quv8UaQP z2cs^BSxSVB6tU24+5yCPrw)+-#HWK}LZU)-Z5u=w)!r3vUxBBZ@SDWa6cb z`_eXyXHOnkulf<=`XWD-wm{mSnY0Dc2FM&)xIAU=sN?r8xG3$wG1>taZNfOlnj72M zCPdSp8Ah5#%8|Z}yQxi3u-|gVPnz0={hEwryxMFR+;Yx1h1o7_0ehvL7=yfJ@2KCw zhvXmQ=zQbDCpw?3x<^gkcMo$n_oxF%BlrCP{b!;7EcBm+{(nH5l|`GC zMVpnSN?YZjk5WQ;)s$UJ`Z4F>dK7u?rf(h3_)=&3moxfzUN@v`Z1MH9XNlcL>l?T} zjE?6pR=kR`YPc_Sqht(M$};FiaxFHo3ZJy$pJu%VR(UJCANE$Ru3Eqx&oXr&{C9)@ zY_6jd9IDB87V`>2cwTt2zONiTOUy6#zJTY`lwsPj`Houn8Tz`nvfD9lWp-7*I-N*;AB z7P)afjO+E}3EeL_zD{|m+&5!EGYYJc{A=>_~NB)f_iSnP z(!g2b`H1SAzzd8!&F|z;?Tj%6OWtDto400`l)g1{0_iO0Ii#m$EQxk{6MYqt^+(7* zOE8{z{UgRSBrc3PJzw2O8TSx(9P0C|Ive|*5~<3fRCBEDHj`8?%X8b!gt0 z?hItXukhNLwR?;B=amorr`nYptj~M{-T$!9Gdy>X`dXj&1D%k$S%%GdXTaCh&^`6s z-%H83i+7rRzFXnr21ACOu%*}Gp)1ed1`j*2C!2Fgzy}W+J$NJawn6tW@0-Z`3j53t z_(YzR{Sjk$b0}MENa`%UanTK-%Q)GENWiD`j66i+xxASa1=Od`^?Z|iu=S#4o zP4q4Eqm;(AHs!`e-567%9Ff;;4=Xds8+DE(n2_-A76rq@13oD(LAnGM#`-ZOrM^_L&!m#13REa^k*uY9@NI*_2AtUN!xJ zX)*98`qtaBd78hRp&Zj*YWv*DbB4ab7|V>%FaIR{0D1y&o}FA zN{ORzc(Cp#>``x1wmJ$&1?wKy&JQ|lHwEi{s-4$6-s}^sTgSid_(!l~4|{B~?tRlk zeJ|9Eur<_-@HM>NlkZ7>6(6kGqBJBEU!1vD%Idaw8x&%J$I1Wn zY5C_xH}boY-;MqKyKOEG(b$7Fd%+?0GdgtY1*PF6`|(KrL!tbLpv_%ysPu)p0N>}R(HhuS*@ueV1B)9jAmb@rIxV0&z^4t=<>ubOW5m$H!IImVdI z{TKV)!^21$`iW8+CI~++TSIb;(lDa4(lD^A(h$wPvt4Wr={=N&1#;fa)-doIrC~r{ zr6I|~bN!Wu{;3?(xE`i7^c%%-w9=41PH7nC<2X@i7;>x9FmwjT+t~YvGKS1i8m|8~ z*WXhb24yJ?Y4bVelHhAlp3-pL63*{d8m7wieM-aN2e>X&8d4rs8perDQJ0|+N?FbI z*xB{IhH{%y?@8<*tbJMg?&+XE|Hk0SSCxj{+|L>63ZB}nG`z-n(X1PSr~jlhyzIvA zcupw<=j_TskJ}Th-3#BG`)g8zCl62$&U3a751x99x^Z4qb93YR}gD>*InaPiW89=j`YnJatNYw!WyoPw@0vrQs>_*+S!4FFc<&p3NK@Joz`{ z*~~G)Q=g&_yHZl*wFOUqp)~y1eAZ?U`nd0LV{`wbH2699AM6%9c}Zy)&v{O!J9sL> zW;{DEcsknFu!?6zX6NjN%sBs$^V*lOp;!55!EW{``xAR357yamcti$PjQDP|JbSaeIpo!J^ELdH z=RU%Z&%1mL`*{A($U}Tp{4?E#k3``gG5ADh{Gcm-&;viXMrpXMx31Fy(P=+=FavE3 zbpw434)$9fM4MjMk22)Cb4)ScIq7+<*{p-^bK1Cbb)nm^Jkwrk+RCG@Z?~0KXbT={D-ZeXZ7Z+P9(=8> zJX=I?ds}&h5y9V)r}1oyq@BU9GrI=CgA)JN?qI62HK(9w5FFTAG;3^d3$$XZDVjan zTG-pCG5iF8&XQc&4nY7p#v?ZR*u|m7mzrz*Gp}d@YoA7Y3sD5a0 z5VTUq-&^Wv6J8R>1?|xIOCo|1@=RhZu?5e}>Kg28mM=2no~NXjPJ8fLgVv?fZcPea zWztedjds=moi=f}PFpihXzPm-6N1quEp>#p-s5!&ZM}a-f1$0<@uumt>u(HRbeeW< z4|=4IianUb(Z4k^*pFjQW^^!_V^Klp;KwE{ex=c_@21n{U#rt9{d8LIh~OEM7C(b_ ztEWaQcdNf9PH4C0tnV(gTZ^_12)=95;&)oP-kbDt6UXS~Qa6qEU}W&1NsC`<cuJP{)aR6>$a~QFkl+`6n=nD6O&lpa!T)HTHZeU|B>c~E z1V0SXMg$AF=PBtLT+Pv+*gN4oJ4R>^7J2&w_l9UY2`xT$z0e-?57lVvbLwM-w!X;g3GN8d zMhh)+xG}gv<2O3^D~;c)gU@g*QicY%g=ihYa^WFAMrh%;x6s1xV4=nC9Kp@d)}kBf zQ{9Sw=mQ@#`@j_seeZ(97IS_lV-@tL*}v6KAKS-2K6Y#4ZdD)4_e%=@=O8YNrjNKY zF37dEj-c6nUqb8mcP6%e-_yPI`-Se-@7wyfe!skp`<|56={?uCaX-EJ{VvK&jL|mK zb@9G*E`oIhd%C?8s`o>-Hyc+*@o#TiaQ$xA@5>`x7uHA2z3{tBmwvkbA?JlnyXXGC zE=n1-{-HZA*y%%_>>~YU`(|RZ`W*KViOuSZ@@e4spi?g?3hGw0_aS_@LgO zx;8k*N<;hFM3ZXJ+!P#crJ-FlXoxL32@M$0J(y~x0Ruxc^&XujaYWD!jm#5-_>R;0 z-i;ke-}E)HC;FvVOIdNv`PSl2`k-3eN&mC6mB!#3nuF5Uga$0?6O6Rd7<_9q^eLgi zCv3t0>0^19!8bJZ(s$Hp1_nQYMr6Lpu8b;24~mQ(pg+c~%If$oyapZC^;8-p?^Es} z^OyJzr=hkd{ey1w4Ul^y_swg+JkLD}Digit8+v^;0^LU3!9I3+J0^Oo;9Ao%CCTr-d=fC{4e}K(hsGN@V|##4j}o63=awwrr==6Fbvsb^SoIHHWqrnuA3{ z2LylLjE26vUQT_^`d-0jBn~R+7W{298W}^fZ~m2(Q;;Au2aEEr3O?J6Cd#BirdKo0 zLpj8BPc@_Iq|xk_a+K?ZroL!vM6j$Gjf^YVH=mMvW%df5mU`un3Kln`k?|#sraq_O zDruWbit29+u7>9O*qtdS8+LZNcK;seHCk*2+RL{4i%r^gwELMM+AFvFb3(LNZuh5# zXs_Jvr-x{--0qJI(O$XTPYuytx!re$Xs_JvcN1Fddp5<~Up)BF81WtBI*aQY zxwfI>#+4H*E#iu@%;DH{8X&>lj}d+?V808m7y2f9O+5X^g|j z^)T{AaXnfe=N#nYd?MpAw<-Ck_46PbqUmDoYB8 zSA_3=Tnmky*T#9F^D=&~lqrgGRpUw@wq}V{%r+gGbF=}@Yhm$39M)HirJirsCjP z#%LUhBepJG8O?v0M>}lF(z>2c_f{Aqyqw*K%A+h~&=5meVzZh|r~~Vp40&AHcY=*! zz8BMm?-_N~VkASJ#F53!tBe+Y&AQjdD=)5MK2_@RD#vpip^J5Sl_g+zMmqO4F>kbm zdAD@0^08lE2Y+Zdb}4yNn0wvJ_ZyOD*S|eDg#UCO%)L#2fAFnbQi0;#?jtEF9w&CO zy-0Bs`}voFhvz-4bDjkK7QWSJFa6EXr+j#S>DmG%IF)ps@2lNWt16Q^dn+gOSXDWx z@2=;R!^x`WaDUZ*cz~L7c%bTzN+*BybBlef-DUpKWwV`^wKl1&Z;j=fttm=u@gpR! z&AZ(;(ff+<>Yb>(BHxc@!DHXA>7AL#w7u_?dG!wIhwo?F)DL+r^ut=$ToU?eL_dv6 zN|xxSu}%H7lU~zL{R3Cf&ph-qAN|~keik(8$J2^_SU+LWPa|s~E()*Shn0)X^z${m zGo+t(yi@d(#hSME_z!JEMmjoJZTQbk*pv9r8vJKkyq+ij8*zZe8R8H4+omvi+YfsZ zl*8o-_T>1$>M%XkV$-vD?mTN$!k<%kt~I?*5StE@*>#2dA8W05dJ<^{=g)AQL`uY; zh8^ChmaJ8#d-18P!@pMDoTm~uPbDozZ?Z;A{A!2kSIBS;J~fr3u!fxV9T%;2up9al z44~cUATRwbyx`w$@M6_xI4>d>=CeaK)M0(HE~-s^lGj3?tTD_b6|lC^N3tKzQkBEC zs(nH)^jR>@>UYib8TK4|(5VGs^ddt|pMQU_ncr#pd<=b(G<|ZML`pn74}HF`mOLi< zyc2z%Ro$G2^vQa<7W!npL6Z!r18cOcb+AVjjun3l>9a$;%(w6Y9<;$rNT03nB63j- z9t5*RpD7MytNd@%kvFly9ihCKYFwwjKe55l!`t8n@8{x&<*X}naomf4vUcK-tetSP zrn8Q9uGESB7-G)XuqG_&-rQGwJKRpi?Qur(4#n+udY30TpT+j2Pbp3s~MEHt1Wss$K7BO>eE%)6m-$ z>*;M)&pZ#h^OHO&*_saZda`fs@~kV@6PZl|Tf$`-R?l|5!>nf^I;CJisFv@DIbtn0igKIt@HBQS@%1H+ZN=AnSuZ9rwAr3W43!T3LgIt- zeA^>=Nk)9|P4cF3Zw;7oj+BkOc9S9;{hUehcGoUq>>Ofj`CpjC*fwyAvCp1cSd-b2 zXIMMdGbu7sl~_B1V=l4wpGgvLClhB6AkLmOaaHB)8Q#kLV?zT=jtvVeJvKbB?AVCF ztbNI>ne5M++X1X+9H`Ekm=2vDf1B-!n{On{SojUFa1qH*>>U9nn{}}pF}RO9Jp3=_ zXFcDAbc7$;n4aZL_THG{=G$`J-Wwg9i+!5*o{GIEdH61#UgdA+Qd z8K%wi|3@&o$>uY4n}4dMJ=)}7kVHs6TNH%2&euzA1Od}Et7-+^azn|G)Z7e}xb^YS*IkIgT^=9gmg z%dq)**!+BK{!VOuL6gl}V&jm_6B~zYp12sB57otti<@lzU&l|#=G)1S*gR|BHH`Nf zxL$~z`yzF`_i%3FeJyQqxpBXc^Jc!_!xt)A_XQKP3-P5;xw>Cz?MRlTTpQ;xw@z&6 z4v#4?fIt zYK1n&>K|c#x3+D+YpbpBQ735+QX*&%_+G>h&%Yw2)6d8@+J$c+gP6Ci?``RqQU+tS zH|(YTu$IAim)7@W?6muN_AD{;77`1s#ee?H@jS=KCsw6Ra`bn0>J{mlymM9BfL_tA zJAanwisD{TS(58?VuUL>G0`CdV2P&jo>C<}u zX0#3X$wJyGM_1ZHj#D{yNG7xaQ%TZK5}C|vC(pCt^)PMgXSA(l@V;%|Ftx0DoB9NG z=~2~Rode%T_Kl!UI^S6a-v#Hcz;{RFZQ)(yJ*qhtXl-7hjs;p<=+Uu2yI-sOtaiVU zbFiR9`ej5vG^O)O0SfJ4wSkO3y_E^J$^45G}OuwO~ObSkNfGon^&>TI+kS zhy|fCnCA({0xfSL{e`vk7yiugJV)$4Z<1p^STI4bAa6jg$zZ`OuwXt|kPQ}$2McBi z7UW$93)(K5G6y>D1Pk)Pf(c;3M6h59SU~yR{a}G!K3LGKe6dX(3mjkp-w=^fF029z z9L=%dF~Nc*U_ri`!I;RQeapdu&%lEDV8O>=!2+=0Zguu!_!N6p6&gMj!UD!1G%Ua` zG%VoQA({BV0#b7v$7jSGW$?aj-x9FkGq7L@STG+fSO69*qfR>CEwG?1 zzB?js3-2Zt6e`M#W=!B?{zv@BY-erwY+YpQ_NdV3Guyor*l=5Yq+NObK9Vs9F_pYH?n!@V4=Ib-U<1kKu(`^O{?SIu9K;c@teAGSz4Uw+ z(^L9IHrf}75jPwCqNL8NDwBKcdTvtRRh6?QdMgL)OX7Rletb*I_$mFNNqy6~-+Ufo z2mLa$-?7Q)2l?m+*<~&Qer=X{h%H~^dzDYy|K7)Vuc2QZA4B@pu~XA;{MVpgV*WPu zEB%3R{SuSxA)((!^xJ52_(Z>2U!Ya}wv%4dFMR-;(FbT-zuD+F2mLahO6(ufuVo%1 zq+eo(kbY$>oS0wu<(sR}7__F}uj#!Z{kG%1qTgDJ|02Us?ClHbdI)_&#$E7bGcMQk z?&!GQJ(MB7TgTkuVEkIjlUQ~a-?55sPd0pe4YBHA{5X`)yrSeUAb&C6zsh|xM%_$| zx)=T0A6u1{%veZdqTMxd=iFDGNlA9fc!K{?k83!i+MC3$#V)nDYG>Paspq$}%SJO^ z+DyE(mv{;NU_X`}m~i+M^Qt-O1m=}CK;vhwX9M#^GCmT*#E@O;u~ENJ zY-HFav60LZ$F0r+C*V__PG}-0l`I|+Z z^WjPOn+>m}U~#MbX?E#QHM=x;)a;TutSiaT&$q@RL%%tG= z_tIPF3oIlSsUS(5Bx@o3=%mPqLl|4h=x*R%ir^ysC;G5&)i7Qy>+(+0kL`O_*5c^j z+z+PgE0t%`ekESPzX}q(Hp=|*6?ui$%Iha*!g#$xc_y!(cCJY|FY8VuCNSc`VTSBv z%skG>^BeJk%#AK)ZhQ)DL@s=(1^IiD@Pa(oQ&Ch>^am%K;j8%=zc_sBaa`=Ys?q8vJj z-8-ZQ+U_>>Kwb+yfQd2}{s_k{9MMCb;>{90G{e7UdVsEi)`fsKl!rtFP4~!|b z(1YEkSku@&^T_Ln};)@;Sbru&p75?9SN;;JpI zIhjj;X|>@WQV#1ryGy?K$QIU}NWQsFLGop8={)^^vmYe)%E2mPpzUtO?lRjDKV^t+ zWUb0#e9cO4_O)80p91|9`b`!1$s&@JFY`&Vmx}BWC3{6RpIh4XTmj=<<&1aj+BaN1 z#TeIOAN#Z5Gw#D~)l14G*=Pe<&!H-R8Tz2hX4lrB+^XnnyB1>Kn@L)qihh;wB|0mF zf7T*u{Fr^Xe-%Go^kVX}30@Yp!A}isg7}{Bv5U1u9o4z4Gnxw~T6I2}I+{8kEIKED zmw}7&p4&x-qH}Og`ciTaoi|F{>sI_NbZ)LQveKLVuh!@Vd#8Yp9n*O}I$wg$m!fm_ z?E=4aooAx+Omv=!uJbir7qBKkldUD*)Yck-X~K`G>m-AZj_JDne1voiA0Zt}KQD|A zblfO9K0o-s`PYywZ?(OBdbSY{Xugf_O1mV!d(xsu@u5}JQS>M0HIYgh-(s`J=&rlu zee$gIr_LiU?OFDEk-n5k|0kY}BQLx^W#;>XtI{GE|NkLl{gZk{xRjIuPCw__Ym!~E z&cYny6KoJH{UhZS!*g5Z*(qDh3HI?UxY_+`SDNpJp{QSnKr(lWTMulPvE+Pq* z$X+gjBSITR>O_hrU1zhsSwde++U8P@AF{TmjQ-aQ?*ESK8QlLp$0xPC*v-En@0XmX z9KSJ;dwg_Y^YL+k#V67Oj;b5fTdQtTAE_FvPCIZ5xRXM>ovOZZd{`jn#0c{LOD#Du zDo}KIkox9{F@amFUQ$b{wyU=t;QuGk<{TcZZiN1I`ch{P4^vZZcGl3@gBq?e22~D@ z?IhKb`h#n-j@1LM3Dy-DcxTt}E-8d}Ui{wl0kJ)a9Ry=!exjM2Thkluni)@s-lPo> z8Jn`rMXsCwMY44qzaenz@tXpV93LAc@tR1H%X zBFkCmBKE)twfMj&_27Xq$SD=srXbrv$aXNY9s0G%HWM2*Wh-ro$X42u7P4*4hQnl= zM68)k8}5tuIK%z3qj<2>XzMqD2gQO1;QEFzJh%^CUbG9aNt#*(Qts+ zOvd}o{;LHC^1y+-A2JRY?_D*nMJ~%KBzs+ue1KTN2!+|!+!#?xC0lmDRH5}kt!vT&@YI)!QdB5a5<@gW4f&0LL z2f%?<`1w8Hz`fwW{n+b5Fd$bgI=l!RSON|#3p{e-ZfL#$BOX)_o>&PEG(g+PzK@r% z)rHvVVr(@RTU~^$<~P}@v~?N|u;&cl!5UNUt!7MC;%T8X$Gc*TegJzM zg}&LiM4Nk_en6@%E_SY^A8?Lw1XGg;4d|Ht=zWVw_Ll9> zzo;G++yw`-4`*XP+1O7uc9XB!jr1`zJrUc7?1s2LnI!cw?IsDngpZEdP5b!>*$aGx z?4=bxq~Bx8=-LHtcT-$DLr1i*M+}rlf84+mvky z>;)Rp)tlyXBs*^eFY$}u)Y`Cqie6uA4SA&{xA9_Y)tv)+gu0ex4g@7 zyOtNXc@ue?Ie+^2&4GQy)tyhI2C7aB4y>vgtv**ZM*XNNMg7fzLBt>F#2?qG=_f`8 z?mBS;`F~Kmy>}CP@}{X7@7)r3uId%_)2a&g?B7CMlTMs6L`|%|P90V~LY-YbQq}q_ z^jkFCC0>cFPF9mi6G$cCZV~Z!5xDy+@b?sHH)%fibLh|H7_B+JmQMk z&pFsk&aLTU^LgB-2+< z4ASIy7dog!2Y)@D8o2JjNc9A=d;wkL9k@YF*ng9H`~F*y({;!;9oeQK+abty#MdHQ ziDyjN3TBCHrM+t*+tzG2Otudj{g!9qlb!SNb8QTO{*H$+fE>mE{PB@4Z;FN|j5&-4 zYy4o2kN=vyrj0$cfkAl=)>G*i#Cm7Jpa+x+D+YDaF(}XHmjr5tU7-aUD*1EwU`b>K{e#p^+L3vHUiZnZmM48C6N9AB zr1=T$REIE#IDZCMvyG#MLG+6>4B}eDAdcI$JTQp7&741dd<7VEKNyq?1}z3-_-`Zs zZ}_N6`ai3{pS$S$JSgGykl-egA`Bn=C^ZgDf?SL53Q}gv+uu8x51?!$zO!nfQ5v zF^$^z0(~tH;|n>AFZkmpfH4|g5W}>@7-F;+#ZPMmM>xtDhKrbD7jcG+bM`@3a(^2A zp(*rf6u#^65Wm=Zc{nQDJY_gV%_n2$BWbQ%wJgxE! zzO>3SF^$5v9q`;}>y;%uH@4szpEh{r-|$wRv*0-!o^#-NUK7vaH^jWnc#apI1H!ZR z9&>$Ci07CvIWw>7lC?X?RWNa)DQEfvDa2yL!*9tyx$M1?o&882*5W9UcGrYnZf6$l zikoAkG5;#^FJP^O^6;uOJ9!S`$;d~Ooc%aY;k^H&{hS5v{?7gASj%It? z?rr7&0QKzaU37YDU}K+o>gqn(>>)o-J=JGpz|NlANqwF{hDm`WQu48+KqTv6GO+(+GO|d;f7q+&V>h~Se~q%pG<3Jq z@R9TAXlHABqx~XAHS{(Qz0E^!Iq1!g-uSi&Uv+atZ`ypVMQ?d_@}ymld^8)qWudoB z^p=C(<{Nq=uZ7++Tk4H9yCJ=Sm-fHZptl-}-f9fJ)mZdae;K`Hqql7ImW|$W(Azxp zR)gN=1-z_haj?d>RlOymH}s+Ft!-JLx4cv^&7!xjO%~;yEo*B9&y4Sw?RgU$>Yg#z z&PRp5YgBCQTT`p8p#UT8*nnW<_4sKzKA0kXvRKwvkhj`c`!t?BSwmsY^~$)E&Eb*% z?`hu~nrn-EU>kPdJr3Jy53T(3AqA{$Yb|XOe%6mQamlPf>(AOVf9G`e`Ow$U>eyvF zzaIWm!CTqOBQ*EMn2zvg#oTMZhIdIHygly{zu&3rOYn>2bw^v# zrtZjVp*yfx=6KN^YfrO8cg@zyHq%`@Xf@r@=Crj=HVI$r$GWj()@k);eO5?!p?1fj zyRdmv;m_LkXuA6+-xbo`72YMftL@h0b34(UtP7R)rG*~x`MOOV)1!y-#LwzvZyov) zQnsvR+Ca=Aekg6IpD<#-D~)ISMeKJL%Ww) z__Ae`B)POQ;%%FlXlq;1i>z(UC0^Q0l6lzc=qnV_-VPwi`qrh#25M_ugZT1o ztRayr$H5 za65UGwXU;|4baxR-Ui=6+W4jLX7YMF^>~YWZSm@+-*!b_!{r*rtHu5_>@e(48^>*7 ze_7by)_>am8fE?UW$aJOZ^i!TZ#SPOw66Cw*SChRYYnr%w#z8V#{O6%8}AeQ(_#(t zn?fl=w?Ed16647l))w|h+%SM7>sXf_TcE9F4T49vv1U}h)75m!I>#-~tSS#_jB?fuch(UHJdfXxTf?vhxNMeW$ z()NK{g5h$1FMchtff++&88L*1ye#5}GZM>NVgl*Q=-<|OE5qY~B;tW&;sIoB^kvwC zh_L|i!G-j{w7yqZ98g91<$C=Z&F|%Xq5A1#QfB?kw)$D4tq!l_VyUBGcUT>_NF6P0 zEp^n|TCdO9qF%WeYLRmazEvJVw>x*kU9$9OFQNzmU9^G znR(A9b+GK2W5+I@HQF|*x6sKN2Kv?78iuFQSFNGzy~K$kha~V%bUnb(bsYE2HY(IM z8TcprRYV%!Vu)O9=w8<3iCm;zG20Z8&0yM!c}9B@j?qi_zDh7!uz4BnN3B|i}FuB6B|QvG;lE-YnJdGlVFWt z%rfvXA3PjxVj_6hLXL^Z5m~j#5B4MYXUfrBhhE4Y0)j1Ke?H_U^|w)9!G%vlSrunz7eS*t3tC`X6AOx%H9@-r=XBl)tg zOgP?n*fY=*rQ?dwi2dxq)=gYdjPLSxl4q`6538TncDGtTa6#&K`kl+v4_|7vemqP4 z8rrNM`P46jHKF>2VNIxh_(zNS$rzCF9ZqZYD|a;MuUxl#4O7gzmZJyJ(_-Q_k5ShO zOIF=Y|+Lb5NwG@I?s zY;a;4*rFY6_Mo3J99g6PK}6hU`tzYSMWLQn?9g~Ha6;r4ZUcslG#fBvq+vs=GGeSn z>>;zcjM~NskrDRMs*DVbfWHtP2!G9F#QRpUF3f5}nv68u)$yX4jKBa*MsgGxF(S`W8tV1aPUwkCxCVk&g>-Pd4 z0UNeVms2jy}VBq>ZdOd6qGG_DJmLzN7H!wS4c}*Rb1v z_MMrA?Y6qtY1lipzDGO1!O`}G#SYul4|#SlK;i*evoVq7jqf`on=(NCjtlfLh0 zoBC-def#zuJ&k_eM?YuK4|^V(`VkB?Z5ZDYKaZuaIYkNW3#;!t3a{pOGFjM=rXPIf z^7^^*J45vG1tx0v?#LuISSe?}qf*3NIoT#r!tZ(5FItJD2#!1MX^Z zD{-TX>uK1iOEA%hZOl1IiD#$KX06p?Q!jIo-tAe$sBV(X@#V1IQs!7h-rC$G{*&uf zf`dp}JM{3XO8;Z*f&Ex|rT5|V%G5&ID3W|PBhR>)i;_CT2(B?ko`P@4I$^KOOOkxF zIc7X-+T>;HAa>ST9l+|fq)c#~Iy6#;M(Uu=Q?{rBHq)*;h#tc008U!!&?x<1AMt9q zUwPZmLvffMoZx`yN7l+tX=fdz&*2a~5DN@4;sO18KXV^)FXIyF?31{<*>{+FtYp!L zF{U}l#4DM1r7qTXMlj;Cb+PE9SzYkqwWLh^-b2d5f8C^To6_nc`sheqWPD6(Gc9#7 z#+>xJ;H!K)ZNoRbVgBLadq#=Rr2n@Q->91~vEej(Z<>2&DmGVW?-(tgy<@`jSD`Q2 zSMvnNw)TvXZyBX8Va6xcJ!9gGJX!A}@rmpiBi}MgJh+D>vEv4kjk)S_{7`VxoZ}LE zlz2wwPuojB7J9Rfc`I@@$H~L@j7ehrq91!^CiC56f4+MR&6&^_DK}yix7pSi^Ig)` zh4zerUvth&d|B+_>w0ep2ix&pu~|dUS|3Q$#LPN6$-|^lXVmLwW`yHlbrp z&#d>=_KtyHbABwO=dbC#Aw9R_y`pCub7iJKOPg0{j4^6DozhaL=9qE|TK1A@um0uP zbin}T(BhaQlXuD-#z}lb{8_$nko*+p(BhaYGxM`$+>`wOAb%R`Pv!m;)~V#8-_Ra1 ze3v+$?-T8g2v^dYNLNmo#}&aENB?8Z_X*gEKYp8X1WVdgPIp_I_)y<^HZ;gR_bM!dNGz^ z&X-BOWZb2_{QQymFe@)Mt-ZFL_Yxztn-@bit?^>9F%3%$yV1r|G#i`M(r!##X+g`r zF#m*&Y5Tp@wryitepX8xV~wi5=Yjb>ot~uC0UOK0HYSLTHJj%Ov#~3e z)7{r*Il7Itwx$L zV;nO96snsGA7()W9{Q7oR=0h)*fCA*|f%s*cku5dh^Q#wu%dL?G>MYGlG9D zMpl^r67=^~Ui_3j!#`&~me1Ia^Nsm@O-r?|lsl@rdT+bNfANY5j z@5YG@wfyI&Hlhc6w?we7xVb*3JNu6JVvq9Po9p=hk77%&u8HW$9xp<7HFVur$8!y_ zP;)x@H`m{1PJplR@aM1ia)JCm$re%uYoMp~Xr8wV%$2;KlDFxvO=GJS#5Rjo zv!<5xA!B6beh&HU6~2_c!b{i_?|IT8(x)WzpFJgD$n&H_q)$ot6Vstz{haoFfwm5y z$9Z>GzA>{q_Qnx^EVRcJKSJ8Vn)Yng`e=K5#Vf7|?OQIJ%WsUMdBCET9po{5|MHIT zsIaEuay;6Z^JdXajjtxP>EEIJR{T4Z*NT6K@|yYgCo&(a z&kJ1Hzq9el ze_P}j^6xfy^c!+aBKEM#QSh56s$?~TZvcC6KC0>&_NhEE z{f6TM16NlKQ2(>~2DLlqBdeZOw?gxS>Y?gAW*^09$1{5y*pBWu(SA!GMcQ)dqb%kq z->5~>S9z9oJ3s8DxF)mz*%`hy+sJqEMfAlcGG-~?ZqDah%zC~j*y^>rUQZe7oV3&R z${9zJb0goTN&bX~l~<%+!#JoGb7t}W7du$rGX8DyB74J2ea-#W+p2FqH2>8~eQU02 zUwsGgEnTOdC5P&(?|X0ir|Nre2kUF<*VOG+zDJyce&0McD)8~X-?6{qFf~Ye>(~u} z7ua|HD)N_v>zBAuYrDS&{pLFcI%nw{bsxxZ$>buotW`8;y54AolcnDr;cqrH7w ziWoNl4;$q>Qt&XZp7pX@y?*>9-#Mw!b@7ZN8$8UxU*_C0X zj^%@gA8YkB_nhx&eM5M7h58QQyT499n-{8Y6xT)c;s2TXYIxXz`d&`IZ?Wh8r~5w9 z^m~Lo`A4z$eyjR5@$d@uZI6EQ9Sgw2`62yI;(8sZ+pIoK{YZyDK)y9#! zGmg}oaipG%H}%Y$ydv5-Mdp~2o?>QBxvt}1M30ez+?&O{=Q-wce9m&e#JImT?Ee3Q z_8|A_DQA|9D-oZ{cYgA{;I#iEvT`%G{qL4ln*?M~M6)|_hnrdtjFoM!b;{*`C=XJZdy-%puS!ao}o$3iFn zo^L#v({cZNlJ^Y8KX+Pv6Fg5OCK*PWOnU$GJnXYtQ?5KJtkPw9U!RU5s(R#xbX4 zpeyl@6KSJ|I$ukSavkKjaR>L_o|N_l=SRQWRl7HI*Fe|bzZseK$;_y^SEgD|)zQbNqjQ9^rCC6wI!h?pW7tjyG+b zW0bS+@@`srzo5(>TraEkxMmL;;Vd0A+_~`T=;Cg-dDHH8jC9V)=;q4cxa?3rmm^9q zqdVpQw_}|1m-lveZ5wop^C`~DKJV{ZHfW^N(W!~%7T)b#q0>Auc$Bjb*JYm!)9B<~ zj%b4?-gPl{r1RL)Zj?9Hd6@HMhi-H&g_k2!m9#0yY<-%Nk(T(g@kL7oV_p#0+oR?J(bUjYlW*c7y&Dc2Jy{x;d2gkDN(XMUq|6m;QS=j^m-s1co z=i5FXgZxH0O`LfGnp>!s^Il{~9s6>=?Q;*jk8*0ybA1PS+VfgozYs<}b)Pp)%G&0* z#rZ@=U!EW3e1h|BM@2^Z^SW&G=ldd;ZJ!SdypYD{L2B#9HJB{T0xocJBaE!QM_)5LfF&R$_(5W9XxJlltuB?XMx z$rxcBv1A?ctRt2z_|dAgBuA>#?r^v~#F0u-s*Cx`G`+2odC6E~PE!6|cQvu(HQL-| zW<+}R8RjfMV0^HSInZB3IEw3-&s=7AXtAY_zHK9ISIBoCb?d$x8Qt7>A5GGISBY-& zUH;Xh`7ZZDzFUx_`!3Iie0NPh-FFkCn|!yVzwWzU?wP)OY?$u5{^%?F?rS&bzS}!G zBA6U6!!NvRI)+api_!C{0KVH^lUG=tvvg%O@>juOJ z&aqB!`J&v5PsFZIc%k(1E~TZVT{5a)NMJv(gbea$A03wvgFm0UKW5!B=QYv^y33Qs`<{gEcFK*xx23$Ll$Swy zWu*^ynO$1cWlr^rymw^69OyERj!KBZzt2sNSvP#oiO!?Iv4S4kZzQ_qV&lwFIWE|VH$ zH)%BAvc^IDUryF{w(9e1QrJ^1)#+9oUz^X@UGHs>7+~$p`@fY+43KVfocA%8+qiN% zal$m>g{j01w-P^0A@-k4>_3UvKSGQBd+(1ZyEHzM7$cS#BMzE)Xgl*v0?&3K#z-W_ zh}2??HPiJNV^hR67rtVQkw=WtXo)fMPSGFO&D_{dj!Mx2aLSfPjKTd(Vhlf+lu3-S zKyXUCcZl!O<=zPHfm8G;vWPMK+Vei12dC&;%p=Aa4^GV^##kUYMIR%d7-J%sluwMo zy|*XjeZl$B@7|`}8@g)&IAzcKWM)KOO>|`5$u3cOr+aqF`(k`_9x+Cv>?8N)gl~XT z`NS9tz$r&w^BBXIS3h}j-sf|tKvAjVkcGTVM)jJ$D< zyNNMw*UI|^W%l5DS#=ie*)n2`rOt)DwHPDsZpU(BjN6GZmec0vxE!&e_#yAV9S;y= zWDpZPNR06SF~)q_zvWIxd=t$ryxX}#r+H%V-NYEseX>NOlXp21LNP|(#n|P<7`Id2 z{lpmZz8?@{ER`4|FBD_=i7~Rl7BH9?BX1;ixd`va@-yK5eqxNfi6IscV=S}A7$~nmQL1K&tXyaERzq_q5M&2#d%Xu#{q>g<#-}ZSHyx%P` zM&5&5-$9=Cyq1?^jWP11tZj}5i7~#%^LGV*WSv%*@nZA2$iSE1p$yfH>*Y44M zxA)|b?}lQG=pEzE?jB$H1%CT^&iK4{>^sI0V>F6QhhmKVduAMC?D=Kh4+QR~oE5z5yF4dleTU~>KDILOB>CUNF8%}h?`dV;uNpB%<2vf{KhXRK zGP6EE8vXY=dcXQ4@+HP-> zG39IX`Areuz92D1ZhUx*F^f21Ch>ww+%SXqVLCC!G-8aY#2ArUjA7eLjB%NDo)0A{ zFV?Zn^9%Y+GH#)-_l#gJfc2h?T|DdZRmhk{O|0)r8L!A>oKgB+w|;Y?w&wH8Xr)5` zUtbTS-_(pXjft@D&TS?8(usp`PEw&pKnou}++JC}Z4s_gyGnB+~Y2Z>?L z=N5R_VXXID&AIHuDEoMiBknr~%@)Qz&HP<_vts6Jdq5GJnR!XX;$~hc&z|So95Zh< zV~}RvcInqq{u>-CSoRU)IY0{de-u?qKB_ik9n4Qm}_w3 z(aTrShyI@hZ{?wV9@gu5)b8kF6lv*?z(cCnVq%-cqu;Lr|^6|7s7Z>~CyL(Tuc(1b%- z;7}Gglm!lDHQ|u4&N7StLlp8Ib-D3>9>Jd-V5H`^+E~5?e^|4cL-IxPtq1LDw!`a6 zqK|IkPs#rl{*n7v;Xl*Df5&mBx%``OCkx!k0(Y{&ovbF@xt#p@mO=AVP5u_VLH4pH zSL6@gG|Ku{tNe%lZ{gp>nGW&~&NN;YXLd)t`L{8h*pok+z4;yNpB_mH3D6()IY~JK&D2nH{V&d`X|LDF%{t2yMkc zW?r|Z7-+D>Kq@@VfVb)JIE^@NDly!x@IHk)Oy<7=j2Z2Y(7t^MkBPoTymKot(O}}B zKlxch%QrBxUxHwU?A0!9p|tmFp;>I9u``crrQw_T?s4eDEW}#RF(4gP)>ccztY2hL27#zjGM{3&U3GvfAyt7S8yOnt!M7w$DIG>zy|f=@#H|% zBPXUOR$s5yccWiMerM9LswDOLBX0HJkwI!9|5l87#5>)~GiUiHMkdd#IFh1X%Re$+ z<-a6-x&OxTQGs#XKfvA_Yxrm2`lAEXFFAj|%Z_myi3#6FPCI$mT<-NhGFGjv+Mo{L zpMX)1DAQ+G-$EZYrRl!`HhWOw%AKFF&vtb`)m!aWGfC$EWbMS2wGsYGH}$U}osITs z=VpF{5qH+pXWx<1ggp}H$eQN0#5%H8#9Y&?@a?6?_~&J(UN-*QFu9>`sg?DD6$ zo$Hx1bTj8MkM+(4TxYVLc|Gf0-33EkS;R?7ipQC0tZ9~cZfQSc4c|cQul{LU$fh)V zK__BYVl%DTR449R|1;AOdlDP^YlLo3Vq59hQviGVE%xNXp43+C=_eL@dcUXW%B{W+ zk2&Z}>?yH2T@@SJL3#2Ylsb-LKeMrySnTE!dVlmpQeXz@xdYFrx?Lryzrf!5axag2 z2l_m#M#=wFj(AkDp~B-yflO?yH#T*G|AdW$CjLm8+L?bvPB}78RiHUmwM}(H^GEFE zOyA$C<*a9q;s22za_v3pQ6I*Zrf|Lt{x)K(<%h?p3bu6i@Ga^Y>?`yi9K)7sHCr0m zsx8$}?@Ys%c5rNAM^F1Iy{R3yBfrIta!fm7-rH(NZft8kwsko>8m!sT<*}(4T#5&u z%>JE;O|99|F?1-{^cRkTP1OcAiEag(KHz9#li=1nTt9sxC6K`Xa}FH8F7PV<)EUA* za|D}gVAJvAf=%Ppzg1O&O{2l48`VwdFqQNHdJ?;O7Tgef+DlpQcN04sqP~Bvy;5xJ zBktuKzFvJ5+BN80?CU2y`&;nj7stmK_~ce&$on(8ewwrZ{HZ%~o%&t=Ga82-iOmQG zx_RdJM^e>mD1SZp@*ZWbJ$`eb5xn^m_EJ&xvRV!{UEo~Drc@1^#Gbs|%RD0Xv;lj% zPO~Q+n_AkFj!muGlZj1YQbFcHkrf0S5fsEre;nJPve+$4RS+8tjlb8KMWz0f}XB{N{A!&Q-T}@bJwtps0 zS?w#-_R%i>EA30{$!cSQMPg^BjXe#%h)oGDi5*FsE4U=~D>h`svv{ydFiqi^o#4-_ z&9Lg`z*F3FbFUVhiNXe6$A+H9_8iz%3U=2E8{1BvN}Jf_$Y8YqEPDf+c?El_!yW~v z=3PBnyArH2 z?JCE#E7s$fcBNov1s0rY%dRp*cGb^$61%F2l)iTR;zqsiEirKv@nk3B%4lL@2QhIB z@n$S>XB_b->zP&(7c(~*k?|E{;v8aP`EH`$KN%DElbCo0JWYqUY4A9enD|y=;wkVx znL11&CZ3pgiTJ&>al){eI8VMC4UdU`+&m`MXzYCRZHu`w!f&4&gsZ-`{@^n6Qd=XHj6sfkt&9 z|MNY5{I0;${DaA}zd?O){}*b-iJZV`{Oe)J^T%@nYY${=?T_HZX=2hM{#kYU zr?$#{yywTzBvxngf2)(~MXrZcXQ}IXCYEOeM~aT*s((C^$3L;Yug3rQ#PlirziDq( zwwmx`FFya7`sC3?s*N%{JU`~}1M1I?ELIE1-$@y@RVUTg*uQKvynM;=b^bA2$o+3| z{@RgD;+m6cf69&gvBbd-5(lqp9=mv0hsQX+yE>oPC6hQfQ?>KYtlEbp=FKGj%~W@g zBDDW#^*CSuw70T`K9Sb0Fz2Vmyx_hT^GX{)>?`d6F>f9*ul9fEPQ84zD|Zs}&L^gw zN4t_q%$rZlJJ~glZ(0ht&g7ew^?cLdF36WyrBO-Aa%LLet)%*z+7)*wR{6hWGiy&| zV*`0=EXTdavjY_ePKE4cSam=(?L_RV2zmbo+Yno+!Ios-zM98vl?6OEi07;}GrPLU zX3kfgYQ<)ROboFRQAYwRHyB=}SNkge6&Loh^(Z8>VOt${QD;979z z1CD|%(ofn)-Z9Qq{&n32JlO+|1o)Tr_57RdT-8VPRRm}LKla`|POhR#;JkYs=uLPH?PE0Cl~kVnV;ZA8U|-G$&Hn_%|m z3a-jd)|n6$7X=jrMSqe&cn*PtC>WgH`F&5_Th&#!Z_fim$V&d`&#k_7PTjgy=bSpP zs=E+5v!wN3_;%Yfe@I_^6W_c}{rqa|@GDy{gy-ekcS^6N9gzs*vTc;>_l&7s}$PrCjKW4l=>MsmsO+Z`o zSf5Ovmf!mkcEp{>)OT+liNI@2_@1$ncMU*9wp$f9_fnpZ$mi&?`&Ci=*vfWAK8 zD!dw{tIQsvE0Ix}uG%$Skprgb%7f09Tk@$GUCl9c)h>E%4!suN?!a_ErPt0Z{bl!* za`f50^Ys6WZ}+>GoVfPB#k1G0of0SI zIz#r;;1gZO|214C20fQ+Grp+``IZFd$|S9CxQb0D`ryhT-gk$f<83*~`@#PnTe>#= z;;dbBpPIF6%c0(`?n_G6zH+d?_T?jW+`NpqyPTJFkn%lmB@X|57>|E}{cL}v{9^%mG8~Q!AjigRGA-Oo*fqtGoCeX3Uj2|L0^k&=PF>L z{rC#^{sSNNulPxw?C;y3>sWl&w{Xtj6lCEl^0$8e*3!pcLw9|hd6D-xfZsv<#_$`* zZ#=*2b}d_f=bB~fU!L5&{zKT+pXIy9Gk!j;^<;kA{o&bBCBw6ohc&N1j=Hl{-4WCs z(K?xXM{@7))V*W5cWmp_5cVkUpQ-Mj!2J_i?_4uu{lW}=;`chgM_E%+?9W^M)Q4J+ z7;+Hn;SsIVo}Rk&h^LNg{S^OCfAZMY)A|26=NDYT|HYhJv6%l4$T<)ECojA8EBrs# zFYB&5%xkM=u1+Jb;8m|C`{-YmJ^ph)k^MM*-&Qd^`w4$U_LKa-#jASc?@Md4ll_|P z>lGuj+bc$8F9ql51($X_$?rCPJ5Jm``R3W>$pbIEwBwCaq&y_~7Wa3yN_lAVdzAlp z`u@p3ojo%7>jl#~7M6Rf&-JUjyYTaVaNnGmIaxko@0gSSfd}{TNx&zYkyCpEpPavM zP7I$kv)=3tb8>yfsN{-a`z1?;drg_L+T?P!E&0CRG?4Xpcj`4=p#SaC3AjK9)xq@9WJF!(@6 zN87$!t)~^}I2B5_*~wM(m(lnjZ{a+2qvPzn&geJ?Qm^%!v6SO=oa@kWmZIZaif(eL zqvIU^^XppAR&|$AcbU?0j^*B`)xE{sTWoZkqq+Zg>i*^2zr0Y#;Vgte$63;P)YFTW zev+KzBe{-x>dMw5xc-uS?P*+<4ukHeIB09`4beLi2FyNrW^q|A^pu_b1 z@$@s%Rc4D0)3dWx$|s5r)APnDQa(v^n4TRco{0|g3DIGCY#rvn_tBUyM5oO2fTiZTD(`)JIKj`1GLmKDR=lBK?v%aomw^vk(coSyV6z1(u|lSyy5_)+?| z{R3U2|2>Gi#D8)c{*(5=fAU{vg#MGyq}IybgfHEA&8OG1|8YJ06UCn*`iA&ZMBfm9 zis&16;y)36L-Y>OH^iTk61}6mxk>yf_2?awxXO9sTK||>>3#P<@ufUBv~qI#6?BcK zXYG37#?rOjrxp59o?~A@59d{DABy-v-ctUP0|NiaV z-|$pnU8UTYUrS-#DDLksbu&$!N88OjsBDb4!JFW1*!pqrflmB0GJYBMFLZ_9BB=W~ z=SZ+#Z@IB_{g1dek8_ij;h#y78_|AibJH5yk#Btj-;i!hZmF(ny5P=K(>L(z$l3ox zxUT$qWAeG$>ZV0MY2j?jsfi&64NZ>Z`Xc8OzK|T&v?$rU;XC}_@8nU*Hx_yuq^@ye zV^Y4^W1g|HA^fIxx%-S&6N6_QRPH|G>xTxwDZ=BDzQ%}sw<)ZBDy^$Cf^r;SNo&h@Crrziip zx*>7hm40%=qz@-D)%A(FH#Q_cG-+z$m0<^DXQ!H*{HhZYYs$tX@2)r@(U6^*9A7mt z(XpsBIkM{D#D8~AOujPmfb6;Tv|o8b;`sx|B)8M<)Q2V|D=QC8ynN^o_BBpUbWE9^ zm{560BKKBszQq#Gqo`tU`~M`W?)V(%C_Dqs50{NePCINy;z7#CcYh>#1m_|Aw)&XF z59aTm{KqNBC!Xe9hX=clNuE9BLy0j9y{21aPYyBWZqC`CJk47@>_~i5Z(R5I#rS9* zt4H=d|F<0<%>T@a!Ows1@%i~*m>AgnqvH;0{_p)ze*O=w z=zsouKa`*UWn=rEf7&+lPul~YfAGxwFRpmU^WTHaS;%FXa>diFCMM<{y}8G(+l@^_`Z&B9t>*U zi}C%v$11+>tv)W1yzapM`M&qyn{Zi)rz61N2_b9*jH}6q?FE;N{ejm)d7vuLn=6w!(hz2$9#rVD0ycgs5xOp$e z@BPhtF@7K9yze|?MAMe)nx^Mxj%1A=)%4tz%^M{CRF6K{POe-Fzvr&xjL2o^B`x)d z)A?<`(cAFG|Kn}ggg*4b;^qxEq5}>6r$dr*4%Ga^4o!$I^bopF`=p~1L-E_K;4I5h z&gL01A=UKIq=VVd-;k)UC_^R!Tkbch9MP4H`1o3yQsnlPp#R)WeG9ODWeN31B>a`r zsGq6oJ^t5~lqEf>_e-0!4!X7}uY-!-+@GE)I=lFG%K3?oC$Tii7ZpF99*51GmGtA@ z-UIy(Ib)=pGe$;m#z+l$bR)^98%18-e&pBHlJhs3Ge*i+_p9Gea`pQ)p?*I%)bHy< z{eDZR->(Vv`?-OBpRT~SmQwotoP=-ui~f4?F^Z1=J+0%vfsX&|?$zvhaKKEu4#jj-Nxv&!OWN)?t&O z&qoIzl19(x%;iPs`JD5>^+nFz zeIYqCjh>(T4*&N%`IE^vW_mfPYutFg*7JjBteh7-W7ur>8LQ32SFU>!rWp?uUle}Etdj84jx7uf?cbxjMGpM{=x4SN3P(evh`KcC2YzaY^uCQKD)NrifT`WbM3 zxa=(Son`3x*PuTyMbEnoJ^u>y{4-hauSU=RLgK;hD_HNBh@PJ|dVVu{{#^8Y&eZ(* zYuDO(ei}VLjh>%I&%da$@>=@y8T7mb==s;8=YJkO?{akUtGNFu*82tM`B$RnU&VUA z6n*|$^!d*q)0UyNej^PgSMwmUPRmT zxql+-y|jG+dj5RY`)jnGZ}6tkr_X}7WasD6^DaZrzXCn~OxF7)==n>~^S^+ee+BD3 zW5W+UU*#h4O{5^dK331~WBwnzI+*`6K0C1aUwL&f|J9%9d;V{`I+*{NCl7x9d#}#V z|H5+yHvgjM4`%-FU6P;wLr?C1{(G0?=YQGRea}B_oB5~h0na~pX8sqS{Ep{8ujltM z?@_*gYp&w^dB}iFb*g{9-`f$;s=y#Lq*Ck~wN zU;l#P`?GoXu?x=Zlkf9-ejoE5<@f&PJ<9LJ<~_>qgPHeY{NBgBD?NWO^InYKi_Lp6 zevg~?V*K9Uycgs5LC*WmGb+>gCezQ)tY(cLmVWNE=3HLSpNpP9H}TwQoHhL^^pcjj z==pOK+t2lKZ_M{{==r%9PHoQJi0(7=pDqwRKRy4j`RMuW==pqua?<6Z=ciXlT$uB* z(DTy|O=?GvpNF153z-OPxt~@!vn$URJwKfy*Rcfs=Wgm-fJM)z{xbCZOGVFD^&bE0 zN@k(wQ}36iwVuD=(W{NGIneX_);0Uo^TTn_dj8NK$T>eHzwEiB44t(c-E{~$>`-)B z&iP+b$-bVF)o+qp_%^wQJ)BGY7tZ(jBWI=l;2SM#zyC~X?fsl-y6m7J|M408@}ken zIjde}>g_Ic_|2TRBR=N2_~vIU^VW)gUgrdqQJ#TMUF;FDK|0F4@5+91@&Dg-c!M@n-4B(|^f7$v7(Y_QMpT!CN6mmn9c*0cUl|GhbosByQi$IZN_<`CgU8>BT0LSiSCx1t!DAn4efqKKtzYu1_*Owxb_4hB<=!v2_y1A;56Zux{Bx`RJKTFJtbc&=lVQE! z-p~JE^M5k=hmwc5kQ~G{$#tt#V@Fw#iLcuV$vVqJxB5$ecMN`#*x#JD{x$x8kKZrJNt9efeGZx2e}Wvu z|K$2Od5QXa2W#Z~rG0ZybPk%~g*`C`8!JX88%n(m8%GaK@?G-{8%K^xHdJ#ZzpA0e z+t5`uI$2-qZRqrBlXVBmzQ~Uv_fAIsorD}b5qUTp8-5nwk1Ywlxv(4Lq{wfPlPOD1 zithtC8QAGz46|;9x4sVfBl1%6r$lCoyc9Vp^0Eh6SsBVoe0zCWnMPI;UskeG&aQqJ zW#!AzczrdtGdWVS_BB>}>3Y5sQKoXH+7lCp`sstmwU9&Aj{LkJad2r#`k%%rnVEYS zzfK)_A4O$mZC++-xfIPyI*sQWnF;*ed{b6rW-<7$17ECeU08S1TT6}16uJBgW2j}O zJYUO9k)I+nMFxw!6!~h)%m>(`^fY@UZJBvL_kPPgk(uA2{2R))%={1TJr&k}oAQ%k zeIRd_ATzJc%S>{bL}s=86wki8%Lfl zGA-9t_Q_;D-%jZo_6d<`xlZ=bAk)a@=trh;=8^2_?zyBAc^7}yk(`VF7jy;5k=Pl2 z(|Z>>;D4e6KFGJdA3z6`T#m_C2YTw-6=VJ^I-!q@lUxna14XA3olyL`9^ZZvop1{| zx0AT8;VN>j^LlT6Cufn~ieHy+bdO#}T=u>ezUzd}_VPHs>$D)0ZHJ-O8!M8Uyjpcqq>Sh%_ zuYvoANZo8xr}H>A9mcwKxVPc{Tmi;yWPyawEZe`FYU`aMc+l*PxGy6=GcoLy!ode8~xZZt-t@n z@fVMO?0c+zRL+R{aO?NMTZvA40q35`^W<4i^Q^Jpob=S8)Hi?Z1n$>Aaa8MA z>RNz(g8I?af0g|<@@=oVZ}+xcu5{a@S}$k+%^8&W27=nFb3c0XJx?6jdL;Mm`OVa& z)3`5tdKPoPo%`+FtEFxv_rJ!yTIyClaZKwn|uDLb?8lLt5YDdIm z_hAhQS=&z0>)Wp0w!7hhcZ&{3KXZ(t!=pkv8Vx->!8hJM&HbymCp0B=^kr3^9d}4a* z3(#df?H?M_qVz@j(E>f{e(ddZIA`bp>F@>lHc&`o=NuGIhrk#*1jeC5>I@xH7fXlF z9G$1bbH=!I2)?01@C)dWdP9e29~4W6e>}CK>G_i?o1QzZs%h)Y>L$st+fqHeN#x}k z)?0~TPviH-N#2GXr+FI|Q`sLpir2Sc5S{8!PL#D69_ z(-uo-$^<%-iiP{E)042By0p$zQi9Ip^Yhk=-t;VMqv%c5(=EN}QuHSF{=X!8lYDCc zoABMxn;r`ErgSvMjoy?)Z_1%J71mYBefbr}xY3((=uOn+W85kpP23#4DTm%f-K@ek z8@PXn)Xg?^IyR2pl!FFxwMQzw$;8Idn}XQ*5ux5Rv~2yBp{4vv))&{EKAILCC==>V zT89yxL-ZKYH$+F#zCO`4M0dKx(Vc=e)^H}b=uQJ|<0abAepGpuJV*2-(SxK7>4Q99 zo-NN+x)VOtNuoQ+cW${C=uQ=(?o^?^t@H}ML9IK9t|YpXv@h*xolNUvMt9=ej;r_` z^~{wQKlmllovuK4x*FZ-Ep(?V(Veb9cUpq(^j53XU&p=w=K4AAKg|7;x&Jozp637W z{;&+)=`D1p%h8=KV?Xj$ty7;`#90d0wGR391+Cu)@17^FX>EV19o^|lbfPQJojCs= zocbp&r=D+3bAQ%T=e0^*3-_L&el+!8WuMO}e0x#pPERjddImq)_p={Av5kMh?;d^^ z@H?2_N`5JRcT=x)8}jF>;3G%3K_8IsAfVf%(QVRWh)M0b;7rz(tI=()K<~IJxzqX{ z3i^eCnP$PfaoA;|o0z&6C*|?2H6^|Mutn%LSD@RRiF~~h-A0~qb@GM7E^zSME&Q#A zou_ph(|$emZ_>Z-K7AEy%Dlwn6uJ#RWxJ!>+#b&oltM+kNyELKllA7BXuf>U9CQ8ybR$V}BkMGl*I5Rzz*q-Dw-E&YIV|8ibCkK?K zZy=AS{44FrA17v|e>Ca*M45b-YGfPZH6NX(EWM&Ci2b2wq*oBH^YDM-hDFCXKk-mW zxryD~y!|Q@y9;!TPogJ$0)62$^oCaShmYf9{up^;r*bY`nbI*DzJrcYDlxed>Pvwu z1HK%*A?O!;gZm*L{i2LGTq*t-AAg6pPGWKYh9BmvqnC^nU(C4`$T`-f1tUi6H^Wa| zI+yjOx5V4=@;7h0{jgl>*1Nps4gSc(6JA|?VhtT%Qx^CQQj}+q51Efot`_-s)G`E3l0<;Wg~Jx*L`?aSmBW1N!4U&fvX-_|F#pZ>BtzvmU%JQqLY1 zRnI;abeavDxlZ;gvJ3g%#CrUMTkyBs&6*_N4}a?!?ZXk@jhuNcF}xx8ZsaVJiglkZ z@xF4hxBT=EaL!+)f50QXti6x!cjxWfYQJ{-q)}hJeeHfX-+m$QdoJ%=KPq_NZr(S^ zbEfbImZkNTtd zjm*Bz^>wagobS=dZzjKy+phicG{&Q(W>~g)xxab~Y69kfC?=60sQu-j@Z;R z-YtdcX?aieuwCC4*Z4VsmJ@E3IOCPVQWqoB_U#0z@GY+po7ebS#;j_7mGgh0SwY%iZ zXXZ`l?%U9nw~_nMnn&ze-KTsCw*7kO?ont!zUN*J%?VvB6nYo>;3{+>G;kmDQNsMM zg4VvZi1)4x$Q)!At!BeHdT*Chk4U&`DQ zZ>}=lP}C(wfrj`Cdu(9&cE--5bGgSXSo# zi`-ku{~vl~-Sd{8_%^zB+jGq6*3ueyWca#y6*Jb)tGNDKD~8Qjzhc<+-@1o+n#*`^ zr7r0Y@80~E-nJ6@QpP)$`el#YK;I@ZUyUW@*}Gg%WT*hkrxv4kTb-je`}(z0@+`iI zIw;u?Cl@wH=5;PIVQtCi?rnVEK(8^U!2hzwyjJ^_+rPv*Q!(o1+b55@#jG)Fh&Rfb zs@Irm&VdzK@(63~d$q>M*)oG!V|IpX%md*X^HsCP?620CKUr(cy(Q&Uca{We%(C}- zjafOPshxG@ZZGozSz9v5tq$at$n-~$3o;K`u6tUhZ^kbp>Gmmz<4G zISbu#Cc0w0MFQPyhF9bZSk+l~&mgY~GvlKu8t zQFegWBy!(l9W5E@HBIBYWFs3mr;NE2{+x_XwVrjng0*CZU)ntvS^Qb#f%HrIBmH`n zE4roX*IazS*(&cSIa@;dApQClecDFf9_9BsXO3>CUpwg6v)1}B5kIG19~!Qi+%auG z`oNks5?RniKjfSa>BB1aqb{Q#UG(Dw`Z0OvI~W7xtBirjczJ&<;|DVa<9PO|rGtD= zo@?F{xj)eN6d&k2wN0-6#We%9O>+Loi?L1SYTHEl<_c^RZ0w&R15V*uJrmo6{SC@C z!5@QdlAhxydm6AU=W$lDT5tHjnQ~~GQ19hbJ^OE1Z*tfsxxK|@0+eEHnn{ZvhPuV7QMQju3!Pq9tlRb0G z{GPixGZfn-hn^g@O$_aYwuz#>0^0DRJIA{oO+o&}#|b zb5^#AA2TirCm0un!#HT1V&h_LlfjG!&oSdc%%@;Hq+X8)-<^*e4`ZA3K_hytn9IA@ z^X|pg3T%^{)E8STjBR4QW88e-Wyyv(xqxlr%io4f~WjIvDzvBvBS*O&*wHRh{k zjlnjd{ElrC)(hqTlIy#%#;lx?#!n`;$wmFzCVNn(E8Ao*mFauLHesE{21x&m>w0MF zQDlPXjuG3$$Xa`?KsQf|+z<8gw6aauSFu}c6Z# zKxglnCic-_Y?Hx^0rFMGKxDkUzn1ZX83V^Q8R&cRT=SmD{eiw`=U-u){NuvVHsK7i z6n3MIo22ju>A1<{NZh1;V%~S%MQmMc;mi!L?TM4U2Zo`CP2yLHUGfU+f!M{vIlJlA zZx6piY?MxH(K~`$j&75ymmkD9Ik{w-?JGpv81UHDQ zaCYd1F3O!;YxtJT3-~e>9_NEeETe%l!n!DTa-EFLDlwOOe5e!1uN_FtfEozU&yL#J|X+;X8geC-ln>7@J^`>D1=Uz>@=EQc1M!Jv+^ z#9@|0gV1eok8%xpp)UxH3p})G;3=;nwj*>Z`t;&3PBZ23fR?(6q3vm(UNh&~@2x&P znY()S3Le!M#3TBXI~#|EdF{k%Ci-ryrZE-7YD5-oq;3=cwJds8pHC=w8Dx?buW9TG z@HTRP6Xg<}JFlMM#&#N^2l4T3gl0BbGRtXSWS8AOG@)>~zsZtgYsgdKo98MPw1qt_ zqbCGoFc2EH$6+OX(f&T^m!@UAPb=xGjtOm~Y`^15`eo`Y+IH~iw}G)~oVc8vJ9|_Z zXB+VRiT}KVaYC|KUxz!sZ7!3pP2;qa~o zCuaVZ@a}Cj?_l0|j+r<7m$CCEFnZpIT{-h6b$Z^UE^gigM$enTMCR>d^!;+;ZT-!e zUhC_bBZ+PGwbs`&9|99y>+5+Bb)RvMTkGrTo2utMqHBGF&{x^uWqUEXF3-1RdZ#sZ zwmg@9Xjxv5k6g#sv_5gmzWCZZw_)Gy9FBeQwL#}h^k>7q)40hGh78y?F}~~2Hc`Io z0^0;TY!bi971$>Dhb4b?IOk1Swn@6qPpH^QLnhG^$g4z8CuOYdn_;_9 zpX@=$<9-lV!8XZZo8*ueIm2hDTi%BoG+}SEO8iY zlN@v#z*DwtlN`259-gvZ&-%1Y_MlHs*(Q6bPcLGd~sDUUNC4)c#lWMK6 zXO1Mc)z?~I5B~^EbgjoWQE{x+`ucu=)lm%YJ6QzCV-@sE= zc}EgUL`VF67^6A$LjmnobKTQ1nmK&CWv`CW)FR)Gh{R}$$T&MTF%j8j=SVjq=Oh-Q z^l0ifS#l4ZzDe)Hk=TF}LrH}(8t!kRY{xHjJV4?TvS%k6&(ZSHZ9j+$7#!%uj_Ww> zi|p(po}=Zc(?0Uk!9kX)_PM{wlB;Xp>}{J4{i!vC`16s624g%Bp0dYz7Goms(!!pg zjg&QS*?pRo31DPj&_>GkJI?B|>L_bobMWCa69b~`;4^-v&f+}>pK&xW77vQ8`4@cr zXCwznU&J>weFd?ggoy?9Nne8JTQQ`R6+_~_Ltp9{7A#|9;z5}pURXe1s{LU8i^ZMH z*a>V%U&Z201@t92A$=(v=*jdchQ9ulv0Xg+9ncleF?1y{D#odRt^|g0Q1dD=Cd&4^ z8M>0Xt{A!!d`(vZW7Cz?X}XfSIJy!TO;-XFp)2`D^sU1Nu9wv#k4%gU`4p#@={Q(a zFN?;$G+nUnpwAKCqW^XbOzUOQ*q5GfSr@flR?i$OT;?~bmwiCyw|wyHaHln&_8Q#D z9NOz|r!{X1j(3r@6dTrAcO|YCx8`EQn)P-I>+Qdl)OM#iYfbh+%l@=2=-scON50HH z7SS7P+3%wD!@H=Hy-?lkO_RM*_i@#0^TMSE-qAqrnCx@C=nZ$DYtwGq=UUP2A(v;Q zBDv)6!amm-zPr!$-~sG&9l==rl=s);CF_aKVUls1!X7^vx9;j-+=jDn{1V1({qUNY zed9G*$sZqHQWNeQugQ)q8I`T!zrAmK>Y(Fy3a#Nb1A58a^=Xi&J>`z@qUsOGf69kvVMF0ETZ0VY}v#k;a!j z7~A!L-D$hN2R<}qyW+zc5U;&Y_CbZVtD^a+?J6-HiOE%pEu&+}7R`$uDSq2JXxPN$ zC>wewCMR^wdKkv*h#?b`tHaj}?FRQK8#-6;R!k0>SMcKZ)$o)Z`iA~Z`;@g$rcc{- z5Bd$2?Yfux4aKhFJYj9S=3_ubWSkwlnux4(V|Wv+7~TZpae29ionyu2kbicJ4SES; zctP9`{n&!-JKm@1#%(`{8%fMd_JKv?eop%$JMF#@H?ZSV% zU&Z2)1@t92A$=(v=*h$|W9ZAWT?a>3@*GW962pw6EA_4+?MMvLrYnVS)y2`3!Vl>} z;ahYib(*fEE{?7QM$?tRMCi)ct^?G|>XAqJ7-+m+rsJehy(}6V)pWtSqx7<9j8yAo z(b%Y-Z|p>)mtngG@l)nEs+Vcob+GHOlgnkT!JW*Zz5Zg$#;&~*f3??LC&x?LV=iRP z#dbCFZnxR4tj*eXm3`0`z2@$NZrW}8phMer53J3xwrfB8pa*TcqE9Q^byR4(I_C=X zWxM9j6_`4xa|J@%brAaW-oEG4v0ceQGv^8v+4K2s*{);$^Qs{3%3k^|d=onE+C^-s zSlo5Zlza>-MOkz^|1;=z3oZZN3M=k9)UsXK^MhU5(Z!x072`~Wu~+VOQnvK@4e0tE zCKlQS4*$guh`gYUWQR|TDQF`fn>F%Me0G_ng>UV9Q~2HngO9&V$7mgV{AK3(>HW-Sz9;cHWzPwGcc*d{pWSc*ww0*0EpF-A^T_L1=Z#M*~{zJ~{7S)@PNx+vg}Y&)&;pzvRLk*&K<@ z6_K-cOmdjsIsJ#`6b|=g|DV%-7{`^hP z$aaOp{Y|!<-`U%CtBx%bZ>bIA_fBlN2#?$IIEyis{;Ak9WzFk$pLCp1#g$p#0Xc`-1yj9{&7VGNI) zG)Vd@^}UGubyGWrc+jI+J~0;UqGL#eG7-N z*8P&$?I!-4u~Y2_w5IyPxEfgIVH5vj+Yjkq;V_m4Crba)en|fcHYSc;K>vah(!aui z-c9>4^#8cz6^xCEefLNAJjc+z+MgLi_X5KhE4q=`Gi7`14Bbl|V_QJ?g3ovxe98_! zV{Gc;=w9$O-G}jU2Vc{D7#G)TqM>`i*K{v15xQR~apjSN)2-{Fa}z&@#*69JI?f)a zTSw#Tn#M#|(7JUr)~g;-eyCeVW9^y-)$^e-g%91Scs&23 zy7e)P+x?s;I}kZ5XAv~}fiBg_Rm)aekCHgO(s43@4%Nw3(~_+}b#}SBlf>s8IA}%m zAc@o4I+MibHEpQ&paTVG(*yaReZ}p?M%Wj(56-6^XxzS%G1IowzPSCJW8dxb-W}fu zzA4N15qlQzyXE^h{_p|&K1|#`^nIupW`XZR`-e;Yd<=7h$KJ@404n*<|oc6;wuxTHeZs!?jI(GVxJa^hh zwksU&-!iu{j0cmK>tCG!uUvTLlOE{cme$fc=?=& z0{U05edj?G(5J%bJ0HS~oq`Q$P4$IwHF*lm1HKOhp{v`+?W0JPWvJK zE7+JkhywbT_CxwtIMBOkKZgD--^bwSUcGxr_iF!l4BZQirhCa_bRXtb#Ezw=dx442z43hvLbt9*rswl7itE-oPa{sZ zj^=0R_YQRPK(~(OY6Ln)pc_Z?G#q@!M0D$D&W5d9M{_mwxT)tuV+tR-Q~T)oAJwh3 z?_;pKRHvV(G4(9yN%R)U^RRU&d?c~@6F!j;F3^P}zr%TVXhpTh)z+CLzr%S)=s>~Q z^su{pAN%q?)VH}L?_*HDk9~O`!FMG7inG2Q-^Y8H_i@%YuMF}&CXx5SnU^N-gKx>{ zypQPj9qT#URqs9Sl5lyeGq$|VDdg%x+Zi;47-ba zos=DatDn#NXi1Ux!GG~zBQIzpVe&p&y7D<8j(^q9=Y6!K^0^@aem-xcr7NEk;^OD? zHd^q}>f8{8kB?S-+md(Ef?rnWggE&4uaVCIjFlUr@bOa{e0e)?XXXEMQSTl{f1R$EN2JNXI7a{G*d*~oRthY*_ENZlq&&SR^Y+>u$n zn`bgR73P_6Uvg8hC-ShF2yB;|lcMRyZ9j;!OAJ?XJ7%YfpJ6Zy`n7X9W<$Fwr-S$VY{VE)2TVnH0|Dj)}eP~y~a$j;%V%vv?9h^vRiqk&piv!CVquS@b`qX{0ZiTs_4Gd)mpLsTQmh5ugpE)-$ zmJD0N+RvGAqZdzg$G%_wlpKSQKP6v7cvI(V^vR!s=jZcagf}%F`&?Z9RL`(rnOg&! z0ha#-W2M>;cuw^zW#z&6LGFwhJJr4g%iQJLFT$Uy{eZqz`^=ZYiSnnwhWx2unHvLJ zj6Ve@ec`B5hcS~7ylw;>QW5G~%@Vl%!%CY#GFV*uczLLIazLdH+ zz7!bEmjYw+rPOJ@l)5;+6d28y0u$lOf02BX+Pn@{j3-sD3A`vd@G1CE@>lw^g;J>? zpC`^1N->{u`CkBDP2>6`lw0ljA~J=}?)#7D{!wXT`htfi03^Jk>K8 ze>-nQY?%~erRo?@&O*KK#!bO-RqxRi=(>{k zhn3wnOlsTg5#>%V+<9XMT2@Q6`VzPbBQ1Jl@BDg-@bgH!Q}&e zbYDJD_g22wy{Ep-?fAsr!+fA04Da737Jj?S{PM^%j03 zF#Km7$j6xn;S=k9Za4bG-h+H1D(hYLW@DFQmkWWNe=(bs6Vmd#FvbFXDZ{-tF4&bf)qm0DQ z%sHCCTlqnh6}-gAbo-PYczDkAhq8i)_Y6E`fe-blTr>P<;3;dHzE7Xn9?U;dKC!(y z|0wSh%jaJdk?U^W%D71W(KsvrXdJmjc{z{$Z{-w?kK`W(c}p9S`;xPS-DJT|h`_qJ zN?H!P?f0FtO7vq#b=Ff7R#RsFW}DrFP~Rc zz@G{>;LiZIFqf);z7*nBBU(j&hv`1g`&A#ng;?~DzJs3IbNbe)iM5Ji$rs~ zT>LQqit$wWSMZFSTchw9KZVa&sXG44H$ohI#z<_TXpWb{4{f3PNN$(r0o8wKT;Vr{ z&)|R57HZZ$u>q_@_{5Cv+i9&m@+__Qc0%LQKdtk2TC^O%1^O<&Ge_5zd@#Kh1aM(q z7h|T{lW}9bW&9jC#!d89$qQ3(jG=|1$a zsW4BBd!3Xmn|y=hlOYF#JgY8n_%FF+$P3!A^2Ad495PGBfN$lQb>(x(0(>h^ES1k8 zbMdV_v#xwDS%7cldExihIb;q#{(jSceEm9?OyT3>XB{cXA#?DFml%BFCOVf);S(n@ z_{2_h4w>Ma*ve!JzX=%rcXHLffi>*i*fqdBv(n%9-geUf^US)!Z~EwO%~W3-VrvSX_?*K}@TqBEVs#=% zBqpc(L)n3cXAL}M1rOgEc*+jH5%)CklntM8R(ujZlk<=6YY%u~A=f>fm)3diUY?iM zz;}+$j>&t8Sw~D>gPeQgNAl8AR$dx)oA|Hk5`Tl0Yc?U03l`w%TsCajJggt&y-03E zkYncNuxYw++mGPD13|7?kSpW1ALPB{+jn!=;@gklzym@1L9UG3ek2DB`d6^<2>t*= z_fG%e2Pba~9#A;kms~cdeR#ovh5i*R_vJf0vHfR#b8uMW6b|<#m(6LP_0EB93}Lx1 zIc%B_o&Hab;53Ce+}}jm@aMMPwqwZ~75TTN9{G2oOM`vMK!*-9R^A)sSek%$wx=gz`h>Um+`W{*|n8?1zk( zAA*+&d76i|*^5*;?$F5+kRQnbVw4(ckpGoD~nXy;x2eKe&-^!cw zgB-i~_AMM}A>V#PeyH{XUQ+Ed?*U8F1}7>%1Qt1A`hvVLu-uQ8AA&R4!a-gb9PUTu$Dz>P;}c!l8<5eOIu-K0;8S++GgcktSo|&vhO&bX4dkC6!}rpE zEjQ%(w%m|9=)vGqj(xtC8-j1k4Z(*-41S#45Ev~t1V17-zAwJC1M)g=F`1!q%a8{u zuPMG5?W*(t;%wJw&Yym7{9eX(jpqIZI&PTPmvVFdT>QXxjpqJo9a(J0XwIL5 z&pe3j8O{CEIYqjHs(;Lfg0tvb;{Sc+4~k8{FMn`w`GYs_%O8Ay<_|vdg?@dd(fq;C zR~nor7V(vunAr*|fA9duS4zBUtd&1FHq0L!OK#xU9yfn*oR$Aa&LOdF$uUG;sN6#2 zZI~OF&n7N}u`dZuFJD2lH_M9fK8LmE<2T zYrxu_Bi7Nw+8xwU7P^(#EbDv-AIU!?KAVRRW4FGQe@NNV$7tWmSEL-YAH-a}=DCSZ z;9vT6+AIp15eq~?{dxLj2L*z#uw9+S?Dz<* zo7SlwEu)AJUSQF1`hW%yjXs zTt!QEI{46y=_6$aA9^u$lwMYsnJRiC;Ft&_!eWe4JALN2*`JwXi zkQF*FFUY4XB0m&fAU^`Ud>&?j{7|rg{0LwRb1w_{L*WGSBfu%l!8Bv1VEfL!jBmg1 z9899hg0JOeirG#6CUxaiJxtRG_gMRP($ z2d!g{#rBKlg1Y$c&3S)O+claKs`?Mlss6)mkT7vIV&P33b>1AHqlwJV=<>f&2@oy1ag?y15jZfE*Wyh!JqI{3tm%=;57(%-gJ z_{8lDKCwHUbL!v|zccv6@bIT@U`+~QQ^e^EKCwIes48wJ_$IbD&B8w#82)#1H9nvn zy=|A24eYy_pZjI+Z4VDHFEtf@^Hk@hK5|QtixqS*s$(DWd|O9H}I4dJbZ89 zDGR*ePh^0Br>yz1o--J34)a*M7X`d?AJ;vd$LeujX)@*QXfO5JW?pyT9q0L_+0vTQ z?D<|v_8xCow%r@SZ&<3FWtBXZf8`9rS*%&@$2F>Rqgq(k9^$vr zTF0>0Om3>37m0n`F*_CJu~L@YS8V%u*bJ~;ZqBQwn`ry^+d8Cgak;P2_VK&rVc{i} z)5*Qq^Wk`ByZ`#^##w%{L(U)Dl(KS-qOkChv^^^WEWb_sFV=tEclpNUZ1_p_iL&Ib zMf-1H;jP*5l7giyIcvq**EvXPeBdXA1FuQ$YqWjIThq^&%^Isl)R7V_#61f z0ABLhHu96)wP^bWwkd?23@ks%S<`%8to>Q6#j}qN`$TyYWzGL-B#6;iWZ)K8$hYXYRVs+>u+Ugh`KH>p@>HQG{S5qzu6z?%XvvHvv}0hoA1mL$ zQSS^570b;n7$4}RSWa%-_}jU;x<9j#YX$O6`ae0}e*=qLD=Oav2RUZm8F{AhHpa-e zPm;%5d)PaWYw{duMfghP@lw`0r;%#{1Dz<|lRQ+)_ShM@CUsqT9n``1L)jxRlpTC% z%Ct>6cC0fN3}pwu%c`Rsi?8LHdcGxB^ZYouCNR*MfuZa?U&}RVJ5H_%K6GgC zDLeRDt_gmeToe3o?QIa4h+O-Xm?p_+cI~bFKQ8;p|Xr-h<}{wt6&I zSm85&>iNu-!skDJSF@feeC9}e1u5o3!SH_|=YyKuS9BbOk33NL{Ezw?qB+9y{>GM> z7UIMA3ZMT`Uqc)7zPKts?|tbpYVK2E9x+$VW*_|T*I#-R^AIIlF~LpL$ohpc?# zv5pU&c`r>x+~9Wd~e1wPa}bIs&i8FzBZuXJ|BTzu#)_|V(&p|>X{vSzg(cYfkB~fTDi7=CLKka451&wNPxKQ#8~JU5w~F<@F_R2olfWi{6~3y@$~qP8zixjbyw(Um z1^p+#k8-j0C&F8e@REY1EV+!u+Mftt>1Q;;PYQ>7lG7M%eLC(2+ex__6YBQ;x^C@~5FK z7vHK=G#8we?LI%uW0XEZa}GWJdVgV{S18Q1@g`Ep$|^3@f;)9 z)Ooxya!p{gTvIvJmRwW#q0EyyO9wT4sqn4*Zs^LMTO-#LevDjG_*QhM{5ZKL_*$+B zOhm3}ANpW?4fV*Ze13RwUxUsgkMlJ|bH}v|5nG}Ty-RHEXb!pP@RB<&wstgk+{ORD zd7g08*HDi`KWy zS2h+rEH+lB#mj+x80MG5zX4pBht8UybphLs?1WDPxWI;#d~+8ru-7E-T*1M6>bVvV zs`lVFvFjx7T*1L(3eMs+1qWX#IIao~UQ%!tPboO~N5NTqwA*~>`|{9D9{Qks==<`} z|7P;g$Nc-^z=uv=UstV_htB?K`4;-i-@NVi!*Z!x@A8^A_#+Qbcy;xOHOJ@kPg9iD z`NpfsKmGT7j8Nsfl=`c?`R35@8pnseq1m_c&{JU^I`=v$Te6Nk)bSk>+tm5$I)042 zpbaYzJ(bTf@#Xy8UW96|^cIds! zf~OqFnPfhX-H+rSq^vx4%0c@Ud?o_lWx-Pp+7EIE_T+iYCXa!91$3(*uU>K(M6Qyn zfF2gyqwMfAGQ_}BHhj!}`JG|j`;?^tuXSIy=kwm1ui4A<-ib3E`2{z3uGl(h=L1Vl zsN{6bVvP*)%g1*}PPFg<-&^X~WUZUn@g_%Aa{2^M;dBK!_zyaCE-7|xJS^*}w2vR5 zL+6lcJ}K5d{?dY6`C{$Q@)P9Xhk5UmC5ND_HJHj(oB4H}I_g0x$WcI+wIq|7RZ^!lEPS98xVu ziqa3d!EAH`)hEiEC>#0mVsG2;bYA@w)`!oyJk-}3Ve^sDoxD$roujJq zx}i(^9W^bgI_NTP%uJ4In0xQwLyPi!g-xyZAI6!C9Ge9X7#PZi zhR`)nfrgI!s7pKj%3pF~bxyvLzsOphAKj)UsA#N zK%YhBue1-1Y8;WhW_-Bs$X|hl9t|vXXJCuTUvShrLx;t3`R)EISY)k&Mc$hBi^*T< z)8u@gH2iGjaDn_4SY)m4zkx*#7nQ$)gPhekB6~I7M(#)D?-KI<&-kFrI|Gut@*F>u zyTkl=xhpWK07m7VQ?|#>$X&@v&&0@G!SAy0DLeSkppprKPq{$usOMWS(5r)=vFa$t z;&)jvlpTC6ch&P_gHJgYU&~#=x8<(j zL*oXYvfw*%S75Z<75s?YeO2CF$#QBDzdkXY><5xDm zq3GU%z$Od#4M2w~C*H@#r0n7cXBmLBJmBSkU#dG z0!=q+{E;yVAGxDo_#gERodez6U!A9$zT}PCcOdgrMqWQxt=p+*F?V9O${ecxWda{S zCs$`qyFxgwdLG3VCN|>2rNVs&T!Z!ko1d783)dCGaShrFY-?gDh6h#u;CIzOt_ltw zSI@P0UBSWE3XZFSgO?SY#nTE7{#9^X6&yUP;4I!%aPX;uv-y=h?0xM|5FgyW{RxBH zpHRt|Y2V};_J4?9U3`->_}-n*PW4A*hnLi3AN5D^tI3Wm8I`T!e_2^sYa_pz{HAWZ_RG`oyO-1q%Qi3f zS8t)*GSXW;6n;9T+*|E=ezt|*Lf_Ax>sNGp75Hp8FJPYMwUv6ye{}?Ka-GH50XO(% z*>Cdu3BRrUhSm(t?xd~qn)2)eT;&Xbua5M7IizL?X9(=y{UgeMI`q!5yO`v{)B_V z{Rs!LKjEMrcYnedYkvZJ8pw^3Jq*YT+8Ar?Pss0GaAW@a&QoXo3icoj;yiVeb3k5! z!6&ys?_p5mPyT@99H{*vn48U*nD=$ zEtXt-$vxIN#@PQwV1s=VvWG(F7VCAjSo;&%FBsiJQLO!m@M$Bw8SFg>_D&RQe&{Pl%7LxOvG%)(D%A@Qo|_2+pg|uN5{; z;}2IbD&L>7{f_v*^L5tR;o@5`tS2tMwco;8OI&;l2D)|et^F2$KKIeZw_q}n{Tk4! z%#nIG%6ctx@S$Y`L)m#gbZhD;$KpfR1|~w|`1ta5lwg?Pt@mn({B1b&_r z<6*{5!4CdBe(Af&-(q__?DhlLLpIcdS~dc*d7nNeFclGRj|lg(?0iN<*)P~S*!b`;YAJ? z$X|h-76XeME-HTo2RW!O2~oW8|(n?>|QF3XGP!vLC^gy9z&) zsZtjwcNM+`W6NEI@9q^TkUI+Bg0bbU!ngK=#K~QSZ^77dSK)^;N%cQQ?g@;Ry8>g& zU8&P@SL)*AuE1!yD=@a)l{#ox$waB69Q*!S?h1@8cLg6BH~5qV-&xBAM$28nkH}pe zTN#XRs2(|+-%nE9H>CHS#QBDzdrdSC<5$Li6!?asdrku1()e&c$#~TVVmtVq#v2_n zz<+;!uOR9hsz)B#droZMP(AX;-fNcymT}hfnxW*}j`SXw{HLXlSJje7{^ruhUoEX&=aU2AT|K`em6_30!Fj^s zZ(BtiF2y<3Um*VVr_z#j>ke$*^-6Ea+9}@h)4QMX*S`FmxAw(SZ zE#04UvTN79SX!~}vRAyX{E&SK-y)`WC)b5s52)ThTfzBcyLj%~rK8vFU%CGyn@bN^ zw*@?JLFreXEE$tMduVW`_NRER^x5a!?prx;FRss}at=2A_Q~y?d4t<`pT3_+8yEg* z>6b4ose0rh#^}xo#Pt}P?$U$S-7>`c?nkJ+i~6Fb;Kg;w_W@A_56RHXFi8-c`I}1G2Z@yOFHf<^P0Q`7j^gx=5^fT z4bOg)UvTeI?#&^7FZCBwUexhp>VCve?o|-0T*&;a$@R8nz0&M0e((+pM|rDXr7zO{ zoUUYt%;_BB>oTVc`Gz0y&K>oP%S|P<-P_87SnGXq9TmhoE1Am!d9O;wEKNJ>rg^Jh zSz2|6_{6_ePuoj}-Lal$Y+E|~j@Opf-l5*Nv~t~c-Yt3I;eSqE*u?Jx{0{r`Nc=Fb z)2`4^(y#2MA8nKTTIPTBBQlqhD{Hea&#S!S6`nK0_jXP8tFjg4-hX@p_}r3{q5YHK zffM0{*=ygPKWlC8%#zierRP4$b$9Ye&L4Sk!mFE`DBuz1uj=4nuSLisImWXG9!c*m z9yv9RM{3{^V&uDsQ!5@Bp68KcKi?0J#PqpT&bguAJ~lQy;`Dt`Jn|0OHar4vtO9@A z_Uj)1dw+QLgD)?6oVfhsqe_Nn>$vYj*U!GP?fI1Xfqeb zBOixmB_E-h>&wu4Wld%F6>w)<=dBItRh{L(C+Kwza?qCPTZVXTUF7#ns;f(6C@Wbx z99db5EZ{vW;8R1tjQcj^vUkI>Cdn^qE}zjf0(sDB{)nu5WlFL4;GI+O* zkvhpU$G&ym)8{=u!Si-j4)8hT_NnKPyIJs@uugI|5orXyK^3Vvc~h$tQm$!JoqKJx2VU1Pr6ino=3a|m#BLc(81pzpBT9w z@`;N57Vrr&r~-LVH8VKZ?p5r+kWbQLE5aw~kWa$@B3E_~pNx*}TR zdD;K{3;N*`-UU9%#k~)FVqziUUy-;3^sC+tK5^>AXAk{4@9FT#K%Rr2Mm+~VT)}g~ zx(56=anBhLpFDrf=6))W4#_2h+Xg7qZSxqKh1f5Eot@Wgt5!RG0D zE%6p?3GZ#6?k(6c9X_G{wdr~-@fN(U?#1#6&svybJ>eN1?a%S=obFxy;`BNG@(;(Y zC+ToKnWEQ|TGkW6-RfOZ=X>k-=$bOj+p#5LC)9`QNQNA^Gh`h>PkRMb!B45CwHk!SB@?KuBMY=$at$3@}VF-6u6Y=)bP*bF<* zcX=Ysb7k$wuy&jwYe!7~k(V39Zt#`efc?OGlwd!!$GpoL)`w5W$n9qtw^zl6sPMjP z){ourtPh9lKok0s*cI#fy@oyU|B~l8mGxj$$%yQ7%3GL|yRiXEOZ@Cs=A;oiJcMr; z?V?YAf}Y+i9TVCZ7kAVR6&qqMHpE5D*_@8LYVuzfT+nfRX<7CJe)ZK}Q*dt)Fqd{T zEBJQG>5gUvdr8OHz@5b}RVr=GQ}-+U@?hQQ>23R2$^O~@32l&W`nF1J1cz1@b}VOn zuMcTu73-SVB0?)-ixluhHGCmuz6f>7zn(8raeN^zfG-#W$xmH{uCdLbm4!X5_p#uq+*B-;i_u}+|K zC>vx8z9o^pT_e%k#{~Mc=jpuVnCpeCr*qIm1HUTE%%U;-@;5tFl*$@Ydg* z=dL+_AFerF_)!**@*a@!(Dql{yW2L)d5nR!Tjqsh@T_IGoX1#5z1S}E!m)7b852_< z8IvyPZ$5o{eApoRWZ5_8-TaXznG^lIA(nk3bMoBkWlfD06BFfMIXHR2%`=)xC^zt} zrt@zOY^;U&b7XGnnVZ@4BhL1bHB|cuWX*dO+E@>-{5$P`Q1SM#khg~^-j+45FWwdz zCcc1r#gB6pPYZu*o)$ksPJ_pU$!s9_*Ja4}uYo6w9^gzwq z%Zc5JUtziU7Z$+dp?^X1_ZIYu*mZC3;BT|;h5W5-rvmdz3%E(`fP-B@uR{M|16oi3r=z&Wz;x3Uf25r0D)>lr)6->lKwnfqz{uPcGS zp&!NH*mh>^#)h+X+Q5c;bvit}UhKBI>g6ByvDxzcy*aFVKCF8kn{NAbco_Jt)0-9i zw&{8Pel4tfR@Ft(pp0@ekE!|e)LJPl1TxcY|_=pcN6WV)oEA#eVciGUa*nA7IJ%*v*iXQ)(_zuNh zV*M3+sdT}@j*O2!KRl52^4^ak>y=!4hwJbQ&%vi7ydA?r+wYMPVZ2Cu;q)OIFS>l5 z%cmEH>#)x{ypuIgY`x%-GY1WyUj&re^S=5UCV-a(h%ZF z!-<Y9QSi@Z=FQ{2j~)0d zI+yaLGj92KQ#y<{iJdoxGGBebCd6;vAwKocZ_Yi5J?vbGC9Ah#A$9)_P#*7%SgdZ446*h%n15B!jZACzp|9sIBF;!J*8$B`_4;NGRw&n3>}Gq*APAn(RA6+cj3j~@6M^CS9SKpzXCkBfTX zhcx`4=p)Jx1^$mv58P9JLE(vu!ZkwTptgfOZw>aI*mzs^^V;sm#`^&8TM18y zog;pq;n+;CetY;G%7>1Ot@E+*!ZX$CuyrcPD;U8Ky>LSv_KvB;&goR}?0eVn*fx&> z`!G6!s>8l9b?o_;byLNvuyfWS8{dh)@k=3(eJr&7@N)*XUlAUAYL3fet9Y)AM~X2! zGPM2r8j}+1JTh(fO|1M#lOC67z1V#dS(`RS@PhkZlOCV=dcR4JQHn8|D{E6|3l6A{ zmMs|DN6Q{``smz`>7!Hc_VGCScuTmxrdeNwuYM?NEO9bfW9z72#TwWIpNk*igV5i0 z)|N}*OSS$fey_ep4w}T{bcbvd9K)d;hw!Z>>f?i@H%za!KN9YXb>tXp zIu@Jfo$~r|al9^eU`4zg`1^DF<@MYL`WO><+1Pp728550|A7pQ)=S(CK1##O4qkBI zOY8B8ulLh>j3T@~us&LLVQe2Q+tBHwb3dk!PQBa50$#_)isg0eMDZyE{veCjx#xTE zy3QMc=L2206Pxh0>Ewv47u!r?eXQ-2U#Gl%y2b0<+rhmp(^=csS75_P&YQ#Q%&+2g zuIsV?UK9I|_@3CICA3|-;MM7@>+4z9!LQ6l*Y!T_Ki|jx%g6lQE&K1>gRuLsiR?8! z6Z&e`aL&fg{k#WW!EO+{q7px?kgLig6#s0DUHIBLF5jNZb7hTQ z!#m%~`8oZ)YYBFteqVWau?ZV)2;N!h^n2&)f_IlX{r)mO0bYI#>KTLS^kp&mhW+(H zKmV^8?|Pn9Th{-x-p%)o^>JFZ-kykISoCk!xhVZBeW=~iW6K@-#}{ezR=)l5ku>w0 zd)T=*L*3IdTGlY=-^k>@hW=aP=wIwW@n6Q+frs})|NXsd39&!@zRThaW9#DQ z2v4hW8o3^p5^;kPFjJbia#=L7+Z`)^h_cK^m2mH?1f99RZql|rLfzj_wKBe={ z3O{^jsf&AOg&+1=VC;96I{nU47x&Hrqu*IzBJZ5wo$oL0mrrtWb`Uho{bY~D1A#3h z_halJP2U;xhrLjqFJB2*??mLtx|NKm-vm!^7&MNXmY|UZu zwr1+Ht~|NTk|(zY@+7e1ii{z=Zfr)`N3ZS8hD?4eU6}mY4-MGr@VbSck4ZLIW9#DQ zB@XQ_*OXMxf0EHIIG9>+VMA@ZaTKJl?R|9|$rK0d1I z%>Pa%fj|fZc?mCpNk9uqQ?Te_3wN0zC@3;Sp+$==AhuB1fGzzkR;hq+p_K`w>3M|G#)~xFzbVa$F$pUrKa}Q>O5T52m}+0rmw~v{ z9h=U*Naya?zIYj&j@ zzK4wCgucLw#GdVv zejVEbzPX4$i+qH+JF&Y;gI(aCJMt*`Vjel{qvY_-lH{0fU!OxkK>B#3~d(yjcdY&h}H>dZr;uCP6$-vj> z{&NbfIGt&ni}^Vl?`nM<=a6pzw$Ma2K)vtBo)^7$_;0Yo8&7p#C(0(;O2y4__jokY z(ci>46MfA{ca2Bd2g19LG=4?@a^7X6@z@c@@Ymcw6K5>+Jf{32?>r{rf|!9dboTl} z9_$?JGwLlcbUoKQKBSXwxv&V+=h5o`@_TUf_d1UaPBo7a9zi&I3Ou6g=Q^IpI8*U-JtC8N_NWa8L?`xzF zz&E#?d91B)u+@fnrp=hg+9uAx=Kww|w$GRYKp^yhNik|=MfH7Cb3*o0ACUh_+tRLe3 z9vn%Ie<8!S;nlP8J$M-tQhah5{`=#->|=cOkmLV7K7?aJP;t&Y&Ahqm7Wcf_8P6qq zCvYBP4g6t+x1_N-;x&yC!S)JcGHmb4gEmkY5843nnxSuCOh#L{^^H6U4@QNxUELe& zx@;SlzQkm3=7BI7*YhP7Lo#47vaMWs&}QlxW}CG-xL`})Kfz`KKVq8^MwQBDltP)N7{^WEM*UpNt-c#m1Hx@BW*@`JT_aH!f&T@ z7_{C^U?2FSwd13;!~70SinT-e!Mt`jXG^?m2jL$0uB!Tue|N7>jPGelOfOoXd_k-o zSfAb4A?9zfW@G+#FhKZ;a_l(y&wm!hl^?#LdNzDQaeohHD94tN;oDd0+4$boUt;aJ z|Mw}@4#E@jQsarmGtawrIM`Ymn`2%!@W28CPt>+|=NTmO&{-A2-!Kmu`fjXI+SaY_ z#vI-H2A&9CDy6=}-{|>hBbUC!-56_>ZRN^?HdC0T*=FvwLX-stTLs(v>9WTE`4b;#wwF+M$eEoqdXp)UC`Qrb3Je1 z><*pn>4EW1-?>n62jUSOcM$GLaR=V@5b;2jUDzpN7g|-e6L%Qt-Hr51jP$-n`hbY- z#2vWL;D{Z>eRSLrv31;m_xUp&`J8M|dN)qb^Q8CY^nMXr#~rv&LBviOcc9K+_BsDK zK<`I(haH@_17-95$2c8#(Di?gs{-Czh<8tPd_mXiIXz;#(z7DA$loPm>$n5?bLpKE zciizTvYC~fuYLtN|@v0LHMt99;-Wk;@an6Ou-Pv5k`8H(-WR__^X)9<3Zu88u{UGiFEj< z2XG&8DE^ZX-tuCNo<*U{KF>c~#OK?DX&|Jf#OrP5$8;2@6Nu$hv>Zc1+0PRU_E zB{yuSqe8FnZ<$ z346>G8xnSQ~ed2 z=cWgM0gG>EfC@}A&D^wVx_fRq&i+aQ{>l=Z6QXu|wS#ezVPKLI(N+@EoM5z-D-YUC zVuBOUW{7bVra2L9r({Okx%C;J1MWBhZRplFWJX)M^))6r0d4Bim)ITM+h|*tzQph- z58BwJFR?q48Ex&#gEm)nG}=6YZ*Q-H?Q8KZ;0v}n@IqyCV4^8)PI;uwfhoFdF7(;v zBuiy;q0e>|`i9Mgz9CCxbD^(sQOC%<HiooZ!$JG z5Ppt2bI?}kbK{JdQ;{~vIBPfvzM`4`FMl@Cb$|Fgs;oFOCd%W%7bP|$WJLz{c$vl? z%{l&0{f_sY&pZC7YmO)Ev3F|hvHQ*Eo#P!GElnF?{xh({fdW^g?^Ob7#{aj-TA zdo1u^kAsB1#3iL|-TH2P67#3=d^awcTHnA9;n%wKCC0|MWJ-OBwJ|>F(w7(;$$+uR zwsz$~n=91F*@v-;yWlWIXO-XTX^hc%c`FAV(*c-7);W=mbK^nHyas#6@Y^vo3Mrqhq$zk7we7<30C5N4r+_1GugD)ZN z?V5u+sITY;MqQnL@&4#9Y7Xk4{K_^)9aP!}ti8?~_omnfy=d4b<{`qxOl;GK{ZEN) zZp3>rVz2LVe2ZzMfhnY(li>dt*k;IsZAJ}QVi5a32DTaUV4GNPEQw3PFTmU*{HrRN z7SjF!`m?}2b$;z%sr*>`jrlAd#QLxD8~&BbkG0;FAGnOl4_ro+$Afno^I|-Bxq*ci zYd962%Uo+G=-^PTY1Mi+T-xfE@RcuHfL zXj_Ga8g1*!gEm%JAleu)kD+g1p+;M~^^H7ebGJU@a*UJ8wsGqlc@hS$hj*YS!XH#+ zGx~x{AALgQL7#9vUt)HQlcs#W#O@d`b?HmYj%1f@zLxGyW64CjIY@ z3rp>&%?KxyZAMsXsy3rMvdsufG}}z*b9<01RhtQYBahi;LZ911=?e)t`## zzI`yoT1A*{ztouScW*rJTIJx2Y1$NH+Q3u?7?`eZTX!A@gLH7)fgVh^z`%5MTf6lK z8F}8{=TT+faFt(Tkc|6QoA#5~Bgu@u;>v?QqcCB!&$!pB3u`lhw{n{aOgKfGi9Fn9 zgoy&HSLG2hZZjcE(PknKx0%Rew3(2(@!}+#i9BxH*!_GrUYt@N@t&|5Js)wNOW%VR zr_`5iM*0}nE`8Z%Bumw1RDRiJl*iL%a;@rk-Xsk9dmc=A-MA`&9sh?1J2uaf%DIyC z&9kINx^b3N*4?7}0%I2U2ez!|ETs3*STkXtv{vQfKa=Rc6!)dXnzMj4r^lOp7YlE` z2LGYz`7Y8C`7I=T3wFs613z5Cc(ePvmvK4^lC95!A=cq|2>zDziQq>#@e$D!u@Tk) zoLSXAn3JF57{ebH>F}vUe)vF}jou?~DFiAh9pmhvU|J?{mFzHdL)jDN6B z?#DNx=&VOMs5qO7cO_Hd(A}oE*NiGWSDeK`47)wQW4i)BaByhDwki$wO-Q+6VAR*%1`D zEs7?e84g`UpDzTA)x_1K_|H0ts~3S6e#%JfmtT$btAln#e}unRU|`_|ZeP%6;OZg9 z)uW&iCr=FW_=pCs9^&;q3aaua`;?ZHg?N3Bg37c+vQMe3_&4By?YJyEI>l-*Y`jD&q@Qsze z(U)BM=u;{W`jksw;=PQ~%f98(m$)xu^)7w%HFa;JuetJ|>{pG%xvaB3 zL`UOZm4`59+2-O*bc!~oJhIIRhc??>=yRKsELEEeeQsBwZ?w74H)M$vZ7%e=U4_2U z=0e|)8S{m!j_{R*%}C#DbJCY>PO?;OPI+XTQy#O;NhaHzWX62rdcJIP%7b}DwI}Jz zHYZuCHm5wY%_)zk&FTNfx6?a&9nbS0I6vh5wC;*M0>m7=?y8uB*Inlvw`biISXYg) zM=-!0e-!%q8+!!(5sOH?iuMEC`v+KukT%db$2}1Kvzh;cckbI&e&CB(cbz>2;ESTZ zz!S0VI%&WYH9iMhTxrOz)_V%(y8EZ@DbzpX#7VAom-ZA2Qtv6Oyzac~u7gjf=>wP_ zj6H?^=LoxX&WY>3;LhV<*v_890F6)QO~ChK-TMvFwr>3b@r=KRbLJ`QFEMQ1cfcI1 z?Ju!wk{Nx?l?Q!J?MWDY&a>`bSepyHpW9sQNu+3Vk%!xyF!iX>=0fJ)uSlx1$irH^2j!)Jf1d}>u$&MJncz*cU-obtLgfCyr;2l zoGi1&dmL4Q{^ickyY7!Y4sn0%ZOFQc>;8JLgYb1)cZ+$iqbcQHM<(J@dLPXJ%i!<=y!cx3rgJR8;wAzX1B1cjsp!Jqz+q$k%yG+p_E}ZT^gk zSNxr}9`|Q$J>}2b+T!F_m0I($o4I{ZtK4!_bB zYr?mbcp#n4JO#h+z3hXG`(Lbc|A_B67dY|d6i~4bLf`RAaUTCy6W#0F3wSQ!3q^RJ zVab4w?F~%G*#|LfuF_!lgp^0M->>AbzmgkmpyX%=C6DShQu2f$H`+wW(Jo5gXd5L* z`zX25MoNx$QgWlMRGQgd_zu&zV7C^$ulo1WKW{{Rm*BsIJF2g;HU0SZ6VA`)_Hf5GL7xZnjutq3E51Pr_s3i+_F6F4i9Hr$ z4n+E2{=EX%{eka`=K|9==GZoTb3pC6{5f;%H-DL8j-@>p`rciN_YJ;Ma-KQ11AAi( z@%ska<|++#$9%+cZF?;@_GEl1_FT{oT0g~}OVrqt@uk>P!9I-A$Nr0K1ND6D!zelS zUy|f#CnY!9N~M|YWzMl3*h}=g4@v)2b8H9oRkk+jtkVA8`p5b9a?-pndeQcBFxMt< zw$$9q@!`Lz6yS)zb_TVpQ=xUL+3 zPJUzW2e@vPxIcVixi=HiKAV%@*!xLn-&yC^KAMx?_`VE$HRt}uehU0ES9##0S@PM2 z@2u_*f6SF1KAFl7UrgK|IIPMK9M+W|IIPMK99HB9?yB+wcQw|Ec<@t(%r<;;oKgJe z_qg}--CsEC#{Q4<86{BhJ(@J@MnlNGZrmdGe$a2WU*XyNNwHREn0q(qJA{#oy&t3R zxbmP6sl5mEA;ijh@5g8C{TO}8t#9N(pK|N-J^=3v$+mIp8+p*j-1^4ePe}JQx4w}F zea@|K?5h}k&!vw(sOpbC=+Z}wpkzj0bm^l{syyhEE`7O2!23ce>yJLF^wCFM`sk}l zX7p889`sq2$LzDs?K7T%zuv3=pU`J$Uqbd7@eYWdZ&aNrkL)wFcVYG!p>OORrRp<6 z-^gS38KKYpf$nY0NABkvdCWc|^o_lvRDDJ~-^gS38KKYir01vVGn7a68Ome!8Is99 zL$XwThVsZhLwU?TLo(TCNM_7uuKLS9LwU?TL;AAMkStZ7p**tBP##a8NqWCB#TLWM6gV zL7!F6H~XyHf4HzdBlf4b&xk#+6n#eI;XWhwu#7$!P5@2%y4zItD;bzORO zDW~<=`LDmu*jqdQ{#xQVLNQV#ZN{1gV(&2Zz@B;YWYX1)3X}Iw{Vgxtt#v1B|7?FpQa_wRI@sx-7~LduP{RdTei zk{fNTNa>>=D7n!WlpOs*$&EgtZAqmL*#`iYVoeMP02{RKWDy?@qXzIT?Qy(}6JKHXO08to+dqtQkp9ql91 zjka;}|9yX{?iNLHL+|iFNYQ|4Fe<(jF{*BO=8f zY~Hx@tdkwIC&n!AvFbKeX=vAklIynB@_~k2x3QKN81g}?4`}%ZYY$iU0abqVkA$?3 z(MOaV{Y1%)zM|61{$j3^9kiDv#+hy_asAQwqyK_R8h>h??7*I?t&BNMrG3=@b^k>y zezE&M#h6LosxaSIJkQxp-$h(A6Zk(c*IqYb5VhBh?*ogy?i;Yz{TXAgJN5brKX-tB zZ!t7rSGHa=5o;QUabEv?R|D(P1AYvM2 zAH*^)dm^5(r0o#L2zz3$N#)00lPf>=m{fl3F^T*kBmcFY{MQ@#r*i(AjQpSR#NM|W zvd9g^*~XWunNpU-gZ zwGY@u`?$_tz3%(2JQxFNuNPwgxSg?AKTyj;dMvp0jXW3=Zhhk%fH5}Q`bHje-&cGu zk@s}PUcbhL-1dJ#LtMZs*wy}Li5ynohOaFv1L;Ki19y8*sLW(g% zdE}U(y>4^N2z?$8Buh1Bguao-95X_n$Ai$<>xr_N&^Pj!V@Bxnco6z2#*EN6@|a^r z=o{xCfIZ0h*Zq7W5AX-o9zx$Z2LbFYwZ4%D_?ugw+mp(lrRQ_k^Sc;%a*aMi&+lo- z`lQkCZ{!)|(Z_lv`V&3hSg%~qmt%(Vm}7>XFUJhYQjHnPBgYKoF~?+K64U`_UHV-$@rWF{CrP-edYu{J?95brt)ii#VL>ewkr0g zI6vM!Q2A+3*TCX@0i*l@&acmLr221F__g9pNDzCsqF-UpR^4Ch*&6ppe5mppxS7f? z_Gpd#=%Xq>a1e2S?8&P9*pqdYAA7MXKlWlp{*aOXT2KD#jr>zN|4l~z&v?ejt%mIL z29Eb<_}TaTJcXZ4XIe(3KGQOI%z6FnwpTmo^H>kmnU;yZ-r~Fmy_Y?~==<(GeMBBQ z(=s92=UlZ*zpo+FW5KPTZ{*4M=sV{loO|oB;nweO=o{xFa3%ykk0H}z#jUT;)J(vb zahIRZM~J%VvE$a)XKE&347v3O8_(Bc$*mtS@)+kMMEUi36Zj0OFT3=+7h1_j7gOTW74IMv8iOn z*mUV*jH)~sqb_}nRV6dVsw)r1tjc4KS+}2kVPgj8J=B=NnVytmM&#i!gEJwnF(YI= zW`r!om=Sq+%!oY3m=Q7_GeVYP%!oWZW<(xi%m|r2Q#8R?UzE*79(|_BHD-j2$Bejl ziZLVd=rcvGF(YI=W`urppzjf!X_9L>U4MIAl}P{haeB?B^tGJ+9Z&jq zIsJQ{bmt6I5dX*LzK`?G6`A3mcz{LSPb{*TX<&fiQ9;(G$FbUp(W z#2F}8I?h0edKG!nFXQyf>C9A@^1Z%p*ndEMizBwV|0m8|^O>pglxL=LaAvA2eqHd( z#_z(;P=(HOhAL>`>`UG!23v(igMIXTdJoHQ%_!<@J@v||`)a?OXI1&u=?^>0J{#UAQL&pllAH+0YUTvdNV=R%*y_1EoBZHNE%9$r{Dc%!rhzC#g0 zJpBspzXg5aPS~Ry{C@lFO@5*=S$jD9^KD=4lX#r5UB>~iYg)IaDPUx@oh z2+v5MZ_#s7-ZOW(!fy%3Anf-f_Mh7 zGS@SZuATvmA=NW-@r)?-JHzhhYpbOG=GfbbSH1Seyt)OpzB34WgWr!I>|ItEoJ;mD zV|$Bh*t^WMK^l9vy^`vlxyw}?K>iWM0I)?F?5)xrTg)3w{yA*ndX~rD9X|tWig*Tm zCf75NuAYIlCe<^Py-|lR!zTXC@hCZkOf7a{lvW4;f7No!ceoq~YEo&2#^`xc_k6{|Nf=pIgqpG#)b2-{-xS z&)c7q>@MVjaSF8ijr?}e6A**DF7-fQ`i`fsM5pF`kjy$#{}r=gzKQ%!jG0@(L{ z&|l%#%^$gW-{alZSy}gqzD)D+AMWc}QQD+tZ)UUtX+rs=QbSUFC%= zsk~SZUF9WxSzgFo|Ku|j(8Bh zqL^bS#-KR}F~Z|WQ|UNkA=0}z>2gkz@kbPM(HAjBXf7%uf3;isXBXkwaxI3REO=Q4 z_;Ya;I}p#YiY$weqbx$72bwc1iou8?hN6DXYZ%QnZ6dvklg|A^jnP#7 zBi*xoc((E-@O~G4k`7E|DK&T;$IU#>M@~H|k0AkoJwNK8}p?%l4)J(^|`O5`2vr(Mt^f zC`COoa=)Q`80Bvu_I3OX?K{bODSrWHgRnlpKhkkC)`z(Cov=PYrhO;bSCjR%50$Jx zL6uF`+p90@P4EBRihBEUF0j5S{VT3-hyE4UH>H2Y^=1Ex<_T3^<)3kVQ|fblS)b+; zufAE|L8xyOxK+9_buq@VcW&je@?h+_{KaJb394+y*m3F0dV9vs`Rkj~ zm*o0(=u5JHoYI%%`m!&{W5+44@^kU>XThbuKZoBcVU!yBff?D zez4yNl!f*o(v{`?WH;|z?(L6aU5OZeGQRaJ{AA44grm{=qQ?fVjd@y+4NB+v7(S{i z-I%B49EJX<=3|Owy!|mx#@Q~oj55$PY(JcItEd}{Q!HXr-avaCYR zKDCfzU6K0SA9b0H{+O<;)?d+nvOlIP%lpZ0-uY3))Vwd0fGNG*?PreFLRMX+Aala?D@KkLS4+v7h$KF;}_rv(GN> z51(D!pM7<4|Nb67evor7$}iUoT9e~E7h`Ul5yHFa3g=8w?~L4gm9L!a$7>&7j#uSZ zDnDNP`tT*UIjm1u z&oJ-PdZyzGU_g2f5Ezh(FO2m}<;VKq%FnTfxIbbKaet0EFbA|*{XOx>pkPuwl4cHY z{PPs`#vGu0{^WQ>$0|mjcKl=PuR8IBj#<#Bl+1}o*muXdL0Qk0Mjl6B$1KVEZfx7- z->c{Am?c@iMAeO+&vSq(BRxOO9B_VnQ9L2Be1(m(y(pg0bAazF55pY3%a@sK$Oq#aW)ay;}0PdxMz$3ut5$#O z@sUW+O&uqZ&*$|6qS)u7wf_jdom7N%Q2ExS94BQuhgZD`)HIg zg#YPFSH=&Ly}fH-Qvb((Ecx?a-hlp3d+uGh|3^PB*1bZkXGZ^TE5y2ne%pp|fi+F_ zf22FO8u~xhE+d`yH44R=W~5_H6Za8Vn(F^;9rph;Wi3KkMLdRiw+Q7G@s!37+KNzS zAxF6pGdprFBgJDF6NX&IV@_Fx+}IB(;@C~rQOG%lL;r6pLVcWgPVJ|uIwj2hpQbK_ z?*qH5{-36dA0&Hw=YJ9Za2yyyEJSNTs1R!bzOS}7O?}ZO&RUT8yolZC3<}1DXI*e& z#0cUCj1gxoz`QK?Tf{n|$Awr&WE@CqiC7B~dOs)CI->F$*qgdPuOn)GG4^u`5hIHG zb8NVQ%2?#a?Fui`aibiAp)>6>8jLl_SK!2r>FhKlcbSTr>zFdVzK$)E^(QLZkbbJT zQ`$X&|D^sV?2i8|6><7`?VTd-RQ48er!$u+dvV;T>`nU8UL1ESdyBX)oxYAull65> znq)8ad>xx6>+6^_y}pi3ll9r&Tz;3m`T3^3FNeK-gtexh1ODdgp?59kxy;!w^UP)9 z%u&#YXD^ZQ>?~0aD>}=FXK%wAuP`dar%tSkxeW0v`~a+L7S<&dpOR1Dif1p*{u;$~ z5qh?uJzRq?Zqt&{4j;%6OWC+q9jI=#M*v6J<6Y@J?T$JojGZ0`$+ zzhQ4Vm!+Qr4vlm6BVQaR`)@?V+1RHP6#JBFd|&uJr88cUAMv=jPtVkGImNbKzYOt~ z@WnRfV*e8VRjFdHIUJYsxhmmXQCtq+O8OC)BSf5zc|rJ9a=j4ghHvFcXYBoa`@L&(4#u-3@FhVd!ZO@$-)7iotJOG1en;lq zU!Mh1xP#cQHu4+$)rH2Isq%~cY9qg~Urm?<=7PAyA~sN+E_biDg~iD@MFQXG?}G1) zkxj{eNECYFW{+Km$h9`J92D%z|%Z;wKKaf;kiT3C<6|hme>G<}`t+==h3c4z}Xt|J$7(PC(yhUR%(#{y83KLl& zFcpo-ppPpV#<&ZMk#uXFVSzlu@>Gd@xldP|?nDqJ@lS$UUR@s*H zd5kL?k^R(p2lt$O{`N|V*Km7vh}URLN0nFMH5$uFs;|OpG^UfRud$r;`Wn+o*4J20 zdVP)QBRJ1j-QCYd2kMcaUWSuC;iVmhoNvF z;6LL2eNy8<6vKJ_WFMc+oQrqDi*Pnm;R<#e;97Q)9B=QGH^)p4otZ-o!(^Z2nL z_I0D4^aQ5^50dL=1U>@cLgGFt{9BQpV!utKvwzF+s=|k&*!zuR?Ia(yh~9TM&z^Yd zR)o4Kd*vga9MW5t8w*yB=M-P#BUV7gF1`*3w@36DEWIl@1gV=GeSHY zFM>Vf^T{SuKIQ*mfAMbE-D*k#<#=*>KS*+mFG|3H{m=7 z`IE-@2Hpfb3hTQ#m!jiTfkQdz9^5JV=bcNTJ{_Uw0hbZ?7iTRM{;Tk)l;b;1-HM{O zol|%e>X(E^p^geqVrb$&-jh!XyYs@UYzQ)dy^)+Ue zUSDHp$@&^IORul7vt)gZnWfj)*jcjvb*gPh--Xk7akZ1}GkyXe#Mk!%+naE$BwUT# zn{c7DxEi;2N?c51Zb|i3xEQy0N_~yFrPtTko3a<~?esT|xuw_F*juu`#@y2DYwRsq zUt@0R^)>dEtk3OD_V>287nehOUyb&T(wXHnYtjdCo%Q;TytX*!ojhxch<&RJTxo#B z>uwePg%!Qk!0SHe!Rs6>4|6TBIh>Dzzo*Vei8P##Qs*H^_Q5@U5(#sHJ`HTIWYUt@sD`q!zpA^i^V zLHF8n{`O9Z4|02Vh!1KEQI%KWgBm+bs;|NaHHMh1ud&1Q`Wiz_*4Nl!dVP%{ChKeL zFulIU5R>&ac9>pYV~EN6+};<0FB)r0`Z@Oh#yRK7e(%8-4>7)ob7pG(r1NAK=bV|s z9f3D)AY8M5YTS`xb#L5~VBE2&Ct{T%1G|YZ?#SOO5PR%&{tWSj^ot@CZ$yDd5=|go z;}Y1DXM8c_!5yQVp75mqndj0}{9v5T6dD?AbPmv|rJ1q!1Scp&VMB!?}uehN8kqU4NCN*jyk1EW=PeizLp zPjjA4m5(t>Q9hhUkmXClEAejQzrbc2&F=zwZ1rL4A5&0Qyd$GAcu!qF>KD$p;}hr? zUSBn7K9PR8<#XP%>mkqAG5!^WkE!=D1n!CXMBtsWFJt@)+|x;?Gx+Kp4bmCs1m5XR zXWa5Vp1b4uqz&&7Irt~`hUxw^HmE!u&L?T=T;wzGPt-dJ|MVI7XVl?koiN^U9?y86 z?|pP$kLQy%?0E=G6!S@25$u%~A2sKbG`1>)tpq;$A?P1!K1oy8kNQQ@e4_r>ps2gX zRTDVlM(cKB6uw_G#)$co=N1Q74H>v<^ftHOl5k{*ec`Jxt{UR=hK#k!v4`=lFjpr( z`#hl!-+4ox_u}Sx!$M%Ln0w=ejI|`Y8skl>uflOP)|;%aG2Zn08tYBg*BEbleU0@d>uZcR zy}rhJll3*mn_gdIy~+9-<4v!xvEF2T?k^XD1Eaqrow4`yl@F6Y;q|$Bjdad)de%sR zU050V`%Z%;K70$~!?zgt@U8I0&GVcNc8oO-_%P0Y!mqQUeEw6U;ryq$ z*M#3Op8bF0mgnBz`0C8;0Ld`~vt5#4jJeUikIEF9*NQ`1x1bv+J=9v`#cEs5C;lVW!Bl$ia-^qAc=D`vksFJ`wdjM;5VV)of(G5hFhlz&ak zerIjWKC>=nx2})br#Hpyw>QV^HUyd$Lwq?@>^=t ze)#ppZ!mrV{JP+mgI_LwJ@CuMuPc7t@XNxlJAU||#oj*94E+4~W#UJ&PWb)59IJQ3 zI^UKzR%L8y4Os8^@El*khA=&=s&nR|dOV-_4VmCkCgOvXj&c$|htg4Y;_I`(qb|fp zI)O*sh~Gfzs4MY7N=My^pF`=e1@RW8!#2bhQab8Pd==dvb|Ai=!;+H!79O9Qae30@lcKAZ#7cx(I<~zJa{5*%Rr}E5p_$uOOIs69VXL34~bGpON zq4a4EAEERq4qr&=lN>%s=_L+dPh}YI@D`wSFP!q+W)UB}mT zeBI91?R>q1uXphEA-+Du*E{)oCtn}t>%)A#o3D5Cbpv0I;p-Z{uHoxOz8=Zfd-yuQ z*Ufz0gRc+rb^8j@en(pQx|OeM`MQa(&+_%5753zA!G~ve3%=C_|Nk`H_pR?uwzBu# zpO;8G4bQsg2Ob0T}XWENt z4%5y|{Y=j~b*XP*+RU_(X#>;4OzW7|GCjz2AJaWdYnbk4x|8V+rrVi5!E_tb%}h5j zUC(qK)3r?3FkQ{Goarj2F{aCzE@Qfs=@O=knJ#2HpXofNvzg9fI+N*irqh^CVLFLv z3DfaR$1)wmbTreEOh+&s#&jst0Mmg?^O^Qy+Jk8h)6Pu&OxvSQKRe5`m1zspW~NO{ z8<{pRJkWLOb;^M$8-2{`1Fx|#*E3zmbS=|0Ojk24 zXS#}MjOlWw%a|@@x`gRsrVE+QXF8ARY^JlA&SW~B=`^NOm`-9^!gM^-u}sG>9nEwk z(-BOEF&)Y@z;qzfe5Spa_F$UBv~$#^^;OI*s{)mpA8hc048FkN2O9hUgYR$f{R}?e z;QJbUAA|30@VyNF5`*t)@OcK`!{ECce6GQFGx!{X?`rT}3_e@%SKmEPJ^-AktMBVi{u^j^ z);&*t3+ZEy-BbHxE5H1;jC-E^3DRH7`1+HTL_6K{{SmlM#%c^7q_Y{_x@4|G|A<>3YwT_5R$gIg!Ite@NFEOP_qz zU$AvV#o?(><9a#HNxbgwx^;cU;oR)Wk(*!1$lm(jl+QnSYan`f>QR5Et+O9GJhhKM z7=P2>f9vze_vSF`ogSr;o0~IwZ2h^_qx?<(fUVCX@0%l$ev6a7Q=|{1{8Qf?VZGDb z>Fy^tBdx~*NB&druj4=1oBe&ZzK(mI?)vp7e`NJ7Kke_nb^nUPQ(L>=^W-Mjqt)-< z`uf9%r{*6B7O#Ccn42F7P90Mboch&wg2fM41amKm2B!`mVpa44|5y-@Tu;5~ zlUBvXXGerjwN~5D3A(~Q1^?v~@$g?xEv>P89{|5JX6O7iR9uexKX#>6kwf0`lqFSd?-7|2WY^K* zQ{||`Z%dpye1+?tyBPn2ml z_-RxQq)!7sop_XKI?A+~$}}e2v>J9@!**RmcAe;yse;S2hRgIQ+jS$`brZ_6n(eci z?RuE)av0B=NzZ~UX5v|Ex&CWm*C(xtQ|qhjr%;Yl>m&B5Cx{;tKJ^56__NPZ`cByC z5b;Pq1b$Wx`X$n5fuBu0(r1HT$F^LD*lT@_-3#?;Sxxb-0T9W{0xrSE{9+KEScJNS7ub}OaN13#a5q|XPx ziEX(FW!g+-x+>hVnaXsXQ>Nc=nQFOAN4ZQ#xJ(UBnOYBXc@CotbzFuz+aMtw;;}_CB6mei)-u_;unK|g3I#+%JYx-cFtR(47rb;?+rT7pL~;5adiLq@Tu`t_No1!1V!KQ zC+yzOBF!JQPxT-k=~&B8)gVOW*jy8j=;t-~TV&15I7~Kcy@L5_%6OVNGHLZ7?N1Uv8|{3s2JH;~Aj*UD7?V$mGUV=U zamw^o6WwEU_^l?~V;kKA{5ITUA>9M~LfoT~?g73L&pzSQ;jLDFb}RID@UwS7Zz(@} zDfG_rv(LutOAZE$Ul|sBhsN(KBSBHuS4N2Isf|^^;zpzoAL`g;GEvAEIM-8$kG3kl zvj6JvsrD-S5kWDh>`vHE5x*ODS`I&m_~k3?-gTj3@@pnThsOT`q8LZRORS1Mlune= zo$IN?r&|?sXlxCwvX|0WABu66ld#uP8sd!BeBzOgSfq7d!rnpY`@q)`kMuh5<<)i_ zrI(}5Ypd5d6J$woJ&!j5*YgG41u*po~F;~t6KQiIiY9#D4mUyI(1>ekeYX*Oo zc%+{N{{-9c3G}s{#3Owt>QGxE=7!05mZ$?!szc0~8zvK_Iyl!;hp(|J-kx7&|3BE^ z?fDV=?WM$jGW_;Z@RJhuw<)P8$9@kpNzzH_zxQ%XlX|8_6pk&c-E?LF1@^OU{^ zW30B?u0?uFE!owXuO{PJqD(}oOq-U7Wf9(bvx|3mTkEfw%klS*3Qk~7qTrE!e&c}NBUCmBe3qGe5Xdheq)G7`WWyn zY|9q(jm|Yr-{?%^;abP8c$TOGQK~}?*MTV2!MUC~ycT8J!DZTka_r$U?ExR-GR07i z)m*04;7hnnB`C)9iGu#U^H4$qy%&z*&5?crzb!Lu5x?61NuZ#81h*qpE*CVn&KjQQ2}lf=)5jT*Q- z4Jgle_&F`247rnu(zBiGsVyy4_7dt3Ets#jC+s!EZ^s;DGATU-O6fsyJ@v7ht%}bc92R~#P-S0xa1?07 zez|kP{vxGyj@mExA|C0z!0$=e-=y?C;A@FTdM)@>)%Fi4eboy4q4o#t@J6G2olX zZb)we-%32vTfuK58zOxhY`BAXr0*bmmN@qO3fuE8w&x1AXO!(3VS7GoRlGcpZ27V9 z%kyB%CBzR6zq|x|3E2|qC9v5v;*mZLyuTW@M7kd~>p?uydw{PYTOz#%{6XT8eh_7P zWTI213NF(_T&72beRKD2v?`9rs_g4fpX0HJO}0NiD`9_$u4hH<;{&Vhe<6P03j6rs zYWs)8ABJ5waQi%IRUBJWWlzNOj;)E<$2JjvS@_r{@beS)9h5#lY9CudJkpndA69Lz zr1W7c>|>*eNBU^+&DHkzDZLrx_SZOe^Z`o-vxAF*;^1sCVkn(7=7Q0sV6m z_s>n}d-JNDJ~rhKOIt1n=F-Hdsi=q87rnl`g?%?nunc2wDd zZg=S0({HVO>IJN^dw?4dt#Rn-nX@XNf8pxz>AEUg&|0R4s_j9@|2gFxQ8<;j# z+hf2gy=e;mscbEUW*Q)9PJN!Wj^`^RwmB&L|Z#P#kP`<0mqJMjGY@GH}q zVm=eshikCEov?>LKRo>EY^Iod#P!Y^`?bXh`}*fE55KmMDdrP#eW=E6T9&ZyeEy1X z(^96GU&Qr}8vFHC3A_CH5#iTkOflxgHL#O6)+Fr5pZ|FHjnz!cnby_VZ>~?+&puxq zesdkuwM<)T?B;C=`_1P+5pLehbdy8h9E1IO;1h4|NZ1FT9~pjgJJTl;_5r%y5w)9} zAg|%{-As3~yaw{IkRRmqeN6YT{2=7xAwR_FbxdnnerSc=TmpF`r#CP?%CH@=Sl$Zx6v*2-{VdZ~mbXJb4f337r+%H8VjU9o>w)@DhdiItdojh@B;*0eXF@)d z)8VTMJ7HZB@{y3wf_x;Wk6?;5LdeHLJ{$6}oIZvr)(s&a5BWUECvkcSQ_SZ=J_+*q zkWc6IX-qN43;8t27eYRp(`PZo{4C@%AzuvnLQbF06!Wl<&xU*n&chdif-`yW$(jbq>4kZ*!~AgAXu?ZxsM$Tveig42gF9m?{3 zkZ*(hAgAwPI-2DNA%6n$Mow>FTFY{*z0KPpKg;Q@Oq(6~$jpA>k$MqjWAQ z2tN2+VYnW6!W{5(h=*?<0Usg0C1!5`zk&GXm|X?Fiufj+{Q+N3d?U^RbizHc{?gf~ zLhyyeAIAN`2Z=v~`-7iDd>!r&K0-WVm<`}J5WfTW2VX_}cHAF)J@HTA{+)6EI`G?Y zfAEFGZ^r$>2Z`T=`-7iD{CeCUe1!OQxIg#}#4pGF!B-K#6!!;TPyAxsKMVJN9{haV zAABM4vv7a#LE@+5{@~{jKLz&(A0fU3_Xod$_|Y-@$QU})0e!N|7+hm6R@WnNjk#A{ z55qO)T6H}X*N3Y0^*~%V8Q1x^ZZ)oZ;kwS3CSD;@3F*mBg=g_)ikQ)8R)GzuV!j0$*QKV^ja{L;ZiB!}lfr zpu^`AkMShONCIt}c)lq7=Kqbl?|6HS{o?OHF~0T_#rXOa(Uux}FVSX^~6QQ)3?@x}(PaJ<;to_Wu$+8?%o;!F(b_d-w1v=^EKd?GT#7xG4s2@&u9KH_*u;F1V5emL*S<{zXN;; z^X=eAGhYXO4D&7EM=-w+{4nO5zz=1<9Q;7$w}a1Teiis$%s&A>hxr)z9?Wk8A7Fkt z_>s(S20xbhP2k5fzaIP~=GTFr#{63FGnrolem3)~WA+cw4lgf@+20K83f~6)cKnVm ziP`a`(xmbl5Aeg&innS`-b3mbQbo4KyN30ddz+V^ikrc#O!L& zp9SLKqmyuslF~{r2SK0C(H+YVZYd;wEasoU&%;M%muxvcX2KRa`+BrT2)>m^{TwUl#lleJbB~9;_ENHBryBlUV*1(TwDBwyL$&d ze@mah&u+V}c-EZ0fzMg_fv4}7R9t_y#tvHj0<>n(SP5GF1L7=gYmGg}DhP=4v;*`HTLbtn>D4(Oxx+lWUU zwt-(xJnFC<{AS`&2lUbUO~j)P=%e-PiANpQgI`BH>aY&{TH^Z#=$vW&8sbrhHQ-kh zk2;`_)-NNze;@;AUF(-peF_2v#4jP<7oan+^^1wm3}h0&koc@X7V-0m?-b}n{5;}2 z2Rai!oA|sy9`Un??-}Sx{7m9630y+_bmDsjdJ#X3_}+ou#7`lQ!;FVK(pvBdWe_`xsmTTeBh-_u!#R*Z?$7$0v>!Tu`xd<(`9_4|{voW9>U z&*}d!FLcJhktNPJIJyjHjI*rYtORcG1H7L`V~EBnjkjM8`ce4J+8g6z+S~K%LF@f_ z@i#l?#b3|Ki@(+*FaAoeym)hdUi^)LdGV$|Ui{UedGYpPdGSAv$cwj)%!{8Lofm(1 zOkSMEK>b+ITF~*Jt)L~K2SF!+HiJ$9-2*xev=MYVXbtF0&<4<1pu0h5gB}K*2f7n< zKIkFPg`hh?7lXEgE&;6rT?*O)x(sw5=yK2|&=_br=qk|dpyi;eKv#o40lEe>2D%n> z8|XUF<)G_9H-l~h-2}QBbUo-c&~>0sfUX7I4!Q<(2k2_hoq6%2yYq1VJTHD^Pae*n z=fz(>n1}P{dGW@&Je)tzi=RB4hx6xo@s`FsoIlTtzulY{Ki!fSZ*9$spE;WsZ)nH8 z{J*e|cK(Ikkn;=sSdU-WFZcQd)`4HZcPNcNmJ@tuKF?$*hswd)52P=>Bq+2uFj{;%h+AF$BZt?TQj?|Zls*WKT^x3+4{(b&?{p%u`6L-zIbLg&lmQ_9h?{P#?-#=gsf4RF;r>@AKgWtzrzxQEZW@fky zICpoHxf$g@0jxV4_gsjwSNgh_=fQ3_;N9rULsrFdJTr)I{f!S=CvUebJUjB+UdVgW zpSP9H!W~7qhIC(Ed1>G3$2%1)ugsemtQ@lcW8tCuhlMZ2KJjJyuMB5&8(*2(d&T1u za1W{r>8yucBKRM|E3J%uL7cyv(-q~mx|AR7l2JZkVsMuqcFD;02QnsFyRJn0%|(5F zhx)wQ`MtMMb_Z=#n1wd-TUXVijT+EKR7M}#CNeZlZu^U#LAyu83%wBbCop@lY_Ky8S2bLx#YM7^mE$(GiD zjPizzjC~p3$XMq?8{U5B?YM77VD6nm&1=b6h`j~( zuEOucFq|6_6z7Jpmy(BPofsIgA48c>jIOeOEhuDu%7-*R_-Trv*Xwt8-B*ui z^#dJ--_7{V#qZnrZNRU7RaRvkQIypJZS-eW)}uVVDGhd|w0hXJ9(K$i9yaq4g?)r< zm9MfMHW55*QV%-_IqECYI{Pb+`E$0uj5)C$bsGTPqo~_!{wucLfOu*{X0QzLRN1X} z1Q9cZD3&S1)_D_=nOKvO;+&$-}0Ah`@(?hH5&)yOYoW>Zxd2%Rl8aDXsEfYZ__Ge~X z8#s+Us?XkX9caX!dE2DGY1IF-x0D8El-?9LihAFk4PA@@D)SsG6gavnR5>?uV&L{{ z=%T*=4Bca>>lgDT1&*PvcjT1@j^+C+?^$qD;5Ey7>U55;@`yj9@&@viBaW~9OU%RX zjL$85b4>TL*GKj!du>==*(=L?mi=+*C3vs1SJ{1ow})Hi^)4$2JRNQ;nONC2rBB)M zHP=@DVDL}F$MXA@H4fepJ|4&~s~G%L_{5}sWoJ>&v;O{=^9GcW-B0@mmer#y^$QEi zT57MWeEZO(%GQR-mG4ZevbVz5n_~sr=003CZ3TWuaJGIUXtm%wR~`Y)SVQUAl|@9S zMQmU8eShoAKd{4MEs z;eU?czs(tp_Y`ML?hpSB-=dlcKk78r3e$fZ*H!v&`Q?wW|Mowaqvd_*zD>CA<-Q!} zet2*7nZAy1Kz`2pA=b&);ls^FIo^Qp_JA+9>w{f`53lbUe5<=Ja`Usk2fz1VM((~v z@Po*YD}DK%TFl86g&A0{aor8RKm*pdV>m&9 zx)-heSt#Ss0a@iMGqUzwds)`HFLuu=pOZOJdM?ek;}c<0rlW|1MkjcVX0{8FfnK-_dvDvWv*S>)m9* z_Z^S&UATYuCHQyq;osc_|L!Z=zr#IJ`*&T+=X59kF1!3_F8sTd!E^Ab+A^|B0vRi< zbEbc{CHqfrL#l7OcHHl2$J^14^U#iWpdG)6cKj0BaX#AdF0|uU(2lpG4L6|;kD(1O z`}D8F{{o-(A>q@y>%0O!?aJQn_ANS3``(WB-Nf~N6#uOv+nM~kwC#*ivMk#mdx2Y#Io@0nW_T{0ZM z?$`U~X}_+-`i=DGp4sm_YfEgf^M1L%GuD(&_+{Zo>x&=14E(Tm_$|km!+)$&KYYz^ zRosA>g8C!YhRTf0ZsARNp~|exf-igw{CxaIf&U7A4})I=O7G1)XyueY^~~X^KgD}A zKf`?4H?!NKnFWuAf7Yq@q8**OE!vSuv|!QGkX-{=--!i_zWY+)qNgFh2K);zjagJz z@WU|W%}3g&>wXsghq`~jb-|+i!($eG=cS@W{p)swcS3&|^mif;?cFbf?wNwk;isYZ zxttB*YmojlbnZTU&7x1?dfiJy7u{R;bog%U?XUZP%PT*-@ZZBf$34D>d;A=E$1GeM zzIE`E;s1vI*Kz&Nc;dFj$c-~Dp1^6I*)!{2@3 z>F^^jTob+q`FbyWB>eB6A7446?yB&&Z(8yALK>S<#69pE?lFi$fP(n-`r%Z7}iv^*2s{+$)=SzjfmkK3_#zS+oP0 zFQWs!4rD%m2YQZd3)Z((WhFd-))RbRe+I?=a}kdw_`iI8^c{N4l}&vxhk|rFX32%UJQc;P%(un6g z06LrEYWnt4ww}+sBi{-5Zzu5$iKAG5g4S*4LYb4#6=q;Lu`H$ap{Ww8RbFDUG)pDMBX0dd03C5sKXJ|fy$YKwVcYm510(up4#S$Q};cb z0i0ndewU-HO(=UOlmob9#X{7f5wU&%&ne7?F5+Wadvc+hhdeYFyn(X5iL(6S{=+x^ z5Pf(eFoiqzZw~)*|IqNY`-g?UkG}mtPwS))<)D~_>Rkxif85I5SBd8>^5vE{Te;=O z`UH#rcTljnQ@_l>$G(#lSXtl;WaecBj`y^R$!-sjp8`zc_oxfiVVmEv{X$T(J=LWt z5BLb~N%f#Mc))kxlW(9;Q2CnSBRu-;<;67>%ZmxG81k*mz&z|H_`78WsvjI*d;oo` zlKL5*lfZMRy%u5(mu;0mnIDUN!I|GT>iInZdx-hHgyQ-T;`r*vC~n`@nd0`JyW)2G zo=DrWEX?bO*C#vkdftB;^SZx_n%BGhmz>uJIP-d}UuAtPAHTl%^}(+LT&G?3bnmk9%^e_9cugIno!%hwV^hO?H>gOK#I#iJCOPuDx?dOq^| z?*ATL&%*WfR+oKLmQRC!w>hVB1bj>?Q-55)Gb>{ME7m(I=NZJ`+rSf!PzS!Xp-Ux| z5PZ-7?(8ii9fdgE} z@qPyA(RG>P9os_i^@y*?P8*0v>`Q!vc*MEH&mkW1-s}D@Tgi_4ecn9d9o`-W-`#ni zcZs84kN7fbO{k1z2P^NmCJ~-{cOrZP{N?NKt_rWPN-DqEEmZjv_+8uYt`09p`eLL% ziu^z57Oea+(tn8be@6P(M0yF*LzVxH^c_h52GZ|AdgR5s78UM49w24 z!}Y)mA}{_k(oco!5tskhi(gyx64L+U#jh_Kx4$*~ofnrby5`{A@V8(5#-gkDzZ-t| z#d{V#iR(#!xNFg{XOD-k{lk|QWgYl(`2Vwa=J8QgXXC#!6JU~%g+)QY84^@BsZw#P z@G?nIzy(pUbtMU)2)scNR}cw=x^&P=ORF!~5)hQ2X|2@?ZFmh}trfKusdm*QYzaY@ zs+ed-e&6TZb7$_{%w)l!^!??J`?<@x=bY!9XF1P#&hwlz>R)%wJmsxV#^wC$j+t9{ zAM>w!XAXGlvvHUF>+YF@|1@pfrT>~Y^YphqA9wM;=FD8j`@j!wn>p?6-Q$LQaP!O* zYzN=^;I5f7-~MFW1s~io^B=rtesJ&1NpF8PF5`o{XJ%ke==;IEnR#!2K5pm-b7uaE z_m4lkZRW?+zx%_RXLc03#D{myJV^bYe0ayq?YtlU@ZOn+ssFPN@1A)s_KNxs=gq9A z{?9+0GxN8+AGtfLbmRN;$A!`g*^8!p#1ZEGq4(#F3xSW&-MnKPQ0aH`KDT_thmtm5 zzTHROw91S+qv>>Cf_=i?zn)w@AGY>e4E6#PNh{j>Af&*Vuj=Yj@=%3i+?nlU!Oc zS-#!HIv;ax^{sPh#SHm&FKdG3BLeTse<`J6$63U+7+cQD8piLm@)5nohC=@;8wv8K zg1%MH$fOGTRXro8D(GAFjO?nQZ`CvMtb+bk&&aq6`d2+8_ryNqm9ptyzuf6tkKB8g zk4TU^{n|n9^r^Db;L|I4v$=M!xUlp!?t8cn{^6q1bnHh%x&Hm9(WO^%pUw5j`(sL% za({{I@P}hd-{bxnSKZW0N_%2+5|+ zE0T@Sj-**WBb79d5qe>Kc0oe&9lo7Ey4}A!=?>pTy{_@UbWKh{x8%EgAHRL4|FfjK zd@oPD#$R|}RzV%*_pG?de-bv14O4RcpHpV9>f8K%uygdeJ=Y(ioRdGf-S6|>;hQ)o z*Z={LN0`HJ1S{*j4Oeg4o*emD13-m(5ciL-o3CAayLxhH>XtpD`H zJA9pgb-O=>`(@{h^?xhzE???~JN;hnYct3CA0D1lu!Fq)9=XZipZl6Vm;3jSxBt&> z^AF{oe$nOrL*yO$``i7)xLAK7PhkFM?a|hq$JG>(hs_7O8 zoik9LjnHAVwVLEW=)FPHe21aE!yohR(dp3N;V&d@itjM=x6_jqdUe1Q-%jXnXL43( z(SX^$ozUOTZjA5zvlIF|&@T`=Fz_B<%~^raz`@geyMKI1>7oI1d=Cu1+4nI#G<(oI zU;X6EO8++aUSH3_`M%HLonE9@dM++C2F&+m4aoN$P99sDJz%=;E?{iP9aH+*p#S!j z4ZP3y<=vx8Hx8cZ^9{V;cLW|kGI+92c>bvYlYP6+K!yyM>f19IoAIEjKC!)~51QpW z1f5^O{om02m4oi^eF8tc$bFjIc<}%<_z5&v0}cNB4<6_(p>)>|JCq*zqGM_3<4&cY zF>Y2ph#X-3VfT-dq0!Ez5)02<>YYWbeargyM0CF|db>iO(yyQTxznGY_Tx@Je%hZq z{rBl$?)2TKXK<(AK0S*&efH_O^w$NhP|ZmCFvk_zJ=zue_!3vB{&H8S?kZR4^Y6jW z*SkWMxvo&vWLN0$R9EP;8Lm*nt*%gLwk!1I-LBA)xvtQT`L58eB3Ee7gRaoQpeuCf zhpy1Sf9wi<@;LSMMvwBNSM@`$>W`i^7(MF@^sckeyUs-?y8u0GBzjp6IvF}z#U)vx z$?1WD$D!T3|9PkXF77h7dg;1R{+~kQpGjM3=be9@?Z1Qf*;kJ8OM5@2tv|*-IQz|6 z{@b|^y?B)WW7>U)HZQ?0IP2A^{@b|k35@a|qWybl`-9jHr#^X;|7PxMdXDn%p)YpP z7vJ|z^4+vFA6x4rUxs&-e;0jIN#88+-s{U>l*jjbeFonv>8lF*s?a;fmsfa?KcBm+ z(7hK*^L++3+$#FCf`8XfSU^R*Glx)M(N>m)_aN6vN8fFf4vs6pam9~G zM-Oh44(=ynz`?u!Fzb_o2BQz+{1HU zSufOU)s5%A{~Vr`@cQt+?!plnb4rG{Z0`H&@QPc0#lJ0@`-TQFUq{Dg?&}>l5Lj!0 zJ?`9B&(mYheIH@&`-seaZ)Wbhhq>=$=Dt(Mt$u{LFM3GKxi9tE=Dr2YeG59mm!~~( zA#>j>=Druo+_#{V{%XP8H&lz=*-M$y4#B}<*F5Lkw}82Cf!K009~#BnH;cLND4F{f z#GU(UT$yv<>(tzL?7+y}H_NhZdJ>uY##+OE?Z0I%T_eI{Z9 zO~MwM%zU_W$zE&-wf)AI)XWdm*PM}1QZtu(a>tT={l}H;KjX5JTJ}Jca~%3+7!$b8 z&X{Bj!_Q&XroP66+H(W-^O>_JFEl2kF*ltLO<6u6vYs%5^#t;7m;sN~CL8thhx0GK zA_rM>NO7kmeRPJgAs>H(TH?=V$esOsX5f2K+s&x|P|6j$=w#HND7KMKD|)TqTMz#0 z$sF+`-tTp#4Ehf5%Xxp0d^IoUl>F}k?EhRfy^Z?6V9OdydJX#lmGjS1o{jWx`TodV z=4i>-QLs5I*-PAeDYpI(JnVlom@&Ye6nqWa)Lza(%E zuHbzzwj8m496V!GN$tGk<;h9OL2TC>KhDW1Nu=zX?wwV(sJq8M<=&xXV$+!I?uFk- zuVAjrQyaj)VFkV(hx)JRHPn65pe2TJP9MsWwda$`EB8bA=!h>&12~ekX_=eLeD%zW z=9hkZT%dHq1njIg1WFUw59QRi&mMQt+vkj%%6=``M(-f=^Wc*?rrkzj(q84-$@P8w zmKPC|CcdXq?hzxQmc6hiEHV0QT{y4La(9wD_)qTt^!5pUpFNl^qCKnAJNmPY?!hNL zi9wN1S;(g==6RO~urpS0e)br#HzG?GdHeZf?N8c$q4!kZCZ6RV7j~jml#`7=6@9&7 zZ;~-A2b&X9Fd**zTnNW`m?-eBz6su8 zzN@`w`@ZWv$2a*>mw(ZCmw(L!m;beET>d@4mY$U18_IPhm$Yd|=YGC~)Kh$?rk?7% zDD^boWX`FWa_@k$o2H#pcJs81vKe9*#lBX7?MMD!z*?T%Wlc}+oAkX>-?QkWXXpn> zljrAc&%d&sS<85V=RebTLQC>*G4`+3`nizjHTpS^=cn~^faksBk@bY>M)KC$`;(VH zHEl-OdTfFDU1gUc}ePNX$|E#vtA*4Eu%HCd7Urcd=jKOB1$VV24xo3uVX9_6z=tvS0A7>=)#VX}=&nY`@^y zNT2EZBllL>FXl9oLm{zW)Z$kXWxq&O_KT3se$lX~dyd#I8e-Zn@MVl;zvzu_*gE^g z9oR4K#C~xX_KUkC_KSX&{bCCCiz(PIreL>Vtu2<_B30WhIxD+H2)jjSb^1kd>=t>x zzMMNV1|QpeL+loleScv7iru2&Li~NV@Ejmb+bu%b*wZ6+3vUd&#boRjld)S&#%?h= z+HR52*lv;6wA~_v-J$`zMFVz=hO4}@v0L1M-QrH{7I$H{$ii-sh20_xyG0gui+t=B z`PeP;v0LP0x5&e8F&VqX6zmo^VYj$h>=q&H77f@f8n9b5MB6R$wA~_4+b#06-6GFt z+AZ)yrjM{&grsbF#%>XQ#%^Ign|6zkwp*xg#irdtJ!|=+p7Tt*g?bLewp%nz9xzGl z7Qh;@TU;2&Zc$;{Ekcv&3y0kzoWESzE%JOeyG6q&Y_MXtKo*4U7SHA#C$b=x-9pO( zWw+3>;4Li+T4T2;yfz{awA~^s52EZAsmg8=oW|jqMfD@*v7yq2+r_pzIY6 zy+GM3;Nzp!3m(?8V7rzDmi@B1b&Wt{dqr3dd=q*>V|zv0>IK*-Lf9#^UJz?u5?cjko&@&BJ*V99~xzHKiDl%2vM2ShgXfQO^(6uis);E5K@4~|w27>(@|U$Y!&&Q8%< zIS|7>5qEy@P09i66YcYZ<9>e7oPFZ+sb$zLT-Yz%*fBipB`~_AcJM_dhjK0~`FP~0 z5+tgY(@UwMWBU_j{MiT>mp-JnHaQsP`l&o8#`y z^M`c$!~7v#lZN`Xjp^iHGvM34*QjIn6KDDt4LHr$)6*sRnY&Z){7&W^|EH-Z2J=|! zuEZDN<_>|4uk*ZsXV$kvzklreX|H*UQ(t{-QQFhnSEu67kov$WooBx44ulqMKP~lD z^jV2bnMyuc55Gm$*O}i}b9ZrnhBiLt?eBZO{51a>?$V||)0Vf$^E7EwvjanB@%;tb zyJVExzio`$KlD4__6eN3@MBoi-A((`{j*r-o6^zPIGb1?iMKUAA;wJVV10iIbw9-O zN?>NK9^by=)Cab&NyXPf!8!$4UwtzpbqcUr`7`h*`5`deL|$3n7q}M?v$~dh7WXy4 z_P}|k(r=l-0vz0L28IvGv$BgZOwrHTZAd@gj!!?2#Gs!v=;v3!xCXp_zk9m>&(P6L z+;=VQ>R~^dfX4^z#6C zSOh+tbYrLIeER%%nvTRbL-6r5G*O9!*khFKv6aD>vIdA48M(MupBKE1S5-uxJO^P-kFi|9jHLp&OJ({aoEA$wkn$eS?TAa9zY zo5~pSCYo*{Jlq<2^E@>281iNjcWKjqy1WtE+1jP;XeW=j&H0ph+>KSpobXtM%xNF1 z%(3pPj8&gpo`Y_bjgFMX+Rm#gMzc+HCe~GCkFf(8=uG?Xdv_>TIlj2EMpDW7msT8} z(wRtWfzA|)t21?p(wRc&Oa-%vjroKafL~vF5jxX&bf!DdnQlYwUxW-Bjm~hT=u8Fn zF-G>aYGUjwKxZoGnluZYX*6_rJ7fPWbf(*&!u+Zx~FW~uU_G5& zOrgh!1$w^xW^|^hs!hnS00I#V_})9vUfH={G%#Q)i}f4t~S zA#|p&&SUCK)M4sOp@*nrA0F;Pw06$BWKX za1-}kORq$qn1#+{(hWLO6x}qVGezj;^{LQ`rkkGQp`rM6qje@lH>S=+e?u=qH$p!T zfQLok!$~)Gdd{cMwayfhbs@pW)6j&eGl5%EXQI7RReKjbG1bzU3T~G;8R+H@PhNq} zGzFdMW=%I&h|Uy6H>S?i6x~E%jYl_HX9}S+6+8%S2&|ic|8-46yP*|4@@D4nSZdGllB&5K&zETRu(o%3kq4LVZ+I#XEQgy{x((-hsrk~h(G6XD_3 z$eZV(k;jlXi?~ah{?p}6l+M%!wByj3j*51U$ykNV36E9Coc6J*kc={2?bM9rz1|_nG>+F>}hNlv{w#2yPVt3xU(6n*O zUK4wX&l$MD~E) zix14j_|)yyF+78y`@O{QoP%v^ua4n4m;cVgrY$i&*SeAi$)2Ot#OR2fdl`8@Aa3W^ z`0Q8XSL2mCu{?X&!`2?d^E!E)J}?rqW5w{yCWc31daM|pa$cR&hLDwLgu-@r=hF7{F!_JC5hJxc>SPf0(Zt$K$RwV*0~$w8imEI|gw)1CRSS zo{M!H&z4)vIG!!HM91-DW783T4e`Z~#PPUm3vF>cRvGfotG4`kjyRrIsl)QuM=lJr zL(%(V#$WrksVen&ub3Z;Edy$?M_BEMB;cVh~u$jgFTK% zWP|dD*^(0#$77cb-=Aa3hDCGERIxmkY?%MG$Odl`m5_LMmT%T6Vh=QLt@hO*W%<2a1v zxuls`9+3@=ePg0!gH?ve274@zQ#RORc`UhbNmkp-1zG=g>I)z8tvP+6DY+mz!$Zge zSx0NFToSZ(HdMvX8qJ z(Eyh~YCA9s3*QGuJ4_uU#%^AKHy$(A_K_TH$w#r{l%=9c#G| z)V?xDJCFFf^o6e?7xM6ziKj1oQ*z;(nM<_Gg?4?xIMkHB(46ngSG8#v*fhA#uGDco zEA2Lo1ufK3i0f%&)4*P#Y#L&>5Ss@6cVU|betXKMp==vwT+g}u7iH7nJ#5n;Z%ms8 zem%;j!N0O*^*Z-f*))jjvEkrqAQO}=L(7EM95SIfTSni;wv4b$h_Yqq z*dDt~U{0@O0=5hl-($&yur1@5$^>+YHjxRjY#6a+g0%P8$M-~JLL3`L2pdKNHjD;r z7;O^YgH95{hS7ixqX8QR`;psi7_67G_CAI+&z1VVN#85={p*PLbIes@#`lO!h-JgD z%LHq_qiq=B_#UTBu*dgUHVkV&l4j>BarA>&@<7=z9QuK>VZg^t=?6{812tDUN_kLx zendyG$NGtm5H(k6Mn{Ng!#GNL(Ab92wmJf~i*TGzY}-X_c_2DbyFB=2;(U$=d0_2F z(w6c-cz=*X9*B%+ZoY7=djpV%aR(Sc(sNIfuAFq!0F}^~)kBfL8Z0^c; zHBra=oIt!!T6?^Y>+6g6QS_tZecFV6@Li2ZKM~*62>rA^-p8byKuhW7Ym4_W;j;Oz zZv4L(?<4eL#rw1cz2G|*mtG>is}XvM6<^r0c%SCwO?$l0v5hYj+Ogt&+Jbh(cQu}@ zX({crEH<@y+KGxyZIAbv88620Xk$}j`L4E!&cu3)oa=Wq@jh{MChbEVLuXR{_hFss zDB^uuM2C^MjrMpS=&82T-DMB}2TfC16 zmrZB-KN;^6r8Bhwy*PBHD0+z+_nMG5EsOVQUf#6F`yAW&!YG}o4QR)qGaVJ}v@G7I zdD=l|ijq0)@jh)kR>jhpzN&AG$R4itcpuX@X5$L6l{tN5^qD>Ob#T^!+T(rjD?K*n z_C$PlS>v#s+tVKJWBIqV$NQLZfN|Hrhy`qq_lb9=R}BBTxUqn-d}U(C0=CEdd~;`d zIo8I@bv%>RdIXzERFDUTb%*=P0EGld}qF@O~b&Z z!POq`(;n}m_bzF@?_PVnPvrcbV|A8~&6d#~?<28;@%AohkN24%dsDs|b-q^&8%Eq1 zz*shn*fOC#-shV;$HSqMw8#52ArIQ)eOf0E+T(qq&--hS|1%D?B>t~G-p6LU_!{H? z8rv?~<9%#mpT>h^e__IMw)FK~OjkDR6XO`Y!( zr8BjGym9DEMhz=bldMcCkNgHRn8k>~V44 zv$5_sv$INmacg$Tdd{zrJP(s+pes;c;^|eF$ax$|Ip%js>wHz9KIe(NYm&ES)u(-t zRiCnD{Q0lAj9FKouwvPe4l9<8bQ!fZ@2}{U>vGlZ<$k^^Y0yZIG3&D;*OHp9KV4Sy zNF;-jV|gOpbX|{vRA5{+j#pw-Ah|SF9*+VJ-sBJW22YB(90!(`sC{)H1p;I zdDj$i=4R)2p&3theahChqnTP8%@iIb%_N@LMl^#Br4h~WP0`H1=S67d<9Y8Eb0&MU zG?V!iXokHO1@iF@u%2mrpWb9y~vpUF=Wh)h>V#= zp0JGJ?5w2G(9HKDG;{i$&`cII^CxKL2y$lYRU2OEV9ZMC@x-#yO-<9!xyYO&Zevyr za&TZ5kvX1{5@gQ)XWS)qFS|;9hujf)Q&Ve{)Orl$iYaqU`Wc1HISHAQQ?e6zvkUoS z$s8#&mdr`?Md)W!M=f)Zcg@M1nzOP?20|a}IBPce`TQR(=J}BW_r3cl^l<>#pNB@| z3|dRByr<=f#QLvDG7e2Lj0r9+M-F+C*Hw5C1kW8TZ`TV1QTGJ;NI^kRt|i zWGH!rCMx-NK5|6Pfmq^pZ7rYYTJE~vwY*|lena{6zT`_q?xY8YA`?Y^$hnr2T1X2A zyS1Jc61&@I;S6Zu@(3Mt&JEOWosxIWg`9G$Ey!y9hWQ^89 z&aAM}Obd08vE&KUObi{Q^H7@(k`@_vjz=A&=5G=D`M;`zWVMhM{`{xb(?Sh-!n6=W z2YI%yO$X@_p@rjF2O0avuRs(3Av#FeU)@WOY;nKSaBBzV^c|VocVdq3Wv-uyEhMR= z>WA)FoYj{(j&_9T?}*-v{wN!I6sT*idZ+>7~lEP2L|cQj>Ogk9jm63Sds z?#X>G3H^HOnSuKGTnVQd)i z(S1Lv<{ab4I8U%{YIaGlB4f!H$e5eB-^{lMu_esr8peAy_6BvPG3PM*LgYx&-ZwPJ-Jt-8|7l_D6c;Ld%(d05?HS|pxfXC`CiEPau|0EK#$V68{}A@8T=q21 z`~1j+hvs!zK7e-J&;9;nUvRT0u+ifRY|KjV_?g2j@wz&3&T}`;U+z*X^Pkt4&s6sa zY^Zh{!(0go#I=TNbIQolS5GiX-P{vS zSoqxAt`ma?=!XTI4_!^Z1K6xY-z(%iA2)rFMt=-&rEPumzO?1vN=^-?C8q@|fl2yy zlgrpxd7)AEwyQ@FJ^oM@Fg*ZFEu!NA(D9g~q~r5!bbO72j!%w5$A{)MO~>dPv$?`_ z%(I*)uIQLpl_)yy3mx}sAswfL>9}E?MaRGrrsK{wI!=L(KbmK!6i99>9;%<{iZ>`X^MVB(x=dG zsPg+pgPndK0;Yyrf7i$!{rV};>nP^)TITM>X3^LV`+H@FRkC(ip#IGXf%+lHn@6Fg zTe;GCzJlu}=;;BjJ)V?xoxqRC#&mEx)ZHPthxw_lhd^ zsDtrhH~4V^GH_Vu?!l|)d6r+@`GnwM%6UAsTkxLy6P8z{28M`ys>dGtId+sUI5W5d z@272(Ays$!qu%l8qrdlZ+v=kxB0X_k4F^tqWVu+w|SX*vvlhbXoVQCvn}RN9PZ5=3VrI zkwd0%Ek!oYChtqwW;RjZEAjgMbo%|$R`mOD`uzs_9sYQfvHw=Cbe^x^x@q5i?>@j4 z)$iFc`aNCudso%(1yTK;uKPV*_j}iHzZb;m_X7I8pli}B`hBW@(SX~1uX$(rcK00b zUo+rlU!#8SD*Zl%e!q!+&!^w>==Xg3Js|yFK))BLeh2O*`n|xJmwqpx-wRZ~lh@ww zM?4<%j*ifLCv*odIz%G6L=t*Oa!FMhdIw{8#bBd;lh!>3pd&=|j!XFWV)Be7?-Jm%37w-mzcn9S6`m-gc!W?MLrmzuO<}NALL7eVvyd+LBe$ zHz_sPyUF{y|`vX+5ZZ#;;cu~gIYiVaX{Co)AB{L~Kcn~=vl^0MA9}H3!i> zKE;MBx=r>yw}y3_{CmDrmUYh=We1QSqT8f%9dRWpUBc3BKA#uSZN$cE*KI1%6%L`> zRAVQO(rtR8+XMooLoc3Rde)VVb(^7_>6~Gl81$kyh^)wpquW$skIr><)VhspxtI3L z!bW>2sY@`EGt4dB2HOg{O$YQP(QRCDbQ|Bg10MIfLpgzxc)Cp$I?Ya-ZgarZC78~7 zl{GdT)VfXHAyc=J*t`L*^sPUx74`jRz z^NQA=V)2TlKee1!qV=aRuTY1{E7AIs#UrNv1dq@T#UrVTN5cA3EFNjBKgHsaX#FWB zkFY-H9X~Kd7YM@*12QwHFT}1_jOu6x^t)C z9-co=^K4xTy~=u}=v<67tZ{b;zGjHtC9;Qk5A(uLk=rjbKRuyykKp0^lb64gdSb9x z>t81zGY;S1dHFe=PYiy>diD4Crw(1~Z>c8)e~bQ=nP%!=U$DO4z&iJrTK{?g{cCCy z`qz`J{mk`r34WmUug_C^#nrz?p?{si#TdS%C-ab3wEne~zW)^c>o9WnGxV>`G4!w1 z=w7dKiQe{-yL<36t$&p@g*UB(wF+-q4=X_b`UUHs3U4A?TrxImyrqLT;8?;xVZ5b- zH*__Hw{-Bv^T*x58+u!d@s_Uf)>Yw6>2G1YrE9$LkHTBmFy55@76Weu;4QBH)(CH1 z1#hwSH}F;f-U<}na+<_jBmE7$6@a&b_p)1#H|0Omd6DTqGep}GlkuOyu58hXsIYxiBb*W@JxHhPKaF+9eE ziU&OH+y3jJ!Kukgw`Y$)}f1o*+TZZ|fp17{c;4#P9o?{h6Z$Q%$CdQs zeE4y2sxe^&_u3R=g81}2%sTqTT($Je3}oCs%1YsVKkyu&9S70l%9&?lmkAl$Gg8Zu z%LiOZ!M9y0!F0+ITam1@F2<+lC3mv&<;g&A`yTBO{4HRu--027XMrI($%J7m`v!+$ zVC`1c_xAyZtnsJto~qaQ$8)!@@xP?k_{%#{PRup_6KrezbMzYjd97OGFOIXuui&R& zr4P5#rvksUuY@sTFR)(>?8(3@{kYh5{|k@sJWkr7`Z5unxcj=QpUfZP`O*9#Zm-9m z`A~v?a(9>C(>cNKestuJbox-nJn<{oL_bR34y3;q)8FDJwTZdA<;OLxTf}yq1&tj^ z#*eG0X`hPo-)(NK$mHoir#8*gztucFCN09#*W$Z09>1l)1s9fNO&%M?(^p)hcsk_e zj9iPSvvyt=lczs}r@zoVy&s-FsCc@|x|?fVOAo;-2jS`cF?m{iQF~m@wI{hzl<g%1@&>j-N&xz7CauGsV}yUJKkNU(b7?K;#pbgRcwV>jJko2fiK!UuVJBqlB*u zTEo{RpWG1kjc6%f=WJ_+ue+Okoqq5J({DhH)$Vt8`Mo98=ycXt{fiH?OUho(D)|lk zBjfE@{OH;+HRVmf|5-yKu(#dibsf9(+1U?0byJ}>v0 zeQ#W~VFf;E`(8`O&usBB$~qta*I64F*Dhy#lQB|!VPA1~tKG+aAbzAZw;CJdp9AN* zOZIhnWZA%OPcEzZb%&Cg9JlGKhP{aKc$UB?SIux_3x1sy-3mt}C#+a@dUvzzQtCKx zuBT*wuB&AKNTYsFr@)du0r!%9XBZ_r&|!BmXAj^H=}k-R>UU+$%J0DV#8^A+ndQq~ zLH<^bMsMg=K4LKAR4%%6ExxiM?+1pmek?v|(~;{&LPBco1vw>Z?4>a-)P=^1HSw&e&N%{mV7ZWP+tdMTD+3nC&H7L;v2a5gvHDDp-(NwUvvdL zbuHu4^Bq?#d&S*d@nf#1TkS{iCHlvpeek9HbMOLpNlMp8mz@q@?t8gI$v*gUF+QaG z;7j3KtFD24bFUG3a5MBfkP99S*?IIA)N>j2?T1GXz@rCR$)iH^b{-X;h~iOX_H<~= zNbrtRJSyX$okw|(@F+SXW1*Y#vRrRY8s~Bsj>t&p36JJmJQ{*WLhxuPCXX@?HF>mG zm`5%6EFM+xSv(3{ibrK!3G?W@7Z&qg0NqFPD071axeZc(o{=Ry8iGd~@)NR!M?>&v zLrfl}&rKffRr{5A6qp9-aa`bw_*%lFwBzV_RL1anJ%+c9ucgJKCBJPwkIw#c%Xl>X zH%;?sqw$mf!#pbE=l`~1{QPp_*E4>)+sDuL@zd!We~iY@pS7Mh7yqecym{vTG|iih z#!vna^QMfSueD(OtcvjDF&{s7Pi!AQ(ZSotPcsfKI)3FCj-Q3C=h3I$#>dbjK89}A z={>C1C$Mhcf%W^2to3&)*}*#hN31nl>ojlR!?G10mgf=z8y2Uec3r{ztFklm1MIB- zy(YNKkG)j<0G{QWtk31t&wuw9`0Xub?sX>XEeDg0`rDY#T)}lA?-i_ZcVzwLL9QS3 z?GxrW75J{4-nnydA8Y;M3nS}u2LCQ~rw7*<9fL<$lPP9yw~uxHmzdui#^>cd;uPQH zxp?|rWecX=RhHJ#c(Did?_+&k=1=Dtor9nLBT%vdop~R1?qiMUI_l_?)+6{OYcvb> z8qKG)^$ToO`-n9XADO3_U&$KH^K+(`#q*Py>q*Ck+9kM{wl83wbvk8UjjvNYUzyeT z$t+^6CYyQW!Y;-T)?1X%%n{aX7O>XzD(f!$u%&&9&G9hv-BtMSH1e5wc;pZ%N6L7a zHS(&ito>l~Sd2g5d+5_L2YrEZEPM=7>uRIH>qX%ALhw8aeCObok&R!5=?~hO{>lSi zGwH8iGEW@OU3`;v&|j8+(p36fY!1V`$w9#lZC)a05YKjF`()j01-OwI&Zkm32Y)gz zY58P)kysNLvJXEcS#K$tXDpwLFU2{AC-}JA6O^)xz~42UJ;8d){VjOhJbg~t4zAyU z7xABI02g0M+#0r6!HKM!{Q*D7cjnFr<7CZ%Z{tHV6d#&&{Ao_}eSq)Mli+1CekpeiE6}SlzDYG;j!53YVbw@JXVm+JP;l$P&~#uSra_gXnk$b!y^l%94SNd zSiwt_(Iz}bfBh1^8P8q(&=ik>AMr(-N}nqp>ulpO=BbT%tc&I`{LbL9f+!wCo;KpK zbj@Sn5gu!R#~Pa8u>yE31doMr;ymZH5s!5f9=i!1o6^Wn4IXQN#|q%F2E}7~jXDmG zh2Sy%kM?zg#|q%F5Ioi(vaS)2<;XbZL9Qhr-#Q@YIwJ2nF^+k|K5N!Ewv}=04aYdP zG97yy<;E2M@K8XcG{Z8e>3K#EuVq^*9?~toPqDc26~62r@qSt7l;BIeAI8__aq#&B`4f@3tcxhW(8>5G%)m!#Df0g%_ld!g zhPSqYH9A?dtVQnZ^JJ`B=<)_HMc$?`{vE(Jd^tYb2aw^#({3#jUS7ccBi0P}G1eSl ztjS{BJc%}6dS8+nH$S4SzvaJ=ItA)~CwJm{FU9|^4EesBwOcp;UY>SRa0veLRVk*Q z!a)b^devMWMbOuU(Ag-)&zzDY*wG}OLdMU_p%vlfnck$}{#T5W zR81d(^UG7xmdluW$dkS`3*W+$?v~fQE#+BgvJKXoPURcU^S-1N~N=mQ+z2r;A z<5cpbV3T%(_skguWjS0jR`0;qq*9O5HRg z-0{b0aDK{+A!XTIJ;C`0jMGnY`8D4E7kqt$Z;h;#iEmaF^qk51!c*ABo#XYZ=ufAN zGRjuzScPorUkT1jWvp(A9MNO-R>tZ#9AkB}as;^^mLrUhN{%oNq`3;O?7}tcqx(!b zl4-nCWtSuA$Ps8|H2>mLy)}*hlpMh~PRS8`X_OpEM~*$*` zj%fN2oGUrPdsvR7BS(1O1nf$V^hJ)~Zxfayq=)55m==&D(2J5I&_t`{2<0d_(nZOU zf<|%#+K4Mhx;W$rc5^L98jvFmG2}=Aa-;z{62`q#7ilC%x``Z#ql@;5S1Ub%`UJyR z8k(C`a-_&mW55|5n{wa4U)B3N9v_zfe-5H&heQM!0H)&G#qr0Nhs!02y$}ICiM_Tr2h1)(M zP4X?TcH|@NBb{%lBQ3js;kMnRh2}EP+@jmsM86=zACKynCjR|(EB;;EihqCBihqC9 z%)f%~=5Q^2x=3)6<6mE#vtoT1&(KU}M&Y)f>VE%;;F8aAHf_Oxl80;G{YDEn2-wXf6h=x(60+yNUXQR;NfCY_vLww23-xxg%{eY2VXr zs3dQ12Q6m~Lf_Kq|8S&jCT)x^ce^7kb8z9dES;}R_mqU-1L5(N9)DdG_BFx(v%pwEj7voi8=r&!RVjtrPSmh&6nMa+^ z_C*B`I;h8G%8}?g8mOZIoFE$l^*@SJM^$>^HXH@PU7&uoqmG4L@NFh7G&gP?QSI0! zeHWu03%eC=+etaap4_?&O~=-MRiyn(*Wb&LmfgK@+j~0SUntw&{#B&?N#}dpk>)<3 zaNFyWkG@?=or@jiP9nWrr&rQ$;XixXn@L}<(?<#Y*!q3aiG|yKC25p9!jZO_G!~>) zU!LPg%j{9O?I~U6#g2a7OxlyW%p6BrX3xTHKhb3lccd*O?NQQNil5E#@YAbs+kLwJ z4UWF7BJECH|8)Y4k<0qfPEJn2YIr|KmuTL|R9kuhapz`^>^^ zM=H!deAqS};Wyd(0xIxVoF1|O{I4#s0%7qG-;2&2)3(9H1KduhVm$TCGPxM%z6W=GHe^&H1HVFUp zm1oA9*FJVFEo8p~OJ;r%I`X(YSN0BUSap^0&JJ*VKK~YPnYf;~x5q2cL#t&hXKWVv zD1Kv6^y1LnL>I!RcBx?)-;UDp9B@jVRW9mbe3a*1Jj)m+&(-owz4Bbkb2aNV6~N%V z&%3-@>&)_9+9Ut$=Xo#n)&L`PThE?&>!i&WV*?TYZ123pLq!a!&i*@uh#YVQF!;Q7x)#u2<=d= zw7DN?71H;f+`30JY-c%O+t^^j;j+U4U5Q>-rTWG}J0eGDqx741XkdepXmpK|G4?c9 zpGcY=cU%1HMK=}tyd9jC3vF-7wsmohGj`hVX@;Jy?U*{0bSlIaLAmB=h;$M zw+Nr!rR#o}y5U(R^Oi`x@bP{2db>fRVfwVqVPoLp2fF=NNWDTAnm?|Wx-=~)TtmAv z9BsZqxA|s!-Oy#EZkzs{Bl8IMLq_Mf<`Juke09@xyN62sIllF`uqIL6k2yuZzy{&d z^EDioQg^XU&aWz(Sob&8_KEAe!pnuEvG>jf_Bz?%fj`#fOk6L|75>16YXv^dd%`!O zTT6aZ_K(6AuIC}bzgk!Do?y(XCWZ=`7~#|C{tM4j&ZiAB4>1H*nMd$^kFL`fft&wx znb!pBUj^<8_PZHw>o@Ririby?eBbrfxVuWqq0dB?T_?|iH`@0-4MXTq9bX{87C*R-vIv?({D0{hUG5sM$0>Uf5pb>r=JKdPpm6b7QT|4P#H%=8YVOPSBfw_@{Kqp>CitfF_^ z0S#1>*I*q3ylymgiNHo=!$xC3hEMAj8>7apIA!HW$_hc3AzfAon@q?UkZ+Y0iYm*_ ztMs8|w-`rRYoRFxS2ts$jIG4Rt8rF+?*M%Gr$DD0Wt_FX$veEe5&qsNI+^6J?55kI z-t~9#SN5=d?_khIJ1^U0OjZQ{VH%ACci#xyA^I~UaDN0|L_g3lh78vHrGIR2tNyB> zpWw5QhC2if%ziWBHotcu?lRf-y@Nr2+Tf0Zo6pgi?06RZTDUfP5_7_uWfWfGlv5ok zN5L$(weW28#4nyTi>PvnME00_>lbVM%6Re~$n&dDk?g{^woM5A=e}+9>g| zZ{gb%x1MBMJv_sMiid<>Ta3 zJS0y)@(vDcTi-TxFYNbMq{rkUH+W|6z#R7yJDzWd;5k%WbaI2>d0;f2O@8n@ z_h^Z6CrTT{}Uts@~r;trvK#~I^aKes2e=g zH{Vw(_>EP5nyq}EktvEdWpBZlb-?SI<{E_W!KeBkngAx+O&u#ezz&ZT7xih7GQ#hk zJ`EbLp^E;rq3DK&mHcnuqq5R-L&GZm&G1eFugHyll-)lNTFF0>uJIaL#edd6;4LKe zXuO8h9l2rUfmR~_v)^0P|4N>W1+S*x0qZK@Rj(cCF;2#f-RMhpd1A>DHEuvF=6lOz z%Da)W8jl;mr^||#D{o}!8aJ%(iVtk^Hx69OB5;Mr zg{jeSwQgLHeu*_MSl<;MZE(fFan!_d^LU&TDND6aja?F( z+!LDB{GiK<#$$}};qpjdZ7eP_$A&)9eP!Yhd1xC$H^MtyB1g$naxGb}#uCrOG9}w3zv@@U z8R`vx)BR@hkJ%@t&f<{uIU?)5%n>89zKZ#P<~vhn!*{=A9$@3UrsaGQavnJsmh(JE z$$8$RcQI3+`(7h@5 zZSO@Q_hlTQERpR+$ac!LJ5L>{iJckSTV6d;|RVQ6ZRL2C%5kb zPnO)4y*O5)H!1mwf0f}fHj1x?l`iuE(Mu%VXXu36J4Sf+M zYjocz-iAM=JgbjnULo)94qDe@tWfe)e-Hns^M(Hty-oB;bWa5z_&|R!pPl1Oj%`kF z)2s0=4D+GTuB{&w4x}HHK4A8P)(wo1tsme4=#YMRh539V{*5N$Ddl^bhbS zI+ncCKKAcIe_?Er`3>?c`ahj7{NDinlQ9F`Nx{mTLi8#1tj0B)4Z%LHVV@J5>?;T9 z18fp%?uZ;clB{e!=J56h>9$FeHNA(Hi$Xa)Zxq)h*#e;F@UmBj}k#fMT z=-I#qZCJQga}D5PUbnG|%aYj^oJTqt8=~e^F<@O7sYAi4>o9dt8_Y6yqz)4w^t06l z>cBQ_(-(@OZ6TG|_oq>Z$&<)}^1eR3&ag4cCK4mx^^trbqdd>b2VdKKl)Rl_By_kMmLW z+vc0HpJ%f$Ko8;kLKDt$U&d+1bhU31Z5R0^x`5b>OdUt&Z@G0MQy5FiGJ0mJcQ@}s zN0KJ;AJ~rC;PsEYtL`QPqP!5SnY}HIX^QZZYSx zY{NSbgn3QL7aM-e@t(O^xP8b4`xvhKCORLo!WzrN`S|7>&r>3}iOw&wN9-%euyB5< z*EY7NMeq`x*Qy)Y6V5Aj^Bz5)i|8r~ESxa*E1byKUM_Plg%jpkjPE@sSvXOAr*RT` zinQ#WlP#Qtvb~eR$s}-s9R>NR=F7|jEgn@kVf+uxWxv}k*1WqhpUwv-5k5uUnQMm4 z^69KdKKPXJ*UT5qr!i#DJtg^(` z<4R{wJal?hheu>1FzJ7U_l@(g3E9(~x@=p%ALeV1 z&*W>qNAWf9arv6GCi$8&WuBmM7!tdVE1f;im@}w4OdKj(mi!}nk#QdSlRaJOK{oqa z3_YldG5x*>9ubTs*|kK~VnLDPx(O|7RnY{zln867Dv z439-~G3N}?F2HB?=T-trVQaDuW`@Mwa-#CEyU36ziZ~H z%d~udka?%ca}n#%JP+cTv84XIz0rOx-cQW+@Rdaq*H_IZwiUmz9RB5uALTdrdI#fq zZ&t@8-V+joCH&*Xe^Ay?rEjtEt!MsIUq!rGOrHY%pYjQ^`~BoZ)~Or$3pw;5S*suF zj`)`iod zFQZ`zw@<^O=1;nwkPVhb|5^XE1eWXKz_J)v`o`!Nkt1H?`6~x>FgD0u5RLjn#w^lW zQuhUM>Mn@J{YKTEme61v+-Jn8=c?#7hWpWMARZ!c4P6g@&UE+v)D^?e}-f)I17LF?=5N9n{n#7K|{7SM}2Qen|~OmzD?0>jw;vAFSa&E{iEC5BA%HU2ZrM4 zHb?31wl+t7Z%Lc4j8oqt>MM?eXN7w$JHvE^-XrJM#G;Gv{}yd39jSTV8XO0<8>9Oo zs;_N*5%s+#eUTQYzO3lJh$>gNjc?2$t@#YPq^&RF{IBOePMd&D=P`~`-@Ik4)3nAn zkGWF)ek~702N7M6H7KQTiA_P$7mM#AItuoHXdTwB&uc#jyRV<+Hy_K_uar8Q^7UII z=}q|hNzAC%;p->9&T)PHiW=Jlr9G9{^Jph=H#WPwyA!w2I`3xEJ|<1dea?}V zNvzjColnZ$<49jf`c9o5{9AOnnZ$YhOP9OIk+zVu_ehJH?={hPFVW{web>al>ss;e zidOvFQv7WZ9L2z2Rd(UF|Iz(%kbms>%g!m>_9LCP#F4g&v><7M+fk1G&mL8{ZIRBG z?nqlj+B}`_6i5GOUs$;9E}idWN7^dVZY3=WH!)~cY#LVVjGEg)=R3l5ZnKBj^(JlO zl=#>k%uA$A7ufnMUt-}ky=N1%dzrw<+~wQOJ|XQQX`3gvZmJ{AO+4>N-L^bO+9cA> z)AmcO<&vTBnOyc~$+-COA8b{hf(mo?i;Q6^Dt%|gR zq(zODad0m%S$H>jqj{W5o>v5B9ZMX>H?%Z~Sj=}c%>U*e{FuTq(GsWmhQLf)YaMA4 zr@2Mv!0F;+Gf&9b)7dm(j>|0Nad1=R?*IX3?X&ClXjyaSujPHk@y-i(D~_gRJ8uF-A3*MY}Lq+KCt_$}P- zNZU->#nLa>kIrzUWe#IMN=XCv0~~1!NgJ-yE^wq(k#@G!=OLDyI!hht3(qG0SJLU1 z4Gx;hJg0EmX*%zRjB9KkW>i(b{-m@MUfDE*RS z?!l37jW5)>`GUf2FR8ZY*3H!YZT&ZCc;U8R=(MYK`>Ztgh{A2psP@@-$^o1BY_wMI zyI0}f)ceA4QqJc8V*IB*rJwPSU2n)7$@s6~OqVv;bi&P~&C~hLainDi82@#?lcjz3 ze5Bo~^PT8O%gid=b_;1yxpEW${lM0ig#!w=CFs1*I?}303;o$_=W0hUeVZ8J{`_!QG)(ii#x8ju*>=P(< zX0f@8FN4hateC>5JQFD|KzW=^!vE%aK%Dhdfuo2xZBtiN^G4)_X{VQYBz;rLTrX#Q`5Wi?z>*zJu3UTl=qA?KwSzHhXL!uA`DeDE-g{!uM53*3p$Vxw za183cHU$_@jlh7WzI!FrkvR-sAh+Z)>o)-58JO#kh*ik{4P zdrQ9-I^6|*?uG{UK%eNN_5TfwN0{4GBXfjCzm)yONK-yEz?RQ-wq7%l^~G2;x(nLe z4Q=kB3{%gx`7a*@OrtG&w88aP8(aYmSK8MMSB6Do(9gsmu-a&swnBIQn`T*g>r*dAn94Kgfx zjEybJS_@~_7<4E5d0PD_bSJR>{R@Ze_y%Cz1Kl}k@g5tjLW=_HFOLIQ%YfBMpO@KS z75Wrd7qu0vIg!}tXBlJHp%0coGi#w8r5DDa*{3}x*F96zr>?f2QNI@*u?8BhhK3&j z_9Oind!aoUdpYD&_EoH};$3KW6W4bIZpLZxtyE)g40?Flb0g*7P`9ri>sIKBHRKl> zz7#$2k`6}w*hEWTw8am%VLPs;9bMExg<6^xEna zyi1)UTT^F|^ljsPo}703YaBS;`(ZRrUFa|w_IkI(w%Iqb*SE0#^J3umk2V+t#{z?K z3}NUI1LtdPFbK{Ch7ap)wB5%2a2R|m-nY@fgEkn11_XxxJ%%v+1sLr7J=IpfLH$|O z|MO#5|4Y>GEb5&zp@5LyrzZa9W8%#J||2{ssn76gV1zA6kh zKMki`xY9ujJ3ok)3k#^fx4nLwthcY_H7OUGsQ=qBXkm*D2B8Ik;qy8hPqr}(U1HF} zDjN(!3j)L6jv)*O!Mjr~EU>{Kv>-67KN=X0!q)R9@YrRnvyu&e}@pV(n>$Vsu0 zwzd7~8DMhCjq_}939SfRw|>oVEdVa3Ea_^4OXx@78v8ZFb$tw)+V`&re+x|sT>ZWh zT#fgs6JHhCbJ)@kOP~#j3ncEYz5;)MsP+0BGp^oO=ar>!FG30>|2N1B`SQkK}teb!O#B+?(&>1VzjU9OumQx@uS2RhOw zkv5mKs6KDPXXh*VTDPTt5BM1-_(4yq;QX90exQYH&SSYq`oe?%ui(e#6SIo6k|*y_~v)kd4KIln?za%UFUO-H1X;G@(&LGo)+Myk*}zOPFm`7 z=cZpRe>pqeS!ajFl{-1=; z@Gq!O@jw6A`F}HM&uBQ$a`GrX!^Jw^!;UoZC;lIuFCgth)>*P=68^$J()rGJq-`cG zNLowzw~^1C1BZ6s#NRso^P2cqVppSLFyhdY^qKM{hCdQj9vjYbA~D2r*34QJGwyBj z3>5XxrWX8@mDqxETJTR+QVYsy!9Q8aEhwi2|73M;K{+k>Co3ho9FGUPK{D&->?Nu7 z^UKi3=JRdxj7?U)&z5Iwv)%t5y&r*rzd-Sp8`sYe zzap{QVq0Yo$GVkUZdkvn=!W%Ad2V3+|9aNxudmyE25Sg|i9zchsQ;*6pne~=*k@T| zC}E93?6KoqM*U?SjQUFxvCF1lm+fNNWiMeJ-(#M^CbX;dkVbnE*wTy>Z2Q{VzMFd+ z^o*R9;7sdqa?CU%C3bm67u$D_*nlEu&Idw0|FH`yPW9pZjMtEf#}kixyYQv!=yo)OV8>pOt4#iz2Uz zJti%_puU^*C;CmX$9#T|XNwm9CeNA{Wj}w57T=O*O^bh)XJ~O2F;j)aA4~s;Z_snB zcMC1PBR(u&2Q9|vuRKS8O#oJ_zpjyI-CuHUN%0o5zvO%ztG_0zf6V?8-}~YsvyY~! z@8NzaIU%`fE!^&X7NeGvj-)hh9hI zoe#YEIOF8xx~|f1^vx@*1F<($T}NOp&JlSwu}*vzRX^~YqQ3W5-@C}OhiB%vC#ZjV zA?I$a>#4r;%>TXB_mkA~aP{4M9;v?fRR4EX-_7T<)b}3h`#I`+kGl7X0V-B>HW7Fy z0`HA={iW}6M8>hNJoC35{aj0S(8uEA#Xj+z9dg6^zVK{u(TR2P{9n??;DfVY;OFb> zR_0vK8te7zpDMbpZnft+)>yw=_jJ*dHPR< z{H;~rP5jB3NySAb&fZkt&F4RSKIoJEaio1YzV-5~V&mZ>dA^eGBLC$1YI$ZY zRi3YrXV#D8`CfU}W05+ODcPt$nSRRC@^lA20i5BmewDNvT2Q_^(0wK2dlhTBmJjAG z=;dioF6*n-IYoAVfDZ8c3Gn-g@Oy_azxR-K0ITr3&_pt@C|SsJnmnuVVq#ridDe8( zPklFO=rr}+q>s_+yZL;v`hHSfE%7piHhz6y+Oj3WtCg(x?byQJNwmK}@XZ`l(q*rZ zVh{Aia{=vEV{-oh{)x1oHggsMynlV&Q|L0Q;nOwn?$hw@Gw|)R^i2tTDm;1#JUSL0 zHEprqg(t6uCp&1KjNK>O(5viy@|w`+7E}JcA3>=zc<&A`zz;bQUYOv(`xxM} z@P4U0YrKmOq=ol9_1)x!$?Cg_>qY9j`TU^zep20laJ$U0YnlV^JBr`~+W##6Hxm0L zw12w|=dVfo=`ZD90sXIp{u#I6fotnlL;q`_e>HB|=s(i_tD*e~oTXvWeiP%r^aJuh zjsNszM}c3)f1Z<6TSWI^{8!(5tM6Up*&6@VKeQb$M`S(XpR4h_ssEQp7djr2pAFF$o}itr*^|V+hsbv1ukc!|Jw!zR zZ)y(_v9~m}hsZ`rckCe|FIqx&ywfhi)Z2Sb?|x#Jik`vxH4DIQT})6 za1sBzr=el-WqJ<2eHJ;r&eI#+tykSz+;rNztz8k(Z($2B0hE^xb7lW)8Dn z^hsIIo1oK3Zles5y_i#r~tlnWP z8Gx>6+5mFbmr;JjRP)TnSEMfX7+MQm*9>Ogu|(DgE->oX!tXWx_4~O-z3io<)|`k- z&mb;+gOtI4N1$uxziW{V;gui{RL

Oc7gZOFH%^FT!Ag>hy()7JLg>xyyC-Im7dYId2`S8x(X zW}QS@Q!=ZIq&KneQKFIyqPSj~_E%#)9KJ>r!_j9-8p4dpD0X2u0R2yC-ui)j|#}Qt}gO^(zc*$-8FEZy9oV7Jx#%a8~z}>>jOH!9z zPw3*{7kStGl4rxqFQp78zvzE0ep$<2Di*&;UcrmldyW@=*$ds+bvHQ=J|3^^(rImt zlNvQ2$z6Y$4JYHBIBB8oCUnyXCz2QZSvbkD;luzR3%KOWzT*Wa-v=kovE}Y2@G}1x z;iX99We<0YSN2L>c3x@W*s@c~aPo>{Z21>^lUTeG(0FkjM|kmr7w6a_bM<)qa*|GK zYkoPIa%Ie4AbqOmI$|SfDPH>0x7OHlzm(AoUhcNxMe+*2ESG%8$(X+Zes+#6&oW<+ zhnHXLw6?~}%akj45!;M~7qQ1j;iZ|eWr6G=#T-;@J&o|<7+bp7@RFzTqGEQB6TDmn zUhHGbMNQyj+%dw5#7zoLe#70u$p)#*F2kA`TP&Oi-8909V{Cbj{g*5mW`L7?{2%`; z`HmBu?1yHYV@n0`S@C$KTBo%&uk52-!OM6XUaoTDrJ1qC!pmi`@ZuO-)PA0}d5hp> z`f-Gphro+-Y?;#pUKSoBygZ=svX{HXFCR%=c7ACBFKT?yGHj2O(ahLV!5(N9zerxe zOTux4mrU^D99z0ef5fqG_R(o=%`bf^SNKK6v+6PbL8;4*mllpK3&__9FOIQgjtws| zwg_H+F8RKq94p0U_8fMsXR&Xs!xmP8?Q5;9D>P$wF2(Nr9Cqhtu{*DWk4rq*o>@Qt zE%Nr2oQUnYl=v>e%@}NSPTTWKIxQ3h!G?+w%s>72KRG{gZ3jo&{eDHy&)yHe2&rY}?A7C*#Ih5!05st=d9KFch!qLl8m++5;qwtua`(55O zjsoN>KImZY`_iG$gakuzr zm(*qFqwrXw`AFV1AN@b}zCJ#x>dgO6hL}kZc@vShKt$wCMT>}*S|+Ay1ugPs2mu1J zTU54E*WJ37x`I>J7W$S->u+_pCV-L&FY2OoqEf)LwZ&Ei+uGW-CV)5zYIS{^>5|Rw z`#txZJLlfH^Onp^Q2Ap%bMCq4o_n6x^PJ~A=ebKY8i{kTPC1fol^p#Mc|?`2BYn8f zc8u>n4&`VtXr#|YCB#dDxoCjAmu(q34gFGvNPk5io^!R)$6B-4=NGjPs`T8g?88YP zId3WYd{v{50s54|PT0Wbjzju940(6XMfEtFmWW0{c`w^E+Kzrnqy8F=PIb~K^<4BK z{RF4D(a13u6=^i`OBzi)PHA*GXylxWE=ocpe~xJM1xcd@{3|)y%6I8{E(wh|pFoZT zjUHqlPC0VW=qE44^cbXeJ=yPr~a?C|jG#V|HG^*+jjlA*kfqKq9J-6f<;JkAZ))rpG(;%MU7Kzg{k2J5Wrb%y{u zwGm=I7`wq3@^)P7u^Wu>P_Y|s_f_l$$85!J$T$i1&74Rgc0k4A6}!QATCp2?zgTC9*bUh)&j&HK17ls!_z$idJF#BeBVu&Yr}IgmGv}zVM(fCj zrfj*<+Q@*`|AGBri`LXX8m<3TqqSesdL#Nyo7Nfd@^2wW)bTouyOY59th|>FKl7YP zA{Z~zV5E*EKi`le7&ib$>PQ{Ne@g=6_cDNSf(|2flt#ysH5jR*2;+H~z*rHB^9q8G z8^H64^4_Z0t~SVa7_wann1zmlu3;SD3<=X&)I-o)Dh7}`YL2`&Qr@FZW6bF$_+bu1 z=5!tPHueC;8Xe;iF?<@lFXB9_uA@AdH{VC!if=_s5MU6#5XdUOKf^dYQ&+j?MavZK zA%NSGSqXdZB(M+60CvV0Sg<=}wpN3kGE3MW&ok_=fZr@xmazZk15;nQ(fxPwUOIID zY7*GzXs}b33H#Ub4Ez0n-I8$$`*)MT{-X?FKVOI4A>#uz*eTSe7QZ{}k>CHuF6-rhJBq&ZDeI+x+bQe)lE8j?2CzS-!|ssvA8W8v)(QKQ zd4~Np@SRiE_v5?mTtB!#$54=c5%4v0$zR&z8@v=Lf&JHv6J`yOX9_i_nwsZgkDO)d)GSgl7japYk1Ll z@7k{NUKjB54d7>~#E+PdfTLM1ymLbm-nm)cONV#*=s1FoO2s?v$WNo>Q}NCzdE%WZ zzzubl@|BE}aE^D8pY!CsGvvKw^79+)vFbWXoS&8YXom(b*Eg-uN8GE}kNy+sBk`Rw z=%XX(!wVgk4Y~OcyearWgFpN~rtG-E|Bk$u4*cKI;ir8<-=u{9CJlblTj8KK&+z{g z@Q=g$5$|i!zaa_yk7NMyyC$)ePW2S%;r?ibnsp zk&{cwJN1&HfB){lpToF>vwl`71KlCDAzz!<6}Xzy}C!Z5A+@Ofp*E_M($$XG%aqV9`kvS&ykL>ja1yo!KtP{ zcQfK)dMa+@=a47ru?B6w`={@kdd!VRKa=;eO`~VfFKKj^Mx*gg8c`SOG~)GSGq#7i za4mB`f<~j=Xe8UJ{nX(ajrc5S|CV#B%heyq9e`dI$Yd zj^=4Js&vwbbBZoUyq0pb)TGf5C`Ys1Xe8SzIhvu-h|iKnH+6?b$3a zvlnQVD)%LQD?i@}8w)(t(sxZ$8Dp%!CG!dQU31{R|H3`s;VHDS<^IIIdvK4>GY?Ad z$L#kD`XT?Py#G&++wX0}y>H5Xzv8%8fIP*wYyIBq==VC@|7UrBc*x!_a~R(w`yJ%C zcOCAnz&+df?IgH6p7IHgB7FvfK7%#-fYz5HNAhQg3vW$iF6jfht9Bc4Zz6F4dA-VU zuVB!c182(Tn78OZ9QQZk{&3z0Z5xPxtzYIa9weXrKgT`hFg``T^CQPS<}fbO-dX0j ze;w|3K5D-6p(pI`EI^*(2=4*T2ORgV!@YNLk8u7!$GvB8uO0VndahZ^Pk`8P=EgV( zTq-_h%t5Mr!d;QEhXr2ZW$aGmJl@OkLxv8bjV@ycaqmgO4LV#-d_ks_oZdNX&4Hcr zx&Lt7JBWMR>VmRtw z%iQ#s`y6@anfu`6V29Uh<;T4nd6@P5xLD^{`Ei+3N9EXLE?bpjb1usP=98+4RI<$6 zQjouDQO{gjHIXGOdzojdCbCS_Glvv%kD&~ovyiE~Se}G3+B27q%Ds6T%VW)Ykxv&s z_bY#{^3a(+{VTCo$-HB?f@ioF&o~-euH1@6A(bna`ETBs?2rC+67uCvM84dy$d?Nr zlAbR&c`nGSf}It4%9&d{EN0t~Z=ru^kND09Ewh|Ycbt|_ccPY0_uMq{>5BGJH}(O& z+A&7jTC@R=VlRX=opF2b`;iZ4J@-)z!?)h1Yc<%6F`BKV*N@lh<9YXwzqIr2zk?T4 zepu>h#k*#nU6Wr$o?Xei4QwNMm-%tcoNzS}GtaKcyJntUlXqW28^ya;o?XBhWc@^w zU-z*rc~|Axy|3BMyCU}hcvs}s%`5N5X0<^S8z19_EyZxM12 zBIoYvVaPLX&%1j8aS42>yt^MzM+w|4i9}fr5I0LA$3#8y?xAb|K9P41SP-fm0mAAD})SG$t&Jy)zdAz7UE%MUk{yb=HR=4cn6Ib?`X@x+q^Jj=HO)x zzH5e^Y9@D?+)bP-Hsf*+mMq_&%=9-$B515pBNDvZU!fqTZyb$muI-`tPD1xfIdGJM@79^7CC>A z7kRA;{+y^c%Zo+5iT|aden{jT;B$>8 zBO-?;o@+g1)SgW_2rP*#lV^@^#<#Zo9`4m^xIW~qJp|ue17det;OFLZUjW`)@IO{O z54xiLKN08he5=Tb+sr)H)sP|N`G?)|5M+nvC$|TxkOwiA8`pq;iTQD_hU{Dg*_jF1 zxe~I&{XF2WmTUWCtDb4t!&u-zVn4vwJPtpAKL4)u#J)}BWxi459$q~ddM}o9^&{A2 zI(-cX)Eb}4Y`VitauK*1gH^BSv3R;`EXPykPPdW*48(pA5BK&u(t_1F{g}#!x z!;|QjEySOiGXhH@*JDgAS709zdjId$_^yC&&hV{-KWm<@v#Y>I$ZdHl>rDMk8)r#m z32{Wdgz_?$D}Za1*`Lr$DBr-c)Jx3IEOH#=vBHnkgynnH5 ze~G-lL|&K6>vDO0nY_MCUSBD%uawtU%j>J<^=x@PTVBtX*Yo9dmAtN!*Nf%#Vnf?U zV60vV@*o$~#(mFS&qdK(8rtkF#r!`4Hnf=oc`N48M(B{XiRgc<5gmf{5OW1{@165& zJ!Jf|m=FB0S*CEmWwaTy_#pHz*H2u-F)uG-B}1Ek7EGknh90n1h+$&U_H>dML06_Dte;or8CsjdxANyC&dW%(MK}Hu?o;Aa`+rY5zlR z;p^;L?qWQv>`WDN`Bmg@<(@KPJ*}9_TTquc<}&7&^m%%@>`7&h&JVy2b<%kcY<4G| zC+3jON6Sn)KZ^G%I`8JXA3)D_T)}pzI%p=M}DJ7;qfau zz~dD;#N+>h&z$@?+y#$!=MayRMw@u-qv26}n<&ftSe-*W23_#D54M+6uBYS>k9A{B zJU)f@Dt`Pm?Y}JJ@uW9%C)brOc>EU^JRaJeJGm|&XX5b&4Uf0x0FOg*h{r+~Jo4K> zPJXP-As!D&JPy|II3@>pJST^E+zEMg>PPxAoOqm`Lp}vYq;0F}>98QPr%e{y? z*t{4g&Po^;A|Ai?a+JBgHqRO_jxaacgRr%k_w5aBEbNOp;3mKZ9tRuvam0>wtk%BQ z*{sDUG>;6m_J)74xhB+L7*n{9{`|>!f06q)U!KLiWZzHN&HG8dpYR0lJHDUrU#v^? z{e%kLMotjB#Wol(*Kft1SezEuc4jUE^}Uho@zryXJ11Ygi8a5IuPSrMS4SjY(Pydn z>L|)OU->n@x)XMe;;TlK6<_h2dR^hG#ZJD;qTJr%f?t0B%ZcC4UAdFnJEeVimxkYa z9QYlj;g`7$6n^Ju_+8LN{C**a_#Nhg-_N<=cS{cOTY9EBznr7tcbWsgOEvr+z#Ojd z`!|#o|8noMEBre#34W7)C&)Vzb3?puMgP838|I!c=99gUf6hIe%hmjI5NA=y$Dhai z!}H>X$G^)rYE&uWmgm9maVqB%&PiV+?m2HMA4q~Z>0$Umc3>XZj(Ols%mYU;CovZd zeK(v3CSe{pw-COUV)#Vh3z-OC$OQOZ#$jJ{jkJ|`KFlxYrdLpINn?&r_Rd7Uo^4_+ zq|HT|&d3(d|IP*Hcg5qp!#8Sa9L|qEoqL=QlXlfA4d=J#5a&#f$t05`F>p7HlvK!eL%Xz*o81H?XBx_$psrk>ID|Jnj$9%EQHR$%P` zU2pTPyXbah=bsJzJ`wtT0`&Vh==aO}85=IZyK*^i{9e-T^MGxXq#g4g?*Z+^nntc) z`f;7Z^~)in_B52aFRRusn=$u22)K@5&U!p>!=7El1Iop)SH<6oC$>ZNpcFN<=V4Em;{5i^9k;lKj<n#=eXxs3nWERKKRXB^|tfgN2) zxE%hjvm{*eG<&R;aG@Q)6JtpK7w7R*YZeh-nIL#u&X#xVVj z`BCM1$OpJ{wU)g;4>s8kA^T2R?j(Ge<8@k=+G%OoWVxVaFb}jeCY!XpTchQVn4>gD zeu>3-pyfyxTKXj|ac0t5CvC-fU8h{G72l?ZoJxOPuH^Kr5xJMsJ0)%VX|yfPA#G>n zfwm2hKc}4jTIO!mX?ua4w&q$XM%$dq?WR1?w$}xw-2OXZmpXV0^Nr?6Zp-sP+w)y$ zJ4e#?Tup9w{WM-~_j)j&V!fr#=BeDJ>RWM)8DRVa=T7dEKmM|3!;l=$lW|Pg~g=BtK=FC-llB4Z7+a>lb;kOoc zoSYvr#o^LFZam`0&hEa*xCBP0c+HKLCF@ zW%o3RLtWpkb-`h#eD`J^aQ2&va*wkH7o7bXxhrX>>#}=+9cNjQ-5>us_k6eG;@sn~ z(glbA;)26N$b*w@*}dw&bC1Knd^YzuJjn%zV3?JhX`iNu+1s}#H7th=(hrX}}$_qp=i}aVBC9LyIO~$E8V7Tavzsb%kFy`T;B2SNv8>B#sU2s6 z&oo)>65loC0f%4uf&+*8S(CM%`19EMeUI1uei7m$ikx|WW9N^zBhF%5U*rrNh&;-O za|j~dp#gCZ;+sYlBXO?YJ+^#1&h2l*x&5PvDQ|~Nt2m7DpplBda67mE1oLn*_B=%l zc~{QupN9CDe4N|A^G}X*pMmV2+kf8W-2VP7o!iegy|+Ww6up0ja}TsNrqDl!_!*uV zn3h9&|8IYj-pp%gNdNjSl=T~xo&$2w?vslCD zP#1jOn?roINqqL!@Hr$0_?(=`zs{B^VG<^P}#HW7l|F1hB?>Rd6zh2Jo%kkbl(q6h5<)tX= z=l;ucbngF&R!6*dbMkZl!}}yY_df{tlAZhS!~03j{TK4S<9Z`$C)3Bxbb1pT1&$3C7#hD@f)3velE zfag>Bbh?ul;Oo-1dW>U|bJsH{x1_Pw?@C^Phs2u7JuWO)xL>H@eq}uFh40syli|>| z+~a;fbAI@~MvMPMIafOAsUD!k6pa>_OIqmX&zrZJ z`X?8811>^-u?un>|NE?@VJTo6CFhm1QQm`jMb8^xaGgZ^^pH`@Zzgo*yz8xhajbtT zV&`4s^2#9(TD^BkY{B zWjpt(+1a_88}HHJ+brSJ`LN8+heAiJ%~Jk~eDL9jVWuwm24GWs$h-kgK3qckQ}W^8 zq1+Wd9GF8s9Iw&ovo3u2L}T{&@U9-$|0`0_ByPQDDm22p&;+yGtS%WbdbPCo`Tx@~Yd*WEvheEE|e;LDjBe2XM} zI$!=NXyZ$vA2q)G*y+n=$(QG8eEE47z8s+O<>_7I%gb`em#>2Fls6&_RsRdPY0%{9+EzJ74Owb@M>e>ouC*=0ejCx7cWE&Bdwwr(MZ4u{IAh{iCGm z)f!E!b4b%EJwVgC<{fxr*AF}CYA-9>H!Q!{)bDg)~%g9xpC~rZod~p8-{#QD%+2sth-;O&W51Ha_ z-LG@5e*SW{#8E54mm;E$cmbu{aCw5#4KGbm8 zCBA$o54c>2?^fkorguSRl}tbHayELV3obL2>7VY)JscZbW_{9~K5 zFVjn&%RMf?hFtXd#^o>#muI`+GHAzTR%Cj>Z*q^z&B#lhZ(RNgGOJ|zPcCPsueIZH z7uPD8%JlPjz}+jzDV=ZJ-KODgoy(d1A{X3gb4!=GXy$ph{_BXS<+7kA&(aQ7n@ z+zqhfPVix-`tS!Y*SM9j$k_`Ly=N@;TMQ-7I&n5S0xZCW4yD~fOx+KFt%>(YvM84O2iH0|nJ>XxwEx(up}~&T!-5^nC)FlCvr`(WuP8;% z1bnNac?7;yF(UF{U^u>qIy|xk@%GyhZ@(=tG_ut@G}0It5(#>TL>dC8M|M}79;yp0 z!Lv(38=Dv7TTA>N1-?ZTSQL2(`+i%HU%b(~5N)d>%#GSM4c}HmepG%-wZU7ke_S#C zm*c+={;?N64&T#j*o1$4Q?DU_{~`E4g#QuvZ^nNa{;>}>ZVdiM0P` zcRa=h#@qfE_W?1M_i}Bjax`x!+e@yuL9oKT>S0IWR$7m#h!3K)b-g zNITkX_0EsXxV<;pm7v``>zVL!_BA(B*IXHDUFnY=T;Y#yLO+L>^SiV2fafaYZlC@K zj>A`I)P^ypKX-NxzJst}tgm6*Yl<+|8jQ6jHr9P7ajbJAZK%W8*YnvR#!fie8T0M9 z7oKWFz35ZGhjMtTKN_w!;S74`McUENcn`*&4Bko;-bS=PiuN-+z1Js%d#(m|HQ=t4 zaL;wX&G8d%!1pV_jk5v*?jYdaL%3&Qtg~WpPbf0xiEF@D3|M`j2Vwp$U}iZy*@zaR z57mbESQnlQcxQ6_*GAfA3Y;AcUtz-EhW>T91wPP5-~+T$^bc2<@SE*p_4f7}?Wb!v zxB@t+kT{s`zyaPbZ~$0;0UUI!t_~hswJ_M}Evnt)t@%S|MdAMUXAOibpBn7&7S_J! zH5%)B`=gKc^+zAUS(=A&mSzXe(rh1zvo)i^i(>)LMBr?aKiUAecLtKncpYT?QONis zknx8h<2xYZ+acrIyr)OD1_ncp2Sc#m|Mk#u zYaove-i2)2)XPJ@TM`KazPgGfp}XXL%4+NKg4%E6x&=5uj%8av_o1HgdA{Lm<}^Sz zHK1>kW{WYNstEHfQ%-|{1!fs~C+L-B=$~MqQr0g-y)5IML5vH}Hjzij6R>YWoAEBg zV_aB=zUt9O5Z85R_fw9oqM&vU{;A6hk3ZT9S~j5X0+bujuNVK%u$_p%*4r$QZ5D_& zO=zsZFS@5MjgU5|g_67Oz$i8>EB31bXF=nmpw z8|7NNzsHCBg2#<_OCT>oFF-b?qpjloHqcMt4`cCR{9*7aX)4MU#4B;UNa&Mw@(f8B zI^5JDpaaTb@NruOzBe?@loiTaqtHFFPw1KclttAqNm{=sQ&!u+yXbE{^%ixN zqPGrrZ}ts12_IomJjpf+PKBf8vaQc!ygLE9Q{0!j!}&bvOgzXw)~k1`dVZ7E6%NF_ zSolF%Nr?eG=GVsJHAeJkwn}>~@T`N9-^+c$3*-PPjQ|EBmtx zcGwkwyGQIWz-_myq`gI2a()UdjM(h3xc1TxWBY8`VL6uPamR@~{~gYXQJ(LET;`YL`Pm6~ zH|OUXz}+MA47gqAXVTJbevWG|=V!M6n9R?|gU|DJoCl*U?}SY2vit;PT*|TmIbMrj zNXWe@%fCQ5V_EJYpC`YY-XpT?25&N1cKUj|Da-!=xO+sF0k^9xquy1P- z;{P!29+77^c$3Mq6Yg&M!h(RiN96g$+PTN#d4GxA29)PxGFOR`XG4=`?mJVSJ(@h9 zf^x?5vm1ZsL7tBSwojuxKMuH0$n&Rb?R)@v4k*t)hdiH*Yc)S}-=dwv2i@yW0_}dYS zzYVeYTM>)jh*FKPQX7u%XjX(Mj z+HT=EdF}@Nh_e?M*DE-Cv6k=zDnlN^!}BLNBNIm4q#AEK&)p!NvJG{NPZ#HIFn-2( zi*q-Qdpvt0V!{a{%HkY~kW-#dm>X$FKhAR|aWD&6C2i+Mj-tIdcasSASsLs(b0c6! z{JnsEmIHRez_T}i@mavmZ$}XJebC!2gncIZni+$A2G8E`8Zf$^y_qD>-pDq@Nf>qE zN&cvLZUbj;t`K-TYOakzZ?x6vEpUQ1=2@f|ADA&Bi1`%lW3;xnkJXFw35o|QBpz^H zLEvGU0}tp^-~sUd-0l30V=p>a@-6nHj{_M$jJyZrgP}4{k&^LJ&gW9bxhG8-A4y)3 zGJZDOXDZ{g!y%W}xjODiyU94$mrBO*Og3cPM|gTd#@%2}CgV=nvmoR9p~rhf#sRxs zW~GdirXmi^A>(oFrHr#Z&meuwWL(5}9|tmi6nPOS<7F~$k&^K-oZqF4i?udn{4DZ{ zl<~=I|1pyBzJ%vfD&v2I9zP-D+Bw=h&Eq2O`#6yC|3Tga%J?{$$4JTe*__{{jB^g> z`S^3lD^kWk%l4VdIM<{4JkGsqw|SiFP&JR^nQYACrxBi>ka0Jdlg;B!*t0N?zXmIeUn*sM26;uw zcqQ9sD&tsF+2-*)uEi%4o}Q3#H<**n<2hK19|MhhM8@OR)^Z-_+S<)lk87W!wK($D z9a|O4Ter10_WJr_{}6em8j!QDuDLW+?=6jNL~gfDf%x2$Td^13h`sP2_QD&m7rwh< zNJ!+O#eVa~0CP^7`Q{$PJpB;%zPB`c_A}R{$S>*P9=2!yxI*q-V=ucH|D*BW2mj0Q zkG=13prDp}-y1|8$*Ry2(2uhD9qfZ{^djFHdkniT+w6-t# zI`$>M%>7x6VIjs~oP;rew#>oC{CC`Iol%JWS?u+;p)R&JZQkSFwDTVGikW-U7&pqy zF-BhuzuU+C?soKJ?oB6w12F~`9N1SCa7=Z;!SQgP8RPvO;J84-aUS3pMK~s-kI6AO z))5X|Gq0KJKJ!Sq&n(-BeP+~&TxpXqe&p|Kn1Oz28VzTZOnbpe^yRJmQ_wf;D>lr&#UpvK9Da!(q6#@ zxp9TV(lLO8I%X`!F%9te}7CE*Sa zG~p2V9-LsDeYJO>93F^qVvcI>8>1s>F8b^3pkYyhKD}C>D2I#Cr&rPteS~|*#^14e zHgw1}!OlQ0E9YxA=gu!eCp6?}{`|Sf0ag|I-ckGfNxu~5&mW^+&7YfC&UF41J{oQQ z#5Hx0HSd7lnarQ-FoqtPKi%Ny#{9VyaP-LhDf~vT51jKS>5`54Gs|}4xE%6+q2&D+ z+U>kge+_y6Wz;L)Kg@Cu^Zs)f!zY3F>jB3J-cP+|x;}@zf4RsNR~709TIlO0`Z37+ zr<31jnd_!8EN9C5Vok5F-Qehk-apvZL%c8i1}=J^bU6<7ey;ol z-x7J%szP%>2c7TfFDM7!FGRiK`xPu_%J*X5S>t=|xpsr^zl1UL2;aNG(G9*o6L9p1 z&KG;zE__eA9EW_LOI!cfA_rMj=$^2h_i5{s_wPr&;{67eGv$3Z8@U_2|9y<1M|j^2 zj&AV&-vf>w;r$b~zU3z_k-Y!AH|)GmTc5oD->6r--^Owe^Ztt%!zY3F9|9aFc)w?D z{h1jZ_s1A|g!kRx=!V{Z<46zjey(l( zJjLQCjnfUt@6=&`A(v-n`@L@N{a+4RQg$Ba{ulNzXW&}x{d4V54>_8NI<@z|fbCQ5 z{bRo+7iVS@DT~%wzjrw^+W{Kq zW$&N##=dYq&deUfK9IGJZAqK$r2^lzlBumoh$w zys`>@F~t1UuzjX7F4h*^KQr4E8J|XYdP2tCV4jP8H|!z1o{LWrr`r`7??t*1cJO>o z&&4}sT&%%d&f1{fHNGdVed05-9|sv1`!~%=a$n?0#!C;GGCmKouFLoW%Dxt-OBt_1 zos#h{v;D_N#xEs2pHdm`O}d?s@z}R#^JJ%seX8R?#>X5qWxN`)uFH50WnaoT*SwVR zrKnRf{uQ>*RK~?xQJcrR7^mBndHhPk(-Si826M7`JVl&tSLX2nq+3tOxL8xW%;Ttc zoyX(aCyvwY&OCl>)z1*C=s~QaQQH|P+MlcZHVJcAxy|2*lbe88u5pF1@dnEHUB>P9 z!F7chznkgz;?HgEyqDjNG(7%Yo_^<+8l%ce*Pg;SzWEWXW!~K@zNtP>l$VL}weSlJ zjO-2!K>YC>#Qw?e#3Me{jB}iW{9K8@58vR$bHYBI6G`-)^oBtH$Zl_cw406o=Ze_E zb`QtI>)8?Gwi}*q@bcZWBOa8Eab=~kd*g9$Hph#Y=l+quA{Le76xSH@OSqmUVhxdd z>JB5?xf*usYQ_edaI6!#tgxO$T{1Yrx0-f#JK80JBYX?`zSWO>Ecm|#|10sn6)3Mj z%-bDiyx+P4#LuntM~Q#tZSmlr@R)VRt{~{ZdLQ@I&`%IKu6R#eqd)dV*qAG<9k3A= zaSgck;rccKt4Yf;}G^SCeR3LGrQm}<~ZO$-P7BrV%emlOxp5(j9P5C@g$AG%D$ zS;K$A*v}b+xf(ctPeITU{71OMm1bQ5Xj#DmZxC+H&%hjI&`-4; ztIH89`AoweZ_OV*ExN1oHA{DOc>3K0-L))xx{GUT$ex~q%T;%AO%0h6XBhBI8oKM4 zrn`@XKz>9Q{4nXZ6ohmC*t_LqzsVzwBsJ-F8GF|!S9GWiVogzzaH$ZHR-^=HgB2HM1Q z;cJ-ZbUUsY*UZh?fHPSQfqs$B0OrX+%!av9;-L+7mJQ>A2ikzNN88cPn(v)5vl@Nh z;fF1U|JC@1UDrvQ4t7~EaE-7}ZvQ^!T+@c6{YM)Q?>xl$A7d5QfSGuBQnT?qC&&1tzBkLT@ieWSzz6iHu<2-o>u`@K8reA8_jmL^{JjEK34*ttAIQ7N!zw%r7Rap zK1aWTuQ3k^K1Vxojk$y47x)D%za@Tw191&pZpU?Ja}qn(>-)s6(Jy<|nky_jSDPz3 ze500TZ?2#(O1FFAYjT|{=z~&rFP?F=d-b{Et#5Fyux#J)xW-&zvwvA<+%O(Cl{vro z&@Xtf!MYrG!9)0NQ#KpX&XP?B9>Sc5 z?uKk)UZI{2uZAw*yaD}gn=4ie+3euFg0-Q5iE|5NrbGM#PH|7dYt|X2y@h9p8@@xx z5S|m)co*LzWCri#TtPT_-2j-=nk)3VO|G4-xnh;3yWH@Dc}C2oXqON_@KbbRP7!*X zbDWwhFmJRi$6TTK#GETSgs()_L$4oG_NUZK)_uYc9cJ367cDDosR15kpB5jPbA|N` z-xb#l5~TOSRF_QWLwc__d`vR%gBo@5Yz~9RRDCD}WPmjXB&lS5yKYm@l|K zh?^@=my{o&7X`l2E+M`#pHPp|uc77)bw<9eQsSR;1?CaV6)}6iLd+E=KE)bU%(ESw z7i@T*23YwlaBtDX?OEbgf0p>13Vcp8>&f>mQ)RhO@;Uk?J~?*5=XhRRWA5PmBJhcM zL(CPxfw%@P#a!X_eJXt-PyRW6uGp*jb6bTE*Yp9d6=nBz#JcYIa~<}x+uTqB|CrL@ z@Bv!$0{yvVd+7U1>=${PdQJ1`GT*@GlCbsKu=oo#B&(>JjdLP(3wJ> z(9V)42Q2CMMH*v1UF8?qrC^HljX3?fuz8)nkv70b{V(_%I{w$VUai^u<($8yU)Q9s zyI;4xJAPd!9yGm0y-huSqrP2!KklDYv?PX%WzNFy|8t4 z|LzgOj`0avLwElY*Gc`mpI{%!-LF`>%<_?xJA5R2`;qreA4$39BWV>f;jY`%UO*5! zBpJWB+Pw}raMNw{1t{HSt$h>hSE==;YHzMJu@`sPSe42rBJ4X&4{|S{T*`@?Ph^IY zlRyeNfesaNf_4ezgtq1#kQ3-k>Lxdz$c!|7A_~?xe+cCT{R?@yMam28Q{5kOnDT;g z3V8{bahHrGRy?s*_(070t}KZ^#9E)PNP!#Ja{@PLmk>A5Sx$cl=OE>~u8)vUkG(8*XYW(!9M7J^Z3e24U2!|-jjTft)FiAKR5^J{twz*l}bm$ z26Os9O5FS(ZgX&!{2wL6cZI2=FO zJEYFC+OQA$*gU>vay}p*iTS{4W9x@&@-F%~enp)HJP4fyAICOaTmEout&r5m;l_j6 z_i@;5cFYm*iKpe~u<(m#=(BUhEBjM^sC0cC= zdyD+;;&>yv_GN2Mu+{~hzOi+HM_UiqbM4PPLYJ7eMmHaa%O0WYI)L9bQ2uYw&utEv zVE1vDavqxlj?u?q_^;FBKc3e0`dbdYz8}|@C>sm9(CO!(UWxN_xWMD;=WxK2j-O*+ z%+DcYit?{~*@R2_I(8+D10ml-hw64@n0kczo%@~8@6;=|YdUZsfC=NW z`8-JTX`uO33GY-R$~>;R&x8K*Ppi*k#vkH!TloO$uvlEkUd`U!tNA=k+t*#!-6(m+ zX79T2jH|9o!{^bi+q-hVU)VKC^j#v~2cJ`RpspXuO9u9lbsgyz7jl`D9XB7yJ|#PW z6tV;TnhhVwKFtS0xJ3L1YzL+Lh0g=>V){Nzf1(b1oKJ-El)@*{LU{swLZ84VvIp0D zH62>6#fY>jI~aOc#U?8otzFr{x=+M~XRL1?W#|(jPij7qm=1+5boxY;juG~&=JU|~ z8KMpL{>U?o6;U$d^p6Fs5;`)^HbXQ|VxbLdZaa(Y`Sm}2cU&%g& z_gN`;G)uk`u^xfls_p;Td?j(XhhA5H4;#)AH)7!&ZRj^ih-+sb3ddQB9}(*j;7`Z^ z*AT$@r`3n@`0uPa#qyzOestkO$(kSCML)RCDUNlroBe#FKBvU{P=x)g{3YG-pQQ4m zJN+j!)Lg2^i@3m@t$2|coI_v}Q$CZ$i>P@c&UeB&BZcpTesn!ngx~y5=|^|*olH== z3u}R-wrLlACyjRBiJCJkf5yknZzBBYz?INb@SE8D=-RqN&B-MSzgR~k#c!7UCR|5x zKUA9=%s7so_L-2UQ}|4TA6<(J5q|VfX7j2n=?l3j$SD}EBUvwmOK zZG6sAU5yEG!$BAQBsXe)5_7$W^8%(1I?h)jaFM`A;uaH<@p(TtxU%FUX(ybpX-QiP zKFvoWVC#Z!pfuUFw2f@)pS^1{Jv@ULMGUCm=)WmbXaUXrOq=W=2?qh zcJupY9N*@~>+l;0p9XA6%h&0ECmp|UBYEA_W2xiYFpgAb|J>r+zM<)|y!d>bc+hMw zH=nQ4WwyOLsk?A~`Iw4RPILy)&F7nOjGG&c-Sn9gwlsXcC0uhzeP)Bv)M?g!SzL@8 z={-HmF>asWvmMXB7_ZZo#r(ZuZQiQ+dp*UmdA&YKd_$vJqrx6awoY)h)6!U*Pw2&Q z$a8>>wRs{vmuQWyY&`niJUmN8-yHlws(-hbhgTi8-dEqvr@&E6Ql zX1Cxn*Ybw*oQM6sih;iaYeULZiuHRd@u8jdAU=Mk=}=dnugm(~^7-ay{eB~TzL+~i zjDx;U;D}4;$~s>4OMEdd&eB_2+=Oet^sBhVRe%S(8V@0SzS_E;KHr6sKf~JGqSo~{ z=6PLzV{Ba?!xQlUKXAJ75W+9u#IxJ;s^3iGBFOhC*7(l>ulm{gt+?*|l&mdJ(Y$ZGv))(^qaD8q1$Zh z|E%~iU0`w5Z4Ow{S^uw#={B|g7x4_zk7=HFqU}T8)^!@^b4R>aPW_l}IB?TxP8?|V znOghbNSNJqTDQ-(W$edvgUd~qIpIn}m$eg4bKS3WS%-}EO1$PLopl{XIy+*#GWKJB zg3q<>|Ba=?EIX|=w&vd@a{q{Hd9F=c^S35h^S8UL`CWLWt2*sQea)}0-DHecBHPXM zmBr@(66-VhEOiCe{#IO+(v9X?&K~piXNT>#8`qa>Yky}hAcYrOE+7}YaE+afn6Gx) z130h7y#T_PPRy5Rqro2+_eB|l|2ElKIL5;1abLvCFE#scuNL>UOq5|Cy2O3m$e1wN zhkD$X8@`rHd}SE-MS7^XuQ>YACouO&NA_bl-a9I99_`eK~1V4Ysi{*Kk&U`Ml2TNfA^sjnCr z+UOk_I@H&Q9`4QWwbq38LT``q7#G$BYH+_Mbg-{KdZ@QQ`kG;EU_SnEU!!S{$C%2t zKSNs|>v|haE%?5T^O<+>ObhPed*@AjF5K7Ogt+Me9jhylXWS#dcW&%&k@tL_UN?sa zKQNSSIx7tGe!#$(%^byb%_BptUW~K3CUh^}y$A2)ch$#vOt|^odLMXA-LJFXf0y@} zLlnBx>^lv7+@1g*O)mKOdJ24eFJpX+7~m^2TyX-NMG@B;1x}Hdz>jatqYOH++=e>B z8ZJT^bu3#jYxr#8GiU=H-n0c{Gs{Mk4M!EAk8D>=JR55cFb_f-o)i6Abn@(PnS?P- zG@=K`A}`Nq^gWv6G2Z=+Va#h|Sw0&cX+*uC6YsMe9*O^9_#dmaXIZr$EZd_ljBq+Kyc*_Gr@y-GGK4;Si`3~1H0DsmPP$nM1$BD-P9EkQD1Mva8 z5(gZE{!YNqg!kPXE|Pp4kbDljcbR4`e0mULK17*?jNa0TZ=OMB2}2NaE5`J!!~lEroPg2MlXpat*`plnMy335z>ptHTW=k-J9TpH|bmO7`x)OXZlVcdhPHsO3^#L{=X zFZ(gd#?`9&NX^s14=X*v_h;eVQipdo_t{?;7#^wj4v%aM42x{?4#Ri5hDILr4vo~o z7d5oN*ihFzB*gM4lm(nG7)?IISJJR^$VIF_6ZPR2zyqw?WY&$>>+WIQBD`Y}-cgNr zREuweJ?LE+dF~WrgC98io5wiynd?0psBiVQKlI}Lcy=VmQGsz(RE1u-3GD)>N9xeu z5K(_R>KBB5C+Y`d+>6X{JV(?I68)dY za^O@^o-FE7MxPgo`hlWcDeBGgLQy|J)GrqGW_hWo?=SjUF6zzlmqdL(t==qu8TBo* zJeW@xMQ&hurU&_{%8_%$6D1y7MizCp(N@N1Oo z1)JJXgG4+y^g((VlQ}+$}GI&tCRN z8$8Bi{14(eTU#SRJ>Th_A8Et5eSLm?Ul8S^C{O6~+DDGFFY@i%| z2|5+I+r@itFTOwgf`NSF7=xM%o&`LzP53#3^*;L%h8_l1r`9c}pV{lxVg zRlh!bFRrm~(YDDSZNH*CD)Mf7pik~${an$m5#J18ePdvOnU|aQzmNWAg3s0iHsJhi zkHjg)*}mH!E$*}LKH1mNwx|5jqo`B#RO6-nh52hhc(>8i7vpVv0?*=k;)iX*PZ>>| z&jsu|B^;P@Ss#8%%q8O4@b1{WG9J$Y-jeY2UKev*zv8$sZ?xRwhdf*xI(R?6H-|XB zk5CVNa^Wj@FWdbL*LwzO-7+EjAt>L@HyW*%e>csepnW{?N%GnLBLDG{$^_Zp)B&? z0dB@e(kH<2m}`IS8hvst9Yl39BXHRyYz@@2%(Y<4 z9sZ_7aBTq{2-i=&^CE=nG2mRl1$s*gdg)r=wC)V_daAxB*`i6Q1JK&cQz9I0; z#z1Lg9CY3FTpQd{deLF<&g+_D7s{J7`GJ%5yT)HUFjj@4fX zc2>ysuY)(~d(zjiPsueb`)x&E2hmp*`r!NNJF274siG$I4B83(3%}AH+Ll^-aAJdj`LKN9u=dEoFaMF&p&UL@-nI!l=Wv+*7=BAdSHBHNU8Sj*BxS;mZlhzz~eYOX@ zqv6!aJK#<74(ZY{2Yn1iAA@6kv;vNT;xz|eLO;||@1spC;8N|b!@b||9-b!;AHg{E z`voOy4*Xng41umQ5cd&eR4b4kJ!hct6G&KZd zxev;aH`e<+B_-p^jf)$WYuA_Idak-Q28_EB*IxPTAUxZ=*z9u%WD4+a0{n;3*XslQ z(d+PS!&YxWFE7!ld*9T9mjFg)^*cX(tAd=%T@qu2@`MI(F^!N3sYtQiv7-F$ke zA+Q+VxPUL9c>$hZfaj|s%P7wk;K>T~U4V5e{_B8~df;NCcL~P6II=mgDDt3pQRE@m zfm^)Qk?nznc*jD#qYAmtt0J@suLjRwRR~+J7`9#?)7Il&+9ve18T~wnejY*}ThPaL z^sxk8Z{|M&msf z0Ur$*YY@-y`9{(2;z)Rs*>8BF*{t8j2 zPT+bQd`{n5tJfbD>u)^Y0-1EmdCN%nkcUAh4~Bmea>6;M6YmrLR`3_$D#6|(-!F94 zNVBe;eqit*^;|pnk!zP?!ix7(N0s23^TxQ_CWQDLba5^Hxcqh=+lXtthq-BEdlR|g z_b*}`4GDODGv>FCBhOFh4$m`|A_33Chu?jkXa5O!9zL0Pp2vKXRX*hV?RH9z zJ{*^X4+~E4p-uN5&wR+36{kL&!T1cPKGgWo2YpzA_yD03Z-7p8v}IfXZ4By8;WNbb z$U#Z7A#<*e%>^;d^O+`~&SA)X~l zgN;Kw-rE0jvvDfSwS8JXgR)81{$FRa7weBxuTYaDg_qlFZ0^57BX*DHupr>+_bePf}RtKv9|-8yGGasHGs#oryHU3MnON+b1k`aLhb#u zJB4js6QPV0;Q3BrE5kMi48lg9NIMob^jO%Z7*i|k?L!m&(Zgf0CYtJxKBSFfES~3B zVB1E=VH`We{!q-$cfNl$-w)Zr+TlPa>{_t~fNe{BGmgQw7J#kG_aB6fdkB1e7&h$d zqm#e?d+5Jo^_Q@>?9H03{6V1pHV~yA|@;h333>6JJrl8?4?bcnh=|Pt4d_D|k9{l7N5mO%=0V__aV3hrHx4w{UWjo)&Vt2}Hr#9UE;iRfoa69(BlwPUoI2CVd|sp# zVl`7fqvGc-^_P{ZZ}^G$6ut-Ypyp1#ryYEy-h*#|J_YQ>)&myh}gKbP{z+oE`@x*y0$(R(LM0^w1k>I)I zTt{*(%4_iDLR<%-=Z+^HJs$Z}j46k_Sq8a09{JNYt{&vk7r>(p&XY{4;zYRKD_^@CLQCI)C5PPP*<8}2u zoCS93>PDUcpiWE^AN&qTCbU&L(c-xxQ_hvYh~pM|TCRD_^O(8U(Ux3#Q;$d2IgdJY z4)Z@&yXc%A$2Il*@q}yYn=IhEWAzN!UInhU7uOD4BQzMs6s`~cyO(K4F(y^49g2;c zk*`*)9e$5{zEP$>k})3QeqrqXZ+YKu-p4+ydB0EW{x5icsd=9j$hIw!mHs!d`3e@>c_!9P0LMI3t8#;xyHSIar)NiqL~SaVE_U7I#`>UKeIb;M?8Lbr9o z1{L-a)&pE8@H~f_%iFLnVBJ1(#(1&NSHfnXji-&L4fa;N&4>1|nNqb^HU|CuY;Ry5 zqwW>@DV=vfho)+;-l5wqBBw0I4I0(b4(EA}ncykJHOJ-z*hXSb06oQ=zY+&eCK_5J;u0_0c8tq6QF{faTanfZSeP41Npy+ZV)`0?V!~ytQ;7l8b zpo<)bspBP0ic+`LamAdf*(uB4dghFTd&IZ zSUMH&5#Q1_*U>58VV&Jn<3i4sRItR23+LlfjmtcbXW)C?!j?_z9ayt=7;0SNOj&9i zTi*&DowKjd9`(T^QwJG8n zt+nafte0!kqbPH2dVv3KYg6c8+u9V@u4_}5cDA)CpUZr0+7Y+bL_fB*sbxorbx_Lo zu{p$SZ(weSTWcnJ2V^=`d-V=|y_K`IDfE?XZA!gMzov6->e5cEP1!#4wP{D(+7$gb z)~3jrBx&MYo4T~sag};)s>MOW_j6qBb;~_+;J?YoxO-2zdwjc$k@uCmoRMcApb6(D zqs$*WI}wP*Fq6JMkKgiLvz+SeJmX@CtIVH`={26mK#Xj}86#V`*t6js#NO61t{rP+ z#JQr)lE}mFciyY6@1u^vy-oa=XOVn}@oso;`GXGha7xiG?gJI3MC?==qZqmCA9y|LgEo}Gg3ZQy}BWqFiVKZa$Dne~V<*dTNy{F&`|PV9kW479Vv zSjdC)-5SQ@h)cm45t9e#AEy7eKCl?Pvly`;iy}pZIBN`9pdVPhALF&2X?U;ZBF607 zd{>YYm3M>BwtCIy8NWLaV@q_dUcF}(+TfgoCAYTrnr!;|L;lcr82uW>sn3fUebQ)? z=-e63Wci9u8(`dCGS_y7N9qaR6vz3nX1k75vCkq-1USBg^un_ut{J$!lGnr&V6nwD zr|1WqJPM|xSk?oTR}&04LK3_%j7l2EUw4M>oM|ryu2PSug{U!paEr+=MhE? z*>j08WX&bw`HSWKi)H&u>?O~zvt5bM5!x9)2``^D zz#rB)fHQrL7xxSOf{#2Ne{{pY^BkU@`-bB_2{C^-BMRC(_lwoO^&Xj%VHtBWoH?cT zPMqm`rvmVJmqf0>*l_>CHOSeZ?q62~TT9-*lJLU*V%w`&h7HEOX0D4GVYjM0726q` zf;tuF*8qE(&(QAS9usZ5R@h=2as8j-dU2$Y{SBmzXYD_U^%nPXxff4+OZCS+OmV&+ z{jhA>af>4l$i5zAU!YSR`lr1u>;Ux3_lx&{_r>}SIB$m@5PP1??SN-UBeuiYOyKu& z#1N?Sb+Nfi%*CF51AOIv%Z9S(rqi>JMo+ySdeGTk%>fzf*b_R`oD(w9q0O4@sM#{g zt~ir69{7NE#rR}44CaeObQJTHi{27)To(VFsMqb3W=)RA1sbp(ko0zu-OSf?_;39%G|C`;Z&vYRL3E z^F15J$oFzB?AxQg7kZU_Kg{Pr2cQ04$~NwC%}hDAy%+j`_YfbqfqnqD_a4A|nUiQY z;GnK6XG}VD;Ta>>9N2y-b^DTto9rtY6|{xTVbNZvRT{ciy|19(ngg|bALyp*UUmN< z?tfd}Z|B~()V*)9taLB%9;bUzr*x&RdtVoQnCndH-p}J48Fl3Oz*U^?B|S6Hy=S2h z_H{YWrb*pRlV{bbG-|Ig@!e zCGAx1gTolR&L7vEzUIIf&?8YE4bBV3kbdsDL&n69Nyz;81oh?d^)?t_QzwNHHnw%Y zx!3*=EBhfgOn;mY9{?MnSMB@A5%L~^bRm|q_O%^!xW?ih(&H>3U0ZDVnU zd?NU368LE{{25b`8>e|hXlGzVXk*2Q&?fJQ(B|ghA>`A~Md~bhJ>t>m zqk0rRsYh^@{9&9W-+|n6+r6hpwgm=9j?Ofq?N=DlwhGL}(;>6Xi$m9ghxUm4V~cVA zgg&fAh<9U7yXwe;@BuyKt%__xPOa_U1?Zy^ePI5+0yfcf+Q~-kIUXZ=b|KE96yqEU z@G}lL`0P8K_d?g4%Kn*yVoxvl?@$Im0*1waVKHD>6bkNKgt43F%pb=)AH(~0!r%00 zpephR-up1#y94jtj`zNa_a4Q2+bhg>!#6a5?{AxCM5ka37hnvNF^2OohVw9nNrQ~& zxkHTTIU_K>GK_Bw#y1}0JI9F99uhh*S7Vx*`Izn!bKV^A%WUKlx&}6oJa0}}!umk? zewjxzMLt;iUal*Vc|wpA1b#V@!|_GbK}R$}cgq|dnjKqFgggdA@$O;Z)#1oxP?S|( z-DnsCGU3y$-oZEza~jShorXDY5awH)p8`)%H#T^g%WyvCW;6fdUy8wBg@BQD;4Q(w z;N5pn&s=&9;34Lqs~=skzY%<-V(nO0=S3a(YkUXJ!Xq9J`4%F*fG6^5fBY|{-x+qx zVAg?W(~*y@-b#%9T8tZc?GnhxKmN7z-d@NN$=r9Gm-or_ftZ6HnNoZ3T-g794{Qtb zK6A8jyzpy^^L8p6k7bVFT{JU4U;*9yp)wu&}>CB`%WzXibOK>QYn zJm3w$Nq7bCFAg!sorq7J%jb|sY?V15iJWUFHw5q;`U@iG9%&JV9$~+{Cd>-A{MMDg zyQq)h+{z~h8P;jh#%qlZY$wJAeI>>Toh8PHykevc;^GBuTHf>2K7z9NPA2$)-?0$m zLmA@}-=PpVTF&R4@FQ>Fa>qD$t&KzAiTGJ5$B_x1GQ^93lkoC=4tQ^};4P^ACzM-u zBd;3t=fPW$ClGq`Flh5SenM9xC)`^r{n0m9Fc%!Y1DJvrUw9k#0rRx6zqzu%S?CWx z_V-4$Kl&DQ@0-xQM=Oc1_I*f%n2eNNip(~ z^g%un%nKtiFMRYMY%uWA>A>YE=Ga6ZJhQahdn)7t`2g`A^7jm3?_V1!7H67J$NU*+ z$2LCHHK6_bh;iM7@u{&1oM~gi8Ou2>$RXq5{t3n<#)GkyU~I)0*GP=(yIW~{ErR~7 zMy`>C$Tdobub z5q#MOTZF#wvm}m-fnT0;UUxTm5jF;N>;TZ~=5n4*MjvYKIE3e4$MZ+<{F!*R2*1U5 zA$K%sHpytJr@sa1?m&ps3Nw;VWXmsHflAVrWql59)FYcr8+8?MnURgkapk~9JuP^`Ms@RbO#?5{Mm+;`>WYmz682`MHtM+n zd}jnUs%ZyKsO?R8<2p;TPtRwav`;^aaw^+Yty2=&r$-*L+oww%_Gt^w9md8qw)P0l zxibb$$XQoxQt+|OCM91du}KZ!!_6*z_M0DXyVUsK?AxX1foGLn`p(}@*rnN|!v>x?cu}dEpXVMpkp5gP-F8vkjvS^pCJ=%FMV&2?*r5@k?(XJ zd~IR)kC-Eq-|n$|s4n*D|75|3S_k{&gby`-FLnxeiuUQ(c@Dk{KGdJynYn$sdkwys zY1*eEhrx2Z+i9PEn|0DY<#*A#Yo8w8oZ3E(jcIJ{=lTBQz&>39{C=GMrVAq3w@=Bl z%0B%f`#<3~O&QbhNwiPjfX(e@pCTDaV*6B_8FlzgQAfXNALJUL-<02hRQ4%+D_ONq z|E(>defo&#X`s374DSRKc6XZ+fc*Z$a(tC}-0?JrvHaefk3WOWQsr>~4Nj*5}Y~desA_ zeTrD!bnR2@i)!{M$LH{$X2U+60Q=;GeHw3{eil4M`;_s_U9nHEhOL>Y|MZ%F?YwuX zW}iNVcRTIVR@O=Tv>oN{+NTFMrnXPzm>wxxI=1%5e1CWBQ}D6Pe@edYg8%e`I}+Ka zN#gl?<2yP<{^-+yfoE}%3n1>hVb6$rNxmDV#|Q^TBDT-|eY9P8-oScBoFC|m_u-w} zQO9$k2}(=RXrCMMiW4 z;&+{SId38^ljP<6GVdqJ%ejR29eFwVO*>!0yqxa1nS*Csaiifl$ z3}}wCd?NlV?EK!GPWu$!Ni;me=UB1md=4}fI4jd)+#UELF8WAZ3EFq#JMzB=PK7LL zG03w~r{v9)Gd%{m5V3Ck5&JvhkPpHkPB-+Kz!5th?##6u~Qo%t@#n)LTM#q95i#@ih?%cL%>1KRD?H*o9r5RbBRdd_ydAN~Zz3l4 z=qw}Jj{Wa8#Ah=0wGJ_pUm?Ck+|VM#2UjEhnBRn77}<43;P{yOov2I1&mUIq!n-}-;{u%h zFlsvkzWv?j9rm@$ZZ;XPiCiA%hKpekdcB zdAg@bte@_|zBpnu<#)!9@;mhn`2MwsuSb7Ye0>1*=+_osPyhM7Y>#sddVD?W@5fm0 zhh7OdVwZRgeIU*`$aZ24zMlOfrsr<{V|<-veEn^bHZAXYYwti=t-%$%K^b2!;0E3r zyoApQ|6H8AxCZg(GX5X$71!E0)EZpi3H6!bDKoqXI0-Mt;LdN=DbcBUw@B`um3*cY4H=W;-J@C z>!F+PhHk!>bW0vz{|x#g&xKc;JkYkh9^Jb@bCT={;sh?mxY>PR4SGxFNd*q&#-<3%ZKelhU@OuNxvxA$s zv7~_;+gON~1Y=QnAs^93Cr_zNH7+K z=S=x8_KlX~g9mNn=>a~x0&ytRjW3;=ST}Y`y-0mG9z0F^;)HHIp&RwN4>`i0wq!N~ z-FRaLy0Itu@Pux3w|OkO=U{%$r*3rP!|y{k!vAw1Tthqc+KAX6tP%6L`5moll=+R6 zYWd9+-s3ge3)>X?Y2ixPmGHappEjyEe>uyvP5*u%a!w95ZPQy&u4686hi%%9Z)&;O zrj6peTDiAPEt#Hc+FtE|QJt^je9#UY@Y?+5O73k_OAcqH9*=H=iG1Li4Ymb(XOW8y zc3j|_vUEJ*oAz!N@QpnxVQYj2B<6KD9e;w?GvoC~9CKye*$>j4d3(+{;@y& zFvH-dz`C1f&Vuj{eG&6XF?0UH{~m-NN96s5AD%un<&Rj0Tp7a0Hdy-ba8Kkd9*lnA z=cW(jFX(&EDbfcr74wUm4`ecO`AoyTY2csfn44g?m-Nwm8Z%Lkd+k?fI-S=Q=C$WG z^({totyFN>SY_$osphj>hp`X(d^iuptr0VM2i8B-=qW{xJFCSe*yZp;7HKFf`haXegV+w$B}kaI=VH07vazp`(BBUoV)^?~4nv0N?-#yz_*#{GlJDrF&*ommms-sDmwo-JO33foVqGeJ0+{4Kl(87-A3+pr0f&?o2Z@DC&$G+ zEExZb;Moc(|K`36{pj46m~DPvlk)<6_FQAIp7Jm5@mlQD%tc$a$DReAvG7=2vc3_| z37n!F{)qF9*+$jzzLH%_XS|1eG7h|&-(i&Nj*qBcfKR+D_AK#h_GMcWyq88>4Hx{@ zg&q^tT0wfc%#qNW7GKG^F8o(>jvNHOY8mCuSK&9PUz77y_z-mFQSjPc9l?mn616q? z3Ot&|7_7D&!;0i%P;J?+Wu<>t>k7PMR9Wd)aAr2qSWNlq0zQ@}AB*a@1?^gv10OZU zt}~M0PmMieoKzcErJbZ~l$M=lzpXpXF(s$x_@`UYH+5jD_U8B#^Qyu{_>j9irFvfB zM|?*&K_BKj#y?FN7Iqfo`DEyp-paT0GW7s_J1;@bUlwglJL@HsX;-0M*jc>CYtepg zB>V!}zW^Ht^}3#I$8$=jhM$YIQFXi@)0NU6^lZGIxp6q;>NyiHe2035`bPDE9P5^@ zX`rr2r#)r8(%99T@{&e-wr!~dPtOG%pUrSQ>9pr~X36oS(VlHv=0g9>GW8F>qn#ey zQXgi7rMyO@tCXSk}!09R<+Qelp%*LQtyYwc8F9%VbwTiUOyZ(Yc9?m>76cV#M8XQ!THu{z3ku{ya8fef>41U6!1 zYFC$-T4X@@)w)3LF}fnpl4W*ofH$nOyaFEYVrdj>qnMhw+?@Ls_tpbj8+|-MJW%)D zl)IZXe!t+vR)Bt}_uLxN*A&wwTjw58Traxt3ew3FFWyPns4N67RgS%;T)B|P+j54N zf2$X5s_!!8!Zrn$eDJ_8*;->U?~GIW;c2YXq%n89@lxLTJKu?8el}suUuMjPX1;0n zz1x`EZyLM=``&FlYo8E%u&wKpz7@h5T&rAL41?QI791G4sPrA(9xtKa!{GxaVW8-0|MV6m&u6bJ1_JiSP%LBe;;;txb z?w}(i`3i@)6I zy(sJ9MQgCTVR(rRj~M88WSsrC_~zq4$Jt;0axu<6OZx|Eoc#$0aGd?A72@nm?8WcU z82DGY|NRNw-$|^q9|Qk;-4V~(k02I176Z?DyOJ1q(i8(fdN@8@d|Z?GcQNqCDvemO zfx2VH!x6f6k1)#lRmVSodcPyv{PN5U-ELz$^VOc=TQH%B=P*8+%T= zd3Ukrwp^tc_>K1df5pK6kmmu3fv4X{3_R}x8UwF!RlrN782G;o$2+L$D?ATm415i= zIFK>$ul=$@47_k~L$I$$V&Ij2eIQRQVSE*1;8hmcLNV}XQ`W`6Um_g!Ee5`;Bz~Me zBm+7coxwN9u|K|@s=e}P`AUfQ?y-)(363qYYa!nopHh1jKG`daG3R0X*0&sf)7-=v z_1Ja^Jo-jCa!(|VKkTEp&LZ$kFAtCVp1Jii^{Q>*q#FEa48+*I9pVQ0Nbsxg0QY^v zjp|2W=>={gum~?@U~zcyDfYPB`Jnwthwt&meNTh?k~b#N;a-V>m#y!dKsH^=cLiJw{6FcN z3Vn-#?{Q6+?8DW{1lotOqe&(RW8h`OME><+;CszuO5o|mz88@T#P4M9>j55L1{=T_ z_`Q#BjqgChx8{EU@a>3`oqrO@8OnW8fuUR~SdAGitBuVNAqr1U3utlG(|4a^vvhw)a{Lykri=XvAru7z5wq zm@3l3R7*#*Vstb!c*hS`lnr{oU8EnM9wznNhmXr%$G~R~es{#c;}15m!1y@aU9O2S z@X+}{$H4!^e+Dt|L-}S**%)|ywPCC>&+_lO82C=z@t+g}KPn*x9{3}^a5J8YG4SvT z8v}3ZdNJ@ZURAD~TdPioPGLg|W7{jW3H_EU7q;oeeajc#V13~O8UsJVi-G4kHz^&B zfw%c?4>103@r?25N-^+Vxk>fW7dpT7lZnK8jO3j(&7uCI zd*5f?4&&c@C?`51rnAe$zxPm9<=W4w>uNtc)m5(lfTrrYdg|YmGyR`lxqnx-opQu@ zc6FSN4S({LM}I;wNIqXs8T_E30zEb#}EcNOet7yiFMx9Nay@;K~^o z=2wQnm2Ib7`}_cg_67V8Ntc}y2Y1I1WRxQqXQq5v*M3;Gn|?C&729?`r;cvqk_x!+ zZR+iB1?_gc#aseYxq1QYGv3Dc*CqV)R6c;eJbgM`-SLj>JS(6{-*rS#E|ZRSGkW>=KXcbzm9B7dKmK# z-|VEGiEkHQ-Bm2((v)AqS9c(b#rR6+cwpFtj04>2!__hGwhdz54R0}V+`TAkXnIbn z%f!3)qC9sfceT%fo@X%RTv-pzAZ z{w4Z*xvs}PoDARb5@mZBx34R;zZkUN@nQg9&tri%(TDIB*6E=?=^{RFm;`Uoz1_sP z->w*U;(_jHe;yt|>_GeV2Q}sHCdR#if9X%pC@#UqxIdLDG*Z^YxZhph`Zb;v`ya-* z>p33dPFfh_-WJ3%%%q-)akq8D8285mxyHmR^K9aa+u%QsTi$@|k$Vt+^B`^BANef^m!BG*p<7Vbn?V|cTzSg>wrs@ zlg?eHT*%XHIn7mWLoeD)(`K1+VVi~qS~JLMhyiUxJ&A!lh&_4QmrgVGW1rrzD; z-xd6ay2FZq_O8`;92Daon+Fr)4(xH-Gx4=<9_|Y0q?7)`{g67Hz@~SzmL2`A=tWtN zUQCR;hr2MwJps-ndf8WSni%&OoIS<3i=Wk-Gdt6o-mh%zn9^T1uQ^3axy64)(xPOy+;up6S`GwxYxUMq!CH(7p zc~W1+W<2^exMqZXlgJ(-;3Gyh-K6o63|6`G_rNc+>U0Xj8nYOu4X4!6n`V z{NhbvjQe%MHS*`RjO#j6CRmr(@~m}8x>=XX)4R$m#{Fu_Ukz;Fu9LiQJ%Hm*>biHu zz4fMCxK5Xr;@Hr(aH4T83-A%?ld-uz%^I}$GiM2u=ff8->*2-3xMvS8jdABrX?O4T zO1>S@F+9chD4??}-+mY#e4FAwpf~o{#BWnPZ}R&7ZHoUZT8@32;)kTM7x((x6!%cx z-7S8geVgJRfh{*g^V^SaQ;axdbZxr6^!pV4-R$+L%K7ho-vT>T&)>JW^S$p|H0gUF zd;9wqb(Owv(Kdv0H{-cWX99QXOys)&NAq2PA^rZo#f9wCFI;t8({IP62JBlG-{IQ; z8~8TB`pjXRThl!_+PKwzCAl+%Yig?X?*-S?x>j=zkaB^H!auTy;4$a*kb#1I_(Jop{>^@?GoI|% z+mHpev**3S-nN6ixElDD0N-b^C1`%IL*0=&NOxj-cxSHGg8O^G{k`CRoyEPw`#(^} z$NNvX3&D-=D)P9q#K?M*3%c3sn+?wGS;otPF$Ukhll&Lp$Zv!1nB2kr2Zio)R2ICP z9kh`j^k2f&T7YTA$7`);{$?Wf%-*uoewN?0vK9&H+|0zU@_mT z1D>RDOi~*&sXI+&8OPM14e9lo=Wrb3Q-y;VM|?eeVM3bkkt|{DFNOzP&i61`356@pJnMOJc>iAu-#BT>UY^%ofGvFM#GI|=xtVXCG-sCNb7p>*>S&pfL84tr*`B()k?lo0s$=fAot45T#`{eB4y@vd zs&Ddv*}PA+@4zfrXm7XR`Z?_#2mKj1*%Ne**uXi4=P?Ozl2!sIX$DUI4V=^+5IBLw zzzJM}lW!Zrx0Y`Fb8!0vI=+Eq* zUCTetH@hsY?mhYWxqT%+AN2d~6^%vtxhs9>pCLbA>C4X#IQjXSqpFjiH=G-lpU<*# zY8~?P8(oU8sX}hXE?Y@%u8~aM3)%USuSR9(uX`{(15ACAnPoG+w!F;TTi8AbY))=| z9$2cCH?KqjWMt0h~&_m)*JH>-`T+Bm;Dx%nH=SGD69RYq?aX9vafKKkt4T# zplUg?D?yGlG0UDD`L<+GBa;n}$z*+nzkhOM05fu;Cr1`xCf(qi|3o>muP|4XBln?< zDEOh>lJ#X}#AVPxzhy*=qfkcFJL@Nu5iJY@E+h7~-!d}d`~0!@RYvSB3;nel93)7fI#T0aIXjrgmpv9-!p?8}T_=RQ8!S~a#I8k;9GBFAp7WN#G=9n0zp zTQ93CY`X~i@zwgC=!M3%-Hd(N+18Isr(~BXY>=FXJm74be&4y@(KoWDY~j7J)2i<+ zXVdrT^xZ(;=U49g8}z-%;%#dm@OB~bN9FL=D%d?4)!=Q8_6NqAVBa-(n-A=>fgKyt z_63z;Ut9ricdBpp1%o&3Ns_mW?8iSgiMUW1H9p58pnsa^D}OZ_k!|yVDIj z4nF{7;sLO&t}@?K!PaAW+7#Yp5B&TI#I)hZ@NKO**#oWZ#n~KwB6}cnSkcxBj^p{} zE<)xZ$sU_auoZ=Jv~0w_9Iba>jt}V6KuGd|+ zbAY{)y>@n8!F(4+V;f!^yMK4FCyPI-^Kcd0qrZyn>6=Ny8GRX?@^5g4Y_GZMw=Le2 z?f;qf&T?}qC$D_io{uLlKWtCm zEt~4KM;U`BU>^`X4KeNQmaR~DirA$+y}pI{X$Ge~`G{KZ5gD5^ewe`Kyo7hpAC$!h zG+X-uwr6x>W0Phrhx)s0)Z*RzGtS+s@Z+ppmfo}~o8EN!@#qw5(oG%Nbkj9@UdD4n zy6HkaPvtq2ZaSZ5@vfQd2|AlD+qY<`6aM64tE7Ls@A?>>8-CE6a@xm28@c3U*0)JzkcNeQGZ+PmM zD*6yl=%Kvp!?)!>4XyZgkH>jGn>8ldH}fXjKXhwi-j&nnLF6-mU z#HcdIX5F%P%I6kYXAS#JZx4MtPnz$<7iEBY-nEWC_kJ4>sy&8z)SO5U3nx>AxM3|P;)e9dIJ|P?&Sp|0{H?K@eiQv2GQZToIs z%E7OE!5n;pFByKp5cw9d=CK#Bm$aP#d!%i_ZQFKmi@%z=XHM?w%er6>G3$c)y_NcZ z>DGmK_i*ww-&Xc=>!M`7hxB5;y)uGb^BtLM@)PIUt5IG-^PKI0?) zSF-(2Fnt)9`egsp*^z5gW#cS+>oeYcqi6pEmVvVWX>3C@wyUL&1U}<^W&cy(x!=(D z`TNNJ*9W|nv;PV9R>8g>?0@R}PW3%=-`M~Bb>1=R0I>fJfKS}B{~4YZ+W%(s%l;Sj zkxNcOK6LV&&cK^dHwaH_tX9t^`mPn$UFX6jE#mg^u&mtJ!1ds z>o@|re7EHCi2aZGsnY&e-p@YU*z3BCJj>qh#^#^vHZmi5W{i}_{#U-eIX$$e`{FeB zu08&ZJc2wCv1|1eXMsGsTQ-J1*#FA=_I*5M67ZyPO=Dc-mEg%M@6OiCE{mNsz`K_p z!TVINJ<1q7Wd;aOfgJeGu>Vc>?0js1^3A<_Pa3=*;bNhV3M|0R@* z*#A_odi!5ji9L^YBKE)VE-UPXI`hifH+HF6=mzfoXwP2g&Z%14l(|Ep#GY5F578cc zt2cf4Hm$v8|6{#J?0;JS@PrckUqU%!|5N$u?SEa;Q4J1QyUtD=v;T1imYoyUOiyKf zTpdvMKhfomOt~hv+0F*`asLVpW9;s8V>INaAh4` zm)Ht{->eJqSlR#VdWn|{?=)L{5 z|M|FKjYr18dmJ|gFQkX#5DpW{8JS9BuFz%#H-4LXPO|^?7B}VWe}7c9{V&*m*~1+k z1hcy%OSFp(q@;{+qx-QU-x^>pjSbDxiJ|+1x+U#9*~WvRqs# z9Na&e48LHAd?!WoNE^X?>F!NqpHCcjr0oRQBW(+A+qQ$dto^UIbI%@P)06c_!cCD>BcqdYX$V+>cW-*Iv2Ed^nkr z{GMP}|0V4wz#nPf&9?`CPR~j9zuwOGa68}Z&HKv!cgj9IV}0Z9%4bBd13V{t-!YuA zetAT7_P&NQlI?wU*fOrB->U3=$U6gJ?|bfsWP6`rS_n*iviC_AySD%Kz7}9}XGG2d zmTJ#dR5~LvTx0X>eU)PU{J1@Lwp#f4-5a!l-L5w=d+uy?=D({S$6<U3+?@lfw`Yz2>3!J0+<92*@6IKhH5M(H{XS~ndNlRKF~L4dy0HZW@==q{6u#m6 z*c7vX>}h<_>|y5oCGcvVjqE8nkv+}3@!MfD?hA#of?GDG-Y9xo8k#OetxZ;`PKvrP?aquga zY6`g4erx0!^2`{5J*r9iI`_V^xbaK3v8aI>EpxUtLl=Z;I@#(q;4 zZt@J={L@cUjD|MGDg{dnW5 z{c$K>Y_?wI^+;0|QxMe9o|nwx|yHZ9xjr~YJ9FN|4ud^knwr4xyE;Z z$mXH!ax>?-t=&0T=k|Q}uE~FRviiT;b@m;`UZ?wGw9YJlXdYe~&pgb0?=U%@*`5Cp zZn5V+CLULlo>q0-a-<#NKus*Hi&xd!K^9L9PCaIA9FL{NlWM2%ZTls8#m>h46ns56Ce_tXySP)zxb+n|w~I*)f!Aiq93;Tu>W6dS)i0R?500Fkt=+#*a}e-%qr+(q_C?$;I@~_H8|tQA5gjhH zQFuC>@sE3Pzo8EI%OTb2a19?x*5R%|r}#8*RHeh=w;2dOz){!7WM+F;lwhg@ratL# z@+n>0e?P#U&lh#LGk|5FbU2M|sK&Mzb-4S8w@uPT)OTkmeeXpb?r-SZ>2TZofVT_E z=x~Dl5y8F}b-1M!@b+!>y%%-3I{Nl>xZ9n-Z|gw^fDShRevT)LI-KEY^;U=b!qLIK zzec{XI@~o0=l;)fXXRr$T$j@kRmXiyt9%o>W z>2V?K$P`W$*rprB@pv$c<>Tk z<%cQPuk1>qLHdyogzu1ymHp~u#%}J`_jJ4I2bb!0UoYx*!8-DEAfFzse%FOB z@AewLZykwMqE2GGPo=hq^$EYNEgeN`i7}$%@qJty(`j@(zHJ-mcqQ;jzgUL9H2ik< zw4j|hEMfeTi!buvl8&*EHbPiz8x9s<*ZZdgo)PML<>m*TYvu>OeK++#?RbRM^~{{a zbiI-}Vf`iX2sbB@@1Q$@!RG`?+)g~Yd3LD$nSAZyfzZ& z#DgcNXRG`5X-+)dPjj-5biW7o)tS#!u6sqL?`mMj4`sls234o)JzpQy^*(F$suVJG zJKxpVxubi<{`juO1OFqcm#p{U;=3Acf@?p1SL0UTbFp8~0LwtdehKg2pgmvbt2Xva zZ7f$C=x)`-eti`>t9BgYVmg?MKNAd>3I*q&#dZvy2x+Wp^%jjy>UuAU5S;#BwMc&?S?%fS> zPM#S@uwNNpR76+nE6ycrS-mBqXIeSLz#h|E5@AQrC<}X_i#)0rGP76H-hjX!?EOX; z5$yX-7qRplUw2OTxB!~ycMO=F-%!R>pT6#4VHj}TqqqIWbPxA!iNpP|TYE*-F<`xg z!IQ5CBnGUv{dzK_`rSt|V+9M|J*#C+)owW;3`s6C+0?R=8 z4}|Z+HpX_fmPsPCVvZ)DKD6$AFa=-c@Ze%1%PT@sUBzwX_)yg{&g zvg<&{fSpqTZ{JYg>bA{%+KbVRPJ-hWVp-O19}H$DGBBo=HyVE1He!M@ze)*0qtWz2t2JESxg zth4Apc&sYfdNwjP@eV!K(fAYO@t1)$j19B0L+JO>JL|GX9mtc%bsxd0&PHhEaWmeS zJf1jSWbGd1@%VVl)zNs#Gx`VrPKF}6#=GBSc+JnWQr+3}Cm4R`&-B623oSM1ntISn=-5a7}skc6G`7mr)&u}#G;dG>t2t#}NR+6v;xLLb9p@&%aKC=X_A+HX4_L#UgV zfz9(Z7&zi>VcUM&`5OGT9BjV7VSNH`33b78^XKV9E2#fJ94{FjoQavPIkSAl#g=_N zY0g-qabDujneTH5aZH`E^Hr|Ba`Pn~!5ICRKh2kDCFX-D&Y9Oo;+&O%FLBPiwi4&e zgDyPNuoO!yW=4@Z+l85iZGw8qQi0G0%#-br(KIdXoKJZu z#icx{y%%-KU9T2($%R|0$6LAcM1uVY!M+!D$wz@bNe5Tog?9Sh zi@M}L(6^^chU=UgWe&_U_vQR9+JB3FmyoC39E(Lu+gP+sW04)*`EaXCo{9-25ms#_H;=9JkjUDeU;~l zl48n=-$V@bz_)XOE>*s)#_P%kdwl76qQ1@%@+UHfi9P#wWQHow69q7%*TrQ#bN-9; z9^%ddTxfi*EdNFZLQjpHC+h3?0-4JAc{INLrXy;fE$WEHbzVGA6p1-|am-%O5zECE zfqz2-@S%wBqpvY%cCJDlqg=l+9nqa9`u`YvmFI~9I`nj{n10w5*9~(stzMWE-&C%h zcx;o_4r8k_)-2Qk%^IPN9%Gt3czhkg)ps!XI$z{0OK<1H)A{;vo+y|DPv42pfv@Ws z{8KhQcBAK(Ya@<-t?d~8ndb*$dR+-zzD{Rwm;i^T%aznGnF9}woSu`;6ZLiu0{*^F z&l91;?X&Yl*Z#lCF=gm%4>+CeKYmx8&UW_vsLmFTDO*I}`y-}o{HLOFay+K&1i`f* zW6Jg{E5?+a0xZ?WViCWRcn?bn>Ms>Ho#FV|FHmZy%d%X|i7!~u&`7vexDi}On zsxL8R-&Y&xMAgKU`RidQ>tVm&CzcdbR_;DA#g!Cwo6z^4w)ctsm zKSQ${IWP332nJtwv9T{b`cga}n7&VToU?ygAK25n_sqtmIQ!>%ckdbdsFR0FzLgp5 zu}wNBJs@y;x{BajZ0+o)gWD&Zo@isqrYFRb4J+Ow_L$jw*?%1Dird$@T7zfO<1u8f z4FsMgLs|XfMcO;w;n~`j4b12QivMzWE`gc6M3_mB`<(^^=3tLEI)z}~Z#spI+bS13 z_HT#o1s%e!pU}@_Vc6?_rgHtpbO;wac8foDyH3x@l=_+0>${8r4L0fgRl%p}xXe}# z22XB|=ug&HV*0i8>}c5Z>&c3J>erJM_f_oJzLXW)U&0=$dnGa#>sz6r&g{jCg|gzp ze08#7>%6F}=wij{kXe30zg5}yp_75I@6Wy}Dkr*FF~M{XF!jm4FB%>I`~Jbe=FT15 z2P^|6BWi4armo6Kn8vod42r@Gjrd7_2>-Z`s2SWBV( zSMTt&P-e6+>~)#3T)$;x#@~(b#y(IoV>uZ1w#-XQs9|IGl%kWT@dixHUsECU%M z^2`5ZY@Q4`(09(>Ol*9)Sce~~Z)DHCb>84A`gZ3HTKj;vTVr-jciuoW@lC<*$*co? z-e7hGy!}u0&Aza=&Kr!SZ!bn9T;~t}`rRQTPdOyKi_-Xx_1#jPBR%6_Y<~yY7+V`7 zGF^A&#O|COrdan`_(9nZo&79w=Z}+_XC{>4oAM@x7T>Yz8$W-rubS^U$R5#a8?2QF zD#_N*(%wnVHfU|IwHlM%r=4A;)5X2SY_JB_X~0UlfmLHlDx>kZGW=tkG`89u12G=Y zR{I?7-ED2PzZj0(G1ShNlfQ>Dw&6jntsC2M2Zi_4R+hhK*A>5^>B;E$ElckxA>ZJG zId29@#&wGQwTCb}M|x^gjjyhn~GyKJGtuG-2&)X9#aGdvOWgV)o*2d_La1 zG7-GFZ&Q(9f;X>@Z0BLSKHj`Ck#_Y>s;S`BwadSuJ;pL1c=PlR;cdU^ACe`|qvQI= zlVhU1te$uAvcp&#k`v5%0enfqQLdIbwtUU4jkB~i#LMv8I9?XSklSy$h-S%i@doj- zL5w)(cN|}{7hkE+b_5PvHf%TWGd1NHkK&U;o++N_>rld*uR~cp`Z`oA z_0M+e!SZ^8E6XoSa0Ndqi!1UXxbn(|xYF2#C-TDaXbzIfI=pK971}PrmEX3W#g7?J zpKulIPv(v*;c9p~xOd?%havYLYH7^wC$)z{W0n^?ynUAa)zPh?2Y8W>Kfa+Cu6dQy zcj@Bgggf1FyAXVY_eF`P2#>VqaBliZs4x7K^yB!p2Tx)@?z?@IbMsYhJgTpIm>mx* zHy**mHyVrkisO&H7)xRw31cbg!+pQc8;9@1`Bq=nQLxvWyObNL|5dk+>>h0B!R|3- z=>ZQ`a}=IO??xGC3@ILXKD7?y$nNtRyhu9m3I%rwY#gc zi@beO)GiW_!}{-^?w>fU)=Q&0d^`^8-v!rxjKgXIKIdcmDX0j-%4uUdsf7XRqi>9M*Yi16it?I4plXtb5}CupcDFVU;^$ zBHtFWv)${%I4tL5JGHi7KDOc+|G*CL-rZh`XF^7mKhWLnwRMPh2ZWU?uSxK+o#n-2 z8Joo{hR1jdFY{!>N|C2ze8SmH9`LA&s_qMJ0PqKWMGf!*@>{D$CiaX z&~^V{@Ag^(P4wH>COy#C6U)UYp*KSxyTu10F-mY+rSJR&V?DWJvY9FJ#EyBDd|U`(eMdxpI6Kd**Y_xAybbs*@qFnH`lO z{rIe_=(j508oKO2_|~4eI4VE-@mZ$%3S4Q`0J4S z4$|1J?q7V?Z#L0Jm9pdS`!J4CF<+O9;nz5RDj519JF1N~wNbt77_NgOSO@z(hCeAj ztDNj8`Yg(h#dr}LpLO5he#P)d&LfwN;TH_-ab;x~71#_;zQ z&cLo|WJW)R|3YwEWek6k|EBc3u_r4=;^F%WzwB^*kKqqsPLLCgT|JNy-&Xv;k#CVX z2L$H8KD7U1_$}=^J8b&UKRY@#`O2eRJl4+!?FAW8eZs@`dOTKKPAb=L85!~K{IL&| zj93nay)7e_>-SwQBfkD@BpxfYJ(Rou)t4DR@oIH4<4;damKi6rZ~qK9_J_>4?ZRZ4 zQ7}CKO#4%2d<@uJJk~~F8K`(HjqS@CnI?%lTlqfmhd)HuzND4xX; zIsjzi0kEff@mS`*M;DK^t)^e`Sf%#Wnb-u`Go4+Hm@Ud&d9<+!V&}2(SP?s{><{tS zg0k|oY)HO5ZSBXoAXdSAW1*k%Sj921?;881#>8`UOnfs!<8ftzJ-Rd=OM7c2{h-`< zJh@x(SZi!N)|Z&C$-|=YShps`V|}(5k5%#B*W7FqHx=CDsByCAyK(w=NtD=hsYgs! z<+kVaqHX-JA#Koi++O_5K+uM#1AL$MKI#1DLx|Zy);9Qy*^3kLhn(+l<80j}`18ty z_;X{N27bvmV~pd^s~5H%$DdawY#aY_h(Fgh|4ttn5d3-ii14@H;3pd8~YS z+7?YzXgi2auyEM2VY>m(D~-?Ut!^{5Xm{^dd{!J+@U951crV43#VdK?c!bx)vX;g* z{t9iE;L2}X&q?uFy~UNM2MSkXY<$*OXl(MRXnfYK3GrE-#rUiu&x9{Iya;w;r;I(s z#xo_}tt(n1MyqQfwB}-RLK>w#hj+6^h>;5Ybd~zD_tTcdgT?!Dyhij*dv4y`dQ9p| z@G90UytBy0ZN>Z2_=(jD?hW?&WiQ86(odN&Mf!2$5nXxX@#D3=>F+helt9XnKtxc_Z}Col}H~$dPyH%IY%EQv_YA&wBgk+p+g^!Ub#p=4v(S>%9N#x zSbfpO6!Fa3;BIOc(`RVID;t?JpEfAdn=v`si1bxvT#>%qxTZzNC7HqS66UZ^^fBDj zH}PAdkBINBA+@P}WU3V!Y^|+NeJ(fd?xRxa)adSpRMQigr7!Tmsol~}YD!%pOwXEn zg$~h}XgN(RvdXD1o<-l&)4T(_WIR20XKkDPsoRj=)U|w2OIIe{v@$y>zbZ2+zdCz# zek(SyZNw66AD3!<1vpk_my)-Xyd~t-kylsPAv~hn4Q70QlIHH>GxV*EkF<0*q=T^n zSJ(1%OBZ9;nA<7eq1dmw4>k=-HE!OL8MJ;X|DUGrLHz%+yL&~~^7@wIxCGl^>H}ND zq>Zb9YjpCgUo`Y>U z%}v+xkAgRgcb~@6b*&+d`EzaYxdl9KWuCWz$L-MVE6CB!;Oz|I58QQtvn|Z^R&d6g zw{Ax^{k-jWsNgG8<~tGCJen9F7+&lJ3~%gZ7=G6a7-k?}h|YpJ8hAXMY1^+f7uS`8 zp-t=Spq4J^#$WquSYvD3CT`qL{D$WDZ>ZlsE7iKPZSlqqMQgOjkiO`UCTe#(%oj)OfPY9w)*vOp*ymD zTwJDi4;M@IZgKHxJ$vI2F0NOahl{DPaZHNgViD!zxVS3T#^_iZhm^s^h5f`ut@`zF zaj@P!x;VnYW$9#s-oZ^cCzh{F5*(I?_hn9AVIBH#bn4xM`QQ}32GGQv$Nx=vnIK5)yfsXAIeqJ1-7k7oX^Cc1w9R_~_WV9$26 z|F7F=uOGDk4Z-8h_w9Q3@ceDPd$hk&?{<98=s7mN?<*}~eBZU{jz27kjqlPj<6GU& z@nLt5jPGK-d*l0*-o5c%qj%A*$J=gFnm0GIVzAFF1N)MG!hWp!_2y=V-aXh)*1HG$ zJiW(Y$F3HEJr#rfZN8b9L{}dv2fHVS)SifpHFV7A)Quy~59N_I$%i%UKdGjbZId=i z_SKwo&dl^9S+|9AdbLMlHwx)?Aw1iYrAMY(ktxj`e#pqJ*sJql`|97zue~|dR8l5e zDx*p^oW*ZCYYiE^6*`_H*>w(SeD_MQ85uK$+#8WsW8+zsowRWaV}jo?wz|T*ljz) zIdA|b*ox2T z_9@?)({#*njhlb4P3d)o2^s!}LqF6xl4odmJ@nnGIk=KoY?T?KGNLisJk*tuK0=v# z^bwUAr81cm{nQl>cV#j`nJc8TApdVXJbefBIA_njA-0^YP`>^r>}Z_N}k?^&bl3b{0emI zXegqWg3lv0R^VC7ebX!XiL}fQRwl5SieUzCiM91#Qd7f#QfUq1T)4|rt!Qj*a^0ReHcZ&Kvf4J-9}DL-ZvK`T@6!CE%(b}ouo;wl^x2blY5xkd!dtcnalHsiB@=jzi6dx{Kl1S zcWt~`_9yss2WzqBu*S`28ysAo|E6#N-MezD$@>U-z}lpJ^6l$>)cl0(cm5jpcv*an z@2J2(Cuwfs*=B8HmvZ(r@g3<*{=EMcu)FyTVQ1d2`f%gs34)z#`8*xcNcTr?>C+mLFmhHT)1> z^D=#G5wD^j(TvXzcc_18{4M6!@iN!{>hY|9(|??&4S^?5WIY~@>^&rrCx>ehI5e&; z%UFxx<5BuU)(qC-GS(vSJ#69I2L1Xl`fKrntk;#S%T0nawiat9HE#ZlfpZD#Y%%iv z5Nj*#J8B*VNr* zcva!Sg#NzrzQ)b7On;s{+Ry&B+WuA~^moiO)_=S|pXNRO<KvAko>YTUeD{V|4fV|ia8Z;kSR<*ZoV7V^GL zp1;SU|AoFKqjwEW_B$C}JY9n>KC!5a$Lppi6?Hb{u^$_sRyx6_m5u7q9qdoiM}^ms z?7<~^rmvHuA4(^$O%FXwu{G0AOnLr_U_5G1da3b)sZ83w55^a!_rdmksC^%5-$&T@ z5%ztQeII4t53}!w*>}NWVKDujY~N2d`hKByqAfqsmY-tZr`Y#n?fbFzeTIFXVc(Cp z@5l2_Kk~IsKJtmvQb#tPX8N0F^XJ*}r`h+@?0da^uea|XweKIb?`PWgGwu5)?E5F| z`?>c0T>E~3eZRoIUt-@cvG0rR`(k{J$mT}=X{bRLuf<XEk z?bjmP-;=&55Gw$Pb%ty{6X!FSiUV;3F$G4$)HvR$MKM_Ip= zbcHLhId(5dwPr{&_8gu~KggB21$EH0?PrYb2faxB9Ik$#OLVVRe1}0ltiw-zr`V72 z&t(>454b$Pa%VAJdxT&~r?I1u-nIM;e4;fLf5kPL0^cECV{1t3NAOp)i?n&V3A|kP zGpCyfe(iVARjY8We}{AP49=ef|KjzsO-a631P%uq+!fQ#x=--?I*kW^#J5;XFR}Uf zdt3%M!M$V&&aE3haaaJ!OawAWt+l5xCqKIs~^@W|}QC)|Fvw@iMZHsvYUd zrXBpS@iKg$(3Gj6%;S{RJVtFt#WAM*u`_q@N8`H}{!`cui$3fMd1dBLb0S;cWMczZ znwPDXwQ`EHM+!c^kByBeHCB44${IQ+Eu?dvC8tH^u0ns(m0W+|I%J zaXKHgXy*E8>K@836}Mw1lpRC4Nxdw42<0lSm4?XN71y1YUP8ACFby&NWWuzS5jZeP43( zCrrPo(I)-+%jZ6AX~WsB)}R-xg>N~T`zM1W`%Ku_oVi@Q_QZPD40JSBZNd*8YDae0 zoV+$FeTU#}rfk)H|j#TP#a9I^))T7+jR?IhCb1P^OcwAc=< zO3pihXVD4zVC%V@pTQqtcrRmm2zjR!J+Jjf?n_sOisq8`wU3&) z9M4>mKFrQ#T@Q14WiRG3_1WlLM(jro!^+x^?#+(Rp9C%^g)js<^J>Ph26)#(-}huL z&tLvlpci(q4rDiczvvcRp3J|osVqCFN&D#^DV;em{xbggh7>x?;(W)lOq1kN@w0Z; zhoO7^wa-LsmtLRuW-rSVFDCuj>}|4VIe3)UhHYxu71Nror;OI&6TGL;DgVb&-7C5q zhQ;hqQQqpy+zX(|2o1*QS+>elP2+iY_NE;A|6TENZN0M}Xf8HE6OVGoSFpB|=i(P; zE`-xyE`Drr^b7ujxd7M9h3Hpv!8Z<~_K+Bkrz)RvqU~}xK8i9rD<8Eth({lcY@0Fu zNar(%^XPThDeq!j@YaBru3=5G|KD{e>k+x7nS8@b$!}L4uxq_e`Zv3t$(PMWcAfTV zcD+v3`dgC!xzdnHmH#5oX1z*3a_cp-B)>^zj9+PS{{Ol%)~^)EG>h}kl5W=Pw7S*> zA7H)GzTHnAYUduZ4$_a_BU+x2U&Q=O7Vm8<`anW^-Hcy46k1%-Qji5 ztYo}C4et?Nf6rZBJ>m6b@xor>^`ZaScf7vNT*vA4^^uk7_4*iIXA3_uyq=&mi`SVB zXED4Ut1=d^$G9>vyiO(E;dNaZynf!|wYe8~-CYGjmwC{mlKAM^h91%PB@0^qd3H#T6D|K-9O0kO{)=1Z z6XBmr^52y0Ge(bJH}+8R&n5X=c=q{cz#H-BlJ02j@Q~K5EMs}&i@KK*xqO7fS;89q zVg(vgJoAsP7hQSsXfNq;UzAM`*M0rcG3D71)Q~Gi+0F}tYh1fJS5q;78{JQ>9H@F_rdmk zuzeqD--p`w5%ztAeSgnp7~rp8HbY|r3FEY+8&|aXvY(jwL!Pc!HskqftS`g)Y9uGh zcA&jUcIz`zsgsGJ8f$FW*dCv>wlC+)!DcACM3C><#$5hn@+H%m`q++E#p+8>=#{Og zt&GhMT3wBPn?c9y$Yj<}9j>z!p53iXJ?X^a&#vBKeXKVmUatq-J}p_im$=0)R}r_u zeI?uq_YvHd!G+VSI8$P9xOrIba41?44qd%}>0`Yg#Ow8d!y5(=hogJIq1HkKhuNrI zGPGBg!L6Y)@T8dajv=x$HlDW?o57bEGk%^{V(VLlN73*X;&`aC%}*t?xisEpIryti zkHsh9zgWe-zZ#p=8f5sj$a(jm$KIP6kIZp-{)^yIHWt|cbPmSI7uY^rOrOg9smd7p z%i{cJTp4U6E~ZaqKC3eFHSm0$D}y~uWspr4VZ#~S+;;TFMev+vYy;OIC*8rGyAoJb zXEkYQ=HP1True3w()eBp_UofI>iK`_IdhaLd%d2sM{)*basJOuI?rvFZd{eUgmGSq zUF4GdTH3prJo=vF`oEwHN1?>bZgEwu_PZ zF3xW`9UpN6ae}n1@%n9JHyPWUxvVJvVS{<*VB|a2VKcZEKUhV+kqz0)r9YqZBl6i3 zl)s8LWoN%leGBnT~hN5ja zu-lfm6V_JaH;vK#ss`eL8K<#hHZ0}2uJ8=-GuHF4k6<_S_`L^H3YjGI6Zz@LCSiIu zY7Y`Gd??MF$^ObS_x74tW8z`Q>YaPeyx3#!%w2;QbCE5|?k+x{8Jl7bdj@0Js2B** z;CJaKIH#D}wLYNT^J*DS^PWj_%{*t9Ytxsp1gfKl_w+6wE`Q|AuV zkxYKK$Zd_=RjY*9yPrCbH>V!?WQN*j$QyVsZW|m66>Cx?SqZpnnwk z#NzxFDkFYFo1b=NEWau8iAfu^R%PE2pZL1&Lj@MqIg>gj-p0bTQhW@UzM%9h{GshK z*6L-fnafx+m*&^f#!ciE*XpE=!CJMpuC~CQ)sDPiY}1T4SgY8&lm{NQRzLNmTg$}s z(dK04W+m;y^9niQyJVYoXEXhHCh5JwT6O-nKPDc?+L7Y>X#?vCyPMXNvD3m&yJ3BS6`}EX2we?ZbpJ3hO&Z(PsEB~eq@-$B6 zpGm&fRqpJ%dEh(D&z)Xpd<>C&)?2UQEww{4(YOn5-P$t{ty?VZ&8MGQ{0*9C*@(=U zRp?gF_-rXxSNJexQWbn@@iv7gzs>0yORP=pN0r*t9E*p1IcST!C4)205k1Tsmn(l$ zrScx0Qa?VwHRNkbw{m9c%U(=Mn~&_c;f&HI}1bJhPK_TQBa#Ai3K7tw~~w}Z6T2YcbL=GoMnec9Y*c&)8Jns1u5ir$*n znD)#&cZkss{SUeODAO-8xantV(2v?Qdmeob)wASd`c!|CNrstxWMi8qnPV_%?en$A zT%OlmG2A2EYWT_HY4(cC^M@;ccB&x!^Cf)zT+Cheuyl?88*bdssJzhWW4CMOUP4)8_(<$wi19KRY z`lv~r0^iK9&MZX^AeI1`Pgjd8 ze5XFH)>eb7Sl!FP6}U%7@Z_PaWOaK#hPTcoqg)_bMwiv|#iCL0D49#=(~*l!tj5Qc zj_#y%bB-NZO7x_6bI#r7EmS!pXDu=5ram-ss?v=vuq3}g&+sTypS<~A-Un@-LTA8 z-cBr$;q7JilNY!F=KJC!&jv1Bj-l>drz=a$DF~ius`ast1O zE#ND>p9lV`^(?*lL$ouQ^S;EeBm^ay2g7opEi%*D0`|0D*r6$$QLxviCtN84VL&tM3>^x+G(P#2L zq@$^Xw<~rG4FNIY9(8QU%rv@ zCsk4Y3d&EfqI@0YCsa{>GUX4gqI`<->{%t_mCaCdA$zmzbUJG?qdwKtiHa6$Y}ZiQJ&UzFWANQa)jm1nHdFS-p?B$9cINxrtZ$v;Sio4c zw&5$A;VXCPerEk^UALqAG?2d%T}5R-&hr!SIN3RMUSKuy*H+5Z{~no!d}2~f8Of-6 z7hS9rk0f38oSMOnn?LkuS~2Ehl_tLE^mVr%)o}N_>Yhj*{5I%|vMYOr`naF*nIGvv?oY#XuiS|cALR+IfD z*(TRe+`npRSNzb~d@8Li2Zv-sJ=dgxCk~6(c50NjRu3@xTE~7L=#t6wwL$WLr7!ME zUXes!EnP+WQW-~I&8i!tuhowf>FZ&YwR=pQzW$y(pT0hvKwr0c{r;WWl1>4AeckWZ z($`n%w}ie9u(|jMa95g(Gc+zc7w7VvG#4N9aH2A9E>Ei)IVkmt|E zOY{+6>(jk{XR9qc7t{QH?OaTG2h2qWaeihlYLeH*cJkd^yvB3VTx@;2xGq%2&BYeg zjm^a`{<*j=cB^cexp!PhF!%SzNl1wb$ zrQ1J=a|rjkgC%Fu)*0#4_uKj3p#Io{#CzepM&@=h^Cy5c;y+B_*FUF@;n&EUsklDS z54irygKG;k*(eyTEI%y{S3ml>*6T+xL4H3Y2C$!Vy?(wM>t_%1AHj25&8AP3-MJ9R;ndn!@Gp{1c>_T4YMDExr zx;FH)WbQSY)STw*V&tUD^V8GN6mm-o@d((as+v?R*KIQkHh!qlrIAn%Kjh^BzrTpL%bP(O#uJiV+!}IrL4$r@O5pv1-$R+2nU!RT4 zaeAuIvgdMSoXa;Vo^%Z{U~BPNZ$F>=56|I#|FhBePsbmGTq-}N_VzDuR@2mJxO}6D z7sC&64|N{QUQC}C)8|F>c@ceHNS_zdXB~ak6*|4Pwv4H1dSz?6X$LkZwYzh6sxX_j zPaK>od|+s*Fl$7raKflm;rPRlr`DvKjz5y~xf4@`nNw1QioCBS%b{$Ai)2Yk)IHzEygf$?Dd1Ltu5 zJAqT<6->ti&-;OACh!~wJkx>aO9!X!z?Op@J=*@Z1^6+Ur+evVoreeYGt%~Ri0w!H zzRJAjz)QT(owL9J{eFOcXVLEo^m{!0z8^fy1P8}~gX!R4M=g35aB42PmR|s^ErRCG z=Pc`a_$mflJN3Jt7C&=<(Bk#`ffg4ZAhdYp(0~>&PaSjM`02*QVex5h)PYN11L3E8oV&C{tMUW)I$o}aF8K>O+TGA&+zfY9O%oC^>w zzUQYqF!*AkpKdSH;>8CDE$ZHJ(c*i4x&wn26a931nHEnwKxpwXON#^Nr_B~9Ydd;lr8x5ki1E6g7_aXV z<8>b~Uf&_cYXdP}>xuDdA;znj7%$z;(M+6|?h0%s)=THZo3n@Ib>H18`POdXJU!34 z&*BN4nd7YSs%7a-E%LRUpW5^T{b!eKB(HdP!pNF=xseOa-5`o5Z_XUXkGtHiO_|vB z+%o=&cghi0rZe3+V#~~(e#DnG6BEXrTKfJMX9Jf6b!o%Y&2pERUzfNuQ&(-ME^$<< z+nl)|zmqtr;7s8K`CU9$ieYcgj?F)w83R1TS6wFuzPW$C6@8q!UFOS$IE`QUL3?T%#(i@^7yyzU_xHk32P z^wR>2>$B(QXK=<*>0jq;vgx0*0E5lgFQCr(rjE``>MoPqWg6RsCS5USoQ=M#R`)@1 zmO$qKa#Q&yrp(+Eb1nZ@^S+G#rTouUp8*W-C)Q0c?VJUU=zG1sDNWoPXS_FVxr{qD zfN$H?#HKAJHjP-f9njpb=#O)_aKi51vze zBgs2c8G+}}(Y5t;;ay=NJSwC9)z(nYhw7(~@YB6>{odUfI%{-|&Kg~R^xSPD`9Ab; z`@PXDXZ$%stMA-2U%!Mr=8$peo7AGwzcgnSyn78Z2OiJ)D)ID==iI`x&vU-PyLgVy zJc{S6;oqIR%Dszt&Yv?b$8)}{=U(ufFH&xw@thF{9?yAS63-Ewec?F=;JWys&av6O z_(`7qb@6Y!YhCEfqt?YQ`F}UAiw78&TNe-Nxfko=e#-qJuZz^Xd|l*;6?E(3EuQ^# zkz($(E=K5|buo_rcjLO~6b|MGa_O)1+>3RwlXClPU5q;L_KO|YC&;LRvoHHao9==i zh3+<*bHjt0zJtuQ0oiLkx?9UQtpqouiZ_@WzMEB?DAG*JU|B&v_;ZCn}>gPSpog~uD z0(}YHjB%UqJV8g&1#{34bvEZXVfQ`O89xj4U*w9Yx6K7>q+zJQ$1|1|z3b2A4jr+NpY@0fO&8>4%1&r|zFeA^5?Wi@)~ zR_1Tpd}L?j=2y_0)=4ML1m7q-^Eba=A-zfMhPs#9MTf}&-+vk%<~($mb2&piC^%EI zAL!$s-Y(L|Lp=NR@z1=AKAzG)^s$Nm1BpI<06dO9TJ_uu`p_7AMIVw0_ac3~@@tPi zoSb|B(#LVatK}cZ^X${d2YDBLEYLsnaVGx<5`CNiJdQq2)N?QBLt{J;=;N#J5c*in zxgo_HSPu-`Er82gcIM?X6}eaBArL&*fPlSS@fY*Rl6A^W6DzHhN@Joc$^*rz!E zamG)JcL@96aM;G)yq&#x>@S!ro?YHF*;~1fjQ|_@gT8go;}hN8&!s+ja#I@nnrxdI zXY1H>_??5UZU1QX-e{hOcTnL9?f3vOxtDy4%HJ%3uy z(3HDF`ARSEVwih<8U-w8$ercL>^);NY&!7_y;=9o4Cj1$jTHr&?(53FR zUWLB58hvjK`rcafy?fC2?rl3_<2uhbC;h0M^|`X`@Qo|cpSJO=eKxlvxPQ0#!Ncb& zeLLy79l_nZ&1;l)X?}<5HBb-TP4!l0^o$;(XZiPd-euBxru=K>c`WId2I<++CjDSy zk**NWqRh*tE@gNgP5MgwH+nuy&-l;y?!{QWKkJn{#4D$7BB-4D_$_4uUU+G~+w@I; zq}Q18qw)bSyfpuNFYh;|-BAYiADQ&v`E`?is7e2Cp4+qVjJ6BG@n!j6>-{GCjvn`h z-j}1VlD{)kyZ%V^w9uE|`uaV`GCd+_hwn_ZOOaZ_DkV`fqQVSHXc z$ef>lD0^Q1`*=?X zy{PlLRDt{W3l|Me6)qf_DqJukRai7CRXG2!RN>qsQ-x1XOcl=RRkGfz(8w_5PR>CBB_HU3jz%{|L^y@8uCx8hUWm|M<&1OGSa9seh~tnq`M zuKz{GPLN|P^0RJa3=aeU4;aTojP3i3>p{ksV?2Q`_gv%K%`qn9vt)eoLF)T%W5HYJ z4Sa)WIp6-fsjhWf1N{GV^z5_Y+vn63cAsBYc;lkF!t0mut+Azo7vCfIptL_**IE`g z*Y*!L@-<4H`Sm#stlNdG-+J`-e{Fsuv-AaIsnBOv@f&aH`gzcE)IZ7IC0}3d;0k%> z+cGh~rmfej{TG{0*K+twTgu$8ukSWAPSiS^#M)e%&+;tULeGD#=S=WC9XiIQvA#V6 ze1BPcm;E+dP@eu({z%Gn0>6Bt+D~`sKD^A*yzb`3Z+)BYW=o}NZ;RgdU%EejfqrYt z-d$eAZ?En~Z!4bVvfrpGNWQy@K8%ji7JN&g9$%+q2ktl?t9*RRMwZZi9XYe*;}5w~ z-<&o)mOIYR#K+pgU4F*bx)on5a>;h#hCbv&PU8>WLVM@Xch22?&YkGUtMjhWw_Nrt znG23jY2LbIZnM70LY-RbU@J1Rtlo78AK!x-8|HCG9&s0o49?;8$e^vVyM_6DCua)w zD&3nbfAmM`J9tjD`gM+@j`}^LLcgQ^cImgCej|O2i1x)jGLgQ{u<)5!4aVBcK2Z+N z@v*v3+q#N%sLQ0DOP%zgrq}LC-!W#B^WoDbH=dejOI?K(fKvmQTf%GQTbI_?Td%z zcTcJ*yfMC}@cOu#!fRt{3cngzQ+RcF4fjnBYVFL_6n1u}3%R$_h3?lgtt;W>tKjMH z%cSn8Bj)F@jP8XzPjMQ%H-M97_&&7vSncG=N9#Vv_P6Q_(<$4|{I8|%J=A?=+(P8= zg@w+M3$ep4EYtvdJNQ7i+MJmX{l3kqe4qa98rJE^kF?6i-wsS$G7Ag3qrCm`RBJu| zN78;y{Oa+#*4&;nceXDy-;^EWr@tPgucG`2KYdq_ekJKc{PZ0``pu-LNpIhp=DyZN zbDw6+&081Ey_Nsm*7`#3<#gfOW<4#Md&VHrfRntF^j|yCu4P*ep2@eKNoS2Wf-CdP z+PYcKwhZ^Q2W9vMR#@i9)aTOr-T-C3CL1{Sp_|`t{@3&B-+XJp*5~_qV-1`Mu(&qP z^xG)hWZKvlu%VasIDWo^2tA#j-}!odV2?NajQ2gk`!_sX@ts0bwv)0NlZkm^ZGOYn z>7)Yu3kxRO=MzcNy`BW_@g6eLT-v ze!jlo@SA&w9}dc!`np5^!8G3r`G{GQ zm-+qNuXbo}gW9FNb<|_c=ho=`ynOC%-r)neyZFDWUhz|pwa>~tb~Ai!$`#X^E~c$i zinN)T$J)0JGj^Ab`%|sD=YGp&slun$@{Q>G*<+CfYx#y%?vYe$?wOj__J(0ii^<#h zNL{Ps!<}ntTF->P&zLf_X>$6B(^5w^o;G8s;@u|X&m#S-n};^lk>1jl-jo{Ecv{_) zPn0$$Dm}M%*B3s**lP!IkN%6nH|N-IhUF#=o7cSn9z37l9DcL;&Ehu` z{GDEp&xwC{ZH_W(qhnfqVatO0!tImz#t#3hpvf&-Q_zEnNz4pw+P<~6>6KCJcaxxp zslocnji;UQ_1IkM3qwczNs%6^E0)#-=~xr4J#U@zjpOkCtJ4jAs%!Y6ll)tQp2S zzrJt*W9{yiP6B`Aeok@q?@@|NTR#&R5Ep`6}3Nso+$bm=!{ zEPEIO&wR_ZklV%oaOzOLv(1Bf2kGl<`r}^uR?;cU9`R7_!GoLRFEwqh37(Bl^kra& zmTDz4F*Y;qXRv!Q#tw9(cIIEQk@9k+=Sa_y)LN|49C`{7>Y68UItbPw-go6P%GMbh2KLJ02hLiRhlYxbO6(x9k*K1e!ca`*FpKjo>TIqp1?Ii{@MJ4uhsG3nB6&3rsaU7qC&&TZg-D{WA| z^I>l;*O5Miwv_&em%fJiLq;(3$GFUxzsZ;x*XJ~5)~%U8@^Yl-NY9bhLLD=I%-wci zd4;*#v4Qym53j95*M%Ry3J(tFZ&omWn!65UNi%;7D$L*3LBagtdp7g8hJVdpmj5Z< z{J}%r{QYD%^LICJ-Uj^N;@+F=@TQM3hTJ#pxNadGIOc0y@FFvpw=kD887p&{g9hzh zbDLyD^Q`YxW*Ikm+9xA?=B9x5pRP&G$xS+I-mUt7w!UyiP3rqQvw@F6^Y|0(!#A;x zxHDh>J1L{|gOyG>^`$=4pYqAO4f{o*9k@EkkH!*Yh$YB0tvM8UmowJuf$e(QyusAl zwSEY4Ebpqfg|-f1tjK1k-c|)`qb%s){8y3mh?3?{Xvgjt|tBd zdi3f=8&@?f+PLL9?Ay%yHs*i(-O$0c(7}s!g+0$>1GxF+&Kr^Pa50LVAkJIY(FEg{fxr)b6BeI@guSQOytg1=JD()*no}=Y(N?> zIBU|_pCnFUr`E##7H_PfS)_?4UBkGwcH7bacS5J)Wd^serwaG|o_g>e?GGl6z2b|c zsa^;CW-Ik%2iXFD*tmlj8|dAn&$8*z-M3%sUV*;#oYU3Jee=v~2eKP_6t9i~#;k_#V|$k^L*G}BJz|FV8M<3@3i=o>7@-Hgl_hLMJ-_=@mB=kQd(EsI&xKHmH=q(eoDa33P;kPEUfo;*3WW#wNHYC|s2|cSX}m{iHii=e%V650UOHV@m_IUlUtBr6 z!~ohOp4->-h?)9QgqMI1bI{4GrWSc}+?c^&$n?y#ogg)9NP9NL7;w@{FxLPp; z)+SL8JRR61+GXDXmL!{m?#2q!Uk`M(RT_t%zAH$-l5~CNCM>@rNWYo%Uy%NuO(I?B zuf60wn*_EB59?cYjwwYQbpBo?eput~Jlw6;$j)-;zq^p@7#T{W#|WKs{* zb_{DuVRu-Wx$D&0p>^0qCgiazJTRkvxUnn9Ua&Ir_t+wyI5mYm!sLC=<~7uiw<63l z?M*q@w)cNdO<|8%nfbd@6YUWVo;`x+TJ7J+VYk9JjXlEU%O1hAw$k(FpJ~9-U!QAkQ1S!?*-{ zgzONMF}8$}l&6m5|Ii-6dnf4;{q7~opKs-LWK=yHdxY!`8)$>_p*=$JnX)^qvFXoP zd0pul(ixA@>$;Kg=GPZ=zCe1p(SN$p6OeUJWUSq9Ay;LwM_`9A|9j|j4|>7NF}(-* zxqBCRyO0~+)ZXveBY5v5Ju(*RhxQ0$@X#KygEpj-Qa-dt2*%vv z6YLSQE7&7|r^Fs1I|Mq7u|ptd89M~J&8rPDdjxCM>9fzGcjR6K&NjyVlpV|CjD^0x zuCbtpn>l=(Ih<8rc;YDNmH!fZ1h$CnYX&zRE_!{KIeR3Sv)qHU`ye=eF*d*GP_kPX zTfzp)Q%7?g+9P=HBt0_6v=Q1P?x$`8Z8Y$|j{lcwgYuz0LUX)^^bB*X^hdlozMJ`D zjU!Kb&wyiM_`NCp3OAfbTIJVz*w&Xw(Dq9Iyy9C>=C@H9=C4g_K0h#-$s4vbUtJ45u%r?Nx$2sKj_iRGSct&>=D;uk6_-nG5^LMaW!=CJoboZ zu}9p3Jz@nk@h$8TFF_N_>iTAnU>+m(2w(+gO&WV>kASWX-ZsSS5v<)u!GW_Co^dM+TnGDH6!r@kHHT-4&8PcB!2b{M0Y8Kf`1|;PAB_2c*Wv?SgAaH$KHydO zfZOo_@5TrG20q}|@d3Yv5BOL3fL}$o*@X|dvpbDlJdM4lsBf)7_mRFe&eOMM8oyc5 z2i#%4>Bsxvs83jR`>KD98`ZtycUJ!zlBXT3e@Stvbg%bxFY)37$sgQ8e2lMq-J^G_drg7PJJ7wf4qoP4 z9%dcvW!>vVzn}Z7)4jygax2mWbgu`bd;OHQYEz_ri#;8Foz{3fe{lP^%j;hMMV_a7 z-Cn!O=}HmZ>-HJx5#@BR+h=^v=9TJRx7T)z*lW7ilN$E`>0Tp_sH}S}8wQ@xo8D=< z*SEn@T=&{M?%l6@Ez!8&LAuwN?eLu!S;K9}mro(L$QNvNubCRltf=mFC39Fw_j-6J z^!hOJ>mx?y+x1Swn9ae;4!T>0WJ&A+CFE)VN~0*K3>+dnf5$lSNxM zFxDP)FWvF>hpu}q1_%Aoy}sC&6c>UO8&^u`x_`<-QUuk6@O1L*6zeZYKO z)6lu5qI02ty@vkvEA+2d(Z6<0BK8*jYv+&}Y&tcCYmj$x-9_E&Bj`O9bT8xU@^r7F z?~51#)s5(0#FgwIuB21(c*N*cipR~3u)5czkF+-bns$J53$X`R0H4#nPNw}(&q8NZ zzU0qYe)^k1y7aFZq=&j1WhJA&&o3)ojr5x-do=0o=xDM>J}sNIwO!|SVY5OtFAvo@^XtMN^{Ha6f3!cS&m zC#f%8GKa2aVq%|Hj4ZLU&q`+^cJ>+4r?EDl;$JbeZTwH=|M8&wPSsZ|?jz|!2Xm^m z@+H5Yhpq1QpxUK9bTJdlyFu^xCf4z;Sl>1LdqUCtJVelN`zyv)SmTEEwzA>e6zg6_37=0_N#xvEe0dr?+? zuoAx)>1F+1*nN%P>sf36)x82k=wpLTf8I+^@OzyGj*RZ5v33W3uj?6WS-;ng*m(Yb z_TE2E>#EHEf8X37Ga!Kiq9Ov3@vEX@6^UGK9LpbAC}^ml;L@&@6_xF}E*03_W-EQO zNjG+LHwV!eKt1)k2q%Fexj_jvC0uvg~}WDRuL=G^Nc5B@Z8 zbj7U6-^sOlcDOa3dv*Vjc2|?Vn1|cx_Z`%C=U{v8#kiN8dofSD=r`GajzbTfXos70 zZn6*OUJJLe?o^Pyex|la_R<(`4bQ#$iC(AKb1&Ajh+gfv*9C_`uSv33{9JQ0{fvB; zcp0_>h#fBLuWT;O_)R_V=U$KH7{8e8^+DPYm%T1jyC&MP%!cP)*9~W^ph2@wU~NFLy`HpoxGSridx4|9>~QvMV|VM$y(nL{wdVY$hjXt72TJ%QE`n-U{bl>zT)w^>FS5|Gb<1xl?qJ zuF(#+r*kjO1?bxJTf({5%YQ)jf=;!T860=+r8R%384G;Uc;{Zs@ebA-bH0Th_3gj0 zvX|h{v4L~$HDY@e*(;lDhx?8-sT=y*$HDq%@grn?9Bd*yiG4Hf*GNAoR5Re3R@os-!|~j$H8|@IP`H~;M|pzzk(-#FXh}^;cuC|p^t-KnQ-Xi;D1cs zqK|{GdwBot;r-0w$(O-(J)B|x4jsyG(V;wp4rMp`lP>fTo#-BPPq_Q( zqCVx>=Rec@+fef4VLLmo?@Rs?&J*zV+VMK z?hSW0gt`j;BfW{mGr9@Eo!&rUr#G=UMsFgx)0-&l^d{gq`8v{@@O`5q$4wd1n^49pQMZev51>6pm!o#MJKnbLMz11xmHvtJD(u^iS2B8)-C;bs zJ4u@&y$ZN$bD3U+JU-m$FueXzzeIW!%J{HXMxAv(c+i-amQe zMS2y=^Wm;ef*HLEWf;8*-`G&$8`1ngZ!!n^eW#=AO_|~yX4_xp4zpx#=}Dv?c}V&W zdxu#%P3cMCZ=@eFdX;;LgWswA?hZ3!rf*L1zk{Bn><%;YyyOlub3cBE`BK(0=}jh5 zR<%3K)Bia^Z}MrSY~40`bIFn^~X^1@i; zn+f6kiS97N1DD7&qZoH^67MjBn|OyAc%(ZS6^4z?Fg&%frycIu4C}p>!NAv1mf#Ot z*+OvXR3=hC?+)|t{*N_z7P6Y!nx13yL~o+474I-V8EX%=#EEy9!Arcu3_Q}EJdd0- z4|!)E|HuqR-?PV)pH=5wzz0*7;9I@6NT&kK=uWELVRkmBw9T~pVeB1e%_-cecF(Y~ zH)%QG(H&;;Y-28Nr>;9X>>XI-m_3ZUbSJ-MK0m`8-_2a@dV#z%s_0JECD;tNTAN|% zP>zw!DgR?+a~iW5ZYbKE)?*u3=??Q})fV(XW(-@Ax2Ml3+|Au9bB9@X?pY%vdhH1B zFxQJ-@8jGWU5nQL=nnJKvGJ8HF*u2Ln89UzD3sk{1|I27?j~;oWi;@=iGTDM=C1O+ z-dL^&K9I6DQ`UVR9GyyJ^G&}nmg$9gYGa# zchKGVp<^0X$!0id{5q`7aI3W$UT1BFvoV|Dj^g-jev0wCi9T3O{jpQk9p+o*KL}C99Gx3sj26;>8QpRSuFYYi?eyw+y zKb4}s(t%vTxL(0{qel^q#qTixM)DiyXXf0@=}uOXk8q#dVP@PrmV0-YS3?IkVl%u3 zo8il`8GaI*;U~O1%pYC3BMx{H<>15r> zwy&}7C*2<%S-d}5Nfzs?b8Td>zPrO&qYQQidwI^2!@h!itaI%nlI5_yb?y%5^K%Mc zlP+T)<*;82=w6eza+vr_cW?8Hl$j)lt@7cX9QF@B+>^sT?ZZ7e?Bl=>$zj%ZxVvGW zWyC{rSSatl5^|WCAIM>{%XoB;ogW8S4*RkHo!-k~=H4c9n7Oz4L&~alZ}YLn1Uam= zpSidBQ_{TiYwm3xk#v5|z0D(yEET`EiJW!koL0nDcA)q;J#iG8wFv zdz-AS=KPv6-1+s(+(k0y*Krxlo?oBW4L>y+K60$#lXge{FAmB9{wSCUD`NL?XGlw9hbq78+Hx0 zGT74zG8i&}c=$d)zvdju-TRx1jbNqo>*LfG(5|Ps2U+p_ zIxd4DcbR*)lEKy`$Y4{e$Y9V@*}YrIUht(o-rH;~j^A_e%JK8-(-Q7&Zcw`>+Of@QAh_gghYtJLzz0G}*!S?0++R0$78}FwN zj10zFX5_Tpo(#siZeZxzqI;V!AZtOdM%IG9&i-#t2BSO!XWe)^?}hYM2D|#Y3bwp9N4p5?4-4`*G!Hw~qJWp1gIm5BKD) zBY_{1w+_i$ANJ0vUhC&xW^UMXuTMYo%E((E^}o|gd8;nPp0y@bK;ANUH9t&Q)$VHk z?N=(xTOTLQlef65>Exs0T}@;v?rM&xByVw7)25ZnTin$galquQ52)SoGp~J=w{GVC zQ8jrh|KhVY4uIBsHu9&=)Wh@USdFwlWs!iS+M_XU-^49<1&t`w* ztwE0`%Ui!gzDKT!{Lz%$)vR#lb;6e`$XmRZ(uZeSclMcGA$K%uc_-yVI@8)yv@QHq zXH|L2oM|QA)#NNxc}wIi>>p}mMp=^2?)Pyep8>xb-0uRf<{PKP&JbVq=r8}`)p{$X#Lh5Qmsk6(6mz~6 zs}uD#Z@}n{kVAe;`^Imn=+?{)D{md`=vwDn*vp#xndm)aLm^vA^A^ez{BvKrLlWekNn8Zw~XnbFZ~Cyj%I~{Y=?0Zc^Od&y*eGI?7uo9anfi z6M4(r&m2No)$V5=v%0dpbtGv{-m24GfJ;Y~op03xpZws+M0v}kz2m4bEhcZ7^41=8 zVC1dtIfXxQCu*PME!NezU()w-pDmKNG+wM_{{75<%U6)M;(F)dj1gyGiGE4JO}w8e z-SUD8en~fz2R&%lBlf(Ym-jROn?5q~7X9VUw+7SJit<+c{G-zO7I=y0Tfi%xZ{1BE zont-hwWR|cw>#f@$berR!tq-a#lDE1ULwmmU4erQA=UaO`dbQ_U&%RJW-r@|X=JPFZ z6YpmNk8BLFuZnC8WlQMJx3+p?>7Q@4dhjaeTNBmhYVwxGk9wHvvLm zI^WV<*ksSHHpOfVr_U*TojyqPjl;T=ct4Xl?w@b{_&=?@B{=1|^R3%B_d?$4m2aG% ze5q(-m>bC372`9-w<)acp@EO70I#nAACL?;Z{nuL6yLp#y;;#l9j0+Fy>3MD?asX` zymvNQOW$*i-b&#;k+s<+Tec0(6pqA>cM^Mb9q+N`X7j%4?95F393P1t=qL5wi~6hN z-4nHQXwVYA0W)TP^fpJOZ}FXWzEjV4+6ETicNs}M;0@-IvSVfFO%=UuGQ#Fn-)_)b zD6*|jla`LX4P)!pPMY2^;eC)6vmT@}Gu4i$uEL`(W~@>tG)C|W-&Y?weDnQdYX5$~ z+t*R~{&%k)S^RFS-gQ^=ju>?>$y;mPM)pPB##OG{oP@e%OW&6fU49ii>JnOv;b@G6 z*UmVt=>_hW%W(BZ?Ev1kNtrjA^~Uhc+2iredwhQTDCmv1e8*}0hGWmb+q1l11niRh zc)>(0WjX9R1y`9v%i@6rHS##C3ne-0Qw$pCEy zW$jIuzMHKvQJs!fADjMPl0QyizRfz6SKV4wU-c2+(YrqJ{uiyN|IJ!J-z&_0#q#%z zZ9mtg7>CMzUAAtUzUCX|&7u0BdioGAJ$u+=FD*Zsw~CK}1`mSDemYc}9rH=*gn0#}ZU-oGJ z`DI7(&o6rv|NOXz-<;-`9l`&Iy!1X{EPBGHsym4{1f1}(T4$cufdmQHIBa~b;IWD2l98MKajsY zdw%}5^!fQs+4J%n)92CG(3kKs?{4hmzJ=a=eA@utdW3e~0)0$9g0~z;2Il>$p(+PI z1$W>-;C6fu+?Kr{zbSn|eq(ka^Y%VXYUtNHyGSIPig!U;qGP3mt}g3^%C=@ z_LL*>F9xl30&{d`=xG9YOZY9~w~!yQvay?-%m3;88u-oTC%dT`{HF7p#&2plJ-tnR zL|LMtf28l)$gA*YOh1;>(;J1)cSS>237_vM{0ZSh|8aUcO8C@KH1sjyQzwN#Xv#0A zr$NG}J))sYg-`tzzQB}UPERlM7E9YamANQ?zVKFJSLF ztnq>Ll3%bV6?vulWIi?N4L8GE4JqQkwEX+5k>MM3-K}+x`RnA@=(FCglUrHSwz5ub zW$iIE4jtCIPB!DqznS;koAFW7%zN(5`0{VYmwz+9{G0LRFT2s)jYZnO!mJe+=f4N7 znY9ag|7+Emazy(E&U)_F(#yw>nvm#;1b9J6P-A&RRc>wf=3a^>1aZf6Fnf`(s%5$FuIA5EL5CH!k2C7x0aR zd}ATsIG=BPAb%VC$R_p`?Iq3ZEv8;e`-R_NjjZ(>f6q6&+j^ZtNC5SFUxNwzZLwh#U*3su}d_!~O zPoe?JQTRDCcIESBjqs_D=7`?;(_XCb4&f)vm({|j?wTWd=dX?WDf}x_e))V^DSX_1udpDWmZRBSKH>TJAjm>-`%zIel zZG<&H%$~OY7Te9bkEbd|5z6_onn>TOe4yIlyS{>RA8!zDKd8{4L4T5jcAU%3(fi1k$U*+v;1@HMxPcRcc7`?R2C#{};C zkLHc#t&}khS+xX@bzwrk#vK!a!W_~ihvvreZOS$BQ+9D){Hy9<cWL?v`~Op(s^XWXy7FL~TQ*~@W%a$m+>V^G7m4@(+%@|KJ{WBJ4b)yMr|(haRa zBL`yK2OmV^ez?YcW%+zRjd9l+fIWnnYuz)T!x_wD=vni4&>-Vyk~z#g25#oDXx*E~ zW^RoN=aR}Pna`t`Lz>gmGc8&_)-&I(yqmf-Ft1lKuPL*G^&^_sGwi%(d>3haXE3jQ zJm|p9>$%_8_}clbdCh#5yeQdJ^V-N)%tg&>$z$!z>21vE?ab*N%;}xX>0Mfz!g>8@ zd|qF_D1{8VDE|)fp2SaOs+_tv1)pq^tq67h5In7TmV58xy>{9mm{|kp$2*eNfNZ%g zROM6NNz!4xi*Orjet&p=#ouk?p)T9g-8Xo0*M6)ede_~_T}HpgH>DTTT9is<3Rgd? zJ*UEVQ=U#TR*vcppP_fmy>o&Jg&bWj3>!ep`N*B}DL2tLDFV3GTJap7^NLSm$1FMYnY3j;6SlbUj zS>xW)sP`f}Mh7kR{CA??eG~fV6ZpNEpLA2RQ$fq50YTwAXD}}(6#Gm2-(M+jclWc) z#=Wg^qP~MpyJK{wrE@Ivk~wO=*Lum89COQjFEgVtUjCp=)BGv+8~>(nupYa%ZfCFk zy!%GmDUEO78`4Wh>8u|&yY%3s#>14(9?}M{uy@578@e0%g?fleG{C-EMg!314nqU0 z9)EIej1FSuh=}=$5)|ivtlahY+lKdQV$9_uV`iE(E5X{ioL<2ah6ow8mlHb9X9JH4F zd%IpFHG|IcMn0FgErv}G1Zd-uve+f1i3o?cK!Pgqywvct{-k@cRi{EQ}(q5iQ2j{u6 z@6vZ}3R=SWn8w>3?oA=?TKH{;E1Byymp+%WZwy-QbnzQQ{H5UEOy9b?x;Apg)3}U! zZs(5Vt(<54cvOJC0KGnaLtnIn?HJRzZFW%jL5t~&mbH`L8x@df_awd@*~D_~u*Lt7JP`5UsFBx6fw3ql|3} zW#`8JxFA(nO+NHt^O5UY9tigw#_!n1CIb%)9KTI1lfhvh8S^XAKoV+9S< z-{S-N)6&O!aH0Ddxs_+lWDT8>TVeiBnxwYzo!pYsXMSmrqffraT9t9-vsTIX+NplL z!=nYIKh6H_r#}@GBHB>;=|RgF(j_ODI-hRnWeRUUSlTPr`7_{Yjyk#j~c}`0^c-w$?Jk7X2#agy(ppk=S-bK0ekH%AL zsK(mVjWrZo$Cm4eOSWlSPaP@8(2(Mr=Cu4bB;&fZQcwF=f${2&H@|1z<6nYVeKzye>v?L%4J-B9IYGF z6F#z?w|KSA{%Q;L8%*1VQYYG^b$%7=nb!I%k$qW98(B+BWvXl`|3doIT_^D6iJJ3yG_(21fjR;?2)rYz=l+5<$MGChUt@`gjrutQai^I zZVT7D!rKVf^$$MD+1q($PLda1ab_7k$L5~OpC0Blb2h~H z(nb}!svizr4XH?1b@l0TxJP{J*V$&m1)MftKo0)^>xvh_xTxs*Mk@@p>Dtw{hl&sq+vUKf=b3us2ovU>!WmRA?%*v zjSuZ}x~rzvvDlF!cR>?v(1FIGj(ukp`%Y8qk}W3?7mmV=7kHV%n}G$!#?;$as+1|+ zgkL85pRzK=zm%2fkLOPov_#`0IQ?gAWv}w~=~hplMV*uEau4S_>O0fFvum)+tyE_A zHEw_V;IN{tX{9zWrp{jZN6>0QzkI5qtupI_)=!<$m5hsnv(86w|NHiQFVYQB#&X8Q z@OgwkO}Jzo=pnD{om}3(jpuC$_j$LMnSFtMC#qMrI1j{kig)@bWvCw{>o5mq2zG_O zQAzf(-!OZL;VX|p{vVCpz?v1`w_V?`=R|ez@(1iaiE#FqL^yj*1aI|dKcSC}O%`jo zcxTB6z3Jl*sQorCHZ`SrZT(C7ct}vJS5i8>KveIf^b>kWpX{Y)%g1myb*x*JO4gqz z;G;J{#!V;V+xofj4eCdi$ps~ChmWY*Hu#FF>1Xzk{yr}~p)KcQYfuOM*0Y9-hNWK@ z4ZqQ}F)(yZTUvr1WO(H{)t04ln&7Dg)7s6RQ@Na2f7PX8{BS~@zs9+J#k&@Mc_)Y; z4W7fM^*oJ7z2eB6$ltr+W6ar)87JV1Yd?$kwMm~GD@XC9a)6hWlh%31zzutmIh&ai zlD~c1_*;;#Z%vQM?;IQOb}?%t`XqO5Z*+<92GaREUd!0NBRe~LfgSJwJ1KV;vbAj9 zr3Vu46P~-A4v*#Z_C*~)rF!U$e<$DHg*>lwN9m?mufJC}Zrt&gTKfro-?vxT!8dnO zpIy}B`XRv$?}WeT9!y^9v;kc8^~M3gdEIs`+W_w&*tPwwJrv`z5j}=^4~F|B;u|++ zFE(-RUEHraq^N^w8@OG3%g62FyNdS%cYNI&j}In|KfWj2;Ht^@n{ge0y(RVfHRp$_ zZ=K@Q{W0PtdV+(03`2k8HH_i8`#XmC`;3j@OLh$RmW_+W^~Ug}@pXU27+zXFhA~{m z@TJ$;7@B$5&KR0`IiU7=IhZlMGGShx^@j3!Ib}$~yo`%|ZA0 zJ@&gE+Z6WQexi^&5$G ztD#LLbz@y-4(^4w@3Bo`-%WmrIng6-*p^_g#>eczjFq8t#=^uI&ydbNer8|ji?u^` zaq2U}-@LkfRdu@d_^K12>*)#W_fHe}s*N@BRlx&qJpPr~mwy#ouO5A^u2-%5#~<&@ zzWnsy;0EqimGR4i*n{Kza@XL5eYrRMa%}%f-1qizPj>uBPy4yPnSu{U)r~(s*d8o5 zyt?-3*YJLOQ;dGU{#vEqeOV9pbHDvC^!stqZ*0HS-r618ZwDQ2>DS-WM8DpCD|t`r z(yOxHT3(~4y;}PkH2hMk?ovy`m)2b0S8Ff*rfAsPOSQM|UGZnNmm1lq79GV4gMu6W zB4N$#O4v((nzWb3Vj9(k>< zN3X(udM9Ix?!9b3{b|B}y3wsiRbmyB4C>30CNDC8Xaio`$g%MG<+PRX zeeJCQduvMcW%gI}DEqL#y84?syh3s{tU)h(u<1;%7Z2s_LHHJV-O71CtqX2AF+mm>bXbCJElJLkZr?kL4)xiutgQEB zj3@rj*D6oE@3LOad(kzF=YHwHtB>d2o^+S+6w$d(Pq^{3>DK{IVe~Kiq6449xPCTi zo(@fzr*0qeW%lahT9e%D&ZeE*+ZS?s**SHrp6>jv)^BNlO{`}xb?2^)ucT~$U2Glu zVr(5Nx!3#E&(9xLcCYuy$Le%<^Cz4KVn3?;n{6}tac8q%VcWER_!;hpuYrCA{1p^- zj_t?0vZogQS9g?V^lwqPL*eO!XYl5T!qW&(Kee!3;i(}`PT}EU-rWihB@DiS4-Ufy zJ}?X)&b^T~-lr7KP=&kkYfkt`g?X=1$Kb~Hxj|vuMsO*&o%gKU z=LLoTReUaXobxh;hE3e@xo3$V>fB)d@j0IxNE&$CsHg5+zpQ-euzv<~ z|ER5-GP|KW?l|gSH0b=s%MLK|8~-ABFJ|Pc;vW6yR7R}aNzRsh>%f`0t=ydrZSNnK z-^VoTpxzKLJ|Jh4|9Q%@IP$CRe2-Jcm9(MsZPo^cu$A%F5)G4PXX^RZ*RpwI`_Oyj5KW|cW4yQc5 z6Y?Z+{DVjFCsYn`eUEg#2Vw9Y0sb^_)z^nVOxvKvcKi?Fhp6y7+J^rjX!W#~=Uo`z z_&9n9;m^-0>~-PvoI*dw&fqg_SC`<{jZ~3!mKm8!*0UE6~2-1x=dk^!fV2? z!M{Gl(S6`I()Zh@2eSX1k59IiGDfZ0yt@K zTGNf9FYbPazTK|Grew8f3OmUW*mm(Qa3`>?C#;Q${2X0D|Ln5xhduam>IJU5ryTHY zY|u|KG&I%H6XPa-ExD=uU(Wv({9nfZHT*B*e;MD;hTk7FOm?!+1F)_qz3(gmZ#j5^ zKjOg`@qJ)w<2GnPcj?Uc8DIH+GV}~w;oL<27xKS^awxlNg;&l3TMqTuc0Kp4*Mwz_ z>!-G`29vIOchV^qj(W>brw)?;JI!uxk;%(4gPlqE*(4u5{3d zABn=;0YPCmG&;8){|`f0^HQ^aF-db-<)t6J1BQMMY;=s_&W9SM}?p|26is zeYNNS|B<8g-h$pkFt96w!iB*6eRl&gw&?Uh?5V>$;zyR;5%2g!sb79`H?fENjX{+= zx4|*P%53Ll3l|JYw$l!d@ZjlE-`BeH^xFZ&J8sVsc6W-OS2!KsUo-cq5iLcmma*;tEUftPX+j#3h)yuz$bg~thxJCi0-CQUw2O( zJMnvD_w3?kf1_P>*v!Z8???C7{Q6#-;zv37hLj>pf_@mtn$-{BVSJKTy7rEjH=%df|0;_Vg2SU$%zHfJ#wtJn*g8ZOy# z0b%V6_&(TjKH&$r)9uD2sx!ValKS1Hf1dtyWuK-p28Lz7o$ykHDf=%82MXhZvwa40)NJC!_5(2VlTC#*Z63V(obPHPHxLAghGxp-hli~UK9XwkN} zyT4#+d(h&>-PL_V1)7S|p?$yY_;DJs!S=^ly0gMt3L48fULT}YZ`%g};f(ErXQ)Tp zVXhCDYlDNrPuBxuoICKTlhg+jRF>_7BM9r>rTSnbVbcdg%ln|!v^Si4Zd|_a_W|dI zew#K_p!cW`nD;(@*azV}@cRIoE!n^D`N3VCe)!1<8g+*?x(}KS?{1D&d$b3%5@(&9 zO1$J=oWBNMT)GBVx<4yFv~}M7*;TYVet%Zq4dVA_V|CToG*d6u@DnvY@6^~)*D)Gr z;C1!EC$(=YZ7ON_i!*m$M!Ix-tGV~g}aW>cFA2U=%gflKrEfMm~`#C%0DD1yQ@`_enb!HV|qv*U!HDw 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 Hygv9plYB7= diff --git a/src/mVMC/CMakeLists.txt b/src/mVMC/CMakeLists.txt index f80471ca..138b56e0 100644 --- a/src/mVMC/CMakeLists.txt +++ b/src/mVMC/CMakeLists.txt @@ -27,6 +27,7 @@ target_link_libraries(vmcdry.out StdFace m) add_executable(vmc.out ${SOURCES_vmcmain} ${SOURCES_sfmt}) target_link_libraries(vmc.out StdFace) target_link_libraries(vmc.out pfapack) +target_link_libraries(vmc.out ltl2inv) if(PFAFFIAN_BLOCKED) target_link_libraries(vmc.out pfupdates blis pthread) endif(PFAFFIAN_BLOCKED) diff --git a/src/pfupdates/CMakeLists.txt b/src/pfupdates/CMakeLists.txt index 5f313232..f5e5a986 100644 --- a/src/pfupdates/CMakeLists.txt +++ b/src/pfupdates/CMakeLists.txt @@ -7,12 +7,9 @@ endif(${CMAKE_PROJECT_NAME} STREQUAL "Project") add_definitions(-DBLAS_EXTERNAL) add_definitions(-DF77_COMPLEX_RET_INTEL) -include_directories(../pfaffine/src) +include_directories(../common) +include_directories(../ltl2inv) -add_library(pfupdates STATIC - pf_interface.cc - ../pfaffine/src/skpfa.cc - ../pfaffine/src/sktdf.cc - ../pfaffine/src/sktdi.cc) +add_library(pfupdates STATIC pf_interface.cc) target_compile_definitions(pfupdates PRIVATE -D_CC_IMPL) diff --git a/src/pfupdates/blalink_gemmt.hh b/src/pfupdates/blalink_gemmt.hh new file mode 100644 index 00000000..26982d19 --- /dev/null +++ b/src/pfupdates/blalink_gemmt.hh @@ -0,0 +1,78 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#pragma once +#include "blalink.hh" + + +// gemmt is not part of BLAS standard. +// It's currently know as exposed by BLIS and MKL. +template +inline void gemmt(uplo_t uploc, + trans_t transa, trans_t transb, + dim_t m, dim_t k, + T alpha, + T *a, inc_t lda, + T *b, inc_t ldb, + T beta, + T *c, inc_t ldc); +#if !( defined(BLAS_EXTERNAL) && defined(MKL) ) +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void gemmt(uplo_t uploc, \ + trans_t transa, trans_t transb, \ + dim_t m, dim_t k, \ + cctype alpha, \ + cctype *a, inc_t lda, \ + cctype *b, inc_t ldb, \ + cctype beta, \ + cctype *c, inc_t ldc) \ + { \ + bli_##cchar##gemmt(uploc, \ + transa, transb, \ + m, k, \ + (ctype *)&alpha, \ + (ctype *)a, 1, lda, \ + (ctype *)b, 1, ldb, \ + (ctype *)&beta, \ + (ctype *)c, 1, ldc); \ + } +#else +#define BLALINK_MAC(cctype, ctype, cchar) \ + template <> inline void gemmt(uplo_t uploc, \ + trans_t transa, trans_t transb, \ + dim_t m, dim_t k, \ + cctype alpha, \ + cctype *a, inc_t lda, \ + cctype *b, inc_t ldb, \ + cctype beta, \ + cctype *c, inc_t ldc) \ + { \ + char ul = uplo2char(uploc); \ + char ta = trans2char(transa); \ + char tb = trans2char(transb); \ + cchar##gemmt_(&ul, \ + &ta, &tb, \ + &m, &k, \ + (ctype *)&alpha, \ + (ctype *)a, &lda, \ + (ctype *)b, &ldb, \ + (ctype *)&beta, \ + (ctype *)c, &ldc); \ + } +void sgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, float *alpha, + float *a, dim_t *lda, float *b, dim_t *ldb, float *beta, float *c, dim_t *ldc); +void dgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, double *alpha, + double *a, dim_t *lda, double *b, dim_t *ldb, double *beta, double *c, dim_t *ldc); +void cgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, void *alpha, + void *a, dim_t *lda, void *b, dim_t *ldb, void *beta, void *c, dim_t *ldc); +void zgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, void *alpha, + void *a, dim_t *lda, void *b, dim_t *ldb, void *beta, void *c, dim_t *ldc); +#endif +BLALINK_MAC( float, float, s ) +BLALINK_MAC( double, double, d ) +BLALINK_MAC( ccscmplx, scomplex, c ) +BLALINK_MAC( ccdcmplx, dcomplex, z ) +#undef BLALINK_MAC + diff --git a/src/pfupdates/makefile_pfupdates b/src/pfupdates/makefile_pfupdates index 4484795c..bd8502e3 100644 --- a/src/pfupdates/makefile_pfupdates +++ b/src/pfupdates/makefile_pfupdates @@ -1,9 +1,5 @@ include ../make.sys -ifeq ($(BLIS_ROOT),) - BLIS_ROOT = ../pfaffine/src/dep -endif - OBJ = pfupdates.o SRC = pf_interface.cc HDR = pf_interface.h orbital_mat.tcc skmv.tcc skr2k.tcc skslc.tcc updated_tdi.tcc \ diff --git a/src/pfupdates/skr2k.tcc b/src/pfupdates/skr2k.tcc index 6d0d893f..0b8cdcb6 100644 --- a/src/pfupdates/skr2k.tcc +++ b/src/pfupdates/skr2k.tcc @@ -8,6 +8,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ #include "blalink.hh" +#include "blalink_gemmt.hh" #include "colmaj.hh" #include diff --git a/src/pfupdates/updated_tdi.tcc b/src/pfupdates/updated_tdi.tcc index 8da27da0..f31e7a56 100644 --- a/src/pfupdates/updated_tdi.tcc +++ b/src/pfupdates/updated_tdi.tcc @@ -8,6 +8,7 @@ #pragma once #include "orbital_mat.tcc" #include "blalink.hh" +#include "blalink_gemmt.hh" #include "pfaffian.tcc" #include "invert.tcc" #include "skr2k.tcc" From 4a524822f0295c9cb191d73536a014d9ca2f233b Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Sun, 13 Mar 2022 22:11:58 +0900 Subject: [PATCH 08/73] Skip Compiling C/S SKPFA --- CMakeLists.txt | 2 ++ src/pfupdates/pf_interface.cc | 24 ++++++++++++------------ src/pfupdates/pf_interface.h | 24 ++++++++++++------------ 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e34f0620..caa668ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,10 +40,12 @@ if(CMAKE_C_COMPILER_ID STREQUAL "Intel") set(OMP_FLAG_Intel "-qopenmp") endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OMP_FLAG_Intel}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OMP_FLAG_Intel}") else() find_package(OpenMP) if(OPENMP_FOUND) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") endif(OPENMP_FOUND) endif() diff --git a/src/pfupdates/pf_interface.cc b/src/pfupdates/pf_interface.cc index a19596a4..a95efe01 100644 --- a/src/pfupdates/pf_interface.cc +++ b/src/pfupdates/pf_interface.cc @@ -51,9 +51,9 @@ objv(iqp, ctype)->initialize(); \ } \ } -GENIMPL( float, s ) +// GENIMPL( float, s ) GENIMPL( double, d ) -GENIMPL( ccscmplx, c ) +// GENIMPL( ccscmplx, c ) GENIMPL( ccdcmplx, z ) #undef GENIMPL @@ -68,9 +68,9 @@ GENIMPL( ccdcmplx, z ) delete objv(iqp, ctype); \ } \ } -GENIMPL( float, s ) +// GENIMPL( float, s ) GENIMPL( double, d ) -GENIMPL( ccscmplx, c ) +// GENIMPL( ccscmplx, c ) GENIMPL( ccdcmplx, z ) #undef GENIMPL @@ -84,9 +84,9 @@ GENIMPL( ccdcmplx, z ) for (int iqp = 0; iqp < num_qp; ++iqp) \ pfav[iqp] = -objv(iqp, ctype)->get_Pfa(); \ } -GENIMPL( float, s ) +// GENIMPL( float, s ) GENIMPL( double, d ) -GENIMPL( ccscmplx, c ) +// GENIMPL( ccscmplx, c ) GENIMPL( ccdcmplx, z ) #undef GENIMPL @@ -102,9 +102,9 @@ GENIMPL( ccdcmplx, z ) for (int iqp = 0; iqp < num_qp; ++iqp) \ objv(iqp, ctype)->push_update_safe(osi, msj, cal_pfa!=0); \ } -GENIMPL( float, s ) +// GENIMPL( float, s ) GENIMPL( double, d ) -GENIMPL( ccscmplx, c ) +// GENIMPL( ccscmplx, c ) GENIMPL( ccdcmplx, z ) #undef GENIMPL @@ -134,9 +134,9 @@ GENIMPL( ccdcmplx, z ) objv(iqp, ctype)->push_update(osk, msl, cal_pfa!=0); \ } \ } -GENIMPL( float, s ) +// GENIMPL( float, s ) GENIMPL( double, d ) -GENIMPL( ccscmplx, c ) +// GENIMPL( ccscmplx, c ) GENIMPL( ccdcmplx, z ) #undef GENIMPL @@ -150,9 +150,9 @@ GENIMPL( ccdcmplx, z ) objv(iqp, ctype)->pop_update(cal_pfa!=0); \ } \ } -GENIMPL( float, s ) +// GENIMPL( float, s ) GENIMPL( double, d ) -GENIMPL( ccscmplx, c ) +// GENIMPL( ccscmplx, c ) GENIMPL( ccdcmplx, z ) #undef GENIMPL diff --git a/src/pfupdates/pf_interface.h b/src/pfupdates/pf_interface.h index b9f4cbf2..8593a12c 100644 --- a/src/pfupdates/pf_interface.h +++ b/src/pfupdates/pf_interface.h @@ -40,9 +40,9 @@ extern "C" { void *objv[], \ void *orbv[] ); -GENDEF( float, s ) +// GENDEF( float, s ) GENDEF( double, d ) -GENDEF( ccscmplx, c ) +// GENDEF( ccscmplx, c ) GENDEF( ccdcmplx, z ) #undef GENDEF @@ -52,9 +52,9 @@ GENDEF( ccdcmplx, z ) void *objv[], \ void *orbv[] ); -GENDEF( float, s ) +// GENDEF( float, s ) GENDEF( double, d ) -GENDEF( ccscmplx, c ) +// GENDEF( ccscmplx, c ) GENDEF( ccdcmplx, z ) #undef GENDEF @@ -64,9 +64,9 @@ GENDEF( ccdcmplx, z ) ctype pfav[], \ void *objv[] ); -GENDEF( float, s ) +// GENDEF( float, s ) GENDEF( double, d ) -GENDEF( ccscmplx, c ) +// GENDEF( ccscmplx, c ) GENDEF( ccdcmplx, z ) #undef GENDEF @@ -78,9 +78,9 @@ GENDEF( ccdcmplx, z ) int64_t cal_pfa, \ void *objv[] ); -GENDEF( float, s ) +// GENDEF( float, s ) GENDEF( double, d ) -GENDEF( ccscmplx, c ) +// GENDEF( ccscmplx, c ) GENDEF( ccdcmplx, z ) #undef GENDEF @@ -94,9 +94,9 @@ GENDEF( ccdcmplx, z ) int64_t cal_pfa, \ void *objv[] ); -GENDEF( float, s ) +// GENDEF( float, s ) GENDEF( double, d ) -GENDEF( ccscmplx, c ) +// GENDEF( ccscmplx, c ) GENDEF( ccdcmplx, z ) #undef GENDEF @@ -106,9 +106,9 @@ GENDEF( ccdcmplx, z ) int64_t cal_pfa, \ void *objv[] ); -GENDEF( float, s ) +// GENDEF( float, s ) GENDEF( double, d ) -GENDEF( ccscmplx, c ) +// GENDEF( ccscmplx, c ) GENDEF( ccdcmplx, z ) #undef GENDEF From ac0dd8e89f2a9bc4d5c9ab4e016806d987a33381 Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Tue, 15 Mar 2022 13:01:59 +0900 Subject: [PATCH 09/73] CMake Compile External GEMMT, Improve BLIS Linkage --- CMakeLists.txt | 46 ++++++++++++++++----- config/aocc.cmake | 3 ++ src/common/deps/blis.h | 43 +++++++++++++++++++ src/ltl2inv/CMakeLists.txt | 3 +- src/ltl2inv/blalink_gemmt.c | 36 ++++++++++++++++ src/{pfupdates => ltl2inv}/blalink_gemmt.hh | 0 src/mVMC/CMakeLists.txt | 5 ++- src/pfapack | 2 +- 8 files changed, 124 insertions(+), 14 deletions(-) create mode 100644 src/ltl2inv/blalink_gemmt.c rename src/{pfupdates => ltl2inv}/blalink_gemmt.hh (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index caa668ce..0aa5a71c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ project(mVMC NONE) option(USE_SCALAPACK "Use Scalapack" OFF) option(PFAFFIAN_BLOCKED "Use blocked-update Pfaffian to speed up." OFF) +option(USE_GEMMT "Use GEMMT. Recommended regardless blocked-Pfaffian-update." ON) add_definitions(-D_mVMC) if(CONFIG) @@ -17,8 +18,10 @@ message(STATUS "Build type: " ${CMAKE_BUILD_TYPE}) option(BUILD_SHARED_LIBS "Build shared libraries" ON) option(GIT_SUBMODULE_UPDATE "execute `git submodule update` automatically" ON) -enable_language(C CXX Fortran) -set(CMAKE_CXX_STANDARD 11) + +# First, enables C language only. +# External packages only use their C API. +enable_language(C) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") set(CMAKE_SKIP_BUILD_RPATH FALSE) @@ -26,6 +29,7 @@ set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) set(CMAKE_MACOSX_RPATH 1) +# TODO: Is this really needed? if("${CMAKE_BUILD_TYPE}" MATCHES "Debug") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG}") else() @@ -34,18 +38,19 @@ else() endif() if(CMAKE_C_COMPILER_ID STREQUAL "Intel") + # TODO: Really needs separation? if("${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "15.0.0.20140528") set(OMP_FLAG_Intel "-openmp") else() set(OMP_FLAG_Intel "-qopenmp") endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OMP_FLAG_Intel}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OMP_FLAG_Intel}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OMP_FLAG_Intel}") else() find_package(OpenMP) if(OPENMP_FOUND) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") endif(OPENMP_FOUND) endif() @@ -56,6 +61,9 @@ if(MPI_C_FOUND) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MPI_C_LINK_FLAGS}") endif(MPI_C_FOUND) +# BLAS/LAPACK/Pfapack77 needs Fortran interface. +enable_language(Fortran) + find_package(LAPACK) if(USE_SCALAPACK MATCHES OFF) if(LAPACK_FOUND) @@ -63,6 +71,17 @@ if(USE_SCALAPACK MATCHES OFF) endif(LAPACK_FOUND) endif() +if(PFAFFIAN_BLOCKED + OR USE_GEMMT) + set(Require_BLIS ON) +endif() + +if(BLA_VENDOR MATCHES "Intel10*" + OR BLAS_LIBRARIES MATCHES "/*mkl*") + add_definitions(-DMKL) + set(Require_BLIS OFF) +endif() + # Build and enable tests # testing setup # enable_testing() must be called in the top-level CMakeLists.txt before any add_subdirectory() is called. @@ -96,17 +115,21 @@ if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") endif() add_subdirectory("${STDFACE_DIR}") -if(PFAFFIAN_BLOCKED) - add_definitions(-D_pf_block_update) +# C++ support for pfupdates & ltl2inv. +enable_language(CXX) +set(CMAKE_CXX_STANDARD 11) + +if(Require_BLIS) include("download_blis_artifact.cmake") - # Must set BLIS artifact BEFORE adding pfupdates target. - add_subdirectory(src/pfupdates) - add_dependencies(pfupdates blis_include) -else(PFAFFIAN_BLOCKED) +else(Require_BLIS) # Use bundled blis.h include_directories(src/common/deps) +endif(Require_BLIS) + +if(PFAFFIAN_BLOCKED) + add_definitions(-D_pf_block_update) + add_subdirectory(src/pfupdates) endif(PFAFFIAN_BLOCKED) -add_subdirectory(src/ltl2inv) if (Document) add_subdirectory(doc) @@ -114,5 +137,6 @@ endif(Document) add_subdirectory(src/ComplexUHF) add_subdirectory(src/pfapack/fortran) +add_subdirectory(src/ltl2inv) add_subdirectory(src/mVMC) add_subdirectory(tool) diff --git a/config/aocc.cmake b/config/aocc.cmake index a53a783a..258d9772 100644 --- a/config/aocc.cmake +++ b/config/aocc.cmake @@ -9,6 +9,9 @@ set(CMAKE_C_FLAGS_RELEASE "-Wno-unknown-pragmas -O3 -DNDEBUG -DHAVE_SSE2" CACHE set(CMAKE_Fortran_COMPILER "flang" CACHE STRING "" FORCE) set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -DNDEBUG -DHAVE_SSE2" CACHE STRING "" FORCE) +# OpenMP, libatomic +set(CMAKE_EXE_LINKER_FLAGS "-fopenmp -latomic") + # for AOCL set(BLA_VENDOR "FLAME" CACHE STRING "" FORCE) diff --git a/src/common/deps/blis.h b/src/common/deps/blis.h index 812d7f50..0627afe2 100644 --- a/src/common/deps/blis.h +++ b/src/common/deps/blis.h @@ -500,6 +500,49 @@ typedef enum #endif // end bli_type_defs.h +// begin bli_param_map.h +BLIS_INLINE void bli_param_map_netlib_to_blis_side( char side, side_t* blis_side ) +{ + if ( side == 'l' || side == 'L' ) *blis_side = BLIS_LEFT; + else if ( side == 'r' || side == 'R' ) *blis_side = BLIS_RIGHT; + else + { + *blis_side = BLIS_LEFT; + } +} + +BLIS_INLINE void bli_param_map_netlib_to_blis_uplo( char uplo, uplo_t* blis_uplo ) +{ + if ( uplo == 'l' || uplo == 'L' ) *blis_uplo = BLIS_LOWER; + else if ( uplo == 'u' || uplo == 'U' ) *blis_uplo = BLIS_UPPER; + else + { + *blis_uplo = BLIS_LOWER; + } +} + +BLIS_INLINE void bli_param_map_netlib_to_blis_trans( char trans, trans_t* blis_trans ) +{ + if ( trans == 'n' || trans == 'N' ) *blis_trans = BLIS_NO_TRANSPOSE; + else if ( trans == 't' || trans == 'T' ) *blis_trans = BLIS_TRANSPOSE; + else if ( trans == 'c' || trans == 'C' ) *blis_trans = BLIS_CONJ_TRANSPOSE; + else + { + *blis_trans = BLIS_NO_TRANSPOSE; + } +} + +BLIS_INLINE void bli_param_map_netlib_to_blis_diag( char diag, diag_t* blis_diag ) +{ + if ( diag == 'n' || diag == 'N' ) *blis_diag = BLIS_NONUNIT_DIAG; + else if ( diag == 'u' || diag == 'U' ) *blis_diag = BLIS_UNIT_DIAG; + else + { + *blis_diag = BLIS_NONUNIT_DIAG; + } +} +// end bli_param_map.h + // End extern "C" construct block. #ifdef __cplusplus } diff --git a/src/ltl2inv/CMakeLists.txt b/src/ltl2inv/CMakeLists.txt index 4b35a668..e6c0289c 100644 --- a/src/ltl2inv/CMakeLists.txt +++ b/src/ltl2inv/CMakeLists.txt @@ -9,6 +9,7 @@ add_definitions(-DBLAS_EXTERNAL) add_definitions(-DF77_COMPLEX_RET_INTEL) include_directories(../common) -add_library(ltl2inv STATIC ltl2inv.cc) +# TODO: Move blalink_gemmt.c to other subprojects? +add_library(ltl2inv STATIC ltl2inv.cc blalink_gemmt.c) target_compile_definitions(ltl2inv PRIVATE -D_CC_IMPL) diff --git a/src/ltl2inv/blalink_gemmt.c b/src/ltl2inv/blalink_gemmt.c new file mode 100644 index 00000000..03ddfbcc --- /dev/null +++ b/src/ltl2inv/blalink_gemmt.c @@ -0,0 +1,36 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#include "blis.h" +#include "blalink_fort.h" + +#if !( defined(BLAS_EXTERNAL) && defined(MKL) ) +// Redefine GEMMT Fortran from BLIS (which is built without BLAS API). +// Required by Pfapack77. +#define BLAGEN_MAC(cctype, ctype, cchar) \ + void cchar##gemmt_(char *uplo_, char *transa_, char *transb_, dim_t *m, dim_t *k, ctype *alpha, \ + ctype *a, dim_t *lda, ctype *b, dim_t *ldb, ctype *beta, ctype *c, dim_t *ldc) \ + { \ + uplo_t uploc; \ + trans_t transa; \ + trans_t transb; \ + bli_param_map_netlib_to_blis_uplo(*uplo_, &uploc) ; \ + bli_param_map_netlib_to_blis_trans(*transa_, &transa) ; \ + bli_param_map_netlib_to_blis_trans(*transb_, &transb) ; \ + bli_##cchar##gemmt(uploc, \ + transa, transb, \ + *m, *k, \ + alpha, \ + a, 1, &lda, \ + b, 1, &ldb, \ + beta, \ + c, 1, &ldc); \ + } +BLAGEN_MAC( float, float, s ) +BLAGEN_MAC( double, double, d ) +BLAGEN_MAC( ccscmplx, scomplex, c ) +BLAGEN_MAC( ccdcmplx, dcomplex, z ) +#undef BLAGEN_MAC +#endif diff --git a/src/pfupdates/blalink_gemmt.hh b/src/ltl2inv/blalink_gemmt.hh similarity index 100% rename from src/pfupdates/blalink_gemmt.hh rename to src/ltl2inv/blalink_gemmt.hh diff --git a/src/mVMC/CMakeLists.txt b/src/mVMC/CMakeLists.txt index 138b56e0..44ae92cf 100644 --- a/src/mVMC/CMakeLists.txt +++ b/src/mVMC/CMakeLists.txt @@ -29,8 +29,11 @@ target_link_libraries(vmc.out StdFace) target_link_libraries(vmc.out pfapack) target_link_libraries(vmc.out ltl2inv) if(PFAFFIAN_BLOCKED) - target_link_libraries(vmc.out pfupdates blis pthread) + target_link_libraries(vmc.out pfupdates) endif(PFAFFIAN_BLOCKED) +if(Require_BLIS) + target_link_libraries(vmc.out blis pthread) +endif(Require_BLIS) target_link_libraries(vmc.out ${LAPACK_LIBRARIES} m) if(USE_SCALAPACK) diff --git a/src/pfapack b/src/pfapack index b655435f..ebaa11b7 160000 --- a/src/pfapack +++ b/src/pfapack @@ -1 +1 @@ -Subproject commit b655435f2351c1f18bad0bfb7107822f505332ec +Subproject commit ebaa11b722dbb5f1ddc62da607592d2e301c0c4a From 282fae06a7b9d51a05cd867b71cea184ba74f5fa Mon Sep 17 00:00:00 2001 From: "RuQing G. Xu" Date: Tue, 15 Mar 2022 13:06:30 +0900 Subject: [PATCH 10/73] gemmt_ Typo Fix --- src/ltl2inv/blalink_gemmt.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ltl2inv/blalink_gemmt.c b/src/ltl2inv/blalink_gemmt.c index 03ddfbcc..4ca711c4 100644 --- a/src/ltl2inv/blalink_gemmt.c +++ b/src/ltl2inv/blalink_gemmt.c @@ -23,10 +23,10 @@ transa, transb, \ *m, *k, \ alpha, \ - a, 1, &lda, \ - b, 1, &ldb, \ + a, 1, *lda, \ + b, 1, *ldb, \ beta, \ - c, 1, &ldc); \ + c, 1, *ldc); \ } BLAGEN_MAC( float, float, s ) BLAGEN_MAC( double, double, d ) From 14022eb6baa64ebcb7823f9f08dd39fb8f043ecb Mon Sep 17 00:00:00 2001 From: "RuQing G. Xu" Date: Tue, 15 Mar 2022 13:25:40 +0900 Subject: [PATCH 11/73] Linkage --- CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0aa5a71c..b1f12b7e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,7 +50,7 @@ else() find_package(OpenMP) if(OPENMP_FOUND) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") endif(OPENMP_FOUND) endif() @@ -129,6 +129,9 @@ endif(Require_BLIS) if(PFAFFIAN_BLOCKED) add_definitions(-D_pf_block_update) add_subdirectory(src/pfupdates) + if(Require_BLIS) + add_dependencies(pfupdates blis_include) + endif(Require_BLIS) endif(PFAFFIAN_BLOCKED) if (Document) @@ -138,5 +141,8 @@ endif(Document) add_subdirectory(src/ComplexUHF) add_subdirectory(src/pfapack/fortran) add_subdirectory(src/ltl2inv) + if(Require_BLIS) + add_dependencies(ltl2inv blis_include) + endif(Require_BLIS) add_subdirectory(src/mVMC) add_subdirectory(tool) From f57786fa1ffbc979cc8023f1e1a6a5c3970c7bbd Mon Sep 17 00:00:00 2001 From: "RuQing G. Xu" Date: Tue, 15 Mar 2022 13:25:49 +0900 Subject: [PATCH 12/73] Safe Int Cast --- src/ltl2inv/blalink_gemmt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ltl2inv/blalink_gemmt.c b/src/ltl2inv/blalink_gemmt.c index 4ca711c4..35e4dba3 100644 --- a/src/ltl2inv/blalink_gemmt.c +++ b/src/ltl2inv/blalink_gemmt.c @@ -10,8 +10,8 @@ // Redefine GEMMT Fortran from BLIS (which is built without BLAS API). // Required by Pfapack77. #define BLAGEN_MAC(cctype, ctype, cchar) \ - void cchar##gemmt_(char *uplo_, char *transa_, char *transb_, dim_t *m, dim_t *k, ctype *alpha, \ - ctype *a, dim_t *lda, ctype *b, dim_t *ldb, ctype *beta, ctype *c, dim_t *ldc) \ + void cchar##gemmt_(char *uplo_, char *transa_, char *transb_, int *m, int *k, ctype *alpha, \ + ctype *a, int *lda, ctype *b, int *ldb, ctype *beta, ctype *c, int *ldc) \ { \ uplo_t uploc; \ trans_t transa; \ From 992eeb0792a5fb52c6060e78369eba9b46a69342 Mon Sep 17 00:00:00 2001 From: "RuQing G. Xu" Date: Tue, 15 Mar 2022 16:45:38 +0900 Subject: [PATCH 13/73] Support Artifact-Free Native GEMMT --- CMakeLists.txt | 21 ++++++++++++++++++++- src/ltl2inv/CMakeLists.txt | 2 -- src/ltl2inv/blalink_gemmt.c | 10 ++++++++-- src/ltl2inv/blalink_gemmt.hh | 2 ++ src/pfupdates/CMakeLists.txt | 2 -- 5 files changed, 30 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b1f12b7e..9c4acdcd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR) +cmake_minimum_required(VERSION 3.0 FATAL_ERROR) project(mVMC NONE) option(USE_SCALAPACK "Use Scalapack" OFF) @@ -78,8 +78,27 @@ endif() if(BLA_VENDOR MATCHES "Intel10*" OR BLAS_LIBRARIES MATCHES "/*mkl*") + # Don't require BLIS when MKL is used. add_definitions(-DMKL) + add_definitions(-DBLAS_EXTERNAL) + add_definitions(-DF77_COMPLEX_RET_INTEL) set(Require_BLIS OFF) +elseif(BLA_VENDOR MATCHES "FLA*" + OR BLAS_LIBRARIES MATCHES "/*blis*") + # Skip extra BLIS if it's already the BLAS vendor. + list(GET BLAS_LIBRARIES 0 BLIS_FIRST_LIB) + get_filename_component(BLIS_LIB_DIR ${BLIS_FIRST_LIB} DIRECTORY) + include_directories(${BLIS_LIB_DIR}/../include) + include_directories(${BLIS_LIB_DIR}/../include/blis) + set(Require_BLIS OFF) +else() + # BLAS vendor preference: + # External > BLIS > Reference + if(DEFINED BLA_VENDOR) + add_definitions(-DBLAS_EXTERNAL) + # TODO: Identify non-Intel style complex number return. + add_definitions(-DF77_COMPLEX_RET_INTEL) + endif() endif() # Build and enable tests diff --git a/src/ltl2inv/CMakeLists.txt b/src/ltl2inv/CMakeLists.txt index e6c0289c..11783205 100644 --- a/src/ltl2inv/CMakeLists.txt +++ b/src/ltl2inv/CMakeLists.txt @@ -5,8 +5,6 @@ if(${CMAKE_PROJECT_NAME} STREQUAL "Project") message(FATAL_ERROR "cmake should be executed not for 'src' subdirectory, but for the top directory of mVMC.") endif(${CMAKE_PROJECT_NAME} STREQUAL "Project") -add_definitions(-DBLAS_EXTERNAL) -add_definitions(-DF77_COMPLEX_RET_INTEL) include_directories(../common) # TODO: Move blalink_gemmt.c to other subprojects? diff --git a/src/ltl2inv/blalink_gemmt.c b/src/ltl2inv/blalink_gemmt.c index 35e4dba3..fbaee562 100644 --- a/src/ltl2inv/blalink_gemmt.c +++ b/src/ltl2inv/blalink_gemmt.c @@ -10,8 +10,14 @@ // Redefine GEMMT Fortran from BLIS (which is built without BLAS API). // Required by Pfapack77. #define BLAGEN_MAC(cctype, ctype, cchar) \ - void cchar##gemmt_(char *uplo_, char *transa_, char *transb_, int *m, int *k, ctype *alpha, \ - ctype *a, int *lda, ctype *b, int *ldb, ctype *beta, ctype *c, int *ldc) \ + void cchar##gemmt_(const char *uplo_, \ + const char *transa_, \ + const char *transb_, \ + const int *m, const int *k, \ + const ctype *alpha, \ + const ctype *a, const int *lda, \ + const ctype *b, const int *ldb, \ + const ctype *beta, ctype *c, const int *ldc) \ { \ uplo_t uploc; \ trans_t transa; \ diff --git a/src/ltl2inv/blalink_gemmt.hh b/src/ltl2inv/blalink_gemmt.hh index 26982d19..52bb2c45 100644 --- a/src/ltl2inv/blalink_gemmt.hh +++ b/src/ltl2inv/blalink_gemmt.hh @@ -61,6 +61,7 @@ inline void gemmt(uplo_t uploc, (ctype *)&beta, \ (ctype *)c, &ldc); \ } +extern "C" { void sgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, float *alpha, float *a, dim_t *lda, float *b, dim_t *ldb, float *beta, float *c, dim_t *ldc); void dgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, double *alpha, @@ -69,6 +70,7 @@ void cgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, void *a void *a, dim_t *lda, void *b, dim_t *ldb, void *beta, void *c, dim_t *ldc); void zgemmt_(char *uplo, char *transa, char *transb, dim_t *m, dim_t *k, void *alpha, void *a, dim_t *lda, void *b, dim_t *ldb, void *beta, void *c, dim_t *ldc); +} #endif BLALINK_MAC( float, float, s ) BLALINK_MAC( double, double, d ) diff --git a/src/pfupdates/CMakeLists.txt b/src/pfupdates/CMakeLists.txt index f5e5a986..8cea7135 100644 --- a/src/pfupdates/CMakeLists.txt +++ b/src/pfupdates/CMakeLists.txt @@ -5,8 +5,6 @@ if(${CMAKE_PROJECT_NAME} STREQUAL "Project") message(FATAL_ERROR "cmake should be executed not for 'src' subdirectory, but for the top directory of mVMC.") endif(${CMAKE_PROJECT_NAME} STREQUAL "Project") -add_definitions(-DBLAS_EXTERNAL) -add_definitions(-DF77_COMPLEX_RET_INTEL) include_directories(../common) include_directories(../ltl2inv) From 097d25cc46ad78c4cc374de577b306aba265af14 Mon Sep 17 00:00:00 2001 From: Takahiro Misawa Date: Fri, 18 Mar 2022 17:11:40 +0800 Subject: [PATCH 14/73] mod the description on Exchange --- doc/en/source/expert.rst | 1 + doc/ja/source/expert.rst | 10 ++-------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/doc/en/source/expert.rst b/doc/en/source/expert.rst index 03eaf5e1..3cceb46b 100644 --- a/doc/en/source/expert.rst +++ b/doc/en/source/expert.rst @@ -1234,6 +1234,7 @@ The Hamiltonian for exchange couplings +c_ {i \downarrow}^{\dagger}c_{j\downarrow}c_{j \uparrow}^{\dagger}c_{i \uparrow}) is added to the whole Hamiltonian by setting :math:`J_{ij}^{\rm Ex}`. +Note that, for spin systems, the definition of the Exchange is different from that in HPhi. An example of the file format is shown as follows. :: diff --git a/doc/ja/source/expert.rst b/doc/ja/source/expert.rst index a7262773..ae08bf55 100644 --- a/doc/ja/source/expert.rst +++ b/doc/ja/source/expert.rst @@ -1177,7 +1177,7 @@ PairHopカップリングをハミルトニアンに付け加えます。付け Exchange指定ファイル (exchange.def) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Exchangeカップリングをハミルトニアンに付け加えます。 電子系の場合には +Exchangeカップリングをハミルトニアンに付け加えます。 電子系,スピン系の両方の場合に .. math:: @@ -1185,13 +1185,7 @@ Exchangeカップリングをハミルトニアンに付け加えます。 電 (c_ {i \uparrow}^{\dagger}c_{j\uparrow}c_{j \downarrow}^{\dagger}c_{i \downarrow} +c_ {i \downarrow}^{\dagger}c_{j\downarrow}c_{j \uparrow}^{\dagger}c_{i \uparrow}) -が付け加えられ、スピン系の場合には - -.. math:: - - {\cal H}_E =\sum_{i,j}J_{ij}^{\rm Ex} (S_i^+S_j^-+S_i^-S_j^+) - -が付け加えられます。 以下にファイル例を記載します。 +が付け加えられます(スピン系の場合にHPhiとは定義が異なりますので注意してください)。 :: From fe45c23016d040ed3d4e98f8a73d8cd1fe25d890 Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Mon, 21 Mar 2022 13:42:36 +0900 Subject: [PATCH 15/73] Not Always Use External BLAS --- CMakeLists.txt | 2 -- src/ltl2inv/CMakeLists.txt | 3 +++ src/pfupdates/CMakeLists.txt | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c4acdcd..3257d79d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,8 +96,6 @@ else() # External > BLIS > Reference if(DEFINED BLA_VENDOR) add_definitions(-DBLAS_EXTERNAL) - # TODO: Identify non-Intel style complex number return. - add_definitions(-DF77_COMPLEX_RET_INTEL) endif() endif() diff --git a/src/ltl2inv/CMakeLists.txt b/src/ltl2inv/CMakeLists.txt index 11783205..fd243338 100644 --- a/src/ltl2inv/CMakeLists.txt +++ b/src/ltl2inv/CMakeLists.txt @@ -5,6 +5,9 @@ if(${CMAKE_PROJECT_NAME} STREQUAL "Project") message(FATAL_ERROR "cmake should be executed not for 'src' subdirectory, but for the top directory of mVMC.") endif(${CMAKE_PROJECT_NAME} STREQUAL "Project") +if(${ARCHITECTURE} STREQUAL "x86_64") + add_definitions(-DF77_COMPLEX_RET_INTEL) +endif() include_directories(../common) # TODO: Move blalink_gemmt.c to other subprojects? diff --git a/src/pfupdates/CMakeLists.txt b/src/pfupdates/CMakeLists.txt index 8cea7135..1a06ef74 100644 --- a/src/pfupdates/CMakeLists.txt +++ b/src/pfupdates/CMakeLists.txt @@ -5,6 +5,9 @@ if(${CMAKE_PROJECT_NAME} STREQUAL "Project") message(FATAL_ERROR "cmake should be executed not for 'src' subdirectory, but for the top directory of mVMC.") endif(${CMAKE_PROJECT_NAME} STREQUAL "Project") +if(${ARCHITECTURE} STREQUAL "x86_64") + add_definitions(-DF77_COMPLEX_RET_INTEL) +endif() include_directories(../common) include_directories(../ltl2inv) From adc4a5c9b9b1e6049b52f585459a9f22fd12dfb5 Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Mon, 21 Mar 2022 13:45:32 +0900 Subject: [PATCH 16/73] Option: TRMM Writing Only to Half B --- src/ltl2inv/ilaenv.h | 15 +++++++++++++++ src/ltl2inv/ilaenv_lauum.cc | 23 +++++++++++++++++++++++ src/ltl2inv/ilaenv_lauum.hh | 11 +++++++++++ src/ltl2inv/invert.tcc | 37 +++++++++++++++++++++++++++++++------ src/ltl2inv/trmmt.tcc | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 src/ltl2inv/ilaenv.h create mode 100644 src/ltl2inv/ilaenv_lauum.cc create mode 100644 src/ltl2inv/ilaenv_lauum.hh create mode 100644 src/ltl2inv/trmmt.tcc diff --git a/src/ltl2inv/ilaenv.h b/src/ltl2inv/ilaenv.h new file mode 100644 index 00000000..add0a1ed --- /dev/null +++ b/src/ltl2inv/ilaenv.h @@ -0,0 +1,15 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#pragma once +#ifdef __cplusplus +extern "C" { +#endif + +int ilaenv_(const int *ispec, const char *name, const char *opts, const int *n1, const int *n2, const int *n3, const int *n4); + +#ifdef __cplusplus +} +#endif diff --git a/src/ltl2inv/ilaenv_lauum.cc b/src/ltl2inv/ilaenv_lauum.cc new file mode 100644 index 00000000..f150384f --- /dev/null +++ b/src/ltl2inv/ilaenv_lauum.cc @@ -0,0 +1,23 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#include "blalink.hh" +#include "ilaenv.h" +#include "ilaenv_lauum.hh" + +#define EXPANDMAC(cctype, name) \ +template <> int ilaenv_lauum(uplo_t uplo, int n) \ +{ \ + char uplo_ = uplo2char(uplo); \ + int ispec = 1; \ + int dummy = 0; \ + return ilaenv_(&ispec, #name, &uplo_, &n, &dummy, &dummy, &dummy); \ +} +EXPANDMAC( float, SLAUUM ) +EXPANDMAC( double, DLAUUM ) +EXPANDMAC( ccscmplx, CLAUUM ) +EXPANDMAC( ccdcmplx, ZLAUUM ) +#undef EXPANDMAC + diff --git a/src/ltl2inv/ilaenv_lauum.hh b/src/ltl2inv/ilaenv_lauum.hh new file mode 100644 index 00000000..68d89b57 --- /dev/null +++ b/src/ltl2inv/ilaenv_lauum.hh @@ -0,0 +1,11 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#pragma once +#include "blalink.hh" + +template +int ilaenv_lauum(uplo_t uplo, int n); + diff --git a/src/ltl2inv/invert.tcc b/src/ltl2inv/invert.tcc index aab21ed8..0b11edf1 100644 --- a/src/ltl2inv/invert.tcc +++ b/src/ltl2inv/invert.tcc @@ -6,6 +6,7 @@ #pragma once #include "colmaj.hh" #include "blalink.hh" +#include "trmmt.tcc" template void sktdsmx(int n, T *vT, T *B_, int ldB, T *C_, int ldC) @@ -32,6 +33,9 @@ void ltl2inv(int n, T *A_, int ldA, int *iPiv, T *vT, T *M_, int ldM) colmaj A(A_, ldA); colmaj M(M_, ldM); + int npanel_trmm = ilaenv_lauum(BLIS_LOWER, n); + int full = npanel_trmm <= 1 || npanel_trmm >= n; + // Set M. for (int j = 0; j < n; ++j) for (int i = 0; i < n; ++i) @@ -44,14 +48,23 @@ void ltl2inv(int n, T *A_, int ldA, int *iPiv, T *vT, T *M_, int ldM) vT[i] = A(i+1, i); sktdsmx(n, vT, &M(0, 0), ldM, &A(0, 0), ldA); + if (!full) { + trmmt(BLIS_LOWER, BLIS_UNIT_DIAG, n, T(1.0), M, A); + for (int j = 0; j < n; ++j) { + A(j, j) = 0.0; + for (int i = 0; i < j; ++i) + A(i, j) = -A(j, i); + } + } + // In-place permute columns. for (int j = n-1; j >= 0; --j) if (iPiv[j]-1 != j) swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); - // TODO: Write triangular also. - trmm(BLIS_LEFT, BLIS_LOWER, BLIS_TRANSPOSE, BLIS_UNIT_DIAG, - n, n, T(1.0), &M(0, 0), ldM, &A(0, 0), ldA); + if (full) + trmm(BLIS_LEFT, BLIS_LOWER, BLIS_TRANSPOSE, BLIS_UNIT_DIAG, + n, n, T(1.0), &M(0, 0), ldM, &A(0, 0), ldA); // In-place permute rows. for (int i = n-1; i >= 0; --i) @@ -65,6 +78,9 @@ void utu2inv(int n, T *A_, int ldA, int *iPiv, T *vT, T *M_, int ldM) colmaj A(A_, ldA); colmaj M(M_, ldM); + int npanel_trmm = ilaenv_lauum(BLIS_UPPER, n); + int full = npanel_trmm <= 1 || npanel_trmm >= n; + // Set M. for (int j = 0; j < n; ++j) for (int i = 0; i < n; ++i) @@ -77,14 +93,23 @@ void utu2inv(int n, T *A_, int ldA, int *iPiv, T *vT, T *M_, int ldM) vT[i] = -A(i, i+1); sktdsmx(n, vT, &M(0, 0), ldM, &A(0, 0), ldA); + if (!full) { + trmmt(BLIS_UPPER, BLIS_UNIT_DIAG, n, T(1.0), M, A); + for (int j = 0; j < n; ++j) { + A(j, j) = 0.0; + for (int i = j + 1; i < n; ++i) + A(i, j) = -A(j, i); + } + } + // In-place permute columns. for (int j = 0; j < n; ++j) if (iPiv[j]-1 != j) swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); - // TODO: Write triangular also. - trmm(BLIS_LEFT, BLIS_UPPER, BLIS_TRANSPOSE, BLIS_UNIT_DIAG, - n, n, T(1.0), &M(0, 0), ldM, &A(0, 0), ldA); + if (full) + trmm(BLIS_LEFT, BLIS_UPPER, BLIS_TRANSPOSE, BLIS_UNIT_DIAG, + n, n, T(1.0), &M(0, 0), ldM, &A(0, 0), ldA); // In-place permute rows. for (int i = 0; i < n; ++i) diff --git a/src/ltl2inv/trmmt.tcc b/src/ltl2inv/trmmt.tcc new file mode 100644 index 00000000..79bc7170 --- /dev/null +++ b/src/ltl2inv/trmmt.tcc @@ -0,0 +1,35 @@ +/** + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#pragma once +#include "colmaj.hh" +#include "blalink.hh" +#include "ilaenv_lauum.hh" + + +template +inline void trmmt(uplo_t uploab, diag_t diaga, int n, T alpha, colmaj &A, colmaj &B) +{ + int npanel = ilaenv_lauum(uploab, n); + + if (uploab == BLIS_UPPER) { + // A upper => A' lower -> write to UPPER part of B. + for (int j = 0; j < n; j += npanel) { + int nloc = std::min(npanel, n - j); + + trmm(BLIS_LEFT, BLIS_UPPER, BLIS_TRANSPOSE, diaga, + j+nloc, nloc, alpha, &A(0, 0), A.ld, &B(0, j), B.ld); + } + } else { + // A lower => A' upper -> write to LOWER part of B. + for (int j = 0; j < n; j += npanel) { + int nloc = std::min(npanel, n - j); + + trmm(BLIS_LEFT, BLIS_LOWER, BLIS_TRANSPOSE, diaga, + n-j, nloc, alpha, &A(j, j), A.ld, &B(j, j), B.ld); + } + } +} + From d72f34acca6dd9c4fb03fbc3a8b22770f2b21aad Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Tue, 22 Mar 2022 21:03:07 +0900 Subject: [PATCH 17/73] ltl2inv Print FLOPS --- src/ltl2inv/testinv.cc | 43 +++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/src/ltl2inv/testinv.cc b/src/ltl2inv/testinv.cc index 9da6c59e..c7cbc358 100644 --- a/src/ltl2inv/testinv.cc +++ b/src/ltl2inv/testinv.cc @@ -1,13 +1,21 @@ #include #include #include +#include #include "colmaj.hh" #include "invert.tcc" +struct info_t { + double err; + long long tim; +}; + template -double test_decomp2inv(uplo_t uplo, int n) +info_t test_decomp2inv(uplo_t uplo, int n) { + using namespace std::chrono; + colmaj A(new T[n * n], n); colmaj M(new T[n * n], n); colmaj X(new T[n * n], n); @@ -40,6 +48,8 @@ double test_decomp2inv(uplo_t uplo, int n) } } + auto start = high_resolution_clock::now(); + sktrf(uplo, n, &X(0, 0), n, ipiv, &M(0, 0), n*n); switch (uplo) { case BLIS_LOWER: @@ -50,6 +60,8 @@ double test_decomp2inv(uplo_t uplo, int n) break; } + auto tim = duration_cast(high_resolution_clock::now() - start).count(); + gemm(BLIS_NO_TRANSPOSE, BLIS_NO_TRANSPOSE, n, n, n, 1.0, @@ -88,24 +100,25 @@ double test_decomp2inv(uplo_t uplo, int n) delete[] ipiv; delete[] vT; - return err; + return info_t{ err, tim }; } int main(void) { - printf("double 10x10 lower err=%e.\n", test_decomp2inv (BLIS_LOWER, 10)); - printf("float 10x10 lower err=%e.\n", test_decomp2inv (BLIS_LOWER, 10)); - printf("dcomplex 10x10 lower err=%e.\n", test_decomp2inv(BLIS_LOWER, 10)); - printf("double 200x200 lower err=%e.\n", test_decomp2inv (BLIS_LOWER, 200)); - printf("float 200x200 lower err=%e.\n", test_decomp2inv (BLIS_LOWER, 200)); - printf("dcomplex 200x200 lower err=%e.\n", test_decomp2inv(BLIS_LOWER, 200)); - - printf("double 10x10 upper err=%e.\n", test_decomp2inv (BLIS_UPPER, 10)); - printf("float 10x10 upper err=%e.\n", test_decomp2inv (BLIS_UPPER, 10)); - printf("dcomplex 10x10 upper err=%e.\n", test_decomp2inv(BLIS_UPPER, 10)); - printf("double 200x200 upper err=%e.\n", test_decomp2inv (BLIS_UPPER, 200)); - printf("float 200x200 upper err=%e.\n", test_decomp2inv (BLIS_UPPER, 200)); - printf("dcomplex 200x200 upper err=%e.\n", test_decomp2inv(BLIS_UPPER, 200)); + info_t info; int n; + n= 10; info = test_decomp2inv (BLIS_LOWER, n); printf("double n=%5d lower err=%e at %6lfgflops.\n", n, info.err, 1.33*std::pow(10 ,3)/info.tim); + n= 10; info = test_decomp2inv (BLIS_LOWER, n); printf("float n=%5d lower err=%e at %6lfgflops.\n", n, info.err, 1.33*std::pow(10 ,3)/info.tim); + n= 10; info = test_decomp2inv(BLIS_LOWER, n); printf("dcomplex n=%5d lower err=%e at %6lfgflops.\n", n, info.err, 5.33*std::pow(10 ,3)/info.tim); + n=200; info = test_decomp2inv (BLIS_LOWER, n); printf("double n=%5d lower err=%e at %6lfgflops.\n", n, info.err, 1.33*std::pow(200,3)/info.tim); + n=200; info = test_decomp2inv (BLIS_LOWER, n); printf("float n=%5d lower err=%e at %6lfgflops.\n", n, info.err, 1.33*std::pow(200,3)/info.tim); + n=200; info = test_decomp2inv(BLIS_LOWER, n); printf("dcomplex n=%5d lower err=%e at %6lfgflops.\n", n, info.err, 5.33*std::pow(200,3)/info.tim); + + n= 10; info = test_decomp2inv (BLIS_UPPER, n); printf("double n=%5d upper err=%e at %6lfgflops.\n", n, info.err, 1.33*std::pow(10 ,3)/info.tim); + n= 10; info = test_decomp2inv (BLIS_UPPER, n); printf("float n=%5d upper err=%e at %6lfgflops.\n", n, info.err, 1.33*std::pow(10 ,3)/info.tim); + n= 10; info = test_decomp2inv(BLIS_UPPER, n); printf("dcomplex n=%5d upper err=%e at %6lfgflops.\n", n, info.err, 5.33*std::pow(10 ,3)/info.tim); + n=200; info = test_decomp2inv (BLIS_UPPER, n); printf("double n=%5d upper err=%e at %6lfgflops.\n", n, info.err, 1.33*std::pow(200,3)/info.tim); + n=200; info = test_decomp2inv (BLIS_UPPER, n); printf("float n=%5d upper err=%e at %6lfgflops.\n", n, info.err, 1.33*std::pow(200,3)/info.tim); + n=200; info = test_decomp2inv(BLIS_UPPER, n); printf("dcomplex n=%5d upper err=%e at %6lfgflops.\n", n, info.err, 5.33*std::pow(200,3)/info.tim); return 0; } From 6a12c4297a3812afd49d3ed3e336e059893521db Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Tue, 22 Mar 2022 21:04:30 +0900 Subject: [PATCH 18/73] Update Build ltl2inv --- src/ltl2inv/CMakeLists.txt | 2 +- src/ltl2inv/makefile_ltl2inv | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ltl2inv/CMakeLists.txt b/src/ltl2inv/CMakeLists.txt index fd243338..e9554006 100644 --- a/src/ltl2inv/CMakeLists.txt +++ b/src/ltl2inv/CMakeLists.txt @@ -11,6 +11,6 @@ endif() include_directories(../common) # TODO: Move blalink_gemmt.c to other subprojects? -add_library(ltl2inv STATIC ltl2inv.cc blalink_gemmt.c) +add_library(ltl2inv STATIC ltl2inv.cc blalink_gemmt.c ilaenv_lauum.cc) target_compile_definitions(ltl2inv PRIVATE -D_CC_IMPL) diff --git a/src/ltl2inv/makefile_ltl2inv b/src/ltl2inv/makefile_ltl2inv index a6772ef7..9dacb108 100644 --- a/src/ltl2inv/makefile_ltl2inv +++ b/src/ltl2inv/makefile_ltl2inv @@ -1,7 +1,7 @@ include ../make.sys OBJ = ltl2inv.o -SRC = ltl2inv.cc +SRC = ltl2inv.cc blalink_gemmt.c ilaenv_lauum.cc HDR = invert.tcc pfaffian.tcc \ ../common/blalink.hh ../common/blalink_fort.h ../common/colmaj.hh From df6db673dadb2bce01133d194daff86696c20ce5 Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Wed, 23 Mar 2022 13:47:28 +0900 Subject: [PATCH 19/73] Add SKSWP w/o Deploying Code commented out. --- src/ltl2inv/invert.tcc | 77 ++++++++++++++++++++++++++++-------------- src/ltl2inv/skswp.tcc | 66 ++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 25 deletions(-) create mode 100644 src/ltl2inv/skswp.tcc diff --git a/src/ltl2inv/invert.tcc b/src/ltl2inv/invert.tcc index 0b11edf1..69211d15 100644 --- a/src/ltl2inv/invert.tcc +++ b/src/ltl2inv/invert.tcc @@ -7,6 +7,7 @@ #include "colmaj.hh" #include "blalink.hh" #include "trmmt.tcc" +#include "skswp.tcc" template void sktdsmx(int n, T *vT, T *B_, int ldB, T *C_, int ldC) @@ -50,26 +51,39 @@ void ltl2inv(int n, T *A_, int ldA, int *iPiv, T *vT, T *M_, int ldM) if (!full) { trmmt(BLIS_LOWER, BLIS_UNIT_DIAG, n, T(1.0), M, A); + + // Antisymmetric swapping. + // for (int j = n-1; j >= 0; --j) + // if (iPiv[j]-1 != j) + // skswp(BLIS_LOWER, n, A, iPiv[j]-1, j); + + // Complete antisymm. for (int j = 0; j < n; ++j) { A(j, j) = 0.0; for (int i = 0; i < j; ++i) A(i, j) = -A(j, i); } - } + // Swap. + for (int j = n-1; j >= 0; --j) + if (iPiv[j]-1 != j) { + swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); + swap(n, &A(j, 0), ldA, &A(iPiv[j]-1, 0), ldA); + } + } else { - // In-place permute columns. - for (int j = n-1; j >= 0; --j) - if (iPiv[j]-1 != j) - swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); + // In-place permute columns. + for (int j = n-1; j >= 0; --j) + if (iPiv[j]-1 != j) + swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); - if (full) trmm(BLIS_LEFT, BLIS_LOWER, BLIS_TRANSPOSE, BLIS_UNIT_DIAG, n, n, T(1.0), &M(0, 0), ldM, &A(0, 0), ldA); - // In-place permute rows. - for (int i = n-1; i >= 0; --i) - if (iPiv[i]-1 != i) - swap(n, &A(i, 0), ldA, &A(iPiv[i]-1, 0), ldA); + // In-place permute rows. + for (int i = n-1; i >= 0; --i) + if (iPiv[i]-1 != i) + swap(n, &A(i, 0), ldA, &A(iPiv[i]-1, 0), ldA); + } } template @@ -95,26 +109,39 @@ void utu2inv(int n, T *A_, int ldA, int *iPiv, T *vT, T *M_, int ldM) if (!full) { trmmt(BLIS_UPPER, BLIS_UNIT_DIAG, n, T(1.0), M, A); - for (int j = 0; j < n; ++j) { - A(j, j) = 0.0; - for (int i = j + 1; i < n; ++i) - A(i, j) = -A(j, i); - } - } - // In-place permute columns. - for (int j = 0; j < n; ++j) - if (iPiv[j]-1 != j) - swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); + // Antisymmetric swapping. + for (int j = 0; j < n; ++j) + if (iPiv[j]-1 != j) + skswp(BLIS_UPPER, n, A, j, iPiv[j]-1); + + // Complete antisymm. + for (int j = 0; j < n; ++j) { + A(j, j) = 0.0; + for (int i = j + 1; i < n; ++i) + A(i, j) = -A(j, i); + } + // Swap. + // for (int j = 0; j < n; ++j) + // if (iPiv[j]-1 != j) { + // swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); + // swap(n, &A(j, 0), ldA, &A(iPiv[j]-1, 0), ldA); + // } + } else { + + // In-place permute columns. + for (int j = 0; j < n; ++j) + if (iPiv[j]-1 != j) + swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); - if (full) trmm(BLIS_LEFT, BLIS_UPPER, BLIS_TRANSPOSE, BLIS_UNIT_DIAG, n, n, T(1.0), &M(0, 0), ldM, &A(0, 0), ldA); - // In-place permute rows. - for (int i = 0; i < n; ++i) - if (iPiv[i]-1 != i) - swap(n, &A(i, 0), ldA, &A(iPiv[i]-1, 0), ldA); + // In-place permute rows. + for (int i = 0; i < n; ++i) + if (iPiv[i]-1 != i) + swap(n, &A(i, 0), ldA, &A(iPiv[i]-1, 0), ldA); + } } template diff --git a/src/ltl2inv/skswp.tcc b/src/ltl2inv/skswp.tcc new file mode 100644 index 00000000..d72b6cd0 --- /dev/null +++ b/src/ltl2inv/skswp.tcc @@ -0,0 +1,66 @@ +/** + * \file skswp.tcc + * Swap 2 row-columns of an antisymmetric matrix. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#pragma once +#include "colmaj.hh" +#include "blalink.hh" +#include + +template +inline signed skswp(uplo_t uploa, + dim_t m, + colmaj &A, + dim_t s, dim_t t) +{ + // Swap s and t if t t) { + dim_t r = s; + s = t; + t = r; + } + + switch (uploa) { + case BLIS_UPPER: + if (s) + swap(s, &A(0, s), 1, &A(0, t), 1); + A(s, t) *= -1.0; + if (t > s+1) { + // swap(t-s-1, &A(s+1, t), 1, &A(s, s+1), A.ld); + for (dim_t j = s+1; j < t; ++j) { + // A(j, t) *= -1; + // A(s, j) *= -1; + T r = -A(j, t); + A(j, t) = -A(s, j); + A(s, j) = r; + } + } + if (t+1 < m) + swap(m-1-t, &A(s, t+1), A.ld, &A(t, t+1), A.ld); + return 0; + + case BLIS_LOWER: + if (s) + swap(s, &A(s, 0), A.ld, &A(t, 0), A.ld); + A(t, s) *= -1.0; + if (t > s+1) { + for (dim_t j = s+1; j < t; ++j) { + T r = -A(t, j); + A(t, j) = -A(j, s); + A(j, s) = r; + } + } + if (t+1 < m) + swap(m-1-t, &A(t+1, s), 1, &A(t+1, t), 1); + return 0; + + default: + std::cerr << "SKSWP: Unsupported UpLo input." << std::endl; + return err_info(Pfaffine_NOT_IMPLEMNTED, 0); + } +} + From 22e6177459998b88a4dae3fc44d67a385c99aab1 Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Wed, 23 Mar 2022 17:43:26 +0900 Subject: [PATCH 20/73] Test PfUpdates Not yet complete. --- src/pfupdates/testupdate.cc | 70 +++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/pfupdates/testupdate.cc diff --git a/src/pfupdates/testupdate.cc b/src/pfupdates/testupdate.cc new file mode 100644 index 00000000..8f1c237b --- /dev/null +++ b/src/pfupdates/testupdate.cc @@ -0,0 +1,70 @@ +/** + * \copyright Copyright (c) Dept. Phys., Univ. Tokyo + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +#include "updated_tdi.tcc" +#include +#include +#include + +struct info_t { + double err; + long long tim; +}; + +template +info_t test_tdi_update(dim_t nsite, std::vector cfg, std::vector from, std::vector to) +{ + dim_t nelec = cfg.size(); + dim_t mmax = from.size(); + T err = 0; + long long tim; + + T *orb__ = new T[nsite * nsite]; + colmaj orb_(orb__, nsite); + orbital_mat orb(BLIS_UPPER, nsite, orb_); + orb.randomize(0.6, 1234); + + T *mat_ = new T[nelec * nelec]; + updated_tdi tdi(orb, cfg, mat_, nelec, mmax); + + for (dim_t i = 0; i < mmax; ++i) { + if (from.at(i) < 0) + tdi.pop_update(true); + else + tdi.push_update_safe(to.at(i), from[i], true); + + std::vector cfg2(tdi.elem_cfg); + // Apply hopping. + for (dim_t j = 0; j < tdi.from_idx.size(); ++j) + cfg2.at(tdi.from_idx.at(j)) = tdi.to_site.at(j); + + T *mat2_ = new T[nelec * nelec]; + T pfa2 = updated_tdi(orb, cfg2, mat2_, nelec, 1).Pfa; + + double err_ = std::abs(pfa2 - tdi.Pfa * tdi.PfaRatio); + printf("Pfa = %e; Pfa diff = %e\n", tdi.Pfa, err_); + err += err_; + + delete[] mat2_; + } + + delete[] mat_; + delete[] orb__; + + return info_t{ err, tim }; +} + +int main(void) +{ + test_tdi_update(200, + std::vector{ 8, 63, 20, 53, 57, 14, 7, 22, 32, 67, 56, 66, 46, 16, 18, 26, 70, 28, 51, 64, 17, 68, 49, 4, 48, 41, 43, 21, 19, 45, 58, 11, 1, 24, 2, 69, 12, 23, 30, 10, 65, 3, 31, 55, 52, 37, 42, 34, 25, 60, 59, 50, 40, 9, 44, 54, 6, 36, 13, 29, 27, 38, 61, 33, 47, 5, 15, 39, 62, 35 }, + std::vector{ 0, 39, 49, 10, 60, 3 }, + std::vector{ 99, 101, 120, 199, 133, 177 }); + + return 0; +} + From 5cd70dedbefe50de31fd27631d2c089d90080418 Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Sun, 27 Mar 2022 17:26:54 +0900 Subject: [PATCH 21/73] Fix GEMMT for Old Makefile --- src/ltl2inv/makefile_ltl2inv | 24 +++++++++++++++++++----- src/mVMC/makefile_src | 2 +- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/ltl2inv/makefile_ltl2inv b/src/ltl2inv/makefile_ltl2inv index 9dacb108..8c76afb1 100644 --- a/src/ltl2inv/makefile_ltl2inv +++ b/src/ltl2inv/makefile_ltl2inv @@ -1,15 +1,29 @@ include ../make.sys -OBJ = ltl2inv.o +OBJ = ltl2inv.o blalink_gemmt.o ilaenv_lauum.o SRC = ltl2inv.cc blalink_gemmt.c ilaenv_lauum.cc HDR = invert.tcc pfaffian.tcc \ ../common/blalink.hh ../common/blalink_fort.h ../common/colmaj.hh -$(OBJ): $(SRC) $(HDR) - $(CXX) $(CXXFLAGS) -D_CC_IMPL -c $< -o $@ \ +ltl2inv.a: $(OBJ) + $(AR) rvu $@ $(OBJ) + +clean: + rm -f $(OBJ) + +SUFFIXES: .o .c + +.c.o: $(HDR) + $(CC) $(OPTION) $(CFLAGS) -c $< -o $@ \ + -Wno-incompatible-pointer-types-discards-qualifiers \ -I../common \ -I$(BLIS_ROOT)/include \ -I$(BLIS_ROOT)/include/blis -clean: - rm -f $(OBJ) +SUFFIXES: .o .cc + +.cc.o: $(HDR) + $(CXX) $(CXXFLAGS) -D_CC_IMPL -c $< -o $@ \ + -I../common \ + -I$(BLIS_ROOT)/include \ + -I$(BLIS_ROOT)/include/blis diff --git a/src/mVMC/makefile_src b/src/mVMC/makefile_src index 14513558..bf9eae6f 100644 --- a/src/mVMC/makefile_src +++ b/src/mVMC/makefile_src @@ -2,7 +2,7 @@ include ../make.sys PFAPACK = ../pfapack/fortran/libpfapack.a PFUPDATES = ../pfupdates/pfupdates.o -LTL2INV = ../ltl2inv/ltl2inv.o +LTL2INV = ../ltl2inv/ltl2inv.a SFMT = ../sfmt/SFMT.o STDFACE = ../StdFace/src/libStdFace.a OPTION = -D_mpi_use From 4169b16495e546210c919fc358098f6d8a96dfd8 Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Wed, 30 Mar 2022 18:10:24 +0900 Subject: [PATCH 22/73] Revert "Add SKSWP w/o Deploying" This reverts commit df6db673dadb2bce01133d194daff86696c20ce5. --- src/ltl2inv/invert.tcc | 77 ++++++++++++++---------------------------- src/ltl2inv/skswp.tcc | 66 ------------------------------------ 2 files changed, 25 insertions(+), 118 deletions(-) delete mode 100644 src/ltl2inv/skswp.tcc diff --git a/src/ltl2inv/invert.tcc b/src/ltl2inv/invert.tcc index 69211d15..0b11edf1 100644 --- a/src/ltl2inv/invert.tcc +++ b/src/ltl2inv/invert.tcc @@ -7,7 +7,6 @@ #include "colmaj.hh" #include "blalink.hh" #include "trmmt.tcc" -#include "skswp.tcc" template void sktdsmx(int n, T *vT, T *B_, int ldB, T *C_, int ldC) @@ -51,39 +50,26 @@ void ltl2inv(int n, T *A_, int ldA, int *iPiv, T *vT, T *M_, int ldM) if (!full) { trmmt(BLIS_LOWER, BLIS_UNIT_DIAG, n, T(1.0), M, A); - - // Antisymmetric swapping. - // for (int j = n-1; j >= 0; --j) - // if (iPiv[j]-1 != j) - // skswp(BLIS_LOWER, n, A, iPiv[j]-1, j); - - // Complete antisymm. for (int j = 0; j < n; ++j) { A(j, j) = 0.0; for (int i = 0; i < j; ++i) A(i, j) = -A(j, i); } - // Swap. - for (int j = n-1; j >= 0; --j) - if (iPiv[j]-1 != j) { - swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); - swap(n, &A(j, 0), ldA, &A(iPiv[j]-1, 0), ldA); - } - } else { + } - // In-place permute columns. - for (int j = n-1; j >= 0; --j) - if (iPiv[j]-1 != j) - swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); + // In-place permute columns. + for (int j = n-1; j >= 0; --j) + if (iPiv[j]-1 != j) + swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); + if (full) trmm(BLIS_LEFT, BLIS_LOWER, BLIS_TRANSPOSE, BLIS_UNIT_DIAG, n, n, T(1.0), &M(0, 0), ldM, &A(0, 0), ldA); - // In-place permute rows. - for (int i = n-1; i >= 0; --i) - if (iPiv[i]-1 != i) - swap(n, &A(i, 0), ldA, &A(iPiv[i]-1, 0), ldA); - } + // In-place permute rows. + for (int i = n-1; i >= 0; --i) + if (iPiv[i]-1 != i) + swap(n, &A(i, 0), ldA, &A(iPiv[i]-1, 0), ldA); } template @@ -109,39 +95,26 @@ void utu2inv(int n, T *A_, int ldA, int *iPiv, T *vT, T *M_, int ldM) if (!full) { trmmt(BLIS_UPPER, BLIS_UNIT_DIAG, n, T(1.0), M, A); + for (int j = 0; j < n; ++j) { + A(j, j) = 0.0; + for (int i = j + 1; i < n; ++i) + A(i, j) = -A(j, i); + } + } - // Antisymmetric swapping. - for (int j = 0; j < n; ++j) - if (iPiv[j]-1 != j) - skswp(BLIS_UPPER, n, A, j, iPiv[j]-1); - - // Complete antisymm. - for (int j = 0; j < n; ++j) { - A(j, j) = 0.0; - for (int i = j + 1; i < n; ++i) - A(i, j) = -A(j, i); - } - // Swap. - // for (int j = 0; j < n; ++j) - // if (iPiv[j]-1 != j) { - // swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); - // swap(n, &A(j, 0), ldA, &A(iPiv[j]-1, 0), ldA); - // } - } else { - - // In-place permute columns. - for (int j = 0; j < n; ++j) - if (iPiv[j]-1 != j) - swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); + // In-place permute columns. + for (int j = 0; j < n; ++j) + if (iPiv[j]-1 != j) + swap(n, &A(0, j), 1, &A(0, iPiv[j]-1), 1); + if (full) trmm(BLIS_LEFT, BLIS_UPPER, BLIS_TRANSPOSE, BLIS_UNIT_DIAG, n, n, T(1.0), &M(0, 0), ldM, &A(0, 0), ldA); - // In-place permute rows. - for (int i = 0; i < n; ++i) - if (iPiv[i]-1 != i) - swap(n, &A(i, 0), ldA, &A(iPiv[i]-1, 0), ldA); - } + // In-place permute rows. + for (int i = 0; i < n; ++i) + if (iPiv[i]-1 != i) + swap(n, &A(i, 0), ldA, &A(iPiv[i]-1, 0), ldA); } template diff --git a/src/ltl2inv/skswp.tcc b/src/ltl2inv/skswp.tcc deleted file mode 100644 index d72b6cd0..00000000 --- a/src/ltl2inv/skswp.tcc +++ /dev/null @@ -1,66 +0,0 @@ -/** - * \file skswp.tcc - * Swap 2 row-columns of an antisymmetric matrix. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ -#pragma once -#include "colmaj.hh" -#include "blalink.hh" -#include - -template -inline signed skswp(uplo_t uploa, - dim_t m, - colmaj &A, - dim_t s, dim_t t) -{ - // Swap s and t if t t) { - dim_t r = s; - s = t; - t = r; - } - - switch (uploa) { - case BLIS_UPPER: - if (s) - swap(s, &A(0, s), 1, &A(0, t), 1); - A(s, t) *= -1.0; - if (t > s+1) { - // swap(t-s-1, &A(s+1, t), 1, &A(s, s+1), A.ld); - for (dim_t j = s+1; j < t; ++j) { - // A(j, t) *= -1; - // A(s, j) *= -1; - T r = -A(j, t); - A(j, t) = -A(s, j); - A(s, j) = r; - } - } - if (t+1 < m) - swap(m-1-t, &A(s, t+1), A.ld, &A(t, t+1), A.ld); - return 0; - - case BLIS_LOWER: - if (s) - swap(s, &A(s, 0), A.ld, &A(t, 0), A.ld); - A(t, s) *= -1.0; - if (t > s+1) { - for (dim_t j = s+1; j < t; ++j) { - T r = -A(t, j); - A(t, j) = -A(j, s); - A(j, s) = r; - } - } - if (t+1 < m) - swap(m-1-t, &A(t+1, s), 1, &A(t+1, t), 1); - return 0; - - default: - std::cerr << "SKSWP: Unsupported UpLo input." << std::endl; - return err_info(Pfaffine_NOT_IMPLEMNTED, 0); - } -} - From e7d15d9fd039a0d12c58c0cfbc0eef92fce79787 Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Thu, 31 Mar 2022 16:03:26 +0900 Subject: [PATCH 23/73] Apple Uses Intel Complex Return --- config/apple.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/config/apple.cmake b/config/apple.cmake index 9b197129..16ff1130 100644 --- a/config/apple.cmake +++ b/config/apple.cmake @@ -6,6 +6,7 @@ set(CMAKE_CXX_COMPILER "clang++" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS_DEBUG "-g -O0 -Wall -Wformat -Werror=format-security") set(CMAKE_C_FLAGS_RELEASE "-O3 -Wno-unknown-pragmas -Wno-logical-not-parentheses") set(CMAKE_Fortran_COMPILER "gfortran" CACHE STRING "" FORCE) +add_definitions(-DF77_COMPLEX_RET_INTEL) # OpenMP with libomp set(CMAKE_EXE_LINKER_FLAGS "-L/usr/local/lib -lomp") From b66db891264383dc5a5894c0a520dcaf5d739cfc Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Wed, 27 Apr 2022 16:26:45 +0900 Subject: [PATCH 24/73] Fix ltl2inv CMakeLists --- src/ltl2inv/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ltl2inv/CMakeLists.txt b/src/ltl2inv/CMakeLists.txt index e9554006..8aa7141c 100644 --- a/src/ltl2inv/CMakeLists.txt +++ b/src/ltl2inv/CMakeLists.txt @@ -5,7 +5,7 @@ if(${CMAKE_PROJECT_NAME} STREQUAL "Project") message(FATAL_ERROR "cmake should be executed not for 'src' subdirectory, but for the top directory of mVMC.") endif(${CMAKE_PROJECT_NAME} STREQUAL "Project") -if(${ARCHITECTURE} STREQUAL "x86_64") +if("${ARCHITECTURE}" STREQUAL "x86_64") add_definitions(-DF77_COMPLEX_RET_INTEL) endif() include_directories(../common) From cac54efa7f560f9c4df0d381ad70e09bf441b8a5 Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Thu, 18 Aug 2022 15:26:29 +0800 Subject: [PATCH 25/73] UTU is Faster than LTL. Switch --- src/ltl2inv/ltl2inv.cc | 8 ++++++++ src/mVMC/include/blas_externs.h | 4 ++++ src/mVMC/matrix.c | 24 ++++++++++++------------ 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/ltl2inv/ltl2inv.cc b/src/ltl2inv/ltl2inv.cc index 9086b73b..19f10256 100644 --- a/src/ltl2inv/ltl2inv.cc +++ b/src/ltl2inv/ltl2inv.cc @@ -14,12 +14,20 @@ void ltl2inv_s(int n, float *A_, int ldA, int *iPiv, float *vT, float * void ltl2inv_d(int n, double *A_, int ldA, int *iPiv, double *vT, double *M_, int ldM) { ltl2inv(n, A_, ldA, iPiv, vT, M_, ldM); } void ltl2inv_c(int n, ccscmplx *A_, int ldA, int *iPiv, ccscmplx *vT, ccscmplx *M_, int ldM) { ltl2inv(n, A_, ldA, iPiv, vT, M_, ldM); } void ltl2inv_z(int n, ccdcmplx *A_, int ldA, int *iPiv, ccdcmplx *vT, ccdcmplx *M_, int ldM) { ltl2inv(n, A_, ldA, iPiv, vT, M_, ldM); } +void utu2inv_s(int n, float *A_, int ldA, int *iPiv, float *vT, float *M_, int ldM) { utu2inv(n, A_, ldA, iPiv, vT, M_, ldM); } +void utu2inv_d(int n, double *A_, int ldA, int *iPiv, double *vT, double *M_, int ldM) { utu2inv(n, A_, ldA, iPiv, vT, M_, ldM); } +void utu2inv_c(int n, ccscmplx *A_, int ldA, int *iPiv, ccscmplx *vT, ccscmplx *M_, int ldM) { utu2inv(n, A_, ldA, iPiv, vT, M_, ldM); } +void utu2inv_z(int n, ccdcmplx *A_, int ldA, int *iPiv, ccdcmplx *vT, ccdcmplx *M_, int ldM) { utu2inv(n, A_, ldA, iPiv, vT, M_, ldM); } void ltl2pfa_s(int n, float *A_, int ldA, int *iPiv, float *Pfa) { *Pfa = ltl2pfa(n, A_, ldA, iPiv); } void ltl2pfa_d(int n, double *A_, int ldA, int *iPiv, double *Pfa) { *Pfa = ltl2pfa(n, A_, ldA, iPiv); } void ltl2pfa_c(int n, ccscmplx *A_, int ldA, int *iPiv, ccscmplx *Pfa) { *Pfa = ltl2pfa(n, A_, ldA, iPiv); } void ltl2pfa_z(int n, ccdcmplx *A_, int ldA, int *iPiv, ccdcmplx *Pfa) { *Pfa = ltl2pfa(n, A_, ldA, iPiv); } +void utu2pfa_s(int n, float *A_, int ldA, int *iPiv, float *Pfa) { *Pfa = utu2pfa(n, A_, ldA, iPiv); } +void utu2pfa_d(int n, double *A_, int ldA, int *iPiv, double *Pfa) { *Pfa = utu2pfa(n, A_, ldA, iPiv); } +void utu2pfa_c(int n, ccscmplx *A_, int ldA, int *iPiv, ccscmplx *Pfa) { *Pfa = utu2pfa(n, A_, ldA, iPiv); } +void utu2pfa_z(int n, ccdcmplx *A_, int ldA, int *iPiv, ccdcmplx *Pfa) { *Pfa = utu2pfa(n, A_, ldA, iPiv); } } diff --git a/src/mVMC/include/blas_externs.h b/src/mVMC/include/blas_externs.h index 7daa6e4a..7679cac4 100644 --- a/src/mVMC/include/blas_externs.h +++ b/src/mVMC/include/blas_externs.h @@ -123,6 +123,10 @@ extern void ltl2pfa_d(int n, double *A_, int ldA, int *iPiv, double *Pfa); extern void ltl2inv_d(int n, double *A_, int ldA, int *iPiv, double *vT, double *M_, int ldM); extern void ltl2pfa_z(int n, double complex *A_, int ldA, int *iPiv, double complex *Pfa); extern void ltl2inv_z(int n, double complex *A_, int ldA, int *iPiv, double complex *vT, double complex *M_, int ldM); +extern void utu2pfa_d(int n, double *A_, int ldA, int *iPiv, double *Pfa); +extern void utu2inv_d(int n, double *A_, int ldA, int *iPiv, double *vT, double *M_, int ldM); +extern void utu2pfa_z(int n, double complex *A_, int ldA, int *iPiv, double complex *Pfa); +extern void utu2inv_z(int n, double complex *A_, int ldA, int *iPiv, double complex *vT, double complex *M_, int ldM); // pBLAS extern void M_PDGEMV(const char *trans, const int *m, const int *n, diff --git a/src/mVMC/matrix.c b/src/mVMC/matrix.c index bc4aa634..c91ba200 100644 --- a/src/mVMC/matrix.c +++ b/src/mVMC/matrix.c @@ -162,15 +162,15 @@ int calculateMAll_child_fsz(const int *eleIdx,const int *eleSpn, const int qpSta } } - M_ZSKTRF("L", "N", &n, invM, &lda, iwork, bufM, &nsq, &info); + M_ZSKTRF("U", "N", &n, invM, &lda, iwork, bufM, &nsq, &info); if(info!=0) return info; - ltl2pfa_z(n, invM, lda, iwork, &pfaff); + utu2pfa_z(n, invM, lda, iwork, &pfaff); if(!isfinite(creal(pfaff) + cimag(pfaff))) return qpidx+1; PfM[qpidx] = pfaff; /* Calculate inverse. */ - ltl2inv_z(n, invM, lda, iwork, work, bufM, lda); + utu2inv_z(n, invM, lda, iwork, work, bufM, lda); /* InvM -> InvM(T) -> -InvM */ M_ZSCAL(&nsq, &minus_one, invM, &one); @@ -261,15 +261,15 @@ int calculateMAll_child_fsz_real(const int *eleIdx,const int *eleSpn, const int } /* Calculate Pf M */ - M_DSKTRF("L", "N", &n, invM, &lda, iwork, bufM, &nsq, &info); + M_DSKTRF("U", "N", &n, invM, &lda, iwork, bufM, &nsq, &info); if(info!=0) return info; - ltl2pfa_d(n, invM, lda, iwork, &pfaff); + utu2pfa_d(n, invM, lda, iwork, &pfaff); if(!isfinite(pfaff)) return qpidx+1; PfM_real[qpidx] = pfaff; /* Calculate inverse. */ - ltl2inv_d(n, invM, lda, iwork, work, bufM, lda); + utu2inv_d(n, invM, lda, iwork, work, bufM, lda); /* InvM -> InvM(T) -> -InvM */ M_DSCAL(&nsq, &minus_one, invM, &one); @@ -369,15 +369,15 @@ int calculateMAll_child_fcmp(const int *eleIdx, const int qpStart, const int qpE } /* Calculate Pf M */ - M_ZSKTRF("L", "N", &n, invM, &lda, iwork, bufM, &nsq, &info); + M_ZSKTRF("U", "N", &n, invM, &lda, iwork, bufM, &nsq, &info); if(info!=0) return info; - ltl2pfa_z(n, invM, lda, iwork, &pfaff); + utu2pfa_z(n, invM, lda, iwork, &pfaff); if(!isfinite(creal(pfaff) + cimag(pfaff))) return qpidx+1; PfM[qpidx] = pfaff; /* Calculate inverse. */ - ltl2inv_z(n, invM, lda, iwork, work, bufM, lda); + utu2inv_z(n, invM, lda, iwork, work, bufM, lda); /* mVMC's handling InvM as row-major, * i.e. InvM needs a transpose, InvM -> -InvM according antisymmetric properties. */ @@ -596,15 +596,15 @@ int calculateMAll_child_real(const int *eleIdx, const int qpStart, const int qpE } /* calculate Pf M */ - M_DSKTRF("L", "N", &n, invM, &lda, iwork, bufM, &nsq, &info); + M_DSKTRF("U", "N", &n, invM, &lda, iwork, bufM, &nsq, &info); if(info!=0) return info; - ltl2pfa_d(n, invM, lda, iwork, &pfaff); + utu2pfa_d(n, invM, lda, iwork, &pfaff); if(!isfinite(pfaff)) return qpidx+1; PfM_real[qpidx] = pfaff; /* Compute inverse */ - ltl2inv_d(n, invM, lda, iwork, work, bufM, lda); + utu2inv_d(n, invM, lda, iwork, work, bufM, lda); // InvM -> InvM' = -InvM // TODO: Include this in ltl2inv From b566da29737fc8e08edd36f2156cdb3ea7d3d9e1 Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Thu, 18 Aug 2022 22:09:54 +0800 Subject: [PATCH 26/73] Fix the Mistakened Fortran iPiv Array. --- src/ltl2inv/pfaffian.tcc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ltl2inv/pfaffian.tcc b/src/ltl2inv/pfaffian.tcc index c62836fc..ed028524 100644 --- a/src/ltl2inv/pfaffian.tcc +++ b/src/ltl2inv/pfaffian.tcc @@ -16,8 +16,8 @@ T ltl2pfa(int n, T *A_, int ldA, int *iPiv) for (int i = 0; i < n; i += 2) { pfa *= -A(i+1, i); + if (iPiv[i ]-1 != i ) pfa = -pfa; if (iPiv[i+1]-1 != i+1) pfa = -pfa; - if (iPiv[i+2]-1 != i+2) pfa = -pfa; } return pfa; } @@ -31,8 +31,8 @@ T utu2pfa(int n, T *A_, int ldA, int *iPiv) for (int i = 0; i < n; i += 2) { pfa *= A(i, i+1); + if (iPiv[i ]-1 != i ) pfa = -pfa; if (iPiv[i+1]-1 != i+1) pfa = -pfa; - if (iPiv[i+2]-1 != i+2) pfa = -pfa; } return pfa; } From f559bf27070360aa4f5aa598efa267a9eda7b07d Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Thu, 18 Aug 2022 22:24:13 +0800 Subject: [PATCH 27/73] Skip SKPFA Call when Poping the Last Update --- src/pfupdates/updated_tdi.tcc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pfupdates/updated_tdi.tcc b/src/pfupdates/updated_tdi.tcc index f31e7a56..40a338af 100644 --- a/src/pfupdates/updated_tdi.tcc +++ b/src/pfupdates/updated_tdi.tcc @@ -408,7 +408,9 @@ template struct updated_tdi { nq_updated = k; // Compute new (previous, in fact) Pfaffian. - if (compute_pfa) { + if (!k) + PfaRatio = 1.0; + else if (compute_pfa) { // All compute_pfa requires first K-1 of Q. require_Q(false); From 19e170311402db807519e14ccf31565bc8e0dccc Mon Sep 17 00:00:00 2001 From: Yuichi Motoyama Date: Fri, 21 Oct 2022 17:26:10 +0900 Subject: [PATCH 28/73] update ghactions scripts --- .github/workflows/deploy_docs.yml | 6 +++--- .github/workflows/main.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy_docs.yml b/.github/workflows/deploy_docs.yml index 02ab63ca..5436dbe4 100644 --- a/.github/workflows/deploy_docs.yml +++ b/.github/workflows/deploy_docs.yml @@ -16,18 +16,18 @@ jobs: uses: rlespinasse/github-slug-action@v3.x - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: main - name: Checkout gh-pages - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: ref: gh-pages path: gh-pages - name: Set up Python - uses: actions/setup-python@v1 + uses: actions/setup-python@v4 with: python-version: 3.8 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7d2322e3..17b46eb2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: apt run: | From 5aaee758c36d4295355cea30d3b3af1d9b07a53d Mon Sep 17 00:00:00 2001 From: Yuichi Motoyama Date: Fri, 21 Oct 2022 17:44:06 +0900 Subject: [PATCH 29/73] update gha script --- .github/workflows/deploy_docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy_docs.yml b/.github/workflows/deploy_docs.yml index 5436dbe4..c76ed377 100644 --- a/.github/workflows/deploy_docs.yml +++ b/.github/workflows/deploy_docs.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Inject slug/short variables - uses: rlespinasse/github-slug-action@v3.x + uses: rlespinasse/github-slug-action@v4.x - name: Checkout uses: actions/checkout@v3 From 32a451564dda584ebecbdb5c7b0fa3fb8029d4a6 Mon Sep 17 00:00:00 2001 From: Kazuyoshi Yoshimi Date: Sun, 20 Nov 2022 03:59:40 +0900 Subject: [PATCH 30/73] change submodue version of Stdface from v0.1 to v0.3 --- src/StdFace | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/StdFace b/src/StdFace index c9e24dbe..92967761 160000 --- a/src/StdFace +++ b/src/StdFace @@ -1 +1 @@ -Subproject commit c9e24dbe8c200cd9f06cc2fd51ace8abd8ac08c0 +Subproject commit 92967761b56e6ddf69b1039102dbf0d09256242c From 84df0cb3d8bd8db894cc4088eb44bca7dedd706e Mon Sep 17 00:00:00 2001 From: Yuichi Motoyama Date: Fri, 24 Feb 2023 11:09:24 +0900 Subject: [PATCH 31/73] correct np.dtypes in tests (#41) --- test/python/data/HeisenbergChain_fsz/AddRand.py | 4 ++-- test/python/data/HeisenbergChain_fsz_mpi/AddRand.py | 4 ++-- test/python/data/HubbardChain_fsz/AddRand.py | 4 ++-- test/python/data/HubbardChain_fsz_mpi/AddRand.py | 4 ++-- .../data/HubbardTetragonal_MomentumProjection/AddRand.py | 4 ++-- .../data/HubbardTetragonal_MomentumProjection_mpi/AddRand.py | 4 ++-- test/python/data/KondoChain_Stot1_cmp/AddRand.py | 4 ++-- test/python/data/KondoChain_Stot1_cmp_mpi/AddRand.py | 4 ++-- test/tool/AddRand.py | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/test/python/data/HeisenbergChain_fsz/AddRand.py b/test/python/data/HeisenbergChain_fsz/AddRand.py index eec6aaad..14746fbd 100644 --- a/test/python/data/HeisenbergChain_fsz/AddRand.py +++ b/test/python/data/HeisenbergChain_fsz/AddRand.py @@ -11,8 +11,8 @@ #print(data) #print(len(data)) cnt_max = len(data) -var_org = np.zeros([cnt_max], dtype=np.float) -var_new = np.zeros([cnt_max], dtype=np.float) +var_org = np.zeros([cnt_max], dtype=np.float64) +var_new = np.zeros([cnt_max], dtype=np.float64) random.seed(0) for i in range(0,cnt_max): diff --git a/test/python/data/HeisenbergChain_fsz_mpi/AddRand.py b/test/python/data/HeisenbergChain_fsz_mpi/AddRand.py index eec6aaad..14746fbd 100644 --- a/test/python/data/HeisenbergChain_fsz_mpi/AddRand.py +++ b/test/python/data/HeisenbergChain_fsz_mpi/AddRand.py @@ -11,8 +11,8 @@ #print(data) #print(len(data)) cnt_max = len(data) -var_org = np.zeros([cnt_max], dtype=np.float) -var_new = np.zeros([cnt_max], dtype=np.float) +var_org = np.zeros([cnt_max], dtype=np.float64) +var_new = np.zeros([cnt_max], dtype=np.float64) random.seed(0) for i in range(0,cnt_max): diff --git a/test/python/data/HubbardChain_fsz/AddRand.py b/test/python/data/HubbardChain_fsz/AddRand.py index eec6aaad..14746fbd 100644 --- a/test/python/data/HubbardChain_fsz/AddRand.py +++ b/test/python/data/HubbardChain_fsz/AddRand.py @@ -11,8 +11,8 @@ #print(data) #print(len(data)) cnt_max = len(data) -var_org = np.zeros([cnt_max], dtype=np.float) -var_new = np.zeros([cnt_max], dtype=np.float) +var_org = np.zeros([cnt_max], dtype=np.float64) +var_new = np.zeros([cnt_max], dtype=np.float64) random.seed(0) for i in range(0,cnt_max): diff --git a/test/python/data/HubbardChain_fsz_mpi/AddRand.py b/test/python/data/HubbardChain_fsz_mpi/AddRand.py index eec6aaad..14746fbd 100644 --- a/test/python/data/HubbardChain_fsz_mpi/AddRand.py +++ b/test/python/data/HubbardChain_fsz_mpi/AddRand.py @@ -11,8 +11,8 @@ #print(data) #print(len(data)) cnt_max = len(data) -var_org = np.zeros([cnt_max], dtype=np.float) -var_new = np.zeros([cnt_max], dtype=np.float) +var_org = np.zeros([cnt_max], dtype=np.float64) +var_new = np.zeros([cnt_max], dtype=np.float64) random.seed(0) for i in range(0,cnt_max): diff --git a/test/python/data/HubbardTetragonal_MomentumProjection/AddRand.py b/test/python/data/HubbardTetragonal_MomentumProjection/AddRand.py index b187152d..5c15b558 100644 --- a/test/python/data/HubbardTetragonal_MomentumProjection/AddRand.py +++ b/test/python/data/HubbardTetragonal_MomentumProjection/AddRand.py @@ -11,8 +11,8 @@ #print(data) #print(len(data)) cnt_max = len(data) -var_org = np.zeros([cnt_max], dtype=np.float) -var_new = np.zeros([cnt_max], dtype=np.float) +var_org = np.zeros([cnt_max], dtype=np.float64) +var_new = np.zeros([cnt_max], dtype=np.float64) random.seed(0) for i in range(0,cnt_max): diff --git a/test/python/data/HubbardTetragonal_MomentumProjection_mpi/AddRand.py b/test/python/data/HubbardTetragonal_MomentumProjection_mpi/AddRand.py index b187152d..5c15b558 100644 --- a/test/python/data/HubbardTetragonal_MomentumProjection_mpi/AddRand.py +++ b/test/python/data/HubbardTetragonal_MomentumProjection_mpi/AddRand.py @@ -11,8 +11,8 @@ #print(data) #print(len(data)) cnt_max = len(data) -var_org = np.zeros([cnt_max], dtype=np.float) -var_new = np.zeros([cnt_max], dtype=np.float) +var_org = np.zeros([cnt_max], dtype=np.float64) +var_new = np.zeros([cnt_max], dtype=np.float64) random.seed(0) for i in range(0,cnt_max): diff --git a/test/python/data/KondoChain_Stot1_cmp/AddRand.py b/test/python/data/KondoChain_Stot1_cmp/AddRand.py index e69d26cb..64901175 100644 --- a/test/python/data/KondoChain_Stot1_cmp/AddRand.py +++ b/test/python/data/KondoChain_Stot1_cmp/AddRand.py @@ -11,8 +11,8 @@ #print(data) #print(len(data)) cnt_max = len(data) -var_org = np.zeros([cnt_max], dtype=np.float) -var_new = np.zeros([cnt_max], dtype=np.float) +var_org = np.zeros([cnt_max], dtype=np.float64) +var_new = np.zeros([cnt_max], dtype=np.float64) random.seed(0) for i in range(0,cnt_max): diff --git a/test/python/data/KondoChain_Stot1_cmp_mpi/AddRand.py b/test/python/data/KondoChain_Stot1_cmp_mpi/AddRand.py index e69d26cb..64901175 100644 --- a/test/python/data/KondoChain_Stot1_cmp_mpi/AddRand.py +++ b/test/python/data/KondoChain_Stot1_cmp_mpi/AddRand.py @@ -11,8 +11,8 @@ #print(data) #print(len(data)) cnt_max = len(data) -var_org = np.zeros([cnt_max], dtype=np.float) -var_new = np.zeros([cnt_max], dtype=np.float) +var_org = np.zeros([cnt_max], dtype=np.float64) +var_new = np.zeros([cnt_max], dtype=np.float64) random.seed(0) for i in range(0,cnt_max): diff --git a/test/tool/AddRand.py b/test/tool/AddRand.py index b187152d..5c15b558 100644 --- a/test/tool/AddRand.py +++ b/test/tool/AddRand.py @@ -11,8 +11,8 @@ #print(data) #print(len(data)) cnt_max = len(data) -var_org = np.zeros([cnt_max], dtype=np.float) -var_new = np.zeros([cnt_max], dtype=np.float) +var_org = np.zeros([cnt_max], dtype=np.float64) +var_new = np.zeros([cnt_max], dtype=np.float64) random.seed(0) for i in range(0,cnt_max): From 8a50049db14c97fe06cc5bc0e03bb13f8779454f Mon Sep 17 00:00:00 2001 From: RuQing Xu Date: Wed, 24 May 2023 16:19:32 +0900 Subject: [PATCH 32/73] Enable CI Tests for Pull Requests also --- .github/workflows/main.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7d2322e3..44c9db8f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,6 +1,8 @@ name: CI -on: [push] +on: + - push + - pull_request jobs: ctest: From 98c2b08c609fcc0669967f52a232590d23cc9c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E6=BE=A4=E8=B2=B4=E5=AE=8F?= Date: Thu, 8 Jun 2023 06:40:36 +0900 Subject: [PATCH 33/73] mod HeisenbergChain_fsz and HeisenbergChain_fsz_mpi --- test/python/data/HeisenbergChain_fsz/StdFace.def | 4 ++-- test/python/data/HeisenbergChain_fsz_mpi/StdFace.def | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/python/data/HeisenbergChain_fsz/StdFace.def b/test/python/data/HeisenbergChain_fsz/StdFace.def index 897029a4..ff41d3f1 100644 --- a/test/python/data/HeisenbergChain_fsz/StdFace.def +++ b/test/python/data/HeisenbergChain_fsz/StdFace.def @@ -5,8 +5,8 @@ lattice = "chain" J = 1.0 h = -0.5 Gamma = 0.6 -NSROptItrStep = 1000 -NVMCSample = 500 +NSROptItrStep = 5000 +NVMCSample = 200 DSROptRedCut = 1e-8 DSROptStaDel = 1e-2 DSROptStepDt = 3e-3 diff --git a/test/python/data/HeisenbergChain_fsz_mpi/StdFace.def b/test/python/data/HeisenbergChain_fsz_mpi/StdFace.def index 897029a4..ff41d3f1 100644 --- a/test/python/data/HeisenbergChain_fsz_mpi/StdFace.def +++ b/test/python/data/HeisenbergChain_fsz_mpi/StdFace.def @@ -5,8 +5,8 @@ lattice = "chain" J = 1.0 h = -0.5 Gamma = 0.6 -NSROptItrStep = 1000 -NVMCSample = 500 +NSROptItrStep = 5000 +NVMCSample = 200 DSROptRedCut = 1e-8 DSROptStaDel = 1e-2 DSROptStepDt = 3e-3 From 4beb95dda9289d64505a92a5ebf3e8c5b7de6f86 Mon Sep 17 00:00:00 2001 From: tmisawa Date: Thu, 8 Jun 2023 06:58:12 +0900 Subject: [PATCH 34/73] mod --- test/python/data/HeisenbergChain_fsz/zqp_opt.dat | 2 +- test/python/data/HeisenbergChain_fsz_mpi/zqp_opt.dat | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/python/data/HeisenbergChain_fsz/zqp_opt.dat b/test/python/data/HeisenbergChain_fsz/zqp_opt.dat index f24a5167..362b1a64 100644 --- a/test/python/data/HeisenbergChain_fsz/zqp_opt.dat +++ b/test/python/data/HeisenbergChain_fsz/zqp_opt.dat @@ -1 +1 @@ --2.898925899488521196e+00 1.684619486192785392e-05 5.345500142475570829e-04 8.404015293069187820e+00 0.000000000000000000e+00 2.211473464096734391e-03 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 4.738193505471308686e-01 1.934497772988430953e+00 1.641706813295483306e-05 -5.748824249350897864e-01 3.074790912880790428e-01 1.434574797124044761e-04 -5.477617383064948831e-01 1.426930624192564334e+00 1.223742577854805883e-04 -2.196743835076438778e+00 -1.244357139108225097e+00 6.243885241827898923e-05 -7.846415027735624548e-02 -3.999230348088430365e+00 7.060361162268001780e-06 2.755671951956038424e+00 9.482268727232634475e-01 1.786081274031230939e-04 -2.760179165546662094e+00 -9.476203577678175005e-01 1.062394490829455509e-04 1.076853749072022914e+00 1.798418774117449104e+00 1.727835794465863031e-05 5.814818226865315909e-01 -3.069052940624764081e-01 1.184820721320915680e-04 1.001226499392947611e+00 -4.265517383045134281e-01 5.329855473578548218e-05 2.194689987622504113e+00 1.243308541451670468e+00 1.397259125582591777e-04 -1.838566486340770023e+00 1.607029606567055069e+00 5.344015607975281069e-05 -4.339851788784120958e-03 3.080178676834420797e-03 9.103380149027296146e-05 -1.941052020017366986e-02 1.373013628752587159e-02 3.977507136383663286e-04 -8.042025669215977293e-03 -4.521192612239917016e-03 1.524904753202491420e-04 -3.276137141102917344e-02 -1.837763806787238649e-02 6.301920972204699692e-04 9.893420048986268159e-03 -7.037386756711048498e-03 2.011523412811135460e-04 4.223225967634836042e-02 -2.990372347757856708e-02 8.684686173604578468e-04 4.525064455182672236e-04 -3.426362529930751153e-04 9.078098815206532888e-06 -1.926276705578009851e-03 1.536904574451663499e-03 4.338149577280968382e-05 9.945843836462874444e-04 5.499527165018855066e-03 9.238429120116077500e-05 3.780092832234649338e-03 2.233508603895780625e-02 3.787097059356075730e-04 +-2.898751315962357022e+00 -4.370687689982925719e-05 1.516648494642738659e-03 8.403176565741498294e+00 0.000000000000000000e+00 7.408931690929737579e-03 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 4.725958231273596488e-01 1.942960309262189211e+00 1.388453921494029589e-06 -5.751059845362672673e-01 3.085624300844311829e-01 1.141799026638200153e-05 -5.516747450432279987e-01 1.427296279709484139e+00 1.730478627184777639e-05 -2.195901636419192116e+00 -1.248585417560415634e+00 1.487741361795454664e-05 -6.299478583819277666e-02 -3.999503926358006556e+00 2.025247010624155034e-06 2.758540257013037067e+00 9.508711058472278932e-01 2.978145379570399493e-05 -2.763107351110595022e+00 -9.503254754987479069e-01 2.387035387478584535e-05 1.077081920494104894e+00 1.803222668453525301e+00 1.458444608729572468e-06 5.888880538761621652e-01 -3.072120875819603358e-01 2.368095419745931432e-05 9.998457458580751744e-01 -4.201821788460587959e-01 5.437508408706572053e-06 2.186810834559121730e+00 1.246997610633864717e+00 8.216782869261522534e-06 -1.837216722022644522e+00 1.610670729683086888e+00 6.586495911465586536e-06 -3.337221001778428557e-03 2.972031102830711806e-03 5.084332718344188685e-05 -1.529024862687295566e-02 1.303303104799697666e-02 3.444096060673470269e-05 -7.074055709331428764e-03 -3.160970124847948745e-03 1.432607716563901606e-04 -2.893033851157390812e-02 -1.304304312253810015e-02 4.967381122877719083e-05 7.691296141281866658e-03 -6.485363546967193825e-03 6.858447196457741126e-05 3.326964661614328911e-02 -2.839790201191473920e-02 6.696278111068658943e-05 5.581411900556897815e-04 -4.045017734505741312e-04 9.907484769418968464e-05 -1.504284494981987302e-03 1.375754879837123813e-03 2.637171403074715986e-06 1.189570876044214638e-03 4.472562270960891116e-03 6.687310535797179919e-05 4.971447843072620762e-03 1.852596823384455860e-02 3.096465454020646939e-05 diff --git a/test/python/data/HeisenbergChain_fsz_mpi/zqp_opt.dat b/test/python/data/HeisenbergChain_fsz_mpi/zqp_opt.dat index f24a5167..1e7ff306 100644 --- a/test/python/data/HeisenbergChain_fsz_mpi/zqp_opt.dat +++ b/test/python/data/HeisenbergChain_fsz_mpi/zqp_opt.dat @@ -1 +1 @@ --2.898925899488521196e+00 1.684619486192785392e-05 5.345500142475570829e-04 8.404015293069187820e+00 0.000000000000000000e+00 2.211473464096734391e-03 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 4.738193505471308686e-01 1.934497772988430953e+00 1.641706813295483306e-05 -5.748824249350897864e-01 3.074790912880790428e-01 1.434574797124044761e-04 -5.477617383064948831e-01 1.426930624192564334e+00 1.223742577854805883e-04 -2.196743835076438778e+00 -1.244357139108225097e+00 6.243885241827898923e-05 -7.846415027735624548e-02 -3.999230348088430365e+00 7.060361162268001780e-06 2.755671951956038424e+00 9.482268727232634475e-01 1.786081274031230939e-04 -2.760179165546662094e+00 -9.476203577678175005e-01 1.062394490829455509e-04 1.076853749072022914e+00 1.798418774117449104e+00 1.727835794465863031e-05 5.814818226865315909e-01 -3.069052940624764081e-01 1.184820721320915680e-04 1.001226499392947611e+00 -4.265517383045134281e-01 5.329855473578548218e-05 2.194689987622504113e+00 1.243308541451670468e+00 1.397259125582591777e-04 -1.838566486340770023e+00 1.607029606567055069e+00 5.344015607975281069e-05 -4.339851788784120958e-03 3.080178676834420797e-03 9.103380149027296146e-05 -1.941052020017366986e-02 1.373013628752587159e-02 3.977507136383663286e-04 -8.042025669215977293e-03 -4.521192612239917016e-03 1.524904753202491420e-04 -3.276137141102917344e-02 -1.837763806787238649e-02 6.301920972204699692e-04 9.893420048986268159e-03 -7.037386756711048498e-03 2.011523412811135460e-04 4.223225967634836042e-02 -2.990372347757856708e-02 8.684686173604578468e-04 4.525064455182672236e-04 -3.426362529930751153e-04 9.078098815206532888e-06 -1.926276705578009851e-03 1.536904574451663499e-03 4.338149577280968382e-05 9.945843836462874444e-04 5.499527165018855066e-03 9.238429120116077500e-05 3.780092832234649338e-03 2.233508603895780625e-02 3.787097059356075730e-04 +-2.898751315945838680e+00 -4.370688158883426693e-05 1.516648530072367941e-03 8.403176565666395703e+00 0.000000000000000000e+00 7.408931735348527406e-03 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 4.725958231273367227e-01 1.942960309262096175e+00 1.388453912545607192e-06 -5.751059845343999832e-01 3.085624300825867139e-01 1.141798982779938675e-05 -5.516747450428661770e-01 1.427296279709476812e+00 1.730478623454994772e-05 -2.195901636418260860e+00 -1.248585417562439126e+00 1.487741406120736567e-05 -6.299478583801050580e-02 -3.999503926358009664e+00 2.025246724180795988e-06 2.758540257012416230e+00 9.508711058459039522e-01 2.978145419988809350e-05 -2.763107351112387811e+00 -9.503254754961194539e-01 2.387035396451399024e-05 1.077081920494054046e+00 1.803222668453448474e+00 1.458444599624301805e-06 5.888880538768752615e-01 -3.072120875791806704e-01 2.368095454502979069e-05 9.998457458582701296e-01 -4.201821788455710749e-01 5.437508534258340674e-06 2.186810834557796568e+00 1.246997610635188769e+00 8.216782568769532099e-06 -1.837216722022833926e+00 1.610670729683058910e+00 6.586495937405738459e-06 -3.337220998962842685e-03 2.972031099046468922e-03 5.084332529960765919e-05 -1.529024862527119527e-02 1.303303104255917715e-02 3.444096141705670669e-05 -7.074055698876157566e-03 -3.160970109424233489e-03 1.432607837400371505e-04 -2.893033850303564081e-02 -1.304304312349077906e-02 4.967381260661970593e-05 7.691296143996178940e-03 -6.485363531473099970e-03 6.858448301878464345e-05 3.326964661228083708e-02 -2.839790200069964438e-02 6.696278298485478203e-05 5.581411931093487782e-04 -4.045017717015163641e-04 9.907484999952095774e-05 -1.504284494801613574e-03 1.375754879295718568e-03 2.637171468785055309e-06 1.189570868010418787e-03 4.472562268480770840e-03 6.687310861771613454e-05 4.971447839363404668e-03 1.852596823020288830e-02 3.096465536418051674e-05 From bf919829f9d80c67bae4ff0230631962ff8a8da9 Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Sun, 23 Jul 2023 19:54:52 +0900 Subject: [PATCH 35/73] add beta ver. of rbm correlators --- doc/en/source/algorithm.rst | 4 +- doc/en/source/expert.rst | 425 ++++++++++++++++++++- doc/en/source/intro.rst | 2 +- doc/en/source/output.rst | 79 ++-- doc/en/source/standard.rst | 10 +- doc/en/source/start.rst | 4 +- doc/en/source/tutorial.rst | 2 +- doc/en/source/wannier/format.rst | 4 +- doc/en/source/wannier/tutorial.rst | 6 +- doc/ja/source/expert.rst | 423 ++++++++++++++++++++- doc/ja/source/fourier/format.rst | 2 +- doc/ja/source/output.rst | 68 ++-- doc/ja/source/start.rst | 2 +- src/mVMC/avevar.c | 75 ++++ src/mVMC/calgrn.c | 25 +- src/mVMC/calham.c | 72 ++-- src/mVMC/include/calgrn.h | 4 +- src/mVMC/include/calham.h | 3 +- src/mVMC/include/global.h | 23 ++ src/mVMC/include/locgrn.h | 9 +- src/mVMC/include/lslocgrn.h | 7 +- src/mVMC/include/rbm.h | 22 ++ src/mVMC/include/readdef.h | 55 ++- src/mVMC/include/version.h | 2 +- src/mVMC/include/vmcmain.h | 2 + src/mVMC/locgrn.c | 47 ++- src/mVMC/lslocgrn.c | 165 +++++--- src/mVMC/parameter.c | 35 +- src/mVMC/rbm.c | 580 +++++++++++++++++++++++++++++ src/mVMC/readdef.c | 455 +++++++++++++++++++++- src/mVMC/setmemory.c | 69 +++- src/mVMC/vmccal.c | 28 +- src/mVMC/vmcdry.c | 2 +- src/mVMC/vmcmake.c | 51 ++- 34 files changed, 2520 insertions(+), 242 deletions(-) create mode 100644 src/mVMC/include/rbm.h create mode 100644 src/mVMC/rbm.c diff --git a/doc/en/source/algorithm.rst b/doc/en/source/algorithm.rst index 7ffaf523..c4fa620e 100644 --- a/doc/en/source/algorithm.rst +++ b/doc/en/source/algorithm.rst @@ -92,7 +92,7 @@ Properties of the Pfaffian-Slater determinant In this section, we explain some properties of the Pfaffian-Slater determinant. We derive the general relation between a Pfaffian-Slater determinant and a single Slater determinant in :ref:`Antiparallel Pfaffian ` -and :ref:`General Pfaffian ` . We also discuss the meaning of the singular value +and :ref:`General Pfaffian ` . We also discuss meaning of the singular value decomposition of coefficients :math:`f_{ij}` in :ref:`SVD `. @@ -190,7 +190,7 @@ redundancy. Relation between :math:`F_{IJ}` and :math:`\Phi_{In}` (the case of the general pairing) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -We extend the relationship between the Pfaffian-Slater wave function and the +We extend the relation between the Pfaffian-Slater wave function and the single Slater wave function into the general pairing case including the spin-parallel pairing. We define the Pfaffian-Slater wave function and the single Slater wave function as diff --git a/doc/en/source/expert.rst b/doc/en/source/expert.rst index 03eaf5e1..b4f036cc 100644 --- a/doc/en/source/expert.rst +++ b/doc/en/source/expert.rst @@ -75,11 +75,12 @@ listed in parentheses correspond to the file made by vmcdry.out. .. math:: \begin{aligned} - |\psi \rangle &= {\cal P}_G{\cal P}_J{\cal P}_{d-h}^{(2)}{\cal P}_{d-h}^{(4)}{\cal L}^S{\cal L}^K{\cal L}^P |\phi_{\rm pair} \rangle,\\ + |\psi \rangle &= {\cal N}_{General RBM} {\cal P}_G{\cal P}_J{\cal P}_{d-h}^{(2)}{\cal P}_{d-h}^{(4)}{\cal L}^S{\cal L}^K{\cal L}^P |\phi_{\rm pair} \rangle,\\ {\cal P}_G&=\exp\left[ \sum_i g_i n_{i\uparrow} n_{i\downarrow} \right],\\ {\cal P}_J&=\exp\left[\frac{1}{2} \sum_{i\neq j} v_{ij} (n_i-1)(n_j-1)\right],\\ {\cal P}_{d-h}^{(2)}&= \exp \left[ \sum_t \sum_{n=0}^2 (\alpha_{2nt}^d \sum_{i}\xi_{i2nt}^d+\alpha_{2nt}^h \sum_{i}\xi_{i2nt}^h)\right],\\ {\cal P}_{d-h}^{(4)}&= \exp \left[ \sum_t \sum_{n=0}^4 (\alpha_{4nt}^d \sum_{i}\xi_{i4nt}^d+\alpha_{4nt}^h \sum_{i}\xi_{i4nt}^h)\right],\\ + {\cal N}_{\rm General RBM}&= \exp \left[ \sum_i a_{i\sigma} n_{i\sigma} \right] \prod_k^{N_h} \cosh \left[ b_k + \sum_{i\sigma} W_{i\sigma k} n_{i\sigma} \right],\\ {\cal L}_S&=\frac{2S+1}{8 \pi^2}\int d\Omega P_s(\cos \beta) \hat{R}(\Omega),\\ {\cal L}_K&=\frac{1}{N_s}\sum_{{\boldsymbol R}}e^{i {\boldsymbol K} \cdot{\boldsymbol R} } \hat{T}_{\boldsymbol R},\\ {\cal L}_P&=\sum_{\alpha}p_{\alpha} \hat{G}_{\alpha},\end{aligned} @@ -122,6 +123,12 @@ listed in parentheses correspond to the file made by vmcdry.out. :math:`\alpha_{4nt}^{d(h)}` in :math:`{\cal P}_{d-h}^{(4)}` to be optimized. + **GeneralRBM_PhysLayer**: Set the target variational parameters :math:`a_{i\sigma}` in the RBM correlation factor :math:`{\cal N}_{\rm General RBM}`. + + **GeneralRBM_HiddenLayer**: Set the target variational parameters :math:`h_{k}` in the RBM correlation factor :math:`{\cal N}_{\rm General RBM}`. + + **GeneralRBM_PhysHidden**: Set the target variational parameters :math:`W_{i\sigma k}` in the RBM correlation factor :math:`{\cal N}_{\rm General RBM}`. + **Orbital/OrbitalAntiParallel (orbitalidx.def)**: Set the pair orbital with anti-parallel spins :math:`f_{i\uparrow j\downarrow}` in :math:`|\phi_{\rm pair} \rangle` to be optimized. @@ -155,6 +162,12 @@ listed in parentheses correspond to the file made by vmcdry.out. **InDH4**: Set the initial values of :math:`\alpha_{4nt}^{d(h)}` in :math:`{\cal P}_{d-h}^{(4)}`. + + **InGeneralRBM_PhysLayer**: Set the initial values of :math:`a_{i\sigma}` in the RBM correlation factor :math:`{\cal N}_{\rm General RBM}`. + + **InGeneralRBM_HiddenLayer**: Set the initial values of :math:`h_{k}` in the RBM correlation factor :math:`{\cal N}_{\rm General RBM}`. + + **InGeneralRBM_PhysHidden**: Set the initial values of :math:`W_{i\sigma k}` in the RBM correlation factor :math:`{\cal N}_{\rm General RBM}`. **InOrbital /InOrbitalAntiParallel**: Set the initial values of :math:`f_{i\uparrow j\downarrow}` in @@ -246,6 +259,10 @@ Gutzwiller Gutzwiller factors. Jastrow Charge Jastrow factors. DH2 2-site doublon-holon correlation factors. DH4 4-site doublon-holon correlation factors. +GeneralRBM_PhysLayer A part of the general RBM correlation factor including variational parameters in a physical layer :math:`\alpha_{i\sigma}`. + + GeneralRBM_HiddenLayer A part of the general RBM correlation factor including variational parameters in a hidden layer :math:`\h_{k}`. + GeneralRBM_PhysHidden A part of the general RBM correlation factor including variational parameters which connect physical and hidden layers :math:`\W_{i\sigma k}`. Orbital :math:`^*` Pair orbital factors with anti-parallel spins :math:`f_{i\uparrow j\downarrow}`. OrbitalAntiParallel Pair orbital factors with anti-parallel spins :math:`f_{i\uparrow j\downarrow}`. OrbitalParallel Pair orbital factors with parallel spins :math:`f_{i\sigma j\sigma}`. @@ -255,6 +272,9 @@ InGutzwiller Initial values of Gutzwiller factors. InJastrow Initial values of charge Jastrow factors. InDH2 Initial values of 2-site doublon-holon correlation factors. InDH4 Initial values of 4-site doublon-holon correlation factors. + InGeneralRBM_PhysLayer Initial values of variational parameters of the general RBM correlation factors in a physical layer :math:`\alpha_{i\sigma}`. + InGeneralRBM_HiddenLayer Initial values of variational parameters of the general RBM correlation factors in a hidden layer :math:`\h_{k}`. + InGeneralRBM_PhysHidden Initial values of variational parameters of the general RBM correlation factors which connect physical and hidden layers :math:`\W_{i\sigma k}`. InOrbital Initial values of pair orbital factors :math:`f_{i\uparrow j\downarrow}`. InOrbitalAntiParallel Initial values of pair orbital factors :math:`f_{i\uparrow j\downarrow}`. InOrbitalParallel Initial values of pair orbital factors :math:`f_{i\sigma j\sigma}`. @@ -1827,6 +1847,407 @@ User rules - A program is terminated, when [ int02 ] - [ int10 ] are out of range from the defined values. + +GeneralRBM_PhysLayer file +~~~~~~~~ +In the general RBM correlation factors, + +.. math:: + + {\cal N}_{\rm General RBM}= \exp \left[ \sum_i a_{i\sigma} n_{i\sigma} \right] \prod_k^{N_{\rm neuronGeneral}} \cosh \left[ b_k + \sum_{i\sigma} W_{i\sigma k} n_{i\sigma} \right] + + +this file sets the calculation conditions of :math:`\exp \left[ \sum_i a_{i\sigma} n_{i\sigma} \right] ` . +A site index :math:`i`, a spin index :math:`\sigma` and the variational parameters +:math:`a_{i \sigma}` are specified. An example of the file format is shown as +follows. + +:: + + -------------------- + NRBM_PhysLayerIdx 1 + ComplexType 1 + i s RBM_PhysLayer_Idx + -------------------- + 0 0 0 + 0 1 0 + 1 0 0 + 1 1 0 + (continue...) + 0 1 + +File format +^^^^^^^^^^^ + +In the following, we define the total number of sites as :math:`N_s` and +variational parameters as :math:`N_{v}`, respectively. + +- Line 1: Header + +- Line 2: [string01] [int01] + +- Line 3: [string02] [int02] + +- Lines 4 - 5: Header + +- Lines 6 - (5+ :math:`2N_s`): [int03] [int04] [int05] + +- Lines (6+ :math:`2N_s` ) - + (5+ :math:`2N_s` + :math:`N_v`): [int06] [int07] + +Parameters +^^^^^^^^^^ + +- [ string01 ] + + **Type :** string-type (blank parameter not allowed) + + **Description :** A keyword for total number of variational + parameters :math:`a_{i\sigma}`. You can freely give a name of the keyword. + +- [ int01 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer giving total number of variational + parameters :math:`a_{i\sigma}`. + +- [ string02 ] + + **Type :** string-type (blank parameter not allowed) + + **Description :** A keyword for indicating the double or complex type + of variational parameters :math:`a_{i\sigma}`. You can freely give a name + of the keyword. + +- [ int02 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer indicates the double or complex type of + variational parameters :math:`a_{i\sigma}` (0: double, 1: complex). + +- [ int03 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer giving a site index + (0 :math:`\leq` [ int03 ] :math:`<` ``Nsite``). + +- [ int04 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer giving a spin index + ([int04] = 0 or 1). + +- [ int05 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer setting kinds of variational parameters + :math:`v_{ij}` (0 :math:`\leq` [ int05 ] :math:`<` [ int01]). + +- [ int06 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer giving kinds of variational parameters + (0 :math:`\leq` [ int06 ] :math:`<` [ int01]). + +- [ int07 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer to select the target of variational + parameters indicated at [int06] to be optimized or not (0: not + optimize, 1: optimize). + +User rules +^^^^^^^^^^ + +- This function is a beta version. Please use it carefully. The file format and the implementation may be changed in the future release. + +- This function is available only for the VMC calculation with ``ComplexType=1`` and ``Orbital``. This function is not available for the Power Lanczos calculations. + +- Headers cannot be omitted. + +- A program is terminated, when [ int01 ] is + different from the total number of variational parameters defined in + this file. + +- A program is terminated, when [ int02 ] - + [ int07 ] are out of range from the defined values. + + +GeneralRBM_HiddenLayer file +~~~~~~~~ +In the general RBM correlation factors, + +.. math:: + + {\cal N}_{\rm General RBM}= \exp \left[ \sum_i a_{i\sigma} n_{i\sigma} \right] \prod_k^{N_{\rm neuronGeneral}} \cosh \left[ b_k + \sum_{i\sigma} W_{i\sigma k} n_{i\sigma} \right] + + +this file sets the calculation conditions of :math:`b_k` in :math:`\prod_k^{N_{\rm neuronGeneral}} \cosh \left[ b_k + \sum_{i\sigma} W_{i\sigma k} n_{i\sigma} \right] `. +A hidden neuron index :math:`k` and the variational parameters +:math:`h_{k}` are specified. An example of the file format is shown as +follows. + +:: + + -------------------- + NRBM_HiddenLayerIdx 2 + ComplexType 1 + k RBM_HiddenLayer_Idx + -------------------- + 0 0 + 1 0 + 2 0 + 3 0 + (continue...) + 0 1 + 1 1 + +File format +^^^^^^^^^^^ + +In the following, we define the total number of neurons as :math:`N_{\rm neuronGeneral}` and +variational parameters as :math:`N_{v}`, respectively. + +- Line 1: Header + +- Line 2: [string01] [int01] + +- Line 3: [string02] [int02] + +- Lines 4 - 5: Header + +- Lines 6 - (5+:math:`N_{\rm neuronGeneral}`): [int03] [int04] + +- Lines (6+ :math:`N_{\rm neuronGeneral}` ) - + (5+ :math:`N_{\rm neuronGeneral}` + :math:`N_v`): [int05] [int06] + +Parameters +^^^^^^^^^^ + +- [ string01 ] + + **Type :** string-type (blank parameter not allowed) + + **Description :** A keyword for total number of variational + parameters :math:`h_{k}`. You can freely give a name of the keyword. + +- [ int01 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer giving total number of variational + parameters :math:`h_{k}`. + +- [ string02 ] + + **Type :** string-type (blank parameter not allowed) + + **Description :** A keyword for indicating the double or complex type + of variational parameters :math:`h_{k}`. You can freely give a name + of the keyword. + +- [ int02 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer indicates the double or complex type of + variational parameters :math:`h_{k}` (0: double, 1: complex). + +- [ int03 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer giving a neuron index + (0 :math:`\leq` [ int03 ] :math:`<` ``NneuronGeneral``). + +- [ int04 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer setting kinds of variational parameters + :math:`h_{k}` (0 :math:`\leq` [ int05 ] :math:`<` [ int01]). + +- [ int05 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer giving kinds of variational parameters + (0 :math:`\leq` [ int06 ] :math:`<` [ int01]). + +- [ int06 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer to select the target of variational + parameters indicated at [int06] to be optimized or not (0: not + optimize, 1: optimize). + +User rules +^^^^^^^^^^ + +- This function is a beta version. Please use it carefully. The file format and the implementation may be changed in the future release. + +- This function is available only for the VMC calculation with ``ComplexType=1`` and ``Orbital``. This function is not available for the Power Lanczos calculations. + +- Headers cannot be omitted. + +- A program is terminated, when [ int01 ] is + different from the total number of variational parameters defined in + this file. + +- A program is terminated, when [ int02 ] - + [ int06 ] are out of range from the defined values. + + +GeneralRBM_PhysHidden file +~~~~~~~~ +In the general RBM correlation factors, + +.. math:: + + {\cal N}_{\rm General RBM}= \exp \left[ \sum_i a_{i\sigma} n_{i\sigma} \right] \prod_k^{N_{\rm neuronGeneral}} \cosh \left[ b_k + \sum_{i\sigma} W_{i\sigma k} n_{i\sigma} \right] + + +this file sets the calculation conditions of :math:`W_{i\sigma k}` in :math:`\prod_k^{N_{\rm neuronGeneral}} \cosh \left[ b_k + \sum_{i\sigma} W_{i\sigma k} n_{i\sigma} \right] `. +A site index :math:`i`, a spin index :math:`\sigma`, a hidden neuron index :math:`k` and the variational parameters +:math:`W_{i\sigma k}` are specified. An example of the file format is shown as +follows. + +:: + + -------------------- + NRBM_HiddenLayerIdx 32 + ComplexType 1 + i s k RBM_PhysHidden_Idx + -------------------- + 0 0 0 0 + 0 1 0 1 + 1 0 0 2 + 1 1 0 3 + 2 0 0 4 + 2 1 0 5 + (continue...) + 0 1 + 1 1 + (continue...) + +File format +^^^^^^^^^^^ + +In the following, we define the total number of sites as :math:`N_s`, the total number of neurons as :math:`N_{\rm neuronGeneral}` and +variational parameters as :math:`N_{v}`. + +- Line 1: Header + +- Line 2: [string01] [int01] + +- Line 3: [string02] [int02] + +- Lines 4 - 5: Header + +- Lines 6 - (5+:math:`2 N_s N_{\rm neuronGeneral}`): [int03] [int04] [int05] [int06] + +- Lines (6+ :math:`2 N_s N_{\rm neuronGeneral}` ) - + (5+ :math:`2 N_s N_{\rm neuronGeneral}` + :math:`N_v`): [int07] [int08] + +Parameters +^^^^^^^^^^ + +- [ string01 ] + + **Type :** string-type (blank parameter not allowed) + + **Description :** A keyword for total number of variational + parameters :math:`W_{i \sigma k}`. You can freely give a name of the keyword. + +- [ int01 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer giving total number of variational + parameters :math:`W_{i \sigma k}`. + +- [ string02 ] + + **Type :** string-type (blank parameter not allowed) + + **Description :** A keyword for indicating the double or complex type + of variational parameters :math:`W_{i \sigma k}`. You can freely give a name + of the keyword. + +- [ int02 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer indicates the double or complex type of + variational parameters :math:`W_{i \sigma k}` (0: double, 1: complex). + +- [ int03 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer giving a site index + (0 :math:`\leq` [ int03 ] :math:`<` ``Nsite``). + +- [ int04 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer giving a spin index + ([ int03 ] = 0 or 1 ). + +- [ int05 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer giving a neuron index + (0 :math:`\leq` [ int03 ] :math:`<` ``NneuronGeneral``). + +- [ int06 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer setting kinds of variational parameters + :math:`W_{i \sigma k}` (0 :math:`\leq` [ int05 ] :math:`<` [ int01]). + +- [ int07 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer giving kinds of variational parameters + (0 :math:`\leq` [ int06 ] :math:`<` [ int01]). + +- [ int08 ] + + **Type :** int-type (blank parameter not allowed) + + **Description :** An integer to select the target of variational + parameters indicated at [int06] to be optimized or not (0: not + optimize, 1: optimize). + +User rules +^^^^^^^^^^ + +- This function is a beta version. Please use it carefully. The file format and the implementation may be changed in the future release. + +- This function is available only for the VMC calculation with ``ComplexType=1`` and ``Orbital``. This function is not available for the Power Lanczos calculations. + +- Headers cannot be omitted. + +- A program is terminated, when [ int01 ] is + different from the total number of variational parameters defined in + this file. + +- A program is terminated, when [ int02 ] - + [ int06 ] are out of range from the defined values. + Orbital/OrbitalAntiParallel file (orbitalidx.def) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -2374,7 +2795,7 @@ Files to set initial values of variational parameters This file sets the initial values of variational parameters. The kinds of variational parameters are specified by setting the following keywords in ``List`` file (namelist.def): -``InGutzwiller``, ``InJastrow``, ``InDH2``, ``InDH4``, ``InOrbital``, +``InGutzwiller``, ``InJastrow``, ``InDH2``, ``InDH4``, ``InGeneralRBM_PhysLayer``, ``InGeneralRBM_HiddenLayer``, ``InGeneralRBM_PhysHidden``, ``InOrbital``, ``InOrbitalAntiParallel``, ``InOrbitalParallel``, ``InOrbitalGeneral``. The file format is common and an example of the ``InJastrow`` file is diff --git a/doc/en/source/intro.rst b/doc/en/source/intro.rst index a36dd676..68d2631c 100644 --- a/doc/en/source/intro.rst +++ b/doc/en/source/intro.rst @@ -15,7 +15,7 @@ the low-energy effective models. One of the most reliable theoretical tools for treating the strongly correlated electron systems is the exact diagonalization method. However, applicable range of system size is strongly limited in the exact diagonalization method. Variational Monte -Carlo method [Gros_ ] is one of the promising ways to perform +Carlo method [Gros_ ] is one of promising way to perform the high-accuracy calculations for the larger system sizes beyond exact diagonalization method. Although the strong limitation of the variational wave function is the origin of the poor accuracy of the diff --git a/doc/en/source/output.rst b/doc/en/source/output.rst index 571fff72..743a277d 100644 --- a/doc/en/source/output.rst +++ b/doc/en/source/output.rst @@ -14,33 +14,39 @@ where both ``NDataIdxStart`` and ``NDataQtySmp`` are defined in ``ModPara`` file and zzz is a number given by ``NDataIdxStart`` in ``ModPara``. -+--------------------------------------+---------------------------------------------------------------+ -| Name | Details for corresponding files | -+======================================+===============================================================+ -| \*\*\*\_opt.dat | All optimized parameters. | -+--------------------------------------+---------------------------------------------------------------+ -| \*\*\*\_gutzwiller\_opt.dat | Optimized gutzwiller factors. | -+--------------------------------------+---------------------------------------------------------------+ -| \*\*\*\_jastrow\_opt.dat | Optimized jastrow factors. | -+--------------------------------------+---------------------------------------------------------------+ -| \*\*\*\_doublonHolon2site\_opt.dat | Optimized 2-site doublon-holon correlation factors. | -+--------------------------------------+---------------------------------------------------------------+ -| \*\*\*\_doublonHolon4site\_opt.dat | Optimized 4-site doublon-holon correlation factors. | -+--------------------------------------+---------------------------------------------------------------+ -| \*\*\*\_orbital\_opt.dat | Optimized pair orbital factors. | -+--------------------------------------+---------------------------------------------------------------+ -| xxx\_out\_yyy.dat | Energy and deviation. | -+--------------------------------------+---------------------------------------------------------------+ -| xxx\_var\_yyy.dat | Progress information for optimizing variational parameters. | -+--------------------------------------+---------------------------------------------------------------+ -| xxx\_CalcTimer.dat | Computation time for each processes. | -+--------------------------------------+---------------------------------------------------------------+ -| xxx\_time\_zzz.dat | Progress information for MonteCalro samplings. | -+--------------------------------------+---------------------------------------------------------------+ -| xxx\_cisajs\_yyy.dat | One body Green’s functions. | -+--------------------------------------+---------------------------------------------------------------+ -| xxx\_cisajscktalt\_yyy.dat | Correlation functions. | -+--------------------------------------+---------------------------------------------------------------+ ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| Name | Details for corresponding files | ++==========================================+========================================================================================================================+ +| \*\*\*\_opt.dat | All optimized parameters. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| \*\*\*\_gutzwiller\_opt.dat | Optimized gutzwiller factors. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| \*\*\*\_jastrow\_opt.dat | Optimized jastrow factors. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| \*\*\*\_doublonHolon2site\_opt.dat | Optimized 2-site doublon-holon correlation factors. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| \*\*\*\_doublonHolon4site\_opt.dat | Optimized 4-site doublon-holon correlation factors. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| \*\*\*\_generalRBM\_physlayer\_opt.dat | Optimized variational parameters of the general RBM correlation factors only in a physical layer. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| \*\*\*\_generalRBM\_hiddenlayer\_opt.dat | Optimized variational parameters of the general RBM correlation factors only in a hidden layer. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| \*\*\*\_orbital\_opt.dat | Optimized variational parameters of the general RBM correlation factors which connect physical and hidden layers. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| \*\*\*\_orbital\_opt.dat | Optimized pair orbital factors. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| xxx\_out\_yyy.dat | Energy and deviation. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| xxx\_var\_yyy.dat | Progress information for optimizing variational parameters. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| xxx\_CalcTimer.dat | Computation time for each processes. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| xxx\_time\_zzz.dat | Progress information for Monte Carlo samplings. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| xxx\_cisajs\_yyy.dat | One body Green’s functions. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| xxx\_cisajscktalt\_yyy.dat | Correlation functions. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ Output file for variational parameters (\*\*\*\_opt.dat) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -56,11 +62,11 @@ energy optimized by the SR method are outputted in the following order: The type of average values is a complex number, while that of the deviation is a real number. Since the initial values of all variational parameters are specified at the beginning of the calculation, the -calculation of physical quantities is done by using this file. +calculation of physical quantities is done by using this file file. Here, \*\*\* is the header indicated by ``CParaFileHead`` in ``ModPara`` file. -Output files for variational parameters at each step (xxx\_var\_yyy.dat) +Output files for variational parameters at each steps (xxx\_var\_yyy.dat) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The average and deviation values of variational parameters and the @@ -100,6 +106,13 @@ The optimized 4-site doublon-holon correlation factors by SR method are outputted. The file format is same as the ``InDH4`` file defined in Sec. :ref:`InputParam`. +Output files for general RBM factors(\*\*\*\_generalRBM\_physlayer\_opt.dat, \*\*\*\_generalRBM\_hiddenlayer\_opt.dat, \*\*\*\_generalRBM\_physhidden\_opt.dat) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The optimized general RBM correlation factors by SR method are outputted. +The file format is same as the ``InGeneralRBM_PhysLayer``, ``InGeneralRBM_HiddenLayer`` and ``InGeneralRBM_PhysHidden`` files defined in Sec. +:ref:`InputParam`. + Output file for pair orbitals (\*\*\*\_orbital\_opt.dat) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -138,9 +151,9 @@ where both ``NDataIdxStart`` and ``NDataQtySmp`` are defined in xxx\_CalcTimer.dat ~~~~~~~~~~~~~~~~~~~ -After finishing the calculation, the processing time is outputted in the -order of the name, the number assigned by the process, and the seconds at -each process. An example of outputted file is shown as follows. +After finishing calculation, the processing time is outputted in the +order of the name, the number assigned by the process and the seconds at +each processes. An example of outputted file is shown as follows. :: @@ -160,7 +173,7 @@ xxx\_time\_zzz.dat The calculation information at each bins are outputted in the order of the sampling number, the acceptance ratio for hopping and exchange term (acc\_hopp, acc\_ex), trial numbers to update for hopping and exchange -term (n\_hopp, n\_ex), and the time stamp. Here, xxx is the header +term (n\_hopp, n\_ex) and the time stamp. Here, xxx is the header indicated by ``CDataFileHead`` in ``ModPara`` file and zzz is a number given by ``NDataIdxStart`` in ``ModPara``. An example of outputted file is shown as follows. diff --git a/doc/en/source/standard.rst b/doc/en/source/standard.rst index 64fa0d01..a47072cb 100644 --- a/doc/en/source/standard.rst +++ b/doc/en/source/standard.rst @@ -42,7 +42,7 @@ An example of input file for the standard mode is shown below: 1. Parameters that must be specified (if not, ``vmcdry.out`` will stop with error messages), - 2. Parameters that are not necessary be specified (if not, default + 2. Parameters that is not necessary be specified (if not, default values are used), 3. Parameters that must not be specified (if specified, @@ -52,7 +52,7 @@ An example of input file for the standard mode is shown below: system. If you choose "model=spin", you should not specify ":math:`t`". -We explain each keyword as follows: +We explain each keywords as follows: Parameters about the kind of a calculation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -110,7 +110,7 @@ Parameters about the kind of a calculation [Eqn. :eq:`hubbard` ], the :math:`S_z`-unconserved Spin model [Eqn. :eq:`spin` ], and the :math:`S_z`-unconserved Kondo lattice model [Eqn. :eq:`kondo` ], respectively. Note: Although - these flags have a word "GC"(=grandcanonical), the number of electrons + these flags has a word "GC"(=grandcanonical), the number of electrons are conserved in these system. - ``lattice`` @@ -232,11 +232,11 @@ using the following two methods. **Type :** Integer **Description :** We can specify two vectors - (:math:`{\vec a}_0, {\vec a}_1`) that surround the numerical cell + (:math:`{\vec a}_0, {\vec a}_1`) that surrounds the numerical cell (Fig. :num:`unitlatticepng` ). These vectors should be specified in the Fractional coordinate. -If we use both of these methods, ``vmcdry.out`` stops. +If we use both of these method, ``vmcdry.out`` stops. We can check the shape of the numerical cell by using a file ``lattice.gp`` (only for square, trianguler, honeycomb, and kagome diff --git a/doc/en/source/start.rst b/doc/en/source/start.rst index a304b6f3..1ac589bc 100644 --- a/doc/en/source/start.rst +++ b/doc/en/source/start.rst @@ -268,7 +268,7 @@ We can calculate by using these modes as follows: #. Run - Run an executable ``vmc.out`` in terminal by specifying the name of + Run a executable ``vmc.out`` in terminal by specifying the name of input file written in previous step (option ``-s`` is required). .. code-block:: bash @@ -296,7 +296,7 @@ We can calculate by using these modes as follows: In the above case, the calculation starts as soon as input files for Expert mode are generated. If we only generate files without starting - the calculation, we can use an executable ``vmcdry.out`` as follows + the calculation, we can use a executable ``vmcdry.out`` as follows (MPI is not used in this step): .. code-block:: bash diff --git a/doc/en/source/tutorial.rst b/doc/en/source/tutorial.rst index 3922e84f..3b2e1aa3 100644 --- a/doc/en/source/tutorial.rst +++ b/doc/en/source/tutorial.rst @@ -267,7 +267,7 @@ The details of these outputted files are shown in :ref:`OutputFile`. Output results ^^^^^^^^^^^^^^ -After finishing the calculation normally, the files for the energy, the +After finishing calculation normally, the files for the energy, the deviation, the optimized variational parameters and the time of execution for each calculation steps are outputted in ``output/`` directory. In the following, the outputted files are shown diff --git a/doc/en/source/wannier/format.rst b/doc/en/source/wannier/format.rst index 5781980c..22a69992 100644 --- a/doc/en/source/wannier/format.rst +++ b/doc/en/source/wannier/format.rst @@ -27,9 +27,9 @@ By editing this file, we can modify the number of orbitals treated in HPhi/mVMC. * Line 4 - The number of orbitals per unit cell treated by mVMC/HPhi. + The number of orbitals par unit cell treated by mVMC/HPhi. When we reduce the number by editing this file, - the model includes the same number of orbitals from the top. + the model including the same number of orbitals from the top. * Line 5 - end diff --git a/doc/en/source/wannier/tutorial.rst b/doc/en/source/wannier/tutorial.rst index bb028e90..e7829060 100644 --- a/doc/en/source/wannier/tutorial.rst +++ b/doc/en/source/wannier/tutorial.rst @@ -10,7 +10,7 @@ We use QuantumESPRESSO for the DFT calculation. Input files are served in ``samples/Wannier/Sr2CuO3`` directory. -In actual studies, the input files, etc. of each solver should be modified for more high accuracy calculation. +In actual studies, the input files etc. of each solver should be modified for more high accuracy calculation. Please refer to the manuals of each solver for the details of the input files. SCF calculation of charge density @@ -107,9 +107,9 @@ Quantum lattice mode for HPhi/mVMC ---------------------------------- Using standard mode of HPhi/mVMC, the calculation will be done by reading the files in ``dir-model`` folder. -First, the files in ``dir-model`` directory should be moved to the current directory. +First, the files in ``dir-model`` directory should be moved to the current directry. Then, the calculation will be started by using standard mode. -For example, in HPhi, the calculation will be done by typing the following command: +For example, in HPhi, the calculation will be dobe by typing the following command: :download:`stan.in <../../../../samples/Wannier/Sr2CuO3/stan.in>` diff --git a/doc/ja/source/expert.rst b/doc/ja/source/expert.rst index a7262773..24c23b38 100644 --- a/doc/ja/source/expert.rst +++ b/doc/ja/source/expert.rst @@ -74,11 +74,12 @@ .. math:: \begin{aligned} - |\psi \rangle &= {\cal P}_G{\cal P}_J{\cal P}_{d-h}^{(2)}{\cal P}_{d-h}^{(4)}{\cal L}^S{\cal L}^K{\cal L}^P |\phi_{\rm pair} \rangle,\\ + |\psi \rangle &= {\cal N}_{General RBM} {\cal P}_G{\cal P}_J{\cal P}_{d-h}^{(2)}{\cal P}_{d-h}^{(4)}{\cal L}^S{\cal L}^K{\cal L}^P |\phi_{\rm pair} \rangle,\\ {\cal P}_G&=\exp\left[ \sum_i g_i n_{i\uparrow} n_{i\downarrow} \right],\\ {\cal P}_J&=\exp\left[\frac{1}{2} \sum_{i\neq j} v_{ij} (n_i-1)(n_j-1)\right],\\ {\cal P}_{d-h}^{(2)}&= \exp \left[ \sum_t \sum_{n=0}^2 (\alpha_{2nt}^d \sum_{i}\xi_{i2nt}^d+\alpha_{2nt}^h \sum_{i}\xi_{i2nt}^h)\right],\\ {\cal P}_{d-h}^{(4)}&= \exp \left[ \sum_t \sum_{n=0}^4 (\alpha_{4nt}^d \sum_{i}\xi_{i4nt}^d+\alpha_{4nt}^h \sum_{i}\xi_{i4nt}^h)\right],\\ + {\cal N}_{\rm General RBM}&= \exp \left[ \sum_i a_{i\sigma} n_{i\sigma} \right] \prod_k^{N_h} \cosh \left[ b_k + \sum_{i\sigma} W_{i\sigma k} n_{i\sigma} \right],\\ {\cal L}_S&=\frac{2S+1}{8 \pi^2}\int d\Omega P_s(\cos \beta) \hat{R}(\Omega),\\ {\cal L}_K&=\frac{1}{N_s}\sum_{{\boldsymbol R}}e^{i {\boldsymbol K} \cdot{\boldsymbol R} } \hat{T}_{\boldsymbol R},\\ {\cal L}_P&=\sum_{\alpha}p_{\alpha} \hat{G}_{\alpha}, @@ -118,6 +119,15 @@ **DH4**: :math:`{\cal P}_{d-h}^{(4)}` で表される4サイトのダブロン・ホロン相関因子を指定します。 + + **GeneralRBM_PhysLayer**: + :math:`{\cal N}_{\rm General RBM}` で表されるRBM相関因子のうち、最適化の対象とする変分パラメータ :math:`a_{i\sigma}` を指定します。 + + **GeneralRBM_HiddenLayer**: + :math:`{\cal N}_{\rm General RBM}` で表されるRBM相関因子のうち、最適化の対象とする変分パラメータ :math:`h_{k}` を指定します。 + + **GeneralRBM_PhysHidden**: + :math:`{\cal N}_{\rm General RBM}` で表されるRBM相関因子のうち、最適化の対象とする変分パラメータ :math:`W_{i\sigma k}` を指定します。 **Orbital/OrbitalAntiParallel (orbitalidx.def)**: スピンが反平行のペア軌道 :math:`|\phi_{\rm pair} \rangle` を設定します。 @@ -149,6 +159,15 @@ **InDH4**: :math:`{\cal P}_{d-h}^{(4)}` 内の4サイトのダブロン・ホロン相関因子 :math:`\alpha_{4nt}^{d(h)}` の初期値を設定します。 + + **InGeneralRBM_PhysLayer**: + :math:`{\cal N}_{\rm General RBM}` で表されるRBM相関因子のうち、最適化の対象とする変分パラメータ :math:`a_{i\sigma}` の初期値を設定します。 + + **InGeneralRBM_HiddenLayer**: + :math:`{\cal N}_{\rm General RBM}` で表されるRBM相関因子のうち、最適化の対象とする変分パラメータ :math:`h_{k}` の初期値を設定します。 + + **InGeneralRBM_PhysHidden**: + :math:`{\cal N}_{\rm General RBM}` で表されるRBM相関因子のうち、最適化の対象とする変分パラメータ :math:`W_{i\sigma k}` の初期値を設定します。 **InOrbital/InOrbitalAntiParallel**: ペア軌道 :math:`|\phi_{\rm pair} \rangle` の :math:`f_{i\uparrow j\downarrow}` @@ -239,7 +258,10 @@ Gutzwiller 最適化するGutzwiller因子を設定します。 Jastrow 最適化する電荷Jastrow因子を指定します。 DH2 最適化する2サイトダブロン・ホロン相関因子を指定します。 - DH4 最適化する4サイトダブロン・ホロン相関因子を指定します。 + DH4 最適化する4サイトダブロン・ホロン相関因子を指定します。 + GeneralRBM_PhysLayer 一般的なRBM相関因子のうち、最適化する物理層での変分パラメータを指定します。 + GeneralRBM_HiddenLayer 一般的なRBM相関因子のうち、最適化する隠れ層での変分パラメータを指定します。 + GeneralRBM_PhysHidden 一般的なRBM相関因子のうち、最適化する物理層と隠れ層を繋ぐ変分パラメータを指定します。 Orbital :math:`^*` 反平行のスピンを持つペア軌道因子を指定します。 OrbitalAntiParallel 反平行のスピンを持つペア軌道因子を指定します。 OrbitalParallel 平行のスピンを持つペア軌道因子を指定します。 @@ -248,7 +270,10 @@ InGutzwiller Gutzwiller因子の初期値を設定します。 InJastrow 電荷Jastrow因子の初期値を設定します。 InDH2 2サイトダブロン・ホロン相関因子の初期値を設定します。 - InDH4 4サイトダブロン・ホロン相関因子の初期値を設定します。 + InDH4 4サイトダブロン・ホロン相関因子の初期値を設定します。 + InGeneralRBM_PhysLayer 一般的なRBM相関因子のうち、最適化する物理層での変分パラメータの初期値を設定します。 + InGeneralRBM_HiddenLayer 一般的なRBM相関因子のうち、最適化する隠れ層での変分パラメータの初期値を設定します。 + InGeneralRBM_PhysHidden 一般的なRBM相関因子のうち、最適化する物理層と隠れ層を繋ぐ変分パラメータの初期値を設定します。 InOrbital ペア軌道因子 :math:`f_{i\uparrow j\downarrow}` の初期値を設定します。 InOrbitalAntiParallel ペア軌道因子 :math:`f_{i\uparrow j\downarrow}` の初期値を設定します。 InOrbitalParallel ペア軌道因子 :math:`f_{i\sigma j\sigma}` の初期値を設定します。 @@ -294,7 +319,8 @@ ModParaファイル (modpara.def) NExUpdatePath 0 RndSeed 11272 NSplitSize 1 - NStore 1 + NStore 1 + NneuronGeneral 32 ファイル形式 ^^^^^^^^^^^^ @@ -552,6 +578,12 @@ ModParaファイル (modpara.def) を陽に構築せずに解くことでメモリを削減する [4]_ オプション[NeuscammanUmrigarChan_ ](1で機能On, ``NStore`` は1に固定されます)。 +- ``NneuronGeneral`` + + **形式 :** int型 (デフォルト値=0) + + **説明 :** RBMの隠れ層にあるニューロン数 :math:`N_{\rm General RBM}`を指定する整数。 + LocSpin指定ファイル(locspn.def) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1757,6 +1789,383 @@ DH4指定ファイル - [ int02 ]-[ int10 ] を指定する際、範囲外の整数を指定した場合はエラー終了します。 +GeneralRBM_PhysLayer指定ファイル +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +RBM因子 + +.. math:: + + {\cal N}_{\rm General RBM}= \exp \left[ \sum_i a_{i\sigma} n_{i\sigma} \right] \prod_k^{N_{\rm neuronGeneral}} \cosh \left[ b_k + \sum_{i\sigma} W_{i\sigma k} n_{i\sigma} \right] + +のうち、 :math:`\exp \left[ \sum_i a_{i\sigma} n_{i\sigma} \right] ` の設定を行います。指定するパラメータはサイト番号 :math:`i`、スピン番号 :math:`\sigma`、および :math:`a_{i \sigma}` の変分パラメータの番号です。以下にファイル例を記載します。 + +:: + + -------------------- + NRBM_PhysLayerIdx 1 + ComplexType 1 + i s RBM_PhysLayer_Idx + -------------------- + 0 0 0 + 0 1 0 + 1 0 0 + 1 1 0 + (continue...) + 0 1 + +ファイル形式 +^^^^^^^^^^^^ + +以下のように行数に応じ異なる形式をとります( :math:`N_s` はサイト数、 :math:`N_v` は変分パラメータの種類の数)。 + +- 1行: ヘッダ(何が書かれても問題ありません)。 + +- 2行: [string01] [int01] + +- 3行: [string02] [int02] + +- 4-5行: ヘッダ(何が書かれても問題ありません)。 + +- 6 - (5+ :math:`2N_s`) 行: [int03] [int04] [int05] + +- (6+ :math:`2N_s` ) - + (5+ :math:`2N_s` + :math:`N_v`)行:[int06] [int07] + +パラメータ +^^^^^^^^^^ + +- [ string01 ] + + **形式 :** string型 (空白不可) + + **説明 :** + :math:`a_{i \sigma }` の変分パラメータの種類の総数のキーワード名を指定します(任意)。 + +- [ int01 ] + + **形式 :** int型 (空白不可) + + **説明 :** :math:`a_{i \sigma }` の変分パラメータの種類の総数を指定します。 + +- [ string02 ] + + **形式 :** string型 (空白不可) + + **説明 :** + :math:`a_{i \sigma }` の変分パラメータの型を指定するためのキーワード名を指定します(任意)。 + +- [ int02 ] + + **形式 :** int型 (空白不可) + + **説明 :** + :math:`a_{i \sigma }` の変分パラメータの型を指定します。0が実数、1が複素数に対応します。 + +- [ int03 ] + + **形式 :** int型 (空白不可) + + **説明 :** + サイト番号を指定する整数。0以上 ``Nsite`` 未満で指定します。 + +- [ int04 ] + + **形式 :** int型 (空白不可) + + **説明 :** + スピン番号を指定する整数。0もしくは1で指定します。 + +- [ int05 ] + + **形式 :** int型 (空白不可) + + **説明 :** + :math:`a_{i \sigma }` の変分パラメータの種類を表します。0以上[int01]未満で指定します。 + +- [ int06 ] + + **形式 :** int型 (空白不可) + + **説明 :** + :math:`a_{i \sigma }` の変分パラメータの種類を表します(最適化有無の設定用)。0以上[int01]未満で指定します。 + +- [ int07 ] + + **形式 :** int型 (空白不可) + + **説明 :** + [int06]で指定した :math:`a_{i \sigma }` の変分パラメータの最適化有無を設定します。最適化する場合は1、最適化しない場合は0とします。 + +使用ルール +^^^^^^^^^^ + +本ファイルを使用するにあたってのルールは以下の通りです。 + +- 本機能はベータ版のため、使用には十分注意してください。また、正式リリースした際に、ファイル形式や実装が変更される可能性があります。 + +- 本機能は ``ComplexType=1`` かつ ペア軌道のうち ``Orbital`` のみを指定したVMC計算のみ使用可能です。Power Lanczosの計算には対応していません。 + +- 行数固定で読み込みを行う為、ヘッダの省略はできません。 + +- [ int01 ] と定義されている変分パラメータの種類の総数が異なる場合はエラー終了します。 + +- [ int02 ]-[ int07 ] を指定する際、範囲外の整数を指定した場合はエラー終了します。 + + +GeneralRBM_HiddenLayer指定ファイル +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +RBM因子 + +.. math:: + + {\cal N}_{\rm General RBM}= \exp \left[ \sum_i a_{i\sigma} n_{i\sigma} \right] \prod_k^{N_{\rm neuronGeneral}} \cosh \left[ b_k + \sum_{i\sigma} W_{i\sigma k} n_{i\sigma} \right] + + +のうち、 :math:`\prod_k^{N_{\rm neuronGeneral}} \cosh \left[ b_k + \sum_{i\sigma} W_{i\sigma k} n_{i\sigma} \right] ` の隠れ層のみが関わる箇所の設定を行います。指定するパラメータは隠れニューロンの番号 :math:`k` と :math:`h_{k}` の変分パラメータの番号です。以下にファイル例を記載します。 + +:: + + -------------------- + NRBM_HiddenLayerIdx 2 + ComplexType 1 + k RBM_HiddenLayer_Idx + -------------------- + 0 0 + 1 0 + 2 0 + 3 0 + (continue...) + 0 1 + 1 1 + +ファイル形式 +^^^^^^^^^^^^ + +以下のように行数に応じ異なる形式をとります( :math:`N_{\rm neuronGeneral}` は隠れニューロンの数、 :math:`N_v` は変分パラメータの種類の数)。 + +- 1行: ヘッダ(何が書かれても問題ありません)。 + +- 2行: [string01] [int01] + +- 3行: [string02] [int02] + +- 4-5行: ヘッダ(何が書かれても問題ありません)。 + +- 6 - (5+ :math:`N_{\rm neuronGeneral}`) 行: [int03] [int04] + +- (6+ :math:`N_{\rm neuronGeneral}` ) - + (5+ :math:`N_{\rm neuronGeneral}` + :math:`N_v`)行:[int05] [int06] + +パラメータ +^^^^^^^^^^ + +- [ string01 ] + + **形式 :** string型 (空白不可) + + **説明 :** + :math:`h_{k}` の変分パラメータの種類の総数のキーワード名を指定します(任意)。 + +- [ int01 ] + + **形式 :** int型 (空白不可) + + **説明 :** :math:`h_{k}` の変分パラメータの種類の総数を指定します。 + +- [ string02 ] + + **形式 :** string型 (空白不可) + + **説明 :** + :math:`h_{k}` の変分パラメータの型を指定するためのキーワード名を指定します(任意)。 + +- [ int02 ] + + **形式 :** int型 (空白不可) + + **説明 :** + :math:`h_{k}` の変分パラメータの型を指定します。0が実数、1が複素数に対応します。 + +- [ int03 ] + + **形式 :** int型 (空白不可) + + **説明 :** + サイト番号を指定する整数。0以上 ``NneuronGeneral`` 未満で指定します。 + +- [ int04 ] + + **形式 :** int型 (空白不可) + + **説明 :** + :math:`h_{k}` の変分パラメータの種類を表します。0以上[int01]未満で指定します。 + +- [ int05 ] + + **形式 :** int型 (空白不可) + + **説明 :** + :math:`h_{k}` の変分パラメータの種類を表します(最適化有無の設定用)。0以上[int01]未満で指定します。 + +- [ int06 ] + + **形式 :** int型 (空白不可) + + **説明 :** + [int06]で指定した :math:`h_{k}` の変分パラメータの最適化有無を設定します。最適化する場合は1、最適化しない場合は0とします。 + +使用ルール +^^^^^^^^^^ + +本ファイルを使用するにあたってのルールは以下の通りです。 + +- 本機能はベータ版のため、使用には十分注意してください。また、正式リリースした際に、ファイル形式や実装が変更される可能性があります。 + +- 本機能は ``ComplexType=1`` かつ ペア軌道のうち ``Orbital`` のみを指定したVMC計算のみ使用可能です。Power Lanczosの計算には対応していません。 + +- 行数固定で読み込みを行う為、ヘッダの省略はできません。 + +- [ int01 ] と定義されている変分パラメータの種類の総数が異なる場合はエラー終了します。 + +- [ int02 ]-[ int06 ] を指定する際、範囲外の整数を指定した場合はエラー終了します。 + +GeneralRBM_PhysHidden指定ファイル +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +RBM因子 + +.. math:: + + {\cal N}_{\rm General RBM}= \exp \left[ \sum_i a_{i\sigma} n_{i\sigma} \right] \prod_k^{N_{\rm neuronGeneral}} \cosh \left[ b_k + \sum_{i\sigma} W_{i\sigma k} n_{i\sigma} \right] + + +のうち、 :math:`\prod_k^{N_{\rm neuronGeneral}} \cosh \left[ b_k + \sum_{i\sigma} W_{i\sigma k} n_{i\sigma} \right] ` の隠れ層と物理層どちらも関わる箇所の設定を行います。指定するパラメータはサイト番号、スピン番号、および隠れニューロンの番号 :math:`i \sigma k` と :math:`W_{i \sigma k}` の変分パラメータの番号です。以下にファイル例を記載します。 + +:: + + -------------------- + NRBM_HiddenLayerIdx 32 + ComplexType 1 + i s k RBM_PhysHidden_Idx + -------------------- + 0 0 0 0 + 0 1 0 1 + 1 0 0 2 + 1 1 0 3 + 2 0 0 4 + 2 1 0 5 + (continue...) + 0 1 + 1 1 + (continue...) + +ファイル形式 +^^^^^^^^^^^^ + +以下のように行数に応じ異なる形式をとります( :math:`N_s` はサイト数、:math:`N_{\rm neuronGeneral}` は隠れニューロンの数、 :math:`N_v` は変分パラメータの種類の数)。 + +- 1行: ヘッダ(何が書かれても問題ありません)。 + +- 2行: [string01] [int01] + +- 3行: [string02] [int02] + +- 4-5行: ヘッダ(何が書かれても問題ありません)。 + +- 6 - (5+ :math:`2 N_s N_{\rm neuronGeneral}`) 行: [int03] [int04] [int05] [int06] + +- (6+ :math:`2 N_s N_{\rm neuronGeneral}` ) - + (5+ :math:`2 N_s N_{\rm neuronGeneral}` + :math:`N_v`)行:[int07] [int08] + +パラメータ +^^^^^^^^^^ + +- [ string01 ] + + **形式 :** string型 (空白不可) + + **説明 :** + :math:`W_{i \sigma k}` の変分パラメータの種類の総数のキーワード名を指定します(任意)。 + +- [ int01 ] + + **形式 :** int型 (空白不可) + + **説明 :** :math:`W_{i \sigma k}` の変分パラメータの種類の総数を指定します。 + +- [ string02 ] + + **形式 :** string型 (空白不可) + + **説明 :** + :math:`W_{i \sigma k}` の変分パラメータの型を指定するためのキーワード名を指定します(任意)。 + +- [ int02 ] + + **形式 :** int型 (空白不可) + + **説明 :** + :math:`W_{i \sigma k}` の変分パラメータの型を指定します。0が実数、1が複素数に対応します。 + +- [ int03 ] + + **形式 :** int型 (空白不可) + + **説明 :** + サイト番号を指定する整数。0以上 ``Nsite`` 未満で指定します。 + +- [ int04 ] + + **形式 :** int型 (空白不可) + + **説明 :** + スピン番号を指定する整数。0もしくは1で指定します。 + +- [ int05 ] + + **形式 :** int型 (空白不可) + + **説明 :** + サイト番号を指定する整数。0以上 ``NneuronGeneral`` 未満で指定します。 + +- [ int06 ] + + **形式 :** int型 (空白不可) + + **説明 :** + :math:`W_{i \sigma k}` の変分パラメータの種類を表します。0以上[int01]未満で指定します。 + +- [ int07 ] + + **形式 :** int型 (空白不可) + + **説明 :** + :math:`W_{i \sigma k}` の変分パラメータの種類を表します(最適化有無の設定用)。0以上[int01]未満で指定します。 + +- [ int08 ] + + **形式 :** int型 (空白不可) + + **説明 :** + [int06]で指定した :math:`W_{i \sigma k}` の変分パラメータの最適化有無を設定します。最適化する場合は1、最適化しない場合は0とします。 + +使用ルール +^^^^^^^^^^ + +本ファイルを使用するにあたってのルールは以下の通りです。 + +- 本機能はベータ版のため、使用には十分注意してください。また、正式リリースした際に、ファイル形式や実装が変更される可能性があります。 + +- 本機能は ``ComplexType=1`` かつ ペア軌道のうち ``Orbital`` のみを指定したVMC計算のみ使用可能です。Power Lanczosの計算には対応していません。 + +- 行数固定で読み込みを行う為、ヘッダの省略はできません。 + +- [ int01 ] と定義されている変分パラメータの種類の総数が異なる場合はエラー終了します。 + +- [ int02 ]-[ int08 ] を指定する際、範囲外の整数を指定した場合はエラー終了します。 + Orbital/OrbitalAntiParallel指定ファイル(orbitalidx.def) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1864,7 +2273,7 @@ Orbital/OrbitalAntiParallel指定ファイル(orbitalidx.def) **形式 :** int型 (空白不可) **説明 :** - [int06]で指定した変分パラメータの最適化有無を設定します。最適化する場合は1、最適化しない場合は0とします。 + [int07]で指定した変分パラメータの最適化有無を設定します。最適化する場合は1、最適化しない場合は0とします。 使用ルール ^^^^^^^^^^ @@ -2234,7 +2643,7 @@ TransSym指定ファイル(qptransidx.def) 各変分パラメータの初期値を設定することが可能です。 変分パラメータの種類は :ref:`InputFileList` において -``InGutzwiller``, ``InJastrow``, ``InDH2``, ``InDH4``, ``InOrbital``, +``InGutzwiller``, ``InJastrow``, ``InDH2``, ``InDH4``, ``InGeneralRBM_PhysLayer``, ``InGeneralRBM_HiddenLayer``, ``InGeneralRBM_PhysHidden``, ``InOrbital``, ``InOrbitalAntiParallel``, ``InOrbitalParallel``, ``InOrbitalGeneral`` をキーワードとして指定することで区別します。なお、ファイルフォーマットは全て共通です。 以下、 ``InJastrow`` ファイルの例を記載します。 @@ -2301,6 +2710,8 @@ TransSym指定ファイル(qptransidx.def) 本ファイルを使用するにあたってのルールは以下の通りです。 +- RBM相関因子のインプット機能は、現バージョンではベータ版です。今後のバージョンアップにより、ファイル形式や実装が変更される可能性があります。本機能を使用する際は、十分な検証を行ってください。 + - 行数固定で読み込みを行う為、ヘッダの省略はできません。 - [ int01 ] と定義されている変分パラメータの総数が異なる場合はエラー終了します。 diff --git a/doc/ja/source/fourier/format.rst b/doc/ja/source/fourier/format.rst index 9dc217da..5791fda2 100644 --- a/doc/ja/source/fourier/format.rst +++ b/doc/ja/source/fourier/format.rst @@ -10,7 +10,7 @@ :ref:`tutorial` でのファイル名は ``geometry.dat`` . 各サイトの位置と軌道の情報は -mVMC/:math:`{\mathcal H}\Phi` のスタンダードモードを用いた場合には +mVMC/:math:`{\mathcal H}\Phi` のスタンンダードモードを用いた場合には 自動的に生成される. :: diff --git a/doc/ja/source/output.rst b/doc/ja/source/output.rst index e37d2566..d53d906c 100644 --- a/doc/ja/source/output.rst +++ b/doc/ja/source/output.rst @@ -8,33 +8,39 @@ 出力ファイルの一覧は下記の通りです。\*\*\*には ``ModPara`` ファイルの ``CParaFileHead`` で指定されるヘッダが、xxxには ``CDataFileHead`` で指定されるヘッダが、yyyには ``ModPara`` ファイルの ``NDataIdxStart``, ``NDataQtySmp`` に従い ``NDataIdxStart`` :math:`\cdots` ``NDataIdxStart`` + ``NDataQtySmp`` の順に記載されます。また、zzzには ``ModPara`` ファイルの ``NDataIdxStart`` が記載されます。 -+--------------------------------------+-----------------------------------------------+ -| ファイル名 | 対応するファイルの中身 | -+======================================+===============================================+ -| \*\*\*\_opt.dat | 最適化された全パラメータ. | -+--------------------------------------+-----------------------------------------------+ -| \*\*\*\_gutzwiller\_opt.dat | 最適化されたGutzwiller因子. | -+--------------------------------------+-----------------------------------------------+ -| \*\*\*\_jastrow\_opt.dat | 最適化されたJastrow因子. | -+--------------------------------------+-----------------------------------------------+ -| \*\*\*\_doublonHolon2site\_opt.dat | 最適化された2サイトダブロン-ホロン相関因子. | -+--------------------------------------+-----------------------------------------------+ -| \*\*\*\_doublonHolon4site\_opt.dat | 最適化された4サイトダブロン-ホロン相関因子. | -+--------------------------------------+-----------------------------------------------+ -| \*\*\*\_orbital\_opt.dat | 最適化されたペア軌道因子. | -+--------------------------------------+-----------------------------------------------+ -| xxx\_out\_yyy.dat | エネルギーとその分散. | -+--------------------------------------+-----------------------------------------------+ -| xxx\_var\_yyy.dat | パラメータ最適化過程の情報. | -+--------------------------------------+-----------------------------------------------+ -| xxx\_CalcTimer.dat | 各プロセスに対する計算時間に関する情報. | -+--------------------------------------+-----------------------------------------------+ -| xxx\_time\_zzz.dat | モンテカルロサンプリングの過程に関する情報. | -+--------------------------------------+-----------------------------------------------+ -| xxx\_cisajs\_yyy.dat | 一体グリーン関数. | -+--------------------------------------+-----------------------------------------------+ -| xxx\_cisajscktalt\_yyy.dat | 二体グリーン関数. | -+--------------------------------------+-----------------------------------------------+ ++------------------------------------------+----------------------------------------------------------------------+ +| ファイル名 | 対応するファイルの中身 | ++==========================================+======================================================================+ +| \*\*\*\_opt.dat | 最適化された全パラメータ. | ++------------------------------------------+----------------------------------------------------------------------+ +| \*\*\*\_gutzwiller\_opt.dat | 最適化されたGutzwiller因子. | ++------------------------------------------+----------------------------------------------------------------------+ +| \*\*\*\_jastrow\_opt.dat | 最適化されたJastrow因子. | ++------------------------------------------+----------------------------------------------------------------------+ +| \*\*\*\_doublonHolon2site\_opt.dat | 最適化された2サイトダブロン-ホロン相関因子. | ++------------------------------------------+----------------------------------------------------------------------+ +| \*\*\*\_doublonHolon4site\_opt.dat | 最適化された4サイトダブロン-ホロン相関因子. | ++------------------------------------------+----------------------------------------------------------------------+ +| \*\*\*\_generalRBM\_physlayer\_opt.dat | 最適化されたRBM相関因子のうち、物理層のみに関わる変分パラメータ. | ++------------------------------------------+----------------------------------------------------------------------+ +| \*\*\*\_generalRBM\_hiddenlayer\_opt.dat | 最適化されたRBM相関因子のうち、隠れ層のみに関わる変分パラメータ. | ++------------------------------------------+----------------------------------------------------------------------+ +| \*\*\*\_generalRBM\_physhidden\_opt.dat | 最適化されたRBM相関因子のうち、物理層と隠れ層を繋ぐ変分パラメータ. | ++------------------------------------------+----------------------------------------------------------------------+ +| \*\*\*\_orbital\_opt.dat | 最適化されたペア軌道因子. | ++------------------------------------------+----------------------------------------------------------------------+ +| xxx\_out\_yyy.dat | エネルギーとその分散. | ++------------------------------------------+----------------------------------------------------------------------+ +| xxx\_var\_yyy.dat | パラメータ最適化過程の情報. | ++------------------------------------------+----------------------------------------------------------------------+ +| xxx\_CalcTimer.dat | 各プロセスに対する計算時間に関する情報. | ++------------------------------------------+----------------------------------------------------------------------+ +| xxx\_time\_zzz.dat | モンテカルロサンプリングの過程に関する情報. | ++------------------------------------------+----------------------------------------------------------------------+ +| xxx\_cisajs\_yyy.dat | 一体グリーン関数. | ++------------------------------------------+----------------------------------------------------------------------+ +| xxx\_cisajscktalt\_yyy.dat | 二体グリーン関数. | ++------------------------------------------+----------------------------------------------------------------------+ 変分パラメータ出力ファイル(\*\*\*\_opt.dat) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -43,7 +49,7 @@ SR法で最適化された変分パラメータとエネルギーが一斉出力 変分パラメータが一斉に読み込めるため、変分パラメータ最適化後の物理量の計算を行う場合に使用します。 出力されるデータは -.. math:: \langle H \rangle, \langle H^2 \rangle, g_i, v_{ij}, \alpha_{2nt}^{d(h)}, \alpha_{4nt}^{d(h)}, f_{ij} \nonumber +.. math:: \langle H \rangle, \langle H^2 \rangle, g_i, v_{ij}, \alpha_{2nt}^{d(h)}, \alpha_{4nt}^{d(h)}, a_{i\sigma}, b_{k}, W_{i\sigma k}, f_{ij} \nonumber で、それぞれの平均値と標準偏差が出力されます(平均値は実数、虚数の順に、標準偏差は実数のみ出力)。 @@ -82,6 +88,12 @@ SR法で最適化された2サイトのdoublon-holon相関因子が出力され SR法で最適化された4サイトのdoublon-holon相関因子が出力されます。 出力形式は :ref:`InputParam` のInDH4指定ファイルと同じです。 +RBM相関因子出力ファイル(\*\*\*\_generalRBM\_physlayer\_opt.dat, \*\*\*\_generalRBM\_hiddenlayer\_opt.dat, \*\*\*\_generalRBM\_physhidden\_opt.dat) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +SR法で最適化されたRBM相関因子が出力されます。 +それぞれの出力形式は :ref:`InputParam` のInGeneralRBM_PhysLayer, InGeneralRBM_HiddenLayer, InGeneralRBM_PhysHidden指定ファイルと同じです。 + ペア軌道出力ファイル(\*\*\*\_orbital\_opt.dat) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/ja/source/start.rst b/doc/ja/source/start.rst index 04c6e1ad..43693657 100644 --- a/doc/ja/source/start.rst +++ b/doc/ja/source/start.rst @@ -253,7 +253,7 @@ mVMCは次の二つのいずれかのモードで動作します。 また、エキスパートモード用の入力ファイルを自動生成した後、計算をする前にそれらを手動で編集して より広範なモデルに対応させることも可能です。 -これらのモードを用いて次のように計算を行います。 +これらのモードを用いて次の用に計算を行います。 #. 計算用ディレクトリの作成 diff --git a/src/mVMC/avevar.c b/src/mVMC/avevar.c index e7157d48..99e7d06e 100644 --- a/src/mVMC/avevar.c +++ b/src/mVMC/avevar.c @@ -146,6 +146,81 @@ void OutputOptData() { count_i +=2*5*NDoublonHolon4siteIdx; } +//RBM + if(NChargeRBM_PhysLayerIdx != 0){ + sprintf(fileName, "%s_chargeRBM_physlayer_opt.dat", CParaFileHead); + Child_OutputOptData(fp, fileName, "NChargeRBM_PhysLayerIdx", + NChargeRBM_PhysLayerIdx, NChargeRBM_PhysLayerIdx, + count_i, n); + count_i += NChargeRBM_PhysLayerIdx; + } + + if(NSpinRBM_PhysLayerIdx != 0){ + sprintf(fileName, "%s_spinRBM_physlayer_opt.dat", CParaFileHead); + Child_OutputOptData(fp, fileName, "NSpinRBM_PhysLayerIdx", + NSpinRBM_PhysLayerIdx, NSpinRBM_PhysLayerIdx, + count_i, n); + count_i += NSpinRBM_PhysLayerIdx; + } + + if(NGeneralRBM_PhysLayerIdx != 0){ + sprintf(fileName, "%s_generalRBM_physlayer_opt.dat", CParaFileHead); + Child_OutputOptData(fp, fileName, "NGeneralRBM_PhysLayerIdx", + NGeneralRBM_PhysLayerIdx, NGeneralRBM_PhysLayerIdx, + count_i, n); + count_i += NGeneralRBM_PhysLayerIdx; + } + + if(NChargeRBM_HiddenLayerIdx != 0){ + sprintf(fileName, "%s_chargeRBM_hiddenlayer_opt.dat", CParaFileHead); + Child_OutputOptData(fp, fileName, "NChargeRBM_HiddenLayerIdx", + NChargeRBM_HiddenLayerIdx, NChargeRBM_HiddenLayerIdx, + count_i, n); + count_i += NChargeRBM_HiddenLayerIdx; + } + + if(NSpinRBM_HiddenLayerIdx != 0){ + sprintf(fileName, "%s_spinRBM_hiddenlayer_opt.dat", CParaFileHead); + Child_OutputOptData(fp, fileName, "NSpinRBM_HiddenLayerIdx", + NSpinRBM_HiddenLayerIdx, NSpinRBM_HiddenLayerIdx, + count_i, n); + count_i += NSpinRBM_HiddenLayerIdx; + } + + if(NGeneralRBM_HiddenLayerIdx != 0){ + sprintf(fileName, "%s_generalRBM_hiddenlayer_opt.dat", CParaFileHead); + Child_OutputOptData(fp, fileName, "NGeneralRBM_HiddenLayerIdx", + NGeneralRBM_HiddenLayerIdx, NGeneralRBM_HiddenLayerIdx, + count_i, n); + count_i += NGeneralRBM_HiddenLayerIdx; + } + + + if(NChargeRBM_PhysHiddenIdx != 0){ + sprintf(fileName, "%s_chargeRBM_physhidden_opt.dat", CParaFileHead); + Child_OutputOptData(fp, fileName, "NChargeRBM_PhysHiddenIdx", + NChargeRBM_PhysHiddenIdx, NChargeRBM_PhysHiddenIdx, + count_i, n); + count_i += NChargeRBM_PhysHiddenIdx; + } + + if(NSpinRBM_PhysHiddenIdx != 0){ + sprintf(fileName, "%s_spinRBM_physhidden_opt.dat", CParaFileHead); + Child_OutputOptData(fp, fileName, "NSpinRBM_PhysHiddenIdx", + NSpinRBM_PhysHiddenIdx, NSpinRBM_PhysHiddenIdx, + count_i, n); + count_i += NSpinRBM_PhysHiddenIdx; + } + + if(NGeneralRBM_PhysHiddenIdx != 0){ + sprintf(fileName, "%s_generalRBM_physhidden_opt.dat", CParaFileHead); + Child_OutputOptData(fp, fileName, "NGeneralRBM_PhysHiddenIdx", + NGeneralRBM_PhysHiddenIdx, NGeneralRBM_PhysHiddenIdx, + count_i, n); + count_i += NGeneralRBM_PhysHiddenIdx; + } +//RBM + if(NSlater != 0){ if(iFlgOrbitalGeneral==0) { sprintf(fileName, "%s_orbital_opt.dat", CParaFileHead); diff --git a/src/mVMC/calgrn.c b/src/mVMC/calgrn.c index 8d13215b..0ccd0dc9 100644 --- a/src/mVMC/calgrn.c +++ b/src/mVMC/calgrn.c @@ -30,25 +30,28 @@ along with this program. If not, see http://www.gnu.org/licenses/. #define _CALGRN_SRC void CalculateGreenFunc(const double w, const double complex ip, int *eleIdx, int *eleCfg, - int *eleNum, int *eleProjCnt) { + int *eleNum, int *eleProjCnt, const double complex *rbmCnt) { int idx,idx0,idx1; int ri,rj,s,rk,rl,t; double complex tmp; int *myEleIdx, *myEleNum, *myProjCntNew; double complex *myBuffer; + double complex *myRBMCntNew; RequestWorkSpaceThreadInt(Nsize+Nsite2+NProj); - RequestWorkSpaceThreadComplex(NQPFull+2*Nsize); + RequestWorkSpaceThreadComplex(NQPFull+2*Nsize + FlagRBM*NRBM_PhysLayerIdx+Nneuron); + //RequestWorkSpaceThreadComplex(NQPFull+2*Nsize); /* GreenFunc1: NQPFull, GreenFunc2: NQPFull+2*Nsize */ - #pragma omp parallel default(shared) \ - private(myEleIdx,myEleNum,myProjCntNew,myBuffer,idx) +#pragma omp parallel default(shared) \ + private(myRBMCntNew, myEleIdx,myEleNum,myProjCntNew,myBuffer,idx) { myEleIdx = GetWorkSpaceThreadInt(Nsize); myEleNum = GetWorkSpaceThreadInt(Nsite2); myProjCntNew = GetWorkSpaceThreadInt(NProj); myBuffer = GetWorkSpaceThreadComplex(NQPFull+2*Nsize); + myRBMCntNew = GetWorkSpaceThreadComplex(NRBM_PhysLayerIdx+Nneuron); #pragma loop noalias for(idx=0;idx4.0 [ip] MUST be specified. // Hence we have to fall back to default(shared) here. #pragma omp parallel default(shared) \ - private(myEleIdx,myEleNum,myProjCntNew,myBuffer,myEnergy, idx, ri, rj, rk, rl, s, t) \ - firstprivate(Nsize, Nsite2, NProj, NQPFull, NCoulombIntra, CoulombIntra, ParaCoulombIntra, \ + private(myRBMCntNew, myEleIdx,myEleNum,myProjCntNew,myBuffer,myEnergy, idx, ri, rj, rk, rl, s, t) \ + firstprivate(NRBM_PhysLayerIdx, Nneuron, Nsize, Nsite2, NProj, NQPFull, NCoulombIntra, CoulombIntra, ParaCoulombIntra, \ NCoulombInter, CoulombInter, ParaCoulombInter, NHundCoupling, HundCoupling, ParaHundCoupling, \ NTransfer, Transfer, ParaTransfer, NPairHopping, PairHopping, ParaPairHopping, \ NExchangeCoupling, ExchangeCoupling, ParaExchangeCoupling, NInterAll, InterAll, ParaInterAll, n0, n1) \ - shared(eleCfg, eleProjCnt, eleIdx, eleNum) reduction(+:e) + shared(eleCfg, eleProjCnt, eleIdx, eleNum, rbmCnt, FlagRBM) reduction(+:e) { myEleIdx = GetWorkSpaceThreadInt(Nsize); myEleNum = GetWorkSpaceThreadInt(Nsite2); myProjCntNew = GetWorkSpaceThreadInt(NProj); + if (FlagRBM) { + myRBMCntNew = GetWorkSpaceThreadComplex(NRBM_PhysLayerIdx+Nneuron); + } myBuffer = GetWorkSpaceThreadComplex(NQPFull+2*Nsize); #pragma loop noalias @@ -135,7 +139,7 @@ double complex CalculateHamiltonian(const double complex ip, int *eleIdx, const s = Transfer[idx][3]; myEnergy -= ParaTransfer[idx] - * GreenFunc1(ri,rj,s,ip,myEleIdx,eleCfg,myEleNum,eleProjCnt,myProjCntNew,myBuffer); + * GreenFunc1(ri,rj,s,ip,myEleIdx,eleCfg,myEleNum,eleProjCnt,myProjCntNew,rbmCnt, myRBMCntNew, myBuffer); /* Caution: negative sign */ } @@ -149,7 +153,7 @@ double complex CalculateHamiltonian(const double complex ip, int *eleIdx, const rj = PairHopping[idx][1]; myEnergy += ParaPairHopping[idx] - * GreenFunc2(ri,rj,ri,rj,0,1,ip,myEleIdx,eleCfg,myEleNum,eleProjCnt,myProjCntNew,myBuffer); + * GreenFunc2(ri,rj,ri,rj,0,1,ip,myEleIdx,eleCfg,myEleNum,eleProjCnt,myProjCntNew,rbmCnt,myRBMCntNew,myBuffer); } /* Exchange Coupling */ @@ -157,9 +161,9 @@ double complex CalculateHamiltonian(const double complex ip, int *eleIdx, const for(idx=0;idx void CalculateGreenFunc(const double w, const double complex ip, int *eleIdx, int *eleCfg, - int *eleNum, int *eleProjCnt); + int *eleNum, int *eleProjCnt, const double complex *rbmCnt); void CalculateGreenFuncBF(const double w, const double ip, int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt, const int *eleProjBFCnt); -#endif +#endif \ No newline at end of file diff --git a/src/mVMC/include/calham.h b/src/mVMC/include/calham.h index 44bff34f..ae7ab542 100644 --- a/src/mVMC/include/calham.h +++ b/src/mVMC/include/calham.h @@ -2,7 +2,8 @@ #define _CALHAM #include -double complex CalculateHamiltonian(const double complex ip, int *eleIdx, const int *eleCfg, int *eleNum, const int *eleProjCnt); +double complex CalculateHamiltonian(const double complex ip, int *eleIdx, const int *eleCfg, + int *eleNum, const int *eleProjCnt, const double complex *rbmCnt); double complex CalculateHamiltonian0(const int *eleNum); diff --git a/src/mVMC/include/global.h b/src/mVMC/include/global.h index c0ab8e6d..6e5cf5c9 100644 --- a/src/mVMC/include/global.h +++ b/src/mVMC/include/global.h @@ -130,6 +130,20 @@ int iFlgOrbitalGeneral=0; int iNOrbitalParallel=0; int iNOrbitalAntiParallel=0; +/* restricted Boltzman Machine for variational parameters */ +int Nneuron,NneuronGeneral,NneuronCharge,NneuronSpin; +int NRBM_HiddenLayerIdx,NRBM_PhysLayerIdx,NRBM_PhysHiddenIdx; +int NGeneralRBM_HiddenLayerIdx, *GeneralRBM_HiddenLayerIdx; /* [Nneuron] */ +int NGeneralRBM_PhysLayerIdx, *GeneralRBM_PhysLayerIdx; /* [Nsite2] */ +int NGeneralRBM_PhysHiddenIdx, **GeneralRBM_PhysHiddenIdx; /* [Nsite2][Nneuron] */ +int NChargeRBM_HiddenLayerIdx, *ChargeRBM_HiddenLayerIdx; /* [Nneuron] */ +int NChargeRBM_PhysLayerIdx, *ChargeRBM_PhysLayerIdx; /* [Nsite] */ +int NChargeRBM_PhysHiddenIdx, **ChargeRBM_PhysHiddenIdx; /* [Nsite][Nneuron] */ +int NSpinRBM_HiddenLayerIdx, *SpinRBM_HiddenLayerIdx; /* [Nneuron] */ +int NSpinRBM_PhysLayerIdx, *SpinRBM_PhysLayerIdx; /* [Nsite] */ +int NSpinRBM_PhysHiddenIdx, **SpinRBM_PhysHiddenIdx; /* [Nsite][Nneuron] */ +int NBlockSize_RBMRatio; /* block size for RBMRatio function. It is Tuning for performance. */ + /* zqptransidx.def */ int NQPTrans, **QPTrans, **QPTransInv; /* [NQPTrans][Nsite] */ int **QPTransSgn; /* QPTransSgn[NQPTrans][NSite] = +1 or -1 */ @@ -151,6 +165,9 @@ int NCisAjsCktAltLz, **CisAjsCktAltLzIdx; int *OptFlag; /* [NPara] 1: optimized, 0 or 2: fixed */ int AllComplexFlag;/* 0 -> all real variables, !=0-> including complex variables*/ +/* flag for RBM */ +int FlagRBM=0; + /* flag for anti-periodic boundry condition */ int APFlag; /* 0: periodic, 1: anti-periodic */ @@ -172,6 +189,7 @@ int NFileFlushInterval=1; /***** Variational Parameters *****/ int NPara; /* the total number of variational prameters NPara= NProj + NSlater+ NOptTrans */ int NProj; /* the number of correlation factor */ +int NRBM, NRBM_PhysLayerIdx, NRBM_HiddenLayerIdx; int NProjBF; /* the number of correlation factor */ int NSlater; /* the number of pair orbital (f_ij) = NOrbitalIdx */ int NOptTrans; /* the number of weights for OptTrans. This is used only for variatonal parameters */ @@ -179,6 +197,7 @@ int NOptTrans; /* the number of weights for OptTrans. This is used only for vari int **etaFlag; /* Back Flow correlation factor (eta = 1.0 or ProjBF[0])*/ double complex *Para; /* variatonal parameters */ double complex *Proj; /* correlation factor (Proj =Para) */ +double complex *RBM; /* (Proj =Para) */ double complex *ProjBF; /* Back flow correlation factor (Proj =Para) */ double complex *Slater; /* pair orbital (Slater =Para+NProj) */ double complex *OptTrans; /* weights (OptTrans=Para+NProj+NSlater) */ @@ -197,6 +216,7 @@ int *EleNum; /* EleIdx[sample][ri+si*Nsite] */ int *EleProjCnt; /* EleProjCnt[sample][proj] */ //[s] MERGE BY TM int *EleSpn; /* EleIdx[sample][mi+si*Ne] */ //fsz +double complex *RBMCnt; int *EleProjBFCnt; /* EleProjCnt[sample][proj] */ //[e] MERGE BY TM double *logSqPfFullSlater; /* logSqPfFullSlater[sample] */ @@ -214,12 +234,14 @@ int *TmpEleProjCnt; int *TmpEleSpn; int *TmpEleProjBFCnt; //[e] MERGE BY TM +double complex *TmpRBMCnt; int *BurnEleIdx; int *BurnEleCfg; int *BurnEleNum; int *BurnEleProjCnt; int *BurnEleSpn; +double complex *BurnRBMCnt; int BurnFlag=0; /* 0: off, 1: on */ /***** Slater Elements ******/ @@ -315,6 +337,7 @@ FILE *FileLSCisAjsCktAlt; /***** HitachiTimer *****/ const int NTimer=1000; double Timer[1000], TimerStart[1000]; +double ccc[100]; /* flag for SROptimization*/ int SRFlag; /* 0: periodic, 1: Diagonalization */ diff --git a/src/mVMC/include/locgrn.h b/src/mVMC/include/locgrn.h index d103d294..b856e463 100644 --- a/src/mVMC/include/locgrn.h +++ b/src/mVMC/include/locgrn.h @@ -5,17 +5,18 @@ double complex GreenFunc1(const int ri, const int rj, const int s, const double complex ip, int *eleIdx, const int *eleCfg, int *eleNum, const int *eleProjCnt, - int *projCntNew, double complex *buffer); + int *projCntNew, const double complex *rbmCnt, double complex *rbmCntNew, double complex *buffer); + double complex GreenFunc2(const int ri, const int rj, const int rk, const int rl, const int s, const int t, const double complex ip, int *eleIdx, const int *eleCfg, int *eleNum, const int *eleProjCnt, - int *projCntNew, double complex *buffer); + int *projCntNew, const double complex *rbmCnt, double complex *rbmCntNew, double complex *buffer); double complex GreenFuncN(const int n, int *rsi, int *rsj, const double complex ip, int *eleIdx, const int *eleCfg, int *eleNum, const int *eleProjCnt, - double complex *buffer, int *bufferInt); + const double complex *rbmCnt, double complex *rbmCntNew, double complex *buffer, int *bufferInt); double complex GreenFunc1BF(const int ri, const int rj, const int s, const double complex ip, double complex* bufM, int *eleIdx, int *eleCfg, int *eleNum, const int *eleProjCnt, int *projCntNew, const int *eleProjBFCnt,int *projBFCntNew, double complex* buffer); -#endif +#endif \ No newline at end of file diff --git a/src/mVMC/include/lslocgrn.h b/src/mVMC/include/lslocgrn.h index dd1b5f32..27dd2414 100644 --- a/src/mVMC/include/lslocgrn.h +++ b/src/mVMC/include/lslocgrn.h @@ -3,9 +3,8 @@ #include #include "global.h" -void LSLocalQ(const double complex h1, const double complex ip, int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt, double complex* _LSLocalQ); +void LSLocalQ(const double complex h1, const double complex ip, int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt, double complex *rbmCnt, double complex* _LSLocalQ); -void LSLocalCisAjs(const double complex h1, const double complex ip, int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt); +void LSLocalCisAjs(const double complex h1, const double complex ip, int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt, double complex *rbmCnt); - -#endif +#endif \ No newline at end of file diff --git a/src/mVMC/include/rbm.h b/src/mVMC/include/rbm.h new file mode 100644 index 00000000..387882b7 --- /dev/null +++ b/src/mVMC/include/rbm.h @@ -0,0 +1,22 @@ +#ifndef _RBM_ +#define _RBM_ + +extern inline double complex WeightRBM(const double complex *rbmCnt); +extern inline double complex LogWeightRBM(const double complex *rbmCnt); +extern inline double complex RBMRatio(const double complex *rbmCntNew, const double complex *rbmCntOld); +extern inline double complex LogRBMRatio(const double complex *rbmCntNew, const double complex *rbmCntOld); + +void copyFromBurnSampleRBM(double complex *rbmCnt); +void copyToBurnSampleRBM(double complex *rbmCnt); +void saveRBMCnt(const int sample, const double complex *rbmCnt); + +void RBMDiff(double complex *srOptO, const double complex *rbmCnt, const int *eleNum); + + +void MakeRBMCnt(double complex *rbmCnt, const int *eleNum); +void UpdateRBMCnt(const int ri, const int rj, const int s, + double complex *rbmCntNew, const double complex *rbmCntOld, const int *eleNum); + +void UpdateRBMCnt_fsz(const int ri, const int rj, const int s, const int t, + double complex *rbmCntNew, const double complex *rbmCntOld) ; +#endif diff --git a/src/mVMC/include/readdef.h b/src/mVMC/include/readdef.h index 478e1797..bf86c42f 100644 --- a/src/mVMC/include/readdef.h +++ b/src/mVMC/include/readdef.h @@ -35,10 +35,22 @@ static char cKWListOfFileNameList[][D_CharTmpReadDef]={ "Trans", "CoulombIntra", "CoulombInter", "Hund", "PairHop", "Exchange", "Gutzwiller", "Jastrow", - "DH2", "DH4", "Orbital", "OrbitalAntiParallel", + "DH2", "DH4", + //RBM + "ChargeRBM_HiddenLayer","ChargeRBM_PhysLayer", "ChargeRBM_PhysHidden", + "SpinRBM_HiddenLayer","SpinRBM_PhysLayer", "SpinRBM_PhysHidden", + "GeneralRBM_HiddenLayer","GeneralRBM_PhysLayer", "GeneralRBM_PhysHidden", + //RBM + "Orbital", "OrbitalAntiParallel", "OrbitalParallel", "OrbitalGeneral", "TransSym", "InGutzwiller", "InJastrow", - "InDH2", "InDH4", "InOrbital", "InOrbitalAntiParallel", + "InDH2", "InDH4", + //RBM + "InChargeRBM_HiddenLayer","InChargeRBM_PhysLayer", "InChargeRBM_PhysHidden", + "InSpinRBM_HiddenLayer","InSpinRBM_PhysLayer", "InSpinRBM_PhysHidden", + "InGeneralRBM_HiddenLayer","InGeneralRBM_PhysLayer", "InGeneralRBM_PhysHidden", + //RBM + "InOrbital", "InOrbitalAntiParallel", "InOrbitalParallel", "InOrbitalGeneral", "OneBodyG", "TwoBodyG", "TwoBodyGEx", "InterAll", "OptTrans", "InOptTrans", @@ -53,10 +65,22 @@ enum KWIdxInt{ KWTrans, KWCoulombIntra,KWCoulombInter, KWHund, KWPairHop, KWExchange, KWGutzwiller, KWJastrow, - KWDH2, KWDH4, KWOrbital, KWOrbitalAntiParallel, + KWDH2, KWDH4, + //RBM + KWChargeRBM_HiddenLayer,KWChargeRBM_PhysLayer,KWChargeRBM_PhysHidden, + KWSpinRBM_HiddenLayer,KWSpinRBM_PhysLayer,KWSpinRBM_PhysHidden, + KWGeneralRBM_HiddenLayer,KWGeneralRBM_PhysLayer,KWGeneralRBM_PhysHidden, + //RBM + KWOrbital, KWOrbitalAntiParallel, KWOrbitalParallel, KWOrbitalGeneral, KWTransSym, KWInGutzwiller, KWInJastrow, - KWInDH2, KWInDH4, KWInOrbital,KWInOrbitalAntiParallel, + KWInDH2, KWInDH4, + //RBM + KWInChargeRBM_HiddenLayer,KWInChargeRBM_PhysLayer,KWInChargeRBM_PhysHidden, + KWInSpinRBM_HiddenLayer,KWInSpinRBM_PhysLayer,KWInSpinRBM_PhysHidden, + KWInGeneralRBM_HiddenLayer,KWInGeneralRBM_PhysLayer,KWInGeneralRBM_PhysHidden, + //RBM + KWInOrbital,KWInOrbitalAntiParallel, KWInOrbitalParallel, KWInorbitalGeneral, KWOneBodyG, KWTwoBodyG, KWTwoBodyGEx, KWInterAll, KWOptTrans, KWInOptTrans, @@ -73,6 +97,9 @@ static char (*cFileNameListFile)[D_CharTmpReadDef]; enum ParamIdxInt{ IdxVMCCalcMode, IdxLanczosMode, IdxDataIdxStart, IdxDataQtySmp, IdxNsite, IdxNe, + //RBM + IdxNneuron, IdxNneuronCharge, IdxNneuronSpin,IdxNneuronGeneral, + //RBM IdxSPGaussLeg, IdxSPStot, IdxMPTrans, IdxSROptItrStep, IdxSROptItrSmp, IdxSROptFixSmp, IdxVMCWarmUp, IdxVMCInterval, IdxVMCSample, @@ -80,7 +107,14 @@ enum ParamIdxInt{ IdxNLocSpin,IdxNTrans,IdxNCoulombIntra, IdxNCoulombInter, IdxNHund, IdxNPairHop, IdxNExchange, IdxNGutz, IdxNJast, - IdxNDH2, IdxNDH4, IdxNOrbit, IdxNOrbitGeneral, + IdxNDH2, IdxNDH4, + //RBM + IdxNChargeRBM_HiddenLayer,IdxNChargeRBM_PhysLayer, IdxNChargeRBM_PhysHidden, + IdxNSpinRBM_HiddenLayer,IdxNSpinRBM_PhysLayer, IdxNSpinRBM_PhysHidden, + IdxNGeneralRBM_HiddenLayer,IdxNGeneralRBM_PhysLayer, IdxNGeneralRBM_PhysHidden, + IdxNBlockSize_RBMRatio, + //RBM + IdxNOrbit, IdxNOrbitGeneral, IdxNQPTrans, IdxNOneBodyG, IdxNTwoBodyG, IdxNTwoBodyGEx, IdxNInterAll, IdxNQPOptTrans, IdxSROptCGMaxIter, @@ -113,3 +147,14 @@ int iComplexFlgOrbital=0; int iComplexFlgOrbitalAntiParallel=0; int iComplexFlgOrbitalParallel=0; int iComplexFlgOrbitalGeneral=0; +//RBM +int iComplexFlgGeneralRBM_PhysLayer=0; +int iComplexFlgGeneralRBM_HiddenLayer=0; +int iComplexFlgGeneralRBM_PhysHidden=0; +int iComplexFlgChargeRBM_PhysLayer=0; +int iComplexFlgChargeRBM_HiddenLayer=0; +int iComplexFlgChargeRBM_PhysHidden=0; +int iComplexFlgSpinRBM_PhysLayer=0; +int iComplexFlgSpinRBM_HiddenLayer=0; +int iComplexFlgSpinRBM_PhysHidden=0; +//RBM diff --git a/src/mVMC/include/version.h b/src/mVMC/include/version.h index 0e89e120..2a7f91d0 100644 --- a/src/mVMC/include/version.h +++ b/src/mVMC/include/version.h @@ -29,7 +29,7 @@ along with this program. If not, see http://www.gnu.org/licenses/. /* ..- */ #define VERSION_MAJOR 1 #define VERSION_MINOR 2 -#define VERSION_PATCH 0 +#define VERSION_PATCH 1 #define VERSION_PRERELEASE "" /* "alpha", "beta.1", etc. */ diff --git a/src/mVMC/include/vmcmain.h b/src/mVMC/include/vmcmain.h index 090c7b69..e8bb1db8 100644 --- a/src/mVMC/include/vmcmain.h +++ b/src/mVMC/include/vmcmain.h @@ -115,4 +115,6 @@ extern int omp_get_thread_num(void); #include "../vmccal.c" #include "../vmccal_fsz.c" +#include "../rbm.c" + #endif /* _VMC_INCLUDE_FILES */ diff --git a/src/mVMC/locgrn.c b/src/mVMC/locgrn.c index 0f8837c3..2351a19e 100644 --- a/src/mVMC/locgrn.c +++ b/src/mVMC/locgrn.c @@ -28,6 +28,7 @@ along with this program. If not, see http://www.gnu.org/licenses/. #pragma once #include "locgrn.h" #include "projection.h" +#include "rbm.h" #include "pfupdate.h" #include "pfupdate_two_fcmp.h" #include "qp.h" @@ -39,7 +40,7 @@ double complex calculateNewPfMN_child(const int qpidx, const int n, const int *m /* buffer size = NQPFull */ double complex GreenFunc1(const int ri, const int rj, const int s, const double complex ip, int *eleIdx, const int *eleCfg, int *eleNum, const int *eleProjCnt, - int *projCntNew, double complex *buffer) { + int *projCntNew, const double complex *rbmCnt, double complex *rbmCntNew, double complex *buffer) { double complex z; int mj,msj,rsi,rsj; double complex *pfMNew = buffer; /* NQPFull */ @@ -57,7 +58,16 @@ double complex GreenFunc1(const int ri, const int rj, const int s, const double eleNum[rsj] = 0; eleNum[rsi] = 1; UpdateProjCnt(rj, ri, s, projCntNew, eleProjCnt, eleNum); + + if (FlagRBM) { + UpdateRBMCnt(rj, ri, s, rbmCntNew, rbmCnt, eleNum); + z = ProjRatio(projCntNew,eleProjCnt); + z *= RBMRatio(rbmCntNew,rbmCnt); + } + else { + UpdateProjCnt(rj, ri, s, projCntNew, eleProjCnt, eleNum); z = ProjRatio(projCntNew,eleProjCnt); + } /* calculate Pfaffian */ CalculateNewPfM(mj, s, pfMNew, eleIdx, 0, NQPFull); @@ -76,7 +86,7 @@ double complex GreenFunc1(const int ri, const int rj, const int s, const double double complex GreenFunc2(const int ri, const int rj, const int rk, const int rl, const int s, const int t, const double complex ip, int *eleIdx, const int *eleCfg, int *eleNum, const int *eleProjCnt, - int *projCntNew, double complex *buffer) { + int *projCntNew, const double complex *rbmCnt, double complex *rbmCntNew, double complex *buffer) { double complex z; int mj,msj,ml,mtl; int rsi,rsj,rtk,rtl; @@ -92,36 +102,36 @@ double complex GreenFunc2(const int ri, const int rj, const int rk, const int rl if(rk==rl) { /* CisAjsNks */ if(eleNum[rtk]==0) return 0.0; else return GreenFunc1(ri,rj,s,ip,eleIdx,eleCfg,eleNum, - eleProjCnt,projCntNew,buffer); /* CisAjs */ + eleProjCnt,projCntNew,rbmCnt,rbmCntNew,buffer); /* CisAjs */ }else if(rj==rl) { return 0.0; /* CisAjsCksAjs (j!=k) */ }else if(ri==rl) { /* AjsCksNis */ if(eleNum[rsi]==0) return 0.0; else if(rj==rk) return 1.0-eleNum[rsj]; else return -GreenFunc1(rk,rj,s,ip,eleIdx,eleCfg,eleNum, - eleProjCnt,projCntNew,buffer); /* -CksAjs */ + eleProjCnt,projCntNew,rbmCnt,rbmCntNew,buffer); /* -CksAjs */ }else if(rj==rk) { /* CisAls(1-Njs) */ if(eleNum[rsj]==1) return 0.0; else if(ri==rl) return eleNum[rsi]; else return GreenFunc1(ri,rl,s,ip,eleIdx,eleCfg,eleNum, - eleProjCnt,projCntNew,buffer); /* CisAls */ + eleProjCnt,projCntNew,rbmCnt,rbmCntNew,buffer); /* CisAls */ }else if(ri==rk) { return 0.0; /* CisAjsCisAls (i!=j) */ }else if(ri==rj) { /* NisCksAls (i!=k,l) */ if(eleNum[rsi]==0) return 0.0; else return GreenFunc1(rk,rl,s,ip,eleIdx,eleCfg,eleNum, - eleProjCnt,projCntNew,buffer); /* CksAls */ + eleProjCnt,projCntNew,rbmCnt,rbmCntNew,buffer); /* CksAls */ } }else{ if(rk==rl) { /* CisAjsNkt */ if(eleNum[rtk]==0) return 0.0; else if(ri==rj) return eleNum[rsi]; else return GreenFunc1(ri,rj,s,ip,eleIdx,eleCfg,eleNum, - eleProjCnt,projCntNew,buffer); /* CisAjs */ + eleProjCnt,projCntNew,rbmCnt,rbmCntNew,buffer); /* CisAjs */ }else if(ri==rj) { /* NisCktAlt */ if(eleNum[rsi]==0) return 0.0; else return GreenFunc1(rk,rl,t,ip,eleIdx,eleCfg,eleNum, - eleProjCnt,projCntNew,buffer); /* CktAlt */ + eleProjCnt,projCntNew,rbmCnt,rbmCntNew,buffer); /* CktAlt */ } } @@ -137,12 +147,21 @@ double complex GreenFunc2(const int ri, const int rj, const int rk, const int rl eleNum[rtl] = 0; eleNum[rtk] = 1; UpdateProjCnt(rl, rk, t, projCntNew, eleProjCnt, eleNum); + if (FlagRBM) { + UpdateRBMCnt(rl, rk, t, rbmCntNew, rbmCnt, eleNum); + } eleIdx[msj] = ri; eleNum[rsj] = 0; eleNum[rsi] = 1; UpdateProjCnt(rj, ri, s, projCntNew, projCntNew, eleNum); + if (FlagRBM) { + UpdateRBMCnt(rj, ri, s, rbmCntNew, rbmCntNew, eleNum); + } z = ProjRatio(projCntNew,eleProjCnt); + if (FlagRBM) { + z *= RBMRatio(rbmCntNew,rbmCnt); + } /* calculate Pfaffian */ CalculateNewPfMTwo_fcmp(ml, t, mj, s, pfMNew, eleIdx, 0, NQPFull, bufV); @@ -172,7 +191,7 @@ double complex GreenFunc2(const int ri, const int rj, const int rk, const int rl double complex GreenFuncN(const int n, int *rsi, int *rsj, const double complex ip, int *eleIdx, const int *eleCfg, int *eleNum, const int *eleProjCnt, - double complex *buffer, int *bufferInt){ + const double complex *rbmCnt, double complex *rbmCntNew, double complex *buffer, int *bufferInt){ int ri,rj,rk,rl,si,sj,sk,mj; int k,l,m,rsk; double complex z,x; @@ -195,7 +214,7 @@ double complex GreenFuncN(const int n, int *rsi, int *rsj, const double complex ri = rsi[0]%Nsite; rj = rsj[0]%Nsite; si = rsi[0]/Nsite; - return GreenFunc1(ri,rj,si,ip,eleIdx,eleCfg,eleNum,eleProjCnt,projCntNew,buffer); + return GreenFunc1(ri,rj,si,ip,eleIdx,eleCfg,eleNum,eleProjCnt,projCntNew,rbmCnt,rbmCntNew,buffer); } else if(n==2) { ri = rsi[0]%Nsite; rj = rsj[0]%Nsite; @@ -203,7 +222,7 @@ double complex GreenFuncN(const int n, int *rsi, int *rsj, const double complex rk = rsi[1]%Nsite; rl = rsj[1]%Nsite; sk = rsi[1]/Nsite; - return GreenFunc2(ri,rj,rk,rl,si,sk,ip,eleIdx,eleCfg,eleNum,eleProjCnt,projCntNew,buffer); + return GreenFunc2(ri,rj,rk,rl,si,sk,ip,eleIdx,eleCfg,eleNum,eleProjCnt,projCntNew,rbmCnt,rbmCntNew,buffer); } /* reduction */ @@ -218,7 +237,7 @@ double complex GreenFuncN(const int n, int *rsi, int *rsj, const double complex rsi[m] = rsi[m+1]; rsj[m] = rsj[m+1]; } - return GreenFuncN(n-1,rsi,rsj,ip,eleIdx,eleCfg,eleNum,eleProjCnt,buffer,bufferInt); + return GreenFuncN(n-1,rsi,rsj,ip,eleIdx,eleCfg,eleNum,eleProjCnt,rbmCnt,rbmCntNew,buffer,bufferInt); } /* rsj[k] == rsj[l] */ if(rsk==rsj[l]) return 0; @@ -234,7 +253,7 @@ double complex GreenFuncN(const int n, int *rsi, int *rsj, const double complex rsi[m] = rsi[m+1]; rsj[m] = rsj[m+1]; } - return GreenFuncN(n-1,rsi,rsj,ip,eleIdx,eleCfg,eleNum,eleProjCnt,buffer,bufferInt); + return GreenFuncN(n-1,rsi,rsj,ip,eleIdx,eleCfg,eleNum,eleProjCnt,rbmCnt,rbmCntNew,buffer,bufferInt); } for(l=k+1;l/ */ -void LSLocalQ(const double complex h1, const double complex ip, int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt, double complex *_LSLQ) +void LSLocalQ(const double complex h1, const double complex ip, int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt, double complex *rbmCnt, double complex *_LSLQ) { double complex e0,h2; e0 = CalculateHamiltonian0(eleNum); /* V */ h2 = h1*e0; /* HV = (V+K+W)V */ - h2 += calculateHK(h1,ip,eleIdx,eleCfg,eleNum,eleProjCnt); - h2 += calculateHW(h1,ip,eleIdx,eleCfg,eleNum,eleProjCnt); + h2 += calculateHK(h1,ip,eleIdx,eleCfg,eleNum,eleProjCnt,rbmCnt); + h2 += calculateHW(h1,ip,eleIdx,eleCfg,eleNum,eleProjCnt,rbmCnt); /* calculate local Q (IQ) */ _LSLQ[0] = 1.0; /* I */ @@ -96,7 +95,7 @@ void LSLocalQ(const double complex h1, const double complex ip, int *eleIdx, int } /* Calculate / */ -void LSLocalCisAjs(const double complex h1, const double complex ip, int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt) { +void LSLocalCisAjs(const double complex h1, const double complex ip, int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt, double complex *rbmCnt) { const int nCisAjs=NCisAjs; double complex*lsLCisAjs = LSLCisAjs; double complex*localCisAjs = LocalCisAjs; @@ -115,13 +114,13 @@ void LSLocalCisAjs(const double complex h1, const double complex ip, int *eleIdx s = CisAjsIdx[idx][3]; /* calculate local HCisAjs */ - LSLCisAjs[idx+nCisAjs] = calHCA(ri,rj,s,h1,ip,eleIdx,eleCfg,eleNum,eleProjCnt); + LSLCisAjs[idx+nCisAjs] = calHCA(ri,rj,s,h1,ip,eleIdx,eleCfg,eleNum,eleProjCnt,rbmCnt); } return; } double complex calculateHK(const double complex h1, const double complex ip, int *eleIdx, int *eleCfg, - int *eleNum, int *eleProjCnt) { + int *eleNum, int *eleProjCnt, double complex *rbmCnt) { int idx,ri,rj,s; double complex val=0.0; @@ -129,8 +128,8 @@ double complex calculateHK(const double complex h1, const double complex ip, int ri = Transfer[idx][0]; rj = Transfer[idx][2]; s = Transfer[idx][3]; - - val -= ParaTransfer[idx] * calHCA(ri,rj,s,h1,ip,eleIdx,eleCfg,eleNum,eleProjCnt); + + val -= ParaTransfer[idx] * calHCA(ri,rj,s,h1,ip,eleIdx,eleCfg,eleNum,eleProjCnt,rbmCnt); /* Caution: negative sign */ } @@ -138,7 +137,7 @@ double complex calculateHK(const double complex h1, const double complex ip, int } double complex calculateHW(const double complex h1, const double complex ip, int *eleIdx, int *eleCfg, - int *eleNum, int *eleProjCnt) { + int *eleNum, int *eleProjCnt, double complex *rbmCnt) { int idx,ri,rj,s,rk,rl,t; double complex val=0.0,tmp; @@ -148,16 +147,16 @@ double complex calculateHW(const double complex h1, const double complex ip, int rj = PairHopping[idx][1]; val += ParaPairHopping[idx] - * calHCACA(ri,rj,ri,rj,0,1,h1,ip,eleIdx,eleCfg,eleNum,eleProjCnt); + * calHCACA(ri,rj,ri,rj,0,1,h1,ip,eleIdx,eleCfg,eleNum,eleProjCnt,rbmCnt); } /* Exchange Coupling */ for(idx=0;idx/ */ double complex calHCA(const int ri, const int rj, const int s, const double complex h1, const double complex ip, int *eleIdx, int *eleCfg, - int *eleNum, int *eleProjCnt) { + int *eleNum, int *eleProjCnt, double complex *rbmCnt) { int rsi=ri+s*Nsite; int rsj=rj+s*Nsite; double complex val; @@ -197,9 +196,9 @@ double complex calHCA(const int ri, const int rj, const int s, g = checkGF1(ri,rj,s,ip,eleIdx,eleCfg,eleNum); if(cabs(g)>1.0e-12) { - val = calHCA1(ri,rj,s,ip,eleIdx,eleCfg,eleNum,eleProjCnt); + val = calHCA1(ri,rj,s,ip,eleIdx,eleCfg,eleNum,eleProjCnt,rbmCnt); } else { - val = calHCA2(ri,rj,s,ip,eleIdx,eleCfg,eleNum,eleProjCnt); + val = calHCA2(ri,rj,s,ip,eleIdx,eleCfg,eleNum,eleProjCnt,rbmCnt); } return val; @@ -236,10 +235,11 @@ double complex checkGF1(const int ri, const int rj, const int s, const double co /* calculate / = / * / */ double complex calHCA1(const int ri, const int rj, const int s, const double complex ip, int *eleIdx, int *eleCfg, - int *eleNum, int *eleProjCnt) { + int *eleNum, int *eleProjCnt, double complex *rbmCnt) { complex double *oldInvM; /* [NQPFull*Nsize*Nsize;] */ complex double *oldPfM; /* [NQPFull] */ int *projCntNew; + double complex *rbmCntNew; int rsi=ri+s*Nsite; int rsj=rj+s*Nsite; @@ -247,11 +247,14 @@ double complex calHCA1(const int ri, const int rj, const int s, double complex ipNew,z,e; RequestWorkSpaceInt(NProj); - RequestWorkSpaceComplex(NQPFull*(Nsize*Nsize+1)); + RequestWorkSpaceComplex(NQPFull*(Nsize*Nsize+1) + FlagRBM*(NRBM_PhysLayerIdx+Nneuron)); projCntNew = GetWorkSpaceInt(NProj); oldInvM = GetWorkSpaceComplex(NQPFull*Nsize*Nsize); oldPfM = GetWorkSpaceComplex(NQPFull); + if (FlagRBM) { + rbmCntNew = GetWorkSpaceComplex(NRBM_PhysLayerIdx + Nneuron); + } /* copy InvM and PfM */ copyMAll(InvM,PfM,oldInvM,oldPfM); @@ -265,12 +268,18 @@ double complex calHCA1(const int ri, const int rj, const int s, eleNum[rsi] = 1; UpdateProjCnt(rj, ri, s, projCntNew, eleProjCnt, eleNum); + if (FlagRBM) { + UpdateRBMCnt(rj, ri, s, rbmCntNew, rbmCnt, eleNum); + } z = ProjRatio(projCntNew,eleProjCnt); + if (FlagRBM) { + z *= RBMRatio(rbmCntNew,rbmCnt); + } UpdateMAll(mj,s,eleIdx,0,NQPFull); ipNew = CalculateIP_fcmp(PfM,0,NQPFull,MPI_COMM_SELF); - e = CalculateHamiltonian(ipNew,eleIdx,eleCfg,eleNum,projCntNew); + e = CalculateHamiltonian(ipNew,eleIdx,eleCfg,eleNum,projCntNew,rbmCntNew); /* revert hopping */ eleIdx[mj+s*Ne] = rj; @@ -291,7 +300,7 @@ double complex calHCA1(const int ri, const int rj, const int s, /* Assuming ri!=rj, eleNum[rsi]=1, eleNum[rsj]=0 */ double complex calHCA2(const int ri, const int rj, const int s, const double complex ip, int *eleIdx, int *eleCfg, - int *eleNum, int *eleProjCnt) { + int *eleNum, int *eleProjCnt, double complex *rbmCnt) { const int nsize=Nsize; const int nsite2=Nsite2; @@ -310,18 +319,22 @@ double complex calHCA2(const int ri, const int rj, const int s, double complex *myBuffer; double complex myValue=0; double complex v=0.0; + double complex *rbmCntNew, *myRBMCntNew; RequestWorkSpaceInt(NProj); /* for GreenFunc1 */ - RequestWorkSpaceComplex(NQPFull); /* for GreenFunc1 */ + RequestWorkSpaceComplex(NQPFull + FlagRBM*(NRBM_PhysLayerIdx+Nneuron)); /* for GreenFunc1 */ RequestWorkSpaceThreadInt(Nsize+Nsite2+NProj+6); - RequestWorkSpaceThreadComplex(NQPFull+3*Nsize); + RequestWorkSpaceThreadComplex(NQPFull+3*Nsize + FlagRBM*(NRBM_PhysLayerIdx+Nneuron)); bufferInt = GetWorkSpaceInt(NProj); buffer = GetWorkSpaceComplex(NQPFull); + if (FlagRBM) { + rbmCntNew = GetWorkSpaceComplex(NRBM_PhysLayerIdx+Nneuron); + } /* H0 term */ /* / = H0(x') / */ - g = GreenFunc1(ri,rj,s,ip,eleIdx,eleCfg,eleNum,eleProjCnt,bufferInt,buffer); + g = GreenFunc1(ri,rj,s,ip,eleIdx,eleCfg,eleNum,eleProjCnt,bufferInt,rbmCnt,rbmCntNew,buffer); /* hopping */ eleNum[rsi] = 1; @@ -336,7 +349,7 @@ double complex calHCA2(const int ri, const int rj, const int s, /* end of H0 term */ #pragma omp parallel default(shared)\ - private(myEleIdx,myEleNum,myBufferInt,myBuffer,myValue,myRsi,myRsj) \ + private(myRBMCntNew,myEleIdx,myEleNum,myBufferInt,myBuffer,myValue,myRsi,myRsj) \ reduction(+:v) { myEleIdx = GetWorkSpaceThreadInt(Nsize); @@ -345,6 +358,9 @@ double complex calHCA2(const int ri, const int rj, const int s, myRsi = GetWorkSpaceThreadInt(3); myRsj = GetWorkSpaceThreadInt(3); myBuffer = GetWorkSpaceThreadComplex(NQPFull+3*Nsize); + if (FlagRBM) { + myRBMCntNew = GetWorkSpaceThreadComplex(NRBM_PhysLayerIdx+Nneuron); + } #pragma loop noalias for(idx=0;idx1.0e-12) { - val = calHCACA1(ri,rj,rk,rl,si,sk,ip,eleIdx,eleCfg,eleNum,eleProjCnt); + val = calHCACA1(ri,rj,rk,rl,si,sk,ip,eleIdx,eleCfg,eleNum,eleProjCnt,rbmCnt); } else { - val = calHCACA2(ri,rj,rk,rl,si,sk,ip,eleIdx,eleCfg,eleNum,eleProjCnt); + val = calHCACA2(ri,rj,rk,rl,si,sk,ip,eleIdx,eleCfg,eleNum,eleProjCnt,rbmCnt); } return val; @@ -532,10 +548,11 @@ double complex checkGF2(const int ri, const int rj, const int rk, const int rl, double complex calHCACA1(const int ri, const int rj, const int rk, const int rl, const int si,const int sk, const double complex ip, int *eleIdx, int *eleCfg, - int *eleNum, int *eleProjCnt) { + int *eleNum, int *eleProjCnt, double complex *rbmCnt) { double complex *oldInvM; /* [NQPFull*Nsize*Nsize;] */ double complex *oldPfM; /* [NQPFull] */ int *projCntNew; + double complex *rbmCntNew; int rsi=ri+si*Nsite; int rsj=rj+si*Nsite; @@ -545,11 +562,14 @@ double complex calHCACA1(const int ri, const int rj, const int rk, const int rl, double complex ipNew,z,e; RequestWorkSpaceInt(NProj); - RequestWorkSpaceComplex(NQPFull*(Nsize*Nsize+1)); + RequestWorkSpaceComplex(NQPFull*(Nsize*Nsize+1) + FlagRBM*(NRBM_PhysLayerIdx+Nneuron)); projCntNew = GetWorkSpaceInt(NProj); oldInvM = GetWorkSpaceComplex(NQPFull*Nsize*Nsize); oldPfM = GetWorkSpaceComplex(NQPFull); + if (FlagRBM) { + rbmCntNew = GetWorkSpaceComplex(NRBM_PhysLayerIdx + Nneuron); + } /* copy InvM and PfM */ copyMAll(InvM,PfM,oldInvM,oldPfM); @@ -562,6 +582,9 @@ double complex calHCACA1(const int ri, const int rj, const int rk, const int rl, eleNum[rsl] = 0; eleNum[rsk] = 1; UpdateProjCnt(rl, rk, sk, projCntNew, eleProjCnt, eleNum); + if (FlagRBM) { + UpdateRBMCnt(rl, rk, sk, rbmCntNew, rbmCnt, eleNum); + } /* The mj-th electron with spin si hops from rj to ri */ mj = eleCfg[rsj]; @@ -571,13 +594,19 @@ double complex calHCACA1(const int ri, const int rj, const int rk, const int rl, eleNum[rsj] = 0; eleNum[rsi] = 1; UpdateProjCnt(rj, ri, si, projCntNew, projCntNew, eleNum); + if (FlagRBM) { + UpdateRBMCnt(rj, ri, si, rbmCntNew, rbmCntNew, eleNum); + } z = ProjRatio(projCntNew,eleProjCnt); + if (FlagRBM) { + z *= RBMRatio(rbmCntNew,rbmCnt); + } UpdateMAllTwo_fcmp(ml, sk, mj, si, rl, rj, eleIdx, 0, NQPFull); ipNew = CalculateIP_fcmp(PfM,0,NQPFull,MPI_COMM_SELF); - e = CalculateHamiltonian(ipNew,eleIdx,eleCfg,eleNum,projCntNew); + e = CalculateHamiltonian(ipNew,eleIdx,eleCfg,eleNum,projCntNew,rbmCnt); /* revert hopping */ eleIdx[mj+si*Ne] = rj; @@ -597,14 +626,19 @@ double complex calHCACA1(const int ri, const int rj, const int rk, const int rl, ReleaseWorkSpaceInt(); ReleaseWorkSpaceComplex(); - return e*z*ipNew/ip; + if (FlagRBM) { + return e*conj(z*ipNew/ip); + } + else { + return e*z*ipNew/ip; + } } /* calculate / for /=0 */ /* Assuming ri,rj,rk,rl are different, eleNum[rsi]=1, eleNum[rsj]=0, eleNum[rsk]=1, eleNum[rsl]=0 */ double complex calHCACA2(const int ri, const int rj, const int rk, const int rl, const int si,const int sk, - const double complex ip, int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt) { + const double complex ip, int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt, double complex *rbmCnt) { const int nsize=Nsize; const int nsite2=Nsite2; @@ -625,19 +659,23 @@ double complex calHCACA2(const int ri, const int rj, const int rk, const int rl, double complex *myBuffer; double complex myValue=0.0; double complex v=0.0; + double complex *rbmCntNew, *myRBMCntNew; RequestWorkSpaceInt(NProj); /* for GreenFunc2 */ - RequestWorkSpaceComplex(NQPFull+2*Nsize); /* for GreenFunc2 */ + RequestWorkSpaceComplex(NQPFull+2*Nsize + FlagRBM * (NRBM_PhysLayerIdx+Nneuron)); /* for GreenFunc1 */ RequestWorkSpaceThreadInt(Nsize+Nsite2+NProj+8); - RequestWorkSpaceThreadComplex(NQPFull+3*Nsize); + RequestWorkSpaceThreadComplex(NQPFull+3*Nsize + FlagRBM * (NRBM_PhysLayerIdx+Nneuron)); bufferInt = GetWorkSpaceInt(NProj); buffer = GetWorkSpaceComplex(NQPFull+2*Nsize); + if (FlagRBM) { + rbmCntNew = GetWorkSpaceComplex(NRBM_PhysLayerIdx+Nneuron); + } /* H0 term */ /* / = H0(x') / */ g = GreenFunc2(ri,rj,rk,rl,si,sk,ip, - eleIdx,eleCfg,eleNum,eleProjCnt,bufferInt,buffer); + eleIdx,eleCfg,eleNum,eleProjCnt,bufferInt,rbmCnt,myRBMCntNew,buffer); /* hopping */ eleNum[rsi] = 1; @@ -656,7 +694,7 @@ double complex calHCACA2(const int ri, const int rj, const int rk, const int rl, /* end of H0 term */ #pragma omp parallel default(shared)\ - private(myEleIdx,myEleNum,myBufferInt,myBuffer,myValue,myRsi,myRsj) \ + private(myRBMCntNew,myEleIdx,myEleNum,myBufferInt,myBuffer,myValue,myRsi,myRsj) \ reduction(+:v) { myEleIdx = GetWorkSpaceThreadInt(Nsize); @@ -665,6 +703,9 @@ double complex calHCACA2(const int ri, const int rj, const int rk, const int rl, myRsi = GetWorkSpaceThreadInt(4); myRsj = GetWorkSpaceThreadInt(4); myBuffer = GetWorkSpaceThreadComplex(NQPFull+4*Nsize); + if (FlagRBM) { + myRBMCntNew = GetWorkSpaceThreadComplex(NRBM_PhysLayerIdx+Nneuron); + } #pragma loop noalias for(idx=0;idx 0){ //TBC + RBM[i] = 0.01*(genrand_real2() -0.5)/(double)Nneuron; /* uniform distribution [0,1) */ + } else { + RBM[i] = 0.0; + } + } + }else{ + for(i=0;i 0){ //TBC + RBM[i] = 1e-2*genrand_real2()*cexp(2.0*I*M_PI*genrand_real2()); + //RBM[i] = 1e-2*genrand_real2()*cexp(2.0*I*M_PI*genrand_real2())/(double)Nneuron; + } else { + RBM[i] = 0.0; + } + } + } + } + if(AllComplexFlag==0){ for(i=0;i 0){ //TBC + if(OptFlag[2*i+2*NProj + 2*FlagRBM*NRBM] > 0){ //TBC Slater[i] = 2*(genrand_real2()-0.5); /* uniform distribution [-1,1) */ //Slater[i] = 1*genrand_real2(); /* uniform distribution [0,1) */ //Slater[i] += 1*I*genrand_real2(); /* uniform distribution [0,1) */ @@ -51,7 +73,7 @@ void InitParameter() { } else{ for(i=0;i 0){ //TBC + if(OptFlag[2*i+2*NProj + 2*FlagRBM*NRBM] > 0){ //TBC Slater[i] = 2*(genrand_real2()-0.5); /* uniform distribution [-1,1) */ Slater[i] += 2*I*(genrand_real2()-0.5); /* uniform distribution [-1,1) */ Slater[i] /=sqrt(2.0); @@ -60,8 +82,8 @@ void InitParameter() { Slater[i] = 0.0; } } - } + for(i=0;i Nneuron) hiend = Nneuron; + zz=1.0; +#pragma omp parallel default(shared) private(hi,RbmCntNew,RbmCntOld,zzTmp,icnt) firstprivate(NRBM_PhysLayerIdx,Nneuron) reduction(+:z) reduction(*:zz) + { + icnt=0; +#pragma loop swp +#pragma omp for + for(hi=hist;hi Nneuron) hiend = Nneuron; + zz=1.0; +#pragma omp parallel default(shared) private(hi,RbmCntNew,RbmCntOld,zzTmp,icnt) firstprivate(NRBM_PhysLayerIdx,Nneuron) reduction(+:z) reduction(*:zz) + { + icnt=0; +#pragma loop swp +#pragma omp for + for(hi=hist;hi0) { + for(ri=0;ri0) { + offset = NChargeRBM_PhysLayerIdx; + for(ri=0;ri0) { + offset = NChargeRBM_PhysLayerIdx + NSpinRBM_PhysLayerIdx; + for(ri=0;ri

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 SxrE<~LKI|Fr9VoV2LC@k+tHE$ literal 0 HcmV?d00001 diff --git a/doc/tutorial/figs/tutorial1.2_sq.png b/doc/tutorial/figs/tutorial1.2_sq.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9be2882dd29839ffc93cace572cda2ce87a0c2 GIT binary patch literal 12618 zcmZv@by$_%6E?c(lrE9(6eOjQ?(UTC5a~uzknV12knRQ%5NVJG>F%zxcz@^oajx%s zE(Kxly`J@~nYm}?p4+cV3X-po36UWX$SY|nF%<{|>KFL;1|l^08b41d2EHLVN@;(F zKv1w>{z5_0G6*0LGKjR;2Q~MM!zDL8)$4i4i6K0OIkeGn`@6SEd0%S7VfKVk3@&-g zI;z|q%Jdd&`de%`tt;}Ac!hs3)8Q(W&ZbIgwp)yoPCfe5>Xxg&thh`yrIfIwp2NtJ_5n8av7L4<#jRYODk zzkM)ACRKM?t5c6yrg2N_sC6_u{qpw0dCS1je$))p*u z?)Lg@m7!si2(y8!ov_-pl?7 z{O0E7+}zyn-@n7mf!ot1Ls8GT-5xfsI6FJr+SAZEchIEwRs<0(ifUC$8ZAm)s7bGK=Y}lk#@km-Z7Sr|8$oBv8pU#v z+>@yi)gpyVWOQ@~2M2C0t`5&jYcVmgQ8U-$Wqm_K2P-T3JG@@jVz^1#x5*Jk1c@^J zd>GV_0U0O9^1E?%;_A7BrB=7~3@sBAlR?w7o?sMtIk}0+$s)PbxXjFv_0!+KfA=L7 zDA6S)B^4GHvMt`n;1Cl>8vSjsTR1@zL+YxIBO+o%nwy)GcKbsc*e62~D@BDRLMJF_ zAS!CI))PDsP5Qho^lW8poR^zhZ9QGu)zuYn3@n!rjEZIB;nBPkk&u8hj!)`yff>>N zHSe%{*J8fFE&g$`324K7T+WzWJgLn6OBr<4jB24+oI8Zjzy1DuQ0o*Z?uHqe!8TX1P3}LZj9&atkwsjlRcx$nMgv&BZTcr z8p*Jgg5dn0sHmyo;NiD6HWr&d56sSTQ&Q%S_M@Vr?l|8e*fqDegTsHGF4I&I z?eFW;>+}_1Vv>ssW@ls5)7KZWy!Rn#0hi1EOeDd(yixUo!$Zvq9cmopei93_(^59- zQeKrr`rWuV2UTR?_B*46vdIq*5C7KJv9Yn&*Vo0}>g7^cjsEq0m5`9=4SCh-dC4GB zTvJn1S}JofmGaI+PEL+SKJDUScQPwI{Oi~1`g%?-E`t_l`VgadTE#7==BKA8;Mkqc zyKxaO*YFoOlz;#J;W6t_>GY3`FbfHhlH=gwn%UUcn3&Z1+`9%Tjk*@eF|ItU^+s$OVg@$Uaau@_OvY@BS zD!V^i_YZ@CFc}1?Kt^L*LFIaFiOW+MArn0W?uz4*f2ZxwqYFgUQ zpFi!F+io`o<0Yerc9*BV%csv&8IodP{IHt*u32S3%;)-hczD0>E4IncZ_;vdOiWCs zY+&&}a*B$_Z}BxXG-hUIl2TIKSGxjIQc}Qjm;1AR52phHvjQGx1+lT1BE=OI73Jlq z(KV5f<$HotC81;s1ZfwB9!CgKub0oWR zB)STQReH@BDpz`A=!YV`lM4$o?P=908QR#LFZJt^T@&qk%?No+<#sRt zkAAY&8%-*7w6+$Tl0xU{eZDoK`dyC4{e&#Em;UYBqvj#76@V*Pcz86fKdsHpUAKOx ze*5;V)?$?Rzl$PhadEM(u1?I*_V17G?(SSS)JBJuECAACVtpV`WMpJAGBf*U4(*;E zZUMRy5)uM$0X{Q0I0*b_Ac}b3Kv+?6ba635p=e=YL03zQh{uVFh2#!63LOqQdNeQ(2q*x52yk#dm(!ZSwQzl$@DG&}{@wF9+j8lu@dpiW;^E*NEVp}2 z6iD;A9_$zl_w^OH&C#Heqk4@B1tI3`%lY|4U@kZEi#WA@L9-}_Tx^f$OGZUS0py{~ z9?j-;vDVXD1R#Mal7}>(_sqw~=T(_kR<`iyr`Y-Y5Vq_T3$1Uku z6)lyKEu&oPg6qe-ADoFp$On@Xu-}`&

%2T&lafyNip9tE*3g052~u7mN0Le!K?1 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 literal 0 HcmV?d00001 diff --git a/doc/tutorial/ja/source/CMakeLists.txt b/doc/tutorial/ja/source/CMakeLists.txt new file mode 100755 index 00000000..a9b848ab --- /dev/null +++ b/doc/tutorial/ja/source/CMakeLists.txt @@ -0,0 +1,48 @@ +find_program(SPHINX_EXECUTABLE NAMES sphinx-build + HINTS $ENV{SPHINX_DIR} + PATH_SUFFIXES bin + ) + +if(NOT SPHINX_EXECUTABLE) + message(FATAL_ERROR "SPHINX_EXECUTABLE (sphinx-build) is not found!") +endif() + +set(SPHINX_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/_build) +set(SPHINX_CACHE_DIR ${CMAKE_CURRENT_BINARY_DIR}/_doctrees) +set(SPHINX_HTML_DIR ${CMAKE_CURRENT_BINARY_DIR}/html) +set(SPHINX_PDF_DIR ${CMAKE_CURRENT_BINARY_DIR}/pdf) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/conf.py ${CMAKE_CURRENT_BINARY_DIR}) + +add_custom_target(tutorial-ja-html ALL + COMMAND + ${SPHINX_EXECUTABLE} + -b html + -d ${SPHINX_CACHE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${SPHINX_HTML_DIR} + ) + +add_custom_target(tutorial-ja-pdf ALL + COMMAND + ${SPHINX_EXECUTABLE} + -b latex + -d ${SPHINX_CACHE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${SPHINX_PDF_DIR} + COMMAND + cd pdf && make + ) + +add_custom_target(tutorial-ja DEPENDS tutorial-ja-html tutorial-ja-pdf) + +install(DIRECTORY ${SPHINX_HTML_DIR} + DESTINATION doc/tutorial/ja + PATTERN "_sources" EXCLUDE + PATTERN ".buildinfo" EXCLUDE + PATTERN "objects.inv" EXCLUDE + ) +install(DIRECTORY ${SPHINX_PDF_DIR} + DESTINATION doc/tutorial/ja + FILES_MATCHING PATTERN "*.pdf" + ) diff --git a/doc/tutorial/ja/source/basic/hubbard_chain.rst b/doc/tutorial/ja/source/basic/hubbard_chain.rst new file mode 100644 index 00000000..1acc2be4 --- /dev/null +++ b/doc/tutorial/ja/source/basic/hubbard_chain.rst @@ -0,0 +1,123 @@ +一次元Hubbard模型 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +このチュートリアルでは、次の式で定義される一次元Hubbard模型の基底状態とそのスピン・電荷相関を計算します。 + +.. math:: + + H = -t \sum_{\langle i,j\rangle, \sigma}c_{i\sigma}^{\dagger}c_{j\sigma} + U \sum_{i=0,1} n_{i\uparrow}n_{i\downarrow} + +このチュートリアルは、 `ISSPデータリポジトリ `_ に登録されているチュートリアルを元にしています。 +なお、 ``samples/tutorial_1.2`` にある ``run.sh`` を実行すると、これから説明する一連のコマンドが全て実行されます。 + + +スタンダードモードの入力ファイル生成 +""""""""""""""""""""""""""""""""""""""""" +まずは、スタンダードモードの入力ファイルを生成します。 +``samples/tutorial_1.2`` に移動したのち、次のコマンドを実行してください。:: + + python3 MakeInput.py input.toml + +実行すると、基底状態の最適化用入力ファイル ``stan_opt.in`` と物理量測定用入力ファイル ``stan_aft.in`` 、および物理量測定時に ``OneBodyG`` と ``TwoBodyG`` の入力として使われる ``green1`` と ``green2`` が生成されます。pythonスクリプト ``MakeInput.py`` の入力ファイル ``input.toml`` の中身は下記のとおりです:: + + [lattice] + Lx = 6 + Ly = 1 + Lz = 1 + orb_num = 1 + model_type = "Hubbard" + [mVMC] + sub_x = 2 + sub_y = 1 + sub_z = 1 + [mVMC_aft] + modpara = "modpara.def" + directory = "aft" + +このファイルはtoml形式で記述されています。 ``[lattice]`` には格子の情報が、 ``[mVMC]`` には波動関数に課す副格子構造を記載します。 ``[mVMC_aft]`` に記載されているパラメータは物理量測定計算の終了後の後処理スクリプトで使われます。 + +``[lattice]`` セクションの ``Lx`` は :math:`x` 方向の長さ、 ``Ly`` は :math:`y` 方向の長さ、 ``Lz`` は :math:`z` 方向の長さ、 ``orb_num`` はユニットセル内の軌道数(内部自由度)を指定します。 ``model_type`` は模型の種類を指定します。 ``Spin, Hubbard, Kondo`` の3つから選ぶ必要がありますが、ここではHubbard模型を指定しています。以上をまとめると、今回の計算では、ユニットセル内の自由度が1、長さが6格子点のHubbard鎖の系が指定されていることになります。 なお、相互作用などのその他のパラメータは、 ``MakeInput.py`` 内で直接指定されています。 + +``[mVMC]`` セクションの ``sub_x`` は :math:`x` 方向の副格子長、 ``sub_y`` は :math:`y` 方向の副格子長、 ``sub_z`` は :math:`z` 方向の副格子長を指定します。副格子構造を波動関数に課すことで変分パラメータ数を減らすことができるため、計算精度にあまり影響のない範囲で適切な副格子構造を課すことができれば効率の良い計算を実行できます。今回の計算では、反強磁性的な相関は取り入れたいので、2格子分の副格子を課しています。 + +``[mVMC_aft]`` セクションの ``modpara`` は物理量測定時に使われ +``ModPara`` で指定されるパラメータファイルを指定します。 ``directory`` は後処理スクリプトが読み込むディレクトリを指定しています。 + + +波動関数の最適化(乱数初期状態) +""""""""""""""""""""""""""""""" +次に、基底状態の最適化を行います。次のコマンドを実行してください。:: + + vmcdry.out ./stan_opt.in + vmc.out namelist.def + cp ./output/zqp_opt.dat . + mv output opt + +厳密対角化計算で得られた基底エネルギーは :math:`E_{0}=-3.668706` です。mVMCでの最適化過程が、この値に収束していくことを確認してください。 + + +物理量測定 +""""""""""""""""""""""""""""""" +波動関数の最適化では、エネルギーやバリアンスなどの情報は得られますが、状態を特徴づける相関関数は計算されません。物理量測定計算を行うことで、相関関数などの物理量を計算することができます。次のコマンドを実行してください。:: + + vmcdry.out ./stan_aft.in + cp green1 greenone.def + cp green2 greentwo.def + vmc.out namelist.def ./zqp_opt.dat + mv output aft + +2行目と3行目の ``cp`` コマンドを実行することで、 ``vmcdry.out`` で生成されるデフォルトの相関関数ファイルを上書きします。 + +物理量測定計算の結果は ``aft`` ディレクトリに格納されています。 ``zvo_cisajs_***.dat`` には ``OneBodyG`` で指定した一体相関関数 :math:`\langle {c^{\dagger}_{i\sigma_i} c_{j\sigma_j}} \rangle` の値が、 ``zvo_cisajscktalt_***.dat`` には ``TwoBodyG`` で指定した二体相関関数 :math:`\langle {c^{\dagger}_{i\sigma_i} c_{j\sigma_j} c^{\dagger}_{k\sigma_k} c_{l\sigma_l}} \rangle` の値が出力されています。( ``***`` はbin番号を表しています。) + + +後処理スクリプトの実行 +""""""""""""""""""""""""""""""" +最後に、後処理スクリプトを実行します。mVMCでは、物理量を測定する際にモンテカルロサンプリングを用います。また、出力される相関関数も :math:`\langle {c^{\dagger}_{i\sigma_i} c_{j\sigma_j} c^{\dagger}_{k\sigma_k} c_{l\sigma_l}} \rangle` のようにサイト・スピン番号に対して一般的な形式になっています。そのため、求めたい物理量を相関関数から計算した後で、それらを統計処理する必要があります。次のコマンドを実行してください。:: + + python3 VMClocal.py input.toml + python3 VMCcor.py input.toml + +``VMClocal.py`` を実行すると、統計処理したエネルギーと局所密度の値が ``Ene.dat`` と ``occ.dat`` にそれぞれ出力されます。mVMCは変分計算ですので、 mVMCで得られるエネルギー値は、厳密対角化計算で得られた基底エネルギーより高くなっているか、統計誤差の範囲で一致しているかのどちらかになっているはずです。 ``Ene.dat`` を確認してみると:: + + # Ene err_Ene Ene/(All_site) err_Ene/(All_site) + -3.664422 0.004452 -0.610737 0.000742 + +となっています。(並列数やサンプル数、環境等によって値が異なる可能性があります。)一列目が全エネルギーの期待値、二列目がその統計誤差、三列目が単位サイトあたりのエネルギー期待値、四列目がその統計誤差です。mVMCにより得られた全エネルギー値は、前述した厳密対角化法による真の基底エネルギー :math:`E_{0}=-3.668706` と統計誤差の範囲内で一致していることを確認できます。 + +``VMCcor.py`` を実行すると、相関関数から計算された物理量がいくつかのファイルに出力されます。例えば、 ``SqNq.dat`` には、スピンと電荷の構造因子が出力されています。 + + .. math:: + + S(q) = \frac{1}{L} \sum_{i,j} e^{iq(r_i-r_j)} \langle \boldsymbol{S}_i \cdot \boldsymbol{S}_j \rangle,\ + \boldsymbol{S}_i = \frac{1}{2} \sum_{\alpha, \beta} c^{\dagger}_{i\alpha} \boldsymbol{\sigma}_{\alpha\beta}c_{i\beta} + + .. math:: + + S^z(q) = \frac{1}{L} \sum_{i,j} e^{iq(r_i-r_j)} \langle S^z_i S^z_j \rangle + + .. math:: + + N(q) = \frac{1}{L} \sum_{i,j} e^{iq(r_i-r_j)} \langle n_i \cdot n_j \rangle,\ + n_i = n_{i\uparrow} + n_{i\downarrow} + +ここで、 :math:`L` は系のサイズを、 :math:`\boldsymbol{\sigma}_{\alpha\beta}` はパウリ行列を表しています。 +gnuplotを使って、 ``SqNq.dat`` に出力されているスピン構造因子 :math:`S(q)` をプロットしてみましょう。:: + + gnuplot + set xlabel "q/{/Symbol p}" + p "SqNq.dat" u ($1/3):3:4 w yerrorlines t "Spin structure factor S(q)" + +を実行すると、次のようなグラフが得られます。 + +.. image:: ../../../figs/tutorial1.2_sq.png + :scale: 125 % + :align: center + +波数 :math:`q=\pi` でスピン構造因子がピークを持っていることが確認できます。これは、反強磁性的な相関が発達していることを示しています。 + +演習 +----------------------- +厳密対角化ソフトウェアパッケージ :math:`\mathcal{H}\Phi` (https://www.pasums.issp.u-tokyo.ac.jp/hphi/) を用いて、基底状態のエネルギーと相関関数を計算し、mVMCの計算結果と比較してみてください。 + +波動関数の最適化(UHF解初期状態) +""""""""""""""""""""""""""""""" \ No newline at end of file diff --git a/doc/tutorial/ja/source/basic/hubbard_dimer.rst b/doc/tutorial/ja/source/basic/hubbard_dimer.rst new file mode 100644 index 00000000..368364e8 --- /dev/null +++ b/doc/tutorial/ja/source/basic/hubbard_dimer.rst @@ -0,0 +1,198 @@ +Hubbardダイマー +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +このチュートリアルでは、ハーフフィリングにおけるHubbardダイマーの基底状態と励起状態のエネルギーを計算します。 + +.. math:: + + H = -t \sum_{\sigma} \left( c_{0\sigma}^{\dagger}c_{1\sigma}+{\rm H.c.} \right) + +U \sum_{i=0,1} n_{i\uparrow}n_{i\downarrow} + +文献2に記載されているように、Hubbard dimerの基底状態 :math:`\ket{{\rm GS}}` は、 + +.. math:: + + \alpha=\frac{U}{\sqrt{U^2+16t^2}} + +を用いると、次のように表されます。 + +.. math:: + :label: exact_gs + + \ket{{\rm GS}} = \left[ \frac{\sqrt{1-\alpha}}{2} \left( c_{0\uparrow}^{\dagger}c_{0\downarrow}^{\dagger} + c_{1\uparrow}^{\dagger} c_{1\downarrow}^{\dagger} \right) + + \frac{\sqrt{1+\alpha}}{2} \left( c_{0\uparrow}^{\dagger}c_{1\downarrow}^{\dagger} - c_{0\downarrow}^{\dagger} c_{1\uparrow}^{\dagger} \right) \right] \ket{0} + + + +ここで :math:`\ket{0}` は真空状態を表しています。上記の状態はmVMCで実装されているペアリング波動関数で厳密に表現することができます。 + +波動関数の最適化 +""""""""""""""""""""""""""""""" + +スタンダードモード +-------------------------- +インプットファイル ``samples/tutorial_1.1/stan1.in`` を使って、基底状態のエネルギーを計算します。 +中身は次のようになっています:: + + L = 2 + Lsub = 2 + model = "FermionHubbard" + lattice = "chain" + t = 0.5 + U = 4.0 + ncond = 2 + NSPGaussLeg = 1 //default:8 + 2Sz = 0 + NSROptItrStep = 100 + NSROptItrSmp = 10 + NVMCSample = 100 + + +次のコマンドでmVMCを実行してください。 :: + + vmc.out -s stan.in + +計算結果は、 ``output`` ディレクトリに出力されます。 +エネルギーの最適化過程を確認するために、 ``output/zvo_out_001.dat`` を確認してみます。このファイルには、各最適化ステップごとにエネルギーなどの物理量が記載されています。エネルギーは一列目に出力されています。次のコマンドを実行してください:: + + gnuplot plot + +実行すると、下記のようなグラフが表示されます。 + +.. image:: ../../../figs/tutorial1.1_gs_opt.png + :scale: 125 % + :align: center + +紫の点がmVMCによるエネルギーの最適化過程を、黒の実線がHPhiを用いた厳密解の結果を示しています。ちゃんと収束していることを確認するには、最後のステップ数付近を拡大してみてください。モンテカルロサンプルリングをしているためエネルギー値に揺らぎがありますが、下記のようにエネルギーが落ち着いていたら収束しているといえます。 + +.. image:: ../../../figs/tutorial1.1_gs_opt_zoom.png + :scale: 125 % + :align: center + + +エキスパートモード +-------------------------- +Hubbard模型を含んだ遍歴電子系をスタンダードモードで取り扱う場合、指定した副格子構造を有したGutzwiller-Jastrow相関因子がデフォルトで使用されます。ここではスタンダードモードで生成した入力ファイルを元に、相関因子を用いないmVMC計算をエキスパートモードで実行します。 + +スタンダードモードで生成された入力ファイル ``namelist.def`` には、次のようにキーワードに対応したファイル名が記載されています。:: + + ModPara modpara.def + LocSpin locspn.def + Trans trans.def + CoulombIntra coulombintra.def + OneBodyG greenone.def + TwoBodyG greentwo.def + Gutzwiller gutzwilleridx.def + Jastrow jastrowidx.def + Orbital orbitalidx.def + TransSym qptransidx.def + +相関因子を使わないようにするには、GutzwillerとJastrowの行をコメントアウトする、もしくは削除する必要があります。(コメントアウトには#を用います。) +たとえば次のようなsedコマンドを使うと、 ``namelist.def`` 中のGutzwillerとJastrowの行をコメントアウトできます:: + + sed -i -e "s/Gutzwiller/#Gutzwiller/" namelist.def + sed -i -e "s/Jastrow/#Jastrow/" namelist.def + +``namelist.def`` を修正したら、:: + + vmc.out -e namelist.def + +もしくは:: + + vmc.out namelist.def + +を実行してください。計算が終了したら、スタンダードモードの時と同様にエネルギーの最適化過程を確認し、エネルギーが一定値に収束していることを確認してください。 + +最適化されたペアリング波動関数の情報は、``output/zqp_orbital_opt.dat`` に出力されています。次のコマンドを実行してください:: + + cat output/zqp_orbital_opt.dat + +結果は、大まかに次のようになっているかと思われます。:: + + ====================== + NOrbitalIdx 4 + ====================== + ====================== + ====================== + 0 -1.653588951124364659e+00 0.000000000000000000e+00 + 1 -3.983375054723054198e+00 0.000000000000000000e+00 + 2 -4.000000000000000000e+00 0.000000000000000000e+00 + 3 -1.653364791408409529e+00 0.000000000000000000e+00 + +5行目のヘッダ以降の数値が、最適化されたペアリング波動関数の情報です。一列目が変分パラメータのインデックス、二列目が変分パラメータの実部、三列目がその虚部です。今回は実数での計算になっているため、三列目は全て0が出力されています。なお、ここで出力されている値は、最適化の最終ステップから``NSROptItrSmp``ステップ数分前までの変分パラメータの平均値となっています。。(``NSROptItrSmp``は``modpara.def``で設定できます。) + +変分パラメータのインデックスとペアリングの関係は、``orbitalidx.def`` に記載されています。次のコマンドを実行してください:: + + cat orbitalidx.def + +すると次のような出力が得られます。:: + + ============================================= + NOrbitalIdx 4 + ComplexType 0 + ============================================= + ============================================= + 0 0 0 + 0 1 1 + 1 0 2 + 1 1 3 + 0 1 + 1 1 + 2 1 + 3 1 + +5行目のヘッダ以降の数値が、ペアリング波動関数 :math:`\left(\sum_{i,j} f_{ij} c^{\dagger}_{i\uparrow} c^{\dagger}_{j\downarrow}\right) \ket{0}` に含まれる変分パラメータ :math:`f_{ij}` の情報です。一列目が変分パラメータ :math:`f_{ij}` の サイトインデックス:math:`i` 、二列目が:math:`f_{ij}` の :math:`j` 、三列目が :math:`f_{ij}` のインデックスです。 + +基底状態の厳密解 :eq:`exact_gs` によると、ペアリング波動関数の変分パラメータは次のようになることが期待されます。 + +.. math:: + + \frac{f_{00}}{f_{01}} = \frac{\sqrt{1-\alpha}}{\sqrt{1+\alpha}} + +上記の関係式を満たすよう変分パラメータが最適化されていそうかを確認してください。たとえば、 ``bc -l`` コマンドを使うと下記のように簡単に確認できます。:: + + $bc -l + >>> a=1/sqrt(2) + >>> sqrt(1-a)/sqrt(1+a) + .41421356237309504880 + >>> -1.653588951124364659/-3.983375054723054198 + .41512258534724672475 + +演習 +-------------------------- +ハーフフィリングにおけるHubbard dimerの基底エネルギーの厳密解は :math:`E=\frac{U}{2}\times(1 - \sqrt{(1+(4t/U)^2)})` となります。mVMCのスタンダードモード用の入力ファイル ``samples/tutorial_1.1/stan1.in`` を参考にして、厳密解の相互作用Uを再現できるか確かめてください。 + +初期状態の設定 +""""""""""""""""""""""""""""""" + +全スピンの大きさSが0の場合、一番エネルギーが高い励起状態 :math:`\ket{{\rm ES}}` とそのエネルギー :math:`E_{{\rm ES}}` は次のように表されます。 + +.. math:: + :label: exact_es + + \ket{{\rm ES}} = \left[ \frac{\sqrt{1+\alpha}}{2} \left( c_{0\uparrow}^{\dagger}c_{0\downarrow}^{\dagger} + c_{1\uparrow}^{\dagger} c_{1\downarrow}^{\dagger} \right) + - \frac{\sqrt{1-\alpha}}{2} \left( c_{0\uparrow}^{\dagger}c_{1\downarrow}^{\dagger} - c_{0\downarrow}^{\dagger} c_{1\uparrow}^{\dagger} \right) \right] \ket{0}, + + +.. math:: + + E_{{\rm ES}}=\frac{U}{2}\times(1 + \sqrt{(1+(4t/U)^2)}) + +ここでは、励起状態 :eq:`exact_es` を初期状態として使って、基底状態最適化を行なってみます。これまでの計算では、変分パラメータ :math:`f_{ij}` の値を指定せずにmVMCを実行していました。指定しない場合、 :math:`f_{ij}` は乱数が自動的に振られるように実装されています。 + +今回のチュートリアルのように、ペアリング波動関数の初期状態を設定するためには、 ``namelist.def`` に ``InOrbital`` キーワードを追加してください。たとえば基底状態の最適化で得られた ``zqp_orbital_opt.dat`` を流用すると、次のような最適化過程を得られます。 + +.. figure:: ../../../figs/tutorial1.1_es_opt.png + :name: es_opt + :scale: 125 % + :align: center + +紫のデータ点がmVMCの最適化過程を、黒実線が厳密解のエネルギーを示しています。正しく設定できていると、最適化過程の初めのエネルギーが励起状態のエネルギーに近い値になっていることが確認できます。なお、初期状態が励起固有状態に近いほど、最適化過程では励起状態にトラップされてしまい、基底状態には収束しづらくなります。 + +演習 +-------------------------- +上述の説明やマニュアルを参考に、 準安定な励起状態を作ってみてください。 + +参考文献 +""""""""""""""""""""""""""""""" +1. HPhi tutorial, https://issp-center-dev.github.io/HPhi/manual/develop/tutorial/en/html/zero_temperature/hubbard_dimer.html +2. 高田康民, 多体問題特論 --第一原理からの多電子問題--, 朝倉書店 (2009). \ No newline at end of file diff --git a/doc/tutorial/ja/source/basic/index.rst b/doc/tutorial/ja/source/basic/index.rst new file mode 100644 index 00000000..f11a93fe --- /dev/null +++ b/doc/tutorial/ja/source/basic/index.rst @@ -0,0 +1,8 @@ +基本編 +=============================================== + +.. toctree:: + :maxdepth: 3 + + ./hubbard_dimer.rst + ./hubbard_chain.rst diff --git a/doc/tutorial/ja/source/conf.py b/doc/tutorial/ja/source/conf.py new file mode 100644 index 00000000..9e4177df --- /dev/null +++ b/doc/tutorial/ja/source/conf.py @@ -0,0 +1,188 @@ +# -*- coding: utf-8 -*- +# +# mVMC documentation build configuration file, created by +# sphinx-quickstart on Tue Nov 21 16:51:35 2017. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ['sphinx.ext.mathjax'] +mathjax_pass = ['https://cdnjs.com/'] +math_number_all = True +spelling_lang='en_US' +spelling_word_list_filename='spelling_wordlist.txt' +numfig = True + +# locale_dirs = ["locale"] +# gettext_compact = False + +highlight_language = 'none' + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'HΦ Tutorial' +copyright = u'2020-, The University of Tokyo' +author = u'The University of Tokyo' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '3.2' +# The full version, including alpha/beta/rc tags. +release = u'' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = 'en' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'alabaster' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + 'logo': 'mVMC.png', + 'font_family': 'Georgia', + 'sidebar_search_button': 'pink_1' +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static', '../../../figs'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# This is required for the alabaster theme +# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars +html_sidebars = { + '**': [ + 'relations.html', # needs 'show_related': True theme option to display + 'searchbox.html', + ] +} + + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'tutorial_mVMC_endoc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ('index', 'tutorial_mVMC.tex', u'mVMC Tutorial', + u'University of Tokyo', 'manual', 'True'), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'tutorial_mVMC', u'mVMC Tutorial', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'tutorial_mVMC', u'mVMC Tutorial', + author, 'userguide_mVMC', 'One line description of project.', + 'Miscellaneous'), +] + +html_sidebars = { + '**': [ + 'about.html', + 'navigation.html', + 'relations.html', + 'searchbox.html', + 'donate.html', + ] +} diff --git a/doc/tutorial/ja/source/index.rst b/doc/tutorial/ja/source/index.rst new file mode 100644 index 00000000..28805a99 --- /dev/null +++ b/doc/tutorial/ja/source/index.rst @@ -0,0 +1,41 @@ +##################################################### +Welcome to mVMC's tutorial! +##################################################### + +mVMC's tutorialについて +--------------------------------- + +本ページでは、量子スピン系や遍歴電子系といった様々な量子格子系を解析できる変分モンテカルロ法が実装されたオープンソースソフトウェアmVMCの使い方を解説します。 +mVMCについては、公式ページ https://github.com/issp-center-dev/mVMC +もしくは論文 `Comp. Phys. Commun. 235 447-462 (2019). `_ をご参照ください。 + + +ライセンス +-------------- +mVMCのマニュアルおよびソースコード一式はGNU General +Public License version 3(GPL v3)に準じて下記リンク先で配布されています。 + +| URL: https://github.com/issp-center-dev/mVMC + +mVMCの引用文献としては、下記の論文をご記載ください。 + +| mVMCの論文: Takahiro Misawa, Satoshi Morita, Kazuyoshi Yoshimi, Mitsuaki Kawamura, Yuichi Motoyama, + Kota Ido, Takahiro Ohgoe, Masatoshi, and Takeo Kato, `Comp. Phys. Commun. 235 447-462 (2019). `_ + + + + +チュートリアル +-------- +.. toctree:: + :maxdepth: 4 + :numbered: 4 + + basic/index + +.. Indices and tables +.. ================== + +.. * :ref:`genindex` +.. * :ref:`modindex` +.. * :ref:`search` diff --git a/doc/tutorial/ja/source/spell_check.sh b/doc/tutorial/ja/source/spell_check.sh new file mode 100644 index 00000000..f50abef5 --- /dev/null +++ b/doc/tutorial/ja/source/spell_check.sh @@ -0,0 +1 @@ +sphinx-build -b spelling -d _build/doctrees . _build_spelling diff --git a/doc/tutorial/ja/source/spelling_wordlist.txt b/doc/tutorial/ja/source/spelling_wordlist.txt new file mode 100644 index 00000000..89fe8161 --- /dev/null +++ b/doc/tutorial/ja/source/spelling_wordlist.txt @@ -0,0 +1,159 @@ +bd +ba +fd +yoshimi +bd +ba +fd +ccf +fe +Hidetoshi +Nishimori +Daisuke +Tahara +Lanczos +diagonalization +ver +Yuichi +Motoyama +Yasuyuki +Kato +Takeo +Hoshi +Tomohiro +Sogabe +Krylov +Bogoliubov +doi +JPSJ +subdiagonal +Mersenne +dSFMT +Iwanami +ies +Shoten +Sugiura +Shimizu +wavefunctions +wavefunction +mTPQ +Lett +Takahiro +Misawa +CalcType +CalcModel +Hund +Ising +CalcMod +ModPara +LocSpin +xxx +Kondo +dat +isite +tmp +idim +mem +Flct +doublon +stp +TMcomponents +TimeKeeper +EigenVector +TPQ +spni +spnj +cisajs +OneBodyG +eigen +cisajscktalt +TwoBodyG +eigenvec +Sz +eigenvetor +Nup +Ndown +recalcvec +tmpvec +onsite +Kagome +Offsite +hoppings +offdiagonal +Yamamoto +Zhang +Fujiwara +LOBCG +BiCG +eigenenergy +Eqn +GC +Yamaji +Knyazev +Yamada +Imamura +Machida +OpenMP +MPI +sdry +mpirun +mpiexec +HPhi +gz +sekirei +maki +fortran +CMake +gcc +hamiltonians +Mitsuaki +Kawamura +Kazuyoshi +Youhei +Todo +Naoki +Kawashima +diagonalizations +Dzyaloshinskii +Moriya +Kitaev +Dagotto +Imada +Takahashi +Jaklič +Prelovšek +Raedt +Nomura +Kurita +Arita +namelist +locspn +zTrans +zInterall +greenone +greentwo +antiferromagnetic +eigenenergies +zvo +eigennumber +indices +Acknowledgement +Sugihara +Murota +http +titech +www +jp +nishimori +titpack +html +hiroshima +SFMT +sz +offsite +modpara +DynamicalGreen +countings +Frommer +calcmod + diff --git a/samples/tutorial_1.1/Clean.sh b/samples/tutorial_1.1/Clean.sh new file mode 100644 index 00000000..aad705d0 --- /dev/null +++ b/samples/tutorial_1.1/Clean.sh @@ -0,0 +1,4 @@ +rm *.def +rm *.dat +rm *.gp +rm -r output* diff --git a/samples/tutorial_1.1/plot b/samples/tutorial_1.1/plot new file mode 100644 index 00000000..cc0a34cd --- /dev/null +++ b/samples/tutorial_1.1/plot @@ -0,0 +1,6 @@ +set xlabel "optimization step" +set ylabel "total energy" +p[:][:] \ +"output/zvo_out_001.dat" u 1 t "mVMC",\ +-0.828427 w l lc -1 t "exact diagonalization" +pause -1 diff --git a/samples/tutorial_1.1/stan.in b/samples/tutorial_1.1/stan.in new file mode 100644 index 00000000..f7ade7c7 --- /dev/null +++ b/samples/tutorial_1.1/stan.in @@ -0,0 +1,16 @@ +L = 2 +Lsub = 2 +model = "FermionHubbard" +lattice = "chain" +t = 0.5 +U = 4.0 +ncond = 2 +NSPGaussLeg = 1 +2Sz = 0 +NSROptItrStep = 100 +NSROptItrSmp = 10 +NVMCSample = 1000 +DSROptRedCut = 1e-8 +DSROptStaDel = 1e-2 +DSROptStepDt = 1e-2 +//NVMCCalMode = 1 diff --git a/samples/tutorial_1.2/Clean.sh b/samples/tutorial_1.2/Clean.sh new file mode 100644 index 00000000..295a7411 --- /dev/null +++ b/samples/tutorial_1.2/Clean.sh @@ -0,0 +1,11 @@ +rm *.def +rm *.dat +rm *.gp +rm mVMC.* +rm -r tmpUHF +rm -r opt* +rm -r aft +rm -r output +rm -r __pycache__ +rm green* +rm stan_aft.in stan_opt.in diff --git a/samples/tutorial_1.2/MakeInput.py b/samples/tutorial_1.2/MakeInput.py new file mode 100644 index 00000000..7930e827 --- /dev/null +++ b/samples/tutorial_1.2/MakeInput.py @@ -0,0 +1,175 @@ +import numpy as np +import math +import cmath +import toml +import sys + +def main(): + #[s] tolm load + input_file = sys.argv[1] + list_org,list_sub,input_dict = read_toml(input_file) + #[e] tolm load + #[s] output StdFace files + OutputStdFace(list_org,list_sub,input_dict) + #[s] output StdFace files + #[s] output StdFace files + OutputGreen(list_org) + #[s] output StdFace files + +def read_toml(input_file): + input_dict = toml.load(input_file) + #[e] tolm load + #[s]define constants + Lx = int(input_dict["lattice"]["Lx"]) + Ly = int(input_dict["lattice"]["Ly"]) + Lz = int(input_dict["lattice"]["Lz"]) + orb_num = int(input_dict["lattice"]["orb_num"]) + sub_x = int(input_dict["mVMC"]["sub_x"]) + sub_y = int(input_dict["mVMC"]["sub_y"]) + sub_z = int(input_dict["mVMC"]["sub_z"]) + #[e]define constants + All_N = Lx*Ly*Lz*orb_num + print('Lx = ',Lx) + print('Ly = ',Ly) + print('Ly = ',Lz) + print('orb_num = ',orb_num) + print('sub_x = ',sub_x) + print('sub_y = ',sub_y) + print('sub_z = ',sub_z) + + #[s] initialize + list_org = [Lx,Ly,Lz,orb_num] + list_sub = [sub_x,sub_y,sub_z] + #[e] initialize + + return list_org,list_sub,input_dict + +def CalcDim(list_org): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + + #[s] calc dim_type + if Ly == 1 and Lz == 1: + dim_type = 1 + elif Lz == 1: + dim_type = 2 + elif Lx>1 and Ly > 1 and Lz>1: + dim_type = 3 + else : + print(" Possible error in Lx, Ly, Lz") + print(" This script supports chain,square, and cubic in the following way: ") + print(" Lx>1 Ly=Lz=1 -> chain") + print(" Lx>1 Ly>1 Lz=1 -> square") + print(" Lx>1 Ly>1 Lz>1 -> cubic") + print(" Input Lx=%d Ly=%d Lz=%d do not meet above conditions." %(Lx,Ly,Lz)) + #[e] calc dim_type + return dim_type + +def OutputStdFace(list_org,list_sub,input_dict): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + Ncond = Lx*Ly*Lz*orb_num + sub_x = list_sub[0] + sub_y = list_sub[1] + sub_z = list_sub[2] + model_type = input_dict["lattice"]["model_type"] + + dim_type = CalcDim(list_org) + + #[s] make stan_com + stan_com = [] + if dim_type == 1: + stan_com.append("L = %d "%(Lx)) + stan_com.append("Lsub = %d "%(sub_x)) + stan_com.append("lattice = \"chain\"") + elif dim_type == 2: + stan_com.append("W = %d "%(Lx)) + stan_com.append("Wsub = %d "%(sub_x)) + stan_com.append("L = %d "%(Ly)) + stan_com.append("Lsub = %d "%(sub_y)) + stan_com.append("lattice = \"square\"") + elif dim_type == 3: + stan_com.append("W = %d "%(Lx)) + stan_com.append("Wsub = %d "%(sub_x)) + stan_com.append("L = %d "%(Ly)) + stan_com.append("Lsub = %d "%(sub_y)) + stan_com.append("Height = %d "%(Lz)) + stan_com.append("Hsub = %d "%(sub_z)) + stan_com.append("lattice = \"cubic\"") + + if model_type == "Spin": + stan_com.append("model = \"%s\" "%(model_type)) + stan_com.append("J = 1.0 ") + elif model_type == "Hubbard": + stan_com.append("model = \"%s\" "%(model_type)) + stan_com.append("t = 1.0 ") + stan_com.append("U = 4.0 ") + stan_com.append("ncond = %d " %(Ncond)) + elif model_type == "Kondo": + stan_com.append("model = \"%s\" "%(model_type)) + stan_com.append("t = 1.0 ") + stan_com.append("J = 1.0 ") + stan_com.append("ncond = %d " %(int(Ncond/2))) + else: + print("This scropt only support Spin, Hubbard, Kondo") + + stan_com.append("2Sz = 0 ") + stan_com.append("NVMCSample = 200 ") + stan_com.append("NSROptItrStep = 600 ") + stan_com.append("NMPTrans = 1 ") + stan_com.append("NSPStot = 0 ") + #[e] make stan_com + + with open("stan_opt.in", 'w') as f: + for cnt_std in stan_com: + print(cnt_std,file=f) + + with open("stan_aft.in", 'w') as f: + for cnt_std in stan_com: + print(cnt_std,file=f) + print("NVMCCalMode = 1 ",file=f) + print("NDataIdxStart = 0 ",file=f) + print("NDataQtySmp = 10 ",file=f) + + + +def OutputGreen(list_org): + All_N = list_org[0]*list_org[1]*list_org[2]*list_org[3] + + with open("green1", 'w') as f: + print("==================", file=f) + print("onebody %d "%(2*All_N**2), file=f) + print("==================", file=f) + print("==================", file=f) + print("==================", file=f) + for all_i in range(0,All_N): + for all_j in range(0,All_N): + print(" %d %d %d %d "% (all_i,0,all_j,0), file=f) + print(" %d %d %d %d "% (all_i,1,all_j,1), file=f) + + with open("green2", 'w') as f: + print("==================", file=f) + print("twobody %d "%(6*All_N**2), file=f) + print("==================", file=f) + print("==================", file=f) + print("==================", file=f) + for all_i in range(0,All_N): + for all_j in range(0,All_N): + print(" %d %d %d %d %d %d %d %d"% (all_i,0,all_i,0,all_j,0,all_j,0), file=f) + print(" %d %d %d %d %d %d %d %d"% (all_i,0,all_i,0,all_j,1,all_j,1), file=f) + print(" %d %d %d %d %d %d %d %d"% (all_i,1,all_i,1,all_j,0,all_j,0), file=f) + print(" %d %d %d %d %d %d %d %d"% (all_i,1,all_i,1,all_j,1,all_j,1), file=f) + # + print(" %d %d %d %d %d %d %d %d"% (all_i,0,all_j,0,all_j,1,all_i,1), file=f) + print(" %d %d %d %d %d %d %d %d"% (all_i,1,all_j,1,all_j,0,all_i,0), file=f) + + + + + +if __name__ == "__main__": + main() diff --git a/samples/tutorial_1.2/VMCcor.py b/samples/tutorial_1.2/VMCcor.py new file mode 100755 index 00000000..51977bd2 --- /dev/null +++ b/samples/tutorial_1.2/VMCcor.py @@ -0,0 +1,331 @@ +import cmath +import math +import sys + +import numpy as np +import toml + +import MakeInput +import qlms_lattice +import VMClocal + +def main(): + #[s] tolm load + input_file = sys.argv[1] + list_org,list_sub,input_dict = MakeInput.read_toml(input_file) + dir_name = input_dict["mVMC_aft"]["directory"] + model_type = input_dict["lattice"]["model_type"] + dim_type = MakeInput.CalcDim(list_org) + #[e] tolm load + + ini_cnt,max_cnt,calcmode = VMClocal.ReadModpara(input_dict) + + #[s] read Green + G1,G2_sz,G2_ex = ReadGreen(list_org,max_cnt,dir_name) + #[e] read Green + + #[s] calc Sq,Sz,Nq,Nk + all_Sq,all_Sz,all_Nq,all_Nk = CalcSq_tot(list_org,G1,G2_sz,G2_ex,dir_name,max_cnt) + OutputSqSzNq(list_org,all_Sq,all_Sz,all_Nq,dim_type) + if model_type == "Hubbard": + OutputNk(list_org,all_Nk,dim_type) #Nk is output only Hubbard + #[e] calc Sq,Sz,Nq,Nk + OutputReal(list_org,G1,max_cnt,dim_type) + OutputSij(list_org,G1,G2_sz,G2_ex,max_cnt) + +def OutputSij(list_org,G1,G2_sz,G2_ex,max_cnt): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + All_N = Lx*Ly*Lz*orb_num + tot_S = np.zeros((max_cnt,All_N,All_N),dtype=np.float64) + Sxy = np.zeros((max_cnt,All_N,All_N),dtype=np.float64) + Sz = np.zeros((max_cnt,All_N,All_N),dtype=np.float64) + for num_bin in range(0,max_cnt): + for all_i in range(0,All_N): + for all_j in range(0,All_N): + tmp_Sz = G2_sz[num_bin][all_i][all_j][0][0] + tmp_Sz += -G2_sz[num_bin][all_i][all_j][1][0] + tmp_Sz += -G2_sz[num_bin][all_i][all_j][0][1] + tmp_Sz += G2_sz[num_bin][all_i][all_j][1][1] + tmp_Sz = 0.25*tmp_Sz + tmp_Sxy = -0.5*G2_ex[num_bin][all_i][all_j][0][1] + tmp_Sxy += -0.5*G2_ex[num_bin][all_i][all_j][1][0] + if all_i == all_j: + tmp_Sxy += 0.5*G1[num_bin][all_i][all_i][0] + tmp_Sxy += 0.5*G1[num_bin][all_i][all_i][1] + tot_S[num_bin][all_i][all_j] = tmp_Sxy+tmp_Sz + Sxy[num_bin][all_i][all_j] = tmp_Sxy + Sz[num_bin][all_i][all_j] = tmp_Sz + # + ave_tot_S = np.mean(tot_S,axis=0) + err_tot_S = np.std(tot_S,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + ave_Sxy = np.mean(Sxy,axis=0) + err_Sxy = np.std(Sxy,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + ave_Sz = np.mean(Sz,axis=0) + err_Sz = np.std(Sz,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + with open("Sij.dat", 'w') as f: + print(" %s " % ("# i j tot_S err_tot_S Sxy err_Sxy Sz err_Sz "), file=f) + for all_i in range(All_N): + for all_j in range(All_N): + print("%d %d %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f " % (all_i,all_j,\ + ave_tot_S[all_i][all_j],err_tot_S[all_i][all_j],\ + ave_Sxy[all_i][all_j],err_Sxy[all_i][all_j],\ + ave_Sz[all_i][all_j],err_Sz[all_i][all_j]), file=f) + print(" ", file=f) + +def OutputReal(list_org,G1,max_cnt,dim_type): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + All_N = Lx*Ly*Lz*orb_num + charge = np.zeros((max_cnt,All_N),dtype=np.float64) + spin = np.zeros((max_cnt,All_N),dtype=np.float64) + for num_bin in range(0,max_cnt): + for all_i in range(0,All_N): + charge[num_bin][all_i] = G1[num_bin][all_i][all_i][0]+G1[num_bin][all_i][all_i][1] + spin[num_bin][all_i] = G1[num_bin][all_i][all_i][0]-G1[num_bin][all_i][all_i][1] + # + ave_charge = np.mean(charge,axis=0) + err_charge = np.std(charge,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + ave_spin = np.mean(spin,axis=0) + err_spin = np.std(spin,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + with open("Real.dat", 'w') as f: + print(" %s " % ("# x y charge err_charge spin err_spin"), file=f) + for i_x in range(0,list_org[0]): + if dim_type == 1: + i_y = 0 + all_i = i_x + i_y*list_org[0] + print("%d %d %12.8f %12.8f %12.8f %12.8f" % (i_x,i_y,ave_charge[all_i],err_charge[all_i],ave_spin[all_i],err_spin[all_i]), file=f) + elif dim_type == 2: + for i_y in range(0,list_org[1]): + all_i = i_x + i_y*list_org[0] + print("%d %d %12.8f %12.8f %12.8f %12.8f" % (i_x,i_y,ave_charge[all_i],err_charge[all_i],ave_spin[all_i],err_spin[all_i]), file=f) + print(" " , file=f) + + +def OutputSqSzNq(list_org,all_Sq,all_Sz,all_Nq,dim_type): + max_cnt = all_Sq.shape[0] + #[s] Sq,Sz,Nq + ave_Sq = np.mean(all_Sq,axis=0) + err_Sq = np.std(all_Sq,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + ave_Sz = np.mean(all_Sz,axis=0) + err_Sz = np.std(all_Sz,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + ave_Nq = np.mean(all_Nq,axis=0) + err_Nq = np.std(all_Nq,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + max_Sq = 0.0 + max_Nq = 0.0 + with open("SqNq.dat", 'w') as f: + print(" %s " % ("# kx ky Sq err_Sq Sz err_Sz Nq err_Nq"), file=f) + for kx in range(0,list_org[0]+1): + if dim_type==1: + ky = 0 + if ave_Sq[kx][ky] > max_Sq: + max_Sq = ave_Sq[kx][ky] + max_Sq_err = err_Sq[kx][ky] + max_Sq_kx = kx + max_Sq_ky = ky + # + if ave_Nq[kx][ky] > max_Nq: + max_Nq = ave_Nq[kx][ky] + max_Nq_err = err_Nq[kx][ky] + max_Nq_kx = kx + max_Nq_ky = ky + print("%d %d %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f" % (kx,ky,ave_Sq[kx][ky],err_Sq[kx][ky],ave_Sz[kx][ky],err_Sz[kx][ky],ave_Nq[kx][ky],err_Nq[kx][ky]), file=f) + elif dim_type==2: + for ky in range(0,list_org[1]+1): + if ave_Sq[kx][ky] > max_Sq: + max_Sq = ave_Sq[kx][ky] + max_Sq_err = err_Sq[kx][ky] + max_Sq_kx = kx + max_Sq_ky = ky + # + if ave_Nq[kx][ky] > max_Nq: + max_Nq = ave_Nq[kx][ky] + max_Nq_err = err_Nq[kx][ky] + max_Nq_kx = kx + max_Nq_ky = ky + print("%d %d %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f" % (kx,ky,ave_Sq[kx][ky],err_Sq[kx][ky],ave_Sz[kx][ky],err_Sz[kx][ky],ave_Nq[kx][ky],err_Nq[kx][ky]), file=f) + print(" " , file=f) + elif dim_type==3: + print("not implemented yet") + with open("MaxSq.dat", 'w') as f: + print("%12.8f %12.8f %d %d " % (max_Sq,max_Sq_err,max_Sq_kx,max_Sq_ky), file=f) + with open("MaxNq.dat", 'w') as f: + print("%12.8f %12.8f %d %d " % (max_Nq,max_Nq_err,max_Nq_kx,max_Nq_ky), file=f) + #[e] Sq,Nq + +def OutputNk(list_org,all_Nk,dim_type): + max_cnt = all_Nk.shape[0] + #[s] Nk + ave_Nk = np.mean(all_Nk,axis=0) + err_Nk = np.std(all_Nk,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + with open("Nk.dat", 'w') as f: + print(" %s " % ("# kx ky Nk err_Nk "), file=f) + for kx in range(-int(list_org[0]/2),int(list_org[0]/2)+1): + if kx <0: + tmp_kx = kx+list_org[0] + else: + tmp_kx = kx + if dim_type==1: + ky = 0 + tmp_ky = 0 + print("%d %d %12.8f %12.8f " % (kx,ky,ave_Nk[tmp_kx][tmp_ky],err_Nk[tmp_kx][tmp_ky]), file=f) + elif dim_type==2: + for ky in range(-list_org[1],list_org[1]+1): + if ky <0: + tmp_ky = ky+list_org[1] + else: + tmp_ky = ky + print("%d %d %12.8f %12.8f " % (kx,ky,ave_Nk[tmp_kx][tmp_ky],err_Nk[tmp_kx][tmp_ky]), file=f) + print(" " , file=f) + elif dim_type==3: + print("Not implemented yet") + #[e] Nk + +def ReadGreen(list_org,max_cnt,dir_name): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + All_N = Lx*Ly*Lz*orb_num + #[s] allocate + G1 = np.zeros((max_cnt,All_N,All_N,2),dtype=np.float64) + G2_ex = np.full((max_cnt,All_N,All_N,2,2),-100,dtype=np.float64) + G2_sz = np.full((max_cnt,All_N,All_N,2,2),-100,dtype=np.float64) + #[e] allocate + for num_bin in range(max_cnt): + file_name ="%s/zvo_cisajs_00%d.dat" %(dir_name,num_bin) + + with open(file_name) as f: + tmp_G1 = f.read() + tmp_G1 = tmp_G1.split("\n") + #[s] count not empty elements + cnt = 0 + for i in range(0,len(tmp_G1)): + if tmp_G1[i]: # if data[i] is not empty + cnt += 1 + #print(cnt) + cnt_max = cnt + #[e] count not empty elements + for cnt in range(0,cnt_max): + tmp = tmp_G1[cnt].split() + all_i = int(tmp[0]) + all_j = int(tmp[2]) + spn = int(tmp[1]) + #print(tmp) + G1[num_bin][all_i][all_j][spn] = float(tmp[4]) + + file_name ="%s/zvo_cisajscktalt_00%d.dat" %(dir_name,num_bin) + with open(file_name) as f: + data = f.read() + data = data.split("\n") + #[s] count not empty elements + cnt = 0 + for i in range(0,len(data)): + if data[i]: # if data[i] is not empty + cnt += 1 + #print(cnt) + cnt_max = cnt + #[e] count not empty elements + for cnt in range(0,cnt_max): + tmp = data[cnt].split() + all_i = int(tmp[0]) + all_j = int(tmp[2]) + all_k = int(tmp[4]) + all_l = int(tmp[6]) + spn_0 = int(tmp[1]) + spn_1 = int(tmp[5]) + if all_i == all_j and all_k == all_l and all_i==all_k: + G2_sz[num_bin][all_i][all_j][spn_0][spn_1] = float(tmp[8]) + G2_ex[num_bin][all_i][all_j][spn_0][spn_1] = float(tmp[8]) + elif all_i == all_j and all_k == all_l: + G2_sz[num_bin][all_i][all_k][spn_0][spn_1] = float(tmp[8]) + elif all_i == all_l and all_j == all_k: + G2_ex[num_bin][all_i][all_j][spn_0][spn_1] = float(tmp[8]) + else: + print("fatal error in 2-body Green functions") + return G1,G2_sz,G2_ex + +def CalcSq_tot(list_org,G1,G2_sz,G2_ex,dir_name,max_cnt): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + All_N = Lx*Ly*Lz*orb_num + All_site = Lx*Ly*Lz + all_Sq = np.full((max_cnt,list_org[0]+1,list_org[1]+1),-100,dtype=np.float64) + all_Sz = np.full((max_cnt,list_org[0]+1,list_org[1]+1),-100,dtype=np.float64) + all_Nq = np.full((max_cnt,list_org[0]+1,list_org[1]+1),-100,dtype=np.float64) + all_Nk = np.full((max_cnt,list_org[0]+1,list_org[1]+1),-100,dtype=np.float64) + + for num_bin in range(max_cnt): + with open("%s/total_SqNq_%d.dat" % (dir_name,num_bin), 'w') as f: + for kx in range(0,Lx+1): + for ky in range(0,Ly+1): + tmp_Sq = 0.0 + tmp_Sz = 0.0 + tmp_Nq = 0.0 + tmp_Nk = 0.0 + Ncond = 0 + for all_i in range(0,All_N): + Ncond+= G1[num_bin][all_i][all_i][0] + Ncond+= G1[num_bin][all_i][all_i][1] + for all_j in range(0,All_N): + list_site = qlms_lattice.get_site(all_i,list_org) + i_x = list_site[0] + i_y = list_site[1] + # + list_site = qlms_lattice.get_site(all_j,list_org) + j_x = list_site[0] + j_y = list_site[1] + + theta = 2*math.pi*kx*(i_x-j_x)/Lx+2*math.pi*ky*(i_y-j_y)/Ly + # + tmp_uu = G2_sz[num_bin][all_i][all_j][0][0] + tmp_ud = G2_sz[num_bin][all_i][all_j][0][1] + tmp_du = G2_sz[num_bin][all_i][all_j][1][0] + tmp_dd = G2_sz[num_bin][all_i][all_j][1][1] + + # + tmp_Nk += G1[num_bin][all_i][all_j][0]*math.cos(theta) + tmp_Nk += G1[num_bin][all_i][all_j][1]*math.cos(theta) + # + tmp_Nq += tmp_uu*math.cos(theta) + tmp_Nq += tmp_dd*math.cos(theta) + tmp_Sq += 0.25*tmp_uu*math.cos(theta) + tmp_Sq += 0.25*tmp_dd*math.cos(theta) + tmp_Sz += 0.25*tmp_uu*math.cos(theta) + tmp_Sz += 0.25*tmp_dd*math.cos(theta) + # + tmp_Nq += tmp_ud*math.cos(theta) + tmp_Nq += tmp_du*math.cos(theta) + tmp_Sq += -0.25*tmp_ud*math.cos(theta) + tmp_Sq += -0.25*tmp_du*math.cos(theta) + tmp_Sz += -0.25*tmp_ud*math.cos(theta) + tmp_Sz += -0.25*tmp_du*math.cos(theta) + # + tmp_Sq += -0.5*G2_ex[num_bin][all_i][all_j][0][1]*math.cos(theta) + tmp_Sq += -0.5*G2_ex[num_bin][all_i][all_j][1][0]*math.cos(theta) + tmp_Sq += Ncond/2 + if kx%Lx == 0 and ky%Ly ==0: + tmp_Nq = tmp_Nq- Ncond**2 + tmp_Sq = tmp_Sq/(All_site) + tmp_Sz = tmp_Sz/(All_site) + tmp_Nq = tmp_Nq/(All_site) + tmp_Nk = tmp_Nk/(All_site) + all_Sq[num_bin][kx][ky] = tmp_Sq + #print(num_bin,kx,ky) + all_Sz[num_bin][kx][ky] = tmp_Sz + all_Nq[num_bin][kx][ky] = tmp_Nq + all_Nk[num_bin][kx][ky] = tmp_Nk + #print(kx,ky,tmp_Sq,tmp_Sz,tmp_Nq) + print("%d %d %12.8f %12.8f %12.8f " % (kx,ky,tmp_Sq,tmp_Sz,tmp_Nq), file=f) + print(" " , file=f) + #print(" ") + return all_Sq,all_Sz,all_Nq,all_Nk + +if __name__ == "__main__": + main() diff --git a/samples/tutorial_1.2/VMClocal.py b/samples/tutorial_1.2/VMClocal.py new file mode 100644 index 00000000..6486f96c --- /dev/null +++ b/samples/tutorial_1.2/VMClocal.py @@ -0,0 +1,116 @@ +import cmath +import math +import sys + +import numpy as np +import toml + +import MakeInput +import qlms_lattice + + +def main(): + #[s] tolm load + input_file = sys.argv[1] + list_org,list_sub,input_dict = MakeInput.read_toml(input_file) + + ini_cnt,max_cnt,calcmode = ReadModpara(input_dict) + All_N = list_org[0]*list_org[1]*list_org[2]*list_org[3] + All_site = list_org[0]*list_org[1]*list_org[2] + orb_num = list_org[3] + dir_name = input_dict["mVMC_aft"]["directory"] + + tot_Ene = np.zeros([max_cnt], dtype=np.float64) + tot_occ = np.zeros([max_cnt,orb_num], dtype=np.float64) + tot_AF = np.zeros([max_cnt,orb_num], dtype=np.float64) + for i_smp in range(ini_cnt,ini_cnt+max_cnt): + file_name = "%s/zvo_cisajs_00%d.dat" % (dir_name,i_smp) + occ,AF = ReadG1(file_name,list_org,i_smp) + for orb_i in range(orb_num): + tot_occ[i_smp][orb_i] = occ[orb_i] + tot_AF[i_smp][orb_i] = AF[orb_i] + # + file_name = "%s/zvo_out_00%d.dat" % (dir_name,i_smp) + tot_Ene[i_smp] = ReadEne(file_name,list_org,i_smp) + + Ave_Ene = np.mean(tot_Ene,axis=0) + Err_Ene = np.std(tot_Ene,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + # + Ave_occ = np.mean(tot_occ,axis=0) + Err_occ = np.std(tot_occ,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + Ave_AF = np.mean(tot_AF,axis=0) + Err_AF = np.std(tot_AF,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + + with open("Ene.dat", 'w') as f: + print("%s " % ("# Ene err_Ene Ene/(All_site) err_Ene/(All_site)"),file=f) + print("%f %f %f %f" % (Ave_Ene,Err_Ene,Ave_Ene/(All_site),Err_Ene/(All_site)),file=f) + with open("occ.dat", 'w') as f: + print("%s " % ("# occ err_occ AF err_AF"),file=f) + for orb_i in range(orb_num): + print("%f %f %f %f" % (Ave_occ[orb_i],Err_occ[orb_i],Ave_AF[orb_i],Err_AF[orb_i]),end="",file=f) + print(" " ,file=f) + +def ReadModpara(input_dict): + file_name = input_dict["mVMC_aft"]["modpara"] + with open(file_name) as f: + data = f.read() + data = data.split("\n") + for i in range(0,len(data)): + if data[i]: # if data[i] is not empty + tmp = data[i].split() + if tmp[0] == "NDataIdxStart": + ini_cnt = int(tmp[1]) + if tmp[0] == "NDataQtySmp": + max_cnt = int(tmp[1]) + if tmp[0] == "NVMCCalMode": + calcmode = int(tmp[1]) + return ini_cnt,max_cnt,calcmode + + +def ReadEne(file_name,list_org,i_smp): + with open(file_name) as f: + data = f.read() + data = data.split("\n") + #print(len(data)) + tmp = data[0].split() + tmp_Ene = tmp[0] + return tmp_Ene + + +def ReadG1(file_name,list_org,i_smp): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + #file_name = "output/zvo_aft_cisajs_001.dat" + with open(file_name) as f: + data = f.read() + data = data.split("\n") + #print(len(data)) + #[s] count not empty elements + occ = np.zeros([orb_num], dtype=np.float64) + AF = np.zeros([orb_num], dtype=np.float64) + for i in range(0,len(data)): + if data[i]: # if data[i] is not empty + tmp = data[i].split() + if tmp[0] == tmp[2]: + all_i = int(tmp[0]) + list_site = qlms_lattice.get_site(all_i,list_org) + x_i = list_site[0] + y_i = list_site[1] + orb_i = list_site[3] + sgn = math.cos(math.pi*x_i+math.pi*y_i) + if tmp[1] == tmp[3] and int(tmp[1]) == 0: + occ[orb_i] += float(tmp[4]) + AF[orb_i] += sgn*float(tmp[4]) + if tmp[1] == tmp[3] and int(tmp[1]) == 1: + occ[orb_i] += float(tmp[4]) + AF[orb_i] += -sgn*float(tmp[4]) + #[e] count not empty elements + occ = occ/(Lx*Ly*Lz) + AF = AF/(Lx*Ly*Lz) + return occ,AF + + +if __name__ == "__main__": + main() diff --git a/samples/tutorial_1.2/input.toml b/samples/tutorial_1.2/input.toml new file mode 100644 index 00000000..2e22a527 --- /dev/null +++ b/samples/tutorial_1.2/input.toml @@ -0,0 +1,13 @@ +[lattice] +Lx = 6 +Ly = 1 +Lz = 1 +orb_num = 1 +model_type = "Hubbard" +[mVMC] +sub_x = 2 +sub_y = 1 +sub_z = 1 +[mVMC_aft] +modpara = "modpara.def" +directory = "aft" diff --git a/samples/tutorial_1.2/qlms_lattice.py b/samples/tutorial_1.2/qlms_lattice.py new file mode 100644 index 00000000..89aa61cd --- /dev/null +++ b/samples/tutorial_1.2/qlms_lattice.py @@ -0,0 +1,44 @@ +def get_site(all_i,list_org): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + + orb = all_i%orb_num + site = (all_i-orb)/orb_num + x = site%Lx + tmp = (site-x)/Lx + y = tmp%Ly + z = (tmp-y)/Ly + list_site = [int(x),int(y),int(z),int(orb)] + return list_site + +def func_strans(list_trans,list_site,list_org): + x_j = int((list_site[0]+list_trans[0]+list_org[0])%list_org[0]) + y_j = int((list_site[1]+list_trans[1]+list_org[1])%list_org[1]) + z_j = int((list_site[2]+list_trans[2]+list_org[2])%list_org[2]) + all_j = list_trans[3]+(x_j+y_j*list_org[0]+z_j*list_org[0]*list_org[1])*list_org[3] + return all_j + +def func_strans_2D(list_trans,list_site,list_org): + x_j = int((list_site[0]+list_trans[0]+list_org[0])%list_org[0]) + y_j = int((list_site[1]+list_trans[1]+list_org[1])%list_org[1]) + all_j = list_trans[3]+(x_j+y_j*list_org[0])*list_org[3] + return all_j + +def get_site_Kondo(all_i,list_org): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + site_num = Lx*Ly*Lz + orb_num = list_org[3] + + site = all_i%site_num + orb = (all_i-site)/site_num + x = site%Lx + tmp = (site-x)/Lx + y = tmp%Ly + z = (tmp-y)/Ly + list_site = [int(x),int(y),int(z),int(orb)] + return list_site + diff --git a/samples/tutorial_1.2/run.sh b/samples/tutorial_1.2/run.sh new file mode 100644 index 00000000..52ee82e2 --- /dev/null +++ b/samples/tutorial_1.2/run.sh @@ -0,0 +1,26 @@ +#[s] definitions of executions +MPI=" " +VMC="path2vmc.out" +VMCDRY="path2vmcdry.out" +#[e] definitions of executions + +python3 MakeInput.py input.toml +#[s] opt + ${VMCDRY} ./stan_opt.in + ${MPI} ${VMC} namelist.def + cp ./output/zqp_opt.dat . + mv output opt +#[e] opt + +#[s] aft + ${VMCDRY} ./stan_aft.in + cp green1 greenone.def + cp green2 greentwo.def + ${MPI} ${VMC} namelist.def ./zqp_opt.dat + mv output aft +#[e] aft + +#[s] post process + python3 VMClocal.py input.toml + python3 VMCcor.py input.toml +#[e] post process diff --git a/samples/tutorial_1.2/stan_hphi.in b/samples/tutorial_1.2/stan_hphi.in new file mode 100644 index 00000000..bb4b7c15 --- /dev/null +++ b/samples/tutorial_1.2/stan_hphi.in @@ -0,0 +1,9 @@ +L = 6 +model = "Hubbard" +lattice = "chain" +method = "CG" +U = 4.0 +t = 1.0 +2Sz = 0 +nelec = 6 +exct = 8 From c61690c0e8b5e2a00372cf9ddf38d2020c6a8a0a Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Wed, 28 Feb 2024 16:08:51 +0900 Subject: [PATCH 38/73] tmp --- samples/tutorial_1.2/Clean.sh | 2 +- samples/tutorial_1.3/Clean.sh | 12 + samples/tutorial_1.3/MakeInput.py | 176 ++++++++++++++ samples/tutorial_1.3/VMCcor.py | 331 +++++++++++++++++++++++++++ samples/tutorial_1.3/VMClocal.py | 116 ++++++++++ samples/tutorial_1.3/input.toml | 13 ++ samples/tutorial_1.3/plot | 8 + samples/tutorial_1.3/qlms_lattice.py | 44 ++++ samples/tutorial_1.3/run.sh | 26 +++ samples/tutorial_1.3/run_uhf.sh | 38 +++ samples/tutorial_1.3/stan_hphi.in | 9 + 11 files changed, 774 insertions(+), 1 deletion(-) create mode 100644 samples/tutorial_1.3/Clean.sh create mode 100644 samples/tutorial_1.3/MakeInput.py create mode 100755 samples/tutorial_1.3/VMCcor.py create mode 100644 samples/tutorial_1.3/VMClocal.py create mode 100644 samples/tutorial_1.3/input.toml create mode 100644 samples/tutorial_1.3/plot create mode 100644 samples/tutorial_1.3/qlms_lattice.py create mode 100644 samples/tutorial_1.3/run.sh create mode 100644 samples/tutorial_1.3/run_uhf.sh create mode 100644 samples/tutorial_1.3/stan_hphi.in diff --git a/samples/tutorial_1.2/Clean.sh b/samples/tutorial_1.2/Clean.sh index 295a7411..b1652354 100644 --- a/samples/tutorial_1.2/Clean.sh +++ b/samples/tutorial_1.2/Clean.sh @@ -4,7 +4,7 @@ rm *.gp rm mVMC.* rm -r tmpUHF rm -r opt* -rm -r aft +rm -r aft* rm -r output rm -r __pycache__ rm green* diff --git a/samples/tutorial_1.3/Clean.sh b/samples/tutorial_1.3/Clean.sh new file mode 100644 index 00000000..6eb81c03 --- /dev/null +++ b/samples/tutorial_1.3/Clean.sh @@ -0,0 +1,12 @@ +rm *.def +rm *.dat +rm *.gp +rm mVMC.* +rm -r tmpUHF +rm -r opt* +rm -r aft* +rm -r output +rm -r __pycache__ +rm green* +rm stan_aft.in stan_opt.in +rm -r uhf random diff --git a/samples/tutorial_1.3/MakeInput.py b/samples/tutorial_1.3/MakeInput.py new file mode 100644 index 00000000..1e3372d4 --- /dev/null +++ b/samples/tutorial_1.3/MakeInput.py @@ -0,0 +1,176 @@ +import numpy as np +import math +import cmath +import toml +import sys + +def main(): + #[s] tolm load + input_file = sys.argv[1] + list_org,list_sub,input_dict = read_toml(input_file) + #[e] tolm load + #[s] output StdFace files + OutputStdFace(list_org,list_sub,input_dict) + #[s] output StdFace files + #[s] output StdFace files + OutputGreen(list_org) + #[s] output StdFace files + +def read_toml(input_file): + input_dict = toml.load(input_file) + #[e] tolm load + #[s]define constants + Lx = int(input_dict["lattice"]["Lx"]) + Ly = int(input_dict["lattice"]["Ly"]) + Lz = int(input_dict["lattice"]["Lz"]) + orb_num = int(input_dict["lattice"]["orb_num"]) + sub_x = int(input_dict["mVMC"]["sub_x"]) + sub_y = int(input_dict["mVMC"]["sub_y"]) + sub_z = int(input_dict["mVMC"]["sub_z"]) + #[e]define constants + All_N = Lx*Ly*Lz*orb_num + print('Lx = ',Lx) + print('Ly = ',Ly) + print('Ly = ',Lz) + print('orb_num = ',orb_num) + print('sub_x = ',sub_x) + print('sub_y = ',sub_y) + print('sub_z = ',sub_z) + + #[s] initialize + list_org = [Lx,Ly,Lz,orb_num] + list_sub = [sub_x,sub_y,sub_z] + #[e] initialize + + return list_org,list_sub,input_dict + +def CalcDim(list_org): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + + #[s] calc dim_type + if Ly == 1 and Lz == 1: + dim_type = 1 + elif Lz == 1: + dim_type = 2 + elif Lx>1 and Ly > 1 and Lz>1: + dim_type = 3 + else : + print(" Possible error in Lx, Ly, Lz") + print(" This script supports chain,square, and cubic in the following way: ") + print(" Lx>1 Ly=Lz=1 -> chain") + print(" Lx>1 Ly>1 Lz=1 -> square") + print(" Lx>1 Ly>1 Lz>1 -> cubic") + print(" Input Lx=%d Ly=%d Lz=%d do not meet above conditions." %(Lx,Ly,Lz)) + #[e] calc dim_type + return dim_type + +def OutputStdFace(list_org,list_sub,input_dict): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + Ncond = Lx*Ly*Lz*orb_num + sub_x = list_sub[0] + sub_y = list_sub[1] + sub_z = list_sub[2] + model_type = input_dict["lattice"]["model_type"] + + dim_type = CalcDim(list_org) + + #[s] make stan_com + stan_com = [] + if dim_type == 1: + stan_com.append("L = %d "%(Lx)) + stan_com.append("Lsub = %d "%(sub_x)) + stan_com.append("lattice = \"chain\"") + elif dim_type == 2: + stan_com.append("W = %d "%(Lx)) + stan_com.append("Wsub = %d "%(sub_x)) + stan_com.append("L = %d "%(Ly)) + stan_com.append("Lsub = %d "%(sub_y)) + stan_com.append("lattice = \"square\"") + elif dim_type == 3: + stan_com.append("W = %d "%(Lx)) + stan_com.append("Wsub = %d "%(sub_x)) + stan_com.append("L = %d "%(Ly)) + stan_com.append("Lsub = %d "%(sub_y)) + stan_com.append("Height = %d "%(Lz)) + stan_com.append("Hsub = %d "%(sub_z)) + stan_com.append("lattice = \"cubic\"") + + if model_type == "Spin": + stan_com.append("model = \"%s\" "%(model_type)) + stan_com.append("J = 1.0 ") + elif model_type == "Hubbard": + stan_com.append("model = \"%s\" "%(model_type)) + stan_com.append("t = 1.0 ") + stan_com.append("U = 4.0 ") + stan_com.append("V = 0.0 ") + stan_com.append("ncond = %d " %(Ncond)) + elif model_type == "Kondo": + stan_com.append("model = \"%s\" "%(model_type)) + stan_com.append("t = 1.0 ") + stan_com.append("J = 1.0 ") + stan_com.append("ncond = %d " %(int(Ncond/2))) + else: + print("This scropt only support Spin, Hubbard, Kondo") + + stan_com.append("2Sz = 0 ") + stan_com.append("NVMCSample = 200 ") + stan_com.append("NSROptItrStep = 600 ") + stan_com.append("NMPTrans = 1 ") + stan_com.append("NSPStot = 0 ") + #[e] make stan_com + + with open("stan_opt.in", 'w') as f: + for cnt_std in stan_com: + print(cnt_std,file=f) + + with open("stan_aft.in", 'w') as f: + for cnt_std in stan_com: + print(cnt_std,file=f) + print("NVMCCalMode = 1 ",file=f) + print("NDataIdxStart = 0 ",file=f) + print("NDataQtySmp = 10 ",file=f) + + + +def OutputGreen(list_org): + All_N = list_org[0]*list_org[1]*list_org[2]*list_org[3] + + with open("green1", 'w') as f: + print("==================", file=f) + print("onebody %d "%(2*All_N**2), file=f) + print("==================", file=f) + print("==================", file=f) + print("==================", file=f) + for all_i in range(0,All_N): + for all_j in range(0,All_N): + print(" %d %d %d %d "% (all_i,0,all_j,0), file=f) + print(" %d %d %d %d "% (all_i,1,all_j,1), file=f) + + with open("green2", 'w') as f: + print("==================", file=f) + print("twobody %d "%(6*All_N**2), file=f) + print("==================", file=f) + print("==================", file=f) + print("==================", file=f) + for all_i in range(0,All_N): + for all_j in range(0,All_N): + print(" %d %d %d %d %d %d %d %d"% (all_i,0,all_i,0,all_j,0,all_j,0), file=f) + print(" %d %d %d %d %d %d %d %d"% (all_i,0,all_i,0,all_j,1,all_j,1), file=f) + print(" %d %d %d %d %d %d %d %d"% (all_i,1,all_i,1,all_j,0,all_j,0), file=f) + print(" %d %d %d %d %d %d %d %d"% (all_i,1,all_i,1,all_j,1,all_j,1), file=f) + # + print(" %d %d %d %d %d %d %d %d"% (all_i,0,all_j,0,all_j,1,all_i,1), file=f) + print(" %d %d %d %d %d %d %d %d"% (all_i,1,all_j,1,all_j,0,all_i,0), file=f) + + + + + +if __name__ == "__main__": + main() diff --git a/samples/tutorial_1.3/VMCcor.py b/samples/tutorial_1.3/VMCcor.py new file mode 100755 index 00000000..51977bd2 --- /dev/null +++ b/samples/tutorial_1.3/VMCcor.py @@ -0,0 +1,331 @@ +import cmath +import math +import sys + +import numpy as np +import toml + +import MakeInput +import qlms_lattice +import VMClocal + +def main(): + #[s] tolm load + input_file = sys.argv[1] + list_org,list_sub,input_dict = MakeInput.read_toml(input_file) + dir_name = input_dict["mVMC_aft"]["directory"] + model_type = input_dict["lattice"]["model_type"] + dim_type = MakeInput.CalcDim(list_org) + #[e] tolm load + + ini_cnt,max_cnt,calcmode = VMClocal.ReadModpara(input_dict) + + #[s] read Green + G1,G2_sz,G2_ex = ReadGreen(list_org,max_cnt,dir_name) + #[e] read Green + + #[s] calc Sq,Sz,Nq,Nk + all_Sq,all_Sz,all_Nq,all_Nk = CalcSq_tot(list_org,G1,G2_sz,G2_ex,dir_name,max_cnt) + OutputSqSzNq(list_org,all_Sq,all_Sz,all_Nq,dim_type) + if model_type == "Hubbard": + OutputNk(list_org,all_Nk,dim_type) #Nk is output only Hubbard + #[e] calc Sq,Sz,Nq,Nk + OutputReal(list_org,G1,max_cnt,dim_type) + OutputSij(list_org,G1,G2_sz,G2_ex,max_cnt) + +def OutputSij(list_org,G1,G2_sz,G2_ex,max_cnt): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + All_N = Lx*Ly*Lz*orb_num + tot_S = np.zeros((max_cnt,All_N,All_N),dtype=np.float64) + Sxy = np.zeros((max_cnt,All_N,All_N),dtype=np.float64) + Sz = np.zeros((max_cnt,All_N,All_N),dtype=np.float64) + for num_bin in range(0,max_cnt): + for all_i in range(0,All_N): + for all_j in range(0,All_N): + tmp_Sz = G2_sz[num_bin][all_i][all_j][0][0] + tmp_Sz += -G2_sz[num_bin][all_i][all_j][1][0] + tmp_Sz += -G2_sz[num_bin][all_i][all_j][0][1] + tmp_Sz += G2_sz[num_bin][all_i][all_j][1][1] + tmp_Sz = 0.25*tmp_Sz + tmp_Sxy = -0.5*G2_ex[num_bin][all_i][all_j][0][1] + tmp_Sxy += -0.5*G2_ex[num_bin][all_i][all_j][1][0] + if all_i == all_j: + tmp_Sxy += 0.5*G1[num_bin][all_i][all_i][0] + tmp_Sxy += 0.5*G1[num_bin][all_i][all_i][1] + tot_S[num_bin][all_i][all_j] = tmp_Sxy+tmp_Sz + Sxy[num_bin][all_i][all_j] = tmp_Sxy + Sz[num_bin][all_i][all_j] = tmp_Sz + # + ave_tot_S = np.mean(tot_S,axis=0) + err_tot_S = np.std(tot_S,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + ave_Sxy = np.mean(Sxy,axis=0) + err_Sxy = np.std(Sxy,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + ave_Sz = np.mean(Sz,axis=0) + err_Sz = np.std(Sz,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + with open("Sij.dat", 'w') as f: + print(" %s " % ("# i j tot_S err_tot_S Sxy err_Sxy Sz err_Sz "), file=f) + for all_i in range(All_N): + for all_j in range(All_N): + print("%d %d %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f " % (all_i,all_j,\ + ave_tot_S[all_i][all_j],err_tot_S[all_i][all_j],\ + ave_Sxy[all_i][all_j],err_Sxy[all_i][all_j],\ + ave_Sz[all_i][all_j],err_Sz[all_i][all_j]), file=f) + print(" ", file=f) + +def OutputReal(list_org,G1,max_cnt,dim_type): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + All_N = Lx*Ly*Lz*orb_num + charge = np.zeros((max_cnt,All_N),dtype=np.float64) + spin = np.zeros((max_cnt,All_N),dtype=np.float64) + for num_bin in range(0,max_cnt): + for all_i in range(0,All_N): + charge[num_bin][all_i] = G1[num_bin][all_i][all_i][0]+G1[num_bin][all_i][all_i][1] + spin[num_bin][all_i] = G1[num_bin][all_i][all_i][0]-G1[num_bin][all_i][all_i][1] + # + ave_charge = np.mean(charge,axis=0) + err_charge = np.std(charge,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + ave_spin = np.mean(spin,axis=0) + err_spin = np.std(spin,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + with open("Real.dat", 'w') as f: + print(" %s " % ("# x y charge err_charge spin err_spin"), file=f) + for i_x in range(0,list_org[0]): + if dim_type == 1: + i_y = 0 + all_i = i_x + i_y*list_org[0] + print("%d %d %12.8f %12.8f %12.8f %12.8f" % (i_x,i_y,ave_charge[all_i],err_charge[all_i],ave_spin[all_i],err_spin[all_i]), file=f) + elif dim_type == 2: + for i_y in range(0,list_org[1]): + all_i = i_x + i_y*list_org[0] + print("%d %d %12.8f %12.8f %12.8f %12.8f" % (i_x,i_y,ave_charge[all_i],err_charge[all_i],ave_spin[all_i],err_spin[all_i]), file=f) + print(" " , file=f) + + +def OutputSqSzNq(list_org,all_Sq,all_Sz,all_Nq,dim_type): + max_cnt = all_Sq.shape[0] + #[s] Sq,Sz,Nq + ave_Sq = np.mean(all_Sq,axis=0) + err_Sq = np.std(all_Sq,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + ave_Sz = np.mean(all_Sz,axis=0) + err_Sz = np.std(all_Sz,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + ave_Nq = np.mean(all_Nq,axis=0) + err_Nq = np.std(all_Nq,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + max_Sq = 0.0 + max_Nq = 0.0 + with open("SqNq.dat", 'w') as f: + print(" %s " % ("# kx ky Sq err_Sq Sz err_Sz Nq err_Nq"), file=f) + for kx in range(0,list_org[0]+1): + if dim_type==1: + ky = 0 + if ave_Sq[kx][ky] > max_Sq: + max_Sq = ave_Sq[kx][ky] + max_Sq_err = err_Sq[kx][ky] + max_Sq_kx = kx + max_Sq_ky = ky + # + if ave_Nq[kx][ky] > max_Nq: + max_Nq = ave_Nq[kx][ky] + max_Nq_err = err_Nq[kx][ky] + max_Nq_kx = kx + max_Nq_ky = ky + print("%d %d %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f" % (kx,ky,ave_Sq[kx][ky],err_Sq[kx][ky],ave_Sz[kx][ky],err_Sz[kx][ky],ave_Nq[kx][ky],err_Nq[kx][ky]), file=f) + elif dim_type==2: + for ky in range(0,list_org[1]+1): + if ave_Sq[kx][ky] > max_Sq: + max_Sq = ave_Sq[kx][ky] + max_Sq_err = err_Sq[kx][ky] + max_Sq_kx = kx + max_Sq_ky = ky + # + if ave_Nq[kx][ky] > max_Nq: + max_Nq = ave_Nq[kx][ky] + max_Nq_err = err_Nq[kx][ky] + max_Nq_kx = kx + max_Nq_ky = ky + print("%d %d %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f" % (kx,ky,ave_Sq[kx][ky],err_Sq[kx][ky],ave_Sz[kx][ky],err_Sz[kx][ky],ave_Nq[kx][ky],err_Nq[kx][ky]), file=f) + print(" " , file=f) + elif dim_type==3: + print("not implemented yet") + with open("MaxSq.dat", 'w') as f: + print("%12.8f %12.8f %d %d " % (max_Sq,max_Sq_err,max_Sq_kx,max_Sq_ky), file=f) + with open("MaxNq.dat", 'w') as f: + print("%12.8f %12.8f %d %d " % (max_Nq,max_Nq_err,max_Nq_kx,max_Nq_ky), file=f) + #[e] Sq,Nq + +def OutputNk(list_org,all_Nk,dim_type): + max_cnt = all_Nk.shape[0] + #[s] Nk + ave_Nk = np.mean(all_Nk,axis=0) + err_Nk = np.std(all_Nk,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + with open("Nk.dat", 'w') as f: + print(" %s " % ("# kx ky Nk err_Nk "), file=f) + for kx in range(-int(list_org[0]/2),int(list_org[0]/2)+1): + if kx <0: + tmp_kx = kx+list_org[0] + else: + tmp_kx = kx + if dim_type==1: + ky = 0 + tmp_ky = 0 + print("%d %d %12.8f %12.8f " % (kx,ky,ave_Nk[tmp_kx][tmp_ky],err_Nk[tmp_kx][tmp_ky]), file=f) + elif dim_type==2: + for ky in range(-list_org[1],list_org[1]+1): + if ky <0: + tmp_ky = ky+list_org[1] + else: + tmp_ky = ky + print("%d %d %12.8f %12.8f " % (kx,ky,ave_Nk[tmp_kx][tmp_ky],err_Nk[tmp_kx][tmp_ky]), file=f) + print(" " , file=f) + elif dim_type==3: + print("Not implemented yet") + #[e] Nk + +def ReadGreen(list_org,max_cnt,dir_name): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + All_N = Lx*Ly*Lz*orb_num + #[s] allocate + G1 = np.zeros((max_cnt,All_N,All_N,2),dtype=np.float64) + G2_ex = np.full((max_cnt,All_N,All_N,2,2),-100,dtype=np.float64) + G2_sz = np.full((max_cnt,All_N,All_N,2,2),-100,dtype=np.float64) + #[e] allocate + for num_bin in range(max_cnt): + file_name ="%s/zvo_cisajs_00%d.dat" %(dir_name,num_bin) + + with open(file_name) as f: + tmp_G1 = f.read() + tmp_G1 = tmp_G1.split("\n") + #[s] count not empty elements + cnt = 0 + for i in range(0,len(tmp_G1)): + if tmp_G1[i]: # if data[i] is not empty + cnt += 1 + #print(cnt) + cnt_max = cnt + #[e] count not empty elements + for cnt in range(0,cnt_max): + tmp = tmp_G1[cnt].split() + all_i = int(tmp[0]) + all_j = int(tmp[2]) + spn = int(tmp[1]) + #print(tmp) + G1[num_bin][all_i][all_j][spn] = float(tmp[4]) + + file_name ="%s/zvo_cisajscktalt_00%d.dat" %(dir_name,num_bin) + with open(file_name) as f: + data = f.read() + data = data.split("\n") + #[s] count not empty elements + cnt = 0 + for i in range(0,len(data)): + if data[i]: # if data[i] is not empty + cnt += 1 + #print(cnt) + cnt_max = cnt + #[e] count not empty elements + for cnt in range(0,cnt_max): + tmp = data[cnt].split() + all_i = int(tmp[0]) + all_j = int(tmp[2]) + all_k = int(tmp[4]) + all_l = int(tmp[6]) + spn_0 = int(tmp[1]) + spn_1 = int(tmp[5]) + if all_i == all_j and all_k == all_l and all_i==all_k: + G2_sz[num_bin][all_i][all_j][spn_0][spn_1] = float(tmp[8]) + G2_ex[num_bin][all_i][all_j][spn_0][spn_1] = float(tmp[8]) + elif all_i == all_j and all_k == all_l: + G2_sz[num_bin][all_i][all_k][spn_0][spn_1] = float(tmp[8]) + elif all_i == all_l and all_j == all_k: + G2_ex[num_bin][all_i][all_j][spn_0][spn_1] = float(tmp[8]) + else: + print("fatal error in 2-body Green functions") + return G1,G2_sz,G2_ex + +def CalcSq_tot(list_org,G1,G2_sz,G2_ex,dir_name,max_cnt): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + All_N = Lx*Ly*Lz*orb_num + All_site = Lx*Ly*Lz + all_Sq = np.full((max_cnt,list_org[0]+1,list_org[1]+1),-100,dtype=np.float64) + all_Sz = np.full((max_cnt,list_org[0]+1,list_org[1]+1),-100,dtype=np.float64) + all_Nq = np.full((max_cnt,list_org[0]+1,list_org[1]+1),-100,dtype=np.float64) + all_Nk = np.full((max_cnt,list_org[0]+1,list_org[1]+1),-100,dtype=np.float64) + + for num_bin in range(max_cnt): + with open("%s/total_SqNq_%d.dat" % (dir_name,num_bin), 'w') as f: + for kx in range(0,Lx+1): + for ky in range(0,Ly+1): + tmp_Sq = 0.0 + tmp_Sz = 0.0 + tmp_Nq = 0.0 + tmp_Nk = 0.0 + Ncond = 0 + for all_i in range(0,All_N): + Ncond+= G1[num_bin][all_i][all_i][0] + Ncond+= G1[num_bin][all_i][all_i][1] + for all_j in range(0,All_N): + list_site = qlms_lattice.get_site(all_i,list_org) + i_x = list_site[0] + i_y = list_site[1] + # + list_site = qlms_lattice.get_site(all_j,list_org) + j_x = list_site[0] + j_y = list_site[1] + + theta = 2*math.pi*kx*(i_x-j_x)/Lx+2*math.pi*ky*(i_y-j_y)/Ly + # + tmp_uu = G2_sz[num_bin][all_i][all_j][0][0] + tmp_ud = G2_sz[num_bin][all_i][all_j][0][1] + tmp_du = G2_sz[num_bin][all_i][all_j][1][0] + tmp_dd = G2_sz[num_bin][all_i][all_j][1][1] + + # + tmp_Nk += G1[num_bin][all_i][all_j][0]*math.cos(theta) + tmp_Nk += G1[num_bin][all_i][all_j][1]*math.cos(theta) + # + tmp_Nq += tmp_uu*math.cos(theta) + tmp_Nq += tmp_dd*math.cos(theta) + tmp_Sq += 0.25*tmp_uu*math.cos(theta) + tmp_Sq += 0.25*tmp_dd*math.cos(theta) + tmp_Sz += 0.25*tmp_uu*math.cos(theta) + tmp_Sz += 0.25*tmp_dd*math.cos(theta) + # + tmp_Nq += tmp_ud*math.cos(theta) + tmp_Nq += tmp_du*math.cos(theta) + tmp_Sq += -0.25*tmp_ud*math.cos(theta) + tmp_Sq += -0.25*tmp_du*math.cos(theta) + tmp_Sz += -0.25*tmp_ud*math.cos(theta) + tmp_Sz += -0.25*tmp_du*math.cos(theta) + # + tmp_Sq += -0.5*G2_ex[num_bin][all_i][all_j][0][1]*math.cos(theta) + tmp_Sq += -0.5*G2_ex[num_bin][all_i][all_j][1][0]*math.cos(theta) + tmp_Sq += Ncond/2 + if kx%Lx == 0 and ky%Ly ==0: + tmp_Nq = tmp_Nq- Ncond**2 + tmp_Sq = tmp_Sq/(All_site) + tmp_Sz = tmp_Sz/(All_site) + tmp_Nq = tmp_Nq/(All_site) + tmp_Nk = tmp_Nk/(All_site) + all_Sq[num_bin][kx][ky] = tmp_Sq + #print(num_bin,kx,ky) + all_Sz[num_bin][kx][ky] = tmp_Sz + all_Nq[num_bin][kx][ky] = tmp_Nq + all_Nk[num_bin][kx][ky] = tmp_Nk + #print(kx,ky,tmp_Sq,tmp_Sz,tmp_Nq) + print("%d %d %12.8f %12.8f %12.8f " % (kx,ky,tmp_Sq,tmp_Sz,tmp_Nq), file=f) + print(" " , file=f) + #print(" ") + return all_Sq,all_Sz,all_Nq,all_Nk + +if __name__ == "__main__": + main() diff --git a/samples/tutorial_1.3/VMClocal.py b/samples/tutorial_1.3/VMClocal.py new file mode 100644 index 00000000..6486f96c --- /dev/null +++ b/samples/tutorial_1.3/VMClocal.py @@ -0,0 +1,116 @@ +import cmath +import math +import sys + +import numpy as np +import toml + +import MakeInput +import qlms_lattice + + +def main(): + #[s] tolm load + input_file = sys.argv[1] + list_org,list_sub,input_dict = MakeInput.read_toml(input_file) + + ini_cnt,max_cnt,calcmode = ReadModpara(input_dict) + All_N = list_org[0]*list_org[1]*list_org[2]*list_org[3] + All_site = list_org[0]*list_org[1]*list_org[2] + orb_num = list_org[3] + dir_name = input_dict["mVMC_aft"]["directory"] + + tot_Ene = np.zeros([max_cnt], dtype=np.float64) + tot_occ = np.zeros([max_cnt,orb_num], dtype=np.float64) + tot_AF = np.zeros([max_cnt,orb_num], dtype=np.float64) + for i_smp in range(ini_cnt,ini_cnt+max_cnt): + file_name = "%s/zvo_cisajs_00%d.dat" % (dir_name,i_smp) + occ,AF = ReadG1(file_name,list_org,i_smp) + for orb_i in range(orb_num): + tot_occ[i_smp][orb_i] = occ[orb_i] + tot_AF[i_smp][orb_i] = AF[orb_i] + # + file_name = "%s/zvo_out_00%d.dat" % (dir_name,i_smp) + tot_Ene[i_smp] = ReadEne(file_name,list_org,i_smp) + + Ave_Ene = np.mean(tot_Ene,axis=0) + Err_Ene = np.std(tot_Ene,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + # + Ave_occ = np.mean(tot_occ,axis=0) + Err_occ = np.std(tot_occ,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + Ave_AF = np.mean(tot_AF,axis=0) + Err_AF = np.std(tot_AF,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + + with open("Ene.dat", 'w') as f: + print("%s " % ("# Ene err_Ene Ene/(All_site) err_Ene/(All_site)"),file=f) + print("%f %f %f %f" % (Ave_Ene,Err_Ene,Ave_Ene/(All_site),Err_Ene/(All_site)),file=f) + with open("occ.dat", 'w') as f: + print("%s " % ("# occ err_occ AF err_AF"),file=f) + for orb_i in range(orb_num): + print("%f %f %f %f" % (Ave_occ[orb_i],Err_occ[orb_i],Ave_AF[orb_i],Err_AF[orb_i]),end="",file=f) + print(" " ,file=f) + +def ReadModpara(input_dict): + file_name = input_dict["mVMC_aft"]["modpara"] + with open(file_name) as f: + data = f.read() + data = data.split("\n") + for i in range(0,len(data)): + if data[i]: # if data[i] is not empty + tmp = data[i].split() + if tmp[0] == "NDataIdxStart": + ini_cnt = int(tmp[1]) + if tmp[0] == "NDataQtySmp": + max_cnt = int(tmp[1]) + if tmp[0] == "NVMCCalMode": + calcmode = int(tmp[1]) + return ini_cnt,max_cnt,calcmode + + +def ReadEne(file_name,list_org,i_smp): + with open(file_name) as f: + data = f.read() + data = data.split("\n") + #print(len(data)) + tmp = data[0].split() + tmp_Ene = tmp[0] + return tmp_Ene + + +def ReadG1(file_name,list_org,i_smp): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + #file_name = "output/zvo_aft_cisajs_001.dat" + with open(file_name) as f: + data = f.read() + data = data.split("\n") + #print(len(data)) + #[s] count not empty elements + occ = np.zeros([orb_num], dtype=np.float64) + AF = np.zeros([orb_num], dtype=np.float64) + for i in range(0,len(data)): + if data[i]: # if data[i] is not empty + tmp = data[i].split() + if tmp[0] == tmp[2]: + all_i = int(tmp[0]) + list_site = qlms_lattice.get_site(all_i,list_org) + x_i = list_site[0] + y_i = list_site[1] + orb_i = list_site[3] + sgn = math.cos(math.pi*x_i+math.pi*y_i) + if tmp[1] == tmp[3] and int(tmp[1]) == 0: + occ[orb_i] += float(tmp[4]) + AF[orb_i] += sgn*float(tmp[4]) + if tmp[1] == tmp[3] and int(tmp[1]) == 1: + occ[orb_i] += float(tmp[4]) + AF[orb_i] += -sgn*float(tmp[4]) + #[e] count not empty elements + occ = occ/(Lx*Ly*Lz) + AF = AF/(Lx*Ly*Lz) + return occ,AF + + +if __name__ == "__main__": + main() diff --git a/samples/tutorial_1.3/input.toml b/samples/tutorial_1.3/input.toml new file mode 100644 index 00000000..f23f3518 --- /dev/null +++ b/samples/tutorial_1.3/input.toml @@ -0,0 +1,13 @@ +[lattice] +Lx = 4 +Ly = 4 +Lz = 1 +orb_num = 1 +model_type = "Hubbard" +[mVMC] +sub_x = 4 +sub_y = 4 +sub_z = 1 +[mVMC_aft] +modpara = "modpara.def" +directory = "aft" diff --git a/samples/tutorial_1.3/plot b/samples/tutorial_1.3/plot new file mode 100644 index 00000000..3a40b43a --- /dev/null +++ b/samples/tutorial_1.3/plot @@ -0,0 +1,8 @@ +set xlabel "optimization step" +set ylabel "total energy" +p[:][:] \ +"random/opt/zvo_out_001.dat" u 1 t "Random initial", \ +"uhf/opt/zvo_out_001.dat" u 1 t "UHF initial", \ +-12.566554520605 w l t "UHF", \ +-0.85136*16 w l lc -1 t "exact diagonalization" +pause -1 diff --git a/samples/tutorial_1.3/qlms_lattice.py b/samples/tutorial_1.3/qlms_lattice.py new file mode 100644 index 00000000..89aa61cd --- /dev/null +++ b/samples/tutorial_1.3/qlms_lattice.py @@ -0,0 +1,44 @@ +def get_site(all_i,list_org): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + + orb = all_i%orb_num + site = (all_i-orb)/orb_num + x = site%Lx + tmp = (site-x)/Lx + y = tmp%Ly + z = (tmp-y)/Ly + list_site = [int(x),int(y),int(z),int(orb)] + return list_site + +def func_strans(list_trans,list_site,list_org): + x_j = int((list_site[0]+list_trans[0]+list_org[0])%list_org[0]) + y_j = int((list_site[1]+list_trans[1]+list_org[1])%list_org[1]) + z_j = int((list_site[2]+list_trans[2]+list_org[2])%list_org[2]) + all_j = list_trans[3]+(x_j+y_j*list_org[0]+z_j*list_org[0]*list_org[1])*list_org[3] + return all_j + +def func_strans_2D(list_trans,list_site,list_org): + x_j = int((list_site[0]+list_trans[0]+list_org[0])%list_org[0]) + y_j = int((list_site[1]+list_trans[1]+list_org[1])%list_org[1]) + all_j = list_trans[3]+(x_j+y_j*list_org[0])*list_org[3] + return all_j + +def get_site_Kondo(all_i,list_org): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + site_num = Lx*Ly*Lz + orb_num = list_org[3] + + site = all_i%site_num + orb = (all_i-site)/site_num + x = site%Lx + tmp = (site-x)/Lx + y = tmp%Ly + z = (tmp-y)/Ly + list_site = [int(x),int(y),int(z),int(orb)] + return list_site + diff --git a/samples/tutorial_1.3/run.sh b/samples/tutorial_1.3/run.sh new file mode 100644 index 00000000..52ee82e2 --- /dev/null +++ b/samples/tutorial_1.3/run.sh @@ -0,0 +1,26 @@ +#[s] definitions of executions +MPI=" " +VMC="path2vmc.out" +VMCDRY="path2vmcdry.out" +#[e] definitions of executions + +python3 MakeInput.py input.toml +#[s] opt + ${VMCDRY} ./stan_opt.in + ${MPI} ${VMC} namelist.def + cp ./output/zqp_opt.dat . + mv output opt +#[e] opt + +#[s] aft + ${VMCDRY} ./stan_aft.in + cp green1 greenone.def + cp green2 greentwo.def + ${MPI} ${VMC} namelist.def ./zqp_opt.dat + mv output aft +#[e] aft + +#[s] post process + python3 VMClocal.py input.toml + python3 VMCcor.py input.toml +#[e] post process diff --git a/samples/tutorial_1.3/run_uhf.sh b/samples/tutorial_1.3/run_uhf.sh new file mode 100644 index 00000000..3178e7e6 --- /dev/null +++ b/samples/tutorial_1.3/run_uhf.sh @@ -0,0 +1,38 @@ +#[s] definitions of executions +MPI=" " +VMC="path2vmc.out" +VMCDRY="path2vmcdry.out" +UHF="path2UHF" +#[e] definitions of executions + +mkdir random +mv opt random +mv aft random +mv Ene.dat MaxSq.dat Real.dat SqNq.dat occ.dat MaxNq.dat Nk.dat Sij.dat random + +#[s] opt + ${VMCDRY} ./stan_opt.in + ${UHF} namelist.def + echo " InOrbital zqp_APOrbital_opt.dat " >> namelist.def + ${MPI} ${VMC} namelist.def + cp ./output/zqp_opt.dat . + mv output opt +#[e] opt + +#[s] aft + ${VMCDRY} ./stan_aft.in + cp green1 greenone.def + cp green2 greentwo.def + ${MPI} ${VMC} namelist.def ./zqp_opt.dat + mv output aft +#[e] aft + +#[s] post process + python3 VMClocal.py input.toml + python3 VMCcor.py input.toml +#[e] post process + +mkdir uhf +mv opt uhf +mv aft uhf +mv Ene.dat MaxSq.dat Real.dat SqNq.dat occ.dat MaxNq.dat Nk.dat Sij.dat uhf diff --git a/samples/tutorial_1.3/stan_hphi.in b/samples/tutorial_1.3/stan_hphi.in new file mode 100644 index 00000000..bb4b7c15 --- /dev/null +++ b/samples/tutorial_1.3/stan_hphi.in @@ -0,0 +1,9 @@ +L = 6 +model = "Hubbard" +lattice = "chain" +method = "CG" +U = 4.0 +t = 1.0 +2Sz = 0 +nelec = 6 +exct = 8 From f6cc2b89ffb495d94a90a7e1525233aca80f8d97 Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Wed, 28 Feb 2024 18:07:56 +0900 Subject: [PATCH 39/73] add 1.3 --- doc/tutorial/figs/tutorial1.3_gs_opt.png | Bin 0 -> 22839 bytes doc/tutorial/figs/tutorial1.3_gs_opt_zoom.png | Bin 0 -> 31161 bytes .../ja/source/basic/hubbard_chain.rst | 13 ++-- .../ja/source/basic/hubbard_square.rst | 60 ++++++++++++++++++ doc/tutorial/ja/source/basic/index.rst | 1 + samples/tutorial_1.3/plot | 2 +- samples/tutorial_1.3/stan_hphi.in | 9 +-- 7 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 doc/tutorial/figs/tutorial1.3_gs_opt.png create mode 100644 doc/tutorial/figs/tutorial1.3_gs_opt_zoom.png create mode 100644 doc/tutorial/ja/source/basic/hubbard_square.rst diff --git a/doc/tutorial/figs/tutorial1.3_gs_opt.png b/doc/tutorial/figs/tutorial1.3_gs_opt.png new file mode 100644 index 0000000000000000000000000000000000000000..28a9d34ef949806080c46702e2c678a5725fa5e1 GIT binary patch literal 22839 zcmaI81yoj18!mW&4@qeh6p#+-lJ4#f32Bg!?iLUbkPd03ySqcW8%b$tR61w#|99rz zb?44}Yk@92oZ9dE)Vr6Tl@+C)qP{?dAn2)#w74n+!PS5-0%UmbljhL)An*r@z4Tir z2tvbs{DOm0(g+}k6p|4aQFl)}SoUyNpSj{bxkzgsHZ_k$M+stJ=!9@)zu9QU_-j@& zF@~uYXim?b@2FO~h*;~=mem-%Dz4KJ4=1<6$Hzz3Df*0RC8GHW62YPLlBQ-)K3wq{ zy}8+--XMT~Km4REvk&Qbc*$$5(JeU1>F6f`IXqcVbos_|I-Dr-?q^zV98u|)|Nq~o z6?u$J-prWF}rI!E7VkD}spKh7*lFQb)d6_tai7d!DUa?T~=I%bp zz}I6Smdb6#V`p!s7|w8aGB;cDi%z|*zLAlUnVFf0h=@gw95NYku3FJdl+Zml6x6+z zE0?srvxCsF(&|N{n1&3IL|JV1$9SC|>_#}FkmY1M&$3I2x129n`v|VyU94h4G1B65 zE;khVbJ-K`i|=0foK7H-xOeP2FEF>hE1%mx%xQ69$Q(n0Xk=|SR7RUgwpy$&y#@KY zA*|2h+hdu2LyYy_i*e4H_P2M(eg?|QC-*nU`MJ4p!itKcZ9X>#QL?hK=3^PlRuAC3 z-|Fh>4BCCq<;3|_%zvC*d55}_zhV6!r~QEx-PF|dcvL>D4?Kt9Ne6RLN>G?Jy*ma24oq2E0_O*0$76`9))zO|aiT^-Ed*IW|?SkqIp1NHEOoo!v zdJlR$f4mMZ*Un)iWBMdY3vr%edRXYEPoI|4u|@l3a+fPV^=jfys!h+#2t3^W8xwlC zMPqKMaM_=AO*1-Ns11M4Z0q*qsQuwSo7i_#3JH@WP0+_vLZT;zPv~OFNlEC=xw%?J z1&@Ilz3%2DQnWKBI>WdxlGtfyRKL~pEDWC>T+nmzL%q);`@uqOaX~@BGNH7LjEsVU zz`4{;y4y?QdRCIp4YM>HN;dXyIrNs4NVfx4>{<*3>WstYNvGKYbb8C(HNXpG| z`@;ZDCd~i&J9ne;Zz4X|r&j|?zBuSlii?Y5Z=3}k0# z&-6Otx#9mPY}gw?=yP)}a9A@nTc(c&6>F9bjy!%8iv&ICo9pgjpZ=Vq;6yu02nN9Zt#5;z~EFK;=U z)%~tqkeAoHa){}7DJCh|n{1KM=(MA#p#iYyxcOKRYB*}zKlqIH#&*elzqCHX>!>k~ zM(JIZ>1X}xp^=f+y`th^biyjrfmn}!+gEq@;5+A=H`G*A#L01~woSVsLbq#)jJoUj zpJkMkl;q`!SPX?T1$~N&iVnD#8#iNxNh>_h_AXZa9-1RIgoCvI+1oU~d>K)=DJ_i| z`}OPm`1r|5Hzvh;e+-4#_wma=8>_xIhX9`H7Z}g;EmMjX^adw5Mlu9vI2077AYm1} z-mjJ^P;_)O1f@A?Xb_rw5M;7p|7_BH+;(HzcD1cc%kh5vo2$Nab&2;y5TYgSvmCRn z=8gLHA)a=$|I|QOmV4{UOS_gzP#_m8UUm`^5~NrS88kX_(ua`Mqax+@FZI1ApWXvlnkE&KR1QhfaUqG%{Sy=IUo8RY(_=edbbi?y}2fzO!+ zba_xcmSG3T4YfHbs?@7b^A#b|b6c;?yD-1iET=owRm1&)~60|hc)urin zhLfFsb->-+5%amu|5Iwe{X0|-YC_kp6%?~w>(zGZpLEA2HyciPhNW}GgRQO)$E2dZ zo}={wN>bl{N%voj0=&LoCinfjdqk|8o|zFiPxR`rzrpapWA#dBG3xQgs{xG|uC#z! z9`QPzkTS75T5W#-odFun;=pXn11qfFS<+cUkhG2$htmqPt=~`z(v<+qWnV0z?3uR`N4_ zuXpn^GlcwnZ5}MA@_cUp^u6-C{lh-S?^NUDdN*(NzEI)$yORgwvwd4}0N}VQKR)9= z{?gNzZ-{uEe*>8?Iy^i)IJlQn!)s^b0+vDh!$O&Xo1J$Kcx)8A``arI4-bn>AJ>Qb zJ1(2~lSw(|pT|z4CZz*Xk+FiR7m=lsmkUmke1fhfLQ*eu75ZhmjxRz)zn`9-jw%+= z_h~-YJbZ|3^-#R5oCzD7Vb9_qqbbVC$$67sdT6iDQ`hwJhR4;|9#6F8Pwz_}9v)Du zmhazdSDSyi6Ev}zEqPn|WWXu2IV9c)g$%~a%nfk$-(GR~3RvM|--~8elU|$Ew!6Gk z+Y~{crn}t;LiR|32OOYi%16VL?b`3om3;rkrKJ&hF*O4C09_~%{%p5N5U~5aZ6%@= zekK|mKt4GC5^uNd__z<(6rzgUwY9acyiYoFlipdiFV%g}rNl`Fi0t=pvkHgs1f7uW zhwnqrbAuMJN;tT<2Ht-p$b#;+Pu9AX_zr812HcQ#OMbm)ZoH|^yc_m?3qI=V9L~R$ zp|9X(0el(@)rB%1Z0>vn}I?BsAy8ggCfWq7a&6W{q?>{r^D6Xt(lpb zIBEr*2KzO$Bz;$)dmw)-e(lrf*P89RuzEY2Kvm)!C8Y5o3YAFpyzK8>W;7}-B8L(g!-@Z{hclCu>Im>_ zyvitY^UUK@+4W9zLq`vpItY zK;*?mywCCW1XX#xb)>8YpDT`+tX+GkKiM0j-q3Ydsj` zgjxX0R1)J!d_MaS@ga@KQ`UY{kc)JF*%O&e0Li4}AGPrQfaiF;*`(#8)H=ml)^p5R z3k-_RC`^@$bp7Y-w8-ImM@6>!GB-C@%fN>d!o$NG&Jbu;n+jum?bCy=)$(t&KEtZn zM=CwEiHCb(WD1ZTik-B3;Q1SkvVnme06#C^*vwA|mKGQ5Hab#44SHpxz8%kX)p_aZ z>1TT#ZNi^1R?W5CYf7d6_8e!I67|djpCP7Z21dri2=>wWx(_eOBVTeI{YM}VF}L5= zx8EJcpm8C=e|%JhK$SH%HWq7@mz9-e@HlN}2zWigAex_^#^d`3P|h15Uw&TRiu07h z`AG~ovwpKHT*vw0BG6E&v9WBnOASCYK^-BleBU4Qe^{tlTGHc7AY?Z`JzTt~nNrkk zc4dT0K)wA4#m<(BB4IJ?$h<$Lfw+6KCiz?skVCqGiX#L+^@l^azBm>Ff7#pH)0Alk zIE5*A`Rni25Od2(*Srd34;J6t!UB_o|FRS573}dafPRH)`FXjyBN+mG1n90K^-~_6 zvevbyPYT~Cc;>A>++Sq+oc|1GZoB+}t2CU>=eAh)p?<}4pV{{hnuH1}DyrbkLG^ss z$iwwq`~78~&^yoFT-Wm5#}?6R{JUUX4#+|ezyj$0YS%-Zs6Jf2e@l%{K*YDW|5;zO zYhTV-V#Y#_Pf9}Q0I!zc_(v$H%1uCaJ_nV3B!D9_A8vO5*k0`$Jb3mIyTvCYz;ys| zSqlmp@b05st2Q4gDl9~S!8d~|0PVJV+ztc{kY{;-J!%GZ8P5Lx{R>_^kok)kCGD3z z%t2UmbaYXI*YCY2G5JsYms59+{T{py3V_~x^q-)~{@vU?s$M{g$?56(`uaY*xk;m` zT*pPlWx!=F1C)E__j1Exa98;1>METhP)i9Vvg>75a)->=>F?|)tCaKYRJ+-^IZzw| zc&K*=7DBq9kq+xu?}6a60E@UaT%ye@#n!m`jw_~&<>BMDf^ zU3D_Y>Mh1H09Khz7pVAMPi5)|ShXD1Ej}vMIRihR{n^s6tm)ZV5^j6LkrYl)hkp0} zG7lT79X5I&MZ=QQSUSJQ-&iU+*P|sA2&nJ7EoMKupvx&xL%?*ua#OJk>1K7@><24$ z43sB$^pw0>SzcCFRtgG=7hgcV^hGWJ6$psLX2%0SJ+Q$sce}6dPeLLhA|45RXEePu zz@#|Ykym!7=Sv0-5z6jBRaKSe#gPwC6zBVMWAC(!w94N>znppDezn~k-Lya4w1Y-L zf5Fj@A)IJtneqfm$xC+}r2CLDRmI?ibfa{B=5k;$n)X&x(-pkBjuY$#EfMY zlk4MxP0Cz}h15n-K4$RXI1&LQaRH_{LF*llX+N;my!lgCqkP9Dpk@i-+}@Wb;9Z&IgUh+K``!W1+Ry>v(96(_UT^ugfyZIG=+0tO6Yn*;<>)55ax#j4v3p551Xo4&l{ z$^asX*s0tL?||?C328YUO>{x|?OTrp%Y4>e92^|bOW5K>{O%{f=F$am-AGl^dw+Mc_`Ra3$rC(enp6E^tMjg^IQl11pl*ta-n@C!JK6#oiqCLsbCZ&qntc7S zKV1*B#akZkZ!|Qv(kx6(0TRE&9vT|5YurkF1PM^|u8n%3+8P?1woBZQw1NUa4-0IE zo-lln=u{|WWMtff5ad;I{bO~4l@k83)*bQ)RUqVvz(h9iz1oVAc>vugr>ICGL2cnbF1pnFS z0}8;|jj2tlU{e~I?8CQT|L5<&MLJb1ofmOeLGV()FVi`(lLe04CG%7UY#E)Ajm!6u zi-V&?zxf;l1HgnLJv!{x>%HQEfdO{&VQEFh$U}2xitL2*H9;*2mFUD6vY=B~x`v}S zhz1;;oXT7N%6h@x%g7A;p2$W+MSVnEfRlW_iN7u-O#XW~dOALlf#2O(ABh(OJNp#L zS)=prq)N7AscwB)MMXtb6`LFq(FqhUGXJZV>zZ|IvgTf5a(qCR~MaRO$w&JBmyWx)8DclMz2|_!)ZB5 znLpJCmJ^hms}(rpFR_cQJ!m9Do10G{{8|4@14NBMeG(SX3ry)K{B6fv;MJN6SYLh< z(8+6d5&;5-fjjX(3DPOD0R3Znia9}{`Kp8#)hgEq8fSVlxr7@OZ97L1ki9I%er|Cq z2V&M|0_5E0Tg@W}I^x5FZWLX>#V@B*i1uF)3pjxle{&idYZ9UF2>xn2R~)>WGMlqM>C2 zxWJG!gMWA={>QvC01@rcUdO~Z0P0oO(sGj&#LJXp-mkVaQt&XU$f9kqG#bhK#ECDV z9z+@B9JL|jv;>^xl#);@fG6v+MsvVhLLebS@BST>R&hy3WBh;(Dw%r}IT^T&2m;o1 zV3OJZpd98_{U=8Pka0NgjckV%mrBhby;xHbyq!V%-Ekl}R8~YyGd&;bRu#xPX!6&~Pi-FI5;JK=K*<9?MNGAgcqJpFZGWkQx8agEZ|q z6sqg$&Ov&G=ntY1hrxKdM>+H8ScFMWKA=TCefks#-^zMI6CgEIXEHd+u*iab@F@ma zSy|zT(uNrmNYdiLLuBH7>kFU`?SS&woyuQi264AYXAIV495KD9Wy&LyDW-5(b_Jol z^1WPp%C&R?UNaZ?kddt|QmbibBqSx(zn>u2pF_eRx+G?kM<&x>(ua>W<-{S6IWwrO#BAwG_zG8iSo#LXi{O0I0j%Zt^jzsKv z53cJ$w`2r?5rJe$M*~2P>QUZe;(;Zfi)9dg>a_d%I5_-4e6Cjk3I=G=-eVS*J$3O2 zL@&?`SRk9}^Vq%wN~NA%%E0Y^Gfu#iVel}5l8xPfNs;{kVq9HS^>6d)oh{HL7HJNW zH?e?y|ED41B&kdY%OWK=-BQ!C7nOG79W8m3FUyrCeL%=$7wtVd^~cyW>Br>cWF#>m z+_x4M?OPj!5jQ#H-FJPck$INaclRMAp6?IlD;4wq9;~!WU}Qo?oJ0#I3NAx8v8B?4dw z{`(G?lB|JX01Ez~rN}w805KSA@-T7=#rte;MlDaCaCW^LQ|KVY2DJGFuVUbEnSOH< z^(#=6*+lu9w7Itz?GHY{f+7ZXK7gr+ejE){K#Mv_N+>GL#j9xF0s_5zaEQRwW?b4o zAjN=tX$NOZ_z#Xc=Wmn!xOMXC-n&JS_l>O!n@NtSVGP|1$k1xrZ zkNZXNACOlOU-|0j=;S|<+8Y!D6u*EGXS3Frx9&=3tEy#*S> z7by1K-CgM9(HqTI7^NqrUY7CSt5TfDVu?1*J2d?T`poO(SLb7VxH%B#b}&Bye5z}{ z^Y8KRz{A=BwQp@>b4z_Q1z!pX#ku4c0Y=Ep`Qgn!;JSdIXgsJI0#ddSWQFHcYO1Pi zo~OS90s*z^}k{0Mc3U{x<^nAq|8$ zhjQlNF>z@WVNg^bJ8&vM3KM-$dhrgFBTD2Hsma?}FfsVg2oU69AB9O-Su2SL#L2Ps z=MF#ocXUS#w8q$uZi77;1O)=nU`Ukf2AS@mvbwsuw)T6wq{Kwe))m*Z%>pVZIx|X~ zMo08V$xh%S{mS(pNn8R2^6x_QJ}$GTM#l?js~Tr0Y8t`fCDgK zk6|qk41iY;+<+N>=s>`%VJ-(Vg*Grs5Ck<19CTtrLb^jQVX5nhXDd)?XwMizTh%%P z@W{X&MQ1*K?ChT7N7?%TPap+$g87;Eua1x4R_~bTT2H#rl=%MyWzmvE?W7(Uydw~Y?ZFg*%;-aj z1QVPFFgQ>I;TO1y@#V>yTq1)}L@i(C=H{mBD=c!1YrGbof0da0fVk}v#0l})wa6xs73`vZCSKm<4e;jzPEiD|z!ruLzdz!kJhaCj2HYFBFL4GOs zMYxdgOvdv28t&F75x+vX>Glw;Nh*L=HGD_$&!1!qPB>%n-?;!%sZGI}v^aP0d6Bu#;qg6gMv6SaEn3-t38s%j1(}kPxxwH#qH_!$V-y6kRqw6-WV@Dmu`Z z?LXSm{tLM=pKW9V0~@sWvVeV`?@dtkUG~&vJ?--A$myvA)s`JD8~ML!tqmGtA*#!d z8op2pej3)KL=!Ey?f;UaJA!fQDkXPs_;t`SN*Vw?;pd2b|66`;=lkt$o>kdO8yh`7 z`E(xWF-~w6O-;>b`1ntWdGR3g;je$dypT2wr#%qJpet`MC$BL8TLqMo*$|< z0_+&_03^*T?2a{!#~l!nc_0d|s2E>iVq`q?Y(3$CkRepvgcFS|7@tl2Y0dlR9hK5TpERR}U-9MwIp<&jp z_%`EV{DBQ$LgdFbRsH(`m}o!i=Fa11aq-dq&~v}D?*ux_UgTg4WP)0yI<>xc*FdiU zT^U6paIKqOnnnBmGUz8|yY`lwJHF>%Kw38X(_?=gO+7aem=AzyC+1^(psoB6j77%D zEOK^Ipw!DNq#6Rce`h!ANit9jfGKCEr@7Ndfe*IxYS3?70UF-?H|U)&OvHj;!4%=! zGojFNEut^iFcbBB&^2Ww0^Z}#3_eTxOMfZ2rj>WG5|z&1o4{3?Uq`}*7ydR~K_2^} z1cfYp4~85$u3B9eGAQl?-?;?NYc(4bJ?aFnUJM6e7YSi-;z@P8blJpye_ieVwj1f+ zYd3z+hURKXWFDS$0;)bRJ6Wy^CF~VWCM>GLL;8n44F{RI?L=TX#`3btMnWv+@Ae|P zL>ir1kDRIKbcd2-;@K$*-AMk^xna1}+zX)5o3uW^31im00&gk*lNo5YO&D5avf5JP z-02?Yu+gRXG))s9AMl;CpZ^R`Xo7tS?`DXRriModiAX=M7)gD+t_9rr*bb!~g)g^$4-XTJIgs;y~ zXo8$eaOt?=e<<~KL*G2&!oCDWN4f@Z_M2`s(=bT$nMuZOn@0rhCdKgn*;@SQ7scpt zks^jKG3^dmlYmCsz9u))mG`DVCo2Fa2T>E2{S+r=A`Yyg6i;W-OdXgWZ%VOY8BKMi z1g{s+>l2@DP^N5x&iSa=|BFDkycPhHO>D5z!5>bJ1j5fhc}FBgfLf<9t!*+3mdfMi znd4SV#+Pgs!<+%@M!X)xz_Z}v2~e*!m3qgk}d0;AiVVD9K{oq!K zP(Q(*q;7(=r^s;qe^!e-{Il zZ{_It7fkMA+Q^_=euS)j4y~RE3B9>7@pmfN7QQztmNt!>NHd8UrwE%LJQUz($*)!NE}= z|089&GM3#BH9YrF%Yk_sLoRMxN_rctb^kis#r>&&E6^BxHB^rZKD@ALCBpIKs=$H5SCXKtf{ zLk(%k{R5BI^ejSuF>~JKK7pof(P%KH=>X>#^Kx;M@Vm3r-GQAH{C|Gng1sF48Hx%V z^s6JlI&D>t=-afCg{uu$+BP-fguXwN) zC}pDbewL3J4uZ%|axJf^=2GV9YP2$p(3OoDkW)l{s@oQ!-2Q6H3*3ii48;Dqb{I3w zs)!mN#yyK~LNI{o>p)T}j z*sHM!i?3bmf}**V>%}(Lh_T}VHow;BM&bFKp4M5JVC3ZWGq=B$`7&jYv71>O4~{^4 zL~WZKUK-pQ3tlZG5=5nzqUBdRcY><*76}c$)iM1e8^r=CSecDL3Pf2^MK&6bM|7nS z-HzYZs6Pn#e15G5jXU?(bP<%+rN?m|5faDGU8nPT+;@QBKk90CH{VRrVa^+;X!%*p6Y-abasK0z zO~k7~6dgwlgk_cFoc@q5NeLp<(}`gh-Y{7!-AaYd@QNTOKQ1VZNb&Eld1^lK*$?56 z@E(Chd*RXY&m*&~KsAWo$;I@GLOPpDxGS4+mfA(7leN-_PToC2%nRt#y;w z_{eqJ`VVJajB=&{g$LW`RUk!&7XIParVrT7Yq_?%l*S*f=IX0Bv=2( zBEr-2uU)-3-CD*RiQ-}!&*r{zsE9|?`9I4Nw+xa0IhoN7LF2-fSu89Iv~XE%u?5?f z8F;qV8v3G5#z=iD9*R)^pj-Xhf}B`tG650Hr;!pGH~Bd`&JJ0XG_ijwEdl=^6yFw_ z;J}+niaEs74WFP{evI(_u#Wj`jtd!Eg_M+on1c{0kF6}A{fDvu5rjvB7N62H_J(MM z#Bx{pN+SzMY4GY&#$=+HQFaBFUlBz`1ftcqnzZBI6wsTP74Nxfwk;Z1QDRJAr)}FT zSr90YJA7NQE4o=Wh!5Eh>Mj=FV=#h91B5F!DB#%)p~;Hyr1x5VBZmL{)097H+@Zv` z5&q&u@Gr%j`AIwqXE;{<)Mb$z{TqRgOdy9}q0xnC6lM$`iGYn;%|XgbAcEB{kfdPR z4Tr>;uWN&R=`Rqqh;PwZJc9V{2FHX35p7lg4O+0?yi0XqGZc6sDs z2MS@;I*jMs2)R$-iH3tF>Gf1HrH5z5G!jFldj`Hpk}-B@?~hEd@@ZFXfAP_ALSMes zY%P@IS3rdFbY#<`71c3=Pp?BwygHI6`K|3fycKt-^0^6cH9z>yFZ0u2q{F=Z)dL3E zs_yq6@|-W;_kCO@A_^}$-^t(MZ?;oQV8T^zEIOzzvL_WF`!lc}#b0EyxE5Aq-;vD= z5t8F+9J;-J!I9K$_$^;+&UBI;>}kjlsQhruVo~$%bkJp5WZtH0v(vL+FycCA?fImz zk>L<>4@Iy`-^zQ-%fzh4LMd@rZzXUxfv_H84*RXVQu}-lqjO&0n0*qvq1E&J zd5R56t?5I|LYV!xX%264ZL>qZTC4sHXW@A#*<8YCF}cZ$ZFQNCffqSk2Hr#U=0fja zPi}%WpZ-j>ebo=0r|WQ<8t|HQa4&MzSe<0F-AJip(kZSw$(qeh5t8_K{d2o}fAc%N zFhtSE!f*!Bz|>CerbUSde$zL(5oJj7=9-v5U!baP)qgi5tLP2@))B`;Vb$^OwtwtW z5n0dfjbbS;1sUIY11`2;WFmZ**_70eqrg_|X3MCf>yEZVsN#3&!@E@OLQ`#xTY-AF z$o9C!eR^MZZ^zp&`VEKabjdtdyGNRWY;J3U)At_V5t8? zXzPMfI@;LU1`i$ltGWI|QH;3h!aAZN#kedc@BFdwtU7YWf?#2BFe4kwPLIgldvcolA`VCg@Z0 z)?ZKcWs9H?s(gtY{Hh3^{It5V7I)8CmYcEqq42S>7w4`Xe~7d5Mpj!qy^rD8tEE;O zJ_oGqTn;d&!J{ukUWc*LC4=|#?$S8C6#<$*#*2ThH1;AfDfVi7 z)D4`h7n)6Yz8DgJxz992@}WI5DHa79l6|w4YkGJwr=KX`>E$D_;cMb1q2Tv(zrC%M zP+^6=eb__5jvmUmn+&ZV`x!&zY<6_qLtvViYcoK9s1|36)aPq(zTl~2`N8v7h_%$+ zjuc;rUm_xMDvj@-jf9Q5^mn}HQwMIoHEQhfK@~@#1uFSlp+!Dcv0-_KByIG?OpMXZ z?8WZRSE0*yf@1Ig9jkv=f%TVxQh$PE{7u*z!@Z z{T7>FeWf;f%eLcRKl)P_g@}V|^XMPJ=u~mlKKmW6oZ{7u<)^!8Qvn&m)#$s#v!6YK z{mJFa)Cb%l9shkkr@$ivOOWZ_f3PPvwrg(;|Ux}2?kd@=X7 zRopq+!FRTT%gtAi)2QD;lOn1q4$~QDtif-dZmsHT6%phF# z3hH1rsfD}wg4cH+HGMI`Qhw*6-_0V+gJr{u>gg0(WopU&^xr$YgBAD-ds z?hh4reeC?)8bW!t@=hsF9;X}WCB^q|`Q zBz!ab>(t?bsr-wJTy?X{;NLz=!<_^NJbF&=R*f=WCj6{z<;snR_g_oeITLUh3_6f< z^I@S9u+aDTbM?0S+9$cH&T{TXIhMc$11-nkjlJ`g|8>A$V`$#Mhnq3Y9h@YhvmHT~ zh8yXgSv4`wy=rEP9fL2ZQiF&kh?PT{B6x-H*sq*F1XOW`!w>ye~L7e5J}+7 zA|qCS-Ro40Z}rP`IQ>4gV76Zl&7W6MFDh3JxVQ_sAdVxh1Km?sjmnIirQhkdZmUS= zjMw3{_t$|IcIEWthcCJ3i0Y&Y@0I=@t>$Oc)9akQb2sqq!a6p*+j`39Yq&+U{uIeW zOefOXrs82y!)vrg(SyoiXle5^Gg968aa%%Og!L{&+SKnDG2QIU%STJ zzVR*aZC3grc+e%Ih2NW8=8h4k{34pq=bebl{b?Yw;k$8IWK18F&#fj=RDiD_M8dh= zxp;i8Z9n_Uc35s;F#HB-qXFz6d!~8FT(r<`v$`!dR<43IEa!){|16tjTZQ=9U?>YB zIdtygiB9KS=I(6a5qCVjS;GwPVu>QdY2=r6R1y{Zq)E-&d_Gn+OJ3OpDhY>45H`7K7GPwA^+?tnn-Wy zW}*6#3- zg3LD}Kh&K;O@!Zg_br`OHBo?R!utMv5sp>#x7fU3ugLRpQ;) z)9C8LEO0n+T`0lE$tlAAV2ZOm?xof4s6fjkr$ruCsB5&W8e_&mg*07or2M)@QsLyI zq!mSw7)JMI;+!+p=ODJeHJBJ?F|~a>I{vSv^#GKR!t+Q<;!~10jrLMROU4Ri$Sm@8 zdY;l}R6$E!Mznc-(gjM$Y@HmxFuqHE9UznnrX^#KU)l_{N^u0YE&D;3n~I3FxJ9sY zg4o3o4ttsCeO@BZ{!?>mDLpuWb*!QRM!RubX9@DKpR1W!vhNb+kz?udjEkr(mhfFD z-$pXW?mHJ^aHtk_zM54C51-BxU&Hw#D~-T8v{UK;%LyP^d+#Xe`S!?@M3sQO10I%? zEA@3toU`a_)3{o9nb_y22*WEOmqsJXxIrtwY~g!VyEDGMz(%!FWyO< z$$c=Wi6r4d=jVIsh})M^H7({CR8DOPRhfQP9Kbi zgLSwQg0B7xXM8lH%VQb`MLvOuQO^F?6J!O)-o{VQo`>b?6y-uJ-;tAck@v7A?D6r# zQ3kLHSzs38;oJ;{s+H<;)#_^aMam3J_%LB6Jh|%A0&~j%v|cJMXSvFTaY|_6={89_ z`&WVlBK%GQ$C1r|?6nGl1;)MKwvKP8Bz4RkOo|Nqg=u5up7_VIB8pVviE+U-Sg|rS z7QRJK-t5PU6;%ujFX)cdV>8ublb|j5)`OUYPADCz2cLw>HsFtDODC!kEun!%0AI2B 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 literal 0 HcmV?d00001 diff --git a/doc/tutorial/figs/tutorial1.3_gs_opt_zoom.png b/doc/tutorial/figs/tutorial1.3_gs_opt_zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..4f831df2c99f6b929ce00b458b6a2c7f7c9753cc GIT binary patch literal 31161 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 z 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 に登録されているチュートリアルを元にしています。 なお、 ``samples/tutorial_1.2`` にある ``run.sh`` を実行すると、これから説明する一連のコマンドが全て実行されます。 @@ -35,7 +35,7 @@ このファイルはtoml形式で記述されています。 ``[lattice]`` には格子の情報が、 ``[mVMC]`` には波動関数に課す副格子構造を記載します。 ``[mVMC_aft]`` に記載されているパラメータは物理量測定計算の終了後の後処理スクリプトで使われます。 -``[lattice]`` セクションの ``Lx`` は :math:`x` 方向の長さ、 ``Ly`` は :math:`y` 方向の長さ、 ``Lz`` は :math:`z` 方向の長さ、 ``orb_num`` はユニットセル内の軌道数(内部自由度)を指定します。 ``model_type`` は模型の種類を指定します。 ``Spin, Hubbard, Kondo`` の3つから選ぶ必要がありますが、ここではHubbard模型を指定しています。以上をまとめると、今回の計算では、ユニットセル内の自由度が1、長さが6格子点のHubbard鎖の系が指定されていることになります。 なお、相互作用などのその他のパラメータは、 ``MakeInput.py`` 内で直接指定されています。 +``[lattice]`` セクションの ``Lx`` は :math:`x` 方向の長さ、 ``Ly`` は :math:`y` 方向の長さ、 ``Lz`` は :math:`z` 方向の長さ、 ``orb_num`` はユニットセル内の軌道数(内部自由度)を指定します。 ``model_type`` は模型の種類を指定します。 ``Spin, Hubbard, Kondo`` の3つから選ぶ必要がありますが、ここではHubbard模型を指定しています。以上をまとめると、今回の計算では、ユニットセル内の自由度が1、長さが6格子点のHubbard鎖の系が指定されていることになります。 なお、相互作用などのその他のパラメータは、 ``MakeInput.py`` 内で直接指定されています。 このチュートリアルでは、 :math:`t=1` 、 :math:`U=4` としています。 ``[mVMC]`` セクションの ``sub_x`` は :math:`x` 方向の副格子長、 ``sub_y`` は :math:`y` 方向の副格子長、 ``sub_z`` は :math:`z` 方向の副格子長を指定します。副格子構造を波動関数に課すことで変分パラメータ数を減らすことができるため、計算精度にあまり影響のない範囲で適切な副格子構造を課すことができれば効率の良い計算を実行できます。今回の計算では、反強磁性的な相関は取り入れたいので、2格子分の副格子を課しています。 @@ -43,7 +43,7 @@ ``ModPara`` で指定されるパラメータファイルを指定します。 ``directory`` は後処理スクリプトが読み込むディレクトリを指定しています。 -波動関数の最適化(乱数初期状態) +波動関数の最適化 """"""""""""""""""""""""""""""" 次に、基底状態の最適化を行います。次のコマンドを実行してください。:: @@ -117,7 +117,4 @@ gnuplotを使って、 ``SqNq.dat`` に出力されているスピン構造因 演習 ----------------------- -厳密対角化ソフトウェアパッケージ :math:`\mathcal{H}\Phi` (https://www.pasums.issp.u-tokyo.ac.jp/hphi/) を用いて、基底状態のエネルギーと相関関数を計算し、mVMCの計算結果と比較してみてください。 - -波動関数の最適化(UHF解初期状態) -""""""""""""""""""""""""""""""" \ No newline at end of file +厳密対角化ソフトウェアパッケージ :math:`\mathcal{H}\Phi` (https://www.pasums.issp.u-tokyo.ac.jp/hphi/) を用いて、基底状態のエネルギーと相関関数を計算し、mVMCの計算結果と比較してみてください。また、 ``MakeInput.py`` を修正して、相互作用パラメータ :math:`U` の値を変えた場合、スピン構造因子がどのように変化するのかを調べてみてください。 diff --git a/doc/tutorial/ja/source/basic/hubbard_square.rst b/doc/tutorial/ja/source/basic/hubbard_square.rst new file mode 100644 index 00000000..0c0834e8 --- /dev/null +++ b/doc/tutorial/ja/source/basic/hubbard_square.rst @@ -0,0 +1,60 @@ +二次元Hubbard模型 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +このチュートリアルでは、次の式で定義されるハーフフィリングにおける正方格子上の拡張Hubbard模型の基底状態を乱数ペアリングと平均場近似を元に構築した状態、それぞれを初期状態にして計算します。 + +.. math:: + + H = -t \sum_{\langle i,j\rangle, \sigma}c_{i\sigma}^{\dagger}c_{j\sigma} + U \sum_{i} n_{i\uparrow}n_{i\downarrow} + V \sum_{i`_ に登録されているチュートリアルを元にしています。 + + +乱数初期状態での最適化 +""""""""""""""""""""""""""""""""""""""""" +まず、乱数ペアリングの状態を初期状態として最適化を行います。mVMCの場合、初期状態を指定しないと自動的に乱数ペアリング状態が初期状態として用いられます。次のコマンドを実行してください。:: + + sh run.sh + +このコマンドを実行すると、tutorial_1.2 一次元Hubbard模型で説明した内容が全て実行されます。 + +演習 +----------------------- +- 得られた ``SqNq.dat`` を使って、スピン構造因子 :math:`S(\boldsymbol{q})` をプロットし、 :math:`\boldsymbol{q}=(\pi, \pi)` にピークを持つことを確認してください。 +- ``MakeInput.py`` を修正して、相互作用パラメータ :math:`U` と :math:`V` の値を変えた場合、スピン構造因子がどのように変化するのかを調べてみてください。 + + +UHF初期状態での最適化 +""""""""""""""""""""""""""""""" +次に、UHF (Unrestricted Hartree-Fock) 近似で得られた :math:`\prod_n (\sum_{i\sigma} \Phi_{in\sigma} c^{\dagger}_{i\sigma}) |0\rangle` からペアリング関数 :math:`(\sum_{i,j} f_{ij} c^{\dagger}_{i\uparrow} c^{\dagger}_{j\downarrow})^{N} |0\rangle` を構築し、それをmVMCの初期状態として最適化を行ってみます。詳細は論文等で紹介されているので割愛しますが、次の関係式から構築することができます。 + + .. math:: + + f_{ij} = \sum_{n} \Phi_{in\uparrow} \Phi_{jn\downarrow} + +ここで、 :math:`\Phi_{in\sigma}` はUHF近似で得られた一電子軌道を、 :math:`n` はUHF近似の固有状態のインデックスを表しています。mVMCパッケージに含まれているUHFコードを使用することで、上述の式に基づいて ``InOrbital`` の形式に合わせた :math:`f_{ij}` を出力してくれます。 + +``sh run.sh`` を実行した後で、次のコマンドを実行してください。:: + + sh run_uhf.sh + +``run_uhf.sh`` は ``run.sh`` とほとんど同じです。主な違いは15、16行目の:: + + ${UHF} namelist.def + echo " InOrbital zqp_APOrbital_opt.dat " >> namelist.def + +です。一行目ではUHFコードを実行し、二行目ではUHFコードで構築された :math:`f_{ij}` が出力されたファイル ``zqp_APOrbital_opt.dat`` をmVMCの入力ファイル ``namelist.def`` に追記しています。 + +正常に実行された場合、 ``gnuplot plot`` を実行すると、次のようなグラフが得られます。 + +.. image:: ../../../figs/tutorial1.3_gs_opt.png + :scale: 125 % + :align: center + +.. image:: ../../../figs/tutorial1.3_gs_opt_zoom.png + :scale: 125 % + :align: center + +下図は、上図を拡大したものになっています。 +紫点が乱数ペアリングを初期状態にした結果、緑点がUHF近似から構築した状態を初期状態にした結果です。水色線と黒線は、それぞれ、UHFで得られたエネルギーと厳密対角化で得られるエネルギーです。UHF近似による初期状態を使ったほうが、初期ステップでのエネルギー値が低く、少ない最適化ステップ数で収束していることがわかります。 \ No newline at end of file diff --git a/doc/tutorial/ja/source/basic/index.rst b/doc/tutorial/ja/source/basic/index.rst index f11a93fe..a0c35442 100644 --- a/doc/tutorial/ja/source/basic/index.rst +++ b/doc/tutorial/ja/source/basic/index.rst @@ -6,3 +6,4 @@ ./hubbard_dimer.rst ./hubbard_chain.rst + ./hubbard_square.rst diff --git a/samples/tutorial_1.3/plot b/samples/tutorial_1.3/plot index 3a40b43a..25b97259 100644 --- a/samples/tutorial_1.3/plot +++ b/samples/tutorial_1.3/plot @@ -4,5 +4,5 @@ p[:][:] \ "random/opt/zvo_out_001.dat" u 1 t "Random initial", \ "uhf/opt/zvo_out_001.dat" u 1 t "UHF initial", \ -12.566554520605 w l t "UHF", \ --0.85136*16 w l lc -1 t "exact diagonalization" +-13.621855 w l lc -1 t "exact diagonalization" pause -1 diff --git a/samples/tutorial_1.3/stan_hphi.in b/samples/tutorial_1.3/stan_hphi.in index bb4b7c15..2e942eab 100644 --- a/samples/tutorial_1.3/stan_hphi.in +++ b/samples/tutorial_1.3/stan_hphi.in @@ -1,9 +1,10 @@ -L = 6 +L = 4 +W = 4 model = "Hubbard" -lattice = "chain" +lattice = "square" method = "CG" U = 4.0 t = 1.0 2Sz = 0 -nelec = 6 -exct = 8 +nelec = 16 +exct = 2 From c2daa2a2e5f0f7da0b82eefa92a6ec86fb19947c Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Thu, 29 Feb 2024 14:21:31 +0900 Subject: [PATCH 40/73] add spin_gap --- doc/tutorial/ja/source/advanced/index.rst | 8 ++ doc/tutorial/ja/source/advanced/spin_gap.rst | 101 +++++++++++++++++++ samples/tutorial_2.1/Clean.sh | 8 ++ samples/tutorial_2.1/plot_kondo | 8 ++ samples/tutorial_2.1/plot_spin | 8 ++ samples/tutorial_2.1/run.sh | 21 ++++ samples/tutorial_2.1/stan_kondo_S0.in | 17 ++++ samples/tutorial_2.1/stan_kondo_S1.in | 17 ++++ samples/tutorial_2.1/stan_kondo_hphi.in | 9 ++ samples/tutorial_2.1/stan_spin_S0.in | 15 +++ samples/tutorial_2.1/stan_spin_S1.in | 15 +++ samples/tutorial_2.1/stan_spin_hphi.in | 6 ++ 12 files changed, 233 insertions(+) create mode 100644 doc/tutorial/ja/source/advanced/index.rst create mode 100644 doc/tutorial/ja/source/advanced/spin_gap.rst create mode 100644 samples/tutorial_2.1/Clean.sh create mode 100644 samples/tutorial_2.1/plot_kondo create mode 100644 samples/tutorial_2.1/plot_spin create mode 100644 samples/tutorial_2.1/run.sh create mode 100644 samples/tutorial_2.1/stan_kondo_S0.in create mode 100644 samples/tutorial_2.1/stan_kondo_S1.in create mode 100644 samples/tutorial_2.1/stan_kondo_hphi.in create mode 100644 samples/tutorial_2.1/stan_spin_S0.in create mode 100644 samples/tutorial_2.1/stan_spin_S1.in create mode 100644 samples/tutorial_2.1/stan_spin_hphi.in diff --git a/doc/tutorial/ja/source/advanced/index.rst b/doc/tutorial/ja/source/advanced/index.rst new file mode 100644 index 00000000..b4471b8e --- /dev/null +++ b/doc/tutorial/ja/source/advanced/index.rst @@ -0,0 +1,8 @@ +応用編 +=============================================== + +.. toctree:: + :maxdepth: 3 + + ./spin_gap.rst + ./sc_correlation.rst diff --git a/doc/tutorial/ja/source/advanced/spin_gap.rst b/doc/tutorial/ja/source/advanced/spin_gap.rst new file mode 100644 index 00000000..2d062ac3 --- /dev/null +++ b/doc/tutorial/ja/source/advanced/spin_gap.rst @@ -0,0 +1,101 @@ +量子数射影を用いたスピンギャップ計算 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +量子数射影を用いることで、最適化する波動関数に対して特定の量子数を持たせることができます。このチュートリアルでは、一次元Heisenberg模型と一次元近藤格子模型を対象に、量子数射影をを用いてスピンギャップ :math:`\Delta_{\rm S}` を計算する方法を説明します。 + +スピンギャップ :math:`\Delta_{\rm S}=0` は、 :math:`S_{\rm tot}=0` 空間での最低エネルギーと :math:`S_{\rm tot}=1` 空間での最低エネルギーの差として定義されます。すなわち + +.. math:: + + \Delta_{\rm S} = E_{S_{\rm tot}=1} - E_{S_{\rm tot}=0}. + +を計算する必要があります。ここで、 :math:`E_{S_{\rm tot}=1}` と :math:`E_{S_{\rm tot}=0}` はそれぞれ、 :math:`S_{\rm tot}=1` での全エネルギー と :math:`S_{\rm tot}=0` での全エネルギーです。これらの全エネルギーは、mVMCで実装されているスピン量子数射影を用いれば計算することができます。 + + +一次元Heisenberg模型 +""""""""""""""""""""""""""""""""""""""""" +まず、システムサイズ :math:`L=8` での一次元Heisenberg模型におけるスピンギャプを計算します。一次元Heisenberg模型は次式で定義されます。 + +.. math:: + + H = J \sum_{\langle i,j\rangle}\boldsymbol{S}_{i} \cdot \boldsymbol{S}_{j},\ \boldsymbol{S}_{i} = \frac{1}{2} \sum_{\alpha,\beta} c_{i\alpha}^{\dagger} \boldsymbol{\sigma}_{\alpha\beta} c_{i\beta}. + +ここで、 :math:`\boldsymbol{\sigma}` はパウリ行列です。 :math:`S=1/2` の場合には、この模型の基底状態は :math:`\Delta_{\rm S}=0` であることが知られています。 + +次のコマンドを実行してください。:: + + sh run.sh spin + +コマンドを実行すると、 ``spin`` ディレクトリが作成され、その中に :math:`S_{\rm tot}=0` での最適化結果 ``output_s0`` と :math:`S_{\rm tot}=1` での最適化結果 ``output_s1`` が保存されています。 + + +最適化の結果を可視化するために、次のコマンドを実行してください。:: + + gnuplot plot_spin + +すると、次のような図が得られます。 + +.. image:: ../../../figs/tutorial2.1_spin.png + :scale: 125 % + :align: center + +紫点と緑点が、それぞれ :math:`S_{\rm tot}=0` 空間での最適化結果と :math:`S_{\rm tot}=1` 空間でのmVMCによる最適化結果です。水色線とオレンジ線は、厳密対角化によって得られたそれぞれの空間における最低エネルギーを示しています。 +次の図のように、最後の最適化付近を拡大してみると、mVMCは厳密対角化によって得られた結果とよく一致していることがわかります。このように、mVMCでは、量子数射影を用いることで、それぞれの空間における最低エネルギーを求めることができます。 + +.. image:: ../../../figs/tutorial2.1_spin_zoom.png + :scale: 125 % + :align: center + +この結果から、スピンギャップ :math:`\Delta_{\rm S}` を計算することができます。本来は最適化した波動関数を用いて物理量測定を行い、エネルギー期待値を求めるべきですが、ここでは最適化結果のエネルギーを直接用いて値を見積もります。 +最適化が正常終了すると、 ``output`` ディレクトリに ``zqp_opt.dat`` というファイルが出力されます。このファイルには、最後の最適化ステップから ``NSROptItrSmp`` 分の区間における最適化された波動関数のパラメータの平均値だけでなく、同区間におけるエネルギー値などといった物理量の平均値も出力されています。エネルギー(の実部)は、 ``zqp_opt.dat`` ファイルの初めに記載されています。 + +``spin/output_s0`` と ``spin/output_s1`` ディレクトリにある ``zqp_opt.dat`` ファイルからエネルギー値を習得した結果は ``spin/spin_gap.dat`` に出力されています。 ``spin_gap.dat`` の中身は次のようになっています。 :: + + #E0_from_zqp_opt.dat E1_from_zqp_opt.dat Delta_s=E1-E0 + -3.65109 -3.12842 .52267 + +ここで、最後の列がスピンギャップ :math:`\Delta_{\rm S}` の値となっています。 + + +演習 +----------------------- +- 物理量測定を行い、エネルギー期待値と誤差を求め、スピンギャップ値を計算してください。 +- システムサイズ :math:`L` を大きくしていき、スピンギャップ :math:`\Delta_{\rm S}` のシステムサイズ依存性を確認してください。 + + + +一次元近藤格子模型 +""""""""""""""""""""""""""""""""""""""""" +同じ計算をシステムサイズ :math:`L=4` でのハーフフィリングにおける一次元近藤格子模型に対して行います。近藤格子模型は、伝導層と局在スピン層が交換相互作用で結合している模型です。そのため、ユニットセルあたり2自由度あることになります。一次元近藤格子模型は次式で定義されます。 + +.. math:: + + H = -t \sum_{\langle i, j \rangle , \sigma} c^{\dagger}_{i\sigma {\rm c}} c_{j\sigma {\rm c}} + J \sum_{i}\boldsymbol{S}_{i {\rm c}} \cdot \boldsymbol{S}_{i {\rm s}}. + +ここで、 :math:`c^{\dagger}_{i\sigma {\rm c}}/c_{i\sigma {\rm c}}` は伝導層の生成/消滅演算子、 :math:`\boldsymbol{S}_{i {\rm c}}` は伝導層のスピン演算子、 :math:`\boldsymbol{S}_{i {\rm s}}` は局在スピン層のスピン演算子です。 :math:`S=1/2` の場合には、この模型の基底状態は :math:`\Delta_{\rm S} \neq 0` であることが知られています。(詳細は参考文献2を参照してください。) + +次のコマンドを実行した後、Heisenberg模型でのチュートリアル同様、最適化過程をプロットしてみてください。:: + + sh run.sh kondo + gnuplot plot_kondo + +すると、次のような図が得られます。 + +.. image:: ../../../figs/tutorial2.1_kondo.png + :scale: 125 % + :align: center + +.. image:: ../../../figs/tutorial2.1_kondo_zoom.png + :scale: 125 % + :align: center + +凡例はHeisenberg模型の場合と同じです。一次元近藤格子模型の場合においても、mVMCの最適化結果は厳密対角化によって得られた結果に収束していっていることがわかります。なお、最適化から得られたエネルギーをもとに計算したスピンギャップ :math:`\Delta_{\rm S}` の値は、 ``kondo/spin_gap.dat`` に出力されています。 + +演習 +----------------------- +- 物理量測定を行い、エネルギー期待値と誤差を求め、スピンギャップ値を計算してください。 +- システムサイズ :math:`L` を大きくしていき、スピンギャップ :math:`\Delta_{\rm S}` のシステムサイズ依存性を確認してください。 + +参考文献 +"""""""""""""""""""""" +#. `ISSPデータリポジトリ `_ +#. \H. Tsunetsugu, M. Sigrist, and K. Ueda, `Rev. Mod. Phys. 69, 809 (1997) `_ \ No newline at end of file diff --git a/samples/tutorial_2.1/Clean.sh b/samples/tutorial_2.1/Clean.sh new file mode 100644 index 00000000..c8b87b2f --- /dev/null +++ b/samples/tutorial_2.1/Clean.sh @@ -0,0 +1,8 @@ +rm *.def +rm *.dat +rm -r spin kondo +#rm -r aft* +rm -r __pycache__ +rm green* +rm *.gp +#rm stan_aft.in stan_opt.in diff --git a/samples/tutorial_2.1/plot_kondo b/samples/tutorial_2.1/plot_kondo new file mode 100644 index 00000000..1a766ef6 --- /dev/null +++ b/samples/tutorial_2.1/plot_kondo @@ -0,0 +1,8 @@ +set xlabel "optimization step" +set ylabel "total energy" +p \ +"kondo/output_s0/zvo_out_001.dat" u 1 t "mVMC, S=0", \ +"kondo/output_s1/zvo_out_001.dat" u 1 t "mVMC, S=1", \ +-19.0251276267899421 w l lw 2 t "exact diagonalization, S=0", \ +-16.1561048387100463 w l lw 2 t "exact diagonalization, S=1" +pause -1 diff --git a/samples/tutorial_2.1/plot_spin b/samples/tutorial_2.1/plot_spin new file mode 100644 index 00000000..bec2bdfe --- /dev/null +++ b/samples/tutorial_2.1/plot_spin @@ -0,0 +1,8 @@ +set xlabel "optimization step" +set ylabel "total energy" +p \ +"spin/output_s0/zvo_out_001.dat" u 1 t "mVMC, S=0", \ +"spin/output_s1/zvo_out_001.dat" u 1 t "mVMC, S=1", \ +-3.651093 w l lw 2 t "exact diagonalization, S=0", \ +-3.128419 w l lw 2 t "exact diagonalization, S=1" +pause -1 diff --git a/samples/tutorial_2.1/run.sh b/samples/tutorial_2.1/run.sh new file mode 100644 index 00000000..74c4cfb4 --- /dev/null +++ b/samples/tutorial_2.1/run.sh @@ -0,0 +1,21 @@ +#[s] definitions of executions +MPI=" " +VMC="path2vmc.out" +#[e] definitions of executions + +target=$1 + +mkdir ${target} +${MPI} ${VMC} -s stan_${target}_S0.in +mv output $target/output_s0 + +${MPI} ${VMC} -s stan_${target}_S1.in +mv output ${target}/output_s1 + +E0=$(awk ' {print +$1}' ${target}/output_s0/zqp_opt.dat) +E1=$(awk ' {print +$1}' ${target}/output_s1/zqp_opt.dat) +Delta_s=`echo "${E1} - ${E0}" | bc -l` + +echo "#E0_from_zqp_opt.dat E1_from_zqp_opt.dat Delta_s=E1-E0" > spin_gap.dat +echo $E0 $E1 $Delta_s >> spin_gap.dat +mv spin_gap.dat ${target} diff --git a/samples/tutorial_2.1/stan_kondo_S0.in b/samples/tutorial_2.1/stan_kondo_S0.in new file mode 100644 index 00000000..809c114e --- /dev/null +++ b/samples/tutorial_2.1/stan_kondo_S0.in @@ -0,0 +1,17 @@ +L = 6 +Lsub = 2 +model = "Kondo" +lattice = "chain" +t = 1 +J = 4 +ncond = 6 +NSPGaussLeg = 8 +2Sz = 0 +NSPStot = 0 +NSROptItrStep = 600 +NSROptItrSmp = 100 +NVMCSample = 1000 +DSROptRedCut = 1e-8 +DSROptStaDel = 1e-2 +DSROptStepDt = 1e-2 +//NVMCCalMode = 1 diff --git a/samples/tutorial_2.1/stan_kondo_S1.in b/samples/tutorial_2.1/stan_kondo_S1.in new file mode 100644 index 00000000..123733b7 --- /dev/null +++ b/samples/tutorial_2.1/stan_kondo_S1.in @@ -0,0 +1,17 @@ +L = 6 +Lsub = 2 +model = "Kondo" +lattice = "chain" +t = 1 +J = 4 +ncond = 6 +NSPGaussLeg = 8 +2Sz = 0 +NSPStot = 1 +NSROptItrStep = 600 +NSROptItrSmp = 100 +NVMCSample = 1000 +DSROptRedCut = 1e-8 +DSROptStaDel = 1e-2 +DSROptStepDt = 1e-2 +//NVMCCalMode = 1 diff --git a/samples/tutorial_2.1/stan_kondo_hphi.in b/samples/tutorial_2.1/stan_kondo_hphi.in new file mode 100644 index 00000000..b6b33889 --- /dev/null +++ b/samples/tutorial_2.1/stan_kondo_hphi.in @@ -0,0 +1,9 @@ +L = 6 +model = "Kondo" +method = "CG" +lattice = "chain" +t = 1 +J = 4 +ncond = 6 +2Sz = 0 +exct = 2 diff --git a/samples/tutorial_2.1/stan_spin_S0.in b/samples/tutorial_2.1/stan_spin_S0.in new file mode 100644 index 00000000..aa2022ac --- /dev/null +++ b/samples/tutorial_2.1/stan_spin_S0.in @@ -0,0 +1,15 @@ +L = 8 +Lsub = 2 +model = "Spin" +lattice = "chain" +J = 1 +NSPGaussLeg = 8 +2Sz = 0 +NSPStot = 0 +NSROptItrStep = 600 +NSROptItrSmp = 100 +NVMCSample = 1000 +DSROptRedCut = 1e-8 +DSROptStaDel = 1e-2 +DSROptStepDt = 1e-2 +//NVMCCalMode = 1 diff --git a/samples/tutorial_2.1/stan_spin_S1.in b/samples/tutorial_2.1/stan_spin_S1.in new file mode 100644 index 00000000..9ba4a30f --- /dev/null +++ b/samples/tutorial_2.1/stan_spin_S1.in @@ -0,0 +1,15 @@ +L = 8 +Lsub = 2 +model = "Spin" +lattice = "chain" +J = 1 +NSPGaussLeg = 8 +2Sz = 0 +NSPStot = 1 +NSROptItrStep = 600 +NSROptItrSmp = 100 +NVMCSample = 1000 +DSROptRedCut = 1e-8 +DSROptStaDel = 1e-2 +DSROptStepDt = 1e-2 +//NVMCCalMode = 1 diff --git a/samples/tutorial_2.1/stan_spin_hphi.in b/samples/tutorial_2.1/stan_spin_hphi.in new file mode 100644 index 00000000..13cfc53d --- /dev/null +++ b/samples/tutorial_2.1/stan_spin_hphi.in @@ -0,0 +1,6 @@ +L = 8 +model = "Spin" +method = "FullDiag" +lattice = "chain" +J = 1 +2Sz = 0 From d833cdfb1d332dbdde1f92944a20b7055d0e8a7a Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Thu, 29 Feb 2024 17:34:49 +0900 Subject: [PATCH 41/73] add s-sc --- doc/tutorial/figs/tutorial2.1_kondo.png | Bin 0 -> 16611 bytes doc/tutorial/figs/tutorial2.1_kondo_zoom.png | Bin 0 -> 13636 bytes doc/tutorial/figs/tutorial2.1_spin.png | Bin 0 -> 19530 bytes doc/tutorial/figs/tutorial2.1_spin_zoom.png | Bin 0 -> 13205 bytes doc/tutorial/figs/tutorial2.2_sc_cor.png | Bin 0 -> 12409 bytes .../ja/source/advanced/sc_correlation.rst | 82 + doc/tutorial/ja/source/index.rst | 3 +- samples/tutorial_2.2/CalcSC.py | 174 ++ samples/tutorial_2.2/Clean.sh | 7 + samples/tutorial_2.2/MakeInput.py | 175 ++ samples/tutorial_2.2/SCGreen.py | 150 ++ samples/tutorial_2.2/SC_1swave | 517 ++++++ samples/tutorial_2.2/VMClocal.py | 116 ++ samples/tutorial_2.2/green1 | 517 ++++++ samples/tutorial_2.2/green2 | 1541 +++++++++++++++++ samples/tutorial_2.2/hphi_Ene | 10 + samples/tutorial_2.2/hphi_Result_1swave | 6 + samples/tutorial_2.2/input.toml | 13 + samples/tutorial_2.2/job_ohtaka.sh | 41 + samples/tutorial_2.2/plot | 7 + samples/tutorial_2.2/qlms_lattice.py | 44 + samples/tutorial_2.2/run.sh | 27 + samples/tutorial_2.2/stan_aft.in | 17 + samples/tutorial_2.2/stan_opt.in | 14 + 24 files changed, 3460 insertions(+), 1 deletion(-) create mode 100644 doc/tutorial/figs/tutorial2.1_kondo.png create mode 100644 doc/tutorial/figs/tutorial2.1_kondo_zoom.png create mode 100644 doc/tutorial/figs/tutorial2.1_spin.png create mode 100644 doc/tutorial/figs/tutorial2.1_spin_zoom.png create mode 100644 doc/tutorial/figs/tutorial2.2_sc_cor.png create mode 100644 doc/tutorial/ja/source/advanced/sc_correlation.rst create mode 100644 samples/tutorial_2.2/CalcSC.py create mode 100644 samples/tutorial_2.2/Clean.sh create mode 100644 samples/tutorial_2.2/MakeInput.py create mode 100644 samples/tutorial_2.2/SCGreen.py create mode 100644 samples/tutorial_2.2/SC_1swave create mode 100644 samples/tutorial_2.2/VMClocal.py create mode 100644 samples/tutorial_2.2/green1 create mode 100644 samples/tutorial_2.2/green2 create mode 100644 samples/tutorial_2.2/hphi_Ene create mode 100644 samples/tutorial_2.2/hphi_Result_1swave create mode 100644 samples/tutorial_2.2/input.toml create mode 100644 samples/tutorial_2.2/job_ohtaka.sh create mode 100644 samples/tutorial_2.2/plot create mode 100644 samples/tutorial_2.2/qlms_lattice.py create mode 100644 samples/tutorial_2.2/run.sh create mode 100644 samples/tutorial_2.2/stan_aft.in create mode 100644 samples/tutorial_2.2/stan_opt.in diff --git a/doc/tutorial/figs/tutorial2.1_kondo.png b/doc/tutorial/figs/tutorial2.1_kondo.png new file mode 100644 index 0000000000000000000000000000000000000000..f86caed4349eab5e670a93e97cd7386afe0aebf7 GIT binary patch literal 16611 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 P)FX0IijpM~27dn+zKoZ* literal 0 HcmV?d00001 diff --git a/doc/tutorial/figs/tutorial2.1_kondo_zoom.png b/doc/tutorial/figs/tutorial2.1_kondo_zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..26cd0e42ead45fd20e7cf883901de7f44f72911a GIT binary patch literal 13636 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 bhIy55j$jxi{gH&I00000NkvXXu0mjfID~c^ literal 0 HcmV?d00001 diff --git a/doc/tutorial/figs/tutorial2.1_spin_zoom.png b/doc/tutorial/figs/tutorial2.1_spin_zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..2be804f77386e07622b955eb29532c946396bdc6 GIT binary patch literal 13205 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 literal 0 HcmV?d00001 diff --git a/doc/tutorial/ja/source/advanced/sc_correlation.rst b/doc/tutorial/ja/source/advanced/sc_correlation.rst new file mode 100644 index 00000000..ae8584cb --- /dev/null +++ b/doc/tutorial/ja/source/advanced/sc_correlation.rst @@ -0,0 +1,82 @@ +引力Hubbard模型における超伝導相関関数計算 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +mVMCは、任意の一体相関関数 :math:`c^{\dagger}_{i\sigma_i}c_{j\sigma_j}` および二体相関関数 :math:`c^{\dagger}_{i\sigma_i}c_{j\sigma_j} c^{\dagger}_{k\sigma_k}c_{l\sigma_l}` を測定できます。これらを組み合わせることで、これまでのチュートリアルで紹介してきたスピン構造因子などの物理量を求めることができます。 +このチュートリアルでは、ホールドープされた正方格子上の引力Hubbard模型における超伝導相関関数を計算する方法を説明します。 + +Hubbard模型は次のように定義されます。 + +.. math:: + + H = -t \sum_{\langle i,j\rangle, \sigma}c_{i\sigma}^{\dagger}c_{j\sigma} + U \sum_{i} n_{i\uparrow}n_{i\downarrow}. + +これまでのチュートリアルでは、相互作用項 :math:`U` を斥力項として取り扱ってきましたが、今回は :math:`U=-4` として引力項として取り扱います。各相互作用項を変更したい場合は、 ``stan_opt.in`` 等を直接修正してください。 + +なお、このチュートリアルは、 `ISSPデータリポジトリ `_ に登録されているチュートリアルがもとになっています。 + +これまでのチュートリアルと同様に、次のコマンドを実行すると本チュートリアルの内容が全て実行されます。:: + + sh run.sh + +実行スクリプトの中身は以下の通りです。 + +波動関数の最適化 +""""""""""""""""""""""""""""""""""""""""" +まず、乱数ペアリングの状態を初期状態として最適化を行います。 +今回のチュートリアルでは、 ``MakeInput.py`` を用いず、 ``tutorial_2.2`` ディレクトリにある ``stan_opt.in`` を使用します。スクリプトでは、次のコマンドを実行しています。:: + + ${VMCDRY} ./stan_opt.in + ${MPI} ${VMC} namelist.def + cp ./output/zqp_opt.dat . + mv output opt + +ここで ``${VMCDRY}`` は ``vmcdry.out`` 、 ``${VMC}`` は ``vmc.out`` へのパスを指定しています。 また、 ``${MPI}`` は MPI実行コマンドを指します。 +最適化が終わりましたら、 ``opt/zvo_out_001.dat`` をプロットしてみて、波動関数の最適化が収束していることを確認してください。 + +相関関数の測定 +""""""""""""""""""""""""""""""""""""""""" +続いて、最適化した波動関数を用いて相関関数を測定します。mVMCのスタンダードモードで生成される相関関数は、並進対照な波動関数に対して用いられるスピン構造因子と電荷構造因子が計算できるように設定されております。そのため、1sの超伝導相関関数を計算するためには、自分で相関関数を定義する必要があります。このチュートリアルでは、1sの超伝導相関関数を計算するために、 ``SCGreen.py`` というスクリプトを用意しています。このスクリプトを実行すると、 ``OneBodyG`` と ``TwoBodyG`` に対応する相関関数の定義ファイル ``green1`` と ``SC_1swave`` が生成されます。これらの定義ファイルを用いてmVMCの物理量測定を行います。測定が終わったら、出力ディレクトリを ``aft`` という名前に変更します。これらの一連の操作は、ジョブスクリプト ``run.sh`` 内の次のコマンドに対応しています。:: + + python3 SCGreen.py input.toml + ${VMCDRY} ./stan_aft.in + cp green1 greenone.def + cp SC_1swave greentwo.def + ${MPI} ${VMC} namelist.def ./zqp_opt.dat + mv output aft + + +超伝導相関関数の計算 +""""""""""""""""""""""""""""""""""""""""" +最後に、測定した相関関数を用いて1s超伝導相関関数を計算します。1s超伝導相関関数は次のように定義されます。 + + .. math:: + :label: sc_cor + + P(\boldsymbol{r}) = \frac{1}{N_s} \sum_{\boldsymbol{r}'} \langle \Delta^{\dagger} (\boldsymbol{r}') \Delta (\boldsymbol{r}'+\boldsymbol{r}) + \Delta (\boldsymbol{r}') \Delta^{\dagger} (\boldsymbol{r}'+\boldsymbol{r}) \rangle, + + .. math:: + + \Delta (\boldsymbol{r}) = \frac{1}{\sqrt{2}} \left( c_{\boldsymbol{r}\uparrow}c_{\boldsymbol{r}\downarrow} - c_{\boldsymbol{r}\downarrow} c_{\boldsymbol{r}\uparrow} \right), + + .. math:: + + \Delta^{\dagger} (\boldsymbol{r}) = \frac{1}{\sqrt{2}} \left( c^{\dagger}_{\boldsymbol{r}\downarrow}c^{\dagger}_{\boldsymbol{r}\uparrow} - c^{\dagger}_{\boldsymbol{r}\uparrow} c^{\dagger}_{\boldsymbol{r}\downarrow} \right). + +式 :eq:`sc_cor` を計算するために、このチュートリアルでは ``CalcSC.py`` というスクリプトを用意しています。 ``CalcSC.py`` を実行すると、距離 :math:`|\boldsymbol{r}|` に依存した1s超伝導相関関数の最大絶対値が ``Result_1swave.dat`` というファイルに出力されます。ジョブスクリプトでは、エネルギー等の計算と合わせて、次のコマンドで実行されます。:: + + python3 VMClocal.py input.toml + python3 CalcSC.py input.toml + +``gnuplot plot`` を実行することで、 厳密対角化の結果とともに ``Result_1swave.dat`` をプロットすることができます。 +計算が正常終了していると、次のような図が出力されます。 + +.. image:: ../../../figs/tutorial2.2_sc_cor.png + :scale: 125 % + :align: center + +紫丸がmVMCの結果を、緑線が厳密対角化の結果を表しています。mVMCの結果は厳密対角化での振る舞いを再現していることがわかります。 + + +演習 +----------------------- +- 引力相互作用を斥力にした場合、1sの超伝導相関関数がどのように変化するかを調べてください。 +- 1s超伝導相関関数の :math:`U` 依存性を調べてください。 diff --git a/doc/tutorial/ja/source/index.rst b/doc/tutorial/ja/source/index.rst index 28805a99..694a0f16 100644 --- a/doc/tutorial/ja/source/index.rst +++ b/doc/tutorial/ja/source/index.rst @@ -28,10 +28,11 @@ mVMCの引用文献としては、下記の論文をご記載ください。 チュートリアル -------- .. toctree:: - :maxdepth: 4 + :maxdepth: 3 :numbered: 4 basic/index + advanced/index .. Indices and tables .. ================== diff --git a/samples/tutorial_2.2/CalcSC.py b/samples/tutorial_2.2/CalcSC.py new file mode 100644 index 00000000..43781b11 --- /dev/null +++ b/samples/tutorial_2.2/CalcSC.py @@ -0,0 +1,174 @@ +import numpy as np +import math +import cmath +import toml +import sys +import SCGreen +import MakeInput +import VMClocal + +def main(): + + #[s] tolm load + input_file = sys.argv[1] + list_org,list_sub,input_dict = MakeInput.read_toml(input_file) + ini_cnt,max_cnt,calcmode = VMClocal.ReadModpara(input_dict) + dir_name = input_dict["mVMC_aft"]["directory"] + All_N = list_org[0]*list_org[1]*list_org[2]*list_org[3] + #[e] tolm load + + trans_1x,trans_1y,trans_2x,trans_2y,trans_3x,trans_3y = SCGreen.MakeFormFactor() + print(trans_2x) + print(trans_2y) + #[s] output misc files + Ini_site = SCGreen.MakeIniSite(list_org,list_sub,"full") + print(Ini_site) + + G1 = read_G1(All_N,max_cnt,dir_name) + # + G2_swave = read_G2_swave(All_N,max_cnt,dir_name,G1,trans_1x,trans_1y) + ave_SC_swave,err_SC_swave = ave_swave_G2(list_org,max_cnt,dir_name,G2_swave) + Output_SC(list_org,Ini_site,ave_SC_swave,err_SC_swave,"Result_1swave.dat") + # + +def ave_swave_G2(list_org,max_cnt,dir_name,G2): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + All_site = Lx*Ly*Lz + + SC_swave = np.zeros((max_cnt,All_site),dtype=np.float64) + for num_bin in range(0,max_cnt): + for site_i in range(0,All_site): + vec_x_i = site_i %Lx + vec_y_i = int((site_i-vec_x_i)/Lx) + all_i = site_i + tmp = 0.0 + for site_j in range(0,All_site): + ini_x_j = site_j %Lx + ini_y_j = int((site_j-ini_x_j)/Lx) + ini_all_j = site_j + x_j = (ini_x_j+vec_x_i+Lx)%Lx + y_j = (ini_y_j+vec_y_i+Ly)%Ly + all_j = x_j+y_j*Lx + #if all_i == 0 : + # print(num_bin,all_i,all_j, G2[num_bin][all_j][all_i][0][0], G2[num_bin][all_j][all_i][0][1]) + tmp += G2[num_bin][ini_all_j][all_j][0][0]+G2[num_bin][ini_all_j][all_j][0][1] + SC_swave[num_bin][site_i] = tmp/(4.0*All_site) + print(SC_swave[0][0]) + ave_G2 = np.mean(SC_swave,axis=0) + err_G2 = np.std(SC_swave,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + #for all_i in range(0,All_N,2): + # for all_j in range(0,All_N,2): + # print(all_i,all_j,ave_G2[all_i][all_j]) + return ave_G2,err_G2 + #print(ave_G2) + +def read_G2_swave(All_N,max_cnt,dir_name,G1,trans_x,trans_y): + num_neighbor = len(trans_x)*len(trans_y) + print("num_neighbor",num_neighbor) + G2 = np.zeros((max_cnt,All_N,All_N,num_neighbor,2),dtype=np.float64) + for num_bin in range(0,max_cnt): + file_name ="{}".format(dir_name)+"/zvo_cisajscktalt_00"+"{0:1d}".format(num_bin)+".dat" + + with open(file_name) as f: + data = f.read() + data = data.split("\n") + print(len(data)) + #[s] count not empty elements + cnt = 0 + for i in range(0,len(data)): + if data[i]: # if data[i] is not empty + cnt += 1 + #print(cnt) + cnt_max = cnt + print("G2",cnt_max) + #[e] count not empty elements + for cnt_neighbor in range(num_neighbor): + for cnt in range(0,cnt_max,2): + tmp = data[cnt].split() + all_i = int(tmp[0]) + all_j = int(tmp[2]) + til_all_i = int(tmp[4]) + til_all_j = int(tmp[6]) + delta_0 = 0.0 + delta_1 = 0.0 + delta_2 = 0.0 + delta_3 = 0.0 + tmp = data[cnt].split() + G2[num_bin][all_i][all_j][cnt_neighbor][0] = float(tmp[8]) + + if all_i == all_j: + delta_0 = 1.0 + if til_all_i == til_all_j: + delta_1 = 1.0 + if all_i == til_all_j: + delta_2 = 1.0 + if til_all_i == all_j: + delta_3 = 1.0 + + tmp_2 = data[cnt+1].split() + tmp_G = delta_0*delta_1-delta_1*G1[num_bin][all_j][all_i][0]-delta_0*G1[num_bin][til_all_j][til_all_i][1] + #print(all_i,all_j,til_all_i,til_all_j,1,tmp_G) + G2[num_bin][all_i][all_j][cnt_neighbor][1] = float(tmp_2[8])+tmp_G + return G2 + +def read_G1(All_N,max_cnt,dir_name): + G1 = np.zeros((max_cnt,All_N,All_N,2),dtype=np.float64) + for num_bin in range(0,max_cnt): + file_name ="{}".format(dir_name)+"/zvo_cisajs_00"+"{0:1d}".format(num_bin)+".dat" + with open(file_name) as f: + tmp_G1 = f.read() + tmp_G1 = tmp_G1.split("\n") + print(len(tmp_G1)) + #[s] count not empty elements + cnt = 0 + for i in range(0,len(tmp_G1)): + if tmp_G1[i]: # if data[i] is not empty + cnt += 1 + #print(cnt) + cnt_max = cnt + #[e] count not empty elements + for cnt in range(0,cnt_max): + tmp = tmp_G1[cnt].split() + all_i = int(tmp[0]) + all_j = int(tmp[2]) + spn = int(tmp[1]) + #print(tmp) + G1[num_bin][all_i][all_j][spn] = float(tmp[4]) + return G1 + +def Output_SC(list_org,Ini_site,ave_SC,err_SC,name_file): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + ini_site_max = len(Ini_site) + site_max = Lx*Ly*Lz + + max_num_dis = (int(Lx/2)+1)**2+(int(Ly/2)+1)**2 + ave_SC_dis = np.zeros(max_num_dis,dtype=np.float64) + err_SC_dis = np.zeros(max_num_dis,dtype=np.float64) + for site_j in range(site_max): + x_j = site_j%Lx + y_j = int((site_j-x_j)/Lx) + diff_x = abs(x_j) + if diff_x > Lx/2: + diff_x = diff_x - Lx + diff_y = abs(y_j) + if diff_y > Ly/2: + diff_y = diff_y-Ly + tmp_dis = diff_x**2+diff_y**2 + #print(x_i,y_i,diff_x,x_j,y_j,diff_y,tmp_dis,max_cnt) + if abs(ave_SC[site_j]) > abs(ave_SC_dis[tmp_dis]): + ave_SC_dis[tmp_dis] = ave_SC[site_j] + err_SC_dis[tmp_dis] = err_SC[site_j] + + with open("%s" % (name_file) , 'w') as f: + for cnt in range(max_num_dis): + if abs(ave_SC_dis[cnt])>1e-12: + print(" %f %f %f %d " % (math.sqrt(cnt),abs(ave_SC_dis[cnt]),err_SC_dis[cnt],cnt) , file=f) + +if __name__ == "__main__": + main() diff --git a/samples/tutorial_2.2/Clean.sh b/samples/tutorial_2.2/Clean.sh new file mode 100644 index 00000000..a13201f7 --- /dev/null +++ b/samples/tutorial_2.2/Clean.sh @@ -0,0 +1,7 @@ +rm *.def +rm *.dat +rm *.gp +rm -r opt* +rm -r aft +rm -r __pycache__ + diff --git a/samples/tutorial_2.2/MakeInput.py b/samples/tutorial_2.2/MakeInput.py new file mode 100644 index 00000000..99c848aa --- /dev/null +++ b/samples/tutorial_2.2/MakeInput.py @@ -0,0 +1,175 @@ +import numpy as np +import math +import cmath +import toml +import sys + +def main(): + #[s] tolm load + input_file = sys.argv[1] + list_org,list_sub,input_dict = read_toml(input_file) + #[e] tolm load + #[s] output StdFace files + OutputStdFace(list_org,list_sub,input_dict) + #[s] output StdFace files + #[s] output StdFace files + OutputGreen(list_org) + #[s] output StdFace files + +def read_toml(input_file): + input_dict = toml.load(input_file) + #[e] tolm load + #[s]define constants + Lx = int(input_dict["lattice"]["Lx"]) + Ly = int(input_dict["lattice"]["Ly"]) + Lz = int(input_dict["lattice"]["Lz"]) + orb_num = int(input_dict["lattice"]["orb_num"]) + sub_x = int(input_dict["mVMC"]["sub_x"]) + sub_y = int(input_dict["mVMC"]["sub_y"]) + sub_z = int(input_dict["mVMC"]["sub_z"]) + #[e]define constants + All_N = Lx*Ly*Lz*orb_num + print('Lx = ',Lx) + print('Ly = ',Ly) + print('Ly = ',Lz) + print('orb_num = ',orb_num) + print('sub_x = ',sub_x) + print('sub_y = ',sub_y) + print('sub_z = ',sub_z) + + #[s] initialize + list_org = [Lx,Ly,Lz,orb_num] + list_sub = [sub_x,sub_y,sub_z] + #[e] initialize + + return list_org,list_sub,input_dict + +def CalcDim(list_org): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + + #[s] calc dim_type + if Ly == 1 and Lz == 1: + dim_type = 1 + elif Lz == 1: + dim_type = 2 + elif Lx>1 and Ly > 1 and Lz>1: + dim_type = 3 + else : + print(" Possible error in Lx, Ly, Lz") + print(" This script supports chain,square, and cubic in the following way: ") + print(" Lx>1 Ly=Lz=1 -> chain") + print(" Lx>1 Ly>1 Lz=1 -> square") + print(" Lx>1 Ly>1 Lz>1 -> cubic") + print(" Input Lx=%d Ly=%d Lz=%d do not meet above conditions." %(Lx,Ly,Lz)) + #[e] calc dim_type + return dim_type + +def OutputStdFace(list_org,list_sub,input_dict): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + Ncond = Lx*Ly*Lz*orb_num + sub_x = list_sub[0] + sub_y = list_sub[1] + sub_z = list_sub[2] + model_type = input_dict["lattice"]["model_type"] + + dim_type = CalcDim(list_org) + + #[s] make stan_com + stan_com = [] + if dim_type == 1: + stan_com.append("L = %d "%(Lx)) + stan_com.append("Lsub = %d "%(sub_x)) + stan_com.append("lattice = \"chain\"") + elif dim_type == 2: + stan_com.append("W = %d "%(Lx)) + stan_com.append("Wsub = %d "%(sub_x)) + stan_com.append("L = %d "%(Ly)) + stan_com.append("Lsub = %d "%(sub_y)) + stan_com.append("lattice = \"square\"") + elif dim_type == 3: + stan_com.append("W = %d "%(Lx)) + stan_com.append("Wsub = %d "%(sub_x)) + stan_com.append("L = %d "%(Ly)) + stan_com.append("Lsub = %d "%(sub_y)) + stan_com.append("Height = %d "%(Lz)) + stan_com.append("Hsub = %d "%(sub_z)) + stan_com.append("lattice = \"cubic\"") + + if model_type == "Spin": + stan_com.append("model = \"%s\" "%(model_type)) + stan_com.append("J = 1.0 ") + elif model_type == "Hubbard": + stan_com.append("model = \"%s\" "%(model_type)) + stan_com.append("t = 1.0 ") + stan_com.append("U = 4.0 ") + stan_com.append("ncond = %d " %(Ncond)) + elif model_type == "Kondo": + stan_com.append("model = \"%s\" "%(model_type)) + stan_com.append("t = 1.0 ") + stan_com.append("J = 1.0 ") + stan_com.append("ncond = %d " %(int(Ncond/2))) + else: + print("This scropt only support Spin, Hubbard, Kondo") + + stan_com.append("2Sz = 0 ") + stan_com.append("NVMCSample = 200 ") + stan_com.append("NSROptItrStep = 600 ") + stan_com.append("NMPTrans = 1 ") + stan_com.append("NSPStot = 0 ") + #[e] make stan_com + + with open("stan_opt.in", 'w') as f: + for cnt_std in stan_com: + print(cnt_std,file=f) + + with open("stan_aft.in", 'w') as f: + for cnt_std in stan_com: + print(cnt_std,file=f) + print("NVMCCalMode = 1 ",file=f) + print("NDataIdxStart = 0 ",file=f) + print("NDataQtySmp = 5 ",file=f) + + + +def OutputGreen(list_org): + All_N = list_org[0]*list_org[1]*list_org[2]*list_org[3] + + with open("green1", 'w') as f: + print("==================", file=f) + print("onebody %d "%(2*All_N**2), file=f) + print("==================", file=f) + print("==================", file=f) + print("==================", file=f) + for all_i in range(0,All_N): + for all_j in range(0,All_N): + print(" %d %d %d %d "% (all_i,0,all_j,0), file=f) + print(" %d %d %d %d "% (all_i,1,all_j,1), file=f) + + with open("green2", 'w') as f: + print("==================", file=f) + print("twobody %d "%(6*All_N**2), file=f) + print("==================", file=f) + print("==================", file=f) + print("==================", file=f) + for all_i in range(0,All_N): + for all_j in range(0,All_N): + print(" %d %d %d %d %d %d %d %d"% (all_i,0,all_i,0,all_j,0,all_j,0), file=f) + print(" %d %d %d %d %d %d %d %d"% (all_i,0,all_i,0,all_j,1,all_j,1), file=f) + print(" %d %d %d %d %d %d %d %d"% (all_i,1,all_i,1,all_j,0,all_j,0), file=f) + print(" %d %d %d %d %d %d %d %d"% (all_i,1,all_i,1,all_j,1,all_j,1), file=f) + # + print(" %d %d %d %d %d %d %d %d"% (all_i,0,all_j,0,all_j,1,all_i,1), file=f) + print(" %d %d %d %d %d %d %d %d"% (all_i,1,all_j,1,all_j,0,all_i,0), file=f) + + + + + +if __name__ == "__main__": + main() diff --git a/samples/tutorial_2.2/SCGreen.py b/samples/tutorial_2.2/SCGreen.py new file mode 100644 index 00000000..d2bee115 --- /dev/null +++ b/samples/tutorial_2.2/SCGreen.py @@ -0,0 +1,150 @@ +import numpy as np +import math +import cmath +import toml +import sys + +import MakeInput + +def main(): + #[s] tolm load + #[s] tolm load + input_file = sys.argv[1] + list_org,list_sub,input_dict = MakeInput.read_toml(input_file) + #[e] tolm load + + trans_1x,trans_1y,trans_2x,trans_2y,trans_3x,trans_3y = MakeFormFactor() + #[s] output green files + Ini_site = MakeIniSite(list_org,list_sub,"full") + Output_SC(list_org,Ini_site,trans_1x,trans_1y,"swave","SC_1swave") + #Output_SC(list_org,Ini_site,trans_2x,trans_2y,"diagonal","SC_2s2d.def") for 2s-wave and 2d-wave + #[e] output green files + +def MakeIniSite(list_org,list_sub,type_ini): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + if type_ini == "full": + site_max = Lx*Ly*Lz + Ini_site = np.zeros(site_max, dtype=np.int64) + for cnt_i in range(site_max): + Ini_site[cnt_i] = cnt_i + elif type_ini == "reduce": + sub_Lx = list_sub[0] + sub_Ly = list_sub[1] + site_max = sub_Lx*sub_Ly + Ini_site = np.zeros(site_max, dtype=np.int64) + for cnt_i in range(site_max): + tmp_x_i = cnt_i%sub_Lx + tmp_y_i = int((cnt_i-tmp_x_i)/sub_Lx) + all_i = tmp_x_i+tmp_y_i*Lx + Ini_site[cnt_i] = all_i + return Ini_site + + +def MakeFormFactor(): + trans_1x = np.zeros([1], dtype=np.int64) + trans_1y = np.zeros([1], dtype=np.int64) + # + trans_2x = np.zeros([4], dtype=np.int64) + trans_2y = np.zeros([4], dtype=np.int64) + # + trans_3x = np.zeros([4], dtype=np.int64) + trans_3y = np.zeros([4], dtype=np.int64) + # + trans_1x[0] = 0 + trans_1y[0] = 0 + # + trans_2x[0] = 1 + trans_2y[0] = 0 + # + trans_2x[1] = -1 + trans_2y[1] = 0 + # + trans_2x[2] = 0 + trans_2y[2] = 1 + # + trans_2x[3] = 0 + trans_2y[3] = -1 + # + trans_3x[0] = 1 + trans_3y[0] = 1 + # + trans_3x[1] = -1 + trans_3y[1] = -1 + # + trans_3x[2] = 1 + trans_3y[2] = -1 + # + trans_3x[3] = -1 + trans_3y[3] = 1 + + return trans_1x,trans_1y,trans_2x,trans_2y,trans_3x,trans_3y + + +def Output_SC(list_org,Ini_site,trans_x,trans_y,type_of_orbital,name_file): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + ini_site_max = len(Ini_site) + site_max = Lx*Ly*Lz + num_trans = len(trans_x) + if type_of_orbital == "diagonal": + tot_orb = int(orb_num) + cnt_max = 8*(site_max*ini_site_max)*(num_trans**2)*tot_orb + elif type_of_orbital == "swave": + tot_orb = int(orb_num) + cnt_max = 2*(site_max*ini_site_max)*tot_orb*tot_orb + else: + print("fatal error type_or_orbital should be diagonal or swave") + #print(' cnt_V = ',cnt_V) + with open("%s" % (name_file), 'w') as f: + print("====== ", file=f) + print("%s %d " % ('N', cnt_max), file=f) + print("====== ", file=f) + print("====== ", file=f) + print("====== ", file=f) + if type_of_orbital == "swave": + for tmp_site_i in range(ini_site_max): + site_i = Ini_site[tmp_site_i] + x_i = site_i%Lx + y_i = int((site_i-x_i)/Lx) + for orb_i in range(orb_num): + all_i = orb_i + site_i*orb_num + for all_j in range(site_max*orb_num): + print(" %8d %8d %8d %8d %8d %8d %8d %8d " % (all_i,0,all_j,0,all_i,1,all_j,1), file=f) + print(" %8d %8d %8d %8d %8d %8d %8d %8d " % (all_j,0,all_i,0,all_j,1,all_i,1), file=f) + + if type_of_orbital == "diagonal": + for tmp_site_i in range(ini_site_max): + site_i = Ini_site[tmp_site_i] + x_i = site_i%Lx + y_i = int((site_i-x_i)/Lx) + for site_j in range(site_max): + x_j = site_j%Lx + y_j = int((site_j-x_j)/Lx) + for cnt_i in range(len(trans_x)): + til_site_i = ((x_i+trans_x[cnt_i]+Lx)%Lx)+((y_i+trans_y[cnt_i]+Ly)%Ly)*Lx + for cnt_j in range(len(trans_x)): + til_site_j = ((x_j+trans_x[cnt_j]+Lx)%Lx)+((y_j+trans_y[cnt_j]+Ly)%Ly)*Lx + for orb_i in range(orb_num): + all_i = orb_i + site_i*orb_num + til_all_i = orb_i + til_site_i*orb_num + all_j = orb_i + site_j*orb_num + til_all_j = orb_i + til_site_j*orb_num + print(" %8d %8d %8d %8d %8d %8d %8d %8d " % (all_i,0,all_j,0,til_all_i,1,til_all_j,1), file=f) + print(" %8d %8d %8d %8d %8d %8d %8d %8d " % (all_j,0,all_i,0,til_all_j,1,til_all_i,1), file=f) + # + print(" %8d %8d %8d %8d %8d %8d %8d %8d " % (all_i,0,til_all_j,0,til_all_i,1,all_j,1), file=f) + print(" %8d %8d %8d %8d %8d %8d %8d %8d " % (til_all_j,0,all_i,0,all_j,1,til_all_i,1), file=f) + # + print(" %8d %8d %8d %8d %8d %8d %8d %8d " % (til_all_i,0,all_j,0,all_i,1,til_all_j,1), file=f) + print(" %8d %8d %8d %8d %8d %8d %8d %8d " % (all_j,0,til_all_i,0,til_all_j,1,all_i,1), file=f) + # + print(" %8d %8d %8d %8d %8d %8d %8d %8d " % (til_all_i,0,til_all_j,0,all_i,1,all_j,1), file=f) + print(" %8d %8d %8d %8d %8d %8d %8d %8d " % (til_all_j,0,til_all_i,0,all_j,1,all_i,1), file=f) + + +if __name__ == "__main__": + main() diff --git a/samples/tutorial_2.2/SC_1swave b/samples/tutorial_2.2/SC_1swave new file mode 100644 index 00000000..f9a1e716 --- /dev/null +++ b/samples/tutorial_2.2/SC_1swave @@ -0,0 +1,517 @@ +====== +N 512 +====== +====== +====== + 0 0 0 0 0 1 0 1 + 0 0 0 0 0 1 0 1 + 0 0 1 0 0 1 1 1 + 1 0 0 0 1 1 0 1 + 0 0 2 0 0 1 2 1 + 2 0 0 0 2 1 0 1 + 0 0 3 0 0 1 3 1 + 3 0 0 0 3 1 0 1 + 0 0 4 0 0 1 4 1 + 4 0 0 0 4 1 0 1 + 0 0 5 0 0 1 5 1 + 5 0 0 0 5 1 0 1 + 0 0 6 0 0 1 6 1 + 6 0 0 0 6 1 0 1 + 0 0 7 0 0 1 7 1 + 7 0 0 0 7 1 0 1 + 0 0 8 0 0 1 8 1 + 8 0 0 0 8 1 0 1 + 0 0 9 0 0 1 9 1 + 9 0 0 0 9 1 0 1 + 0 0 10 0 0 1 10 1 + 10 0 0 0 10 1 0 1 + 0 0 11 0 0 1 11 1 + 11 0 0 0 11 1 0 1 + 0 0 12 0 0 1 12 1 + 12 0 0 0 12 1 0 1 + 0 0 13 0 0 1 13 1 + 13 0 0 0 13 1 0 1 + 0 0 14 0 0 1 14 1 + 14 0 0 0 14 1 0 1 + 0 0 15 0 0 1 15 1 + 15 0 0 0 15 1 0 1 + 1 0 0 0 1 1 0 1 + 0 0 1 0 0 1 1 1 + 1 0 1 0 1 1 1 1 + 1 0 1 0 1 1 1 1 + 1 0 2 0 1 1 2 1 + 2 0 1 0 2 1 1 1 + 1 0 3 0 1 1 3 1 + 3 0 1 0 3 1 1 1 + 1 0 4 0 1 1 4 1 + 4 0 1 0 4 1 1 1 + 1 0 5 0 1 1 5 1 + 5 0 1 0 5 1 1 1 + 1 0 6 0 1 1 6 1 + 6 0 1 0 6 1 1 1 + 1 0 7 0 1 1 7 1 + 7 0 1 0 7 1 1 1 + 1 0 8 0 1 1 8 1 + 8 0 1 0 8 1 1 1 + 1 0 9 0 1 1 9 1 + 9 0 1 0 9 1 1 1 + 1 0 10 0 1 1 10 1 + 10 0 1 0 10 1 1 1 + 1 0 11 0 1 1 11 1 + 11 0 1 0 11 1 1 1 + 1 0 12 0 1 1 12 1 + 12 0 1 0 12 1 1 1 + 1 0 13 0 1 1 13 1 + 13 0 1 0 13 1 1 1 + 1 0 14 0 1 1 14 1 + 14 0 1 0 14 1 1 1 + 1 0 15 0 1 1 15 1 + 15 0 1 0 15 1 1 1 + 2 0 0 0 2 1 0 1 + 0 0 2 0 0 1 2 1 + 2 0 1 0 2 1 1 1 + 1 0 2 0 1 1 2 1 + 2 0 2 0 2 1 2 1 + 2 0 2 0 2 1 2 1 + 2 0 3 0 2 1 3 1 + 3 0 2 0 3 1 2 1 + 2 0 4 0 2 1 4 1 + 4 0 2 0 4 1 2 1 + 2 0 5 0 2 1 5 1 + 5 0 2 0 5 1 2 1 + 2 0 6 0 2 1 6 1 + 6 0 2 0 6 1 2 1 + 2 0 7 0 2 1 7 1 + 7 0 2 0 7 1 2 1 + 2 0 8 0 2 1 8 1 + 8 0 2 0 8 1 2 1 + 2 0 9 0 2 1 9 1 + 9 0 2 0 9 1 2 1 + 2 0 10 0 2 1 10 1 + 10 0 2 0 10 1 2 1 + 2 0 11 0 2 1 11 1 + 11 0 2 0 11 1 2 1 + 2 0 12 0 2 1 12 1 + 12 0 2 0 12 1 2 1 + 2 0 13 0 2 1 13 1 + 13 0 2 0 13 1 2 1 + 2 0 14 0 2 1 14 1 + 14 0 2 0 14 1 2 1 + 2 0 15 0 2 1 15 1 + 15 0 2 0 15 1 2 1 + 3 0 0 0 3 1 0 1 + 0 0 3 0 0 1 3 1 + 3 0 1 0 3 1 1 1 + 1 0 3 0 1 1 3 1 + 3 0 2 0 3 1 2 1 + 2 0 3 0 2 1 3 1 + 3 0 3 0 3 1 3 1 + 3 0 3 0 3 1 3 1 + 3 0 4 0 3 1 4 1 + 4 0 3 0 4 1 3 1 + 3 0 5 0 3 1 5 1 + 5 0 3 0 5 1 3 1 + 3 0 6 0 3 1 6 1 + 6 0 3 0 6 1 3 1 + 3 0 7 0 3 1 7 1 + 7 0 3 0 7 1 3 1 + 3 0 8 0 3 1 8 1 + 8 0 3 0 8 1 3 1 + 3 0 9 0 3 1 9 1 + 9 0 3 0 9 1 3 1 + 3 0 10 0 3 1 10 1 + 10 0 3 0 10 1 3 1 + 3 0 11 0 3 1 11 1 + 11 0 3 0 11 1 3 1 + 3 0 12 0 3 1 12 1 + 12 0 3 0 12 1 3 1 + 3 0 13 0 3 1 13 1 + 13 0 3 0 13 1 3 1 + 3 0 14 0 3 1 14 1 + 14 0 3 0 14 1 3 1 + 3 0 15 0 3 1 15 1 + 15 0 3 0 15 1 3 1 + 4 0 0 0 4 1 0 1 + 0 0 4 0 0 1 4 1 + 4 0 1 0 4 1 1 1 + 1 0 4 0 1 1 4 1 + 4 0 2 0 4 1 2 1 + 2 0 4 0 2 1 4 1 + 4 0 3 0 4 1 3 1 + 3 0 4 0 3 1 4 1 + 4 0 4 0 4 1 4 1 + 4 0 4 0 4 1 4 1 + 4 0 5 0 4 1 5 1 + 5 0 4 0 5 1 4 1 + 4 0 6 0 4 1 6 1 + 6 0 4 0 6 1 4 1 + 4 0 7 0 4 1 7 1 + 7 0 4 0 7 1 4 1 + 4 0 8 0 4 1 8 1 + 8 0 4 0 8 1 4 1 + 4 0 9 0 4 1 9 1 + 9 0 4 0 9 1 4 1 + 4 0 10 0 4 1 10 1 + 10 0 4 0 10 1 4 1 + 4 0 11 0 4 1 11 1 + 11 0 4 0 11 1 4 1 + 4 0 12 0 4 1 12 1 + 12 0 4 0 12 1 4 1 + 4 0 13 0 4 1 13 1 + 13 0 4 0 13 1 4 1 + 4 0 14 0 4 1 14 1 + 14 0 4 0 14 1 4 1 + 4 0 15 0 4 1 15 1 + 15 0 4 0 15 1 4 1 + 5 0 0 0 5 1 0 1 + 0 0 5 0 0 1 5 1 + 5 0 1 0 5 1 1 1 + 1 0 5 0 1 1 5 1 + 5 0 2 0 5 1 2 1 + 2 0 5 0 2 1 5 1 + 5 0 3 0 5 1 3 1 + 3 0 5 0 3 1 5 1 + 5 0 4 0 5 1 4 1 + 4 0 5 0 4 1 5 1 + 5 0 5 0 5 1 5 1 + 5 0 5 0 5 1 5 1 + 5 0 6 0 5 1 6 1 + 6 0 5 0 6 1 5 1 + 5 0 7 0 5 1 7 1 + 7 0 5 0 7 1 5 1 + 5 0 8 0 5 1 8 1 + 8 0 5 0 8 1 5 1 + 5 0 9 0 5 1 9 1 + 9 0 5 0 9 1 5 1 + 5 0 10 0 5 1 10 1 + 10 0 5 0 10 1 5 1 + 5 0 11 0 5 1 11 1 + 11 0 5 0 11 1 5 1 + 5 0 12 0 5 1 12 1 + 12 0 5 0 12 1 5 1 + 5 0 13 0 5 1 13 1 + 13 0 5 0 13 1 5 1 + 5 0 14 0 5 1 14 1 + 14 0 5 0 14 1 5 1 + 5 0 15 0 5 1 15 1 + 15 0 5 0 15 1 5 1 + 6 0 0 0 6 1 0 1 + 0 0 6 0 0 1 6 1 + 6 0 1 0 6 1 1 1 + 1 0 6 0 1 1 6 1 + 6 0 2 0 6 1 2 1 + 2 0 6 0 2 1 6 1 + 6 0 3 0 6 1 3 1 + 3 0 6 0 3 1 6 1 + 6 0 4 0 6 1 4 1 + 4 0 6 0 4 1 6 1 + 6 0 5 0 6 1 5 1 + 5 0 6 0 5 1 6 1 + 6 0 6 0 6 1 6 1 + 6 0 6 0 6 1 6 1 + 6 0 7 0 6 1 7 1 + 7 0 6 0 7 1 6 1 + 6 0 8 0 6 1 8 1 + 8 0 6 0 8 1 6 1 + 6 0 9 0 6 1 9 1 + 9 0 6 0 9 1 6 1 + 6 0 10 0 6 1 10 1 + 10 0 6 0 10 1 6 1 + 6 0 11 0 6 1 11 1 + 11 0 6 0 11 1 6 1 + 6 0 12 0 6 1 12 1 + 12 0 6 0 12 1 6 1 + 6 0 13 0 6 1 13 1 + 13 0 6 0 13 1 6 1 + 6 0 14 0 6 1 14 1 + 14 0 6 0 14 1 6 1 + 6 0 15 0 6 1 15 1 + 15 0 6 0 15 1 6 1 + 7 0 0 0 7 1 0 1 + 0 0 7 0 0 1 7 1 + 7 0 1 0 7 1 1 1 + 1 0 7 0 1 1 7 1 + 7 0 2 0 7 1 2 1 + 2 0 7 0 2 1 7 1 + 7 0 3 0 7 1 3 1 + 3 0 7 0 3 1 7 1 + 7 0 4 0 7 1 4 1 + 4 0 7 0 4 1 7 1 + 7 0 5 0 7 1 5 1 + 5 0 7 0 5 1 7 1 + 7 0 6 0 7 1 6 1 + 6 0 7 0 6 1 7 1 + 7 0 7 0 7 1 7 1 + 7 0 7 0 7 1 7 1 + 7 0 8 0 7 1 8 1 + 8 0 7 0 8 1 7 1 + 7 0 9 0 7 1 9 1 + 9 0 7 0 9 1 7 1 + 7 0 10 0 7 1 10 1 + 10 0 7 0 10 1 7 1 + 7 0 11 0 7 1 11 1 + 11 0 7 0 11 1 7 1 + 7 0 12 0 7 1 12 1 + 12 0 7 0 12 1 7 1 + 7 0 13 0 7 1 13 1 + 13 0 7 0 13 1 7 1 + 7 0 14 0 7 1 14 1 + 14 0 7 0 14 1 7 1 + 7 0 15 0 7 1 15 1 + 15 0 7 0 15 1 7 1 + 8 0 0 0 8 1 0 1 + 0 0 8 0 0 1 8 1 + 8 0 1 0 8 1 1 1 + 1 0 8 0 1 1 8 1 + 8 0 2 0 8 1 2 1 + 2 0 8 0 2 1 8 1 + 8 0 3 0 8 1 3 1 + 3 0 8 0 3 1 8 1 + 8 0 4 0 8 1 4 1 + 4 0 8 0 4 1 8 1 + 8 0 5 0 8 1 5 1 + 5 0 8 0 5 1 8 1 + 8 0 6 0 8 1 6 1 + 6 0 8 0 6 1 8 1 + 8 0 7 0 8 1 7 1 + 7 0 8 0 7 1 8 1 + 8 0 8 0 8 1 8 1 + 8 0 8 0 8 1 8 1 + 8 0 9 0 8 1 9 1 + 9 0 8 0 9 1 8 1 + 8 0 10 0 8 1 10 1 + 10 0 8 0 10 1 8 1 + 8 0 11 0 8 1 11 1 + 11 0 8 0 11 1 8 1 + 8 0 12 0 8 1 12 1 + 12 0 8 0 12 1 8 1 + 8 0 13 0 8 1 13 1 + 13 0 8 0 13 1 8 1 + 8 0 14 0 8 1 14 1 + 14 0 8 0 14 1 8 1 + 8 0 15 0 8 1 15 1 + 15 0 8 0 15 1 8 1 + 9 0 0 0 9 1 0 1 + 0 0 9 0 0 1 9 1 + 9 0 1 0 9 1 1 1 + 1 0 9 0 1 1 9 1 + 9 0 2 0 9 1 2 1 + 2 0 9 0 2 1 9 1 + 9 0 3 0 9 1 3 1 + 3 0 9 0 3 1 9 1 + 9 0 4 0 9 1 4 1 + 4 0 9 0 4 1 9 1 + 9 0 5 0 9 1 5 1 + 5 0 9 0 5 1 9 1 + 9 0 6 0 9 1 6 1 + 6 0 9 0 6 1 9 1 + 9 0 7 0 9 1 7 1 + 7 0 9 0 7 1 9 1 + 9 0 8 0 9 1 8 1 + 8 0 9 0 8 1 9 1 + 9 0 9 0 9 1 9 1 + 9 0 9 0 9 1 9 1 + 9 0 10 0 9 1 10 1 + 10 0 9 0 10 1 9 1 + 9 0 11 0 9 1 11 1 + 11 0 9 0 11 1 9 1 + 9 0 12 0 9 1 12 1 + 12 0 9 0 12 1 9 1 + 9 0 13 0 9 1 13 1 + 13 0 9 0 13 1 9 1 + 9 0 14 0 9 1 14 1 + 14 0 9 0 14 1 9 1 + 9 0 15 0 9 1 15 1 + 15 0 9 0 15 1 9 1 + 10 0 0 0 10 1 0 1 + 0 0 10 0 0 1 10 1 + 10 0 1 0 10 1 1 1 + 1 0 10 0 1 1 10 1 + 10 0 2 0 10 1 2 1 + 2 0 10 0 2 1 10 1 + 10 0 3 0 10 1 3 1 + 3 0 10 0 3 1 10 1 + 10 0 4 0 10 1 4 1 + 4 0 10 0 4 1 10 1 + 10 0 5 0 10 1 5 1 + 5 0 10 0 5 1 10 1 + 10 0 6 0 10 1 6 1 + 6 0 10 0 6 1 10 1 + 10 0 7 0 10 1 7 1 + 7 0 10 0 7 1 10 1 + 10 0 8 0 10 1 8 1 + 8 0 10 0 8 1 10 1 + 10 0 9 0 10 1 9 1 + 9 0 10 0 9 1 10 1 + 10 0 10 0 10 1 10 1 + 10 0 10 0 10 1 10 1 + 10 0 11 0 10 1 11 1 + 11 0 10 0 11 1 10 1 + 10 0 12 0 10 1 12 1 + 12 0 10 0 12 1 10 1 + 10 0 13 0 10 1 13 1 + 13 0 10 0 13 1 10 1 + 10 0 14 0 10 1 14 1 + 14 0 10 0 14 1 10 1 + 10 0 15 0 10 1 15 1 + 15 0 10 0 15 1 10 1 + 11 0 0 0 11 1 0 1 + 0 0 11 0 0 1 11 1 + 11 0 1 0 11 1 1 1 + 1 0 11 0 1 1 11 1 + 11 0 2 0 11 1 2 1 + 2 0 11 0 2 1 11 1 + 11 0 3 0 11 1 3 1 + 3 0 11 0 3 1 11 1 + 11 0 4 0 11 1 4 1 + 4 0 11 0 4 1 11 1 + 11 0 5 0 11 1 5 1 + 5 0 11 0 5 1 11 1 + 11 0 6 0 11 1 6 1 + 6 0 11 0 6 1 11 1 + 11 0 7 0 11 1 7 1 + 7 0 11 0 7 1 11 1 + 11 0 8 0 11 1 8 1 + 8 0 11 0 8 1 11 1 + 11 0 9 0 11 1 9 1 + 9 0 11 0 9 1 11 1 + 11 0 10 0 11 1 10 1 + 10 0 11 0 10 1 11 1 + 11 0 11 0 11 1 11 1 + 11 0 11 0 11 1 11 1 + 11 0 12 0 11 1 12 1 + 12 0 11 0 12 1 11 1 + 11 0 13 0 11 1 13 1 + 13 0 11 0 13 1 11 1 + 11 0 14 0 11 1 14 1 + 14 0 11 0 14 1 11 1 + 11 0 15 0 11 1 15 1 + 15 0 11 0 15 1 11 1 + 12 0 0 0 12 1 0 1 + 0 0 12 0 0 1 12 1 + 12 0 1 0 12 1 1 1 + 1 0 12 0 1 1 12 1 + 12 0 2 0 12 1 2 1 + 2 0 12 0 2 1 12 1 + 12 0 3 0 12 1 3 1 + 3 0 12 0 3 1 12 1 + 12 0 4 0 12 1 4 1 + 4 0 12 0 4 1 12 1 + 12 0 5 0 12 1 5 1 + 5 0 12 0 5 1 12 1 + 12 0 6 0 12 1 6 1 + 6 0 12 0 6 1 12 1 + 12 0 7 0 12 1 7 1 + 7 0 12 0 7 1 12 1 + 12 0 8 0 12 1 8 1 + 8 0 12 0 8 1 12 1 + 12 0 9 0 12 1 9 1 + 9 0 12 0 9 1 12 1 + 12 0 10 0 12 1 10 1 + 10 0 12 0 10 1 12 1 + 12 0 11 0 12 1 11 1 + 11 0 12 0 11 1 12 1 + 12 0 12 0 12 1 12 1 + 12 0 12 0 12 1 12 1 + 12 0 13 0 12 1 13 1 + 13 0 12 0 13 1 12 1 + 12 0 14 0 12 1 14 1 + 14 0 12 0 14 1 12 1 + 12 0 15 0 12 1 15 1 + 15 0 12 0 15 1 12 1 + 13 0 0 0 13 1 0 1 + 0 0 13 0 0 1 13 1 + 13 0 1 0 13 1 1 1 + 1 0 13 0 1 1 13 1 + 13 0 2 0 13 1 2 1 + 2 0 13 0 2 1 13 1 + 13 0 3 0 13 1 3 1 + 3 0 13 0 3 1 13 1 + 13 0 4 0 13 1 4 1 + 4 0 13 0 4 1 13 1 + 13 0 5 0 13 1 5 1 + 5 0 13 0 5 1 13 1 + 13 0 6 0 13 1 6 1 + 6 0 13 0 6 1 13 1 + 13 0 7 0 13 1 7 1 + 7 0 13 0 7 1 13 1 + 13 0 8 0 13 1 8 1 + 8 0 13 0 8 1 13 1 + 13 0 9 0 13 1 9 1 + 9 0 13 0 9 1 13 1 + 13 0 10 0 13 1 10 1 + 10 0 13 0 10 1 13 1 + 13 0 11 0 13 1 11 1 + 11 0 13 0 11 1 13 1 + 13 0 12 0 13 1 12 1 + 12 0 13 0 12 1 13 1 + 13 0 13 0 13 1 13 1 + 13 0 13 0 13 1 13 1 + 13 0 14 0 13 1 14 1 + 14 0 13 0 14 1 13 1 + 13 0 15 0 13 1 15 1 + 15 0 13 0 15 1 13 1 + 14 0 0 0 14 1 0 1 + 0 0 14 0 0 1 14 1 + 14 0 1 0 14 1 1 1 + 1 0 14 0 1 1 14 1 + 14 0 2 0 14 1 2 1 + 2 0 14 0 2 1 14 1 + 14 0 3 0 14 1 3 1 + 3 0 14 0 3 1 14 1 + 14 0 4 0 14 1 4 1 + 4 0 14 0 4 1 14 1 + 14 0 5 0 14 1 5 1 + 5 0 14 0 5 1 14 1 + 14 0 6 0 14 1 6 1 + 6 0 14 0 6 1 14 1 + 14 0 7 0 14 1 7 1 + 7 0 14 0 7 1 14 1 + 14 0 8 0 14 1 8 1 + 8 0 14 0 8 1 14 1 + 14 0 9 0 14 1 9 1 + 9 0 14 0 9 1 14 1 + 14 0 10 0 14 1 10 1 + 10 0 14 0 10 1 14 1 + 14 0 11 0 14 1 11 1 + 11 0 14 0 11 1 14 1 + 14 0 12 0 14 1 12 1 + 12 0 14 0 12 1 14 1 + 14 0 13 0 14 1 13 1 + 13 0 14 0 13 1 14 1 + 14 0 14 0 14 1 14 1 + 14 0 14 0 14 1 14 1 + 14 0 15 0 14 1 15 1 + 15 0 14 0 15 1 14 1 + 15 0 0 0 15 1 0 1 + 0 0 15 0 0 1 15 1 + 15 0 1 0 15 1 1 1 + 1 0 15 0 1 1 15 1 + 15 0 2 0 15 1 2 1 + 2 0 15 0 2 1 15 1 + 15 0 3 0 15 1 3 1 + 3 0 15 0 3 1 15 1 + 15 0 4 0 15 1 4 1 + 4 0 15 0 4 1 15 1 + 15 0 5 0 15 1 5 1 + 5 0 15 0 5 1 15 1 + 15 0 6 0 15 1 6 1 + 6 0 15 0 6 1 15 1 + 15 0 7 0 15 1 7 1 + 7 0 15 0 7 1 15 1 + 15 0 8 0 15 1 8 1 + 8 0 15 0 8 1 15 1 + 15 0 9 0 15 1 9 1 + 9 0 15 0 9 1 15 1 + 15 0 10 0 15 1 10 1 + 10 0 15 0 10 1 15 1 + 15 0 11 0 15 1 11 1 + 11 0 15 0 11 1 15 1 + 15 0 12 0 15 1 12 1 + 12 0 15 0 12 1 15 1 + 15 0 13 0 15 1 13 1 + 13 0 15 0 13 1 15 1 + 15 0 14 0 15 1 14 1 + 14 0 15 0 14 1 15 1 + 15 0 15 0 15 1 15 1 + 15 0 15 0 15 1 15 1 diff --git a/samples/tutorial_2.2/VMClocal.py b/samples/tutorial_2.2/VMClocal.py new file mode 100644 index 00000000..6486f96c --- /dev/null +++ b/samples/tutorial_2.2/VMClocal.py @@ -0,0 +1,116 @@ +import cmath +import math +import sys + +import numpy as np +import toml + +import MakeInput +import qlms_lattice + + +def main(): + #[s] tolm load + input_file = sys.argv[1] + list_org,list_sub,input_dict = MakeInput.read_toml(input_file) + + ini_cnt,max_cnt,calcmode = ReadModpara(input_dict) + All_N = list_org[0]*list_org[1]*list_org[2]*list_org[3] + All_site = list_org[0]*list_org[1]*list_org[2] + orb_num = list_org[3] + dir_name = input_dict["mVMC_aft"]["directory"] + + tot_Ene = np.zeros([max_cnt], dtype=np.float64) + tot_occ = np.zeros([max_cnt,orb_num], dtype=np.float64) + tot_AF = np.zeros([max_cnt,orb_num], dtype=np.float64) + for i_smp in range(ini_cnt,ini_cnt+max_cnt): + file_name = "%s/zvo_cisajs_00%d.dat" % (dir_name,i_smp) + occ,AF = ReadG1(file_name,list_org,i_smp) + for orb_i in range(orb_num): + tot_occ[i_smp][orb_i] = occ[orb_i] + tot_AF[i_smp][orb_i] = AF[orb_i] + # + file_name = "%s/zvo_out_00%d.dat" % (dir_name,i_smp) + tot_Ene[i_smp] = ReadEne(file_name,list_org,i_smp) + + Ave_Ene = np.mean(tot_Ene,axis=0) + Err_Ene = np.std(tot_Ene,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + # + Ave_occ = np.mean(tot_occ,axis=0) + Err_occ = np.std(tot_occ,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + Ave_AF = np.mean(tot_AF,axis=0) + Err_AF = np.std(tot_AF,axis=0,ddof=1)/math.sqrt(1.0*max_cnt) + + with open("Ene.dat", 'w') as f: + print("%s " % ("# Ene err_Ene Ene/(All_site) err_Ene/(All_site)"),file=f) + print("%f %f %f %f" % (Ave_Ene,Err_Ene,Ave_Ene/(All_site),Err_Ene/(All_site)),file=f) + with open("occ.dat", 'w') as f: + print("%s " % ("# occ err_occ AF err_AF"),file=f) + for orb_i in range(orb_num): + print("%f %f %f %f" % (Ave_occ[orb_i],Err_occ[orb_i],Ave_AF[orb_i],Err_AF[orb_i]),end="",file=f) + print(" " ,file=f) + +def ReadModpara(input_dict): + file_name = input_dict["mVMC_aft"]["modpara"] + with open(file_name) as f: + data = f.read() + data = data.split("\n") + for i in range(0,len(data)): + if data[i]: # if data[i] is not empty + tmp = data[i].split() + if tmp[0] == "NDataIdxStart": + ini_cnt = int(tmp[1]) + if tmp[0] == "NDataQtySmp": + max_cnt = int(tmp[1]) + if tmp[0] == "NVMCCalMode": + calcmode = int(tmp[1]) + return ini_cnt,max_cnt,calcmode + + +def ReadEne(file_name,list_org,i_smp): + with open(file_name) as f: + data = f.read() + data = data.split("\n") + #print(len(data)) + tmp = data[0].split() + tmp_Ene = tmp[0] + return tmp_Ene + + +def ReadG1(file_name,list_org,i_smp): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + #file_name = "output/zvo_aft_cisajs_001.dat" + with open(file_name) as f: + data = f.read() + data = data.split("\n") + #print(len(data)) + #[s] count not empty elements + occ = np.zeros([orb_num], dtype=np.float64) + AF = np.zeros([orb_num], dtype=np.float64) + for i in range(0,len(data)): + if data[i]: # if data[i] is not empty + tmp = data[i].split() + if tmp[0] == tmp[2]: + all_i = int(tmp[0]) + list_site = qlms_lattice.get_site(all_i,list_org) + x_i = list_site[0] + y_i = list_site[1] + orb_i = list_site[3] + sgn = math.cos(math.pi*x_i+math.pi*y_i) + if tmp[1] == tmp[3] and int(tmp[1]) == 0: + occ[orb_i] += float(tmp[4]) + AF[orb_i] += sgn*float(tmp[4]) + if tmp[1] == tmp[3] and int(tmp[1]) == 1: + occ[orb_i] += float(tmp[4]) + AF[orb_i] += -sgn*float(tmp[4]) + #[e] count not empty elements + occ = occ/(Lx*Ly*Lz) + AF = AF/(Lx*Ly*Lz) + return occ,AF + + +if __name__ == "__main__": + main() diff --git a/samples/tutorial_2.2/green1 b/samples/tutorial_2.2/green1 new file mode 100644 index 00000000..1369b0df --- /dev/null +++ b/samples/tutorial_2.2/green1 @@ -0,0 +1,517 @@ +================== +onebody 512 +================== +================== +================== + 0 0 0 0 + 0 1 0 1 + 0 0 1 0 + 0 1 1 1 + 0 0 2 0 + 0 1 2 1 + 0 0 3 0 + 0 1 3 1 + 0 0 4 0 + 0 1 4 1 + 0 0 5 0 + 0 1 5 1 + 0 0 6 0 + 0 1 6 1 + 0 0 7 0 + 0 1 7 1 + 0 0 8 0 + 0 1 8 1 + 0 0 9 0 + 0 1 9 1 + 0 0 10 0 + 0 1 10 1 + 0 0 11 0 + 0 1 11 1 + 0 0 12 0 + 0 1 12 1 + 0 0 13 0 + 0 1 13 1 + 0 0 14 0 + 0 1 14 1 + 0 0 15 0 + 0 1 15 1 + 1 0 0 0 + 1 1 0 1 + 1 0 1 0 + 1 1 1 1 + 1 0 2 0 + 1 1 2 1 + 1 0 3 0 + 1 1 3 1 + 1 0 4 0 + 1 1 4 1 + 1 0 5 0 + 1 1 5 1 + 1 0 6 0 + 1 1 6 1 + 1 0 7 0 + 1 1 7 1 + 1 0 8 0 + 1 1 8 1 + 1 0 9 0 + 1 1 9 1 + 1 0 10 0 + 1 1 10 1 + 1 0 11 0 + 1 1 11 1 + 1 0 12 0 + 1 1 12 1 + 1 0 13 0 + 1 1 13 1 + 1 0 14 0 + 1 1 14 1 + 1 0 15 0 + 1 1 15 1 + 2 0 0 0 + 2 1 0 1 + 2 0 1 0 + 2 1 1 1 + 2 0 2 0 + 2 1 2 1 + 2 0 3 0 + 2 1 3 1 + 2 0 4 0 + 2 1 4 1 + 2 0 5 0 + 2 1 5 1 + 2 0 6 0 + 2 1 6 1 + 2 0 7 0 + 2 1 7 1 + 2 0 8 0 + 2 1 8 1 + 2 0 9 0 + 2 1 9 1 + 2 0 10 0 + 2 1 10 1 + 2 0 11 0 + 2 1 11 1 + 2 0 12 0 + 2 1 12 1 + 2 0 13 0 + 2 1 13 1 + 2 0 14 0 + 2 1 14 1 + 2 0 15 0 + 2 1 15 1 + 3 0 0 0 + 3 1 0 1 + 3 0 1 0 + 3 1 1 1 + 3 0 2 0 + 3 1 2 1 + 3 0 3 0 + 3 1 3 1 + 3 0 4 0 + 3 1 4 1 + 3 0 5 0 + 3 1 5 1 + 3 0 6 0 + 3 1 6 1 + 3 0 7 0 + 3 1 7 1 + 3 0 8 0 + 3 1 8 1 + 3 0 9 0 + 3 1 9 1 + 3 0 10 0 + 3 1 10 1 + 3 0 11 0 + 3 1 11 1 + 3 0 12 0 + 3 1 12 1 + 3 0 13 0 + 3 1 13 1 + 3 0 14 0 + 3 1 14 1 + 3 0 15 0 + 3 1 15 1 + 4 0 0 0 + 4 1 0 1 + 4 0 1 0 + 4 1 1 1 + 4 0 2 0 + 4 1 2 1 + 4 0 3 0 + 4 1 3 1 + 4 0 4 0 + 4 1 4 1 + 4 0 5 0 + 4 1 5 1 + 4 0 6 0 + 4 1 6 1 + 4 0 7 0 + 4 1 7 1 + 4 0 8 0 + 4 1 8 1 + 4 0 9 0 + 4 1 9 1 + 4 0 10 0 + 4 1 10 1 + 4 0 11 0 + 4 1 11 1 + 4 0 12 0 + 4 1 12 1 + 4 0 13 0 + 4 1 13 1 + 4 0 14 0 + 4 1 14 1 + 4 0 15 0 + 4 1 15 1 + 5 0 0 0 + 5 1 0 1 + 5 0 1 0 + 5 1 1 1 + 5 0 2 0 + 5 1 2 1 + 5 0 3 0 + 5 1 3 1 + 5 0 4 0 + 5 1 4 1 + 5 0 5 0 + 5 1 5 1 + 5 0 6 0 + 5 1 6 1 + 5 0 7 0 + 5 1 7 1 + 5 0 8 0 + 5 1 8 1 + 5 0 9 0 + 5 1 9 1 + 5 0 10 0 + 5 1 10 1 + 5 0 11 0 + 5 1 11 1 + 5 0 12 0 + 5 1 12 1 + 5 0 13 0 + 5 1 13 1 + 5 0 14 0 + 5 1 14 1 + 5 0 15 0 + 5 1 15 1 + 6 0 0 0 + 6 1 0 1 + 6 0 1 0 + 6 1 1 1 + 6 0 2 0 + 6 1 2 1 + 6 0 3 0 + 6 1 3 1 + 6 0 4 0 + 6 1 4 1 + 6 0 5 0 + 6 1 5 1 + 6 0 6 0 + 6 1 6 1 + 6 0 7 0 + 6 1 7 1 + 6 0 8 0 + 6 1 8 1 + 6 0 9 0 + 6 1 9 1 + 6 0 10 0 + 6 1 10 1 + 6 0 11 0 + 6 1 11 1 + 6 0 12 0 + 6 1 12 1 + 6 0 13 0 + 6 1 13 1 + 6 0 14 0 + 6 1 14 1 + 6 0 15 0 + 6 1 15 1 + 7 0 0 0 + 7 1 0 1 + 7 0 1 0 + 7 1 1 1 + 7 0 2 0 + 7 1 2 1 + 7 0 3 0 + 7 1 3 1 + 7 0 4 0 + 7 1 4 1 + 7 0 5 0 + 7 1 5 1 + 7 0 6 0 + 7 1 6 1 + 7 0 7 0 + 7 1 7 1 + 7 0 8 0 + 7 1 8 1 + 7 0 9 0 + 7 1 9 1 + 7 0 10 0 + 7 1 10 1 + 7 0 11 0 + 7 1 11 1 + 7 0 12 0 + 7 1 12 1 + 7 0 13 0 + 7 1 13 1 + 7 0 14 0 + 7 1 14 1 + 7 0 15 0 + 7 1 15 1 + 8 0 0 0 + 8 1 0 1 + 8 0 1 0 + 8 1 1 1 + 8 0 2 0 + 8 1 2 1 + 8 0 3 0 + 8 1 3 1 + 8 0 4 0 + 8 1 4 1 + 8 0 5 0 + 8 1 5 1 + 8 0 6 0 + 8 1 6 1 + 8 0 7 0 + 8 1 7 1 + 8 0 8 0 + 8 1 8 1 + 8 0 9 0 + 8 1 9 1 + 8 0 10 0 + 8 1 10 1 + 8 0 11 0 + 8 1 11 1 + 8 0 12 0 + 8 1 12 1 + 8 0 13 0 + 8 1 13 1 + 8 0 14 0 + 8 1 14 1 + 8 0 15 0 + 8 1 15 1 + 9 0 0 0 + 9 1 0 1 + 9 0 1 0 + 9 1 1 1 + 9 0 2 0 + 9 1 2 1 + 9 0 3 0 + 9 1 3 1 + 9 0 4 0 + 9 1 4 1 + 9 0 5 0 + 9 1 5 1 + 9 0 6 0 + 9 1 6 1 + 9 0 7 0 + 9 1 7 1 + 9 0 8 0 + 9 1 8 1 + 9 0 9 0 + 9 1 9 1 + 9 0 10 0 + 9 1 10 1 + 9 0 11 0 + 9 1 11 1 + 9 0 12 0 + 9 1 12 1 + 9 0 13 0 + 9 1 13 1 + 9 0 14 0 + 9 1 14 1 + 9 0 15 0 + 9 1 15 1 + 10 0 0 0 + 10 1 0 1 + 10 0 1 0 + 10 1 1 1 + 10 0 2 0 + 10 1 2 1 + 10 0 3 0 + 10 1 3 1 + 10 0 4 0 + 10 1 4 1 + 10 0 5 0 + 10 1 5 1 + 10 0 6 0 + 10 1 6 1 + 10 0 7 0 + 10 1 7 1 + 10 0 8 0 + 10 1 8 1 + 10 0 9 0 + 10 1 9 1 + 10 0 10 0 + 10 1 10 1 + 10 0 11 0 + 10 1 11 1 + 10 0 12 0 + 10 1 12 1 + 10 0 13 0 + 10 1 13 1 + 10 0 14 0 + 10 1 14 1 + 10 0 15 0 + 10 1 15 1 + 11 0 0 0 + 11 1 0 1 + 11 0 1 0 + 11 1 1 1 + 11 0 2 0 + 11 1 2 1 + 11 0 3 0 + 11 1 3 1 + 11 0 4 0 + 11 1 4 1 + 11 0 5 0 + 11 1 5 1 + 11 0 6 0 + 11 1 6 1 + 11 0 7 0 + 11 1 7 1 + 11 0 8 0 + 11 1 8 1 + 11 0 9 0 + 11 1 9 1 + 11 0 10 0 + 11 1 10 1 + 11 0 11 0 + 11 1 11 1 + 11 0 12 0 + 11 1 12 1 + 11 0 13 0 + 11 1 13 1 + 11 0 14 0 + 11 1 14 1 + 11 0 15 0 + 11 1 15 1 + 12 0 0 0 + 12 1 0 1 + 12 0 1 0 + 12 1 1 1 + 12 0 2 0 + 12 1 2 1 + 12 0 3 0 + 12 1 3 1 + 12 0 4 0 + 12 1 4 1 + 12 0 5 0 + 12 1 5 1 + 12 0 6 0 + 12 1 6 1 + 12 0 7 0 + 12 1 7 1 + 12 0 8 0 + 12 1 8 1 + 12 0 9 0 + 12 1 9 1 + 12 0 10 0 + 12 1 10 1 + 12 0 11 0 + 12 1 11 1 + 12 0 12 0 + 12 1 12 1 + 12 0 13 0 + 12 1 13 1 + 12 0 14 0 + 12 1 14 1 + 12 0 15 0 + 12 1 15 1 + 13 0 0 0 + 13 1 0 1 + 13 0 1 0 + 13 1 1 1 + 13 0 2 0 + 13 1 2 1 + 13 0 3 0 + 13 1 3 1 + 13 0 4 0 + 13 1 4 1 + 13 0 5 0 + 13 1 5 1 + 13 0 6 0 + 13 1 6 1 + 13 0 7 0 + 13 1 7 1 + 13 0 8 0 + 13 1 8 1 + 13 0 9 0 + 13 1 9 1 + 13 0 10 0 + 13 1 10 1 + 13 0 11 0 + 13 1 11 1 + 13 0 12 0 + 13 1 12 1 + 13 0 13 0 + 13 1 13 1 + 13 0 14 0 + 13 1 14 1 + 13 0 15 0 + 13 1 15 1 + 14 0 0 0 + 14 1 0 1 + 14 0 1 0 + 14 1 1 1 + 14 0 2 0 + 14 1 2 1 + 14 0 3 0 + 14 1 3 1 + 14 0 4 0 + 14 1 4 1 + 14 0 5 0 + 14 1 5 1 + 14 0 6 0 + 14 1 6 1 + 14 0 7 0 + 14 1 7 1 + 14 0 8 0 + 14 1 8 1 + 14 0 9 0 + 14 1 9 1 + 14 0 10 0 + 14 1 10 1 + 14 0 11 0 + 14 1 11 1 + 14 0 12 0 + 14 1 12 1 + 14 0 13 0 + 14 1 13 1 + 14 0 14 0 + 14 1 14 1 + 14 0 15 0 + 14 1 15 1 + 15 0 0 0 + 15 1 0 1 + 15 0 1 0 + 15 1 1 1 + 15 0 2 0 + 15 1 2 1 + 15 0 3 0 + 15 1 3 1 + 15 0 4 0 + 15 1 4 1 + 15 0 5 0 + 15 1 5 1 + 15 0 6 0 + 15 1 6 1 + 15 0 7 0 + 15 1 7 1 + 15 0 8 0 + 15 1 8 1 + 15 0 9 0 + 15 1 9 1 + 15 0 10 0 + 15 1 10 1 + 15 0 11 0 + 15 1 11 1 + 15 0 12 0 + 15 1 12 1 + 15 0 13 0 + 15 1 13 1 + 15 0 14 0 + 15 1 14 1 + 15 0 15 0 + 15 1 15 1 diff --git a/samples/tutorial_2.2/green2 b/samples/tutorial_2.2/green2 new file mode 100644 index 00000000..3a2b11bb --- /dev/null +++ b/samples/tutorial_2.2/green2 @@ -0,0 +1,1541 @@ +================== +twobody 1536 +================== +================== +================== + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 1 + 0 1 0 1 0 0 0 0 + 0 1 0 1 0 1 0 1 + 0 0 0 0 0 1 0 1 + 0 1 0 1 0 0 0 0 + 0 0 0 0 1 0 1 0 + 0 0 0 0 1 1 1 1 + 0 1 0 1 1 0 1 0 + 0 1 0 1 1 1 1 1 + 0 0 1 0 1 1 0 1 + 0 1 1 1 1 0 0 0 + 0 0 0 0 2 0 2 0 + 0 0 0 0 2 1 2 1 + 0 1 0 1 2 0 2 0 + 0 1 0 1 2 1 2 1 + 0 0 2 0 2 1 0 1 + 0 1 2 1 2 0 0 0 + 0 0 0 0 3 0 3 0 + 0 0 0 0 3 1 3 1 + 0 1 0 1 3 0 3 0 + 0 1 0 1 3 1 3 1 + 0 0 3 0 3 1 0 1 + 0 1 3 1 3 0 0 0 + 0 0 0 0 4 0 4 0 + 0 0 0 0 4 1 4 1 + 0 1 0 1 4 0 4 0 + 0 1 0 1 4 1 4 1 + 0 0 4 0 4 1 0 1 + 0 1 4 1 4 0 0 0 + 0 0 0 0 5 0 5 0 + 0 0 0 0 5 1 5 1 + 0 1 0 1 5 0 5 0 + 0 1 0 1 5 1 5 1 + 0 0 5 0 5 1 0 1 + 0 1 5 1 5 0 0 0 + 0 0 0 0 6 0 6 0 + 0 0 0 0 6 1 6 1 + 0 1 0 1 6 0 6 0 + 0 1 0 1 6 1 6 1 + 0 0 6 0 6 1 0 1 + 0 1 6 1 6 0 0 0 + 0 0 0 0 7 0 7 0 + 0 0 0 0 7 1 7 1 + 0 1 0 1 7 0 7 0 + 0 1 0 1 7 1 7 1 + 0 0 7 0 7 1 0 1 + 0 1 7 1 7 0 0 0 + 0 0 0 0 8 0 8 0 + 0 0 0 0 8 1 8 1 + 0 1 0 1 8 0 8 0 + 0 1 0 1 8 1 8 1 + 0 0 8 0 8 1 0 1 + 0 1 8 1 8 0 0 0 + 0 0 0 0 9 0 9 0 + 0 0 0 0 9 1 9 1 + 0 1 0 1 9 0 9 0 + 0 1 0 1 9 1 9 1 + 0 0 9 0 9 1 0 1 + 0 1 9 1 9 0 0 0 + 0 0 0 0 10 0 10 0 + 0 0 0 0 10 1 10 1 + 0 1 0 1 10 0 10 0 + 0 1 0 1 10 1 10 1 + 0 0 10 0 10 1 0 1 + 0 1 10 1 10 0 0 0 + 0 0 0 0 11 0 11 0 + 0 0 0 0 11 1 11 1 + 0 1 0 1 11 0 11 0 + 0 1 0 1 11 1 11 1 + 0 0 11 0 11 1 0 1 + 0 1 11 1 11 0 0 0 + 0 0 0 0 12 0 12 0 + 0 0 0 0 12 1 12 1 + 0 1 0 1 12 0 12 0 + 0 1 0 1 12 1 12 1 + 0 0 12 0 12 1 0 1 + 0 1 12 1 12 0 0 0 + 0 0 0 0 13 0 13 0 + 0 0 0 0 13 1 13 1 + 0 1 0 1 13 0 13 0 + 0 1 0 1 13 1 13 1 + 0 0 13 0 13 1 0 1 + 0 1 13 1 13 0 0 0 + 0 0 0 0 14 0 14 0 + 0 0 0 0 14 1 14 1 + 0 1 0 1 14 0 14 0 + 0 1 0 1 14 1 14 1 + 0 0 14 0 14 1 0 1 + 0 1 14 1 14 0 0 0 + 0 0 0 0 15 0 15 0 + 0 0 0 0 15 1 15 1 + 0 1 0 1 15 0 15 0 + 0 1 0 1 15 1 15 1 + 0 0 15 0 15 1 0 1 + 0 1 15 1 15 0 0 0 + 1 0 1 0 0 0 0 0 + 1 0 1 0 0 1 0 1 + 1 1 1 1 0 0 0 0 + 1 1 1 1 0 1 0 1 + 1 0 0 0 0 1 1 1 + 1 1 0 1 0 0 1 0 + 1 0 1 0 1 0 1 0 + 1 0 1 0 1 1 1 1 + 1 1 1 1 1 0 1 0 + 1 1 1 1 1 1 1 1 + 1 0 1 0 1 1 1 1 + 1 1 1 1 1 0 1 0 + 1 0 1 0 2 0 2 0 + 1 0 1 0 2 1 2 1 + 1 1 1 1 2 0 2 0 + 1 1 1 1 2 1 2 1 + 1 0 2 0 2 1 1 1 + 1 1 2 1 2 0 1 0 + 1 0 1 0 3 0 3 0 + 1 0 1 0 3 1 3 1 + 1 1 1 1 3 0 3 0 + 1 1 1 1 3 1 3 1 + 1 0 3 0 3 1 1 1 + 1 1 3 1 3 0 1 0 + 1 0 1 0 4 0 4 0 + 1 0 1 0 4 1 4 1 + 1 1 1 1 4 0 4 0 + 1 1 1 1 4 1 4 1 + 1 0 4 0 4 1 1 1 + 1 1 4 1 4 0 1 0 + 1 0 1 0 5 0 5 0 + 1 0 1 0 5 1 5 1 + 1 1 1 1 5 0 5 0 + 1 1 1 1 5 1 5 1 + 1 0 5 0 5 1 1 1 + 1 1 5 1 5 0 1 0 + 1 0 1 0 6 0 6 0 + 1 0 1 0 6 1 6 1 + 1 1 1 1 6 0 6 0 + 1 1 1 1 6 1 6 1 + 1 0 6 0 6 1 1 1 + 1 1 6 1 6 0 1 0 + 1 0 1 0 7 0 7 0 + 1 0 1 0 7 1 7 1 + 1 1 1 1 7 0 7 0 + 1 1 1 1 7 1 7 1 + 1 0 7 0 7 1 1 1 + 1 1 7 1 7 0 1 0 + 1 0 1 0 8 0 8 0 + 1 0 1 0 8 1 8 1 + 1 1 1 1 8 0 8 0 + 1 1 1 1 8 1 8 1 + 1 0 8 0 8 1 1 1 + 1 1 8 1 8 0 1 0 + 1 0 1 0 9 0 9 0 + 1 0 1 0 9 1 9 1 + 1 1 1 1 9 0 9 0 + 1 1 1 1 9 1 9 1 + 1 0 9 0 9 1 1 1 + 1 1 9 1 9 0 1 0 + 1 0 1 0 10 0 10 0 + 1 0 1 0 10 1 10 1 + 1 1 1 1 10 0 10 0 + 1 1 1 1 10 1 10 1 + 1 0 10 0 10 1 1 1 + 1 1 10 1 10 0 1 0 + 1 0 1 0 11 0 11 0 + 1 0 1 0 11 1 11 1 + 1 1 1 1 11 0 11 0 + 1 1 1 1 11 1 11 1 + 1 0 11 0 11 1 1 1 + 1 1 11 1 11 0 1 0 + 1 0 1 0 12 0 12 0 + 1 0 1 0 12 1 12 1 + 1 1 1 1 12 0 12 0 + 1 1 1 1 12 1 12 1 + 1 0 12 0 12 1 1 1 + 1 1 12 1 12 0 1 0 + 1 0 1 0 13 0 13 0 + 1 0 1 0 13 1 13 1 + 1 1 1 1 13 0 13 0 + 1 1 1 1 13 1 13 1 + 1 0 13 0 13 1 1 1 + 1 1 13 1 13 0 1 0 + 1 0 1 0 14 0 14 0 + 1 0 1 0 14 1 14 1 + 1 1 1 1 14 0 14 0 + 1 1 1 1 14 1 14 1 + 1 0 14 0 14 1 1 1 + 1 1 14 1 14 0 1 0 + 1 0 1 0 15 0 15 0 + 1 0 1 0 15 1 15 1 + 1 1 1 1 15 0 15 0 + 1 1 1 1 15 1 15 1 + 1 0 15 0 15 1 1 1 + 1 1 15 1 15 0 1 0 + 2 0 2 0 0 0 0 0 + 2 0 2 0 0 1 0 1 + 2 1 2 1 0 0 0 0 + 2 1 2 1 0 1 0 1 + 2 0 0 0 0 1 2 1 + 2 1 0 1 0 0 2 0 + 2 0 2 0 1 0 1 0 + 2 0 2 0 1 1 1 1 + 2 1 2 1 1 0 1 0 + 2 1 2 1 1 1 1 1 + 2 0 1 0 1 1 2 1 + 2 1 1 1 1 0 2 0 + 2 0 2 0 2 0 2 0 + 2 0 2 0 2 1 2 1 + 2 1 2 1 2 0 2 0 + 2 1 2 1 2 1 2 1 + 2 0 2 0 2 1 2 1 + 2 1 2 1 2 0 2 0 + 2 0 2 0 3 0 3 0 + 2 0 2 0 3 1 3 1 + 2 1 2 1 3 0 3 0 + 2 1 2 1 3 1 3 1 + 2 0 3 0 3 1 2 1 + 2 1 3 1 3 0 2 0 + 2 0 2 0 4 0 4 0 + 2 0 2 0 4 1 4 1 + 2 1 2 1 4 0 4 0 + 2 1 2 1 4 1 4 1 + 2 0 4 0 4 1 2 1 + 2 1 4 1 4 0 2 0 + 2 0 2 0 5 0 5 0 + 2 0 2 0 5 1 5 1 + 2 1 2 1 5 0 5 0 + 2 1 2 1 5 1 5 1 + 2 0 5 0 5 1 2 1 + 2 1 5 1 5 0 2 0 + 2 0 2 0 6 0 6 0 + 2 0 2 0 6 1 6 1 + 2 1 2 1 6 0 6 0 + 2 1 2 1 6 1 6 1 + 2 0 6 0 6 1 2 1 + 2 1 6 1 6 0 2 0 + 2 0 2 0 7 0 7 0 + 2 0 2 0 7 1 7 1 + 2 1 2 1 7 0 7 0 + 2 1 2 1 7 1 7 1 + 2 0 7 0 7 1 2 1 + 2 1 7 1 7 0 2 0 + 2 0 2 0 8 0 8 0 + 2 0 2 0 8 1 8 1 + 2 1 2 1 8 0 8 0 + 2 1 2 1 8 1 8 1 + 2 0 8 0 8 1 2 1 + 2 1 8 1 8 0 2 0 + 2 0 2 0 9 0 9 0 + 2 0 2 0 9 1 9 1 + 2 1 2 1 9 0 9 0 + 2 1 2 1 9 1 9 1 + 2 0 9 0 9 1 2 1 + 2 1 9 1 9 0 2 0 + 2 0 2 0 10 0 10 0 + 2 0 2 0 10 1 10 1 + 2 1 2 1 10 0 10 0 + 2 1 2 1 10 1 10 1 + 2 0 10 0 10 1 2 1 + 2 1 10 1 10 0 2 0 + 2 0 2 0 11 0 11 0 + 2 0 2 0 11 1 11 1 + 2 1 2 1 11 0 11 0 + 2 1 2 1 11 1 11 1 + 2 0 11 0 11 1 2 1 + 2 1 11 1 11 0 2 0 + 2 0 2 0 12 0 12 0 + 2 0 2 0 12 1 12 1 + 2 1 2 1 12 0 12 0 + 2 1 2 1 12 1 12 1 + 2 0 12 0 12 1 2 1 + 2 1 12 1 12 0 2 0 + 2 0 2 0 13 0 13 0 + 2 0 2 0 13 1 13 1 + 2 1 2 1 13 0 13 0 + 2 1 2 1 13 1 13 1 + 2 0 13 0 13 1 2 1 + 2 1 13 1 13 0 2 0 + 2 0 2 0 14 0 14 0 + 2 0 2 0 14 1 14 1 + 2 1 2 1 14 0 14 0 + 2 1 2 1 14 1 14 1 + 2 0 14 0 14 1 2 1 + 2 1 14 1 14 0 2 0 + 2 0 2 0 15 0 15 0 + 2 0 2 0 15 1 15 1 + 2 1 2 1 15 0 15 0 + 2 1 2 1 15 1 15 1 + 2 0 15 0 15 1 2 1 + 2 1 15 1 15 0 2 0 + 3 0 3 0 0 0 0 0 + 3 0 3 0 0 1 0 1 + 3 1 3 1 0 0 0 0 + 3 1 3 1 0 1 0 1 + 3 0 0 0 0 1 3 1 + 3 1 0 1 0 0 3 0 + 3 0 3 0 1 0 1 0 + 3 0 3 0 1 1 1 1 + 3 1 3 1 1 0 1 0 + 3 1 3 1 1 1 1 1 + 3 0 1 0 1 1 3 1 + 3 1 1 1 1 0 3 0 + 3 0 3 0 2 0 2 0 + 3 0 3 0 2 1 2 1 + 3 1 3 1 2 0 2 0 + 3 1 3 1 2 1 2 1 + 3 0 2 0 2 1 3 1 + 3 1 2 1 2 0 3 0 + 3 0 3 0 3 0 3 0 + 3 0 3 0 3 1 3 1 + 3 1 3 1 3 0 3 0 + 3 1 3 1 3 1 3 1 + 3 0 3 0 3 1 3 1 + 3 1 3 1 3 0 3 0 + 3 0 3 0 4 0 4 0 + 3 0 3 0 4 1 4 1 + 3 1 3 1 4 0 4 0 + 3 1 3 1 4 1 4 1 + 3 0 4 0 4 1 3 1 + 3 1 4 1 4 0 3 0 + 3 0 3 0 5 0 5 0 + 3 0 3 0 5 1 5 1 + 3 1 3 1 5 0 5 0 + 3 1 3 1 5 1 5 1 + 3 0 5 0 5 1 3 1 + 3 1 5 1 5 0 3 0 + 3 0 3 0 6 0 6 0 + 3 0 3 0 6 1 6 1 + 3 1 3 1 6 0 6 0 + 3 1 3 1 6 1 6 1 + 3 0 6 0 6 1 3 1 + 3 1 6 1 6 0 3 0 + 3 0 3 0 7 0 7 0 + 3 0 3 0 7 1 7 1 + 3 1 3 1 7 0 7 0 + 3 1 3 1 7 1 7 1 + 3 0 7 0 7 1 3 1 + 3 1 7 1 7 0 3 0 + 3 0 3 0 8 0 8 0 + 3 0 3 0 8 1 8 1 + 3 1 3 1 8 0 8 0 + 3 1 3 1 8 1 8 1 + 3 0 8 0 8 1 3 1 + 3 1 8 1 8 0 3 0 + 3 0 3 0 9 0 9 0 + 3 0 3 0 9 1 9 1 + 3 1 3 1 9 0 9 0 + 3 1 3 1 9 1 9 1 + 3 0 9 0 9 1 3 1 + 3 1 9 1 9 0 3 0 + 3 0 3 0 10 0 10 0 + 3 0 3 0 10 1 10 1 + 3 1 3 1 10 0 10 0 + 3 1 3 1 10 1 10 1 + 3 0 10 0 10 1 3 1 + 3 1 10 1 10 0 3 0 + 3 0 3 0 11 0 11 0 + 3 0 3 0 11 1 11 1 + 3 1 3 1 11 0 11 0 + 3 1 3 1 11 1 11 1 + 3 0 11 0 11 1 3 1 + 3 1 11 1 11 0 3 0 + 3 0 3 0 12 0 12 0 + 3 0 3 0 12 1 12 1 + 3 1 3 1 12 0 12 0 + 3 1 3 1 12 1 12 1 + 3 0 12 0 12 1 3 1 + 3 1 12 1 12 0 3 0 + 3 0 3 0 13 0 13 0 + 3 0 3 0 13 1 13 1 + 3 1 3 1 13 0 13 0 + 3 1 3 1 13 1 13 1 + 3 0 13 0 13 1 3 1 + 3 1 13 1 13 0 3 0 + 3 0 3 0 14 0 14 0 + 3 0 3 0 14 1 14 1 + 3 1 3 1 14 0 14 0 + 3 1 3 1 14 1 14 1 + 3 0 14 0 14 1 3 1 + 3 1 14 1 14 0 3 0 + 3 0 3 0 15 0 15 0 + 3 0 3 0 15 1 15 1 + 3 1 3 1 15 0 15 0 + 3 1 3 1 15 1 15 1 + 3 0 15 0 15 1 3 1 + 3 1 15 1 15 0 3 0 + 4 0 4 0 0 0 0 0 + 4 0 4 0 0 1 0 1 + 4 1 4 1 0 0 0 0 + 4 1 4 1 0 1 0 1 + 4 0 0 0 0 1 4 1 + 4 1 0 1 0 0 4 0 + 4 0 4 0 1 0 1 0 + 4 0 4 0 1 1 1 1 + 4 1 4 1 1 0 1 0 + 4 1 4 1 1 1 1 1 + 4 0 1 0 1 1 4 1 + 4 1 1 1 1 0 4 0 + 4 0 4 0 2 0 2 0 + 4 0 4 0 2 1 2 1 + 4 1 4 1 2 0 2 0 + 4 1 4 1 2 1 2 1 + 4 0 2 0 2 1 4 1 + 4 1 2 1 2 0 4 0 + 4 0 4 0 3 0 3 0 + 4 0 4 0 3 1 3 1 + 4 1 4 1 3 0 3 0 + 4 1 4 1 3 1 3 1 + 4 0 3 0 3 1 4 1 + 4 1 3 1 3 0 4 0 + 4 0 4 0 4 0 4 0 + 4 0 4 0 4 1 4 1 + 4 1 4 1 4 0 4 0 + 4 1 4 1 4 1 4 1 + 4 0 4 0 4 1 4 1 + 4 1 4 1 4 0 4 0 + 4 0 4 0 5 0 5 0 + 4 0 4 0 5 1 5 1 + 4 1 4 1 5 0 5 0 + 4 1 4 1 5 1 5 1 + 4 0 5 0 5 1 4 1 + 4 1 5 1 5 0 4 0 + 4 0 4 0 6 0 6 0 + 4 0 4 0 6 1 6 1 + 4 1 4 1 6 0 6 0 + 4 1 4 1 6 1 6 1 + 4 0 6 0 6 1 4 1 + 4 1 6 1 6 0 4 0 + 4 0 4 0 7 0 7 0 + 4 0 4 0 7 1 7 1 + 4 1 4 1 7 0 7 0 + 4 1 4 1 7 1 7 1 + 4 0 7 0 7 1 4 1 + 4 1 7 1 7 0 4 0 + 4 0 4 0 8 0 8 0 + 4 0 4 0 8 1 8 1 + 4 1 4 1 8 0 8 0 + 4 1 4 1 8 1 8 1 + 4 0 8 0 8 1 4 1 + 4 1 8 1 8 0 4 0 + 4 0 4 0 9 0 9 0 + 4 0 4 0 9 1 9 1 + 4 1 4 1 9 0 9 0 + 4 1 4 1 9 1 9 1 + 4 0 9 0 9 1 4 1 + 4 1 9 1 9 0 4 0 + 4 0 4 0 10 0 10 0 + 4 0 4 0 10 1 10 1 + 4 1 4 1 10 0 10 0 + 4 1 4 1 10 1 10 1 + 4 0 10 0 10 1 4 1 + 4 1 10 1 10 0 4 0 + 4 0 4 0 11 0 11 0 + 4 0 4 0 11 1 11 1 + 4 1 4 1 11 0 11 0 + 4 1 4 1 11 1 11 1 + 4 0 11 0 11 1 4 1 + 4 1 11 1 11 0 4 0 + 4 0 4 0 12 0 12 0 + 4 0 4 0 12 1 12 1 + 4 1 4 1 12 0 12 0 + 4 1 4 1 12 1 12 1 + 4 0 12 0 12 1 4 1 + 4 1 12 1 12 0 4 0 + 4 0 4 0 13 0 13 0 + 4 0 4 0 13 1 13 1 + 4 1 4 1 13 0 13 0 + 4 1 4 1 13 1 13 1 + 4 0 13 0 13 1 4 1 + 4 1 13 1 13 0 4 0 + 4 0 4 0 14 0 14 0 + 4 0 4 0 14 1 14 1 + 4 1 4 1 14 0 14 0 + 4 1 4 1 14 1 14 1 + 4 0 14 0 14 1 4 1 + 4 1 14 1 14 0 4 0 + 4 0 4 0 15 0 15 0 + 4 0 4 0 15 1 15 1 + 4 1 4 1 15 0 15 0 + 4 1 4 1 15 1 15 1 + 4 0 15 0 15 1 4 1 + 4 1 15 1 15 0 4 0 + 5 0 5 0 0 0 0 0 + 5 0 5 0 0 1 0 1 + 5 1 5 1 0 0 0 0 + 5 1 5 1 0 1 0 1 + 5 0 0 0 0 1 5 1 + 5 1 0 1 0 0 5 0 + 5 0 5 0 1 0 1 0 + 5 0 5 0 1 1 1 1 + 5 1 5 1 1 0 1 0 + 5 1 5 1 1 1 1 1 + 5 0 1 0 1 1 5 1 + 5 1 1 1 1 0 5 0 + 5 0 5 0 2 0 2 0 + 5 0 5 0 2 1 2 1 + 5 1 5 1 2 0 2 0 + 5 1 5 1 2 1 2 1 + 5 0 2 0 2 1 5 1 + 5 1 2 1 2 0 5 0 + 5 0 5 0 3 0 3 0 + 5 0 5 0 3 1 3 1 + 5 1 5 1 3 0 3 0 + 5 1 5 1 3 1 3 1 + 5 0 3 0 3 1 5 1 + 5 1 3 1 3 0 5 0 + 5 0 5 0 4 0 4 0 + 5 0 5 0 4 1 4 1 + 5 1 5 1 4 0 4 0 + 5 1 5 1 4 1 4 1 + 5 0 4 0 4 1 5 1 + 5 1 4 1 4 0 5 0 + 5 0 5 0 5 0 5 0 + 5 0 5 0 5 1 5 1 + 5 1 5 1 5 0 5 0 + 5 1 5 1 5 1 5 1 + 5 0 5 0 5 1 5 1 + 5 1 5 1 5 0 5 0 + 5 0 5 0 6 0 6 0 + 5 0 5 0 6 1 6 1 + 5 1 5 1 6 0 6 0 + 5 1 5 1 6 1 6 1 + 5 0 6 0 6 1 5 1 + 5 1 6 1 6 0 5 0 + 5 0 5 0 7 0 7 0 + 5 0 5 0 7 1 7 1 + 5 1 5 1 7 0 7 0 + 5 1 5 1 7 1 7 1 + 5 0 7 0 7 1 5 1 + 5 1 7 1 7 0 5 0 + 5 0 5 0 8 0 8 0 + 5 0 5 0 8 1 8 1 + 5 1 5 1 8 0 8 0 + 5 1 5 1 8 1 8 1 + 5 0 8 0 8 1 5 1 + 5 1 8 1 8 0 5 0 + 5 0 5 0 9 0 9 0 + 5 0 5 0 9 1 9 1 + 5 1 5 1 9 0 9 0 + 5 1 5 1 9 1 9 1 + 5 0 9 0 9 1 5 1 + 5 1 9 1 9 0 5 0 + 5 0 5 0 10 0 10 0 + 5 0 5 0 10 1 10 1 + 5 1 5 1 10 0 10 0 + 5 1 5 1 10 1 10 1 + 5 0 10 0 10 1 5 1 + 5 1 10 1 10 0 5 0 + 5 0 5 0 11 0 11 0 + 5 0 5 0 11 1 11 1 + 5 1 5 1 11 0 11 0 + 5 1 5 1 11 1 11 1 + 5 0 11 0 11 1 5 1 + 5 1 11 1 11 0 5 0 + 5 0 5 0 12 0 12 0 + 5 0 5 0 12 1 12 1 + 5 1 5 1 12 0 12 0 + 5 1 5 1 12 1 12 1 + 5 0 12 0 12 1 5 1 + 5 1 12 1 12 0 5 0 + 5 0 5 0 13 0 13 0 + 5 0 5 0 13 1 13 1 + 5 1 5 1 13 0 13 0 + 5 1 5 1 13 1 13 1 + 5 0 13 0 13 1 5 1 + 5 1 13 1 13 0 5 0 + 5 0 5 0 14 0 14 0 + 5 0 5 0 14 1 14 1 + 5 1 5 1 14 0 14 0 + 5 1 5 1 14 1 14 1 + 5 0 14 0 14 1 5 1 + 5 1 14 1 14 0 5 0 + 5 0 5 0 15 0 15 0 + 5 0 5 0 15 1 15 1 + 5 1 5 1 15 0 15 0 + 5 1 5 1 15 1 15 1 + 5 0 15 0 15 1 5 1 + 5 1 15 1 15 0 5 0 + 6 0 6 0 0 0 0 0 + 6 0 6 0 0 1 0 1 + 6 1 6 1 0 0 0 0 + 6 1 6 1 0 1 0 1 + 6 0 0 0 0 1 6 1 + 6 1 0 1 0 0 6 0 + 6 0 6 0 1 0 1 0 + 6 0 6 0 1 1 1 1 + 6 1 6 1 1 0 1 0 + 6 1 6 1 1 1 1 1 + 6 0 1 0 1 1 6 1 + 6 1 1 1 1 0 6 0 + 6 0 6 0 2 0 2 0 + 6 0 6 0 2 1 2 1 + 6 1 6 1 2 0 2 0 + 6 1 6 1 2 1 2 1 + 6 0 2 0 2 1 6 1 + 6 1 2 1 2 0 6 0 + 6 0 6 0 3 0 3 0 + 6 0 6 0 3 1 3 1 + 6 1 6 1 3 0 3 0 + 6 1 6 1 3 1 3 1 + 6 0 3 0 3 1 6 1 + 6 1 3 1 3 0 6 0 + 6 0 6 0 4 0 4 0 + 6 0 6 0 4 1 4 1 + 6 1 6 1 4 0 4 0 + 6 1 6 1 4 1 4 1 + 6 0 4 0 4 1 6 1 + 6 1 4 1 4 0 6 0 + 6 0 6 0 5 0 5 0 + 6 0 6 0 5 1 5 1 + 6 1 6 1 5 0 5 0 + 6 1 6 1 5 1 5 1 + 6 0 5 0 5 1 6 1 + 6 1 5 1 5 0 6 0 + 6 0 6 0 6 0 6 0 + 6 0 6 0 6 1 6 1 + 6 1 6 1 6 0 6 0 + 6 1 6 1 6 1 6 1 + 6 0 6 0 6 1 6 1 + 6 1 6 1 6 0 6 0 + 6 0 6 0 7 0 7 0 + 6 0 6 0 7 1 7 1 + 6 1 6 1 7 0 7 0 + 6 1 6 1 7 1 7 1 + 6 0 7 0 7 1 6 1 + 6 1 7 1 7 0 6 0 + 6 0 6 0 8 0 8 0 + 6 0 6 0 8 1 8 1 + 6 1 6 1 8 0 8 0 + 6 1 6 1 8 1 8 1 + 6 0 8 0 8 1 6 1 + 6 1 8 1 8 0 6 0 + 6 0 6 0 9 0 9 0 + 6 0 6 0 9 1 9 1 + 6 1 6 1 9 0 9 0 + 6 1 6 1 9 1 9 1 + 6 0 9 0 9 1 6 1 + 6 1 9 1 9 0 6 0 + 6 0 6 0 10 0 10 0 + 6 0 6 0 10 1 10 1 + 6 1 6 1 10 0 10 0 + 6 1 6 1 10 1 10 1 + 6 0 10 0 10 1 6 1 + 6 1 10 1 10 0 6 0 + 6 0 6 0 11 0 11 0 + 6 0 6 0 11 1 11 1 + 6 1 6 1 11 0 11 0 + 6 1 6 1 11 1 11 1 + 6 0 11 0 11 1 6 1 + 6 1 11 1 11 0 6 0 + 6 0 6 0 12 0 12 0 + 6 0 6 0 12 1 12 1 + 6 1 6 1 12 0 12 0 + 6 1 6 1 12 1 12 1 + 6 0 12 0 12 1 6 1 + 6 1 12 1 12 0 6 0 + 6 0 6 0 13 0 13 0 + 6 0 6 0 13 1 13 1 + 6 1 6 1 13 0 13 0 + 6 1 6 1 13 1 13 1 + 6 0 13 0 13 1 6 1 + 6 1 13 1 13 0 6 0 + 6 0 6 0 14 0 14 0 + 6 0 6 0 14 1 14 1 + 6 1 6 1 14 0 14 0 + 6 1 6 1 14 1 14 1 + 6 0 14 0 14 1 6 1 + 6 1 14 1 14 0 6 0 + 6 0 6 0 15 0 15 0 + 6 0 6 0 15 1 15 1 + 6 1 6 1 15 0 15 0 + 6 1 6 1 15 1 15 1 + 6 0 15 0 15 1 6 1 + 6 1 15 1 15 0 6 0 + 7 0 7 0 0 0 0 0 + 7 0 7 0 0 1 0 1 + 7 1 7 1 0 0 0 0 + 7 1 7 1 0 1 0 1 + 7 0 0 0 0 1 7 1 + 7 1 0 1 0 0 7 0 + 7 0 7 0 1 0 1 0 + 7 0 7 0 1 1 1 1 + 7 1 7 1 1 0 1 0 + 7 1 7 1 1 1 1 1 + 7 0 1 0 1 1 7 1 + 7 1 1 1 1 0 7 0 + 7 0 7 0 2 0 2 0 + 7 0 7 0 2 1 2 1 + 7 1 7 1 2 0 2 0 + 7 1 7 1 2 1 2 1 + 7 0 2 0 2 1 7 1 + 7 1 2 1 2 0 7 0 + 7 0 7 0 3 0 3 0 + 7 0 7 0 3 1 3 1 + 7 1 7 1 3 0 3 0 + 7 1 7 1 3 1 3 1 + 7 0 3 0 3 1 7 1 + 7 1 3 1 3 0 7 0 + 7 0 7 0 4 0 4 0 + 7 0 7 0 4 1 4 1 + 7 1 7 1 4 0 4 0 + 7 1 7 1 4 1 4 1 + 7 0 4 0 4 1 7 1 + 7 1 4 1 4 0 7 0 + 7 0 7 0 5 0 5 0 + 7 0 7 0 5 1 5 1 + 7 1 7 1 5 0 5 0 + 7 1 7 1 5 1 5 1 + 7 0 5 0 5 1 7 1 + 7 1 5 1 5 0 7 0 + 7 0 7 0 6 0 6 0 + 7 0 7 0 6 1 6 1 + 7 1 7 1 6 0 6 0 + 7 1 7 1 6 1 6 1 + 7 0 6 0 6 1 7 1 + 7 1 6 1 6 0 7 0 + 7 0 7 0 7 0 7 0 + 7 0 7 0 7 1 7 1 + 7 1 7 1 7 0 7 0 + 7 1 7 1 7 1 7 1 + 7 0 7 0 7 1 7 1 + 7 1 7 1 7 0 7 0 + 7 0 7 0 8 0 8 0 + 7 0 7 0 8 1 8 1 + 7 1 7 1 8 0 8 0 + 7 1 7 1 8 1 8 1 + 7 0 8 0 8 1 7 1 + 7 1 8 1 8 0 7 0 + 7 0 7 0 9 0 9 0 + 7 0 7 0 9 1 9 1 + 7 1 7 1 9 0 9 0 + 7 1 7 1 9 1 9 1 + 7 0 9 0 9 1 7 1 + 7 1 9 1 9 0 7 0 + 7 0 7 0 10 0 10 0 + 7 0 7 0 10 1 10 1 + 7 1 7 1 10 0 10 0 + 7 1 7 1 10 1 10 1 + 7 0 10 0 10 1 7 1 + 7 1 10 1 10 0 7 0 + 7 0 7 0 11 0 11 0 + 7 0 7 0 11 1 11 1 + 7 1 7 1 11 0 11 0 + 7 1 7 1 11 1 11 1 + 7 0 11 0 11 1 7 1 + 7 1 11 1 11 0 7 0 + 7 0 7 0 12 0 12 0 + 7 0 7 0 12 1 12 1 + 7 1 7 1 12 0 12 0 + 7 1 7 1 12 1 12 1 + 7 0 12 0 12 1 7 1 + 7 1 12 1 12 0 7 0 + 7 0 7 0 13 0 13 0 + 7 0 7 0 13 1 13 1 + 7 1 7 1 13 0 13 0 + 7 1 7 1 13 1 13 1 + 7 0 13 0 13 1 7 1 + 7 1 13 1 13 0 7 0 + 7 0 7 0 14 0 14 0 + 7 0 7 0 14 1 14 1 + 7 1 7 1 14 0 14 0 + 7 1 7 1 14 1 14 1 + 7 0 14 0 14 1 7 1 + 7 1 14 1 14 0 7 0 + 7 0 7 0 15 0 15 0 + 7 0 7 0 15 1 15 1 + 7 1 7 1 15 0 15 0 + 7 1 7 1 15 1 15 1 + 7 0 15 0 15 1 7 1 + 7 1 15 1 15 0 7 0 + 8 0 8 0 0 0 0 0 + 8 0 8 0 0 1 0 1 + 8 1 8 1 0 0 0 0 + 8 1 8 1 0 1 0 1 + 8 0 0 0 0 1 8 1 + 8 1 0 1 0 0 8 0 + 8 0 8 0 1 0 1 0 + 8 0 8 0 1 1 1 1 + 8 1 8 1 1 0 1 0 + 8 1 8 1 1 1 1 1 + 8 0 1 0 1 1 8 1 + 8 1 1 1 1 0 8 0 + 8 0 8 0 2 0 2 0 + 8 0 8 0 2 1 2 1 + 8 1 8 1 2 0 2 0 + 8 1 8 1 2 1 2 1 + 8 0 2 0 2 1 8 1 + 8 1 2 1 2 0 8 0 + 8 0 8 0 3 0 3 0 + 8 0 8 0 3 1 3 1 + 8 1 8 1 3 0 3 0 + 8 1 8 1 3 1 3 1 + 8 0 3 0 3 1 8 1 + 8 1 3 1 3 0 8 0 + 8 0 8 0 4 0 4 0 + 8 0 8 0 4 1 4 1 + 8 1 8 1 4 0 4 0 + 8 1 8 1 4 1 4 1 + 8 0 4 0 4 1 8 1 + 8 1 4 1 4 0 8 0 + 8 0 8 0 5 0 5 0 + 8 0 8 0 5 1 5 1 + 8 1 8 1 5 0 5 0 + 8 1 8 1 5 1 5 1 + 8 0 5 0 5 1 8 1 + 8 1 5 1 5 0 8 0 + 8 0 8 0 6 0 6 0 + 8 0 8 0 6 1 6 1 + 8 1 8 1 6 0 6 0 + 8 1 8 1 6 1 6 1 + 8 0 6 0 6 1 8 1 + 8 1 6 1 6 0 8 0 + 8 0 8 0 7 0 7 0 + 8 0 8 0 7 1 7 1 + 8 1 8 1 7 0 7 0 + 8 1 8 1 7 1 7 1 + 8 0 7 0 7 1 8 1 + 8 1 7 1 7 0 8 0 + 8 0 8 0 8 0 8 0 + 8 0 8 0 8 1 8 1 + 8 1 8 1 8 0 8 0 + 8 1 8 1 8 1 8 1 + 8 0 8 0 8 1 8 1 + 8 1 8 1 8 0 8 0 + 8 0 8 0 9 0 9 0 + 8 0 8 0 9 1 9 1 + 8 1 8 1 9 0 9 0 + 8 1 8 1 9 1 9 1 + 8 0 9 0 9 1 8 1 + 8 1 9 1 9 0 8 0 + 8 0 8 0 10 0 10 0 + 8 0 8 0 10 1 10 1 + 8 1 8 1 10 0 10 0 + 8 1 8 1 10 1 10 1 + 8 0 10 0 10 1 8 1 + 8 1 10 1 10 0 8 0 + 8 0 8 0 11 0 11 0 + 8 0 8 0 11 1 11 1 + 8 1 8 1 11 0 11 0 + 8 1 8 1 11 1 11 1 + 8 0 11 0 11 1 8 1 + 8 1 11 1 11 0 8 0 + 8 0 8 0 12 0 12 0 + 8 0 8 0 12 1 12 1 + 8 1 8 1 12 0 12 0 + 8 1 8 1 12 1 12 1 + 8 0 12 0 12 1 8 1 + 8 1 12 1 12 0 8 0 + 8 0 8 0 13 0 13 0 + 8 0 8 0 13 1 13 1 + 8 1 8 1 13 0 13 0 + 8 1 8 1 13 1 13 1 + 8 0 13 0 13 1 8 1 + 8 1 13 1 13 0 8 0 + 8 0 8 0 14 0 14 0 + 8 0 8 0 14 1 14 1 + 8 1 8 1 14 0 14 0 + 8 1 8 1 14 1 14 1 + 8 0 14 0 14 1 8 1 + 8 1 14 1 14 0 8 0 + 8 0 8 0 15 0 15 0 + 8 0 8 0 15 1 15 1 + 8 1 8 1 15 0 15 0 + 8 1 8 1 15 1 15 1 + 8 0 15 0 15 1 8 1 + 8 1 15 1 15 0 8 0 + 9 0 9 0 0 0 0 0 + 9 0 9 0 0 1 0 1 + 9 1 9 1 0 0 0 0 + 9 1 9 1 0 1 0 1 + 9 0 0 0 0 1 9 1 + 9 1 0 1 0 0 9 0 + 9 0 9 0 1 0 1 0 + 9 0 9 0 1 1 1 1 + 9 1 9 1 1 0 1 0 + 9 1 9 1 1 1 1 1 + 9 0 1 0 1 1 9 1 + 9 1 1 1 1 0 9 0 + 9 0 9 0 2 0 2 0 + 9 0 9 0 2 1 2 1 + 9 1 9 1 2 0 2 0 + 9 1 9 1 2 1 2 1 + 9 0 2 0 2 1 9 1 + 9 1 2 1 2 0 9 0 + 9 0 9 0 3 0 3 0 + 9 0 9 0 3 1 3 1 + 9 1 9 1 3 0 3 0 + 9 1 9 1 3 1 3 1 + 9 0 3 0 3 1 9 1 + 9 1 3 1 3 0 9 0 + 9 0 9 0 4 0 4 0 + 9 0 9 0 4 1 4 1 + 9 1 9 1 4 0 4 0 + 9 1 9 1 4 1 4 1 + 9 0 4 0 4 1 9 1 + 9 1 4 1 4 0 9 0 + 9 0 9 0 5 0 5 0 + 9 0 9 0 5 1 5 1 + 9 1 9 1 5 0 5 0 + 9 1 9 1 5 1 5 1 + 9 0 5 0 5 1 9 1 + 9 1 5 1 5 0 9 0 + 9 0 9 0 6 0 6 0 + 9 0 9 0 6 1 6 1 + 9 1 9 1 6 0 6 0 + 9 1 9 1 6 1 6 1 + 9 0 6 0 6 1 9 1 + 9 1 6 1 6 0 9 0 + 9 0 9 0 7 0 7 0 + 9 0 9 0 7 1 7 1 + 9 1 9 1 7 0 7 0 + 9 1 9 1 7 1 7 1 + 9 0 7 0 7 1 9 1 + 9 1 7 1 7 0 9 0 + 9 0 9 0 8 0 8 0 + 9 0 9 0 8 1 8 1 + 9 1 9 1 8 0 8 0 + 9 1 9 1 8 1 8 1 + 9 0 8 0 8 1 9 1 + 9 1 8 1 8 0 9 0 + 9 0 9 0 9 0 9 0 + 9 0 9 0 9 1 9 1 + 9 1 9 1 9 0 9 0 + 9 1 9 1 9 1 9 1 + 9 0 9 0 9 1 9 1 + 9 1 9 1 9 0 9 0 + 9 0 9 0 10 0 10 0 + 9 0 9 0 10 1 10 1 + 9 1 9 1 10 0 10 0 + 9 1 9 1 10 1 10 1 + 9 0 10 0 10 1 9 1 + 9 1 10 1 10 0 9 0 + 9 0 9 0 11 0 11 0 + 9 0 9 0 11 1 11 1 + 9 1 9 1 11 0 11 0 + 9 1 9 1 11 1 11 1 + 9 0 11 0 11 1 9 1 + 9 1 11 1 11 0 9 0 + 9 0 9 0 12 0 12 0 + 9 0 9 0 12 1 12 1 + 9 1 9 1 12 0 12 0 + 9 1 9 1 12 1 12 1 + 9 0 12 0 12 1 9 1 + 9 1 12 1 12 0 9 0 + 9 0 9 0 13 0 13 0 + 9 0 9 0 13 1 13 1 + 9 1 9 1 13 0 13 0 + 9 1 9 1 13 1 13 1 + 9 0 13 0 13 1 9 1 + 9 1 13 1 13 0 9 0 + 9 0 9 0 14 0 14 0 + 9 0 9 0 14 1 14 1 + 9 1 9 1 14 0 14 0 + 9 1 9 1 14 1 14 1 + 9 0 14 0 14 1 9 1 + 9 1 14 1 14 0 9 0 + 9 0 9 0 15 0 15 0 + 9 0 9 0 15 1 15 1 + 9 1 9 1 15 0 15 0 + 9 1 9 1 15 1 15 1 + 9 0 15 0 15 1 9 1 + 9 1 15 1 15 0 9 0 + 10 0 10 0 0 0 0 0 + 10 0 10 0 0 1 0 1 + 10 1 10 1 0 0 0 0 + 10 1 10 1 0 1 0 1 + 10 0 0 0 0 1 10 1 + 10 1 0 1 0 0 10 0 + 10 0 10 0 1 0 1 0 + 10 0 10 0 1 1 1 1 + 10 1 10 1 1 0 1 0 + 10 1 10 1 1 1 1 1 + 10 0 1 0 1 1 10 1 + 10 1 1 1 1 0 10 0 + 10 0 10 0 2 0 2 0 + 10 0 10 0 2 1 2 1 + 10 1 10 1 2 0 2 0 + 10 1 10 1 2 1 2 1 + 10 0 2 0 2 1 10 1 + 10 1 2 1 2 0 10 0 + 10 0 10 0 3 0 3 0 + 10 0 10 0 3 1 3 1 + 10 1 10 1 3 0 3 0 + 10 1 10 1 3 1 3 1 + 10 0 3 0 3 1 10 1 + 10 1 3 1 3 0 10 0 + 10 0 10 0 4 0 4 0 + 10 0 10 0 4 1 4 1 + 10 1 10 1 4 0 4 0 + 10 1 10 1 4 1 4 1 + 10 0 4 0 4 1 10 1 + 10 1 4 1 4 0 10 0 + 10 0 10 0 5 0 5 0 + 10 0 10 0 5 1 5 1 + 10 1 10 1 5 0 5 0 + 10 1 10 1 5 1 5 1 + 10 0 5 0 5 1 10 1 + 10 1 5 1 5 0 10 0 + 10 0 10 0 6 0 6 0 + 10 0 10 0 6 1 6 1 + 10 1 10 1 6 0 6 0 + 10 1 10 1 6 1 6 1 + 10 0 6 0 6 1 10 1 + 10 1 6 1 6 0 10 0 + 10 0 10 0 7 0 7 0 + 10 0 10 0 7 1 7 1 + 10 1 10 1 7 0 7 0 + 10 1 10 1 7 1 7 1 + 10 0 7 0 7 1 10 1 + 10 1 7 1 7 0 10 0 + 10 0 10 0 8 0 8 0 + 10 0 10 0 8 1 8 1 + 10 1 10 1 8 0 8 0 + 10 1 10 1 8 1 8 1 + 10 0 8 0 8 1 10 1 + 10 1 8 1 8 0 10 0 + 10 0 10 0 9 0 9 0 + 10 0 10 0 9 1 9 1 + 10 1 10 1 9 0 9 0 + 10 1 10 1 9 1 9 1 + 10 0 9 0 9 1 10 1 + 10 1 9 1 9 0 10 0 + 10 0 10 0 10 0 10 0 + 10 0 10 0 10 1 10 1 + 10 1 10 1 10 0 10 0 + 10 1 10 1 10 1 10 1 + 10 0 10 0 10 1 10 1 + 10 1 10 1 10 0 10 0 + 10 0 10 0 11 0 11 0 + 10 0 10 0 11 1 11 1 + 10 1 10 1 11 0 11 0 + 10 1 10 1 11 1 11 1 + 10 0 11 0 11 1 10 1 + 10 1 11 1 11 0 10 0 + 10 0 10 0 12 0 12 0 + 10 0 10 0 12 1 12 1 + 10 1 10 1 12 0 12 0 + 10 1 10 1 12 1 12 1 + 10 0 12 0 12 1 10 1 + 10 1 12 1 12 0 10 0 + 10 0 10 0 13 0 13 0 + 10 0 10 0 13 1 13 1 + 10 1 10 1 13 0 13 0 + 10 1 10 1 13 1 13 1 + 10 0 13 0 13 1 10 1 + 10 1 13 1 13 0 10 0 + 10 0 10 0 14 0 14 0 + 10 0 10 0 14 1 14 1 + 10 1 10 1 14 0 14 0 + 10 1 10 1 14 1 14 1 + 10 0 14 0 14 1 10 1 + 10 1 14 1 14 0 10 0 + 10 0 10 0 15 0 15 0 + 10 0 10 0 15 1 15 1 + 10 1 10 1 15 0 15 0 + 10 1 10 1 15 1 15 1 + 10 0 15 0 15 1 10 1 + 10 1 15 1 15 0 10 0 + 11 0 11 0 0 0 0 0 + 11 0 11 0 0 1 0 1 + 11 1 11 1 0 0 0 0 + 11 1 11 1 0 1 0 1 + 11 0 0 0 0 1 11 1 + 11 1 0 1 0 0 11 0 + 11 0 11 0 1 0 1 0 + 11 0 11 0 1 1 1 1 + 11 1 11 1 1 0 1 0 + 11 1 11 1 1 1 1 1 + 11 0 1 0 1 1 11 1 + 11 1 1 1 1 0 11 0 + 11 0 11 0 2 0 2 0 + 11 0 11 0 2 1 2 1 + 11 1 11 1 2 0 2 0 + 11 1 11 1 2 1 2 1 + 11 0 2 0 2 1 11 1 + 11 1 2 1 2 0 11 0 + 11 0 11 0 3 0 3 0 + 11 0 11 0 3 1 3 1 + 11 1 11 1 3 0 3 0 + 11 1 11 1 3 1 3 1 + 11 0 3 0 3 1 11 1 + 11 1 3 1 3 0 11 0 + 11 0 11 0 4 0 4 0 + 11 0 11 0 4 1 4 1 + 11 1 11 1 4 0 4 0 + 11 1 11 1 4 1 4 1 + 11 0 4 0 4 1 11 1 + 11 1 4 1 4 0 11 0 + 11 0 11 0 5 0 5 0 + 11 0 11 0 5 1 5 1 + 11 1 11 1 5 0 5 0 + 11 1 11 1 5 1 5 1 + 11 0 5 0 5 1 11 1 + 11 1 5 1 5 0 11 0 + 11 0 11 0 6 0 6 0 + 11 0 11 0 6 1 6 1 + 11 1 11 1 6 0 6 0 + 11 1 11 1 6 1 6 1 + 11 0 6 0 6 1 11 1 + 11 1 6 1 6 0 11 0 + 11 0 11 0 7 0 7 0 + 11 0 11 0 7 1 7 1 + 11 1 11 1 7 0 7 0 + 11 1 11 1 7 1 7 1 + 11 0 7 0 7 1 11 1 + 11 1 7 1 7 0 11 0 + 11 0 11 0 8 0 8 0 + 11 0 11 0 8 1 8 1 + 11 1 11 1 8 0 8 0 + 11 1 11 1 8 1 8 1 + 11 0 8 0 8 1 11 1 + 11 1 8 1 8 0 11 0 + 11 0 11 0 9 0 9 0 + 11 0 11 0 9 1 9 1 + 11 1 11 1 9 0 9 0 + 11 1 11 1 9 1 9 1 + 11 0 9 0 9 1 11 1 + 11 1 9 1 9 0 11 0 + 11 0 11 0 10 0 10 0 + 11 0 11 0 10 1 10 1 + 11 1 11 1 10 0 10 0 + 11 1 11 1 10 1 10 1 + 11 0 10 0 10 1 11 1 + 11 1 10 1 10 0 11 0 + 11 0 11 0 11 0 11 0 + 11 0 11 0 11 1 11 1 + 11 1 11 1 11 0 11 0 + 11 1 11 1 11 1 11 1 + 11 0 11 0 11 1 11 1 + 11 1 11 1 11 0 11 0 + 11 0 11 0 12 0 12 0 + 11 0 11 0 12 1 12 1 + 11 1 11 1 12 0 12 0 + 11 1 11 1 12 1 12 1 + 11 0 12 0 12 1 11 1 + 11 1 12 1 12 0 11 0 + 11 0 11 0 13 0 13 0 + 11 0 11 0 13 1 13 1 + 11 1 11 1 13 0 13 0 + 11 1 11 1 13 1 13 1 + 11 0 13 0 13 1 11 1 + 11 1 13 1 13 0 11 0 + 11 0 11 0 14 0 14 0 + 11 0 11 0 14 1 14 1 + 11 1 11 1 14 0 14 0 + 11 1 11 1 14 1 14 1 + 11 0 14 0 14 1 11 1 + 11 1 14 1 14 0 11 0 + 11 0 11 0 15 0 15 0 + 11 0 11 0 15 1 15 1 + 11 1 11 1 15 0 15 0 + 11 1 11 1 15 1 15 1 + 11 0 15 0 15 1 11 1 + 11 1 15 1 15 0 11 0 + 12 0 12 0 0 0 0 0 + 12 0 12 0 0 1 0 1 + 12 1 12 1 0 0 0 0 + 12 1 12 1 0 1 0 1 + 12 0 0 0 0 1 12 1 + 12 1 0 1 0 0 12 0 + 12 0 12 0 1 0 1 0 + 12 0 12 0 1 1 1 1 + 12 1 12 1 1 0 1 0 + 12 1 12 1 1 1 1 1 + 12 0 1 0 1 1 12 1 + 12 1 1 1 1 0 12 0 + 12 0 12 0 2 0 2 0 + 12 0 12 0 2 1 2 1 + 12 1 12 1 2 0 2 0 + 12 1 12 1 2 1 2 1 + 12 0 2 0 2 1 12 1 + 12 1 2 1 2 0 12 0 + 12 0 12 0 3 0 3 0 + 12 0 12 0 3 1 3 1 + 12 1 12 1 3 0 3 0 + 12 1 12 1 3 1 3 1 + 12 0 3 0 3 1 12 1 + 12 1 3 1 3 0 12 0 + 12 0 12 0 4 0 4 0 + 12 0 12 0 4 1 4 1 + 12 1 12 1 4 0 4 0 + 12 1 12 1 4 1 4 1 + 12 0 4 0 4 1 12 1 + 12 1 4 1 4 0 12 0 + 12 0 12 0 5 0 5 0 + 12 0 12 0 5 1 5 1 + 12 1 12 1 5 0 5 0 + 12 1 12 1 5 1 5 1 + 12 0 5 0 5 1 12 1 + 12 1 5 1 5 0 12 0 + 12 0 12 0 6 0 6 0 + 12 0 12 0 6 1 6 1 + 12 1 12 1 6 0 6 0 + 12 1 12 1 6 1 6 1 + 12 0 6 0 6 1 12 1 + 12 1 6 1 6 0 12 0 + 12 0 12 0 7 0 7 0 + 12 0 12 0 7 1 7 1 + 12 1 12 1 7 0 7 0 + 12 1 12 1 7 1 7 1 + 12 0 7 0 7 1 12 1 + 12 1 7 1 7 0 12 0 + 12 0 12 0 8 0 8 0 + 12 0 12 0 8 1 8 1 + 12 1 12 1 8 0 8 0 + 12 1 12 1 8 1 8 1 + 12 0 8 0 8 1 12 1 + 12 1 8 1 8 0 12 0 + 12 0 12 0 9 0 9 0 + 12 0 12 0 9 1 9 1 + 12 1 12 1 9 0 9 0 + 12 1 12 1 9 1 9 1 + 12 0 9 0 9 1 12 1 + 12 1 9 1 9 0 12 0 + 12 0 12 0 10 0 10 0 + 12 0 12 0 10 1 10 1 + 12 1 12 1 10 0 10 0 + 12 1 12 1 10 1 10 1 + 12 0 10 0 10 1 12 1 + 12 1 10 1 10 0 12 0 + 12 0 12 0 11 0 11 0 + 12 0 12 0 11 1 11 1 + 12 1 12 1 11 0 11 0 + 12 1 12 1 11 1 11 1 + 12 0 11 0 11 1 12 1 + 12 1 11 1 11 0 12 0 + 12 0 12 0 12 0 12 0 + 12 0 12 0 12 1 12 1 + 12 1 12 1 12 0 12 0 + 12 1 12 1 12 1 12 1 + 12 0 12 0 12 1 12 1 + 12 1 12 1 12 0 12 0 + 12 0 12 0 13 0 13 0 + 12 0 12 0 13 1 13 1 + 12 1 12 1 13 0 13 0 + 12 1 12 1 13 1 13 1 + 12 0 13 0 13 1 12 1 + 12 1 13 1 13 0 12 0 + 12 0 12 0 14 0 14 0 + 12 0 12 0 14 1 14 1 + 12 1 12 1 14 0 14 0 + 12 1 12 1 14 1 14 1 + 12 0 14 0 14 1 12 1 + 12 1 14 1 14 0 12 0 + 12 0 12 0 15 0 15 0 + 12 0 12 0 15 1 15 1 + 12 1 12 1 15 0 15 0 + 12 1 12 1 15 1 15 1 + 12 0 15 0 15 1 12 1 + 12 1 15 1 15 0 12 0 + 13 0 13 0 0 0 0 0 + 13 0 13 0 0 1 0 1 + 13 1 13 1 0 0 0 0 + 13 1 13 1 0 1 0 1 + 13 0 0 0 0 1 13 1 + 13 1 0 1 0 0 13 0 + 13 0 13 0 1 0 1 0 + 13 0 13 0 1 1 1 1 + 13 1 13 1 1 0 1 0 + 13 1 13 1 1 1 1 1 + 13 0 1 0 1 1 13 1 + 13 1 1 1 1 0 13 0 + 13 0 13 0 2 0 2 0 + 13 0 13 0 2 1 2 1 + 13 1 13 1 2 0 2 0 + 13 1 13 1 2 1 2 1 + 13 0 2 0 2 1 13 1 + 13 1 2 1 2 0 13 0 + 13 0 13 0 3 0 3 0 + 13 0 13 0 3 1 3 1 + 13 1 13 1 3 0 3 0 + 13 1 13 1 3 1 3 1 + 13 0 3 0 3 1 13 1 + 13 1 3 1 3 0 13 0 + 13 0 13 0 4 0 4 0 + 13 0 13 0 4 1 4 1 + 13 1 13 1 4 0 4 0 + 13 1 13 1 4 1 4 1 + 13 0 4 0 4 1 13 1 + 13 1 4 1 4 0 13 0 + 13 0 13 0 5 0 5 0 + 13 0 13 0 5 1 5 1 + 13 1 13 1 5 0 5 0 + 13 1 13 1 5 1 5 1 + 13 0 5 0 5 1 13 1 + 13 1 5 1 5 0 13 0 + 13 0 13 0 6 0 6 0 + 13 0 13 0 6 1 6 1 + 13 1 13 1 6 0 6 0 + 13 1 13 1 6 1 6 1 + 13 0 6 0 6 1 13 1 + 13 1 6 1 6 0 13 0 + 13 0 13 0 7 0 7 0 + 13 0 13 0 7 1 7 1 + 13 1 13 1 7 0 7 0 + 13 1 13 1 7 1 7 1 + 13 0 7 0 7 1 13 1 + 13 1 7 1 7 0 13 0 + 13 0 13 0 8 0 8 0 + 13 0 13 0 8 1 8 1 + 13 1 13 1 8 0 8 0 + 13 1 13 1 8 1 8 1 + 13 0 8 0 8 1 13 1 + 13 1 8 1 8 0 13 0 + 13 0 13 0 9 0 9 0 + 13 0 13 0 9 1 9 1 + 13 1 13 1 9 0 9 0 + 13 1 13 1 9 1 9 1 + 13 0 9 0 9 1 13 1 + 13 1 9 1 9 0 13 0 + 13 0 13 0 10 0 10 0 + 13 0 13 0 10 1 10 1 + 13 1 13 1 10 0 10 0 + 13 1 13 1 10 1 10 1 + 13 0 10 0 10 1 13 1 + 13 1 10 1 10 0 13 0 + 13 0 13 0 11 0 11 0 + 13 0 13 0 11 1 11 1 + 13 1 13 1 11 0 11 0 + 13 1 13 1 11 1 11 1 + 13 0 11 0 11 1 13 1 + 13 1 11 1 11 0 13 0 + 13 0 13 0 12 0 12 0 + 13 0 13 0 12 1 12 1 + 13 1 13 1 12 0 12 0 + 13 1 13 1 12 1 12 1 + 13 0 12 0 12 1 13 1 + 13 1 12 1 12 0 13 0 + 13 0 13 0 13 0 13 0 + 13 0 13 0 13 1 13 1 + 13 1 13 1 13 0 13 0 + 13 1 13 1 13 1 13 1 + 13 0 13 0 13 1 13 1 + 13 1 13 1 13 0 13 0 + 13 0 13 0 14 0 14 0 + 13 0 13 0 14 1 14 1 + 13 1 13 1 14 0 14 0 + 13 1 13 1 14 1 14 1 + 13 0 14 0 14 1 13 1 + 13 1 14 1 14 0 13 0 + 13 0 13 0 15 0 15 0 + 13 0 13 0 15 1 15 1 + 13 1 13 1 15 0 15 0 + 13 1 13 1 15 1 15 1 + 13 0 15 0 15 1 13 1 + 13 1 15 1 15 0 13 0 + 14 0 14 0 0 0 0 0 + 14 0 14 0 0 1 0 1 + 14 1 14 1 0 0 0 0 + 14 1 14 1 0 1 0 1 + 14 0 0 0 0 1 14 1 + 14 1 0 1 0 0 14 0 + 14 0 14 0 1 0 1 0 + 14 0 14 0 1 1 1 1 + 14 1 14 1 1 0 1 0 + 14 1 14 1 1 1 1 1 + 14 0 1 0 1 1 14 1 + 14 1 1 1 1 0 14 0 + 14 0 14 0 2 0 2 0 + 14 0 14 0 2 1 2 1 + 14 1 14 1 2 0 2 0 + 14 1 14 1 2 1 2 1 + 14 0 2 0 2 1 14 1 + 14 1 2 1 2 0 14 0 + 14 0 14 0 3 0 3 0 + 14 0 14 0 3 1 3 1 + 14 1 14 1 3 0 3 0 + 14 1 14 1 3 1 3 1 + 14 0 3 0 3 1 14 1 + 14 1 3 1 3 0 14 0 + 14 0 14 0 4 0 4 0 + 14 0 14 0 4 1 4 1 + 14 1 14 1 4 0 4 0 + 14 1 14 1 4 1 4 1 + 14 0 4 0 4 1 14 1 + 14 1 4 1 4 0 14 0 + 14 0 14 0 5 0 5 0 + 14 0 14 0 5 1 5 1 + 14 1 14 1 5 0 5 0 + 14 1 14 1 5 1 5 1 + 14 0 5 0 5 1 14 1 + 14 1 5 1 5 0 14 0 + 14 0 14 0 6 0 6 0 + 14 0 14 0 6 1 6 1 + 14 1 14 1 6 0 6 0 + 14 1 14 1 6 1 6 1 + 14 0 6 0 6 1 14 1 + 14 1 6 1 6 0 14 0 + 14 0 14 0 7 0 7 0 + 14 0 14 0 7 1 7 1 + 14 1 14 1 7 0 7 0 + 14 1 14 1 7 1 7 1 + 14 0 7 0 7 1 14 1 + 14 1 7 1 7 0 14 0 + 14 0 14 0 8 0 8 0 + 14 0 14 0 8 1 8 1 + 14 1 14 1 8 0 8 0 + 14 1 14 1 8 1 8 1 + 14 0 8 0 8 1 14 1 + 14 1 8 1 8 0 14 0 + 14 0 14 0 9 0 9 0 + 14 0 14 0 9 1 9 1 + 14 1 14 1 9 0 9 0 + 14 1 14 1 9 1 9 1 + 14 0 9 0 9 1 14 1 + 14 1 9 1 9 0 14 0 + 14 0 14 0 10 0 10 0 + 14 0 14 0 10 1 10 1 + 14 1 14 1 10 0 10 0 + 14 1 14 1 10 1 10 1 + 14 0 10 0 10 1 14 1 + 14 1 10 1 10 0 14 0 + 14 0 14 0 11 0 11 0 + 14 0 14 0 11 1 11 1 + 14 1 14 1 11 0 11 0 + 14 1 14 1 11 1 11 1 + 14 0 11 0 11 1 14 1 + 14 1 11 1 11 0 14 0 + 14 0 14 0 12 0 12 0 + 14 0 14 0 12 1 12 1 + 14 1 14 1 12 0 12 0 + 14 1 14 1 12 1 12 1 + 14 0 12 0 12 1 14 1 + 14 1 12 1 12 0 14 0 + 14 0 14 0 13 0 13 0 + 14 0 14 0 13 1 13 1 + 14 1 14 1 13 0 13 0 + 14 1 14 1 13 1 13 1 + 14 0 13 0 13 1 14 1 + 14 1 13 1 13 0 14 0 + 14 0 14 0 14 0 14 0 + 14 0 14 0 14 1 14 1 + 14 1 14 1 14 0 14 0 + 14 1 14 1 14 1 14 1 + 14 0 14 0 14 1 14 1 + 14 1 14 1 14 0 14 0 + 14 0 14 0 15 0 15 0 + 14 0 14 0 15 1 15 1 + 14 1 14 1 15 0 15 0 + 14 1 14 1 15 1 15 1 + 14 0 15 0 15 1 14 1 + 14 1 15 1 15 0 14 0 + 15 0 15 0 0 0 0 0 + 15 0 15 0 0 1 0 1 + 15 1 15 1 0 0 0 0 + 15 1 15 1 0 1 0 1 + 15 0 0 0 0 1 15 1 + 15 1 0 1 0 0 15 0 + 15 0 15 0 1 0 1 0 + 15 0 15 0 1 1 1 1 + 15 1 15 1 1 0 1 0 + 15 1 15 1 1 1 1 1 + 15 0 1 0 1 1 15 1 + 15 1 1 1 1 0 15 0 + 15 0 15 0 2 0 2 0 + 15 0 15 0 2 1 2 1 + 15 1 15 1 2 0 2 0 + 15 1 15 1 2 1 2 1 + 15 0 2 0 2 1 15 1 + 15 1 2 1 2 0 15 0 + 15 0 15 0 3 0 3 0 + 15 0 15 0 3 1 3 1 + 15 1 15 1 3 0 3 0 + 15 1 15 1 3 1 3 1 + 15 0 3 0 3 1 15 1 + 15 1 3 1 3 0 15 0 + 15 0 15 0 4 0 4 0 + 15 0 15 0 4 1 4 1 + 15 1 15 1 4 0 4 0 + 15 1 15 1 4 1 4 1 + 15 0 4 0 4 1 15 1 + 15 1 4 1 4 0 15 0 + 15 0 15 0 5 0 5 0 + 15 0 15 0 5 1 5 1 + 15 1 15 1 5 0 5 0 + 15 1 15 1 5 1 5 1 + 15 0 5 0 5 1 15 1 + 15 1 5 1 5 0 15 0 + 15 0 15 0 6 0 6 0 + 15 0 15 0 6 1 6 1 + 15 1 15 1 6 0 6 0 + 15 1 15 1 6 1 6 1 + 15 0 6 0 6 1 15 1 + 15 1 6 1 6 0 15 0 + 15 0 15 0 7 0 7 0 + 15 0 15 0 7 1 7 1 + 15 1 15 1 7 0 7 0 + 15 1 15 1 7 1 7 1 + 15 0 7 0 7 1 15 1 + 15 1 7 1 7 0 15 0 + 15 0 15 0 8 0 8 0 + 15 0 15 0 8 1 8 1 + 15 1 15 1 8 0 8 0 + 15 1 15 1 8 1 8 1 + 15 0 8 0 8 1 15 1 + 15 1 8 1 8 0 15 0 + 15 0 15 0 9 0 9 0 + 15 0 15 0 9 1 9 1 + 15 1 15 1 9 0 9 0 + 15 1 15 1 9 1 9 1 + 15 0 9 0 9 1 15 1 + 15 1 9 1 9 0 15 0 + 15 0 15 0 10 0 10 0 + 15 0 15 0 10 1 10 1 + 15 1 15 1 10 0 10 0 + 15 1 15 1 10 1 10 1 + 15 0 10 0 10 1 15 1 + 15 1 10 1 10 0 15 0 + 15 0 15 0 11 0 11 0 + 15 0 15 0 11 1 11 1 + 15 1 15 1 11 0 11 0 + 15 1 15 1 11 1 11 1 + 15 0 11 0 11 1 15 1 + 15 1 11 1 11 0 15 0 + 15 0 15 0 12 0 12 0 + 15 0 15 0 12 1 12 1 + 15 1 15 1 12 0 12 0 + 15 1 15 1 12 1 12 1 + 15 0 12 0 12 1 15 1 + 15 1 12 1 12 0 15 0 + 15 0 15 0 13 0 13 0 + 15 0 15 0 13 1 13 1 + 15 1 15 1 13 0 13 0 + 15 1 15 1 13 1 13 1 + 15 0 13 0 13 1 15 1 + 15 1 13 1 13 0 15 0 + 15 0 15 0 14 0 14 0 + 15 0 15 0 14 1 14 1 + 15 1 15 1 14 0 14 0 + 15 1 15 1 14 1 14 1 + 15 0 14 0 14 1 15 1 + 15 1 14 1 14 0 15 0 + 15 0 15 0 15 0 15 0 + 15 0 15 0 15 1 15 1 + 15 1 15 1 15 0 15 0 + 15 1 15 1 15 1 15 1 + 15 0 15 0 15 1 15 1 + 15 1 15 1 15 0 15 0 diff --git a/samples/tutorial_2.2/hphi_Ene b/samples/tutorial_2.2/hphi_Ene new file mode 100644 index 00000000..bf9b6042 --- /dev/null +++ b/samples/tutorial_2.2/hphi_Ene @@ -0,0 +1,10 @@ +State 0 + Energy -32.7335961543715115 + Doublon 2.8888338568160847 + Sz 0.0000000000000000 + +State 1 + Energy -31.5989509881486903 + Doublon 3.0938231226969819 + Sz 0.0000000000000000 + diff --git a/samples/tutorial_2.2/hphi_Result_1swave b/samples/tutorial_2.2/hphi_Result_1swave new file mode 100644 index 00000000..122b3e64 --- /dev/null +++ b/samples/tutorial_2.2/hphi_Result_1swave @@ -0,0 +1,6 @@ + 0.000000 0.184026 0.000000 0 + 1.000000 0.041498 0.000000 1 + 1.414214 0.018053 0.000000 2 + 2.000000 0.018053 0.000000 4 + 2.236068 0.019450 0.000000 5 + 2.828427 0.045197 0.000000 8 diff --git a/samples/tutorial_2.2/input.toml b/samples/tutorial_2.2/input.toml new file mode 100644 index 00000000..8090f22d --- /dev/null +++ b/samples/tutorial_2.2/input.toml @@ -0,0 +1,13 @@ +[lattice] +Lx = 4 +Ly = 4 +Lz = 1 +orb_num = 1 +model_type = "Hubbard" +[mVMC] +sub_x = 2 +sub_y = 2 +sub_z = 1 +[mVMC_aft] +modpara = "modpara.def" +directory = "aft" diff --git a/samples/tutorial_2.2/job_ohtaka.sh b/samples/tutorial_2.2/job_ohtaka.sh new file mode 100644 index 00000000..0931872e --- /dev/null +++ b/samples/tutorial_2.2/job_ohtaka.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +#SBATCH -J TMTTF +#SBATCH -p i8cpu +#SBATCH --time=00:30:00 +#SBATCH -N 4 +#SBATCH -n 64 +#SBATCH -c 8 +#SBATCH -o log.%j +#SBATCH -e log.%j + +source /home/issp/materiapps/intel/mvmc/mvmcvars.sh +export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} + +#[s] definitions of executions +MPI="srun " +VMC="vmc.out" #Pre-installed +VMCDRY="vmcdry.out" #Pre-installed +#[e] definitions of executions + +#python3 MakeInput.py input.toml +#[s] opt + ${VMCDRY} ./stan_opt.in + ${MPI} ${VMC} namelist.def + cp ./output/zqp_opt.dat . + mv output opt +#[e] opt + +#[s] aft + python3 SCGreen.py input.toml + ${VMCDRY} ./stan_aft.in + cp green1 greenone.def + cp SC_1swave greentwo.def + ${MPI} ${VMC} namelist.def ./zqp_opt.dat + mv output aft +#[e] aft + +#[s] post process + python3 VMClocal.py input.toml + python3 CalcSC.py input.toml +#[e] post process diff --git a/samples/tutorial_2.2/plot b/samples/tutorial_2.2/plot new file mode 100644 index 00000000..9f73b194 --- /dev/null +++ b/samples/tutorial_2.2/plot @@ -0,0 +1,7 @@ +set log y +set xlabel "distance" +set ylabel "1s-SC cor" +p \ +"Result_1swave.dat" u 1:2:3 w ye pt 6 ps 2 t "mVMC", \ +"hphi_Result_1swave" u 1:2:3 w lp t "exact diagonalizaqtion" +pause -1 diff --git a/samples/tutorial_2.2/qlms_lattice.py b/samples/tutorial_2.2/qlms_lattice.py new file mode 100644 index 00000000..89aa61cd --- /dev/null +++ b/samples/tutorial_2.2/qlms_lattice.py @@ -0,0 +1,44 @@ +def get_site(all_i,list_org): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + orb_num = list_org[3] + + orb = all_i%orb_num + site = (all_i-orb)/orb_num + x = site%Lx + tmp = (site-x)/Lx + y = tmp%Ly + z = (tmp-y)/Ly + list_site = [int(x),int(y),int(z),int(orb)] + return list_site + +def func_strans(list_trans,list_site,list_org): + x_j = int((list_site[0]+list_trans[0]+list_org[0])%list_org[0]) + y_j = int((list_site[1]+list_trans[1]+list_org[1])%list_org[1]) + z_j = int((list_site[2]+list_trans[2]+list_org[2])%list_org[2]) + all_j = list_trans[3]+(x_j+y_j*list_org[0]+z_j*list_org[0]*list_org[1])*list_org[3] + return all_j + +def func_strans_2D(list_trans,list_site,list_org): + x_j = int((list_site[0]+list_trans[0]+list_org[0])%list_org[0]) + y_j = int((list_site[1]+list_trans[1]+list_org[1])%list_org[1]) + all_j = list_trans[3]+(x_j+y_j*list_org[0])*list_org[3] + return all_j + +def get_site_Kondo(all_i,list_org): + Lx = list_org[0] + Ly = list_org[1] + Lz = list_org[2] + site_num = Lx*Ly*Lz + orb_num = list_org[3] + + site = all_i%site_num + orb = (all_i-site)/site_num + x = site%Lx + tmp = (site-x)/Lx + y = tmp%Ly + z = (tmp-y)/Ly + list_site = [int(x),int(y),int(z),int(orb)] + return list_site + diff --git a/samples/tutorial_2.2/run.sh b/samples/tutorial_2.2/run.sh new file mode 100644 index 00000000..c48054d3 --- /dev/null +++ b/samples/tutorial_2.2/run.sh @@ -0,0 +1,27 @@ +#[s] definitions of executions +MPI=" " +VMC="../../build/src/mVMC/vmc.out" +VMCDRY="../../build/src/mVMC/vmcdry.out" +#[e] definitions of executions + +#python3 MakeInput.py input.toml +#[s] opt + ${VMCDRY} ./stan_opt.in + ${MPI} ${VMC} namelist.def + cp ./output/zqp_opt.dat . + mv output opt +#[e] opt + +#[s] aft + python3 SCGreen.py input.toml + ${VMCDRY} ./stan_aft.in + cp green1 greenone.def + cp SC_1swave greentwo.def + ${MPI} ${VMC} namelist.def ./zqp_opt.dat + mv output aft +#[e] aft + +#[s] post process + python3 VMClocal.py input.toml + python3 CalcSC.py input.toml +#[e] post process diff --git a/samples/tutorial_2.2/stan_aft.in b/samples/tutorial_2.2/stan_aft.in new file mode 100644 index 00000000..6ee7b7fe --- /dev/null +++ b/samples/tutorial_2.2/stan_aft.in @@ -0,0 +1,17 @@ +W = 4 +Wsub = 2 +L = 4 +Lsub = 2 +lattice = "square" +model = "Hubbard" +t = 1.0 +U = -4.0 +ncond = 10 +2Sz = 0 +NVMCSample = 5000 +NSROptItrStep = 100 +NMPTrans = 1 +NSPStot = 0 +NVMCCalMode = 1 +NDataIdxStart = 0 +NDataQtySmp = 5 diff --git a/samples/tutorial_2.2/stan_opt.in b/samples/tutorial_2.2/stan_opt.in new file mode 100644 index 00000000..d349bdf0 --- /dev/null +++ b/samples/tutorial_2.2/stan_opt.in @@ -0,0 +1,14 @@ +W = 4 +Wsub = 2 +L = 4 +Lsub = 2 +lattice = "square" +model = "Hubbard" +t = 1.0 +U = -4.0 +ncond = 10 +2Sz = 0 +NVMCSample = 200 +NSROptItrStep = 600 +NMPTrans = 1 +NSPStot = 0 From bfe26276195ad4962e32a0c1a5b745d7313f3841 Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Fri, 1 Mar 2024 09:46:59 +0900 Subject: [PATCH 42/73] mod --- doc/tutorial/ja/source/advanced/sc_correlation.rst | 5 +++++ doc/tutorial/ja/source/basic/hubbard_chain.rst | 5 +++++ doc/tutorial/ja/source/basic/hubbard_square.rst | 9 +++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/doc/tutorial/ja/source/advanced/sc_correlation.rst b/doc/tutorial/ja/source/advanced/sc_correlation.rst index ae8584cb..f1680606 100644 --- a/doc/tutorial/ja/source/advanced/sc_correlation.rst +++ b/doc/tutorial/ja/source/advanced/sc_correlation.rst @@ -80,3 +80,8 @@ Hubbard模型は次のように定義されます。 ----------------------- - 引力相互作用を斥力にした場合、1sの超伝導相関関数がどのように変化するかを調べてください。 - 1s超伝導相関関数の :math:`U` 依存性を調べてください。 + + +参考文献 +"""""""""""""""""""""" +#. `ISSPデータリポジトリ `_ diff --git a/doc/tutorial/ja/source/basic/hubbard_chain.rst b/doc/tutorial/ja/source/basic/hubbard_chain.rst index c43d4fd3..f6366ea0 100644 --- a/doc/tutorial/ja/source/basic/hubbard_chain.rst +++ b/doc/tutorial/ja/source/basic/hubbard_chain.rst @@ -118,3 +118,8 @@ gnuplotを使って、 ``SqNq.dat`` に出力されているスピン構造因 演習 ----------------------- 厳密対角化ソフトウェアパッケージ :math:`\mathcal{H}\Phi` (https://www.pasums.issp.u-tokyo.ac.jp/hphi/) を用いて、基底状態のエネルギーと相関関数を計算し、mVMCの計算結果と比較してみてください。また、 ``MakeInput.py`` を修正して、相互作用パラメータ :math:`U` の値を変えた場合、スピン構造因子がどのように変化するのかを調べてみてください。 + + +参考文献 +"""""""""""""""""""""" +#. `ISSPデータリポジトリ `_ diff --git a/doc/tutorial/ja/source/basic/hubbard_square.rst b/doc/tutorial/ja/source/basic/hubbard_square.rst index 0c0834e8..b58340c7 100644 --- a/doc/tutorial/ja/source/basic/hubbard_square.rst +++ b/doc/tutorial/ja/source/basic/hubbard_square.rst @@ -27,7 +27,7 @@ UHF初期状態での最適化 """"""""""""""""""""""""""""""" -次に、UHF (Unrestricted Hartree-Fock) 近似で得られた :math:`\prod_n (\sum_{i\sigma} \Phi_{in\sigma} c^{\dagger}_{i\sigma}) |0\rangle` からペアリング関数 :math:`(\sum_{i,j} f_{ij} c^{\dagger}_{i\uparrow} c^{\dagger}_{j\downarrow})^{N} |0\rangle` を構築し、それをmVMCの初期状態として最適化を行ってみます。詳細は論文等で紹介されているので割愛しますが、次の関係式から構築することができます。 +次に、UHF (Unrestricted Hartree-Fock) 近似で得られた :math:`\prod_n (\sum_{i\sigma} \Phi_{in\sigma} c^{\dagger}_{i\sigma}) |0\rangle` からペアリング関数 :math:`(\sum_{i,j} f_{ij} c^{\dagger}_{i\uparrow} c^{\dagger}_{j\downarrow})^{N} |0\rangle` を構築し、それをmVMCの初期状態として最適化を行ってみます。詳細は論文等(例えば文献2を参照)で紹介されているので割愛しますが、次の関係式から構築することができます。 .. math:: @@ -57,4 +57,9 @@ UHF初期状態での最適化 :align: center 下図は、上図を拡大したものになっています。 -紫点が乱数ペアリングを初期状態にした結果、緑点がUHF近似から構築した状態を初期状態にした結果です。水色線と黒線は、それぞれ、UHFで得られたエネルギーと厳密対角化で得られるエネルギーです。UHF近似による初期状態を使ったほうが、初期ステップでのエネルギー値が低く、少ない最適化ステップ数で収束していることがわかります。 \ No newline at end of file +紫点が乱数ペアリングを初期状態にした結果、緑点がUHF近似から構築した状態を初期状態にした結果です。水色線と黒線は、それぞれ、UHFで得られたエネルギーと厳密対角化で得られるエネルギーです。UHF近似による初期状態を使ったほうが、初期ステップでのエネルギー値が低く、少ない最適化ステップ数で収束していることがわかります。 + +参考文献 +"""""""""""""""""""""" +#. `ISSPデータリポジトリ `_ +#. https://issp-center-dev.github.io/mVMC/doc/master/ja/algorithm.html#puffandslater \ No newline at end of file From 6860c99b24a0614388001aa2846e35d13c134382 Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Fri, 1 Mar 2024 09:57:58 +0900 Subject: [PATCH 43/73] mod path --- samples/tutorial_2.2/run.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/tutorial_2.2/run.sh b/samples/tutorial_2.2/run.sh index c48054d3..0697209e 100644 --- a/samples/tutorial_2.2/run.sh +++ b/samples/tutorial_2.2/run.sh @@ -1,7 +1,7 @@ #[s] definitions of executions MPI=" " -VMC="../../build/src/mVMC/vmc.out" -VMCDRY="../../build/src/mVMC/vmcdry.out" +VMC="path2vmc.out" +VMCDRY="path2vmcdry.out" #[e] definitions of executions #python3 MakeInput.py input.toml From 8ad417e4cd36eb88d7ac1f80efa658285c7b429b Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Fri, 1 Mar 2024 20:46:48 +0900 Subject: [PATCH 44/73] mod, make pdf --- .../ja/source/basic/hubbard_dimer.rst | 20 +++++++++---------- doc/tutorial/ja/source/conf.py | 8 ++++---- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/doc/tutorial/ja/source/basic/hubbard_dimer.rst b/doc/tutorial/ja/source/basic/hubbard_dimer.rst index 368364e8..e8fab6c0 100644 --- a/doc/tutorial/ja/source/basic/hubbard_dimer.rst +++ b/doc/tutorial/ja/source/basic/hubbard_dimer.rst @@ -7,7 +7,7 @@ Hubbardダイマー H = -t \sum_{\sigma} \left( c_{0\sigma}^{\dagger}c_{1\sigma}+{\rm H.c.} \right) +U \sum_{i=0,1} n_{i\uparrow}n_{i\downarrow} -文献2に記載されているように、Hubbard dimerの基底状態 :math:`\ket{{\rm GS}}` は、 +文献2に記載されているように、Hubbard dimerの基底状態 :math:`|{\rm GS} \rangle` は、 .. math:: @@ -18,12 +18,12 @@ Hubbardダイマー .. math:: :label: exact_gs - \ket{{\rm GS}} = \left[ \frac{\sqrt{1-\alpha}}{2} \left( c_{0\uparrow}^{\dagger}c_{0\downarrow}^{\dagger} + c_{1\uparrow}^{\dagger} c_{1\downarrow}^{\dagger} \right) - + \frac{\sqrt{1+\alpha}}{2} \left( c_{0\uparrow}^{\dagger}c_{1\downarrow}^{\dagger} - c_{0\downarrow}^{\dagger} c_{1\uparrow}^{\dagger} \right) \right] \ket{0} + | {\rm GS} \rangle = \left[ \frac{\sqrt{1-\alpha}}{2} \left( c_{0\uparrow}^{\dagger}c_{0\downarrow}^{\dagger} + c_{1\uparrow}^{\dagger} c_{1\downarrow}^{\dagger} \right) + + \frac{\sqrt{1+\alpha}}{2} \left( c_{0\uparrow}^{\dagger}c_{1\downarrow}^{\dagger} - c_{0\downarrow}^{\dagger} c_{1\uparrow}^{\dagger} \right) \right] |0 \rangle -ここで :math:`\ket{0}` は真空状態を表しています。上記の状態はmVMCで実装されているペアリング波動関数で厳密に表現することができます。 +ここで :math:`|0 \rangle` は真空状態を表しています。上記の状態はmVMCで実装されているペアリング波動関数で厳密に表現することができます。 波動関数の最適化 """"""""""""""""""""""""""""""" @@ -118,9 +118,9 @@ Hubbard模型を含んだ遍歴電子系をスタンダードモードで取り 2 -4.000000000000000000e+00 0.000000000000000000e+00 3 -1.653364791408409529e+00 0.000000000000000000e+00 -5行目のヘッダ以降の数値が、最適化されたペアリング波動関数の情報です。一列目が変分パラメータのインデックス、二列目が変分パラメータの実部、三列目がその虚部です。今回は実数での計算になっているため、三列目は全て0が出力されています。なお、ここで出力されている値は、最適化の最終ステップから``NSROptItrSmp``ステップ数分前までの変分パラメータの平均値となっています。。(``NSROptItrSmp``は``modpara.def``で設定できます。) +5行目のヘッダ以降の数値が、最適化されたペアリング波動関数の情報です。一列目が変分パラメータのインデックス、二列目が変分パラメータの実部、三列目がその虚部です。今回は実数での計算になっているため、三列目は全て0が出力されています。なお、ここで出力されている値は、最適化の最終ステップから ``NSROptItrSmp`` ステップ数分前までの変分パラメータの平均値となっています。( ``NSROptItrSmp`` は ``modpara.def`` で設定できます。) -変分パラメータのインデックスとペアリングの関係は、``orbitalidx.def`` に記載されています。次のコマンドを実行してください:: +変分パラメータのインデックスとペアリングの関係は、 ``orbitalidx.def`` に記載されています。次のコマンドを実行してください:: cat orbitalidx.def @@ -140,7 +140,7 @@ Hubbard模型を含んだ遍歴電子系をスタンダードモードで取り 2 1 3 1 -5行目のヘッダ以降の数値が、ペアリング波動関数 :math:`\left(\sum_{i,j} f_{ij} c^{\dagger}_{i\uparrow} c^{\dagger}_{j\downarrow}\right) \ket{0}` に含まれる変分パラメータ :math:`f_{ij}` の情報です。一列目が変分パラメータ :math:`f_{ij}` の サイトインデックス:math:`i` 、二列目が:math:`f_{ij}` の :math:`j` 、三列目が :math:`f_{ij}` のインデックスです。 +5行目のヘッダ以降の数値が、ペアリング波動関数 :math:`\left(\sum_{i,j} f_{ij} c^{\dagger}_{i\uparrow} c^{\dagger}_{j\downarrow}\right) | 0 \rangle` に含まれる変分パラメータ :math:`f_{ij}` の情報です。一列目が変分パラメータ :math:`f_{ij}` の サイトインデックス :math:`i` 、二列目が :math:`f_{ij}` の :math:`j` 、三列目が :math:`f_{ij}` のインデックスです。 基底状態の厳密解 :eq:`exact_gs` によると、ペアリング波動関数の変分パラメータは次のようになることが期待されます。 @@ -164,13 +164,13 @@ Hubbard模型を含んだ遍歴電子系をスタンダードモードで取り 初期状態の設定 """"""""""""""""""""""""""""""" -全スピンの大きさSが0の場合、一番エネルギーが高い励起状態 :math:`\ket{{\rm ES}}` とそのエネルギー :math:`E_{{\rm ES}}` は次のように表されます。 +全スピンの大きさ :math:`S_{\rm tot}` が0の場合、一番エネルギーが高い励起状態 :math:`|{\rm ES} \rangle` とそのエネルギー :math:`E_{{\rm ES}}` は次のように表されます。 .. math:: :label: exact_es - \ket{{\rm ES}} = \left[ \frac{\sqrt{1+\alpha}}{2} \left( c_{0\uparrow}^{\dagger}c_{0\downarrow}^{\dagger} + c_{1\uparrow}^{\dagger} c_{1\downarrow}^{\dagger} \right) - - \frac{\sqrt{1-\alpha}}{2} \left( c_{0\uparrow}^{\dagger}c_{1\downarrow}^{\dagger} - c_{0\downarrow}^{\dagger} c_{1\uparrow}^{\dagger} \right) \right] \ket{0}, + |{\rm ES} \rangle = \left[ \frac{\sqrt{1+\alpha}}{2} \left( c_{0\uparrow}^{\dagger}c_{0\downarrow}^{\dagger} + c_{1\uparrow}^{\dagger} c_{1\downarrow}^{\dagger} \right) + - \frac{\sqrt{1-\alpha}}{2} \left( c_{0\uparrow}^{\dagger}c_{1\downarrow}^{\dagger} - c_{0\downarrow}^{\dagger} c_{1\uparrow}^{\dagger} \right) \right] |0 \rangle, .. math:: diff --git a/doc/tutorial/ja/source/conf.py b/doc/tutorial/ja/source/conf.py index 9e4177df..cec33d5a 100644 --- a/doc/tutorial/ja/source/conf.py +++ b/doc/tutorial/ja/source/conf.py @@ -33,7 +33,7 @@ extensions = ['sphinx.ext.mathjax'] mathjax_pass = ['https://cdnjs.com/'] math_number_all = True -spelling_lang='en_US' +spelling_lang='ja' spelling_word_list_filename='spelling_wordlist.txt' numfig = True @@ -55,7 +55,7 @@ master_doc = 'index' # General information about the project. -project = u'HΦ Tutorial' +project = u'mVMC Tutorial' copyright = u'2020-, The University of Tokyo' author = u'The University of Tokyo' @@ -64,7 +64,7 @@ # built documents. # # The short X.Y version. -version = '3.2' +version = '1.2' # The full version, including alpha/beta/rc tags. release = u'' @@ -73,7 +73,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = 'en' +language = 'ja' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. From df1fe3510af2527cb3ca2204c9719bd503bb0b20 Mon Sep 17 00:00:00 2001 From: Yuichi Motoyama Date: Wed, 6 Mar 2024 17:37:39 +0900 Subject: [PATCH 45/73] deploy tutorial --- .github/workflows/deploy_docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy_docs.yml b/.github/workflows/deploy_docs.yml index c76ed377..3153611a 100644 --- a/.github/workflows/deploy_docs.yml +++ b/.github/workflows/deploy_docs.yml @@ -42,7 +42,7 @@ jobs: cmake -E make_directory build cd build cmake -DDocument=ON -DENABLE_MPI=OFF ../ - make doc-ja-html doc-en-html + make doc-ja-html doc-en-html tutorial-ja-html - name: Deploy Configuration run: | @@ -58,7 +58,7 @@ jobs: TARGET_NAME: ${{ env.GITHUB_REF_SLUG }} run: | cd ${GITHUB_WORKSPACE} - for lang in ja en; do + for lang in ja en tutorial/ja; do rm -rf "gh-pages/doc/${TARGET_NAME}/${lang}" mkdir -p "gh-pages/doc/${TARGET_NAME}" cp -r "main/build/doc/${lang}/source/html" "gh-pages/doc/${TARGET_NAME}/${lang}" From 1fee3e2ab23519b134e4405c01d5abd79fa05f58 Mon Sep 17 00:00:00 2001 From: Yuichi Motoyama Date: Wed, 6 Mar 2024 17:43:02 +0900 Subject: [PATCH 46/73] autodocs for develop branch --- .github/workflows/deploy_docs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy_docs.yml b/.github/workflows/deploy_docs.yml index 3153611a..c8520bfe 100644 --- a/.github/workflows/deploy_docs.yml +++ b/.github/workflows/deploy_docs.yml @@ -4,6 +4,7 @@ on: push: branches: - master + - develop - gh_actions # test branch - '!gh-pages' tags: '*' From 072a1b4606daa9d0bd72f3367c27a3d5549fe8ce Mon Sep 17 00:00:00 2001 From: Yuichi Motoyama Date: Wed, 6 Mar 2024 17:45:53 +0900 Subject: [PATCH 47/73] correct script --- .github/workflows/deploy_docs.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/deploy_docs.yml b/.github/workflows/deploy_docs.yml index c8520bfe..e683901e 100644 --- a/.github/workflows/deploy_docs.yml +++ b/.github/workflows/deploy_docs.yml @@ -64,6 +64,11 @@ jobs: mkdir -p "gh-pages/doc/${TARGET_NAME}" cp -r "main/build/doc/${lang}/source/html" "gh-pages/doc/${TARGET_NAME}/${lang}" done + for lang in ja; do + rm -rf "gh-pages/doc/${TARGET_NAME}/tutorial/${lang}" + mkdir -p "gh-pages/doc/${TARGET_NAME}"/tutorial/ + cp -r "main/build/doc/tutorial/${lang}/source/html" "gh-pages/doc/${TARGET_NAME}/tutorial/${lang}" + done cd gh-pages git config --local user.name "${GIT_USER}" git config --local user.email "${GIT_EMAIL}" From c0e74b8ec01b474c37636e4cb0831d63f6b3253a Mon Sep 17 00:00:00 2001 From: Yuichi Motoyama Date: Wed, 6 Mar 2024 18:27:10 +0900 Subject: [PATCH 48/73] update --- .github/workflows/deploy_docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy_docs.yml b/.github/workflows/deploy_docs.yml index e683901e..9c6855af 100644 --- a/.github/workflows/deploy_docs.yml +++ b/.github/workflows/deploy_docs.yml @@ -59,7 +59,7 @@ jobs: TARGET_NAME: ${{ env.GITHUB_REF_SLUG }} run: | cd ${GITHUB_WORKSPACE} - for lang in ja en tutorial/ja; do + for lang in ja en; do rm -rf "gh-pages/doc/${TARGET_NAME}/${lang}" mkdir -p "gh-pages/doc/${TARGET_NAME}" cp -r "main/build/doc/${lang}/source/html" "gh-pages/doc/${TARGET_NAME}/${lang}" From 920c4afb00694e5bbc1c9f7db41e62a466a998ba Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Sun, 10 Mar 2024 20:28:30 +0900 Subject: [PATCH 49/73] add info of SRinfo in Japanese --- doc/ja/source/output.rst | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/doc/ja/source/output.rst b/doc/ja/source/output.rst index d53d906c..3d31acf5 100644 --- a/doc/ja/source/output.rst +++ b/doc/ja/source/output.rst @@ -31,6 +31,8 @@ +------------------------------------------+----------------------------------------------------------------------+ | xxx\_out\_yyy.dat | エネルギーとその分散. | +------------------------------------------+----------------------------------------------------------------------+ +| xxx\_SRinfo.dat | SR法に関連した情報. | ++------------------------------------------+----------------------------------------------------------------------+ | xxx\_var\_yyy.dat | パラメータ最適化過程の情報. | +------------------------------------------+----------------------------------------------------------------------+ | xxx\_CalcTimer.dat | 各プロセスに対する計算時間に関する情報. | @@ -126,6 +128,23 @@ xxxには ``CDataFileHead`` で指定されるヘッダが、yyyには ``ModPara 2.072610167083121837e+02 2.029162857569105916e-01 … +xxx\_SRinfo.dat.dat +~~~~~~~~~~~~~~~~~~~~~ + +各最適化ステップごとに、 +変分パラメータ数 ``Npara`` 、S行列の次元数 ``Msize`` 、 ``Orbital`` などの入力ファイルで最適化しないと指定した実パラメータ数 ``optCut`` 、 ``ModPara`` ファイルの ``DSROptRedCut`` の値により削減された実パラメータ数 ``diagCut`` 、S行列の対角成分の最大値 ``sDiagMax`` と最小値 ``sDiagMin`` 、変分パラメータの変化量の最大値 ``absRmax`` とそのパラメータインデックス ``imax`` といったSR法による最適化情報が順に出力されます。 +xxxには ``ModPara`` ファイルの ``CDataFileHead`` で指定されるヘッダが記載されます。以下に出力例を記載します。なお、変分パラメータが実変数( ``ComplexType=0`` )として扱われた場合、虚部のパラメータ数は ``optCut`` にカウントされます。 + +:: + + #Npara Msize optCut diagCut sDiagMax sDiagMin absRmax imax + 4 4 4 0 4.17626e-02 0.00000e+00 -1.60883e-01 4 + 4 4 4 0 3.53941e-02 0.00000e+00 1.63056e-01 0 + 4 4 4 0 3.28032e-02 0.00000e+00 1.69939e-01 0 + 4 4 4 0 3.31451e-02 0.00000e+00 1.92363e-01 0 + … + + xxx\_CalcTimer.dat ~~~~~~~~~~~~~~~~~~~ From 0e332af53b0e10fdb58742037cbb537c5781e6db Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Mon, 29 Apr 2024 16:16:15 +0900 Subject: [PATCH 50/73] add sgn func --- src/ComplexUHF/output.c | 23 ++++++++++++-------- src/ComplexUHF/readdef.c | 47 +++++++++++++++++++++++++++++++++------- 2 files changed, 53 insertions(+), 17 deletions(-) diff --git a/src/ComplexUHF/output.c b/src/ComplexUHF/output.c index c0d85af9..2cfe8041 100644 --- a/src/ComplexUHF/output.c +++ b/src/ComplexUHF/output.c @@ -243,7 +243,7 @@ int MakeOrbitalFile(struct BindStruct *X){ } void OutputAntiParallel_2(struct BindStruct *X,double complex **UHF_Fij,double complex *ParamOrbital,int *CountOrbital){ - int i,j,Orbitalidx,isite,jsite; + int i,j,Orbitalidx,Orbitalsgn, isite,jsite; char fileName[256]; FILE *fp; @@ -258,10 +258,11 @@ void OutputAntiParallel_2(struct BindStruct *X,double complex **UHF_Fij,double c isite = i + 0 * X->Def.Nsite; jsite = j + 1 * X->Def.Nsite; Orbitalidx = X->Def.OrbitalIdx[isite][jsite]; + Orbitalsgn = X->Def.OrbitalSgn[isite][jsite]; fprintf(fp," %d %d %lf %lf\n",i,j,creal(UHF_Fij[i][j]),cimag(UHF_Fij[i][j])); //printf(" %d %d %d \n", isite,jsite,Orbitalidx); if(Orbitalidx != -1) { - ParamOrbital[Orbitalidx] += UHF_Fij[i][j]; + ParamOrbital[Orbitalidx] += UHF_Fij[i][j]*Orbitalsgn; CountOrbital[Orbitalidx] += 1; //printf(" %d %d %d %lf %lf \n", isite,jsite,Orbitalidx,creal(ParamOrbital[Orbitalidx]),cimag(ParamOrbital[Orbitalidx])); } @@ -280,7 +281,7 @@ void OutputAntiParallel_2(struct BindStruct *X,double complex **UHF_Fij,double c void OutputAntiParallel(struct BindStruct *X,double complex **UHF_Fij,double complex *ParamOrbital,int *CountOrbital){ - int i,j,Orbitalidx,isite,jsite; + int i,j,Orbitalidx,Orbitalsgn,isite,jsite; char fileName[256]; FILE *fp; @@ -295,9 +296,10 @@ void OutputAntiParallel(struct BindStruct *X,double complex **UHF_Fij,double com isite = i + 0 * X->Def.Nsite; jsite = j + 1 * X->Def.Nsite; Orbitalidx = X->Def.OrbitalIdx[isite][jsite]; + Orbitalsgn = X->Def.OrbitalSgn[isite][jsite]; fprintf(fp," %d %d %lf %lf\n",i,j,creal(UHF_Fij[isite][jsite]),cimag(UHF_Fij[isite][jsite])); if(Orbitalidx != -1) { - ParamOrbital[Orbitalidx] += UHF_Fij[isite][jsite]; + ParamOrbital[Orbitalidx] += UHF_Fij[isite][jsite]*Orbitalsgn; CountOrbital[Orbitalidx] += 1; } } @@ -313,7 +315,7 @@ void OutputAntiParallel(struct BindStruct *X,double complex **UHF_Fij,double com } void OutputParallel(struct BindStruct *X,double complex **UHF_Fij,double complex *ParamOrbital,int *CountOrbital){ - int i,j,Orbitalidx,isite,jsite,ini,fin,tmp_i; + int i,j,Orbitalidx,Orbitalsgn,isite,jsite,ini,fin,tmp_i; char fileName[256]; FILE *fp; @@ -331,17 +333,19 @@ void OutputParallel(struct BindStruct *X,double complex **UHF_Fij,double complex isite = i + 0 * X->Def.Nsite; jsite = j + 0 * X->Def.Nsite; Orbitalidx = X->Def.OrbitalIdx[isite][jsite]; + Orbitalsgn = X->Def.OrbitalSgn[isite][jsite]; fprintf(fp," %d %d %lf %lf\n",isite,jsite,creal(UHF_Fij[isite][jsite]),cimag(UHF_Fij[isite][jsite])); if(Orbitalidx != -1) { - ParamOrbital[Orbitalidx] += UHF_Fij[isite][jsite]; + ParamOrbital[Orbitalidx] += UHF_Fij[isite][jsite]*Orbitalsgn; CountOrbital[Orbitalidx] += 1; } isite = i + 1 * X->Def.Nsite; jsite = j + 1 * X->Def.Nsite; Orbitalidx = X->Def.OrbitalIdx[isite][jsite]; + Orbitalsgn = X->Def.OrbitalSgn[isite][jsite]; fprintf(fp," %d %d %lf %lf\n",isite,jsite,creal(UHF_Fij[isite][jsite]),cimag(UHF_Fij[isite][jsite])); if(Orbitalidx != -1) { - ParamOrbital[Orbitalidx] += UHF_Fij[isite][jsite]; + ParamOrbital[Orbitalidx] += UHF_Fij[isite][jsite]*Orbitalsgn; CountOrbital[Orbitalidx] += 1; } }//for(j = i+1; j < X->Def.Nsite; j++) @@ -361,7 +365,7 @@ void OutputParallel(struct BindStruct *X,double complex **UHF_Fij,double complex } void OutputGeneral(struct BindStruct *X,double complex **UHF_Fij,double complex *ParamOrbital,int *CountOrbital){ - int i,j,Orbitalidx,isite,jsite,ispin,jspin; + int i,j,Orbitalidx,Orbitalsgn,isite,jsite,ispin,jspin; char fileName[256]; FILE *fp; for (i = 0; i < X->Def.NOrbitalIdx; i++) { @@ -377,10 +381,11 @@ void OutputGeneral(struct BindStruct *X,double complex **UHF_Fij,double complex isite = i + ispin * X->Def.Nsite; jsite = j + jspin * X->Def.Nsite; Orbitalidx = X->Def.OrbitalIdx[isite][jsite]; + Orbitalsgn = X->Def.OrbitalSgn[isite][jsite]; fprintf(fp," %d %d %lf %lf\n",isite,jsite,creal(UHF_Fij[isite][jsite]),cimag(UHF_Fij[isite][jsite])); if (Orbitalidx != -1) { // ParamOrbital[Orbitalidx]+=UHF_Fij[isite][jsite]; - ParamOrbital[Orbitalidx] += UHF_Fij[isite][jsite]; + ParamOrbital[Orbitalidx] += UHF_Fij[isite][jsite]*Orbitalsgn; CountOrbital[Orbitalidx] += 1; //printf("debug: Orbitaidx[%d][%d]=%d, UHF_Fij=%lf, %lf \n", isite, jsite, Orbitalidx, creal(UHF_Fij[isite][jsite]), cimag(UHF_Fij[isite][jsite])); //printf("debug: Orbitaidx[%d][%d]=%d, ParamOrbital_Fij=%lf, %lf \n", isite, jsite, Orbitalidx, creal(ParamOrbital[Orbitalidx]), cimag(ParamOrbital[Orbitalidx])); diff --git a/src/ComplexUHF/readdef.c b/src/ComplexUHF/readdef.c index 9bad8b1f..ca6fd26a 100644 --- a/src/ComplexUHF/readdef.c +++ b/src/ComplexUHF/readdef.c @@ -400,8 +400,9 @@ int ReadDefFileIdxPara( int iKWidx = 0; int i, j; int spn_i, spn_j, all_i, all_j; - int fij; - int idx, Orbitalidx;//, Orbitalsgn; + int fij, fijsgn; + int ndata; + int idx, Orbitalidx, Orbitalsgn; int x0, x1, x2, x3; int info, i_spin, j_spin; double dReValue; @@ -415,6 +416,7 @@ int ReadDefFileIdxPara( for (i = 0; i < X->Nsite; i++) { for (j = 0; j < X->Nsite; j++) { X->OrbitalIdx[i][j] = -1; + X->OrbitalSgn[i][j] = 0; } } } @@ -422,6 +424,7 @@ int ReadDefFileIdxPara( for (i = 0; i < X->Nsite*2; i++) { for (j = 0; j < X->Nsite*2; j++) { X->OrbitalIdx[i][j] = -1; + X->OrbitalSgn[i][j] = 0; } } } @@ -597,11 +600,17 @@ int ReadDefFileIdxPara( idx = 0; if(X->iFlgOrbitalGeneral==0) { while( fgets(ctmp2, sizeof(ctmp2)/sizeof(char), fp) != NULL){ - sscanf(ctmp2, "%d %d %d\n", + ndata = sscanf(ctmp2, "%d %d %d %d\n", &i, &j, - &Orbitalidx); + &Orbitalidx, + &Orbitalsgn); + //printf("Debug: %d %d %d %d %d\n", ndata, i, j, Orbitalidx, Orbitalsgn); X->OrbitalIdx[i+X->Nsite*0][j+X->Nsite*1]=Orbitalidx; + if (ndata == 3){ //sgn does not exist in input file + Orbitalsgn = 1; + } + X->OrbitalSgn[i+X->Nsite*0][j+X->Nsite*1]=Orbitalsgn; if(CheckPairSite(i, j, X->Nsite) != 0){ fprintf(stderr, "Error: Site index is incorrect. \n"); info=1; @@ -614,11 +623,17 @@ int ReadDefFileIdxPara( info=ReadDefFileError(defname); } }else{//general orbital - while( fscanf(fp, "%d %d %d\n", &i, &j, &fij) != EOF){ + //while( fscanf(fp, "%d %d %d %d\n", &i, &j, &fij, &fijsgn) != EOF){ + while( fgets(ctmp2, sizeof(ctmp2)/sizeof(char), fp) != NULL){ + ndata = sscanf(ctmp2, "%d %d %d %d\n", &i, &j, &fij, &fijsgn); spn_i = 0; spn_j = 1; all_i = i+spn_i*X->Nsite; //fsz all_j = j+spn_j*X->Nsite; //fsz + if (ndata == 3){ //sgn does not exist in input file + fijsgn = 1; + } + //printf("Debug: %d %d %d %d %d\n", ndata, i, j, fij, fijsgn); if(CheckPairSite(i, j, X->Nsite) != 0){ fprintf(stderr, "Error: Site index is incorrect. \n"); info=1; @@ -626,8 +641,10 @@ int ReadDefFileIdxPara( } idx++; X->OrbitalIdx[all_i][all_j]=fij; + X->OrbitalSgn[all_i][all_j]=fijsgn; // Note F_{IJ}=-F_{JI} X->OrbitalIdx[all_j][all_i]=fij; + X->OrbitalSgn[all_j][all_i]=-fijsgn; if(idx==(X->Nsite*X->Nsite)) break; } } @@ -637,8 +654,14 @@ int ReadDefFileIdxPara( /*orbitalidxt.def------------------------------------*/ idx = 0; int fij_org; - while (fscanf(fp, "%d %d %d\n", &i, &j, &fij_org) != EOF) { + //while (fscanf(fp, "%d %d %d %d\n", &i, &j, &fij_org, &fijsgn) != EOF) { + while( fgets(ctmp2, sizeof(ctmp2)/sizeof(char), fp) != NULL){ + ndata = sscanf(ctmp2, "%d %d %d %d\n", &i, &j, &fij_org, &fijsgn); //fprintf(stdout, "Debug: test-1 %d %d %d %d\n", i, j, fij, idx0); + if (ndata == 3){ //sgn does not exist in input file + fijsgn = 1; + } + //printf("Debug: %d %d %d %d %d\n", ndata, i, j, fij_org, fijsgn); for (spn_i = 0; spn_i < 2; spn_i++) { all_i = i + spn_i * X->Nsite; //fsz all_j = j + spn_i * X->Nsite; //fsz @@ -650,7 +673,9 @@ int ReadDefFileIdxPara( idx++; fij = X->NOrbitalAP + 2 * fij_org + spn_i; X->OrbitalIdx[all_i][all_j] = fij; + X->OrbitalSgn[all_i][all_j] = fijsgn; X->OrbitalIdx[all_j][all_i] = fij; + X->OrbitalSgn[all_j][all_i] = -fijsgn; } if (idx == (X->Nsite * (X->Nsite - 1))) { break; @@ -665,13 +690,19 @@ int ReadDefFileIdxPara( idx = 0; while (fgets(ctmp2, sizeof(ctmp2) / sizeof(char), fp) != NULL) { //TODO: Replace for spin dependent - sscanf(ctmp2, "%d %d %d %d %d\n", + ndata = sscanf(ctmp2, "%d %d %d %d %d %d\n", &i, &i_spin, &j, &j_spin, - &Orbitalidx); + &Orbitalidx, + &Orbitalsgn); + if (ndata == 5){ //sgn does not exist in input file + Orbitalsgn = 1; + } + //printf("Debug: %d %d %d %d %d %d %d\n", ndata, i, i_spin, j, j_spin, Orbitalidx, Orbitalsgn); (X->OrbitalIdx[i + X->Nsite * i_spin][j + X->Nsite * j_spin]) = Orbitalidx; + (X->OrbitalSgn[i + X->Nsite * i_spin][j + X->Nsite * j_spin]) = Orbitalsgn; idx++; if (idx == X->Nsite * (2 * X->Nsite - 1)) break; } From 62e5143ca14a340b707077ad075053e00ba00bae Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Wed, 29 May 2024 14:02:38 +0900 Subject: [PATCH 51/73] support manually set STDFACE_DIR (originally from hphi) --- CMakeLists.txt | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3257d79d..f3a885a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,21 +113,30 @@ endif() # ref: https://cliutils.gitlab.io/modern-cmake/chapters/projects/submodule.html set(MVMC ON) # Option for upstream StdFace. find_package(Git QUIET) -set(STDFACE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/StdFace") -if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") - # Update submodules as needed - if(GIT_SUBMODULE_UPDATE) - message(STATUS "Submodule update") - execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - RESULT_VARIABLE GIT_SUBMOD_RESULT) - if(NOT GIT_SUBMOD_RESULT EQUAL "0") - message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT}, please checkout submodules") + +if(NOT STDFACE_DIR) + set(STDFACE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/StdFace") + if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") + # Update submodules as needed + if(GIT_SUBMODULE_UPDATE) + message(STATUS "Submodule update") + execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE GIT_SUBMOD_RESULT) + if(NOT GIT_SUBMOD_RESULT EQUAL "0") + message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT}, please checkout submodules") + endif() endif() - endif() + if(NOT EXISTS "${STDFACE_DIR}/CMakeLists.txt") + message(FATAL_ERROR "The submodule StdFace were not downloaded! GIT_SUBMODULE_UPDATE was turned off or failed. Please update submodules and try again.") + endif() + endif() +else() if(NOT EXISTS "${STDFACE_DIR}/CMakeLists.txt") - message(FATAL_ERROR "The submodule StdFace were not downloaded! GIT_SUBMODULE_UPDATE was turned off or failed. Please update submodules and try again.") + message(FATAL_ERROR "STDFACE_DIR is manually set to ${STDFACE_DIR}, but ${STDFACE_DIR}/CMakeLists.txt does not exists") + else() + message(STATUS "STDFACE_DIR is manually set to ${STDFACE_DIR}.") endif() endif() add_subdirectory("${STDFACE_DIR}") From 3d9c2057d066465f6d6b322de7fcae7b0dcf9aa0 Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Wed, 29 May 2024 16:58:08 +0900 Subject: [PATCH 52/73] update StdFace --- src/StdFace | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/StdFace b/src/StdFace index 92967761..2fe757b1 160000 --- a/src/StdFace +++ b/src/StdFace @@ -1 +1 @@ -Subproject commit 92967761b56e6ddf69b1039102dbf0d09256242c +Subproject commit 2fe757b104835c1747e43d69c7ac749bb38739ed From 39f0971cb5cd8e61867203253c12230833268c72 Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Wed, 29 May 2024 17:06:54 +0900 Subject: [PATCH 53/73] #42 mod tests for fixed orbitals in fsz mode generated by stdface --- test/python/data/HeisenbergChain_fsz/StdFace.def | 4 ++-- test/python/data/HeisenbergChain_fsz_mpi/StdFace.def | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/python/data/HeisenbergChain_fsz/StdFace.def b/test/python/data/HeisenbergChain_fsz/StdFace.def index 897029a4..ff41d3f1 100644 --- a/test/python/data/HeisenbergChain_fsz/StdFace.def +++ b/test/python/data/HeisenbergChain_fsz/StdFace.def @@ -5,8 +5,8 @@ lattice = "chain" J = 1.0 h = -0.5 Gamma = 0.6 -NSROptItrStep = 1000 -NVMCSample = 500 +NSROptItrStep = 5000 +NVMCSample = 200 DSROptRedCut = 1e-8 DSROptStaDel = 1e-2 DSROptStepDt = 3e-3 diff --git a/test/python/data/HeisenbergChain_fsz_mpi/StdFace.def b/test/python/data/HeisenbergChain_fsz_mpi/StdFace.def index 897029a4..ff41d3f1 100644 --- a/test/python/data/HeisenbergChain_fsz_mpi/StdFace.def +++ b/test/python/data/HeisenbergChain_fsz_mpi/StdFace.def @@ -5,8 +5,8 @@ lattice = "chain" J = 1.0 h = -0.5 Gamma = 0.6 -NSROptItrStep = 1000 -NVMCSample = 500 +NSROptItrStep = 5000 +NVMCSample = 200 DSROptRedCut = 1e-8 DSROptStaDel = 1e-2 DSROptStepDt = 3e-3 From b529f2c9bb2c55f6618ea9ad25790041b3246b90 Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Thu, 6 Jun 2024 10:30:35 +0900 Subject: [PATCH 54/73] modify cmake files to recommended patch in PR38 of StdFace --- CMakeLists.txt | 2 +- src/mVMC/CMakeLists.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f3a885a3..d6d57f92 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -111,7 +111,7 @@ endif() # git submodule update # ref: https://cliutils.gitlab.io/modern-cmake/chapters/projects/submodule.html -set(MVMC ON) # Option for upstream StdFace. +option(MVMC "build mvmc" ON) # Option for upstream StdFace. find_package(Git QUIET) if(NOT STDFACE_DIR) diff --git a/src/mVMC/CMakeLists.txt b/src/mVMC/CMakeLists.txt index 44ae92cf..0c72b24d 100644 --- a/src/mVMC/CMakeLists.txt +++ b/src/mVMC/CMakeLists.txt @@ -23,9 +23,9 @@ set(SOURCES_sfmt link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../pfapack) add_executable(vmcdry.out vmcdry.c) -target_link_libraries(vmcdry.out StdFace m) +target_link_libraries(vmcdry.out StdFace_mvmc m) add_executable(vmc.out ${SOURCES_vmcmain} ${SOURCES_sfmt}) -target_link_libraries(vmc.out StdFace) +target_link_libraries(vmc.out StdFace_mvmc m) target_link_libraries(vmc.out pfapack) target_link_libraries(vmc.out ltl2inv) if(PFAFFIAN_BLOCKED) From 9465061aa059fa4fb1f40a892efcdb6c4f092985 Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Fri, 2 Aug 2024 10:24:35 +0900 Subject: [PATCH 55/73] mod ls_out for lanczos --- doc/en/source/output.rst | 2 +- doc/ja/source/output.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/en/source/output.rst b/doc/en/source/output.rst index 743a277d..bd7e2570 100644 --- a/doc/en/source/output.rst +++ b/doc/en/source/output.rst @@ -328,7 +328,7 @@ xxx\_ls\_out\_yyy.dat ~~~~~~~~~~~~~~~~~~~~~~ This file is the outputted files for :math:`\langle H \rangle`, -:math:`\langle H^2\rangle`, and the optimized parameter :math:`\alpha` +:math:`(\langle H^2\rangle - \langle H \rangle^2)/\langle H \rangle^2`, and the optimized parameter :math:`\alpha` obtained by Power Lanczos method. This file is outputted when ``NVMCCalMode`` = 1, ``NLanczosmode`` = 1 or 2 are set in ``ModPara`` file. Here, xxx is the header indicated by ``CDataFileHead`` in diff --git a/doc/ja/source/output.rst b/doc/ja/source/output.rst index 3d31acf5..68a1102c 100644 --- a/doc/ja/source/output.rst +++ b/doc/ja/source/output.rst @@ -327,7 +327,7 @@ xxx\_ls\_out\_yyy.dat ~~~~~~~~~~~~~~~~~~~~~~ Power Lanczos法により求めた :math:`\langle H \rangle`, -:math:`\langle H^2\rangle` および最適化パラメータ :math:`\alpha` の順に出力されます。 +:math:`(\langle H^2\rangle - \langle H \rangle^2)/\langle H \rangle^2` および最適化パラメータ :math:`\alpha` の順に出力されます。 ``ModPara`` 指定ファイルで ``NVMCCalMode`` =1, ``NLanczosmode`` =1, 2に設定することで計算されます。 xxxには ``CDataFileHead`` で指定されるヘッダが、yyyには ``ModPara`` ファイルの ``NDataIdxStart``, From 92b8485eb42b0cba8ab49eebbb2dbc581fe53bbf Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:18:49 +0900 Subject: [PATCH 56/73] add SRinfo --- doc/en/source/output.rst | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/doc/en/source/output.rst b/doc/en/source/output.rst index bd7e2570..9da47986 100644 --- a/doc/en/source/output.rst +++ b/doc/en/source/output.rst @@ -37,11 +37,13 @@ where both ``NDataIdxStart`` and ``NDataQtySmp`` are defined in +------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ | xxx\_out\_yyy.dat | Energy and deviation. | +------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ +| xxx\_SRinfo.dat | Information related to SR optimization method. | ++------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ | xxx\_var\_yyy.dat | Progress information for optimizing variational parameters. | +------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ | xxx\_CalcTimer.dat | Computation time for each processes. | +------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ -| xxx\_time\_zzz.dat | Progress information for Monte Carlo samplings. | +| xxx\_time\_zzz.dat | Progress information for Monte Carlo samplings. | +------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ | xxx\_cisajs\_yyy.dat | One body Green’s functions. | +------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ @@ -148,6 +150,26 @@ where both ``NDataIdxStart`` and ``NDataQtySmp`` are defined in 2.072610167083121837e+02 2.029162857569105916e-01 ... +xxx\_SRinfo.dat.dat +~~~~~~~~~~~~~~~~~~~~~ + +This file provides the optimization information by the SR method at each step. +From the left column, the number of variational parameters as complex numbers ``Npara``, the dimension of the S metric matrix ``Msize``, the number of variational parameters that are not optimized in the input files for trial wavefunctions such as ``Orbital``, the number of variational parameters cut by the value of ``DSROptRedCut`` in the ``ModPara`` file ``diagCut``, the maximum and minimum values of the diagonal components of the S matrix ``sDiagMax`` and ``sDiagMin``, the maximum value of the change in the variational parameters ``absRmax`` and its parameter index ``imax`` are outputted. +The header specified by ``CDataFileHead`` in the ``ModPara`` file is described in xxx. +An example of the file format is as follows. +Note that the number of imaginary parameters is counted in ``optCut`` when the variational parameters are treated as real variables (``ComplexType=0``). + +:: + + #Npara Msize optCut diagCut sDiagMax sDiagMin absRmax imax + 4 4 4 0 4.17626e-02 0.00000e+00 -1.60883e-01 4 + 4 4 4 0 3.53941e-02 0.00000e+00 1.63056e-01 0 + 4 4 4 0 3.28032e-02 0.00000e+00 1.69939e-01 0 + 4 4 4 0 3.31451e-02 0.00000e+00 1.92363e-01 0 + … + + + xxx\_CalcTimer.dat ~~~~~~~~~~~~~~~~~~~ From b68692c142e5ded0377e91865ebf15c5b9956a11 Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:50:31 +0900 Subject: [PATCH 57/73] mod qptrans and namelist --- doc/en/source/expert.rst | 115 ++++++++++++++++++++++----------------- doc/ja/source/expert.rst | 95 +++++++++++++++++--------------- 2 files changed, 116 insertions(+), 94 deletions(-) diff --git a/doc/en/source/expert.rst b/doc/en/source/expert.rst index 96fb2d99..30789d42 100644 --- a/doc/en/source/expert.rst +++ b/doc/en/source/expert.rst @@ -243,47 +243,52 @@ User rules - When the head of line is ``#``, the line is skipped. -===================== =================================================================================== -Keywords Details for corresponding files -===================== =================================================================================== -ModPara :math:`^*` Parameters for calculation. -LocSpin :math:`^*` Configurations of the local spins for Hamiltonian. -Trans Transfer and chemical potential for Hamiltonian. -InterAll Two-body interactions for Hamiltonian. -CoulombIntra CoulombIntra interactions. -CoulombInter CoulombInter interactions. -Hund Hund couplings. -PairHop Pair hopping couplings. -Exchange Exchange couplings. -Gutzwiller Gutzwiller factors. -Jastrow Charge Jastrow factors. -DH2 2-site doublon-holon correlation factors. -DH4 4-site doublon-holon correlation factors. -GeneralRBM_PhysLayer A part of the general RBM correlation factor including variational parameters in a physical layer :math:`\alpha_{i\sigma}`. - - GeneralRBM_HiddenLayer A part of the general RBM correlation factor including variational parameters in a hidden layer :math:`\h_{k}`. - GeneralRBM_PhysHidden A part of the general RBM correlation factor including variational parameters which connect physical and hidden layers :math:`\W_{i\sigma k}`. -Orbital :math:`^*` Pair orbital factors with anti-parallel spins :math:`f_{i\uparrow j\downarrow}`. -OrbitalAntiParallel Pair orbital factors with anti-parallel spins :math:`f_{i\uparrow j\downarrow}`. -OrbitalParallel Pair orbital factors with parallel spins :math:`f_{i\sigma j\sigma}`. -OrbitalGeneral Pair orbital factors :math:`f_{i\sigma_1 j\sigma_2}`. -TransSym :math:`^*` Translational and lattice symmetry operation. -InGutzwiller Initial values of Gutzwiller factors. -InJastrow Initial values of charge Jastrow factors. -InDH2 Initial values of 2-site doublon-holon correlation factors. -InDH4 Initial values of 4-site doublon-holon correlation factors. - InGeneralRBM_PhysLayer Initial values of variational parameters of the general RBM correlation factors in a physical layer :math:`\alpha_{i\sigma}`. - InGeneralRBM_HiddenLayer Initial values of variational parameters of the general RBM correlation factors in a hidden layer :math:`\h_{k}`. - InGeneralRBM_PhysHidden Initial values of variational parameters of the general RBM correlation factors which connect physical and hidden layers :math:`\W_{i\sigma k}`. -InOrbital Initial values of pair orbital factors :math:`f_{i\uparrow j\downarrow}`. -InOrbitalAntiParallel Initial values of pair orbital factors :math:`f_{i\uparrow j\downarrow}`. -InOrbitalParallel Initial values of pair orbital factors :math:`f_{i\sigma j\sigma}`. -InOrbitalGeneral Initial values of pair orbital factors :math:`f_{i\sigma_1 j\sigma_2}`. -OneBodyG Output components for Green functions - :math:`\langle c_{i\sigma}^{\dagger}c_{j\sigma}\rangle` -TwoBodyG Output components for Correlation functions - :math:`\langle c_{i\sigma}^{\dagger}c_{j\sigma}c_{k\tau}^{\dagger}c_{l\tau}\rangle` -===================== =================================================================================== +======================== =================================================================================== +Keywords Details for corresponding files +======================== =================================================================================== +ModPara :math:`^*` Parameters for calculation. +LocSpin :math:`^*` Configurations of the local spins for Hamiltonian. +Trans Transfer and chemical potential for Hamiltonian. +InterAll Two-body interactions for Hamiltonian. +CoulombIntra CoulombIntra interactions. +CoulombInter CoulombInter interactions. +Hund Hund couplings. +PairHop Pair hopping couplings. +Exchange Exchange couplings. +Gutzwiller Gutzwiller factors. +Jastrow Charge Jastrow factors. +DH2 2-site doublon-holon correlation factors. +DH4 4-site doublon-holon correlation factors. +GeneralRBM_PhysLayer A part of the general RBM correlation factor including variational parameters + in a physical layer :math:`\alpha_{i\sigma}`. +GeneralRBM_HiddenLayer A part of the general RBM correlation factor including variational parameters + in a hidden layer :math:`h_{k}`. +GeneralRBM_PhysHidden A part of the general RBM correlation factor including variational parameters + which connect physical and hidden layers :math:`W_{i\sigma k}`. +Orbital :math:`^*` Pair orbital factors with anti-parallel spins :math:`f_{i\uparrow j\downarrow}`. +OrbitalAntiParallel Pair orbital factors with anti-parallel spins :math:`f_{i\uparrow j\downarrow}`. +OrbitalParallel Pair orbital factors with parallel spins :math:`f_{i\sigma j\sigma}`. +OrbitalGeneral Pair orbital factors :math:`f_{i\sigma_1 j\sigma_2}`. +TransSym :math:`^*` Translational and lattice symmetry operation. +InGutzwiller Initial values of Gutzwiller factors. +InJastrow Initial values of charge Jastrow factors. +InDH2 Initial values of 2-site doublon-holon correlation factors. +InDH4 Initial values of 4-site doublon-holon correlation factors. +InGeneralRBM_PhysLayer Initial values of variational parameters of the general RBM correlation factors + in a physical layer :math:`\alpha_{i\sigma}`. +InGeneralRBM_HiddenLayer Initial values of variational parameters of the general RBM correlation factors + in a hidden layer :math:`h_{k}`. +InGeneralRBM_PhysHidden Initial values of variational parameters of the general RBM correlation factors + which connect physical and hidden layers :math:`W_{i\sigma k}`. +InOrbital Initial values of pair orbital factors :math:`f_{i\uparrow j\downarrow}`. +InOrbitalAntiParallel Initial values of pair orbital factors :math:`f_{i\uparrow j\downarrow}`. +InOrbitalParallel Initial values of pair orbital factors :math:`f_{i\sigma j\sigma}`. +InOrbitalGeneral Initial values of pair orbital factors :math:`f_{i\sigma_1 j\sigma_2}`. +OneBodyG Output components for Green functions + :math:`\langle c_{i\sigma}^{\dagger}c_{j\sigma}\rangle` +TwoBodyG Output components for Correlation functions + :math:`\langle c_{i\sigma}^{\dagger}c_{j\sigma}c_{k\tau}^{\dagger}c_{l\tau}\rangle` +======================== =================================================================================== ModPara file (modpara.def) ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1850,7 +1855,7 @@ User rules GeneralRBM_PhysLayer file -~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In the general RBM correlation factors, .. math:: @@ -1982,7 +1987,7 @@ User rules GeneralRBM_HiddenLayer file -~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In the general RBM correlation factors, .. math:: @@ -2108,7 +2113,7 @@ User rules GeneralRBM_PhysHidden file -~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In the general RBM correlation factors, .. math:: @@ -2259,6 +2264,7 @@ This file sets the calculation conditions of pair orbitals |\phi_{\rm pair} \rangle = \left[\sum_{i, j=1}^{N_s} f_{ij}c_{i\uparrow}^{\dagger}c_{j\downarrow}^{\dagger} \right]^{N/2}|0 \rangle. + Site numbers :math:`i, j` and the variational parameters :math:`f_{ij}` are indicated. An example of the file format is shown as follows. @@ -2689,10 +2695,10 @@ not done. An example of the file format is shown as follows. ==================================== == TrIdx_TrWeight_and_TrIdx_i_xi == ==================================== - 0 1.000000 - 1 1.000000 - 2 1.000000 - 3 1.000000 + 0 1.000000 0.000000 + 1 1.000000 0.000000 + 2 1.000000 0.000000 + 3 1.000000 0.000000 0 0 0 (continue...) 3 12 1 @@ -2710,7 +2716,7 @@ projection patterns as :math:`N_{\rm TS}`, respectively. - Lines 3 - 5: Header -- Lines 6 - (5+ :math:`N_{\rm TS})`: [int02] [double01] +- Lines 6 - (5+ :math:`N_{\rm TS})`: [int02] [double01] [double02] - Lines (6+ :math:`N_{\rm TS}`) - (5+ :math:`(N_s+1) \times N_{\rm TS}`): [int03] [int04] [int05] [int06] @@ -2745,9 +2751,18 @@ Parameters **Type :** double-type (blank parameter not allowed) **Description :** The weight - :math:`p_{\alpha}\cos ({\boldsymbol K}\cdot {\boldsymbol R})` of the projection + Real part of :math:`p_{\alpha}\cos ({\boldsymbol K}\cdot {\boldsymbol R})` of the projection pattern :math:`(\alpha, {\boldsymbol R})`. +- [ double02 ] + + **Type :** double-type (blank parameter not allowed) + + **Description :** The weight + Imaginary part of :math:`p_{\alpha}\cos ({\boldsymbol K}\cdot {\boldsymbol R})` of the projection + pattern :math:`(\alpha, {\boldsymbol R})`. + + - [ int03 ] **Type :** int-type (blank parameter not allowed) diff --git a/doc/ja/source/expert.rst b/doc/ja/source/expert.rst index 253f0783..fdfa9b85 100644 --- a/doc/ja/source/expert.rst +++ b/doc/ja/source/expert.rst @@ -243,44 +243,44 @@ - :math:`\#` で始まる行は読み飛ばされます。 -======================== ======================================================================= - Keywords 対応するファイルの概要 -======================== ======================================================================= - ModPara :math:`^*` 計算用のパラメータを指定します。 - LocSpin :math:`^*` 局在・遍歴スピンを指定します。 - Trans 一般的な一体相互作用を指定します。 - InterAll 一般的な二体相互作用を指定します。 - CoulombIntra 内部クーロン相互作用を指定します。 - CoulombInter サイト間クーロン相互作用を指定します。 - Hund フント結合を指定します。 - PairHop ペアホッピング相互作用を指定します。 - Exchange 交換相互作用を指定します。 - Gutzwiller 最適化するGutzwiller因子を設定します。 - Jastrow 最適化する電荷Jastrow因子を指定します。 - DH2 最適化する2サイトダブロン・ホロン相関因子を指定します。 - DH4 最適化する4サイトダブロン・ホロン相関因子を指定します。 - GeneralRBM_PhysLayer 一般的なRBM相関因子のうち、最適化する物理層での変分パラメータを指定します。 - GeneralRBM_HiddenLayer 一般的なRBM相関因子のうち、最適化する隠れ層での変分パラメータを指定します。 - GeneralRBM_PhysHidden 一般的なRBM相関因子のうち、最適化する物理層と隠れ層を繋ぐ変分パラメータを指定します。 - Orbital :math:`^*` 反平行のスピンを持つペア軌道因子を指定します。 - OrbitalAntiParallel 反平行のスピンを持つペア軌道因子を指定します。 - OrbitalParallel 平行のスピンを持つペア軌道因子を指定します。 - OrbitalGeneral ペア軌道因子を指定します。 - TransSym :math:`^*` 並進・格子対称演算子を設定します。 - InGutzwiller Gutzwiller因子の初期値を設定します。 - InJastrow 電荷Jastrow因子の初期値を設定します。 - InDH2 2サイトダブロン・ホロン相関因子の初期値を設定します。 - InDH4 4サイトダブロン・ホロン相関因子の初期値を設定します。 +========================== =========================================================================================== + Keywords 対応するファイルの概要 +========================== =========================================================================================== + ModPara :math:`^*` 計算用のパラメータを指定します。 + LocSpin :math:`^*` 局在・遍歴スピンを指定します。 + Trans 一般的な一体相互作用を指定します。 + InterAll 一般的な二体相互作用を指定します。 + CoulombIntra 内部クーロン相互作用を指定します。 + CoulombInter サイト間クーロン相互作用を指定します。 + Hund フント結合を指定します。 + PairHop ペアホッピング相互作用を指定します。 + Exchange 交換相互作用を指定します。 + Gutzwiller 最適化するGutzwiller因子を設定します。 + Jastrow 最適化する電荷Jastrow因子を指定します。 + DH2 最適化する2サイトダブロン・ホロン相関因子を指定します。 + DH4 最適化する4サイトダブロン・ホロン相関因子を指定します。 + GeneralRBM_PhysLayer 一般的なRBM相関因子のうち、最適化する物理層での変分パラメータを指定します。 + GeneralRBM_HiddenLayer 一般的なRBM相関因子のうち、最適化する隠れ層での変分パラメータを指定します。 + GeneralRBM_PhysHidden 一般的なRBM相関因子のうち、最適化する物理層と隠れ層を繋ぐ変分パラメータを指定します。 + Orbital :math:`^*` 反平行のスピンを持つペア軌道因子を指定します。 + OrbitalAntiParallel 反平行のスピンを持つペア軌道因子を指定します。 + OrbitalParallel 平行のスピンを持つペア軌道因子を指定します。 + OrbitalGeneral ペア軌道因子を指定します。 + TransSym :math:`^*` 並進・格子対称演算子を設定します。 + InGutzwiller Gutzwiller因子の初期値を設定します。 + InJastrow 電荷Jastrow因子の初期値を設定します。 + InDH2 2サイトダブロン・ホロン相関因子の初期値を設定します。 + InDH4 4サイトダブロン・ホロン相関因子の初期値を設定します。 InGeneralRBM_PhysLayer 一般的なRBM相関因子のうち、最適化する物理層での変分パラメータの初期値を設定します。 InGeneralRBM_HiddenLayer 一般的なRBM相関因子のうち、最適化する隠れ層での変分パラメータの初期値を設定します。 InGeneralRBM_PhysHidden 一般的なRBM相関因子のうち、最適化する物理層と隠れ層を繋ぐ変分パラメータの初期値を設定します。 - InOrbital ペア軌道因子 :math:`f_{i\uparrow j\downarrow}` の初期値を設定します。 - InOrbitalAntiParallel ペア軌道因子 :math:`f_{i\uparrow j\downarrow}` の初期値を設定します。 - InOrbitalParallel ペア軌道因子 :math:`f_{i\sigma j\sigma}` の初期値を設定します。 - InOrbitalGeneral ペア軌道因子 :math:`f_{i\sigma j\sigma'}` の初期値を設定します。 - OneBodyG 出力する一体グリーン関数を指定します。 - TwoBodyG 出力する二体グリーン関数を指定します。 -======================== ======================================================================= + InOrbital ペア軌道因子 :math:`f_{i\uparrow j\downarrow}` の初期値を設定します。 + InOrbitalAntiParallel ペア軌道因子 :math:`f_{i\uparrow j\downarrow}` の初期値を設定します。 + InOrbitalParallel ペア軌道因子 :math:`f_{i\sigma j\sigma}` の初期値を設定します。 + InOrbitalGeneral ペア軌道因子 :math:`f_{i\sigma j\sigma'}` の初期値を設定します。 + OneBodyG 出力する一体グリーン関数を指定します。 + TwoBodyG 出力する二体グリーン関数を指定します。 +========================== =========================================================================================== ModParaファイル (modpara.def) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -582,7 +582,7 @@ ModParaファイル (modpara.def) **形式 :** int型 (デフォルト値=0) - **説明 :** RBMの隠れ層にあるニューロン数 :math:`N_{\rm General RBM}`を指定する整数。 + **説明 :** RBMの隠れ層にあるニューロン数 :math:`N_{\rm General RBM}` を指定する整数。 LocSpin指定ファイル(locspn.def) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1908,7 +1908,7 @@ RBM因子 GeneralRBM_HiddenLayer指定ファイル -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RBM因子 @@ -2026,7 +2026,7 @@ RBM因子 - [ int02 ]-[ int06 ] を指定する際、範囲外の整数を指定した場合はエラー終了します。 GeneralRBM_PhysHidden指定ファイル -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RBM因子 @@ -2542,10 +2542,10 @@ TransSym指定ファイル(qptransidx.def) ==================================== == TrIdx_TrWeight_and_TrIdx_i_xi == ==================================== - 0 1.000000 - 1 1.000000 - 2 1.000000 - 3 1.000000 + 0 1.000000 0.000000 + 1 1.000000 0.000000 + 2 1.000000 0.000000 + 3 1.000000 0.000000 0 0 0 (continue...) 3 12 1 @@ -2562,7 +2562,7 @@ TransSym指定ファイル(qptransidx.def) - 3-5行: ヘッダ(何が書かれても問題ありません)。 -- 6 - (5+ :math:`N_{\rm TS}`)行: [int02] [double01] +- 6 - (5+ :math:`N_{\rm TS}`)行: [int02] [double01] [double02] - (6+ :math:`N_{\rm TS}`) - (5+ :math:`(N_s+1) \times N_{\rm TS}`)行:[int03] [int04] [int05] [int06] @@ -2595,7 +2595,14 @@ TransSym指定ファイル(qptransidx.def) **形式 :** double型 (空白不可) **説明 :** - 射影パターン :math:`(\alpha, {\boldsymbol R})` の重み :math:`p_{\alpha}\cos ({\boldsymbol K}\cdot {\boldsymbol R})` を指定します。 + 射影パターン :math:`(\alpha, {\boldsymbol R})` の重み :math:`p_{\alpha}\cos ({\boldsymbol K}\cdot {\boldsymbol R})` の実部を指定します。 + +- [ double02 ] + + **形式 :** double型 + + **説明 :** + 射影パターン :math:`(\alpha, {\boldsymbol R})` の重み :math:`p_{\alpha}\exp (i{\boldsymbol K}\cdot {\boldsymbol R})` の虚部を指定します。 - [ int03 ] From 28e78bbceed62ff060fc50d6b9cc5d5d7724ed46 Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Wed, 7 Aug 2024 08:33:46 +0900 Subject: [PATCH 58/73] update StdFace submodule: v1.0 --- src/StdFace | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/StdFace b/src/StdFace index 2fe757b1..ab32f48a 160000 --- a/src/StdFace +++ b/src/StdFace @@ -1 +1 @@ -Subproject commit 2fe757b104835c1747e43d69c7ac749bb38739ed +Subproject commit ab32f48ab5e9aaf316d4167e0f555738b663da1f From 9bad3061dbbcb655b09dfcd9f17b442db5657fa1 Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Thu, 8 Aug 2024 09:46:45 +0900 Subject: [PATCH 59/73] mod --- src/mVMC/locgrn.c | 6 +++++- src/mVMC/lslocgrn.c | 9 +++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/mVMC/locgrn.c b/src/mVMC/locgrn.c index f9af4300..71f0fec7 100644 --- a/src/mVMC/locgrn.c +++ b/src/mVMC/locgrn.c @@ -288,6 +288,10 @@ double complex GreenFuncN(const int n, int *rsi, int *rsj, const double complex MakeProjCnt(projCntNew,eleNum); x = ProjRatio(projCntNew,eleProjCnt); + if (FlagRBM) { + MakeRBMCnt(rbmCntNew, eleNum); + x *= RBMRatio(rbmCntNew,rbmCnt); + } /* calculateNewPfM */ for(qpidx=0;qpidx/ for /=0 */ From 0f68a4bccf31688072b29de63363d679c4ff4462 Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Thu, 15 Aug 2024 10:09:11 +0900 Subject: [PATCH 60/73] update StdFace submodule: v1.0.1 --- CMakeLists.txt | 1 + src/StdFace | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d6d57f92..383d0210 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,6 +112,7 @@ endif() # git submodule update # ref: https://cliutils.gitlab.io/modern-cmake/chapters/projects/submodule.html option(MVMC "build mvmc" ON) # Option for upstream StdFace. +option(TestStdFace "run test for StdFace" OFF) find_package(Git QUIET) if(NOT STDFACE_DIR) diff --git a/src/StdFace b/src/StdFace index ab32f48a..6fa4ef1f 160000 --- a/src/StdFace +++ b/src/StdFace @@ -1 +1 @@ -Subproject commit ab32f48ab5e9aaf316d4167e0f555738b663da1f +Subproject commit 6fa4ef1f6809001a24b6501bd08f988bdc8cb7c4 From cb049b3b5a460a3cd513a2539dcc21fccc3ace4a Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Thu, 15 Aug 2024 10:15:24 +0900 Subject: [PATCH 61/73] mod vmcdry.c --- src/mVMC/vmcdry.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mVMC/vmcdry.c b/src/mVMC/vmcdry.c index 9e01c538..b3200426 100644 --- a/src/mVMC/vmcdry.c +++ b/src/mVMC/vmcdry.c @@ -29,7 +29,7 @@ void StdFace_main(char *fname); int main(int argc, char *argv[]) { if (argc == 1){ - printf("Usage: %s StdFace.def\n"); + printf("Usage: %s StdFace.def\n", argv[0]); return 1; } From 0532a5fe992b1dab2cceb7e5d5a5c1fb76464aef Mon Sep 17 00:00:00 2001 From: "T.Aoyama" Date: Mon, 19 Aug 2024 12:24:43 +0900 Subject: [PATCH 62/73] update workflow script --- .github/workflows/main.yml | 5 +---- config/apple.cmake | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b49b05fe..4c23a9fe 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -52,13 +52,10 @@ jobs: run: | if [ ${{ runner.os }} = "macOS" ] ; then # CONFIG=apple requires gfortran but macOS runner has not, but gfortran-11, 12, ... - ln -s `which gfortran-11` gfortran - env PATH=`pwd`:$PATH cmake -DCONFIG=apple -DCMAKE_VERBOSE_MAKEFILE=ON $GITHUB_WORKSPACE + cmake -DCONFIG=apple -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_Fortran_COMPILER=gfortran-14 $GITHUB_WORKSPACE else cmake -DCMAKE_VERBOSE_MAKEFILE=ON $GITHUB_WORKSPACE fi - env: - HOMEBREW_PREFIX: /opt/homebrew - name: build working-directory: ${{runner.workspace}}/build diff --git a/config/apple.cmake b/config/apple.cmake index 7467c52f..37a7a290 100644 --- a/config/apple.cmake +++ b/config/apple.cmake @@ -2,7 +2,7 @@ # additional libomp and gfortran installation required # mac computers are suggested to use this configuration for better performance -if(NOT $ENV{HOMEBREW_PREFIX}) +if(NOT DEFINED ENV{HOMEBREW_PREFIX}) message(FATAL "Homebrew is not installed. Please install Homebrew first.") endif() From 4bdc71d745d588ce7aff59e021670f415e773bd8 Mon Sep 17 00:00:00 2001 From: "T.Aoyama" Date: Mon, 19 Aug 2024 15:40:59 +0900 Subject: [PATCH 63/73] update workflow script for macos-lateset --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4c23a9fe..27f7dbfb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -52,7 +52,7 @@ jobs: run: | if [ ${{ runner.os }} = "macOS" ] ; then # CONFIG=apple requires gfortran but macOS runner has not, but gfortran-11, 12, ... - cmake -DCONFIG=apple -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_Fortran_COMPILER=gfortran-14 $GITHUB_WORKSPACE + cmake -DCONFIG=apple -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_Fortran_COMPILER=gfortran-14 -DCMAKE_AR=/usr/bin/ar $GITHUB_WORKSPACE else cmake -DCMAKE_VERBOSE_MAKEFILE=ON $GITHUB_WORKSPACE fi From e7ad18c18d7f3b7f1d63fbb4e2694184768a2ec1 Mon Sep 17 00:00:00 2001 From: "T.Aoyama" Date: Mon, 19 Aug 2024 17:46:36 +0900 Subject: [PATCH 64/73] update workflow script for macos-latest --- .github/workflows/main.yml | 4 ++-- CMakeLists.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 27f7dbfb..2766cdd0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -32,7 +32,7 @@ jobs: - name: brew if: ${{ runner.os == 'macOS' }} run: | - brew install openmpi scalapack libomp + brew install openmpi scalapack libomp blis - name: Setup Python uses: actions/setup-python@v5 @@ -52,7 +52,7 @@ jobs: run: | if [ ${{ runner.os }} = "macOS" ] ; then # CONFIG=apple requires gfortran but macOS runner has not, but gfortran-11, 12, ... - cmake -DCONFIG=apple -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_Fortran_COMPILER=gfortran-14 -DCMAKE_AR=/usr/bin/ar $GITHUB_WORKSPACE + cmake -DCONFIG=apple -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_Fortran_COMPILER=gfortran-14 $GITHUB_WORKSPACE else cmake -DCMAKE_VERBOSE_MAKEFILE=ON $GITHUB_WORKSPACE fi diff --git a/CMakeLists.txt b/CMakeLists.txt index 3257d79d..4308c5da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(mVMC NONE) option(USE_SCALAPACK "Use Scalapack" OFF) From ff1ae7a7c3ab0795d12ff10392ebfefc16e26b30 Mon Sep 17 00:00:00 2001 From: "T.Aoyama" Date: Wed, 21 Aug 2024 04:06:59 +0900 Subject: [PATCH 65/73] fix call to ilaenv --- src/ltl2inv/ilaenv_lauum.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ltl2inv/ilaenv_lauum.cc b/src/ltl2inv/ilaenv_lauum.cc index f150384f..bc95b6e6 100644 --- a/src/ltl2inv/ilaenv_lauum.cc +++ b/src/ltl2inv/ilaenv_lauum.cc @@ -13,7 +13,8 @@ template <> int ilaenv_lauum(uplo_t uplo, int n) \ char uplo_ = uplo2char(uplo); \ int ispec = 1; \ int dummy = 0; \ - return ilaenv_(&ispec, #name, &uplo_, &n, &dummy, &dummy, &dummy); \ + int n_ = n; \ + return ilaenv_(&ispec, #name, &uplo_, &n_, &dummy, &dummy, &dummy); \ } EXPANDMAC( float, SLAUUM ) EXPANDMAC( double, DLAUUM ) From 749c9c101914af6179574ebb92f5e42a45595759 Mon Sep 17 00:00:00 2001 From: "T.Aoyama" Date: Wed, 21 Aug 2024 04:08:06 +0900 Subject: [PATCH 66/73] modify build conditions --- .github/workflows/main.yml | 2 +- config/gcc.cmake | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b49b05fe..82dba41d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -55,7 +55,7 @@ jobs: ln -s `which gfortran-11` gfortran env PATH=`pwd`:$PATH cmake -DCONFIG=apple -DCMAKE_VERBOSE_MAKEFILE=ON $GITHUB_WORKSPACE else - cmake -DCMAKE_VERBOSE_MAKEFILE=ON $GITHUB_WORKSPACE + cmake -DCONFIG=gcc -DCMAKE_VERBOSE_MAKEFILE=ON $GITHUB_WORKSPACE fi env: HOMEBREW_PREFIX: /opt/homebrew diff --git a/config/gcc.cmake b/config/gcc.cmake index 751912d7..8a15d2dc 100644 --- a/config/gcc.cmake +++ b/config/gcc.cmake @@ -3,4 +3,5 @@ set(CMAKE_C_COMPILER "gcc" CACHE STRING "" FORCE) set(CMAKE_CXX_COMPILER "g++" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS_DEBUG "-g -O0 -Wall -Wformat -Werror=format-security") set(CMAKE_C_FLAGS_RELEASE "-O3 -Wno-unknown-pragmas ") +set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wno-unknown-pragmas ") set(CMAKE_Fortran_COMPILER "gfortran" CACHE STRING "" FORCE) From ae384ec6b273c607c82aae66fbd67ac2d05ad65a Mon Sep 17 00:00:00 2001 From: "T.Aoyama" Date: Wed, 21 Aug 2024 04:23:03 +0900 Subject: [PATCH 67/73] modify build parameter --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 82dba41d..b49b05fe 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -55,7 +55,7 @@ jobs: ln -s `which gfortran-11` gfortran env PATH=`pwd`:$PATH cmake -DCONFIG=apple -DCMAKE_VERBOSE_MAKEFILE=ON $GITHUB_WORKSPACE else - cmake -DCONFIG=gcc -DCMAKE_VERBOSE_MAKEFILE=ON $GITHUB_WORKSPACE + cmake -DCMAKE_VERBOSE_MAKEFILE=ON $GITHUB_WORKSPACE fi env: HOMEBREW_PREFIX: /opt/homebrew From ef9d66b27b0befed0b38c4284593665bf5188d1c Mon Sep 17 00:00:00 2001 From: "T.Aoyama" Date: Thu, 22 Aug 2024 16:17:19 +0900 Subject: [PATCH 68/73] modify ilaenv_lauum to use wrapped version of ilaenv --- src/ltl2inv/CMakeLists.txt | 2 +- src/ltl2inv/ilaenv.h | 3 +++ src/ltl2inv/ilaenv_lauum.cc | 32 ++++++++++++++++++++++++++++++-- src/ltl2inv/ilaenv_wrap.f90 | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 src/ltl2inv/ilaenv_wrap.f90 diff --git a/src/ltl2inv/CMakeLists.txt b/src/ltl2inv/CMakeLists.txt index 8aa7141c..88a55025 100644 --- a/src/ltl2inv/CMakeLists.txt +++ b/src/ltl2inv/CMakeLists.txt @@ -11,6 +11,6 @@ endif() include_directories(../common) # TODO: Move blalink_gemmt.c to other subprojects? -add_library(ltl2inv STATIC ltl2inv.cc blalink_gemmt.c ilaenv_lauum.cc) +add_library(ltl2inv STATIC ltl2inv.cc blalink_gemmt.c ilaenv_lauum.cc ilaenv_wrap.f90) target_compile_definitions(ltl2inv PRIVATE -D_CC_IMPL) diff --git a/src/ltl2inv/ilaenv.h b/src/ltl2inv/ilaenv.h index add0a1ed..f4762491 100644 --- a/src/ltl2inv/ilaenv.h +++ b/src/ltl2inv/ilaenv.h @@ -8,7 +8,10 @@ extern "C" { #endif +/* int ilaenv_(const int *ispec, const char *name, const char *opts, const int *n1, const int *n2, const int *n3, const int *n4); +*/ +int ilaenv_wrap(int ispec, const char *name, const char *opts, int n1, int n2, int n3, int n4); #ifdef __cplusplus } diff --git a/src/ltl2inv/ilaenv_lauum.cc b/src/ltl2inv/ilaenv_lauum.cc index bc95b6e6..fa6beaff 100644 --- a/src/ltl2inv/ilaenv_lauum.cc +++ b/src/ltl2inv/ilaenv_lauum.cc @@ -7,15 +7,43 @@ #include "ilaenv.h" #include "ilaenv_lauum.hh" +/* + * sloppy version exploits that + * ILAENV(ispec=1, xLAUUM, "", dummy, dummy, dummy, dummy) + * returns 64 for x=S,D,C,Z . + */ + +#undef SLOPPY_ILAENV +// #define SLOPPY_ILAENV + +/* #define EXPANDMAC(cctype, name) \ template <> int ilaenv_lauum(uplo_t uplo, int n) \ { \ char uplo_ = uplo2char(uplo); \ int ispec = 1; \ int dummy = 0; \ - int n_ = n; \ - return ilaenv_(&ispec, #name, &uplo_, &n_, &dummy, &dummy, &dummy); \ + return ilaenv_(&ispec, #name, &uplo_, &n, &dummy, &dummy, &dummy); \ } +*/ + +#ifndef SLOPPY_ILAENV +#define EXPANDMAC(cctype, name) \ +template <> int ilaenv_lauum(uplo_t uplo, int n) \ +{ \ + char uplo_ = uplo2char(uplo); \ + int ispec = 1; \ + int dummy = -1; \ + return ilaenv_wrap(ispec, #name, &uplo_, n, dummy, dummy, dummy); \ +} +#else +#define EXPANDMAC(cctype, name) \ +template <> int ilaenv_lauum(uplo_t uplo, int n) \ +{ \ + return 64; \ +} +#endif + EXPANDMAC( float, SLAUUM ) EXPANDMAC( double, DLAUUM ) EXPANDMAC( ccscmplx, CLAUUM ) diff --git a/src/ltl2inv/ilaenv_wrap.f90 b/src/ltl2inv/ilaenv_wrap.f90 new file mode 100644 index 00000000..f4e62167 --- /dev/null +++ b/src/ltl2inv/ilaenv_wrap.f90 @@ -0,0 +1,37 @@ +module wrapper + use, intrinsic :: iso_c_binding + implicit none +contains + function c_charptr_to_f_charptr(ccp) result(result) + type(c_ptr),intent(in),value :: ccp + character(:,c_char),pointer :: result + interface + function strlen(p) bind(c) + import c_ptr, c_size_t + type(c_ptr),value :: p + integer(c_size_t) strlen + end function strlen + end interface + result => convert_cptr(ccp,strlen(ccp)) + contains + function convert_cptr(p, len) + type(c_ptr),intent(in) :: p + integer(c_size_t),intent(in) :: len + character(len, c_char),pointer :: convert_cptr + call c_f_pointer(p, convert_cptr) + end function convert_cptr + end function c_charptr_to_f_charptr + + integer function ilaenv_wrap(ispec, name, opts, n1, n2, n3, n4) bind(c, name="ilaenv_wrap") + implicit none + integer,intent(in),value :: ispec, n1, n2, n3, n4 + type(c_ptr),intent(in),value :: name, opts + character(:,c_char),pointer :: namef, optsf + integer ilaenv + + namef => c_charptr_to_f_charptr(name) + optsf => c_charptr_to_f_charptr(opts) + + ilaenv_wrap = ILAENV(ispec, namef, optsf, n1, n2, n3, n4) + end function ilaenv_wrap +end module wrapper From c36820d05331935a06a694dce5e15ec934d79dbe Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Wed, 18 Sep 2024 08:46:42 +0900 Subject: [PATCH 69/73] add test --- test/python/CMakeLists.txt | 14 + .../data/GeneralRBM_cmp/coulombintra.def | 15 + test/python/data/GeneralRBM_cmp/greenone.def | 25 + test/python/data/GeneralRBM_cmp/greentwo.def | 65 ++ .../data/GeneralRBM_cmp/gutzwilleridx.def | 16 + test/python/data/GeneralRBM_cmp/initial.def | 1 + .../python/data/GeneralRBM_cmp/jastrowidx.def | 100 ++ test/python/data/GeneralRBM_cmp/locspn.def | 15 + test/python/data/GeneralRBM_cmp/modpara.def | 33 + test/python/data/GeneralRBM_cmp/namelist.def | 13 + .../python/data/GeneralRBM_cmp/orbitalidx.def | 115 +++ .../python/data/GeneralRBM_cmp/qptransidx.def | 16 + .../data/GeneralRBM_cmp/rbm_hlayeridx.def | 49 + test/python/data/GeneralRBM_cmp/rbm_phidx.def | 885 ++++++++++++++++++ .../data/GeneralRBM_cmp/rbm_playeridx.def | 27 + .../data/GeneralRBM_cmp/ref/ref_mean.dat | 312 ++++++ .../data/GeneralRBM_cmp/ref/ref_std.dat | 312 ++++++ test/python/data/GeneralRBM_cmp/trans.def | 45 + test/python/runtest_expert.py | 50 + 19 files changed, 2108 insertions(+) create mode 100644 test/python/data/GeneralRBM_cmp/coulombintra.def create mode 100644 test/python/data/GeneralRBM_cmp/greenone.def create mode 100644 test/python/data/GeneralRBM_cmp/greentwo.def create mode 100644 test/python/data/GeneralRBM_cmp/gutzwilleridx.def create mode 100644 test/python/data/GeneralRBM_cmp/initial.def create mode 100644 test/python/data/GeneralRBM_cmp/jastrowidx.def create mode 100644 test/python/data/GeneralRBM_cmp/locspn.def create mode 100644 test/python/data/GeneralRBM_cmp/modpara.def create mode 100644 test/python/data/GeneralRBM_cmp/namelist.def create mode 100644 test/python/data/GeneralRBM_cmp/orbitalidx.def create mode 100644 test/python/data/GeneralRBM_cmp/qptransidx.def create mode 100644 test/python/data/GeneralRBM_cmp/rbm_hlayeridx.def create mode 100644 test/python/data/GeneralRBM_cmp/rbm_phidx.def create mode 100644 test/python/data/GeneralRBM_cmp/rbm_playeridx.def create mode 100644 test/python/data/GeneralRBM_cmp/ref/ref_mean.dat create mode 100644 test/python/data/GeneralRBM_cmp/ref/ref_std.dat create mode 100644 test/python/data/GeneralRBM_cmp/trans.def create mode 100644 test/python/runtest_expert.py diff --git a/test/python/CMakeLists.txt b/test/python/CMakeLists.txt index 75e39897..ea93f853 100644 --- a/test/python/CMakeLists.txt +++ b/test/python/CMakeLists.txt @@ -1,6 +1,7 @@ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/runtest.py DESTINATION ${CMAKE_BINARY_DIR}/test/python) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/runtest_mode1.py DESTINATION ${CMAKE_BINARY_DIR}/test/python) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/runtest_mpi.py DESTINATION ${CMAKE_BINARY_DIR}/test/python) +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/runtest_expert.py DESTINATION ${CMAKE_BINARY_DIR}/test/python) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/runtest_UHF.py DESTINATION ${CMAKE_BINARY_DIR}/test/python) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test_UHF_InterAll.py DESTINATION ${CMAKE_BINARY_DIR}/test/python) @@ -19,6 +20,11 @@ function(add_python_vmc_test_mpi model) set_tests_properties(${model} PROPERTIES ENVIRONMENT "PYTHONPATH=${CMAKE_BINARY_DIR}/test/python") endfunction(add_python_vmc_test_mpi) +function(add_python_vmc_test_expert model) + add_test(NAME ${model} COMMAND ${PYTHON_EXECUTABLE} runtest_expert.py ${model}) + set_tests_properties(${model} PROPERTIES ENVIRONMENT "PYTHONPATH=${CMAKE_BINARY_DIR}/test/python") +endfunction(add_python_vmc_test_expert) + function(add_python_uhf_test model) add_test(NAME ${model} COMMAND ${PYTHON_EXECUTABLE} runtest_UHF.py ${model}) set_tests_properties(${model} PROPERTIES ENVIRONMENT "PYTHONPATH=${CMAKE_BINARY_DIR}/test/python") @@ -61,6 +67,9 @@ set(python_test_vmc_model_mode1 HubbardChainLanczos ) +set(python_test_vmc_model_expert + GeneralRBM_cmp +) set(python_test_uhf_model UHF_HubbardSquare @@ -68,6 +77,7 @@ set(python_test_uhf_model UHF_InterAll_N2 ) + foreach(model ${python_test_vmc_model}) add_python_vmc_test(${model}) endforeach(model) @@ -80,6 +90,10 @@ foreach(model ${python_test_vmc_model_mode1}) add_python_vmc_test_mode1(${model}) endforeach(model) +foreach(model ${python_test_vmc_model_expert}) + add_python_vmc_test_expert(${model}) +endforeach(model) + foreach(model ${python_test_uhf_model}) add_python_uhf_test(${model}) endforeach(model) diff --git a/test/python/data/GeneralRBM_cmp/coulombintra.def b/test/python/data/GeneralRBM_cmp/coulombintra.def new file mode 100644 index 00000000..602d2a53 --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/coulombintra.def @@ -0,0 +1,15 @@ +============================================= +NCoulombIntra 10 +============================================= +================== CoulombIntra ================ +============================================= + 0 8.000000000000000 + 1 8.000000000000000 + 2 8.000000000000000 + 3 8.000000000000000 + 4 8.000000000000000 + 5 8.000000000000000 + 6 8.000000000000000 + 7 8.000000000000000 + 8 8.000000000000000 + 9 8.000000000000000 diff --git a/test/python/data/GeneralRBM_cmp/greenone.def b/test/python/data/GeneralRBM_cmp/greenone.def new file mode 100644 index 00000000..f5ca7ac1 --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/greenone.def @@ -0,0 +1,25 @@ +=============================== +NCisAjs 20 +=============================== +======== Green functions ====== +=============================== + 0 0 0 0 + 0 0 1 0 + 0 0 2 0 + 0 0 3 0 + 0 0 4 0 + 0 0 5 0 + 0 0 6 0 + 0 0 7 0 + 0 0 8 0 + 0 0 9 0 + 0 1 0 1 + 0 1 1 1 + 0 1 2 1 + 0 1 3 1 + 0 1 4 1 + 0 1 5 1 + 0 1 6 1 + 0 1 7 1 + 0 1 8 1 + 0 1 9 1 diff --git a/test/python/data/GeneralRBM_cmp/greentwo.def b/test/python/data/GeneralRBM_cmp/greentwo.def new file mode 100644 index 00000000..3f0dbec0 --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/greentwo.def @@ -0,0 +1,65 @@ +============================================= +NCisAjsCktAltDC 60 +============================================= +======== Green functions for Sq AND Nq ====== +============================================= + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 1 + 0 0 0 0 1 0 1 0 + 0 0 0 0 1 1 1 1 + 0 0 0 0 2 0 2 0 + 0 0 0 0 2 1 2 1 + 0 0 0 0 3 0 3 0 + 0 0 0 0 3 1 3 1 + 0 0 0 0 4 0 4 0 + 0 0 0 0 4 1 4 1 + 0 0 0 0 5 0 5 0 + 0 0 0 0 5 1 5 1 + 0 0 0 0 6 0 6 0 + 0 0 0 0 6 1 6 1 + 0 0 0 0 7 0 7 0 + 0 0 0 0 7 1 7 1 + 0 0 0 0 8 0 8 0 + 0 0 0 0 8 1 8 1 + 0 0 0 0 9 0 9 0 + 0 0 0 0 9 1 9 1 + 0 0 0 0 0 1 0 1 + 0 0 1 0 1 1 0 1 + 0 0 2 0 2 1 0 1 + 0 0 3 0 3 1 0 1 + 0 0 4 0 4 1 0 1 + 0 0 5 0 5 1 0 1 + 0 0 6 0 6 1 0 1 + 0 0 7 0 7 1 0 1 + 0 0 8 0 8 1 0 1 + 0 0 9 0 9 1 0 1 + 0 1 0 1 0 0 0 0 + 0 1 1 1 1 0 0 0 + 0 1 2 1 2 0 0 0 + 0 1 3 1 3 0 0 0 + 0 1 4 1 4 0 0 0 + 0 1 5 1 5 0 0 0 + 0 1 6 1 6 0 0 0 + 0 1 7 1 7 0 0 0 + 0 1 8 1 8 0 0 0 + 0 1 9 1 9 0 0 0 + 0 1 0 1 0 0 0 0 + 0 1 0 1 0 1 0 1 + 0 1 0 1 1 0 1 0 + 0 1 0 1 1 1 1 1 + 0 1 0 1 2 0 2 0 + 0 1 0 1 2 1 2 1 + 0 1 0 1 3 0 3 0 + 0 1 0 1 3 1 3 1 + 0 1 0 1 4 0 4 0 + 0 1 0 1 4 1 4 1 + 0 1 0 1 5 0 5 0 + 0 1 0 1 5 1 5 1 + 0 1 0 1 6 0 6 0 + 0 1 0 1 6 1 6 1 + 0 1 0 1 7 0 7 0 + 0 1 0 1 7 1 7 1 + 0 1 0 1 8 0 8 0 + 0 1 0 1 8 1 8 1 + 0 1 0 1 9 0 9 0 + 0 1 0 1 9 1 9 1 diff --git a/test/python/data/GeneralRBM_cmp/gutzwilleridx.def b/test/python/data/GeneralRBM_cmp/gutzwilleridx.def new file mode 100644 index 00000000..35a870cb --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/gutzwilleridx.def @@ -0,0 +1,16 @@ +============================================= +NGutzwillerIdx 1 +ComplexType 0 +============================================= +============================================= + 0 0 + 1 0 + 2 0 + 3 0 + 4 0 + 5 0 + 6 0 + 7 0 + 8 0 + 9 0 + 0 1 diff --git a/test/python/data/GeneralRBM_cmp/initial.def b/test/python/data/GeneralRBM_cmp/initial.def new file mode 100644 index 00000000..48e542c1 --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/initial.def @@ -0,0 +1 @@ + 1.141928120671135183e+01 2.802141748193133497e-02 1.433028696512933742e+00 1.821768981883505489e+02 0.000000000000000000e+00 4.827545218644152669e+01 -1.040746446292785676e-01 0.000000000000000000e+00 7.096273242956433781e-03 2.321261317285507747e-02 0.000000000000000000e+00 1.698493317307660537e-03 2.401259212907888227e-02 0.000000000000000000e+00 1.394432555957268857e-03 1.485571471295256407e-02 0.000000000000000000e+00 1.067887056545590912e-03 2.803807359486053946e-02 0.000000000000000000e+00 4.078906747066205103e-03 1.395565101953150089e-02 0.000000000000000000e+00 1.143446433920292929e-03 5.505499113518438209e-04 -5.163804247029171344e-04 0.000000000000000000e+00 5.172394703804498485e-03 3.831282890132404074e-03 0.000000000000000000e+00 -3.451992033500094620e-02 -1.338520540903842190e-02 1.139372257546324672e-02 -2.079799294758274270e-02 -2.639346344666517255e-02 1.872968668116896385e-02 -1.520263515060717857e-02 3.655661187071228280e-02 1.060782422510961331e-02 -3.465155520283447199e-02 -7.692051752869212555e-02 1.810694952327393872e-03 3.201811340227254249e-02 2.176924944650117377e-02 2.380345185519919596e-03 -6.417667550222630468e-02 1.004314767885620616e-02 3.420442582421810533e-03 -9.310714127878467680e-03 -2.716220702598887149e-02 5.177402478696417794e-03 1.726170432542478012e-02 -2.335296475860131754e-02 6.854614297036322815e-03 -1.213876779717242352e-02 -8.627011149628042996e-03 5.427712004285082173e-03 3.714963191880824023e-02 -2.869050889857973491e-03 3.945932809720879841e-03 -8.232497424913168271e-02 4.182894618421030466e-04 4.373607024710911978e-03 3.996343243429947151e-02 5.816714939245767706e-03 3.496878099602109685e-03 -5.711698225990175654e-03 2.503074878297133210e-02 8.922354246503644282e-03 -6.831834277542230688e-04 4.376823457946842078e-02 1.099974568959375190e-02 3.834457099671060437e-02 3.918553715039099772e-02 2.202984772396846848e-03 -3.102289662486091421e-02 8.525831144638024855e-03 3.684364632131887935e-03 -2.414470655542500996e-02 6.347976391362598544e-03 3.569622886730173389e-03 2.616270352868596549e-02 -2.655674797266022527e-02 2.238270213989674608e-03 3.888630919584464690e-02 -3.480934799018314384e-03 4.583610184923050945e-03 -3.008719490823338200e-02 -1.770782193906386692e-02 2.905255735497308707e-03 -1.892360875324868019e-02 6.729812743978946799e-02 5.485002369090562907e-03 -3.732874192912069740e-03 3.960680478813945193e-02 2.118210713666419942e-03 -4.591882142263598726e-03 -8.485678839344960867e-02 5.714589902026061437e-03 1.135075583939156897e-02 -6.908608461242149446e-02 7.747362773017123444e-04 -3.127342102220333209e-02 3.072845702072575687e-03 1.060686999310754075e-03 2.416973427558911230e-02 -2.566860616010065849e-02 5.415160442910392849e-03 -2.600785024430673359e-02 -6.041292192829282592e-02 3.241706542055214964e-03 2.770090581382052969e-02 -3.615826525585009998e-02 2.640398263657633450e-03 2.586666011784636773e-02 -1.899837285153353761e-02 3.350344042254108957e-03 -1.869934014422354462e-02 -2.128960056897061595e-02 5.701043686568762169e-03 3.569332577215589275e-02 4.694566992724869686e-02 2.363211715841260444e-03 -1.738549369475538009e-02 4.239767036205979722e-02 1.345788448057489870e-03 4.729598835142830547e-03 4.918759262466169957e-02 5.530014472180510166e-04 -9.694321039949729824e-03 7.133144925394498126e-02 3.172389453032289051e-03 1.312606142499703026e-02 -2.338431840106400955e-02 9.224096411940435961e-03 -3.657710680620374771e-02 -3.777689701586167681e-02 7.056483704420732361e-03 -3.691288362803027238e-03 -3.983129747726030234e-02 3.834914083884404228e-03 -1.689774726868906868e-02 -3.000752117513153655e-02 4.873510927665758614e-03 5.235736493680000908e-03 3.357224802095511162e-02 2.518294893639385929e-03 -7.262859961418930560e-03 -5.323389028730574762e-03 6.416611593148952714e-03 -7.159864535837155708e-02 -5.026379686273376758e-03 1.962585051356615772e-03 5.023280868568170965e-02 6.799610074253953015e-03 7.642573800761342379e-03 2.282864930923347163e-02 1.240857139782628772e-02 8.245468137514394558e-03 -1.510145426488028811e-02 1.180060239752019763e-02 1.095900732988796741e-03 -1.263549220182812877e-02 -3.105074047502905457e-03 4.396992685949791500e-03 -1.404242052911655950e-03 -1.784882729438471566e-02 3.929836954595231774e-03 1.720869316728895065e-02 1.074429796707349408e-02 4.950197432621188803e-03 -2.569216530506964608e-02 2.236700684848382317e-02 3.956414106896923716e-03 8.678792665745452273e-02 4.855284465005020892e-04 2.942405682600415903e-04 -8.073707254398312938e-02 8.350030618980513152e-04 9.431790735833585695e-03 -4.692517504477679291e-02 4.944410540867966511e-03 3.105191131937954686e-03 2.966853921735565155e-02 1.165720234556016227e-02 4.915882111768419063e-03 -1.140247427761865041e-03 1.103350836544902611e-02 2.628818531210954344e-03 1.391500049242505935e-02 7.242478647486670293e-03 1.840697248537516168e-03 -6.546910317219756248e-02 -3.240701770916859514e-02 3.159699274066988910e-03 6.273583466232948713e-02 -3.841758352627767936e-02 7.581880286278843556e-03 2.584978971409827506e-02 4.071656546727557557e-02 5.581874857616391655e-04 -1.540340271195457435e-03 4.593020650569464014e-02 5.481956846461245349e-03 -6.926998628669512464e-03 -9.773906673674375573e-03 2.452530917109637873e-03 5.982011114980861390e-03 -5.634887528236932376e-03 1.655937025786589564e-03 2.307768388271038210e-02 2.758531618498358696e-03 3.297737739398494058e-03 -1.601247280283466315e-02 1.465132886437300018e-02 7.724657738732813861e-03 2.697939205464002649e-02 -2.466732746581606992e-03 2.068507205910848946e-03 -1.891011332506487789e-03 1.341567643800950678e-02 4.573240864505977339e-03 -3.603446225082733434e-02 -4.269789069776676327e-02 2.580328476120713824e-03 2.223704170587983628e-02 -3.278133078353424879e-02 6.892003865745189792e-03 -3.271036925050151145e-02 3.110119323893837696e-03 2.031275737391126813e-03 4.430131743547069401e-02 -5.823449367845529717e-03 1.338808661505444314e-03 1.800826193445559213e-04 -6.599140063498928899e-02 1.026235077814099256e-02 -1.403856165865128951e-02 -7.425696383481059093e-02 6.673558318415101151e-03 -1.713363820476894450e-02 -4.523205408439753827e-02 6.437915977326667295e-03 1.258324133349269375e-02 -4.094990574935623850e-02 5.800424546843000774e-03 -1.167642325289764207e-02 2.970101651873856621e-02 5.286996744258516331e-03 2.027721229939042323e-03 -6.931917354847860410e-03 4.787976515409251080e-03 6.860549317820507920e-02 3.587302397660091513e-02 1.111138403615714431e-03 -3.538785344294038959e-02 5.062926973912117157e-02 3.815038833830604586e-03 -2.677168750442729395e-03 -9.431593891804613064e-03 4.001803315800892338e-03 2.699070589387385366e-02 -2.416223520779129524e-02 3.468957406011996102e-03 -2.658684535011882413e-02 5.846101797981653227e-03 3.404822526290447911e-03 6.853305124895032324e-03 2.700935898469222080e-02 6.686665253640783346e-03 2.015505538898922089e-02 4.981770155221737495e-02 4.340365186703658285e-03 -1.437068635812715003e-02 5.683938878272370987e-02 4.576359078161450732e-03 4.954043761339094187e-03 5.383178501666745219e-02 4.589611680760159566e-03 -2.393218960374449839e-02 2.362745600202341423e-02 5.787068241826281469e-03 -1.356475443911918433e+00 3.686568160527513349e+00 2.001975834738377313e-02 -1.130029136303810633e+00 2.288633999687052611e+00 2.341279950501813298e-02 -2.172889019213311457e+00 -1.500656847850509124e+00 5.995247674464002779e-02 -1.622746447051708341e-01 1.864831023638547469e+00 5.708349321432313467e-02 7.781391515926943114e-01 -1.931158538020615545e+00 3.236192459423455764e-02 2.249281579510562956e+00 -2.257348352649293233e+00 2.177347380632060209e-02 1.503160427771463414e+00 -2.492253416608015915e+00 4.895700902522335390e-02 1.926008795691006581e+00 3.475466694587693972e+00 4.040745635496435090e-02 1.427024508284702620e+00 3.736697660746418848e+00 5.638613667248226942e-03 6.727518983438759981e-02 3.325070424151021165e+00 2.110913922981159235e-03 diff --git a/test/python/data/GeneralRBM_cmp/jastrowidx.def b/test/python/data/GeneralRBM_cmp/jastrowidx.def new file mode 100644 index 00000000..4704405b --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/jastrowidx.def @@ -0,0 +1,100 @@ +============================================= +NJastrowIdx 5 +ComplexType 0 +============================================= +============================================= + 0 1 0 + 0 2 1 + 0 3 2 + 0 4 3 + 0 5 4 + 0 6 3 + 0 7 2 + 0 8 1 + 0 9 0 + 1 0 0 + 1 2 0 + 1 3 1 + 1 4 2 + 1 5 3 + 1 6 4 + 1 7 3 + 1 8 2 + 1 9 1 + 2 0 1 + 2 1 0 + 2 3 0 + 2 4 1 + 2 5 2 + 2 6 3 + 2 7 4 + 2 8 3 + 2 9 2 + 3 0 2 + 3 1 1 + 3 2 0 + 3 4 0 + 3 5 1 + 3 6 2 + 3 7 3 + 3 8 4 + 3 9 3 + 4 0 3 + 4 1 2 + 4 2 1 + 4 3 0 + 4 5 0 + 4 6 1 + 4 7 2 + 4 8 3 + 4 9 4 + 5 0 4 + 5 1 3 + 5 2 2 + 5 3 1 + 5 4 0 + 5 6 0 + 5 7 1 + 5 8 2 + 5 9 3 + 6 0 3 + 6 1 4 + 6 2 3 + 6 3 2 + 6 4 1 + 6 5 0 + 6 7 0 + 6 8 1 + 6 9 2 + 7 0 2 + 7 1 3 + 7 2 4 + 7 3 3 + 7 4 2 + 7 5 1 + 7 6 0 + 7 8 0 + 7 9 1 + 8 0 1 + 8 1 2 + 8 2 3 + 8 3 4 + 8 4 3 + 8 5 2 + 8 6 1 + 8 7 0 + 8 9 0 + 9 0 0 + 9 1 1 + 9 2 2 + 9 3 3 + 9 4 4 + 9 5 3 + 9 6 2 + 9 7 1 + 9 8 0 + 0 1 + 1 1 + 2 1 + 3 1 + 4 1 diff --git a/test/python/data/GeneralRBM_cmp/locspn.def b/test/python/data/GeneralRBM_cmp/locspn.def new file mode 100644 index 00000000..d68cdae6 --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/locspn.def @@ -0,0 +1,15 @@ +================================ +NlocalSpin 0 +================================ +========i_0LocSpn_1IteElc ====== +================================ + 0 0 + 1 0 + 2 0 + 3 0 + 4 0 + 5 0 + 6 0 + 7 0 + 8 0 + 9 0 diff --git a/test/python/data/GeneralRBM_cmp/modpara.def b/test/python/data/GeneralRBM_cmp/modpara.def new file mode 100644 index 00000000..9ca78fff --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/modpara.def @@ -0,0 +1,33 @@ +-------------------- +Model_Parameters 0 +-------------------- +VMC_Cal_Parameters +-------------------- +CDataFileHead zvo +CParaFileHead zqp +-------------------- +NVMCCalMode 0 +-------------------- +NDataIdxStart 1 +NDataQtySmp 1 +-------------------- +Nsite 10 +Ncond 10 +2Sz 0 +NSPGaussLeg 1 +NSPStot 0 +NMPTrans 1 +NSROptItrStep 1500 +NSROptItrSmp 100 +DSROptRedCut 1e-10 +DSROptStaDel 0.0010000000 +DSROptStepDt 0.0030000000 +NVMCWarmUp 10 +NVMCInterval 1 +NVMCSample 100 +NExUpdatePath 0 +NSplitSize 1 +NStore 1 +NSRCG 0 +NneuronGeneral 40 +RndSeed 12395 diff --git a/test/python/data/GeneralRBM_cmp/namelist.def b/test/python/data/GeneralRBM_cmp/namelist.def new file mode 100644 index 00000000..5b5dfbe4 --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/namelist.def @@ -0,0 +1,13 @@ + ModPara modpara.def + LocSpin locspn.def + Trans trans.def + CoulombIntra coulombintra.def + OneBodyG greenone.def + TwoBodyG greentwo.def + Gutzwiller gutzwilleridx.def + Jastrow jastrowidx.def + Orbital orbitalidx.def + TransSym qptransidx.def +GeneralRBM_HiddenLayer rbm_hlayeridx.def +GeneralRBM_PhysLayer rbm_playeridx.def +GeneralRBM_PhysHidden rbm_phidx.def diff --git a/test/python/data/GeneralRBM_cmp/orbitalidx.def b/test/python/data/GeneralRBM_cmp/orbitalidx.def new file mode 100644 index 00000000..b7d8a4fb --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/orbitalidx.def @@ -0,0 +1,115 @@ +============================================= +NOrbitalIdx 10 +ComplexType 1 +============================================= +============================================= + 0 0 0 + 0 1 1 + 0 2 2 + 0 3 3 + 0 4 4 + 0 5 5 + 0 6 6 + 0 7 7 + 0 8 8 + 0 9 9 + 1 0 9 + 1 1 0 + 1 2 1 + 1 3 2 + 1 4 3 + 1 5 4 + 1 6 5 + 1 7 6 + 1 8 7 + 1 9 8 + 2 0 8 + 2 1 9 + 2 2 0 + 2 3 1 + 2 4 2 + 2 5 3 + 2 6 4 + 2 7 5 + 2 8 6 + 2 9 7 + 3 0 7 + 3 1 8 + 3 2 9 + 3 3 0 + 3 4 1 + 3 5 2 + 3 6 3 + 3 7 4 + 3 8 5 + 3 9 6 + 4 0 6 + 4 1 7 + 4 2 8 + 4 3 9 + 4 4 0 + 4 5 1 + 4 6 2 + 4 7 3 + 4 8 4 + 4 9 5 + 5 0 5 + 5 1 6 + 5 2 7 + 5 3 8 + 5 4 9 + 5 5 0 + 5 6 1 + 5 7 2 + 5 8 3 + 5 9 4 + 6 0 4 + 6 1 5 + 6 2 6 + 6 3 7 + 6 4 8 + 6 5 9 + 6 6 0 + 6 7 1 + 6 8 2 + 6 9 3 + 7 0 3 + 7 1 4 + 7 2 5 + 7 3 6 + 7 4 7 + 7 5 8 + 7 6 9 + 7 7 0 + 7 8 1 + 7 9 2 + 8 0 2 + 8 1 3 + 8 2 4 + 8 3 5 + 8 4 6 + 8 5 7 + 8 6 8 + 8 7 9 + 8 8 0 + 8 9 1 + 9 0 1 + 9 1 2 + 9 2 3 + 9 3 4 + 9 4 5 + 9 5 6 + 9 6 7 + 9 7 8 + 9 8 9 + 9 9 0 + 0 1 + 1 1 + 2 1 + 3 1 + 4 1 + 5 1 + 6 1 + 7 1 + 8 1 + 9 1 diff --git a/test/python/data/GeneralRBM_cmp/qptransidx.def b/test/python/data/GeneralRBM_cmp/qptransidx.def new file mode 100644 index 00000000..d801ce5f --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/qptransidx.def @@ -0,0 +1,16 @@ +============================================= +NQPTrans 1 +============================================= +======== TrIdx_TrWeight_and_TrIdx_i_xi ====== +============================================= +0 1.00000 + 0 0 0 + 0 1 1 + 0 2 2 + 0 3 3 + 0 4 4 + 0 5 5 + 0 6 6 + 0 7 7 + 0 8 8 + 0 9 9 diff --git a/test/python/data/GeneralRBM_cmp/rbm_hlayeridx.def b/test/python/data/GeneralRBM_cmp/rbm_hlayeridx.def new file mode 100644 index 00000000..b07a3b2f --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/rbm_hlayeridx.def @@ -0,0 +1,49 @@ +-------------------- +NRBM_HiddenLayerIdx 4 +ComplexType 1 +k RBM_HiddenLayer_Idx +-------------------- +0 0 +1 0 +2 0 +3 0 +4 0 +5 0 +6 0 +7 0 +8 0 +9 0 +10 1 +11 1 +12 1 +13 1 +14 1 +15 1 +16 1 +17 1 +18 1 +19 1 +20 2 +21 2 +22 2 +23 2 +24 2 +25 2 +26 2 +27 2 +28 2 +29 2 +30 3 +31 3 +32 3 +33 3 +34 3 +35 3 +36 3 +37 3 +38 3 +39 3 +0 1 +1 1 +2 1 +3 1 diff --git a/test/python/data/GeneralRBM_cmp/rbm_phidx.def b/test/python/data/GeneralRBM_cmp/rbm_phidx.def new file mode 100644 index 00000000..d8b9c729 --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/rbm_phidx.def @@ -0,0 +1,885 @@ +-------------------- +NRBM_HiddenLayerIdx 80 +ComplexType 1 +i s k RBM_PhysHidden_Idx +-------------------- +0 0 0 0 +0 1 0 1 +1 0 0 2 +1 1 0 3 +2 0 0 4 +2 1 0 5 +3 0 0 6 +3 1 0 7 +4 0 0 8 +4 1 0 9 +5 0 0 10 +5 1 0 11 +6 0 0 12 +6 1 0 13 +7 0 0 14 +7 1 0 15 +8 0 0 16 +8 1 0 17 +9 0 0 18 +9 1 0 19 +0 0 1 2 +0 1 1 3 +1 0 1 4 +1 1 1 5 +2 0 1 6 +2 1 1 7 +3 0 1 8 +3 1 1 9 +4 0 1 10 +4 1 1 11 +5 0 1 12 +5 1 1 13 +6 0 1 14 +6 1 1 15 +7 0 1 16 +7 1 1 17 +8 0 1 18 +8 1 1 19 +9 0 1 0 +9 1 1 1 +0 0 2 4 +0 1 2 5 +1 0 2 6 +1 1 2 7 +2 0 2 8 +2 1 2 9 +3 0 2 10 +3 1 2 11 +4 0 2 12 +4 1 2 13 +5 0 2 14 +5 1 2 15 +6 0 2 16 +6 1 2 17 +7 0 2 18 +7 1 2 19 +8 0 2 0 +8 1 2 1 +9 0 2 2 +9 1 2 3 +0 0 3 6 +0 1 3 7 +1 0 3 8 +1 1 3 9 +2 0 3 10 +2 1 3 11 +3 0 3 12 +3 1 3 13 +4 0 3 14 +4 1 3 15 +5 0 3 16 +5 1 3 17 +6 0 3 18 +6 1 3 19 +7 0 3 0 +7 1 3 1 +8 0 3 2 +8 1 3 3 +9 0 3 4 +9 1 3 5 +0 0 4 8 +0 1 4 9 +1 0 4 10 +1 1 4 11 +2 0 4 12 +2 1 4 13 +3 0 4 14 +3 1 4 15 +4 0 4 16 +4 1 4 17 +5 0 4 18 +5 1 4 19 +6 0 4 0 +6 1 4 1 +7 0 4 2 +7 1 4 3 +8 0 4 4 +8 1 4 5 +9 0 4 6 +9 1 4 7 +0 0 5 10 +0 1 5 11 +1 0 5 12 +1 1 5 13 +2 0 5 14 +2 1 5 15 +3 0 5 16 +3 1 5 17 +4 0 5 18 +4 1 5 19 +5 0 5 0 +5 1 5 1 +6 0 5 2 +6 1 5 3 +7 0 5 4 +7 1 5 5 +8 0 5 6 +8 1 5 7 +9 0 5 8 +9 1 5 9 +0 0 6 12 +0 1 6 13 +1 0 6 14 +1 1 6 15 +2 0 6 16 +2 1 6 17 +3 0 6 18 +3 1 6 19 +4 0 6 0 +4 1 6 1 +5 0 6 2 +5 1 6 3 +6 0 6 4 +6 1 6 5 +7 0 6 6 +7 1 6 7 +8 0 6 8 +8 1 6 9 +9 0 6 10 +9 1 6 11 +0 0 7 14 +0 1 7 15 +1 0 7 16 +1 1 7 17 +2 0 7 18 +2 1 7 19 +3 0 7 0 +3 1 7 1 +4 0 7 2 +4 1 7 3 +5 0 7 4 +5 1 7 5 +6 0 7 6 +6 1 7 7 +7 0 7 8 +7 1 7 9 +8 0 7 10 +8 1 7 11 +9 0 7 12 +9 1 7 13 +0 0 8 16 +0 1 8 17 +1 0 8 18 +1 1 8 19 +2 0 8 0 +2 1 8 1 +3 0 8 2 +3 1 8 3 +4 0 8 4 +4 1 8 5 +5 0 8 6 +5 1 8 7 +6 0 8 8 +6 1 8 9 +7 0 8 10 +7 1 8 11 +8 0 8 12 +8 1 8 13 +9 0 8 14 +9 1 8 15 +0 0 9 18 +0 1 9 19 +1 0 9 0 +1 1 9 1 +2 0 9 2 +2 1 9 3 +3 0 9 4 +3 1 9 5 +4 0 9 6 +4 1 9 7 +5 0 9 8 +5 1 9 9 +6 0 9 10 +6 1 9 11 +7 0 9 12 +7 1 9 13 +8 0 9 14 +8 1 9 15 +9 0 9 16 +9 1 9 17 +0 0 10 20 +0 1 10 21 +1 0 10 22 +1 1 10 23 +2 0 10 24 +2 1 10 25 +3 0 10 26 +3 1 10 27 +4 0 10 28 +4 1 10 29 +5 0 10 30 +5 1 10 31 +6 0 10 32 +6 1 10 33 +7 0 10 34 +7 1 10 35 +8 0 10 36 +8 1 10 37 +9 0 10 38 +9 1 10 39 +0 0 11 22 +0 1 11 23 +1 0 11 24 +1 1 11 25 +2 0 11 26 +2 1 11 27 +3 0 11 28 +3 1 11 29 +4 0 11 30 +4 1 11 31 +5 0 11 32 +5 1 11 33 +6 0 11 34 +6 1 11 35 +7 0 11 36 +7 1 11 37 +8 0 11 38 +8 1 11 39 +9 0 11 20 +9 1 11 21 +0 0 12 24 +0 1 12 25 +1 0 12 26 +1 1 12 27 +2 0 12 28 +2 1 12 29 +3 0 12 30 +3 1 12 31 +4 0 12 32 +4 1 12 33 +5 0 12 34 +5 1 12 35 +6 0 12 36 +6 1 12 37 +7 0 12 38 +7 1 12 39 +8 0 12 20 +8 1 12 21 +9 0 12 22 +9 1 12 23 +0 0 13 26 +0 1 13 27 +1 0 13 28 +1 1 13 29 +2 0 13 30 +2 1 13 31 +3 0 13 32 +3 1 13 33 +4 0 13 34 +4 1 13 35 +5 0 13 36 +5 1 13 37 +6 0 13 38 +6 1 13 39 +7 0 13 20 +7 1 13 21 +8 0 13 22 +8 1 13 23 +9 0 13 24 +9 1 13 25 +0 0 14 28 +0 1 14 29 +1 0 14 30 +1 1 14 31 +2 0 14 32 +2 1 14 33 +3 0 14 34 +3 1 14 35 +4 0 14 36 +4 1 14 37 +5 0 14 38 +5 1 14 39 +6 0 14 20 +6 1 14 21 +7 0 14 22 +7 1 14 23 +8 0 14 24 +8 1 14 25 +9 0 14 26 +9 1 14 27 +0 0 15 30 +0 1 15 31 +1 0 15 32 +1 1 15 33 +2 0 15 34 +2 1 15 35 +3 0 15 36 +3 1 15 37 +4 0 15 38 +4 1 15 39 +5 0 15 20 +5 1 15 21 +6 0 15 22 +6 1 15 23 +7 0 15 24 +7 1 15 25 +8 0 15 26 +8 1 15 27 +9 0 15 28 +9 1 15 29 +0 0 16 32 +0 1 16 33 +1 0 16 34 +1 1 16 35 +2 0 16 36 +2 1 16 37 +3 0 16 38 +3 1 16 39 +4 0 16 20 +4 1 16 21 +5 0 16 22 +5 1 16 23 +6 0 16 24 +6 1 16 25 +7 0 16 26 +7 1 16 27 +8 0 16 28 +8 1 16 29 +9 0 16 30 +9 1 16 31 +0 0 17 34 +0 1 17 35 +1 0 17 36 +1 1 17 37 +2 0 17 38 +2 1 17 39 +3 0 17 20 +3 1 17 21 +4 0 17 22 +4 1 17 23 +5 0 17 24 +5 1 17 25 +6 0 17 26 +6 1 17 27 +7 0 17 28 +7 1 17 29 +8 0 17 30 +8 1 17 31 +9 0 17 32 +9 1 17 33 +0 0 18 36 +0 1 18 37 +1 0 18 38 +1 1 18 39 +2 0 18 20 +2 1 18 21 +3 0 18 22 +3 1 18 23 +4 0 18 24 +4 1 18 25 +5 0 18 26 +5 1 18 27 +6 0 18 28 +6 1 18 29 +7 0 18 30 +7 1 18 31 +8 0 18 32 +8 1 18 33 +9 0 18 34 +9 1 18 35 +0 0 19 38 +0 1 19 39 +1 0 19 20 +1 1 19 21 +2 0 19 22 +2 1 19 23 +3 0 19 24 +3 1 19 25 +4 0 19 26 +4 1 19 27 +5 0 19 28 +5 1 19 29 +6 0 19 30 +6 1 19 31 +7 0 19 32 +7 1 19 33 +8 0 19 34 +8 1 19 35 +9 0 19 36 +9 1 19 37 +0 0 20 40 +0 1 20 41 +1 0 20 42 +1 1 20 43 +2 0 20 44 +2 1 20 45 +3 0 20 46 +3 1 20 47 +4 0 20 48 +4 1 20 49 +5 0 20 50 +5 1 20 51 +6 0 20 52 +6 1 20 53 +7 0 20 54 +7 1 20 55 +8 0 20 56 +8 1 20 57 +9 0 20 58 +9 1 20 59 +0 0 21 42 +0 1 21 43 +1 0 21 44 +1 1 21 45 +2 0 21 46 +2 1 21 47 +3 0 21 48 +3 1 21 49 +4 0 21 50 +4 1 21 51 +5 0 21 52 +5 1 21 53 +6 0 21 54 +6 1 21 55 +7 0 21 56 +7 1 21 57 +8 0 21 58 +8 1 21 59 +9 0 21 40 +9 1 21 41 +0 0 22 44 +0 1 22 45 +1 0 22 46 +1 1 22 47 +2 0 22 48 +2 1 22 49 +3 0 22 50 +3 1 22 51 +4 0 22 52 +4 1 22 53 +5 0 22 54 +5 1 22 55 +6 0 22 56 +6 1 22 57 +7 0 22 58 +7 1 22 59 +8 0 22 40 +8 1 22 41 +9 0 22 42 +9 1 22 43 +0 0 23 46 +0 1 23 47 +1 0 23 48 +1 1 23 49 +2 0 23 50 +2 1 23 51 +3 0 23 52 +3 1 23 53 +4 0 23 54 +4 1 23 55 +5 0 23 56 +5 1 23 57 +6 0 23 58 +6 1 23 59 +7 0 23 40 +7 1 23 41 +8 0 23 42 +8 1 23 43 +9 0 23 44 +9 1 23 45 +0 0 24 48 +0 1 24 49 +1 0 24 50 +1 1 24 51 +2 0 24 52 +2 1 24 53 +3 0 24 54 +3 1 24 55 +4 0 24 56 +4 1 24 57 +5 0 24 58 +5 1 24 59 +6 0 24 40 +6 1 24 41 +7 0 24 42 +7 1 24 43 +8 0 24 44 +8 1 24 45 +9 0 24 46 +9 1 24 47 +0 0 25 50 +0 1 25 51 +1 0 25 52 +1 1 25 53 +2 0 25 54 +2 1 25 55 +3 0 25 56 +3 1 25 57 +4 0 25 58 +4 1 25 59 +5 0 25 40 +5 1 25 41 +6 0 25 42 +6 1 25 43 +7 0 25 44 +7 1 25 45 +8 0 25 46 +8 1 25 47 +9 0 25 48 +9 1 25 49 +0 0 26 52 +0 1 26 53 +1 0 26 54 +1 1 26 55 +2 0 26 56 +2 1 26 57 +3 0 26 58 +3 1 26 59 +4 0 26 40 +4 1 26 41 +5 0 26 42 +5 1 26 43 +6 0 26 44 +6 1 26 45 +7 0 26 46 +7 1 26 47 +8 0 26 48 +8 1 26 49 +9 0 26 50 +9 1 26 51 +0 0 27 54 +0 1 27 55 +1 0 27 56 +1 1 27 57 +2 0 27 58 +2 1 27 59 +3 0 27 40 +3 1 27 41 +4 0 27 42 +4 1 27 43 +5 0 27 44 +5 1 27 45 +6 0 27 46 +6 1 27 47 +7 0 27 48 +7 1 27 49 +8 0 27 50 +8 1 27 51 +9 0 27 52 +9 1 27 53 +0 0 28 56 +0 1 28 57 +1 0 28 58 +1 1 28 59 +2 0 28 40 +2 1 28 41 +3 0 28 42 +3 1 28 43 +4 0 28 44 +4 1 28 45 +5 0 28 46 +5 1 28 47 +6 0 28 48 +6 1 28 49 +7 0 28 50 +7 1 28 51 +8 0 28 52 +8 1 28 53 +9 0 28 54 +9 1 28 55 +0 0 29 58 +0 1 29 59 +1 0 29 40 +1 1 29 41 +2 0 29 42 +2 1 29 43 +3 0 29 44 +3 1 29 45 +4 0 29 46 +4 1 29 47 +5 0 29 48 +5 1 29 49 +6 0 29 50 +6 1 29 51 +7 0 29 52 +7 1 29 53 +8 0 29 54 +8 1 29 55 +9 0 29 56 +9 1 29 57 +0 0 30 60 +0 1 30 61 +1 0 30 62 +1 1 30 63 +2 0 30 64 +2 1 30 65 +3 0 30 66 +3 1 30 67 +4 0 30 68 +4 1 30 69 +5 0 30 70 +5 1 30 71 +6 0 30 72 +6 1 30 73 +7 0 30 74 +7 1 30 75 +8 0 30 76 +8 1 30 77 +9 0 30 78 +9 1 30 79 +0 0 31 62 +0 1 31 63 +1 0 31 64 +1 1 31 65 +2 0 31 66 +2 1 31 67 +3 0 31 68 +3 1 31 69 +4 0 31 70 +4 1 31 71 +5 0 31 72 +5 1 31 73 +6 0 31 74 +6 1 31 75 +7 0 31 76 +7 1 31 77 +8 0 31 78 +8 1 31 79 +9 0 31 60 +9 1 31 61 +0 0 32 64 +0 1 32 65 +1 0 32 66 +1 1 32 67 +2 0 32 68 +2 1 32 69 +3 0 32 70 +3 1 32 71 +4 0 32 72 +4 1 32 73 +5 0 32 74 +5 1 32 75 +6 0 32 76 +6 1 32 77 +7 0 32 78 +7 1 32 79 +8 0 32 60 +8 1 32 61 +9 0 32 62 +9 1 32 63 +0 0 33 66 +0 1 33 67 +1 0 33 68 +1 1 33 69 +2 0 33 70 +2 1 33 71 +3 0 33 72 +3 1 33 73 +4 0 33 74 +4 1 33 75 +5 0 33 76 +5 1 33 77 +6 0 33 78 +6 1 33 79 +7 0 33 60 +7 1 33 61 +8 0 33 62 +8 1 33 63 +9 0 33 64 +9 1 33 65 +0 0 34 68 +0 1 34 69 +1 0 34 70 +1 1 34 71 +2 0 34 72 +2 1 34 73 +3 0 34 74 +3 1 34 75 +4 0 34 76 +4 1 34 77 +5 0 34 78 +5 1 34 79 +6 0 34 60 +6 1 34 61 +7 0 34 62 +7 1 34 63 +8 0 34 64 +8 1 34 65 +9 0 34 66 +9 1 34 67 +0 0 35 70 +0 1 35 71 +1 0 35 72 +1 1 35 73 +2 0 35 74 +2 1 35 75 +3 0 35 76 +3 1 35 77 +4 0 35 78 +4 1 35 79 +5 0 35 60 +5 1 35 61 +6 0 35 62 +6 1 35 63 +7 0 35 64 +7 1 35 65 +8 0 35 66 +8 1 35 67 +9 0 35 68 +9 1 35 69 +0 0 36 72 +0 1 36 73 +1 0 36 74 +1 1 36 75 +2 0 36 76 +2 1 36 77 +3 0 36 78 +3 1 36 79 +4 0 36 60 +4 1 36 61 +5 0 36 62 +5 1 36 63 +6 0 36 64 +6 1 36 65 +7 0 36 66 +7 1 36 67 +8 0 36 68 +8 1 36 69 +9 0 36 70 +9 1 36 71 +0 0 37 74 +0 1 37 75 +1 0 37 76 +1 1 37 77 +2 0 37 78 +2 1 37 79 +3 0 37 60 +3 1 37 61 +4 0 37 62 +4 1 37 63 +5 0 37 64 +5 1 37 65 +6 0 37 66 +6 1 37 67 +7 0 37 68 +7 1 37 69 +8 0 37 70 +8 1 37 71 +9 0 37 72 +9 1 37 73 +0 0 38 76 +0 1 38 77 +1 0 38 78 +1 1 38 79 +2 0 38 60 +2 1 38 61 +3 0 38 62 +3 1 38 63 +4 0 38 64 +4 1 38 65 +5 0 38 66 +5 1 38 67 +6 0 38 68 +6 1 38 69 +7 0 38 70 +7 1 38 71 +8 0 38 72 +8 1 38 73 +9 0 38 74 +9 1 38 75 +0 0 39 78 +0 1 39 79 +1 0 39 60 +1 1 39 61 +2 0 39 62 +2 1 39 63 +3 0 39 64 +3 1 39 65 +4 0 39 66 +4 1 39 67 +5 0 39 68 +5 1 39 69 +6 0 39 70 +6 1 39 71 +7 0 39 72 +7 1 39 73 +8 0 39 74 +8 1 39 75 +9 0 39 76 +9 1 39 77 +0 1 +1 1 +2 1 +3 1 +4 1 +5 1 +6 1 +7 1 +8 1 +9 1 +10 1 +11 1 +12 1 +13 1 +14 1 +15 1 +16 1 +17 1 +18 1 +19 1 +20 1 +21 1 +22 1 +23 1 +24 1 +25 1 +26 1 +27 1 +28 1 +29 1 +30 1 +31 1 +32 1 +33 1 +34 1 +35 1 +36 1 +37 1 +38 1 +39 1 +40 1 +41 1 +42 1 +43 1 +44 1 +45 1 +46 1 +47 1 +48 1 +49 1 +50 1 +51 1 +52 1 +53 1 +54 1 +55 1 +56 1 +57 1 +58 1 +59 1 +60 1 +61 1 +62 1 +63 1 +64 1 +65 1 +66 1 +67 1 +68 1 +69 1 +70 1 +71 1 +72 1 +73 1 +74 1 +75 1 +76 1 +77 1 +78 1 +79 1 diff --git a/test/python/data/GeneralRBM_cmp/rbm_playeridx.def b/test/python/data/GeneralRBM_cmp/rbm_playeridx.def new file mode 100644 index 00000000..7c0d9b24 --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/rbm_playeridx.def @@ -0,0 +1,27 @@ +-------------------- +NRBM_PhysLayerIdx 2 +ComplexType 1 +i s RBM_PhysLayer_Idx +-------------------- +0 0 0 +0 1 1 +1 0 0 +1 1 1 +2 0 0 +2 1 1 +3 0 0 +3 1 1 +4 0 0 +4 1 1 +5 0 0 +5 1 1 +6 0 0 +6 1 1 +7 0 0 +7 1 1 +8 0 0 +8 1 1 +9 0 0 +9 1 1 +0 1 +1 1 diff --git a/test/python/data/GeneralRBM_cmp/ref/ref_mean.dat b/test/python/data/GeneralRBM_cmp/ref/ref_mean.dat new file mode 100644 index 00000000..abdbde09 --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/ref/ref_mean.dat @@ -0,0 +1,312 @@ +-3.267960514851812714e+00 +-4.394760121611952330e-04 +8.180653359569067806e-02 +1.124977007564264397e+01 +0.000000000000000000e+00 +1.060097595476454435e+00 +-2.082619454490459709e+00 +0.000000000000000000e+00 +1.234063973384860388e-02 +-1.682838311448252355e+00 +0.000000000000000000e+00 +1.283216890993845935e-02 +-9.666829407595713131e-02 +0.000000000000000000e+00 +1.461008799690774115e-02 +8.020428732381624792e-01 +0.000000000000000000e+00 +1.456354364615730299e-02 +1.326640556026778217e+00 +0.000000000000000000e+00 +1.424565572877313502e-02 +1.733442630749727709e+00 +0.000000000000000000e+00 +2.236183442103715710e-02 +5.505499113518438209e-04 +-5.163804247029171344e-04 +0.000000000000000000e+00 +5.172394703804498485e-03 +3.831282890132404507e-03 +0.000000000000000000e+00 +-5.869055901394290564e-03 +-6.849840432049574337e-04 +6.932076715980559252e-03 +5.049785346883954064e-03 +-1.070325270849238229e-03 +1.849757155839283976e-02 +-2.594327354756461104e-02 +8.826618101813366382e-03 +1.713076872928407171e-02 +-2.986363547890651809e-03 +-5.807405540883978090e-03 +1.003692091295589964e-02 +1.130357607340442688e-01 +7.644844367814049302e-02 +2.092149799144109139e-03 +-1.205276131235842943e-02 +1.225620966364559215e-02 +3.146568473692726298e-03 +-3.724932672835848477e-03 +-4.866296235894766037e-02 +2.251816161319141005e-03 +2.798099357008421162e-02 +-6.048560310721649846e-02 +2.216391318941575254e-03 +-1.083392445296932002e-02 +1.589877440940532655e-02 +2.007598532371890256e-03 +5.122741810247716243e-02 +-2.313714363431008600e-02 +1.794137808325330834e-03 +-5.397728031484932965e-02 +2.079746568296859249e-02 +2.402126411820132770e-03 +4.408463558257862125e-02 +4.132845879434430408e-02 +2.096222670234178936e-03 +-4.891597551986474890e-02 +4.513386181422467808e-02 +2.191371063167709896e-03 +-3.751143281900958665e-02 +3.300724304974841233e-02 +2.117531757246435015e-03 +-2.564210503315601450e-02 +4.882699526108508908e-02 +2.313701019329209279e-03 +-3.383364010940372729e-02 +5.439318603688422099e-02 +2.590784397582283991e-03 +-5.669158841280783762e-02 +1.155295734999674251e-02 +2.050856956024719666e-03 +-6.518430519252457755e-02 +-1.621500945520436623e-02 +2.343874466546214987e-03 +-1.875152157550591392e-02 +-4.148513836039004893e-02 +2.383185050426376086e-03 +-8.299568090164696765e-02 +-5.797473507132609380e-03 +2.281110109361072537e-03 +-5.320024486491945273e-03 +7.374911810016111791e-02 +2.683694379353659086e-03 +7.409371045523182979e-03 +1.012260333611822993e-01 +2.547902116610828525e-03 +8.095800018772332518e-02 +-2.522080852317089561e-01 +2.063022891088673628e-03 +9.185866740711132183e-02 +-1.971134284345724130e-01 +2.980856416763694779e-03 +-1.218226930274442406e-02 +1.388761042414693968e-02 +2.845803543641426629e-03 +-1.062192962131741636e-02 +-1.091388040872424622e-02 +2.718623458717211224e-03 +-1.955590803503145722e-02 +-1.247009132230160605e-01 +2.484937642102274559e-03 +6.407224985003096007e-02 +-1.276078759247777916e-01 +2.367379846740481734e-03 +1.153955014491999248e-01 +4.078954266574460336e-02 +2.940471389248689761e-03 +6.105544367200366196e-02 +1.812912800971564625e-02 +2.052288846423312284e-03 +8.886302217854935570e-02 +7.568787985369022919e-02 +2.477928195806863246e-03 +4.325780384956508240e-02 +3.516688686299500322e-02 +3.404556076043414176e-03 +6.921160331945322430e-02 +1.020357498799182167e-01 +2.191647034047048727e-03 +5.123895252807830758e-02 +9.147996455972300101e-02 +2.431484788359539358e-03 +-1.518277789257423474e-02 +-7.341116802756171567e-02 +2.899902653640529498e-03 +-5.976420785304432937e-02 +-2.428301601693688000e-02 +2.297876616323407152e-03 +-6.108090543512306736e-02 +-7.915879799194439070e-02 +2.621310036225912420e-03 +-5.133274962164404570e-02 +-1.653468778175341825e-02 +2.647571726949445557e-03 +-7.569752363102263959e-02 +2.415287876517400664e-02 +3.209391151246160367e-03 +-1.104122157160060957e-01 +2.995024946613750183e-02 +2.108863627034772946e-03 +-1.907921158042447107e-01 +-2.263812647185111174e-02 +2.406440776028551456e-03 +2.506726832662279497e-02 +1.597546916793875921e-02 +3.289108424064537180e-03 +2.220243961168604299e-02 +9.141643063367940747e-02 +2.751322263871958194e-03 +-5.509028745768853458e-02 +5.500200201934360086e-03 +2.203356653679597495e-03 +-8.104317323139088175e-03 +-2.821942624614274739e-02 +1.899662395357970849e-03 +-8.296280207552537284e-03 +-2.395097461832870062e-02 +1.984595342866349917e-03 +-6.069155294284602625e-02 +-6.987016083469370711e-03 +2.374495977616847622e-03 +-8.773202038294684868e-02 +1.597823509382875762e-02 +2.157436591928828425e-03 +1.967158251114930478e-01 +2.650853488294152571e-02 +2.157071639932119870e-03 +-2.196973276621849713e-01 +-1.152060790995737896e-02 +2.015845829312388777e-03 +-7.089216642485321636e-03 +2.358672307673016083e-02 +2.035550981078802953e-03 +1.120156737960883303e-02 +-4.456722779456389477e-02 +2.282859887701475191e-03 +1.391823227754889272e-02 +2.938055809250280162e-02 +1.630892042340945525e-03 +4.330838237143135039e-02 +6.217795998628940918e-02 +1.580711188990452463e-03 +-3.646934902606212281e-02 +-6.959304006939590059e-02 +2.084868290228207056e-03 +8.778186416130281944e-02 +-5.560709182947847461e-03 +1.952717435214600117e-03 +6.349095077796016069e-03 +2.607627863412605509e-02 +2.241759052017878139e-03 +2.853168639565508216e-02 +5.700274794897534913e-02 +2.334644856271517969e-03 +-1.571158217139000460e-02 +-7.401858968292460410e-04 +1.719594155869469745e-03 +1.838652439620194409e-02 +-7.309144077289121341e-03 +1.878995694059900756e-03 +1.559797972619558770e-02 +1.951623826811089979e-02 +1.704475031236551540e-03 +1.204533684094575598e-02 +2.591572779831567003e-02 +1.566015785298992312e-03 +1.600965540299748718e-02 +1.214504790655033042e-02 +2.041508057815423060e-03 +1.126007540317873652e-02 +1.153118853948180422e-02 +1.930978363993020265e-03 +-1.373401630084435665e-01 +-9.816473626839647415e-02 +2.160243677877553194e-03 +3.764914113450638228e-02 +-6.160906797910446070e-02 +2.291055467454330627e-03 +-1.161461861853776006e-01 +4.706096440045864221e-02 +1.751324216095215356e-03 +1.022128930375287847e-01 +4.884149048728521174e-03 +1.847473056302975604e-03 +-2.306068259316561980e-02 +-1.272295288779069777e-01 +2.775378443154254398e-03 +2.033305498490563940e-02 +-1.694426563310118816e-01 +2.555249928367059765e-03 +1.047851439187108893e-02 +-9.232781753526393687e-02 +2.781169675521126452e-03 +-2.426720047241312170e-02 +-9.417141863578484817e-02 +2.131543174351424423e-03 +-9.207406914967488504e-03 +-6.454393154574071534e-02 +2.348211892414592966e-03 +-2.500302193131994158e-02 +3.404882912409732537e-02 +2.376120836861522149e-03 +7.102328704622361093e-03 +3.385903503581550594e-02 +2.302462718575989421e-03 +-2.821125688287985309e-02 +5.333312454067853231e-02 +2.236185569557330027e-03 +2.987270397685961448e-02 +1.551718040586627136e-02 +1.891306277379459829e-03 +-1.241226514647182123e-02 +-7.960248903827913617e-04 +2.167183772759839235e-03 +4.156406181811571343e-02 +2.877641994622663971e-02 +2.755525166334812665e-03 +-9.866607629448229111e-03 +2.369726160386612102e-02 +2.430424092710290439e-03 +6.279256817776804334e-02 +8.569171456763739758e-02 +2.892582288917017793e-03 +-5.258928521541407670e-03 +7.031831816866260243e-02 +2.511009627355094767e-03 +3.951852034049156692e-02 +8.915817839582693138e-02 +2.632354057481096216e-03 +-2.806364319188782083e-02 +1.244919601234995010e-01 +2.147349603908723596e-03 +-8.047417602462566544e-01 +2.045716398893829613e+00 +1.314772543472300138e-02 +-1.517591749956602509e+00 +9.723126946239484258e-01 +3.267640412269919199e-03 +-1.294471791186364573e+00 +6.278699727871058789e-01 +2.962662454114878101e-03 +-2.499485729173741844e-01 +-1.560993199149631749e-01 +2.801013810887012685e-03 +9.114754620566143384e-01 +-1.587443356923893489e+00 +3.094665962022933019e-03 +1.588622031350692243e+00 +-2.225715020910265185e+00 +3.642329841622624163e-03 +1.726197192617166198e+00 +-7.507588036116581431e-01 +3.308630269627479970e-03 +1.560458748409330854e+00 +2.027020195342674747e+00 +3.958903016742776164e-03 +1.121476089252702035e+00 +3.839246688146475517e+00 +1.820160021522033208e-03 +2.664772644511835820e-01 +3.474346161373853992e+00 +4.821637117401867019e-03 diff --git a/test/python/data/GeneralRBM_cmp/ref/ref_std.dat b/test/python/data/GeneralRBM_cmp/ref/ref_std.dat new file mode 100644 index 00000000..152c0687 --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/ref/ref_std.dat @@ -0,0 +1,312 @@ +2.277202474828607034e-02 +2.610240500673009344e-03 +1.607545391031639861e-02 +1.369253829918004595e-01 +0.000000000000000000e+00 +6.574961226001583281e-01 +2.064694592342473101e-01 +0.000000000000000000e+00 +6.809336805543362084e-03 +3.447099452349118298e-01 +0.000000000000000000e+00 +9.524256497785401482e-03 +1.441663100435323919e-01 +0.000000000000000000e+00 +6.957529919944284436e-03 +1.602090655359838800e-01 +0.000000000000000000e+00 +6.151599559572333564e-03 +2.045959757832328529e-01 +0.000000000000000000e+00 +6.292757068839634031e-03 +3.493797077954081121e-01 +0.000000000000000000e+00 +1.161157151930923039e-02 +0.000000000000000000e+00 +0.000000000000000000e+00 +0.000000000000000000e+00 +0.000000000000000000e+00 +4.336808689942017736e-19 +0.000000000000000000e+00 +7.622882226207817330e-03 +1.103186551486570396e-02 +4.551329192891622605e-03 +2.338990525844370297e-02 +1.754847841715653084e-02 +7.910151128578967600e-03 +3.912242906665208686e-02 +4.772723195574995331e-02 +1.028490265529363561e-02 +1.768095868486563652e-02 +5.783908978764227583e-03 +5.197878441291899250e-03 +1.071847792978960906e-01 +1.138457516812922815e-01 +6.583091098254172492e-04 +1.489896348809613413e-01 +8.852267072285231742e-02 +1.658708352373768243e-03 +1.392706141173245815e-01 +8.352492065512569230e-02 +1.323754809492238768e-03 +1.252253600219132290e-01 +1.131767387015343990e-01 +1.062469085748847606e-03 +1.143224965777077662e-01 +8.581735580108663941e-02 +9.614235100389481288e-04 +1.248396892530069385e-01 +3.843007852863426083e-02 +5.737451872690896293e-04 +6.452146537761963008e-02 +4.943989033268238187e-02 +1.120915994976483688e-03 +1.246660769338455571e-01 +3.076186411478560104e-02 +7.302130466484942680e-04 +4.175009784646104699e-02 +5.297852074109268145e-02 +8.001587789795968969e-04 +6.055399057799172591e-02 +5.552102489461328144e-02 +1.034703717940819740e-03 +2.731536220617135358e-02 +2.840501550611918696e-02 +9.264816320742450982e-04 +5.191102242595443256e-02 +3.820604064635031022e-02 +1.661733975529947277e-03 +7.616481240542315179e-02 +3.551769111580313498e-02 +5.425160679677387991e-04 +8.368612711220511924e-02 +3.965479421487405620e-02 +9.478972242346514173e-04 +9.887561341482860311e-02 +8.515495969527098197e-02 +1.400059572012880360e-03 +1.278757913168659666e-01 +4.890559172385431502e-02 +9.526329997499160141e-04 +1.054804609162190432e-01 +7.939063144266288174e-02 +1.789942808896568746e-03 +1.366681380179756711e-01 +1.505745306658828053e-01 +1.286976040261047323e-03 +8.966639823214220262e-02 +1.553904338131259222e-01 +9.592022223430620755e-04 +1.225160885786934079e-01 +1.723436207302347090e-01 +1.419351624110677538e-03 +1.025395402985986304e-01 +7.386932489649364331e-02 +9.661323522243259578e-04 +1.048671229071617139e-01 +4.822033385755096491e-02 +1.410808493246424765e-03 +1.257102454503591926e-01 +4.853974184415221771e-02 +1.078679814632271501e-03 +6.011219430399608599e-02 +4.783465140214387262e-02 +1.278124827477484593e-03 +6.947028723096385083e-02 +4.076263612538578301e-02 +1.718205888117673580e-03 +6.283440456104927296e-02 +4.593129077111633013e-02 +9.724968641755252956e-04 +4.073233300426295361e-02 +2.677353275790268078e-02 +1.327063391662870609e-03 +5.341861519415341819e-02 +3.850332362725673863e-02 +1.857777691946543375e-03 +4.502016713799309594e-02 +6.771775895121372180e-02 +1.042141818167149382e-03 +5.528307317800970622e-02 +7.223750520065874703e-02 +1.748570596643448695e-03 +6.373976591225653798e-02 +4.521172454488080888e-02 +1.938333573712110788e-03 +6.429763498378446296e-02 +4.065129268775440063e-02 +9.719749715209262224e-04 +6.792972091919532995e-02 +4.237363613590301725e-02 +1.783747888885576062e-03 +4.811164643073640584e-02 +4.589878918113658030e-02 +1.619822589121421930e-03 +8.460116066501362220e-02 +3.925698048129687423e-02 +9.194083900663514285e-04 +6.375277961737153831e-02 +4.128829727574376968e-02 +6.163499059524631986e-04 +1.361337161707462107e-01 +2.956044023639190638e-02 +1.305304705018923636e-03 +1.878044455955068526e-01 +3.659429486241575630e-02 +1.744755014884433056e-03 +1.584990346021507290e-01 +5.015268931739137737e-02 +1.257550278271038447e-03 +1.150187790051589720e-01 +6.180325453393976931e-02 +7.300477827769043292e-04 +6.880202198036661221e-02 +4.880322333157507964e-02 +9.755546107664462121e-04 +6.373387088628686137e-02 +4.062535939503175708e-02 +9.503806376518467072e-04 +1.432687172061582748e-01 +4.884932990054575985e-02 +1.808064162782261480e-03 +1.393107287283873730e-01 +5.730410949599421683e-02 +7.241653468771930150e-04 +1.185703298593660665e-01 +2.161124444350356888e-02 +8.872045169728764525e-04 +1.413744817837024603e-01 +1.769513221700290059e-02 +1.592181551650492452e-03 +1.179704054125517154e-01 +5.122117297075407666e-02 +8.715921754503253016e-04 +1.232752246748462649e-01 +3.535019781166898883e-02 +1.292164958035198425e-03 +8.556657587763948081e-02 +4.535186055244574271e-02 +5.446380876991838106e-04 +7.165308296970292201e-02 +4.894647606118042449e-02 +7.708366063338950970e-04 +5.079646220273621726e-02 +3.753729151653529411e-02 +9.191640664536178743e-04 +6.336012208079280783e-02 +1.701167092403017833e-02 +1.045114072136587267e-03 +4.541190148475048038e-02 +3.485553431150014564e-02 +1.588940888001068351e-03 +6.320139362412641182e-02 +4.139976656401438138e-02 +1.241746254645312384e-03 +2.190446595214511766e-02 +4.509658730078856814e-02 +6.810812879185856135e-04 +4.016598953491905960e-02 +2.764162088745752283e-02 +1.124117656460289121e-03 +3.573649973753206810e-02 +3.239478954864659366e-02 +6.860502406287803624e-04 +4.156704715182843457e-02 +3.306525001751613874e-02 +7.948419331514271300e-04 +3.833698569654683808e-02 +2.390393178971435967e-02 +6.717338986518982171e-04 +5.971053484917687726e-02 +4.276497309075861369e-02 +1.058926685204442195e-03 +1.656995565859444297e-01 +8.273223650722734412e-02 +7.386977311971972644e-04 +1.110565592505456667e-01 +1.448847647052033671e-01 +6.822545353854036305e-04 +1.155026747519466851e-01 +1.061627991449795860e-01 +8.841392773156049817e-04 +1.191409997240987645e-01 +7.981013341499004765e-02 +7.632950701791153293e-04 +9.246036865717544018e-02 +6.052081641798211925e-02 +1.267473231646514334e-03 +6.566868994252240965e-02 +9.720580161418326814e-02 +1.210768940540052178e-03 +6.434691712663184737e-02 +3.177009569507822234e-02 +1.411672369390654016e-03 +8.594850406730060455e-02 +8.613288911264767311e-02 +6.385233222461958718e-04 +6.557114590257150100e-02 +1.046217243845629502e-01 +7.324197924558374911e-04 +7.506369598965711987e-02 +1.028948700812263861e-01 +9.615328548753273967e-04 +4.551712876247712009e-02 +4.792652777638612555e-02 +1.093850190584565434e-03 +5.493285415171682978e-02 +7.353327957119806801e-02 +5.351751637715416142e-04 +3.780922393237954454e-02 +3.857539242921187439e-02 +9.129398870321447663e-04 +4.991475819702841793e-02 +4.342820281620490830e-02 +5.230838504447594614e-04 +3.249203715623245892e-02 +4.250030240667226900e-02 +1.087014791229019232e-03 +4.273391734142338583e-02 +3.084549139648948973e-02 +8.847044934865161284e-04 +7.468858675492129340e-02 +6.108340734829291463e-02 +1.230379523413717511e-03 +5.709461051225293848e-02 +9.519370450926067928e-02 +1.173108471157733017e-03 +1.424844589268931261e-01 +7.139537230671016976e-02 +1.440420794495093611e-03 +1.194860398950002844e-01 +9.007325076780517414e-02 +8.796703370414894838e-04 +1.406076362654478940e-01 +7.146921226471868172e-02 +3.341799459660848345e-03 +1.305189172329664082e-01 +1.028329698751473814e-01 +1.094537112753284818e-03 +6.610347386799060587e-02 +7.989783611736642199e-02 +1.012573584905601069e-03 +5.244418221987091899e-02 +7.536107777519732154e-02 +8.515727101344116538e-04 +5.259590264038496027e-02 +1.155339196702643567e-01 +9.041157621886123947e-04 +3.406073498780670672e-02 +8.700753032784078189e-02 +1.325111892057696285e-03 +4.120651792654601159e-02 +7.384408518797364041e-02 +1.040260268389895260e-03 +5.040747437428345218e-02 +6.186530369478107638e-02 +1.431634421757719666e-03 +4.779463264497840064e-02 +1.371150322367889994e-02 +8.019595886856397153e-04 +8.118050156390238525e-02 +5.186193361699837495e-02 +1.282316677924273717e-03 diff --git a/test/python/data/GeneralRBM_cmp/trans.def b/test/python/data/GeneralRBM_cmp/trans.def new file mode 100644 index 00000000..ae53a747 --- /dev/null +++ b/test/python/data/GeneralRBM_cmp/trans.def @@ -0,0 +1,45 @@ +======================== +NTransfer 40 +======================== +========i_j_s_tijs====== +======================== + 1 0 0 0 1.000000000000000 0.000000000000000 + 0 0 1 0 1.000000000000000 -0.000000000000000 + 1 1 0 1 1.000000000000000 0.000000000000000 + 0 1 1 1 1.000000000000000 -0.000000000000000 + 2 0 1 0 1.000000000000000 0.000000000000000 + 1 0 2 0 1.000000000000000 -0.000000000000000 + 2 1 1 1 1.000000000000000 0.000000000000000 + 1 1 2 1 1.000000000000000 -0.000000000000000 + 3 0 2 0 1.000000000000000 0.000000000000000 + 2 0 3 0 1.000000000000000 -0.000000000000000 + 3 1 2 1 1.000000000000000 0.000000000000000 + 2 1 3 1 1.000000000000000 -0.000000000000000 + 4 0 3 0 1.000000000000000 0.000000000000000 + 3 0 4 0 1.000000000000000 -0.000000000000000 + 4 1 3 1 1.000000000000000 0.000000000000000 + 3 1 4 1 1.000000000000000 -0.000000000000000 + 5 0 4 0 1.000000000000000 0.000000000000000 + 4 0 5 0 1.000000000000000 -0.000000000000000 + 5 1 4 1 1.000000000000000 0.000000000000000 + 4 1 5 1 1.000000000000000 -0.000000000000000 + 6 0 5 0 1.000000000000000 0.000000000000000 + 5 0 6 0 1.000000000000000 -0.000000000000000 + 6 1 5 1 1.000000000000000 0.000000000000000 + 5 1 6 1 1.000000000000000 -0.000000000000000 + 7 0 6 0 1.000000000000000 0.000000000000000 + 6 0 7 0 1.000000000000000 -0.000000000000000 + 7 1 6 1 1.000000000000000 0.000000000000000 + 6 1 7 1 1.000000000000000 -0.000000000000000 + 8 0 7 0 1.000000000000000 0.000000000000000 + 7 0 8 0 1.000000000000000 -0.000000000000000 + 8 1 7 1 1.000000000000000 0.000000000000000 + 7 1 8 1 1.000000000000000 -0.000000000000000 + 9 0 8 0 1.000000000000000 0.000000000000000 + 8 0 9 0 1.000000000000000 -0.000000000000000 + 9 1 8 1 1.000000000000000 0.000000000000000 + 8 1 9 1 1.000000000000000 -0.000000000000000 + 0 0 9 0 1.000000000000000 0.000000000000000 + 9 0 0 0 1.000000000000000 -0.000000000000000 + 0 1 9 1 1.000000000000000 0.000000000000000 + 9 1 0 1 1.000000000000000 -0.000000000000000 diff --git a/test/python/runtest_expert.py b/test/python/runtest_expert.py new file mode 100644 index 00000000..508406bb --- /dev/null +++ b/test/python/runtest_expert.py @@ -0,0 +1,50 @@ +from __future__ import print_function + +import os +import shutil +import subprocess +import sys + +import numpy as np + + +def read_out(filename): + # drop the first two columns + array = np.loadtxt(filename, dtype="float").astype("float") + return array + + +if len(sys.argv) == 1: + print("usage: {} ".format(sys.argv[0])) + sys.exit(-1) + +rootdir = os.getcwd() +refdir = os.path.join(rootdir, "data", sys.argv[1]) +workdir = os.path.join(rootdir, "work", sys.argv[1]) +if os.path.exists(workdir): + shutil.rmtree(workdir) +os.makedirs(workdir) +os.chdir(workdir) + +#copy *.def from refdir +os.system("cp %s/*.def ." % refdir) + +bin_to_test = os.path.join(rootdir, "..", "..", "src", "mVMC", "vmc.out") + +#result = subprocess.call([bin_to_test, "-s", "%s/StdFace.def" % refdir]) +#result = subprocess.call([bin_to_test, "-e", "%s/namelist.def" % refdir, "%s/initial.def" % refdir]) +result = subprocess.call([bin_to_test, "-e", "namelist.def", "initial.def"]) +if result != 0: + sys.exit(result) + +array_calc = read_out("./output/zqp_opt.dat")[0:2] +ref_ave = read_out("%s/ref/ref_mean.dat" % refdir)[0:2] +ref_std = read_out("%s/ref/ref_std.dat" % refdir)[0:2] + +result = 0 +for diff, s in zip(array_calc - ref_ave, ref_std): + diff = abs(diff) + if diff >= 3 * s and diff >= 1e-8: + result = -1 + +sys.exit(result) From ca0a4acc8eb4cf5e7904d564dcec0d4aebf2f512 Mon Sep 17 00:00:00 2001 From: Takahiro Misawa Date: Tue, 1 Oct 2024 15:33:12 +0900 Subject: [PATCH 70/73] Revert "Revert "Rebased "Separating Direct and Indirect Measurement of Two Body Green Function""" --- src/mVMC/average.c | 2 +- src/mVMC/calgrn.c | 7 +- src/mVMC/include/global.h | 11 +- src/mVMC/include/physcal_lanczos.h | 14 ++- src/mVMC/initfile.c | 9 +- src/mVMC/physcal_lanczos.c | 59 +++++++--- src/mVMC/readdef.c | 182 +++++++++++++---------------- src/mVMC/setmemory.c | 32 ++--- src/mVMC/vmccal.c | 86 +++++++++++++- src/mVMC/vmcmain.c | 39 +++---- 10 files changed, 270 insertions(+), 171 deletions(-) diff --git a/src/mVMC/average.c b/src/mVMC/average.c index 4cb0749e..f4954818 100644 --- a/src/mVMC/average.c +++ b/src/mVMC/average.c @@ -230,7 +230,7 @@ void WeightAverageGreenFunc(MPI_Comm comm) { } if(NLanczosMode>1){ /* QCisAjsQ and QCisAjsCktAltQ */ - n = NLSHam*NLSHam*NCisAjs + NLSHam*NLSHam*NCisAjsCktAltDC; + n = NLSHam*NLSHam*NCisAjs + NLSHam*NLSHam*(NCisAjsCktAltDC+NCisAjsCktAlt); if(AllComplexFlag==0){ vec_real=QCisAjsQ_real; weightAverageReduce_real(n,vec_real,comm); diff --git a/src/mVMC/calgrn.c b/src/mVMC/calgrn.c index 8d13215b..16fc3864 100644 --- a/src/mVMC/calgrn.c +++ b/src/mVMC/calgrn.c @@ -81,7 +81,7 @@ void CalculateGreenFunc(const double w, const double complex ip, int *eleIdx, in tmp = GreenFunc2(ri,rj,rk,rl,s,t,ip,myEleIdx,eleCfg,myEleNum,eleProjCnt, myProjCntNew,myBuffer); - PhysCisAjsCktAltDC[idx] += w*tmp; + LocalCisAjsCktAltDC[idx] = tmp; } #pragma omp master @@ -92,6 +92,11 @@ void CalculateGreenFunc(const double w, const double complex ip, int *eleIdx, in PhysCisAjs[idx] += w*LocalCisAjs[idx]; } + #pragma omp for private(idx) nowait + for (idx=0;idx, */ @@ -286,10 +286,13 @@ double *LSLQ_real; /* [NLSHam][NLSHam]*/ //TBC double complex *QCisAjsQ; /* QCisAjsQ[NLSHam][NLSHam][NCisAjs]*/ //TBC double complex *QCisAjsCktAltQ; /* QCisAjsCktAltQ[NLSHam][NLSHam][NCisAjsCktAlt]*/ //TBC +double complex *QCisAjsCktAltQDC; /* QCisAjsCktAltQ[NLSHam][NLSHam][NCisAjsCktAlt] + DC Lanczos Calculation */ double complex *LSLCisAjs; /* [NLSHam][NCisAjs]*/ //TBC double *QCisAjsQ_real; /* QCisAjsQ[NLSHam][NLSHam][NCisAjs]*/ //TBC double *QCisAjsCktAltQ_real; /* QCisAjsCktAltQ[NLSHam][NLSHam][NCisAjsCktAlt]*/ //TBC +double *QCisAjsCktAltQDC_real; /* QCisAjsCktAltQ[NLSHam][NLSHam][NCisAjsCktAlt]*/ double *LSLCisAjs_real; /* [NLSHam][NCisAjs]*/ //TBC /***** Output File *****/ @@ -305,8 +308,10 @@ FILE *FileLS; FILE *FileLSQQQQ; FILE *FileLSQCisAjsQ; FILE *FileLSQCisAjsCktAltQ; +FILE *FileLSQCisAjsCktAltQ; FILE *FileLSCisAjs; FILE *FileLSCisAjsCktAlt; +FILE *FileLSCisAjsCktAltDC; /* FILE *FileTimerList; */ diff --git a/src/mVMC/include/physcal_lanczos.h b/src/mVMC/include/physcal_lanczos.h index 9dd02cce..27dbf7ff 100644 --- a/src/mVMC/include/physcal_lanczos.h +++ b/src/mVMC/include/physcal_lanczos.h @@ -7,6 +7,7 @@ int PhysCalLanczos_real( double *_QQQQ_real, double *_QCisAjsQ_real, double *_QCisAjsCktAltQ_real, + double *_QCisAjsCktAltQDC_real, const int _nLSHam, const int _Ns, const int _nCisAjs, @@ -14,20 +15,23 @@ int PhysCalLanczos_real( int **_iOneBodyGIdx, int **_CisAjsLzIdx, const int _nCisAjsCktAlt, - int **_CisAjsCktAlt, + const int _nCisAjsCktAltDC, + int **_CisAjsCktAltDC, const int _NLanczosmode, FILE *_FileLS, FILE *_FileLSQQQQ, FILE *_FileLSQCisAjsQ, FILE *_FileLSQCisAjsCktAltQ, FILE *_FileLSCisAjs, - FILE *_FileLSCisAjsCktAlt + FILE *_FileLSCisAjsCktAlt, + FILE *_FileLSCisAjsCktAltDC ); int PhysCalLanczos_fcmp( double complex* _QQQQ, double complex* _QCisAjsQ, double complex* _QCisAjsCktAltQ, + double complex* _QCisAjsCktAltQDC, const int _nLSHam, const int _Ns, const int _nCisAjs, @@ -35,14 +39,16 @@ int PhysCalLanczos_fcmp( int **_iOneBodyGIdx, int **_CisAjsLzIdx, const int _nCisAjsCktAlt, - int **_CisAjsCktAlt, + const int _nCisAjsCktAltDC, + int **_CisAjsCktAltDC, const int _NLanczosmode, FILE *_FileLS, FILE *_FileLSQQQQ, FILE *_FileLSQCisAjsQ, FILE *_FileLSQCisAjsCktAltQ, FILE *_FileLSCisAjs, - FILE *_FileLSCisAjsCktAlt + FILE *_FileLSCisAjsCktAlt, + FILE *_FileLSCisAjsCktAltDC ); #endif diff --git a/src/mVMC/initfile.c b/src/mVMC/initfile.c index 815f971f..80a04f38 100644 --- a/src/mVMC/initfile.c +++ b/src/mVMC/initfile.c @@ -126,9 +126,15 @@ void InitFilePhysCal(int i, int rank) { CDataFileHead, idx); FileLSCisAjs = fopen(fileName, "w"); - sprintf(fileName, "%s_ls_cisajscktalt_%03d.dat", + // CACA + sprintf(fileName, "%s_ls_cisajscktaltex_%03d.dat", CDataFileHead, idx); FileLSCisAjsCktAlt = fopen(fileName, "w"); + + // CACADC + sprintf(fileName, "%s_ls_cisajscktalt_%03d.dat", + CDataFileHead, idx); + FileLSCisAjsCktAltDC = fopen(fileName, "w"); } } @@ -176,6 +182,7 @@ void CloseFilePhysCal(int rank) { #endif fclose(FileLSCisAjs); fclose(FileLSCisAjsCktAlt); + fclose(FileLSCisAjsCktAltDC); } } diff --git a/src/mVMC/physcal_lanczos.c b/src/mVMC/physcal_lanczos.c index 26b9782a..13640256 100644 --- a/src/mVMC/physcal_lanczos.c +++ b/src/mVMC/physcal_lanczos.c @@ -29,6 +29,7 @@ int PhysCalLanczos_real double *_QQQQ_real, double *_QCisAjsQ_real, double *_QCisAjsCktAltQ_real, + double *_QCisAjsCktAltQDC_real, const int _nLSHam, const int _Ns, const int _nCisAjs, @@ -36,14 +37,16 @@ int PhysCalLanczos_real int **_iOneBodyGIdx, int **_CisAjsLzIdx, const int _nCisAjsCktAlt, - int **_CisAjsCktAlt, + const int _nCisAjsCktAltDC, + int **_CisAjsCktAltDC, const int _NLanczosmode, FILE *_FileLS, FILE *_FileLSQQQQ, FILE *_FileLSQCisAjsQ, FILE *_FileLSQCisAjsCktAltQ, FILE *_FileLSCisAjs, - FILE *_FileLSCisAjsCktAlt + FILE *_FileLSCisAjsCktAlt, + FILE *_FileLSCisAjsCktAltDC ) { int i=0; @@ -53,8 +56,10 @@ int PhysCalLanczos_real double alpha_m, ene_m, ene_vm; double *LS_CisAjs_real; double *LS_CisAjsCktAlt_real; + double *LS_CisAjsCktAltDC_real; LS_CisAjs_real = (double*)malloc(sizeof(double)*_nCisAjs); LS_CisAjsCktAlt_real = (double*)malloc(sizeof(double)*_nCisAjsCktAlt); + LS_CisAjsCktAltDC_real = (double*)malloc(sizeof(double)*_nCisAjsCktAltDC); CalculateEne(_QQQQ_real[2], _QQQQ_real[3], _QQQQ_real[10], _QQQQ_real[11], _QQQQ_real[15], &alpha_p, &ene_p, &ene_vp, &alpha_m, &ene_m, &ene_vm); @@ -114,21 +119,30 @@ int PhysCalLanczos_real fprintf(_FileLSQCisAjsCktAltQ, "\n"); #endif + CalculatePhysVal_real(_QQQQ_real[2], _QQQQ_real[3], + alpha, _QCisAjsCktAltQDC_real, _nCisAjsCktAltDC, + _nLSHam, LS_CisAjsCktAltDC_real); + /* zvo_ls_cisajscktalt.dat */ + for (i = 0; i < _nCisAjsCktAltDC; i++) { + fprintf(_FileLSCisAjsCktAltDC, "%d %d %d %d %d %d %d %d % .18e 0.0\n", + _CisAjsCktAltDC[i][0], _CisAjsCktAltDC[i][1], _CisAjsCktAltDC[i][2], _CisAjsCktAltDC[i][3], + _CisAjsCktAltDC[i][4], _CisAjsCktAltDC[i][5], _CisAjsCktAltDC[i][6], _CisAjsCktAltDC[i][7], + LS_CisAjsCktAltDC_real[i]); + } + fprintf(_FileLSCisAjsCktAltDC, "\n"); + CalculatePhysVal_real(_QQQQ_real[2], _QQQQ_real[3], alpha, _QCisAjsCktAltQ_real, _nCisAjsCktAlt, _nLSHam, LS_CisAjsCktAlt_real); - /* zvo_ls_cisajscktalt.dat */ + /* zvo_ls_cisajscktaltex.dat */ for (i = 0; i < _nCisAjsCktAlt; i++) { - fprintf(_FileLSCisAjsCktAlt, "%d %d %d %d %d %d %d %d % .18e 0.0\n", - _CisAjsCktAlt[i][0], _CisAjsCktAlt[i][1], _CisAjsCktAlt[i][2], _CisAjsCktAlt[i][3], - _CisAjsCktAlt[i][4], _CisAjsCktAlt[i][5], _CisAjsCktAlt[i][6], _CisAjsCktAlt[i][7], - LS_CisAjsCktAlt_real[i]); - + fprintf(_FileLSCisAjsCktAlt, "% .18e 0.0 ", LS_CisAjsCktAlt_real[i]); // LS_CisAjsCktAlt_real } fprintf(_FileLSCisAjsCktAlt, "\n"); } free(LS_CisAjs_real); free(LS_CisAjsCktAlt_real); + free(LS_CisAjsCktAltDC_real); return 0; } @@ -136,6 +150,7 @@ int PhysCalLanczos_fcmp( double complex* _QQQQ, double complex* _QCisAjsQ, double complex* _QCisAjsCktAltQ, + double complex* _QCisAjsCktAltQDC, const int _nLSHam, const int _Ns, const int _nCisAjs, @@ -143,14 +158,16 @@ int PhysCalLanczos_fcmp( int **_iOneBodyGIdx, int **_CisAjsLzIdx, const int _nCisAjsCktAlt, - int **_CisAjsCktAlt, + const int _nCisAjsCktAltDC, + int **_CisAjsCktAltDC, const int _NLanczosmode, FILE *_FileLS, FILE *_FileLSQQQQ, FILE *_FileLSQCisAjsQ, FILE *_FileLSQCisAjsCktAltQ, FILE *_FileLSCisAjs, - FILE *_FileLSCisAjsCktAlt + FILE *_FileLSCisAjsCktAlt, + FILE *_FileLSCisAjsCktAltDC ) { int i=0; @@ -160,8 +177,10 @@ int PhysCalLanczos_fcmp( double alpha_m, ene_m, ene_vm; double complex*LS_CisAjs; double complex*LS_CisAjsCktAlt; + double complex*LS_CisAjsCktAltDC; LS_CisAjs = (double complex*)malloc(sizeof(double complex)*_nCisAjs); LS_CisAjsCktAlt = (double complex*)malloc(sizeof(double complex)*_nCisAjsCktAlt); + LS_CisAjsCktAltDC = (double complex*)malloc(sizeof(double complex)*_nCisAjsCktAltDC); /* zvo_ls.dat */ if(!CalculateEne(creal(_QQQQ[2]),creal(_QQQQ[3]), @@ -221,20 +240,30 @@ int PhysCalLanczos_fcmp( } fprintf(_FileLSQCisAjsCktAltQ, "\n"); #endif + CalculatePhysVal_fcmp(_QQQQ[2], _QQQQ[3], + alpha, _QCisAjsCktAltQDC, _nCisAjsCktAltDC, + _nLSHam, LS_CisAjsCktAltDC); + /* zvo_ls_cisajscktalt.dat */ + for (i = 0; i < _nCisAjsCktAltDC; i++) { + fprintf(_FileLSCisAjsCktAltDC, "%d %d %d %d %d %d %d %d % .18e % .18e\n", + _CisAjsCktAltDC[i][0], _CisAjsCktAltDC[i][1], _CisAjsCktAltDC[i][2], _CisAjsCktAltDC[i][3], + _CisAjsCktAltDC[i][4], _CisAjsCktAltDC[i][5], _CisAjsCktAltDC[i][6], _CisAjsCktAltDC[i][7], + creal(LS_CisAjsCktAltDC[i]), cimag(LS_CisAjsCktAltDC[i])); + } + fprintf(_FileLSCisAjsCktAltDC, "\n"); + CalculatePhysVal_fcmp(_QQQQ[2], _QQQQ[3], alpha, _QCisAjsCktAltQ, _nCisAjsCktAlt, _nLSHam, LS_CisAjsCktAlt); - /* zvo_ls_cisajs.dat */ + /* zvo_ls_cisajscktaltex.dat */ for (i = 0; i < _nCisAjsCktAlt; i++) { - fprintf(_FileLSCisAjsCktAlt, "%d %d %d %d %d %d %d %d % .18e % .18e\n", - _CisAjsCktAlt[i][0], _CisAjsCktAlt[i][1], _CisAjsCktAlt[i][2], _CisAjsCktAlt[i][3], - _CisAjsCktAlt[i][4], _CisAjsCktAlt[i][5], _CisAjsCktAlt[i][6], _CisAjsCktAlt[i][7], - creal(LS_CisAjsCktAlt[i]), cimag(LS_CisAjsCktAlt[i])); + fprintf(_FileLSCisAjsCktAlt, "% .18e % .18e ", creal(LS_CisAjsCktAlt[i]), cimag(LS_CisAjsCktAlt[i])); // LS_CisAjsCktAlt_real } fprintf(_FileLSCisAjsCktAlt, "\n"); } free(LS_CisAjs); free(LS_CisAjsCktAlt); + free(LS_CisAjsCktAltDC); return 0; } diff --git a/src/mVMC/readdef.c b/src/mVMC/readdef.c index 5b51600b..36ac357f 100644 --- a/src/mVMC/readdef.c +++ b/src/mVMC/readdef.c @@ -89,10 +89,10 @@ int GetInfoInterAll(FILE *fp, int **ArrayIdx, double complex *ArrayValue, int GetInfoOptTrans(FILE *fp, int **Array, double *ArrayPara, int *ArrayOpt, int **ArraySgn, int _iFlagOptTrans, int *iOptCount, int _fidx, int _APFlag, int Nsite, int NArray, char *defname); -int GetInfoTwoBodyG(FILE *fp, int **ArrayIdx, int **ArrayIdxTwoBodyGLz, int **ArrayToIdx, int **ArrayIdxOneBodyG, - int _NLanczosMode, int Nsite, int NArray, char *defname); +int GetInfoTwoBodyG(FILE *fp, int **ArrayIdx, int Nsite, int NArray, char *defname); -int GetInfoTwoBodyGEx(FILE *fp, int **ArrayIdx, int Nsite, int NArray, char *defname); +int GetInfoTwoBodyGEx(FILE *fp, int **ArrayIdx, int **ArrayToIdx, int **ArrayIdxOneBodyG, + int Nsite, int NArray, char *defname); int GetInfoOrbitalGeneral(FILE *fp, int **Array, int *ArrayOpt, int **ArraySgn, int *iOptCount, int _fidx, int _iComplexFlag, int _iFlagOrbitalGeneral, int _APFlag, int Nsite, int NArray, @@ -181,7 +181,7 @@ int JudgeOrbitalMode(int *_iFlgOrbitalGeneral, const int _iFlgOrbitalAP, const i return iret; } -int ReadGreen(char *xNameListFile, int Nca, int **caIdx, int Ncacadc, int **cacaDCIdx, int Ns) { +int ReadGreen(char *xNameListFile, int Nca, int **caIdx, int Ncacadc, int **cacaIdx, int Ns) { FILE *fp; char defname[D_FileNameMax]; char ctmp[D_FileNameMax]; @@ -217,9 +217,10 @@ int ReadGreen(char *xNameListFile, int Nca, int **caIdx, int Ncacadc, int **caca /*cisajs.def----------------------------------------*/ if (GetInfoOneBodyG(fp, caIdx, iOneBodyGIdx, 0, Ns, Nca, defname) != 0) return (-1); break; - case KWTwoBodyG: - /*cisajscktaltdc.def--------------------------------*/ - if (GetInfoTwoBodyG(fp, cacaDCIdx, cacaDCIdx, iOneBodyGIdx, caIdx, 0, Ns, Ncacadc, defname) != 0) return (-1); + case KWTwoBodyGEx: + /*cisajscktalt.def----------------------------------*/ + /*load as if it's DC for index rearranging----------*/ + if (GetInfoTwoBodyG(fp, cacaIdx, Ns, Ncacadc, defname) != 0) return (-1); break; default: break; @@ -235,27 +236,34 @@ int ReadGreen(char *xNameListFile, int Nca, int **caIdx, int Ncacadc, int **caca /// \param Ncacadc Number of CisAjsCktAltDC /// \param Ns Number of sites /// \return Number of calculation target -int CountOneBodyGForLanczos(char *xNameListFile, int Nca, int Ncacadc, int Ns, int **caIdx, int **iFlgOneBodyG) { +int CountOneBodyGForLanczos(char *xNameListFile, int Nca, int Ncacadc, int Ns, int **iFlgOneBodyG) { int info = 0; int i, j, isite1, isite2; int icount = 0; - int **cacaDCIdx; + int **cacaIdx; + int **caIdx; - cacaDCIdx = malloc(sizeof(int *) * Ncacadc); - //pInt=cacaDCIdx[0]; - for (i = 0; i < Ncacadc; i++) { - cacaDCIdx[i] = malloc(sizeof(int) * 8); - } + cacaIdx = malloc(sizeof(int *) * Ncacadc); + for (i = 0; i < Ncacadc; i++) + cacaIdx[i] = malloc(sizeof(int) * 8); + caIdx = malloc(sizeof(int *) * Nca); + for (i = 0; i < Nca; i++) + caIdx[i] = malloc(sizeof(int) * 4); for (i = 0; i < 2 * Ns; i++) { for (j = 0; j < 2 * Ns; j++) { iFlgOneBodyG[i][j] = -1; } } - info = ReadGreen(xNameListFile, Nca, caIdx, Ncacadc, cacaDCIdx, Ns); + info = ReadGreen(xNameListFile, Nca, caIdx, Ncacadc, cacaIdx, Ns); if (info != 0) { - free(cacaDCIdx); + for (i = 0; i < Ncacadc; i++) + free(cacaIdx[i]); + free(cacaIdx); + for (i = 0; i < Nca; i++) + free(caIdx[i]); + free(caIdx); return (info); } @@ -269,8 +277,8 @@ int CountOneBodyGForLanczos(char *xNameListFile, int Nca, int Ncacadc, int Ns, i } //cisajscktalt -> cisajs, cltakt (Note: indecies of the latter Green's function are modified) for (i = 0; i < Ncacadc; i++) { - isite1 = cacaDCIdx[i][0] + cacaDCIdx[i][1] * Ns; - isite2 = cacaDCIdx[i][2] + cacaDCIdx[i][3] * Ns; + isite1 = cacaIdx[i][0] + cacaIdx[i][1] * Ns; + isite2 = cacaIdx[i][2] + cacaIdx[i][3] * Ns; if (iFlgOneBodyG[isite1][isite2] == -1) { iFlgOneBodyG[isite1][isite2] = icount; icount++; @@ -280,15 +288,20 @@ int CountOneBodyGForLanczos(char *xNameListFile, int Nca, int Ncacadc, int Ns, i isite1 = cacaDCIdx[i][4] + cacaDCIdx[i][5] * Ns; isite2 = cacaDCIdx[i][6] + cacaDCIdx[i][7] * Ns; */ - isite1 = cacaDCIdx[i][6] + cacaDCIdx[i][7] * Ns; - isite2 = cacaDCIdx[i][4] + cacaDCIdx[i][5] * Ns; + isite1 = cacaIdx[i][6] + cacaIdx[i][7] * Ns; + isite2 = cacaIdx[i][4] + cacaIdx[i][5] * Ns; if (iFlgOneBodyG[isite1][isite2] == -1) { iFlgOneBodyG[isite1][isite2] = icount; icount++; } } - free(cacaDCIdx); + for (i = 0; i < Ncacadc; i++) + free(cacaIdx[i]); + free(cacaIdx); + for (i = 0; i < Nca; i++) + free(caIdx[i]); + free(caIdx); return icount; } @@ -496,23 +509,17 @@ int ReadDefFileNInt(char *xNameListFile, MPI_Comm comm) { //TODO: LanczosMode is not supported for Sz not conserved mode. - //For Lanczos mode: Calculation of Green's function - if (bufInt[IdxLanczosMode] > 1) { - //Get info of CisAjs and CisAjsCktAltDC + //For indirect calculation of Green's function + if (bufInt[IdxNTwoBodyGEx] > 0 || bufInt[IdxLanczosMode] > 1) { + //Get info of CisAjs and CisAjsCktAlt(GreenTwoEx as if it's DC) int i; - NCisAjsLz = bufInt[IdxNOneBodyG]; - //bufInt[IdxNTwoBodyGEx] = bufInt[IdxNTwoBodyG]; - CisAjsLzIdx = malloc(sizeof(int *) * NCisAjsLz); - for (i = 0; i < NCisAjsLz; i++) { - CisAjsLzIdx[i] = malloc(sizeof(int) * 4); - } iOneBodyGIdx = malloc(sizeof(int *) * (2 * bufInt[IdxNsite])); //For spin - //pInt=iFlgOneBodyG[0]; for (i = 0; i < 2 * bufInt[IdxNsite]; i++) { iOneBodyGIdx[i] = malloc(sizeof(int) * (2 * bufInt[IdxNsite])); } - bufInt[IdxNOneBodyG] = CountOneBodyGForLanczos(xNameListFile, NCisAjsLz, bufInt[IdxNTwoBodyG], - bufInt[IdxNsite], CisAjsLzIdx, iOneBodyGIdx); + bufInt[IdxNOneBodyG] = CountOneBodyGForLanczos(xNameListFile, + bufInt[IdxNOneBodyG], bufInt[IdxNTwoBodyGEx], + bufInt[IdxNsite], iOneBodyGIdx); } //CalcNCond @@ -703,7 +710,7 @@ int ReadDefFileNInt(char *xNameListFile, MPI_Comm comm) { + Nsite * NQPTrans /* QPTransInv */ + Nsite * NQPTrans /* QPTransSgn */ + 4 * NCisAjs /* CisAjs */ - + 8 * NCisAjsCktAlt /* CisAjsCktAlt */ + + 2 * NCisAjsCktAlt /* CisAjsCktAlt */ + 8 * NCisAjsCktAltDC /* CisAjsCktAltDC */ + 8 * NInterAll /* InterAll */ + Nsite * NQPOptTrans /* QPOptTrans */ @@ -748,8 +755,6 @@ int ReadDefFileIdxPara(char *xNameListFile, MPI_Comm comm) { int x0, x1; int rank; - int iNOneBodyG; - MPI_Comm_rank(comm, &rank); if (rank == 0) { @@ -862,19 +867,17 @@ int ReadDefFileIdxPara(char *xNameListFile, MPI_Comm comm) { case KWOneBodyG: /*cisajs.def----------------------------------------*/ - iNOneBodyG = (NLanczosMode < 2) ? NCisAjs : NCisAjsLz; - if (GetInfoOneBodyG(fp, CisAjsIdx, iOneBodyGIdx, NLanczosMode, Nsite, iNOneBodyG, defname) != 0) info = 1; + if (GetInfoOneBodyG(fp, CisAjsIdx, iOneBodyGIdx, NCisAjsCktAlt>0, Nsite, NCisAjs, defname) != 0) info = 1; break; case KWTwoBodyGEx: /*cisajscktalt.def----------------------------------*/ - if (GetInfoTwoBodyGEx(fp, CisAjsCktAltIdx, Nsite, NCisAjsCktAlt, defname) != 0) info = 1; + if (GetInfoTwoBodyGEx(fp, CisAjsCktAltIdx, iOneBodyGIdx, CisAjsIdx, Nsite, NCisAjsCktAlt, defname) != 0) info = 1; break; case KWTwoBodyG: /*cisajscktaltdc.def--------------------------------*/ - if (GetInfoTwoBodyG(fp, CisAjsCktAltDCIdx, CisAjsCktAltLzIdx, iOneBodyGIdx, CisAjsIdx, NLanczosMode, Nsite, - NCisAjsCktAltDC, defname) != 0) + if (GetInfoTwoBodyG(fp, CisAjsCktAltDCIdx, Nsite, NCisAjsCktAltDC, defname) != 0) info = 1; break; @@ -981,9 +984,6 @@ int ReadDefFileIdxPara(char *xNameListFile, MPI_Comm comm) { */ #ifdef _mpi_use SafeMpiBcastInt(LocSpn, NTotalDefInt, comm); - if (NLanczosMode > 1) { - SafeMpiBcastInt(CisAjsCktAltLzIdx[0], NCisAjsCktAltDC * 2, comm); - } SafeMpiBcast_fcmp(ParaTransfer, NTransfer + NInterAll, comm); SafeMpiBcast(ParaCoulombIntra, NTotalDefDouble, comm); SafeMpiBcast_fcmp(ParaQPTrans, NQPTrans, comm); @@ -1928,7 +1928,7 @@ int GetInfoTransSym(FILE *fp, int **Array, int **ArraySgn, int **ArrayInv, doubl } int -GetInfoOneBodyG(FILE *fp, int **ArrayIdx, int **ArrayToIdx, int _NLanczosMode, int Nsite, int NArray, char *defname) { +GetInfoOneBodyG(FILE *fp, int **ArrayIdx, int **ArrayToIdx, int IndirectGFOn, int Nsite, int NArray, char *defname) { char ctmp2[256]; int idx = 0, info = 0; int x0 = 0, x1 = 0, x2 = 0, x3 = 0; @@ -1937,12 +1937,12 @@ GetInfoOneBodyG(FILE *fp, int **ArrayIdx, int **ArrayToIdx, int _NLanczosMode, i if (NArray == 0) return 0; while (fgets(ctmp2, sizeof(ctmp2) / sizeof(char), fp) != NULL) { sscanf(ctmp2, "%d %d %d %d\n", &x0, &x1, &x2, &x3); - if (_NLanczosMode < 2) { // Normal + if (!IndirectGFOn) { // Normal ArrayIdx[idx][0] = x0; ArrayIdx[idx][1] = x1; ArrayIdx[idx][2] = x2; ArrayIdx[idx][3] = x3; - } else { //For Calc Green func by Lanczos mode + } else { //For Calc Green func indirectly isite1 = x0 + x1 * Nsite; isite2 = x2 + x3 * Nsite; idxLanczos = ArrayToIdx[isite1][isite2]; @@ -1959,28 +1959,50 @@ GetInfoOneBodyG(FILE *fp, int **ArrayIdx, int **ArrayToIdx, int _NLanczosMode, i idx++; } - if (idx != NArray) info = ReadDefFileError(defname); + if (!IndirectGFOn && idx != NArray) + info = ReadDefFileError(defname); return info; } -int GetInfoTwoBodyGEx(FILE *fp, int **ArrayIdx, int Nsite, int NArray, char *defname) { +// Formerly CisAjsCktAlt +int GetInfoTwoBodyGEx(FILE *fp, int **ArrayIdx, int **ArrayToIdx, int **ArrayIdxOneBodyG, + int Nsite, int NArray, char *defname) { char ctmp2[256]; int idx = 0, info = 0; int x0 = 0, x1 = 0, x2 = 0, x3 = 0; int x4 = 0, x5 = 0, x6 = 0, x7 = 0; - //Debug + int isite1 = 0, isite2 = 0; + int idxLanczos = 0; + if (NArray == 0) return 0; while (fgets(ctmp2, sizeof(ctmp2) / sizeof(char), fp) != NULL) { sscanf(ctmp2, "%d %d %d %d %d %d %d %d\n", &x0, &x1, &x2, &x3, &x4, &x5, &x6, &x7); - ArrayIdx[idx][0] = x0; // Index to OneBodyG1 - ArrayIdx[idx][1] = x1; // Index to OneBodyG2 - ArrayIdx[idx][2] = x2; // G1:site i - ArrayIdx[idx][3] = x3; // G1:site j - ArrayIdx[idx][4] = x4; // G1:sigma1 - ArrayIdx[idx][5] = x5; // G2:site l - ArrayIdx[idx][6] = x6; // G2:site k - ArrayIdx[idx][7] = x7; // G2:sigma2 - if (CheckQuadSite(x2, x3, x5, x6, Nsite) != 0) { + + isite1 = x0 + x1 * Nsite; + isite2 = x2 + x3 * Nsite; + idxLanczos = ArrayToIdx[isite1][isite2]; + ArrayIdxOneBodyG[idxLanczos][0] = x0; + ArrayIdxOneBodyG[idxLanczos][1] = x1; + ArrayIdxOneBodyG[idxLanczos][2] = x2; + ArrayIdxOneBodyG[idxLanczos][3] = x3; + ArrayIdx[idx][0] = idxLanczos; + + isite1 = x6 + x7 * Nsite; + isite2 = x4 + x5 * Nsite; + idxLanczos = ArrayToIdx[isite1][isite2]; + /* + ArrayIdxOneBodyG[idxLanczos][0] = x4; + ArrayIdxOneBodyG[idxLanczos][1] = x5; + ArrayIdxOneBodyG[idxLanczos][2] = x6; + ArrayIdxOneBodyG[idxLanczos][3] = x7; + */ + ArrayIdxOneBodyG[idxLanczos][0] = x6; + ArrayIdxOneBodyG[idxLanczos][1] = x7; + ArrayIdxOneBodyG[idxLanczos][2] = x4; + ArrayIdxOneBodyG[idxLanczos][3] = x5; + ArrayIdx[idx][1] = idxLanczos; + + if (CheckQuadSite(x0, x2, x4, x6, Nsite) != 0) { fprintf(stderr, "Error: Site index is incorrect. \n"); info = 1; break; @@ -1991,8 +2013,8 @@ int GetInfoTwoBodyGEx(FILE *fp, int **ArrayIdx, int Nsite, int NArray, char *def return info; } -int GetInfoTwoBodyG(FILE *fp, int **ArrayIdx, int **ArrayIdxTwoBodyGLz, int **ArrayToIdx, int **ArrayIdxOneBodyG, - int _NLanczosMode, int Nsite, int NArray, char *defname) { +// Formerly CisAjsCktAltDC +int GetInfoTwoBodyG(FILE *fp, int **ArrayIdx, int Nsite, int NArray, char *defname) { char ctmp2[256]; int idx = 0, info = 0; int x0 = 0, x1 = 0, x2 = 0, x3 = 0; @@ -2017,44 +2039,6 @@ int GetInfoTwoBodyG(FILE *fp, int **ArrayIdx, int **ArrayIdxTwoBodyGLz, int **Ar break; } - if (_NLanczosMode > 1) { //Calc TwoBodyG by Lanczos method - - isite1 = x0 + x1 * Nsite; - isite2 = x2 + x3 * Nsite; - idxLanczos = ArrayToIdx[isite1][isite2]; - - ArrayIdxOneBodyG[idxLanczos][0] = x0; - ArrayIdxOneBodyG[idxLanczos][1] = x1; - ArrayIdxOneBodyG[idxLanczos][2] = x2; - ArrayIdxOneBodyG[idxLanczos][3] = x3; - /* - ArrayIdxOneBodyG[idxLanczos][0] = x2; - ArrayIdxOneBodyG[idxLanczos][1] = x3; - ArrayIdxOneBodyG[idxLanczos][2] = x0; - ArrayIdxOneBodyG[idxLanczos][3] = x1; - */ - ArrayIdxTwoBodyGLz[idx][0] = idxLanczos; - - /* - isite1 = x4 + x5 * Nsite; - isite2 = x6 + x7 * Nsite; - */ - isite1 = x6 + x7 * Nsite; - isite2 = x4 + x5 * Nsite; - idxLanczos = ArrayToIdx[isite1][isite2]; - ArrayIdxOneBodyG[idxLanczos][0] = x6; - ArrayIdxOneBodyG[idxLanczos][1] = x7; - ArrayIdxOneBodyG[idxLanczos][2] = x4; - ArrayIdxOneBodyG[idxLanczos][3] = x5; - - /* - ArrayIdxOneBodyG[idxLanczos][0] = x4; - ArrayIdxOneBodyG[idxLanczos][1] = x5; - ArrayIdxOneBodyG[idxLanczos][2] = x6; - ArrayIdxOneBodyG[idxLanczos][3] = x7; - */ - ArrayIdxTwoBodyGLz[idx][1] = idxLanczos; - } idx++; } if (idx != NArray) info = ReadDefFileError(defname); diff --git a/src/mVMC/setmemory.c b/src/mVMC/setmemory.c index 8422397f..4ae2e252 100644 --- a/src/mVMC/setmemory.c +++ b/src/mVMC/setmemory.c @@ -163,7 +163,7 @@ void SetMemoryDef() { CisAjsCktAltIdx = (int**)malloc(sizeof(int*)*NCisAjsCktAlt); for(i=0;i1){ - CisAjsCktAltLzIdx = malloc(sizeof(int*)*NCisAjsCktAltDC); - for(i=0;i0) { + for(i=0;i<2*Nsite;i++) + free(iOneBodyGIdx[i]); + free(iOneBodyGIdx); + } free(QPOptTransSgn); free(QPOptTrans); @@ -243,6 +241,7 @@ void FreeMemoryDef() { free(DoublonHolon4siteIdx); free(DoublonHolon2siteIdx); free(JastrowIdx); + free(ParaTransfer); free(ExchangeCoupling); free(PairHopping); free(HundCoupling); @@ -369,10 +368,11 @@ void SetMemory() { /***** Physical Quantity *****/ if(NVMCCalMode==1){ PhysCisAjs = (double complex*)malloc(sizeof(double complex) - *(NCisAjs+NCisAjsCktAlt+NCisAjsCktAltDC+NCisAjs)); + *(NCisAjs+NCisAjsCktAlt+NCisAjsCktAltDC+NCisAjs+NCisAjsCktAltDC)); PhysCisAjsCktAlt = PhysCisAjs + NCisAjs; PhysCisAjsCktAltDC = PhysCisAjsCktAlt + NCisAjsCktAlt; LocalCisAjs = PhysCisAjsCktAltDC + NCisAjsCktAltDC; + LocalCisAjsCktAltDC = LocalCisAjs + NCisAjs; if(NLanczosMode>0){ QQQQ = (double complex*)malloc(sizeof(double complex) @@ -385,14 +385,16 @@ void SetMemory() { if(NLanczosMode>1){ QCisAjsQ = (double complex*)malloc(sizeof(double complex) - *(NLSHam*NLSHam*NCisAjs + NLSHam*NLSHam*NCisAjsCktAltDC + NLSHam*NCisAjs) ); + *(NLSHam*NLSHam*NCisAjs + NLSHam*NLSHam*(NCisAjsCktAltDC+NCisAjsCktAlt) + NLSHam*NCisAjs) ); QCisAjsCktAltQ = QCisAjsQ + NLSHam*NLSHam*NCisAjs; - LSLCisAjs = QCisAjsCktAltQ + NLSHam*NLSHam*NCisAjsCktAltDC; + QCisAjsCktAltQDC = QCisAjsCktAltQ + NLSHam*NLSHam*NCisAjsCktAlt; + LSLCisAjs = QCisAjsCktAltQDC + NLSHam*NLSHam*NCisAjsCktAltDC; //for real QCisAjsQ_real = (double *)malloc(sizeof(double ) - *(NLSHam*NLSHam*NCisAjs + NLSHam*NLSHam*NCisAjsCktAltDC + NLSHam*NCisAjs) ); + *(NLSHam*NLSHam*NCisAjs + NLSHam*NLSHam*(NCisAjsCktAltDC+NCisAjsCktAlt) + NLSHam*NCisAjs) ); QCisAjsCktAltQ_real = QCisAjsQ_real + NLSHam*NLSHam*NCisAjs; - LSLCisAjs_real = QCisAjsCktAltQ_real + NLSHam*NLSHam*NCisAjsCktAltDC; + QCisAjsCktAltQDC_real = QCisAjsCktAltQ_real + NLSHam*NLSHam*NCisAjsCktAlt; + LSLCisAjs_real = QCisAjsCktAltQDC_real + NLSHam*NLSHam*NCisAjsCktAltDC; } } diff --git a/src/mVMC/vmccal.c b/src/mVMC/vmccal.c index 85698c08..e400819d 100644 --- a/src/mVMC/vmccal.c +++ b/src/mVMC/vmccal.c @@ -68,6 +68,16 @@ void calculateQCACAQ_real(double *qcacaq, const double *lslca, const double w, const int nLSHam, const int nCA, const int nCACA, int **cacaIdx); +void calculateQCACAQDC_real(double *qcacaq, const double *lslq, const double w, + const int nLSHam, const int nCA, const int nCACA, + int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt, + const double h1, const double ip); + +void calculateQCACAQDC(double complex *qcacaq, const double complex *lslq, const double w, + const int nLSHam, const int nCA, const int nCACA, + int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt, + const double complex h1, const double complex ip); + void VMCMainCal(MPI_Comm comm) { int *eleIdx,*eleCfg,*eleNum,*eleProjCnt; double complex e,ip; @@ -267,14 +277,18 @@ void VMCMainCal(MPI_Comm comm) { LSLocalCisAjs_real(creal(e),creal(ip),eleIdx,eleCfg,eleNum,eleProjCnt); calculateQCAQ_real(QCisAjsQ_real,LSLCisAjs_real,LSLQ_real,w,NLSHam,NCisAjs); calculateQCACAQ_real(QCisAjsCktAltQ_real,LSLCisAjs_real,w,NLSHam,NCisAjs, - NCisAjsCktAltDC, CisAjsCktAltLzIdx); + NCisAjsCktAlt, CisAjsCktAltIdx); + calculateQCACAQDC_real(QCisAjsCktAltQDC_real,LSLQ_real,w,NLSHam,NCisAjs, + NCisAjsCktAltDC,eleIdx,eleCfg,eleNum,eleProjCnt,creal(e),creal(ip)); } else{ LSLocalCisAjs(e,ip,eleIdx,eleCfg,eleNum,eleProjCnt); calculateQCAQ(QCisAjsQ,LSLCisAjs,LSLQ,w,NLSHam,NCisAjs); calculateQCACAQ(QCisAjsCktAltQ,LSLCisAjs,w,NLSHam,NCisAjs, - NCisAjsCktAltDC,CisAjsCktAltLzIdx); + NCisAjsCktAlt,CisAjsCktAltIdx); + calculateQCACAQDC(QCisAjsCktAltQDC,LSLQ,w,NLSHam,NCisAjs, + NCisAjsCktAltDC,eleIdx,eleCfg,eleNum,eleProjCnt,e,ip); } StopTimer(44); } @@ -507,12 +521,12 @@ for(i=0;i1) { /* QCisAjsQ, QCisAjsCktAltQ, LSLCisAjs */ //[TODO]: Check the value n - n = NLSHam*NLSHam*NCisAjs + NLSHam*NLSHam*NCisAjsCktAltDC + n = NLSHam*NLSHam*NCisAjs + NLSHam*NLSHam*(NCisAjsCktAltDC+NCisAjsCktAlt) + NLSHam*NCisAjs; vec = QCisAjsQ; #pragma omp parallel for default(shared) private(i) for(i=0;i 0) { - if(NLanczosMode <2) { - for (i = 0; i < NCisAjs; i++) { - fprintf(FileCisAjs, "%d %d %d %d % .18e % .18e \n", CisAjsIdx[i][0], CisAjsIdx[i][1], CisAjsIdx[i][2], - CisAjsIdx[i][3], creal(PhysCisAjs[i]), cimag(PhysCisAjs[i])); - } - } - else{ - int idx=0; - for (i = 0; i < NCisAjsLz; i++) { - idx = iOneBodyGIdx[CisAjsLzIdx[i][0] + CisAjsLzIdx[i][1] * Nsite][CisAjsLzIdx[i][2] + - CisAjsLzIdx[i][3] * Nsite]; - //fprintf(stdout, "Debug: idx= %d value= % .18e % .18e\n", idx, creal(PhysCisAjs[idx]), cimag(PhysCisAjs[idx])); - fprintf(FileCisAjs, "%d %d %d %d % .18e % .18e \n", CisAjsLzIdx[idx][0], CisAjsLzIdx[idx][1], - CisAjsLzIdx[idx][2], CisAjsLzIdx[idx][3], creal(PhysCisAjs[idx]), cimag(PhysCisAjs[idx])); - } - } + for (i = 0; i < NCisAjs; i++) + fprintf(FileCisAjs, "%d %d %d %d % .18e % .18e \n", CisAjsIdx[i][0], CisAjsIdx[i][1], CisAjsIdx[i][2], + CisAjsIdx[i][3], creal(PhysCisAjs[i]), cimag(PhysCisAjs[i])); fprintf(FileCisAjs, "\n"); } - /* zvo_cisajscktalt.dat */ + /* zvo_cisajscktaltex.dat */ if (NCisAjsCktAlt > 0) { for (i = 0; i < NCisAjsCktAlt; i++) fprintf(FileCisAjsCktAlt, "% .18e % .18e ", creal(PhysCisAjsCktAlt[i]), cimag(PhysCisAjsCktAlt[i])); fprintf(FileCisAjsCktAlt, "\n"); } - /* zvo_cisajscktaltdc.dat */ + /* zvo_cisajscktalt.dat */ if (NCisAjsCktAltDC > 0) { for (i = 0; i < NCisAjsCktAltDC; i++) { fprintf(FileCisAjsCktAltDC, "%d %d %d %d %d %d %d %d % .18e % .18e\n", @@ -702,16 +689,16 @@ void outputData() { if (NLanczosMode > 0) { if (AllComplexFlag == 0) { //real PhysCalLanczos_real( - QQQQ_real, QCisAjsQ_real, QCisAjsCktAltQ_real, - NLSHam, Nsite, NCisAjs, NCisAjsLz, iOneBodyGIdx, CisAjsLzIdx, NCisAjsCktAltDC, CisAjsCktAltDCIdx, NLanczosMode, - FileLS, FileLSQQQQ, FileLSQCisAjsQ, FileLSQCisAjsCktAltQ, - FileLSCisAjs, FileLSCisAjsCktAlt); + QQQQ_real, QCisAjsQ_real, QCisAjsCktAltQ_real, QCisAjsCktAltQDC_real, + NLSHam, Nsite, NCisAjs, NCisAjs, iOneBodyGIdx, CisAjsIdx, NCisAjsCktAlt, NCisAjsCktAltDC, CisAjsCktAltDCIdx, + NLanczosMode, FileLS, FileLSQQQQ, FileLSQCisAjsQ, FileLSQCisAjsCktAltQ, + FileLSCisAjs, FileLSCisAjsCktAlt, FileLSCisAjsCktAltDC); }else { //complex PhysCalLanczos_fcmp( - QQQQ, QCisAjsQ, QCisAjsCktAltQ, - NLSHam, Nsite, NCisAjs, NCisAjsLz, iOneBodyGIdx, CisAjsLzIdx, NCisAjsCktAltDC, CisAjsCktAltDCIdx, NLanczosMode, - FileLS, FileLSQQQQ, FileLSQCisAjsQ, FileLSQCisAjsCktAltQ, - FileLSCisAjs, FileLSCisAjsCktAlt); + QQQQ, QCisAjsQ, QCisAjsCktAltQ, QCisAjsCktAltQDC, + NLSHam, Nsite, NCisAjs, NCisAjs, iOneBodyGIdx, CisAjsIdx, NCisAjsCktAlt, NCisAjsCktAltDC, CisAjsCktAltDCIdx, + NLanczosMode, FileLS, FileLSQQQQ, FileLSQCisAjsQ, FileLSQCisAjsCktAltQ, + FileLSCisAjs, FileLSCisAjsCktAlt, FileLSCisAjsCktAltDC); } } } From 832230e3cb5f0ecc0138c2557e5b75e4163f7bc3 Mon Sep 17 00:00:00 2001 From: tmisawa Date: Tue, 1 Oct 2024 15:59:21 +0900 Subject: [PATCH 71/73] mod --- src/mVMC/vmccal.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mVMC/vmccal.c b/src/mVMC/vmccal.c index e264c4f0..50a3fb39 100644 --- a/src/mVMC/vmccal.c +++ b/src/mVMC/vmccal.c @@ -77,7 +77,7 @@ void calculateQCACAQDC_real(double *qcacaq, const double *lslq, const double w, void calculateQCACAQDC(double complex *qcacaq, const double complex *lslq, const double w, const int nLSHam, const int nCA, const int nCACA, int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt, - const double complex h1, const double complex ip); + const double complex h1, const double complex ip,double complex *rbmCnt); void VMCMainCal(MPI_Comm comm) { int *eleIdx,*eleCfg,*eleNum,*eleProjCnt; @@ -297,7 +297,7 @@ void VMCMainCal(MPI_Comm comm) { calculateQCACAQ(QCisAjsCktAltQ,LSLCisAjs,w,NLSHam,NCisAjs, NCisAjsCktAlt,CisAjsCktAltIdx); calculateQCACAQDC(QCisAjsCktAltQDC,LSLQ,w,NLSHam,NCisAjs, - NCisAjsCktAltDC,eleIdx,eleCfg,eleNum,eleProjCnt,e,ip); + NCisAjsCktAltDC,eleIdx,eleCfg,eleNum,eleProjCnt,e,ip,rbmCnt); } StopTimer(44); } @@ -977,7 +977,7 @@ void calculateQCACAQDC_real(double *qcacaq, const double *lslq, const double w, void calculateQCACAQDC(double complex *qcacaq, const double complex *lslq, const double w, const int nLSHam, const int nCA, const int nCACA, int *eleIdx, int *eleCfg, int *eleNum, int *eleProjCnt, - const double complex h1, const double complex ip) { + const double complex h1, const double complex ip,double complex *rbmCnt) { const int n=nLSHam*nLSHam*nCACA; int rq,rp,ri,rj,rk,rl,s,t,idx; int i,tmp; @@ -996,7 +996,7 @@ void calculateQCACAQDC(double complex *qcacaq, const double complex *lslq, const rl = CisAjsCktAltDCIdx[idx][6]; t = CisAjsCktAltDCIdx[idx][5]; qcacaq[i] += w * lslq[rp*nLSHam] * calHCACA(ri,rj,rk,rl,s,t,h1,ip, - eleIdx,eleCfg,eleNum,eleProjCnt); + eleIdx,eleCfg,eleNum,eleProjCnt,rbmCnt); } else qcacaq[i] += w * lslq[rp*nLSHam] * LocalCisAjsCktAltDC[idx]; } From 0e9a01eed8c26c5b66cf7d721d9369b347791ec6 Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:35:57 +0900 Subject: [PATCH 72/73] update version --- src/mVMC/include/version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mVMC/include/version.h b/src/mVMC/include/version.h index 2a7f91d0..79ea93a5 100644 --- a/src/mVMC/include/version.h +++ b/src/mVMC/include/version.h @@ -28,8 +28,8 @@ along with this program. If not, see http://www.gnu.org/licenses/. /* Semantic Versioning http://semver.org */ /* ..- */ #define VERSION_MAJOR 1 -#define VERSION_MINOR 2 -#define VERSION_PATCH 1 +#define VERSION_MINOR 3 +#define VERSION_PATCH 0 #define VERSION_PRERELEASE "" /* "alpha", "beta.1", etc. */ From 0597f34e206feda6b92d6a8f5922d5a49ca8607d Mon Sep 17 00:00:00 2001 From: "k.ido" <13773226+k-ido@users.noreply.github.com> Date: Thu, 3 Oct 2024 12:27:04 +0900 Subject: [PATCH 73/73] update authors in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bb8976b5..9a92c937 100644 --- a/README.md +++ b/README.md @@ -62,4 +62,4 @@ are available at [mVMC-tutorial](https://github.com/issp-center-dev/mVMC-tutoria ## Authors -Takahiro Misawa, Satoshi Morita, Takahiro Ohgoe, Kota Ido, Yuichi Motoyama, Mitsuaki Kawamura, Kazuyoshi Yoshimi, Takeo Kato, Masatoshi Imada. +Takahiro Misawa, Satoshi Morita, Takahiro Ohgoe, Kota Ido, RuQing G. Xu, Yuichi Motoyama, Mitsuaki Kawamura, Kazuyoshi Yoshimi, Takeo Kato, Masatoshi Imada.