Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tensorized C++ IM-SRG

To build program, run

mkdir build; cd build
cmake .. ../build/

To execute program, run

./solve_imsrg

Executable arguments

  • numStates= (specify number of S.P. states in reference)
  • nHoles= (specify number of holes states in reference)
  • nParticles= (specify number of particle states in reference)
  • d= (energy spacing)
  • g= (pairing strength)
  • pb= (pair-breaking strength)
  • t0= (starting point for ODE solver)
  • t1= (ending point for ODE solver)
  • dt= (step width for ODE solver)
  • generator_id=<0,1> (0: White generator with MP denominators, 1: Atan-regulated White)
  • reference_type=<0,1> (0: single reference, 1: ensemble reference)
  • solver=<0,1> (0:Adams-Bashforth-Moulton, 1:Runge-Kutta 4 point)

CMakeLists.txt will automatically link the main.cpp executable against the TACO library.

Tensor Algebra Compiler code at https://github.com/tensor-compiler/taco

TODO:

  • Implement TACO backend
    • pass occupation tensors directly so no conversion?
  • Add density matrix normal-ordering functionality
    • optimize density matrix normal-ordering
      • DMCPP code is way too slow
  • Remove particle-hole distinction
    • This makes density matrix process simpler
  • Come up with user input to specify density matrix weights
  • Come up with user input to specify reference state type (single ref, or ensemble)
  • Optimize loops and parallelize TACO code
  • Overhaul the system logging
    • want two files: IMSRG coefficients and vacuum coefficients (including s vals and ||eta1b||, ||eta2b||)
  • Add White Atan generator
    • seems to work better for floating point reference states, without including irreducible DMs in flow equations (should investigate this)
  • Add the multi-reference IMSRG equations
    • the flow seems unstable for fractional density matrices without including irreducible components in flow equations
    • complete up to 2b densities

Purpose

Build system for solving the pairing-plus-particle-hole model Hamiltonian using IMSRG(2).

Code Logic

Modularized so that new pieces can be added to code, including density matrix normal-ordering, new model Hamiltonians, and new backends for computing the flow equations. Logic is still WIP.

main.cpp
User-defined flow setup, handling, and solution.

pairinghamiltonian.cpp
Defines the pairing-plus-particle-hole model Hamiltonian and computes vacuum coefficients and normal-ordered coefficients (with reference state provided as input).

white.cpp
Computes the White generator for input IMSRG coefficients. Inherits from generator.hpp.

flow_imsrg2.cpp
Handles computation of the flow equations. Transforms occupation tensors to UBLAS vectors before passing to backend.

system.cpp
ODE system class for boost::numeric::odeint. Track E, f, Gamma and dE, df, dGamma while passing through solver.

system_observer.cpp
Singleton class that observes and outputs flow data. Passed to ODEINT solver.

occupation_factors.cpp
Write to file tensor-train decomposed occupation factors that appear in the flow equations. Also handles reading back into memory pointer.

BACKEND_ublas.cpp
Compute the IMSRG flow using only vector loops. Primarily for performance benchmarking. Inherits from BACKEND.hpp.

BACKEND_taco.cpp
Compute the IMSRG flow using tensor library TACO. Convert UBLAS vectors into TACO tensors and run contractions. Inherits from BACKEND.hpp.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages