Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop (PR for Testing) #14

Open
wants to merge 41 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
51829d3
Update CMakeLists.txt: MinGW include DLL
kyungminlee Mar 29, 2018
8252083
Updates
kyungminlee Mar 30, 2018
f5ba7bd
An example added.
kyungminlee Mar 30, 2018
d1772a8
Fixed SpinOne.h.cc
kyungminlee Mar 30, 2018
8c03839
Update sweeps.h.cc
kyungminlee Mar 30, 2018
ae3459b
Update dmrg.h.cc: DMRGWorker added, but not used.
kyungminlee Mar 30, 2018
e2d6070
Update sweeps.h.cc
kyungminlee Mar 30, 2018
d97fffe
Update example.py
kyungminlee Mar 30, 2018
5c259ea
Update CMakeLists.txt: show host system and also build shared library
kyungminlee Apr 10, 2018
f126018
Update src/pitensor.h: some c++ includes
kyungminlee Apr 10, 2018
846bfd7
__repr__ and Minor formatting fixes
kyungminlee Apr 10, 2018
45883d7
Update eigensolver.h.cc: include mpo.h and localmpo.h
kyungminlee Apr 10, 2018
7ba167a
Update eigensolver.h.cc: rename init to _init
kyungminlee Apr 10, 2018
375972f
Update index.h.cc
kyungminlee Apr 10, 2018
816f578
Update indexname.h.cc
kyungminlee Apr 10, 2018
7efba67
Update indexset.h.cc
kyungminlee Apr 10, 2018
cf47527
Update indextype.h.cc
kyungminlee Apr 10, 2018
f4fe754
Update itensor_interface.h.cc
kyungminlee Apr 10, 2018
b72726e
Update real.h.cc
kyungminlee Apr 10, 2018
b5fa925
Update autompo.h.cc
kyungminlee Apr 10, 2018
db5a2ae
Update bondgate.h.cc
kyungminlee Apr 10, 2018
90271b7
Update hambuilder.h.cc
kyungminlee Apr 10, 2018
f9f08ff
Update idmrg.h.cc
kyungminlee Apr 10, 2018
67e0b4b
Update localmpo.h.cc
kyungminlee Apr 10, 2018
4c65298
Update localop.h.cc
kyungminlee Apr 10, 2018
5ea73d5
Update mpo.h.cc
kyungminlee Apr 10, 2018
2e9f67b
Update mps.h.cc
kyungminlee Apr 10, 2018
e9ba9a3
Update siteset.h.cc
kyungminlee Apr 10, 2018
7ff3d3b
Update sweeps.h.cc
kyungminlee Apr 10, 2018
1fe3d2d
Update spintwo.h.cc
kyungminlee Apr 10, 2018
3ea5440
Update args.h.cc
kyungminlee Apr 10, 2018
5d25658
Update pitensor.h (pythonbuf WIP)
kyungminlee Apr 10, 2018
715d79f
Update test_itensor.py
kyungminlee Apr 10, 2018
c5d936d
Added test_index.py
kyungminlee Apr 10, 2018
7009adc
Added examples (translated from ITensor)
kyungminlee Apr 10, 2018
8b23858
Added dist and egg-info to gitignore
kyungminlee Apr 10, 2018
8294ac8
Update itensor_interface.h.cc: added missing initializations
kyungminlee Apr 10, 2018
fbd924b
Update itensor_interface.h.cc: formatting
kyungminlee Apr 24, 2018
2c3d685
Update itensor_interface.h.cc: Structure change (WIP)
kyungminlee Apr 24, 2018
08aefc7
Update CMakeLists.txt: Change branch of ITensor
kyungminlee May 8, 2018
a8e5fb8
Update pybind11
kyungminlee Feb 10, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
* text=lf

*.h text
*.hpp text
*.c text
*.cc text
*.cpp text
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ cmake-build-*/
.idea
repo
build/
lab/
lab/
dist/
*.egg-info/*
65 changes: 50 additions & 15 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
# cmake .. -G "MSYS Makefiles" -DPYTHON_EXECUTABLE=C:/Users/user/Anaconda3/python.exe
#


cmake_minimum_required(VERSION 3.5)
project(pitensor)

Expand Down Expand Up @@ -137,6 +138,7 @@ set(PITENSOR_DEPENDENCY_DIR "${CMAKE_BINARY_DIR}/deps")
target_include_directories(pitensor PUBLIC "${PITENSOR_DEPENDENCY_DIR}/ITensor")

if(APPLE)
message(STATUS "Building for macOS")
# https://stackoverflow.com/questions/26185978/macos-wchar-h-file-not-found
set(ITENSOR_PLATFORM macos)
set(ITENSOR_BLAS_LAPACK_LIBFLAGS "-framework Accelerate")
Expand All @@ -150,7 +152,8 @@ if(APPLE)
debug "${ITENSOR_LIB_DEBUG}"
general "${ACCELERATE_LIBRARY}"
)
elseif(MSYS AND MINGW)
elseif(MINGW)
message(STATUS "Building for MinGW")
set(CMAKE_AR "gcc-ar")
set(CMAKE_RANLIB "gcc-ranlib")

Expand All @@ -161,25 +164,24 @@ elseif(MSYS AND MINGW)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE}")

if (NOT DEFINED OPENBLAS_ROOT)
if (NOT DEFINED MINGW_ROOT)
set(MINGW_ROOT "$ENV{MINGW_PREFIX}")
if(CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8)
set(OPENBLAS_ROOT "/mingw64")
add_definitions(-DMS_WIN64)
elseif(CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 4)
set(OPENBLAS_ROOT "/mingw32")
else()
message(FATAL_ERROR "Unsupported pointer size")
endif()
endif()

target_include_directories(pitensor PUBLIC "${OPENBLAS_ROOT}/include/OpenBLAS")
target_include_directories(pitensor PUBLIC "${MINGW_ROOT}/include/OpenBLAS")
find_library(OPENBLAS_LIBRARY
NAMES openblas
HINTS "${OPENBLAS_ROOT}/lib"
HINTS "${MINGW_ROOT}/lib"
)
set(ITENSOR_PLATFORM openblas)
set(ITENSOR_BLAS_LAPACK_LIBFLAGS "${OPENBLAS_LIBRARY}")
set(ITENSOR_BLAS_LAPACK_INCLUDEFLAGS "-I${OPENBLAS_ROOT}/include/OpenBLAS")
set(ITENSOR_BLAS_LAPACK_INCLUDEFLAGS "-I${MINGW_ROOT}/include/OpenBLAS")

target_link_libraries(pitensor
PRIVATE
Expand All @@ -188,14 +190,30 @@ elseif(MSYS AND MINGW)
)
target_link_libraries(pitensor
PRIVATE
# TODO(kyungminlee): dynamically link libraries and include DLL files in setup.py
general "-static -static-libgcc -static-libstdc++" # statically link all libraries (without needing DLLs)
general "-Wl,-Bstatic"
general "${OPENBLAS_LIBRARY}"
general gfortran
general quadmath
)

file(GLOB libopenblas_dll "${MINGW_ROOT}/bin/libopenblas*.dll")
file(GLOB libwinpthread_dll "${MINGW_ROOT}/bin/libwinpthread*.dll")
file(GLOB libgfortran_dll "${MINGW_ROOT}/bin/libgfortran*.dll")
file(GLOB libquadmath_dll "${MINGW_ROOT}/bin/libquadmath*.dll")
file(GLOB libstdcpp_dll "${MINGW_ROOT}/bin/libstdc++*.dll")
file(GLOB libgcc_dll "${MINGW_ROOT}/bin/libgcc*.dll")

add_custom_target(DllBinaries
COMMAND ${CMAKE_COMMAND} -E copy "${libopenblas_dll}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
COMMAND ${CMAKE_COMMAND} -E copy "${libwinpthread_dll}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
COMMAND ${CMAKE_COMMAND} -E copy "${libgfortran_dll}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
COMMAND ${CMAKE_COMMAND} -E copy "${libquadmath_dll}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
COMMAND ${CMAKE_COMMAND} -E copy "${libstdcpp_dll}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
COMMAND ${CMAKE_COMMAND} -E copy "${libgcc_dll}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
)

add_dependencies(pitensor DllBinaries)
elseif(UNIX)
message(STATUS "Building for Linux")
set(CMAKE_AR "gcc-ar")
set(CMAKE_RANLIB "gcc-ranlib")

Expand All @@ -207,8 +225,16 @@ elseif(UNIX)
set(ITENSOR_PLATFORM lapack)
set(ITENSOR_BLAS_LAPACK_LIBFLAGS "${LAPACK_LIBRARY} ${BLAS_LIBRARY} -lpthread")
set(ITENSOR_BLAS_LAPACK_INCLUDEFLAGS "-I${BLAS_LAPACK_ROOT}/include")
set(ITENSOR_LIB_OPTIMIZED "${PITENSOR_DEPENDENCY_DIR}/ITensor/lib/libitensor.a")
set(ITENSOR_LIB_DEBUG "${PITENSOR_DEPENDENCY_DIR}/ITensor/lib/libitensor-g.a")

#find_library(ITENSOR_LIB_OPTIMIZED NAMES itensor HINTS "${PITENSOR_DEPENDENCY_DIR}/ITensor/lib")
#find_library(ITENSOR_LIB_DEBUG NAMES itensor-g HINTS "${PITENSOR_DEPENDENCY_DIR}/ITensor/lib")

#set(ITENSOR_LIB_OPTIMIZED "${PITENSOR_DEPENDENCY_DIR}/ITensor/lib/libitensor.a")
#set(ITENSOR_LIB_DEBUG "${PITENSOR_DEPENDENCY_DIR}/ITensor/lib/libitensor-g.a")

set(ITENSOR_LIB_OPTIMIZED "${PITENSOR_DEPENDENCY_DIR}/ITensor/lib/libitensor.so")
set(ITENSOR_LIB_DEBUG "${PITENSOR_DEPENDENCY_DIR}/ITensor/lib/libitensor-g.so")

target_link_libraries(pitensor
PRIVATE
optimized "${ITENSOR_LIB_OPTIMIZED}"
Expand Down Expand Up @@ -238,7 +264,7 @@ BLAS_LAPACK_LIBFLAGS=${ITENSOR_BLAS_LAPACK_LIBFLAGS}
BLAS_LAPACK_INCLUDEFLAGS=${ITENSOR_BLAS_LAPACK_INCLUDEFLAGS}
OPTIMIZATIONS=-DNDEBUG -Wall ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}
DEBUGFLAGS=-DDEBUG -Wall -pedantic ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}
ITENSOR_MAKE_DYLIB=0
ITENSOR_MAKE_DYLIB=1
PREFIX=$(THIS_DIR)
ITENSOR_LIBDIR=$(PREFIX)/lib
ITENSOR_INCLUDEDIR=$(PREFIX)
Expand All @@ -256,6 +282,15 @@ CCFLAGS=-I. $(ITENSOR_INCLUDEFLAGS) $(OPTIMIZATIONS) -Wno-unused-variable
CCGFLAGS=-I. $(ITENSOR_INCLUDEFLAGS) $(DEBUGFLAGS)
LIBFLAGS=-L$(ITENSOR_LIBDIR) $(ITENSOR_LIBFLAGS)
LIBGFLAGS=-L$(ITENSOR_LIBDIR) $(ITENSOR_LIBGFLAGS)

UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
DYLIB_EXT ?= dylib
DYLIB_FLAGS ?= -dynamiclib
else
DYLIB_EXT ?= so
DYLIB_FLAGS ?= -shared
endif
")

include(ExternalProject)
Expand All @@ -267,13 +302,13 @@ ExternalProject_Add(ITensor_external
BINARY_DIR "${PITENSOR_DEPENDENCY_DIR}/ITensor"
INSTALL_DIR "${PITENSOR_DEPENDENCY_DIR}/ITensor"
GIT_REPOSITORY https://github.com/kyungminlee/ITensor.git
GIT_TAG pitensor
GIT_TAG "pitensor-2.1.1-1"
UPDATE_COMMAND ""
PATCH_COMMAND ""
CONFIGURE_COMMAND "${CMAKE_COMMAND}" -E copy
"${PITENSOR_DEPENDENCY_DIR}/options.mk"
"${PITENSOR_DEPENDENCY_DIR}/ITensor/options.mk"
BUILD_COMMAND "make"
BUILD_COMMAND "${CMAKE_MAKE_PROGRAM}"
INSTALL_COMMAND ""
WORKING_DIRECTORY "${PITENSOR_DEPENDENCY_DIR}/ITensor"
)
Expand Down
27 changes: 27 additions & 0 deletions example/dmrg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import numpy as np
import pitensor

def main():
N = 100
sites = pitensor.SpinOne(N)
psi = pitensor.MPS(sites)
ampo = pitensor.AutoMPO(sites)
for j in range(1, N):
# Testing all three patterns of term addition to AutoMPO
ampo += ("Sz", j, "Sz", j+1)
ampo += (0.5, "S+", j, "S-", j+1)
hm = pitensor.HTerm(0.5, [pitensor.SiteTerm("S-", j), pitensor.SiteTerm("S+", j+1)])
ampo.add(hm)

H = pitensor.toMPO(ampo)

sweeps = pitensor.Sweeps(5);
sweeps.maxm = [10, 40, 100, 200, 200]
sweeps.cutoff = 1E-8

#energy = pitensor.dmrg(psi, H, sweeps, pitensor.Args(Quiet=True))
energy = pitensor.dmrg(psi, H, sweeps, pitensor.Args({'Quiet': True}))
print("Ground state energy per site = {:.18f}".format(energy / N))

if __name__=='__main__':
main()
48 changes: 48 additions & 0 deletions example/dmrg_table.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import argparse
import json
import numpy as np
import pitensor

def main():
parser = argparse.ArgumentParser("dmrg_table")
parser.add_argument("inputjsonfile", type=argparse.FileType('r'))
args = parser.parse_args()

inputjson = json.load(args.inputjsonfile)
N = inputjson['N']

sweepjson = inputjson['sweeps']
sweeps = pitensor.Sweeps(len(sweepjson))
sweeps.maxm = [s['maxm'] for s in sweepjson]
sweeps.minm = [s['minm'] for s in sweepjson]
sweeps.cutoff = [s['cutoff'] for s in sweepjson]
sweeps.niter = [s['niter'] for s in sweepjson]
sweeps.noise = [s['noise'] for s in sweepjson]

quiet = inputjson['quiet']

print(sweeps)

sites = pitensor.SpinOne(N)
ampo = pitensor.AutoMPO(sites)
for j in range(1, N):
ampo += (0.5, "S+", j, "S-", j+1)
ampo += (0.5, "S-", j, "S+", j+1)
ampo += ("Sz", j, "Sz", j+1)

H = ampo.toMPO()

state = pitensor.InitState(sites)

for i in range(1, N):
state.set(i, "Up" if i % 2 == 1 else "Dn")
psi = pitensor.MPS(state)
print("Initial energy = {}".format(pitensor.overlap(psi, H, psi)))

energy = pitensor.dmrg(psi, H, sweeps, pitensor.Args(Quiet=quiet))

print("Ground State energy = {}".format(energy))


if __name__=='__main__':
main()
32 changes: 32 additions & 0 deletions example/example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import numpy as np
import pitensor

def main():
result = []
for N in range(10, 200, 10):
sites = pitensor.SpinHalf(N);
psi = pitensor.MPS(sites)
ampo = pitensor.AutoMPO(sites)
for j in range(1, N):
hz = pitensor.HTerm(1.0, [pitensor.SiteTerm("Sz", j), pitensor.SiteTerm("Sz", j+1)])
hp = pitensor.HTerm(0.5, [pitensor.SiteTerm("S+", j), pitensor.SiteTerm("S-", j+1)])
hm = pitensor.HTerm(0.5, [pitensor.SiteTerm("S-", j), pitensor.SiteTerm("S+", j+1)])

ampo.add(hz)
ampo.add(hp)
ampo.add(hm)

H = pitensor.toMPO(ampo)

sweeps = pitensor.Sweeps(5);
sweeps.maxm = [10, 40, 100, 200, 200]
sweeps.cutoff = 1E-8

energy = pitensor.dmrg(psi, H, sweeps, pitensor.Args(Quiet=True))
result.append((N, energy/N))
print("Ground state energy per site = {:.18f}".format(energy / N))
result = np.array(result)
np.savetxt('GroundStateEnergy.txt', result)

if __name__=='__main__':
main()
70 changes: 70 additions & 0 deletions example/exthubbard.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import argparse
import json
import pitensor

def main():
parser = argparse.ArgumentParser("exthubbard")
parser.add_argument("inputjsonfile", type=argparse.FileType('r'))
args = parser.parse_args()

inputjson = json.load(args.inputjsonfile)

N = inputjson['N']
Npart = inputjson['Npart']
sweepjson = inputjson['sweeps']
sweeps = pitensor.Sweeps(len(sweepjson))
sweeps.maxm = [s['maxm'] for s in sweepjson]
sweeps.minm = [s['minm'] for s in sweepjson]
sweeps.cutoff = [s['cutoff'] for s in sweepjson]
sweeps.niter = [s['niter'] for s in sweepjson]
sweeps.noise = [s['noise'] for s in sweepjson]

t1 = inputjson['t1']
t2 = inputjson['t2']
U = inputjson['U']
V1 = inputjson['V1']
quiet = inputjson['quiet']

print(sweeps)

sites = pitensor.Hubbard(N)
ampo = pitensor.AutoMPO(sites)
for i in range(1, N+1):
ampo += (U, "Nupdn", i)
for i in range(1, N):
ampo += (-t1, "Cdagup", i, "Cup", i+1)
ampo += (-t1, "Cdagup", i+1, "Cup", i)
ampo += (-t1, "Cdagdn", i, "Cdn", i+1)
ampo += (-t1, "Cdagdn", i+1, "Cdn", i)
ampo += (V1, "Ntot", i, "Ntot", i+1)
for i in range(1, N-1):
ampo += (-t2, "Cdagup", i, "Cup", i+1)
ampo += (-t2, "Cdagup", i+2, "Cup", i)
H = ampo.toIQMPO()

state = pitensor.InitState(sites)
p = Npart
for i in range(N, 0, -1):
if p > i:
print("Doubly occupying site {}".format(i))
state.set(i, "UpDn")
p -= 2
elif p > 0:
print("Singly occupying site ".format(i))
state.set(i, "Up" if i % 2 == 1 else "Dn")
p -= 1
else:
state.set(i, "Emp")

psi = pitensor.IQMPS(state)
print("Total QN = {}".format(pitensor.totalQN(psi)))

energy = pitensor.dmrg(psi, H, sweeps, pitensor.Args(Quiet=quiet))

print("Ground State energy = {}".format(energy))




if __name__=='__main__':
main()
11 changes: 11 additions & 0 deletions example/inputfile_dmrg_table.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"N": 100,
"sweeps": [
{"maxm": 50, "minm": 20, "cutoff": 1E-6, "niter": 4, "noise": 1E-7},
{"maxm": 50, "minm": 20, "cutoff": 1E-6, "niter": 4, "noise": 1E-7},
{"maxm": 50, "minm": 20, "cutoff": 1E-6, "niter": 4, "noise": 1E-7},
{"maxm": 50, "minm": 20, "cutoff": 1E-6, "niter": 4, "noise": 1E-7},
{"maxm": 50, "minm": 20, "cutoff": 1E-6, "niter": 4, "noise": 1E-7}
],
"quiet": false
}
16 changes: 16 additions & 0 deletions example/inputfile_exthubbard.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"N": 100,
"Npart": 10,
"t1": 1.0,
"t2": 0.2,
"U" : 1.0,
"V1": 0.5,
"sweeps": [
{"maxm": 50, "minm": 10, "cutoff": 1E-12, "niter": 2, "noise": 1E-7},
{"maxm": 100, "minm": 20, "cutoff": 1E-12, "niter": 2, "noise": 1E-8},
{"maxm": 200, "minm": 20, "cutoff": 1E-12, "niter": 2, "noise": 1E-10},
{"maxm": 400, "minm": 20, "cutoff": 1E-12, "niter": 2, "noise": 0},
{"maxm": 800, "minm": 20, "cutoff": 1E-12, "niter": 2, "noise": 0}
],
"quiet": true
}
2 changes: 1 addition & 1 deletion pybind11
Submodule pybind11 updated 108 files
Loading