pax_global_header00006660000000000000000000000064141460430130014506gustar00rootroot0000000000000052 comment=9f46eebce7e2c231cf486aa2e33368477827b63e dmrgpp-6.02/000077500000000000000000000000001414604301300127265ustar00rootroot00000000000000dmrgpp-6.02/AUTHORS000066400000000000000000000020571414604301300140020ustar00rootroot00000000000000 # Feel free to add or edit yourself. # Follow format explained at the end of this file. * LICENSE All contributors have transfered copyright to UT-Battelle, LLC. See file LICENSE for details. * Current Contributors - G.~A. https://g1257.github.io/ Core, Integration. - Ed D'Azevedo https://www.olcf.ornl.gov/directory/staff-member/eduardo-dazevedo/ DMRG++: Kron Engine, GPU support via DmrgppPluginSc PsimagLite: linear algebra - Wael R. Elwasif url here DMRG++: Performance - Jacek Herbrych url here DMRG++: Models - Nitin Kaushal url here DMRG++: Spin-orbit coupling models - Pontus Laurell url here DMRG++: Kitaev models - Alberto Nocera url here DMRG++: Core, Targets, Models, RIXS Lanczos++ - Maksymilian Środa (Max) url here DMRG++: Tests, bug fixes * Past Contributors - Nirav Patel url here DMRG++: Various PsimagLite: LanczosSolver - Khaled A. Al Hassanieh - Luis G. Dias Da Silva - Peter Doak - Anibal Lugo - Eduardo Ponce - Julian Rincon - Jesus Torres # File format should be # * Section Header # - Name # url line # description line dmrgpp-6.02/CHANGES000066400000000000000000000000651414604301300137220ustar00rootroot00000000000000See https://github.com/g1257/dmrgpp/commits/master dmrgpp-6.02/CMakeLists.txt000066400000000000000000000001421414604301300154630ustar00rootroot00000000000000project (dmrgpp) cmake_minimum_required(VERSION 3.4) add_subdirectory(src) add_subdirectory(doc) dmrgpp-6.02/CODEMAP000066400000000000000000000204601414604301300137230ustar00rootroot00000000000000 -------------------------------------------------------- Top level files: CODE MAP This file. Short description of the various directories and source files. README README file CHANGES Summary of changes from v1.0.0 INDENTATION Indentation style of DMRG++ INSTALL Software requirements to build and run DMRG++ LICENSE DMRG++ License -------------------------------------------------------- src/dmrg.cpp This is the main program (contains the entry point or int main()). This file is not included in the package, but it is written when configure.pl is executed. -------------------------------------------------------- src/configure.pl This script asks for the parameters of the run that are selected at compile-time, it creates the file main.cpp (containing the main program), it writes the Makefile, and it creates a sample input.inp file (containing run-time parameters) -------------------------------------------------------- src/Geometries/ contains the geometry classes, which are: GeometryLadder.h Ladder for one orbital Geometry1D.h One dimensional geometry (chain) GeometryLadderFeAs.h Ladder for multiple orbitals -------------------------------------------------------- src/Models contains sample models under separate sub-directories. These sample models are: 1) HeisenbergSpinOneHalf/ which contains: ModelHeisenberg.h The model implementation ParametersModelHeisenberg.h The model parameters (basically J_ij) OperatorsHeisenberg.h The Heisenberg operators needed to assemble the Hamiltonian. In this case, S^z_i and S^+_i HilbertSpaceHubbard.h Hilbert space for this model (same as Hubbard's) LinkProductHeisenbergSpinOneHalf.h Hamiltonian connections for this model. There are two types: S_i^+ S_j^- and S^z_i S^z_j 2) FeAsModel/ for iron based superconductors, which contains: ModelFeBasedSc.h The model implementation ParametersModelFeAs.h The model parameters. OperatorsFeAs.h The model's operators needed to assemble the Hamiltonian. In this case, c^\dagger_{i\gamma\sigma} HilbertSpaceFeAs.h Hilbert space for this model (spin and two-orbitals, i.e. 16 states per site) LinkProductFeAs.h Hamiltonian connections for this model. These are c^\dagger_{i\gamma\sigma} c_{j\gamma'\sigma} 3) HubbardOneBand/ which contains: ModelHubbard.h The model's implementation ParametersModelHubbard.h The model's parameters (U_i, V_i, t_{ij}) OperatorsHubbard.h The model's operators needed to assemble the Hamiltonian. In this case, c^\dagger_{i\sigma} HilbertSpaceHubbard.h LinkProductHubbardOneBand.h Hamiltonian connections for this model. These are c^\dagger_{i\sigma} c_{j'\sigma} -------------------------------------------------------- src/DmrgEngine/ contains the DMRG++ engine, i.e. those tasks that are both model and geometry independent. The engine is instantiated with a given model and geometry. Its files can be classified in the following way: *) The interfaces. These abstract classes allows expansion and modularity of functionality: ModelBase.h Models must implement this interface. For example, ModelHubbard does. BasisData.h Helper interface to ModelBase.h OperatorsBase.h Operators must implement this interface. For example, OperatorsHubbard does GeometryBase.h Geometries must implement this interface. For example, Geometry1D does. Concurrency.h Concurrency paradigms must implement this interface. For example ConcurrencyMpi does. *) The core classes. These are: DmrgSolver.h A class to represent a generic solver for the Dmrg method Basis.h Hilbert space basis to deal with symmetries. BasisImplementation.h Helper to Basis.h BasisWithOperators.h Hilbert space basis that includes operators Operator.h An unmangled operator. OperatorsImplementation.h Default (or common) implementation of OperatorsBase.h InternalProductOnTheFly.h Internal product done on-the-fly. InternalProductStored.h Internal product stored (for future use) ModelCommon.h Default (or common) implementation of ModelBase.h ReflectionSymmetryEmpty.h Hook to implement the reflection symmetry present in the infinite algorithm. WaveFunctionTransformation.h Speed-up that computes a good guess for the initial Lanczos vector LanczosSolver.h The generic Lanczos algorithm implementation DensityMatrix.h Class to represent the density matrix. *) Concurrency classes. ConcurrencySerial.h Serial program. NoPthreads.h Serial program, no pthreads. ConcurrencyMpi.h MPI program. ConcurrencyMpiFunctions.h Helper for ConcurrencyMpi. Pthreads.h Pthreaded program. *) Local Symmetry classes ModelHelperLocal.h A class to contain state information about the Hamiltonian to help with the calculation of x+=Hy HamiltonianSymmetryLocal.h This class contains the implementation of local symmetries An object of this class is contained by DmrgBasisImplementation *) SU(2) Symmetry classes JmSubspace.h Each object of this class contains a subspace of the outer product. States (a,b) in this subspace give rise to a state c in the outer product with given quantum numbers (j,m,q) [See paper for more info] ApplyFactors.h Applies the factors of Eq~(1) in the paper to the operators. ClebschGordan.h This is a class to compute ClebschGordan Coefficients //! Don't use this class directly, use ClebschGordanCached instead, it'll improve performance // Parts taken from Ref.S = http://caps.gsfc.nasa.gov/simpson/software/cg_f90.txt ClebschGordanCached.h Helper to ClebschGordan ReducedOperators.h Reduced operators as in Eqs~(6-7) in the paper. Su2Reduced.h Implemenation of WignerEckart Theorem to speed up SU(2) algorithm (see corresponding section in paper for more info) JmPairs.h This is a "vector" containing (2j,m+j) pairs. Repeated entries are stored only once Provides a transparent access as if it were a normal vector HamiltonianSymmetrySu2.h An object of this class is meant to be contained by a Hilbert Space basis and then this class help creating the outer product states necessary to preserve the SU(2) symmetry THe counterpart to this class is HamiltonianSymmetryLocal.h for local symmetries only ModelHelperSu2.h A class to contain state information about the Hamiltonian to help with the calculation of x+=Hy (for when there's su2 symmetry) SpinSquared.h Encapsulates the calculation of the Casimir operator S^2 from creation and anihilation operators. Works in conjunction with SpinSquaredHelper SpinSquaredHelper.h Helper to SpinSquared *) Classes to do sparse linear algebra. VerySparseMatrix.h A class to represent a sparse matrix in trivial format SparseVector.h A class to represent sparse vectors BlockMatrix.h A class to represent a block diagonal matrix CrsMatrix.h A class to represent a sparse matrix in Compressed Row Storage (CRS) *) Classes related to input and output (io) SimpleReader.h Parses the input file DiskStack.h A disk stack, similar to std::stack but stores in disk not in memory MemoryStack.h A memory stack, based on std::stack. It's the counterpart to DiskStack IoSimple.h This class handles Input/Output for the DMRG++ program in a simple way ParametersDmrgSolver.h Contains the parameters for the DmrgSolver class and implements functionality to read them from a file *) Misc. classes: Utils.h Misc. functions ProgressIndicator.h This class handles output to a progress indicator (usually the terminal) ProgramLimits.h Contains the maximum values that the program should not exceed. -------------------------------------------------------- PartialPsimag/ PSIMAG classes. Short description: Matrix.h A dense matrix class in C++ LAPACK.h LAPACK function wrappers for C++. BLAS.h BLAS function wrappers for C++. -------------------------------------------------------- TestSuite/ A test suite for the program. testsuite.pl the script that runs the testsuite.pl (see README for instructions on how to run it) testsuite.8 The man page for testsuite.pl man -l testsuite.8 or less testsuite.8 will give you the documentation. inputs/ Inputs for the testsuite. There are two types of files here: input*inp, as those produced by configure.pl, and model*spec files, which are the answers to configure.pl in each case. oracles/ Precomputed data, used by testsuite.pl to determine if the result of the tests is valid. -------------------------------------------------------- scripts/ countLines.pl perl countLines.pl will tell you how many effective lines of code there are in DMRG++ #EOF dmrgpp-6.02/ChangeLog.txt000066400000000000000000000720141414604301300153220ustar00rootroot000000000000002021-11-19 Version 6.02 Bug fixes * SVD is now normalized * checkThatQnsAreNotReallySorted has been disabled for SDHS (site-dependent Hilbert Spaces) * TargetingExpression fixes (Max Sroda) * observe: sign of fermionic correlations corrected so that i < j and j > i have opposite signs. * termGeometryReplacement bug fix (the bug did not affect any models, but see KitaevExtended below) New features * Restarting from real to complex is now possible * TargetingExpression complex scalar support * Targeting Chebyshev vectors: fix to correction (Alberto Nocera) * TargetingRixDynamics: applying two operators with product is now possible (Alberto N.) * TargetingCVEvoluion added (Alberto N.) * FindSymmetrySector= awesome predicated added (Pontus L.) * RecoverySave works with shrinkstacksondisk * SolverOptions=noClobber * FirstRitz= line added * wftstackondisk implemented (in order to decrease RAM) * observe: readOnDemand in SolverOptions= added (in order to decrease RAM) * OpOnSiteThreshold= added (in order to decrease RAM) Models * Operator identity available for all models (Max Sroda) * KitaevWithCharge implemented (Bradraj P.) * HubbardHolstein supports more interactions (Alberto N.) * FeAs: orbital dependence for interactions added * FeAs: AnistropyD= line added * HubbardOneBand: Magnetic field along x added * Entangler for Heisenberg Spin 1 now works * KitaevExtended uses termGeometryReplacement now * FermionSpinless WithDelta added (Bradraj P.) Refactoring * We have deleted more SU(2) related code TestSuite * KitaevGamma chain has inputs now * Ancilla Spin 1 inputs added * tests added for GeometryValueModifier= Scripts * quasiParticleWeightZ.pl added (Bradraj Pandey) * vonNeumann.pl support symmetrize by option * inSituVsOmega.pl added * matrixRawToAinur.pl added * procOmegas.pl works with Ainur now * hubbardEnergyInfiniteT.pl added * sDotSinKspace.pl added * nq.pl added * honeycomb.pl supports WithCharge * honeycomb.pl supports Ainur and can compute electrons (Pontus L.) 2021-04-22 Version 6.00 bug fixes: * DmrgSerializer: bug fix in write * CorrelationsSkeleton: bug fix when ket != bra user interface: * SolverOptions=correctionvectorimagonly added (Alberto Nocera) * SolverOptions=wftstacksondisk added, but cannot restart or observe if this features is on * InputCheck: Work in progress to define all Ainur variables * TSPOperatorMultiplier is now announced * TridiagOptions now understands printritz (Shi Feng) scripts: * ritz.pl script for processing Ritz eigenvalues (Shi Feng) * fourleg.pl for processing 2+2 ladders. observe: * observe: Printing for two-points now can output a number, vector, or matrix (Bradraj Pandey) * observe: ManyPointAction in separate file * OnePointCorrelations: keep legacy bugs to be consistent with other correlations * TwoPointCorrelations: actions implemented new models: * HeisenbergAncillaC spin = 1 work in progress * SpinOrbitalModel added (Nitin Kaushal) * SU(3) model added (Alberto N.) * KondoEx2: same as KondoEx but with four more connections (Jacek Herbrych) TestSuite: * ci 1610 for KondoEx (Jacek H.) * ci 1305: dynamics for spin orbit * ci 20 and 21: time evolution of the Heisenberg model * ci 61: observes (Alberto N.) Engine: * ModelBase: in debug mode now checks order of one site basis 2020-12-02 Version 5.76 * ScalingInputFeature: For FiniteLoops, for Target quantum numbers, for TSPSites * HeisenbergMix: new model: spin 1/2 on the border sites * HubbardHolstein supports OneSiteTruncation now * HeisenbergAncillaC: spin > 1/2 bug fix, but Entangler still wrong in paper and pencil * procOmegas: When undefined value for site, file is also printed for better debugging * procOmegas: supports missing P3 * ci: 4702-4706 HubbardHolstein one site trunc. * SDHS: two point observe supported (SDHS means site-dependent Hilbert spaces or models with different kinds of atoms) * SDHS: one point observations supported * SDHS: in-situ measurements supported * OneSiteTruncation in Engine * ModelBase::postCtor now reentrant * Model terms can now be cloned * Model Hilbert size now cached * FiniteLoop now a class proper and FiniteLoop.cpp deleted * Entangler.h deleted * Changes due to boost serialization headers deleted 2020-10-27 Version 5.74 User interface: * hd5 file not created when minimizeDisk is in SolverOptions * SolverOptions=h5dontPrint disables hd5 debugging messages in debug mode * operator -B -s site now prints more information about basis and operators, including names and dofs * operator -H now prints Hamiltonian terms Model Specific: * Kitaev has splus and sminus now (Shi Feng) * Heisenberg: operator maximal added (Pontus) * HolsteinThin: bug fix for operator n (Alberto) Scripts: * outSpaceToDos.pl: sort frequencies numerically (Pontus) * procOmegas.pl: only warn if TSPSite is not center (Alberto) * procOmegas.pl -c "" for use with manyOmegas C++ driver * ProcOmegas.h added for cincuenta * pgfPlot2Sum.pl added: adds two or more .pgfplots files * Pgfplot2max.pl added: For each k, prints the omega for which spectrum is maximal. * vonNeumann.pl to extract entropies from cout file (Shi Feng) Drivers: * ManyOmegas added, and MPI support added for it Engine work: * Trackable operators refactored * DmrgRunner.h * Statics cleared for cincuenta; DMRG++ is reentrant (but not yet for observe) TestSuite and rigs * kompile rig compiles cincuenta * tests 4 and 121 fixed 2020-07-31 Version 5.72 Interface changes: * observe warns if run didn't set first bit of last triplet. * libdmrgpp.a is a very light library that is now used by cincuenta Model Specific: * HubbardAncilla: na operator * tjOneOrbital was deleted: use TjMultiOrb with Orbitals=1 * Kondo symmetries (Thanks to Jacek H.) * Heisenberg: Aklt.h added New Features: * TargetingExpression (Thanks to Shi F. and Oscar A.) * Include input blob in Recovery files Scripts: * hd5ToTime.pl: gives real time of hd5 file * honeycomb.pl: armchair mode support periodicx * honeycomb.pl script: better interface * manyOmegas.pl: jobid no longer needed * script for Fourier space AND time * betterTimeObs.pl: sort times numerically (Thanks to Pontus) * pgfplot: Do not overwrite palette.tex or sample.tex * omegaCuts.pl script added * sumRule.pl script added for dynamics * sq.pl script added (static correlations in k-space) TestSuite * test 1955 fixed Awesome Predicates * test 5504 fixed for Chebyshev dynamics (Thanks to Alberto) 2020-03-13 Version 5.70 Bug fixes: * BatchedGemm: compilation update * CorrectionVectorAction with complex correction vector * TST: Extreme operator application * observe: Undef variable and tiny memory leak fixed * observe: fixed rightmost site (Thanks to Max) * observe 3-point bug fix (Thanks to Max) * procOmegas.pl: read time only if Cheby (Thanks to Pontus) Refactoring: * gemmR replaces GEMM everywhere (Thanks to Ed) GemmRnb= is available but disabled New features: * Compilation: addto basics available in psiTags now * Support changing TSPTau from one run to next (Thanks to Pontus) * observe: special operators use ! (Thanks to Jacek) * RecoverySave= awesome predicate now (Thanks to Pontus) * toolboxdmrg can take cout file as input * SolverOptions= addPidToOutputName is now available (Thanks to Joel) * ThreadsLevelTwo= now available for nested parallelism * outSpaceToDos.pl added (Thanks to Bradraj and Rahul) 2020-01-14 Version 5.68 Bug fixes: * SEVERE bug corrected in observe; see mailing list for details; in BlockOffDiag.h::toSparse (Thanks to Max, Jacek, Ed) * HubbardAncilla: c <---> cdagger * Recovery: modalStruct restart fix * Precision -p flag is now honored by all output (Thanks to Bradraj) Scripts * procOmegas will NOT do Fourier if -X is given to it. (Thanks to Rahul) TestSuite * 3511 is now shorter * postCi can compare complex matrices New features: * Custom operators can now be defined in input file; operators starting with _ are tracked * Cheby: can now correct vectors, and accepts ChebyshevCorrectVector= awesome predicate to control when to correct (Thanks to Alberto) * ChemicalH work, but not working yet (Alberto) * CorrectionVectorAction supports complex correction vector when useComplex is in use; we need to make sure this does not interfere with RIXS KrylovTime experimental feature... (Rahul, Alberto) New Models * GaugeSpin model to test ChemicalH features (not ready yet) Engine work * ModelLinks --> term.push modified API * OperatorsCache class added, and transposed operators in their own class * BasisWithOperators templated on Basis now. * ReducedOperators deleted * Apply Factors deleted, along with other SU(2) stuff * KroneckerDumper has been unhooked (is anyone using it?) 2019-12-09 Version 5.66 User facing * 3rd number of the finite loop triplet: only one bit of bit 1, bit 2, and bit 3 may be set * TSPApplyTo= input line to deal with Sectors and Excited in NGSTs. Engine changes * Changes by Ed due to changes in CrsMatrix regarding performance * Diagonalization: Quantum symmetry sector before excited level. * TargetingGroundState: The guess for diagonalization sums over all excited states. * Site-dependent Hilbert spaces (SDHS): only ground state and in-situ measurements for now. See HolsteinThin model. * ModelHelperLocal and HamiltonianConnection no longer depend on symmetry sector * Eigs of density matrix sorted only once (thanks to Alberto) New features and models: * HubbardAncilla supports hot mode * Braket actions for observe; only for 4-points for now * HolsteinThin to showcase site dependent Hilbert spaces (SDHS) Scripts * Work by Pontus on procOmegas for Excited * betterTimeObs.pl script by Bradraj TestSuite * 5800.ain with complex numbers and Ainur * manyOmegas supports Ainur inputs * procOmegas supports Ainur inputs 2019-11-08 Version 5.64 * MultiExcited implemented but changes are needed * Multiple sectors implemented, TargetingMultiQ no longer needed * Bug fix for Ancilla (bug introduced in March 2019) * Graphene model implemented * SolverOptions now a class 2019-09-23 Version 5.62 User facing: * -S command line option overrides Threads= * PrintHamiltonianAverage= predicate awesome * SaveDensityMatrixEigenvalues= predicate awesome Scripts: * OmegaUtils: asks if repeated keys found * honeycomb lattice scripts performance: * Basis::setToProduct parallelized features: * Model=Heisenberg supports magnetic field in x direction 2019-08-13 Version 5.60 bug fix: * reducedOperator is now thread safe * Operators.h: There was a trailing / in hdf5 file * Ainur: complex matrices need more work * AUTHORS file added performance: * NotReallySort.h now gone, and algorithm should perform way better * ArrayOfMatStruct allocates only if number of non-zeroes is greater than zero * externalProduct now permutes rows and cols on-the-fly * OperatorStorage.h : shim for CrsMatrix.h for now, but will make operator storage more performant in the future scripts: * OmegaUtils: support -N or non-negative intensities only new features * Entanglers: exact energy written to cout now * t-J anisotropic model added (Nirav) * added SolverOptions noPrintHamiltonianAverage for ancilla evolution runs 2019-06-25 Version 5.58 Scripts: * procOmegas writes out.space * OmegaUtils supports open boundary condition * fromOutSpace performs Fourier transform from out.space New features: * TargetingMultQ added * KondoEx added * RestartStruct takes new input lines * RecoverySave and Load supported only by loop * ./observe -f data.hd5 can now be used instead of ./observe -f input.inp 2019-05-20 Version 5.56 Scripts: * correlations.pl6 added * delta delta read and write scripts * pgfplot.pl: various improvements * procOmegas: supports Chebyshev User Interface: * OuputFile= can now be omitted from input Bug fixes: * RashbaSOC: bug fixes New Features * Chebyshev non-RIXS now works * RixsDynamics: supports Chebyshev (more testing needed) Refactor: * OneOperatorSpec moved to PsimagLite so Lanczos++ can use it * KrylovHelper added * Wft Helper added TestSuite: * ci: 4804 and 4808 for RashbaSOC * ci: 3510-3511 and 3530-3532 for Chebyshev non-RIXS * ci and postCi now can verify out.spectrum files 2019-04-02 Version 5.54 Scripts: * fromOutSpectrum.pl: redoes *pgfplots from out.spectrum * spectrumSum.pl to sum out.spectrum files User Interface: * Params for Lanczos for each loop * MaxMatrixRankStored is now suggested when Lanczos fails * ChebyshevTransform as a vector of c and d * OperatorsChangeAll option now at runtime New Features: * HubbardOneBandRashbaSOC implemented * observe for NGSTs: observe p-vectors if saveoption bit set * multi-site expressions (work in progress) TestSuite * test 4800 for HubbardOneBandRashbaSOC * test 150 for testing input formats * test 130 for multi-site expressions Refactoring * isCanonical is now a model property * Targeting printNormsAndWeights now in TargetingCommon * Checkpoint no longer depends on Targeting * TargetingSelector * enum class in ProgramGlobals replaces enum * ObserverHelper: pointer to CoO no longer a member, but passed to member functions instead * ObserverHelper: bra and ket no longer members, but passed to member functions instead 2019-03-07 Version 5.52 Compilation: * DMRG++ compiles on MacOS Refactoring: * Target selection now in TargetSelector * procOmegas: no longer writes .space and .sq files Performance: * WftAccelBlocks improved by Ed * BlockDiagWf improved by Ed New Features: * pgfplot.pl and TeX templates added * procOmegas: cheby support * Multi-site Expressions In-Situ: work started * Intent input line: work started TestSuite: * ci: prefer Ainur inputs * inp2ain to help convert to Ainur inputs 2019-01-31 Version 5.50 Bug fixes: * Kitaev: bug fix when using gammas * OperatorSpec: bug fixes for bracketed sites User interface: * openblas used by default * observe: onepoint no longer supported * bare operator-specs no longer supported (except for RixsDynamic) New features: * CorrectionVector can restart from a previous CorrectionVector run * TargetingRixDynamic: cocoon for Cheby (contributed by Alberto) Refactoring: * TargetingCommon: legacy cocoons deleted * PreOperator classes deleted * Stages of Targeting now in StageEnum 2019-01-22 Version 5.48 New features: * TargetingChebyshev: needs cocoon * Model KitaevWithGammas * InfiniteLoopeptStates= can be used for restarts * with empty op-spec now accepted * coutAnalysis: prints max and average of each item Engine: * TargeParams* clean up * Targeting* clean up 2019-01-03 Version 5.46 Compilation: * C++11 required Model Interface * LinkProduct* removal and addition of fillModelLinks with its documentation Engine * Operator has fermionOrBoson member instead of fermionSign TestSuite: * ci accepts -e regex * sanityRig started 2018-12-19 Version 5.44 Developer's interface: * Changes to Model interface; see the manual for details User visible: * Hubbard and related models: sz has correct 0.5 factor now New features: * ChebyshevTargeting added but not yet ready (Alberto) Documentation: * Operator Expressions now documented in manual (only canonical ones supported for now) Build system: * boost-devel is now a dependency. Only header files are used; the boost runtime(s) aren't used 2018-12-10 Version 5.42 Bug fixes: * WARNs about unsupported movements Features * Echoes input file in base64 and cmd line * ModelHeisenberg: anisotropyE added * Model instrospection via operator executable Docs * documentation updated Scripts * getInSitu.pl script added * OmegaUtils: prints also pgfplots Build System * configure.pl: can use default config via env 2018-10-25 Version 5.40 Bug fixes: * minimizeDisk is incompatible with RecoverySave (reported by Wael) Performance: * CorrectionVectorSkeleton: better calR (contributed by Ed) * coutAnalysis improvements * timing matrixVectorKron New defaults: * KrylovNoAbridge SolverOptions added (KrylovAbridge now the default) New features: * shinkStacksOnDisk SolverOptions feature to reduce RAM usage (requested by Nivav) * deltaEnergies script added to help convergence studies 2018-09-27 Version 5.38 Bug fixes: * Recovery: bug fixed. Recovery granularity is N-2 * ModelHubbardMultiBand needed sorting of one-site basis Performance: * ArrayOfMatStruct performance work by Ed * NotReallySort with unordered_map * NotReallySort with on-the-fly for tensor product of Qns * Using Array instead of std::vector in some cases to avoid fill overhead * Basis::setToProduct performance work New features: * Git revision printed if available * coutAnalysis corrected improved 2018-09-11 Version 5.36 Bug fixes: * TargetingMetts bug fix Performance * Qn::operator== improved * KronUseLowerPart now default except for BatchedGemm this should decrease RAM usage Refactor: * WFT uses directly the stacks * NotReallySort: work started to parallelize it New features: * Now checks restart consistency for useComplex * ProgressInUseconds SolverOptions 2018-08-30 Version 5.34 Bug fixes: * bug fix for 1801 * bug fix for HubbardHolsteinSSH * bug fix for METTS * discovered bug in restart for signs which was fixed in PsimagLite 2.34 Refactor: * WFT: in preparation for SVD use * Truncation: in preparation for SVD use in WFT New features * Option -S for both dmrg and observe TestSuite: * postCi compares RAM usage 2018-08-21 Version 5.32 Bug fixes: * HubbardHolsteinSSH bug fix * Kondo bug fix * AdjustQuantumNumbers bug fix Refactor: * Geometry AdditionalData simplified * Hamiltonian Connections restricted to i < j New features: * observe can measure multiple data sets * Engine supports fermion models not conserving Ne TestSuite: * postCi: default gold directory * ci 113: like 2 but measures 2 data sets 2018-08-09 Version 5.30 Bug fixes: * FeAsJzSymmetry: matrix resize fixed * FeAs model adjustQns fixed (Nitin) * Truncation: cout printing fixed (Nirav) * Qn.h saves modal at least once New features: * option KronUseLowerPart added (Ed) * Model=KitaevExtended added (Alberto) * option saveDensityMatrixEigenvalues added (Nirav) New defaults: * option useSvd deleted, option truncationNoSvd added Build system: * ConfigBase.psiTag: can override default compiler * Compiles on a MAC TestSuite: * ci: fixed 5800 and 5810 data file 2018-07-31 Version 5.28 * modulo symmetry or k-symmetry now supported in Engine * TargetExtra now a vector * HubbardModelMultiBand uses modulo symmetry and simulates a ladder as a chain with orbitals * Kondo Model added * configure.pl uses PsiTag * DmrgSerializer saves transform as a BlockDiagonalMatrix * DmrgSolver saves electrons of one site * observe: fixed fermionic operators when growing environ * observe: performance improved * Term labels can be added to input file. They must be in order with Term0= as the first one, Term1= as the second one, etc. * ci: 112 added like 2 but observe when growing environ * ci: 1600-1601 trivial tests for Kondo * postCi: CollectBrakets improved 2018-07-24 Version 5.26 * ci/postci: -su2 instead of -nosu2 * ci: for Holstein and HolsteinSSH * Changes due to changes to PsimagLite indexOrMinusOne and Matrix interface * build system: improvements due to PsiTag improvements * ModelHelper now inside HamiltonianConnection * RIXS changes by Alberto * HubbardHolstein model added by Alberto * LinkProductStruct now called CachedHamiltoniansLinks * Qn improvements, no more full sort, only equal/unequal operator between Qn objects * Model Interface changed, basis of one-site no longer exposed basis of one site no longer needs ordering But backward compatibility order preserved for most models * LinkProduct* interface changed with virtual base LinkProductBase 2018-07-12 Version 5.24 * ci: 6005 for Kitaev * postCi: CollectBrakets implemented * new build system * KompileRig updated * fixLegacyBugs SolverOptions added * MODEL written to data file by IoNg * Chemicals: work started * LinkProductBase virtual base * refactoring HamiltonianConnection and added ParallelHamiltonianConnection 2018-06-28 Version 5.22 * VectorWithOffsets reads only non-zero sectors * IoSimple no longer used in DMRG++ * operator driver now prints JMVALUES 2 jtilde mtilde * ci: 5802 added (JzSymmetry) * ci: bug fixes * kompile rig to compile with various setups * DiskStack now has better implementation * recovery feature implemented but needs tests and docs * coutAnalysis counts number of times each item appears 2018-06-19 Version 5.20 * ci: ./dmrg -f input.inp 'n$.txt' feature * ci: collect brakets implemented * ci: postCi fixes * Hybrid space-momentum model added; but not k-symmetry yet * Basis: qns indexed by partition not state * Basis: electronsOld only by sign now * Qn or QnType traps all quantum number logic * Model interface changed to accomodate new quantum number logic 2018-05-21 Version 5.18 * IoNg works except for Recovery * ci: RIXS tests added * ci: infrastructure changed * USE_IO_NG enabled by default * Kitaev: Magnetic field in x,y,z * mtune and march compiler switches * hdf5 -L flag for Ubuntu * addHamiltonianConnection acceleration in ModelCommon * Starting to use PsimagLite::Profiling 2018-05-08 Version 5.16 * IoNg works with observe * JMVALUES and AngularFactor no longer read unless using SU(2) * changes due to PsimagLite's Parallelizer API changes * DenseSparseThreshold= line used also inside KronUtil * coutAnalysis with cutoff=0 by default * VerySparseMatrix updated * ModelCommon prints time for addHamiltonianConnection * IoNg can write NGSTs 2018-04-24 Version 5.14 * IoNg: OutFile= will be rootname only * IoNg: can restart GS with WFT * Correction Vector with useComplex now possible * advanceOnlyAtBorder is now the default say advanceUnrestricted not to restrict advance at borders * ci: entangles with MatrixVectorOnTheFly * ci: JMVALUES updated format * Kitaev Model: corrected connection to 0.5 * no more print() for targets * tar support and related options deleted * compiles with clang++ 2018-04-16 Version 5.12 * SolverOptions diskstacks and wftStacksInDisk deleted * Targetting is now Targeting * manual updated * IoNg: work in progress 2018-04-06 Version 5.10 * Kitaev model implemented * Kitaev.tex and input6000.inp * IoNg serialization work in progress * compilation with float * MatrixVectorKron is the default now * Compiler options printed to cout * When Lanczos fails prints why * -Werror no longer a default But please keep reporting compilation warnings * bug fix for complex hoppings This only affected useComplex for geometry terms with dofs=2 (spin up and spin down with 1 orbital) 2018-03-22 Version 5.08 * i/o API changes * nFromAkw.pl improvements * VerySparseMatrix improvements * Anisotropy in Hubbard model added (optional) * Needed MaxMatrixRankStored now printed on failure * omega scripts for open boundary conditions * tst fix: border sites were printed twice * correction targeting: bug fix * wftInPatches is switched to wftInBlocks when twositedmrg is used 2018-02-27 Version 5.06 * On February 1st, 2018 a massive overuse of RAM was introduced. This has been fixed now. * Basis.h : small memory improvements * Changes due to CRS improvements * added coutAnalysis.pl script to analyze output to .cout produced by DMRG++ * SU(2) no longer built by default, making compilation faster * DMRG++ now warns if TruncationTolerance is used without twositedmrg * Various improvements to Observables by Nirav 2018-02-20 Version 5.04 * jzSymmetry checks * SU(2) factors allocated only when using SU(2) * IoNg work started 2018-02-08 Version 5.02 * ci: added inputs for papers 58, 62, 66 and 68 * wftInBlocks now works for all targets * wftInPatches acceleration now works for onesitedmrg * BatchedGemm now needs pluginSc * faster changeOfBasis but older changeOfBasis still used when JzSymmetry=1 * KrylovAbridge option added, Abridgement printed * BatchedGemmPluginSc uses dense or sparse 2018-01-25 Version 5.00 * BatchedGemm is ready * observe 4-point at borders corrected * nFromAkw script added * Renyi entropy added * correction vector: spurious tridiag deleted * Lanczos reortho * use lib "." in scripts * VectorWithffset(s) load/save fixes * WFT check due to symmetry sector leaks * 2 regression fixes * wftInPatches now disallowed 2018-01-03 Version 4.70 * InitKronBase: threshold bug fix * BatchedGemm: PLUGIN_SC implementation almost done * BatchedGemm: mainstream implementation needs more work * Scripts for dynamics added and updated * Border 4-point marked buggy in some cases 2017-12-20 Version 4.68 * BatchedGemm option added Needs PluginSc, work in progress * wftInBlocks only for ground state * WFT for twositedmrg is now parallel * RIXS patches 2017-12-12 Version 4.66 * Wft files in Engine/Wft directory * wftInBlocks: only with twositedmrg, and still doesn't work with NGSTs * baseStack files are now deleted on normal completion * Interface to PLUGIN_SC: work in progress * toolboxdmrg supports -o option 2017-11-30 Version 4.64 * observe compilation fix * TargetingCorrection, crash fixed * ci: EnergyAncilla * ci: test 1801 fixed * VectorWithOffsets: bug fix for load/save * WFT: Acceleration with temporary possible 2017-11-27 Version 4.62 - Bug fixes * bug fix in minimize read/write - Features * initKronBase/Hamiltonian/Wft * observe supports -o * RIXS static and dynamic * WftOptions struct * WFT in patches: tons of work; still not done - Clean up * TargetingCorrectionVector uses CorrectionVectorSkeleton * AFTER/BEFORE_TRANSFORM minimized usage - TestSuite * ci: test 467 fixed * ci supports -o * ci.pl: Now copies executables correctly 2017-11-09 Version 4.60 * IMPORTANT: Compilation fix for new gcc * Ainur related change * postCi fix * RIXS Statics and Dynamics improvements RIXS is still a feature in development * VectorWithOffset(s) stores qn * TSPUseQns no longer needed, easier to guess symmetry sector for WFT * DONT_MIX deleted 2017-09-20 Version 4.58 * rixs static bug fixes * diskstacks option to store stacks to disk and use less RAM * Ainur related changes and added samples 2017-09-05 Version 4.56 * bug fix: braket names for NGSTs * tests 4600 and 4601 added 2017-08-28 Version 4.54 * Targeting common: printing fixed * dmrg driver accepts -o solver_options * operator driver accepts -e canonical_expression * observe: 2-points fixed for complex numbers * WFT transform in block diagonal form * correlationsSymmetry.pl added to check symmetry of correlation matrix * continuous integration (ci) improvements * fixed assert in encodeQuantumNumber * rows() and cols() for most matrix types 2017-08-07 Version 4.52 * Kron optimizations * useSvd should work now * operator driver bug fixed * TestSuite: improvements to ci and postCi * TestSuite: new tests for papers * KMH model regression is marked but not fixed * toolboxdmrg action analysis * BlockDiagonalMatrix improvements * $ character in operator specs * HeisenbergAnisotropic implemented * TargetingInSitu added * Feature Proposal: Tracking Unnatural Operators * manual: Braket specifications * Operator Expressions: canonical expr. implemented * Preparation for WFT in patches * Ainur input system: very early usage * enums become named * Rixs is ready for tests 2017-06-15 Version 4.50 * Standalone input label DenseSparseThreshold * DensityMatrix: Returns BlockDiagonalMatrix * KronUtil: more function in same compilation unit to improve inlining * MatrixDenseOrSparse.h now in KronUtil * linker time optimizations for gcc 2017-06-08 Version 4.48 * DenseSparseThreshold label * useSvd supports vectorwithoffsets 2017-05-25 Version 4.46 * useSvd (but not yet for vectorWithOffsets or more than 1 target) * useSvd pthreads * Lanczos: saves LanczosVectors by the default Internally lotaMemory=true is the default prefix + NoSaveLanczosVectors=1 should be used to have Lanczos not save vectors 2017-05-18 Version 4.44 * bug fix in printing * changes in preparation for useSvd option * Kron: KronNoLoadBalance SolverOptions added * PTHREAD_ASSIGN_AFFINITIES removed, now a runtime option * KronUtil: supports useComplex 2017-05-11 Version 4.42 * extendedPrint SolverOptions added * SolverOptions useSvd added, but not working yet * SuperExtendedHubbard1Orb: includes spin orbit * configure.pl does not generate sources by default anymore. All DmrgDriver*.cpp files are now commited 2017-05-04 Version 4.40 * Kron: - bug fix for fermion sign - changes to KronUtil - KronUtil Makefile created by configure.pl - does not support SU(2) - weights for load balancing * MatrixDenseOrSparse: 50% cutoff * PsiApp used by dmrg and observe drivers * observe: compilation in parallel * option printmatrix * ci: -nosu2 option added 2017-04-24 Version 4.38 * observe: - bug fix when - 5 or more points supported with fixed sites * postCi: detects energy changes, no files * ci: -S option allows to run on command line or batch * Makefile: -lblas -llapack * announce when ifdef OPERATORS_CHANGE_ALL * Kron and KronUtil: - additional checks - bug fix in offsets - bug fix for in and out vectors - bug fix in estimate_kron_cost dmrgpp-6.02/Doxyfile000066400000000000000000002121341414604301300144370ustar00rootroot00000000000000# Doxyfile 1.7.3 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = DMRGPP # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description for a project that appears at the top of each page and should give viewer a quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify an logo or icon that is # included in the documentation. The maximum height of the logo should not # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penalty. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will roughly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper type resolution of all parameters of a function it will reject a # match between the prototype and the implementation of a member function even if there is only one candidate or it is obvious which candidate to choose by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen # will still accept a match between prototype and implementation in such cases. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = NO # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = NO # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. The create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = DoxygenLayout.xml #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = README.md doc/manual1.md doc/signals.md src/Engine src/Models ../PsimagLite/src/Geometry # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = hide_* # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = . # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) # and it is also possible to disable source filtering for a specific pattern # using *.ext= (so without naming a filter). This option only has effect when # FILTER_SOURCE_FILES is enabled. FILTER_SOURCE_PATTERNS = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = NO # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the stylesheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = NO # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = YES # This tag can be used to set the number of enum values (range [0,1..20]) # that doxygen will group on one line in the generated HTML documentation. # Note that a value of 0 will completely suppress the enum values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = NO # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the mathjax.org site, so you can quickly see the result without installing # MathJax, but it is strongly recommended to install a local copy of MathJax # before deployment. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvantages are that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO LATEX_HIDE_INDICES = YES #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition that overrules the definition found in the source code. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all references to function-like macros # that are alone on a line, have an all uppercase name, and do not end with a # semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will write a font called Helvetica to the output # directory and reference it in all dot files that doxygen generates. # When you want a differently looking font you can specify the font name # using DOT_FONTNAME. You need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = Helvetica # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = NO # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = NO # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, svg, gif or svg. # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES dmrgpp-6.02/INDENTATION000066400000000000000000000101411414604301300144220ustar00rootroot00000000000000DMRG++ is indented using "hard" tabs and Kernighan and Ritchie indentation. This is the indentation style used by the Linux Kernel. Note that the tab character is octal 011, decimal 9, hex. 09, or '\t' (horizontal tab). You can represent tabs with any number of spaces you want (I use 8 by the way). Regardless, a tab is saved to disk as a single character: hex. 09, and *not* as 8 spaces. I repeat the same thing more formally now: DMRG++ is indented following the Linux coding style(*), with the following exceptions: 1. I do not impose a limit of 80 columns. This is unintended, future versions of DMRG++ will not allow this exception. 2. Exceptions due to the Linux style applying to C, but DMRG++ is written in C++: 2.1. Classes are indented like this: class A { }; That is, they are indented as for loops and not as functions. This is because classes can be nested, so this is the most accurate way of following K&R. 2.2. Constructors and destructors are indented as functions. This is kind of obvious but I mention it because 'indent' gets confused if you try using, let's say indent -kr -i8 -ln 200 myFile.h with constructors and destructors. 2.3. 'Private:', 'Protected:' and 'Public:' labels. In C this would be just labels for goto statements, of course, and this is the way that 'indent' interprets them. In DMRG++ I have not followed a consistent indentation of these labels. This is unintended, and in the future I will follow Linux conventions for these labels. ---------------------------------------------------------------------------------------- (*) Formally specified in many places, see, for example, a current version of 'man indent' and search for Linux coding style. In 'indent' parlance, it's: -nbad -bap -nbc -bbo -hnl -br -brs -c33 -cd33 -ncdb -ce -ci4 -cli0 -d0 -di1 -nfc1 -i8 -ip0 -l80 -lp -npcs -nprs -npsl -sai -saf -saw -ncs -nsc -sob -nfca -cp33 -ss -ts8 -il1 I do not follow '-l80', and the labels switches, such as -il1, although I plan to, in the future. Regardless, 'indent' currently does not indent C++ files correctly. For example, it gets confused with constructors and destructors. ---------------------------------------------------------------------------------------- -nbad Do not force blank lines after declarations. -bap Forces a blank line after every procedure body. -nbc Do not force newlines after commas in declarations. -bbo Prefer to break long lines before boolean operators. -hnl Prefer to break long lines at the position of newlines in the input. -br Put braces on line with if, etc. -brs Put braces on struct declaration line. -c33 Put comments to the right of code in column 33. -cd33 Put comments to the right of the declarations in column 33. -ncdb Do not put comment delimiters on blank lines. -ce Cuddle else and preceding `}. -ci4 Continuation indent of 4 spaces. -cli0 Case label indent of 0 spaces (do not indent case labels). -d0 Set indentation of comments not to the right of code to 0 spaces. (i.e., do not unindent comments) -di1 Put variables in column 1. (space between type and variable) -nfc1 Do not format comments in the first column as normal. -i8 Set indentation level to 8 spaces. Used in conjunction with -ts8 -ip0 (does not apply to C++) -l80 Set maximum line length for non-comment lines to 80. -lp Line up continued lines at parentheses. -npcs Do not put space after the function in function calls. -nprs Do not put a space after every ( and before every ). -npsl Put the type of a procedure on the same line as its name. -sai Put a space after each if. -saf Put a space after each for. -saw Put a space after each while. -ncs Do not put a space after cast operators. -nsc Do not put the `* character at the left of comments. -sob Swallow optional blank lines. -nfca Do not format any comments. -cp33 Put comments to the right of #else and #endif statements in column 33 -ss On one-line for and while statements, force a blank before the semicolon. -ts8 Set tab size to 8 spaces. -il1 Set offset for labels to column 1. ---------------------------------------------------------------------------------------- dmrgpp-6.02/INSTALL000066400000000000000000000021561414604301300137630ustar00rootroot00000000000000 Synopsis: To Build DMRG++: cd src perl configure.pl (please answer questions regarding model, etc) make To Run DMRG++: ./dmrg input.inp Required Software: 1) GNU C++ 2) The LAPACK library. This library is available for most platforms. The configure.pl script will ask for the LDFLAGS variable to pass to the compiler/linker. If the linux platform was chosen the default/suggested LDFLAGS will include -llapack. If the osx platform was chosen the default/suggested LDFLAGS will include -framework Accelerate. For other platforms the appropriate linker flags must be given. More information on LAPACK is here: http://netlib.org/lapack/ 3)PsimagLite. This is here \url{https://github.com/g1257/PsimagLite/}. You can do \verb=git clone https://github.com/g1257/PsimagLite.git= in a separate directory outside of the DMRG++ distribution. \verb=configure.pl= will ask you where you put it. 4) The GNU Scientific Library is usually needed but the dependencies to it can be removed easily (see doc/manual.pdf) Optional Software: 3) make or gmake (only needed to use the Makefile) 4) perl (only needed to run the configure.pl script) dmrgpp-6.02/LICENSE000066400000000000000000000051631414604301300137400ustar00rootroot00000000000000Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 3] [by G.A., Oak Ridge National Laboratory] [by Ed D'Azevedo, Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* dmrgpp-6.02/Obsolete/000077500000000000000000000000001414604301300145025ustar00rootroot00000000000000dmrgpp-6.02/Obsolete/ReflectionBasis.h000066400000000000000000000373431414604301300177410ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ReflectionBasis * * */ #ifndef REFLECTION_BASIS_H #define REFLECTION_BASIS_H #include "PackIndices.h" // in PsimagLite #include "Matrix.h" #include "ProgressIndicator.h" #include "LAPACK.h" #include "Sort.h" #include "ReflectionColor.h" namespace Dmrg { template class ReflectionBasis { typedef ReflectionColor ReflectionColorOrDomType; typedef PsimagLite::PackIndices PackIndicesType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorType; typedef SparseVector SparseVectorType; enum {AVAILABLE,NOT_AVAILABLE,COLOR}; enum {GREATER_THAN_ZERO,LESS_THAN_ZERO}; public: ReflectionBasis(const SparseMatrixType& reflection,bool idebug) : progress_("ReflectionBasis",0),reflection_(reflection),idebug_(idebug) { ReflectionColorOrDomType colorOrDom(reflection_,idebug); setIsolated(colorOrDom.isolated()); addColor(colorOrDom.ipcolor()); typename PsimagLite::Vector::Type iavail; prepareAvailable(iavail,colorOrDom.ipcolor(),colorOrDom.isolated()); typename PsimagLite::Vector::Type ip(iavail.size()); permute(iavail,ip); choleskyFactor(iavail); if (!idebug_) return; printFullMatrix(reflection,"reflection"); std::cout<<"ipPos "; for (SizeType i=0;i0) ? R1_ : Rm_; } const typename PsimagLite::Vector::Type& ipPosOrNeg(const RealType& sector) const { return (sector>0) ? ipPos_ : ipNeg_; } //! Invert triangular matrix R into Rinverse //! Hack due to not having rectangular CRS implemented void inverseTriangular(SparseMatrixType& R1Inverse, const SparseMatrixType& R1, const RealType& sector) const { SparseMatrixType R1t; transposeConjugate(R1t,R1); typename PsimagLite::Vector::Type r(R1t.rank()); SparseMatrixType tmpMatrix(r.size(),r.size()); SizeType counter=0; for (SizeType i=0;i::Type rhs(R1t.rank(),0); rhs[i]=1; linearSolverTriangular(r,R1t,rhs); for (SizeType i=0;i0) ? ipPos_.size() : ipNeg_.size())); tmpMatrix.pushCol(i); tmpMatrix.pushValue(r[i]); counter++; } } tmpMatrix.setRow(R1.rank(),counter); tmpMatrix.checkValidity(); transposeConjugate(R1Inverse,tmpMatrix); #ifndef NDEBUG // check SparseMatrixType tmpMatrix2; multiply(tmpMatrix2,R1,R1Inverse); bool b = isTheIdentity(tmpMatrix2); if (b) return; printFullMatrix(R1,"R1"); printFullMatrix(R1Inverse,"R1Inverse"); printFullMatrix(tmpMatrix2,"tmpMatrix2"); assert(b); #endif } const SparseMatrixType reflection() const { return reflection_; } private: void prepareAvailable(typename PsimagLite::Vector::Type& iavail, const typename PsimagLite::Vector::Type& ipcolor, const typename PsimagLite::Vector::Type& ipIsolated) const { typename PsimagLite::Vector::Type tmp(reflection_.rank(),1); for (SizeType i=0;i0) iavail.push_back(i); } void addColor(const typename PsimagLite::Vector::Type& ipcolor) { for (SizeType i=0;i::Type& ipIsolated) { if (ipIsolated.size()==0) return; typename PsimagLite::Vector::Type dd(reflection_.rank()); setDiagonal(dd,reflection_); findPermuted(ipPos_,dd,ipIsolated,GREATER_THAN_ZERO); findPermuted(ipNeg_,dd,ipIsolated,LESS_THAN_ZERO); } void setDiagonal(typename PsimagLite::Vector::Type& dd,const SparseMatrixType& m) const { for (SizeType i=0;i::Type& dr, const RealType& sector) const { const typename PsimagLite::Vector::Type& ipPosOrNeg = (sector>0) ? ipPos_ : ipNeg_; R1.resize(ipPosOrNeg.size()); SizeType counter = 0; for (SizeType i=0;i::Type& x, const typename PsimagLite::Vector::Type& dd, const typename PsimagLite::Vector::Type& perm, SizeType lessOrGreater) { for (SizeType i=0;i0.0); } else { return (a<0.0); } } void permute(typename PsimagLite::Vector::Type& iavail,const typename PsimagLite::Vector::Type& ip) const { for (SizeType i=0;i::Type& iavail) { typename PsimagLite::Vector::Type dr(reflection_.rank()); setDiagonal(dr,reflection_); setDiagonal(R1_,dr,1.0); setDiagonal(Rm_,dr,-1.0); PsimagLite::OstringStream msg2; msg2<<"needs extra churn, iavail="<::Type& r, const ComplexOrRealType& addedValue, const RealType& sector) const { SizeType n2 = (sector>0) ? ipPos_.size() : ipNeg_.size(); SizeType n = R1.rank(); SparseMatrixType R1new(n+1,n+1); SizeType counter = 0; for (SizeType i=0;i::Type& r, const SparseMatrixType& R1t, const typename PsimagLite::Vector::Type& rhs) const { for(SizeType irow=0; irow < R1t.rank(); irow++) { ComplexOrRealType dsum = 0.0; ComplexOrRealType diag = 0.0; for(int k=R1t.getRowPtr(irow); k < R1t.getRowPtr(irow+1); k++) { SizeType j = R1t.getCol(k); ComplexOrRealType lij = R1t.getValue(k); if (j==irow) { // treat diagonal different diag = lij; // save diagonal in diag continue; // and don't sum it } dsum += lij * r[j]; }; assert(!isAlmostZero(diag,1e-12)); r[irow] = (rhs[irow] - dsum) / diag; //<<<< you might store the inverse if you wish to avoid costly divisions }; } // void setT1w(typename PsimagLite::Vector::Type& T1w, // const typename PsimagLite::Vector::Type& ipPosOrNeg, // SizeType j, // const RealType& sector) const // { // SizeType counter = 0; // T1w.resize() // for (SizeType i=0;i::Type& T1w, // const typename PsimagLite::Vector::Type& ipPosOrNeg, // const typename PsimagLite::Vector::Type& w, // const RealType& sector) const // { // for (SizeType ii=0;ii=T1w.size()) throw PsimagLite::RuntimeError("setT1w\n"); // //if (col==i) val += sector; // val *= sector; // T1w[col] += val*w[ii]; // } // T1w[i] += w[ii]; // } // } void setT1w(typename PsimagLite::Vector::Type& T1w, const typename PsimagLite::Vector::Type& ipPosOrNeg, const typename PsimagLite::Vector::Type& w, const RealType& sector, const SparseMatrixType& reflectionT) const { SizeType n = reflectionT.rank(); typename PsimagLite::Vector::Type inverseP(n,-1); for (SizeType ii=0;ii::Type& w,const RealType& sector,SizeType j,const SparseMatrixType& reflectionT) const { for (int k = reflectionT.getRowPtr(j);k::Type& ipIsolated, typename PsimagLite::Vector::Type& ipConnected, const SparseMatrixType& reflection_) const { for (SizeType i=0;i::Type ipPos_,ipNeg_; SparseMatrixType R1_,Rm_; }; // class ReflectionBasis } // namespace Dmrg /*@}*/ #endif // REFLECTION_BASIS_H dmrgpp-6.02/Obsolete/ReflectionColor.h000066400000000000000000000250271414604301300177520ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ReflectionColor * * Critical problems: * * - getting a l.i. set in an efficient way * - support for fermionic reflections * * Low priority work that needs to be done: * * - support for bases that change from site to site * */ #ifndef REFLECTION_COLOR_H #define REFLECTION_COLOR_H #include "PackIndices.h" // in PsimagLite #include "Matrix.h" #include "ProgressIndicator.h" #include "LAPACK.h" #include "Sort.h" #include "SparseVector.h" namespace Dmrg { // FIXME: MOVE ELSEWHERE: template bool isAlmostZero(const RealType& x,RealType eps = 1e-20) { return (fabs(x) bool isAlmostZero(const std::complex& x,RealType eps = 1e-20) { return (fabs(real(x)*real(x)+imag(x)*imag(x)) class ReflectionColor { typedef PsimagLite::PackIndices PackIndicesType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorType; typedef SparseVector SparseVectorType; enum {AVAILABLE,NOT_AVAILABLE,COLOR}; public: ReflectionColor(const SparseMatrixType& reflection,bool idebug) : reflection_(reflection),idebug_(idebug) { // printFullMatrix(reflection,"reflection"); findIsolated(); printInfo(); // std::cerr<<"Isolated nodes="<::Type& ipcolor() const { return ipcolor_; } const typename PsimagLite::Vector::Type& isolated() const { return ipIsolated_; } private: void printInfo() const { if (!idebug_) return; std::cout<<"ipIsolated "; for (SizeType i=0;i::Type ilist; findWithLabel(ilist,ilabel_,icolor); std::cout<<"color="<::Type& ipConnected) const { A.resize(ipConnected.size()); SizeType counter=0; typename PsimagLite::Vector::Type ipConnectedInverse(reflection_.rank(),-1); for (SizeType i=0;i::Type ilist; RealType eps = 1e-3; //while (any( ilabel == unlabeled)) for (SizeType ii=0;ii= maxsize) break; SizeType ni = ilist[i]; if (ilabel_[ni] == AVAILABLE) { ilabel_[ni] = icolor; ifound++; // -------------- // mark neighbors // -------------- typename PsimagLite::Vector::Type jlist; findConnected(jlist,ni,A,eps); // jlist = find( A(ni,:) ); for (SizeType j=0;j= 1) { // ilabel(ilist) = unlabeled; // } } return ncolor; } void findConnected(typename PsimagLite::Vector::Type& jlist, SizeType ni, const SparseMatrixType& A, const RealType& eps) const { bool hasDiagonal = false; for (int k=A.getRowPtr(ni);k::Type& ilabel,SizeType ncolor) const { // ------------ // RealType check // ------------ typename PsimagLite::Vector::Type ilist; findWithLabel(ilist,ilabel,ncolor); // isok = max( ilabel == ncolor); SizeType isok = *std::max(ilist.begin(),ilist.end()); if (isok==0) { PsimagLite::String s = "ncolor " + ttos(ncolor) + " max(ilabel) " + ttos(isok) + "\n"; //throw PsimagLite::RuntimeError(s.c_str()); } } void findWithLabel(typename PsimagLite::Vector::Type& ilist, const typename PsimagLite::Vector::Type& ilabel, SizeType icolor) const { for (SizeType i=0;i::Type& ilabel, // SizeType firstColor, // SizeType ncolor) // { // // find size: // typename PsimagLite::Vector::Type ilist; // SizeType ip = 0; // iperm_.resize(reflection_.rank()); // for (SizeType icolor=firstColor;icolor<=ncolor;icolor++) { // // ilist = find( ilabel == icolor); // ilist.clear(); // findWithLabel(ilist,ilabel,icolor); // SizeType nc = ilist.size(); // // nc = length(ilist); // for (SizeType j=ip;j::Type ipIsolated_,ipConnected_; typename PsimagLite::Vector::Type ilabel_; // typename PsimagLite::Vector::Type iperm_; typename PsimagLite::Vector::Type ipcolor_; }; // class ReflectionColor } // namespace Dmrg /*@}*/ #endif // REFLECTION_COLOR_H dmrgpp-6.02/Obsolete/ReflectionOperator.h000066400000000000000000000477311414604301300204750ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ReflectionOperator * * Critical problems: * * - support for fermionic reflections * * Low priority work that needs to be done: * * - support for bases that change from site to site * */ #ifndef REFLECTION_OPERATOR_H #define REFLECTION_OPERATOR_H #include "PackIndices.h" // in PsimagLite #include "Matrix.h" #include "ProgressIndicator.h" #include "LAPACK.h" #include "Sort.h" #include "ReflectionTransform.h" namespace Dmrg { template class ReflectionOperator { typedef PsimagLite::PackIndices PackIndicesType; typedef typename LeftRightSuperType::SparseMatrixType SparseMatrixType; typedef typename LeftRightSuperType::RealType RealType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorType; typedef SparseVector SparseVectorType; typedef ReflectionTransform ReflectionTransformType; enum {AVAILABLE,NOT_AVAILABLE,COLOR}; public: ReflectionOperator(LeftRightSuperType& lrs, ConcurrencyType& concurrency, SizeType n0, bool isEnabled, SizeType expandSys) : lrs_(lrs), concurrency_(concurrency), n0_(n0), progress_("ReflectionOperator",0), isEnabled_(isEnabled), expandSys_(expandSys), reflectedLeft_(n0_,n0_), reflectedRight_(n0_,n0_), reflectionTransform_(false) { SizeType counter=0; for (SizeType i=0;i::Type& sectors) { if (!isEnabled_) return; // SparseMatrixType sSuper; // setS(sSuper); SparseMatrixType sSector; setSsector(sSector,sectors); updateReflected(); // extractCurrentSector(sSector,sSuper,sectors); reflectionTransform_.update(sSector); } template void updateKeptStates(SizeType& keptStates, const SomeStructType& cacheLeft, const SomeStructType& cacheRight) { const PsimagLite::Matrix& transform1 = cacheLeft.transform; const PsimagLite::Matrix& transform2 = cacheRight.transform; if (!isEnabled_) return; if (keptStates>=transform1.n_col()) return; PsimagLite::OstringStream msg; msg<<"updateKeptStates"; progress_.printline(msg,std::cout); check(cacheLeft.removedIndices,reflectedLeft_,transform1,transform2); check(cacheRight.removedIndices,reflectedRight_,transform2,transform1); } void transform(SparseMatrixType& matrixA, SparseMatrixType& matrixB, const SparseMatrixType& matrix) const { assert(isEnabled_); reflectionTransform_.transform(matrixA,matrixB,matrix); } template void setInitState(const SomeVectorType& initVector, SomeVectorType& initVector1, SomeVectorType& initVector2) const { assert(isEnabled_); return reflectionTransform_.setInitState(initVector,initVector1,initVector2); } RealType setGroundState(VectorType& gs, const RealType& gsEnergy1, const VectorType& gsVector1, const RealType& gsEnergy2, const VectorType& gsVector2) const { assert(isEnabled_); if (gsEnergy1<=gsEnergy2) { reflectionTransform_.setGs(gs,gsVector1,1.0); return gsEnergy1; } reflectionTransform_.setGs(gs,gsVector2,-1.0); return gsEnergy2; } const LeftRightSuperType& leftRightSuper() const { return lrs_; } bool isEnabled() const { return isEnabled_; } void changeBasis(const PsimagLite::Matrix& transform1, const PsimagLite::Matrix& transform2) { if (!isEnabled_) return; SparseMatrixType newreflected; changeBasis(newreflected,reflectedLeft_,transform1,transform2); // if (newreflected.rank()!=reflectedLeft_.rank()) { // printFullMatrix(newreflected,"newreflectedLeft",0,1e-6); // transform1.print(std::cerr,1e-6); // transform2.print(std::cerr,1e-6); // } reflectedLeft_ = newreflected; //normalize(reflectedLeft_); changeBasis(newreflected,reflectedRight_,transform2,transform1); reflectedRight_ = newreflected; //normalize(reflectedRight_); // diagBasis(); } void diagBasis() { // SparseMatrixType sSector; // setSsector(sSector); // reflectionTransform_.update(sSector); // const SparseMatrixType& Q1 = reflectionTransform_.getTransform(0); // const SparseMatrixType& Qm = reflectionTransform_.getTransform(1); // SparseMatrixType transf; // transformPartialLeft(transf,Q1,Qm); // PsimagLite::Matrix fullm; // crsMatrixToFullMatrix(fullm,transf); // lrs_.leftNonConst().changeBasisDirect(fullm,concurrency_); // transformPartialRight(transf,Q1,Qm); // crsMatrixToFullMatrix(fullm,transf); // lrs_.rightNonConst().changeBasisDirect(fullm,concurrency_); } private: // void transformPartialLeft(SparseMatrixType& tr,const SparseMatrixType& Q1,const SparseMatrix& Qm) const // { // SizeType ns = lrs_.left().size(); // PackIndicesType pack2(ns/n0_); // PackIndicesType pack3(n0_); // PackIndicesType pack1(ns); // assert(reflectedLeft_.rank()==ns/n0_); // assert(reflectedRight_.rank()==ns/n0_); // typename PsimagLite::Vector::Type ptr(total,-1); // typename PsimagLite::Vector::Type index(total,0); // typename PsimagLite::Vector::Type temp(total,0); // SizeType counter = 0; // for (SizeType i=0;i& fullm) // { // SparseMatrixType m1(fullm); // SparseMatrixType m1Conj; // transposeConjugate(m1Conj,m1); // SparseMatrixType tmp = s1*m1Conj; // s1 = m1*tmp; // s1.checkValidity(); // } // void transformPartial(SparseMatrixType& s1,const typename PsimagLite::Vector::Type& eigs) // { // SizeType n = s1.rank(); // s1.resize(n); // SizeType counter = 0; // for (SizeType i=0;i::Type& removedIndices, const SparseMatrixType& reflected, const PsimagLite::Matrix& transform1, const PsimagLite::Matrix& transform2) { SparseMatrixType newreflected; changeBasis(newreflected,reflected,transform1,transform2); // RealType eps = 1e-6; // printFullMatrix(newreflected,"newreflected",0,eps); typename PsimagLite::Vector::Type x; for (SizeType ii=0;ii::Type > sort; typename PsimagLite::Vector::Type iperm(x.size()); sort.sort(x,iperm); typename PsimagLite::Vector::Type diffs; getDifferences(diffs,x,removedIndices); for (SizeType i=0;i::Type& diffs, const typename PsimagLite::Vector::Type& x1, const typename PsimagLite::Vector::Type& x2) const { typename PsimagLite::Vector::const_iterator::Type it2 = x2.begin(); for (SizeType i=0;i::const_iterator::Type it = find(it2,x2.end(),x1[i]); if (it == x2.end()) { diffs.push_back(x1[i]); continue; } it2 = it+1; } } void normalize(SparseMatrixType& A) const { SizeType n = A.rank(); typename PsimagLite::Vector::Type sum(n,0.0); for (SizeType i=0;i& transform1, const PsimagLite::Matrix& transform2) { assert(reflected.rank()==transform1.n_row()); assert(reflected.rank()==transform2.n_row()); SizeType total = transform1.n_col(); newreflected.resize(total); typename PsimagLite::Vector::Type ptr(total,-1); typename PsimagLite::Vector::Type index(total,0); typename PsimagLite::Vector::Type temp(total,0); std::cerr<<"transform1="<::Type& sectors) const { assert(sectors.size()==1); SizeType m = sectors[0]; SizeType offset = lrs_.super().partition(m); SizeType total = lrs_.super().partition(m+1)-offset; setSsector(sSector,total,offset); } void setSsector(SparseMatrixType& sSector,SizeType total=0,SizeType offset=0) const { if (total==0) total=lrs_.super().size(); sSector.resize(total); SizeType counter = 0; SizeType ns = lrs_.left().size(); PackIndicesType pack2(ns/n0_); PackIndicesType pack3(n0_); PackIndicesType pack1(ns); assert(reflectedLeft_.rank()==ns/n0_); assert(reflectedRight_.rank()==ns/n0_); typename PsimagLite::Vector::Type ptr(total,-1); typename PsimagLite::Vector::Type index(total,0); typename PsimagLite::Vector::Type temp(total,0); for (SizeType i=0;i=offset && iprime= n) { reflectedFinal = reflected; return; // } // reflectedFinal.resize(keptstates); // SizeType counterl = 0; // typename PsimagLite::Vector::Type sum(keptstates,0.0); // for (SizeType i=0;i=keptstates) continue; // ComplexOrRealType val = reflected.getValue(k); // reflectedFinal.pushCol(col); // reflectedFinal.pushValue(val); // counterl++; // sum[i] += PsimagLite::conj(val) * val; // } // } // reflectedFinal.setRow(reflectedFinal.rank(),counterl); // reflectedFinal.checkValidity(); // // normalize // for (SizeType i=0;i class ReflectionTransform { typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorType; typedef SparseVector SparseVectorType; typedef ReflectionBasis ReflectionBasisType; public: ReflectionTransform(bool idebug) : idebug_(idebug) {} void update(const SparseMatrixType& sSector) { ReflectionBasisType reflectionBasis(sSector,idebug_); plusSector_ = reflectionBasis.R(1.0).rank(); computeTransform(Q1_,reflectionBasis,1.0); computeTransform(Qm_,reflectionBasis,-1.0); // SparseMatrixType Q; //computeFullQ(Q,Q1_,Qm_); // split(Q); if (!idebug_) return; printFullMatrix(Q1_,"Q1"); printFullMatrix(Qm_,"Qm"); } void transform(SparseMatrixType& dest1, SparseMatrixType& destm, const SparseMatrixType& H) const { SparseMatrixType HQ1,HQm; multiply(HQ1,H,Q1_); multiply(HQm,H,Qm_); if (idebug_) { printFullMatrix(H,"OriginalHamiltonian"); printFullMatrix(HQm,"HQm"); printFullMatrix(HQ1,"HQ1"); } SparseMatrixType Q1t,Qmt; transposeConjugate(Q1t,Q1_); transposeConjugate(Qmt,Qm_); RealType norm1 = getNorm(Q1t,Q1_); RealType normm = getNorm(Qmt,Qm_); multiply(dest1,Q1t,HQ1); reshape(dest1,plusSector_); dest1 *= (1.0/norm1); assert(isHermitian(dest1)); SizeType minusSector = H.rank()-plusSector_; multiply(destm,Qmt,HQm); reshape(destm,minusSector); destm *= (1.0/normm); assert(isHermitian(destm)); if (idebug_) { std::cerr<<"norm1="<=partialSize) continue; ComplexOrRealType val = A.getValue(k); if (i==col && !isAlmostZero(val-1.0,eps)) return false; if (i!=col && !isAlmostZero(val,eps)) return false; } } return true; } void setGs(VectorType& gs,const VectorType& v,const RealType& sector) const { const SparseMatrixType& Q = (sector>0) ? Q1_ : Qm_; multiply(gs,Q,v); RealType norma = PsimagLite::norm(gs); gs /= norma; } template void setInitState(const SomeVectorType& initVector, SomeVectorType& initVector1, SomeVectorType& initVector2) const { SizeType minusSector = initVector.size()-plusSector_; initVector1.resize(plusSector_); initVector2.resize(minusSector); for (SizeType i=0;i=n2) { assert(isAlmostZero(val,1e-5)); continue; } B.pushCol(col); B.pushValue(val); counter++; } } #ifndef NDEBUG for (SizeType i=n2;i::Type sum(n,0.0); SizeType counter = 0; Q.resize(n); SizeType minusSector = n - plusSector_; for (SizeType i=0;i=plusSector_) continue; ComplexOrRealType val = Q1.getValue(k); Q.pushValue(val); Q.pushCol(col); sum[i] += PsimagLite::conj(val)*val; counter++; } // add Qm for (int k = Qm.getRowPtr(i);k=minusSector) continue; ComplexOrRealType val = Qm.getValue(k); Q.pushValue(val); Q.pushCol(Qm.getCol(k)+plusSector_); sum[i] += PsimagLite::conj(val)*val; counter++; } } Q.setRow(Q.rank(),counter); // normalize // for (SizeType i=0;i=plusSector_) continue; Q1_.pushCol(col); Q1_.pushValue(Q.getValue(k)); counter++; } } Q1_.setRow(Q1_.rank(),counter); counter = 0; Qm_.resize(n); for (SizeType i=0;i::Type& ipPosOrNeg = reflectionBasis.ipPosOrNeg(sector); const SparseMatrixType& reflection = reflectionBasis.reflection(); SizeType n = reflection.rank(); SparseMatrixType T1(n,n); SizeType counter = 0; for (SizeType i=0;i::Type inversePermutation(n,-1); for (SizeType i=0;i::Type sum(n,0.0); for (SizeType i=0;i class RightLeftLocal { public: typedef typename SparseMatrixType::value_type MatrixElementType; typedef psimag::Matrix MatrixType; RightLeftLocal(int m,const BasisType& basis1, const BasisWithOperatorsType& basis2, const BasisWithOperatorsType& basis3,SizeType orbitals,bool useReflection=false) : m_(m), basis1_(basis1), basis2_(basis2), basis3_(basis3), alpha_(basis1_.size()), beta_(basis1_.size()), leftPermInv_(basis2.size()), rightPermInv_(basis3.size()) { init(); createAlphaAndBeta(); } ~RightLeftLocal() { //for (SizeType i=0;i ::Type&x, typename PsimagLite::Vector const ::Type&y, SparseMatrixType const &A, SparseMatrixType const &B, int type, MatrixElementType &hop, bool operatorsAreFermions=true,SizeType angularMomentum=1,MatrixElementType angularSign= -1.0,SizeType category=0,bool dummy2=false) const { int const SystemEnviron=1,EnvironSystem=2; int fermionSign = (operatorsAreFermions) ? -1 : 1; if (type==EnvironSystem) { MatrixElementType hop2 =hop*fermionSign; fastOpProdInter(x,y,B,A,SystemEnviron,hop2,operatorsAreFermions); return; } SizeType leftSize = leftPerm_.size(); SizeType rightSize = rightPerm_.size(); //static const typename PsimagLite::Vector*::Type yAddress = 0; //if (yAddress!=&y) { preparePhi(yMatrix_,y); prepareB(bMatrix_,B); prepareA(aMatrix_,A,operatorsAreFermions); // yAddress = &y; //} MatrixType* bm = &bMatrix_; /*int ib = PsimagLite\:\:isInVector(addressesB_,&B); if (ib<0) { bm = new MatrixType(rightSize,rightSize); prepareB(*bm,B); bMatrix_.push_back(bm); addressesB_.push_back(&B); } else { bm = bMatrix_[ib]; } int ia = PsimagLite\:\:isInVector(addressesA_,&A);*/ MatrixType* am = &aMatrix_; /*if (ia<0) { am = new MatrixType(leftSize,leftSize); prepareA(*am,A,operatorsAreFermions); aMatrix_.push_back(am); addressesA_.push_back(&A); } else { am = aMatrix_[ia]; }*/ //! multiply all here: psimag::BLAS::GEMM('N','C',rightSize,leftSize,rightSize,hop, &(bm->operator()(0,0)),rightSize,&(yMatrix_(0,0)),leftSize,0.0,&(cMatrix_(0,0)),rightSize); psimag::BLAS::GEMM('N','C',leftSize,rightSize,leftSize,1.0, &(am->operator()(0,0)),leftSize,&(cMatrix_(0,0)),rightSize,0.0,&(tmpMatrix_(0,0)),leftSize); //! revert order unpreparePhi(x,tmpMatrix_); } private: int m_; const BasisType& basis1_; const BasisWithOperatorsType& basis2_; const BasisWithOperatorsType& basis3_; typename PsimagLite::Vector::Type alpha_,beta_; typename PsimagLite::Vector::Type leftPermInv_,rightPermInv_; typename PsimagLite::Vector::Type leftPerm_,rightPerm_; mutable MatrixType bMatrix_; mutable MatrixType aMatrix_; mutable MatrixType cMatrix_,tmpMatrix_,yMatrix_; //mutable typename PsimagLite::Vector addressesA_; //mutable typename PsimagLite::Vector addressesB_; void init() { SizeType ns=basis2_.size(); SizeType ne=basis3_.size(); int offset = basis1_.partition(m_); int total = basis1_.partition(m_+1) - offset; for (SizeType alphaPrime=0;alphaPrime=total || tmp<0) continue; int x = PsimagLite\:\:isInVector(leftPerm_,alphaPrime); if (x<0) leftPerm_.push_back(alphaPrime); int y = PsimagLite\:\:isInVector(rightPerm_,betaPrime); if (y<0) rightPerm_.push_back(betaPrime); } } for (SizeType i=0;i const ::Type&v) const { int offset = basis1_.partition(m_); int total = basis1_.partition(m_+1) - offset; /*for (SizeType i=0;i=total) continue; m(i,j) = v[ii]; } }*/ //SizeType ns = basis2_.size(); for (int i=0;i::Type& v,MatrixType& m) const { int offset = basis1_.partition(m_); int total = basis1_.partition(m_+1) - offset; /*for (SizeType i=0;i=total) continue; //MatrixElementType a =v[ii]; //a+=2.0; v[ii] += m(i,j); } }*/ SizeType ns = basis2_.size(); for (int i=0;i #include "Concurrency.h" // bogus: to compile without pthreads //typedef int pthread_mutex_t; // bogus: to compile without pthreads void pthread_mutex_lock(int myMutex) { } // bogus: to compile without pthreads void pthread_mutex_unlock(int myMutex) { } namespace PsimagLite { template class ThreadsWithMpi : public Concurrency { public: static void setThreads(SizeType dummy) { } // dummy template void loopCreate(SizeType total,PthreadFunctionHolderType& pfh,SomeConcurrencyType& concurrency) { PsimagLite::Range range(0,total,concurrency); SizeType np = concurrency.nprocs(); SizeType blockSize = total/np; if (total%np!=0) blockSize++; for (;!range.end();range.next()) { SizeType i = range.index(); pfh.thread_function_(i,blocksize,total,0); } } template void reduce(T& x,SomeConcurrencyType& concurrency) { concurrency.reduce(x); } }; // ThreadsWithMpi } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/README.md000066400000000000000000000123511414604301300142070ustar00rootroot00000000000000# Quick Start ## Licensing The full software license for DMRG++ version 3 can be found in file LICENSE in the root directory of the code. DMRG++ is a free and open source implementation of the DMRG algorithm. You are welcomed to use it and publish data obtained with DMRG++. If you do, please cite this work (see next subsection). ## DISCLAIMER
 THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT,
 OR THE UNITED STATES DEPARTMENT OF ENERGY 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.

 NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED
 STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR
 ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY
 INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS
 DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS.
## How To Cite This Work
\@article{re:alvarez0209,
author="G. Alvarez",
title="The Density Matrix Renormalization Group for
Strongly Correlated Electron Systems: A Generic Implementation",
journal="Computer Physics Communications",
volume="180",
pages="1572-1578",
year="2009"}

\@article{re:alvarez0310,
author="G. Alvarez",
title="Implementation of the SU(2) Hamiltonian
Symmetry for the DMRG Algorithm",
journal="Computer Physics Communications",
volume="183",
pages="2226-2232",
year="2012"}


\@article{re:alvarez0311,
author="G. Alvarez and  L. G. G. V. Dias da Silva and
E. Ponce and  E. Dagotto",
title="Time Evolution with the DMRG Algorithm:
A Generic Implementation
for Strongly Correlated Electronic Systems",
journal="Phys. Rev. E",
volume="84",
pages="056706",
year="2011"}

\@article{re:alvarez0713,
author="G. Alvarez",
title="Production of minimally entangled typical thermal states
with the Krylov-space approach",
journal="Phys. Rev. B",
volume="87",
pages="245130",
year="2013"}

And also:
\@article{re:alvarez08,
 re:webDmrgPlusPlus,
 Author = {G. Alvarez},
 Title = {DMRG++ Website},
 Publisher = {\\url{https://g1257.github.com/dmrgPlusPlus}} }
## Code Integrity Hash of the latest commit is also posted at https://g1257.github.com/hashes.html Latest commit should always be signed. Keys at https://g1257.github.com/keys.html ## Building and Running DMRG++ ### Required Software \begin{enumerate} \item GNU C++ or LLVM CLANG++ (C++11 is used) \item (required) The BLAS and LAPACK library. \item (required) HDF5 \item (required) PsimagLite. See below for details. \item (required) boost-devel (boost-spirit) for Ainur Only headers files are used; boost runtime is not used. \item (optional) GSL (GNU Scientific library) \item (optional) make or gmake (only needed to use the Makefile) \item (optional) perl (only needed to run the configure.pl script) \end{enumerate} ### Downloading DMRG++ Create a directory somewhere and cd to it.
git clone https://code.ornl.gov/gonzalo_3/PsimagLite
cd PsimagLite/
git checkout features
git pull origin features 

cd ../
git clone https://code.ornl.gov/gonzalo_3/dmrgpp
cd dmrgpp/
git checkout features
git pull origin features
Please also read https://g1257.github.io/availabilityOfSoftware.html ### Preparing your Makefile Create a file anywhere called /path/to/somewhere/myconfig.psiTag Now have a look at dmrgpp/TestSuite/inputs/ConfigBase.psiTag DO NOT Edit this file. You may override items in that file using your myconfig.psiTag. For example, to use openblas instead of regular blas, you may write in your myconfig.psiTag
	dependency BLAS = LDFLAGS += -lopenblas
	dependency LAPACK= ()
For the psiTag syntax see the beginning of PsimagLite/scripts/PsiTag.pm ### Compiling and Linking DMRG++
 cd PsimagLite/lib
 ./configure.pl -c /path/to/somewhere/myconfig.psiTag
 make -j something
 cd ../../
 cd dmrgpp/src
 ./configure.pl -c /path/to/somewhere/myconfig.psiTag
 make -j something
Above something refers to the number of cores you want to use for parallelizing the make run. ### Running DMRG++ Assuming you are in dmrgpp/src, copy input2.inp to dmrgpp/src with cp ../TestSuite/inputs/input2.inp . and then you may run with ./dmrg -f ../TestSuite/inputs/input2.inp You will now have two files a data2.hdf5 and an ASCII file runForinput2.cout. The name data2 is obtained from the corresponding label in the input file, in this case input2.inp. Normally the code writes stdout to runForinput2.cout for an input called input2.inp, and stderr to the terminal. If you would like to override the default inferred name runForinput2.cout you may use ./dmrg -f ../TestSuite/inputs/input2.inp -l myoutputfile If you would like stdout be written to the terminal say -l - dmrgpp-6.02/TODO000066400000000000000000000015151414604301300134200ustar00rootroot00000000000000 BUGS: observer: fails if lattice has less than 6 sites. observer: backwards move give wrong results for fermionic ops. CLEANUPS: WFT needs to be disabled if lattice has less than 6 sites. eliminate Basis::electrons(...) and use FermionSign instead observer must be able to tell if main run was done with reals or complex place save(...) functions next to "load" ctors. string name for basis objects DensityMatrixSu2 needs optimization cannot go backwards from infinite loop when WFT is in use (see WaveFunctionTransfFactory.h line 137) basis.eq(...) could be uninitialized due to quantumNumbersOld_ being uninitialized. Also true for other private data of BasisImplementation, need to fix IoSimple needs to be completely replaced by IoNg (issue 5 on github) Add guard code for singletons. Random number selection needed Labels dmrgpp-6.02/TestSuite/000077500000000000000000000000001414604301300146575ustar00rootroot00000000000000dmrgpp-6.02/TestSuite/Ci.pm000066400000000000000000000134051414604301300155530ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; package Ci; sub getTests { my ($desc) = @_; my @tests; my $counter = 0; open(FILE,"$desc") or die "$0: Cannot open $desc : $!\n"; my $prevNumber; my $description = ""; my $barrier = 0; while () { next if (/^\#/); my $line = $_; chomp($line); $line =~ s/[ \t]+//g; $barrier = 1 if ($line eq ""); if (/^(\d+)\)(.*$)/) { my $number = $1; if ($counter == 0) { $prevNumber = $number; ++$counter; $description = $2; $description .= "\n" if ($description ne ""); next; } my %h; $h{"number"} = $prevNumber; $h{"description"} = $description; $description = $2; $description .= "\n" if ($description ne ""); $tests[$counter - 1] = \%h; $prevNumber = $number; ++$counter; $barrier = 0; } else { $description .= $_ unless($barrier); } } close(FILE); my %h; $h{"number"} = $prevNumber; $h{"description"} = $description; $tests[$counter - 1] = \%h; return @tests; } sub getInfoFromInput { my ($file, $n) = @_; my %keys; open(FILE, "$file") or return %keys; while () { chomp; next if (/^#/); s/\"//g; s/\; *$//; if (/(^[^\=]+)\=([^ ]+$)/) { $keys{"$1"} = $2; } } close(FILE); return %keys; } sub isSu2 { my ($keys) = @_; my $label = "UseSu2Symmetry"; my $value = $keys->{$label}; defined($value) or $value = 0; return ($value == 1); } sub procRanges { my ($range, $total) = @_; my @inRange; return @inRange if (!defined($range)); my @temp = split(/,/, $range); my $n = scalar(@temp); for (my $i = 0; $i < $n; ++$i) { procRange(\@inRange, $temp[$i], $total); } my @unique = do { my %seen; grep { !$seen{$_}++ } @inRange }; return @unique; } sub procRange { my ($ranges, $range, $total) = @_; my @temp = split(/\-/, $range); my $n = scalar(@temp); die "$0: FATAL: Empty range $range\n" if ($n == 0); if ($n == 1 and $range =~ /^[0-9]+$/) { push @$ranges, $range; return; } if ($n == 2) { my $start = $temp[0]; my $end = $temp[1]; $start = 0 unless ($start =~ /^[0-9]+$/); $end = $total unless ($end =~ /^[0-9]+$/); for (my $i = $start; $i <= $end; ++$i) { push @$ranges, $i; } return; } die "$0: FATAL: Invalid range spec.: $range\n"; } sub getAllowedTests { my ($a) = @_; my %hh; my $n = scalar(@$a); for (my $i = 0; $i < $n; ++$i) { my $h = $a->[$i]; my $n = $h->{"number"}; $hh{"$n"} = $h->{"description"}; } return %hh; } sub helpFor { my ($label) = @_; my $h = ""; if ($label eq "-n") { $h .= "\t-n n\n"; $h .= "\t\tSupply tests to run, this is mandatory."; $h .= "\t\tThis is a comma-separated list of at least one range.\n"; $h .= "\t\tA range is one of the following.\n"; $h .= "\t\t\tA number, like 2\n"; $h .= "\t\t\tA number followed by a dash, like 2-; this sets the minimum\n"; $h .= "\t\t\tA dash followed by a number, like -2; this sets the maximum\n"; $h .= "\t\t\tTwo numbers separated by a dash, like 2-4, indicating the range {2, 3, 4}\n"; return $h; } elsif ($label eq "-w") { $h .= "\t-w workdir\n"; $h .= "\t\tUse workdir as working directory not the default of tests/\n"; return $h; } elsif ($label eq "-su2") { $h .= "\t-su2\n"; $h .= "\t\t[Post]process SU(2) tests\n"; return $h; } elsif ($label eq "-h") { $h .= "\t-h\n"; $h .= "\t\tPrint this help and exit\n"; return $h; } die "$0: No printHelpFor $label\n"; } sub compactList { my ($str) = @_; my @temp = split(/ /, $str); my $n = scalar(@temp); return $str if ($n < 3); my $prev = $temp[0]; my $begin = $prev; my $text = ""; for (my $i = 1; $i < $n; ++$i) { if ($temp[$i] == $prev + 1) { $prev = $temp[$i]; next; } $text .= ($begin == $prev) ? "$begin, " : "${begin}-${prev}, "; $prev = $begin = $temp[$i]; } $text .= ($begin == $prev) ? $begin : "${begin}-${prev}"; return $text; } sub getCiAnnotations { my ($file,$n) = @_; open(FILE, "$file") or return ""; my $counter = 0; my @h; while () { chomp; if (/^\#ci ([^ ]+) (.*$)/) { my $key = $1; my $args = $2; my @a; push @a, "$2"; push @a, "$key"; $h[$counter++] = \@a; next; } } close(FILE); my @hh; my $newcounter = 0; for (my $i = 0; $i < $counter; ++$i) { my $ptr = $h[$i]; my $n = scalar(@$ptr); die "getCiAnnotations\n" if (scalar($n == 0)); my $key = $ptr->[$n - 1]; next if ($key eq "INVALID"); my @indicesWithThisKey = getIndicesWithThisKey($key, \@h, $i); my $nn = scalar(@indicesWithThisKey); my @a; for (my $j = 0; $j < $nn; ++$j) { my $jj = $indicesWithThisKey[$j]; my $pptr = $h[$jj]; my $pn = scalar(@$pptr); die "getCiAnnotations\n" if (scalar($pn == 0)); for (my $k = 0; $k < $pn - 1; ++$k) { push @a, $pptr->[$k]; } $h[$jj] = [0, "INVALID"]; } push @a, $key; $hh[$newcounter++] = \@a; } return @hh; } sub getIndicesWithThisKey { my ($key, $h, $start) = @_; my @indices; my $total = scalar(@$h); for (my $i = $start; $i < $total; ++$i) { my $ptr = $h->[$i]; my $n = scalar(@$ptr); die "getIndicesWithThisKey\n" if (scalar($n == 0)); next if ($ptr->[$n - 1] ne $key); push @indices, $i; } return @indices; } sub readAnnotationFromIndex { my ($a, $ind) = @_; my $n = scalar(@$a); die "$0: index too big $ind >= $n \n" if ($ind < 0 || $ind >= $n); my $ptr = $a->[$ind]; $ptr or return ("", ""); my @copy = @$ptr; my $key = pop @copy; return ($key, \@copy); } sub readAnnotationFromKey { my ($a, $key) = @_; my $n = scalar(@$a); for (my $i = 0; $i < $n; ++$i) { my $ptr = $a->[$i]; my $n = scalar(@$ptr); die "$0: Invalid annotation\n" if ($n == 0); next if ($ptr->[$n - 1] ne $key); my @copy = @$ptr; pop @copy; return (\@copy); } return (undef); } sub getInputFilename { my ($n) = @_; my $file = "../inputs/input$n.ain"; return $file if (-r "$file"); return "../inputs/input$n.inp"; } 1; dmrgpp-6.02/TestSuite/Combinatorial.pm000066400000000000000000000023761414604301300200100ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; package Combinatorial; sub main { my ($levels, $callback) = @_; my $total = 1; my @sizes; my $counter = scalar(@$levels); for (my $i = 0; $i < $counter; ++$i) { my $ptr = $levels->[$i]; my $n = scalar(@$ptr); $total *= $n; push @sizes, $n; } print STDERR "$0: Total configurations $total\n"; for (my $i = 0; $i < $total; ++$i) { my @location = findLocation($i, \@sizes, $total); my @items = findItemsForLocation(\@location, $levels); $callback->(\@items); } } sub findLocation { my ($ind, $sizes, $volume) = @_; # ind = x[0] + x[1]*sizes[0] + x[2]*sizes[0]*sizes[1] + ... my @location; my $n = scalar(@$sizes); die "$0: findLocation sizes==0\n" if ($n == 0); my $factor = $volume; my $tmp = $ind; my $j = $n - 1; for (my $i = 0; $i < $n; ++$i) { $factor /= $sizes->[$j]; $location[$j] = int($tmp/$factor); $tmp -= $location[$j--]*$factor; } return @location; } sub findItemsForLocation { my ($location, $levels) = @_; my $n = scalar(@$location); if ($n != scalar(@$levels)) { die "$0: findItemsForLocation\n"; } my @items; for (my $i = 0; $i < $n; ++$i) { my $j = $location->[$i]; my $item = $levels->[$i]->[$j]; push @items, $item; } return @items; } 1; dmrgpp-6.02/TestSuite/TestSuiteDmrg.pm000066400000000000000000000157151414604301300177710ustar00rootroot00000000000000#! /usr/bin/perl =pod // BEGIN LICENSE BLOCK /* Copyright (c) 2008-2011, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] [TestSuite by E.P., Puerto Rico and ORNL] UT Battelle Open Source Software License 11242008 see file LICENSE for more details ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* // END LICENSE BLOCK "Program testing can be a very effective way to show the presence of bugs, but it is hopelessly inadequate for showing their absence." -- Edsger Dijkstra =cut use strict; use TestSuiteGlobals; package TestSuiteDmrg; #Custom routine that creates the dmrg executable, if necessary, and runs it sub runDmrg { my ($inputFile,$raw) = @_; #print STDERR "raw=$raw\n"; die "Missing input file $inputFile: $!\n" unless (-r "$inputFile"); my $specKey = TestSuiteGlobals::getSpecKey(); my $executable = $TestSuiteGlobals::srcDir."dmrg-".$specKey; createExecutable($TestSuiteGlobals::specFile,$specKey,"dmrg") unless (-x "$executable"); my $arg = "$executable -f $inputFile -l $raw"; # grep {s/&//} $arg if($verbose); print "Running dmrg test...\n"; my $err = chdir($TestSuiteGlobals::srcDir); die "Changing directory to $TestSuiteGlobals::srcDir: $!" if(!$err); $err = system($arg); die "Running test using $executable with $inputFile: $!" if($err); $err = chdir($TestSuiteGlobals::testDir); die "Changing directory to $TestSuiteGlobals::testDir: $!" if(!$err); print "Completion of dmrg test.\n"; } #Custom routine that creates the observe executable, if necessary, and runs it sub runObserve { my ($inputFile, $raw,$obsOptions) = @_; $obsOptions = "ccnnszsz" if (!defined($obsOptions)); my $specKey = TestSuiteGlobals::getSpecKey(); my $executable = $TestSuiteGlobals::srcDir."observe-".$specKey; createExecutable($TestSuiteGlobals::specFile,$specKey,"observe") unless (-x "$executable"); my $arg = "$executable -f $inputFile -o $obsOptions &> $raw"; # grep {s/&//} $arg if($verbose); #die "******-> $arg\n"; print "Running observe test...\n"; my $err = chdir($TestSuiteGlobals::srcDir); die "Changing directory to $TestSuiteGlobals::srcDir: $!" if(!$err); $err = system($arg); #die "Running test using $executable with $inputFile: $!" if($err); $err = chdir($TestSuiteGlobals::testDir); die "Changing directory to $TestSuiteGlobals::testDir: $!" if(!$err); print "Completion of observe test.\n"; } #Configures the current test, either manually or automatically (model spec file), and creates the executable sub createExecutable { my ($specFile,$refKey, $execType) = @_; my $configFile = "configure.pl"; my $arg1 = "./$configFile ../TestSuite/inputs/$specFile &> /dev/null"; my $arg2 = "make $execType -f Makefile &> /dev/null"; my $err = chdir($TestSuiteGlobals::srcDir); die "Changing directory to $TestSuiteGlobals::srcDir: $!" if(!$err); (-r "../TestSuite/inputs/$specFile") or die "$0: createExecutable: $specFile does not exist\n"; print "Configuring $execType in Test $TestSuiteGlobals::testNum...\n"; $err = system($arg1) unless (-r "../src/Makefile"); print "Creating $execType executable for Test $TestSuiteGlobals::testNum...\n"; $err = system($arg2); die "Make command for $execType: $arg2\n" if($err); my $executable= $execType."-".$refKey; $err = rename($execType, $executable); die "Renaming $execType to $executable: $!" if(!$err); $err = chdir($TestSuiteGlobals::testDir); die "Changing directory to $TestSuiteGlobals::testDir: $!" if(!$err); print "\u$execType executable was succesfully created.\n"; } #Retrieves the data for the Operators C, N, and Sz from the observe run sub extractOperator { my ($opName, $raw,$out) = @_; my $line; my $op; open(INFILE,"<$raw") || die "Opening $raw: $!"; while($line = ) { if($line =~ /^Operator$opName/) { $op = $line; $line = ; $op = $op.$line; my @temp1 = split(/ /,$line); for(my $i = 0; $i < $temp1[0]; $i++) { $line = ; $op = $op.$line; } } } close(INFILE) || die "Closing $raw: $!"; open (OUTFILE, ">$out") || die "Opening $out: $!"; #die "Here <----------- $opName $raw\n"; print OUTFILE $op; close (OUTFILE) || die "Closing $out: $!"; # print "Operator$opName extraction was successful.\n" if($verbose); } #Searches for differences between the data in the operators oracles with the recently computed operators sub smartDiff { my ($opName, $raw, $oracle, $output) = @_; my @rowsRaw; my @rowsOracle; my @elemRaw; my @elemOracle; my %mapPos; open (FILE, "<$raw") || die "Opening $raw: $!"; while(my $line = ) { next if($line !~ /^\d/); chomp($line); push @rowsRaw, $line; } close (FILE) || die "Closing $raw: $!"; open (FILE, "<$oracle") || die "Opening $oracle: $!"; while(my $line = ) { next if($line !~ /^\d/); chomp($line); push @rowsOracle, $line; } close (FILE) || die "Closing $oracle: $!"; my @dimsRaw = split(' ', $rowsRaw[0]); my @dimsOracle = split(' ', $rowsOracle[0]); if($dimsRaw[0] != $dimsOracle[0] || $dimsRaw[1] != $dimsOracle[1]) { print STDERR "$0: smartDiff: Unbalanced dimensions, Operator$opName matrix."; print STDERR " SmartDiff will be omitted\n"; return; } shift(@rowsRaw); shift(@rowsOracle); for(my $i = 0; $i < $dimsRaw[0]; $i++) { @elemRaw = split(' ', $rowsRaw[$i]); @elemOracle = split(' ', $rowsOracle[$i]); for(my $j = 0; $j < $dimsRaw[1]; $j ++) { if($elemRaw[$j] ne $elemOracle[$j]) { $mapPos{"($i,$j)"} = "$elemRaw[$j], $elemOracle[$j]"; } } } open (FILE, ">$output") || die "Opening $output: $!"; if(scalar keys %mapPos) { print FILE "(Row,Col) Raw Oracle\n"; print FILE "-------- --- ------\n"; foreach my $key (sort keys %mapPos) { print FILE "$key : $mapPos{$key}\n"; } } close (FILE) || die "Closing $output: $!"; # print "Smart diff for Operator$opName was successful.\n" if($verbose); } 1; dmrgpp-6.02/TestSuite/actionsCi.pl000077500000000000000000000067201414604301300171400ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; use lib "../../scripts"; use EnergyAncillaInSitu; use CollectBrakets; use Metts; use Ndollar; my ($action, $n, @what) = @ARGV; defined($what[0]) or die "$0: USAGE: action n what\n"; my %actions = (getTimeObservablesInSitu => \&runTimeInSituObs, getEnergyAncilla => \&runEnergyAncillaInSituObs, CollectBrakets => \&runCollectBrakets, metts => \&runMetts, nDollar => \&runNdollar, procOmegas => \&runProcOmegas); defined($actions{$action}) or die "$0: Action $action not registered\n"; $actions{$action}->($n, \@what); sub runTimeInSituObs { my ($n, $what) = @_; my $whatN = scalar(@$what); for (my $i = 0; $i < $whatN; ++$i) { my $file = "runForinput$n.cout"; if (!(-r "$file")) { print STDERR "|$n|: WARNING: $file not readable\n"; next; } my $label = $what->[$i]; if (!($label =~ /^ *\"/)) { $label = "\"$label\""; } my $cmd = "perl ../../scripts/betterTimeObs.pl $file $label > timeObservablesInSitu${n}_$i.txt"; system($cmd); } } sub runEnergyAncillaInSituObs { my ($n, $what) = @_; my $whatN = scalar(@$what); for (my $i = 0; $i < $whatN; ++$i) { my $file = "runForinput$n.cout"; if (!(-r "$file")) { print STDERR "|$n|: WARNING: $file not readable\n"; next; } my @temp = split(/ /, $what->[$i]); (scalar(@temp) == 2) or die "$0: FATAL annotation ".$what->[$i]."\n"; my ($beta, $label) = @temp; my $fin; open($fin, "<", $file) or die "$0: Could not open $file : $!\n"; my $fout; my $foutname = "energyAncillaInSitu${n}_$i.txt"; if (!open($fout, ">", "$foutname")) { close($fin); die "$0: Could not write to $foutname: $!\n"; } EnergyAncillaInSitu::main($beta, $label, $fin, $fout); close($fin); close($fout); } } sub runCollectBrakets { my ($n, $what) = @_; my $whatN = scalar(@$what); for (my $i = 0; $i < $whatN; ++$i) { my $file = "runForinput$n.cout"; if (!(-r "$file")) { print STDERR "|$n|: WARNING: $file not readable\n"; next; } #my @temp = split(/ /, $what->[$i]); # arguments ot CollectBrakets my $foutname = "CollectBrakets${n}_$i.txt"; CollectBrakets::main($file, $foutname); } } sub runMetts { my ($n,$what) = @_; my $whatN = scalar(@$what); my %actions = ("Energy" => \&Metts::energy, "Density" => \&Metts::density); for (my $i = 0; $i < $whatN; ++$i) { my $file = "runForinput$n.cout"; if (!(-r "$file")) { print STDERR "|$n|: WARNING: $file not readable\n"; next; } my @temp = split(/ /, $what->[$i]); (scalar(@temp) == 3) or next; my ($label, $arg0, $arg1) = @temp; if (($label ne "Energy") and ($label ne "Density")) { die "$0: Wrong annotation: $what->[$i]\n"; } my $fin; open($fin, "<", $file) or die "$0: Could not open $file : $!\n"; my $fout; my $foutname = "metts${n}_$i.txt"; if (!open($fout, ">", "$foutname")) { close($fin); die "$0: Could not write to $foutname: $!\n"; } my ($sum, $counter) = $actions{"$label"}($arg0, $arg1,0, $fin); print $fout "#"."$label=$sum $counter\n"; close($fin); close($fout); } } sub runNdollar { my ($n, $what) = @_; my $nWhat = scalar(@$what); die "$0: Expecting one arg\n" unless ($nWhat == 1); Ndollar::main($what->[0]); } sub runProcOmegas { my ($n, $what) = @_; my $dir = "../../scripts"; my $cmd = "perl -I $dir $dir/procOmegas.pl -f ../inputs/input$n.inp @$what"; system($cmd); $cmd = "cp out.spectrum out$n.spectrum"; system($cmd); } dmrgpp-6.02/TestSuite/batchDollarized.pbs.sample000066400000000000000000000002041414604301300217340ustar00rootroot00000000000000#!/bin/sh #PBS -N ci$$ind #PBS -q batch #PBS -l nodes=1:ppn=8 #PBS -l walltime=24:00:00 cd $PBS_O_WORKDIR date hostname $$cmd date dmrgpp-6.02/TestSuite/ci.pl000077500000000000000000000206321414604301300156150ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use Getopt::Long qw(:config no_ignore_case); use lib "."; use Ci; my ($valgrind,$workdir,$ranges,$regex,$su2,$info,$sOptions,$help); my %submit; GetOptions( 'S=s' => \$submit{"command"}, 'delay=s' => \$submit{"delay"}, 'valgrind=s' => \$valgrind, 'w=s' => \$workdir, 'n=s' => \$ranges, 'e=s' => \$regex, 'i=i' => \$info, 'o=s' => \$sOptions, 'su2' => \$su2, 'h' => \$help) or die "$0: Error in command line args, run with -h to display help\n"; if (defined($help)) { print "USAGE: $0 [options]\n"; print "\tIf no option is given creates inputs and batches for all "; print "tests\n"; print "\t-S command\n"; print "\t\tAfter creating inputs and batches, submit them to the queue\n"; print "\t\tusing batchDollarized.pbs as template, and\n"; print "\t\twith command command, usually command is qsub but you can also use\n"; print "\t\tbash to run in the command line without a batching system.\n"; print "\t-delay delay\n"; print "\t\tDelay in seconds between subsequent submissions.\n"; print "\t-n n\n"; print Ci::helpFor("-n"); print "\t-e regex\n"; print "Only consider input files that match regex\n"; print Ci::helpFor("-w"); print "\t--valgrind tool\n"; print "\t\tRun with valgrind using tool tool\n"; print "\t-i number\n"; print "\t\tPrint info for test number number\n"; print Ci::helpFor("-su2"); print Ci::helpFor("-h"); exit(0); } defined($submit{"command"}) or $submit{"command"} = ""; $submit{"PBS_O_WORKDIR"} = ($submit{"command"} eq "qsub") ? 1 : 0; $submit{"delay"} = 5 if (!defined($submit{"delay"})); die "$0: delay must be numeric\n" unless ($submit{"delay"} =~ /^\d+$/); if ($submit{"delay"} < 5 and $submit{"command"} eq "qsub") { die "$0: Delay for qsub must be at least 5 seconds\n"; } defined($su2) or $su2 = 0; defined($sOptions) or $sOptions = ""; defined($valgrind) or $valgrind = ""; defined($workdir) or $workdir = "tests"; my $templateBatch = "batchDollarized.pbs"; prepareDir(); my @tests = Ci::getTests("../inputs/descriptions.txt"); my %allowedTests = Ci::getAllowedTests(\@tests); my $total = $tests[$#tests]->{"number"}; if (defined($info)) { my $desc = $allowedTests{$info}; defined($desc) or die "$0: No test $info\n"; print STDERR "$0: INFO for $info\n"; print STDERR " ".$desc."\n"; exit(0); } my @inRange = Ci::procRanges($ranges, $total); my $rangesTotal = scalar(@inRange); die "$0: No tests specified under -n\n" if ($rangesTotal == 0); #print STDERR "@inRange"."\n"; my $nonExistent = ""; my @batches; for (my $j = 0; $j < $rangesTotal; ++$j) { my $n = $inRange[$j]; if (!exists($allowedTests{"$n"})) { $nonExistent .= "$n "; next; } if ($nonExistent ne "") { $nonExistent = Ci::compactList($nonExistent); #print STDERR "$0: Test(s) $nonExistent do(es) not exist, ignored\n"; $nonExistent = ""; } my $thisInput = Ci::getInputFilename($n); my %keys = Ci::getInfoFromInput($thisInput, $n); my $isSu2 = Ci::isSu2(\%keys); if ($isSu2 and !$su2) { print STDERR "$0: WARNING: Ignored test $n "; print STDERR "because it's an SU(2) test and "; print STDERR "you did not specify -su2\n"; next; } next unless matchesRegex($thisInput, $regex); my $from = getRestartFrom("$thisInput",$n); my @ciAnnotations = Ci::getCiAnnotations("$thisInput",$n); my $totalAnnotations = scalar(@ciAnnotations); my $whatDmrg = Ci::readAnnotationFromKey(\@ciAnnotations, "dmrg"); my $extraCmdArgs = $sOptions." ".findArguments($whatDmrg); my $cmd = getCmd($n, $valgrind, $extraCmdArgs); for (my $i = 0; $i < $totalAnnotations; ++$i) { my ($ppLabel, $w) = Ci::readAnnotationFromIndex(\@ciAnnotations, $i); my $x = defined($w) ? scalar(@$w) : 0; next if ($x == 0); print "|$n| has $x $ppLabel lines\n"; next if ($ppLabel eq "dmrg"); if ($ppLabel eq "observe") { $cmd .= runObserve($n, $w, $sOptions); next; } my $text = join ' ', map{ qq/"$_"/ } @$w; $text =~ s/\"\"/\"/g; my $pcmd = "perl ../actionsCi.pl $ppLabel $n $text\n"; $cmd .= $pcmd; } if ($from ne "") { my $bi = getDeepBatchIndex($from); defined($batches[$bi]) or die "$0: Cannot append to empty batch\n"; appendToBatch($batches[$bi], $cmd); next; } my $batch = createBatch($n, $cmd, $submit{"PBS_O_WORKDIR"}); die "$0: Already created $batch\n" if defined($batches[$n]); $batches[$n] = $batch; } exit(0) if ($submit{"command"} eq ""); my $totalBatches = scalar(@batches); for (my $i = 0; $i < $totalBatches; ++$i) { my $batch = $batches[$i]; next if (!defined($batch)); submitBatch(\%submit, $batch); } sub findArguments { my ($a) = @_; return "" unless defined($a); my $n = scalar(@$a); for (my $i = 0; $i < $n; ++$i) { if ($a->[$i] =~/^arguments=(.+$)/) { return $1; } die "$0: #ci dmrg annotation: $a->[$i] not understood\n"; } return ""; } sub runObserve { my ($n, $what, $sOptions) = @_; my $whatN = scalar(@$what); my $cmd = ""; for (my $i = 0; $i < $whatN; ++$i) { $cmd .= runObserveOne($n,$i,$what->[$i],$sOptions); $cmd .= "\n"; } return $cmd; } sub runObserveOne { my ($n, $ind, $what, $sOptions) = @_; # what == arguments=something my $args; if ($what =~ /^arguments=(.+$)/) { $args = $1; } defined($args) or die "$0: observe must have arguments\n"; my $output = "observe$n.txt"; unlink($output) if ($ind == 0); my $inputfile = Ci::getInputFilename($n); my $cmd = "./observe -f $inputfile $sOptions $args >> $output"; print "|$n|: postTest $cmd\n"; return $cmd; } sub matchesRegex { my ($thisInput, $regex) = @_; defined($regex) or return 1; open(FILE, "<", "$thisInput") or return 1; my $flag = 0; while () { if (/$regex/) { $flag = 1; last; } } close(FILE); return $flag; } sub getRestartFrom { my ($file,$n) = @_; open(FILE, "<", "$file") or die "$0: Cannot open $file : $!\n"; my ($so, $from, $from2); my $restart = 0; while () { chomp; if (/SolverOptions=(.*$)/) { $so = $1; last unless ($so =~ /restart/); $restart = 1; } if (/RestartFilename=(.*$)/) { $from = $1; } if (/InfiniteLoopKeptStates=(.*$)/) { $from2 = $1; } } close(FILE); return "" if ($restart == 0); $from = $from2 unless defined($from); defined($from) or die "$0: restart test $n without RestartFilename\n"; return $from; } sub getDeepBatchIndex { my ($from) = @_; # $from = data??.txt or data?? my $copy = $from; $copy =~ s/\.txt$//; $copy =~ s/^\"//; $copy =~ s/\";$//; my $n; if ($copy =~ /(\d+$)/) { $n = $1; } defined($n) or die "$0: getDeepBatchIndex $from\n"; my $file = Ci::getInputFilename($n); my $from2 = getRestartFrom($file, $n); return ($from2 eq "") ? $n : getDeepBatchIndex($from2); } sub getCmd { my ($n, $tool, $extraCmdArgs) = @_; my $valgrind = ($tool eq "") ? "" : "valgrind --tool=$tool "; $valgrind .= " --callgrind-out-file=callgrind$n.out " if ($tool eq "callgrind"); my $inputfile = Ci::getInputFilename($n); return "$valgrind./dmrg -f $inputfile $extraCmdArgs &> output$n.txt\n\n"; } sub createBatch { my ($ind,$cmd,$pbsOworkDir) = @_; my $file = "Batch$ind.pbs"; open(FOUT, ">", "$file") or die "$0: Cannot write to $file: $!\n"; open(FILE, "<", "../$templateBatch") or die "$0: Cannot open ../$templateBatch: $!\n"; while () { s/\$PBS_O_WORKDIR/\./g if (!$pbsOworkDir); while (/\$\$([a-zA-Z0-9\[\]]+)/) { my $line = $_; my $name = $1; my $str = "\$".$name; my $val = eval "$str"; defined($val) or die "$0: Undefined substitution for $name\n"; $line =~ s/\$\$$name/$val/; $_ = $line; } print FOUT; } close(FILE); close(FOUT); print STDERR "$0: $file written\n"; return $file; } sub appendToBatch { my ($fout, $cmd) = @_; open(FOUT, ">>", "$fout") or die "$0: Cannot append to $fout: $!\n"; print FOUT "$cmd\n"; close(FOUT); print STDERR "$0: $fout has been written in append mode.\n"; } sub submitBatch { my ($submit, $batch) = @_; my $extra = $submit->{"extra"}; my $delay = $submit->{"delay"}; defined($delay) or die "$0: Please say -delay delay, where delay > 0 in seconds\n"; ($delay > 0) or die "$0: delay must be positive\n"; defined($extra) or $extra = ""; print STDERR "$0: Submitted $batch $extra $batch\n"; my $qsub = $submit->{"command"}; ($qsub eq "bash" or $qsub eq "qsub") or die "$0: -S qsub | bash\n"; my $ret = `$qsub $extra $batch`; defined($ret) or $ret = ""; chomp($ret); sleep($delay); return $ret; } sub prepareDir { my $b = (-r "$workdir"); system("mkdir $workdir") if (!$b); system("cp -av ../src/dmrg $workdir/"); system("cp -av ../src/observe $workdir/"); chdir("$workdir/"); } dmrgpp-6.02/TestSuite/createOracle.pl000066400000000000000000000034541414604301300176130ustar00rootroot00000000000000#!/usr/bin/perl # use strict; use warnings; # Accepted runs between 1 minute and 1/2 hour my ($tmin, $tmax) = (1, 1800); # Accepted files up to 10MB my $sizemax = 1024*1024*10; # 10 MB my $cannotAccept = "$0: I cannot accept this run"; my ($input) = @ARGV; defined ($input) or die "USAGE: $0 input.inp\n"; my $root = $input; if ($root =~ /\.inp$/) { $root =~ s/\.inp$//; } else { $input .= ".inp"; } my $datafile = readLabel($input, "OutputFile="); my $cout = "runFor$root.cout"; my $t = getRunTime($cout); if ($t < $tmin || $t > $tmax) { print STDERR "$cannotAccept due to runtime=$t\n"; die "$0: Runtime must be between $tmin and $tmax seconds\n"; } my @files; push @files, $input; push @files, $cout; push @files, $datafile; my $targz = "$root.tar.gz"; tarAndGzipFiles($targz, \@files); # Check file size my $size = -s "$targz"; if ($size > $sizemax) { print STDERR "$0: $cannotAccept due to filesize=$size > maxsize=$sizemax\n"; } sub readLabel { my ($file, $label) = @_; my $value; open(FILE, "<", "$file") or die "$0: Cannot open file $file : $!\n"; while () { if (/^$label(.*$)/) { $value = $1; last; } } close(FILE); defined($value) or die "$0: File $file does not contain label $label\n"; return $value; } sub getRunTime { my ($file) = @_; my $v1 = readLabel($file, "UnixTimeStart="); my $v2 = readLabel($file, "UnixTimeEnd="); return ($v2 - $v1); } sub tarAndGzipFiles { my ($targz, $files) = @_; if (-w "$targz") { my $cmd = "cp $targz $targz.bak"; print STDERR "$0: Making backup $cmd ...\n"; system($cmd); } my $cmd = "tar --owner=nobody --group=nobody -zcf $targz @files"; print STDERR "$0: Running $cmd ...\n"; my $ret = system($cmd); if ($ret != 0) { die "$0: tar command failed\n"; } print STDERR "$0: File $targz created successfully\n"; } dmrgpp-6.02/TestSuite/inputs/000077500000000000000000000000001414604301300162015ustar00rootroot00000000000000dmrgpp-6.02/TestSuite/inputs/AThreeHalvesOneHalfDagger_AOneHalfOneHalf.txt000066400000000000000000000623201414604301300265610ustar00rootroot00000000000000TSPOperator=raw RAW_MATRIX 64 64 (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.4714045208,0) (-0.3333333333,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.6666666666,0) (-0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.4714045208,0) (0,0) (0,0.6666666666) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0.3333333333) (0,0) (0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.39932744,0) (0,0) (0,0) (0.5647342813,0.2399264728) (0,0.1696536359) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.4714045208,0) (0.3333333333,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.6666666666,0) (-0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.2823671407,0.1199632364) (0,0) (0,0) (0.4714045208,0) (0.05096619263,0.1199632364) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,-0.1696536359) (0,0) (0,0) (-0.1019323853,0.2399264728) (-0.07207708086,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.4714045208,0) (-0.6666666666,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.3333333333,0) (0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.4714045208,0) (0,0) (0,0) (-0.3333333333,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.4714045208,0) (0,-0.3333333333) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,-0.6666666666) (-0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.6666666666,0) (0,0) (0,0) (-0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.3807150368,0) (0,0) (-0.5727488837,-0.1757847979) (0,0) (-0.07579244073,0.1696536359) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.2863744419,-0.08789239896) (0,0) (0.4714045208,0) (0,0) (0.01784471903,-0.1451112758) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.07579244075,-0.1696536359) (0,0) (-0.03568943806,-0.2902225517) (0,0) (-0.09068948402,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.2357022604,0) (0,0) (0.2357022604,0) (-0.2357022604,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.4714045208,0) (0,0) (-0.4714045208,0) (0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.2357022604,0) (0,0) (-0.2357022604,0) (0.2357022604,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.4714045208,0) (0,0) (-0.3333333333,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.4714045208,0) (0,0) (0.6666666666,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.6666666666,0) (0,0) (-0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.3333333333,0) (0,0) (0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.4714045208,0) (0.6666666666,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.3333333333,0) (0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.2357022604,0) (0,0.2357022604) (0.2357022604,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,-0.2357022604) (0.2357022604,0) (0,-0.2357022604) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.4714045208,0) (0,-0.4714045208) (-0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.4714045208,0) (0,0.6666666666) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0.3333333333) (0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.4714045208,0) (-0.6666666666,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.3333333333,0) (0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.4714045208,0) (0,-0.6666666666) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,-0.3333333333) (0.4714045208,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/ConfigBase.psiTag000066400000000000000000000076001414604301300213550ustar00rootroot00000000000000# # Format of psiTag files is described in PsimagLite/scripts/PsiTag.pm # # PsimagLite support is needed by DMRG++ dependency PsimagLite = ( LDFLAGS = -L../../PsimagLite/lib -L../../../PsimagLite/lib -lpsimaglite ) # Compiler to use. For clang++ see commented out line. # Note that -mtune=native -march=native should not be # used if you intend your executable to run in machines # other than the one your are compiling on compilerCPP GNU = CXX = g++ -frecord-gcc-switches compilerCPP CLANG = CXX = clang++ compilerCPPOptions ansi = ( # We're using ansi C++ CPPFLAGS += -pedantic -std=c++11 # Enable warnings and treat warnings as errors CPPFLAGS += -Wall -Wendif-labels ) # Treat warnings as errors # (hdf5 on Ubuntu does not pass this, so it's # commented out by default now) compilerCPPOptions Werror = CPPFLAGS += -Werror # This enables additional debugging compilerCPPOptions AdditionalDebugging = ( CPPFLAGS += -D_GLIBCXX_DEBUG # -D_GLIBCXX_PROFILE ) # This makes the code use long instead of short integers useshort = CPPFLAGS +=-DUSE_SHORT # This makes the code use float instead of double .= CPPFLAGS += -DUSE_FLOAT # This enables signals .= CPPFLAGS +=-DUSE_SIGNALS # This enables gsl support dependency GSL = ( CPPFLAGS +=-DUSE_GSL LDFLAGS += -lgsl -lgslcblas ) # This enables the custom allocator (use only for debugging) compilerCPPOptions USE_CUSTOM_ALLOCATOR = ( CPPFLAGS += -DUSE_CUSTOM_ALLOCATOR ) # Disable KronUtil compilerCPPOptions NotKronUtil = ( CPPFLAGS += -DDO_NOT_USE_KRON_UTIL ) #Add directory to linker where libkronutil.a resides linkerOptions KronUtil = ( LDFLAGS += -LKronUtil ) #Enable SU(2) #You will also need to run perl configure.pl production 0 1 #to rebuild the Makefile .= CPPFLAGS += -DENABLE_SU2 #IoNg needs HDF5 libraries dependency HDF5 = ( CPPFLAGS += -I/usr/include/hdf5/serial LDFLAGS += -L/usr/lib/x86_64-linux-gnu/hdf5/serial/ LDFLAGS += -lhdf5_hl_cpp -lhdf5_cpp -lhdf5_hl -lhdf5 ) #This enables boost support that is needed for Ainur dependency Boost = ( CPPFLAGS += -DUSE_BOOST ) #This enables the PLUGIN_SC repository dependency PluginSc = ( CPPFLAGS += -DPLUGIN_SC \\ -I ../../../dmrgppPluginSc/src \\ -I ../../dmrgppPluginSc/src \\ -I ../../../dmrgppPluginSc/include \\ -I ../../dmrgppPluginSc/include CPPFLAGS += -fopenmp #This adds linkage for the PLUGIN_SC libraries LDFLAGS += -L../../dmrgppPluginSc/src -L../../../dmrgppPluginSc/src LDFLAGS += -ldmrgppPluginSc LDFLAGS += -lgomp LDFLAGS += -fopenmp ) # This disables debugging compilerCPPOptions NDEBUG = CPPFLAGS += -DNDEBUG # Optimization level here compilerCPPOptions Optimize3 = ( CPPFLAGS += -O3 ) # This enables partial debugging (make sure to comment out previous line) compilerCPPOptions Symbols3 = ( CPPFLAGS += -g3 ) # Here add your lapack and blas libraries or say NO_LAPACK dependency LAPACK = ( # If on MacOs please say LDFLAGS += -framework Accelerate LDFLAGS += -llapack ) dependency BLAS = ( LDFLAGS += -lblas ) dependency pthreads = ( # Here add -lpthread if threading is needed and also # set -DUSE_PTHREADS below LDFLAGS += -lpthread # Enable pthreads CPPFLAGS += -DUSE_PTHREADS ) addto basics = ( ) default flavor = production default compiler = < compilerCPP GNU group basics = ( < addto basics < dependency PsimagLite < default compiler < compilerCPPOptions ansi < linkerOptions KronUtil < dependency HDF5 < dependency LAPACK < dependency BLAS < dependency Boost STRIP_COMMAND = strip ) flavor production = ( < group basics < dependency pthreads < compilerCPPOptions Optimize3 < compilerCPPOptions NDEBUG ) flavor debug = ( < group basics STRIP_COMMAND = gdb-add-index < compilerCPPOptions Symbols3 < compilerCPPOptions Werror ) flavor callgrind = ( < flavor debug < compilerCPPOptions Optimize3 < compilerCPPOptions NDEBUG ) flavor drd = ( < flavor debug < dependency pthreads ) flavor helgrind = < flavor drd flavor pluginsc = ( < flavor production < dependency PluginSc ) dmrgpp-6.02/TestSuite/inputs/KompileRig.psiTag000066400000000000000000000005421414604301300214150ustar00rootroot00000000000000flavor KompileRig0 = ( < flavor production < compilerCPP CLANG CPPFLAGS += -DUSE_FLOAT CPPFLAGS += -Werror ) flavor KompileRig1 = ( < flavor production CPPFLAGS += -DUSE_FLOAT CPPFLAGS += -Werror ) flavor KompileRig2 = ( < flavor production < compilerCPP CLANG CPPFLAGS += -Werror ) flavor KompileRig3 = ( < flavor production CPPFLAGS += -Werror ) dmrgpp-6.02/TestSuite/inputs/callgrind.spec000066400000000000000000000000241414604301300210100ustar00rootroot00000000000000 n n callgrind dmrgpp-6.02/TestSuite/inputs/debug.spec000066400000000000000000000000201414604301300201330ustar00rootroot00000000000000 n n debug dmrgpp-6.02/TestSuite/inputs/descriptions.txt000066400000000000000000000431741414604301300214610ustar00rootroot00000000000000#TAGSTART DO NOT REMOVE THIS TAG List of Standard Tests for DMRG++ version 2.0.0 (See Notation in the doc directory) Tests *with* SU(2) symmetry: 0) Hubbard Model One Orbital (HuStd-1orb) on a chain (CubicStd1d) for U=1 with 8+8 sites. INF(100)+7(100)-7(100)-7(100)+7(100) 1) Hubbard Model One Orbital (HuStd-1orb) on a chain (CubicStd1d) for U=2 with 8+8 sites INF(60)+7(100)-7(100)-7(100)+7(100) 2) Hubbard Model One Orbital (HuStd-1orb) on a chain (CubicStd1d) for U=2 with 8+8 sites INF(100)+7(200)-7(200)-7(200)+7(200) [to calculate correlations] 3) Hubbard Model One Orbital (HuStd-1orb) on a ladder (CubicStd2d) for U=0 with 8+8 sites INF(100)+7(200)-7(200)-7(200)+7(200) [to calculate correlations] 4) Hubbard Model One Orbital (HuStd-1orb) on a chain (CubicStd1d) for U=1 with 8+8 sites. INF(60)+7(100)-7(100)-7(100)+7(100) test for TimeStepTargeting "creation op" 5) Hubbard Model One Orbital (HuStd-1orb) on a chain (CubicStd1d) for U=1 with 8+8 sites. INF(60)+7(100)-7(100)-7(100)+7(100) test for TimeStepTargeting "identity op" 6) Hubbard Model One Orbital (HuStd-1orb) on a chain (CubicStd1d) for U=1 V=-0.5 with 30+30 sites. INF(226)+29(226)-29(226)-29(226)+29(226) with angularMomentum j=5 (as in the literature) 7) Like test 4 but with many times 8) Like test 5 but with many times 9) Time Evolution 10) Time Evolution 11) Hubbard Ladder 12) Extended hubbard ladder 15) LadderBath without time advancement 18) Time Evolution at U>0 with 6 site chain 20) Heisenberg Model Spin 1/2 (HeStd-F12) on a chain (CubicStd1d) for J=1 with 16+16 sites INF(60)+7(100)-7(100)-7(100)+7(100) 21) Heisenberg Model Spin 1/2 (HeStd-F12) on a chain (CubicStd1d) for J=2.5 with 8+8 sites INF(100)+7(200)-7(200)-7(200)+7(200) 22) Heisenberg Model Spin 1/2 (HeStd-F12) on a chain (CubicStd1d) for J=1.0 with 8+8 sites INF(100)+7(200)-7(200)-7(200)+7(200)+7(200)+1(200) [to calculate correlations] 23) Heisenberg Model Spin 1/2 (HeStd-F12) on a chain (CubicStd1d) for J=1.0 with 8+8 sites checkpointA 24) Heisenberg Model Spin 1/2 (HeStd-F12) on a chain (CubicStd1d) for J=1.0 with 8+8 sites checkpointB 25) Heisenberg Model Spin 1/2 (HeStd-F12) on a chain (CubicStd1d) for J=2.5 with 8+8 sites INF(100)+7(200)-7(200)-7(200)+7(200) To check the WFT 26) Fig 6(c) of PhysRevB48-10345 28) Heisenberg Model Spin 1/2 (HeStd-F12) on a chain (CubicStd1d) for J=1.0 with 8 sites 29) S(q,omega) cut at omega=2.0 for Heisenberg Model Spin 1/2 (HeStd-F12) on a chain (CubicStd1d) for J=1.0 with 8 sites 30) Implicit loops 32) TSPSites=[%c] #37) INVALID Like 29 but with correctionvectorimagonly #27 to 39 are reserved for Heisenberg spin 1/2 40) Fe-based Superconductors model (HuFeAS-2orb) on a ladder (LadderFeAs) with U=0 J=0 with 4+4 sites INF(60)+7(100)-7(100)-7(100)+7(100) 41) Fe-based Superconductors model (HuFeAS-2orb) on a ladder (LadderFeAs) with U=1 J=1 with 4+4 sites INF(60)+7(100)-7(100)-7(100)+7(100) 50) paper40 InternalControlNumber: 40 Walltime (in seconds, approx.): 620 Model: HubbardOneBand Do you need to run observe? No Do you need to run scripts? Yes Succint Description Of Features this test tests: Time Evolution in-situ measurement Figure* (if any): 2 (b) Table* (if any): N/A Page* where more or less this feature is used: 056706-4 [* Refers to published version.] 52) paper40 InternalControlNumber: 40 Walltime (in seconds, approx.): 168 Model: HubbardOneBand Do you need to run observe? No Do you need to run scripts? Yes Succint Description Of Features this test tests: Time Evolution in-situ measurement Figure* (if any): 3 (b) Table* (if any): N/A Page* where more or less this feature is used: 056706-5 [* Refers to published version.] 60) t-J one-Orbital (TjMultiOrb with Orbitals=1) on a chain with t=1 J=1 with 16+16 sites INF(60)+7(100)-7(100)-7(100)+7(100) 61) Q0 and Q1: two sectors 62) t-J one-Orbital (TjMultiOrb with Orbitals=1) on a chain with t=-1.0 J=0.25 with 8 sites 63) S(q,omega) cut at omega=0.2 for t-J one-Orbital (TjMultiOrb with Orbitals=1) on a chain with t=-1.0 J=0.25 with 8 sites 65) Paper 29, Table 1, column 1 InternalControlNumber: 29 NumberInThisSeries: 0 TemporaryAssignedNumber: N/A TestNumber: 65 Walltime (in seconds, approx.): 44 Model: HubbardOneBand Do you need to run observe? No Do you need to run scripts? No Succint Description Of Features this test tests: 60-site chain Figure* (if any): N/A Table* (if any): 1, column 1 Page* where more or less this feature is used: 2230 [* Refers to published version.] 66) Paper 29, Table 1, column 4 InternalControlNumber: 29 NumberInThisSeries: 1 TemporaryAssignedNumber: N/A Walltime (in seconds, approx.): 100 Model: HubbardOneBand Do you need to run observe? No Do you need to run scripts? No Succint Description Of Features this test tests: SU(2) j=0 Figure* (if any): N/A Table* (if any): 1, column 4 Page* where more or less this feature is used: 2230 [* Refers to published version.] 67) Paper 29, Table 1, column 7 InternalControlNumber: 29 NumberInThisSeries: 1 TemporaryAssignedNumber: N/A Walltime (in seconds, approx.): 120 Model: HubbardOneBand Do you need to run observe? No Do you need to run scripts? No Succint Description Of Features this test tests: SU(2) j=5, vectorwithoffsets Figure* (if any): N/A Table* (if any): 1, column 7 Page* where more or less this feature is used: 2230 [* Refers to published version.] 80) Heisenberg spin 1 with 6 sites 82) Heisenberg spin 1 with 6 sites AnistropyD=4 84) Heisenberg spin 1 with 6 sites J = 0 AnistropyE=4 85) Heisenberg spin 1 with 6 sites J = 0 AnistropyD=AnistropyE=4 86) Heisenberg spin 1 with 6 sites AnistropyD=2.7 AnistropyE=3.1 #87 to 99 are reserved for Heisenberg spin 1 100) same as 0 but without su(2) symmetry 101) same as 1 but without su(2) symmetry #102) same as 2 but without su(2) symmetry <-- DISABLED DUE TO BUG (SEE GITHUBISSUES) 103) same as 3 but without su(2) symmetry 105) Hubbard Model One Orbital (HuStd-1orb) on a chain (CubicStd1d) for U=6 with 8 sites. 106) A^{-}(q,omega) cut at omega=-1.0 Hubbard Model One Orbital (HuStd-1orb) on a chain (CubicStd1d) for U=6 with 8 sites. 112) Like 2 but measures while growing environ 113) Like 2 but measures 2 data sets 120) TargetingExpresion: gs 121) TargetingExpression: sums of products from 120 126) TargetingExpresion with useComplex: gs 127) argetingExpresion with useComplex: from 126 #120 to 149 reserved for TargetingExpresion and related #150 to 199 reserved for testing the input system 150) Replacement 170) FermionSpinless 172) FermionSpinless with Delta #170-189 reserved for FermionSpinless 200) Time Evolution preparation ground state 201) Time Evolution proper 250) MultiTargeting 320) Fe-based Superconductors model on a chain 340) A test of the Fe-based Superconductors extended model 363) paper63 InternalControlNumber: 63 NumberInThisSeries: 0 Walltime (in seconds, approx.): 217 Model: FeAsBasedSc Do you need to run observe? yes Do you need to run scripts? yes Succint Description Of Features this test tests: twositedmrg, ss, onepoint Figure* (if any): Figure 4 Page* where more or less this feature is used: Page 5 [* Refers to published version.] 410) Postprocessing of time evolution for Hubbard model 467) paper67 InternalControlNumber: 67 DOI: https://dx.doi.org/10.1103/PhysRevB%2E96%2E024520 NumberInThisSeries: 0 Walltime (in seconds, approx.): 44 Model: FeAsBasedSc Do you need to run observe? yes Do you need to run scripts? yes Succint Description Of Features this test tests: Reproduce figure 1 curve for 0 hole doping (N-0) by doing the fourier transform of the si.sj matrix obtained from the observe code. Figure* (if any): Figure 1 Page* where more or less this feature is used: Page 4 [* Refers to published version.] #550 -- 599 AKLT 550) AKLT 600) Test on 6-site chain with U=10, standard Hubbard model. Tests the density and double occupation of a time vector, defined as exp(iHt) h d |gs>, where h a holon and d a doublon. This test was checked against Suzuki-Trotter with an independent code. 1000) Tests time evolution with 3 operators, which is more than the holon-doublon case, and hence non-trivial. 1200) Tj 1 orb with hopping = 1 and J = 0.3 dens = 0.5 1201) Tj 1 orb with hopping = 1 and J = 0.3 and W = -0.4 dens = 0.25 1300) SpinOrbitalModel 1302) 4 sites one symmetry 1304) 4 sites two symmetries 1306) Spinorbital: (Si.Sj)(Li.Lj)^2 #1301-1400 reserved for SpinOrbitalModel 1500) Figure 1 of METTS paper InternalControlNumber: 40 Walltime (in seconds, approx.): 430 Model: [as in the Model= line in the input] HubbardOneBand Do you need to run observe? No Do you need to run scripts? Yes Succint Description Of Features this test tests: METTS energy and density Figure* (if any): 1 Page* where more or less this feature is used: 245130-2 [* Refers to published version.] #1550) Same as 1500 with Suzuki-Trotter 1600) Kondo example with U=0 V=0 KondoJ = 0 SuperExchange=0 and hopping=1 1601) Kondo example with U=0 V=0 KondoJ = 0 SuperExchange=1 and hopping=0 1610) KondoEx2 with pairing interactions #1600 to 1699 reserved for Kondo 1800) Ancilla: Entangler Hamiltonian Heisenberg 6 sites 1801) Ancilla: Real Hamiltonian Heisenberg 6 sites 1810) Ancilla: Entangler Hamiltonian Heisenberg 6 sites Canonical 1811) Ancilla: Real Hamiltonian Heisenberg 6 sites Canonical 1814) Ancilla: Entangler Spin=1 1815) Ancilla: same as 1811 with exponential advance #1816) Ancilla Spin=1 1817) Same as 15 but periodic 1818) Same as 14 but 8 sites 1819) Ancilla Spin=1 1850) Ancilla canonical: Entangler Hamiltonian t-J 6 sites 1851) Ancilla canonical: Real Hamiltonian t-J 6 sites --> Restart from previous 1860) Ancilla canonical: Entangler Hamiltonian t-J 6 sites Canonical 1861) Ancilla canonical: Real Hamiltonian t-J 6 sites Canonical #1880) Ancilla grand canonical Hamiltonian t-J 6x2 sites: Entangler #1881) Ancilla grand canonical Hamiltonian t-J 6x2 sites: restart real #1852 to 1899 for tj Ancilla Tests #1900 to 1950 for Hubbard Ancilla Tests 1950) Ancilla entangler, fig 4 of paper 1951) Ancilla real H, fig 4 of paper 1954) Ancilla Hubbard Entangler 1955) Ancilla Hubbard evolution starting from 1954 #1952 to 1999 for Ancilla tests #2000) First Suzuki-Trotter test. The gs is time-evolved. #2001) Tests time evolution with 3 operators, which is more than the holon-doublon case, and #hence non-trivial. (Suzuki-Trotter) #2004) Hubbard Model One Orbital (HuStd-1orb) on a chain (CubicStd1d) for U=1 with 8+8 sites. # INF(60)+7(100)-7(100)-7(100)+7(100) test for TimeStepTargeting "creation op" (Suzuk-Trotter) #2008) Hubbard Model One Orbital (HuStd-1orb) on a chain (CubicStd1d) for U=1 with 8+8 sites. # INF(60)+7(100)-7(100)-7(100)+7(100) test for TimeStepTargeting "identity op"(Suzuk-Trotter) #2009) Time Evolution (Suzuki-Trotter) #2010) Time Evolution (Suzuki-Trotter) #2015) LadderBath without time advancement (Suzuki-Trotter) #2018) Time Evolution at U>0 with 6 site chain (Suzuki-Trotter) 2021) Tests time evolution with 3 operators, which is more than the holon-doublon case, and hence non-trivial. (Krylov) 2024) Hubbard Model One Orbital (HuStd-1orb) on a chain (CubicStd1d) for U=1 with 8+8 sites. INF(60)+7(100)-7(100)-7(100)+7(100) test for TimeStepTargeting "creation op" (Krylov) 2028) Hubbard Model One Orbital (HuStd-1orb) on a chain (CubicStd1d) for U=1 with 8+8 sites. INF(60)+7(100)-7(100)-7(100)+7(100) test for TimeStepTargeting "identity op" (Krylov) 2029) Time Evolution (Krylov) #2034) Reserved #2038) Reserved #2039) Reserved 2040) Time Evolution (Krylov) 2045) LadderBath without time advancement (Krylov) 2048) Time Evolution at U>0 with 6 site chain (Krylov) #2050) Reserved #2055) Reserved #2058) Reserved #2060) Test on 6-site chain with U=10, standard Hubbard model. Tests the density and double occupation of a time vector, defined as exp(iHt) h d |gs>, where h a holon and d a doblon (Suzuki-Trotter) 2061) Test on 6-site chain with U=10, standard Hubbard model. Tests the density and double occupation of a time vector, defined as exp(iHt) h d |gs>, where h a holon and d a doblon (Krylov) #2062) Reserved #2070) Time Evolution (Suzuki-Trotter) 2071) Time Evolution (Krylov) #2072) Reserved 2080) GS for 2081 2081) Time Evolution with GeometryValueModifier 2100) Entangler Phase 2101) Hot Ancilla Phase 2102) CV Phase #2103-2199 --> Reserved for hot spectra 2300) Graphene 2500) Su3Model 2510) Real version of 2500 2700) Excited > 1 3000) Dynamics: Local Green's function at site 8 for a non-interacting one-band Hubbard model using correction vector algorithm (type=0). 3001) Dynamics: Local Green's function at site 8 for a non-interacting one-band Hubbard model using correction vector algorithm (type=1). 3002) Dynamics: Local Green's function at site 8 for a one-band Hubbard model for U=10 using correction vector algorithm (type=0). 3003) Dynamics: Local Green's function at site 8 for a one-band Hubbard model for U=10 using correction vector algorithm (type=1). 3004) Dynamics: Non-local Green's function at sites (15,0) for a non-interacting one-band Hubbard model using correction vector algorithm (type=0). 3005) Dynamics: Non-local Green's function at sites (15,0) for a non-interacting one-band Hubbard model using correction vector algorithm (type=1). 3006) Dynamics: Non-local Green's function at sites (15,0) for a non-interacting one-band Hubbard model using correction vector algorithm (type=2). 3007) Dynamics: Non-local Green's function at sites (15,0) for a non-interacting one-band Hubbard model using correction vector algorithm (type=3). 3008) Dynamics: Non-local Green's function at sites (15,0) for a one-band Hubbard model for U=10 using correction vector algorithm (type=0). 3009) Dynamics: Non-local Green's function at sites (15,0) for a one-band Hubbard model for U=10 using correction vector algorithm (type=1). 3010) Dynamics: Non-local Green's function at sites (15,0) for a one-band Hubbard model for U=10 using correction vector algorithm (type=2). 3011) Dynamics: Non-local Green's function at sites (15,0) for a one-band Hubbard model for U=10 using 3020) Correction Vector 1/n: gs 3021) Correction Vector 1/n: starting from 3020 #3100-3299 manyOmegas.cpp 3100) Ground state for manyOmegas #3101 input dollarized #3500) Chebyshev test ground state #3501) ChebyshevTargeting from 3500 #correction vector algorithm (type=3). 3510) Heisenberg chain Szz(q,omega) gs 3511) Chebyshev from 3510 Szz(k, omega) c=0.1 d=1.83004 ./dmrg -f input3511.inp "," 3512) Chebyshev from 3510 Szz(k, omega) c=0.2 d=4.64758 ./dmrg -f input3511.inp "," 3530) t-J chain gs undoped #3531) Chebyshev from 3530 Szz(k, omega) c=0.07 d=-0.2508063720171 ./dmrg -f input3511.inp "," 3532) Chebyshev from 3530 A-(k, omega) c=0.07 d=-0.2508063720171 ./dmrg -f input3511.inp "," #4000) KMH model simple test --> BROKEN, ISSUE? #4001) KMH model simple test 8 sites BROKEN, ISSUE? #4002 to 4099 are hereby reserved for the KMH model. #4100-4200) <--- reserved for kron 4300) BaFe2S3 FeS two-leg ladder two-orbital Hubbard 4500) HeisenbergAnisotropic 4600) Paper72 InternalControlNumber: 72 DOI: Will be given when published NumberInThisSeries: 0 Walltime (in seconds, approx.): Model: HubbardOneBandExtendedSuper Do you need to run observe? ??? Do you need to run scripts? yes Succint Description Of Features this test tests: Ground state for 4601 Figure* (if any): Page* where more or less this feature is used: Will be given when published [* Refers to published version.] 4601) Paper72 InternalControlNumber: 72 DOI: Will be given when published NumberInThisSeries: 1 Walltime (in seconds, approx.): Model: HubbardOneBandExtendedSuper Do you need to run observe? ??? Do you need to run scripts? yes Succint Description Of Features this test tests: Dynamics for Figure* (if any): Page* where more or less this feature is used: Will be given when published [* Refers to published version.] 4650) HeisenbergMix: spin 1 middle, spin 1/2 on borders 4700) Hubbard Holstein 4710) Hubbard Holstein SSH 4720) Holstein Thin # 4711 to 4799 reserved for Hubbard Holstein with and without SSH 4800) HubbardOneBandRashbaSOC 4804) RashbaSOC chain with complex 4808) RashbaSOC full geometry with complex #5000 TOO BIG Hubbard model 1 orbital on a 32x2 ladder with m up to 800. It has 14 electrons up and 14 electrons down (or 2+2 "holes", 16+16 being the "half filled" case). U=2 #5010) Takes too long Hubbard model 1 orbital on a 12x12 square with m up to 10000. #It has 68 electrons up and 68 electrons down (or 4+4 "holes", 72+72 being #the "half filled" case). U=2 #5020) Small input for performance testing #5030) Medium input for performance testing #5040) Large input for performance testing #5000 to 5499 reserved for performance work 5500) gs for RIXS test 5501) RIXS correction vector 5502) RIXS static 5503) RIXS dynamic with Krylov starting from 5502 5504) RIXS dynamic with Chebyshev starting from 5502 omega' := (omega − b) /a = c*omega+d H' := (H − b) /a = c*H+d a := (E max − E min ) /(2 − ε) b := (E max + E min ) /2 c := 1/a = (2 − ε)/(Emax − Emin ) d := -b/a = -[(2 − ε)/2]* [(Emax + Emin )/(Emax − Emin )] epsilon=0.05 For input5500.inp Emax = 1.45828 Emin = -2.81233 c===> 0.4566 d===> 0.3091 #5505-5599 reserved for RIXS 5600) ./dmrg -f input.inp 'n$.txt' feature GS 5601) ./dmrg -f input.inp 'n$.txt' feature 5700) TargetingCorrection small test 5800) SOC with Jz symmetry Ground State, using "fat site" 5802) SOC test 5810) 3-orbital Hubbard model Ground State, using "fat site" 6000) Kitaev Model Test 6001) Kitaev Model Extended test 6005) Kitaev with magnetic field and fixLegacyBugs 6010) Kitaev with Gammas #6010) Kitaev 6020) Kitaev with Charge 6500) Hybrid space-k ladders 6700) FindSymmetrySector= awesome predicate #7000) Chemical H: Gauge spin #7001-7500 reserved for ChemicalH #TAGEND DO NOT REMOVE THIS TAG dmrgpp-6.02/TestSuite/inputs/input0.ain000066400000000000000000000010131414604301300201040ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind=chain; GeometryOptions="ConstantValues"; dir0:Connectors=[1.0]; hubbardU=[1.0, ...]; potentialV=[0.0, ...]; Model="HubbardOneBand"; SolverOptions="none"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data0.txt"; InfiniteLoopKeptStates=100; FiniteLoops=[ [7, 100, 0], [-7, 100, 0], [-7, 100, 0], [7, 100, 0]]; TargetElectronsUp=8; TargetElectronsDown=8; TargetSpinTimesTwo=0; UseSu2Symmetry=1; dmrgpp-6.02/TestSuite/inputs/input0.inp000066400000000000000000000011541414604301300201310ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data0.txt InfiniteLoopKeptStates=100 FiniteLoops 4 7 100 0 -7 100 0 -7 100 0 7 100 0 TargetElectronsUp=8 TargetElectronsDown=8 TargetSpinTimesTwo=0 UseSu2Symmetry=1 dmrgpp-6.02/TestSuite/inputs/input1.ain000066400000000000000000000010231414604301300201060ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors = [1.0]; hubbardU = [2.0, ...]; potentialV = [0.0, ...]; Model="HubbardOneBand"; SolverOptions="none"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data1.txt"; InfiniteLoopKeptStates=60; FiniteLoops=[ [7, 100, 0], [-7, 100, 0], [-7, 100, 0], [7, 100, 0 ] ]; TargetElectronsUp=8; TargetElectronsDown=8; TargetSpinTimesTwo=0; UseSu2Symmetry=1; dmrgpp-6.02/TestSuite/inputs/input1.inp000066400000000000000000000011511414604301300201270ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data1.txt InfiniteLoopKeptStates=60 FiniteLoops 4 7 100 0 -7 100 0 -7 100 0 7 100 0 TargetElectronsUp=8 TargetElectronsDown=8 TargetSpinTimesTwo=0 UseSu2Symmetry=1 dmrgpp-6.02/TestSuite/inputs/input10.ai000066400000000000000000000014611414604301300200160ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[1.0]; hubbardU=[0,...]; potentialV=[0.0,...]; Model="HubbardOneBand"; SolverOptions="TimeStepTargeting,vectorwithoffsets"; Version="6ce41a4b7dfa08978e53fa756f7f139e2fb18251"; OutputFile="data10"; InfiniteLoopKeptStates=150; FiniteLoops=[ [ 7, 200, 0], [-14, 200, 1], [ 14, 200, 1], [-14, 200, 1], [ 14, 200, 1]]; TargetElectronsUp=8; TargetElectronsDown=8; TSPTau=0.1; TSPTimeSteps=5; TSPAdvanceEach=4; TSPAlgorithm="Krylov"; TSPSites=[10, 11]; TSPLoops=[0, 0]; TSPProductOrSum="product"; GsWeight=0.1; TSPOperator="expression"; OperatorExpression="c?0'*c?1*c?0+c?1'*c?0*c?1"; TSPOperator="expression"; OperatorExpression="(-1.0)*c?0*c?1'*c?0'+(-1.0)*c?1*c?0'*c?1'"; dmrgpp-6.02/TestSuite/inputs/input10.inp000066400000000000000000000021261414604301300202120ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,vectorwithoffsets Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data10.txt InfiniteLoopKeptStates=150 FiniteLoops 9 7 200 0 -7 200 1 -7 200 1 7 200 1 7 200 1 -7 200 1 -7 200 1 7 200 1 7 200 1 TargetElectronsUp=8 TargetElectronsDown=8 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 2 10 11 TSPLoops 2 0 0 TSPProductOrSum=product GsWeight=0.1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input100.inp000066400000000000000000000011371414604301300202730ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=264e71039cc5a47c6f1f375f2f9baaffd94e94fa OutputFile=data100.txt InfiniteLoopKeptStates=100 FiniteLoops 4 7 100 0 -7 100 0 -7 100 0 7 100 0 TargetElectronsUp=8 TargetElectronsDown=8 TargetSpinTimesTwo=0 dmrgpp-6.02/TestSuite/inputs/input1000.inp000066400000000000000000000062631414604301300203600ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=TimeStepTargeting Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=data1000.txt InfiniteLoopKeptStates=256 FiniteLoops 101 3 256 0 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 -3 256 1 -3 256 1 3 256 1 3 256 1 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=6 TSPAlgorithm=Krylov TSPSites 3 4 5 3 TSPLoops 3 0 0 0 TSPProductOrSum=sum TSPUseQns=1 IsPeriodicX=0 Orbitals=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input101.inp000066400000000000000000000011341414604301300202710ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=nowft Version=356c507fd063201fd29fe86afaa269d0cad94162 OutputFile=data101.txt InfiniteLoopKeptStates=60 FiniteLoops 4 7 100 0 -7 100 0 -7 100 0 7 100 0 TargetElectronsUp=8 TargetElectronsDown=8 TargetSpinTimesTwo=0 dmrgpp-6.02/TestSuite/inputs/input102.inp000066400000000000000000000012111414604301300202660ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=18846b60983586e6185bd2d797e7d639cc92ce0e OutputFile=data102.txt InfiniteLoopKeptStates=100 FiniteLoops 6 7 100 0 -7 100 0 -7 100 0 7 100 1 7 100 1 -2 100 1 TargetElectronsUp=8 TargetElectronsDown=8 TargetSpinTimesTwo=0 UseSu2Symmetry=1 Threads=2 dmrgpp-6.02/TestSuite/inputs/input103.inp000066400000000000000000000015511414604301300202760ustar00rootroot00000000000000TotalNumberOfSites=32 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues LadderLeg=2 Connectors 1 1.0 Connectors 1 1.0 hubbardU 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 64 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=aec8964f7a782d87d587c27276acd41760808139 OutputFile=data103.txt InfiniteLoopKeptStates=100 FiniteLoops 5 15 400 0 -15 400 0 -15 400 0 15 400 1 15 400 1 TargetElectronsUp=16 TargetElectronsDown=16 TargetSpinTimesTwo=0 Threads=2 dmrgpp-6.02/TestSuite/inputs/input105.inp000066400000000000000000000007421414604301300203010ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1 Model=HubbardOneBand hubbardU 8 6 6 6 6 6 6 6 6 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=128 FiniteLoops 5 3 200 0 -6 200 0 6 200 0 -6 200 0 6 200 1 TargetElectronsUp=4 TargetElectronsDown=4 Threads=1 SolverOptions=twositedmrg Version=version TruncationTolerance=1e-7 LanczosEps=1e-7 OutputFile=data105.txt Orbitals=1 dmrgpp-6.02/TestSuite/inputs/input106.inp000066400000000000000000000017061414604301300203030ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1 Model=HubbardOneBand hubbardU 8 6 6 6 6 6 6 6 6 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=128 FiniteLoops 4 -6 200 2 6 200 2 -6 200 2 6 200 2 TargetElectronsUp=4 TargetElectronsDown=4 Threads=1 SolverOptions=CorrectionVectorTargeting,twositedmrg,minimizeDisk,restart CorrectionA=0 Version=version RestartFilename=data105.txt TruncationTolerance=1e-7 LanczosEps=1e-7 TridiagonalEps=1e-7 OutputFile=data106.txt DynamicDmrgType=1 TSPSites 1 3 TSPLoops 1 1 TSPProductOrSum=sum CorrectionVectorFreqType=Real CorrectionVectorEta=0.08 CorrectionVectorAlgorithm=Krylov Orbitals=1 GsWeight=0.1 CorrectionVectorOmega=-1.0 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 #ci dmrg arguments= -p 12 ",," #ci CollectBrakets 0 dmrgpp-6.02/TestSuite/inputs/input11.ain000066400000000000000000000007721414604301300202010ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=12; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="ladder"; GeometryOptions="ConstantValues"; LadderLeg=2; dir0:Connectors=[1.0]; dir1:Connectors=[1.0]; hubbardU=[0.0,...]; potentialV=[0.0,...]; Model="HubbardOneBand"; SolverOptions="none"; Version="6b9dc12805519cb864e80fa0957129a010711116"; OutputFile="data11"; InfiniteLoopKeptStates=150; FiniteLoops=[ [ 5, 200, 0], [-10, 200, 0], [ 10, 200, 1], [ -1, 200, 1]]; TargetElectronsUp=6; TargetElectronsDown=6; Threads=2; dmrgpp-6.02/TestSuite/inputs/input11.inp000066400000000000000000000011561414604301300202150ustar00rootroot00000000000000TotalNumberOfSites=12 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues LadderLeg=2 Connectors 1 1.0 Connectors 1 1.0 hubbardU 12 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=6b9dc12805519cb864e80fa0957129a010711116 OutputFile=data11.txt InfiniteLoopKeptStates=150 FiniteLoops 6 5 200 0 -5 200 0 -5 200 0 5 200 1 5 200 1 -1 200 1 TargetElectronsUp=6 TargetElectronsDown=6 TargetSpinTimesTwo=0 Threads=2 dmrgpp-6.02/TestSuite/inputs/input112.inp000066400000000000000000000012351414604301300202750ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 Term0=Hopping DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data112.txt InfiniteLoopKeptStates=100 FiniteLoops 4 7 100 0 -14 100 0 14 100 0 -14 100 1 TargetElectronsUp=8 TargetElectronsDown=8 #ci observe arguments=",," dmrgpp-6.02/TestSuite/inputs/input113.inp000066400000000000000000000011651414604301300203000ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 Term0=Hopping DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=5.31 OutputFile=data113 InfiniteLoopKeptStates=100 FiniteLoops 4 7 100 0 -14 100 0 14 100 1 -14 100 1 TargetElectronsUp=8 TargetElectronsDown=8 #ci observe arguments=",," dmrgpp-6.02/TestSuite/inputs/input12.ain000066400000000000000000000013201414604301300201700ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=12; NumberOfTerms=2; gt0:DegreesOfFreedom=1; gt0:GeometryKind="ladder"; gt0:GeometryOptions="ConstantValues"; gt0:LadderLeg=2; gt0:dir0:Connectors=[1.0]; gt0:dir1:Connectors=[1.0]; gt1:DegreesOfFreedom=1; gt1:GeometryKind="ladder"; gt1:GeometryOptions="ConstantValues"; gt1:LadderLeg=2; gt1:dir0:Connectors=[6]; gt1:dir1:Connectors=[6]; hubbardU=[0.0,...]; potentialV=[0.0,...]; Model="HubbardOneBandExtended"; SolverOptions="none"; Version="6b9dc12805519cb864e80fa0957129a010711116"; OutputFile="data12"; InfiniteLoopKeptStates=150; FiniteLoops=[ [ 5, 200, 0], [-10, 200, 0], [ 10, 200, 1], [ -1, 200, 1]]; TargetElectronsUp=6; TargetElectronsDown=6; TargetSpinTimesTwo=0; Threads=2; dmrgpp-6.02/TestSuite/inputs/input12.inp000066400000000000000000000013471414604301300202200ustar00rootroot00000000000000TotalNumberOfSites=12 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues LadderLeg=2 Connectors 1 1.0 Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues LadderLeg=2 Connectors 1 6 Connectors 1 6 hubbardU 12 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBandExtended SolverOptions=none Version=6b9dc12805519cb864e80fa0957129a010711116 OutputFile=data12.txt InfiniteLoopKeptStates=150 FiniteLoops 6 5 200 0 -5 200 0 -5 200 0 5 200 1 5 200 1 -1 200 1 TargetElectronsUp=6 TargetElectronsDown=6 TargetSpinTimesTwo=0 Threads=2 dmrgpp-6.02/TestSuite/inputs/input120.ain000066400000000000000000000007201414604301300202530ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[1.0]; #Model params hubbardU=[0.0, ...]; potentialV=[0.0,...]; Model="HubbardOneBand"; SolverOptions="twositedmrg"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data120"; InfiniteLoopKeptStates=100; FiniteLoops=[[7, 200, 0], [-14, 200, 0], [ 14, 200, 0]]; TargetElectronsUp=8; TargetElectronsDown=8; dmrgpp-6.02/TestSuite/inputs/input1200.inp000066400000000000000000000013651414604301300203600ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.3 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.3 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 Model=TjMultiOrb Orbitals=1 potentialV 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 SolverOptions=none Version=v2.6 OutputFile=data1200.txt InfiniteLoopKeptStates=100 FiniteLoops 4 3 100 0 -3 100 0 -3 100 0 3 100 0 TargetElectronsUp=4 TargetElectronsDown=4 dmrgpp-6.02/TestSuite/inputs/input1201.inp000066400000000000000000000013661414604301300203620ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.3 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.3 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -0.4 Model=TjMultiOrb Orbitals=1 potentialV 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 SolverOptions=none Version=v2.6 OutputFile=data1201.txt InfiniteLoopKeptStates=100 FiniteLoops 4 3 100 0 -3 100 0 -3 100 0 3 100 0 TargetElectronsUp=2 TargetElectronsDown=2 dmrgpp-6.02/TestSuite/inputs/input121.ain000066400000000000000000000012111414604301300202500ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[1.0]; #Model params hubbardU=[0.0, ...]; potentialV=[0.0,...]; Model="HubbardOneBand"; SolverOptions="restart,twositedmrg,TargetingExpression,fixLegacyBugs"; RestartFilename="data120"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; InfiniteLoopKeptStates=100; FiniteLoops=[ [-14, 200, 2], [ 14, 200, 2]]; TargetElectronsUp=8; TargetElectronsDown=8; Pvectors=1; string P0="c'[5]*c[6]*|gs>+c'[6]*c[7]*|gs>"; GsWeight=0.2; OutputFile="data121"; #ci dmrg arguments= -p 12 "" #ci CollectBrakets 0 dmrgpp-6.02/TestSuite/inputs/input121.inp000066400000000000000000000007361414604301300203020ustar00rootroot00000000000000linSize 8 jvalues 8 8 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 options nowft,noSu2 version 247b335fe1542909b90be8647456bfd8fd56191c outputfile data121.txt InfiniteLoopKeptStates 100 FiniteLoops 4 7 200 0 -7 200 0 -7 200 0 7 200 0 QNS 3 0.5 0.5 0 dmrgpp-6.02/TestSuite/inputs/input122.inp000066400000000000000000000023461414604301300203020ustar00rootroot00000000000000linSize 16 jvalues 16 16 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 options wft,noSu2 version 247b335fe1542909b90be8647456bfd8fd56191c outputfile data122.txt InfiniteLoopKeptStates 60 FiniteLoops 4 15 100 0 -15 100 0 -15 100 0 15 100 0 QNS 3 0.5 0.5 0 dmrgpp-6.02/TestSuite/inputs/input123.inp000066400000000000000000000007341414604301300203020ustar00rootroot00000000000000linSize 8 jvalues 8 8 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 2.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 options wft,noSu2 version 247b335fe1542909b90be8647456bfd8fd56191c outputfile data123.txt InfiniteLoopKeptStates 100 FiniteLoops 4 7 200 0 -7 200 0 -7 200 0 7 200 0 QNS 3 0.5 0.5 0 dmrgpp-6.02/TestSuite/inputs/input126.ain000066400000000000000000000007331414604301300202650ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[1.0]; #Model params hubbardU=[0.0, ...]; potentialV=[0.0,...]; Model="HubbardOneBand"; SolverOptions="twositedmrg,useComplex"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data126"; InfiniteLoopKeptStates=100; FiniteLoops=[[7, 200, 0], [-14, 200, 0], [ 14, 200, 0]]; TargetElectronsUp=8; TargetElectronsDown=8; dmrgpp-6.02/TestSuite/inputs/input127.ain000066400000000000000000000012411414604301300202610ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[1.0]; #Model params hubbardU=[0.0, ...]; potentialV=[0.0,...]; Model="HubbardOneBand"; SolverOptions="restart,twositedmrg,TargetingExpression,fixLegacyBugs,useComplex"; RestartFilename="data126"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; InfiniteLoopKeptStates=100; FiniteLoops=[ [-14, 200, 2], [ 14, 200, 2]]; TargetElectronsUp=8; TargetElectronsDown=8; Pvectors=1; string P0="(2+-4i)*c'[5]*c[6]*|gs>+7.2i*c'[6]*c[7]*|gs>"; GsWeight=0.2; OutputFile="data120"; #ci dmrg arguments= -p 12 "" #ci CollectBrakets 0 dmrgpp-6.02/TestSuite/inputs/input13.inp000066400000000000000000000011511414604301300202120ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=bathedcluster GeometryOptions=ConstantValues LadderLeg=2 BathSitesPerSite=1 Connectors 1 1.0 Connectors 1 1.0 Connectors 1 0.5 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=lanczosAllowsZero Version=264e71039cc5a47c6f1f375f2f9baaffd94e94fa OutputFile=data13.txt InfiniteLoopKeptStates=256 FiniteLoops 10 3 256 0 -3 256 0 -3 256 0 3 256 0 3 256 0 -3 256 0 -3 256 0 3 300 1 3 300 1 -1 300 1 TargetElectronsUp=3 TargetElectronsDown=3 TargetSpinTimesTwo=0 dmrgpp-6.02/TestSuite/inputs/input130.ain000066400000000000000000000014701414604301300202570ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=2; gt0:DegreesOfFreedom=1; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; gt1:DegreesOfFreedom=1; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1.0]; #Model params Model="Heisenberg"; int HeisenbergTwiceS=1; SolverOptions="truncationNoSvd,twositedmrg,TargetingExpression,OperatorsChangeAll"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data130"; InfiniteLoopKeptStates=100; FiniteLoops=[[7, 110, 0], [-14, 120, 0], [ 14, 130, 0], [-14, 140, 0], [ 14, 150, 0], [-14, 160, 0], [ 14, 170, 0], [-14, 180, 0], [ 14, 190, 0]]; int TargetSzPlusConst=8; Pvectors=1; GsWeight=0.3; string P0="splus[8]*|gs>"; #ci observe arguments=",," dmrgpp-6.02/TestSuite/inputs/input1300.ain000066400000000000000000000015431414604301300203400ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=5; # S.S gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; # L.L gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1.0]; # (L.L)^2 gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[1.0]; # (L.L)(S.S) gt3:GeometryKind="chain"; gt3:GeometryOptions="ConstantValues"; gt3:dir0:Connectors=[1.0]; # For now J3SL=0 gt4:GeometryKind="chain"; gt4:GeometryOptions="ConstantValues"; gt4:dir0:Connectors=[0]; #Model params Model="SpinOrbital"; SpinTwiceS=2; OrbitalTwiceS=2; LambdaOne=0.123; LambdaTwo=0.456; SolverOptions="twositedmrg"; Version="5.77"; OutputFile="data1300"; InfiniteLoopKeptStates=50; FiniteLoops=[[3, 100, 0], [-6, 100, 0], [ 6, 100, 0]]; # TargetSz = Sz + Lz + (s + l)*N TargetSzPlusConst=16; dmrgpp-6.02/TestSuite/inputs/input1302.ain000066400000000000000000000015101414604301300203340ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=4; NumberOfTerms=5; # S.S gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[0.2]; # L.L gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0.3]; # (L.L)^2 gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[0.5]; # (L.L)(S.S) gt3:GeometryKind="chain"; gt3:GeometryOptions="ConstantValues"; gt3:dir0:Connectors=[0.7]; gt4:GeometryKind="chain"; gt4:GeometryOptions="ConstantValues"; gt4:dir0:Connectors=[0]; #Model params Model="SpinOrbital"; SpinTwiceS=2; OrbitalTwiceS=2; LambdaOne=0; LambdaTwo=0; SolverOptions="twositedmrg"; Version="5.77"; OutputFile="data1302"; InfiniteLoopKeptStates=50; FiniteLoops=[[1, 80, 0], [-2, 100, 0], [ 2, 150, 0]]; # TargetSz = Sz + Lz + (s + l)*N TargetSzPlusConst=8; dmrgpp-6.02/TestSuite/inputs/input1304.ain000066400000000000000000000015411414604301300203420ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=4; NumberOfTerms=5; # S.S gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[0.2]; # L.L gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0.3]; # (L.L)^2 gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[0.5]; # (L.L)(S.S) gt3:GeometryKind="chain"; gt3:GeometryOptions="ConstantValues"; gt3:dir0:Connectors=[0.7]; gt4:GeometryKind="chain"; gt4:GeometryOptions="ConstantValues"; gt4:dir0:Connectors=[0]; #Model params Model="SpinOrbital"; SpinTwiceS=2; OrbitalTwiceS=2; LambdaOne=0; LambdaTwo=0; SolverOptions="twositedmrg"; Version="5.77"; OutputFile="data1304"; InfiniteLoopKeptStates=50; FiniteLoops=[[1, 80, 0], [-2, 100, 0], [ 2, 150, 0]]; # TargetSz = Sz + Lz + (s + l)*N TargetSzPlusConst=4; vector TargetExtra=[4]; dmrgpp-6.02/TestSuite/inputs/input1305.ain000066400000000000000000000025471414604301300203520ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=4; NumberOfTerms=5; # S.S gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[0.2]; # L.L gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0.3]; # (L.L)^2 gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[0.5]; # (L.L)(S.S) gt3:GeometryKind="chain"; gt3:GeometryOptions="ConstantValues"; gt3:dir0:Connectors=[0.7]; gt4:GeometryKind="chain"; gt4:GeometryOptions="ConstantValues"; gt4:dir0:Connectors=[0]; #Model params Model="SpinOrbital"; SpinTwiceS=2; OrbitalTwiceS=2; LambdaOne=0; LambdaTwo=0; SolverOptions="CorrectionVectorTargeting,twositedmrg,minimizeDisk,restart,fixLegacyBugs"; Version="5.77"; OutputFile="data1305"; InfiniteLoopKeptStates=50; FiniteLoops=[ [-2, 150, 2], [ 2, 150, 2]]; # TargetSz = Sz + Lz + (s + l)*N TargetSzPlusConst=4; vector TargetExtra=[4]; # This has been added for CV: CorrectionA=0; RestartFilename="data1304"; TruncationTolerance=1e-7; LanczosEps=1e-7; TridiagonalEps=1e-7; DynamicDmrgType=0; TSPSites=[2]; TSPLoops=[0]; TSPProductOrSum="sum"; CorrectionVectorFreqType="Real"; CorrectionVectorEta=0.08; CorrectionVectorAlgorithm="Krylov"; Orbitals=1; GsWeight=0.1; CorrectionVectorOmega=0.275; Intent="NeutronsSzSz"; string TSPOp0:TSPOperator="expression"; string TSPOp0:OperatorExpression="sz*lz"; dmrgpp-6.02/TestSuite/inputs/input1306.ain000066400000000000000000000015571414604301300203530ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=4; NumberOfTerms=5; # S.S gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[0]; # L.L gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0]; # (L.L)^2 gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[0]; # (L.L)(S.S) gt3:GeometryKind="chain"; gt3:GeometryOptions="ConstantValues"; gt3:dir0:Connectors=[0]; # (S.S)(L.L)^2 gt4:GeometryKind="chain"; gt4:GeometryOptions="none"; gt4:dir0:Connectors=[1, 0, 0]; #Model params Model="SpinOrbital"; SpinTwiceS=2; OrbitalTwiceS=2; LambdaOne=0; LambdaTwo=0; SolverOptions="twositedmrg,MatrixVectorStored,test,debugmatrix"; Version="5.77"; OutputFile="data1306"; InfiniteLoopKeptStates=50; FiniteLoops=[[1, 80, 0], [-2, 100, 0], [ 2, 150, 0]]; # TargetSz = Sz + Lz + (s + l)*N TargetSzPlusConst=8; dmrgpp-6.02/TestSuite/inputs/input1308.ain000066400000000000000000000013701414604301300203460ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=4; NumberOfTerms=4; # S.S gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[0.2]; # L.L gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0.3]; # (L.L)^2 gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[0.5]; # (L.L)(S.S) gt3:GeometryKind="chain"; gt3:GeometryOptions="ConstantValues"; gt3:dir0:Connectors=[0.7]; #Model params Model="SpinOrbitalNoLastTerm"; SpinTwiceS=2; OrbitalTwiceS=2; LambdaOne=0; LambdaTwo=0; SolverOptions="twositedmrg"; Version="5.77"; OutputFile="data1308"; InfiniteLoopKeptStates=50; FiniteLoops=[[1, 80, 0], [-2, 100, 0], [ 2, 150, 0]]; # TargetSz = Sz + Lz + (s + l)*N TargetSzPlusConst=8; dmrgpp-6.02/TestSuite/inputs/input14.inp000066400000000000000000000011061414604301300202130ustar00rootroot00000000000000TotalNumberOfSites=12 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=bathedcluster GeometryOptions=ConstantValues LadderLeg=2 BathSitesPerSite=2 ConnectorsX 1 1.0 ConnectorsY 1 1.0 ConnectorsBath 1 0.5 hubbardU 12 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=nofiniteloops Version=264e71039cc5a47c6f1f375f2f9baaffd94e94fa OutputFile=data14.txt InfiniteLoopKeptStates=200 FiniteLoops 4 5 100 0 -5 100 0 -5 100 0 5 100 0 TargetElectronsUp=2 TargetElectronsDown=2 TargetSpinTimesTwo=0 dmrgpp-6.02/TestSuite/inputs/input140.inp000066400000000000000000000006451414604301300203020ustar00rootroot00000000000000linSize 4 hoppings 2 2 -0.058 0 0 -0.2196 hoppings 2 2 -0.2196 0 0 -0.058 hoppings 2 2 +0.20828 +0.079 +0.079 +0.20828 hoppings 2 2 +0.20828 -0.079 -0.079 +0.20828 hubbardU 4 0.0 0.0 0.0 0.0 potentialV 4 0.0 0.0 0.0 0.0 density 1.0 options nowft,noSu2 version 61289987cdd32b8485213ac0415baf4e9cd16432 outputfile data140.txt InfiniteLoopKeptStates 60 FiniteLoops 4 3 100 0 -3 100 0 -3 100 0 3 100 0 QNS 3 1.0 1.0 0.0 dmrgpp-6.02/TestSuite/inputs/input141.inp000066400000000000000000000000061414604301300202720ustar00rootroot00000000000000skip dmrgpp-6.02/TestSuite/inputs/input142.inp000066400000000000000000000006431414604301300203020ustar00rootroot00000000000000linSize 4 hoppings 2 2 -0.058 0 0 -0.2196 hoppings 2 2 -0.2196 0 0 -0.058 hoppings 2 2 +0.20828 +0.079 +0.079 +0.20828 hoppings 2 2 +0.20828 -0.079 -0.079 +0.20828 hubbardU 4 0.0 0.0 0.0 0.0 potentialV 4 0.0 0.0 0.0 0.0 density 1.0 options wft,noSu2 version 61289987cdd32b8485213ac0415baf4e9cd16432 outputfile data142.txt InfiniteLoopKeptStates 60 FiniteLoops 4 3 100 0 -3 100 0 -3 100 0 3 100 0 QNS 3 1.0 1.0 0.0 dmrgpp-6.02/TestSuite/inputs/input15.inp000066400000000000000000000021111414604301300202110ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladderbath GeometryOptions=none LadderLeg=2 BathSitesPerSite=1 Connectors 2 1.0 1.0 Connectors 2 0.8 0.8 Connectors 4 0.3 0.3 0.3 0.3 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,lanczosAllowsZero Version=264e71039cc5a47c6f1f375f2f9baaffd94e94fa OutputFile=data15.txt InfiniteLoopKeptStates=256 FiniteLoops 24 3 400 0 -3 400 0 -3 400 0 3 400 0 3 400 0 -3 400 0 -3 400 0 3 400 0 3 400 0 -3 400 0 -3 400 0 3 400 0 3 400 0 -3 400 0 -3 400 0 3 400 0 3 400 0 -3 400 0 -3 400 0 3 400 0 3 400 0 -3 400 0 -3 400 0 3 400 0 TargetElectronsUp=2 TargetElectronsDown=2 TargetSpinTimesTwo=0 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 1 3 TSPLoops 1 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input150.inp000066400000000000000000000012541414604301300203000ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 Term0=Hopping DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data150 InfiniteLoopKeptStates=100 FiniteLoops 3 7 100 0 -14 100 0 14 100 1 TargetElectronsUp=8 TargetElectronsDown=8 !Lanczos$iSteps 100 100 42 42 #ci observe arguments=",," dmrgpp-6.02/TestSuite/inputs/input1500.inp000066400000000000000000000015621414604301300203620ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 Model=HubbardOneBand SolverOptions=MettsTargeting,vectorwithoffsets,wftNoAccel Version=version OutputFile=data1500.txt InfiniteLoopKeptStates=60 FiniteLoops 3 3 200 0 -6 200 0 6 200 0 RepeatFiniteLoopsTimes=60 RepeatFiniteLoopsFrom=1 TargetElectronsUp=4 TargetElectronsDown=4 TSPTau=0.2 TSPTimeSteps=5 TSPAdvanceEach=6 TSPAlgorithm=Krylov TSPSites 1 5 TSPLoops 1 0 TSPProductOrSum=product TSPRngSeed=1234 MettsCollapse=random BetaDividedByTwo=1.0 GsWeight=0.0 TSPOperator=expression OperatorExpression=identity #ci dmrg arguments="" #ci metts Energy 1 time #ci metts Density 1 dmrgpp-6.02/TestSuite/inputs/input1550.inp000066400000000000000000000016761414604301300203750ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 Model=HubbardOneBand SolverOptions=MettsTargeting,twositedmrg,wftNoAccel,vectorwithoffsets Version=version OutputFile=data1550.txt InfiniteLoopKeptStates=200 FiniteLoops 4 3 200 0 -3 200 0 -3 200 0 3 200 0 RepeatFiniteLoopsTimes=200 TargetElectronsUp=4 TargetElectronsDown=4 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=21 TSPAlgorithm=SuzukiTrotter TSPSites 1 5 TSPLoops 1 0 TSPProductOrSum=product BetaDividedByTwo=1.0 TSPRngSeed=0 TSPRotateBasis=1 MettsCollapse=random GsWeight=0.1 TSPOperator=raw RAW_MATRIX 4 4 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input16.inp000066400000000000000000000015741414604301300202260ustar00rootroot00000000000000TotalNumberOfSites=12 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladderbath GeometryOptions=ConstantValues LadderLeg=2 BathSitesPerSite=2 Connectors 1 1.0 Connectors 1 0.8 Connectors 1 0.5 hubbardU 12 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=264e71039cc5a47c6f1f375f2f9baaffd94e94fa OutputFile=data16.txt InfiniteLoopKeptStates=256 FiniteLoops 12 5 256 0 -5 256 0 -5 256 0 5 256 0 5 256 0 -5 256 0 -5 256 0 5 256 0 5 256 0 -5 256 0 -5 256 0 5 256 0 TargetElectronsUp=3 TargetElectronsDown=3 TargetSpinTimesTwo=0 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=100 TSPAlgorithm=Krylov TSPSites 1 1 TSPLoops 1 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input160.inp000066400000000000000000000000061414604301300202730ustar00rootroot00000000000000skip dmrgpp-6.02/TestSuite/inputs/input1600.inp000066400000000000000000000014011414604301300203530ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 kondoJ 8 0 0 0 0 0 0 0 0 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=Kondo HeisenbergTwiceS=1 SolverOptions=none Version=5.27 OutputFile=data1600 InfiniteLoopKeptStates=100 FiniteLoops 3 3 100 0 -6 100 0 6 100 0 TargetElectronsTotal=8 TargetSzPlusConst=8 dmrgpp-6.02/TestSuite/inputs/input1601.inp000066400000000000000000000014011414604301300203540ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 kondoJ 8 0 0 0 0 0 0 0 0 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=Kondo HeisenbergTwiceS=1 SolverOptions=none Version=5.27 OutputFile=data1601 InfiniteLoopKeptStates=100 FiniteLoops 3 3 100 0 -6 100 0 6 100 0 TargetElectronsTotal=8 TargetSzPlusConst=8 dmrgpp-6.02/TestSuite/inputs/input1610.inp000066400000000000000000000022001414604301300203520ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=8 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.123 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.456 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.789 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.101112 kondoJ 8 0 0 0 0 0 0 0 0 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=KondoEx2 HeisenbergTwiceS=1 SolverOptions=none,MatrixVectorStored,debugmatrix,test Version=5.27 OutputFile=data1600 InfiniteLoopKeptStates=50 FiniteLoops 3 3 60 0 -6 70 0 6 70 0 KondoHx=0.123 ElectronHx=0.456 PairingField=0.789 dmrgpp-6.02/TestSuite/inputs/input17.inp000066400000000000000000000016261414604301300202250ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues LadderLeg=2 ConnectorsX 1 1.0 ConnectorsY 1 1.0 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=264e71039cc5a47c6f1f375f2f9baaffd94e94fa OutputFile=data17.txt InfiniteLoopKeptStates=256 FiniteLoops 16 3 400 0 -3 400 0 -3 400 0 3 400 0 3 400 0 -3 400 0 -3 400 0 3 400 0 3 400 0 -3 400 0 -3 400 0 3 400 0 3 400 0 -3 400 0 -3 400 0 3 400 0 TargetElectronsUp=2 TargetElectronsDown=2 TargetSpinTimesTwo=0 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=6 TSPAlgorithm=Krylov TSPSites 1 3 TSPLoops 1 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input170.ain000066400000000000000000000007641414604301300202700ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=2; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0.0]; #Model params potentialV=[0.0,...]; Model="FermionSpinless"; SolverOptions="none"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data170"; InfiniteLoopKeptStates=100; FiniteLoops=[[3, 100, 0], [-6, 100, 0], [ 6, 100, 0]]; TargetElectronsTotal=4; dmrgpp-6.02/TestSuite/inputs/input172.ain000066400000000000000000000011251414604301300202620ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=3; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0.0]; gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[-1]; #Model params potentialV=[0.0,...]; Model="FermionSpinlessWithDelta"; SolverOptions="none,MatrixVectorStored"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data172"; InfiniteLoopKeptStates=100; FiniteLoops=[[3, 100, 0], [-6, 100, 0], [ 6, 100, 0]]; dmrgpp-6.02/TestSuite/inputs/input18.inp000066400000000000000000000056601414604301300202300ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 6 10 10 10 10 10 10 potentialV 12 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 Model=HubbardOneBand SolverOptions=TimeStepTargeting,vectorwithoffsets Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data18.txt InfiniteLoopKeptStates=200 FiniteLoops 201 2 200 0 -2 200 0 -2 200 0 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 TargetElectronsUp=3 TargetElectronsDown=3 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 2 3 2 TSPLoops 2 0 0 TSPProductOrSum=product GsWeight=0.1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input1800.inp000066400000000000000000000010471414604301300203630ustar00rootroot00000000000000TotalNumberOfSites=12 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=none Connectors 10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Connectors 6 -10 -10 -10 -10 -10 -10 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 0.0 Connectors 1 0.0 LadderLeg=2 Model=Heisenberg HeisenbergTwiceS=1 SolverOptions=twositedmrg,MatrixVectorOnTheFly Version=version OutputFile=data1800.txt InfiniteLoopKeptStates=60 FiniteLoops 4 5 100 0 -5 100 0 -5 100 0 5 100 0 TargetSzPlusConst=6 dmrgpp-6.02/TestSuite/inputs/input1801.inp000066400000000000000000000016751414604301300203730ustar00rootroot00000000000000TotalNumberOfSites=12 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=none Connectors 10 -1.0 0.0 -1.0 0.0 -1.0 0.0 -1.0 0.0 -1.0 0.0 Connectors 6 0 0 0 0 0 0 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=none Connectors 10 -1.0 0.0 -1.0 0.0 -1.0 0.0 -1.0 0.0 -1.0 0.0 Connectors 6 0 0 0 0 0 0 LadderLeg=2 Model=Heisenberg HeisenbergTwiceS=1 PrintHamiltonianAverage=s==c SolverOptions=twositedmrg,restart,TargetingAncilla Version=version OutputFile=data1801.txt InfiniteLoopKeptStates=64 FiniteLoops 4 5 800 2 -5 800 2 -5 800 2 5 800 2 RepeatFiniteLoopsFrom=0 RepeatFiniteLoopsTimes=10 TargetSzPlusConst=6 RestartFilename=data1800.txt TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=10 TSPAlgorithm=Krylov TSPSites 1 6 TSPLoops 1 6 TSPProductOrSum=sum GsWeight=0.1 TSPOperator=expression OperatorExpression=identity #ci getEnergyAncilla 0.5 time #ci getEnergyAncilla 1 time #ci getEnergyAncilla 1.5 time dmrgpp-6.02/TestSuite/inputs/input1810.inp000066400000000000000000000012521414604301300203620ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=3 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=twositedmrg GeometryMaxConnections=0 Connectors 6 6 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 Model=HeisenbergAncillaC HeisenbergTwiceS=1 SolverOptions=twositedmrg,MatrixVectorOnTheFly Version=version OutputFile=data1810.txt InfiniteLoopKeptStates=60 FiniteLoops 4 2 100 0 -2 100 0 -2 100 0 2 100 0 TargetElectronsTotal=3 TargetSzPlusConst=6 dmrgpp-6.02/TestSuite/inputs/input1811.inp000066400000000000000000000016441414604301300203700ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=3 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 Model=HeisenbergAncillaC HeisenbergTwiceS=1 PrintHamiltonianAverage=s==c SolverOptions=twositedmrg,restart,TargetingAncilla Version=version OutputFile=data1811.txt InfiniteLoopKeptStates=64 FiniteLoops 4 2 200 2 -4 200 2 4 200 2 -4 200 2 RepeatFiniteLoopsFrom=2 RepeatFiniteLoopsTimes=10 TargetElectronsTotal=3 TargetSzPlusConst=6 GsWeight=0.1 RestartFilename=data1810.txt TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 1 3 TSPLoops 1 2 TSPProductOrSum=product TSPOperator=expression OperatorExpression=identity #ci getEnergyAncilla 0.5 time #ci getEnergyAncilla 1 time #ci getEnergyAncilla 1.5 time dmrgpp-6.02/TestSuite/inputs/input1812.inp000066400000000000000000000017131414604301300203660ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=3 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 Model=HeisenbergAncillaC HeisenbergTwiceS=1 PrintHamiltonianAverage=s==c SolverOptions=twositedmrg,restart,TargetingAncilla,neverNormalizeVectors Version=version OutputFile=data1812 InfiniteLoopKeptStates=64 FiniteLoops 4 2 200 2 -4 200 2 4 200 2 -4 200 2 RepeatFiniteLoopsFrom=2 RepeatFiniteLoopsTimes=10 TargetElectronsTotal=3 TargetSzPlusConst=6 GsWeight=0.1 RestartFilename=data1810.txt TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 1 3 TSPLoops 1 0 TSPProductOrSum=product TSPExponentialTime=1 TSPOperator=expression OperatorExpression=identity #ci getEnergyAncilla 0.5 time #ci getEnergyAncilla 1 time #ci getEnergyAncilla 1.5 time dmrgpp-6.02/TestSuite/inputs/input1814.ain000066400000000000000000000011541414604301300203500ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=4; NumberOfTerms=3; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[0.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0.0]; gt2:GeometryKind="LongRange"; gt2:GeometryOptions="none"; integer gt2:Orbitals=1; real gt2:GeometryEntangler=-1; Model="HeisenbergAncillaC"; HeisenbergTwiceS=2; SolverOptions="twositedmrg,MatrixVectorOnTheFly"; Version="version"; OutputFile="data1814"; InfiniteLoopKeptStates=60; FiniteLoops=[ [ 1, 100, 8], [-2, 100, 8], [2, 100, 0]]; TargetElectronsTotal=4; TargetSzPlusConst=8; dmrgpp-6.02/TestSuite/inputs/input1815.ain000066400000000000000000000016441414604301300203550ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=4; NumberOfTerms=3; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1.0]; gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[0.0]; Model="HeisenbergAncillaC"; HeisenbergTwiceS=2; SolverOptions="twositedmrg,restart,TargetingAncilla"; RestartFilename="data1814"; Version="version"; OutputFile="data1815"; InfiniteLoopKeptStates=60; FiniteLoops=[ [-2, 200, 2], [ 2, 200, 2]]; RepeatFiniteLoopsTimes=4; TargetElectronsTotal=4; TargetSzPlusConst=8; string PrintHamiltonianAverage="s==c"; GsWeight=0.1; TSPTau=0.1; TSPTimeSteps=5; TSPAdvanceEach=4000; TSPAlgorithm="Krylov"; TSPSites=[2]; TSPLoops=[0]; TSPProductOrSum="product"; string TSPOp0:TSPOperator="expression"; string TSPOp0:OperatorExpression="identity"; OpOnSiteThreshold=2; dmrgpp-6.02/TestSuite/inputs/input1817.ain000066400000000000000000000021141414604301300203500ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=4; NumberOfTerms=3; gt0:GeometryKind="LongRange"; gt0:GeometryOptions="none"; integer gt0:GeometryMaxConnections=0; matrix gt0:Connectors=[ [0, 1, 0, 1], [1, 0, 1, 0], [0, 1, 0, 1], [1, 0, 1, 0]]; gt1:GeometryKind="LongRange"; gt1:GeometryOptions="none"; integer gt1:GeometryMaxConnections=0; matrix gt1:Connectors=[ [0, 1, 0, 1], [1, 0, 1, 0], [0, 1, 0, 1], [1, 0, 1, 0]]; gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[0.0]; Model="HeisenbergAncillaC"; HeisenbergTwiceS=2; SolverOptions="twositedmrg,restart,TargetingAncilla"; RestartFilename="data1814"; Version="version"; OutputFile="data1817"; InfiniteLoopKeptStates=60; FiniteLoops=[ [-2, 200, 2], [ 2, 200, 2]]; RepeatFiniteLoopsTimes=4; TargetElectronsTotal=4; TargetSzPlusConst=8; string PrintHamiltonianAverage="s==c"; GsWeight=0.1; TSPTau=0.1; TSPTimeSteps=5; TSPAdvanceEach=4000; TSPAlgorithm="Krylov"; TSPSites=[2]; TSPLoops=[0]; TSPProductOrSum="product"; string TSPOp0:TSPOperator="expression"; string TSPOp0:OperatorExpression="identity"; dmrgpp-6.02/TestSuite/inputs/input1818.ain000066400000000000000000000011551414604301300203550ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=3; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[0.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0.0]; gt2:GeometryKind="LongRange"; gt2:GeometryOptions="none"; integer gt2:Orbitals=1; real gt2:GeometryEntangler=-1; Model="HeisenbergAncillaC"; HeisenbergTwiceS=2; SolverOptions="twositedmrg,MatrixVectorOnTheFly"; Version="version"; OutputFile="data1818"; InfiniteLoopKeptStates=60; FiniteLoops=[ [ 3, 100, 8], [-6, 100, 8], [6, 100, 0]]; TargetElectronsTotal=8; TargetSzPlusConst=16; dmrgpp-6.02/TestSuite/inputs/input1819.ain000066400000000000000000000016201414604301300203530ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=3; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1.0]; gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[0.0]; Model="HeisenbergAncillaC"; HeisenbergTwiceS=2; SolverOptions="twositedmrg,restart,TargetingAncilla"; RestartFilename="data1818"; Version="version"; OutputFile="data1819"; InfiniteLoopKeptStates=60; FiniteLoops=[ [-6, 200, 2], [ 6, 200, 2]]; RepeatFiniteLoopsTimes=2; TargetElectronsTotal=8; TargetSzPlusConst=16; string PrintHamiltonianAverage="s==c"; GsWeight=0.1; TSPTau=0.1; TSPTimeSteps=5; TSPAdvanceEach=4000; TSPAlgorithm="Krylov"; TSPSites=[3]; TSPLoops=[0]; TSPProductOrSum="product"; string TSPOp0:TSPOperator="expression"; string TSPOp0:OperatorExpression="identity"; dmrgpp-6.02/TestSuite/inputs/input1850.inp000066400000000000000000000016011414604301300203640ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=5 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none GeometryMaxConnections=0 Connectors 6 6 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 Model=TjAncillaC potentialV 12 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=twositedmrg,MatrixVectorOnTheFly Version=version OutputFile=data1850.txt InfiniteLoopKeptStates=60 FiniteLoops 4 2 200 0 -2 200 0 -2 200 0 2 200 0 TargetElectronsUp=4 TargetElectronsDown=4 TargetExtra 1 4 dmrgpp-6.02/TestSuite/inputs/input1851.inp000066400000000000000000000022411414604301300203660ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=5 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -0.025 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 Model=TjAncillaC potentialV 12 0 0 0 0 0 0 0 0 0 0 0 0 PrintHamiltonianAverage=s==c SolverOptions=restart,TargetingAncilla,twositedmrg Version=version OutputFile=data1851.txt InfiniteLoopKeptStates=64 FiniteLoops 3 2 800 0 -4 800 0 4 800 0 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=20 TargetElectronsUp=4 TargetElectronsDown=4 TargetExtra 1 4 RestartFilename=data1850.txt TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 1 3 TSPLoops 1 6 TSPProductOrSum=sum TSPEnergyForExp=-3 TSPUseQns=1 GsWeight=0.1 TSPOperator=expression OperatorExpression=identity #ci getEnergyAncilla 0.5 time #ci getEnergyAncilla 1.0 time #ci getEnergyAncilla 1.5 time dmrgpp-6.02/TestSuite/inputs/input1860.inp000066400000000000000000000016101414604301300203650ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=5 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none GeometryMaxConnections=0 Connectors 6 6 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 Model=TjAncillaC2 potentialV 12 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=twositedmrg,MatrixVectorOnTheFly Version=version OutputFile=data1860.txt InfiniteLoopKeptStates=60 FiniteLoops 4 2 200 0 -2 200 0 -2 200 0 2 200 0 TargetElectronsUp=4 TargetElectronsDown=4 TargetExtra 2 2 2 dmrgpp-6.02/TestSuite/inputs/input1861.inp000066400000000000000000000022151414604301300203700ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=5 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -0.025 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 Model=TjAncillaC2 potentialV 12 0 0 0 0 0 0 0 0 0 0 0 0 PrintHamiltonianAverage=s==c SolverOptions=restart,TargetingAncilla,twositedmrg Version=version OutputFile=data1861.txt InfiniteLoopKeptStates=60 FiniteLoops 4 2 200 2 -2 200 2 -2 200 2 2 200 2 RepeatFiniteLoopsFrom=0 RepeatFiniteLoopsTimes=10 TargetElectronsUp=4 TargetElectronsDown=4 TargetExtra 2 2 2 RestartFilename=data1860.txt TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 1 3 TSPLoops 1 6 TSPProductOrSum=sum GsWeight=0.1 TSPOperator=expression OperatorExpression=identity #ci getEnergyAncilla 0.5 time #ci getEnergyAncilla 1 time #ci getEnergyAncilla 1.5 time dmrgpp-6.02/TestSuite/inputs/input1950.inp000066400000000000000000000013771414604301300203770ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none GeometryMaxConnections=0 Connectors 6 6 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 0 Model=HubbardAncilla hubbardU 6 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 12 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 SolverOptions=twositedmrg,MatrixVectorOnTheFly Version=version OutputFile=data1950.txt InfiniteLoopKeptStates=60 FiniteLoops 4 2 100 0 -2 100 0 -2 100 0 2 100 0 AdjustQuantumNumbers 4 2 4 1 1 TargetElectronsTotal=8 TargetSzPlusConst=4 TargetExtra 2 2 2 Orbitals=2 FeAsMode=INT_ORBITAL0 dmrgpp-6.02/TestSuite/inputs/input1951.inp000066400000000000000000000020441414604301300203700ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 Model=HubbardAncilla hubbardU 6 10.0 10.0 10.0 10.0 10.0 10.0 potentialV 12 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 SolverOptions=twositedmrg,restart,TargetingAncilla Version=version OutputFile=data1951.txt InfiniteLoopKeptStates=100 FiniteLoops 4 2 150 0 -2 150 0 -2 150 0 2 150 0 RepeatFiniteLoopsFrom=0 RepeatFiniteLoopsTimes=10 PrintHamiltonianAverage=s==c TargetElectronsTotal=8 TargetSzPlusConst=4 TargetExtra 2 2 2 AdjustQuantumNumbers 4 2 4 1 1 Orbitals=2 FeAsMode=INT_ORBITAL0 GsWeight=0.1 MaxMatrixRankStored=512 RestartFilename=data1950.txt TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 1 3 TSPLoops 1 0 TSPProductOrSum=product TSPOperator=expression OperatorExpression=identity #ci getEnergyAncilla 0.5 time #ci getEnergyAncilla 1 time #ci getEnergyAncilla 1.5 time dmrgpp-6.02/TestSuite/inputs/input1954.inp000066400000000000000000000012011414604301300203650ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=2 DegreesOfFreedom=2 GeometryKind=chain GeometryOptions=ConstantValues Connectors 2 2 0 0 0 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Orbitals=1 GeometryEntangler=-1 FeAsMode=INT_ORBITAL0 Orbitals=1 hubbardU 12 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardAncilla Version=paper65 TruncationTolerance=1e-12 TargetElectronsTotal=8 TargetSzPlusConst=4 TargetExtra 2 2 2 Threads=1 SolverOptions=twositedmrg,MatrixVectorOnTheFly InfiniteLoopKeptStates=100 FiniteLoops 3 2 200 0 -4 200 0 4 200 0 OutputFile=data1954 dmrgpp-6.02/TestSuite/inputs/input1955.inp000066400000000000000000000020341414604301300203730ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=2 DegreesOfFreedom=2 GeometryKind=chain GeometryOptions=ConstantValues Connectors 2 2 -1.0 0 0 0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 FeAsMode=INT_ORBITAL0 Orbitals=1 hubbardU 12 10.00 10.00 10.00 10.00 10.00 10.00 0 0 0 0 0 0 potentialV 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardAncilla Version=paper65 TruncationTolerance=1e-8 TargetElectronsTotal=8 TargetSzPlusConst=4 TargetExtra 2 2 2 Threads=1 SolverOptions=twositedmrg,restart,TargetingAncilla,normalizeTimeVectors InfiniteLoopKeptStates=100 RestartFilename=data1954 OutputFile=data1955 FiniteLoops 2 -4 200 2 4 200 2 LanczosEps=1e-9 LanczosSteps=400 PrintHamiltonianAverage=s==c RepeatFiniteLoopsTimes=10 RecoverySave=%l%%2,@keep,@M=100 RecoveryMaxFiles=200 TridiagEps=1e-8 TridiagSteps=500 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 1 4 TSPLoops 1 1 TSPProductOrSum=product TSPOperator=expression OperatorExpression=identity dmrgpp-6.02/TestSuite/inputs/input2.ain000066400000000000000000000010161414604301300201110ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[1.0]; #Model params hubbardU=[0.0, ...]; potentialV=[0.0,...]; Model="HubbardOneBand"; SolverOptions="none"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data2"; InfiniteLoopKeptStates=100; FiniteLoops=[[7, 100, 0], [-14, 100, 0], [ 14, 100, 1]]; TargetElectronsUp=8; TargetElectronsDown=8; #ci observe arguments=",," dmrgpp-6.02/TestSuite/inputs/input2.inp000066400000000000000000000012201414604301300201250ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 Term0=Hopping DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data2.txt InfiniteLoopKeptStates=100 FiniteLoops 3 7 100 0 -14 100 0 14 100 1 TargetElectronsUp=8 TargetElectronsDown=8 #ci observe arguments=",," dmrgpp-6.02/TestSuite/inputs/input20.ain000066400000000000000000000007371414604301300202020ustar00rootroot00000000000000##Ainur 1.0 TotalNumberOfSites=8; NumberOfTerms=2; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1.0]; Model="Heisenberg"; HeisenbergTwiceS=1; SolverOptions="twositedmrg,usecomplex"; Version="247b335fe1542909b90be8647456bfd8fd56191c"; OutputFile="data20"; InfiniteLoopKeptStates=60; FiniteLoops=[[3, 100, 0],[-6, 100, 0]]; TargetSzPlusConst=4; dmrgpp-6.02/TestSuite/inputs/input200.inp000066400000000000000000000021171414604301300202730ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=vectorwithoffsets,useComplex Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data200.txt InfiniteLoopKeptStates=150 FiniteLoops 9 7 200 0 -7 200 1 -7 200 1 7 200 1 7 200 1 -7 200 1 -7 200 1 7 200 1 7 200 1 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 2 10 11 TSPLoops 2 0 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2000.inp000066400000000000000000000015551414604301300203600ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,twositedmrg Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data2000.txt InfiniteLoopKeptStates=100 FiniteLoops 5 3 200 0 -3 200 2 -3 200 2 3 200 2 3 200 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=40 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=21 TSPAlgorithm=SuzukiTrotter TSPSites 1 4 TSPLoops 1 3 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2001.inp000066400000000000000000000040041414604301300203510ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=TimeStepTargeting,twositedmrg Version=version OutputFile=data2001.txt InfiniteLoopKeptStates=256 FiniteLoops 5 3 256 0 -3 256 2 -3 256 2 3 256 2 3 256 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=40 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=21 TSPAlgorithm=SuzukiTrotter TSPSites 3 4 5 3 TSPLoops 3 0 0 0 TSPProductOrSum=sum TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2004.inp000066400000000000000000000016251414604301300203620ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,twositedmrg Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data2004.txt InfiniteLoopKeptStates=64 FiniteLoops 5 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=10 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=45 TSPAlgorithm=SuzukiTrotter TSPSites 1 7 TSPLoops 1 5 TSPProductOrSum=product TSPOperator=cooked COOKED_OPERATOR=c COOKED_EXTRA 2 0 0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2008.inp000066400000000000000000000017131414604301300203640ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,twositedmrg Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data2008.txt InfiniteLoopKeptStates=200 FiniteLoops 5 7 200 0 -7 200 0 -7 200 0 7 200 0 7 200 0 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=4 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=1000 TSPAlgorithm=SuzukiTrotter TSPSites 1 10 TSPLoops 1 5 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2009.inp000066400000000000000000000016471414604301300203730ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,twositedmrg Version=version OutputFile=data2009.txt InfiniteLoopKeptStates=200 FiniteLoops 5 7 200 0 -7 200 2 -7 200 2 7 200 2 7 200 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=4 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=45 TSPAlgorithm=SuzukiTrotter TSPSites 1 10 TSPLoops 1 1 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input201.inp000066400000000000000000000021131414604301300202700ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=restart,TimeStepTargeting,vectorwithoffsets Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data201.txt InfiniteLoopKeptStates=150 FiniteLoops 3 -7 200 0 -7 200 0 7 200 0 TargetElectronsUp=8 TargetElectronsDown=8 RestartFilename=data200.txt GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 2 11 10 TSPLoops 2 0 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2010.inp000066400000000000000000000021251414604301300203530ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,twositedmrg Version=version OutputFile=data2010.txt InfiniteLoopKeptStates=150 FiniteLoops 5 7 200 0 -7 200 2 -7 200 2 7 200 2 7 200 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=4 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=45 TSPAlgorithm=SuzukiTrotter TSPSites 2 11 10 TSPLoops 2 1 1 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2015.inp000066400000000000000000000016731414604301300203670ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=bathedcluster GeometryOptions=none LadderLeg=2 BathSitesPerSite=1 Connectors 2 1.0 1.0 Connectors 2 0.8 0.8 Connectors 4 0.3 0.3 0.3 0.3 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,lanczosAllowsZero,twositedmrg Version=version OutputFile=data2015.txt InfiniteLoopKeptStates=256 FiniteLoops 5 3 400 0 -3 400 2 -3 400 2 3 400 2 3 400 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=4 TargetElectronsUp=2 TargetElectronsDown=2 TargetSpinTimesTwo=0 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=21 TSPAlgorithm=SuzukiTrotter TSPSites 1 3 TSPLoops 1 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2018.inp000066400000000000000000000020161414604301300203620ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 6 10 10 10 10 10 10 potentialV 12 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 Model=HubbardOneBand SolverOptions=TimeStepTargeting,twositedmrg Version=version OutputFile=data2018.txt InfiniteLoopKeptStates=200 FiniteLoops 5 2 200 0 -2 200 2 -2 200 2 2 200 2 2 200 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=48 TargetElectronsUp=3 TargetElectronsDown=3 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=15 TSPAlgorithm=SuzukiTrotter TSPSites 2 3 2 TSPLoops 2 0 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2021.inp000066400000000000000000000040021414604301300203510ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=TimeStepTargeting,vectorwithoffsets Version=version OutputFile=data2021.txt InfiniteLoopKeptStates=256 FiniteLoops 5 3 256 0 -3 256 2 -3 256 2 3 256 2 3 256 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=20 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=6 TSPAlgorithm=Krylov TSPSites 3 4 5 3 TSPLoops 3 0 0 0 TSPProductOrSum=sum TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2024.inp000066400000000000000000000016011414604301300203560ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data2024.txt InfiniteLoopKeptStates=64 FiniteLoops 5 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=4 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=14 TSPAlgorithm=Krylov TSPSites 1 7 TSPLoops 1 5 TSPProductOrSum=product TSPOperator=cooked COOKED_OPERATOR=c COOKED_EXTRA 2 0 0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2028.inp000066400000000000000000000016701414604301300203700ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data2028.txt InfiniteLoopKeptStates=200 FiniteLoops 5 7 200 0 -7 200 0 -7 200 0 7 200 0 7 200 0 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=4 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=1000 TSPAlgorithm=Krylov TSPSites 1 10 TSPLoops 1 5 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2029.inp000066400000000000000000000016241414604301300203700ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=version OutputFile=data2029.txt InfiniteLoopKeptStates=200 FiniteLoops 5 7 200 0 -7 200 0 -7 200 0 7 200 0 7 200 0 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=4 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=14 TSPAlgorithm=Krylov TSPSites 1 10 TSPLoops 1 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2040.inp000066400000000000000000000021241414604301300203550ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,vectorwithoffsets Version=version OutputFile=data2040.txt InfiniteLoopKeptStates=150 FiniteLoops 5 7 200 0 -7 200 2 -7 200 2 7 200 2 7 200 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=2 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=14 TSPAlgorithm=Krylov TSPSites 2 11 10 TSPLoops 2 1 1 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2045.inp000066400000000000000000000016441414604301300203700ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladderbath GeometryOptions=none LadderLeg=2 BathSitesPerSite=1 Connectors 2 1.0 1.0 Connectors 2 0.8 0.8 Connectors 4 0.3 0.3 0.3 0.3 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,lanczosAllowsZero Version=version OutputFile=data2045.txt InfiniteLoopKeptStates=256 FiniteLoops 5 3 400 0 -3 400 2 -3 400 2 3 400 2 3 400 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=2 GsWeight=0.1 TargetElectronsUp=2 TargetElectronsDown=2 TargetSpinTimesTwo=0 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=6 TSPAlgorithm=Krylov TSPSites 1 3 TSPLoops 1 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2048.inp000066400000000000000000000020141414604301300203630ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 6 10 10 10 10 10 10 potentialV 12 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 Model=HubbardOneBand SolverOptions=TimeStepTargeting,vectorwithoffsets Version=version OutputFile=data2048.txt InfiniteLoopKeptStates=200 FiniteLoops 5 2 200 0 -2 200 2 -2 200 2 2 200 2 2 200 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=24 TargetElectronsUp=3 TargetElectronsDown=3 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 2 3 2 TSPLoops 2 0 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2060.inp000066400000000000000000000017671414604301300203730ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 6 10 10 10 10 10 10 potentialV 12 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,twositedmrg Version=version OutputFile=data2060.txt InfiniteLoopKeptStates=200 FiniteLoops 5 2 200 0 -2 200 2 -2 200 2 2 200 2 2 200 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=80 TargetElectronsUp=3 TargetElectronsDown=3 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=15 TSPAlgorithm=SuzukiTrotter TSPSites 2 3 2 TSPLoops 2 0 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2061.inp000066400000000000000000000017651414604301300203720ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 6 10 10 10 10 10 10 potentialV 12 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,vectorwithoffsets Version=version OutputFile=data2061.txt InfiniteLoopKeptStates=200 FiniteLoops 5 2 200 0 -2 200 2 -2 200 2 2 200 2 2 200 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=20 TargetElectronsUp=3 TargetElectronsDown=3 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 2 3 2 TSPLoops 2 0 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2070.inp000066400000000000000000000021301414604301300203550ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,twositedmrg Version=version OutputFile=data2070.txt InfiniteLoopKeptStates=150 FiniteLoops 5 7 200 0 -7 200 2 -7 200 2 7 200 2 7 200 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=2 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=45 TSPAlgorithm=SuzukiTrotter TSPSites 2 10 11 TSPLoops 2 0 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2071.inp000066400000000000000000000021271414604301300203640ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,vectorwithoffsets Version=version OutputFile=data2071.txt InfiniteLoopKeptStates=150 FiniteLoops 5 7 200 0 -7 200 2 -7 200 2 7 200 2 7 200 2 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=1 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=2 TSPAdvanceEach=14 TSPAlgorithm=Krylov TSPSites 2 10 11 TSPLoops 2 0 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input2080.ain000066400000000000000000000006331414604301300203450ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[-1.0]; OutputFile="data2080"; hubbardU=[0,...]; potentialV=[0,...]; Model="HubbardOneBand"; SolverOptions="GroundStateTargeting,twositedmrg,useComplex"; Version="v6.01"; InfiniteLoopKeptStates=150; FiniteLoops=[[7, 200, 0], [-14, 200, 0]]; TargetElectronsUp=6; TargetElectronsDown=6; dmrgpp-6.02/TestSuite/inputs/input2081.ain000066400000000000000000000013001414604301300203360ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[-1.0]; GeometryValueModifier="ei,*,%t,4.2"; hubbardU=[0,...]; potentialV=[0,...]; Model="HubbardOneBand"; SolverOptions="TimeStepTargeting,twositedmrg,restart,fixLegacyBugs"; RestartFilename="data2080"; Version="v6.01"; InfiniteLoopKeptStates=150; FiniteLoops=[[14, 200, 2], [-14, 200, 2]]; RepeatFiniteLoopsTimes=4; TargetElectronsUp=6; TargetElectronsDown=6; GsWeight=0.1; TSPTau=0.1; TSPTimeSteps=5; TSPAdvanceEach=14; TSPAlgorithm="Krylov"; TSPSites=[8]; TSPLoops=[0]; TSPProductOrSum="product"; string TSPOp0:TSPOperator=expression; string TSPOp0:OperatorExpression="c"; dmrgpp-6.02/TestSuite/inputs/input21.ain000066400000000000000000000014111414604301300201710ustar00rootroot00000000000000##Ainur 1.0 TotalNumberOfSites=8; NumberOfTerms=2; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1.0]; Model="Heisenberg"; HeisenbergTwiceS=1; SolverOptions="twositedmrg,TimeStepTargeting,restart,fixLegacyBugs"; Version="247b335fe1542909b90be8647456bfd8fd56191c"; RestartFilename="data20"; OutputFile="data21"; InfiniteLoopKeptStates=60; FiniteLoops=[[6, 100, 2],[-6, 100, 2]]; RepeatFiniteLoopsTimes=2; TargetSzPlusConst=4; GsWeight=0.1; TSPTau=0.1; TSPTimeSteps=5; TSPAdvanceEach=6; TSPAlgorithm="Krylov"; TSPSites=[4]; TSPLoops=[0]; TSPProductOrSum="product"; string TSPOp0:TSPOperator=expression; string TSPOp0:OperatorExpression="sz"; dmrgpp-6.02/TestSuite/inputs/input21.inp000066400000000000000000000007351414604301300202200ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 2.5 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 2.5 Model=Heisenberg HeisenbergTwiceS=1 SolverOptions=none Version=247b335fe1542909b90be8647456bfd8fd56191c OutputFile=data21.txt InfiniteLoopKeptStates=100 FiniteLoops 4 7 200 0 -7 200 0 -7 200 0 7 200 0 TargetSzPlusConst=8 TargetSpinTimesTwo=0 UseSu2Symmetry=1 dmrgpp-6.02/TestSuite/inputs/input2100.inp000066400000000000000000000010431414604301300203510ustar00rootroot00000000000000TotalNumberOfSites=12 NumberOfTerms=3 DegreesOfFreedom=2 GeometryKind=chain GeometryOptions=ConstantValues Connectors 2 2 0 0 0 0 DegreesOfFreedom=2 GeometryKind=chain GeometryOptions=ConstantValues Connectors 2 2 0 0 0 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none GeometryEntangler=-1 Orbitals=1 Model=HeisenbergAncillaC HeisenbergTwiceS=1 SolverOptions=twositedmrg Version=version OutputFile=data2100 InfiniteLoopKeptStates=64 FiniteLoops 2 5 200 0 -10 400 0 TargetElectronsTotal=6 TargetSzPlusConst=12 Threads=8 dmrgpp-6.02/TestSuite/inputs/input2101.inp000066400000000000000000000016231414604301300203560ustar00rootroot00000000000000TotalNumberOfSites=12 NumberOfTerms=3 DegreesOfFreedom=2 GeometryKind=chain GeometryOptions=ConstantValues Connectors 2 2 1 0 0 0 DegreesOfFreedom=2 GeometryKind=chain GeometryOptions=ConstantValues Connectors 2 2 1 0 0 0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 Model=HeisenbergAncillaC HeisenbergTwiceS=1 TargetElectronsTotal=6 TargetSzPlusConst=12 Threads=8 SolverOptions=twositedmrg,restart,TargetingAncilla,normalizeTimeVectors Version=version OutputFile=data2101 InfiniteLoopKeptStates=data2100 FiniteLoops 2 10 400 2 -10 400 2 RepeatFiniteLoopsTimes=10 RecoverySave=%l%%1,@keep,@M=100 PrintHamiltonianAverage=s==c TruncationTolerance=1e-7 TridiagEps=1e-7 TridiagSteps=500 GsWeight=0.0 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=10 TSPAlgorithm=Krylov TSPSites 1 5 TSPLoops 1 0 TSPProductOrSum=product TSPOperator=expression OperatorExpression=identity dmrgpp-6.02/TestSuite/inputs/input2102.inp000066400000000000000000000021421414604301300203540ustar00rootroot00000000000000TotalNumberOfSites=12 NumberOfTerms=3 DegreesOfFreedom=2 GeometryKind=chain GeometryOptions=ConstantValues Connectors 2 2 1 0 0 -1 DegreesOfFreedom=2 GeometryKind=chain GeometryOptions=ConstantValues Connectors 2 2 1 0 0 -1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 Model=HeisenbergAncillaC HeisenbergTwiceS=1 TargetElectronsTotal=6 TargetSzPlusConst=12 InfiniteLoopKeptStates=data2101 FiniteLoops 2 10 400 2 -10 400 2 PrintHamiltonianAverage=s==c SolverOptions=CorrectionVectorTargeting,restart,twositedmrg CorrectionA=0 Version=version RestartSourceTvForPsi=0 RestartMappingTvs 4 -1 -1 -1 -1 RestartMapStages=0 OutputFile=data2102 DynamicDmrgType=0 TSPSites 1 5 TSPLoops 1 0 TSPProductOrSum=sum TSPEnergyForExp=0 CorrectionVectorFreqType=Real CorrectionVectorEta=0.03 CorrectionVectorAlgorithm=Krylov GsWeight=0.1 CorrectionVectorOmega=2.000 Threads=8 TSPOperator=raw RAW_MATRIX 4 4 -0.5 0 0 0 0 -0.5 0 0 0 0 0.5 0 0 0 0 0.5 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ci dmrg arguments=-p 12 ",,," #ci CollectBrakets 0 dmrgpp-6.02/TestSuite/inputs/input22.inp000066400000000000000000000007301414604301300202140ustar00rootroot00000000000000TotalNumberOfSites=60 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.5 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.5 Model=Heisenberg HeisenbergTwiceS=1 SolverOptions=none Version=e953d056acae438cabd88c58df0d92133368d52e OutputFile=data22.txt InfiniteLoopKeptStates=100 FiniteLoops 6 29 100 0 -29 100 0 -29 100 0 29 100 1 29 100 1 -1 100 1 TargetSzPlusConst=30 Threads=2 dmrgpp-6.02/TestSuite/inputs/input23.inp000066400000000000000000000006561414604301300202240ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=Heisenberg HeisenbergTwiceS=1 SolverOptions=none Version=55460ffd4e0d2587072e9595d7d4ed211c66e83e OutputFile=data23.txt InfiniteLoopKeptStates=60 FiniteLoops 3 7 100 0 -5 100 0 -2 100 0 TargetSzPlusConst=8 dmrgpp-6.02/TestSuite/inputs/input2300.inp000066400000000000000000000017111414604301300203550ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=6 Term0=Hopping DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -3.0 Term1=HoppingB DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1.0 Term2=ninj DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Term3=nana DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Term4=spasma DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Term5=yoyo DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 HubbardU=2.0 PairHopping=2.0 Model=Graphene Orbitals=2 SolverOptions=twositedmrg Version=5.63 OutputFile=data2300 InfiniteLoopKeptStates=100 FiniteLoops 3 7 100 0 -14 100 0 14 100 1 TargetElectronsUp=8 TargetElectronsDown=8 #ci observe arguments=",," dmrgpp-6.02/TestSuite/inputs/input24.inp000066400000000000000000000007031414604301300202160ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=Heisenberg HeisenbergTwiceS=1 SolverOptions=restart Version=55460ffd4e0d2587072e9595d7d4ed211c66e83e OutputFile=data24.txt InfiniteLoopKeptStates=60 FiniteLoops 2 -7 200 0 7 200 0 TargetSzPlusConst=8 RestartFilename=data23.txt dmrgpp-6.02/TestSuite/inputs/input25.inp000066400000000000000000000006661414604301300202270ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 2.5 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 2.5 Model=Heisenberg HeisenbergTwiceS=1 SolverOptions=none Version=247b335fe1542909b90be8647456bfd8fd56191c OutputFile=data25.txt InfiniteLoopKeptStates=60 FiniteLoops 4 7 100 0 -7 100 0 -7 100 0 7 100 0 TargetSzPlusConst=8 dmrgpp-6.02/TestSuite/inputs/input250.inp000066400000000000000000000012171414604301300203000ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 Term0=Hopping DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=version OutputFile=data250 InfiniteLoopKeptStates=100 FiniteLoops 3 7 100 0 -14 100 0 14 100 0 NumberOfTargetQns=2 TargetElectronsUp0=8 TargetElectronsDown0=8 TargetElectronsUp1=7 TargetElectronsDown1=8 #ci dmrg arguments= -p 12 "" dmrgpp-6.02/TestSuite/inputs/input2500.ain000066400000000000000000000007561414604301300203500ustar00rootroot00000000000000##Ainur 1.0 TotalNumberOfSites=8; NumberOfTerms=2; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1.0]; Model="Su3Model"; int Su3RepresentationP=1; real Mass=1.42; SolverOptions="twositedmrg,usecomplex"; Version="version"; OutputFile="data2500"; InfiniteLoopKeptStates=60; FiniteLoops=[[3, 100, 0],[-6, 100, 0]]; TargetSzPlusConst=12; TargetElectronsTotal=4; dmrgpp-6.02/TestSuite/inputs/input2510.ain000066400000000000000000000010771414604301300203460ustar00rootroot00000000000000##Ainur 1.0 TotalNumberOfSites=8; NumberOfTerms=3; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1.0]; gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[1.0]; Model="Su3Model"; int Su3RepresentationP=1; real Mass=1.42; SolverOptions="twositedmrg"; Version="version"; OutputFile="data2510"; InfiniteLoopKeptStates=60; FiniteLoops=[[3, 100, 0],[-6, 100, 0]]; TargetSzPlusConst=12; TargetElectronsTotal=4; dmrgpp-6.02/TestSuite/inputs/input26.inp000066400000000000000000000017741414604301300202310ustar00rootroot00000000000000TotalNumberOfSites=60 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=none Connectors 59 0.118 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.118 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=none Connectors 59 0.118 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.118 Model=Heisenberg HeisenbergTwiceS=1 SolverOptions=none Version=aec8964f7a782d87d587c27276acd41760808139 OutputFile=data26.txt InfiniteLoopKeptStates=100 FiniteLoops 6 29 100 0 -29 100 0 -29 100 0 29 100 1 29 100 1 -1 100 1 TargetSzPlusConst=30 Threads=2 dmrgpp-6.02/TestSuite/inputs/input27.inp000066400000000000000000000006311414604301300202210ustar00rootroot00000000000000TotalNumberOfSites=32 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=Heisenberg HeisenbergTwiceS=2 SolverOptions=none Version=version OutputFile=data27.txt InfiniteLoopKeptStates=60 FiniteLoops 4 15 100 0 -15 100 0 -15 100 0 15 100 0 TargetSzPlusConst=32 dmrgpp-6.02/TestSuite/inputs/input2700.ain000066400000000000000000000016021414604301300203410ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=50; NumberOfTerms=2; ### 1/2(S^+S^- + S^-S^+) part gt0:DegreesOfFreedom=1; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; ### S^zS^z part gt1:DegreesOfFreedom=1; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0.25]; Model="Heisenberg"; HeisenbergTwiceS=1; integer NumberOfExcited=3; OutputFile="data2700"; SolverOptions="twositedmrg"; Version="paper89"; InfiniteLoopKeptStates=100; FiniteLoops=[ [ 24, 100, 8], [-48, 100, 8], [ 48, 100, 8], [-48, 100, 8], [ 24, 100, 8], [ 24, 100, 2], [-48, 100, 2]]; # Keep a maximum of 1000 states, but allow truncation # with tolerance and minimum states as below TruncationTolerance="1e-10,100"; # Tolerance for Lanczos LanczosEps=1e-10; int LanczosSteps=600; Threads=4; #string MagneticFieldDirection="x"; #vector MagneticField=[0.40,...]; dmrgpp-6.02/TestSuite/inputs/input28.inp000066400000000000000000000010661414604301300202250ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 1.0 Connectors 1 1.0 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 1.0 Connectors 1 1.0 LadderLeg=2 Model=Heisenberg HeisenbergTwiceS=1 InfiniteLoopKeptStates=128 FiniteLoops 5 3 200 0 -6 200 0 6 200 0 -6 200 0 6 200 1 TargetSzPlusConst=4 TargetSpinTimesTwo=0 Threads=1 SolverOptions=twositedmrg Version=version TruncationTolerance=1e-7 LanczosEps=1e-7 OutputFile=data28.txt Orbitals=1 dmrgpp-6.02/TestSuite/inputs/input29.inp000066400000000000000000000017671414604301300202360ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 1.0 Connectors 1 1.0 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 1.0 Connectors 1 1.0 LadderLeg=2 Model=Heisenberg HeisenbergTwiceS=1 InfiniteLoopKeptStates=128 FiniteLoops 4 -6 200 2 6 200 2 -6 200 2 6 200 2 TargetSzPlusConst=4 TargetSpinTimesTwo=0 Threads=1 SolverOptions=CorrectionVectorTargeting,twositedmrg,minimizeDisk,restart CorrectionA=0 Version=version RestartFilename=data28.txt TruncationTolerance=1e-7 LanczosEps=1e-7 TridiagonalEps=1e-7 OutputFile=data29.txt DynamicDmrgType=0 TSPSites 1 2 TSPLoops 1 1 TSPProductOrSum=sum CorrectionVectorFreqType=Real CorrectionVectorEta=0.08 CorrectionVectorAlgorithm=Krylov Orbitals=1 GsWeight=0.1 CorrectionVectorOmega=2.0 TSPOperator=raw RAW_MATRIX 2 2 0.5 0 0 -0.5 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ci dmrg arguments= -p 12 ",," dmrgpp-6.02/TestSuite/inputs/input3.ain000066400000000000000000000010211414604301300201060ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="ladder"; GeometryOptions="ConstantValues"; LadderLeg=2; dir0:Connectors=[1.0]; dir1:Connectors=[1.0]; hubbardU=[0.0,...]; potentialV=[0.0, ...]; Model="HubbardOneBand"; SolverOptions="none"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data3"; InfiniteLoopKeptStates=100; FiniteLoops=[ [ 7, 400, 0], [-7, 400, 0], [-7, 400, 0], [ 7, 400, 1], [ 7, 400, 1], [-1, 400, 1]]; TargetElectronsUp=8; TargetElectronsDown=8; dmrgpp-6.02/TestSuite/inputs/input3.inp000066400000000000000000000012241414604301300201320ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues LadderLeg=2 Connectors 1 1.0 Connectors 1 1.0 hubbardU 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data3.txt InfiniteLoopKeptStates=100 FiniteLoops 6 7 400 0 -7 400 0 -7 400 0 7 400 1 7 400 1 -1 400 1 TargetElectronsUp=8 TargetElectronsDown=8 TargetSpinTimesTwo=0 #Threads=2 dmrgpp-6.02/TestSuite/inputs/input30.ain000066400000000000000000000011041414604301300201700ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=2; gt0:GeometryKind="ladder"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; gt0:dir1:Connectors=[1.0]; gt0:LadderLeg=2; gt1:GeometryKind="ladder"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1.0]; gt1:dir1:Connectors=[1.0]; gt1:LadderLeg=2; Model="Heisenberg"; HeisenbergTwiceS=1; InfiniteLoopKeptStates=128; FiniteLoops=[ [0.5*%lh, 200, 0], [-%lh, 200, 0], [%lh, 200, 0]]; TargetSzPlusConst=0.5*%n; Threads=1; SolverOptions="twositedmrg"; Version="version"; TruncationTolerance="1e-7"; dmrgpp-6.02/TestSuite/inputs/input3000.inp000066400000000000000000000023771414604301300203640ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 SolverOptions=CorrectionVectorTargeting CorrectionA=0 Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=data3000.txt InfiniteLoopKeptStates=100 FiniteLoops 16 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 GsWeight=0.1 TargetElectronsUp=8 TargetElectronsDown=8 Threads=4 DynamicDmrgType=0 TSPSites 1 8 TSPLoops 1 0 TSPProductOrSum=sum CorrectionVectorFreqType=Real DynamicDmrgSteps=400 DynamicDmrgEps=1e-16 DynamicDmrgAdvanceEach=1 CorrectionVectorOmega=0 CorrectionVectorEta=0.3 CorrectionVectorAlgorithm=Krylov TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ContinuedFraction=-b -10 -e 10 -s 0.01 -d 0.3 dmrgpp-6.02/TestSuite/inputs/input3001.inp000066400000000000000000000023261414604301300203570ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 32 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 SolverOptions=CorrectionVectorTargeting CorrectionA=0 Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=data3001.txt InfiniteLoopKeptStates=100 FiniteLoops 16 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 GsWeight=0.1 TargetElectronsUp=8 TargetElectronsDown=8 Threads=4 DynamicDmrgType=1 TSPSites 1 8 TSPLoops 1 0 TSPProductOrSum=sum DynamicDmrgSteps=400 DynamicDmrgEps=1e-16 DynamicDmrgAdvanceEach=1 CorrectionVectorOmega=0 CorrectionVectorEta=0.3 CorrectionVectorAlgorithm=Krylov CorrectionVectorFreqType=Real TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ContinuedFraction=-b -10 -e 10 -s 0.01 -d 0.3 dmrgpp-6.02/TestSuite/inputs/input3002.inp000066400000000000000000000023461414604301300203620ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 16 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 potentialV 32 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 SolverOptions=CorrectionVectorTargeting CorrectionA=0 Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=data3002.txt InfiniteLoopKeptStates=100 FiniteLoops 16 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 GsWeight=0.1 TargetElectronsUp=8 TargetElectronsDown=8 Threads=4 DynamicDmrgType=0 TSPSites 1 8 TSPLoops 1 0 TSPProductOrSum=sum CorrectionVectorFreqType=Real DynamicDmrgSteps=400 DynamicDmrgEps=1e-16 DynamicDmrgAdvanceEach=1 CorrectionVectorOmega=0 CorrectionVectorEta=0.3 CorrectionVectorAlgorithm=Krylov TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ContinuedFraction=-b -10 -e 10 -s 0.01 -d 0.3 dmrgpp-6.02/TestSuite/inputs/input3003.inp000066400000000000000000000023451414604301300203620ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 16 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 potentialV 32 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 SolverOptions=CorrectionVectorTargeting CorrectionA=0 Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=data3003.txt InfiniteLoopKeptStates=100 FiniteLoops 16 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 GsWeight=0.1 TargetElectronsUp=8 TargetElectronsDown=8 Threads=4 DynamicDmrgType=1 TSPSites 1 8 TSPLoops 1 0 TSPProductOrSum=sum CorrectionVectorFreqType=Real DynamicDmrgSteps=400 DynamicDmrgEps=1e-16 DynamicDmrgAdvanceEach=1 CorrectionVectorOmega=0 CorrectionVectorEta=0.3 CorrectionVectorAlgorithm=Krylov TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ContinuedFraction=-b -10 -e 10 -s 0.01 -d 0.3 dmrgpp-6.02/TestSuite/inputs/input3004.inp000066400000000000000000000027351414604301300203660ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 32 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 SolverOptions=CorrectionVectorTargeting,vectorwithoffsets CorrectionA=0 Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=data3004.txt InfiniteLoopKeptStates=100 FiniteLoops 16 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 GsWeight=0.1 TargetElectronsUp=8 TargetElectronsDown=8 Threads=4 DynamicDmrgType=0 TSPSites 4 14 15 1 0 TSPLoops 4 0 0 0 0 TSPProductOrSum=sum CorrectionVectorFreqType=Real DynamicDmrgSteps=400 DynamicDmrgEps=1e-16 DynamicDmrgAdvanceEach=1 CorrectionVectorOmega=0 CorrectionVectorEta=0.3 CorrectionVectorAlgorithm=Krylov TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ContinuedFraction=-b -10 -e 10 -s 0.01 -d 0.3 dmrgpp-6.02/TestSuite/inputs/input3005.inp000066400000000000000000000027321414604301300203640ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 32 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 SolverOptions=CorrectionVectorTargeting,vectorwithoffsets CorrectionA=0 Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=data3005.txt InfiniteLoopKeptStates=100 FiniteLoops 16 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 GsWeight=0.1 TargetElectronsUp=8 TargetElectronsDown=8 Threads=4 DynamicDmrgType=1 TSPSites 4 14 15 1 0 TSPLoops 4 0 0 0 0 TSPProductOrSum=sum CorrectionVectorFreqType=Real DynamicDmrgSteps=400 DynamicDmrgEps=1e-16 DynamicDmrgAdvanceEach=1 CorrectionVectorOmega=0 CorrectionVectorEta=0.3 CorrectionVectorAlgorithm=Krylov TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ContinuedFraction=-b -10 -e 10 -s 0.01 -d 0.3 dmrgpp-6.02/TestSuite/inputs/input3006.inp000066400000000000000000000027321414604301300203650ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 32 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 SolverOptions=CorrectionVectorTargeting,vectorwithoffsets CorrectionA=0 Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=data3006.txt InfiniteLoopKeptStates=100 FiniteLoops 16 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 GsWeight=0.1 TargetElectronsUp=8 TargetElectronsDown=8 Threads=4 DynamicDmrgType=2 TSPSites 4 14 15 1 0 TSPLoops 4 0 0 0 0 TSPProductOrSum=sum CorrectionVectorFreqType=Real DynamicDmrgSteps=400 DynamicDmrgEps=1e-16 DynamicDmrgAdvanceEach=1 CorrectionVectorOmega=0 CorrectionVectorEta=0.3 CorrectionVectorAlgorithm=Krylov TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ContinuedFraction=-b -10 -e 10 -s 0.01 -d 0.3 dmrgpp-6.02/TestSuite/inputs/input3007.inp000066400000000000000000000027351414604301300203710ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 potentialV 32 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 SolverOptions=CorrectionVectorTargeting,vectorwithoffsets CorrectionA=0 Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=data3007.txt InfiniteLoopKeptStates=100 FiniteLoops 16 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 GsWeight=0.1 TargetElectronsUp=8 TargetElectronsDown=8 Threads=4 DynamicDmrgType=3 TSPSites 4 14 15 1 0 TSPLoops 4 0 0 0 0 TSPProductOrSum=sum CorrectionVectorFreqType=Real DynamicDmrgSteps=400 DynamicDmrgEps=1e-16 DynamicDmrgAdvanceEach=1 CorrectionVectorOmega=0 CorrectionVectorEta=0.3 CorrectionVectorAlgorithm=Krylov TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ContinuedFraction=-b -10 -e 10 -s 0.01 -d 0.3 dmrgpp-6.02/TestSuite/inputs/input3008.inp000066400000000000000000000027511414604301300203700ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 16 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 potentialV 32 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 SolverOptions=CorrectionVectorTargeting,vectorwithoffsets CorrectionA=0 Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=data3008.txt InfiniteLoopKeptStates=100 FiniteLoops 16 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 GsWeight=0.1 TargetElectronsUp=8 TargetElectronsDown=8 Threads=4 DynamicDmrgType=0 TSPSites 4 14 15 1 0 TSPLoops 4 0 0 0 0 TSPProductOrSum=sum CorrectionVectorFreqType=Real DynamicDmrgSteps=400 DynamicDmrgEps=1e-16 DynamicDmrgAdvanceEach=1 CorrectionVectorOmega=0 CorrectionVectorEta=0.3 CorrectionVectorAlgorithm=Krylov TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ContinuedFraction=-b -10 -e 10 -s 0.01 -d 0.3 dmrgpp-6.02/TestSuite/inputs/input3009.inp000066400000000000000000000027511414604301300203710ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 16 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 potentialV 32 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 SolverOptions=CorrectionVectorTargeting,vectorwithoffsets CorrectionA=0 Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=data3009.txt InfiniteLoopKeptStates=100 FiniteLoops 16 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 GsWeight=0.1 TargetElectronsUp=8 TargetElectronsDown=8 Threads=4 DynamicDmrgType=1 TSPSites 4 14 15 1 0 TSPLoops 4 0 0 0 0 TSPProductOrSum=sum CorrectionVectorFreqType=Real DynamicDmrgSteps=400 DynamicDmrgEps=1e-16 DynamicDmrgAdvanceEach=1 CorrectionVectorOmega=0 CorrectionVectorEta=0.3 CorrectionVectorAlgorithm=Krylov TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ContinuedFraction=-b -10 -e 10 -s 0.01 -d 0.3 dmrgpp-6.02/TestSuite/inputs/input3010.inp000066400000000000000000000027531414604301300203630ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 16 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 potentialV 32 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 SolverOptions=CorrectionVectorTargeting,vectorwithoffsets CorrectionA=0 Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=data3010.txt InfiniteLoopKeptStates=100 FiniteLoops 16 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 GsWeight=0.1 TargetElectronsUp=8 TargetElectronsDown=8 Threads=4 DynamicDmrgType=2 TSPSites 4 14 15 1 0 TSPLoops 4 0 0 0 0 TSPProductOrSum=sum CorrectionVectorFreqType=Real DynamicDmrgSteps=400 DynamicDmrgEps=1e-16 DynamicDmrgAdvanceEach=1 CorrectionVectorOmega=0 CorrectionVectorEta=0.3 CorrectionVectorAlgorithm=Krylov TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ContinuedFraction=-b -10 -e 10 -s 0.01 -d 0.3 dmrgpp-6.02/TestSuite/inputs/input3011.inp000066400000000000000000000027521414604301300203630ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 16 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 potentialV 32 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 SolverOptions=CorrectionVectorTargeting,vectorwithoffsets CorrectionA=0 Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=data3011.txt InfiniteLoopKeptStates=100 FiniteLoops 16 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 GsWeight=0.1 TargetElectronsUp=8 TargetElectronsDown=8 Threads=4 DynamicDmrgType=3 TSPSites 4 14 15 1 0 TSPLoops 4 0 0 0 0 TSPProductOrSum=sum CorrectionVectorFreqType=Real DynamicDmrgSteps=400 DynamicDmrgEps=1e-16 DynamicDmrgAdvanceEach=1 CorrectionVectorOmega=0 CorrectionVectorEta=0.3 CorrectionVectorAlgorithm=Krylov TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ContinuedFraction=-b -10 -e 10 -s 0.01 -d 0.3 dmrgpp-6.02/TestSuite/inputs/input3020.ain000066400000000000000000000006271414604301300203430ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=6; NumberOfTerms=1; # hopping GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[-1.0]; #Model params Model="HubbardOneBand"; hubbardU=[10,...]; potentialV=[0,...]; SolverOptions="twositedmrg,useComplex"; Version="6.01"; InfiniteLoopKeptStates=100; FiniteLoops=[[2, 20, 0], [-4, 200, 0], [ 4, 200, 0]]; TargetSzPlusConst=3; TargetElectronsTotal=6; dmrgpp-6.02/TestSuite/inputs/input3021.ain000066400000000000000000000016201414604301300203360ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=6; NumberOfTerms=1; # hopping GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[-1.0]; #Model params Model="HubbardOneBand"; hubbardU=[10,...]; potentialV=[0,...]; SolverOptions="CorrectionVectorTargeting,twositedmrg,minimizeDisk,restart,fixLegacyBugs,useComplex"; Version="6.01"; InfiniteLoopKeptStates=100; FiniteLoops=[ [-4, 200, 0], [ 4, 200, 0]]; TargetSzPlusConst=3; TargetElectronsTotal=6; # This has been added for CV: CorrectionA=0; RestartFilename="data3020"; TruncationTolerance=1e-7; LanczosEps=1e-7; TridiagonalEps=1e-7; DynamicDmrgType=0; TSPSites=[4]; TSPLoops=[0]; TSPProductOrSum="sum"; CorrectionVectorFreqType="Real"; CorrectionVectorEta=0.1; CorrectionVectorAlgorithm="Krylov"; Orbitals=1; GsWeight=0.1; CorrectionVectorOmega=0.275; Intent="ARPES"; string TSPOp0:TSPOperator="expression"; string TSPOp0:OperatorExpression="c"; dmrgpp-6.02/TestSuite/inputs/input3022.ain000066400000000000000000000017121414604301300203410ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=6; NumberOfTerms=1; # hopping GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[-1.0]; #Model params Model="HubbardOneBand"; hubbardU=[10,...]; potentialV=[0,...]; SolverOptions="TargetingCVEvolution,twositedmrg,minimizeDisk,restart,fixLegacyBugs,useComplex"; Version="6.01"; InfiniteLoopKeptStates=100; FiniteLoops=[ [-4, 200, 0], [ 4, 200, 0]]; TargetSzPlusConst=3; TargetElectronsTotal=6; RepeatFiniteLoopsTimes=3; # This has been added for CV: CorrectionA=0; RestartFilename="data3020"; TruncationTolerance=1e-7; LanczosEps=1e-7; TridiagonalEps=1e-7; DynamicDmrgType=0; TSPSites=[4]; TSPLoops=[0]; TSPProductOrSum="sum"; CorrectionVectorFreqType="Real"; CorrectionVectorEta=0.1; CorrectionVectorAlgorithm="Krylov"; Orbitals=1; GsWeight=0.1; CorrectionVectorOmega=0.275; CVnForFraction=2; TSPAdvanceEach=4; Intent="ARPES"; string TSPOp0:TSPOperator="expression"; string TSPOp0:OperatorExpression="c"; dmrgpp-6.02/TestSuite/inputs/input3023.ain000066400000000000000000000017141414604301300203440ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=6; NumberOfTerms=1; # hopping GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[-1.0]; #Model params Model="HubbardOneBand"; hubbardU=[10,...]; potentialV=[0,...]; SolverOptions="TargetingCVEvolution,twositedmrg,minimizeDisk,restart,fixLegacyBugs,useComplex"; Version="6.01"; InfiniteLoopKeptStates=100; FiniteLoops=[ [-4, 200, 0], [ 4, 200, 0]]; TargetSzPlusConst=3; TargetElectronsTotal=6; RepeatFiniteLoopsTimes=20; # This has been added for CV: CorrectionA=0; RestartFilename="data3020"; TruncationTolerance=1e-7; LanczosEps=1e-7; TridiagonalEps=1e-7; DynamicDmrgType=0; TSPSites=[4]; TSPLoops=[0]; TSPProductOrSum="sum"; CorrectionVectorFreqType="Real"; CorrectionVectorEta=0.1; CorrectionVectorAlgorithm="Krylov"; Orbitals=1; GsWeight=0.1; CorrectionVectorOmega=0.275; CVnForFraction=10; TSPAdvanceEach=4; Intent="ARPES"; string TSPOp0:TSPOperator="expression"; string TSPOp0:OperatorExpression="c"; dmrgpp-6.02/TestSuite/inputs/input3100.ain000066400000000000000000000010541414604301300203350ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=32; NumberOfTerms=2; gt0:DegreesOfFreedom=1; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1]; gt1:DegreesOfFreedom=1; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1]; Model="Heisenberg"; integer HeisenbergTwiceS=1; SolverOptions="twositedmrg,fixLegacyBugs"; Version="version"; InfiniteLoopKeptStates=100; FiniteLoops=[ [15, 150, 0], [-30, 200, 0], [ 30, 200, 0]]; integer IsPeriodicX=0; OutputFile="data3100"; integer TargetSzPlusConst=16; dmrgpp-6.02/TestSuite/inputs/input3101.dai000066400000000000000000000021661414604301300203310ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=32; NumberOfTerms=2; gt0:DegreesOfFreedom=1; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1]; gt1:DegreesOfFreedom=1; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1]; #For the Fourier transform string GeometryName="chain"; Model="Heisenberg"; integer HeisenbergTwiceS=1; SolverOptions="twositedmrg,fixLegacyBugs,CorrectionVectorTargeting,restart"; string RestartFilename="data3100"; Version="version"; InfiniteLoopKeptStates=100; FiniteLoops=[ [-30, 200, 2], [ 30, 200, 2]]; integer IsPeriodicX=0; integer TargetSzPlusConst=16; integer TridiagSteps=400; real TridiagEps=1e-9; string TruncationTolerance="1e-10,100"; real CorrectionA=0; integer DynamicDmrgType=0; TSPSites=[16]; TSPLoops=[0]; TSPProductOrSum=sum; string CorrectionVectorFreqType="Real"; real CorrectionVectorEta=0.05; string CorrectionVectorAlgorithm="Krylov"; Orbitals=1; GsWeight=0.1; TSPOperator="expression"; OperatorExpression="sminus"; string Observable="splus"; real OmegaBegin=0; real OmegaStep=0.025; integer OmegaTotal=5; integer OmegaOffset=0; dmrgpp-6.02/TestSuite/inputs/input32.ain000066400000000000000000000012121414604301300201720ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; GeometryKind=chain; GeometryOptions=ConstantValues; dir0:Connectors=[1.0]; hubbardU=[1.0, ...]; potentialV=[0.0, ...]; Model="HubbardOneBand"; SolverOptions="TimeStepTargeting"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data32"; InfiniteLoopKeptStates=64; FiniteLoops=[[0.5*%lh, 100, 0], [-%lh, 100, 0]]; TargetElectronsUp=0.5*%n; TargetElectronsDown=0.5*%n; GsWeight=0.1; TSPTau=0.1; TSPTimeSteps=4; TSPAdvanceEach=5; TSPAlgorithm="Krylov"; TSPSites=[%c]; TSPLoops=[1]; TSPProductOrSum="product"; string TSPOp0:TSPOperator=expression; string TSPOp0:OperatorExpression="c"; dmrgpp-6.02/TestSuite/inputs/input320.ain000066400000000000000000000025731414604301300202650ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=1; #Only one term: the hopping DegreesOfFreedom=2; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[ [-1.0, 0.0], [0.0, -1.0] ]; #There are 4 values of U #Taken from ParametersModelFeAs.h #std::cout<<"U[0]="<,," #ci CollectBrakets 0 #OmegaBegin=0 #OmegaStep=0.1 #OmegaTotal=20 #JacksonOrLorentz=Jackson dmrgpp-6.02/TestSuite/inputs/input3510.inp000066400000000000000000000007171414604301300203660ustar00rootroot00000000000000TotalNumberOfSites=64 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=Heisenberg HeisenbergTwiceS=1 SolverOptions=twositedmrg Version=247b335fe1542909b90be8647456bfd8fd56191c OutputFile=data3510 InfiniteLoopKeptStates=64 FiniteLoops 3 31 200 0 -62 300 0 62 400 0 TargetSzPlusConst=32 TruncationTolerance=1e-10 dmrgpp-6.02/TestSuite/inputs/input3511.inp000066400000000000000000000016121414604301300203620ustar00rootroot00000000000000TotalNumberOfSites=64 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=Heisenberg HeisenbergTwiceS=1 TargetSzPlusConst=32 SolverOptions=twositedmrg,TargetingChebyshev,restart Version=version OutputFile=data3511 RestartFilename=data3510 InfiniteLoopKeptStates=100 FiniteLoops 2 -62 200 2 62 200 2 RepeatFiniteLoopsTimes=10 TruncationTolerance=1e-9 Threads=4 GsWeight=0.1 TSPTau=1.0 TSPTimeSteps=3 TSPAlgorithm=Chebyshev ChebyshevTransform 2 0.1 1.83004 TSPAdvanceEach=62 TSPSites 1 31 TSPLoops 1 0 TSPProductOrSum=sum TSPOperator=expression OperatorExpression=sz #ChebyshevC=0.1 #ChebyshevE0=-28.1754 #ChebyshevSign=1 #OmegaBegin=0.0 #OmegaTotal=200 #OmegaStep=0.02 #JacksonOrLorentz=0 #ci dmrg arguments=-p 12 "," #ci procOmegas -p dmrgpp-6.02/TestSuite/inputs/input3512.inp000066400000000000000000000016101414604301300203610ustar00rootroot00000000000000TotalNumberOfSites=64 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=Heisenberg HeisenbergTwiceS=1 TargetSzPlusConst=32 SolverOptions=twositedmrg,TargetingChebyshev,restart Version=version OutputFile=data3512 RestartFilename=data3510 InfiniteLoopKeptStates=100 FiniteLoops 2 -62 200 2 62 200 2 RepeatFiniteLoopsTimes=50 TruncationTolerance=1e-9 Threads=4 GsWeight=0.1 TSPTau=1.0 TSPTimeSteps=3 TSPAlgorithm=Chebyshev ChebyshevTransform 2 0.2 4.64758 TSPAdvanceEach=62 TSPSites 1 31 TSPLoops 1 0 TSPProductOrSum=sum TSPOperator=expression OperatorExpression=sz #ChebyshevC=0.2 #ChebyshevE0=-28.1754 #ChebyshevSign=1 #OmegaBegin=0.0 #OmegaTotal=200 #OmegaStep=0.02 #JacksonOrLorentz=0 #ci dmrg arguments=-p 12 "," #ci procOmegas -p dmrgpp-6.02/TestSuite/inputs/input3530.inp000066400000000000000000000016361414604301300203710ustar00rootroot00000000000000TotalNumberOfSites=32 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.3 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.3 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -0.075 potentialV 64 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=TjMultiOrb SolverOptions=twositedmrg Version=version OutputFile=data3530 InfiniteLoopKeptStates=100 FiniteLoops 5 15 1000 0 -30 1000 0 30 1000 0 -30 1000 0 30 1000 0 Threads=4 TruncationTolerance=1e-8 TargetElectronsUp=16 TargetElectronsDown=16 Orbitals=1 dmrgpp-6.02/TestSuite/inputs/input3532.inp000066400000000000000000000026021414604301300203650ustar00rootroot00000000000000TotalNumberOfSites=32 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.3 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.3 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -0.075 potentialV 64 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=TjMultiOrb Orbitals=1 TargetElectronsUp=16 TargetElectronsDown=16 SolverOptions=twositedmrg,TargetingChebyshev,restart,minimizeDisk Version=version OutputFile=data3532 RestartFilename=data3530 InfiniteLoopKeptStates=64 FiniteLoops 2 -30 200 2 30 200 2 RepeatFiniteLoopsTimes=50 Threads=4 TruncationTolerance=1e-8 GsWeight=0.1 TSPTau=1.0 TSPTimeSteps=3 TSPAlgorithm=Chebyshev ChebyshevTransform 2 0.07 -0.2508063720171 TSPAdvanceEach=30 TSPSites 1 15 TSPLoops 1 0 TSPProductOrSum=sum TSPOperator=expression OperatorExpression=c?0' #ChebyshevC=0.07 #ChebyshevE0=-6.52419468547 #ChebyshevSign=-1 #OmegaBegin=-4.0 #OmegaTotal=400 #OmegaStep=0.02 #JacksonOrLorentz=0 #ci dmrg arguments= -p 12 "," #ci procOmegas -p dmrgpp-6.02/TestSuite/inputs/input363.inp000066400000000000000000000035721414604301300203130ustar00rootroot00000000000000TotalNumberOfSites=8 Model=FeAsBasedSc FeAsMode=INT_PAPER33 Orbitals=2 hubbardU 4 4.50660 1.68998 -2.25330 -1.12665 SolverOptions=twositedmrg Version=version OutputFile=data363.txt InfiniteLoopKeptStates=100 FiniteLoops 7 3 100 0 -6 100 0 6 100 0 -6 100 0 6 100 0 -6 100 0 6 100 1 TargetElectronsUp=8 TargetElectronsDown=8 Threads=16 LanczosSteps=500 NumberOfTerms=1 DegreesOfFreedom=2 GeometryKind=LongRange GeometryOptions=none GeometryMaxConnections=0 Connectors 16 16 0 0 -0.024 0 -0.334 -0.177 0.085 0.216 0 0 0 0 0 0 0 0 0 0 0 0.216 0.177 0.212 -0.216 0.109 0 0 0 0 0 0 0 0 -0.024 0 0 0 0.085 0.216 -0.334 -0.177 0 0 0 0 0 0 0 0 0 0.216 0 0 -0.216 0.109 0.177 0.212 0 0 0 0 0 0 0 0 -0.334 0.177 0.085 -0.216 0 0 -0.024 0 -0.334 -0.177 0.085 0.216 0 0 0 0 -0.177 0.212 0.216 0.109 0 0 0 0.216 0.177 0.212 -0.216 0.109 0 0 0 0 0.085 -0.216 -0.334 0.177 -0.024 0 0 0 0.085 0.216 -0.334 -0.177 0 0 0 0 0.216 0.109 -0.177 0.212 0 0.216 0 0 -0.216 0.109 0.177 0.212 0 0 0 0 0 0 0 0 -0.334 0.177 0.085 -0.216 0 0 -0.024 0 -0.334 -0.177 0.085 0.216 0 0 0 0 -0.177 0.212 0.216 0.109 0 0 0 0.216 0.177 0.212 -0.216 0.109 0 0 0 0 0.085 -0.216 -0.334 0.177 -0.024 0 0 0 0.085 0.216 -0.334 -0.177 0 0 0 0 0.216 0.109 -0.177 0.212 0 0.216 0 0 -0.216 0.109 0.177 0.212 0 0 0 0 0 0 0 0 -0.334 0.177 0.085 -0.216 0 0 -0.024 0 0 0 0 0 0 0 0 0 -0.177 0.212 0.216 0.109 0 0 0 0.216 0 0 0 0 0 0 0 0 0.085 -0.216 -0.334 0.177 -0.024 0 0 0 0 0 0 0 0 0 0 0 0.216 0.109 -0.177 0.212 0 0.216 0 0 potentialV 32 0.423 0.423 0.423 0.423 0.423 0.423 0.423 0.423 -0.314 -0.314 -0.314 -0.314 -0.314 -0.314 -0.314 -0.314 0.423 0.423 0.423 0.423 0.423 0.423 0.423 0.423 -0.314 -0.314 -0.314 -0.314 -0.314 -0.314 -0.314 -0.314 #ci observe arguments=",,,,,,,,,,ss" dmrgpp-6.02/TestSuite/inputs/input4.ain000066400000000000000000000012341414604301300201150ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind=chain; GeometryOptions=ConstantValues; dir0:Connectors=[1.0]; hubbardU=[1.0, ...]; potentialV=[0.0, ...]; Model="HubbardOneBand"; SolverOptions="TimeStepTargeting"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data4"; InfiniteLoopKeptStates=64; FiniteLoops=[ [7, 100, 0], [-7, 100, 0], [-7, 100, 0]]; TargetElectronsUp=8; TargetElectronsDown=8; GsWeight=0.1; TSPTau=0.1; TSPTimeSteps=4; TSPAdvanceEach=5; TSPAlgorithm="Krylov"; TSPSites=[7]; TSPLoops=[2]; TSPProductOrSum="product"; string TSPOp0:TSPOperator=expression; string TSPOp0:OperatorExpression="c"; dmrgpp-6.02/TestSuite/inputs/input4.inp000066400000000000000000000014511414604301300201350ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data4.txt InfiniteLoopKeptStates=64 FiniteLoops 3 7 100 0 -7 100 0 -7 100 0 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=4 TSPAdvanceEach=5 TSPAlgorithm=Krylov TSPSites 1 7 TSPLoops 1 2 TSPProductOrSum=product TSPOperator=cooked COOKED_OPERATOR=c COOKED_EXTRA 2 0 0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input40.inp000066400000000000000000000014501414604301300202140ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=2 GeometryKind=ladderx GeometryOptions=ConstantValues LadderLeg=2 Connectors 2 2 -0.058 0 0 -0.2196 Connectors 2 2 -0.2196 0 0 -0.058 Connectors 2 2 +0.20828 +0.079 +0.079 +0.20828 Connectors 2 2 +0.20828 -0.079 -0.079 +0.20828 Model=FeAsBasedSc FeAsMode=INT_PAPER33 Orbitals=2 hubbardU 4 0.0 0.0 0.0 0.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 SolverOptions=none Version=61289987cdd32b8485213ac0415baf4e9cd16432 OutputFile=data40.txt InfiniteLoopKeptStates=60 FiniteLoops 4 3 100 0 -3 100 0 -3 100 0 3 100 0 TargetElectronsUp=8 TargetElectronsDown=8 TargetSpinTimesTwo=0 UseSu2Symmetry=1 dmrgpp-6.02/TestSuite/inputs/input4000.inp000066400000000000000000000013461414604301300203600ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=ladderx LadderLeg=2 GeometryOptions=none Connectors 4 1 1 1 1 Connectors 3 1 0 1 Connectors 3 (0,-0.5) (0,0.5) 0 Connectors 3 (0,0.5) (0,-0.5) 0 DegreesOfFreedom=1 GeometryKind=longchain LongChainDistance=4 GeometryOptions=useComplex Connectors 2 (0,-0.50) (0,0.50) hubbardU 6 5 5 5 5 5 5 potentialV 12 0 0 0 0 0 0 0 0 0 0 0 0 Model=KaneMeleHubbard SolverOptions=useComplex Version=version OutputFile=data4000.txt InfiniteLoopKeptStates=200 FiniteLoops 9 2 200 0 -2 200 0 -2 200 0 2 200 0 2 200 0 -2 300 0 -2 300 0 2 300 0 2 300 0 TargetElectronsUp=0 TargetElectronsDown=1 IsPeriodicX=0 IsPeriodicY=0 Orbitals=1 dmrgpp-6.02/TestSuite/inputs/input4001.inp000066400000000000000000000015721414604301300203620ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=ladderx LadderLeg=2 GeometryOptions=none Connectors 6 1 1 1 1 1 1 Connectors 4 1 0 1 0 Connectors 4 (0,-0.50) (0,0.50) (0,-0.50) 0 Connectors 4 (0,0.50) (0,-0.50) (0,0.50) 0 DegreesOfFreedom=1 GeometryKind=longchain LongChainDistance=4 GeometryOptions=none Connectors 4 (0,-0.50) (0,0.50) (0,0.50) (0,-0.50) hubbardU 8 5 5 5 5 5 5 5 5 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=KaneMeleHubbard SolverOptions=useComplex Version=version OutputFile=data4001.txt InfiniteLoopKeptStates=200 FiniteLoops 20 3 200 0 -3 200 0 -3 200 0 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 TargetElectronsUp=0 TargetElectronsDown=1 IsPeriodicX=0 IsPeriodicY=0 Orbitals=1 dmrgpp-6.02/TestSuite/inputs/input41.inp000066400000000000000000000014761414604301300202250ustar00rootroot00000000000000 TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=2 GeometryKind=ladderx GeometryOptions=ConstantValues LadderLeg=2 Connectors 2 2 -0.058 0 0 -0.2196 Connectors 2 2 -0.2196 0 0 -0.058 Connectors 2 2 +0.20828 +0.079 +0.079 +0.20828 Connectors 2 2 +0.20828 -0.079 -0.079 +0.20828 hubbardU 4 1.0 -1.5 -2.0 -1.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=FeAsBasedSc FeAsMode=INT_PAPER33 SolverOptions=none Version=61289987cdd32b8485213ac0415baf4e9cd16432 OutputFile=data41.txt InfiniteLoopKeptStates=60 FiniteLoops 4 3 100 0 -3 100 0 -3 100 0 3 100 0 TargetElectronsUp=8 TargetElectronsDown=8 UseSu2Symmetry=1 TargetSpinTimesTwo=0 Orbitals=2 dmrgpp-6.02/TestSuite/inputs/input410.inp000066400000000000000000000022431414604301300202760ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues LadderLeg=2 Connectors 1 1.0 Connectors 1 1.0 hubbardU 8 10 10 10 10 10 10 10 10 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,vectorwithoffsets Version=d2e934a418a042b6883a2aa9bf9be45e269214c9 OutputFile=data410.txt InfiniteLoopKeptStates=100 FiniteLoops 17 3 200 0 -3 200 0 -3 200 0 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 TargetElectronsUp=4 TargetElectronsDown=4 TargetSpinTimesTwo=0 Threads=2 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 2 4 2 TSPLoops 2 0 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input4300.inp000066400000000000000000000037201414604301300203610ustar00rootroot00000000000000TotalNumberOfSites=8 Model=FeAsBasedSc FeAsMode=INT_PAPER33 Orbitals=2 hubbardU 4 4.50660 1.68998 -2.25330 -1.12665 SolverOptions=twositedmrg Version=version OutputFile=data4300.txt InfiniteLoopKeptStates=100 FiniteLoops 5 3 200 0 -3 300 0 -3 300 0 3 300 1 3 300 1 TruncationTolerance=1e-4 TargetElectronsUp=8 TargetElectronsDown=8 TargetSpinTimesTwo=0 Threads=16 LanczosSteps=500 NumberOfTerms=1 DegreesOfFreedom=2 GeometryKind=LongRange GeometryOptions=none GeometryMaxConnections=0 Connectors 16 16 0 0 0.024 0 0.334 0.177 -0.085 -0.216 0 0 0 0 0 0 0 0 0 0 0 -0.216 -0.177 -0.212 0.216 -0.109 0 0 0 0 0 0 0 0 0.024 0 0 0 -0.085 -0.216 0.334 0.177 0 0 0 0 0 0 0 0 0 -0.216 0 0 0.216 -0.109 -0.177 -0.212 0 0 0 0 0 0 0 0 0.334 -0.177 -0.085 0.216 0 0 0.024 0 0.334 0.177 -0.085 -0.216 0 0 0 0 0.177 -0.212 -0.216 -0.109 0 0 0 -0.216 -0.177 -0.212 0.216 -0.109 0 0 0 0 -0.085 0.216 0.334 -0.177 0.024 0 0 0 -0.085 -0.216 0.334 0.177 0 0 0 0 -0.216 -0.109 0.177 -0.212 0 -0.216 0 0 0.216 -0.109 -0.177 -0.212 0 0 0 0 0 0 0 0 0.334 -0.177 -0.085 0.216 0 0 0.024 0 0.334 0.177 -0.085 -0.216 0 0 0 0 0.177 -0.212 -0.216 -0.109 0 0 0 -0.216 -0.177 -0.212 0.216 -0.109 0 0 0 0 -0.085 0.216 0.334 -0.177 0.024 0 0 0 -0.085 -0.216 0.334 0.177 0 0 0 0 -0.216 -0.109 0.177 -0.212 0 -0.216 0 0 0.216 -0.109 -0.177 -0.212 0 0 0 0 0 0 0 0 0.334 -0.177 -0.085 0.216 0 0 0.024 0 0 0 0 0 0 0 0 0 0.177 -0.212 -0.216 -0.109 0 0 0 -0.216 0 0 0 0 0 0 0 0 -0.085 0.216 0.334 -0.177 0.024 0 0 0 0 0 0 0 0 0 0 0 -0.216 -0.109 0.177 -0.212 0 -0.216 0 0 potentialV 32 0.423 0.423 0.423 0.423 0.423 0.423 0.423 0.423 -0.314 -0.314 -0.314 -0.314 -0.314 -0.314 -0.314 -0.314 0.423 0.423 0.423 0.423 0.423 0.423 0.423 0.423 -0.314 -0.314 -0.314 -0.314 -0.314 -0.314 -0.314 -0.314 #ci observe arguments=ss,'' #ci observe arguments='' dmrgpp-6.02/TestSuite/inputs/input4500.inp000066400000000000000000000025031414604301300203610ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=3 GeometryMaxConnections=0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 8 8 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 8 8 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 8 8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 MagneticField 8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HeisenbergAnisotropic HeisenbergTwiceS=1 SolverOptions=twositedmrg Version=none OutputFile=data4500.txt InfiniteLoopKeptStates=50 FiniteLoops 5 3 100 0 -6 150 0 6 150 0 -6 150 0 6 150 0 TruncationTolerance=1e-8 Threads=4 dmrgpp-6.02/TestSuite/inputs/input4600.inp000066400000000000000000000017521414604301300203670ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=5 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 -1 Connectors 1 -1 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 -0.125 Connectors 1 -0.125 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 0.5 Connectors 1 0.5 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 0.5 Connectors 1 0.5 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 0 Connectors 1 0 LadderLeg=2 Model=HubbardOneBandExtendedSuper hubbardU 6 6 6 6 6 6 6 potentialV 12 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=28 FiniteLoops 7 2 200 0 -4 200 0 4 200 0 -4 200 0 4 200 0 -4 200 0 4 200 1 TargetElectronsUp=2 TargetElectronsDown=2 Threads=1 SolverOptions=twositedmrg Version=version TruncationTolerance=1e-7 LanczosEps=1e-7 OutputFile=data4600.txt Orbitals=1 dmrgpp-6.02/TestSuite/inputs/input4601.inp000066400000000000000000000027301414604301300203650ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=5 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 -1 Connectors 1 -1 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 -0.125 Connectors 1 -0.125 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 0.5 Connectors 1 0.5 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 0.5 Connectors 1 0.5 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 0 Connectors 1 0 LadderLeg=2 Model=HubbardOneBandExtendedSuper hubbardU 6 6 6 6 6 6 6 potentialV 12 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=128 FiniteLoops 4 -4 200 2 4 200 2 -4 200 2 4 200 2 TargetElectronsUp=2 TargetElectronsDown=2 Threads=1 SolverOptions=CorrectionVectorTargeting,twositedmrg,minimizeDisk,restart CorrectionA=0 Version=version RestartFilename=data4600.txt TruncationTolerance=1e-7 LanczosEps=1e-7 TridiagonalEps=1e-7 OutputFile=data4601.txt DynamicDmrgType=0 TSPSites 1 2 TSPLoops 1 1 TSPProductOrSum=sum CorrectionVectorFreqType=Real CorrectionVectorEta=0.08 CorrectionVectorAlgorithm=Krylov Orbitals=1 GsWeight=0.1 CorrectionVectorOmega=0.275 TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0.5 0 0 0 0 -0.5 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 Intent=NeutronsSzSz #ci dmrg arguments=",," #ci CollectBrakets 0 dmrgpp-6.02/TestSuite/inputs/input4650.ain000066400000000000000000000011031414604301300203430ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=2; # S+S- gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; # SzSz gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1.0]; Model="HeisenbergMix"; HeisenbergTwiceS=2; integer HeisenbergTwiceSborder=1; SolverOptions="twositedmrg"; Version="247b335fe1542909b90be8647456bfd8fd56191c"; OutputFile="data4650"; InfiniteLoopKeptStates=60; FiniteLoops=[[3, 100, 0], [-6, 200, 0], [6, 200, 1]]; # TargetSzPlusConst = Sz + 1*(N - 2) + 0.5*2 TargetSzPlusConst=7; dmrgpp-6.02/TestSuite/inputs/input4651.ain000066400000000000000000000010331414604301300203460ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=6; NumberOfTerms=2; DegreesOfFreedom=1; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; DegreesOfFreedom=1; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1.0]; Model="Heisenberg"; integer HeisenbergTwiceS=2; SolverOptions="twositedmrg"; Version="247b335fe1542909b90be8647456bfd8fd56191c"; OutputFile="data4651"; InfiniteLoopKeptStates=60; FiniteLoops=[[2, 100, 0], [-4, 200, 0], [4, 200, 0]]; integer TargetSzPlusConst=6; dmrgpp-6.02/TestSuite/inputs/input4652.ain000066400000000000000000000010331414604301300203470ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=2; DegreesOfFreedom=1; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[0.0]; DegreesOfFreedom=1; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1.0]; Model="Heisenberg"; integer HeisenbergTwiceS=2; SolverOptions="twositedmrg"; Version="247b335fe1542909b90be8647456bfd8fd56191c"; OutputFile="data4652"; InfiniteLoopKeptStates=60; FiniteLoops=[[3, 100, 0], [-6, 200, 0], [6, 200, 0]]; integer TargetSzPlusConst=8; dmrgpp-6.02/TestSuite/inputs/input4653.ain000066400000000000000000000016101414604301300203510ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=6; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[1.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[1.0]; gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[1.0]; gt3:GeometryKind="chain"; gt3:GeometryOptions="ConstantValues"; gt3:dir0:Connectors=[1.0]; gt4:GeometryKind="chain"; gt4:GeometryOptions="ConstantValues"; gt4:dir0:Connectors=[1.0]; gt5:GeometryKind="chain"; gt5:GeometryOptions="ConstantValues"; gt5:dir0:Connectors=[1.0]; Model="HeisenbergMix"; integer HeisenbergTwiceS=2; integer HeisenbergTwiceSborder=2; SolverOptions="twositedmrg"; Version="247b335fe1542909b90be8647456bfd8fd56191c"; OutputFile="data4650"; InfiniteLoopKeptStates=60; FiniteLoops=[[3, 100, 0], [-6, 200, 0], [6, 200, 0]]; integer TargetSzPlusConst=6; dmrgpp-6.02/TestSuite/inputs/input467.inp000066400000000000000000000024521414604301300203140ustar00rootroot00000000000000TotalNumberOfSites=32 NumberOfTerms=5 Model=HubbardOneBandExtendedSuper SolverOptions=twositedmrg Version=version OutputFile=data467.txt InfiniteLoopKeptStates=64 FiniteLoops 5 15 100 0 -30 100 0 30 100 0 -30 100 0 30 100 1 TargetElectronsUp=16 TargetElectronsDown=16 Threads=16 hubbardU 32 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 6.400 potentialV 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 -1.0 Connectors 1 0.0 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 0.0 Connectors 1 2.40000 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 0.0 Connectors 1 -3.20000 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 0.0 Connectors 1 -3.20000 LadderLeg=2 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 0.0 Connectors 1 1.60000 #ci observe arguments=",,,ss" dmrgpp-6.02/TestSuite/inputs/input4700.inp000066400000000000000000000010721414604301300203630ustar00rootroot00000000000000TotalNumberOfSites=4 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1.0 hubbardFU 4 10 10 10 10 potentialFV 8 20 20 20 20 20 20 20 20 NumberPhonons=4 lambdaFP 4 0.2 0.2 0.2 0.2 potentialPV 4 0.4 0.4 0.4 0.4 Model=HubbardHolstein SolverOptions=MatrixProductStored Version=version OutputFile=data4700 InfiniteLoopKeptStates=100 FiniteLoops 3 1 100 0 -2 100 0 2 100 0 TargetElectronsUp=2 TargetElectronsDown=2 dmrgpp-6.02/TestSuite/inputs/input4702.ain000066400000000000000000000013111414604301300203420ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=2; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[-1.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0.0]; vector hubbardFU=[0,...]; vector potentialFV=[0,...]; integer NumberPhonons=1; vector lambdaFP=[0.0,...]; vector potentialPV=[0.0,...]; Model="HubbardHolstein"; SolverOptions="MatrixProductStored"; Version="version"; InfiniteLoopKeptStates=100; FiniteLoops=[ [3, 100, 40], [-6, 100, 8], [6, 100, 0]]; TargetElectronsUp=1; TargetElectronsDown=0; OutputFile="data4702"; integer OneSiteTruncationPhononsMax=5; integer OneSiteTruncationSite=5; integer OneSiteTruncationM=19; dmrgpp-6.02/TestSuite/inputs/input4703.ain000066400000000000000000000011771414604301300203550ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=2; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[-1.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0.0]; vector hubbardFU=[0,...]; vector potentialFV=[0,...]; integer NumberPhonons=1; vector lambdaFP=[0.0,...]; vector potentialPV=[0.0,...]; Model="HubbardHolstein"; SolverOptions="MatrixProductStored,restart"; string RestartFilename="data4702"; Version="version"; InfiniteLoopKeptStates=100; FiniteLoops=[ [-6, 100, 2], [6, 100, 3]]; TargetElectronsUp=1; TargetElectronsDown=0; OutputFile="data4703"; dmrgpp-6.02/TestSuite/inputs/input4704.ain000066400000000000000000000011261414604301300203500ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=2; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[-1.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[-1.0]; vector hubbardFU=[1,...]; vector potentialFV=[0,...]; integer NumberPhonons=10; vector lambdaFP=[0.0,...]; vector potentialPV=[0.0,...]; Model="HubbardHolstein"; SolverOptions="MatrixProductStored"; Version="version"; InfiniteLoopKeptStates=50; FiniteLoops=[ [3, 100, 0], [-6, 100, 0]]; TargetElectronsUp=0; TargetElectronsDown=0; OutputFile="data4704"; dmrgpp-6.02/TestSuite/inputs/input4705.ain000066400000000000000000000012551414604301300203540ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=2; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[-1.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[-1.0]; vector hubbardFU=[1,...]; vector potentialFV=[0,...]; integer NumberPhonons=1; vector lambdaFP=[0.0,...]; vector potentialPV=[0.0,...]; Model="HubbardHolstein"; SolverOptions="MatrixProductStored"; Version="version"; InfiniteLoopKeptStates=100; FiniteLoops=[ [3, 100, 40], [-6, 100, 8], [6, 100, 0]]; TargetElectronsUp=4; TargetElectronsDown=4; OutputFile="data4705"; integer OneSiteTruncationPhononsMax=10; integer OneSiteTruncationSite=5; dmrgpp-6.02/TestSuite/inputs/input4706.ain000066400000000000000000000013251414604301300203530ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=4; NumberOfTerms=2; gt0:GeometryKind="chain"; gt0:GeometryOptions="ConstantValues"; gt0:dir0:Connectors=[0.0]; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[-1.0]; vector hubbardFU=[0,...]; vector potentialFV=[0,...]; integer NumberPhonons=1; vector lambdaFP=[0.0,...]; vector potentialPV=[0.0,...]; Model="HubbardHolstein"; SolverOptions="MatrixProductStored,fixLegacyBugs,twositedmrg"; Version="version"; InfiniteLoopKeptStates=100; FiniteLoops=[ [1, 100, 40], [-2, 100, 40], [2, 100, 8], [-2, 100, 8]]; TargetElectronsUp=0; TargetElectronsDown=0; OutputFile="data4703"; integer OneSiteTruncationPhononsMax=10; integer OneSiteTruncationSite=2; dmrgpp-6.02/TestSuite/inputs/input4710.inp000066400000000000000000000011341414604301300203630ustar00rootroot00000000000000TotalNumberOfSites=4 NumberOfTerms=3 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.35 hubbardFU 4 10 10 10 10 potentialFV 8 0 0 0 0 0 0 0 0 NumberPhonons=1 lambdaFP 4 0 0 0 0 potentialPV 4 3 3 3 3 Model=HubbardHolsteinSSH SolverOptions=none Version=5.25 OutputFile=data4710 InfiniteLoopKeptStates=100 FiniteLoops 3 1 200 0 -2 200 0 2 200 0 TargetElectronsUp=1 TargetElectronsDown=1 dmrgpp-6.02/TestSuite/inputs/input4720.ain000066400000000000000000000017751414604301300203600ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=4; NumberOfTerms=4; #Hopping term Fermionic gt0:DegreesOfFreedom=1; gt0:GeometryKind="ladder"; gt0:GeometryOptions="ConstantValues"; gt0:LadderLeg=2; gt0:dir0:Connectors=[-1.0]; gt0:dir1:Connectors=[0.0]; #Hopping term Bosonic gt1:DegreesOfFreedom=1; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0.0]; #Phonon-Fermion gt2:DegreesOfFreedom=1; gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[3.0]; #Fermion-Phonon gt3:DegreesOfFreedom=1; gt3:GeometryKind="chain"; gt3:GeometryOptions="ConstantValues"; gt3:dir0:Connectors=[3.0]; vector hubbardFU=[10,...]; vector potentialFV=[20,...]; integers NumberPhonons=1; vector potentialPV=[0.4,...]; Model="HolsteinThin"; SolverOptions="twositedmrg,MatrixVectorStored,printmatrix,debugmatrix"; Version="version" OutputFile="data4720"; InfiniteLoopKeptStates=100; FiniteLoops=[ [1, 100, 0], [-2, 100, 0], [2, 100, 0]]; TargetElectronsUp=1; TargetElectronsDown=1; dmrgpp-6.02/TestSuite/inputs/input4721.ain000066400000000000000000000016721414604301300203550ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=4; #Hopping term Fermionic gt0:DegreesOfFreedom=1; gt0:GeometryKind="ladder"; gt0:GeometryOptions="ConstantValues"; gt0:LadderLeg=2; gt0:dir0:Connectors=[-1.0]; gt0:dir1:Connectors=[0.0]; #Hopping term Bosonic gt1:DegreesOfFreedom=1; gt1:GeometryKind="chain"; gt1:GeometryOptions="ConstantValues"; gt1:dir0:Connectors=[0.0]; #Phonon-Fermion gt2:DegreesOfFreedom=1; gt2:GeometryKind="chain"; gt2:GeometryOptions="ConstantValues"; gt2:dir0:Connectors=[3.0]; #Fermion-Phonon gt3:DegreesOfFreedom=1; gt3:GeometryKind="chain"; gt3:GeometryOptions="ConstantValues"; gt3:dir0:Connectors=[3.0]; vector hubbardFU=[10,...]; vector potentialFV=[20,...]; integers NumberPhonons=1; vector potentialPV=[0.4,...]; Model="HolsteinThin"; SolverOptions="twositedmrg"; Version="version"; InfiniteLoopKeptStates=50; FiniteLoops=[ [3, 100, 0], [-6, 150, 0], [6, 150, 1]]; TargetElectronsUp=2; TargetElectronsDown=2; dmrgpp-6.02/TestSuite/inputs/input4800.inp000066400000000000000000000102261414604301300203650ustar00rootroot00000000000000TotalNumberOfSites=24 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none GeometryMaxConnections=0 Connectors 24 24 (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (-1,0) (-1,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (-1,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (-1,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (-1,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (-1,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (-1,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (-1,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (-1,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (-1,0) (-1,0) (0,0) (-1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-1,0) (0,0) DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 (0,1) hubbardU 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBandRashbaSOC SolverOptions=useComplex Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data4800 InfiniteLoopKeptStates=20 FiniteLoops 3 11 100 0 -22 100 0 22 100 1 TargetElectronsTotal=24 #ci observe arguments=",," dmrgpp-6.02/TestSuite/inputs/input4804.inp000066400000000000000000000010031414604301300203620ustar00rootroot00000000000000TotalNumberOfSites=12 NumberOfTerms=2 hubbardU 12 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBandRashbaSOC SolverOptions=useComplex Version=version OutputFile=data4804 InfiniteLoopKeptStates=200 FiniteLoops 3 5 500 0 -10 500 0 10 500 0 TargetElectronsTotal=4 Threads=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 (7.0,11.0) dmrgpp-6.02/TestSuite/inputs/input4808.inp000066400000000000000000000033211414604301300203730ustar00rootroot00000000000000TotalNumberOfSites=12 NumberOfTerms=2 hubbardU 12 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBandRashbaSOC SolverOptions=useComplex,MatrixVectorStored Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data4808 InfiniteLoopKeptStates=200 FiniteLoops 3 5 500 0 -10 500 0 10 500 0 TargetElectronsTotal=1 Threads=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none GeometryMaxConnections=0 Connectors 12 12 (0,0) (0,0.5) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,-0.5) (0,0) (0.433013,0.25) (-0.433013,0.25) (0,-0.5) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (-0.433013,-0.25) (0,0) (0,0) (0,0) (0,0.5) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.433013,-0.25) (0,0) (0,0) (0,0) (0,0) (0,0.5) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0.5) (0,0) (0,0) (0,0) (-0.433013,-0.25) (0.433013,-0.25) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,-0.5) (0,0) (0.433013,0.25) (0,0) (0,0) (-0.433013,0.25) (0,-0.5) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,-0.5) (-0.433013,0.25) (0,0) (0,0) (0.433013,0.25) (0,0) (0,-0.5) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.433013,-0.25) (-0.433013,-0.25) (0,0) (0,0) (0,0) (0,0.5) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0.5) (0,0) (0,0) (0,0) (0,0) (0.433013,-0.25) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0.5) (0,0) (0,0) (0,0) (-0.433013,-0.25) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,-0.5) (-0.433013,0.25) (0.433013,0.25) (0,0) (0,-0.5) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0.5) (0,0) #ci observe arguments=",," dmrgpp-6.02/TestSuite/inputs/input5.ai000066400000000000000000000012071414604301300177400ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[1.0]; hubbardU=[1.0,...]; potentialV=[0.0,...]; Model="HubbardOneBand"; SolverOptions="TimeStepTargeting"; Version="6ce41a4b7dfa08978e53fa756f7f139e2fb18251"; OutputFile="data5"; InfiniteLoopKeptStates=64; FiniteLoops=[[7, 100, 0], [-7, 100, 0], [-7, 100, 0]]; TargetElectronsUp=8; TargetElectronsDown=8; GsWeight=0.1; TSPTau=0.01; TSPTimeSteps=10; TSPAdvanceEach=2; TSPAlgorithm="Krylov"; TSPSites=[7]; TSPLoops=[2]; TSPProductOrSum="product"; TSPOperator=expression; OperatorExpression="identity"; dmrgpp-6.02/TestSuite/inputs/input5.inp000066400000000000000000000015711414604301300201410ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data5.txt InfiniteLoopKeptStates=64 FiniteLoops 3 7 100 0 -7 100 0 -7 100 0 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.01 TSPTimeSteps=10 TSPAdvanceEach=2 TSPAlgorithm=Krylov TSPSites 1 7 TSPLoops 1 2 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input50.inp000066400000000000000000000017101414604301300202140ustar00rootroot00000000000000TotalNumberOfSites=50 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=4.52 OutputFile=data50.txt InfiniteLoopKeptStates=200 FiniteLoops 3 24 200 0 -48 200 0 48 200 0 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=3 TargetElectronsUp=25 TargetElectronsDown=25 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=48 TSPAlgorithm=Krylov TSPSites 1 25 TSPLoops 1 1 TSPProductOrSum=product TSPOperator=expression OperatorExpression=c' Threads=4 #ci dmrg arguments="" #ci getTimeObservablesInSitu "" dmrgpp-6.02/TestSuite/inputs/input500.inp000066400000000000000000000046551414604301300203070ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PotentialT 8 0.0 -0.77 -0.91 -0.144 -0.144 -0.91 -0.77 0.0 omega=0.8 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data500.txt InfiniteLoopKeptStates=200 FiniteLoops 192 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 TargetElectronsUp=4 TargetElectronsDown=0 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=4 TSPAdvanceEach=6 TSPAlgorithm=RungeKutta TSPSites 1 5 TSPLoops 1 4 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input5000.inp000066400000000000000000000016301414604301300203550ustar00rootroot00000000000000TotalNumberOfSites=32 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues LadderLeg=2 Connectors 1 1.0 Connectors 1 1.0 hubbardU 32 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 potentialV 64 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data5000.txt InfiniteLoopKeptStates=100 FiniteLoops 7 15 400 0 -30 400 0 30 400 0 -30 600 0 30 600 0 -30 800 0 30 800 0 TargetElectronsUp=14 TargetElectronsDown=14 dmrgpp-6.02/TestSuite/inputs/input501.inp000066400000000000000000000046561414604301300203110ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PotentialT 8 0.0 -1.77 -0.91 2.144 0.45 2.05 -1.67 0.0 omega=0.4 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data501.txt InfiniteLoopKeptStates=200 FiniteLoops 192 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 TargetElectronsUp=4 TargetElectronsDown=0 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=4 TSPAdvanceEach=6 TSPAlgorithm=RungeKutta TSPSites 1 5 TSPLoops 1 4 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input5010.inp000066400000000000000000000057001414604301300203600ustar00rootroot00000000000000TotalNumberOfSites=144 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues LadderLeg=12 IsPeriodicY=1 Connectors 1 1.0 Connectors 1 1.0 hubbardU 144 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 potentialV 288 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=twositedmrg Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data5000.txt InfiniteLoopKeptStates=100 FiniteLoops 11 71 500 0 -142 1000 0 142 1000 0 -142 2000 0 142 2000 0 -142 5000 0 142 5000 0 -142 8000 0 142 8000 0 -142 10000 0 142 10000 0 TargetElectronsUp=68 TargetElectronsDown=68 TruncationTolerance=1e-8 dmrgpp-6.02/TestSuite/inputs/input5020.inp000066400000000000000000000011271414604301300203600ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=version OutputFile=data5020.txt InfiniteLoopKeptStates=100 TargetElectronsUp=6 TargetElectronsDown=6 FiniteLoops 4 7 500 0 -14 500 0 14 500 0 -14 500 0 Threads=1 dmrgpp-6.02/TestSuite/inputs/input503.inp000066400000000000000000000046551414604301300203120ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PotentialT 8 2.7 -1.77 -0.91 2.144 0.45 2.05 -1.67 3.5 omega=0.8 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data503.txt InfiniteLoopKeptStates=200 FiniteLoops 192 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 TargetElectronsUp=4 TargetElectronsDown=0 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=4 TSPAdvanceEach=6 TSPAlgorithm=RungeKutta TSPSites 1 5 TSPLoops 1 4 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input5030.inp000066400000000000000000000011631414604301300203610ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 1.0 Connectors 1 1.0 LadderLeg=2 hubbardU 16 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=version OutputFile=data5030.txt InfiniteLoopKeptStates=100 TargetElectronsUp=6 TargetElectronsDown=6 FiniteLoops 4 7 500 0 -14 500 0 14 500 0 -14 500 0 Threads=1 dmrgpp-6.02/TestSuite/inputs/input504.inp000066400000000000000000000046551414604301300203130ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PotentialT 8 2.7 -1.77 -0.91 2.144 0.45 2.05 -1.67 -1.14 omega=0.8 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data504.txt InfiniteLoopKeptStates=200 FiniteLoops 192 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 3 300 0 -3 300 0 -3 300 0 3 300 0 TargetElectronsUp=4 TargetElectronsDown=0 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=4 TSPAdvanceEach=6 TSPAlgorithm=RungeKutta TSPSites 1 5 TSPLoops 1 4 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input5040.inp000066400000000000000000000016141414604301300203630ustar00rootroot00000000000000TotalNumberOfSites=32 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 1.0 Connectors 1 1.0 LadderLeg=2 hubbardU 32 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0 potentialV 64 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=none Version=version OutputFile=data5040.txt InfiniteLoopKeptStates=200 TargetElectronsUp=6 TargetElectronsDown=6 FiniteLoops 4 15 1000 0 -30 1000 0 30 1000 0 -30 1000 0 Threads=1 dmrgpp-6.02/TestSuite/inputs/input52.inp000066400000000000000000000016461414604301300202260ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 1.0 Connectors 1 0.5 LadderLeg=2 hubbardU 8 10 10 10 10 10 10 10 10 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,vectorwithoffsets Version=4.52 OutputFile=data52.txt InfiniteLoopKeptStates=200 FiniteLoops 3 3 400 0 -6 400 0 6 200 0 RepeatFiniteLoopsFrom=1 RepeatFiniteLoopsTimes=5 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=6 TSPAlgorithm=Krylov TSPSites 2 4 2 TSPLoops 2 1 1 TSPProductOrSum=product TSPOperator=expression OperatorExpression=c+(-1.0)*c*c?1*c?1'+c?1+(-1.0)*c?1*c*c' TSPOperator=expression OperatorExpression=c'*c?1*c?1'+c?1'*c*c' Threads=4 #ci dmrg arguments="," #ci getTimeObservablesInSitu "" #ci getTimeObservablesInSitu "" dmrgpp-6.02/TestSuite/inputs/input550.inp000066400000000000000000000007421414604301300203050ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=3 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1 Model=Aklt HeisenbergTwiceS=2 OutputFile=550 SolverOptions=twositedmrg Version=version InfiniteLoopKeptStates=50 FiniteLoops 3 3 100 0 -6 100 0 6 100 0 IsPeriodicX=1 TargetSzPlusConst=8 dmrgpp-6.02/TestSuite/inputs/input5500.inp000066400000000000000000000012641414604301300203650ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.8333 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.8333 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.0 Model=TjMultiOrb potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=100 FiniteLoops 5 3 100 0 -6 100 0 6 100 0 -6 100 0 6 100 0 TargetElectronsUp=4 TargetElectronsDown=4 Threads=1 SolverOptions=twositedmrg Version=version OutputFile=data5500 Orbitals=1 #ci dmrg arguments= -p 12 dmrgpp-6.02/TestSuite/inputs/input5501.inp000066400000000000000000000021231414604301300203610ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.8333 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.8333 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 Model=TjMultiOrb potentialV 16 0 0 0 6.666 0 0 0 0 0 0 0 6.666 0 0 0 0 InfiniteLoopKeptStates=100 FiniteLoops 4 -6 100 2 6 100 2 -6 100 2 6 100 2 TargetElectronsUp=4 TargetElectronsDown=4 Threads=1 SolverOptions=CorrectionVectorTargeting,twositedmrg,restart CorrectionA=0 Version=version RestartFilename=data5500 OutputFile=data5501 CorrectionVectorOmega=1 DynamicDmrgType=0 TSPProductOrSum=sum CorrectionVectorFreqType=Real CorrectionVectorEta=0.2 CorrectionVectorAlgorithm=Krylov Orbitals=1 GsWeight=0.1 TSPSites 1 3 TSPLoops 1 1 TSPOperator=raw RAW_MATRIX 3 3 0 0 0 0 0 0 1 0 0 FERMIONSIGN=-1 JMVALUES 2 1 1 AngularFactor=1 #ci dmrg arguments= -p 12 ",," #ci CollectBrakets 0 dmrgpp-6.02/TestSuite/inputs/input5502.inp000066400000000000000000000021561414604301300203700ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.8333 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.8333 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 Model=TjMultiOrb potentialV 16 0 0 0 0 0 6.666 0 0 0 0 0 0 0 6.666 0 0 InfiniteLoopKeptStates=100 FiniteLoops 4 -6 100 2 6 100 2 -6 100 2 6 100 2 TargetElectronsUp=4 TargetElectronsDown=4 Threads=1 SolverOptions=TargetingRixsStatic,twositedmrg,restart CorrectionA=0 Version=version RestartFilename=data5501 OutputFile=data5502 CorrectionVectorOmega=1 DynamicDmrgType=0 TSPProductOrSum=sum CorrectionVectorFreqType=Real CorrectionVectorEta=0.2 CorrectionVectorAlgorithm=Krylov Orbitals=1 GsWeight=0.1 TSPSites 1 5 TSPLoops 1 1 TSPOperator=raw RAW_MATRIX 3 3 0 0 0 0 0 0 1 0 0 FERMIONSIGN=-1 JMVALUES 2 1 1 AngularFactor=1 #ci dmrg arguments= -p 12 ",,,,," #ci CollectBrakets 0 dmrgpp-6.02/TestSuite/inputs/input5503.inp000066400000000000000000000020731414604301300203670ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.8333 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.8333 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 Model=TjMultiOrb potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=100 FiniteLoops 4 -6 100 2 6 100 2 -6 100 2 6 100 2 TargetElectronsUp=4 TargetElectronsDown=4 Threads=1 SolverOptions=TargetingRixsDynamic,twositedmrg,restart,minimizeDisk CorrectionA=0 Version=version RestartFilename=data5502 OutputFile=data5503 CorrectionVectorOmega=0.1 DynamicDmrgType=0 TSPProductOrSum=sum CorrectionVectorFreqType=Real CorrectionVectorEta=0.075 CorrectionVectorAlgorithm=Krylov Orbitals=1 GsWeight=0.1 TSPSites 1 3 TSPLoops 1 1 TSPOperator=raw RAW_MATRIX 3 3 0 1 0 0 0 0 0 0 0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 #ci dmrg arguments= -p 12 "c?1'" #ci CollectBrakets 0 dmrgpp-6.02/TestSuite/inputs/input5504.inp000066400000000000000000000022541414604301300203710ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.8333 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.8333 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 Model=TjMultiOrb potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=100 FiniteLoops 2 -6 100 2 6 100 2 RepeatFiniteLoopsTimes=10 TargetElectronsUp=4 TargetElectronsDown=4 Threads=1 SolverOptions=TargetingRixsDynamic,twositedmrg,restart,minimizeDisk CorrectionA=0 Version=version RestartFilename=data5502 OutputFile=data5504 CorrectionVectorOmega=0.1 DynamicDmrgType=0 TSPProductOrSum=sum CorrectionVectorFreqType=Real CorrectionVectorEta=0.075 CorrectionVectorAlgorithm=Chebyshev Orbitals=1 GsWeight=0.1 TSPSites 1 3 TSPLoops 1 1 TSPTau=1.0 TSPTimeSteps=3 TSPAdvanceEach=12 TSPAlgorithm=Chebyshev ChebyshevTransform 2 0.4566 0.3091 TSPOperator=raw RAW_MATRIX 3 3 0 1 0 0 0 0 0 0 0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 #ci dmrg arguments= -p 12 "c?1'" #ci CollectBrakets 0 dmrgpp-6.02/TestSuite/inputs/input5600.inp000066400000000000000000000011341414604301300203620ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 -1 Connectors 1 -1 LadderLeg=2 Model=HubbardOneBand hubbardU 16 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 potentialV 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=128 FiniteLoops 5 7 200 0 -14 200 0 14 200 0 -14 200 0 14 200 1 TargetElectronsUp=7 TargetElectronsDown=7 SolverOptions=twositedmrg Version=version TruncationTolerance=1e-7 LanczosEps=1e-7 OutputFile=data5600.txt Orbitals=1 #ci observe arguments="" #ci nDollar observe5600.txt dmrgpp-6.02/TestSuite/inputs/input5601.inp000066400000000000000000000020461414604301300203660ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 -1 Connectors 1 -1 LadderLeg=2 Model=HubbardOneBand hubbardU 16 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 potentialV 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=128 FiniteLoops 4 -14 200 2 14 200 2 -14 200 2 14 200 2 TargetElectronsUp=7 TargetElectronsDown=7 SolverOptions=CorrectionVectorTargeting,twositedmrg,restart,minimizeDisk CorrectionA=0 Version=version RestartFilename=data5600 TruncationTolerance=1e-5 LanczosEps=1e-7 OutputFile=data5601 DynamicDmrgType=0 TSPSites 1 6 TSPLoops 1 1 TSPProductOrSum=sum CorrectionVectorFreqType=Real CorrectionVectorEta=0.08 CorrectionVectorAlgorithm=Krylov TridiagonalEps=1e-7 TridiagSteps=1000 Orbitals=1 GsWeight=0.1 CorrectionVectorOmega=0.275 TSPOperator=raw RAW_MATRIX 4 4 -0.809363 0 0 0 0 0.190637 0 0 0 0 0.190637 0 0 0 0 1.190637 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 #ci dmrg arguments= -p 12 ",," dmrgpp-6.02/TestSuite/inputs/input5700.inp000066400000000000000000000526441414604301300203770ustar00rootroot00000000000000TotalNumberOfSites=48 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 48 48 0 -1 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 -1 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 48 48 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 48 48 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 0 0 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0 0 0.35 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0 0 0.35 0 0.35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0.35 0 0.35 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 48 48 0 -0.0875 0 -0.0875 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 -0.0875 0 0 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 0 0 -0.0875 0 -0.0875 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 -0.0875 0 -0.0875 0 0 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 0 0 -0.0875 0 -0.0875 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 -0.0875 0 -0.0875 0 0 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 0 0 -0.0875 0 -0.0875 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 -0.0875 0 -0.0875 0 0 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 0 0 -0.0875 0 -0.0875 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 -0.0875 0 -0.0875 0 0 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 0 0 -0.0875 0 -0.0875 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 -0.0875 0 -0.0875 0 0 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 0 0 -0.0875 0 -0.0875 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 -0.0875 0 -0.0875 0 0 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 0 0 -0.0875 0 -0.0875 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 -0.0875 0 -0.0875 0 0 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 0 0 -0.0875 0 -0.0875 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 -0.0875 0 -0.0875 0 0 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 0 0 -0.0875 0 -0.0875 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 -0.0875 0 -0.0875 0 0 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 0 0 -0.0875 0 -0.0875 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 -0.0875 0 -0.0875 0 0 0 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 0 0 -0.0875 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 0 0 -0.0875 0 -0.0875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0875 -0.0875 0 -0.0875 0 GeometryMaxConnections=4 Model=TjMultiOrb potentialV 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=60 FiniteLoops 5 23 100 0 -46 100 0 46 100 0 -46 100 0 46 100 0 TargetElectronsUp=24 TargetElectronsDown=24 Threads=1 LanczosEps=1e-7 SolverOptions=CorrectionTargeting,vectorwithoffsets CorrectionA=0.0005 Version=version OutputFile=data5700.txt Orbitals=1 dmrgpp-6.02/TestSuite/inputs/input5800.ai000066400000000000000000000023261414604301300201730ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=8; NumberOfTerms=1; DegreesOfFreedom=3; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[ [-0.15, 0.0, 0.0], [0.0, -0.5, 0.0], [0.0, 0.0, -0.5]]; Model="FeAsBasedSc"; FeAsMode="INT_PAPER33"; Orbitals=3; hubbardU=[2.165, 0.811875, -1.082500, -0.541250, -1.082500]; potentialV=[ 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05, -0.05]; matrix SpinOrbit=[ [0, 0, 0, 0, 0, i-0.1, 0, i0.1, 0], [0, i-0.1, 0.1, i0.1, 0, 0, -0.1, 0, 0], [0, i-0.1, -0.1, i0.1, 0, 0, 0.1, 0, 0], [0, 0, 0, 0, 0, i0.1, 0, i-0.1 ,0]]; int TargetElectronsTotal=30; int TargetSzPlusConst=45; int JzSymmetry=1; double CorrectionA=0.005; SolverOptions="CorrectionTargeting,useComplex,vectorwithoffsets"; Version="version"; OutputFile="data5800"; vector AdjustQuantumNumbers=[22, 15, 34, 22]; InfiniteLoopKeptStates=70; FiniteLoops=[ [ 3, 70, 0], [-6, 70, 0], [ 6, 70, 0]]; real LanczosEps=1e-6; int LanczosSteps=200; Threads=4; dmrgpp-6.02/TestSuite/inputs/input5800.inp000066400000000000000000000021351414604301300203660ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=3 GeometryKind=chain GeometryOptions=ConstantValues Connectors 3 3 -0.15 0.0 0.0 0.0 -0.5 0.0 0.0 0.0 -0.5 Model=FeAsBasedSc FeAsMode=INT_PAPER33 Orbitals=3 hubbardU 5 2.165 0.811875 -1.082500 -0.541250 -1.082500 potentialV 48 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0.8 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0.8 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 -0.05 SpinOrbit 4 9 (0,0) (0,0) (0,0) (0,0) (0,0) (0,-0.1) (0,0) (0,0.1) (0,0) (0,0) (0,-0.1) (0.1,0) (0,0.1) (0,0) (0,0) (-0.1,0) (0,0) (0,0) (0,0) (0,-0.1) (-0.1,0) (0,0.1) (0,0) (0,0) (0.1,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0.1) (0,0) (0,-0.1) (0,0) TargetElectronsTotal=30 TargetSzPlusConst=45 JzSymmetry=1 CorrectionA=0.005 SolverOptions=CorrectionTargeting,useComplex,vectorwithoffsets Version=version OutputFile=data5800.txt AdjustQuantumNumbers 4 22 15 34 22 InfiniteLoopKeptStates=70 FiniteLoops 3 3 70 0 -6 70 0 6 70 0 LanczosEps=1e-6 LanczosSteps=200 Threads=4 dmrgpp-6.02/TestSuite/inputs/input5802.inp000066400000000000000000000016621414604301300203740ustar00rootroot00000000000000TotalNumberOfSites=4 NumberOfTerms=1 DegreesOfFreedom=3 GeometryKind=chain GeometryOptions=ConstantValues Connectors 3 3 -0.5 0.0 0.0 0.0 -0.5 0.0 0.0 0.0 -0.5 Model=FeAsBasedSc FeAsMode=INT_PAPER33 Orbitals=3 hubbardU 5 20.0 7.5 -10.0 -5.0 -10.0 potentialV 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SpinOrbit 4 9 (0,0) (0,0) (0,0) (0,0) (0,0) (0,-0.5) (0,0) (0,0.5) (0,0) (0,0) (0,-0.5) (0.5,0) (0,0.5) (0,0) (0,0) (-0.5,0) (0,0) (0,0) (0,0) (0,-0.5) (-0.5,0) (0,0.5) (0,0) (0,0) (0.5,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0.5) (0,0) (0,-0.5) (0,0) TargetElectronsTotal=16 TargetSzPlusConst=24 JzSymmetry=1 CorrectionA=0.005 SolverOptions=CorrectionTargeting,useComplex,vectorwithoffsets Version=version OutputFile=data5802.txt InfiniteLoopKeptStates=100 FiniteLoops 3 1 300 0 -2 300 0 2 300 1 LanczosEps=1e-8 LanczosSteps=400 Threads=1 #ci observe arguments="" dmrgpp-6.02/TestSuite/inputs/input5810.inp000066400000000000000000000013521414604301300203670ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=3 GeometryKind=chain GeometryOptions=ConstantValues Connectors 3 3 0.5 0 -0.1 0 0.5 -0.1 -0.1 -0.1 0.15 Model=FeAsBasedSc FeAsMode=INT_PAPER33 Orbitals=3 hubbardU 5 2.165 0.811875 -1.082500 -0.541250 -1.082500 potentialV 48 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0.8 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0.8 CorrectionA=0.005 SolverOptions=CorrectionTargeting,vectorwithoffsets Version=version OutputFile=data5810.txt InfiniteLoopKeptStates=70 FiniteLoops 3 3 70 0 -6 70 0 6 70 0 LanczosEps=1e-6 LanczosSteps=200 TargetElectronsUp=16 TargetElectronsDown=16 Threads=1 dmrgpp-6.02/TestSuite/inputs/input6.ain000066400000000000000000000010101414604301300201070ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=60; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[1.0]; hubbardU=[1.0,...]; potentialV=[-0.5,...]; Model="HubbardOneBand"; SolverOptions="vectorwithoffsets"; Version="87130fef45b3531ba1469a90d0ec76325e133e1a"; OutputFile="data6"; InfiniteLoopKeptStates=226; FiniteLoops=[ [ 29, 226, 0], [-29, 226, 0], [-29, 226, 0], [ 29, 226, 0]]; TargetElectronsUp=30; TargetElectronsDown=30; TargetSpinTimesTwo=10; UseSu2Symmetry=1; dmrgpp-6.02/TestSuite/inputs/input6.inp000066400000000000000000000027411414604301300201420ustar00rootroot00000000000000TotalNumberOfSites=60 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 60 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 potentialV 120 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 Model=HubbardOneBand SolverOptions=vectorwithoffsets Version=87130fef45b3531ba1469a90d0ec76325e133e1a OutputFile=data6.txt InfiniteLoopKeptStates=226 FiniteLoops 4 29 226 0 -29 226 0 -29 226 0 29 226 0 TargetElectronsUp=30 TargetElectronsDown=30 TargetSpinTimesTwo=10 UseSu2Symmetry=1 dmrgpp-6.02/TestSuite/inputs/input60.inp000066400000000000000000000015571414604301300202260ustar00rootroot00000000000000TotalNumberOfSites=32 NumberOfTerms=4 Term0=Hopping DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1 Term1=SplusiSminusj DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1 Term2=SziSzj DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1 Term3=NiNj DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1 Model=TjMultiOrb potentialV 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=none Version=f8c58dbab7711d4c103be108a821b1f92adfd4e4 OutputFile=data60.txt InfiniteLoopKeptStates=60 FiniteLoops 4 15 100 0 -15 100 0 -15 100 0 15 100 1 TargetElectronsUp=16 TargetElectronsDown=16 Orbitals=1 Threads=2 MaxMatrixRankStored=1024 dmrgpp-6.02/TestSuite/inputs/input600.inp000066400000000000000000000051501414604301300202770ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 6 10 10 10 10 10 10 potentialV 12 0 0 0 0 0 0 0 0 0 0 0 0 Model=HubbardOneBand SolverOptions=TimeStepTargeting,vectorwithoffsets Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data600.txt InfiniteLoopKeptStates=200 FiniteLoops 192 2 200 0 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 2 200 1 -2 200 1 -2 200 1 2 200 1 TargetElectronsUp=3 TargetElectronsDown=3 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=6 TSPAlgorithm=Krylov TSPSites 2 3 2 TSPLoops 2 0 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input6000.inp000066400000000000000000000013361414604301300203610ustar00rootroot00000000000000TotalNumberOfSites=20 NumberOfTerms=3 DegreesOfFreedom=1 GeometryKind=Honeycomb GeometryOptions=ConstantValues Connectors 1 1.0 Connectors 1 0.0 Connectors 1 0.0 HoneycombLy=4 IsPeriodicY=1 DegreesOfFreedom=1 GeometryKind=Honeycomb GeometryOptions=ConstantValues Connectors 1 0.0 Connectors 1 1.0 Connectors 1 0.0 HoneycombLy=4 IsPeriodicY=1 DegreesOfFreedom=1 GeometryKind=Honeycomb GeometryOptions=ConstantValues Connectors 1 0.0 Connectors 1 0.0 Connectors 1 1.0 HoneycombLy=4 IsPeriodicY=1 Model=Kitaev SolverOptions=none Version=version OutputFile=data6000.txt InfiniteLoopKeptStates=100 FiniteLoops 3 9 150 0 -18 150 0 18 150 0 dmrgpp-6.02/TestSuite/inputs/input6001.inp000066400000000000000000000011761414604301300203640ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=4 Term0=SxiSxj DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Term1=SyiSyj DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Term2=SziSzj DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Term3=SxiSyj DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=KitaevExtended SolverOptions=useComplex,twositedmrg Version=version OutputFile=data6001 InfiniteLoopKeptStates=60 FiniteLoops 3 3 100 0 -6 100 0 6 100 0 dmrgpp-6.02/TestSuite/inputs/input6005.inp000066400000000000000000000020601414604301300203610ustar00rootroot00000000000000TotalNumberOfSites=20 NumberOfTerms=3 DegreesOfFreedom=1 GeometryKind=Honeycomb GeometryOptions=ConstantValues Connectors 1 0.0 Connectors 1 0.0 Connectors 1 0.0 HoneycombLy=4 IsPeriodicY=1 DegreesOfFreedom=1 GeometryKind=Honeycomb GeometryOptions=ConstantValues Connectors 1 0.0 Connectors 1 0.0 Connectors 1 0.0 HoneycombLy=4 IsPeriodicY=1 DegreesOfFreedom=1 GeometryKind=Honeycomb GeometryOptions=ConstantValues Connectors 1 0.0 Connectors 1 0.0 Connectors 1 0.0 HoneycombLy=4 IsPeriodicY=1 MagneticFieldY 20 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 MagneticFieldX 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 MagneticFieldZ 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Model=Kitaev SolverOptions=twositedmrg,fixLegacyBugs,useComplex Version=version OutputFile=data6005 InfiniteLoopKeptStates=32 FiniteLoops 3 9 150 0 -18 150 0 18 150 1 TruncationTolerance=1e-6 #ci dmrg arguments="" #ci CollectBrakets 0 #ci observe arguments="" dmrgpp-6.02/TestSuite/inputs/input6010.inp000066400000000000000000000165431414604301300203700ustar00rootroot00000000000000TotalNumberOfSites=18 NumberOfTerms=6 GeometryMaxConnections=20 Model=KitaevWithGammas SolverOptions=useComplex,twositedmrg,calcAndPrintEntropies Version=version OutputFile=data6010 InfiniteLoopKeptStates=32 FiniteLoops 5 8 100 0 -16 200 0 16 200 0 -16 400 0 16 400 0 Threads=8 TruncationTolerance=1e-6 MagneticFieldX 18 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 MagneticFieldY 18 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 MagneticFieldZ 18 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 18 18 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 18 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 18 18 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707107 0 0 0 0 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 18 18 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 18 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 18 18 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.707107 0 0 0 0 0 dmrgpp-6.02/TestSuite/inputs/input6011.inp000066400000000000000000000073571414604301300203740ustar00rootroot00000000000000TotalNumberOfSites=12 NumberOfTerms=6 Term=SxSx DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 12 12 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 -0.5 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 -0.5 0 0 0 0 0 0 0 0 0 -0.5 0 GeometryMaxConnections=0 Term=SySy DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 12 12 0 -0.5 0 0 0 0 0 0 0 0 0 -1.20710678118655 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 -1.20710678118655 0 0 0 0 0 0 0 0 0 -0.5 0 GeometryMaxConnections=0 Term=SzSz DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 12 12 0 -0.5 0 0 0 0 0 0 0 0 0 -0.5 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 -0.5 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 GeometryMaxConnections=0 Term=SySz DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 12 12 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 GeometryMaxConnections=0 Term=SxSz DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 12 12 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 GeometryMaxConnections=0 Term=SxSy DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 GeometryMaxConnections=0 MagneticFieldX 12 0 0 0 0 0 0 0 0 0 0 0 0 MagneticFieldY 12 0 0 0 0 0 0 0 0 0 0 0 0 MagneticFieldZ 12 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=128 FiniteLoops 5 5 800 0 -10 800 0 10 800 0 -10 800 0 10 800 0 Threads=1 SolverOptions=twositedmrg,useComplex Version=version TruncationTolerance=1e-9 Model=KitaevWithGammas OutputFile=data6011 dmrgpp-6.02/TestSuite/inputs/input6012.inp000066400000000000000000000102651414604301300203650ustar00rootroot00000000000000TotalNumberOfSites=12 NumberOfTerms=6 Term=SxSx DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 12 12 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 -0.5 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 -0.5 0 0 0 0 0 0 0 0 0 -0.5 0 GeometryMaxConnections=0 Term=SySy DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 12 12 0 -0.5 0 0 0 0 0 0 0 0 0 -1.20710678118655 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 -1.20710678118655 0 0 0 0 0 0 0 0 0 -0.5 0 GeometryMaxConnections=0 Term=SzSz DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 12 12 0 -0.5 0 0 0 0 0 0 0 0 0 -0.5 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 0 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -0.5 0 0 0 0 0 0 0 0 0 0 -0.5 0 -1.20710678118655 -0.5 0 0 0 0 0 0 0 0 0 -1.20710678118655 0 GeometryMaxConnections=0 Term=SySz DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 12 12 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 GeometryMaxConnections=0 Term=SzSyNotIncludedAliasedToSySz Term=SxSz DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 12 12 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 GeometryMaxConnections=0 Term=SzSxNotIncludedAliasedToSxSz Term=SxSy DegreesOfFreedom=1 GeometryKind=LongRange GeometryOptions=none Connectors 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 0 0 0 0 0 0 0 0 0 -0.707106781186548 0 GeometryMaxConnections=0 Term=SySxNotIncludedAliasedToSxSy Model=KitaevWithGammas MagneticFieldX 12 0 0 0 0 0 0 0 0 0 0 0 0 MagneticFieldY 12 0 0 0 0 0 0 0 0 0 0 0 0 MagneticFieldZ 12 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=128 FiniteLoops 4 -10 800 2 10 800 2 -10 800 2 10 800 2 Threads=1 SolverOptions=CorrectionVectorTargeting,useComplex,twositedmrg,restart,fixLegacyBugs CorrectionA=0 Version=version RestartFilename=data6011 TruncationTolerance=1e-7 OutputFile=data6012 CorrectionVectorOmega=1 DynamicDmrgType=0 TSPProductOrSum=product CorrectionVectorFreqType=Real CorrectionVectorEta=0.1 CorrectionVectorAlgorithm=Krylov Orbitals=1 GsWeight=0.1 TridiagSteps=600 TSPSites 1 5 TSPLoops 1 1 TSPOperator=expression OperatorExpression=sz dmrgpp-6.02/TestSuite/inputs/input6020.ain000066400000000000000000000050561414604301300203470ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=12; NumberOfTerms=3; #Term=SxSx gt0:GeometryKind="LongRange"; gt0:GeometryOptions="none"; matrix gt0:Connectors=[ [0, -1.20710678118655, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5], [-1.20710678118655, 0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, -0.5, 0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, -0.5, 0, -1.20710678118655, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, -1.20710678118655, 0, -0.5, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, -0.5, 0, -0.5, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, -0.5, 0, -1.20710678118655, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, -1.20710678118655, 0, -0.5, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, -0.5, 0, -0.5, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0, -1.20710678118655, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, -1.20710678118655, 0, -0.5], [-0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0]]; integer gt0:GeometryMaxConnections=0; #Term=SySy gt1:GeometryKind="LongRange"; gt1:GeometryOptions="none"; matrix gt1:Connectors=[ [0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.20710678118655], [-0.5, 0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, -0.5, 0, -1.20710678118655, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, -1.20710678118655, 0, -0.5, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, -0.5, 0, -0.5, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, -0.5, 0, -1.20710678118655, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, -1.20710678118655, 0, -0.5, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, -0.5, 0, -0.5, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, -0.5, 0, -1.20710678118655, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, -1.20710678118655, 0, -0.5, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0, -0.5], [-1.20710678118655, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0]]; integer gt1:GeometryMaxConnections=0; #Term=SzSz gt2:GeometryKind="LongRange"; gt2:GeometryOptions="none"; matrix gt2:Connectors=[ [0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5], [-0.5, 0, -1.20710678118655, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, -1.20710678118655, 0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, -0.5, 0, -0.5, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, -0.5, 0, -1.20710678118655, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, -1.20710678118655, 0, -0.5, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, -0.5, 0, -0.5, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, -0.5, 0, -1.20710678118655, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, -1.20710678118655, 0, -0.5, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0, -0.5, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0, -1.20710678118655], [-0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.20710678118655, 0]]; integer gt2:GeometryMaxConnections=0; Model="Kitaev"; vector MagneticFieldX=[0,...]; vector MagneticFieldZ=[0,...]; InfiniteLoopKeptStates=128; FiniteLoops=[ [5, 800, 0], [-10, 800, 0], [10, 800, 0], [-10, 800, 0], [10, 800, 0]]; SolverOptions="twositedmrg,fixLegacyBugs"; Version="version"; dmrgpp-6.02/TestSuite/inputs/input6022.ain000066400000000000000000000063651414604301300203550ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=12; NumberOfTerms=4; #Term=hopping gt0:GeometryKind="LongRange"; gt0:GeometryOptions="none"; matrix gt0:Connectors=[ [0, -1.20710678118655, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5], [-1.20710678118655, 0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, -0.5, 0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, -0.5, 0, -1.20710678118655, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, -1.20710678118655, 0, -0.5, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, -0.5, 0, -0.5, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, -0.5, 0, -1.20710678118655, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, -1.20710678118655, 0, -0.5, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, -0.5, 0, -0.5, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0, -1.20710678118655, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, -1.20710678118655, 0, -0.5], [-0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0]]; integer gt0:GeometryMaxConnections=0; #Term=SxSx gt1:GeometryKind="LongRange"; gt1:GeometryOptions="none"; matrix gt1:Connectors=[ [0, -1.20710678118655, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5], [-1.20710678118655, 0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, -0.5, 0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, -0.5, 0, -1.20710678118655, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, -1.20710678118655, 0, -0.5, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, -0.5, 0, -0.5, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, -0.5, 0, -1.20710678118655, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, -1.20710678118655, 0, -0.5, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, -0.5, 0, -0.5, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0, -1.20710678118655, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, -1.20710678118655, 0, -0.5], [-0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0]]; integer gt1:GeometryMaxConnections=0; #Term=SySy gt2:GeometryKind="LongRange"; gt2:GeometryOptions="none"; matrix gt2:Connectors=[ [0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.20710678118655], [-0.5, 0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, -0.5, 0, -1.20710678118655, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, -1.20710678118655, 0, -0.5, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, -0.5, 0, -0.5, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, -0.5, 0, -1.20710678118655, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, -1.20710678118655, 0, -0.5, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, -0.5, 0, -0.5, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, -0.5, 0, -1.20710678118655, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, -1.20710678118655, 0, -0.5, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0, -0.5], [-1.20710678118655, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0]]; integer gt2:GeometryMaxConnections=0; #Term=SzSz gt3:GeometryKind="LongRange"; gt3:GeometryOptions="none"; matrix gt3:Connectors=[ [0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5], [-0.5, 0, -1.20710678118655, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, -1.20710678118655, 0, -0.5, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, -0.5, 0, -0.5, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, -0.5, 0, -1.20710678118655, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, -1.20710678118655, 0, -0.5, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, -0.5, 0, -0.5, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, -0.5, 0, -1.20710678118655, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, -1.20710678118655, 0, -0.5, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0, -0.5, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, -0.5, 0, -1.20710678118655], [-0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.20710678118655, 0]]; integer gt3:GeometryMaxConnections=0; Model="KitaevWithCharge"; InfiniteLoopKeptStates=128; FiniteLoops=[ [5, 200, 0], [-10, 200, 0], [10, 200, 0]]; SolverOptions="twositedmrg,fixLegacyBugs"; Version="version"; TargetElectronsTotal=10; dmrgpp-6.02/TestSuite/inputs/input61.inp000066400000000000000000000011331414604301300202150ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 Term0=Hopping DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues Connectors 1 -1 Connectors 1 -1 LadderLeg=2 hubbardU 8 8 8 8 8 8 8 8 8 Model=HubbardOneBand potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=twositedmrg,fixLegacyBugs Version=version OutputFile=data61 InfiniteLoopKeptStates=81 FiniteLoops 5 3 200 0 -6 200 0 6 200 0 -6 200 1 6 200 1 NumberOfTargetQns=2 TargetElectronsUp0=4 TargetElectronsDown0=4 TargetElectronsUp1=3 TargetElectronsDown1=3 Orbitals=1 Threads=1 #ci observe arguments="" dmrgpp-6.02/TestSuite/inputs/input62.inp000066400000000000000000000013051414604301300202170ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.25 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.25 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -0.125 Model=TjMultiOrb potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=100 FiniteLoops 5 3 200 0 -6 200 0 6 200 0 -6 200 0 6 200 0 TargetElectronsUp=3 TargetElectronsDown=3 Threads=1 LanczosEps=1e-12 TruncationTolerance=1e-12 SolverOptions=twositedmrg Version=version OutputFile=data62 Orbitals=1 dmrgpp-6.02/TestSuite/inputs/input63.inp000066400000000000000000000021331414604301300202200ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=4 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.25 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0.25 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 -0.125 Model=TjMultiOrb potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 InfiniteLoopKeptStates=128 FiniteLoops 4 -6 200 2 6 200 2 -6 200 2 6 200 2 TargetElectronsUp=3 TargetElectronsDown=3 Threads=1 SolverOptions=CorrectionVectorTargeting,twositedmrg,restart CorrectionA=0 Version=version RestartFilename=data62 LanczosEps=1e-7 TridiagonalEps=1e-7 TruncationTolerance=1e-7 OutputFile=data63 CorrectionVectorOmega=0.2 DynamicDmrgType=0 TSPProductOrSum=sum CorrectionVectorFreqType=Real CorrectionVectorEta=0.08 CorrectionVectorAlgorithm=Krylov Orbitals=1 GsWeight=0.1 TSPSites 1 3 TSPLoops 1 1 TSPOperator=expression OperatorExpression=sz #ci dmrg arguments= -p 12 ",," #ci CollectBrakets 0 dmrgpp-6.02/TestSuite/inputs/input65.inp000066400000000000000000000022651414604301300202300ustar00rootroot00000000000000TotalNumberOfSites=60 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 60 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 potentialV 120 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 Model=HubbardOneBand SolverOptions=none Version=4.52 OutputFile=data65.txt InfiniteLoopKeptStates=100 FiniteLoops 3 29 100 0 -58 226 0 58 226 0 TargetElectronsUp=30 TargetElectronsDown=30 dmrgpp-6.02/TestSuite/inputs/input6500.inp000066400000000000000000000011141414604301300203600ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=1 DegreesOfFreedom=2 GeometryKind=chain GeometryOptions=ConstantValues Connectors 2 2 1.0 0.0 0.0 1.0 hopOnSite 2 2 1 0 0 -1 hubbardU 6 4.0 4.0 4.0 4.0 4.0 4.0 potentialV 24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=ModelHubbardMultiBand SolverOptions=none Version=264e71039cc5a47c6f1f375f2f9baaffd94e94fa OutputFile=data6500.txt InfiniteLoopKeptStates=100 FiniteLoops 2 2 100 0 -4 100 0 TargetElectronsUp=6 TargetElectronsDown=6 Orbitals=2 TargetExtra 1 0 dmrgpp-6.02/TestSuite/inputs/input66.inp000066400000000000000000000023331414604301300202250ustar00rootroot00000000000000TotalNumberOfSites=60 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 60 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 potentialV 120 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 Model=HubbardOneBand SolverOptions=none Version=4.52 OutputFile=data66.txt InfiniteLoopKeptStates=100 FiniteLoops 3 29 100 0 -58 226 0 58 226 0 TargetElectronsUp=30 TargetElectronsDown=30 TargetSpinTimesTwo=0 UseSu2Symmetry=1 dmrgpp-6.02/TestSuite/inputs/input67.inp000066400000000000000000000023511414604301300202260ustar00rootroot00000000000000TotalNumberOfSites=60 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 60 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 potentialV 120 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 Model=HubbardOneBand SolverOptions=vectorwithoffsets Version=4.52 OutputFile=data67.txt InfiniteLoopKeptStates=100 FiniteLoops 3 29 100 0 -58 226 0 58 226 0 TargetElectronsUp=30 TargetElectronsDown=30 TargetSpinTimesTwo=10 UseSu2Symmetry=1 dmrgpp-6.02/TestSuite/inputs/input6700.ain000066400000000000000000000010541414604301300203460ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[1.0]; #Model params hubbardU=[0.0, ...]; potentialV=[0.0,...]; Model="HubbardOneBand"; SolverOptions="twositedmrg"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data2"; InfiniteLoopKeptStates=100; FiniteLoops=[[7, 100, 8], [-14, 100, 8]]; TargetElectronsUp=8; TargetElectronsDown=8; FindSymmetrySector="%0==*:0.5:n&m>1"; #ci observe arguments=",," dmrgpp-6.02/TestSuite/inputs/input7.ai000066400000000000000000000012541414604301300177440ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[1.0]; hubbardU=[1.0, ...]; potentialV=[0.0,...]; Model="HubbardOneBand"; SolverOptions="TimeStepTargeting"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data7"; InfiniteLoopKeptStates=64; FiniteLoops=[ [ 7, 100, 0], [-14, 100, 0], [ 14, 100, 0], [-14, 100, 0], [ 7, 100, 0]]; TargetElectronsUp=8; TargetElectronsDown=8; GsWeight=0.1; TSPTau=0.01; TSPTimeSteps=10; TSPAdvanceEach=2; TSPAlgorithm="Krylov"; TSPSites=[7]; TSPLoops=[2]; TSPProductOrSum="product"; TSPOperator=expression; OperatorExpression=c; dmrgpp-6.02/TestSuite/inputs/input7.inp000066400000000000000000000015411414604301300201400ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data7.txt InfiniteLoopKeptStates=64 FiniteLoops 8 7 100 0 -7 100 0 -7 100 0 7 100 0 7 100 0 -7 100 0 -7 100 0 7 100 0 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.01 TSPTimeSteps=10 TSPAdvanceEach=2 TSPAlgorithm=Krylov TSPSites 1 7 TSPLoops 1 2 TSPProductOrSum=product TSPOperator=cooked COOKED_OPERATOR=c COOKED_EXTRA 2 0 0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input7000.ain000066400000000000000000000005561414604301300203460ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=4; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="SuperPlaquette"; GeometryOptions=""; real SuperPlaquetteValue=1.0; #Model params vector MagneticField=[0.0,...]; Model="GaugeSpin"; SolverOptions="none"; Version="ChemicalH"; OutputFile="data7000"; InfiniteLoopKeptStates=100; FiniteLoops=[[1, 100, 0], [-2, 100, 0], [ 2, 100, 1]]; dmrgpp-6.02/TestSuite/inputs/input8.ai000066400000000000000000000013051414604301300177420ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[1.0]; hubbardU=[0,...]; potentialV=[0,...]; Model="HubbardOneBand"; SolverOptions="TimeStepTargeting"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data8"; InfiniteLoopKeptStates=200; FiniteLoops=[ [ 7, 200, 0], [-14, 200, 0], [ 14, 200, 0], [-14, 200, 0], [ 14, 200, 0]]; TargetElectronsUp=8; TargetElectronsDown=8; GsWeight=0.1; TSPTau=0.1; TSPTimeSteps=5; TSPAdvanceEach=100; TSPAlgorithm="Krylov"; TSPSites=[10]; TSPLoops=[0]; TSPProductOrSum="product"; TSPOperator="expression"; OperatorExpression="c?0*c?0'*c?1'+(-1.0)*c?1'*c?0'*c?0"; dmrgpp-6.02/TestSuite/inputs/input8.inp000066400000000000000000000015511414604301300201420ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data8.txt InfiniteLoopKeptStates=200 FiniteLoops 5 7 200 0 -14 200 0 14 200 0 -14 200 0 14 200 0 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=100 TSPAlgorithm=Krylov TSPSites 1 10 TSPLoops 1 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input80.inp000066400000000000000000000006171414604301300202240ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=Heisenberg HeisenbergTwiceS=2 SolverOptions=none Version=version OutputFile=data80 InfiniteLoopKeptStates=100 FiniteLoops 4 2 200 0 -2 200 0 -2 200 0 2 200 0 TargetSzPlusConst=6 dmrgpp-6.02/TestSuite/inputs/input82.inp000066400000000000000000000006511414604301300202240ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=Heisenberg HeisenbergTwiceS=2 SolverOptions=none Version=version OutputFile=data82 InfiniteLoopKeptStates=100 FiniteLoops 4 2 200 0 -2 200 0 -2 200 0 2 200 0 TargetSzPlusConst=6 AnisotropyD 6 4 4 4 4 4 4 dmrgpp-6.02/TestSuite/inputs/input84.inp000066400000000000000000000006211414604301300202230ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 Model=Heisenberg HeisenbergTwiceS=2 SolverOptions=none Version=version OutputFile=data84 InfiniteLoopKeptStates=100 FiniteLoops 4 2 200 0 -2 200 0 -2 200 0 2 200 0 AnisotropyE 6 4 4 4 4 4 4 dmrgpp-6.02/TestSuite/inputs/input85.inp000066400000000000000000000006551414604301300202330ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 0 Model=Heisenberg HeisenbergTwiceS=2 SolverOptions=none Version=version OutputFile=data85 InfiniteLoopKeptStates=100 FiniteLoops 4 2 200 0 -2 200 0 -2 200 0 2 200 0 AnisotropyE 6 4 4 4 4 4 4 AnisotropyD 6 4 4 4 4 4 4 dmrgpp-6.02/TestSuite/inputs/input86.inp000066400000000000000000000007141414604301300202300ustar00rootroot00000000000000TotalNumberOfSites=6 NumberOfTerms=2 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=Heisenberg HeisenbergTwiceS=2 SolverOptions=none Version=version OutputFile=data86 InfiniteLoopKeptStates=100 FiniteLoops 4 2 200 0 -2 200 0 -2 200 0 2 200 0 AnisotropyE 6 2.7 2.7 2.7 2.7 2.7 2.7 AnisotropyD 6 3.1 3.1 3.1 3.1 3.1 3.1 dmrgpp-6.02/TestSuite/inputs/input9.ai000066400000000000000000000013001414604301300177360ustar00rootroot00000000000000##Ainur1.0 TotalNumberOfSites=16; NumberOfTerms=1; DegreesOfFreedom=1; GeometryKind="chain"; GeometryOptions="ConstantValues"; dir0:Connectors=[1.0]; hubbardU=[0,...]; potentialV=[0.0,...]; Model="HubbardOneBand"; SolverOptions="TimeStepTargeting"; Version="53725d9b8f22615ccccc782082f4cd6f51a4e374"; OutputFile="data9"; InfiniteLoopKeptStates=200; FiniteLoops=[ [ 7, 200, 0], [-14, 200, 0],[14, 200, 0], [-14, 200, 0],[14, 200, 0]]; TargetElectronsUp=8; TargetElectronsDown=8; GsWeight=0.1; TSPTau=0.1; TSPTimeSteps=5; TSPAdvanceEach=4; TSPAlgorithm="Krylov"; TSPSites=[10]; TSPLoops=[0]; TSPProductOrSum="product"; TSPOperator="expression"; OperatorExpression="c?0*c?0'*c?1'+(-1.0)*c?1'*c?0'*c?0"; dmrgpp-6.02/TestSuite/inputs/input9.inp000066400000000000000000000015551414604301300201470ustar00rootroot00000000000000TotalNumberOfSites=16 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 hubbardU 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 potentialV 32 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Model=HubbardOneBand SolverOptions=TimeStepTargeting Version=53725d9b8f22615ccccc782082f4cd6f51a4e374 OutputFile=data9.txt InfiniteLoopKeptStates=200 FiniteLoops 5 7 200 0 -14 200 0 14 200 0 -14 200 0 14 200 0 TargetElectronsUp=8 TargetElectronsDown=8 GsWeight=0.1 TSPTau=0.1 TSPTimeSteps=5 TSPAdvanceEach=4 TSPAlgorithm=Krylov TSPSites 1 10 TSPLoops 1 0 TSPProductOrSum=product TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input900.inp000066400000000000000000000017331414604301300203050ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=wft,DynamicTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data900.txt InfiniteLoopKeptStates=200 FiniteLoops 16 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 DynamicDmrgType=0 TSPSites 2 3 2 TSPLoops 2 0 0 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input901.inp000066400000000000000000000017661414604301300203140ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=hasQuantumNumbers,wft,nosu2,DynamicTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data901.txt InfiniteLoopKeptStates=200 FiniteLoops 16 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 DynamicDmrgType=1 TSPSites 2 3 2 TSPLoops 2 0 0 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input902.inp000066400000000000000000000017641414604301300203130ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=hasQuantumNumbers,wft,nosu2,DynamicTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data902.txt InfiniteLoopKeptStates=200 FiniteLoops 16 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 DynamicDmrgType=2 TSPSites 2 3 2 TSPLoops 2 0 0 TSPOperator=raw RAW_MATRIX 4 4 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input903.inp000066400000000000000000000017371414604301300203140ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=wft,DynamicTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data903.txt InfiniteLoopKeptStates=200 FiniteLoops 16 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 DynamicDmrgType=3 TSPSites 2 3 2 TSPLoops 2 0 0 TSPOperator=raw RAW_MATRIX 4 4 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input910.inp000066400000000000000000000017251414604301300203070ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues LadderLeg=2 Connectors 1 1.0 Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=wft,DynamicTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data910.txt InfiniteLoopKeptStates=200 FiniteLoops 12 3 200 0 -3 200 0 -3 200 0 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 TSPSites 2 3 2 TSPLoops 2 0 0 DynamicDmrgType=0 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input911.inp000066400000000000000000000017271414604301300203120ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues LadderLeg=2 Connectors 1 1.0 Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=wft,DynamicTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data911.txt InfiniteLoopKeptStates=200 FiniteLoops 12 3 200 0 -3 200 0 -3 200 0 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 TSPSites 2 3 2 TSPLoops 2 0 0 DynamicDmrgType=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input912.inp000066400000000000000000000017251414604301300203110ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues LadderLeg=2 Connectors 1 1.0 Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=wft,DynamicTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data912.txt InfiniteLoopKeptStates=200 FiniteLoops 12 3 200 0 -3 200 0 -3 200 0 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 TSPSites 2 3 2 TSPLoops 2 0 0 DynamicDmrgType=2 TSPOperator=raw RAW_MATRIX 4 4 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input913.inp000066400000000000000000000017261414604301300203130ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=ladder GeometryOptions=ConstantValues LadderLeg=2 Connectors 1 1.0 Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=wft,DynamicTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data913.txt InfiniteLoopKeptStates=200 FiniteLoops 12 3 200 0 -3 200 0 -3 200 0 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 3 200 1 -3 200 1 -3 200 1 3 200 1 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 TSPSites 2 3 2 TSPLoops 2 0 0 DynamicDmrgType=3 TSPOperator=raw RAW_MATRIX 4 4 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input950.inp000066400000000000000000000026051414604301300203110ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=wft,AdaptiveDynamicTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data950.txt InfiniteLoopKeptStates=200 FiniteLoops 48 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 DynamicDmrgType=0 DynamicDmrgAdvanceEach=4 TSPSites 2 3 2 TSPLoops 2 0 0 TSPProductOrSum=sum TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input951.inp000066400000000000000000000025651414604301300203170ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=wft,AdaptiveDynamicTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data951.txt InfiniteLoopKeptStates=200 FiniteLoops 48 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 DynamicDmrgType=1 DynamicDmrgAdvanceEach=4 TSPSites 2 3 2 TSPLoops 2 0 0 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input952.inp000066400000000000000000000025621414604301300203150ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=wft,AdaptiveDynamicTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data952.txt InfiniteLoopKeptStates=200 FiniteLoops 48 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 DynamicDmrgType=2 DynamicDmrgAdvanceEach=4 TSPSites 2 3 2 TSPLoops 2 0 0 TSPOperator=raw RAW_MATRIX 4 4 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/input953.inp000066400000000000000000000025521414604301300203150ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand hubbardU 8 0 0 0 0 0 0 0 0 potentialV 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SolverOptions=wft,DynamicTargeting Version=6ce41a4b7dfa08978e53fa756f7f139e2fb18251 OutputFile=data953.txt InfiniteLoopKeptStates=200 FiniteLoops 48 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 3 200 0 -3 200 0 -3 200 0 3 200 0 TargetElectronsUp=4 TargetElectronsDown=4 GsWeight=0.1 DynamicDmrgType=3 DynamicDmrgAdvanceEach=4 TSPSites 2 3 2 TSPLoops 2 0 0 TSPOperator=raw RAW_MATRIX 4 4 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 TSPOperator=raw RAW_MATRIX 4 4 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 FERMIONSIGN=-1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/production.spec000066400000000000000000000000251414604301300212400ustar00rootroot00000000000000 n y production dmrgpp-6.02/TestSuite/inputs/sz4300.txt000066400000000000000000000011631414604301300177060ustar00rootroot00000000000000TSPOperator=raw RAW_MATRIX 16 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/inputs/sz4601.txt000066400000000000000000000001661414604301300177140ustar00rootroot00000000000000TSPOperator=raw RAW_MATRIX 4 4 0 0 0 0 0 0.5 0 0 0 0 -0.5 0 0 0 0 0 FERMIONSIGN=1 JMVALUES 2 0 0 AngularFactor=1 dmrgpp-6.02/TestSuite/kompileRig.pl000066400000000000000000000056041414604301300173230ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my $makeJ = shift @ARGV; defined($makeJ) or die "USAGE: $0 makeJ\n"; main(4, $makeJ, \@ARGV); sub main { my ($items, $makeJ, $clineCodes) = @_; for (my $i = 0; $i < $items; ++$i) { kompileRig($i, $makeJ, $clineCodes); } print "---------------------\n"; } sub kompileRig { my ($ind, $makeJ, $clineCodes) = @_; my $command = "make clean; make -j $makeJ"; my @paths; my @codes = addCodes(\@paths, $clineCodes); my $n = scalar(@paths); die "$0: Number of Codes and Paths must be equal but $n != ".scalar(@codes)."\n" if ($n != scalar(@codes)); for (my $i = 0; $i < $n; ++$i) { kompileRigEach($ind, $paths[$i], $command, $codes[$i]); } } sub kompileRigEach { my ($ind, $path, $command, $code) = @_; return if ($code eq "cincuenta" and $ind < 2); print STDERR "-------------->> Compiling $code with profile $ind\n"; my $psiTag0 = "TestSuite/inputs/KompileRig.psiTag"; my $psiTag = "../../dmrgpp/$psiTag0"; $psiTag = $psiTag0 if (-r "$path/$psiTag0"); my $cmd = "cd $path; perl configure.pl -f KompileRig$ind -c $psiTag"; executeAndDieIfNotSuccess($cmd); $cmd = "cd $path; $command"; executeAndDieIfNotSuccess($cmd); return if ($code ne "dmrgpp"); $cmd = "cd $path; cd ../doc; make manual.pdf"; executeAndDieIfNotSuccess($cmd); } sub addCodes { my ($paths, $clineCodes) = @_; my @codes = addAll($paths, $clineCodes); my $n = scalar(@codes); for (my $i = 0; $i < $n; ++$i) { my $code = $codes[$i]; if ($code eq "PsimagLiteLib") { } elsif ($code eq "dmrgpp") { push @$paths, "../src"; } elsif ($code eq "LanczosPlusPlus") { push @$paths, "../../LanczosPlusPlus/src"; } elsif ($code eq "BetheAnsatz") { push @$paths, "../../BetheAnsatz/src"; } elsif ($code eq "FreeFermions") { push @$paths, "../../FreeFermions/examples"; } elsif ($code eq "merapp") { push @$paths, "../../merapp/src"; } elsif ($code eq "PsimagLiteDrivers") { push @$paths, " ../../PsimagLite/drivers"; } elsif ($code eq "cincuenta") { push @$paths, "../../cincuenta/src"; } else { die "$0: Unknown code $code\n"; } } return @codes; } sub addAll { my ($paths, $clineCodes) = @_; push @$paths, "../../PsimagLite/lib "; my @codes = ("PsimagLiteLib"); my $n = scalar(@$clineCodes); if ($n > 0) { push @codes, @$clineCodes; return @codes; } my @codes2 = qw/PsimagLiteDrivers dmrgpp LanczosPlusPlus cincuenta/; # BetheAnsatz FreeFermions merapp/; push @codes, @codes2; return @codes; } sub flattenWithNewLines { my ($items) = @_; my $text = ""; my $n = scalar(@$items); for (my $i = 0; $i < $n; ++$i) { $text .= "$items->[$i]\n"; } return $text; } sub appendToFile { my ($file, $textToAppend) = @_; open(FILE, ">>", $file) or die "$0: Cannot open $file : $!\n"; print FILE $textToAppend; close(FILE); } sub executeAndDieIfNotSuccess { my ($cmd) = @_; system($cmd); die "$0: Command $cmd FAILED\n" if ($? != 0); } dmrgpp-6.02/TestSuite/oracles/000077500000000000000000000000001414604301300163075ustar00rootroot00000000000000dmrgpp-6.02/TestSuite/oracles/data3000.cf000066400000000000000000001447031414604301300200460ustar00rootroot00000000000000-10 -0.001192 -0.031069 -9.99 -0.001195 -0.031109 -9.98 -0.001198 -0.031149 -9.97 -0.001201 -0.031189 -9.96 -0.001204 -0.031229 -9.95 -0.001208 -0.031269 -9.94 -0.001211 -0.031309 -9.93 -0.001214 -0.031349 -9.92 -0.001217 -0.031390 -9.91 -0.001220 -0.031430 -9.9 -0.001223 -0.031471 -9.89 -0.001227 -0.031511 -9.88 -0.001230 -0.031552 -9.87 -0.001233 -0.031593 -9.86 -0.001236 -0.031634 -9.85 -0.001240 -0.031675 -9.84 -0.001243 -0.031717 -9.83 -0.001246 -0.031758 -9.82 -0.001250 -0.031799 -9.81 -0.001253 -0.031841 -9.8 -0.001256 -0.031883 -9.79 -0.001260 -0.031925 -9.78 -0.001263 -0.031966 -9.77 -0.001266 -0.032008 -9.76 -0.001270 -0.032051 -9.75 -0.001273 -0.032093 -9.74 -0.001276 -0.032135 -9.73 -0.001280 -0.032178 -9.72 -0.001283 -0.032220 -9.71 -0.001287 -0.032263 -9.7 -0.001290 -0.032306 -9.69 -0.001294 -0.032349 -9.68 -0.001297 -0.032392 -9.67 -0.001301 -0.032435 -9.66 -0.001304 -0.032478 -9.65 -0.001308 -0.032522 -9.64 -0.001311 -0.032565 -9.63 -0.001315 -0.032609 -9.62 -0.001319 -0.032653 -9.61 -0.001322 -0.032697 -9.6 -0.001326 -0.032741 -9.59 -0.001329 -0.032785 -9.58 -0.001333 -0.032829 -9.57 -0.001337 -0.032873 -9.56 -0.001340 -0.032918 -9.55 -0.001344 -0.032962 -9.54 -0.001348 -0.033007 -9.53 -0.001352 -0.033052 -9.52 -0.001355 -0.033097 -9.51 -0.001359 -0.033142 -9.5 -0.001363 -0.033187 -9.49 -0.001367 -0.033232 -9.48 -0.001370 -0.033278 -9.47 -0.001374 -0.033324 -9.46 -0.001378 -0.033369 -9.45 -0.001382 -0.033415 -9.44 -0.001386 -0.033461 -9.43 -0.001390 -0.033507 -9.42 -0.001394 -0.033553 -9.41 -0.001397 -0.033600 -9.4 -0.001401 -0.033646 -9.39 -0.001405 -0.033693 -9.38 -0.001409 -0.033740 -9.37 -0.001413 -0.033787 -9.36 -0.001417 -0.033834 -9.35 -0.001421 -0.033881 -9.34 -0.001425 -0.033928 -9.33 -0.001429 -0.033975 -9.32 -0.001434 -0.034023 -9.31 -0.001438 -0.034071 -9.3 -0.001442 -0.034118 -9.29 -0.001446 -0.034166 -9.28 -0.001450 -0.034215 -9.27 -0.001454 -0.034263 -9.26 -0.001458 -0.034311 -9.25 -0.001463 -0.034360 -9.24 -0.001467 -0.034408 -9.23 -0.001471 -0.034457 -9.22 -0.001475 -0.034506 -9.21 -0.001480 -0.034555 -9.2 -0.001484 -0.034604 -9.19 -0.001488 -0.034654 -9.18 -0.001492 -0.034703 -9.17 -0.001497 -0.034753 -9.16 -0.001501 -0.034803 -9.15 -0.001506 -0.034852 -9.14 -0.001510 -0.034903 -9.13 -0.001514 -0.034953 -9.12 -0.001519 -0.035003 -9.11 -0.001523 -0.035054 -9.1 -0.001528 -0.035104 -9.09 -0.001532 -0.035155 -9.08 -0.001537 -0.035206 -9.07 -0.001541 -0.035257 -9.06 -0.001546 -0.035308 -9.05 -0.001551 -0.035360 -9.04 -0.001555 -0.035411 -9.03 -0.001560 -0.035463 -9.02 -0.001564 -0.035515 -9.01 -0.001569 -0.035567 -9 -0.001574 -0.035619 -8.99 -0.001579 -0.035671 -8.98 -0.001583 -0.035724 -8.97 -0.001588 -0.035777 -8.96 -0.001593 -0.035829 -8.95 -0.001598 -0.035882 -8.94 -0.001602 -0.035935 -8.93 -0.001607 -0.035989 -8.92 -0.001612 -0.036042 -8.91 -0.001617 -0.036096 -8.9 -0.001622 -0.036150 -8.89 -0.001627 -0.036203 -8.88 -0.001632 -0.036258 -8.87 -0.001637 -0.036312 -8.86 -0.001642 -0.036366 -8.85 -0.001647 -0.036421 -8.84 -0.001652 -0.036476 -8.83 -0.001657 -0.036530 -8.82 -0.001662 -0.036586 -8.81 -0.001667 -0.036641 -8.8 -0.001672 -0.036696 -8.79 -0.001678 -0.036752 -8.78 -0.001683 -0.036808 -8.77 -0.001688 -0.036864 -8.76 -0.001693 -0.036920 -8.75 -0.001699 -0.036976 -8.74 -0.001704 -0.037032 -8.73 -0.001709 -0.037089 -8.72 -0.001714 -0.037146 -8.71 -0.001720 -0.037203 -8.7 -0.001725 -0.037260 -8.69 -0.001731 -0.037317 -8.68 -0.001736 -0.037375 -8.67 -0.001742 -0.037433 -8.66 -0.001747 -0.037490 -8.65 -0.001753 -0.037548 -8.64 -0.001758 -0.037607 -8.63 -0.001764 -0.037665 -8.62 -0.001769 -0.037724 -8.61 -0.001775 -0.037783 -8.6 -0.001781 -0.037842 -8.59 -0.001786 -0.037901 -8.58 -0.001792 -0.037960 -8.57 -0.001798 -0.038020 -8.56 -0.001804 -0.038079 -8.55 -0.001809 -0.038139 -8.54 -0.001815 -0.038199 -8.53 -0.001821 -0.038260 -8.52 -0.001827 -0.038320 -8.51 -0.001833 -0.038381 -8.5 -0.001839 -0.038442 -8.49 -0.001845 -0.038503 -8.48 -0.001851 -0.038564 -8.47 -0.001857 -0.038626 -8.46 -0.001863 -0.038687 -8.45 -0.001869 -0.038749 -8.44 -0.001875 -0.038811 -8.43 -0.001882 -0.038874 -8.42 -0.001888 -0.038936 -8.41 -0.001894 -0.038999 -8.4 -0.001900 -0.039062 -8.39 -0.001906 -0.039125 -8.38 -0.001913 -0.039188 -8.37 -0.001919 -0.039252 -8.36 -0.001926 -0.039316 -8.35 -0.001932 -0.039380 -8.34 -0.001938 -0.039444 -8.33 -0.001945 -0.039508 -8.32 -0.001951 -0.039573 -8.31 -0.001958 -0.039637 -8.3 -0.001965 -0.039703 -8.29 -0.001971 -0.039768 -8.28 -0.001978 -0.039833 -8.27 -0.001985 -0.039899 -8.26 -0.001991 -0.039965 -8.25 -0.001998 -0.040031 -8.24 -0.002005 -0.040097 -8.23 -0.002012 -0.040164 -8.22 -0.002019 -0.040231 -8.21 -0.002025 -0.040298 -8.2 -0.002032 -0.040365 -8.19 -0.002039 -0.040432 -8.18 -0.002046 -0.040500 -8.17 -0.002053 -0.040568 -8.16 -0.002061 -0.040636 -8.15 -0.002068 -0.040705 -8.14 -0.002075 -0.040773 -8.13 -0.002082 -0.040842 -8.12 -0.002089 -0.040911 -8.11 -0.002097 -0.040981 -8.1 -0.002104 -0.041050 -8.09 -0.002111 -0.041120 -8.08 -0.002119 -0.041190 -8.07 -0.002126 -0.041261 -8.06 -0.002134 -0.041331 -8.05 -0.002141 -0.041402 -8.04 -0.002149 -0.041473 -8.03 -0.002156 -0.041544 -8.02 -0.002164 -0.041616 -8.01 -0.002172 -0.041688 -8 -0.002179 -0.041760 -7.99 -0.002187 -0.041832 -7.98 -0.002195 -0.041905 -7.97 -0.002203 -0.041977 -7.96 -0.002211 -0.042051 -7.95 -0.002219 -0.042124 -7.94 -0.002227 -0.042197 -7.93 -0.002235 -0.042271 -7.92 -0.002243 -0.042345 -7.91 -0.002251 -0.042420 -7.9 -0.002259 -0.042495 -7.89 -0.002267 -0.042570 -7.88 -0.002275 -0.042645 -7.87 -0.002284 -0.042720 -7.86 -0.002292 -0.042796 -7.85 -0.002301 -0.042872 -7.84 -0.002309 -0.042948 -7.83 -0.002317 -0.043025 -7.82 -0.002326 -0.043102 -7.81 -0.002335 -0.043179 -7.8 -0.002343 -0.043256 -7.79 -0.002352 -0.043334 -7.78 -0.002361 -0.043412 -7.77 -0.002369 -0.043490 -7.76 -0.002378 -0.043569 -7.75 -0.002387 -0.043648 -7.74 -0.002396 -0.043727 -7.73 -0.002405 -0.043806 -7.72 -0.002414 -0.043886 -7.71 -0.002423 -0.043966 -7.7 -0.002433 -0.044047 -7.69 -0.002442 -0.044127 -7.68 -0.002451 -0.044208 -7.67 -0.002460 -0.044289 -7.66 -0.002470 -0.044371 -7.65 -0.002479 -0.044453 -7.64 -0.002489 -0.044535 -7.63 -0.002498 -0.044617 -7.62 -0.002508 -0.044700 -7.61 -0.002518 -0.044783 -7.6 -0.002527 -0.044867 -7.59 -0.002537 -0.044950 -7.58 -0.002547 -0.045034 -7.57 -0.002557 -0.045119 -7.56 -0.002567 -0.045203 -7.55 -0.002577 -0.045288 -7.54 -0.002587 -0.045374 -7.53 -0.002597 -0.045460 -7.52 -0.002607 -0.045546 -7.51 -0.002617 -0.045632 -7.5 -0.002628 -0.045719 -7.49 -0.002638 -0.045806 -7.48 -0.002649 -0.045893 -7.47 -0.002659 -0.045981 -7.46 -0.002670 -0.046069 -7.45 -0.002680 -0.046157 -7.44 -0.002691 -0.046246 -7.43 -0.002702 -0.046335 -7.42 -0.002713 -0.046424 -7.41 -0.002724 -0.046514 -7.4 -0.002734 -0.046604 -7.39 -0.002746 -0.046695 -7.38 -0.002757 -0.046786 -7.37 -0.002768 -0.046877 -7.36 -0.002779 -0.046968 -7.35 -0.002790 -0.047060 -7.34 -0.002802 -0.047153 -7.33 -0.002813 -0.047245 -7.32 -0.002825 -0.047338 -7.31 -0.002837 -0.047432 -7.3 -0.002848 -0.047526 -7.29 -0.002860 -0.047620 -7.28 -0.002872 -0.047714 -7.27 -0.002884 -0.047809 -7.26 -0.002896 -0.047905 -7.25 -0.002908 -0.048000 -7.24 -0.002920 -0.048097 -7.23 -0.002932 -0.048193 -7.22 -0.002945 -0.048290 -7.21 -0.002957 -0.048387 -7.2 -0.002970 -0.048485 -7.19 -0.002982 -0.048583 -7.18 -0.002995 -0.048682 -7.17 -0.003008 -0.048781 -7.16 -0.003020 -0.048880 -7.15 -0.003033 -0.048980 -7.14 -0.003046 -0.049080 -7.13 -0.003059 -0.049180 -7.12 -0.003072 -0.049281 -7.11 -0.003086 -0.049383 -7.1 -0.003099 -0.049485 -7.09 -0.003112 -0.049587 -7.08 -0.003126 -0.049690 -7.07 -0.003139 -0.049793 -7.06 -0.003153 -0.049897 -7.05 -0.003167 -0.050001 -7.04 -0.003181 -0.050105 -7.03 -0.003195 -0.050210 -7.02 -0.003209 -0.050315 -7.01 -0.003223 -0.050421 -7 -0.003237 -0.050528 -6.99 -0.003251 -0.050635 -6.98 -0.003266 -0.050742 -6.97 -0.003280 -0.050850 -6.96 -0.003295 -0.050958 -6.95 -0.003310 -0.051066 -6.94 -0.003325 -0.051176 -6.93 -0.003340 -0.051285 -6.92 -0.003355 -0.051395 -6.91 -0.003370 -0.051506 -6.9 -0.003385 -0.051617 -6.89 -0.003400 -0.051729 -6.88 -0.003416 -0.051841 -6.87 -0.003432 -0.051953 -6.86 -0.003447 -0.052066 -6.85 -0.003463 -0.052180 -6.84 -0.003479 -0.052294 -6.83 -0.003495 -0.052408 -6.82 -0.003511 -0.052523 -6.81 -0.003528 -0.052639 -6.8 -0.003544 -0.052755 -6.79 -0.003560 -0.052872 -6.78 -0.003577 -0.052989 -6.77 -0.003594 -0.053107 -6.76 -0.003610 -0.053225 -6.75 -0.003627 -0.053344 -6.74 -0.003644 -0.053463 -6.73 -0.003662 -0.053583 -6.72 -0.003679 -0.053704 -6.71 -0.003696 -0.053825 -6.7 -0.003714 -0.053946 -6.69 -0.003732 -0.054068 -6.68 -0.003749 -0.054191 -6.67 -0.003767 -0.054315 -6.66 -0.003785 -0.054438 -6.65 -0.003803 -0.054563 -6.64 -0.003822 -0.054688 -6.63 -0.003840 -0.054814 -6.62 -0.003859 -0.054940 -6.61 -0.003878 -0.055067 -6.6 -0.003897 -0.055195 -6.59 -0.003916 -0.055323 -6.58 -0.003935 -0.055452 -6.57 -0.003954 -0.055581 -6.56 -0.003974 -0.055711 -6.55 -0.003994 -0.055842 -6.54 -0.004013 -0.055973 -6.53 -0.004033 -0.056105 -6.52 -0.004054 -0.056238 -6.51 -0.004074 -0.056371 -6.5 -0.004095 -0.056505 -6.49 -0.004115 -0.056639 -6.48 -0.004136 -0.056775 -6.47 -0.004157 -0.056911 -6.46 -0.004178 -0.057047 -6.45 -0.004200 -0.057184 -6.44 -0.004221 -0.057322 -6.43 -0.004243 -0.057461 -6.42 -0.004265 -0.057600 -6.41 -0.004287 -0.057740 -6.4 -0.004309 -0.057880 -6.39 -0.004332 -0.058022 -6.38 -0.004354 -0.058164 -6.37 -0.004377 -0.058306 -6.36 -0.004400 -0.058450 -6.35 -0.004423 -0.058594 -6.34 -0.004446 -0.058739 -6.33 -0.004470 -0.058885 -6.32 -0.004493 -0.059031 -6.31 -0.004517 -0.059178 -6.3 -0.004541 -0.059326 -6.29 -0.004565 -0.059475 -6.28 -0.004590 -0.059625 -6.27 -0.004614 -0.059775 -6.26 -0.004639 -0.059926 -6.25 -0.004664 -0.060078 -6.24 -0.004689 -0.060231 -6.23 -0.004715 -0.060384 -6.22 -0.004740 -0.060539 -6.21 -0.004766 -0.060694 -6.2 -0.004792 -0.060850 -6.19 -0.004819 -0.061007 -6.18 -0.004845 -0.061165 -6.17 -0.004872 -0.061323 -6.16 -0.004899 -0.061483 -6.15 -0.004927 -0.061643 -6.14 -0.004954 -0.061804 -6.13 -0.004982 -0.061967 -6.12 -0.005010 -0.062130 -6.11 -0.005038 -0.062293 -6.1 -0.005067 -0.062458 -6.09 -0.005096 -0.062624 -6.08 -0.005125 -0.062790 -6.07 -0.005154 -0.062958 -6.06 -0.005184 -0.063126 -6.05 -0.005214 -0.063296 -6.04 -0.005244 -0.063466 -6.03 -0.005275 -0.063637 -6.02 -0.005305 -0.063810 -6.01 -0.005336 -0.063983 -6 -0.005368 -0.064157 -5.99 -0.005399 -0.064332 -5.98 -0.005431 -0.064508 -5.97 -0.005463 -0.064685 -5.96 -0.005495 -0.064864 -5.95 -0.005528 -0.065043 -5.94 -0.005561 -0.065223 -5.93 -0.005594 -0.065404 -5.92 -0.005628 -0.065587 -5.91 -0.005662 -0.065770 -5.9 -0.005696 -0.065955 -5.89 -0.005730 -0.066141 -5.88 -0.005765 -0.066328 -5.87 -0.005800 -0.066516 -5.86 -0.005836 -0.066705 -5.85 -0.005872 -0.066895 -5.84 -0.005908 -0.067086 -5.83 -0.005945 -0.067279 -5.82 -0.005982 -0.067473 -5.81 -0.006019 -0.067668 -5.8 -0.006057 -0.067864 -5.79 -0.006095 -0.068062 -5.78 -0.006134 -0.068260 -5.77 -0.006173 -0.068460 -5.76 -0.006212 -0.068661 -5.75 -0.006252 -0.068864 -5.74 -0.006293 -0.069067 -5.73 -0.006333 -0.069272 -5.72 -0.006375 -0.069478 -5.71 -0.006416 -0.069686 -5.7 -0.006458 -0.069895 -5.69 -0.006501 -0.070105 -5.68 -0.006544 -0.070316 -5.67 -0.006588 -0.070529 -5.66 -0.006632 -0.070743 -5.65 -0.006676 -0.070958 -5.64 -0.006721 -0.071175 -5.63 -0.006767 -0.071393 -5.62 -0.006813 -0.071613 -5.61 -0.006859 -0.071834 -5.6 -0.006906 -0.072056 -5.59 -0.006954 -0.072280 -5.58 -0.007002 -0.072505 -5.57 -0.007050 -0.072732 -5.56 -0.007099 -0.072960 -5.55 -0.007149 -0.073190 -5.54 -0.007199 -0.073421 -5.53 -0.007250 -0.073654 -5.52 -0.007301 -0.073888 -5.51 -0.007353 -0.074124 -5.5 -0.007405 -0.074362 -5.49 -0.007458 -0.074601 -5.48 -0.007512 -0.074842 -5.47 -0.007566 -0.075084 -5.46 -0.007621 -0.075329 -5.45 -0.007676 -0.075575 -5.44 -0.007732 -0.075822 -5.43 -0.007789 -0.076072 -5.42 -0.007846 -0.076323 -5.41 -0.007905 -0.076576 -5.4 -0.007963 -0.076831 -5.39 -0.008023 -0.077088 -5.38 -0.008083 -0.077346 -5.37 -0.008145 -0.077607 -5.36 -0.008206 -0.077869 -5.35 -0.008269 -0.078133 -5.34 -0.008333 -0.078399 -5.33 -0.008397 -0.078667 -5.32 -0.008462 -0.078937 -5.31 -0.008528 -0.079209 -5.3 -0.008595 -0.079483 -5.29 -0.008663 -0.079759 -5.28 -0.008732 -0.080037 -5.27 -0.008802 -0.080317 -5.26 -0.008872 -0.080600 -5.25 -0.008944 -0.080884 -5.24 -0.009016 -0.081170 -5.23 -0.009090 -0.081459 -5.22 -0.009164 -0.081749 -5.21 -0.009240 -0.082042 -5.2 -0.009316 -0.082337 -5.19 -0.009394 -0.082635 -5.18 -0.009472 -0.082934 -5.17 -0.009552 -0.083236 -5.16 -0.009633 -0.083541 -5.15 -0.009714 -0.083847 -5.14 -0.009797 -0.084156 -5.13 -0.009881 -0.084468 -5.12 -0.009966 -0.084782 -5.11 -0.010053 -0.085098 -5.1 -0.010140 -0.085417 -5.09 -0.010229 -0.085739 -5.08 -0.010319 -0.086063 -5.07 -0.010410 -0.086390 -5.06 -0.010503 -0.086720 -5.05 -0.010597 -0.087053 -5.04 -0.010693 -0.087388 -5.03 -0.010789 -0.087726 -5.02 -0.010888 -0.088068 -5.01 -0.010988 -0.088412 -5 -0.011089 -0.088759 -4.99 -0.011192 -0.089109 -4.98 -0.011297 -0.089462 -4.97 -0.011404 -0.089818 -4.96 -0.011512 -0.090177 -4.95 -0.011622 -0.090539 -4.94 -0.011734 -0.090905 -4.93 -0.011848 -0.091273 -4.92 -0.011963 -0.091645 -4.91 -0.012081 -0.092021 -4.9 -0.012201 -0.092399 -4.89 -0.012323 -0.092781 -4.88 -0.012446 -0.093166 -4.87 -0.012573 -0.093555 -4.86 -0.012701 -0.093947 -4.85 -0.012831 -0.094342 -4.84 -0.012964 -0.094741 -4.83 -0.013099 -0.095144 -4.82 -0.013237 -0.095550 -4.81 -0.013377 -0.095961 -4.8 -0.013519 -0.096374 -4.79 -0.013665 -0.096792 -4.78 -0.013812 -0.097213 -4.77 -0.013963 -0.097639 -4.76 -0.014116 -0.098068 -4.75 -0.014272 -0.098502 -4.74 -0.014431 -0.098939 -4.73 -0.014592 -0.099381 -4.72 -0.014757 -0.099827 -4.71 -0.014925 -0.100277 -4.7 -0.015096 -0.100732 -4.69 -0.015271 -0.101192 -4.68 -0.015449 -0.101656 -4.67 -0.015631 -0.102124 -4.66 -0.015816 -0.102597 -4.65 -0.016005 -0.103076 -4.64 -0.016198 -0.103559 -4.63 -0.016396 -0.104047 -4.62 -0.016597 -0.104540 -4.61 -0.016803 -0.105038 -4.6 -0.017014 -0.105541 -4.59 -0.017229 -0.106049 -4.58 -0.017449 -0.106563 -4.57 -0.017674 -0.107082 -4.56 -0.017905 -0.107606 -4.55 -0.018141 -0.108135 -4.54 -0.018382 -0.108670 -4.53 -0.018630 -0.109211 -4.52 -0.018883 -0.109757 -4.51 -0.019142 -0.110308 -4.5 -0.019408 -0.110865 -4.49 -0.019681 -0.111428 -4.48 -0.019960 -0.111996 -4.47 -0.020246 -0.112570 -4.46 -0.020540 -0.113150 -4.45 -0.020841 -0.113735 -4.44 -0.021150 -0.114326 -4.43 -0.021467 -0.114923 -4.42 -0.021792 -0.115525 -4.41 -0.022126 -0.116134 -4.4 -0.022469 -0.116748 -4.39 -0.022821 -0.117368 -4.38 -0.023183 -0.117994 -4.37 -0.023554 -0.118625 -4.36 -0.023936 -0.119263 -4.35 -0.024328 -0.119906 -4.34 -0.024731 -0.120555 -4.33 -0.025146 -0.121209 -4.32 -0.025572 -0.121869 -4.31 -0.026011 -0.122535 -4.3 -0.026463 -0.123206 -4.29 -0.026928 -0.123882 -4.28 -0.027407 -0.124564 -4.27 -0.027900 -0.125250 -4.26 -0.028408 -0.125940 -4.25 -0.028932 -0.126635 -4.24 -0.029472 -0.127334 -4.23 -0.030029 -0.128037 -4.22 -0.030603 -0.128743 -4.21 -0.031195 -0.129451 -4.2 -0.031806 -0.130161 -4.19 -0.032436 -0.130873 -4.18 -0.033086 -0.131585 -4.17 -0.033757 -0.132298 -4.16 -0.034449 -0.133009 -4.15 -0.035162 -0.133719 -4.14 -0.035897 -0.134426 -4.13 -0.036655 -0.135128 -4.12 -0.037436 -0.135826 -4.11 -0.038240 -0.136517 -4.1 -0.039068 -0.137200 -4.09 -0.039919 -0.137874 -4.08 -0.040795 -0.138537 -4.07 -0.041693 -0.139187 -4.06 -0.042616 -0.139824 -4.05 -0.043561 -0.140444 -4.04 -0.044528 -0.141047 -4.03 -0.045517 -0.141631 -4.02 -0.046527 -0.142193 -4.01 -0.047556 -0.142732 -4 -0.048603 -0.143247 -3.99 -0.049666 -0.143736 -3.98 -0.050744 -0.144197 -3.97 -0.051834 -0.144629 -3.96 -0.052934 -0.145031 -3.95 -0.054041 -0.145403 -3.94 -0.055153 -0.145742 -3.93 -0.056268 -0.146050 -3.92 -0.057381 -0.146327 -3.91 -0.058491 -0.146571 -3.9 -0.059595 -0.146786 -3.89 -0.060689 -0.146970 -3.88 -0.061771 -0.147126 -3.87 -0.062838 -0.147255 -3.86 -0.063888 -0.147360 -3.85 -0.064919 -0.147442 -3.84 -0.065929 -0.147504 -3.83 -0.066915 -0.147548 -3.82 -0.067878 -0.147578 -3.81 -0.068814 -0.147597 -3.8 -0.069724 -0.147607 -3.79 -0.070607 -0.147613 -3.78 -0.071463 -0.147617 -3.77 -0.072291 -0.147623 -3.76 -0.073093 -0.147634 -3.75 -0.073869 -0.147654 -3.74 -0.074621 -0.147687 -3.73 -0.075349 -0.147736 -3.72 -0.076057 -0.147804 -3.71 -0.076747 -0.147895 -3.7 -0.077422 -0.148011 -3.69 -0.078084 -0.148155 -3.68 -0.078739 -0.148329 -3.67 -0.079390 -0.148535 -3.66 -0.080042 -0.148775 -3.65 -0.080698 -0.149049 -3.64 -0.081365 -0.149357 -3.63 -0.082046 -0.149698 -3.62 -0.082747 -0.150072 -3.61 -0.083472 -0.150477 -3.6 -0.084226 -0.150911 -3.59 -0.085012 -0.151370 -3.58 -0.085835 -0.151852 -3.57 -0.086697 -0.152353 -3.56 -0.087603 -0.152868 -3.55 -0.088553 -0.153392 -3.54 -0.089550 -0.153922 -3.53 -0.090596 -0.154451 -3.52 -0.091689 -0.154975 -3.51 -0.092832 -0.155488 -3.5 -0.094022 -0.155985 -3.49 -0.095258 -0.156461 -3.48 -0.096539 -0.156911 -3.47 -0.097862 -0.157330 -3.46 -0.099223 -0.157715 -3.45 -0.100618 -0.158060 -3.44 -0.102044 -0.158362 -3.43 -0.103495 -0.158620 -3.42 -0.104967 -0.158830 -3.41 -0.106455 -0.158991 -3.4 -0.107952 -0.159101 -3.39 -0.109453 -0.159162 -3.38 -0.110953 -0.159174 -3.37 -0.112446 -0.159137 -3.36 -0.113928 -0.159054 -3.35 -0.115392 -0.158928 -3.34 -0.116835 -0.158762 -3.33 -0.118253 -0.158560 -3.32 -0.119642 -0.158326 -3.31 -0.120999 -0.158065 -3.3 -0.122321 -0.157782 -3.29 -0.123608 -0.157483 -3.28 -0.124857 -0.157173 -3.27 -0.126070 -0.156859 -3.26 -0.127245 -0.156546 -3.25 -0.128385 -0.156240 -3.24 -0.129492 -0.155949 -3.23 -0.130568 -0.155676 -3.22 -0.131617 -0.155428 -3.21 -0.132643 -0.155210 -3.2 -0.133653 -0.155027 -3.19 -0.134652 -0.154881 -3.18 -0.135647 -0.154778 -3.17 -0.136646 -0.154718 -3.16 -0.137655 -0.154703 -3.15 -0.138684 -0.154733 -3.14 -0.139740 -0.154808 -3.13 -0.140832 -0.154925 -3.12 -0.141967 -0.155080 -3.11 -0.143154 -0.155271 -3.1 -0.144400 -0.155490 -3.09 -0.145711 -0.155731 -3.08 -0.147094 -0.155988 -3.07 -0.148553 -0.156251 -3.06 -0.150091 -0.156511 -3.05 -0.151713 -0.156758 -3.04 -0.153418 -0.156983 -3.03 -0.155208 -0.157174 -3.02 -0.157081 -0.157321 -3.01 -0.159035 -0.157413 -3 -0.161065 -0.157439 -2.99 -0.163166 -0.157390 -2.98 -0.165332 -0.157256 -2.97 -0.167553 -0.157028 -2.96 -0.169821 -0.156698 -2.95 -0.172124 -0.156260 -2.94 -0.174452 -0.155709 -2.93 -0.176792 -0.155041 -2.92 -0.179131 -0.154255 -2.91 -0.181457 -0.153350 -2.9 -0.183755 -0.152328 -2.89 -0.186015 -0.151193 -2.88 -0.188222 -0.149951 -2.87 -0.190367 -0.148608 -2.86 -0.192440 -0.147173 -2.85 -0.194433 -0.145657 -2.84 -0.196338 -0.144069 -2.83 -0.198152 -0.142422 -2.82 -0.199871 -0.140727 -2.81 -0.201495 -0.138994 -2.8 -0.203024 -0.137237 -2.79 -0.204460 -0.135464 -2.78 -0.205807 -0.133685 -2.77 -0.207069 -0.131908 -2.76 -0.208252 -0.130141 -2.75 -0.209362 -0.128387 -2.74 -0.210404 -0.126653 -2.73 -0.211385 -0.124940 -2.72 -0.212309 -0.123251 -2.71 -0.213181 -0.121587 -2.7 -0.214007 -0.119948 -2.69 -0.214788 -0.118336 -2.68 -0.215530 -0.116749 -2.67 -0.216233 -0.115187 -2.66 -0.216899 -0.113652 -2.65 -0.217531 -0.112143 -2.64 -0.218130 -0.110661 -2.63 -0.218698 -0.109207 -2.62 -0.219235 -0.107782 -2.61 -0.219744 -0.106387 -2.6 -0.220226 -0.105024 -2.59 -0.220683 -0.103694 -2.58 -0.221119 -0.102399 -2.57 -0.221536 -0.101139 -2.56 -0.221936 -0.099915 -2.55 -0.222323 -0.098727 -2.54 -0.222698 -0.097576 -2.53 -0.223064 -0.096461 -2.52 -0.223425 -0.095382 -2.51 -0.223781 -0.094339 -2.5 -0.224134 -0.093331 -2.49 -0.224486 -0.092358 -2.48 -0.224838 -0.091420 -2.47 -0.225191 -0.090518 -2.46 -0.225547 -0.089652 -2.45 -0.225907 -0.088824 -2.44 -0.226272 -0.088034 -2.43 -0.226646 -0.087285 -2.42 -0.227030 -0.086579 -2.41 -0.227430 -0.085916 -2.4 -0.227848 -0.085300 -2.39 -0.228290 -0.084730 -2.38 -0.228761 -0.084207 -2.37 -0.229268 -0.083732 -2.36 -0.229817 -0.083303 -2.35 -0.230414 -0.082917 -2.34 -0.231066 -0.082573 -2.33 -0.231779 -0.082267 -2.32 -0.232559 -0.081993 -2.31 -0.233411 -0.081745 -2.3 -0.234339 -0.081518 -2.29 -0.235349 -0.081305 -2.28 -0.236441 -0.081099 -2.27 -0.237619 -0.080891 -2.26 -0.238884 -0.080676 -2.25 -0.240236 -0.080446 -2.24 -0.241674 -0.080194 -2.23 -0.243198 -0.079914 -2.22 -0.244807 -0.079600 -2.21 -0.246499 -0.079246 -2.2 -0.248274 -0.078847 -2.19 -0.250129 -0.078399 -2.18 -0.252064 -0.077897 -2.17 -0.254078 -0.077336 -2.16 -0.256170 -0.076712 -2.15 -0.258340 -0.076020 -2.14 -0.260588 -0.075253 -2.13 -0.262912 -0.074408 -2.12 -0.265314 -0.073476 -2.11 -0.267792 -0.072452 -2.1 -0.270345 -0.071326 -2.09 -0.272972 -0.070090 -2.08 -0.275670 -0.068736 -2.07 -0.278434 -0.067253 -2.06 -0.281261 -0.065632 -2.05 -0.284145 -0.063862 -2.04 -0.287077 -0.061934 -2.03 -0.290050 -0.059837 -2.02 -0.293053 -0.057562 -2.01 -0.296075 -0.055100 -2 -0.299103 -0.052443 -1.99 -0.302125 -0.049584 -1.98 -0.305124 -0.046517 -1.97 -0.308085 -0.043235 -1.96 -0.310991 -0.039736 -1.95 -0.313825 -0.036017 -1.94 -0.316568 -0.032076 -1.93 -0.319200 -0.027915 -1.92 -0.321702 -0.023536 -1.91 -0.324054 -0.018943 -1.9 -0.326235 -0.014143 -1.89 -0.328225 -0.009144 -1.88 -0.330003 -0.003957 -1.87 -0.331551 0.001405 -1.86 -0.332848 0.006926 -1.85 -0.333878 0.012589 -1.84 -0.334624 0.018374 -1.83 -0.335071 0.024257 -1.82 -0.335209 0.030216 -1.81 -0.335026 0.036223 -1.8 -0.334516 0.042252 -1.79 -0.333675 0.048274 -1.78 -0.332502 0.054260 -1.77 -0.330999 0.060181 -1.76 -0.329173 0.066008 -1.75 -0.327033 0.071712 -1.74 -0.324590 0.077267 -1.73 -0.321860 0.082646 -1.72 -0.318862 0.087826 -1.71 -0.315616 0.092785 -1.7 -0.312144 0.097507 -1.69 -0.308471 0.101974 -1.68 -0.304623 0.106175 -1.67 -0.300624 0.110100 -1.66 -0.296503 0.113744 -1.65 -0.292284 0.117104 -1.64 -0.287993 0.120178 -1.63 -0.283655 0.122971 -1.62 -0.279291 0.125487 -1.61 -0.274923 0.127732 -1.6 -0.270572 0.129715 -1.59 -0.266253 0.131446 -1.58 -0.261984 0.132934 -1.57 -0.257779 0.134192 -1.56 -0.253650 0.135230 -1.55 -0.249609 0.136060 -1.54 -0.245665 0.136695 -1.53 -0.241827 0.137144 -1.52 -0.238103 0.137420 -1.51 -0.234499 0.137534 -1.5 -0.231023 0.137496 -1.49 -0.227680 0.137318 -1.48 -0.224476 0.137010 -1.47 -0.221414 0.136582 -1.46 -0.218501 0.136047 -1.45 -0.215740 0.135413 -1.44 -0.213134 0.134694 -1.43 -0.210687 0.133900 -1.42 -0.208402 0.133043 -1.41 -0.206280 0.132135 -1.4 -0.204323 0.131188 -1.39 -0.202532 0.130215 -1.38 -0.200906 0.129229 -1.37 -0.199443 0.128242 -1.36 -0.198143 0.127267 -1.35 -0.197000 0.126318 -1.34 -0.196012 0.125407 -1.33 -0.195172 0.124548 -1.32 -0.194473 0.123752 -1.31 -0.193908 0.123031 -1.3 -0.193467 0.122398 -1.29 -0.193140 0.121861 -1.28 -0.192916 0.121432 -1.27 -0.192780 0.121118 -1.26 -0.192720 0.120926 -1.25 -0.192721 0.120862 -1.24 -0.192767 0.120930 -1.23 -0.192843 0.121132 -1.22 -0.192931 0.121468 -1.21 -0.193016 0.121936 -1.2 -0.193082 0.122532 -1.19 -0.193114 0.123248 -1.18 -0.193097 0.124078 -1.17 -0.193019 0.125010 -1.16 -0.192867 0.126033 -1.15 -0.192634 0.127133 -1.14 -0.192313 0.128295 -1.13 -0.191898 0.129504 -1.12 -0.191389 0.130746 -1.11 -0.190784 0.132004 -1.1 -0.190089 0.133263 -1.09 -0.189307 0.134511 -1.08 -0.188447 0.135735 -1.07 -0.187518 0.136924 -1.06 -0.186530 0.138071 -1.05 -0.185494 0.139168 -1.04 -0.184424 0.140212 -1.03 -0.183332 0.141201 -1.02 -0.182229 0.142137 -1.01 -0.181127 0.143021 -1 -0.180037 0.143859 -0.99 -0.178969 0.144658 -0.98 -0.177931 0.145425 -0.97 -0.176928 0.146170 -0.96 -0.175965 0.146904 -0.95 -0.175045 0.147638 -0.94 -0.174167 0.148384 -0.93 -0.173331 0.149152 -0.92 -0.172531 0.149954 -0.91 -0.171764 0.150801 -0.9 -0.171020 0.151701 -0.89 -0.170291 0.152664 -0.88 -0.169565 0.153695 -0.87 -0.168831 0.154800 -0.86 -0.168075 0.155982 -0.85 -0.167283 0.157241 -0.84 -0.166443 0.158575 -0.83 -0.165539 0.159981 -0.82 -0.164558 0.161453 -0.81 -0.163489 0.162982 -0.8 -0.162321 0.164557 -0.79 -0.161043 0.166166 -0.78 -0.159649 0.167796 -0.77 -0.158134 0.169431 -0.76 -0.156495 0.171057 -0.75 -0.154731 0.172658 -0.74 -0.152845 0.174217 -0.73 -0.150841 0.175721 -0.72 -0.148725 0.177155 -0.71 -0.146506 0.178506 -0.7 -0.144194 0.179764 -0.69 -0.141801 0.180919 -0.68 -0.139338 0.181964 -0.67 -0.136818 0.182892 -0.66 -0.134254 0.183701 -0.65 -0.131659 0.184389 -0.64 -0.129046 0.184956 -0.63 -0.126427 0.185403 -0.62 -0.123813 0.185733 -0.61 -0.121214 0.185951 -0.6 -0.118640 0.186061 -0.59 -0.116099 0.186070 -0.58 -0.113598 0.185985 -0.57 -0.111144 0.185812 -0.56 -0.108740 0.185559 -0.55 -0.106391 0.185233 -0.54 -0.104101 0.184842 -0.53 -0.101869 0.184394 -0.52 -0.099698 0.183895 -0.51 -0.097588 0.183352 -0.5 -0.095538 0.182772 -0.49 -0.093546 0.182161 -0.48 -0.091611 0.181523 -0.47 -0.089731 0.180864 -0.46 -0.087903 0.180189 -0.45 -0.086123 0.179500 -0.44 -0.084389 0.178801 -0.43 -0.082698 0.178094 -0.42 -0.081046 0.177381 -0.41 -0.079431 0.176664 -0.4 -0.077848 0.175942 -0.39 -0.076296 0.175217 -0.38 -0.074772 0.174488 -0.37 -0.073273 0.173754 -0.36 -0.071799 0.173016 -0.35 -0.070347 0.172272 -0.34 -0.068916 0.171521 -0.33 -0.067506 0.170763 -0.32 -0.066116 0.169996 -0.31 -0.064746 0.169219 -0.3 -0.063396 0.168432 -0.29 -0.062067 0.167634 -0.28 -0.060760 0.166824 -0.27 -0.059474 0.166003 -0.26 -0.058210 0.165171 -0.25 -0.056969 0.164327 -0.24 -0.055753 0.163472 -0.23 -0.054561 0.162607 -0.22 -0.053394 0.161732 -0.21 -0.052253 0.160848 -0.2 -0.051138 0.159956 -0.19 -0.050049 0.159056 -0.18 -0.048987 0.158150 -0.17 -0.047952 0.157239 -0.16 -0.046943 0.156324 -0.15 -0.045961 0.155405 -0.14 -0.045005 0.154484 -0.13 -0.044076 0.153562 -0.12 -0.043172 0.152640 -0.11 -0.042294 0.151718 -0.1 -0.041441 0.150797 -0.090000 -0.040612 0.149879 -0.080000 -0.039807 0.148963 -0.070000 -0.039025 0.148051 -0.060000 -0.038266 0.147143 -0.050000 -0.037529 0.146240 -0.040000 -0.036814 0.145342 -0.030000 -0.036119 0.144450 -0.020000 -0.035445 0.143564 -0.010000 -0.034790 0.142684 0 -0.034154 0.141811 0.009999 -0.033536 0.140945 0.019999 -0.032936 0.140086 0.029999 -0.032353 0.139235 0.039999 -0.031786 0.138391 0.049999 -0.031236 0.137555 0.059999 -0.030701 0.136727 0.069999 -0.030180 0.135907 0.079999 -0.029674 0.135095 0.089999 -0.029182 0.134291 0.099999 -0.028703 0.133496 0.11 -0.028237 0.132708 0.12 -0.027783 0.131929 0.13 -0.027342 0.131158 0.14 -0.026912 0.130395 0.15 -0.026493 0.129640 0.16 -0.026085 0.128894 0.17 -0.025687 0.128155 0.18 -0.025299 0.127424 0.19 -0.024921 0.126702 0.2 -0.024553 0.125987 0.21 -0.024193 0.125280 0.22 -0.023842 0.124581 0.23 -0.023500 0.123889 0.24 -0.023166 0.123205 0.25 -0.022839 0.122528 0.26 -0.022521 0.121859 0.27 -0.022209 0.121198 0.28 -0.021905 0.120543 0.29 -0.021608 0.119895 0.3 -0.021317 0.119255 0.31 -0.021033 0.118621 0.32 -0.020756 0.117995 0.33 -0.020484 0.117375 0.34 -0.020218 0.116762 0.35 -0.019958 0.116155 0.36 -0.019704 0.115555 0.37 -0.019455 0.114961 0.38 -0.019211 0.114374 0.39 -0.018972 0.113793 0.4 -0.018738 0.113218 0.41 -0.018509 0.112648 0.42 -0.018285 0.112085 0.43 -0.018065 0.111528 0.44 -0.017849 0.110977 0.45 -0.017638 0.110431 0.46 -0.017431 0.109891 0.47 -0.017228 0.109356 0.48 -0.017028 0.108827 0.49 -0.016833 0.108303 0.5 -0.016641 0.107785 0.51 -0.016453 0.107271 0.52 -0.016268 0.106763 0.53 -0.016087 0.106260 0.54 -0.015909 0.105762 0.55 -0.015735 0.105269 0.56 -0.015563 0.104780 0.57 -0.015395 0.104297 0.58 -0.015229 0.103818 0.59 -0.015067 0.103344 0.6 -0.014907 0.102874 0.61 -0.014750 0.102409 0.62 -0.014596 0.101948 0.63 -0.014444 0.101492 0.64 -0.014295 0.101040 0.65 -0.014149 0.100592 0.66 -0.014005 0.100148 0.67 -0.013863 0.099709 0.68 -0.013724 0.099273 0.69 -0.013587 0.098842 0.7 -0.013452 0.098414 0.71 -0.013319 0.097991 0.72 -0.013189 0.097571 0.73 -0.013060 0.097155 0.74 -0.012934 0.096743 0.75 -0.012809 0.096335 0.76 -0.012687 0.095930 0.77 -0.012566 0.095528 0.78 -0.012448 0.095131 0.79 -0.012331 0.094737 0.8 -0.012216 0.094346 0.81 -0.012102 0.093958 0.82 -0.011991 0.093574 0.83 -0.011881 0.093194 0.84 -0.011772 0.092816 0.85 -0.011666 0.092442 0.86 -0.011560 0.092071 0.87 -0.011457 0.091703 0.88 -0.011355 0.091338 0.89 -0.011254 0.090977 0.9 -0.011155 0.090618 0.91 -0.011057 0.090262 0.92 -0.010960 0.089910 0.93 -0.010865 0.089560 0.94 -0.010771 0.089213 0.95 -0.010679 0.088868 0.96 -0.010588 0.088527 0.97 -0.010498 0.088188 0.98 -0.010409 0.087853 0.99 -0.010321 0.087519 1 -0.010235 0.087189 1.01 -0.010150 0.086861 1.02 -0.010066 0.086536 1.03 -0.009983 0.086213 1.04 -0.009901 0.085893 1.05 -0.009820 0.085575 1.06 -0.009741 0.085260 1.07 -0.009662 0.084947 1.08 -0.009584 0.084636 1.09 -0.009508 0.084328 1.1 -0.009432 0.084023 1.11 -0.009357 0.083719 1.12 -0.009283 0.083418 1.13 -0.009210 0.083119 1.14 -0.009139 0.082823 1.15 -0.009067 0.082528 1.16 -0.008997 0.082236 1.17 -0.008928 0.081946 1.18 -0.008860 0.081658 1.19 -0.008792 0.081373 1.2 -0.008725 0.081089 1.21 -0.008659 0.080808 1.22 -0.008594 0.080528 1.23 -0.008530 0.080251 1.24 -0.008466 0.079975 1.25 -0.008403 0.079702 1.26 -0.008341 0.079430 1.27 -0.008279 0.079160 1.28 -0.008219 0.078893 1.29 -0.008159 0.078627 1.3 -0.008099 0.078363 1.31 -0.008041 0.078101 1.32 -0.007983 0.077841 1.33 -0.007925 0.077582 1.34 -0.007869 0.077325 1.35 -0.007813 0.077071 1.36 -0.007757 0.076817 1.37 -0.007703 0.076566 1.38 -0.007649 0.076316 1.39 -0.007595 0.076068 1.4 -0.007542 0.075822 1.41 -0.007490 0.075577 1.42 -0.007438 0.075334 1.43 -0.007387 0.075093 1.44 -0.007336 0.074853 1.45 -0.007286 0.074615 1.46 -0.007236 0.074379 1.47 -0.007187 0.074144 1.48 -0.007139 0.073910 1.49 -0.007091 0.073678 1.5 -0.007043 0.073448 1.51 -0.006996 0.073219 1.52 -0.006950 0.072991 1.53 -0.006904 0.072765 1.54 -0.006858 0.072541 1.55 -0.006813 0.072318 1.56 -0.006768 0.072096 1.57 -0.006724 0.071876 1.58 -0.006680 0.071657 1.59 -0.006637 0.071439 1.6 -0.006594 0.071223 1.61 -0.006552 0.071009 1.62 -0.006510 0.070795 1.63 -0.006469 0.070583 1.64 -0.006427 0.070372 1.65 -0.006387 0.070163 1.66 -0.006346 0.069955 1.67 -0.006306 0.069748 1.68 -0.006267 0.069542 1.69 -0.006228 0.069338 1.7 -0.006189 0.069135 1.71 -0.006151 0.068933 1.72 -0.006113 0.068732 1.73 -0.006075 0.068533 1.74 -0.006038 0.068334 1.75 -0.006001 0.068137 1.76 -0.005964 0.067942 1.77 -0.005928 0.067747 1.78 -0.005892 0.067553 1.79 -0.005857 0.067361 1.8 -0.005822 0.067170 1.81 -0.005787 0.066979 1.82 -0.005752 0.066790 1.83 -0.005718 0.066602 1.84 -0.005684 0.066416 1.85 -0.005651 0.066230 1.86 -0.005617 0.066045 1.87 -0.005584 0.065861 1.88 -0.005552 0.065679 1.89 -0.005519 0.065497 1.9 -0.005487 0.065317 1.91 -0.005455 0.065137 1.92 -0.005424 0.064959 1.93 -0.005393 0.064781 1.94 -0.005362 0.064605 1.95 -0.005331 0.064430 1.96 -0.005301 0.064255 1.97 -0.005271 0.064082 1.98 -0.005241 0.063909 1.99 -0.005211 0.063738 2 -0.005182 0.063567 2.01 -0.005153 0.063397 2.02 -0.005124 0.063228 2.03 -0.005095 0.063061 2.04 -0.005067 0.062894 2.05 -0.005039 0.062728 2.06 -0.005011 0.062563 2.07 -0.004984 0.062398 2.08 -0.004956 0.062235 2.09 -0.004929 0.062073 2.1 -0.004902 0.061911 2.11 -0.004875 0.061750 2.12 -0.004849 0.061591 2.13 -0.004823 0.061432 2.14 -0.004797 0.061274 2.15 -0.004771 0.061116 2.16 -0.004745 0.060960 2.17 -0.004720 0.060804 2.18 -0.004695 0.060649 2.19 -0.004670 0.060495 2.2 -0.004645 0.060342 2.21 -0.004621 0.060190 2.22 -0.004596 0.060038 2.23 -0.004572 0.059887 2.24 -0.004548 0.059737 2.25 -0.004525 0.059588 2.26 -0.004501 0.059439 2.27 -0.004478 0.059292 2.28 -0.004455 0.059145 2.29 -0.004432 0.058998 2.3 -0.004409 0.058853 2.31 -0.004386 0.058708 2.32 -0.004364 0.058564 2.33 -0.004341 0.058421 2.34 -0.004319 0.058278 2.35 -0.004297 0.058136 2.36 -0.004276 0.057995 2.37 -0.004254 0.057855 2.38 -0.004233 0.057715 2.39 -0.004211 0.057576 2.4 -0.004190 0.057437 2.41 -0.004169 0.057300 2.42 -0.004149 0.057163 2.43 -0.004128 0.057026 2.44 -0.004108 0.056890 2.45 -0.004087 0.056755 2.46 -0.004067 0.056621 2.47 -0.004047 0.056487 2.48 -0.004028 0.056354 2.49 -0.004008 0.056222 2.5 -0.003988 0.056090 2.51 -0.003969 0.055959 2.52 -0.003950 0.055828 2.53 -0.003931 0.055698 2.54 -0.003912 0.055569 2.55 -0.003893 0.055440 2.56 -0.003874 0.055312 2.57 -0.003856 0.055185 2.58 -0.003837 0.055058 2.59 -0.003819 0.054932 2.6 -0.003801 0.054806 2.61 -0.003783 0.054681 2.62 -0.003765 0.054557 2.63 -0.003747 0.054433 2.64 -0.003730 0.054309 2.65 -0.003712 0.054186 2.66 -0.003695 0.054064 2.67 -0.003678 0.053943 2.68 -0.003661 0.053822 2.69 -0.003644 0.053701 2.7 -0.003627 0.053581 2.71 -0.003610 0.053462 2.72 -0.003593 0.053343 2.73 -0.003577 0.053224 2.74 -0.003561 0.053107 2.75 -0.003544 0.052989 2.76 -0.003528 0.052873 2.77 -0.003512 0.052756 2.78 -0.003496 0.052641 2.79 -0.003480 0.052525 2.8 -0.003465 0.052411 2.81 -0.003449 0.052297 2.82 -0.003434 0.052183 2.83 -0.003418 0.052070 2.84 -0.003403 0.051957 2.85 -0.003388 0.051845 2.86 -0.003373 0.051733 2.87 -0.003358 0.051622 2.88 -0.003343 0.051512 2.89 -0.003328 0.051401 2.9 -0.003313 0.051292 2.91 -0.003299 0.051182 2.92 -0.003284 0.051074 2.93 -0.003270 0.050965 2.94 -0.003256 0.050858 2.95 -0.003242 0.050750 2.96 -0.003228 0.050643 2.97 -0.003214 0.050537 2.98 -0.003200 0.050431 2.99 -0.003186 0.050325 3 -0.003172 0.050220 3.01 -0.003159 0.050116 3.02 -0.003145 0.050012 3.03 -0.003132 0.049908 3.04 -0.003118 0.049805 3.05 -0.003105 0.049702 3.06 -0.003092 0.049599 3.07 -0.003079 0.049497 3.08 -0.003066 0.049396 3.09 -0.003053 0.049295 3.1 -0.003040 0.049194 3.11 -0.003027 0.049094 3.12 -0.003014 0.048994 3.13 -0.003002 0.048894 3.14 -0.002989 0.048795 3.15 -0.002977 0.048696 3.16 -0.002965 0.048598 3.17 -0.002952 0.048500 3.18 -0.002940 0.048403 3.19 -0.002928 0.048306 3.2 -0.002916 0.048209 3.21 -0.002904 0.048113 3.22 -0.002892 0.048017 3.23 -0.002880 0.047922 3.24 -0.002868 0.047827 3.25 -0.002857 0.047732 3.26 -0.002845 0.047638 3.27 -0.002834 0.047544 3.28 -0.002822 0.047450 3.29 -0.002811 0.047357 3.3 -0.002800 0.047264 3.31 -0.002788 0.047172 3.32 -0.002777 0.047079 3.33 -0.002766 0.046988 3.34 -0.002755 0.046896 3.35 -0.002744 0.046805 3.36 -0.002733 0.046715 3.37 -0.002722 0.046625 3.38 -0.002711 0.046535 3.39 -0.002701 0.046445 3.4 -0.002690 0.046356 3.41 -0.002680 0.046267 3.42 -0.002669 0.046178 3.43 -0.002659 0.046090 3.44 -0.002648 0.046002 3.45 -0.002638 0.045915 3.46 -0.002628 0.045828 3.47 -0.002617 0.045741 3.48 -0.002607 0.045654 3.49 -0.002597 0.045568 3.5 -0.002587 0.045482 3.51 -0.002577 0.045397 3.52 -0.002567 0.045312 3.53 -0.002557 0.045227 3.54 -0.002548 0.045142 3.55 -0.002538 0.045058 3.56 -0.002528 0.044974 3.57 -0.002519 0.044891 3.58 -0.002509 0.044808 3.59 -0.002499 0.044725 3.6 -0.002490 0.044642 3.61 -0.002481 0.044560 3.62 -0.002471 0.044478 3.63 -0.002462 0.044396 3.64 -0.002453 0.044315 3.65 -0.002444 0.044233 3.66 -0.002434 0.044153 3.67 -0.002425 0.044072 3.68 -0.002416 0.043992 3.69 -0.002407 0.043912 3.7 -0.002398 0.043833 3.71 -0.002390 0.043753 3.72 -0.002381 0.043674 3.73 -0.002372 0.043595 3.74 -0.002363 0.043517 3.75 -0.002354 0.043439 3.76 -0.002346 0.043361 3.77 -0.002337 0.043283 3.78 -0.002329 0.043206 3.79 -0.002320 0.043129 3.8 -0.002312 0.043052 3.81 -0.002303 0.042976 3.82 -0.002295 0.042900 3.83 -0.002287 0.042824 3.84 -0.002279 0.042748 3.85 -0.002270 0.042673 3.86 -0.002262 0.042598 3.87 -0.002254 0.042523 3.88 -0.002246 0.042448 3.89 -0.002238 0.042374 3.9 -0.002230 0.042300 3.91 -0.002222 0.042226 3.92 -0.002214 0.042153 3.93 -0.002206 0.042079 3.94 -0.002198 0.042006 3.95 -0.002191 0.041934 3.96 -0.002183 0.041861 3.97 -0.002175 0.041789 3.98 -0.002168 0.041717 3.99 -0.002160 0.041645 4 -0.002152 0.041574 4.01 -0.002145 0.041502 4.02 -0.002137 0.041431 4.03 -0.002130 0.041361 4.04 -0.002123 0.041290 4.05 -0.002115 0.041220 4.06 -0.002108 0.041150 4.07 -0.002101 0.041080 4.08 -0.002093 0.041011 4.09 -0.002086 0.040941 4.1 -0.002079 0.040872 4.11 -0.002072 0.040803 4.12 -0.002065 0.040735 4.13 -0.002058 0.040667 4.14 -0.002051 0.040598 4.15 -0.002044 0.040531 4.16 -0.002037 0.040463 4.17 -0.002030 0.040395 4.18 -0.002023 0.040328 4.19 -0.002016 0.040261 4.2 -0.002009 0.040194 4.21 -0.002002 0.040128 4.22 -0.001996 0.040062 4.23 -0.001989 0.039996 4.24 -0.001982 0.039930 4.25 -0.001976 0.039864 4.26 -0.001969 0.039799 4.27 -0.001962 0.039733 4.28 -0.001956 0.039668 4.29 -0.001949 0.039604 4.3 -0.001943 0.039539 4.31 -0.001936 0.039475 4.32 -0.001930 0.039411 4.33 -0.001924 0.039347 4.34 -0.001917 0.039283 4.35 -0.001911 0.039220 4.36 -0.001905 0.039156 4.37 -0.001898 0.039093 4.38 -0.001892 0.039030 4.39 -0.001886 0.038968 4.4 -0.001880 0.038905 4.41 -0.001874 0.038843 4.42 -0.001868 0.038781 4.43 -0.001862 0.038719 4.44 -0.001856 0.038657 4.45 -0.001850 0.038596 4.46 -0.001844 0.038534 4.47 -0.001838 0.038473 4.48 -0.001832 0.038413 4.49 -0.001826 0.038352 4.5 -0.001820 0.038291 4.51 -0.001814 0.038231 4.52 -0.001808 0.038171 4.53 -0.001803 0.038111 4.54 -0.001797 0.038051 4.55 -0.001791 0.037992 4.56 -0.001785 0.037932 4.57 -0.001780 0.037873 4.58 -0.001774 0.037814 4.59 -0.001769 0.037755 4.6 -0.001763 0.037697 4.61 -0.001757 0.037638 4.62 -0.001752 0.037580 4.63 -0.001746 0.037522 4.64 -0.001741 0.037464 4.65 -0.001735 0.037407 4.66 -0.001730 0.037349 4.67 -0.001725 0.037292 4.68 -0.001719 0.037235 4.69 -0.001714 0.037178 4.7 -0.001709 0.037121 4.71 -0.001703 0.037064 4.72 -0.001698 0.037008 4.73 -0.001693 0.036951 4.74 -0.001688 0.036895 4.75 -0.001682 0.036839 4.76 -0.001677 0.036784 4.77 -0.001672 0.036728 4.78 -0.001667 0.036673 4.79 -0.001662 0.036617 4.8 -0.001657 0.036562 4.81 -0.001652 0.036507 4.82 -0.001647 0.036453 4.83 -0.001642 0.036398 4.84 -0.001637 0.036344 4.85 -0.001632 0.036289 4.86 -0.001627 0.036235 4.87 -0.001622 0.036181 4.88 -0.001617 0.036128 4.89 -0.001612 0.036074 4.9 -0.001607 0.036020 4.91 -0.001602 0.035967 4.92 -0.001598 0.035914 4.93 -0.001593 0.035861 4.94 -0.001588 0.035808 4.95 -0.001583 0.035756 4.96 -0.001579 0.035703 4.97 -0.001574 0.035651 4.98 -0.001569 0.035599 4.99 -0.001564 0.035547 5 -0.001560 0.035495 5.01 -0.001555 0.035443 5.02 -0.001551 0.035391 5.03 -0.001546 0.035340 5.04 -0.001542 0.035289 5.05 -0.001537 0.035238 5.06 -0.001532 0.035187 5.07 -0.001528 0.035136 5.08 -0.001524 0.035085 5.09 -0.001519 0.035035 5.1 -0.001515 0.034984 5.11 -0.001510 0.034934 5.12 -0.001506 0.034884 5.13 -0.001501 0.034834 5.14 -0.001497 0.034784 5.15 -0.001493 0.034734 5.16 -0.001488 0.034685 5.17 -0.001484 0.034636 5.18 -0.001480 0.034586 5.19 -0.001476 0.034537 5.2 -0.001471 0.034488 5.21 -0.001467 0.034440 5.22 -0.001463 0.034391 5.23 -0.001459 0.034342 5.24 -0.001455 0.034294 5.25 -0.001450 0.034246 5.26 -0.001446 0.034198 5.27 -0.001442 0.034150 5.28 -0.001438 0.034102 5.29 -0.001434 0.034054 5.3 -0.001430 0.034006 5.31 -0.001426 0.033959 5.32 -0.001422 0.033912 5.33 -0.001418 0.033865 5.34 -0.001414 0.033817 5.35 -0.001410 0.033771 5.36 -0.001406 0.033724 5.37 -0.001402 0.033677 5.38 -0.001398 0.033631 5.39 -0.001394 0.033584 5.4 -0.001390 0.033538 5.41 -0.001386 0.033492 5.42 -0.001383 0.033446 5.43 -0.001379 0.033400 5.44 -0.001375 0.033354 5.45 -0.001371 0.033309 5.46 -0.001367 0.033263 5.47 -0.001363 0.033218 5.48 -0.001360 0.033173 5.49 -0.001356 0.033127 5.5 -0.001352 0.033082 5.51 -0.001349 0.033038 5.52 -0.001345 0.032993 5.53 -0.001341 0.032948 5.54 -0.001337 0.032904 5.55 -0.001334 0.032859 5.56 -0.001330 0.032815 5.57 -0.001327 0.032771 5.58 -0.001323 0.032727 5.59 -0.001319 0.032683 5.6 -0.001316 0.032639 5.61 -0.001312 0.032595 5.62 -0.001309 0.032552 5.63 -0.001305 0.032508 5.64 -0.001302 0.032465 5.65 -0.001298 0.032422 5.66 -0.001295 0.032379 5.67 -0.001291 0.032336 5.68 -0.001288 0.032293 5.69 -0.001284 0.032250 5.7 -0.001281 0.032208 5.71 -0.001277 0.032165 5.72 -0.001274 0.032123 5.73 -0.001271 0.032080 5.74 -0.001267 0.032038 5.75 -0.001264 0.031996 5.76 -0.001260 0.031954 5.77 -0.001257 0.031912 5.78 -0.001254 0.031871 5.79 -0.001250 0.031829 5.8 -0.001247 0.031788 5.81 -0.001244 0.031746 5.82 -0.001241 0.031705 5.83 -0.001237 0.031664 5.84 -0.001234 0.031623 5.85 -0.001231 0.031582 5.86 -0.001228 0.031541 5.87 -0.001224 0.031500 5.88 -0.001221 0.031459 5.89 -0.001218 0.031419 5.9 -0.001215 0.031378 5.91 -0.001212 0.031338 5.92 -0.001209 0.031298 5.93 -0.001205 0.031258 5.94 -0.001202 0.031218 5.95 -0.001199 0.031178 5.96 -0.001196 0.031138 5.97 -0.001193 0.031098 5.98 -0.001190 0.031059 5.99 -0.001187 0.031019 6 -0.001184 0.030980 6.01 -0.001181 0.030940 6.02 -0.001178 0.030901 6.03 -0.001175 0.030862 6.04 -0.001172 0.030823 6.05 -0.001169 0.030784 6.06 -0.001166 0.030745 6.07 -0.001163 0.030707 6.08 -0.001160 0.030668 6.09 -0.001157 0.030630 6.1 -0.001154 0.030591 6.11 -0.001151 0.030553 6.12 -0.001148 0.030515 6.13 -0.001145 0.030476 6.14 -0.001142 0.030438 6.15 -0.001139 0.030400 6.16 -0.001137 0.030363 6.17 -0.001134 0.030325 6.18 -0.001131 0.030287 6.19 -0.001128 0.030250 6.2 -0.001125 0.030212 6.21 -0.001122 0.030175 6.22 -0.001120 0.030138 6.23 -0.001117 0.030100 6.24 -0.001114 0.030063 6.25 -0.001111 0.030026 6.26 -0.001108 0.029989 6.27 -0.001106 0.029953 6.28 -0.001103 0.029916 6.29 -0.001100 0.029879 6.3 -0.001098 0.029843 6.31 -0.001095 0.029806 6.32 -0.001092 0.029770 6.33 -0.001089 0.029734 6.34 -0.001087 0.029697 6.35 -0.001084 0.029661 6.36 -0.001081 0.029625 6.37 -0.001079 0.029589 6.38 -0.001076 0.029554 6.39 -0.001074 0.029518 6.4 -0.001071 0.029482 6.41 -0.001068 0.029447 6.42 -0.001066 0.029411 6.43 -0.001063 0.029376 6.44 -0.001061 0.029340 6.45 -0.001058 0.029305 6.46 -0.001055 0.029270 6.47 -0.001053 0.029235 6.48 -0.001050 0.029200 6.49 -0.001048 0.029165 6.5 -0.001045 0.029130 6.51 -0.001043 0.029095 6.52 -0.001040 0.029061 6.53 -0.001038 0.029026 6.54 -0.001035 0.028992 6.55 -0.001033 0.028957 6.56 -0.001030 0.028923 6.57 -0.001028 0.028889 6.58 -0.001025 0.028855 6.59 -0.001023 0.028821 6.6 -0.001020 0.028787 6.61 -0.001018 0.028753 6.62 -0.001016 0.028719 6.63 -0.001013 0.028685 6.64 -0.001011 0.028652 6.65 -0.001008 0.028618 6.66 -0.001006 0.028584 6.67 -0.001004 0.028551 6.68 -0.001001 0.028518 6.69 -0.000999 0.028484 6.7 -0.000997 0.028451 6.71 -0.000994 0.028418 6.72 -0.000992 0.028385 6.73 -0.000990 0.028352 6.74 -0.000987 0.028319 6.75 -0.000985 0.028286 6.76 -0.000983 0.028254 6.77 -0.000980 0.028221 6.78 -0.000978 0.028188 6.79 -0.000976 0.028156 6.8 -0.000974 0.028124 6.81 -0.000971 0.028091 6.82 -0.000969 0.028059 6.83 -0.000967 0.028027 6.84 -0.000965 0.027995 6.85 -0.000962 0.027963 6.86 -0.000960 0.027931 6.87 -0.000958 0.027899 6.88 -0.000956 0.027867 6.89 -0.000953 0.027835 6.9 -0.000951 0.027803 6.91 -0.000949 0.027772 6.92 -0.000947 0.027740 6.93 -0.000945 0.027709 6.94 -0.000943 0.027677 6.95 -0.000940 0.027646 6.96 -0.000938 0.027615 6.97 -0.000936 0.027584 6.98 -0.000934 0.027553 6.99 -0.000932 0.027521 7 -0.000930 0.027491 7.01 -0.000928 0.027460 7.02 -0.000926 0.027429 7.03 -0.000923 0.027398 7.04 -0.000921 0.027367 7.05 -0.000919 0.027337 7.06 -0.000917 0.027306 7.07 -0.000915 0.027276 7.08 -0.000913 0.027245 7.09 -0.000911 0.027215 7.1 -0.000909 0.027185 7.11 -0.000907 0.027154 7.12 -0.000905 0.027124 7.13 -0.000903 0.027094 7.14 -0.000901 0.027064 7.15 -0.000899 0.027034 7.16 -0.000897 0.027004 7.17 -0.000895 0.026975 7.18 -0.000893 0.026945 7.19 -0.000891 0.026915 7.2 -0.000889 0.026885 7.21 -0.000887 0.026856 7.22 -0.000885 0.026826 7.23 -0.000883 0.026797 7.24 -0.000881 0.026768 7.25 -0.000879 0.026738 7.26 -0.000877 0.026709 7.27 -0.000875 0.026680 7.28 -0.000873 0.026651 7.29 -0.000871 0.026622 7.3 -0.000869 0.026593 7.31 -0.000868 0.026564 7.32 -0.000866 0.026535 7.33 -0.000864 0.026506 7.34 -0.000862 0.026478 7.35 -0.000860 0.026449 7.36 -0.000858 0.026420 7.37 -0.000856 0.026392 7.38 -0.000854 0.026363 7.39 -0.000853 0.026335 7.4 -0.000851 0.026307 7.41 -0.000849 0.026278 7.42 -0.000847 0.026250 7.43 -0.000845 0.026222 7.44 -0.000843 0.026194 7.45 -0.000842 0.026166 7.46 -0.000840 0.026138 7.47 -0.000838 0.026110 7.48 -0.000836 0.026082 7.49 -0.000834 0.026054 7.5 -0.000833 0.026027 7.51 -0.000831 0.025999 7.52 -0.000829 0.025971 7.53 -0.000827 0.025944 7.54 -0.000825 0.025916 7.55 -0.000824 0.025889 7.56 -0.000822 0.025861 7.57 -0.000820 0.025834 7.58 -0.000818 0.025807 7.59 -0.000817 0.025780 7.6 -0.000815 0.025752 7.61 -0.000813 0.025725 7.62 -0.000811 0.025698 7.63 -0.000810 0.025671 7.64 -0.000808 0.025644 7.65 -0.000806 0.025618 7.66 -0.000805 0.025591 7.67 -0.000803 0.025564 7.68 -0.000801 0.025537 7.69 -0.000800 0.025511 7.7 -0.000798 0.025484 7.71 -0.000796 0.025458 7.72 -0.000795 0.025431 7.73 -0.000793 0.025405 7.74 -0.000791 0.025378 7.75 -0.000790 0.025352 7.76 -0.000788 0.025326 7.77 -0.000786 0.025299 7.78 -0.000785 0.025273 7.79 -0.000783 0.025247 7.8 -0.000781 0.025221 7.81 -0.000780 0.025195 7.82 -0.000778 0.025169 7.83 -0.000777 0.025143 7.84 -0.000775 0.025118 7.85 -0.000773 0.025092 7.86 -0.000772 0.025066 7.87 -0.000770 0.025040 7.88 -0.000769 0.025015 7.89 -0.000767 0.024989 7.9 -0.000765 0.024964 7.91 -0.000764 0.024938 7.92 -0.000762 0.024913 7.93 -0.000761 0.024888 7.94 -0.000759 0.024862 7.95 -0.000758 0.024837 7.96 -0.000756 0.024812 7.97 -0.000754 0.024787 7.98 -0.000753 0.024762 7.99 -0.000751 0.024737 8 -0.000750 0.024712 8.01 -0.000748 0.024687 8.02 -0.000747 0.024662 8.03 -0.000745 0.024637 8.04 -0.000744 0.024612 8.05 -0.000742 0.024587 8.06 -0.000741 0.024563 8.07 -0.000739 0.024538 8.08 -0.000738 0.024513 8.09 -0.000736 0.024489 8.1 -0.000735 0.024464 8.11 -0.000733 0.024440 8.12 -0.000732 0.024416 8.13 -0.000730 0.024391 8.14 -0.000729 0.024367 8.15 -0.000727 0.024343 8.16 -0.000726 0.024318 8.17 -0.000725 0.024294 8.18 -0.000723 0.024270 8.19 -0.000722 0.024246 8.2 -0.000720 0.024222 8.21 -0.000719 0.024198 8.22 -0.000717 0.024174 8.23 -0.000716 0.024150 8.24 -0.000715 0.024127 8.25 -0.000713 0.024103 8.26 -0.000712 0.024079 8.27 -0.000710 0.024055 8.28 -0.000709 0.024032 8.29 -0.000707 0.024008 8.3 -0.000706 0.023985 8.31 -0.000705 0.023961 8.32 -0.000703 0.023938 8.33 -0.000702 0.023914 8.34 -0.000701 0.023891 8.35 -0.000699 0.023868 8.36 -0.000698 0.023844 8.37 -0.000696 0.023821 8.38 -0.000695 0.023798 8.39 -0.000694 0.023775 8.4 -0.000692 0.023752 8.41 -0.000691 0.023729 8.42 -0.000690 0.023706 8.43 -0.000688 0.023683 8.44 -0.000687 0.023660 8.45 -0.000686 0.023637 8.46 -0.000684 0.023614 8.47 -0.000683 0.023592 8.48 -0.000682 0.023569 8.49 -0.000680 0.023546 8.5 -0.000679 0.023524 8.51 -0.000678 0.023501 8.52 -0.000676 0.023478 8.53 -0.000675 0.023456 8.54 -0.000674 0.023433 8.55 -0.000672 0.023411 8.56 -0.000671 0.023389 8.57 -0.000670 0.023366 8.58 -0.000669 0.023344 8.59 -0.000667 0.023322 8.6 -0.000666 0.023300 8.61 -0.000665 0.023277 8.62 -0.000663 0.023255 8.63 -0.000662 0.023233 8.64 -0.000661 0.023211 8.65 -0.000660 0.023189 8.66 -0.000658 0.023167 8.67 -0.000657 0.023145 8.68 -0.000656 0.023124 8.69 -0.000655 0.023102 8.7 -0.000653 0.023080 8.71 -0.000652 0.023058 8.72 -0.000651 0.023036 8.73 -0.000650 0.023015 8.74 -0.000648 0.022993 8.75 -0.000647 0.022972 8.76 -0.000646 0.022950 8.77 -0.000645 0.022929 8.78 -0.000644 0.022907 8.79 -0.000642 0.022886 8.8 -0.000641 0.022864 8.81 -0.000640 0.022843 8.82 -0.000639 0.022822 8.83 -0.000638 0.022800 8.84 -0.000636 0.022779 8.85 -0.000635 0.022758 8.86 -0.000634 0.022737 8.87 -0.000633 0.022716 8.88 -0.000632 0.022695 8.89 -0.000630 0.022674 8.9 -0.000629 0.022653 8.91 -0.000628 0.022632 8.92 -0.000627 0.022611 8.93 -0.000626 0.022590 8.94 -0.000625 0.022569 8.95 -0.000623 0.022548 8.96 -0.000622 0.022528 8.97 -0.000621 0.022507 8.98 -0.000620 0.022486 8.99 -0.000619 0.022466 9 -0.000618 0.022445 9.01 -0.000617 0.022425 9.02 -0.000615 0.022404 9.03 -0.000614 0.022384 9.04 -0.000613 0.022363 9.05 -0.000612 0.022343 9.06 -0.000611 0.022322 9.07 -0.000610 0.022302 9.08 -0.000609 0.022282 9.09 -0.000608 0.022261 9.1 -0.000606 0.022241 9.11 -0.000605 0.022221 9.12 -0.000604 0.022201 9.13 -0.000603 0.022181 9.14 -0.000602 0.022161 9.15 -0.000601 0.022141 9.16 -0.000600 0.022121 9.17 -0.000599 0.022101 9.18 -0.000598 0.022081 9.19 -0.000597 0.022061 9.2 -0.000596 0.022041 9.21 -0.000594 0.022021 9.22 -0.000593 0.022001 9.23 -0.000592 0.021982 9.24 -0.000591 0.021962 9.25 -0.000590 0.021942 9.26 -0.000589 0.021923 9.27 -0.000588 0.021903 9.28 -0.000587 0.021883 9.29 -0.000586 0.021864 9.3 -0.000585 0.021844 9.31 -0.000584 0.021825 9.32 -0.000583 0.021806 9.33 -0.000582 0.021786 9.34 -0.000581 0.021767 9.35 -0.000580 0.021747 9.36 -0.000579 0.021728 9.37 -0.000578 0.021709 9.38 -0.000577 0.021690 9.39 -0.000576 0.021670 9.4 -0.000575 0.021651 9.41 -0.000574 0.021632 9.42 -0.000573 0.021613 9.43 -0.000571 0.021594 9.44 -0.000570 0.021575 9.45 -0.000569 0.021556 9.46 -0.000568 0.021537 9.47 -0.000567 0.021518 9.48 -0.000566 0.021499 9.49 -0.000565 0.021480 9.5 -0.000564 0.021462 9.51 -0.000563 0.021443 9.52 -0.000562 0.021424 9.53 -0.000561 0.021405 9.54 -0.000560 0.021387 9.55 -0.000560 0.021368 9.56 -0.000559 0.021349 9.57 -0.000558 0.021331 9.58 -0.000557 0.021312 9.59 -0.000556 0.021294 9.6 -0.000555 0.021275 9.61 -0.000554 0.021257 9.62 -0.000553 0.021238 9.63 -0.000552 0.021220 9.64 -0.000551 0.021201 9.65 -0.000550 0.021183 9.66 -0.000549 0.021165 9.67 -0.000548 0.021147 9.68 -0.000547 0.021128 9.69 -0.000546 0.021110 9.7 -0.000545 0.021092 9.71 -0.000544 0.021074 9.72 -0.000543 0.021056 9.73 -0.000542 0.021038 9.74 -0.000541 0.021020 9.75 -0.000540 0.021002 9.76 -0.000539 0.020984 9.77 -0.000539 0.020966 9.78 -0.000538 0.020948 9.79 -0.000537 0.020930 9.8 -0.000536 0.020912 9.81 -0.000535 0.020894 9.82 -0.000534 0.020876 9.83 -0.000533 0.020859 9.84 -0.000532 0.020841 9.85 -0.000531 0.020823 9.86 -0.000530 0.020805 9.87 -0.000529 0.020788 9.88 -0.000528 0.020770 9.89 -0.000528 0.020752 9.9 -0.000527 0.020735 9.91 -0.000526 0.020717 9.92 -0.000525 0.020700 9.93 -0.000524 0.020682 9.94 -0.000523 0.020665 9.95 -0.000522 0.020648 9.96 -0.000521 0.020630 9.97 -0.000520 0.020613 9.98 -0.000520 0.020595 9.99 -0.000519 0.020578 dmrgpp-6.02/TestSuite/oracles/data3001.cf000066400000000000000000001454721414604301300200530ustar00rootroot00000000000000-10 -0.000518 -0.020561 -9.99 -0.000519 -0.020578 -9.98 -0.000520 -0.020596 -9.97 -0.000520 -0.020613 -9.96 -0.000521 -0.020630 -9.95 -0.000522 -0.020648 -9.94 -0.000523 -0.020665 -9.93 -0.000524 -0.020682 -9.92 -0.000525 -0.020700 -9.91 -0.000526 -0.020717 -9.9 -0.000527 -0.020735 -9.89 -0.000528 -0.020753 -9.88 -0.000528 -0.020770 -9.87 -0.000529 -0.020788 -9.86 -0.000530 -0.020805 -9.85 -0.000531 -0.020823 -9.84 -0.000532 -0.020841 -9.83 -0.000533 -0.020859 -9.82 -0.000534 -0.020876 -9.81 -0.000535 -0.020894 -9.8 -0.000536 -0.020912 -9.79 -0.000537 -0.020930 -9.78 -0.000538 -0.020948 -9.77 -0.000539 -0.020966 -9.76 -0.000539 -0.020984 -9.75 -0.000540 -0.021002 -9.74 -0.000541 -0.021020 -9.73 -0.000542 -0.021038 -9.72 -0.000543 -0.021056 -9.71 -0.000544 -0.021074 -9.7 -0.000545 -0.021092 -9.69 -0.000546 -0.021110 -9.68 -0.000547 -0.021128 -9.67 -0.000548 -0.021147 -9.66 -0.000549 -0.021165 -9.65 -0.000550 -0.021183 -9.64 -0.000551 -0.021202 -9.63 -0.000552 -0.021220 -9.62 -0.000553 -0.021238 -9.61 -0.000554 -0.021257 -9.6 -0.000555 -0.021275 -9.59 -0.000556 -0.021294 -9.58 -0.000557 -0.021312 -9.57 -0.000558 -0.021331 -9.56 -0.000559 -0.021349 -9.55 -0.000560 -0.021368 -9.54 -0.000560 -0.021387 -9.53 -0.000561 -0.021405 -9.52 -0.000562 -0.021424 -9.51 -0.000563 -0.021443 -9.5 -0.000564 -0.021462 -9.49 -0.000565 -0.021480 -9.48 -0.000566 -0.021499 -9.47 -0.000567 -0.021518 -9.46 -0.000568 -0.021537 -9.45 -0.000569 -0.021556 -9.44 -0.000570 -0.021575 -9.43 -0.000571 -0.021594 -9.42 -0.000573 -0.021613 -9.41 -0.000574 -0.021632 -9.4 -0.000575 -0.021651 -9.39 -0.000576 -0.021670 -9.38 -0.000577 -0.021690 -9.37 -0.000578 -0.021709 -9.36 -0.000579 -0.021728 -9.35 -0.000580 -0.021747 -9.34 -0.000581 -0.021767 -9.33 -0.000582 -0.021786 -9.32 -0.000583 -0.021806 -9.31 -0.000584 -0.021825 -9.3 -0.000585 -0.021844 -9.29 -0.000586 -0.021864 -9.28 -0.000587 -0.021883 -9.27 -0.000588 -0.021903 -9.26 -0.000589 -0.021923 -9.25 -0.000590 -0.021942 -9.24 -0.000591 -0.021962 -9.23 -0.000592 -0.021982 -9.22 -0.000593 -0.022001 -9.21 -0.000594 -0.022021 -9.2 -0.000596 -0.022041 -9.19 -0.000597 -0.022061 -9.18 -0.000598 -0.022081 -9.17 -0.000599 -0.022101 -9.16 -0.000600 -0.022121 -9.15 -0.000601 -0.022141 -9.14 -0.000602 -0.022161 -9.13 -0.000603 -0.022181 -9.12 -0.000604 -0.022201 -9.11 -0.000605 -0.022221 -9.1 -0.000606 -0.022241 -9.09 -0.000608 -0.022261 -9.08 -0.000609 -0.022282 -9.07 -0.000610 -0.022302 -9.06 -0.000611 -0.022322 -9.05 -0.000612 -0.022343 -9.04 -0.000613 -0.022363 -9.03 -0.000614 -0.022384 -9.02 -0.000615 -0.022404 -9.01 -0.000617 -0.022425 -9 -0.000618 -0.022445 -8.99 -0.000619 -0.022466 -8.98 -0.000620 -0.022486 -8.97 -0.000621 -0.022507 -8.96 -0.000622 -0.022528 -8.95 -0.000623 -0.022549 -8.94 -0.000625 -0.022569 -8.93 -0.000626 -0.022590 -8.92 -0.000627 -0.022611 -8.91 -0.000628 -0.022632 -8.9 -0.000629 -0.022653 -8.89 -0.000630 -0.022674 -8.88 -0.000632 -0.022695 -8.87 -0.000633 -0.022716 -8.86 -0.000634 -0.022737 -8.85 -0.000635 -0.022758 -8.84 -0.000636 -0.022779 -8.83 -0.000638 -0.022801 -8.82 -0.000639 -0.022822 -8.81 -0.000640 -0.022843 -8.8 -0.000641 -0.022864 -8.79 -0.000642 -0.022886 -8.78 -0.000644 -0.022907 -8.77 -0.000645 -0.022929 -8.76 -0.000646 -0.022950 -8.75 -0.000647 -0.022972 -8.74 -0.000649 -0.022993 -8.73 -0.000650 -0.023015 -8.72 -0.000651 -0.023037 -8.71 -0.000652 -0.023058 -8.7 -0.000653 -0.023080 -8.69 -0.000655 -0.023102 -8.68 -0.000656 -0.023124 -8.67 -0.000657 -0.023145 -8.66 -0.000658 -0.023167 -8.65 -0.000660 -0.023189 -8.64 -0.000661 -0.023211 -8.63 -0.000662 -0.023233 -8.62 -0.000663 -0.023255 -8.61 -0.000665 -0.023278 -8.6 -0.000666 -0.023300 -8.59 -0.000667 -0.023322 -8.58 -0.000669 -0.023344 -8.57 -0.000670 -0.023366 -8.56 -0.000671 -0.023389 -8.55 -0.000672 -0.023411 -8.54 -0.000674 -0.023434 -8.53 -0.000675 -0.023456 -8.52 -0.000676 -0.023479 -8.51 -0.000678 -0.023501 -8.5 -0.000679 -0.023524 -8.49 -0.000680 -0.023546 -8.48 -0.000682 -0.023569 -8.47 -0.000683 -0.023592 -8.46 -0.000684 -0.023614 -8.45 -0.000686 -0.023637 -8.44 -0.000687 -0.023660 -8.43 -0.000688 -0.023683 -8.42 -0.000690 -0.023706 -8.41 -0.000691 -0.023729 -8.4 -0.000692 -0.023752 -8.39 -0.000694 -0.023775 -8.38 -0.000695 -0.023798 -8.37 -0.000696 -0.023821 -8.36 -0.000698 -0.023845 -8.35 -0.000699 -0.023868 -8.34 -0.000701 -0.023891 -8.33 -0.000702 -0.023914 -8.32 -0.000703 -0.023938 -8.31 -0.000705 -0.023961 -8.3 -0.000706 -0.023985 -8.29 -0.000707 -0.024008 -8.28 -0.000709 -0.024032 -8.27 -0.000710 -0.024056 -8.26 -0.000712 -0.024079 -8.25 -0.000713 -0.024103 -8.24 -0.000715 -0.024127 -8.23 -0.000716 -0.024150 -8.22 -0.000717 -0.024174 -8.21 -0.000719 -0.024198 -8.2 -0.000720 -0.024222 -8.19 -0.000722 -0.024246 -8.18 -0.000723 -0.024270 -8.17 -0.000725 -0.024294 -8.16 -0.000726 -0.024319 -8.15 -0.000727 -0.024343 -8.14 -0.000729 -0.024367 -8.13 -0.000730 -0.024391 -8.12 -0.000732 -0.024416 -8.11 -0.000733 -0.024440 -8.1 -0.000735 -0.024464 -8.09 -0.000736 -0.024489 -8.08 -0.000738 -0.024513 -8.07 -0.000739 -0.024538 -8.06 -0.000741 -0.024563 -8.05 -0.000742 -0.024587 -8.04 -0.000744 -0.024612 -8.03 -0.000745 -0.024637 -8.02 -0.000747 -0.024662 -8.01 -0.000748 -0.024687 -8 -0.000750 -0.024712 -7.99 -0.000751 -0.024737 -7.98 -0.000753 -0.024762 -7.97 -0.000754 -0.024787 -7.96 -0.000756 -0.024812 -7.95 -0.000758 -0.024837 -7.94 -0.000759 -0.024862 -7.93 -0.000761 -0.024888 -7.92 -0.000762 -0.024913 -7.91 -0.000764 -0.024938 -7.9 -0.000765 -0.024964 -7.89 -0.000767 -0.024989 -7.88 -0.000769 -0.025015 -7.87 -0.000770 -0.025040 -7.86 -0.000772 -0.025066 -7.85 -0.000773 -0.025092 -7.84 -0.000775 -0.025118 -7.83 -0.000777 -0.025143 -7.82 -0.000778 -0.025169 -7.81 -0.000780 -0.025195 -7.8 -0.000781 -0.025221 -7.79 -0.000783 -0.025247 -7.78 -0.000785 -0.025273 -7.77 -0.000786 -0.025300 -7.76 -0.000788 -0.025326 -7.75 -0.000790 -0.025352 -7.74 -0.000791 -0.025378 -7.73 -0.000793 -0.025405 -7.72 -0.000795 -0.025431 -7.71 -0.000796 -0.025458 -7.7 -0.000798 -0.025484 -7.69 -0.000800 -0.025511 -7.68 -0.000801 -0.025537 -7.67 -0.000803 -0.025564 -7.66 -0.000805 -0.025591 -7.65 -0.000806 -0.025618 -7.64 -0.000808 -0.025644 -7.63 -0.000810 -0.025671 -7.62 -0.000811 -0.025698 -7.61 -0.000813 -0.025725 -7.6 -0.000815 -0.025753 -7.59 -0.000817 -0.025780 -7.58 -0.000818 -0.025807 -7.57 -0.000820 -0.025834 -7.56 -0.000822 -0.025861 -7.55 -0.000824 -0.025889 -7.54 -0.000825 -0.025916 -7.53 -0.000827 -0.025944 -7.52 -0.000829 -0.025971 -7.51 -0.000831 -0.025999 -7.5 -0.000833 -0.026027 -7.49 -0.000834 -0.026054 -7.48 -0.000836 -0.026082 -7.47 -0.000838 -0.026110 -7.46 -0.000840 -0.026138 -7.45 -0.000842 -0.026166 -7.44 -0.000843 -0.026194 -7.43 -0.000845 -0.026222 -7.42 -0.000847 -0.026250 -7.41 -0.000849 -0.026278 -7.4 -0.000851 -0.026307 -7.39 -0.000853 -0.026335 -7.38 -0.000854 -0.026364 -7.37 -0.000856 -0.026392 -7.36 -0.000858 -0.026421 -7.35 -0.000860 -0.026449 -7.34 -0.000862 -0.026478 -7.33 -0.000864 -0.026506 -7.32 -0.000866 -0.026535 -7.31 -0.000868 -0.026564 -7.3 -0.000869 -0.026593 -7.29 -0.000871 -0.026622 -7.28 -0.000873 -0.026651 -7.27 -0.000875 -0.026680 -7.26 -0.000877 -0.026709 -7.25 -0.000879 -0.026738 -7.24 -0.000881 -0.026768 -7.23 -0.000883 -0.026797 -7.22 -0.000885 -0.026827 -7.21 -0.000887 -0.026856 -7.2 -0.000889 -0.026886 -7.19 -0.000891 -0.026915 -7.18 -0.000893 -0.026945 -7.17 -0.000895 -0.026975 -7.16 -0.000897 -0.027004 -7.15 -0.000899 -0.027034 -7.14 -0.000901 -0.027064 -7.13 -0.000903 -0.027094 -7.12 -0.000905 -0.027124 -7.11 -0.000907 -0.027154 -7.1 -0.000909 -0.027185 -7.09 -0.000911 -0.027215 -7.08 -0.000913 -0.027245 -7.07 -0.000915 -0.027276 -7.06 -0.000917 -0.027306 -7.05 -0.000919 -0.027337 -7.04 -0.000921 -0.027367 -7.03 -0.000923 -0.027398 -7.02 -0.000926 -0.027429 -7.01 -0.000928 -0.027460 -7 -0.000930 -0.027491 -6.99 -0.000932 -0.027522 -6.98 -0.000934 -0.027553 -6.97 -0.000936 -0.027584 -6.96 -0.000938 -0.027615 -6.95 -0.000940 -0.027646 -6.94 -0.000943 -0.027677 -6.93 -0.000945 -0.027709 -6.92 -0.000947 -0.027740 -6.91 -0.000949 -0.027772 -6.9 -0.000951 -0.027803 -6.89 -0.000953 -0.027835 -6.88 -0.000956 -0.027867 -6.87 -0.000958 -0.027899 -6.86 -0.000960 -0.027931 -6.85 -0.000962 -0.027963 -6.84 -0.000965 -0.027995 -6.83 -0.000967 -0.028027 -6.82 -0.000969 -0.028059 -6.81 -0.000971 -0.028091 -6.8 -0.000974 -0.028124 -6.79 -0.000976 -0.028156 -6.78 -0.000978 -0.028189 -6.77 -0.000980 -0.028221 -6.76 -0.000983 -0.028254 -6.75 -0.000985 -0.028287 -6.74 -0.000987 -0.028319 -6.73 -0.000990 -0.028352 -6.72 -0.000992 -0.028385 -6.71 -0.000994 -0.028418 -6.7 -0.000997 -0.028451 -6.69 -0.000999 -0.028485 -6.68 -0.001001 -0.028518 -6.67 -0.001004 -0.028551 -6.66 -0.001006 -0.028585 -6.65 -0.001008 -0.028618 -6.64 -0.001011 -0.028652 -6.63 -0.001013 -0.028685 -6.62 -0.001016 -0.028719 -6.61 -0.001018 -0.028753 -6.6 -0.001020 -0.028787 -6.59 -0.001023 -0.028821 -6.58 -0.001025 -0.028855 -6.57 -0.001028 -0.028889 -6.56 -0.001030 -0.028923 -6.55 -0.001033 -0.028958 -6.54 -0.001035 -0.028992 -6.53 -0.001038 -0.029026 -6.52 -0.001040 -0.029061 -6.51 -0.001043 -0.029096 -6.5 -0.001045 -0.029130 -6.49 -0.001048 -0.029165 -6.48 -0.001050 -0.029200 -6.47 -0.001053 -0.029235 -6.46 -0.001055 -0.029270 -6.45 -0.001058 -0.029305 -6.44 -0.001061 -0.029340 -6.43 -0.001063 -0.029376 -6.42 -0.001066 -0.029411 -6.41 -0.001068 -0.029447 -6.4 -0.001071 -0.029482 -6.39 -0.001074 -0.029518 -6.38 -0.001076 -0.029554 -6.37 -0.001079 -0.029589 -6.36 -0.001081 -0.029625 -6.35 -0.001084 -0.029661 -6.34 -0.001087 -0.029697 -6.33 -0.001089 -0.029734 -6.32 -0.001092 -0.029770 -6.31 -0.001095 -0.029806 -6.3 -0.001098 -0.029843 -6.29 -0.001100 -0.029879 -6.28 -0.001103 -0.029916 -6.27 -0.001106 -0.029953 -6.26 -0.001108 -0.029989 -6.25 -0.001111 -0.030026 -6.24 -0.001114 -0.030063 -6.23 -0.001117 -0.030100 -6.22 -0.001120 -0.030138 -6.21 -0.001122 -0.030175 -6.2 -0.001125 -0.030212 -6.19 -0.001128 -0.030250 -6.18 -0.001131 -0.030287 -6.17 -0.001134 -0.030325 -6.16 -0.001137 -0.030363 -6.15 -0.001139 -0.030401 -6.14 -0.001142 -0.030438 -6.13 -0.001145 -0.030477 -6.12 -0.001148 -0.030515 -6.11 -0.001151 -0.030553 -6.1 -0.001154 -0.030591 -6.09 -0.001157 -0.030630 -6.08 -0.001160 -0.030668 -6.07 -0.001163 -0.030707 -6.06 -0.001166 -0.030745 -6.05 -0.001169 -0.030784 -6.04 -0.001172 -0.030823 -6.03 -0.001175 -0.030862 -6.02 -0.001178 -0.030901 -6.01 -0.001181 -0.030940 -6 -0.001184 -0.030980 -5.99 -0.001187 -0.031019 -5.98 -0.001190 -0.031059 -5.97 -0.001193 -0.031098 -5.96 -0.001196 -0.031138 -5.95 -0.001199 -0.031178 -5.94 -0.001202 -0.031218 -5.93 -0.001205 -0.031258 -5.92 -0.001209 -0.031298 -5.91 -0.001212 -0.031338 -5.9 -0.001215 -0.031378 -5.89 -0.001218 -0.031419 -5.88 -0.001221 -0.031459 -5.87 -0.001224 -0.031500 -5.86 -0.001228 -0.031541 -5.85 -0.001231 -0.031582 -5.84 -0.001234 -0.031623 -5.83 -0.001237 -0.031664 -5.82 -0.001241 -0.031705 -5.81 -0.001244 -0.031746 -5.8 -0.001247 -0.031788 -5.79 -0.001250 -0.031829 -5.78 -0.001254 -0.031871 -5.77 -0.001257 -0.031913 -5.76 -0.001260 -0.031954 -5.75 -0.001264 -0.031996 -5.74 -0.001267 -0.032038 -5.73 -0.001271 -0.032081 -5.72 -0.001274 -0.032123 -5.71 -0.001277 -0.032165 -5.7 -0.001281 -0.032208 -5.69 -0.001284 -0.032250 -5.68 -0.001288 -0.032293 -5.67 -0.001291 -0.032336 -5.66 -0.001295 -0.032379 -5.65 -0.001298 -0.032422 -5.64 -0.001302 -0.032465 -5.63 -0.001305 -0.032509 -5.62 -0.001309 -0.032552 -5.61 -0.001312 -0.032596 -5.6 -0.001316 -0.032639 -5.59 -0.001319 -0.032683 -5.58 -0.001323 -0.032727 -5.57 -0.001327 -0.032771 -5.56 -0.001330 -0.032815 -5.55 -0.001334 -0.032859 -5.54 -0.001337 -0.032904 -5.53 -0.001341 -0.032948 -5.52 -0.001345 -0.032993 -5.51 -0.001349 -0.033038 -5.5 -0.001352 -0.033082 -5.49 -0.001356 -0.033127 -5.48 -0.001360 -0.033173 -5.47 -0.001363 -0.033218 -5.46 -0.001367 -0.033263 -5.45 -0.001371 -0.033309 -5.44 -0.001375 -0.033354 -5.43 -0.001379 -0.033400 -5.42 -0.001383 -0.033446 -5.41 -0.001386 -0.033492 -5.4 -0.001390 -0.033538 -5.39 -0.001394 -0.033584 -5.38 -0.001398 -0.033631 -5.37 -0.001402 -0.033677 -5.36 -0.001406 -0.033724 -5.35 -0.001410 -0.033771 -5.34 -0.001414 -0.033818 -5.33 -0.001418 -0.033865 -5.32 -0.001422 -0.033912 -5.31 -0.001426 -0.033959 -5.3 -0.001430 -0.034007 -5.29 -0.001434 -0.034054 -5.28 -0.001438 -0.034102 -5.27 -0.001442 -0.034150 -5.26 -0.001446 -0.034198 -5.25 -0.001450 -0.034246 -5.24 -0.001455 -0.034294 -5.23 -0.001459 -0.034342 -5.22 -0.001463 -0.034391 -5.21 -0.001467 -0.034440 -5.2 -0.001471 -0.034488 -5.19 -0.001476 -0.034537 -5.18 -0.001480 -0.034586 -5.17 -0.001484 -0.034636 -5.16 -0.001488 -0.034685 -5.15 -0.001493 -0.034735 -5.14 -0.001497 -0.034784 -5.13 -0.001501 -0.034834 -5.12 -0.001506 -0.034884 -5.11 -0.001510 -0.034934 -5.1 -0.001515 -0.034984 -5.09 -0.001519 -0.035035 -5.08 -0.001524 -0.035085 -5.07 -0.001528 -0.035136 -5.06 -0.001532 -0.035187 -5.05 -0.001537 -0.035238 -5.04 -0.001542 -0.035289 -5.03 -0.001546 -0.035340 -5.02 -0.001551 -0.035392 -5.01 -0.001555 -0.035443 -5 -0.001560 -0.035495 -4.99 -0.001564 -0.035547 -4.98 -0.001569 -0.035599 -4.97 -0.001574 -0.035651 -4.96 -0.001579 -0.035703 -4.95 -0.001583 -0.035756 -4.94 -0.001588 -0.035808 -4.93 -0.001593 -0.035861 -4.92 -0.001598 -0.035914 -4.91 -0.001602 -0.035967 -4.9 -0.001607 -0.036021 -4.89 -0.001612 -0.036074 -4.88 -0.001617 -0.036128 -4.87 -0.001622 -0.036181 -4.86 -0.001627 -0.036235 -4.85 -0.001632 -0.036289 -4.84 -0.001637 -0.036344 -4.83 -0.001642 -0.036398 -4.82 -0.001647 -0.036453 -4.81 -0.001652 -0.036507 -4.8 -0.001657 -0.036562 -4.79 -0.001662 -0.036617 -4.78 -0.001667 -0.036673 -4.77 -0.001672 -0.036728 -4.76 -0.001677 -0.036784 -4.75 -0.001682 -0.036840 -4.74 -0.001688 -0.036895 -4.73 -0.001693 -0.036952 -4.72 -0.001698 -0.037008 -4.71 -0.001703 -0.037064 -4.7 -0.001709 -0.037121 -4.69 -0.001714 -0.037178 -4.68 -0.001719 -0.037235 -4.67 -0.001725 -0.037292 -4.66 -0.001730 -0.037349 -4.65 -0.001735 -0.037407 -4.64 -0.001741 -0.037464 -4.63 -0.001746 -0.037522 -4.62 -0.001752 -0.037580 -4.61 -0.001757 -0.037639 -4.6 -0.001763 -0.037697 -4.59 -0.001769 -0.037756 -4.58 -0.001774 -0.037814 -4.57 -0.001780 -0.037873 -4.56 -0.001785 -0.037933 -4.55 -0.001791 -0.037992 -4.54 -0.001797 -0.038051 -4.53 -0.001803 -0.038111 -4.52 -0.001808 -0.038171 -4.51 -0.001814 -0.038231 -4.5 -0.001820 -0.038291 -4.49 -0.001826 -0.038352 -4.48 -0.001832 -0.038413 -4.47 -0.001838 -0.038474 -4.46 -0.001844 -0.038535 -4.45 -0.001850 -0.038596 -4.44 -0.001856 -0.038657 -4.43 -0.001862 -0.038719 -4.42 -0.001868 -0.038781 -4.41 -0.001874 -0.038843 -4.4 -0.001880 -0.038905 -4.39 -0.001886 -0.038968 -4.38 -0.001892 -0.039030 -4.37 -0.001898 -0.039093 -4.36 -0.001905 -0.039156 -4.35 -0.001911 -0.039220 -4.34 -0.001917 -0.039283 -4.33 -0.001924 -0.039347 -4.32 -0.001930 -0.039411 -4.31 -0.001936 -0.039475 -4.3 -0.001943 -0.039539 -4.29 -0.001949 -0.039604 -4.28 -0.001956 -0.039669 -4.27 -0.001962 -0.039734 -4.26 -0.001969 -0.039799 -4.25 -0.001976 -0.039864 -4.24 -0.001982 -0.039930 -4.23 -0.001989 -0.039996 -4.22 -0.001996 -0.040062 -4.21 -0.002002 -0.040128 -4.2 -0.002009 -0.040195 -4.19 -0.002016 -0.040261 -4.18 -0.002023 -0.040328 -4.17 -0.002030 -0.040396 -4.16 -0.002037 -0.040463 -4.15 -0.002044 -0.040531 -4.14 -0.002051 -0.040599 -4.13 -0.002058 -0.040667 -4.12 -0.002065 -0.040735 -4.11 -0.002072 -0.040804 -4.1 -0.002079 -0.040872 -4.09 -0.002086 -0.040941 -4.08 -0.002093 -0.041011 -4.07 -0.002101 -0.041080 -4.06 -0.002108 -0.041150 -4.05 -0.002115 -0.041220 -4.04 -0.002123 -0.041290 -4.03 -0.002130 -0.041361 -4.02 -0.002137 -0.041432 -4.01 -0.002145 -0.041503 -4 -0.002152 -0.041574 -3.99 -0.002160 -0.041645 -3.98 -0.002168 -0.041717 -3.97 -0.002175 -0.041789 -3.96 -0.002183 -0.041861 -3.95 -0.002191 -0.041934 -3.94 -0.002198 -0.042006 -3.93 -0.002206 -0.042079 -3.92 -0.002214 -0.042153 -3.91 -0.002222 -0.042226 -3.9 -0.002230 -0.042300 -3.89 -0.002238 -0.042374 -3.88 -0.002246 -0.042448 -3.87 -0.002254 -0.042523 -3.86 -0.002262 -0.042598 -3.85 -0.002270 -0.042673 -3.84 -0.002279 -0.042748 -3.83 -0.002287 -0.042824 -3.82 -0.002295 -0.042900 -3.81 -0.002303 -0.042976 -3.8 -0.002312 -0.043053 -3.79 -0.002320 -0.043129 -3.78 -0.002329 -0.043206 -3.77 -0.002337 -0.043284 -3.76 -0.002346 -0.043361 -3.75 -0.002355 -0.043439 -3.74 -0.002363 -0.043517 -3.73 -0.002372 -0.043596 -3.72 -0.002381 -0.043674 -3.71 -0.002390 -0.043753 -3.7 -0.002398 -0.043833 -3.69 -0.002407 -0.043912 -3.68 -0.002416 -0.043992 -3.67 -0.002425 -0.044072 -3.66 -0.002434 -0.044153 -3.65 -0.002444 -0.044234 -3.64 -0.002453 -0.044315 -3.63 -0.002462 -0.044396 -3.62 -0.002471 -0.044478 -3.61 -0.002481 -0.044560 -3.6 -0.002490 -0.044642 -3.59 -0.002499 -0.044725 -3.58 -0.002509 -0.044808 -3.57 -0.002519 -0.044891 -3.56 -0.002528 -0.044975 -3.55 -0.002538 -0.045058 -3.54 -0.002548 -0.045143 -3.53 -0.002557 -0.045227 -3.52 -0.002567 -0.045312 -3.51 -0.002577 -0.045397 -3.5 -0.002587 -0.045483 -3.49 -0.002597 -0.045569 -3.48 -0.002607 -0.045655 -3.47 -0.002617 -0.045741 -3.46 -0.002628 -0.045828 -3.45 -0.002638 -0.045915 -3.44 -0.002648 -0.046003 -3.43 -0.002659 -0.046090 -3.42 -0.002669 -0.046179 -3.41 -0.002680 -0.046267 -3.4 -0.002690 -0.046356 -3.39 -0.002701 -0.046445 -3.38 -0.002711 -0.046535 -3.37 -0.002722 -0.046625 -3.36 -0.002733 -0.046715 -3.35 -0.002744 -0.046806 -3.34 -0.002755 -0.046897 -3.33 -0.002766 -0.046988 -3.32 -0.002777 -0.047080 -3.31 -0.002788 -0.047172 -3.3 -0.002800 -0.047264 -3.29 -0.002811 -0.047357 -3.28 -0.002822 -0.047450 -3.27 -0.002834 -0.047544 -3.26 -0.002845 -0.047638 -3.25 -0.002857 -0.047732 -3.24 -0.002869 -0.047827 -3.23 -0.002880 -0.047922 -3.22 -0.002892 -0.048017 -3.21 -0.002904 -0.048113 -3.2 -0.002916 -0.048209 -3.19 -0.002928 -0.048306 -3.18 -0.002940 -0.048403 -3.17 -0.002952 -0.048501 -3.16 -0.002965 -0.048598 -3.15 -0.002977 -0.048697 -3.14 -0.002989 -0.048795 -3.13 -0.003002 -0.048894 -3.12 -0.003014 -0.048994 -3.11 -0.003027 -0.049094 -3.1 -0.003040 -0.049194 -3.09 -0.003053 -0.049295 -3.08 -0.003066 -0.049396 -3.07 -0.003079 -0.049498 -3.06 -0.003092 -0.049600 -3.05 -0.003105 -0.049702 -3.04 -0.003118 -0.049805 -3.03 -0.003132 -0.049908 -3.02 -0.003145 -0.050012 -3.01 -0.003159 -0.050116 -3 -0.003172 -0.050221 -2.99 -0.003186 -0.050326 -2.98 -0.003200 -0.050431 -2.97 -0.003214 -0.050537 -2.96 -0.003228 -0.050644 -2.95 -0.003242 -0.050751 -2.94 -0.003256 -0.050858 -2.93 -0.003270 -0.050966 -2.92 -0.003284 -0.051074 -2.91 -0.003299 -0.051183 -2.9 -0.003313 -0.051292 -2.89 -0.003328 -0.051402 -2.88 -0.003343 -0.051512 -2.87 -0.003358 -0.051623 -2.86 -0.003373 -0.051734 -2.85 -0.003388 -0.051845 -2.84 -0.003403 -0.051958 -2.83 -0.003418 -0.052070 -2.82 -0.003434 -0.052183 -2.81 -0.003449 -0.052297 -2.8 -0.003465 -0.052411 -2.79 -0.003480 -0.052526 -2.78 -0.003496 -0.052641 -2.77 -0.003512 -0.052757 -2.76 -0.003528 -0.052873 -2.75 -0.003544 -0.052990 -2.74 -0.003561 -0.053107 -2.73 -0.003577 -0.053225 -2.72 -0.003594 -0.053343 -2.71 -0.003610 -0.053462 -2.7 -0.003627 -0.053581 -2.69 -0.003644 -0.053701 -2.68 -0.003661 -0.053822 -2.67 -0.003678 -0.053943 -2.66 -0.003695 -0.054065 -2.65 -0.003712 -0.054187 -2.64 -0.003730 -0.054310 -2.63 -0.003747 -0.054433 -2.62 -0.003765 -0.054557 -2.61 -0.003783 -0.054681 -2.6 -0.003801 -0.054806 -2.59 -0.003819 -0.054932 -2.58 -0.003837 -0.055058 -2.57 -0.003856 -0.055185 -2.56 -0.003874 -0.055313 -2.55 -0.003893 -0.055441 -2.54 -0.003912 -0.055569 -2.53 -0.003931 -0.055699 -2.52 -0.003950 -0.055829 -2.51 -0.003969 -0.055959 -2.5 -0.003988 -0.056090 -2.49 -0.004008 -0.056222 -2.48 -0.004028 -0.056355 -2.47 -0.004047 -0.056488 -2.46 -0.004067 -0.056621 -2.45 -0.004087 -0.056756 -2.44 -0.004108 -0.056891 -2.43 -0.004128 -0.057027 -2.42 -0.004149 -0.057163 -2.41 -0.004170 -0.057300 -2.4 -0.004190 -0.057438 -2.39 -0.004212 -0.057576 -2.38 -0.004233 -0.057715 -2.37 -0.004254 -0.057855 -2.36 -0.004276 -0.057995 -2.35 -0.004297 -0.058137 -2.34 -0.004319 -0.058278 -2.33 -0.004341 -0.058421 -2.32 -0.004364 -0.058564 -2.31 -0.004386 -0.058708 -2.3 -0.004409 -0.058853 -2.29 -0.004432 -0.058999 -2.28 -0.004455 -0.059145 -2.27 -0.004478 -0.059292 -2.26 -0.004501 -0.059440 -2.25 -0.004525 -0.059588 -2.24 -0.004548 -0.059738 -2.23 -0.004572 -0.059888 -2.22 -0.004597 -0.060038 -2.21 -0.004621 -0.060190 -2.2 -0.004645 -0.060343 -2.19 -0.004670 -0.060496 -2.18 -0.004695 -0.060650 -2.17 -0.004720 -0.060805 -2.16 -0.004746 -0.060960 -2.15 -0.004771 -0.061117 -2.14 -0.004797 -0.061274 -2.13 -0.004823 -0.061432 -2.12 -0.004849 -0.061591 -2.11 -0.004876 -0.061751 -2.1 -0.004902 -0.061912 -2.09 -0.004929 -0.062073 -2.08 -0.004956 -0.062236 -2.07 -0.004984 -0.062399 -2.06 -0.005011 -0.062563 -2.05 -0.005039 -0.062728 -2.04 -0.005067 -0.062894 -2.03 -0.005095 -0.063061 -2.02 -0.005124 -0.063229 -2.01 -0.005153 -0.063398 -2 -0.005182 -0.063567 -1.99 -0.005211 -0.063738 -1.98 -0.005241 -0.063910 -1.97 -0.005271 -0.064082 -1.96 -0.005301 -0.064256 -1.95 -0.005331 -0.064430 -1.94 -0.005362 -0.064606 -1.93 -0.005393 -0.064782 -1.92 -0.005424 -0.064959 -1.91 -0.005455 -0.065138 -1.9 -0.005487 -0.065317 -1.89 -0.005519 -0.065498 -1.88 -0.005552 -0.065679 -1.87 -0.005584 -0.065862 -1.86 -0.005617 -0.066046 -1.85 -0.005651 -0.066230 -1.84 -0.005684 -0.066416 -1.83 -0.005718 -0.066603 -1.82 -0.005752 -0.066791 -1.81 -0.005787 -0.066980 -1.8 -0.005822 -0.067170 -1.79 -0.005857 -0.067361 -1.78 -0.005892 -0.067554 -1.77 -0.005928 -0.067747 -1.76 -0.005964 -0.067942 -1.75 -0.006001 -0.068138 -1.74 -0.006038 -0.068335 -1.73 -0.006075 -0.068533 -1.72 -0.006113 -0.068733 -1.71 -0.006151 -0.068933 -1.7 -0.006189 -0.069135 -1.69 -0.006228 -0.069338 -1.68 -0.006267 -0.069543 -1.67 -0.006307 -0.069748 -1.66 -0.006347 -0.069955 -1.65 -0.006387 -0.070163 -1.64 -0.006428 -0.070373 -1.63 -0.006469 -0.070584 -1.62 -0.006510 -0.070796 -1.61 -0.006552 -0.071009 -1.6 -0.006595 -0.071224 -1.59 -0.006637 -0.071440 -1.58 -0.006681 -0.071657 -1.57 -0.006724 -0.071876 -1.56 -0.006768 -0.072097 -1.55 -0.006813 -0.072318 -1.54 -0.006858 -0.072541 -1.53 -0.006904 -0.072766 -1.52 -0.006950 -0.072992 -1.51 -0.006996 -0.073219 -1.5 -0.007043 -0.073448 -1.49 -0.007091 -0.073679 -1.48 -0.007139 -0.073911 -1.47 -0.007187 -0.074144 -1.46 -0.007236 -0.074379 -1.45 -0.007286 -0.074616 -1.44 -0.007336 -0.074854 -1.43 -0.007387 -0.075094 -1.42 -0.007438 -0.075335 -1.41 -0.007490 -0.075578 -1.4 -0.007542 -0.075823 -1.39 -0.007595 -0.076069 -1.38 -0.007649 -0.076317 -1.37 -0.007703 -0.076567 -1.36 -0.007758 -0.076818 -1.35 -0.007813 -0.077071 -1.34 -0.007869 -0.077326 -1.33 -0.007926 -0.077583 -1.32 -0.007983 -0.077841 -1.31 -0.008041 -0.078102 -1.3 -0.008100 -0.078364 -1.29 -0.008159 -0.078628 -1.28 -0.008219 -0.078893 -1.27 -0.008280 -0.079161 -1.26 -0.008341 -0.079431 -1.25 -0.008403 -0.079702 -1.24 -0.008466 -0.079976 -1.23 -0.008530 -0.080251 -1.22 -0.008594 -0.080529 -1.21 -0.008659 -0.080808 -1.2 -0.008725 -0.081090 -1.19 -0.008792 -0.081374 -1.18 -0.008860 -0.081659 -1.17 -0.008928 -0.081947 -1.16 -0.008998 -0.082237 -1.15 -0.009068 -0.082529 -1.14 -0.009139 -0.082824 -1.13 -0.009211 -0.083120 -1.12 -0.009284 -0.083419 -1.11 -0.009357 -0.083720 -1.1 -0.009432 -0.084023 -1.09 -0.009508 -0.084329 -1.08 -0.009584 -0.084637 -1.07 -0.009662 -0.084948 -1.06 -0.009741 -0.085260 -1.05 -0.009821 -0.085576 -1.04 -0.009901 -0.085893 -1.03 -0.009983 -0.086214 -1.02 -0.010066 -0.086536 -1.01 -0.010150 -0.086862 -1 -0.010235 -0.087190 -0.99 -0.010322 -0.087520 -0.98 -0.010409 -0.087854 -0.97 -0.010498 -0.088189 -0.96 -0.010588 -0.088528 -0.95 -0.010679 -0.088869 -0.94 -0.010772 -0.089214 -0.93 -0.010865 -0.089561 -0.92 -0.010961 -0.089911 -0.91 -0.011057 -0.090263 -0.9 -0.011155 -0.090619 -0.89 -0.011254 -0.090978 -0.88 -0.011355 -0.091340 -0.87 -0.011457 -0.091704 -0.86 -0.011561 -0.092072 -0.85 -0.011666 -0.092443 -0.84 -0.011773 -0.092817 -0.83 -0.011881 -0.093195 -0.82 -0.011991 -0.093576 -0.81 -0.012103 -0.093960 -0.8 -0.012216 -0.094347 -0.79 -0.012331 -0.094738 -0.78 -0.012448 -0.095132 -0.77 -0.012567 -0.095530 -0.76 -0.012687 -0.095931 -0.75 -0.012810 -0.096336 -0.74 -0.012934 -0.096744 -0.73 -0.013061 -0.097156 -0.72 -0.013189 -0.097572 -0.71 -0.013319 -0.097992 -0.7 -0.013452 -0.098416 -0.69 -0.013587 -0.098843 -0.68 -0.013724 -0.099274 -0.67 -0.013863 -0.099710 -0.66 -0.014005 -0.100149 -0.65 -0.014149 -0.100593 -0.64 -0.014295 -0.101041 -0.63 -0.014444 -0.101493 -0.62 -0.014596 -0.101949 -0.61 -0.014750 -0.102410 -0.6 -0.014907 -0.102875 -0.59 -0.015067 -0.103345 -0.58 -0.015229 -0.103819 -0.57 -0.015395 -0.104298 -0.56 -0.015563 -0.104782 -0.55 -0.015735 -0.105270 -0.54 -0.015910 -0.105763 -0.53 -0.016088 -0.106261 -0.52 -0.016269 -0.106765 -0.51 -0.016453 -0.107273 -0.5 -0.016642 -0.107786 -0.49 -0.016833 -0.108305 -0.48 -0.017029 -0.108828 -0.47 -0.017228 -0.109358 -0.46 -0.017431 -0.109892 -0.45 -0.017638 -0.110432 -0.44 -0.017850 -0.110978 -0.43 -0.018065 -0.111530 -0.42 -0.018285 -0.112087 -0.41 -0.018510 -0.112650 -0.4 -0.018739 -0.113219 -0.39 -0.018973 -0.113794 -0.38 -0.019211 -0.114375 -0.37 -0.019455 -0.114963 -0.36 -0.019704 -0.115557 -0.35 -0.019959 -0.116157 -0.34 -0.020219 -0.116763 -0.33 -0.020485 -0.117377 -0.32 -0.020756 -0.117997 -0.31 -0.021034 -0.118623 -0.3 -0.021318 -0.119257 -0.29 -0.021609 -0.119897 -0.28 -0.021906 -0.120545 -0.27 -0.022210 -0.121199 -0.26 -0.022521 -0.121861 -0.25 -0.022840 -0.122530 -0.24 -0.023166 -0.123207 -0.23 -0.023501 -0.123891 -0.22 -0.023843 -0.124583 -0.21 -0.024194 -0.125282 -0.2 -0.024553 -0.125989 -0.19 -0.024922 -0.126704 -0.18 -0.025300 -0.127426 -0.17 -0.025688 -0.128157 -0.16 -0.026086 -0.128896 -0.15 -0.026494 -0.129642 -0.14 -0.026913 -0.130397 -0.13 -0.027343 -0.131160 -0.12 -0.027784 -0.131931 -0.11 -0.028238 -0.132710 -0.1 -0.028704 -0.133498 -0.090000 -0.029183 -0.134293 -0.080000 -0.029675 -0.135097 -0.070000 -0.030181 -0.135909 -0.060000 -0.030702 -0.136729 -0.050000 -0.031237 -0.137557 -0.040000 -0.031787 -0.138393 -0.030000 -0.032354 -0.139237 -0.020000 -0.032937 -0.140088 -0.010000 -0.033537 -0.140947 0 -0.034155 -0.141813 0.009999 -0.034791 -0.142687 0.019999 -0.035446 -0.143566 0.029999 -0.036121 -0.144453 0.039999 -0.036815 -0.145345 0.049999 -0.037531 -0.146243 0.059999 -0.038268 -0.147146 0.069999 -0.039027 -0.148054 0.079999 -0.039809 -0.148966 0.089999 -0.040614 -0.149882 0.099999 -0.041442 -0.150800 0.11 -0.042296 -0.151721 0.12 -0.043174 -0.152642 0.13 -0.044078 -0.153565 0.14 -0.045007 -0.154487 0.15 -0.045963 -0.155408 0.16 -0.046945 -0.156327 0.17 -0.047953 -0.157242 0.18 -0.048989 -0.158153 0.19 -0.050051 -0.159059 0.2 -0.051140 -0.159959 0.21 -0.052255 -0.160851 0.22 -0.053396 -0.161735 0.23 -0.054563 -0.162610 0.24 -0.055755 -0.163476 0.25 -0.056972 -0.164331 0.26 -0.058212 -0.165174 0.27 -0.059476 -0.166007 0.28 -0.060762 -0.166828 0.29 -0.062070 -0.167637 0.3 -0.063399 -0.168435 0.31 -0.064749 -0.169222 0.32 -0.066119 -0.169999 0.33 -0.067509 -0.170766 0.34 -0.068919 -0.171525 0.35 -0.070350 -0.172276 0.36 -0.071802 -0.173020 0.37 -0.073277 -0.173758 0.38 -0.074775 -0.174492 0.39 -0.076300 -0.175221 0.4 -0.077852 -0.175946 0.41 -0.079434 -0.176668 0.42 -0.081050 -0.177385 0.43 -0.082702 -0.178098 0.44 -0.084393 -0.178805 0.45 -0.086127 -0.179504 0.46 -0.087907 -0.180193 0.47 -0.089735 -0.180868 0.48 -0.091616 -0.181527 0.49 -0.093551 -0.182165 0.5 -0.095542 -0.182776 0.51 -0.097593 -0.183356 0.52 -0.099703 -0.183899 0.53 -0.101874 -0.184398 0.54 -0.104106 -0.184846 0.55 -0.106397 -0.185237 0.56 -0.108746 -0.185563 0.57 -0.111150 -0.185816 0.58 -0.113604 -0.185989 0.59 -0.116105 -0.186074 0.6 -0.118647 -0.186065 0.61 -0.121221 -0.185954 0.62 -0.123820 -0.185737 0.63 -0.126434 -0.185406 0.64 -0.129054 -0.184959 0.65 -0.131667 -0.184393 0.66 -0.134262 -0.183705 0.67 -0.136826 -0.182896 0.68 -0.139346 -0.181967 0.69 -0.141810 -0.180922 0.7 -0.144204 -0.179767 0.71 -0.146516 -0.178509 0.72 -0.148735 -0.177157 0.73 -0.150850 -0.175723 0.74 -0.152855 -0.174219 0.75 -0.154741 -0.172659 0.76 -0.156505 -0.171059 0.77 -0.158145 -0.169432 0.78 -0.159660 -0.167796 0.79 -0.161054 -0.166166 0.8 -0.162332 -0.164556 0.81 -0.163501 -0.162981 0.82 -0.164570 -0.161452 0.83 -0.165550 -0.159980 0.84 -0.166454 -0.158573 0.85 -0.167295 -0.157238 0.86 -0.168086 -0.155979 0.87 -0.168842 -0.154796 0.88 -0.169577 -0.153691 0.89 -0.170302 -0.152659 0.9 -0.171031 -0.151696 0.91 -0.171775 -0.150795 0.92 -0.172542 -0.149948 0.93 -0.173341 -0.149145 0.94 -0.174177 -0.148376 0.95 -0.175055 -0.147630 0.96 -0.175974 -0.146896 0.97 -0.176937 -0.146161 0.98 -0.177939 -0.145415 0.99 -0.178977 -0.144647 1 -0.180045 -0.143848 1.01 -0.181133 -0.143010 1.02 -0.182234 -0.142125 1.03 -0.183336 -0.141190 1.04 -0.184428 -0.140200 1.05 -0.185497 -0.139156 1.06 -0.186532 -0.138058 1.07 -0.187519 -0.136912 1.08 -0.188447 -0.135723 1.09 -0.189306 -0.134500 1.1 -0.190087 -0.133252 1.11 -0.190781 -0.131993 1.12 -0.191384 -0.130736 1.13 -0.191893 -0.129495 1.14 -0.192307 -0.128287 1.15 -0.192627 -0.127125 1.16 -0.192860 -0.126027 1.17 -0.193010 -0.125005 1.18 -0.193088 -0.124074 1.19 -0.193105 -0.123246 1.2 -0.193073 -0.122531 1.21 -0.193007 -0.121937 1.22 -0.192922 -0.121471 1.23 -0.192834 -0.121136 1.24 -0.192759 -0.120935 1.25 -0.192713 -0.120869 1.26 -0.192713 -0.120934 1.27 -0.192774 -0.121126 1.28 -0.192911 -0.121442 1.29 -0.193136 -0.121872 1.3 -0.193464 -0.122409 1.31 -0.193906 -0.123044 1.32 -0.194473 -0.123765 1.33 -0.195173 -0.124561 1.34 -0.196014 -0.125421 1.35 -0.197004 -0.126332 1.36 -0.198148 -0.127281 1.37 -0.199450 -0.128256 1.38 -0.200914 -0.129243 1.39 -0.202541 -0.130229 1.4 -0.204334 -0.131202 1.41 -0.206292 -0.132148 1.42 -0.208415 -0.133056 1.43 -0.210701 -0.133912 1.44 -0.213149 -0.134706 1.45 -0.215756 -0.135425 1.46 -0.218518 -0.136057 1.47 -0.221432 -0.136592 1.48 -0.224494 -0.137019 1.49 -0.227699 -0.137326 1.5 -0.231043 -0.137504 1.51 -0.234520 -0.137541 1.52 -0.238124 -0.137427 1.53 -0.241848 -0.137150 1.54 -0.245687 -0.136700 1.55 -0.249632 -0.136065 1.56 -0.253674 -0.135234 1.57 -0.257803 -0.134196 1.58 -0.262009 -0.132938 1.59 -0.266279 -0.131449 1.6 -0.270598 -0.129718 1.61 -0.274951 -0.127734 1.62 -0.279319 -0.125488 1.63 -0.283684 -0.122972 1.64 -0.288024 -0.120178 1.65 -0.292317 -0.117102 1.66 -0.296537 -0.113742 1.67 -0.300660 -0.110096 1.68 -0.304659 -0.106169 1.69 -0.308509 -0.101966 1.7 -0.312183 -0.097497 1.71 -0.315656 -0.092773 1.72 -0.318904 -0.087811 1.73 -0.321903 -0.082628 1.74 -0.324633 -0.077246 1.75 -0.327076 -0.071688 1.76 -0.329216 -0.065981 1.77 -0.331042 -0.060150 1.78 -0.332544 -0.054226 1.79 -0.333716 -0.048236 1.8 -0.334555 -0.042210 1.81 -0.335063 -0.036178 1.82 -0.335244 -0.030167 1.83 -0.335104 -0.024206 1.84 -0.334654 -0.018319 1.85 -0.333905 -0.012532 1.86 -0.332872 -0.006866 1.87 -0.331571 -0.001342 1.88 -0.330020 0.004021 1.89 -0.328237 0.009210 1.9 -0.326243 0.014210 1.91 -0.324058 0.019012 1.92 -0.321702 0.023605 1.93 -0.319195 0.027985 1.94 -0.316558 0.032145 1.95 -0.313811 0.036085 1.96 -0.310973 0.039804 1.97 -0.308062 0.043301 1.98 -0.305096 0.046581 1.99 -0.302093 0.049647 2 -0.299068 0.052503 2.01 -0.296036 0.055157 2.02 -0.293011 0.057616 2.03 -0.290005 0.059888 2.04 -0.287031 0.061981 2.05 -0.284096 0.063906 2.06 -0.281211 0.065673 2.07 -0.278383 0.067291 2.08 -0.275617 0.068771 2.09 -0.272919 0.070122 2.1 -0.270291 0.071355 2.11 -0.267737 0.072478 2.12 -0.265258 0.073500 2.13 -0.262856 0.074429 2.14 -0.260530 0.075272 2.15 -0.258282 0.076035 2.16 -0.256111 0.076724 2.17 -0.254019 0.077345 2.18 -0.252004 0.077903 2.19 -0.250069 0.078401 2.2 -0.248214 0.078846 2.21 -0.246440 0.079240 2.22 -0.244748 0.079590 2.23 -0.243140 0.079901 2.24 -0.241618 0.080177 2.25 -0.240182 0.080425 2.26 -0.238833 0.080652 2.27 -0.237571 0.080864 2.28 -0.236396 0.081069 2.29 -0.235307 0.081273 2.3 -0.234301 0.081485 2.31 -0.233375 0.081710 2.32 -0.232526 0.081957 2.33 -0.231750 0.082231 2.34 -0.231040 0.082537 2.35 -0.230390 0.082881 2.36 -0.229796 0.083267 2.37 -0.229249 0.083696 2.38 -0.228744 0.084172 2.39 -0.228274 0.084694 2.4 -0.227834 0.085264 2.41 -0.227417 0.085881 2.42 -0.227020 0.086543 2.43 -0.226637 0.087249 2.44 -0.226265 0.087998 2.45 -0.225902 0.088787 2.46 -0.225545 0.089615 2.47 -0.225192 0.090482 2.48 -0.224841 0.091384 2.49 -0.224492 0.092323 2.5 -0.224143 0.093297 2.51 -0.223792 0.094307 2.52 -0.223439 0.095352 2.53 -0.223081 0.096434 2.54 -0.222715 0.097551 2.55 -0.222341 0.098706 2.56 -0.221955 0.099897 2.57 -0.221555 0.101124 2.58 -0.221137 0.102387 2.59 -0.220700 0.103684 2.6 -0.220241 0.105016 2.61 -0.219756 0.106380 2.62 -0.219246 0.107776 2.63 -0.218707 0.109201 2.64 -0.218138 0.110654 2.65 -0.217537 0.112135 2.66 -0.216904 0.113642 2.67 -0.216237 0.115175 2.68 -0.215535 0.116734 2.69 -0.214795 0.118319 2.7 -0.214015 0.119930 2.71 -0.213192 0.121567 2.72 -0.212323 0.123230 2.73 -0.211402 0.124918 2.74 -0.210425 0.126632 2.75 -0.209387 0.128367 2.76 -0.208280 0.130122 2.77 -0.207101 0.131893 2.78 -0.205841 0.133673 2.79 -0.204497 0.135455 2.8 -0.203062 0.137232 2.81 -0.201535 0.138994 2.82 -0.199912 0.140731 2.83 -0.198192 0.142431 2.84 -0.196378 0.144083 2.85 -0.194471 0.145675 2.86 -0.192476 0.147195 2.87 -0.190400 0.148633 2.88 -0.188252 0.149979 2.89 -0.186042 0.151224 2.9 -0.183779 0.152360 2.91 -0.181477 0.153384 2.92 -0.179149 0.154290 2.93 -0.176806 0.155077 2.94 -0.174463 0.155745 2.95 -0.172133 0.156296 2.96 -0.169826 0.156734 2.97 -0.167556 0.157064 2.98 -0.165333 0.157292 2.99 -0.163166 0.157425 3 -0.161062 0.157474 3.01 -0.159031 0.157447 3.02 -0.157075 0.157355 3.03 -0.155200 0.157208 3.04 -0.153409 0.157016 3.05 -0.151701 0.156791 3.06 -0.150078 0.156544 3.07 -0.148537 0.156283 3.08 -0.147076 0.156020 3.09 -0.145691 0.155763 3.1 -0.144377 0.155521 3.11 -0.143129 0.155300 3.12 -0.141939 0.155109 3.13 -0.140801 0.154951 3.14 -0.139707 0.154832 3.15 -0.138649 0.154755 3.16 -0.137618 0.154722 3.17 -0.136607 0.154733 3.18 -0.135607 0.154789 3.19 -0.134612 0.154889 3.2 -0.133612 0.155030 3.21 -0.132603 0.155210 3.22 -0.131577 0.155424 3.23 -0.130530 0.155668 3.24 -0.129456 0.155937 3.25 -0.128352 0.156226 3.26 -0.127215 0.156530 3.27 -0.126043 0.156841 3.28 -0.124834 0.157154 3.29 -0.123588 0.157463 3.3 -0.122304 0.157763 3.31 -0.120984 0.158046 3.32 -0.119629 0.158309 3.33 -0.118242 0.158544 3.34 -0.116826 0.158748 3.35 -0.115383 0.158916 3.36 -0.113919 0.159043 3.37 -0.112437 0.159127 3.38 -0.110944 0.159165 3.39 -0.109443 0.159154 3.4 -0.107941 0.159093 3.41 -0.106442 0.158982 3.42 -0.104954 0.158820 3.43 -0.103482 0.158609 3.44 -0.102030 0.158351 3.45 -0.100604 0.158046 3.46 -0.099209 0.157699 3.47 -0.097849 0.157313 3.48 -0.096527 0.156893 3.49 -0.095248 0.156441 3.5 -0.094013 0.155964 3.51 -0.092826 0.155465 3.52 -0.091685 0.154952 3.53 -0.090594 0.154428 3.54 -0.089551 0.153899 3.55 -0.088557 0.153370 3.56 -0.087609 0.152846 3.57 -0.086706 0.152333 3.58 -0.085845 0.151834 3.59 -0.085024 0.151354 3.6 -0.084239 0.150897 3.61 -0.083487 0.150466 3.62 -0.082762 0.150063 3.63 -0.082062 0.149692 3.64 -0.081380 0.149353 3.65 -0.080713 0.149047 3.66 -0.080055 0.148776 3.67 -0.079402 0.148538 3.68 -0.078749 0.148333 3.69 -0.078093 0.148160 3.7 -0.077428 0.148017 3.71 -0.076752 0.147901 3.72 -0.076060 0.147810 3.73 -0.075350 0.147742 3.74 -0.074620 0.147692 3.75 -0.073868 0.147659 3.76 -0.073091 0.147638 3.77 -0.072288 0.147625 3.78 -0.071459 0.147618 3.79 -0.070603 0.147613 3.8 -0.069720 0.147607 3.81 -0.068811 0.147596 3.82 -0.067874 0.147576 3.83 -0.066913 0.147546 3.84 -0.065927 0.147501 3.85 -0.064918 0.147439 3.86 -0.063887 0.147357 3.87 -0.062838 0.147252 3.88 -0.061771 0.147123 3.89 -0.060689 0.146968 3.9 -0.059595 0.146783 3.91 -0.058492 0.146570 3.92 -0.057382 0.146325 3.93 -0.056268 0.146049 3.94 -0.055154 0.145741 3.95 -0.054041 0.145402 3.96 -0.052934 0.145031 3.97 -0.051834 0.144629 3.98 -0.050743 0.144197 3.99 -0.049666 0.143736 4 -0.048602 0.143247 4.01 -0.047555 0.142732 4.02 -0.046526 0.142193 4.03 -0.045516 0.141630 4.04 -0.044527 0.141046 4.05 -0.043559 0.140443 4.06 -0.042614 0.139823 4.07 -0.041692 0.139186 4.08 -0.040793 0.138535 4.09 -0.039918 0.137872 4.1 -0.039067 0.137198 4.11 -0.038239 0.136515 4.12 -0.037435 0.135824 4.13 -0.036654 0.135126 4.14 -0.035896 0.134424 4.15 -0.035161 0.133717 4.16 -0.034448 0.133007 4.17 -0.033756 0.132296 4.18 -0.033086 0.131584 4.19 -0.032436 0.130871 4.2 -0.031806 0.130159 4.21 -0.031195 0.129449 4.22 -0.030603 0.128741 4.23 -0.030029 0.128035 4.24 -0.029472 0.127333 4.25 -0.028932 0.126634 4.26 -0.028408 0.125939 4.27 -0.027900 0.125249 4.28 -0.027407 0.124563 4.29 -0.026928 0.123881 4.3 -0.026463 0.123205 4.31 -0.026011 0.122534 4.32 -0.025572 0.121869 4.33 -0.025145 0.121209 4.34 -0.024731 0.120554 4.35 -0.024327 0.119905 4.36 -0.023935 0.119262 4.37 -0.023553 0.118625 4.38 -0.023182 0.117993 4.39 -0.022820 0.117367 4.4 -0.022468 0.116747 4.41 -0.022125 0.116133 4.42 -0.021791 0.115525 4.43 -0.021466 0.114922 4.44 -0.021149 0.114325 4.45 -0.020840 0.113734 4.46 -0.020539 0.113148 4.47 -0.020245 0.112569 4.48 -0.019959 0.111995 4.49 -0.019680 0.111426 4.5 -0.019407 0.110864 4.51 -0.019142 0.110307 4.52 -0.018882 0.109755 4.53 -0.018629 0.109209 4.54 -0.018382 0.108669 4.55 -0.018140 0.108134 4.56 -0.017904 0.107604 4.57 -0.017674 0.107080 4.58 -0.017449 0.106561 4.59 -0.017229 0.106048 4.6 -0.017014 0.105540 4.61 -0.016803 0.105036 4.62 -0.016597 0.104538 4.63 -0.016396 0.104046 4.64 -0.016198 0.103558 4.65 -0.016005 0.103075 4.66 -0.015816 0.102597 4.67 -0.015631 0.102123 4.68 -0.015449 0.101655 4.69 -0.015271 0.101191 4.7 -0.015096 0.100731 4.71 -0.014925 0.100277 4.72 -0.014757 0.099826 4.73 -0.014592 0.099380 4.74 -0.014430 0.098938 4.75 -0.014271 0.098501 4.76 -0.014115 0.098067 4.77 -0.013962 0.097638 4.78 -0.013812 0.097213 4.79 -0.013664 0.096791 4.8 -0.013519 0.096374 4.81 -0.013376 0.095960 4.82 -0.013236 0.095550 4.83 -0.013099 0.095143 4.84 -0.012964 0.094741 4.85 -0.012831 0.094341 4.86 -0.012700 0.093946 4.87 -0.012572 0.093554 4.88 -0.012446 0.093165 4.89 -0.012322 0.092780 4.9 -0.012200 0.092398 4.91 -0.012081 0.092020 4.92 -0.011963 0.091644 4.93 -0.011847 0.091272 4.94 -0.011734 0.090904 4.95 -0.011622 0.090538 4.96 -0.011512 0.090176 4.97 -0.011403 0.089817 4.98 -0.011297 0.089461 4.99 -0.011192 0.089108 5 -0.011089 0.088758 5.01 -0.010988 0.088411 5.02 -0.010888 0.088067 5.03 -0.010789 0.087726 5.04 -0.010692 0.087387 5.05 -0.010597 0.087052 5.06 -0.010503 0.086720 5.07 -0.010410 0.086390 5.08 -0.010319 0.086063 5.09 -0.010229 0.085738 5.1 -0.010140 0.085417 5.11 -0.010052 0.085098 5.12 -0.009966 0.084781 5.13 -0.009881 0.084467 5.14 -0.009797 0.084156 5.15 -0.009714 0.083847 5.16 -0.009632 0.083540 5.17 -0.009551 0.083236 5.18 -0.009472 0.082934 5.19 -0.009393 0.082634 5.2 -0.009316 0.082337 5.21 -0.009239 0.082042 5.22 -0.009164 0.081749 5.23 -0.009089 0.081458 5.24 -0.009016 0.081170 5.25 -0.008943 0.080883 5.26 -0.008872 0.080599 5.27 -0.008801 0.080317 5.28 -0.008731 0.080037 5.29 -0.008663 0.079759 5.3 -0.008595 0.079483 5.31 -0.008528 0.079209 5.32 -0.008462 0.078937 5.33 -0.008397 0.078667 5.34 -0.008332 0.078399 5.35 -0.008269 0.078132 5.36 -0.008206 0.077868 5.37 -0.008144 0.077606 5.38 -0.008083 0.077346 5.39 -0.008023 0.077087 5.4 -0.007963 0.076830 5.41 -0.007904 0.076575 5.42 -0.007846 0.076322 5.43 -0.007789 0.076071 5.44 -0.007732 0.075822 5.45 -0.007676 0.075574 5.46 -0.007620 0.075328 5.47 -0.007566 0.075084 5.48 -0.007511 0.074841 5.49 -0.007458 0.074601 5.5 -0.007405 0.074361 5.51 -0.007353 0.074124 5.52 -0.007301 0.073888 5.53 -0.007249 0.073653 5.54 -0.007199 0.073421 5.55 -0.007149 0.073189 5.56 -0.007099 0.072960 5.57 -0.007050 0.072731 5.58 -0.007001 0.072505 5.59 -0.006953 0.072279 5.6 -0.006906 0.072055 5.61 -0.006859 0.071833 5.62 -0.006812 0.071612 5.63 -0.006766 0.071393 5.64 -0.006721 0.071174 5.65 -0.006676 0.070958 5.66 -0.006631 0.070742 5.67 -0.006587 0.070528 5.68 -0.006544 0.070315 5.69 -0.006501 0.070104 5.7 -0.006458 0.069894 5.71 -0.006416 0.069685 5.72 -0.006374 0.069478 5.73 -0.006333 0.069271 5.74 -0.006292 0.069067 5.75 -0.006252 0.068863 5.76 -0.006212 0.068661 5.77 -0.006173 0.068459 5.78 -0.006134 0.068260 5.79 -0.006095 0.068061 5.8 -0.006057 0.067863 5.81 -0.006019 0.067667 5.82 -0.005982 0.067472 5.83 -0.005945 0.067278 5.84 -0.005908 0.067086 5.85 -0.005872 0.066894 5.86 -0.005836 0.066704 5.87 -0.005800 0.066515 5.88 -0.005765 0.066327 5.89 -0.005730 0.066140 5.9 -0.005696 0.065954 5.91 -0.005661 0.065770 5.92 -0.005628 0.065586 5.93 -0.005594 0.065404 5.94 -0.005561 0.065223 5.95 -0.005528 0.065042 5.96 -0.005495 0.064863 5.97 -0.005463 0.064685 5.98 -0.005431 0.064508 5.99 -0.005399 0.064332 6 -0.005367 0.064156 6.01 -0.005336 0.063982 6.02 -0.005305 0.063809 6.03 -0.005274 0.063637 6.04 -0.005244 0.063466 6.05 -0.005214 0.063295 6.06 -0.005184 0.063126 6.07 -0.005154 0.062957 6.08 -0.005125 0.062790 6.09 -0.005096 0.062623 6.1 -0.005067 0.062458 6.11 -0.005038 0.062293 6.12 -0.005010 0.062129 6.13 -0.004982 0.061966 6.14 -0.004954 0.061804 6.15 -0.004926 0.061643 6.16 -0.004899 0.061482 6.17 -0.004872 0.061323 6.18 -0.004845 0.061164 6.19 -0.004819 0.061006 6.2 -0.004792 0.060850 6.21 -0.004766 0.060693 6.22 -0.004740 0.060538 6.23 -0.004715 0.060384 6.24 -0.004689 0.060230 6.25 -0.004664 0.060078 6.26 -0.004639 0.059926 6.27 -0.004614 0.059774 6.28 -0.004590 0.059624 6.29 -0.004565 0.059475 6.3 -0.004541 0.059326 6.31 -0.004517 0.059178 6.32 -0.004493 0.059031 6.33 -0.004469 0.058884 6.34 -0.004446 0.058739 6.35 -0.004423 0.058594 6.36 -0.004400 0.058449 6.37 -0.004377 0.058306 6.38 -0.004354 0.058163 6.39 -0.004331 0.058021 6.4 -0.004309 0.057880 6.41 -0.004287 0.057739 6.42 -0.004265 0.057599 6.43 -0.004243 0.057460 6.44 -0.004221 0.057322 6.45 -0.004200 0.057184 6.46 -0.004178 0.057047 6.47 -0.004157 0.056910 6.48 -0.004136 0.056774 6.49 -0.004115 0.056639 6.5 -0.004094 0.056504 6.51 -0.004074 0.056371 6.52 -0.004053 0.056237 6.53 -0.004033 0.056105 6.54 -0.004013 0.055973 6.55 -0.003993 0.055841 6.56 -0.003974 0.055711 6.57 -0.003954 0.055581 6.58 -0.003935 0.055451 6.59 -0.003916 0.055323 6.6 -0.003896 0.055194 6.61 -0.003878 0.055067 6.62 -0.003859 0.054940 6.63 -0.003840 0.054813 6.64 -0.003822 0.054688 6.65 -0.003803 0.054563 6.66 -0.003785 0.054438 6.67 -0.003767 0.054314 6.68 -0.003749 0.054191 6.69 -0.003731 0.054068 6.7 -0.003714 0.053946 6.71 -0.003696 0.053824 6.72 -0.003679 0.053703 6.73 -0.003661 0.053583 6.74 -0.003644 0.053463 6.75 -0.003627 0.053343 6.76 -0.003610 0.053225 6.77 -0.003593 0.053106 6.78 -0.003577 0.052989 6.79 -0.003560 0.052871 6.8 -0.003544 0.052755 6.81 -0.003527 0.052639 6.82 -0.003511 0.052523 6.83 -0.003495 0.052408 6.84 -0.003479 0.052293 6.85 -0.003463 0.052179 6.86 -0.003447 0.052066 6.87 -0.003431 0.051953 6.88 -0.003416 0.051840 6.89 -0.003400 0.051728 6.9 -0.003385 0.051617 6.91 -0.003370 0.051505 6.92 -0.003354 0.051395 6.93 -0.003339 0.051285 6.94 -0.003324 0.051175 6.95 -0.003310 0.051066 6.96 -0.003295 0.050957 6.97 -0.003280 0.050849 6.98 -0.003266 0.050741 6.99 -0.003251 0.050634 7 -0.003237 0.050527 7.01 -0.003223 0.050421 7.02 -0.003209 0.050315 7.03 -0.003194 0.050210 7.04 -0.003181 0.050105 7.05 -0.003167 0.050000 7.06 -0.003153 0.049896 7.07 -0.003139 0.049792 7.08 -0.003126 0.049689 7.09 -0.003112 0.049587 7.1 -0.003099 0.049484 7.11 -0.003086 0.049382 7.12 -0.003072 0.049281 7.13 -0.003059 0.049180 7.14 -0.003046 0.049079 7.15 -0.003033 0.048979 7.16 -0.003020 0.048879 7.17 -0.003007 0.048780 7.18 -0.002995 0.048681 7.19 -0.002982 0.048583 7.2 -0.002969 0.048485 7.21 -0.002957 0.048387 7.22 -0.002945 0.048290 7.23 -0.002932 0.048193 7.24 -0.002920 0.048096 7.25 -0.002908 0.048000 7.26 -0.002896 0.047904 7.27 -0.002884 0.047809 7.28 -0.002872 0.047714 7.29 -0.002860 0.047619 7.3 -0.002848 0.047525 7.31 -0.002836 0.047431 7.32 -0.002825 0.047338 7.33 -0.002813 0.047245 7.34 -0.002802 0.047152 7.35 -0.002790 0.047060 7.36 -0.002779 0.046968 7.37 -0.002768 0.046876 7.38 -0.002757 0.046785 7.39 -0.002745 0.046694 7.4 -0.002734 0.046604 7.41 -0.002723 0.046514 7.42 -0.002712 0.046424 7.43 -0.002702 0.046334 7.44 -0.002691 0.046245 7.45 -0.002680 0.046157 7.46 -0.002670 0.046068 7.47 -0.002659 0.045980 7.48 -0.002648 0.045892 7.49 -0.002638 0.045805 7.5 -0.002628 0.045718 7.51 -0.002617 0.045631 7.52 -0.002607 0.045545 7.53 -0.002597 0.045459 7.54 -0.002587 0.045373 7.55 -0.002577 0.045288 7.56 -0.002567 0.045203 7.57 -0.002557 0.045118 7.58 -0.002547 0.045034 7.59 -0.002537 0.044950 7.6 -0.002527 0.044866 7.61 -0.002517 0.044783 7.62 -0.002508 0.044700 7.63 -0.002498 0.044617 7.64 -0.002489 0.044535 7.65 -0.002479 0.044452 7.66 -0.002470 0.044371 7.67 -0.002460 0.044289 7.68 -0.002451 0.044208 7.69 -0.002442 0.044127 7.7 -0.002432 0.044046 7.71 -0.002423 0.043966 7.72 -0.002414 0.043886 7.73 -0.002405 0.043806 7.74 -0.002396 0.043727 7.75 -0.002387 0.043647 7.76 -0.002378 0.043569 7.77 -0.002369 0.043490 7.78 -0.002361 0.043412 7.79 -0.002352 0.043334 7.8 -0.002343 0.043256 7.81 -0.002335 0.043179 7.82 -0.002326 0.043101 7.83 -0.002317 0.043025 7.84 -0.002309 0.042948 7.85 -0.002300 0.042872 7.86 -0.002292 0.042796 7.87 -0.002284 0.042720 7.88 -0.002275 0.042644 7.89 -0.002267 0.042569 7.9 -0.002259 0.042494 7.91 -0.002251 0.042420 7.92 -0.002243 0.042345 7.93 -0.002235 0.042271 7.94 -0.002227 0.042197 7.95 -0.002219 0.042124 7.96 -0.002211 0.042050 7.97 -0.002203 0.041977 7.98 -0.002195 0.041904 7.99 -0.002187 0.041832 8 -0.002179 0.041759 8.01 -0.002172 0.041687 8.02 -0.002164 0.041616 8.03 -0.002156 0.041544 8.04 -0.002149 0.041473 8.05 -0.002141 0.041402 8.06 -0.002134 0.041331 8.07 -0.002126 0.041260 8.08 -0.002119 0.041190 8.09 -0.002111 0.041120 8.1 -0.002104 0.041050 8.11 -0.002097 0.040980 8.12 -0.002089 0.040911 8.13 -0.002082 0.040842 8.14 -0.002075 0.040773 8.15 -0.002068 0.040704 8.16 -0.002060 0.040636 8.17 -0.002053 0.040568 8.18 -0.002046 0.040500 8.19 -0.002039 0.040432 8.2 -0.002032 0.040365 8.21 -0.002025 0.040297 8.22 -0.002018 0.040230 8.23 -0.002012 0.040164 8.24 -0.002005 0.040097 8.25 -0.001998 0.040031 8.26 -0.001991 0.039965 8.27 -0.001985 0.039899 8.28 -0.001978 0.039833 8.29 -0.001971 0.039767 8.3 -0.001965 0.039702 8.31 -0.001958 0.039637 8.32 -0.001951 0.039572 8.33 -0.001945 0.039508 8.34 -0.001938 0.039443 8.35 -0.001932 0.039379 8.36 -0.001926 0.039315 8.37 -0.001919 0.039252 8.38 -0.001913 0.039188 8.39 -0.001906 0.039125 8.4 -0.001900 0.039062 8.41 -0.001894 0.038999 8.42 -0.001888 0.038936 8.43 -0.001881 0.038873 8.44 -0.001875 0.038811 8.45 -0.001869 0.038749 8.46 -0.001863 0.038687 8.47 -0.001857 0.038625 8.48 -0.001851 0.038564 8.49 -0.001845 0.038503 8.5 -0.001839 0.038442 8.51 -0.001833 0.038381 8.52 -0.001827 0.038320 8.53 -0.001821 0.038259 8.54 -0.001815 0.038199 8.55 -0.001809 0.038139 8.56 -0.001804 0.038079 8.57 -0.001798 0.038019 8.58 -0.001792 0.037960 8.59 -0.001786 0.037900 8.6 -0.001781 0.037841 8.61 -0.001775 0.037782 8.62 -0.001769 0.037723 8.63 -0.001764 0.037665 8.64 -0.001758 0.037606 8.65 -0.001753 0.037548 8.66 -0.001747 0.037490 8.67 -0.001742 0.037432 8.68 -0.001736 0.037375 8.69 -0.001731 0.037317 8.7 -0.001725 0.037260 8.71 -0.001720 0.037203 8.72 -0.001714 0.037146 8.73 -0.001709 0.037089 8.74 -0.001704 0.037032 8.75 -0.001698 0.036976 8.76 -0.001693 0.036919 8.77 -0.001688 0.036863 8.78 -0.001683 0.036807 8.79 -0.001678 0.036752 8.8 -0.001672 0.036696 8.81 -0.001667 0.036641 8.82 -0.001662 0.036585 8.83 -0.001657 0.036530 8.84 -0.001652 0.036475 8.85 -0.001647 0.036421 8.86 -0.001642 0.036366 8.87 -0.001637 0.036312 8.88 -0.001632 0.036257 8.89 -0.001627 0.036203 8.9 -0.001622 0.036149 8.91 -0.001617 0.036096 8.92 -0.001612 0.036042 8.93 -0.001607 0.035989 8.94 -0.001602 0.035935 8.95 -0.001598 0.035882 8.96 -0.001593 0.035829 8.97 -0.001588 0.035776 8.98 -0.001583 0.035724 8.99 -0.001578 0.035671 9 -0.001574 0.035619 9.01 -0.001569 0.035567 9.02 -0.001564 0.035515 9.03 -0.001560 0.035463 9.04 -0.001555 0.035411 9.05 -0.001551 0.035360 9.06 -0.001546 0.035308 9.07 -0.001541 0.035257 9.08 -0.001537 0.035206 9.09 -0.001532 0.035155 9.1 -0.001528 0.035104 9.11 -0.001523 0.035053 9.12 -0.001519 0.035003 9.13 -0.001514 0.034953 9.14 -0.001510 0.034902 9.15 -0.001506 0.034852 9.16 -0.001501 0.034802 9.17 -0.001497 0.034753 9.18 -0.001492 0.034703 9.19 -0.001488 0.034653 9.2 -0.001484 0.034604 9.21 -0.001479 0.034555 9.22 -0.001475 0.034506 9.23 -0.001471 0.034457 9.24 -0.001467 0.034408 9.25 -0.001463 0.034359 9.26 -0.001458 0.034311 9.27 -0.001454 0.034263 9.28 -0.001450 0.034214 9.29 -0.001446 0.034166 9.3 -0.001442 0.034118 9.31 -0.001438 0.034070 9.32 -0.001433 0.034023 9.33 -0.001429 0.033975 9.34 -0.001425 0.033928 9.35 -0.001421 0.033881 9.36 -0.001417 0.033833 9.37 -0.001413 0.033786 9.38 -0.001409 0.033739 9.39 -0.001405 0.033693 9.4 -0.001401 0.033646 9.41 -0.001397 0.033600 9.42 -0.001394 0.033553 9.43 -0.001390 0.033507 9.44 -0.001386 0.033461 9.45 -0.001382 0.033415 9.46 -0.001378 0.033369 9.47 -0.001374 0.033323 9.48 -0.001370 0.033278 9.49 -0.001367 0.033232 9.5 -0.001363 0.033187 9.51 -0.001359 0.033142 9.52 -0.001355 0.033097 9.53 -0.001352 0.033052 9.54 -0.001348 0.033007 9.55 -0.001344 0.032962 9.56 -0.001340 0.032918 9.57 -0.001337 0.032873 9.58 -0.001333 0.032829 9.59 -0.001329 0.032784 9.6 -0.001326 0.032740 9.61 -0.001322 0.032696 9.62 -0.001319 0.032652 9.63 -0.001315 0.032609 9.64 -0.001311 0.032565 9.65 -0.001308 0.032522 9.66 -0.001304 0.032478 9.67 -0.001301 0.032435 9.68 -0.001297 0.032392 9.69 -0.001294 0.032349 9.7 -0.001290 0.032306 9.71 -0.001287 0.032263 9.72 -0.001283 0.032220 9.73 -0.001280 0.032178 9.74 -0.001276 0.032135 9.75 -0.001273 0.032093 9.76 -0.001270 0.032050 9.77 -0.001266 0.032008 9.78 -0.001263 0.031966 9.79 -0.001260 0.031924 9.8 -0.001256 0.031883 9.81 -0.001253 0.031841 9.82 -0.001250 0.031799 9.83 -0.001246 0.031758 9.84 -0.001243 0.031716 9.85 -0.001240 0.031675 9.86 -0.001236 0.031634 9.87 -0.001233 0.031593 9.88 -0.001230 0.031552 9.89 -0.001227 0.031511 9.9 -0.001223 0.031470 9.91 -0.001220 0.031430 9.92 -0.001217 0.031389 9.93 -0.001214 0.031349 9.94 -0.001211 0.031309 9.95 -0.001208 0.031268 9.96 -0.001204 0.031228 9.97 -0.001201 0.031188 9.98 -0.001198 0.031148 9.99 -0.001195 0.031109 dmrgpp-6.02/TestSuite/oracles/data3002.cf000066400000000000000000001451201414604301300200420ustar00rootroot00000000000000-10 -0.002232 -0.049902 -9.99 -0.002237 -0.049950 -9.98 -0.002241 -0.049998 -9.97 -0.002246 -0.050046 -9.96 -0.002250 -0.050095 -9.95 -0.002254 -0.050144 -9.94 -0.002259 -0.050193 -9.93 -0.002263 -0.050242 -9.92 -0.002268 -0.050292 -9.91 -0.002272 -0.050342 -9.9 -0.002277 -0.050392 -9.89 -0.002282 -0.050442 -9.88 -0.002287 -0.050492 -9.87 -0.002293 -0.050543 -9.86 -0.002298 -0.050593 -9.85 -0.002304 -0.050643 -9.84 -0.002309 -0.050694 -9.83 -0.002315 -0.050744 -9.82 -0.002321 -0.050794 -9.81 -0.002327 -0.050844 -9.8 -0.002333 -0.050894 -9.79 -0.002339 -0.050943 -9.78 -0.002345 -0.050992 -9.77 -0.002350 -0.051042 -9.76 -0.002355 -0.051091 -9.75 -0.002360 -0.051139 -9.74 -0.002365 -0.051188 -9.73 -0.002369 -0.051237 -9.72 -0.002373 -0.051286 -9.71 -0.002376 -0.051334 -9.7 -0.002379 -0.051383 -9.69 -0.002381 -0.051432 -9.68 -0.002383 -0.051482 -9.67 -0.002385 -0.051531 -9.66 -0.002386 -0.051581 -9.65 -0.002386 -0.051632 -9.64 -0.002387 -0.051683 -9.63 -0.002386 -0.051734 -9.62 -0.002386 -0.051787 -9.61 -0.002386 -0.051839 -9.6 -0.002385 -0.051893 -9.59 -0.002384 -0.051947 -9.58 -0.002383 -0.052002 -9.57 -0.002383 -0.052057 -9.56 -0.002382 -0.052113 -9.55 -0.002381 -0.052169 -9.54 -0.002381 -0.052227 -9.53 -0.002381 -0.052284 -9.52 -0.002381 -0.052343 -9.51 -0.002382 -0.052401 -9.5 -0.002383 -0.052460 -9.49 -0.002384 -0.052520 -9.48 -0.002386 -0.052580 -9.47 -0.002388 -0.052640 -9.46 -0.002391 -0.052701 -9.45 -0.002394 -0.052761 -9.44 -0.002397 -0.052822 -9.43 -0.002401 -0.052883 -9.42 -0.002405 -0.052944 -9.41 -0.002409 -0.053005 -9.4 -0.002414 -0.053067 -9.39 -0.002419 -0.053128 -9.38 -0.002424 -0.053189 -9.37 -0.002430 -0.053250 -9.36 -0.002436 -0.053311 -9.35 -0.002442 -0.053373 -9.34 -0.002448 -0.053434 -9.33 -0.002454 -0.053495 -9.32 -0.002461 -0.053556 -9.31 -0.002467 -0.053617 -9.3 -0.002474 -0.053678 -9.29 -0.002480 -0.053739 -9.28 -0.002487 -0.053800 -9.27 -0.002494 -0.053861 -9.26 -0.002500 -0.053923 -9.25 -0.002507 -0.053984 -9.24 -0.002514 -0.054046 -9.23 -0.002521 -0.054108 -9.22 -0.002528 -0.054170 -9.21 -0.002535 -0.054232 -9.2 -0.002542 -0.054294 -9.19 -0.002550 -0.054357 -9.18 -0.002557 -0.054419 -9.17 -0.002565 -0.054482 -9.16 -0.002574 -0.054545 -9.15 -0.002582 -0.054609 -9.14 -0.002591 -0.054672 -9.13 -0.002600 -0.054735 -9.12 -0.002610 -0.054798 -9.11 -0.002620 -0.054862 -9.1 -0.002630 -0.054925 -9.09 -0.002641 -0.054988 -9.08 -0.002652 -0.055051 -9.07 -0.002663 -0.055114 -9.06 -0.002675 -0.055176 -9.05 -0.002687 -0.055238 -9.04 -0.002699 -0.055300 -9.03 -0.002711 -0.055361 -9.02 -0.002724 -0.055422 -9.01 -0.002736 -0.055482 -9 -0.002749 -0.055542 -8.99 -0.002761 -0.055602 -8.98 -0.002773 -0.055661 -8.97 -0.002785 -0.055719 -8.96 -0.002797 -0.055777 -8.95 -0.002808 -0.055835 -8.94 -0.002819 -0.055892 -8.93 -0.002830 -0.055949 -8.92 -0.002839 -0.056006 -8.91 -0.002849 -0.056063 -8.9 -0.002858 -0.056120 -8.89 -0.002866 -0.056176 -8.88 -0.002873 -0.056233 -8.87 -0.002880 -0.056290 -8.86 -0.002887 -0.056347 -8.85 -0.002892 -0.056405 -8.84 -0.002898 -0.056462 -8.83 -0.002903 -0.056521 -8.82 -0.002908 -0.056579 -8.81 -0.002912 -0.056639 -8.8 -0.002916 -0.056698 -8.79 -0.002920 -0.056759 -8.78 -0.002924 -0.056819 -8.77 -0.002928 -0.056881 -8.76 -0.002932 -0.056942 -8.75 -0.002936 -0.057004 -8.74 -0.002940 -0.057067 -8.73 -0.002945 -0.057129 -8.72 -0.002949 -0.057192 -8.71 -0.002954 -0.057256 -8.7 -0.002959 -0.057319 -8.69 -0.002964 -0.057382 -8.68 -0.002970 -0.057445 -8.67 -0.002975 -0.057509 -8.66 -0.002981 -0.057572 -8.65 -0.002986 -0.057635 -8.64 -0.002992 -0.057698 -8.63 -0.002997 -0.057761 -8.62 -0.003003 -0.057823 -8.61 -0.003008 -0.057885 -8.6 -0.003012 -0.057948 -8.59 -0.003017 -0.058010 -8.58 -0.003021 -0.058072 -8.57 -0.003024 -0.058134 -8.56 -0.003027 -0.058196 -8.55 -0.003030 -0.058258 -8.54 -0.003032 -0.058320 -8.53 -0.003033 -0.058382 -8.52 -0.003034 -0.058445 -8.51 -0.003034 -0.058508 -8.5 -0.003033 -0.058571 -8.49 -0.003032 -0.058636 -8.48 -0.003031 -0.058700 -8.47 -0.003029 -0.058766 -8.46 -0.003027 -0.058832 -8.45 -0.003024 -0.058898 -8.44 -0.003021 -0.058966 -8.43 -0.003018 -0.059034 -8.42 -0.003015 -0.059103 -8.41 -0.003012 -0.059173 -8.4 -0.003009 -0.059244 -8.39 -0.003006 -0.059315 -8.38 -0.003003 -0.059387 -8.37 -0.003000 -0.059459 -8.36 -0.002997 -0.059533 -8.35 -0.002995 -0.059607 -8.34 -0.002992 -0.059681 -8.33 -0.002990 -0.059756 -8.32 -0.002989 -0.059831 -8.31 -0.002987 -0.059907 -8.3 -0.002986 -0.059983 -8.29 -0.002985 -0.060060 -8.28 -0.002984 -0.060137 -8.27 -0.002984 -0.060214 -8.26 -0.002983 -0.060292 -8.25 -0.002983 -0.060370 -8.24 -0.002983 -0.060448 -8.23 -0.002983 -0.060527 -8.22 -0.002983 -0.060606 -8.21 -0.002984 -0.060685 -8.2 -0.002984 -0.060765 -8.19 -0.002985 -0.060845 -8.18 -0.002986 -0.060925 -8.17 -0.002987 -0.061006 -8.16 -0.002988 -0.061087 -8.15 -0.002989 -0.061169 -8.14 -0.002991 -0.061251 -8.13 -0.002992 -0.061333 -8.12 -0.002994 -0.061416 -8.11 -0.002997 -0.061499 -8.1 -0.002999 -0.061583 -8.09 -0.003002 -0.061667 -8.08 -0.003005 -0.061751 -8.07 -0.003008 -0.061836 -8.06 -0.003012 -0.061921 -8.05 -0.003016 -0.062006 -8.04 -0.003021 -0.062091 -8.03 -0.003026 -0.062177 -8.02 -0.003031 -0.062263 -8.01 -0.003037 -0.062349 -8 -0.003043 -0.062436 -7.99 -0.003049 -0.062522 -7.98 -0.003056 -0.062609 -7.97 -0.003063 -0.062695 -7.96 -0.003070 -0.062782 -7.95 -0.003078 -0.062869 -7.94 -0.003086 -0.062955 -7.93 -0.003095 -0.063042 -7.92 -0.003103 -0.063129 -7.91 -0.003112 -0.063216 -7.9 -0.003121 -0.063302 -7.89 -0.003131 -0.063389 -7.88 -0.003140 -0.063476 -7.87 -0.003150 -0.063562 -7.86 -0.003160 -0.063649 -7.85 -0.003170 -0.063735 -7.84 -0.003180 -0.063822 -7.83 -0.003190 -0.063908 -7.82 -0.003200 -0.063994 -7.81 -0.003211 -0.064081 -7.8 -0.003221 -0.064167 -7.79 -0.003232 -0.064253 -7.78 -0.003242 -0.064339 -7.77 -0.003253 -0.064426 -7.76 -0.003263 -0.064512 -7.75 -0.003274 -0.064598 -7.74 -0.003285 -0.064684 -7.73 -0.003296 -0.064770 -7.72 -0.003306 -0.064856 -7.71 -0.003317 -0.064942 -7.7 -0.003328 -0.065028 -7.69 -0.003338 -0.065114 -7.68 -0.003349 -0.065200 -7.67 -0.003359 -0.065285 -7.66 -0.003370 -0.065371 -7.65 -0.003380 -0.065457 -7.64 -0.003390 -0.065542 -7.63 -0.003400 -0.065628 -7.62 -0.003410 -0.065713 -7.61 -0.003419 -0.065799 -7.6 -0.003429 -0.065884 -7.59 -0.003438 -0.065970 -7.58 -0.003446 -0.066056 -7.57 -0.003455 -0.066141 -7.56 -0.003463 -0.066227 -7.55 -0.003471 -0.066313 -7.54 -0.003479 -0.066399 -7.53 -0.003487 -0.066485 -7.52 -0.003494 -0.066572 -7.51 -0.003501 -0.066658 -7.5 -0.003508 -0.066744 -7.49 -0.003514 -0.066831 -7.48 -0.003520 -0.066918 -7.47 -0.003526 -0.067004 -7.46 -0.003531 -0.067091 -7.45 -0.003536 -0.067179 -7.44 -0.003541 -0.067266 -7.43 -0.003545 -0.067354 -7.42 -0.003548 -0.067442 -7.41 -0.003551 -0.067530 -7.4 -0.003554 -0.067619 -7.39 -0.003556 -0.067708 -7.38 -0.003557 -0.067797 -7.37 -0.003558 -0.067888 -7.36 -0.003559 -0.067978 -7.35 -0.003559 -0.068070 -7.34 -0.003558 -0.068162 -7.33 -0.003558 -0.068254 -7.32 -0.003556 -0.068348 -7.31 -0.003555 -0.068442 -7.3 -0.003553 -0.068537 -7.29 -0.003552 -0.068634 -7.28 -0.003550 -0.068730 -7.27 -0.003548 -0.068828 -7.26 -0.003546 -0.068927 -7.25 -0.003543 -0.069026 -7.24 -0.003541 -0.069127 -7.23 -0.003539 -0.069228 -7.22 -0.003538 -0.069330 -7.21 -0.003536 -0.069432 -7.2 -0.003535 -0.069536 -7.19 -0.003533 -0.069640 -7.18 -0.003532 -0.069745 -7.17 -0.003532 -0.069851 -7.16 -0.003531 -0.069957 -7.15 -0.003531 -0.070064 -7.14 -0.003531 -0.070171 -7.13 -0.003532 -0.070279 -7.12 -0.003532 -0.070388 -7.11 -0.003533 -0.070497 -7.1 -0.003535 -0.070607 -7.09 -0.003536 -0.070717 -7.08 -0.003538 -0.070827 -7.07 -0.003540 -0.070938 -7.06 -0.003543 -0.071050 -7.05 -0.003546 -0.071162 -7.04 -0.003549 -0.071274 -7.03 -0.003552 -0.071387 -7.02 -0.003556 -0.071500 -7.01 -0.003560 -0.071614 -7 -0.003564 -0.071728 -6.99 -0.003568 -0.071842 -6.98 -0.003573 -0.071957 -6.97 -0.003578 -0.072072 -6.96 -0.003583 -0.072187 -6.95 -0.003588 -0.072303 -6.94 -0.003594 -0.072419 -6.93 -0.003599 -0.072535 -6.92 -0.003605 -0.072652 -6.91 -0.003611 -0.072769 -6.9 -0.003618 -0.072887 -6.89 -0.003624 -0.073005 -6.88 -0.003631 -0.073123 -6.87 -0.003638 -0.073241 -6.86 -0.003645 -0.073360 -6.85 -0.003652 -0.073479 -6.84 -0.003659 -0.073599 -6.83 -0.003667 -0.073719 -6.82 -0.003675 -0.073839 -6.81 -0.003682 -0.073960 -6.8 -0.003690 -0.074081 -6.79 -0.003699 -0.074202 -6.78 -0.003707 -0.074323 -6.77 -0.003715 -0.074445 -6.76 -0.003724 -0.074568 -6.75 -0.003733 -0.074690 -6.74 -0.003742 -0.074813 -6.73 -0.003751 -0.074936 -6.72 -0.003760 -0.075060 -6.71 -0.003769 -0.075184 -6.7 -0.003778 -0.075308 -6.69 -0.003788 -0.075433 -6.68 -0.003798 -0.075558 -6.67 -0.003807 -0.075684 -6.66 -0.003817 -0.075809 -6.65 -0.003827 -0.075935 -6.64 -0.003837 -0.076062 -6.63 -0.003847 -0.076189 -6.62 -0.003858 -0.076316 -6.61 -0.003868 -0.076444 -6.6 -0.003879 -0.076572 -6.59 -0.003889 -0.076700 -6.58 -0.003900 -0.076829 -6.57 -0.003911 -0.076958 -6.56 -0.003922 -0.077087 -6.55 -0.003933 -0.077217 -6.54 -0.003944 -0.077347 -6.53 -0.003956 -0.077478 -6.52 -0.003967 -0.077609 -6.51 -0.003978 -0.077740 -6.5 -0.003990 -0.077872 -6.49 -0.004002 -0.078004 -6.48 -0.004013 -0.078137 -6.47 -0.004025 -0.078270 -6.46 -0.004037 -0.078403 -6.45 -0.004049 -0.078537 -6.44 -0.004061 -0.078671 -6.43 -0.004074 -0.078806 -6.42 -0.004086 -0.078941 -6.41 -0.004098 -0.079076 -6.4 -0.004111 -0.079212 -6.39 -0.004124 -0.079349 -6.38 -0.004136 -0.079485 -6.37 -0.004149 -0.079622 -6.36 -0.004162 -0.079760 -6.35 -0.004175 -0.079898 -6.34 -0.004188 -0.080036 -6.33 -0.004201 -0.080175 -6.32 -0.004214 -0.080315 -6.31 -0.004228 -0.080455 -6.3 -0.004241 -0.080595 -6.29 -0.004255 -0.080735 -6.28 -0.004268 -0.080877 -6.27 -0.004282 -0.081018 -6.26 -0.004296 -0.081160 -6.25 -0.004310 -0.081303 -6.24 -0.004324 -0.081446 -6.23 -0.004338 -0.081589 -6.22 -0.004352 -0.081733 -6.21 -0.004366 -0.081877 -6.2 -0.004381 -0.082022 -6.19 -0.004395 -0.082168 -6.18 -0.004410 -0.082314 -6.17 -0.004424 -0.082460 -6.16 -0.004439 -0.082607 -6.15 -0.004454 -0.082754 -6.14 -0.004469 -0.082902 -6.13 -0.004484 -0.083050 -6.12 -0.004499 -0.083199 -6.11 -0.004514 -0.083348 -6.1 -0.004529 -0.083498 -6.09 -0.004545 -0.083648 -6.08 -0.004560 -0.083799 -6.07 -0.004576 -0.083950 -6.06 -0.004591 -0.084102 -6.05 -0.004607 -0.084254 -6.04 -0.004623 -0.084407 -6.03 -0.004639 -0.084561 -6.02 -0.004655 -0.084715 -6.01 -0.004671 -0.084869 -6 -0.004688 -0.085024 -5.99 -0.004704 -0.085180 -5.98 -0.004720 -0.085336 -5.97 -0.004737 -0.085492 -5.96 -0.004754 -0.085649 -5.95 -0.004770 -0.085807 -5.94 -0.004787 -0.085965 -5.93 -0.004804 -0.086124 -5.92 -0.004821 -0.086284 -5.91 -0.004838 -0.086444 -5.9 -0.004856 -0.086604 -5.89 -0.004873 -0.086765 -5.88 -0.004891 -0.086927 -5.87 -0.004908 -0.087089 -5.86 -0.004926 -0.087252 -5.85 -0.004944 -0.087416 -5.84 -0.004962 -0.087580 -5.83 -0.004980 -0.087744 -5.82 -0.004998 -0.087909 -5.81 -0.005016 -0.088075 -5.8 -0.005034 -0.088242 -5.79 -0.005053 -0.088409 -5.78 -0.005071 -0.088576 -5.77 -0.005090 -0.088744 -5.76 -0.005109 -0.088913 -5.75 -0.005128 -0.089083 -5.74 -0.005147 -0.089253 -5.73 -0.005166 -0.089424 -5.72 -0.005185 -0.089595 -5.71 -0.005204 -0.089767 -5.7 -0.005224 -0.089940 -5.69 -0.005244 -0.090113 -5.68 -0.005263 -0.090287 -5.67 -0.005283 -0.090461 -5.66 -0.005303 -0.090637 -5.65 -0.005323 -0.090813 -5.64 -0.005343 -0.090989 -5.63 -0.005364 -0.091166 -5.62 -0.005384 -0.091344 -5.61 -0.005405 -0.091523 -5.6 -0.005426 -0.091702 -5.59 -0.005446 -0.091882 -5.58 -0.005467 -0.092063 -5.57 -0.005488 -0.092244 -5.56 -0.005510 -0.092426 -5.55 -0.005531 -0.092609 -5.54 -0.005552 -0.092792 -5.53 -0.005574 -0.092976 -5.52 -0.005596 -0.093161 -5.51 -0.005618 -0.093347 -5.5 -0.005640 -0.093533 -5.49 -0.005662 -0.093720 -5.48 -0.005684 -0.093908 -5.47 -0.005707 -0.094096 -5.46 -0.005729 -0.094285 -5.45 -0.005752 -0.094475 -5.44 -0.005775 -0.094666 -5.43 -0.005798 -0.094857 -5.42 -0.005821 -0.095050 -5.41 -0.005844 -0.095243 -5.4 -0.005868 -0.095436 -5.39 -0.005891 -0.095631 -5.38 -0.005915 -0.095826 -5.37 -0.005939 -0.096022 -5.36 -0.005963 -0.096219 -5.35 -0.005987 -0.096417 -5.34 -0.006011 -0.096615 -5.33 -0.006036 -0.096814 -5.32 -0.006060 -0.097014 -5.31 -0.006085 -0.097215 -5.3 -0.006110 -0.097417 -5.29 -0.006135 -0.097619 -5.28 -0.006161 -0.097823 -5.27 -0.006186 -0.098027 -5.26 -0.006212 -0.098232 -5.25 -0.006237 -0.098438 -5.24 -0.006263 -0.098644 -5.23 -0.006289 -0.098852 -5.22 -0.006316 -0.099060 -5.21 -0.006342 -0.099270 -5.2 -0.006369 -0.099480 -5.19 -0.006396 -0.099691 -5.18 -0.006422 -0.099903 -5.17 -0.006450 -0.100115 -5.16 -0.006477 -0.100329 -5.15 -0.006504 -0.100544 -5.14 -0.006532 -0.100759 -5.13 -0.006560 -0.100976 -5.12 -0.006588 -0.101193 -5.11 -0.006616 -0.101411 -5.1 -0.006645 -0.101630 -5.09 -0.006673 -0.101850 -5.08 -0.006702 -0.102071 -5.07 -0.006731 -0.102293 -5.06 -0.006760 -0.102516 -5.05 -0.006789 -0.102740 -5.04 -0.006819 -0.102965 -5.03 -0.006849 -0.103191 -5.02 -0.006879 -0.103418 -5.01 -0.006909 -0.103645 -5 -0.006939 -0.103874 -4.99 -0.006970 -0.104104 -4.98 -0.007000 -0.104335 -4.97 -0.007031 -0.104566 -4.96 -0.007063 -0.104799 -4.95 -0.007094 -0.105033 -4.94 -0.007126 -0.105268 -4.93 -0.007157 -0.105504 -4.92 -0.007189 -0.105741 -4.91 -0.007222 -0.105979 -4.9 -0.007254 -0.106218 -4.89 -0.007287 -0.106458 -4.88 -0.007320 -0.106699 -4.87 -0.007353 -0.106941 -4.86 -0.007386 -0.107185 -4.85 -0.007420 -0.107429 -4.84 -0.007454 -0.107675 -4.83 -0.007488 -0.107921 -4.82 -0.007522 -0.108169 -4.81 -0.007557 -0.108418 -4.8 -0.007592 -0.108668 -4.79 -0.007627 -0.108919 -4.78 -0.007662 -0.109171 -4.77 -0.007698 -0.109425 -4.76 -0.007733 -0.109680 -4.75 -0.007769 -0.109935 -4.74 -0.007806 -0.110192 -4.73 -0.007842 -0.110451 -4.72 -0.007879 -0.110710 -4.71 -0.007916 -0.110971 -4.7 -0.007954 -0.111232 -4.69 -0.007991 -0.111495 -4.68 -0.008029 -0.111760 -4.67 -0.008067 -0.112025 -4.66 -0.008106 -0.112292 -4.65 -0.008144 -0.112560 -4.64 -0.008183 -0.112829 -4.63 -0.008223 -0.113100 -4.62 -0.008262 -0.113372 -4.61 -0.008302 -0.113645 -4.6 -0.008342 -0.113919 -4.59 -0.008383 -0.114195 -4.58 -0.008424 -0.114472 -4.57 -0.008465 -0.114751 -4.56 -0.008506 -0.115030 -4.55 -0.008548 -0.115312 -4.54 -0.008590 -0.115594 -4.53 -0.008632 -0.115878 -4.52 -0.008675 -0.116163 -4.51 -0.008718 -0.116450 -4.5 -0.008761 -0.116738 -4.49 -0.008804 -0.117027 -4.48 -0.008848 -0.117318 -4.47 -0.008893 -0.117611 -4.46 -0.008937 -0.117904 -4.45 -0.008982 -0.118200 -4.44 -0.009027 -0.118496 -4.43 -0.009073 -0.118794 -4.42 -0.009119 -0.119094 -4.41 -0.009165 -0.119395 -4.4 -0.009212 -0.119698 -4.39 -0.009259 -0.120002 -4.38 -0.009306 -0.120308 -4.37 -0.009354 -0.120615 -4.36 -0.009402 -0.120924 -4.35 -0.009451 -0.121234 -4.34 -0.009500 -0.121546 -4.33 -0.009549 -0.121860 -4.32 -0.009599 -0.122175 -4.31 -0.009649 -0.122492 -4.3 -0.009699 -0.122811 -4.29 -0.009750 -0.123131 -4.28 -0.009801 -0.123452 -4.27 -0.009853 -0.123776 -4.26 -0.009905 -0.124101 -4.25 -0.009957 -0.124428 -4.24 -0.010010 -0.124756 -4.23 -0.010064 -0.125087 -4.22 -0.010117 -0.125419 -4.21 -0.010172 -0.125752 -4.2 -0.010226 -0.126088 -4.19 -0.010281 -0.126425 -4.18 -0.010337 -0.126764 -4.17 -0.010393 -0.127105 -4.16 -0.010449 -0.127448 -4.15 -0.010506 -0.127792 -4.14 -0.010564 -0.128139 -4.13 -0.010621 -0.128487 -4.12 -0.010680 -0.128837 -4.11 -0.010739 -0.129189 -4.1 -0.010798 -0.129543 -4.09 -0.010858 -0.129899 -4.08 -0.010918 -0.130257 -4.07 -0.010979 -0.130617 -4.06 -0.011040 -0.130978 -4.05 -0.011102 -0.131342 -4.04 -0.011164 -0.131708 -4.03 -0.011227 -0.132076 -4.02 -0.011291 -0.132446 -4.01 -0.011355 -0.132818 -4 -0.011419 -0.133192 -3.99 -0.011484 -0.133568 -3.98 -0.011550 -0.133946 -3.97 -0.011616 -0.134326 -3.96 -0.011683 -0.134709 -3.95 -0.011750 -0.135093 -3.94 -0.011818 -0.135480 -3.93 -0.011887 -0.135869 -3.92 -0.011956 -0.136261 -3.91 -0.012026 -0.136654 -3.9 -0.012096 -0.137050 -3.89 -0.012167 -0.137448 -3.88 -0.012239 -0.137848 -3.87 -0.012311 -0.138251 -3.86 -0.012384 -0.138656 -3.85 -0.012458 -0.139063 -3.84 -0.012532 -0.139473 -3.83 -0.012607 -0.139885 -3.82 -0.012683 -0.140300 -3.81 -0.012759 -0.140717 -3.8 -0.012836 -0.141137 -3.79 -0.012913 -0.141559 -3.78 -0.012992 -0.141983 -3.77 -0.013071 -0.142410 -3.76 -0.013151 -0.142840 -3.75 -0.013231 -0.143272 -3.74 -0.013313 -0.143707 -3.73 -0.013395 -0.144144 -3.72 -0.013478 -0.144584 -3.71 -0.013561 -0.145027 -3.7 -0.013646 -0.145473 -3.69 -0.013731 -0.145921 -3.68 -0.013817 -0.146372 -3.67 -0.013904 -0.146825 -3.66 -0.013991 -0.147282 -3.65 -0.014080 -0.147741 -3.64 -0.014169 -0.148203 -3.63 -0.014259 -0.148669 -3.62 -0.014350 -0.149136 -3.61 -0.014442 -0.149607 -3.6 -0.014535 -0.150081 -3.59 -0.014629 -0.150558 -3.58 -0.014724 -0.151038 -3.57 -0.014819 -0.151521 -3.56 -0.014916 -0.152007 -3.55 -0.015013 -0.152496 -3.54 -0.015111 -0.152988 -3.53 -0.015211 -0.153484 -3.52 -0.015311 -0.153982 -3.51 -0.015413 -0.154484 -3.5 -0.015515 -0.154989 -3.49 -0.015619 -0.155498 -3.48 -0.015723 -0.156009 -3.47 -0.015829 -0.156524 -3.46 -0.015935 -0.157043 -3.45 -0.016043 -0.157565 -3.44 -0.016152 -0.158090 -3.43 -0.016262 -0.158619 -3.42 -0.016373 -0.159151 -3.41 -0.016485 -0.159687 -3.4 -0.016598 -0.160227 -3.39 -0.016713 -0.160770 -3.38 -0.016828 -0.161316 -3.37 -0.016945 -0.161867 -3.36 -0.017064 -0.162421 -3.35 -0.017183 -0.162979 -3.34 -0.017304 -0.163541 -3.33 -0.017426 -0.164107 -3.32 -0.017549 -0.164676 -3.31 -0.017673 -0.165250 -3.3 -0.017799 -0.165827 -3.29 -0.017927 -0.166409 -3.28 -0.018055 -0.166994 -3.27 -0.018185 -0.167584 -3.26 -0.018317 -0.168178 -3.25 -0.018450 -0.168776 -3.24 -0.018584 -0.169378 -3.23 -0.018720 -0.169985 -3.22 -0.018857 -0.170596 -3.21 -0.018996 -0.171211 -3.2 -0.019137 -0.171831 -3.19 -0.019279 -0.172455 -3.18 -0.019422 -0.173083 -3.17 -0.019568 -0.173716 -3.16 -0.019714 -0.174354 -3.15 -0.019863 -0.174997 -3.14 -0.020013 -0.175644 -3.13 -0.020165 -0.176296 -3.12 -0.020319 -0.176953 -3.11 -0.020474 -0.177614 -3.1 -0.020631 -0.178281 -3.09 -0.020791 -0.178952 -3.08 -0.020952 -0.179629 -3.07 -0.021114 -0.180311 -3.06 -0.021279 -0.180998 -3.05 -0.021446 -0.181690 -3.04 -0.021615 -0.182387 -3.03 -0.021785 -0.183090 -3.02 -0.021958 -0.183798 -3.01 -0.022133 -0.184511 -3 -0.022310 -0.185230 -2.99 -0.022489 -0.185955 -2.98 -0.022670 -0.186685 -2.97 -0.022853 -0.187421 -2.96 -0.023039 -0.188162 -2.95 -0.023227 -0.188910 -2.94 -0.023417 -0.189663 -2.93 -0.023610 -0.190423 -2.92 -0.023805 -0.191188 -2.91 -0.024003 -0.191960 -2.9 -0.024203 -0.192738 -2.89 -0.024405 -0.193522 -2.88 -0.024610 -0.194312 -2.87 -0.024818 -0.195109 -2.86 -0.025028 -0.195912 -2.85 -0.025241 -0.196722 -2.84 -0.025457 -0.197539 -2.83 -0.025676 -0.198362 -2.82 -0.025897 -0.199192 -2.81 -0.026122 -0.200029 -2.8 -0.026349 -0.200873 -2.79 -0.026579 -0.201724 -2.78 -0.026813 -0.202582 -2.77 -0.027049 -0.203448 -2.76 -0.027289 -0.204321 -2.75 -0.027531 -0.205201 -2.74 -0.027778 -0.206089 -2.73 -0.028027 -0.206984 -2.72 -0.028280 -0.207887 -2.71 -0.028536 -0.208798 -2.7 -0.028796 -0.209717 -2.69 -0.029060 -0.210644 -2.68 -0.029327 -0.211579 -2.67 -0.029597 -0.212523 -2.66 -0.029872 -0.213475 -2.65 -0.030151 -0.214435 -2.64 -0.030433 -0.215403 -2.63 -0.030719 -0.216381 -2.62 -0.031010 -0.217367 -2.61 -0.031305 -0.218362 -2.6 -0.031604 -0.219366 -2.59 -0.031907 -0.220380 -2.58 -0.032215 -0.221402 -2.57 -0.032527 -0.222434 -2.56 -0.032844 -0.223476 -2.55 -0.033165 -0.224527 -2.54 -0.033492 -0.225588 -2.53 -0.033823 -0.226659 -2.52 -0.034159 -0.227740 -2.51 -0.034500 -0.228831 -2.5 -0.034846 -0.229933 -2.49 -0.035198 -0.231045 -2.48 -0.035555 -0.232168 -2.47 -0.035918 -0.233301 -2.46 -0.036286 -0.234446 -2.45 -0.036660 -0.235601 -2.44 -0.037040 -0.236768 -2.43 -0.037426 -0.237946 -2.42 -0.037817 -0.239136 -2.41 -0.038216 -0.240338 -2.4 -0.038620 -0.241551 -2.39 -0.039031 -0.242777 -2.38 -0.039449 -0.244015 -2.37 -0.039873 -0.245265 -2.36 -0.040305 -0.246528 -2.35 -0.040743 -0.247804 -2.34 -0.041189 -0.249093 -2.33 -0.041642 -0.250395 -2.32 -0.042103 -0.251711 -2.31 -0.042572 -0.253040 -2.3 -0.043048 -0.254383 -2.29 -0.043533 -0.255740 -2.28 -0.044026 -0.257111 -2.27 -0.044527 -0.258497 -2.26 -0.045037 -0.259897 -2.25 -0.045556 -0.261312 -2.24 -0.046084 -0.262743 -2.23 -0.046622 -0.264189 -2.22 -0.047169 -0.265650 -2.21 -0.047725 -0.267128 -2.2 -0.048292 -0.268621 -2.19 -0.048869 -0.270131 -2.18 -0.049457 -0.271657 -2.17 -0.050055 -0.273201 -2.16 -0.050665 -0.274761 -2.15 -0.051285 -0.276339 -2.14 -0.051917 -0.277935 -2.13 -0.052562 -0.279549 -2.12 -0.053218 -0.281181 -2.11 -0.053887 -0.282831 -2.1 -0.054568 -0.284501 -2.09 -0.055263 -0.286189 -2.08 -0.055972 -0.287898 -2.07 -0.056694 -0.289626 -2.06 -0.057430 -0.291374 -2.05 -0.058181 -0.293143 -2.04 -0.058947 -0.294932 -2.03 -0.059729 -0.296743 -2.02 -0.060526 -0.298576 -2.01 -0.061339 -0.300430 -2 -0.062169 -0.302306 -1.99 -0.063017 -0.304206 -1.98 -0.063882 -0.306128 -1.97 -0.064765 -0.308073 -1.96 -0.065666 -0.310043 -1.95 -0.066587 -0.312036 -1.94 -0.067528 -0.314054 -1.93 -0.068489 -0.316098 -1.92 -0.069471 -0.318166 -1.91 -0.070474 -0.320261 -1.9 -0.071500 -0.322382 -1.89 -0.072548 -0.324529 -1.88 -0.073620 -0.326704 -1.87 -0.074716 -0.328907 -1.86 -0.075837 -0.331138 -1.85 -0.076983 -0.333397 -1.84 -0.078157 -0.335685 -1.83 -0.079357 -0.338003 -1.82 -0.080586 -0.340351 -1.81 -0.081843 -0.342730 -1.8 -0.083131 -0.345139 -1.79 -0.084449 -0.347581 -1.78 -0.085800 -0.350054 -1.77 -0.087183 -0.352560 -1.76 -0.088601 -0.355099 -1.75 -0.090054 -0.357672 -1.74 -0.091543 -0.360278 -1.73 -0.093069 -0.362920 -1.72 -0.094634 -0.365597 -1.71 -0.096240 -0.368310 -1.7 -0.097887 -0.371059 -1.69 -0.099576 -0.373845 -1.68 -0.101310 -0.376668 -1.67 -0.103090 -0.379529 -1.66 -0.104918 -0.382429 -1.65 -0.106794 -0.385367 -1.64 -0.108722 -0.388345 -1.63 -0.110702 -0.391363 -1.62 -0.112737 -0.394421 -1.61 -0.114828 -0.397521 -1.6 -0.116977 -0.400661 -1.59 -0.119188 -0.403843 -1.58 -0.121461 -0.407068 -1.57 -0.123800 -0.410335 -1.56 -0.126206 -0.413644 -1.55 -0.128682 -0.416997 -1.54 -0.131230 -0.420393 -1.53 -0.133855 -0.423833 -1.52 -0.136557 -0.427316 -1.51 -0.139340 -0.430843 -1.5 -0.142207 -0.434414 -1.49 -0.145162 -0.438029 -1.48 -0.148207 -0.441688 -1.47 -0.151345 -0.445389 -1.46 -0.154582 -0.449134 -1.45 -0.157919 -0.452922 -1.44 -0.161361 -0.456752 -1.43 -0.164912 -0.460623 -1.42 -0.168575 -0.464534 -1.41 -0.172356 -0.468486 -1.4 -0.176257 -0.472476 -1.39 -0.180284 -0.476502 -1.38 -0.184442 -0.480565 -1.37 -0.188734 -0.484661 -1.36 -0.193166 -0.488789 -1.35 -0.197742 -0.492947 -1.34 -0.202468 -0.497132 -1.33 -0.207349 -0.501341 -1.32 -0.212389 -0.505571 -1.31 -0.217594 -0.509819 -1.3 -0.222968 -0.514081 -1.29 -0.228518 -0.518353 -1.28 -0.234249 -0.522631 -1.27 -0.240165 -0.526910 -1.26 -0.246271 -0.531185 -1.25 -0.252573 -0.535450 -1.24 -0.259076 -0.539700 -1.23 -0.265784 -0.543929 -1.22 -0.272701 -0.548129 -1.21 -0.279833 -0.552295 -1.2 -0.287182 -0.556420 -1.19 -0.294755 -0.560495 -1.18 -0.302553 -0.564515 -1.17 -0.310581 -0.568470 -1.16 -0.318842 -0.572353 -1.15 -0.327339 -0.576156 -1.14 -0.336076 -0.579871 -1.13 -0.345056 -0.583488 -1.12 -0.354281 -0.587000 -1.11 -0.363755 -0.590398 -1.1 -0.373480 -0.593671 -1.09 -0.383459 -0.596810 -1.08 -0.393695 -0.599805 -1.07 -0.404191 -0.602646 -1.06 -0.414948 -0.605321 -1.05 -0.425971 -0.607818 -1.04 -0.437259 -0.610126 -1.03 -0.448816 -0.612229 -1.02 -0.460642 -0.614116 -1.01 -0.472738 -0.615771 -1 -0.485104 -0.617179 -0.99 -0.497739 -0.618324 -0.98 -0.510641 -0.619190 -0.97 -0.523808 -0.619761 -0.96 -0.537237 -0.620019 -0.95 -0.550922 -0.619947 -0.94 -0.564859 -0.619528 -0.93 -0.579041 -0.618743 -0.92 -0.593463 -0.617574 -0.91 -0.608115 -0.616004 -0.9 -0.622990 -0.614012 -0.89 -0.638078 -0.611581 -0.88 -0.653368 -0.608691 -0.87 -0.668849 -0.605320 -0.86 -0.684508 -0.601448 -0.85 -0.700330 -0.597054 -0.84 -0.716299 -0.592115 -0.83 -0.732394 -0.586607 -0.82 -0.748595 -0.580509 -0.81 -0.764878 -0.573798 -0.8 -0.781213 -0.566450 -0.79 -0.797570 -0.558445 -0.78 -0.813914 -0.549763 -0.77 -0.830207 -0.540386 -0.76 -0.846408 -0.530301 -0.75 -0.862473 -0.519496 -0.74 -0.878355 -0.507964 -0.73 -0.894005 -0.495702 -0.72 -0.909374 -0.482713 -0.71 -0.924410 -0.469004 -0.7 -0.939065 -0.454587 -0.69 -0.953287 -0.439480 -0.68 -0.967028 -0.423705 -0.67 -0.980243 -0.407289 -0.66 -0.992887 -0.390265 -0.65 -1.004921 -0.372667 -0.64 -1.016307 -0.354535 -0.63 -1.027013 -0.335912 -0.62 -1.037010 -0.316842 -0.61 -1.046273 -0.297372 -0.6 -1.054783 -0.277551 -0.59 -1.062525 -0.257429 -0.58 -1.069486 -0.237055 -0.57 -1.075663 -0.216481 -0.56 -1.081052 -0.195757 -0.55 -1.085657 -0.174932 -0.54 -1.089486 -0.154054 -0.53 -1.092550 -0.133171 -0.52 -1.094865 -0.112325 -0.51 -1.096451 -0.091558 -0.5 -1.097331 -0.070908 -0.49 -1.097531 -0.050410 -0.48 -1.097078 -0.030095 -0.47 -1.096002 -0.009988 -0.46 -1.094334 0.009886 -0.45 -1.092106 0.029513 -0.44 -1.089348 0.048878 -0.43 -1.086091 0.067971 -0.42 -1.082362 0.086787 -0.41 -1.078189 0.105322 -0.4 -1.073596 0.123577 -0.39 -1.068604 0.141554 -0.38 -1.063231 0.159255 -0.37 -1.057494 0.176686 -0.36 -1.051406 0.193852 -0.35 -1.044977 0.210755 -0.34 -1.038216 0.227400 -0.33 -1.031130 0.243790 -0.32 -1.023725 0.259926 -0.31 -1.016006 0.275808 -0.3 -1.007978 0.291436 -0.29 -0.999646 0.306808 -0.28 -0.991015 0.321922 -0.27 -0.982089 0.336777 -0.26 -0.972875 0.351370 -0.25 -0.963378 0.365699 -0.24 -0.953602 0.379764 -0.23 -0.943552 0.393564 -0.22 -0.933231 0.407098 -0.21 -0.922642 0.420367 -0.2 -0.911784 0.433371 -0.19 -0.900657 0.446108 -0.18 -0.889256 0.458577 -0.17 -0.877578 0.470773 -0.16 -0.865615 0.482690 -0.15 -0.853362 0.494319 -0.14 -0.840811 0.505647 -0.13 -0.827956 0.516657 -0.12 -0.814793 0.527330 -0.11 -0.801319 0.537642 -0.1 -0.787537 0.547568 -0.090000 -0.773450 0.557080 -0.080000 -0.759070 0.566146 -0.070000 -0.744411 0.574738 -0.060000 -0.729494 0.582827 -0.050000 -0.714343 0.590383 -0.040000 -0.698989 0.597381 -0.030000 -0.683465 0.603800 -0.020000 -0.667810 0.609622 -0.010000 -0.652063 0.614833 0 -0.636267 0.619426 0.009999 -0.620466 0.623398 0.019999 -0.604701 0.626751 0.029999 -0.589015 0.629493 0.039999 -0.573449 0.631637 0.049999 -0.558042 0.633198 0.059999 -0.542828 0.634197 0.069999 -0.527840 0.634658 0.079999 -0.513107 0.634606 0.089999 -0.498655 0.634070 0.099999 -0.484505 0.633078 0.11 -0.470676 0.631661 0.12 -0.457182 0.629850 0.13 -0.444035 0.627674 0.14 -0.431244 0.625163 0.15 -0.418814 0.622348 0.16 -0.406748 0.619256 0.17 -0.395047 0.615914 0.18 -0.383710 0.612349 0.19 -0.372734 0.608584 0.2 -0.362116 0.604644 0.21 -0.351848 0.600549 0.22 -0.341925 0.596319 0.23 -0.332340 0.591974 0.24 -0.323083 0.587530 0.25 -0.314146 0.583003 0.26 -0.305520 0.578409 0.27 -0.297197 0.573759 0.28 -0.289165 0.569067 0.29 -0.281415 0.564343 0.3 -0.273939 0.559598 0.31 -0.266725 0.554840 0.32 -0.259766 0.550077 0.33 -0.253050 0.545317 0.34 -0.246570 0.540567 0.35 -0.240317 0.535832 0.36 -0.234280 0.531118 0.37 -0.228453 0.526429 0.38 -0.222827 0.521769 0.39 -0.217394 0.517142 0.4 -0.212146 0.512550 0.41 -0.207076 0.507998 0.42 -0.202177 0.503487 0.43 -0.197442 0.499019 0.44 -0.192865 0.494596 0.45 -0.188438 0.490220 0.46 -0.184157 0.485892 0.47 -0.180015 0.481612 0.48 -0.176007 0.477382 0.49 -0.172128 0.473202 0.5 -0.168372 0.469073 0.51 -0.164734 0.464995 0.52 -0.161210 0.460968 0.53 -0.157796 0.456993 0.54 -0.154487 0.453069 0.55 -0.151279 0.449197 0.56 -0.148168 0.445375 0.57 -0.145151 0.441605 0.58 -0.142224 0.437885 0.59 -0.139383 0.434215 0.6 -0.136625 0.430596 0.61 -0.133948 0.427025 0.62 -0.131347 0.423504 0.63 -0.128821 0.420031 0.64 -0.126367 0.416605 0.65 -0.123981 0.413227 0.66 -0.121662 0.409896 0.67 -0.119407 0.406610 0.68 -0.117214 0.403370 0.69 -0.115081 0.400175 0.7 -0.113005 0.397024 0.71 -0.110984 0.393917 0.72 -0.109017 0.390852 0.73 -0.107102 0.387829 0.74 -0.105237 0.384849 0.75 -0.103420 0.381909 0.76 -0.101649 0.379009 0.77 -0.099924 0.376149 0.78 -0.098242 0.373328 0.79 -0.096602 0.370545 0.8 -0.095003 0.367800 0.81 -0.093444 0.365092 0.82 -0.091922 0.362420 0.83 -0.090438 0.359784 0.84 -0.088989 0.357184 0.85 -0.087575 0.354618 0.86 -0.086194 0.352086 0.87 -0.084846 0.349588 0.88 -0.083529 0.347122 0.89 -0.082243 0.344689 0.9 -0.080987 0.342288 0.91 -0.079759 0.339918 0.92 -0.078558 0.337578 0.93 -0.077385 0.335269 0.94 -0.076238 0.332989 0.95 -0.075117 0.330739 0.96 -0.074020 0.328517 0.97 -0.072947 0.326323 0.98 -0.071897 0.324157 0.99 -0.070870 0.322019 1 -0.069865 0.319907 1.01 -0.068881 0.317821 1.02 -0.067918 0.315761 1.03 -0.066975 0.313726 1.04 -0.066052 0.311717 1.05 -0.065148 0.309731 1.06 -0.064262 0.307770 1.07 -0.063394 0.305833 1.08 -0.062544 0.303919 1.09 -0.061711 0.302028 1.1 -0.060895 0.300160 1.11 -0.060094 0.298313 1.12 -0.059310 0.296489 1.13 -0.058541 0.294686 1.14 -0.057786 0.292904 1.15 -0.057047 0.291142 1.16 -0.056321 0.289401 1.17 -0.055609 0.287680 1.18 -0.054911 0.285979 1.19 -0.054226 0.284298 1.2 -0.053554 0.282635 1.21 -0.052894 0.280991 1.22 -0.052247 0.279366 1.23 -0.051611 0.277758 1.24 -0.050987 0.276169 1.25 -0.050374 0.274597 1.26 -0.049772 0.273043 1.27 -0.049181 0.271506 1.28 -0.048601 0.269985 1.29 -0.048031 0.268481 1.3 -0.047471 0.266994 1.31 -0.046920 0.265522 1.32 -0.046380 0.264066 1.33 -0.045848 0.262626 1.34 -0.045326 0.261200 1.35 -0.044812 0.259790 1.36 -0.044308 0.258395 1.37 -0.043812 0.257015 1.38 -0.043324 0.255648 1.39 -0.042844 0.254296 1.4 -0.042373 0.252958 1.41 -0.041909 0.251634 1.42 -0.041452 0.250323 1.43 -0.041003 0.249025 1.44 -0.040562 0.247741 1.45 -0.040128 0.246469 1.46 -0.039700 0.245211 1.47 -0.039279 0.243965 1.48 -0.038866 0.242731 1.49 -0.038458 0.241509 1.5 -0.038057 0.240300 1.51 -0.037662 0.239102 1.52 -0.037274 0.237916 1.53 -0.036891 0.236742 1.54 -0.036515 0.235579 1.55 -0.036144 0.234427 1.56 -0.035779 0.233286 1.57 -0.035419 0.232156 1.58 -0.035065 0.231037 1.59 -0.034716 0.229929 1.6 -0.034372 0.228830 1.61 -0.034033 0.227743 1.62 -0.033700 0.226665 1.63 -0.033371 0.225597 1.64 -0.033047 0.224539 1.65 -0.032728 0.223491 1.66 -0.032413 0.222453 1.67 -0.032103 0.221424 1.68 -0.031797 0.220404 1.69 -0.031496 0.219394 1.7 -0.031199 0.218393 1.71 -0.030906 0.217401 1.72 -0.030618 0.216417 1.73 -0.030333 0.215443 1.74 -0.030053 0.214477 1.75 -0.029776 0.213519 1.76 -0.029503 0.212570 1.77 -0.029234 0.211629 1.78 -0.028968 0.210697 1.79 -0.028706 0.209772 1.8 -0.028448 0.208856 1.81 -0.028193 0.207947 1.82 -0.027942 0.207047 1.83 -0.027694 0.206154 1.84 -0.027449 0.205268 1.85 -0.027208 0.204390 1.86 -0.026969 0.203520 1.87 -0.026734 0.202656 1.88 -0.026502 0.201800 1.89 -0.026273 0.200951 1.9 -0.026047 0.200110 1.91 -0.025824 0.199275 1.92 -0.025603 0.198447 1.93 -0.025386 0.197625 1.94 -0.025171 0.196811 1.95 -0.024959 0.196003 1.96 -0.024750 0.195202 1.97 -0.024543 0.194407 1.98 -0.024339 0.193618 1.99 -0.024137 0.192836 2 -0.023938 0.192060 2.01 -0.023742 0.191291 2.02 -0.023548 0.190527 2.03 -0.023356 0.189769 2.04 -0.023166 0.189018 2.05 -0.022979 0.188272 2.06 -0.022794 0.187532 2.07 -0.022612 0.186798 2.08 -0.022431 0.186069 2.09 -0.022253 0.185347 2.1 -0.022077 0.184629 2.11 -0.021903 0.183917 2.12 -0.021731 0.183211 2.13 -0.021561 0.182510 2.14 -0.021393 0.181814 2.15 -0.021227 0.181124 2.16 -0.021063 0.180438 2.17 -0.020900 0.179758 2.18 -0.020740 0.179083 2.19 -0.020582 0.178413 2.2 -0.020425 0.177748 2.21 -0.020270 0.177088 2.22 -0.020117 0.176433 2.23 -0.019966 0.175782 2.24 -0.019816 0.175136 2.25 -0.019668 0.174495 2.26 -0.019522 0.173859 2.27 -0.019377 0.173227 2.28 -0.019234 0.172600 2.29 -0.019092 0.171977 2.3 -0.018952 0.171359 2.31 -0.018814 0.170745 2.32 -0.018677 0.170135 2.33 -0.018542 0.169530 2.34 -0.018408 0.168929 2.35 -0.018275 0.168332 2.36 -0.018144 0.167740 2.37 -0.018015 0.167151 2.38 -0.017886 0.166567 2.39 -0.017760 0.165986 2.4 -0.017634 0.165410 2.41 -0.017510 0.164838 2.42 -0.017387 0.164269 2.43 -0.017265 0.163705 2.44 -0.017145 0.163144 2.45 -0.017026 0.162587 2.46 -0.016908 0.162034 2.47 -0.016792 0.161485 2.48 -0.016676 0.160939 2.49 -0.016562 0.160397 2.5 -0.016449 0.159859 2.51 -0.016337 0.159324 2.52 -0.016226 0.158793 2.53 -0.016117 0.158265 2.54 -0.016008 0.157741 2.55 -0.015901 0.157220 2.56 -0.015794 0.156703 2.57 -0.015689 0.156189 2.58 -0.015585 0.155678 2.59 -0.015482 0.155171 2.6 -0.015380 0.154667 2.61 -0.015279 0.154166 2.62 -0.015178 0.153668 2.63 -0.015079 0.153174 2.64 -0.014981 0.152683 2.65 -0.014884 0.152195 2.66 -0.014788 0.151710 2.67 -0.014692 0.151228 2.68 -0.014598 0.150749 2.69 -0.014504 0.150273 2.7 -0.014412 0.149800 2.71 -0.014320 0.149330 2.72 -0.014229 0.148863 2.73 -0.014139 0.148399 2.74 -0.014050 0.147938 2.75 -0.013962 0.147479 2.76 -0.013874 0.147024 2.77 -0.013788 0.146571 2.78 -0.013702 0.146121 2.79 -0.013617 0.145673 2.8 -0.013533 0.145229 2.81 -0.013449 0.144787 2.82 -0.013366 0.144348 2.83 -0.013285 0.143911 2.84 -0.013203 0.143477 2.85 -0.013123 0.143046 2.86 -0.013043 0.142617 2.87 -0.012964 0.142191 2.88 -0.012886 0.141768 2.89 -0.012808 0.141346 2.9 -0.012732 0.140928 2.91 -0.012656 0.140512 2.92 -0.012580 0.140098 2.93 -0.012505 0.139687 2.94 -0.012431 0.139278 2.95 -0.012358 0.138871 2.96 -0.012285 0.138467 2.97 -0.012213 0.138065 2.98 -0.012141 0.137666 2.99 -0.012070 0.137268 3 -0.012000 0.136873 3.01 -0.011930 0.136481 3.02 -0.011861 0.136090 3.03 -0.011793 0.135702 3.04 -0.011725 0.135316 3.05 -0.011658 0.134932 3.06 -0.011591 0.134550 3.07 -0.011525 0.134171 3.08 -0.011459 0.133794 3.09 -0.011394 0.133418 3.1 -0.011330 0.133045 3.11 -0.011266 0.132674 3.12 -0.011202 0.132305 3.13 -0.011140 0.131938 3.14 -0.011077 0.131573 3.15 -0.011015 0.131210 3.16 -0.010954 0.130849 3.17 -0.010893 0.130490 3.18 -0.010833 0.130133 3.19 -0.010773 0.129778 3.2 -0.010714 0.129425 3.21 -0.010655 0.129073 3.22 -0.010597 0.128724 3.23 -0.010539 0.128376 3.24 -0.010482 0.128031 3.25 -0.010425 0.127687 3.26 -0.010369 0.127345 3.27 -0.010313 0.127005 3.28 -0.010257 0.126667 3.29 -0.010202 0.126330 3.3 -0.010148 0.125995 3.31 -0.010093 0.125662 3.32 -0.010040 0.125331 3.33 -0.009986 0.125002 3.34 -0.009933 0.124674 3.35 -0.009881 0.124348 3.36 -0.009829 0.124024 3.37 -0.009777 0.123701 3.38 -0.009726 0.123380 3.39 -0.009675 0.123061 3.4 -0.009625 0.122743 3.41 -0.009575 0.122427 3.42 -0.009525 0.122112 3.43 -0.009476 0.121800 3.44 -0.009427 0.121488 3.45 -0.009379 0.121179 3.46 -0.009330 0.120871 3.47 -0.009283 0.120564 3.48 -0.009235 0.120259 3.49 -0.009188 0.119956 3.5 -0.009142 0.119654 3.51 -0.009095 0.119353 3.52 -0.009049 0.119054 3.53 -0.009004 0.118757 3.54 -0.008958 0.118461 3.55 -0.008914 0.118167 3.56 -0.008869 0.117874 3.57 -0.008825 0.117582 3.58 -0.008781 0.117292 3.59 -0.008737 0.117003 3.6 -0.008694 0.116716 3.61 -0.008651 0.116430 3.62 -0.008608 0.116146 3.63 -0.008566 0.115863 3.64 -0.008524 0.115581 3.65 -0.008482 0.115300 3.66 -0.008441 0.115021 3.67 -0.008400 0.114744 3.68 -0.008359 0.114467 3.69 -0.008319 0.114192 3.7 -0.008278 0.113919 3.71 -0.008238 0.113646 3.72 -0.008199 0.113375 3.73 -0.008159 0.113106 3.74 -0.008120 0.112837 3.75 -0.008082 0.112570 3.76 -0.008043 0.112304 3.77 -0.008005 0.112039 3.78 -0.007967 0.111776 3.79 -0.007929 0.111513 3.8 -0.007892 0.111252 3.81 -0.007855 0.110993 3.82 -0.007818 0.110734 3.83 -0.007781 0.110477 3.84 -0.007745 0.110220 3.85 -0.007709 0.109965 3.86 -0.007673 0.109711 3.87 -0.007637 0.109459 3.88 -0.007602 0.109207 3.89 -0.007567 0.108957 3.9 -0.007532 0.108708 3.91 -0.007497 0.108460 3.92 -0.007463 0.108213 3.93 -0.007429 0.107967 3.94 -0.007395 0.107722 3.95 -0.007361 0.107478 3.96 -0.007328 0.107236 3.97 -0.007295 0.106994 3.98 -0.007261 0.106754 3.99 -0.007229 0.106515 4 -0.007196 0.106277 4.01 -0.007164 0.106039 4.02 -0.007132 0.105803 4.03 -0.007100 0.105568 4.04 -0.007068 0.105334 4.05 -0.007037 0.105101 4.06 -0.007005 0.104869 4.07 -0.006974 0.104638 4.08 -0.006943 0.104409 4.09 -0.006913 0.104180 4.1 -0.006882 0.103952 4.11 -0.006852 0.103725 4.12 -0.006822 0.103499 4.13 -0.006792 0.103274 4.14 -0.006763 0.103050 4.15 -0.006733 0.102827 4.16 -0.006704 0.102605 4.17 -0.006675 0.102384 4.18 -0.006646 0.102164 4.19 -0.006617 0.101945 4.2 -0.006589 0.101726 4.21 -0.006560 0.101509 4.22 -0.006532 0.101293 4.23 -0.006504 0.101077 4.24 -0.006476 0.100863 4.25 -0.006449 0.100649 4.26 -0.006421 0.100436 4.27 -0.006394 0.100224 4.28 -0.006367 0.100013 4.29 -0.006340 0.099803 4.3 -0.006313 0.099594 4.31 -0.006287 0.099386 4.32 -0.006260 0.099178 4.33 -0.006234 0.098972 4.34 -0.006208 0.098766 4.35 -0.006182 0.098561 4.36 -0.006156 0.098357 4.37 -0.006131 0.098154 4.38 -0.006105 0.097951 4.39 -0.006080 0.097750 4.4 -0.006055 0.097549 4.41 -0.006030 0.097349 4.42 -0.006005 0.097150 4.43 -0.005981 0.096952 4.44 -0.005956 0.096755 4.45 -0.005932 0.096558 4.46 -0.005908 0.096362 4.47 -0.005883 0.096167 4.48 -0.005860 0.095973 4.49 -0.005836 0.095779 4.5 -0.005812 0.095587 4.51 -0.005789 0.095395 4.52 -0.005765 0.095204 4.53 -0.005742 0.095013 4.54 -0.005719 0.094823 4.55 -0.005696 0.094635 4.56 -0.005673 0.094446 4.57 -0.005651 0.094259 4.58 -0.005628 0.094072 4.59 -0.005606 0.093887 4.6 -0.005584 0.093701 4.61 -0.005562 0.093517 4.62 -0.005540 0.093333 4.63 -0.005518 0.093150 4.64 -0.005496 0.092968 4.65 -0.005475 0.092786 4.66 -0.005453 0.092605 4.67 -0.005432 0.092425 4.68 -0.005411 0.092246 4.69 -0.005389 0.092067 4.7 -0.005368 0.091889 4.71 -0.005348 0.091712 4.72 -0.005327 0.091535 4.73 -0.005306 0.091359 4.74 -0.005286 0.091183 4.75 -0.005266 0.091009 4.76 -0.005245 0.090835 4.77 -0.005225 0.090661 4.78 -0.005205 0.090489 4.79 -0.005185 0.090317 4.8 -0.005165 0.090145 4.81 -0.005146 0.089974 4.82 -0.005126 0.089804 4.83 -0.005107 0.089635 4.84 -0.005087 0.089466 4.85 -0.005068 0.089298 4.86 -0.005049 0.089130 4.87 -0.005030 0.088963 4.88 -0.005011 0.088797 4.89 -0.004992 0.088631 4.9 -0.004974 0.088466 4.91 -0.004955 0.088302 4.92 -0.004937 0.088138 4.93 -0.004918 0.087975 4.94 -0.004900 0.087812 4.95 -0.004882 0.087650 4.96 -0.004864 0.087489 4.97 -0.004846 0.087328 4.98 -0.004828 0.087168 4.99 -0.004810 0.087008 5 -0.004793 0.086849 5.01 -0.004775 0.086690 5.02 -0.004758 0.086533 5.03 -0.004740 0.086375 5.04 -0.004723 0.086218 5.05 -0.004706 0.086062 5.06 -0.004689 0.085907 5.07 -0.004672 0.085751 5.08 -0.004655 0.085597 5.09 -0.004638 0.085443 5.1 -0.004621 0.085290 5.11 -0.004604 0.085137 5.12 -0.004588 0.084984 5.13 -0.004571 0.084833 5.14 -0.004555 0.084681 5.15 -0.004539 0.084531 5.16 -0.004523 0.084380 5.17 -0.004506 0.084231 5.18 -0.004490 0.084082 5.19 -0.004475 0.083933 5.2 -0.004459 0.083785 5.21 -0.004443 0.083638 5.22 -0.004427 0.083491 5.23 -0.004412 0.083344 5.24 -0.004396 0.083198 5.25 -0.004381 0.083053 5.26 -0.004365 0.082908 5.27 -0.004350 0.082763 5.28 -0.004335 0.082619 5.29 -0.004320 0.082476 5.3 -0.004305 0.082333 5.31 -0.004290 0.082190 5.32 -0.004275 0.082048 5.33 -0.004260 0.081907 5.34 -0.004245 0.081766 5.35 -0.004231 0.081625 5.36 -0.004216 0.081485 5.37 -0.004202 0.081346 5.38 -0.004187 0.081207 5.39 -0.004173 0.081068 5.4 -0.004158 0.080930 5.41 -0.004144 0.080792 5.42 -0.004130 0.080655 5.43 -0.004116 0.080518 5.44 -0.004102 0.080382 5.45 -0.004088 0.080246 5.46 -0.004074 0.080111 5.47 -0.004061 0.079976 5.48 -0.004047 0.079842 5.49 -0.004033 0.079708 5.5 -0.004020 0.079574 5.51 -0.004006 0.079441 5.52 -0.003993 0.079308 5.53 -0.003979 0.079176 5.54 -0.003966 0.079044 5.55 -0.003953 0.078913 5.56 -0.003940 0.078782 5.57 -0.003927 0.078652 5.58 -0.003914 0.078522 5.59 -0.003901 0.078392 5.6 -0.003888 0.078263 5.61 -0.003875 0.078134 5.62 -0.003862 0.078006 5.63 -0.003849 0.077878 5.64 -0.003837 0.077750 5.65 -0.003824 0.077623 5.66 -0.003812 0.077497 5.67 -0.003799 0.077370 5.68 -0.003787 0.077244 5.69 -0.003774 0.077119 5.7 -0.003762 0.076994 5.71 -0.003750 0.076869 5.72 -0.003738 0.076745 5.73 -0.003726 0.076621 5.74 -0.003714 0.076498 5.75 -0.003702 0.076375 5.76 -0.003690 0.076252 5.77 -0.003678 0.076130 5.78 -0.003666 0.076008 5.79 -0.003654 0.075887 5.8 -0.003642 0.075766 5.81 -0.003631 0.075645 5.82 -0.003619 0.075525 5.83 -0.003608 0.075405 5.84 -0.003596 0.075285 5.85 -0.003585 0.075166 5.86 -0.003573 0.075047 5.87 -0.003562 0.074929 5.88 -0.003551 0.074811 5.89 -0.003540 0.074693 5.9 -0.003529 0.074576 5.91 -0.003517 0.074459 5.92 -0.003506 0.074343 5.93 -0.003495 0.074226 5.94 -0.003484 0.074110 5.95 -0.003474 0.073995 5.96 -0.003463 0.073880 5.97 -0.003452 0.073765 5.98 -0.003441 0.073651 5.99 -0.003430 0.073537 6 -0.003420 0.073423 6.01 -0.003409 0.073310 6.02 -0.003399 0.073197 6.03 -0.003388 0.073084 6.04 -0.003378 0.072972 6.05 -0.003367 0.072860 6.06 -0.003357 0.072748 6.07 -0.003347 0.072637 6.08 -0.003336 0.072526 6.09 -0.003326 0.072415 6.1 -0.003316 0.072305 6.11 -0.003306 0.072195 6.12 -0.003296 0.072086 6.13 -0.003286 0.071976 6.14 -0.003276 0.071867 6.15 -0.003266 0.071759 6.16 -0.003256 0.071651 6.17 -0.003246 0.071543 6.18 -0.003236 0.071435 6.19 -0.003227 0.071328 6.2 -0.003217 0.071221 6.21 -0.003207 0.071114 6.22 -0.003198 0.071008 6.23 -0.003188 0.070902 6.24 -0.003179 0.070796 6.25 -0.003169 0.070691 6.26 -0.003160 0.070586 6.27 -0.003150 0.070481 6.28 -0.003141 0.070376 6.29 -0.003132 0.070272 6.3 -0.003122 0.070168 6.31 -0.003113 0.070065 6.32 -0.003104 0.069962 6.33 -0.003095 0.069859 6.34 -0.003086 0.069756 6.35 -0.003076 0.069654 6.36 -0.003067 0.069552 6.37 -0.003058 0.069450 6.38 -0.003049 0.069349 6.39 -0.003041 0.069248 6.4 -0.003032 0.069147 6.41 -0.003023 0.069046 6.42 -0.003014 0.068946 6.43 -0.003005 0.068846 6.44 -0.002997 0.068746 6.45 -0.002988 0.068647 6.46 -0.002979 0.068548 6.47 -0.002971 0.068449 6.48 -0.002962 0.068351 6.49 -0.002953 0.068252 6.5 -0.002945 0.068154 6.51 -0.002936 0.068057 6.52 -0.002928 0.067959 6.53 -0.002920 0.067862 6.54 -0.002911 0.067765 6.55 -0.002903 0.067669 6.56 -0.002895 0.067573 6.57 -0.002886 0.067477 6.58 -0.002878 0.067381 6.59 -0.002870 0.067285 6.6 -0.002862 0.067190 6.61 -0.002854 0.067095 6.62 -0.002846 0.067001 6.63 -0.002838 0.066906 6.64 -0.002830 0.066812 6.65 -0.002822 0.066718 6.66 -0.002814 0.066625 6.67 -0.002806 0.066531 6.68 -0.002798 0.066438 6.69 -0.002790 0.066345 6.7 -0.002782 0.066253 6.71 -0.002775 0.066160 6.72 -0.002767 0.066068 6.73 -0.002759 0.065977 6.74 -0.002751 0.065885 6.75 -0.002744 0.065794 6.76 -0.002736 0.065703 6.77 -0.002729 0.065612 6.78 -0.002721 0.065521 6.79 -0.002714 0.065431 6.8 -0.002706 0.065341 6.81 -0.002699 0.065251 6.82 -0.002691 0.065162 6.83 -0.002684 0.065072 6.84 -0.002676 0.064983 6.85 -0.002669 0.064895 6.86 -0.002662 0.064806 6.87 -0.002654 0.064718 6.88 -0.002647 0.064630 6.89 -0.002640 0.064542 6.9 -0.002633 0.064454 6.91 -0.002626 0.064367 6.92 -0.002619 0.064280 6.93 -0.002611 0.064193 6.94 -0.002604 0.064106 6.95 -0.002597 0.064020 6.96 -0.002590 0.063934 6.97 -0.002583 0.063848 6.98 -0.002576 0.063762 6.99 -0.002569 0.063676 7 -0.002563 0.063591 7.01 -0.002556 0.063506 7.02 -0.002549 0.063421 7.03 -0.002542 0.063337 7.04 -0.002535 0.063252 7.05 -0.002528 0.063168 7.06 -0.002522 0.063084 7.07 -0.002515 0.063001 7.08 -0.002508 0.062917 7.09 -0.002502 0.062834 7.1 -0.002495 0.062751 7.11 -0.002488 0.062668 7.12 -0.002482 0.062585 7.13 -0.002475 0.062503 7.14 -0.002469 0.062421 7.15 -0.002462 0.062339 7.16 -0.002456 0.062257 7.17 -0.002449 0.062176 7.18 -0.002443 0.062094 7.19 -0.002437 0.062013 7.2 -0.002430 0.061932 7.21 -0.002424 0.061852 7.22 -0.002418 0.061771 7.23 -0.002411 0.061691 7.24 -0.002405 0.061611 7.25 -0.002399 0.061531 7.26 -0.002393 0.061451 7.27 -0.002386 0.061372 7.28 -0.002380 0.061293 7.29 -0.002374 0.061214 7.3 -0.002368 0.061135 7.31 -0.002362 0.061056 7.32 -0.002356 0.060978 7.33 -0.002350 0.060900 7.34 -0.002344 0.060822 7.35 -0.002338 0.060744 7.36 -0.002332 0.060666 7.37 -0.002326 0.060589 7.38 -0.002320 0.060512 7.39 -0.002314 0.060435 7.4 -0.002308 0.060358 7.41 -0.002302 0.060281 7.42 -0.002296 0.060205 7.43 -0.002290 0.060129 7.44 -0.002285 0.060053 7.45 -0.002279 0.059977 7.46 -0.002273 0.059901 7.47 -0.002267 0.059826 7.48 -0.002262 0.059750 7.49 -0.002256 0.059675 7.5 -0.002250 0.059600 7.51 -0.002244 0.059526 7.52 -0.002239 0.059451 7.53 -0.002233 0.059377 7.54 -0.002228 0.059303 7.55 -0.002222 0.059229 7.56 -0.002217 0.059155 7.57 -0.002211 0.059081 7.58 -0.002205 0.059008 7.59 -0.002200 0.058935 7.6 -0.002195 0.058862 7.61 -0.002189 0.058789 7.62 -0.002184 0.058716 7.63 -0.002178 0.058643 7.64 -0.002173 0.058571 7.65 -0.002168 0.058499 7.66 -0.002162 0.058427 7.67 -0.002157 0.058355 7.68 -0.002152 0.058284 7.69 -0.002146 0.058212 7.7 -0.002141 0.058141 7.71 -0.002136 0.058070 7.72 -0.002130 0.057999 7.73 -0.002125 0.057928 7.74 -0.002120 0.057858 7.75 -0.002115 0.057787 7.76 -0.002110 0.057717 7.77 -0.002105 0.057647 7.78 -0.002100 0.057577 7.79 -0.002094 0.057507 7.8 -0.002089 0.057438 7.81 -0.002084 0.057368 7.82 -0.002079 0.057299 7.83 -0.002074 0.057230 7.84 -0.002069 0.057161 7.85 -0.002064 0.057092 7.86 -0.002059 0.057024 7.87 -0.002054 0.056955 7.88 -0.002049 0.056887 7.89 -0.002044 0.056819 7.9 -0.002040 0.056751 7.91 -0.002035 0.056683 7.92 -0.002030 0.056616 7.93 -0.002025 0.056548 7.94 -0.002020 0.056481 7.95 -0.002015 0.056414 7.96 -0.002011 0.056347 7.97 -0.002006 0.056280 7.98 -0.002001 0.056214 7.99 -0.001996 0.056147 8 -0.001992 0.056081 8.01 -0.001987 0.056015 8.02 -0.001982 0.055949 8.03 -0.001977 0.055883 8.04 -0.001973 0.055817 8.05 -0.001968 0.055752 8.06 -0.001964 0.055686 8.07 -0.001959 0.055621 8.08 -0.001954 0.055556 8.09 -0.001950 0.055491 8.1 -0.001945 0.055426 8.11 -0.001941 0.055362 8.12 -0.001936 0.055297 8.13 -0.001932 0.055233 8.14 -0.001927 0.055169 8.15 -0.001923 0.055105 8.16 -0.001918 0.055041 8.17 -0.001914 0.054977 8.18 -0.001909 0.054913 8.19 -0.001905 0.054850 8.2 -0.001900 0.054787 8.21 -0.001896 0.054724 8.22 -0.001892 0.054661 8.23 -0.001887 0.054598 8.24 -0.001883 0.054535 8.25 -0.001879 0.054473 8.26 -0.001874 0.054410 8.27 -0.001870 0.054348 8.28 -0.001866 0.054286 8.29 -0.001862 0.054224 8.3 -0.001857 0.054162 8.31 -0.001853 0.054100 8.32 -0.001849 0.054039 8.33 -0.001845 0.053977 8.34 -0.001840 0.053916 8.35 -0.001836 0.053855 8.36 -0.001832 0.053794 8.37 -0.001828 0.053733 8.38 -0.001824 0.053672 8.39 -0.001820 0.053611 8.4 -0.001815 0.053551 8.41 -0.001811 0.053491 8.42 -0.001807 0.053430 8.43 -0.001803 0.053370 8.44 -0.001799 0.053311 8.45 -0.001795 0.053251 8.46 -0.001791 0.053191 8.47 -0.001787 0.053132 8.48 -0.001783 0.053072 8.49 -0.001779 0.053013 8.5 -0.001775 0.052954 8.51 -0.001771 0.052895 8.52 -0.001767 0.052836 8.53 -0.001763 0.052777 8.54 -0.001759 0.052719 8.55 -0.001755 0.052660 8.56 -0.001752 0.052602 8.57 -0.001748 0.052544 8.58 -0.001744 0.052486 8.59 -0.001740 0.052428 8.6 -0.001736 0.052370 8.61 -0.001732 0.052312 8.62 -0.001728 0.052255 8.63 -0.001725 0.052197 8.64 -0.001721 0.052140 8.65 -0.001717 0.052083 8.66 -0.001713 0.052026 8.67 -0.001710 0.051969 8.68 -0.001706 0.051912 8.69 -0.001702 0.051855 8.7 -0.001698 0.051798 8.71 -0.001695 0.051742 8.72 -0.001691 0.051686 8.73 -0.001687 0.051630 8.74 -0.001684 0.051573 8.75 -0.001680 0.051517 8.76 -0.001676 0.051462 8.77 -0.001673 0.051406 8.78 -0.001669 0.051350 8.79 -0.001665 0.051295 8.8 -0.001662 0.051240 8.81 -0.001658 0.051184 8.82 -0.001655 0.051129 8.83 -0.001651 0.051074 8.84 -0.001648 0.051019 8.85 -0.001644 0.050965 8.86 -0.001640 0.050910 8.87 -0.001637 0.050855 8.88 -0.001633 0.050801 8.89 -0.001630 0.050747 8.9 -0.001626 0.050692 8.91 -0.001623 0.050638 8.92 -0.001619 0.050584 8.93 -0.001616 0.050531 8.94 -0.001613 0.050477 8.95 -0.001609 0.050423 8.96 -0.001606 0.050370 8.97 -0.001602 0.050316 8.98 -0.001599 0.050263 8.99 -0.001596 0.050210 9 -0.001592 0.050157 9.01 -0.001589 0.050104 9.02 -0.001585 0.050051 9.03 -0.001582 0.049999 9.04 -0.001579 0.049946 9.05 -0.001575 0.049894 9.06 -0.001572 0.049841 9.07 -0.001569 0.049789 9.08 -0.001566 0.049737 9.09 -0.001562 0.049685 9.1 -0.001559 0.049633 9.11 -0.001556 0.049581 9.12 -0.001552 0.049529 9.13 -0.001549 0.049478 9.14 -0.001546 0.049426 9.15 -0.001543 0.049375 9.16 -0.001540 0.049323 9.17 -0.001536 0.049272 9.18 -0.001533 0.049221 9.19 -0.001530 0.049170 9.2 -0.001527 0.049119 9.21 -0.001524 0.049069 9.22 -0.001521 0.049018 9.23 -0.001517 0.048967 9.24 -0.001514 0.048917 9.25 -0.001511 0.048867 9.26 -0.001508 0.048816 9.27 -0.001505 0.048766 9.28 -0.001502 0.048716 9.29 -0.001499 0.048666 9.3 -0.001496 0.048616 9.31 -0.001493 0.048567 9.32 -0.001490 0.048517 9.33 -0.001486 0.048468 9.34 -0.001483 0.048418 9.35 -0.001480 0.048369 9.36 -0.001477 0.048320 9.37 -0.001474 0.048270 9.38 -0.001471 0.048221 9.39 -0.001468 0.048172 9.4 -0.001465 0.048124 9.41 -0.001462 0.048075 9.42 -0.001459 0.048026 9.43 -0.001457 0.047978 9.44 -0.001454 0.047929 9.45 -0.001451 0.047881 9.46 -0.001448 0.047833 9.47 -0.001445 0.047785 9.48 -0.001442 0.047737 9.49 -0.001439 0.047689 9.5 -0.001436 0.047641 9.51 -0.001433 0.047593 9.52 -0.001430 0.047545 9.53 -0.001427 0.047498 9.54 -0.001425 0.047450 9.55 -0.001422 0.047403 9.56 -0.001419 0.047356 9.57 -0.001416 0.047309 9.58 -0.001413 0.047261 9.59 -0.001410 0.047214 9.6 -0.001408 0.047168 9.61 -0.001405 0.047121 9.62 -0.001402 0.047074 9.63 -0.001399 0.047027 9.64 -0.001397 0.046981 9.65 -0.001394 0.046934 9.66 -0.001391 0.046888 9.67 -0.001388 0.046842 9.68 -0.001385 0.046796 9.69 -0.001383 0.046750 9.7 -0.001380 0.046704 9.71 -0.001377 0.046658 9.72 -0.001375 0.046612 9.73 -0.001372 0.046566 9.74 -0.001369 0.046521 9.75 -0.001367 0.046475 9.76 -0.001364 0.046430 9.77 -0.001361 0.046384 9.78 -0.001359 0.046339 9.79 -0.001356 0.046294 9.8 -0.001353 0.046249 9.81 -0.001351 0.046204 9.82 -0.001348 0.046159 9.83 -0.001345 0.046114 9.84 -0.001343 0.046069 9.85 -0.001340 0.046025 9.86 -0.001338 0.045980 9.87 -0.001335 0.045936 9.88 -0.001332 0.045891 9.89 -0.001330 0.045847 9.9 -0.001327 0.045803 9.91 -0.001325 0.045758 9.92 -0.001322 0.045714 9.93 -0.001320 0.045670 9.94 -0.001317 0.045627 9.95 -0.001314 0.045583 9.96 -0.001312 0.045539 9.97 -0.001309 0.045495 9.98 -0.001307 0.045452 9.99 -0.001304 0.045408 dmrgpp-6.02/TestSuite/oracles/data3003.cf000066400000000000000000001452551414604301300200540ustar00rootroot00000000000000-10 -0.001302 -0.045365 -9.99 -0.001304 -0.045408 -9.98 -0.001307 -0.045452 -9.97 -0.001309 -0.045495 -9.96 -0.001312 -0.045539 -9.95 -0.001314 -0.045583 -9.94 -0.001317 -0.045627 -9.93 -0.001320 -0.045670 -9.92 -0.001322 -0.045714 -9.91 -0.001325 -0.045758 -9.9 -0.001327 -0.045803 -9.89 -0.001330 -0.045847 -9.88 -0.001332 -0.045891 -9.87 -0.001335 -0.045936 -9.86 -0.001338 -0.045980 -9.85 -0.001340 -0.046025 -9.84 -0.001343 -0.046069 -9.83 -0.001345 -0.046114 -9.82 -0.001348 -0.046159 -9.81 -0.001351 -0.046204 -9.8 -0.001353 -0.046249 -9.79 -0.001356 -0.046294 -9.78 -0.001359 -0.046339 -9.77 -0.001361 -0.046384 -9.76 -0.001364 -0.046430 -9.75 -0.001367 -0.046475 -9.74 -0.001369 -0.046521 -9.73 -0.001372 -0.046566 -9.72 -0.001375 -0.046612 -9.71 -0.001377 -0.046658 -9.7 -0.001380 -0.046704 -9.69 -0.001383 -0.046750 -9.68 -0.001385 -0.046796 -9.67 -0.001388 -0.046842 -9.66 -0.001391 -0.046888 -9.65 -0.001394 -0.046934 -9.64 -0.001397 -0.046981 -9.63 -0.001399 -0.047027 -9.62 -0.001402 -0.047074 -9.61 -0.001405 -0.047121 -9.6 -0.001408 -0.047168 -9.59 -0.001410 -0.047214 -9.58 -0.001413 -0.047261 -9.57 -0.001416 -0.047309 -9.56 -0.001419 -0.047356 -9.55 -0.001422 -0.047403 -9.54 -0.001425 -0.047450 -9.53 -0.001427 -0.047498 -9.52 -0.001430 -0.047545 -9.51 -0.001433 -0.047593 -9.5 -0.001436 -0.047641 -9.49 -0.001439 -0.047689 -9.48 -0.001442 -0.047737 -9.47 -0.001445 -0.047785 -9.46 -0.001448 -0.047833 -9.45 -0.001451 -0.047881 -9.44 -0.001454 -0.047929 -9.43 -0.001457 -0.047978 -9.42 -0.001459 -0.048026 -9.41 -0.001462 -0.048075 -9.4 -0.001465 -0.048124 -9.39 -0.001468 -0.048172 -9.38 -0.001471 -0.048221 -9.37 -0.001474 -0.048270 -9.36 -0.001477 -0.048320 -9.35 -0.001480 -0.048369 -9.34 -0.001483 -0.048418 -9.33 -0.001486 -0.048468 -9.32 -0.001490 -0.048517 -9.31 -0.001493 -0.048567 -9.3 -0.001496 -0.048616 -9.29 -0.001499 -0.048666 -9.28 -0.001502 -0.048716 -9.27 -0.001505 -0.048766 -9.26 -0.001508 -0.048816 -9.25 -0.001511 -0.048867 -9.24 -0.001514 -0.048917 -9.23 -0.001517 -0.048967 -9.22 -0.001521 -0.049018 -9.21 -0.001524 -0.049069 -9.2 -0.001527 -0.049119 -9.19 -0.001530 -0.049170 -9.18 -0.001533 -0.049221 -9.17 -0.001536 -0.049272 -9.16 -0.001540 -0.049323 -9.15 -0.001543 -0.049375 -9.14 -0.001546 -0.049426 -9.13 -0.001549 -0.049478 -9.12 -0.001552 -0.049529 -9.11 -0.001556 -0.049581 -9.1 -0.001559 -0.049633 -9.09 -0.001562 -0.049685 -9.08 -0.001566 -0.049737 -9.07 -0.001569 -0.049789 -9.06 -0.001572 -0.049841 -9.05 -0.001575 -0.049894 -9.04 -0.001579 -0.049946 -9.03 -0.001582 -0.049999 -9.02 -0.001585 -0.050051 -9.01 -0.001589 -0.050104 -9 -0.001592 -0.050157 -8.99 -0.001596 -0.050210 -8.98 -0.001599 -0.050263 -8.97 -0.001602 -0.050316 -8.96 -0.001606 -0.050370 -8.95 -0.001609 -0.050423 -8.94 -0.001613 -0.050477 -8.93 -0.001616 -0.050531 -8.92 -0.001619 -0.050584 -8.91 -0.001623 -0.050638 -8.9 -0.001626 -0.050692 -8.89 -0.001630 -0.050747 -8.88 -0.001633 -0.050801 -8.87 -0.001637 -0.050855 -8.86 -0.001640 -0.050910 -8.85 -0.001644 -0.050965 -8.84 -0.001648 -0.051019 -8.83 -0.001651 -0.051074 -8.82 -0.001655 -0.051129 -8.81 -0.001658 -0.051184 -8.8 -0.001662 -0.051240 -8.79 -0.001665 -0.051295 -8.78 -0.001669 -0.051350 -8.77 -0.001673 -0.051406 -8.76 -0.001676 -0.051462 -8.75 -0.001680 -0.051517 -8.74 -0.001684 -0.051573 -8.73 -0.001687 -0.051630 -8.72 -0.001691 -0.051686 -8.71 -0.001695 -0.051742 -8.7 -0.001698 -0.051798 -8.69 -0.001702 -0.051855 -8.68 -0.001706 -0.051912 -8.67 -0.001710 -0.051969 -8.66 -0.001713 -0.052025 -8.65 -0.001717 -0.052083 -8.64 -0.001721 -0.052140 -8.63 -0.001725 -0.052197 -8.62 -0.001728 -0.052255 -8.61 -0.001732 -0.052312 -8.6 -0.001736 -0.052370 -8.59 -0.001740 -0.052428 -8.58 -0.001744 -0.052486 -8.57 -0.001748 -0.052544 -8.56 -0.001752 -0.052602 -8.55 -0.001755 -0.052660 -8.54 -0.001759 -0.052719 -8.53 -0.001763 -0.052777 -8.52 -0.001767 -0.052836 -8.51 -0.001771 -0.052895 -8.5 -0.001775 -0.052954 -8.49 -0.001779 -0.053013 -8.48 -0.001783 -0.053072 -8.47 -0.001787 -0.053132 -8.46 -0.001791 -0.053191 -8.45 -0.001795 -0.053251 -8.44 -0.001799 -0.053311 -8.43 -0.001803 -0.053370 -8.42 -0.001807 -0.053430 -8.41 -0.001811 -0.053491 -8.4 -0.001815 -0.053551 -8.39 -0.001820 -0.053611 -8.38 -0.001824 -0.053672 -8.37 -0.001828 -0.053733 -8.36 -0.001832 -0.053794 -8.35 -0.001836 -0.053855 -8.34 -0.001840 -0.053916 -8.33 -0.001845 -0.053977 -8.32 -0.001849 -0.054039 -8.31 -0.001853 -0.054100 -8.3 -0.001857 -0.054162 -8.29 -0.001862 -0.054224 -8.28 -0.001866 -0.054286 -8.27 -0.001870 -0.054348 -8.26 -0.001874 -0.054410 -8.25 -0.001879 -0.054472 -8.24 -0.001883 -0.054535 -8.23 -0.001887 -0.054598 -8.22 -0.001892 -0.054661 -8.21 -0.001896 -0.054724 -8.2 -0.001900 -0.054787 -8.19 -0.001905 -0.054850 -8.18 -0.001909 -0.054913 -8.17 -0.001914 -0.054977 -8.16 -0.001918 -0.055041 -8.15 -0.001923 -0.055105 -8.14 -0.001927 -0.055169 -8.13 -0.001932 -0.055233 -8.12 -0.001936 -0.055297 -8.11 -0.001941 -0.055362 -8.1 -0.001945 -0.055426 -8.09 -0.001950 -0.055491 -8.08 -0.001954 -0.055556 -8.07 -0.001959 -0.055621 -8.06 -0.001964 -0.055686 -8.05 -0.001968 -0.055752 -8.04 -0.001973 -0.055817 -8.03 -0.001977 -0.055883 -8.02 -0.001982 -0.055949 -8.01 -0.001987 -0.056015 -8 -0.001992 -0.056081 -7.99 -0.001996 -0.056147 -7.98 -0.002001 -0.056214 -7.97 -0.002006 -0.056280 -7.96 -0.002011 -0.056347 -7.95 -0.002015 -0.056414 -7.94 -0.002020 -0.056481 -7.93 -0.002025 -0.056548 -7.92 -0.002030 -0.056616 -7.91 -0.002035 -0.056683 -7.9 -0.002040 -0.056751 -7.89 -0.002044 -0.056819 -7.88 -0.002049 -0.056887 -7.87 -0.002054 -0.056955 -7.86 -0.002059 -0.057024 -7.85 -0.002064 -0.057092 -7.84 -0.002069 -0.057161 -7.83 -0.002074 -0.057230 -7.82 -0.002079 -0.057299 -7.81 -0.002084 -0.057368 -7.8 -0.002089 -0.057438 -7.79 -0.002094 -0.057507 -7.78 -0.002100 -0.057577 -7.77 -0.002105 -0.057647 -7.76 -0.002110 -0.057717 -7.75 -0.002115 -0.057787 -7.74 -0.002120 -0.057857 -7.73 -0.002125 -0.057928 -7.72 -0.002130 -0.057999 -7.71 -0.002136 -0.058070 -7.7 -0.002141 -0.058141 -7.69 -0.002146 -0.058212 -7.68 -0.002152 -0.058284 -7.67 -0.002157 -0.058355 -7.66 -0.002162 -0.058427 -7.65 -0.002168 -0.058499 -7.64 -0.002173 -0.058571 -7.63 -0.002178 -0.058643 -7.62 -0.002184 -0.058716 -7.61 -0.002189 -0.058789 -7.6 -0.002195 -0.058862 -7.59 -0.002200 -0.058935 -7.58 -0.002205 -0.059008 -7.57 -0.002211 -0.059081 -7.56 -0.002217 -0.059155 -7.55 -0.002222 -0.059229 -7.54 -0.002228 -0.059303 -7.53 -0.002233 -0.059377 -7.52 -0.002239 -0.059451 -7.51 -0.002244 -0.059526 -7.5 -0.002250 -0.059600 -7.49 -0.002256 -0.059675 -7.48 -0.002262 -0.059750 -7.47 -0.002267 -0.059826 -7.46 -0.002273 -0.059901 -7.45 -0.002279 -0.059977 -7.44 -0.002285 -0.060053 -7.43 -0.002290 -0.060129 -7.42 -0.002296 -0.060205 -7.41 -0.002302 -0.060281 -7.4 -0.002308 -0.060358 -7.39 -0.002314 -0.060435 -7.38 -0.002320 -0.060512 -7.37 -0.002326 -0.060589 -7.36 -0.002332 -0.060666 -7.35 -0.002338 -0.060744 -7.34 -0.002344 -0.060822 -7.33 -0.002350 -0.060900 -7.32 -0.002356 -0.060978 -7.31 -0.002362 -0.061056 -7.3 -0.002368 -0.061135 -7.29 -0.002374 -0.061214 -7.28 -0.002380 -0.061293 -7.27 -0.002386 -0.061372 -7.26 -0.002393 -0.061451 -7.25 -0.002399 -0.061531 -7.24 -0.002405 -0.061611 -7.23 -0.002411 -0.061691 -7.22 -0.002418 -0.061771 -7.21 -0.002424 -0.061852 -7.2 -0.002430 -0.061932 -7.19 -0.002437 -0.062013 -7.18 -0.002443 -0.062094 -7.17 -0.002449 -0.062176 -7.16 -0.002456 -0.062257 -7.15 -0.002462 -0.062339 -7.14 -0.002469 -0.062421 -7.13 -0.002475 -0.062503 -7.12 -0.002482 -0.062585 -7.11 -0.002488 -0.062668 -7.1 -0.002495 -0.062751 -7.09 -0.002502 -0.062834 -7.08 -0.002508 -0.062917 -7.07 -0.002515 -0.063001 -7.06 -0.002522 -0.063084 -7.05 -0.002528 -0.063168 -7.04 -0.002535 -0.063252 -7.03 -0.002542 -0.063337 -7.02 -0.002549 -0.063421 -7.01 -0.002556 -0.063506 -7 -0.002563 -0.063591 -6.99 -0.002569 -0.063676 -6.98 -0.002576 -0.063762 -6.97 -0.002583 -0.063848 -6.96 -0.002590 -0.063934 -6.95 -0.002597 -0.064020 -6.94 -0.002604 -0.064106 -6.93 -0.002611 -0.064193 -6.92 -0.002619 -0.064280 -6.91 -0.002626 -0.064367 -6.9 -0.002633 -0.064454 -6.89 -0.002640 -0.064542 -6.88 -0.002647 -0.064630 -6.87 -0.002654 -0.064718 -6.86 -0.002662 -0.064806 -6.85 -0.002669 -0.064895 -6.84 -0.002676 -0.064983 -6.83 -0.002684 -0.065072 -6.82 -0.002691 -0.065162 -6.81 -0.002699 -0.065251 -6.8 -0.002706 -0.065341 -6.79 -0.002714 -0.065431 -6.78 -0.002721 -0.065521 -6.77 -0.002729 -0.065612 -6.76 -0.002736 -0.065703 -6.75 -0.002744 -0.065794 -6.74 -0.002751 -0.065885 -6.73 -0.002759 -0.065977 -6.72 -0.002767 -0.066068 -6.71 -0.002775 -0.066160 -6.7 -0.002782 -0.066253 -6.69 -0.002790 -0.066345 -6.68 -0.002798 -0.066438 -6.67 -0.002806 -0.066531 -6.66 -0.002814 -0.066625 -6.65 -0.002822 -0.066718 -6.64 -0.002830 -0.066812 -6.63 -0.002838 -0.066906 -6.62 -0.002846 -0.067001 -6.61 -0.002854 -0.067095 -6.6 -0.002862 -0.067190 -6.59 -0.002870 -0.067285 -6.58 -0.002878 -0.067381 -6.57 -0.002886 -0.067477 -6.56 -0.002895 -0.067573 -6.55 -0.002903 -0.067669 -6.54 -0.002911 -0.067765 -6.53 -0.002920 -0.067862 -6.52 -0.002928 -0.067959 -6.51 -0.002936 -0.068057 -6.5 -0.002945 -0.068154 -6.49 -0.002953 -0.068252 -6.48 -0.002962 -0.068351 -6.47 -0.002971 -0.068449 -6.46 -0.002979 -0.068548 -6.45 -0.002988 -0.068647 -6.44 -0.002997 -0.068746 -6.43 -0.003005 -0.068846 -6.42 -0.003014 -0.068946 -6.41 -0.003023 -0.069046 -6.4 -0.003032 -0.069147 -6.39 -0.003041 -0.069248 -6.38 -0.003049 -0.069349 -6.37 -0.003058 -0.069450 -6.36 -0.003067 -0.069552 -6.35 -0.003076 -0.069654 -6.34 -0.003086 -0.069756 -6.33 -0.003095 -0.069859 -6.32 -0.003104 -0.069962 -6.31 -0.003113 -0.070065 -6.3 -0.003122 -0.070168 -6.29 -0.003132 -0.070272 -6.28 -0.003141 -0.070376 -6.27 -0.003150 -0.070481 -6.26 -0.003160 -0.070586 -6.25 -0.003169 -0.070691 -6.24 -0.003179 -0.070796 -6.23 -0.003188 -0.070902 -6.22 -0.003198 -0.071008 -6.21 -0.003207 -0.071114 -6.2 -0.003217 -0.071221 -6.19 -0.003227 -0.071328 -6.18 -0.003236 -0.071435 -6.17 -0.003246 -0.071543 -6.16 -0.003256 -0.071651 -6.15 -0.003266 -0.071759 -6.14 -0.003276 -0.071867 -6.13 -0.003286 -0.071976 -6.12 -0.003296 -0.072086 -6.11 -0.003306 -0.072195 -6.1 -0.003316 -0.072305 -6.09 -0.003326 -0.072415 -6.08 -0.003336 -0.072526 -6.07 -0.003347 -0.072637 -6.06 -0.003357 -0.072748 -6.05 -0.003367 -0.072860 -6.04 -0.003378 -0.072972 -6.03 -0.003388 -0.073084 -6.02 -0.003399 -0.073197 -6.01 -0.003409 -0.073310 -6 -0.003420 -0.073423 -5.99 -0.003430 -0.073537 -5.98 -0.003441 -0.073651 -5.97 -0.003452 -0.073765 -5.96 -0.003463 -0.073880 -5.95 -0.003474 -0.073995 -5.94 -0.003484 -0.074110 -5.93 -0.003495 -0.074226 -5.92 -0.003506 -0.074342 -5.91 -0.003517 -0.074459 -5.9 -0.003529 -0.074576 -5.89 -0.003540 -0.074693 -5.88 -0.003551 -0.074811 -5.87 -0.003562 -0.074929 -5.86 -0.003573 -0.075047 -5.85 -0.003585 -0.075166 -5.84 -0.003596 -0.075285 -5.83 -0.003608 -0.075405 -5.82 -0.003619 -0.075525 -5.81 -0.003631 -0.075645 -5.8 -0.003642 -0.075766 -5.79 -0.003654 -0.075887 -5.78 -0.003666 -0.076008 -5.77 -0.003678 -0.076130 -5.76 -0.003690 -0.076252 -5.75 -0.003702 -0.076375 -5.74 -0.003714 -0.076498 -5.73 -0.003726 -0.076621 -5.72 -0.003738 -0.076745 -5.71 -0.003750 -0.076869 -5.7 -0.003762 -0.076994 -5.69 -0.003774 -0.077119 -5.68 -0.003787 -0.077244 -5.67 -0.003799 -0.077370 -5.66 -0.003812 -0.077497 -5.65 -0.003824 -0.077623 -5.64 -0.003837 -0.077750 -5.63 -0.003849 -0.077878 -5.62 -0.003862 -0.078006 -5.61 -0.003875 -0.078134 -5.6 -0.003888 -0.078263 -5.59 -0.003901 -0.078392 -5.58 -0.003914 -0.078522 -5.57 -0.003927 -0.078652 -5.56 -0.003940 -0.078782 -5.55 -0.003953 -0.078913 -5.54 -0.003966 -0.079044 -5.53 -0.003979 -0.079176 -5.52 -0.003993 -0.079308 -5.51 -0.004006 -0.079441 -5.5 -0.004020 -0.079574 -5.49 -0.004033 -0.079708 -5.48 -0.004047 -0.079842 -5.47 -0.004061 -0.079976 -5.46 -0.004074 -0.080111 -5.45 -0.004088 -0.080246 -5.44 -0.004102 -0.080382 -5.43 -0.004116 -0.080518 -5.42 -0.004130 -0.080655 -5.41 -0.004144 -0.080792 -5.4 -0.004158 -0.080930 -5.39 -0.004173 -0.081068 -5.38 -0.004187 -0.081207 -5.37 -0.004202 -0.081346 -5.36 -0.004216 -0.081485 -5.35 -0.004231 -0.081625 -5.34 -0.004245 -0.081766 -5.33 -0.004260 -0.081907 -5.32 -0.004275 -0.082048 -5.31 -0.004290 -0.082190 -5.3 -0.004305 -0.082333 -5.29 -0.004320 -0.082476 -5.28 -0.004335 -0.082619 -5.27 -0.004350 -0.082763 -5.26 -0.004365 -0.082908 -5.25 -0.004381 -0.083053 -5.24 -0.004396 -0.083198 -5.23 -0.004412 -0.083344 -5.22 -0.004427 -0.083491 -5.21 -0.004443 -0.083638 -5.2 -0.004459 -0.083785 -5.19 -0.004475 -0.083933 -5.18 -0.004490 -0.084082 -5.17 -0.004506 -0.084231 -5.16 -0.004523 -0.084380 -5.15 -0.004539 -0.084531 -5.14 -0.004555 -0.084681 -5.13 -0.004571 -0.084833 -5.12 -0.004588 -0.084984 -5.11 -0.004604 -0.085137 -5.1 -0.004621 -0.085290 -5.09 -0.004638 -0.085443 -5.08 -0.004655 -0.085597 -5.07 -0.004672 -0.085751 -5.06 -0.004689 -0.085907 -5.05 -0.004706 -0.086062 -5.04 -0.004723 -0.086218 -5.03 -0.004740 -0.086375 -5.02 -0.004758 -0.086533 -5.01 -0.004775 -0.086690 -5 -0.004793 -0.086849 -4.99 -0.004810 -0.087008 -4.98 -0.004828 -0.087168 -4.97 -0.004846 -0.087328 -4.96 -0.004864 -0.087489 -4.95 -0.004882 -0.087650 -4.94 -0.004900 -0.087812 -4.93 -0.004918 -0.087975 -4.92 -0.004937 -0.088138 -4.91 -0.004955 -0.088302 -4.9 -0.004974 -0.088466 -4.89 -0.004992 -0.088631 -4.88 -0.005011 -0.088797 -4.87 -0.005030 -0.088963 -4.86 -0.005049 -0.089130 -4.85 -0.005068 -0.089298 -4.84 -0.005087 -0.089466 -4.83 -0.005107 -0.089635 -4.82 -0.005126 -0.089804 -4.81 -0.005146 -0.089974 -4.8 -0.005165 -0.090145 -4.79 -0.005185 -0.090317 -4.78 -0.005205 -0.090489 -4.77 -0.005225 -0.090661 -4.76 -0.005245 -0.090835 -4.75 -0.005266 -0.091009 -4.74 -0.005286 -0.091183 -4.73 -0.005306 -0.091359 -4.72 -0.005327 -0.091535 -4.71 -0.005348 -0.091712 -4.7 -0.005368 -0.091889 -4.69 -0.005389 -0.092067 -4.68 -0.005411 -0.092246 -4.67 -0.005432 -0.092425 -4.66 -0.005453 -0.092605 -4.65 -0.005475 -0.092786 -4.64 -0.005496 -0.092968 -4.63 -0.005518 -0.093150 -4.62 -0.005540 -0.093333 -4.61 -0.005562 -0.093517 -4.6 -0.005584 -0.093701 -4.59 -0.005606 -0.093887 -4.58 -0.005628 -0.094072 -4.57 -0.005651 -0.094259 -4.56 -0.005673 -0.094446 -4.55 -0.005696 -0.094635 -4.54 -0.005719 -0.094823 -4.53 -0.005742 -0.095013 -4.52 -0.005765 -0.095204 -4.51 -0.005789 -0.095395 -4.5 -0.005812 -0.095587 -4.49 -0.005836 -0.095779 -4.48 -0.005860 -0.095973 -4.47 -0.005883 -0.096167 -4.46 -0.005908 -0.096362 -4.45 -0.005932 -0.096558 -4.44 -0.005956 -0.096755 -4.43 -0.005981 -0.096952 -4.42 -0.006005 -0.097150 -4.41 -0.006030 -0.097349 -4.4 -0.006055 -0.097549 -4.39 -0.006080 -0.097750 -4.38 -0.006105 -0.097951 -4.37 -0.006131 -0.098154 -4.36 -0.006156 -0.098357 -4.35 -0.006182 -0.098561 -4.34 -0.006208 -0.098766 -4.33 -0.006234 -0.098972 -4.32 -0.006260 -0.099178 -4.31 -0.006287 -0.099386 -4.3 -0.006313 -0.099594 -4.29 -0.006340 -0.099803 -4.28 -0.006367 -0.100013 -4.27 -0.006394 -0.100224 -4.26 -0.006421 -0.100436 -4.25 -0.006449 -0.100649 -4.24 -0.006476 -0.100863 -4.23 -0.006504 -0.101077 -4.22 -0.006532 -0.101293 -4.21 -0.006560 -0.101509 -4.2 -0.006589 -0.101726 -4.19 -0.006617 -0.101945 -4.18 -0.006646 -0.102164 -4.17 -0.006675 -0.102384 -4.16 -0.006704 -0.102605 -4.15 -0.006733 -0.102827 -4.14 -0.006763 -0.103050 -4.13 -0.006792 -0.103274 -4.12 -0.006822 -0.103499 -4.11 -0.006852 -0.103725 -4.1 -0.006882 -0.103952 -4.09 -0.006913 -0.104180 -4.08 -0.006943 -0.104409 -4.07 -0.006974 -0.104638 -4.06 -0.007005 -0.104869 -4.05 -0.007037 -0.105101 -4.04 -0.007068 -0.105334 -4.03 -0.007100 -0.105568 -4.02 -0.007132 -0.105803 -4.01 -0.007164 -0.106039 -4 -0.007196 -0.106277 -3.99 -0.007229 -0.106515 -3.98 -0.007261 -0.106754 -3.97 -0.007294 -0.106994 -3.96 -0.007328 -0.107236 -3.95 -0.007361 -0.107478 -3.94 -0.007395 -0.107722 -3.93 -0.007429 -0.107967 -3.92 -0.007463 -0.108213 -3.91 -0.007497 -0.108460 -3.9 -0.007532 -0.108708 -3.89 -0.007567 -0.108957 -3.88 -0.007602 -0.109207 -3.87 -0.007637 -0.109459 -3.86 -0.007673 -0.109711 -3.85 -0.007709 -0.109965 -3.84 -0.007745 -0.110220 -3.83 -0.007781 -0.110476 -3.82 -0.007818 -0.110734 -3.81 -0.007855 -0.110992 -3.8 -0.007892 -0.111252 -3.79 -0.007929 -0.111513 -3.78 -0.007967 -0.111776 -3.77 -0.008005 -0.112039 -3.76 -0.008043 -0.112304 -3.75 -0.008082 -0.112570 -3.74 -0.008120 -0.112837 -3.73 -0.008159 -0.113106 -3.72 -0.008199 -0.113375 -3.71 -0.008238 -0.113646 -3.7 -0.008278 -0.113919 -3.69 -0.008319 -0.114192 -3.68 -0.008359 -0.114467 -3.67 -0.008400 -0.114744 -3.66 -0.008441 -0.115021 -3.65 -0.008482 -0.115300 -3.64 -0.008524 -0.115581 -3.63 -0.008566 -0.115863 -3.62 -0.008608 -0.116146 -3.61 -0.008651 -0.116430 -3.6 -0.008694 -0.116716 -3.59 -0.008737 -0.117003 -3.58 -0.008781 -0.117292 -3.57 -0.008825 -0.117582 -3.56 -0.008869 -0.117874 -3.55 -0.008914 -0.118167 -3.54 -0.008958 -0.118461 -3.53 -0.009004 -0.118757 -3.52 -0.009049 -0.119054 -3.51 -0.009095 -0.119353 -3.5 -0.009142 -0.119654 -3.49 -0.009188 -0.119956 -3.48 -0.009235 -0.120259 -3.47 -0.009283 -0.120564 -3.46 -0.009330 -0.120871 -3.45 -0.009379 -0.121179 -3.44 -0.009427 -0.121488 -3.43 -0.009476 -0.121800 -3.42 -0.009525 -0.122112 -3.41 -0.009575 -0.122427 -3.4 -0.009625 -0.122743 -3.39 -0.009675 -0.123061 -3.38 -0.009726 -0.123380 -3.37 -0.009777 -0.123701 -3.36 -0.009829 -0.124024 -3.35 -0.009881 -0.124348 -3.34 -0.009933 -0.124674 -3.33 -0.009986 -0.125002 -3.32 -0.010040 -0.125331 -3.31 -0.010093 -0.125662 -3.3 -0.010148 -0.125995 -3.29 -0.010202 -0.126330 -3.28 -0.010257 -0.126667 -3.27 -0.010313 -0.127005 -3.26 -0.010369 -0.127345 -3.25 -0.010425 -0.127687 -3.24 -0.010482 -0.128031 -3.23 -0.010539 -0.128376 -3.22 -0.010597 -0.128724 -3.21 -0.010655 -0.129073 -3.2 -0.010714 -0.129425 -3.19 -0.010773 -0.129778 -3.18 -0.010833 -0.130133 -3.17 -0.010893 -0.130490 -3.16 -0.010954 -0.130849 -3.15 -0.011015 -0.131210 -3.14 -0.011077 -0.131573 -3.13 -0.011140 -0.131938 -3.12 -0.011202 -0.132305 -3.11 -0.011266 -0.132674 -3.1 -0.011330 -0.133045 -3.09 -0.011394 -0.133418 -3.08 -0.011459 -0.133793 -3.07 -0.011525 -0.134171 -3.06 -0.011591 -0.134550 -3.05 -0.011658 -0.134932 -3.04 -0.011725 -0.135316 -3.03 -0.011793 -0.135702 -3.02 -0.011861 -0.136090 -3.01 -0.011930 -0.136481 -3 -0.012000 -0.136873 -2.99 -0.012070 -0.137268 -2.98 -0.012141 -0.137665 -2.97 -0.012213 -0.138065 -2.96 -0.012285 -0.138467 -2.95 -0.012358 -0.138871 -2.94 -0.012431 -0.139278 -2.93 -0.012505 -0.139686 -2.92 -0.012580 -0.140098 -2.91 -0.012656 -0.140512 -2.9 -0.012732 -0.140928 -2.89 -0.012808 -0.141346 -2.88 -0.012886 -0.141768 -2.87 -0.012964 -0.142191 -2.86 -0.013043 -0.142617 -2.85 -0.013123 -0.143046 -2.84 -0.013203 -0.143477 -2.83 -0.013285 -0.143911 -2.82 -0.013366 -0.144348 -2.81 -0.013449 -0.144787 -2.8 -0.013533 -0.145229 -2.79 -0.013617 -0.145673 -2.78 -0.013702 -0.146121 -2.77 -0.013788 -0.146571 -2.76 -0.013874 -0.147023 -2.75 -0.013962 -0.147479 -2.74 -0.014050 -0.147937 -2.73 -0.014139 -0.148399 -2.72 -0.014229 -0.148863 -2.71 -0.014320 -0.149330 -2.7 -0.014412 -0.149800 -2.69 -0.014504 -0.150273 -2.68 -0.014598 -0.150749 -2.67 -0.014692 -0.151228 -2.66 -0.014788 -0.151709 -2.65 -0.014884 -0.152194 -2.64 -0.014981 -0.152683 -2.63 -0.015079 -0.153174 -2.62 -0.015178 -0.153668 -2.61 -0.015279 -0.154166 -2.6 -0.015380 -0.154667 -2.59 -0.015482 -0.155171 -2.58 -0.015585 -0.155678 -2.57 -0.015689 -0.156189 -2.56 -0.015794 -0.156703 -2.55 -0.015901 -0.157220 -2.54 -0.016008 -0.157741 -2.53 -0.016117 -0.158265 -2.52 -0.016226 -0.158793 -2.51 -0.016337 -0.159324 -2.5 -0.016449 -0.159859 -2.49 -0.016562 -0.160397 -2.48 -0.016676 -0.160939 -2.47 -0.016792 -0.161485 -2.46 -0.016908 -0.162034 -2.45 -0.017026 -0.162587 -2.44 -0.017145 -0.163144 -2.43 -0.017265 -0.163705 -2.42 -0.017387 -0.164269 -2.41 -0.017510 -0.164838 -2.4 -0.017634 -0.165410 -2.39 -0.017760 -0.165986 -2.38 -0.017886 -0.166567 -2.37 -0.018015 -0.167151 -2.36 -0.018144 -0.167739 -2.35 -0.018275 -0.168332 -2.34 -0.018408 -0.168929 -2.33 -0.018542 -0.169530 -2.32 -0.018677 -0.170135 -2.31 -0.018814 -0.170745 -2.3 -0.018952 -0.171358 -2.29 -0.019092 -0.171977 -2.28 -0.019234 -0.172600 -2.27 -0.019377 -0.173227 -2.26 -0.019522 -0.173859 -2.25 -0.019668 -0.174495 -2.24 -0.019816 -0.175136 -2.23 -0.019966 -0.175782 -2.22 -0.020117 -0.176432 -2.21 -0.020270 -0.177088 -2.2 -0.020425 -0.177748 -2.19 -0.020582 -0.178413 -2.18 -0.020740 -0.179083 -2.17 -0.020900 -0.179758 -2.16 -0.021063 -0.180438 -2.15 -0.021227 -0.181124 -2.14 -0.021393 -0.181814 -2.13 -0.021561 -0.182510 -2.12 -0.021731 -0.183211 -2.11 -0.021903 -0.183917 -2.1 -0.022077 -0.184629 -2.09 -0.022253 -0.185346 -2.08 -0.022431 -0.186069 -2.07 -0.022612 -0.186798 -2.06 -0.022794 -0.187532 -2.05 -0.022979 -0.188272 -2.04 -0.023166 -0.189018 -2.03 -0.023356 -0.189769 -2.02 -0.023548 -0.190527 -2.01 -0.023742 -0.191291 -2 -0.023938 -0.192060 -1.99 -0.024137 -0.192836 -1.98 -0.024339 -0.193618 -1.97 -0.024543 -0.194407 -1.96 -0.024750 -0.195202 -1.95 -0.024959 -0.196003 -1.94 -0.025171 -0.196811 -1.93 -0.025386 -0.197625 -1.92 -0.025603 -0.198447 -1.91 -0.025824 -0.199275 -1.9 -0.026047 -0.200109 -1.89 -0.026273 -0.200951 -1.88 -0.026502 -0.201800 -1.87 -0.026734 -0.202656 -1.86 -0.026969 -0.203519 -1.85 -0.027208 -0.204390 -1.84 -0.027449 -0.205268 -1.83 -0.027694 -0.206153 -1.82 -0.027942 -0.207046 -1.81 -0.028193 -0.207947 -1.8 -0.028448 -0.208856 -1.79 -0.028706 -0.209772 -1.78 -0.028968 -0.210697 -1.77 -0.029234 -0.211629 -1.76 -0.029503 -0.212570 -1.75 -0.029776 -0.213519 -1.74 -0.030053 -0.214476 -1.73 -0.030333 -0.215442 -1.72 -0.030618 -0.216417 -1.71 -0.030906 -0.217400 -1.7 -0.031199 -0.218393 -1.69 -0.031496 -0.219394 -1.68 -0.031797 -0.220404 -1.67 -0.032103 -0.221424 -1.66 -0.032413 -0.222453 -1.65 -0.032728 -0.223491 -1.64 -0.033047 -0.224539 -1.63 -0.033371 -0.225597 -1.62 -0.033699 -0.226665 -1.61 -0.034033 -0.227742 -1.6 -0.034372 -0.228830 -1.59 -0.034716 -0.229928 -1.58 -0.035065 -0.231037 -1.57 -0.035419 -0.232156 -1.56 -0.035778 -0.233286 -1.55 -0.036144 -0.234427 -1.54 -0.036515 -0.235579 -1.53 -0.036891 -0.236742 -1.52 -0.037274 -0.237916 -1.51 -0.037662 -0.239102 -1.5 -0.038057 -0.240300 -1.49 -0.038458 -0.241509 -1.48 -0.038865 -0.242731 -1.47 -0.039279 -0.243965 -1.46 -0.039700 -0.245211 -1.45 -0.040127 -0.246469 -1.44 -0.040562 -0.247741 -1.43 -0.041003 -0.249025 -1.42 -0.041452 -0.250323 -1.41 -0.041909 -0.251634 -1.4 -0.042372 -0.252958 -1.39 -0.042844 -0.254296 -1.38 -0.043324 -0.255648 -1.37 -0.043812 -0.257014 -1.36 -0.044308 -0.258395 -1.35 -0.044812 -0.259790 -1.34 -0.045326 -0.261200 -1.33 -0.045848 -0.262625 -1.32 -0.046379 -0.264066 -1.31 -0.046920 -0.265522 -1.3 -0.047471 -0.266993 -1.29 -0.048031 -0.268481 -1.28 -0.048601 -0.269985 -1.27 -0.049181 -0.271506 -1.26 -0.049772 -0.273043 -1.25 -0.050374 -0.274597 -1.24 -0.050987 -0.276169 -1.23 -0.051611 -0.277758 -1.22 -0.052247 -0.279365 -1.21 -0.052894 -0.280991 -1.2 -0.053554 -0.282635 -1.19 -0.054226 -0.284297 -1.18 -0.054911 -0.285979 -1.17 -0.055609 -0.287680 -1.16 -0.056321 -0.289401 -1.15 -0.057047 -0.291142 -1.14 -0.057786 -0.292903 -1.13 -0.058540 -0.294685 -1.12 -0.059310 -0.296489 -1.11 -0.060094 -0.298313 -1.1 -0.060894 -0.300159 -1.09 -0.061711 -0.302028 -1.08 -0.062544 -0.303919 -1.07 -0.063394 -0.305833 -1.06 -0.064262 -0.307770 -1.05 -0.065148 -0.309731 -1.04 -0.066052 -0.311716 -1.03 -0.066975 -0.313726 -1.02 -0.067918 -0.315761 -1.01 -0.068881 -0.317821 -1 -0.069865 -0.319906 -0.99 -0.070870 -0.322018 -0.98 -0.071897 -0.324157 -0.97 -0.072947 -0.326323 -0.96 -0.074020 -0.328517 -0.95 -0.075117 -0.330739 -0.94 -0.076238 -0.332989 -0.93 -0.077385 -0.335269 -0.92 -0.078558 -0.337578 -0.91 -0.079758 -0.339917 -0.9 -0.080986 -0.342287 -0.89 -0.082243 -0.344689 -0.88 -0.083529 -0.347122 -0.87 -0.084846 -0.349587 -0.86 -0.086194 -0.352086 -0.85 -0.087575 -0.354618 -0.84 -0.088989 -0.357183 -0.83 -0.090438 -0.359784 -0.82 -0.091922 -0.362420 -0.81 -0.093444 -0.365091 -0.8 -0.095003 -0.367799 -0.79 -0.096602 -0.370544 -0.78 -0.098242 -0.373327 -0.77 -0.099924 -0.376148 -0.76 -0.101649 -0.379008 -0.75 -0.103419 -0.381908 -0.74 -0.105237 -0.384848 -0.73 -0.107102 -0.387829 -0.72 -0.109017 -0.390852 -0.71 -0.110984 -0.393916 -0.7 -0.113005 -0.397024 -0.69 -0.115081 -0.400175 -0.68 -0.117214 -0.403370 -0.67 -0.119407 -0.406610 -0.66 -0.121662 -0.409895 -0.65 -0.123981 -0.413227 -0.64 -0.126367 -0.416605 -0.63 -0.128821 -0.420030 -0.62 -0.131347 -0.423503 -0.61 -0.133947 -0.427025 -0.6 -0.136625 -0.430595 -0.59 -0.139382 -0.434215 -0.58 -0.142223 -0.437885 -0.57 -0.145151 -0.441604 -0.56 -0.148168 -0.445375 -0.55 -0.151279 -0.449196 -0.54 -0.154487 -0.453069 -0.53 -0.157796 -0.456993 -0.52 -0.161210 -0.460968 -0.51 -0.164734 -0.464994 -0.5 -0.168371 -0.469072 -0.49 -0.172127 -0.473201 -0.48 -0.176007 -0.477381 -0.47 -0.180015 -0.481611 -0.46 -0.184157 -0.485891 -0.45 -0.188438 -0.490220 -0.44 -0.192864 -0.494596 -0.43 -0.197442 -0.499019 -0.42 -0.202177 -0.503487 -0.41 -0.207076 -0.507998 -0.4 -0.212145 -0.512550 -0.39 -0.217393 -0.517141 -0.38 -0.222826 -0.521768 -0.37 -0.228453 -0.526428 -0.36 -0.234280 -0.531117 -0.35 -0.240316 -0.535832 -0.34 -0.246570 -0.540567 -0.33 -0.253050 -0.545317 -0.32 -0.259765 -0.550076 -0.31 -0.266725 -0.554839 -0.3 -0.273938 -0.559597 -0.29 -0.281415 -0.564342 -0.28 -0.289164 -0.569066 -0.27 -0.297196 -0.573758 -0.26 -0.305520 -0.578408 -0.25 -0.314145 -0.583003 -0.24 -0.323082 -0.587529 -0.23 -0.332339 -0.591973 -0.22 -0.341924 -0.596318 -0.21 -0.351847 -0.600548 -0.2 -0.362115 -0.604643 -0.19 -0.372733 -0.608584 -0.18 -0.383709 -0.612348 -0.17 -0.395046 -0.615913 -0.16 -0.406746 -0.619255 -0.15 -0.418812 -0.622347 -0.14 -0.431243 -0.625162 -0.13 -0.444034 -0.627673 -0.12 -0.457181 -0.629849 -0.11 -0.470675 -0.631661 -0.1 -0.484504 -0.633077 -0.090000 -0.498654 -0.634069 -0.080000 -0.513106 -0.634606 -0.070000 -0.527838 -0.634657 -0.060000 -0.542826 -0.634197 -0.050000 -0.558040 -0.633197 -0.040000 -0.573448 -0.631636 -0.030000 -0.589013 -0.629493 -0.020000 -0.604699 -0.626751 -0.010000 -0.620464 -0.623397 0 -0.636266 -0.619426 0.009999 -0.652061 -0.614833 0.019999 -0.667808 -0.609622 0.029999 -0.683463 -0.603800 0.039999 -0.698987 -0.597381 0.049999 -0.714341 -0.590383 0.059999 -0.729492 -0.582827 0.069999 -0.744409 -0.574739 0.079999 -0.759068 -0.566146 0.089999 -0.773448 -0.557080 0.099999 -0.787535 -0.547569 0.11 -0.801317 -0.537643 0.12 -0.814791 -0.527331 0.13 -0.827955 -0.516658 0.14 -0.840810 -0.505648 0.15 -0.853361 -0.494320 0.16 -0.865614 -0.482691 0.17 -0.877577 -0.470774 0.18 -0.889256 -0.458577 0.19 -0.900657 -0.446108 0.2 -0.911784 -0.433371 0.21 -0.922642 -0.420367 0.22 -0.933232 -0.407098 0.23 -0.943553 -0.393563 0.24 -0.953603 -0.379762 0.25 -0.963379 -0.365697 0.26 -0.972876 -0.351367 0.27 -0.982090 -0.336773 0.28 -0.991015 -0.321917 0.29 -0.999646 -0.306802 0.3 -1.007977 -0.291429 0.31 -1.016004 -0.275800 0.32 -1.023721 -0.259918 0.33 -1.031125 -0.243781 0.34 -1.038209 -0.227391 0.35 -1.044968 -0.210746 0.36 -1.051395 -0.193843 0.37 -1.057482 -0.176678 0.38 -1.063217 -0.159248 0.39 -1.068587 -0.141548 0.4 -1.073578 -0.123573 0.41 -1.078169 -0.105320 0.42 -1.082341 -0.086787 0.43 -1.086068 -0.067975 0.44 -1.089325 -0.048885 0.45 -1.092083 -0.029523 0.46 -1.094312 -0.009899 0.47 -1.095981 0.009972 0.48 -1.097058 0.030076 0.49 -1.097514 0.050388 0.5 -1.097317 0.070884 0.51 -1.096440 0.091531 0.52 -1.094857 0.112297 0.53 -1.092545 0.133142 0.54 -1.089485 0.154026 0.55 -1.085659 0.174903 0.56 -1.081058 0.195729 0.57 -1.075672 0.216455 0.58 -1.069498 0.237030 0.59 -1.062539 0.257406 0.6 -1.054800 0.277530 0.61 -1.046291 0.297354 0.62 -1.037029 0.316826 0.63 -1.027033 0.335898 0.64 -1.016328 0.354524 0.65 -1.004942 0.372658 0.66 -0.992908 0.390258 0.67 -0.980263 0.407284 0.68 -0.967048 0.423702 0.69 -0.953307 0.439479 0.7 -0.939084 0.454588 0.71 -0.924429 0.469007 0.72 -0.909392 0.482717 0.73 -0.894022 0.495708 0.74 -0.878370 0.507971 0.75 -0.862487 0.519504 0.76 -0.846421 0.530310 0.77 -0.830219 0.540396 0.78 -0.813924 0.549773 0.79 -0.797578 0.558456 0.8 -0.781220 0.566461 0.81 -0.764883 0.573809 0.82 -0.748599 0.580521 0.83 -0.732397 0.586618 0.84 -0.716300 0.592125 0.85 -0.700330 0.597064 0.86 -0.684507 0.601457 0.87 -0.668847 0.605328 0.88 -0.653365 0.608698 0.89 -0.638074 0.611587 0.9 -0.622986 0.614017 0.91 -0.608111 0.616008 0.92 -0.593459 0.617577 0.93 -0.579038 0.618745 0.94 -0.564856 0.619530 0.95 -0.550919 0.619949 0.96 -0.537234 0.620020 0.97 -0.523806 0.619761 0.98 -0.510639 0.619190 0.99 -0.497737 0.618324 1 -0.485103 0.617178 1.01 -0.472737 0.615770 1.02 -0.460642 0.614115 1.03 -0.448816 0.612228 1.04 -0.437260 0.610124 1.05 -0.425971 0.607817 1.06 -0.414950 0.605320 1.07 -0.404192 0.602645 1.08 -0.393697 0.599805 1.09 -0.383461 0.596810 1.1 -0.373482 0.593671 1.11 -0.363757 0.590398 1.12 -0.354284 0.587001 1.13 -0.345059 0.583489 1.14 -0.336079 0.579872 1.15 -0.327342 0.576158 1.16 -0.318844 0.572355 1.17 -0.310583 0.568472 1.18 -0.302555 0.564517 1.19 -0.294756 0.560498 1.2 -0.287184 0.556423 1.21 -0.279833 0.552298 1.22 -0.272702 0.548132 1.23 -0.265784 0.543932 1.24 -0.259076 0.539703 1.25 -0.252573 0.535453 1.26 -0.246270 0.531188 1.27 -0.240163 0.526913 1.28 -0.234247 0.522634 1.29 -0.228516 0.518356 1.3 -0.222966 0.514083 1.31 -0.217591 0.509820 1.32 -0.212386 0.505572 1.33 -0.207346 0.501341 1.34 -0.202466 0.497132 1.35 -0.197740 0.492947 1.36 -0.193163 0.488789 1.37 -0.188732 0.484660 1.38 -0.184440 0.480564 1.39 -0.180282 0.476501 1.4 -0.176255 0.472474 1.41 -0.172354 0.468484 1.42 -0.168574 0.464533 1.43 -0.164911 0.460621 1.44 -0.161360 0.456750 1.45 -0.157918 0.452920 1.46 -0.154581 0.449132 1.47 -0.151345 0.445387 1.48 -0.148207 0.441685 1.49 -0.145162 0.438027 1.5 -0.142208 0.434412 1.51 -0.139341 0.430841 1.52 -0.136558 0.427314 1.53 -0.133856 0.423831 1.54 -0.131232 0.420391 1.55 -0.128683 0.416995 1.56 -0.126207 0.413643 1.57 -0.123801 0.410333 1.58 -0.121463 0.407067 1.59 -0.119190 0.403842 1.6 -0.116979 0.400660 1.61 -0.114830 0.397520 1.62 -0.112738 0.394421 1.63 -0.110704 0.391363 1.64 -0.108723 0.388345 1.65 -0.106796 0.385367 1.66 -0.104919 0.382429 1.67 -0.103092 0.379529 1.68 -0.101312 0.376668 1.69 -0.099578 0.373845 1.7 -0.097888 0.371059 1.71 -0.096241 0.368310 1.72 -0.094636 0.365597 1.73 -0.093070 0.362921 1.74 -0.091544 0.360279 1.75 -0.090055 0.357672 1.76 -0.088602 0.355099 1.77 -0.087185 0.352560 1.78 -0.085801 0.350054 1.79 -0.084451 0.347581 1.8 -0.083132 0.345140 1.81 -0.081844 0.342730 1.82 -0.080587 0.340352 1.83 -0.079358 0.338004 1.84 -0.078157 0.335686 1.85 -0.076984 0.333398 1.86 -0.075838 0.331138 1.87 -0.074717 0.328908 1.88 -0.073621 0.326705 1.89 -0.072549 0.324530 1.9 -0.071500 0.322383 1.91 -0.070475 0.320262 1.92 -0.069471 0.318167 1.93 -0.068489 0.316098 1.94 -0.067528 0.314055 1.95 -0.066588 0.312037 1.96 -0.065667 0.310043 1.97 -0.064765 0.308074 1.98 -0.063882 0.306128 1.99 -0.063017 0.304206 2 -0.062170 0.302307 2.01 -0.061339 0.300430 2.02 -0.060526 0.298576 2.03 -0.059729 0.296744 2.04 -0.058947 0.294933 2.05 -0.058181 0.293143 2.06 -0.057430 0.291375 2.07 -0.056694 0.289626 2.08 -0.055972 0.287898 2.09 -0.055263 0.286190 2.1 -0.054569 0.284501 2.11 -0.053887 0.282832 2.12 -0.053218 0.281181 2.13 -0.052562 0.279549 2.14 -0.051918 0.277935 2.15 -0.051285 0.276340 2.16 -0.050665 0.274762 2.17 -0.050055 0.273201 2.18 -0.049457 0.271658 2.19 -0.048869 0.270131 2.2 -0.048292 0.268621 2.21 -0.047726 0.267128 2.22 -0.047169 0.265650 2.23 -0.046622 0.264189 2.24 -0.046084 0.262743 2.25 -0.045556 0.261313 2.26 -0.045037 0.259897 2.27 -0.044527 0.258497 2.28 -0.044026 0.257111 2.29 -0.043533 0.255740 2.3 -0.043048 0.254383 2.31 -0.042572 0.253040 2.32 -0.042103 0.251711 2.33 -0.041642 0.250395 2.34 -0.041189 0.249093 2.35 -0.040743 0.247804 2.36 -0.040305 0.246528 2.37 -0.039873 0.245265 2.38 -0.039449 0.244015 2.39 -0.039031 0.242777 2.4 -0.038620 0.241552 2.41 -0.038216 0.240338 2.42 -0.037818 0.239136 2.43 -0.037426 0.237947 2.44 -0.037040 0.236768 2.45 -0.036660 0.235601 2.46 -0.036286 0.234446 2.47 -0.035918 0.233301 2.48 -0.035555 0.232168 2.49 -0.035198 0.231045 2.5 -0.034847 0.229933 2.51 -0.034500 0.228832 2.52 -0.034159 0.227740 2.53 -0.033823 0.226659 2.54 -0.033492 0.225588 2.55 -0.033165 0.224527 2.56 -0.032844 0.223476 2.57 -0.032527 0.222435 2.58 -0.032215 0.221403 2.59 -0.031907 0.220380 2.6 -0.031604 0.219367 2.61 -0.031305 0.218362 2.62 -0.031010 0.217367 2.63 -0.030720 0.216381 2.64 -0.030433 0.215404 2.65 -0.030151 0.214435 2.66 -0.029872 0.213475 2.67 -0.029598 0.212523 2.68 -0.029327 0.211580 2.69 -0.029060 0.210645 2.7 -0.028796 0.209718 2.71 -0.028536 0.208799 2.72 -0.028280 0.207888 2.73 -0.028027 0.206985 2.74 -0.027778 0.206089 2.75 -0.027532 0.205201 2.76 -0.027289 0.204321 2.77 -0.027049 0.203448 2.78 -0.026813 0.202583 2.79 -0.026579 0.201724 2.8 -0.026349 0.200873 2.81 -0.026122 0.200029 2.82 -0.025897 0.199192 2.83 -0.025676 0.198362 2.84 -0.025457 0.197539 2.85 -0.025241 0.196722 2.86 -0.025028 0.195912 2.87 -0.024818 0.195109 2.88 -0.024610 0.194312 2.89 -0.024405 0.193522 2.9 -0.024203 0.192738 2.91 -0.024003 0.191960 2.92 -0.023805 0.191188 2.93 -0.023610 0.190423 2.94 -0.023417 0.189664 2.95 -0.023227 0.188910 2.96 -0.023039 0.188163 2.97 -0.022853 0.187421 2.98 -0.022670 0.186685 2.99 -0.022489 0.185955 3 -0.022310 0.185230 3.01 -0.022133 0.184511 3.02 -0.021958 0.183798 3.03 -0.021785 0.183090 3.04 -0.021614 0.182387 3.05 -0.021446 0.181690 3.06 -0.021279 0.180998 3.07 -0.021114 0.180311 3.08 -0.020951 0.179629 3.09 -0.020791 0.178953 3.1 -0.020631 0.178281 3.11 -0.020474 0.177615 3.12 -0.020319 0.176953 3.13 -0.020165 0.176296 3.14 -0.020013 0.175644 3.15 -0.019863 0.174997 3.16 -0.019714 0.174354 3.17 -0.019567 0.173717 3.18 -0.019422 0.173083 3.19 -0.019279 0.172455 3.2 -0.019137 0.171831 3.21 -0.018996 0.171211 3.22 -0.018857 0.170596 3.23 -0.018720 0.169985 3.24 -0.018584 0.169378 3.25 -0.018450 0.168776 3.26 -0.018317 0.168178 3.27 -0.018185 0.167584 3.28 -0.018055 0.166995 3.29 -0.017927 0.166409 3.3 -0.017799 0.165827 3.31 -0.017673 0.165250 3.32 -0.017549 0.164676 3.33 -0.017426 0.164107 3.34 -0.017304 0.163541 3.35 -0.017183 0.162979 3.36 -0.017064 0.162421 3.37 -0.016945 0.161867 3.38 -0.016828 0.161317 3.39 -0.016713 0.160770 3.4 -0.016598 0.160227 3.41 -0.016485 0.159687 3.42 -0.016373 0.159151 3.43 -0.016262 0.158619 3.44 -0.016152 0.158090 3.45 -0.016043 0.157565 3.46 -0.015935 0.157043 3.47 -0.015829 0.156525 3.48 -0.015723 0.156009 3.49 -0.015619 0.155498 3.5 -0.015515 0.154989 3.51 -0.015413 0.154484 3.52 -0.015311 0.153982 3.53 -0.015211 0.153484 3.54 -0.015112 0.152988 3.55 -0.015013 0.152496 3.56 -0.014916 0.152007 3.57 -0.014819 0.151521 3.58 -0.014724 0.151038 3.59 -0.014629 0.150558 3.6 -0.014535 0.150081 3.61 -0.014442 0.149608 3.62 -0.014350 0.149137 3.63 -0.014259 0.148669 3.64 -0.014169 0.148204 3.65 -0.014080 0.147741 3.66 -0.013991 0.147282 3.67 -0.013904 0.146825 3.68 -0.013817 0.146372 3.69 -0.013731 0.145921 3.7 -0.013646 0.145473 3.71 -0.013561 0.145027 3.72 -0.013478 0.144584 3.73 -0.013395 0.144144 3.74 -0.013313 0.143707 3.75 -0.013231 0.143272 3.76 -0.013151 0.142840 3.77 -0.013071 0.142410 3.78 -0.012992 0.141983 3.79 -0.012914 0.141559 3.8 -0.012836 0.141137 3.81 -0.012759 0.140717 3.82 -0.012683 0.140300 3.83 -0.012607 0.139886 3.84 -0.012532 0.139473 3.85 -0.012458 0.139064 3.86 -0.012384 0.138656 3.87 -0.012311 0.138251 3.88 -0.012239 0.137848 3.89 -0.012167 0.137448 3.9 -0.012096 0.137050 3.91 -0.012026 0.136654 3.92 -0.011956 0.136261 3.93 -0.011887 0.135869 3.94 -0.011818 0.135480 3.95 -0.011751 0.135094 3.96 -0.011683 0.134709 3.97 -0.011616 0.134326 3.98 -0.011550 0.133946 3.99 -0.011484 0.133568 4 -0.011419 0.133192 4.01 -0.011355 0.132818 4.02 -0.011291 0.132446 4.03 -0.011227 0.132076 4.04 -0.011164 0.131708 4.05 -0.011102 0.131342 4.06 -0.011040 0.130979 4.07 -0.010979 0.130617 4.08 -0.010918 0.130257 4.09 -0.010858 0.129899 4.1 -0.010798 0.129543 4.11 -0.010739 0.129189 4.12 -0.010680 0.128837 4.13 -0.010621 0.128487 4.14 -0.010564 0.128139 4.15 -0.010506 0.127792 4.16 -0.010449 0.127448 4.17 -0.010393 0.127105 4.18 -0.010337 0.126764 4.19 -0.010281 0.126425 4.2 -0.010226 0.126088 4.21 -0.010172 0.125752 4.22 -0.010117 0.125419 4.23 -0.010064 0.125087 4.24 -0.010010 0.124756 4.25 -0.009957 0.124428 4.26 -0.009905 0.124101 4.27 -0.009853 0.123776 4.28 -0.009801 0.123453 4.29 -0.009750 0.123131 4.3 -0.009699 0.122811 4.31 -0.009649 0.122492 4.32 -0.009599 0.122175 4.33 -0.009549 0.121860 4.34 -0.009500 0.121547 4.35 -0.009451 0.121235 4.36 -0.009402 0.120924 4.37 -0.009354 0.120615 4.38 -0.009306 0.120308 4.39 -0.009259 0.120002 4.4 -0.009212 0.119698 4.41 -0.009165 0.119395 4.42 -0.009119 0.119094 4.43 -0.009073 0.118795 4.44 -0.009027 0.118496 4.45 -0.008982 0.118200 4.46 -0.008937 0.117904 4.47 -0.008893 0.117611 4.48 -0.008848 0.117318 4.49 -0.008804 0.117027 4.5 -0.008761 0.116738 4.51 -0.008718 0.116450 4.52 -0.008675 0.116163 4.53 -0.008632 0.115878 4.54 -0.008590 0.115594 4.55 -0.008548 0.115312 4.56 -0.008506 0.115031 4.57 -0.008465 0.114751 4.58 -0.008424 0.114472 4.59 -0.008383 0.114195 4.6 -0.008342 0.113919 4.61 -0.008302 0.113645 4.62 -0.008262 0.113372 4.63 -0.008223 0.113100 4.64 -0.008183 0.112829 4.65 -0.008144 0.112560 4.66 -0.008106 0.112292 4.67 -0.008067 0.112025 4.68 -0.008029 0.111760 4.69 -0.007991 0.111496 4.7 -0.007954 0.111233 4.71 -0.007916 0.110971 4.72 -0.007879 0.110710 4.73 -0.007842 0.110451 4.74 -0.007806 0.110192 4.75 -0.007769 0.109935 4.76 -0.007733 0.109680 4.77 -0.007698 0.109425 4.78 -0.007662 0.109172 4.79 -0.007627 0.108919 4.8 -0.007592 0.108668 4.81 -0.007557 0.108418 4.82 -0.007522 0.108169 4.83 -0.007488 0.107921 4.84 -0.007454 0.107675 4.85 -0.007420 0.107429 4.86 -0.007386 0.107185 4.87 -0.007353 0.106941 4.88 -0.007320 0.106699 4.89 -0.007287 0.106458 4.9 -0.007254 0.106218 4.91 -0.007222 0.105979 4.92 -0.007189 0.105741 4.93 -0.007157 0.105504 4.94 -0.007126 0.105268 4.95 -0.007094 0.105033 4.96 -0.007063 0.104799 4.97 -0.007031 0.104566 4.98 -0.007000 0.104335 4.99 -0.006970 0.104104 5 -0.006939 0.103874 5.01 -0.006909 0.103645 5.02 -0.006879 0.103418 5.03 -0.006849 0.103191 5.04 -0.006819 0.102965 5.05 -0.006789 0.102740 5.06 -0.006760 0.102516 5.07 -0.006731 0.102293 5.08 -0.006702 0.102071 5.09 -0.006673 0.101850 5.1 -0.006645 0.101630 5.11 -0.006616 0.101411 5.12 -0.006588 0.101193 5.13 -0.006560 0.100976 5.14 -0.006532 0.100759 5.15 -0.006504 0.100544 5.16 -0.006477 0.100329 5.17 -0.006450 0.100116 5.18 -0.006422 0.099903 5.19 -0.006396 0.099691 5.2 -0.006369 0.099480 5.21 -0.006342 0.099270 5.22 -0.006316 0.099060 5.23 -0.006289 0.098852 5.24 -0.006263 0.098645 5.25 -0.006237 0.098438 5.26 -0.006212 0.098232 5.27 -0.006186 0.098027 5.28 -0.006161 0.097823 5.29 -0.006135 0.097619 5.3 -0.006110 0.097417 5.31 -0.006085 0.097215 5.32 -0.006060 0.097014 5.33 -0.006036 0.096814 5.34 -0.006011 0.096615 5.35 -0.005987 0.096417 5.36 -0.005963 0.096219 5.37 -0.005939 0.096022 5.38 -0.005915 0.095826 5.39 -0.005891 0.095631 5.4 -0.005868 0.095436 5.41 -0.005844 0.095243 5.42 -0.005821 0.095050 5.43 -0.005798 0.094857 5.44 -0.005775 0.094666 5.45 -0.005752 0.094475 5.46 -0.005729 0.094285 5.47 -0.005707 0.094096 5.48 -0.005684 0.093908 5.49 -0.005662 0.093720 5.5 -0.005640 0.093533 5.51 -0.005618 0.093347 5.52 -0.005596 0.093161 5.53 -0.005574 0.092976 5.54 -0.005552 0.092792 5.55 -0.005531 0.092609 5.56 -0.005510 0.092426 5.57 -0.005488 0.092244 5.58 -0.005467 0.092063 5.59 -0.005446 0.091882 5.6 -0.005426 0.091702 5.61 -0.005405 0.091523 5.62 -0.005384 0.091344 5.63 -0.005364 0.091166 5.64 -0.005343 0.090989 5.65 -0.005323 0.090813 5.66 -0.005303 0.090637 5.67 -0.005283 0.090461 5.68 -0.005263 0.090287 5.69 -0.005244 0.090113 5.7 -0.005224 0.089940 5.71 -0.005204 0.089767 5.72 -0.005185 0.089595 5.73 -0.005166 0.089424 5.74 -0.005147 0.089253 5.75 -0.005128 0.089083 5.76 -0.005109 0.088913 5.77 -0.005090 0.088745 5.78 -0.005071 0.088576 5.79 -0.005053 0.088409 5.8 -0.005034 0.088242 5.81 -0.005016 0.088075 5.82 -0.004998 0.087909 5.83 -0.004980 0.087744 5.84 -0.004962 0.087580 5.85 -0.004944 0.087416 5.86 -0.004926 0.087252 5.87 -0.004908 0.087089 5.88 -0.004891 0.086927 5.89 -0.004873 0.086765 5.9 -0.004856 0.086604 5.91 -0.004838 0.086444 5.92 -0.004821 0.086284 5.93 -0.004804 0.086124 5.94 -0.004787 0.085966 5.95 -0.004770 0.085807 5.96 -0.004754 0.085650 5.97 -0.004737 0.085492 5.98 -0.004720 0.085336 5.99 -0.004704 0.085180 6 -0.004688 0.085024 6.01 -0.004671 0.084869 6.02 -0.004655 0.084715 6.03 -0.004639 0.084561 6.04 -0.004623 0.084407 6.05 -0.004607 0.084254 6.06 -0.004591 0.084102 6.07 -0.004576 0.083950 6.08 -0.004560 0.083799 6.09 -0.004545 0.083648 6.1 -0.004529 0.083498 6.11 -0.004514 0.083348 6.12 -0.004499 0.083199 6.13 -0.004484 0.083050 6.14 -0.004469 0.082902 6.15 -0.004454 0.082754 6.16 -0.004439 0.082607 6.17 -0.004424 0.082460 6.18 -0.004410 0.082314 6.19 -0.004395 0.082168 6.2 -0.004381 0.082022 6.21 -0.004366 0.081878 6.22 -0.004352 0.081733 6.23 -0.004338 0.081589 6.24 -0.004324 0.081446 6.25 -0.004310 0.081303 6.26 -0.004296 0.081160 6.27 -0.004282 0.081018 6.28 -0.004268 0.080877 6.29 -0.004255 0.080735 6.3 -0.004241 0.080595 6.31 -0.004228 0.080455 6.32 -0.004214 0.080315 6.33 -0.004201 0.080175 6.34 -0.004188 0.080037 6.35 -0.004175 0.079898 6.36 -0.004162 0.079760 6.37 -0.004149 0.079622 6.38 -0.004136 0.079485 6.39 -0.004124 0.079349 6.4 -0.004111 0.079212 6.41 -0.004098 0.079076 6.42 -0.004086 0.078941 6.43 -0.004074 0.078806 6.44 -0.004061 0.078671 6.45 -0.004049 0.078537 6.46 -0.004037 0.078403 6.47 -0.004025 0.078270 6.48 -0.004013 0.078137 6.49 -0.004002 0.078004 6.5 -0.003990 0.077872 6.51 -0.003978 0.077740 6.52 -0.003967 0.077609 6.53 -0.003956 0.077478 6.54 -0.003944 0.077347 6.55 -0.003933 0.077217 6.56 -0.003922 0.077087 6.57 -0.003911 0.076958 6.58 -0.003900 0.076829 6.59 -0.003889 0.076700 6.6 -0.003879 0.076572 6.61 -0.003868 0.076444 6.62 -0.003858 0.076316 6.63 -0.003847 0.076189 6.64 -0.003837 0.076062 6.65 -0.003827 0.075935 6.66 -0.003817 0.075809 6.67 -0.003807 0.075684 6.68 -0.003798 0.075558 6.69 -0.003788 0.075433 6.7 -0.003778 0.075308 6.71 -0.003769 0.075184 6.72 -0.003760 0.075060 6.73 -0.003751 0.074936 6.74 -0.003742 0.074813 6.75 -0.003733 0.074690 6.76 -0.003724 0.074568 6.77 -0.003715 0.074445 6.78 -0.003707 0.074323 6.79 -0.003699 0.074202 6.8 -0.003690 0.074081 6.81 -0.003682 0.073960 6.82 -0.003675 0.073839 6.83 -0.003667 0.073719 6.84 -0.003659 0.073599 6.85 -0.003652 0.073480 6.86 -0.003645 0.073360 6.87 -0.003638 0.073241 6.88 -0.003631 0.073123 6.89 -0.003624 0.073005 6.9 -0.003618 0.072887 6.91 -0.003611 0.072769 6.92 -0.003605 0.072652 6.93 -0.003599 0.072536 6.94 -0.003594 0.072419 6.95 -0.003588 0.072303 6.96 -0.003583 0.072187 6.97 -0.003578 0.072072 6.98 -0.003573 0.071957 6.99 -0.003568 0.071842 7 -0.003564 0.071728 7.01 -0.003560 0.071614 7.02 -0.003556 0.071500 7.03 -0.003552 0.071387 7.04 -0.003549 0.071274 7.05 -0.003546 0.071162 7.06 -0.003543 0.071050 7.07 -0.003541 0.070939 7.08 -0.003538 0.070828 7.09 -0.003536 0.070717 7.1 -0.003535 0.070607 7.11 -0.003533 0.070497 7.12 -0.003532 0.070388 7.13 -0.003531 0.070280 7.14 -0.003531 0.070171 7.15 -0.003531 0.070064 7.16 -0.003531 0.069957 7.17 -0.003531 0.069851 7.18 -0.003532 0.069745 7.19 -0.003533 0.069640 7.2 -0.003534 0.069536 7.21 -0.003536 0.069432 7.22 -0.003537 0.069330 7.23 -0.003539 0.069228 7.24 -0.003541 0.069127 7.25 -0.003543 0.069026 7.26 -0.003545 0.068927 7.27 -0.003547 0.068828 7.28 -0.003550 0.068730 7.29 -0.003552 0.068633 7.3 -0.003553 0.068537 7.31 -0.003555 0.068442 7.32 -0.003557 0.068348 7.33 -0.003558 0.068254 7.34 -0.003558 0.068162 7.35 -0.003559 0.068070 7.36 -0.003559 0.067978 7.37 -0.003558 0.067888 7.38 -0.003557 0.067798 7.39 -0.003556 0.067708 7.4 -0.003554 0.067619 7.41 -0.003551 0.067531 7.42 -0.003548 0.067442 7.43 -0.003544 0.067354 7.44 -0.003540 0.067267 7.45 -0.003535 0.067179 7.46 -0.003530 0.067092 7.47 -0.003525 0.067005 7.48 -0.003519 0.066918 7.49 -0.003513 0.066831 7.5 -0.003506 0.066744 7.51 -0.003500 0.066657 7.52 -0.003493 0.066571 7.53 -0.003485 0.066484 7.54 -0.003478 0.066398 7.55 -0.003470 0.066312 7.56 -0.003463 0.066226 7.57 -0.003455 0.066140 7.58 -0.003446 0.066054 7.59 -0.003438 0.065968 7.6 -0.003429 0.065882 7.61 -0.003420 0.065797 7.62 -0.003411 0.065712 7.63 -0.003402 0.065626 7.64 -0.003392 0.065541 7.65 -0.003383 0.065456 7.66 -0.003373 0.065371 7.67 -0.003362 0.065286 7.68 -0.003352 0.065201 7.69 -0.003341 0.065116 7.7 -0.003330 0.065030 7.71 -0.003319 0.064945 7.72 -0.003307 0.064859 7.73 -0.003296 0.064774 7.74 -0.003285 0.064688 7.75 -0.003273 0.064602 7.76 -0.003262 0.064515 7.77 -0.003250 0.064429 7.78 -0.003239 0.064342 7.79 -0.003228 0.064255 7.8 -0.003217 0.064168 7.81 -0.003206 0.064081 7.82 -0.003196 0.063994 7.83 -0.003185 0.063907 7.84 -0.003175 0.063820 7.85 -0.003165 0.063732 7.86 -0.003156 0.063645 7.87 -0.003147 0.063558 7.88 -0.003138 0.063471 7.89 -0.003129 0.063384 7.9 -0.003121 0.063297 7.91 -0.003113 0.063210 7.92 -0.003105 0.063123 7.93 -0.003097 0.063037 7.94 -0.003090 0.062950 7.95 -0.003082 0.062864 7.96 -0.003075 0.062778 7.97 -0.003069 0.062692 7.98 -0.003062 0.062607 7.99 -0.003055 0.062521 8 -0.003049 0.062436 8.01 -0.003043 0.062351 8.02 -0.003037 0.062266 8.03 -0.003031 0.062181 8.04 -0.003026 0.062096 8.05 -0.003020 0.062011 8.06 -0.003015 0.061927 8.07 -0.003010 0.061842 8.08 -0.003006 0.061758 8.09 -0.003001 0.061674 8.1 -0.002997 0.061590 8.11 -0.002993 0.061506 8.12 -0.002990 0.061422 8.13 -0.002987 0.061338 8.14 -0.002984 0.061255 8.15 -0.002982 0.061172 8.16 -0.002980 0.061089 8.17 -0.002979 0.061006 8.18 -0.002978 0.060924 8.19 -0.002977 0.060842 8.2 -0.002977 0.060760 8.21 -0.002978 0.060679 8.22 -0.002978 0.060599 8.23 -0.002979 0.060519 8.24 -0.002981 0.060439 8.25 -0.002982 0.060360 8.26 -0.002984 0.060282 8.27 -0.002986 0.060204 8.28 -0.002989 0.060127 8.29 -0.002991 0.060051 8.3 -0.002994 0.059976 8.31 -0.002997 0.059901 8.32 -0.003000 0.059827 8.33 -0.003002 0.059753 8.34 -0.003005 0.059680 8.35 -0.003008 0.059608 8.36 -0.003010 0.059537 8.37 -0.003012 0.059466 8.38 -0.003014 0.059395 8.39 -0.003016 0.059325 8.4 -0.003017 0.059256 8.41 -0.003018 0.059187 8.42 -0.003019 0.059118 8.43 -0.003019 0.059050 8.44 -0.003020 0.058982 8.45 -0.003020 0.058914 8.46 -0.003020 0.058847 8.47 -0.003019 0.058780 8.48 -0.003019 0.058713 8.49 -0.003018 0.058646 8.5 -0.003017 0.058579 8.51 -0.003017 0.058513 8.52 -0.003016 0.058447 8.53 -0.003015 0.058381 8.54 -0.003014 0.058315 8.55 -0.003013 0.058250 8.56 -0.003012 0.058185 8.57 -0.003011 0.058121 8.58 -0.003010 0.058056 8.59 -0.003009 0.057993 8.6 -0.003007 0.057929 8.61 -0.003006 0.057866 8.62 -0.003004 0.057804 8.63 -0.003002 0.057742 8.64 -0.003000 0.057680 8.65 -0.002998 0.057619 8.66 -0.002995 0.057558 8.67 -0.002991 0.057498 8.68 -0.002988 0.057438 8.69 -0.002983 0.057378 8.7 -0.002979 0.057318 8.71 -0.002974 0.057258 8.72 -0.002968 0.057198 8.73 -0.002962 0.057139 8.74 -0.002956 0.057079 8.75 -0.002949 0.057019 8.76 -0.002943 0.056959 8.77 -0.002935 0.056899 8.78 -0.002928 0.056839 8.79 -0.002921 0.056779 8.8 -0.002913 0.056718 8.81 -0.002905 0.056658 8.82 -0.002898 0.056597 8.83 -0.002890 0.056536 8.84 -0.002883 0.056476 8.85 -0.002875 0.056415 8.86 -0.002868 0.056354 8.87 -0.002860 0.056294 8.88 -0.002853 0.056233 8.89 -0.002846 0.056173 8.9 -0.002839 0.056113 8.91 -0.002831 0.056053 8.92 -0.002824 0.055994 8.93 -0.002817 0.055934 8.94 -0.002809 0.055875 8.95 -0.002801 0.055816 8.96 -0.002794 0.055758 8.97 -0.002785 0.055700 8.98 -0.002777 0.055641 8.99 -0.002768 0.055583 9 -0.002758 0.055525 9.01 -0.002749 0.055467 9.02 -0.002739 0.055409 9.03 -0.002728 0.055351 9.04 -0.002717 0.055293 9.05 -0.002706 0.055235 9.06 -0.002694 0.055176 9.07 -0.002683 0.055117 9.08 -0.002670 0.055057 9.09 -0.002658 0.054997 9.1 -0.002646 0.054937 9.11 -0.002634 0.054876 9.12 -0.002621 0.054815 9.13 -0.002609 0.054754 9.14 -0.002597 0.054692 9.15 -0.002585 0.054629 9.16 -0.002573 0.054566 9.17 -0.002561 0.054503 9.18 -0.002550 0.054440 9.19 -0.002540 0.054376 9.2 -0.002529 0.054312 9.21 -0.002519 0.054247 9.22 -0.002510 0.054183 9.23 -0.002501 0.054118 9.24 -0.002493 0.054054 9.25 -0.002485 0.053989 9.26 -0.002477 0.053924 9.27 -0.002470 0.053860 9.28 -0.002464 0.053795 9.29 -0.002458 0.053731 9.3 -0.002453 0.053666 9.31 -0.002448 0.053602 9.32 -0.002444 0.053539 9.33 -0.002440 0.053475 9.34 -0.002436 0.053412 9.35 -0.002433 0.053350 9.36 -0.002431 0.053288 9.37 -0.002428 0.053226 9.38 -0.002426 0.053165 9.39 -0.002424 0.053104 9.4 -0.002422 0.053044 9.41 -0.002421 0.052984 9.42 -0.002419 0.052925 9.43 -0.002418 0.052866 9.44 -0.002416 0.052808 9.45 -0.002415 0.052750 9.46 -0.002413 0.052692 9.47 -0.002411 0.052635 9.48 -0.002410 0.052579 9.49 -0.002408 0.052522 9.5 -0.002406 0.052466 9.51 -0.002403 0.052410 9.52 -0.002401 0.052355 9.53 -0.002398 0.052299 9.54 -0.002396 0.052244 9.55 -0.002393 0.052189 9.56 -0.002390 0.052134 9.57 -0.002387 0.052079 9.58 -0.002384 0.052024 9.59 -0.002381 0.051969 9.6 -0.002378 0.051914 9.61 -0.002376 0.051859 9.62 -0.002373 0.051804 9.63 -0.002370 0.051750 9.64 -0.002368 0.051695 9.65 -0.002366 0.051641 9.66 -0.002364 0.051587 9.67 -0.002362 0.051533 9.68 -0.002361 0.051479 9.69 -0.002360 0.051426 9.7 -0.002358 0.051373 9.71 -0.002357 0.051321 9.72 -0.002356 0.051269 9.73 -0.002355 0.051218 9.74 -0.002355 0.051167 9.75 -0.002354 0.051116 9.76 -0.002353 0.051066 9.77 -0.002351 0.051017 9.78 -0.002350 0.050968 9.79 -0.002348 0.050919 9.8 -0.002346 0.050871 9.81 -0.002344 0.050824 9.82 -0.002341 0.050777 9.83 -0.002338 0.050730 9.84 -0.002334 0.050683 9.85 -0.002330 0.050637 9.86 -0.002325 0.050591 9.87 -0.002320 0.050545 9.88 -0.002314 0.050499 9.89 -0.002308 0.050452 9.9 -0.002301 0.050406 9.91 -0.002294 0.050359 9.92 -0.002286 0.050312 9.93 -0.002278 0.050265 9.94 -0.002270 0.050218 9.95 -0.002262 0.050170 9.96 -0.002253 0.050122 9.97 -0.002245 0.050074 9.98 -0.002236 0.050025 9.99 -0.002228 0.049976 dmrgpp-6.02/TestSuite/oracles/data3004.cf000066400000000000000000001447341414604301300200560ustar00rootroot00000000000000-10 -0.002060 -0.057864 -9.99 -0.002065 -0.057932 -9.98 -0.002070 -0.058001 -9.97 -0.002075 -0.058070 -9.96 -0.002080 -0.058139 -9.95 -0.002085 -0.058208 -9.94 -0.002090 -0.058277 -9.93 -0.002095 -0.058347 -9.92 -0.002100 -0.058417 -9.91 -0.002105 -0.058487 -9.9 -0.002110 -0.058557 -9.89 -0.002115 -0.058627 -9.88 -0.002121 -0.058697 -9.87 -0.002126 -0.058768 -9.86 -0.002131 -0.058839 -9.85 -0.002136 -0.058910 -9.84 -0.002141 -0.058981 -9.83 -0.002146 -0.059052 -9.82 -0.002152 -0.059123 -9.81 -0.002157 -0.059195 -9.8 -0.002162 -0.059267 -9.79 -0.002168 -0.059339 -9.78 -0.002173 -0.059411 -9.77 -0.002178 -0.059483 -9.76 -0.002184 -0.059555 -9.75 -0.002189 -0.059628 -9.74 -0.002194 -0.059701 -9.73 -0.002200 -0.059774 -9.72 -0.002205 -0.059847 -9.71 -0.002211 -0.059920 -9.7 -0.002216 -0.059994 -9.69 -0.002222 -0.060068 -9.68 -0.002227 -0.060141 -9.67 -0.002233 -0.060216 -9.66 -0.002238 -0.060290 -9.65 -0.002244 -0.060364 -9.64 -0.002249 -0.060439 -9.63 -0.002255 -0.060514 -9.62 -0.002261 -0.060589 -9.61 -0.002266 -0.060664 -9.6 -0.002272 -0.060739 -9.59 -0.002278 -0.060815 -9.58 -0.002283 -0.060890 -9.57 -0.002289 -0.060966 -9.56 -0.002295 -0.061043 -9.55 -0.002301 -0.061119 -9.54 -0.002306 -0.061195 -9.53 -0.002312 -0.061272 -9.52 -0.002318 -0.061349 -9.51 -0.002324 -0.061426 -9.5 -0.002330 -0.061503 -9.49 -0.002336 -0.061581 -9.48 -0.002342 -0.061658 -9.47 -0.002348 -0.061736 -9.46 -0.002354 -0.061814 -9.45 -0.002360 -0.061893 -9.44 -0.002366 -0.061971 -9.43 -0.002372 -0.062050 -9.42 -0.002378 -0.062129 -9.41 -0.002384 -0.062208 -9.4 -0.002390 -0.062287 -9.39 -0.002396 -0.062367 -9.38 -0.002402 -0.062446 -9.37 -0.002408 -0.062526 -9.36 -0.002415 -0.062606 -9.35 -0.002421 -0.062687 -9.34 -0.002427 -0.062767 -9.33 -0.002433 -0.062848 -9.32 -0.002440 -0.062929 -9.31 -0.002446 -0.063010 -9.3 -0.002452 -0.063091 -9.29 -0.002459 -0.063173 -9.28 -0.002465 -0.063254 -9.27 -0.002472 -0.063336 -9.26 -0.002478 -0.063419 -9.25 -0.002485 -0.063501 -9.24 -0.002491 -0.063584 -9.23 -0.002498 -0.063666 -9.22 -0.002504 -0.063749 -9.21 -0.002511 -0.063833 -9.2 -0.002517 -0.063916 -9.19 -0.002524 -0.064000 -9.18 -0.002531 -0.064084 -9.17 -0.002538 -0.064168 -9.16 -0.002544 -0.064252 -9.15 -0.002551 -0.064337 -9.14 -0.002558 -0.064422 -9.13 -0.002565 -0.064507 -9.12 -0.002571 -0.064592 -9.11 -0.002578 -0.064678 -9.1 -0.002585 -0.064763 -9.09 -0.002592 -0.064849 -9.08 -0.002599 -0.064935 -9.07 -0.002606 -0.065022 -9.06 -0.002613 -0.065108 -9.05 -0.002620 -0.065195 -9.04 -0.002627 -0.065282 -9.03 -0.002634 -0.065370 -9.02 -0.002641 -0.065457 -9.01 -0.002648 -0.065545 -9 -0.002656 -0.065633 -8.99 -0.002663 -0.065721 -8.98 -0.002670 -0.065810 -8.97 -0.002677 -0.065899 -8.96 -0.002685 -0.065988 -8.95 -0.002692 -0.066077 -8.94 -0.002699 -0.066166 -8.93 -0.002707 -0.066256 -8.92 -0.002714 -0.066346 -8.91 -0.002722 -0.066436 -8.9 -0.002729 -0.066527 -8.89 -0.002737 -0.066618 -8.88 -0.002744 -0.066708 -8.87 -0.002752 -0.066800 -8.86 -0.002759 -0.066891 -8.85 -0.002767 -0.066983 -8.84 -0.002775 -0.067075 -8.83 -0.002782 -0.067167 -8.82 -0.002790 -0.067259 -8.81 -0.002798 -0.067352 -8.8 -0.002806 -0.067445 -8.79 -0.002814 -0.067538 -8.78 -0.002821 -0.067632 -8.77 -0.002829 -0.067725 -8.76 -0.002837 -0.067819 -8.75 -0.002845 -0.067914 -8.74 -0.002853 -0.068008 -8.73 -0.002861 -0.068103 -8.72 -0.002869 -0.068198 -8.71 -0.002877 -0.068293 -8.7 -0.002886 -0.068389 -8.69 -0.002894 -0.068485 -8.68 -0.002902 -0.068581 -8.67 -0.002910 -0.068677 -8.66 -0.002918 -0.068774 -8.65 -0.002927 -0.068871 -8.64 -0.002935 -0.068968 -8.63 -0.002943 -0.069066 -8.62 -0.002952 -0.069163 -8.61 -0.002960 -0.069261 -8.6 -0.002969 -0.069360 -8.59 -0.002977 -0.069458 -8.58 -0.002986 -0.069557 -8.57 -0.002994 -0.069657 -8.56 -0.003003 -0.069756 -8.55 -0.003012 -0.069856 -8.54 -0.003020 -0.069956 -8.53 -0.003029 -0.070056 -8.52 -0.003038 -0.070157 -8.51 -0.003047 -0.070258 -8.5 -0.003056 -0.070359 -8.49 -0.003065 -0.070460 -8.48 -0.003073 -0.070562 -8.47 -0.003082 -0.070664 -8.46 -0.003092 -0.070767 -8.45 -0.003101 -0.070869 -8.44 -0.003110 -0.070972 -8.43 -0.003119 -0.071076 -8.42 -0.003128 -0.071179 -8.41 -0.003137 -0.071283 -8.4 -0.003147 -0.071387 -8.39 -0.003156 -0.071492 -8.38 -0.003165 -0.071596 -8.37 -0.003175 -0.071702 -8.36 -0.003184 -0.071807 -8.35 -0.003194 -0.071913 -8.34 -0.003203 -0.072019 -8.33 -0.003213 -0.072125 -8.32 -0.003222 -0.072232 -8.31 -0.003232 -0.072339 -8.3 -0.003242 -0.072446 -8.29 -0.003251 -0.072553 -8.28 -0.003261 -0.072661 -8.27 -0.003271 -0.072770 -8.26 -0.003281 -0.072878 -8.25 -0.003291 -0.072987 -8.24 -0.003301 -0.073096 -8.23 -0.003311 -0.073206 -8.22 -0.003321 -0.073316 -8.21 -0.003331 -0.073426 -8.2 -0.003341 -0.073537 -8.19 -0.003351 -0.073648 -8.18 -0.003361 -0.073759 -8.17 -0.003372 -0.073870 -8.16 -0.003382 -0.073982 -8.15 -0.003392 -0.074095 -8.14 -0.003403 -0.074207 -8.13 -0.003413 -0.074320 -8.12 -0.003424 -0.074433 -8.11 -0.003434 -0.074547 -8.1 -0.003445 -0.074661 -8.09 -0.003456 -0.074775 -8.08 -0.003467 -0.074890 -8.07 -0.003477 -0.075005 -8.06 -0.003488 -0.075120 -8.05 -0.003499 -0.075236 -8.04 -0.003510 -0.075352 -8.03 -0.003521 -0.075469 -8.02 -0.003532 -0.075585 -8.01 -0.003543 -0.075703 -8 -0.003555 -0.075820 -7.99 -0.003566 -0.075938 -7.98 -0.003577 -0.076056 -7.97 -0.003588 -0.076175 -7.96 -0.003600 -0.076294 -7.95 -0.003611 -0.076413 -7.94 -0.003623 -0.076533 -7.93 -0.003634 -0.076653 -7.92 -0.003646 -0.076773 -7.91 -0.003658 -0.076894 -7.9 -0.003669 -0.077015 -7.89 -0.003681 -0.077137 -7.88 -0.003693 -0.077259 -7.87 -0.003705 -0.077381 -7.86 -0.003716 -0.077504 -7.85 -0.003728 -0.077627 -7.84 -0.003740 -0.077751 -7.83 -0.003752 -0.077875 -7.82 -0.003765 -0.077999 -7.81 -0.003777 -0.078124 -7.8 -0.003789 -0.078249 -7.79 -0.003801 -0.078375 -7.78 -0.003814 -0.078501 -7.77 -0.003826 -0.078627 -7.76 -0.003838 -0.078754 -7.75 -0.003851 -0.078881 -7.74 -0.003863 -0.079009 -7.73 -0.003876 -0.079137 -7.72 -0.003889 -0.079265 -7.71 -0.003902 -0.079394 -7.7 -0.003914 -0.079523 -7.69 -0.003927 -0.079653 -7.68 -0.003940 -0.079783 -7.67 -0.003953 -0.079914 -7.66 -0.003967 -0.080045 -7.65 -0.003980 -0.080177 -7.64 -0.003993 -0.080308 -7.63 -0.004006 -0.080441 -7.62 -0.004020 -0.080574 -7.61 -0.004033 -0.080707 -7.6 -0.004047 -0.080840 -7.59 -0.004060 -0.080974 -7.58 -0.004074 -0.081109 -7.57 -0.004088 -0.081244 -7.56 -0.004102 -0.081379 -7.55 -0.004115 -0.081515 -7.54 -0.004129 -0.081652 -7.53 -0.004143 -0.081788 -7.52 -0.004158 -0.081926 -7.51 -0.004172 -0.082063 -7.5 -0.004186 -0.082201 -7.49 -0.004200 -0.082340 -7.48 -0.004215 -0.082479 -7.47 -0.004229 -0.082619 -7.46 -0.004244 -0.082759 -7.45 -0.004258 -0.082899 -7.44 -0.004273 -0.083040 -7.43 -0.004287 -0.083182 -7.42 -0.004302 -0.083324 -7.41 -0.004317 -0.083466 -7.4 -0.004332 -0.083609 -7.39 -0.004347 -0.083752 -7.38 -0.004362 -0.083896 -7.37 -0.004377 -0.084041 -7.36 -0.004392 -0.084186 -7.35 -0.004408 -0.084331 -7.34 -0.004423 -0.084477 -7.33 -0.004439 -0.084624 -7.32 -0.004454 -0.084771 -7.31 -0.004470 -0.084918 -7.3 -0.004485 -0.085066 -7.29 -0.004501 -0.085215 -7.28 -0.004517 -0.085364 -7.27 -0.004533 -0.085514 -7.26 -0.004549 -0.085664 -7.25 -0.004566 -0.085815 -7.24 -0.004582 -0.085966 -7.23 -0.004598 -0.086118 -7.22 -0.004615 -0.086270 -7.21 -0.004631 -0.086423 -7.2 -0.004648 -0.086576 -7.19 -0.004665 -0.086730 -7.18 -0.004681 -0.086885 -7.17 -0.004698 -0.087040 -7.16 -0.004715 -0.087195 -7.15 -0.004733 -0.087351 -7.14 -0.004750 -0.087508 -7.13 -0.004767 -0.087665 -7.12 -0.004785 -0.087823 -7.11 -0.004802 -0.087981 -7.1 -0.004820 -0.088140 -7.09 -0.004837 -0.088300 -7.08 -0.004855 -0.088460 -7.07 -0.004873 -0.088621 -7.06 -0.004891 -0.088782 -7.05 -0.004909 -0.088944 -7.04 -0.004927 -0.089106 -7.03 -0.004946 -0.089269 -7.02 -0.004964 -0.089433 -7.01 -0.004982 -0.089597 -7 -0.005001 -0.089762 -6.99 -0.005020 -0.089927 -6.98 -0.005038 -0.090094 -6.97 -0.005057 -0.090260 -6.96 -0.005076 -0.090428 -6.95 -0.005095 -0.090596 -6.94 -0.005114 -0.090764 -6.93 -0.005134 -0.090934 -6.92 -0.005153 -0.091103 -6.91 -0.005173 -0.091274 -6.9 -0.005192 -0.091445 -6.89 -0.005212 -0.091617 -6.88 -0.005232 -0.091790 -6.87 -0.005252 -0.091963 -6.86 -0.005272 -0.092137 -6.85 -0.005292 -0.092311 -6.84 -0.005313 -0.092486 -6.83 -0.005333 -0.092662 -6.82 -0.005354 -0.092839 -6.81 -0.005375 -0.093016 -6.8 -0.005395 -0.093194 -6.79 -0.005417 -0.093372 -6.78 -0.005438 -0.093551 -6.77 -0.005459 -0.093731 -6.76 -0.005480 -0.093912 -6.75 -0.005502 -0.094093 -6.74 -0.005524 -0.094275 -6.73 -0.005546 -0.094458 -6.72 -0.005568 -0.094641 -6.71 -0.005590 -0.094825 -6.7 -0.005612 -0.095010 -6.69 -0.005634 -0.095196 -6.68 -0.005657 -0.095382 -6.67 -0.005679 -0.095569 -6.66 -0.005702 -0.095756 -6.65 -0.005725 -0.095945 -6.64 -0.005748 -0.096134 -6.63 -0.005771 -0.096324 -6.62 -0.005795 -0.096514 -6.61 -0.005818 -0.096706 -6.6 -0.005842 -0.096898 -6.59 -0.005865 -0.097091 -6.58 -0.005889 -0.097285 -6.57 -0.005913 -0.097479 -6.56 -0.005937 -0.097674 -6.55 -0.005961 -0.097870 -6.54 -0.005986 -0.098067 -6.53 -0.006010 -0.098265 -6.52 -0.006035 -0.098463 -6.51 -0.006060 -0.098662 -6.5 -0.006085 -0.098862 -6.49 -0.006110 -0.099063 -6.48 -0.006135 -0.099265 -6.47 -0.006160 -0.099468 -6.46 -0.006186 -0.099671 -6.45 -0.006211 -0.099875 -6.44 -0.006237 -0.100080 -6.43 -0.006263 -0.100286 -6.42 -0.006289 -0.100493 -6.41 -0.006316 -0.100701 -6.4 -0.006342 -0.100910 -6.39 -0.006369 -0.101119 -6.38 -0.006396 -0.101330 -6.37 -0.006423 -0.101541 -6.36 -0.006450 -0.101753 -6.35 -0.006478 -0.101966 -6.34 -0.006505 -0.102180 -6.33 -0.006533 -0.102395 -6.32 -0.006561 -0.102611 -6.31 -0.006589 -0.102827 -6.3 -0.006618 -0.103045 -6.29 -0.006646 -0.103264 -6.28 -0.006675 -0.103483 -6.27 -0.006704 -0.103703 -6.26 -0.006733 -0.103925 -6.25 -0.006763 -0.104147 -6.24 -0.006792 -0.104370 -6.23 -0.006822 -0.104594 -6.22 -0.006852 -0.104819 -6.21 -0.006882 -0.105046 -6.2 -0.006913 -0.105273 -6.19 -0.006943 -0.105501 -6.18 -0.006974 -0.105730 -6.17 -0.007005 -0.105960 -6.16 -0.007036 -0.106191 -6.15 -0.007068 -0.106423 -6.14 -0.007099 -0.106656 -6.13 -0.007131 -0.106890 -6.12 -0.007163 -0.107125 -6.11 -0.007195 -0.107361 -6.1 -0.007228 -0.107599 -6.09 -0.007261 -0.107837 -6.08 -0.007293 -0.108076 -6.07 -0.007326 -0.108317 -6.06 -0.007360 -0.108558 -6.05 -0.007393 -0.108801 -6.04 -0.007427 -0.109045 -6.03 -0.007461 -0.109290 -6.02 -0.007495 -0.109536 -6.01 -0.007530 -0.109783 -6 -0.007565 -0.110031 -5.99 -0.007600 -0.110280 -5.98 -0.007635 -0.110531 -5.97 -0.007670 -0.110783 -5.96 -0.007706 -0.111035 -5.95 -0.007742 -0.111289 -5.94 -0.007778 -0.111545 -5.93 -0.007815 -0.111801 -5.92 -0.007852 -0.112059 -5.91 -0.007889 -0.112317 -5.9 -0.007926 -0.112577 -5.89 -0.007964 -0.112838 -5.88 -0.008002 -0.113101 -5.87 -0.008040 -0.113364 -5.86 -0.008079 -0.113629 -5.85 -0.008118 -0.113895 -5.84 -0.008157 -0.114163 -5.83 -0.008196 -0.114431 -5.82 -0.008236 -0.114701 -5.81 -0.008276 -0.114972 -5.8 -0.008316 -0.115244 -5.79 -0.008357 -0.115518 -5.78 -0.008398 -0.115793 -5.77 -0.008439 -0.116069 -5.76 -0.008480 -0.116347 -5.75 -0.008522 -0.116626 -5.74 -0.008564 -0.116906 -5.73 -0.008607 -0.117187 -5.72 -0.008649 -0.117470 -5.71 -0.008692 -0.117755 -5.7 -0.008736 -0.118040 -5.69 -0.008779 -0.118328 -5.68 -0.008823 -0.118616 -5.67 -0.008867 -0.118906 -5.66 -0.008912 -0.119198 -5.65 -0.008957 -0.119490 -5.64 -0.009002 -0.119785 -5.63 -0.009048 -0.120081 -5.62 -0.009094 -0.120378 -5.61 -0.009140 -0.120677 -5.6 -0.009187 -0.120977 -5.59 -0.009234 -0.121279 -5.58 -0.009281 -0.121582 -5.57 -0.009329 -0.121887 -5.56 -0.009377 -0.122194 -5.55 -0.009426 -0.122502 -5.54 -0.009475 -0.122811 -5.53 -0.009524 -0.123122 -5.52 -0.009574 -0.123435 -5.51 -0.009624 -0.123749 -5.5 -0.009675 -0.124065 -5.49 -0.009726 -0.124383 -5.48 -0.009778 -0.124702 -5.47 -0.009829 -0.125023 -5.46 -0.009882 -0.125345 -5.45 -0.009935 -0.125670 -5.44 -0.009988 -0.125995 -5.43 -0.010041 -0.126323 -5.42 -0.010095 -0.126652 -5.41 -0.010150 -0.126983 -5.4 -0.010205 -0.127316 -5.39 -0.010260 -0.127650 -5.38 -0.010316 -0.127986 -5.37 -0.010372 -0.128324 -5.36 -0.010429 -0.128664 -5.35 -0.010486 -0.129005 -5.34 -0.010543 -0.129349 -5.33 -0.010601 -0.129694 -5.32 -0.010660 -0.130041 -5.31 -0.010719 -0.130390 -5.3 -0.010778 -0.130741 -5.29 -0.010838 -0.131093 -5.28 -0.010898 -0.131448 -5.27 -0.010959 -0.131805 -5.26 -0.011020 -0.132164 -5.25 -0.011082 -0.132525 -5.24 -0.011144 -0.132887 -5.23 -0.011207 -0.133252 -5.22 -0.011271 -0.133619 -5.21 -0.011335 -0.133988 -5.2 -0.011399 -0.134359 -5.19 -0.011464 -0.134733 -5.18 -0.011530 -0.135108 -5.17 -0.011597 -0.135486 -5.16 -0.011664 -0.135865 -5.15 -0.011731 -0.136247 -5.14 -0.011800 -0.136632 -5.13 -0.011869 -0.137018 -5.12 -0.011938 -0.137406 -5.11 -0.012009 -0.137797 -5.1 -0.012080 -0.138190 -5.09 -0.012151 -0.138586 -5.08 -0.012224 -0.138983 -5.07 -0.012297 -0.139383 -5.06 -0.012371 -0.139785 -5.05 -0.012445 -0.140190 -5.04 -0.012520 -0.140597 -5.03 -0.012597 -0.141006 -5.02 -0.012673 -0.141418 -5.01 -0.012751 -0.141832 -5 -0.012829 -0.142248 -4.99 -0.012908 -0.142667 -4.98 -0.012988 -0.143088 -4.97 -0.013069 -0.143512 -4.96 -0.013150 -0.143938 -4.95 -0.013233 -0.144367 -4.94 -0.013316 -0.144798 -4.93 -0.013400 -0.145232 -4.92 -0.013484 -0.145668 -4.91 -0.013570 -0.146107 -4.9 -0.013656 -0.146549 -4.89 -0.013743 -0.146993 -4.88 -0.013831 -0.147440 -4.87 -0.013919 -0.147890 -4.86 -0.014009 -0.148342 -4.85 -0.014099 -0.148797 -4.84 -0.014190 -0.149255 -4.83 -0.014282 -0.149716 -4.82 -0.014375 -0.150180 -4.81 -0.014469 -0.150646 -4.8 -0.014564 -0.151116 -4.79 -0.014659 -0.151588 -4.78 -0.014756 -0.152064 -4.77 -0.014853 -0.152542 -4.76 -0.014951 -0.153024 -4.75 -0.015051 -0.153509 -4.74 -0.015151 -0.153997 -4.73 -0.015252 -0.154488 -4.72 -0.015355 -0.154982 -4.71 -0.015458 -0.155480 -4.7 -0.015563 -0.155981 -4.69 -0.015669 -0.156485 -4.68 -0.015776 -0.156993 -4.67 -0.015884 -0.157504 -4.66 -0.015993 -0.158018 -4.65 -0.016103 -0.158536 -4.64 -0.016215 -0.159057 -4.63 -0.016328 -0.159581 -4.62 -0.016442 -0.160109 -4.61 -0.016558 -0.160641 -4.6 -0.016675 -0.161176 -4.59 -0.016793 -0.161715 -4.58 -0.016912 -0.162257 -4.57 -0.017033 -0.162803 -4.56 -0.017155 -0.163353 -4.55 -0.017278 -0.163906 -4.54 -0.017403 -0.164463 -4.53 -0.017529 -0.165024 -4.52 -0.017657 -0.165589 -4.51 -0.017786 -0.166158 -4.5 -0.017916 -0.166730 -4.49 -0.018048 -0.167307 -4.48 -0.018182 -0.167887 -4.47 -0.018317 -0.168472 -4.46 -0.018453 -0.169061 -4.45 -0.018591 -0.169654 -4.44 -0.018730 -0.170251 -4.43 -0.018871 -0.170853 -4.42 -0.019014 -0.171459 -4.41 -0.019159 -0.172069 -4.4 -0.019305 -0.172684 -4.39 -0.019453 -0.173303 -4.38 -0.019603 -0.173927 -4.37 -0.019755 -0.174556 -4.36 -0.019908 -0.175189 -4.35 -0.020064 -0.175827 -4.34 -0.020221 -0.176469 -4.33 -0.020381 -0.177117 -4.32 -0.020543 -0.177769 -4.31 -0.020707 -0.178426 -4.3 -0.020873 -0.179088 -4.29 -0.021041 -0.179754 -4.28 -0.021212 -0.180426 -4.27 -0.021385 -0.181103 -4.26 -0.021560 -0.181784 -4.25 -0.021738 -0.182471 -4.24 -0.021918 -0.183163 -4.23 -0.022101 -0.183860 -4.22 -0.022286 -0.184562 -4.21 -0.022474 -0.185269 -4.2 -0.022664 -0.185981 -4.19 -0.022856 -0.186699 -4.18 -0.023051 -0.187422 -4.17 -0.023249 -0.188150 -4.16 -0.023449 -0.188884 -4.15 -0.023652 -0.189623 -4.14 -0.023858 -0.190367 -4.13 -0.024066 -0.191118 -4.12 -0.024277 -0.191874 -4.11 -0.024491 -0.192636 -4.1 -0.024707 -0.193404 -4.09 -0.024926 -0.194177 -4.08 -0.025148 -0.194957 -4.07 -0.025373 -0.195743 -4.06 -0.025601 -0.196535 -4.05 -0.025831 -0.197334 -4.04 -0.026065 -0.198139 -4.03 -0.026302 -0.198951 -4.02 -0.026543 -0.199769 -4.01 -0.026786 -0.200594 -4 -0.027033 -0.201426 -3.99 -0.027284 -0.202264 -3.98 -0.027538 -0.203110 -3.97 -0.027796 -0.203962 -3.96 -0.028058 -0.204822 -3.95 -0.028323 -0.205688 -3.94 -0.028593 -0.206562 -3.93 -0.028866 -0.207443 -3.92 -0.029144 -0.208331 -3.91 -0.029425 -0.209226 -3.9 -0.029711 -0.210129 -3.89 -0.030001 -0.211039 -3.88 -0.030296 -0.211956 -3.87 -0.030594 -0.212881 -3.86 -0.030897 -0.213814 -3.85 -0.031205 -0.214754 -3.84 -0.031517 -0.215702 -3.83 -0.031833 -0.216658 -3.82 -0.032153 -0.217621 -3.81 -0.032478 -0.218593 -3.8 -0.032807 -0.219573 -3.79 -0.033141 -0.220562 -3.78 -0.033479 -0.221559 -3.77 -0.033822 -0.222565 -3.76 -0.034170 -0.223580 -3.75 -0.034522 -0.224605 -3.74 -0.034880 -0.225639 -3.73 -0.035242 -0.226682 -3.72 -0.035610 -0.227736 -3.71 -0.035983 -0.228800 -3.7 -0.036362 -0.229874 -3.69 -0.036746 -0.230959 -3.68 -0.037137 -0.232054 -3.67 -0.037534 -0.233160 -3.66 -0.037938 -0.234278 -3.65 -0.038349 -0.235407 -3.64 -0.038766 -0.236546 -3.63 -0.039192 -0.237698 -3.62 -0.039625 -0.238860 -3.61 -0.040065 -0.240035 -3.6 -0.040514 -0.241221 -3.59 -0.040972 -0.242418 -3.58 -0.041438 -0.243627 -3.57 -0.041913 -0.244848 -3.56 -0.042397 -0.246081 -3.55 -0.042891 -0.247325 -3.54 -0.043394 -0.248581 -3.53 -0.043906 -0.249849 -3.52 -0.044428 -0.251129 -3.51 -0.044961 -0.252421 -3.5 -0.045503 -0.253726 -3.49 -0.046056 -0.255042 -3.48 -0.046619 -0.256371 -3.47 -0.047193 -0.257713 -3.46 -0.047778 -0.259067 -3.45 -0.048374 -0.260433 -3.44 -0.048982 -0.261813 -3.43 -0.049601 -0.263206 -3.42 -0.050232 -0.264612 -3.41 -0.050875 -0.266032 -3.4 -0.051531 -0.267465 -3.39 -0.052200 -0.268912 -3.38 -0.052882 -0.270372 -3.37 -0.053578 -0.271847 -3.36 -0.054288 -0.273335 -3.35 -0.055012 -0.274837 -3.34 -0.055751 -0.276353 -3.33 -0.056505 -0.277882 -3.32 -0.057274 -0.279426 -3.31 -0.058060 -0.280983 -3.3 -0.058861 -0.282553 -3.29 -0.059678 -0.284137 -3.28 -0.060512 -0.285733 -3.27 -0.061362 -0.287343 -3.26 -0.062229 -0.288966 -3.25 -0.063112 -0.290602 -3.24 -0.064012 -0.292250 -3.23 -0.064927 -0.293911 -3.22 -0.065860 -0.295585 -3.21 -0.066808 -0.297272 -3.2 -0.067771 -0.298972 -3.19 -0.068751 -0.300686 -3.18 -0.069745 -0.302414 -3.17 -0.070755 -0.304156 -3.16 -0.071779 -0.305914 -3.15 -0.072819 -0.307688 -3.14 -0.073873 -0.309478 -3.13 -0.074942 -0.311287 -3.12 -0.076026 -0.313114 -3.11 -0.077125 -0.314962 -3.1 -0.078241 -0.316831 -3.09 -0.079373 -0.318722 -3.08 -0.080522 -0.320637 -3.07 -0.081689 -0.322576 -3.06 -0.082875 -0.324541 -3.05 -0.084082 -0.326533 -3.04 -0.085310 -0.328553 -3.03 -0.086561 -0.330601 -3.02 -0.087837 -0.332679 -3.01 -0.089138 -0.334787 -3 -0.090467 -0.336926 -2.99 -0.091824 -0.339096 -2.98 -0.093212 -0.341298 -2.97 -0.094632 -0.343532 -2.96 -0.096086 -0.345799 -2.95 -0.097574 -0.348099 -2.94 -0.099100 -0.350432 -2.93 -0.100664 -0.352799 -2.92 -0.102268 -0.355200 -2.91 -0.103914 -0.357635 -2.9 -0.105605 -0.360104 -2.89 -0.107340 -0.362609 -2.88 -0.109124 -0.365149 -2.87 -0.110957 -0.367724 -2.86 -0.112843 -0.370334 -2.85 -0.114783 -0.372980 -2.84 -0.116779 -0.375661 -2.83 -0.118835 -0.378377 -2.82 -0.120953 -0.381129 -2.81 -0.123135 -0.383915 -2.8 -0.125385 -0.386735 -2.79 -0.127705 -0.389588 -2.78 -0.130098 -0.392473 -2.77 -0.132566 -0.395390 -2.76 -0.135113 -0.398338 -2.75 -0.137741 -0.401313 -2.74 -0.140454 -0.404316 -2.73 -0.143253 -0.407345 -2.72 -0.146142 -0.410397 -2.71 -0.149123 -0.413471 -2.7 -0.152199 -0.416565 -2.69 -0.155372 -0.419676 -2.68 -0.158645 -0.422803 -2.67 -0.162020 -0.425942 -2.66 -0.165499 -0.429093 -2.65 -0.169084 -0.432251 -2.64 -0.172778 -0.435415 -2.63 -0.176582 -0.438582 -2.62 -0.180499 -0.441750 -2.61 -0.184532 -0.444916 -2.6 -0.188681 -0.448078 -2.59 -0.192950 -0.451233 -2.58 -0.197342 -0.454378 -2.57 -0.201857 -0.457510 -2.56 -0.206500 -0.460627 -2.55 -0.211273 -0.463725 -2.54 -0.216178 -0.466801 -2.53 -0.221220 -0.469851 -2.52 -0.226400 -0.472870 -2.51 -0.231723 -0.475855 -2.5 -0.237191 -0.478800 -2.49 -0.242808 -0.481699 -2.48 -0.248575 -0.484546 -2.47 -0.254497 -0.487334 -2.46 -0.260574 -0.490057 -2.45 -0.266810 -0.492706 -2.44 -0.273205 -0.495273 -2.43 -0.279759 -0.497750 -2.42 -0.286473 -0.500127 -2.41 -0.293346 -0.502395 -2.4 -0.300376 -0.504544 -2.39 -0.307561 -0.506564 -2.38 -0.314898 -0.508446 -2.37 -0.322382 -0.510180 -2.36 -0.330008 -0.511757 -2.35 -0.337770 -0.513166 -2.34 -0.345661 -0.514399 -2.33 -0.353672 -0.515447 -2.32 -0.361796 -0.516301 -2.31 -0.370021 -0.516955 -2.3 -0.378337 -0.517402 -2.29 -0.386733 -0.517636 -2.28 -0.395194 -0.517651 -2.27 -0.403709 -0.517446 -2.26 -0.412262 -0.517018 -2.25 -0.420840 -0.516366 -2.24 -0.429428 -0.515492 -2.23 -0.438010 -0.514398 -2.22 -0.446573 -0.513090 -2.21 -0.455101 -0.511575 -2.2 -0.463581 -0.509861 -2.19 -0.472001 -0.507959 -2.18 -0.480348 -0.505881 -2.17 -0.488613 -0.503642 -2.16 -0.496787 -0.501258 -2.15 -0.504864 -0.498746 -2.14 -0.512839 -0.496125 -2.13 -0.520712 -0.493415 -2.12 -0.528483 -0.490639 -2.11 -0.536157 -0.487816 -2.1 -0.543741 -0.484970 -2.09 -0.551247 -0.482121 -2.08 -0.558690 -0.479293 -2.07 -0.566089 -0.476503 -2.06 -0.573467 -0.473771 -2.05 -0.580851 -0.471112 -2.04 -0.588271 -0.468539 -2.03 -0.595762 -0.466060 -2.02 -0.603360 -0.463680 -2.01 -0.611105 -0.461396 -2 -0.619037 -0.459204 -1.99 -0.627199 -0.457090 -1.98 -0.635633 -0.455036 -1.97 -0.644380 -0.453016 -1.96 -0.653481 -0.450999 -1.95 -0.662973 -0.448947 -1.94 -0.672892 -0.446816 -1.93 -0.683269 -0.444554 -1.92 -0.694129 -0.442106 -1.91 -0.705493 -0.439411 -1.9 -0.717376 -0.436401 -1.89 -0.729785 -0.433006 -1.88 -0.742720 -0.429152 -1.87 -0.756174 -0.424760 -1.86 -0.770128 -0.419751 -1.85 -0.784556 -0.414044 -1.84 -0.799421 -0.407556 -1.83 -0.814677 -0.400206 -1.82 -0.830265 -0.391915 -1.81 -0.846117 -0.382606 -1.8 -0.862151 -0.372208 -1.79 -0.878275 -0.360655 -1.78 -0.894387 -0.347889 -1.77 -0.910372 -0.333861 -1.76 -0.926106 -0.318536 -1.75 -0.941458 -0.301890 -1.74 -0.956288 -0.283914 -1.73 -0.970449 -0.264618 -1.72 -0.983794 -0.244028 -1.71 -0.996172 -0.222190 -1.7 -1.007437 -0.199171 -1.69 -1.017446 -0.175055 -1.68 -1.026064 -0.149950 -1.67 -1.033170 -0.123982 -1.66 -1.038655 -0.097292 -1.65 -1.042431 -0.070041 -1.64 -1.044427 -0.042397 -1.63 -1.044597 -0.014544 -1.62 -1.042917 0.013333 -1.61 -1.039389 0.041046 -1.6 -1.034039 0.068408 -1.59 -1.026918 0.095238 -1.58 -1.018098 0.121366 -1.57 -1.007673 0.146632 -1.56 -0.995752 0.170895 -1.55 -0.982463 0.194029 -1.54 -0.967941 0.215929 -1.53 -0.952332 0.236511 -1.52 -0.935786 0.255708 -1.51 -0.918453 0.273477 -1.5 -0.900482 0.289790 -1.49 -0.882021 0.304640 -1.48 -0.863208 0.318035 -1.47 -0.844175 0.329996 -1.46 -0.825045 0.340559 -1.45 -0.805931 0.349767 -1.44 -0.786934 0.357673 -1.43 -0.768147 0.364337 -1.42 -0.749651 0.369823 -1.41 -0.731517 0.374198 -1.4 -0.713805 0.377531 -1.39 -0.696567 0.379892 -1.38 -0.679847 0.381351 -1.37 -0.663681 0.381976 -1.36 -0.648097 0.381834 -1.35 -0.633117 0.380989 -1.34 -0.618758 0.379505 -1.33 -0.605033 0.377439 -1.32 -0.591950 0.374848 -1.31 -0.579513 0.371786 -1.3 -0.567724 0.368303 -1.29 -0.556582 0.364447 -1.28 -0.546085 0.360262 -1.27 -0.536228 0.355790 -1.26 -0.527005 0.351071 -1.25 -0.518410 0.346143 -1.24 -0.510436 0.341041 -1.23 -0.503075 0.335798 -1.22 -0.496319 0.330447 -1.21 -0.490160 0.325016 -1.2 -0.484590 0.319537 -1.19 -0.479600 0.314037 -1.18 -0.475182 0.308544 -1.17 -0.471327 0.303085 -1.16 -0.468028 0.297686 -1.15 -0.465276 0.292375 -1.14 -0.463062 0.287177 -1.13 -0.461379 0.282120 -1.12 -0.460216 0.277231 -1.11 -0.459564 0.272537 -1.1 -0.459413 0.268068 -1.09 -0.459752 0.263852 -1.08 -0.460567 0.259919 -1.07 -0.461844 0.256301 -1.06 -0.463568 0.253028 -1.05 -0.465721 0.250134 -1.04 -0.468281 0.247651 -1.03 -0.471225 0.245614 -1.02 -0.474527 0.244056 -1.01 -0.478156 0.243011 -1 -0.482078 0.242513 -0.99 -0.486254 0.242594 -0.98 -0.490641 0.243284 -0.97 -0.495191 0.244614 -0.96 -0.499851 0.246607 -0.95 -0.504563 0.249287 -0.94 -0.509266 0.252669 -0.93 -0.513894 0.256764 -0.92 -0.518375 0.261578 -0.91 -0.522637 0.267107 -0.9 -0.526605 0.273338 -0.89 -0.530203 0.280252 -0.88 -0.533357 0.287818 -0.87 -0.535992 0.295995 -0.86 -0.538041 0.304733 -0.85 -0.539438 0.313972 -0.84 -0.540127 0.323644 -0.83 -0.540061 0.333672 -0.82 -0.539200 0.343972 -0.81 -0.537517 0.354458 -0.8 -0.534998 0.365039 -0.79 -0.531638 0.375621 -0.78 -0.527448 0.386116 -0.77 -0.522447 0.396433 -0.76 -0.516668 0.406491 -0.75 -0.510153 0.416212 -0.74 -0.502951 0.425527 -0.73 -0.495121 0.434375 -0.72 -0.486726 0.442706 -0.71 -0.477831 0.450478 -0.7 -0.468507 0.457660 -0.69 -0.458821 0.464229 -0.68 -0.448842 0.470174 -0.67 -0.438637 0.475490 -0.66 -0.428268 0.480179 -0.65 -0.417796 0.484252 -0.64 -0.407274 0.487725 -0.63 -0.396753 0.490616 -0.62 -0.386279 0.492951 -0.61 -0.375891 0.494755 -0.6 -0.365625 0.496058 -0.59 -0.355510 0.496891 -0.58 -0.345572 0.497283 -0.57 -0.335833 0.497266 -0.56 -0.326309 0.496871 -0.55 -0.317016 0.496129 -0.54 -0.307962 0.495068 -0.53 -0.299156 0.493716 -0.52 -0.290604 0.492102 -0.51 -0.282307 0.490249 -0.5 -0.274266 0.488183 -0.49 -0.266482 0.485925 -0.48 -0.258951 0.483497 -0.47 -0.251671 0.480918 -0.46 -0.244637 0.478206 -0.45 -0.237845 0.475378 -0.44 -0.231288 0.472449 -0.43 -0.224960 0.469433 -0.42 -0.218856 0.466344 -0.41 -0.212968 0.463192 -0.4 -0.207290 0.459988 -0.39 -0.201814 0.456743 -0.38 -0.196533 0.453464 -0.37 -0.191441 0.450160 -0.36 -0.186531 0.446838 -0.35 -0.181796 0.443504 -0.34 -0.177229 0.440164 -0.33 -0.172823 0.436823 -0.32 -0.168573 0.433486 -0.31 -0.164472 0.430157 -0.3 -0.160514 0.426840 -0.29 -0.156694 0.423538 -0.28 -0.153006 0.420253 -0.27 -0.149444 0.416989 -0.26 -0.146004 0.413748 -0.25 -0.142680 0.410531 -0.24 -0.139467 0.407340 -0.23 -0.136362 0.404177 -0.22 -0.133360 0.401044 -0.21 -0.130456 0.397940 -0.2 -0.127647 0.394867 -0.19 -0.124929 0.391826 -0.18 -0.122297 0.388817 -0.17 -0.119750 0.385841 -0.16 -0.117282 0.382899 -0.15 -0.114892 0.379990 -0.14 -0.112575 0.377114 -0.13 -0.110330 0.374273 -0.12 -0.108152 0.371465 -0.11 -0.106041 0.368692 -0.1 -0.103992 0.365952 -0.090000 -0.102004 0.363246 -0.080000 -0.100074 0.360573 -0.070000 -0.098201 0.357934 -0.060000 -0.096381 0.355328 -0.050000 -0.094613 0.352755 -0.040000 -0.092895 0.350214 -0.030000 -0.091226 0.347706 -0.020000 -0.089602 0.345229 -0.010000 -0.088024 0.342785 0 -0.086488 0.340371 0.009999 -0.084994 0.337988 0.019999 -0.083540 0.335636 0.029999 -0.082124 0.333313 0.039999 -0.080746 0.331021 0.049999 -0.079403 0.328757 0.059999 -0.078095 0.326523 0.069999 -0.076821 0.324317 0.079999 -0.075579 0.322138 0.089999 -0.074368 0.319988 0.099999 -0.073188 0.317865 0.11 -0.072036 0.315768 0.12 -0.070913 0.313698 0.13 -0.069817 0.311654 0.14 -0.068748 0.309635 0.15 -0.067704 0.307641 0.16 -0.066685 0.305672 0.17 -0.065689 0.303728 0.18 -0.064717 0.301808 0.19 -0.063767 0.299911 0.2 -0.062839 0.298037 0.21 -0.061932 0.296186 0.22 -0.061046 0.294358 0.23 -0.060179 0.292551 0.24 -0.059332 0.290767 0.25 -0.058503 0.289004 0.26 -0.057692 0.287262 0.27 -0.056899 0.285540 0.28 -0.056123 0.283839 0.29 -0.055363 0.282158 0.3 -0.054619 0.280496 0.31 -0.053891 0.278854 0.32 -0.053178 0.277231 0.33 -0.052480 0.275627 0.34 -0.051796 0.274041 0.35 -0.051126 0.272474 0.36 -0.050470 0.270924 0.37 -0.049826 0.269391 0.38 -0.049196 0.267876 0.39 -0.048578 0.266378 0.4 -0.047972 0.264897 0.41 -0.047378 0.263432 0.42 -0.046795 0.261984 0.43 -0.046223 0.260551 0.44 -0.045663 0.259134 0.45 -0.045113 0.257732 0.46 -0.044573 0.256346 0.47 -0.044043 0.254974 0.48 -0.043523 0.253618 0.49 -0.043013 0.252276 0.5 -0.042512 0.250948 0.51 -0.042020 0.249634 0.52 -0.041537 0.248334 0.53 -0.041062 0.247047 0.54 -0.040596 0.245774 0.55 -0.040139 0.244514 0.56 -0.039689 0.243267 0.57 -0.039247 0.242033 0.58 -0.038813 0.240812 0.59 -0.038386 0.239603 0.6 -0.037966 0.238406 0.61 -0.037554 0.237221 0.62 -0.037149 0.236048 0.63 -0.036750 0.234887 0.64 -0.036358 0.233737 0.65 -0.035973 0.232599 0.66 -0.035593 0.231472 0.67 -0.035221 0.230356 0.68 -0.034854 0.229250 0.69 -0.034493 0.228156 0.7 -0.034138 0.227072 0.71 -0.033788 0.225998 0.72 -0.033444 0.224935 0.73 -0.033106 0.223881 0.74 -0.032772 0.222838 0.75 -0.032444 0.221805 0.76 -0.032122 0.220781 0.77 -0.031804 0.219767 0.78 -0.031491 0.218762 0.79 -0.031182 0.217766 0.8 -0.030879 0.216780 0.81 -0.030580 0.215803 0.82 -0.030285 0.214834 0.83 -0.029995 0.213875 0.84 -0.029709 0.212924 0.85 -0.029427 0.211981 0.86 -0.029150 0.211047 0.87 -0.028876 0.210122 0.88 -0.028607 0.209204 0.89 -0.028341 0.208295 0.9 -0.028079 0.207393 0.91 -0.027821 0.206500 0.92 -0.027567 0.205614 0.93 -0.027316 0.204736 0.94 -0.027069 0.203866 0.95 -0.026825 0.203003 0.96 -0.026584 0.202147 0.97 -0.026347 0.201299 0.98 -0.026113 0.200458 0.99 -0.025883 0.199624 1 -0.025655 0.198797 1.01 -0.025431 0.197977 1.02 -0.025209 0.197164 1.03 -0.024991 0.196358 1.04 -0.024775 0.195558 1.05 -0.024563 0.194765 1.06 -0.024353 0.193978 1.07 -0.024146 0.193198 1.08 -0.023941 0.192424 1.09 -0.023740 0.191656 1.1 -0.023540 0.190895 1.11 -0.023344 0.190140 1.12 -0.023150 0.189391 1.13 -0.022958 0.188647 1.14 -0.022769 0.187910 1.15 -0.022583 0.187178 1.16 -0.022398 0.186453 1.17 -0.022216 0.185733 1.18 -0.022036 0.185018 1.19 -0.021859 0.184309 1.2 -0.021684 0.183606 1.21 -0.021510 0.182908 1.22 -0.021339 0.182215 1.23 -0.021170 0.181528 1.24 -0.021003 0.180846 1.25 -0.020839 0.180169 1.26 -0.020676 0.179497 1.27 -0.020515 0.178830 1.28 -0.020356 0.178169 1.29 -0.020199 0.177512 1.3 -0.020043 0.176860 1.31 -0.019890 0.176213 1.32 -0.019738 0.175571 1.33 -0.019588 0.174933 1.34 -0.019440 0.174301 1.35 -0.019294 0.173672 1.36 -0.019149 0.173049 1.37 -0.019006 0.172430 1.38 -0.018865 0.171815 1.39 -0.018725 0.171205 1.4 -0.018587 0.170599 1.41 -0.018450 0.169997 1.42 -0.018315 0.169400 1.43 -0.018181 0.168807 1.44 -0.018049 0.168219 1.45 -0.017919 0.167634 1.46 -0.017789 0.167053 1.47 -0.017662 0.166477 1.48 -0.017535 0.165905 1.49 -0.017410 0.165336 1.5 -0.017287 0.164772 1.51 -0.017164 0.164211 1.52 -0.017043 0.163654 1.53 -0.016924 0.163101 1.54 -0.016805 0.162552 1.55 -0.016688 0.162006 1.56 -0.016573 0.161465 1.57 -0.016458 0.160927 1.58 -0.016344 0.160392 1.59 -0.016232 0.159861 1.6 -0.016121 0.159334 1.61 -0.016011 0.158810 1.62 -0.015903 0.158290 1.63 -0.015795 0.157773 1.64 -0.015689 0.157259 1.65 -0.015583 0.156749 1.66 -0.015479 0.156242 1.67 -0.015376 0.155739 1.68 -0.015273 0.155238 1.69 -0.015172 0.154741 1.7 -0.015072 0.154248 1.71 -0.014973 0.153757 1.72 -0.014875 0.153270 1.73 -0.014778 0.152785 1.74 -0.014681 0.152304 1.75 -0.014586 0.151826 1.76 -0.014492 0.151351 1.77 -0.014399 0.150879 1.78 -0.014306 0.150409 1.79 -0.014215 0.149943 1.8 -0.014124 0.149480 1.81 -0.014034 0.149019 1.82 -0.013945 0.148562 1.83 -0.013857 0.148107 1.84 -0.013770 0.147655 1.85 -0.013684 0.147206 1.86 -0.013598 0.146760 1.87 -0.013513 0.146316 1.88 -0.013430 0.145875 1.89 -0.013346 0.145437 1.9 -0.013264 0.145001 1.91 -0.013182 0.144568 1.92 -0.013102 0.144138 1.93 -0.013022 0.143710 1.94 -0.012942 0.143284 1.95 -0.012864 0.142862 1.96 -0.012786 0.142442 1.97 -0.012709 0.142024 1.98 -0.012632 0.141609 1.99 -0.012557 0.141196 2 -0.012482 0.140785 2.01 -0.012407 0.140377 2.02 -0.012334 0.139972 2.03 -0.012261 0.139569 2.04 -0.012188 0.139168 2.05 -0.012117 0.138769 2.06 -0.012046 0.138373 2.07 -0.011975 0.137979 2.08 -0.011905 0.137587 2.09 -0.011836 0.137198 2.1 -0.011768 0.136810 2.11 -0.011700 0.136425 2.12 -0.011632 0.136043 2.13 -0.011565 0.135662 2.14 -0.011499 0.135283 2.15 -0.011434 0.134907 2.16 -0.011369 0.134532 2.17 -0.011304 0.134160 2.18 -0.011240 0.133790 2.19 -0.011177 0.133422 2.2 -0.011114 0.133056 2.21 -0.011052 0.132692 2.22 -0.010990 0.132330 2.23 -0.010929 0.131970 2.24 -0.010868 0.131612 2.25 -0.010808 0.131255 2.26 -0.010748 0.130901 2.27 -0.010689 0.130549 2.28 -0.010630 0.130199 2.29 -0.010572 0.129850 2.3 -0.010514 0.129504 2.31 -0.010457 0.129159 2.32 -0.010400 0.128816 2.33 -0.010344 0.128475 2.34 -0.010288 0.128136 2.35 -0.010232 0.127798 2.36 -0.010177 0.127463 2.37 -0.010123 0.127129 2.38 -0.010069 0.126797 2.39 -0.010015 0.126466 2.4 -0.009962 0.126138 2.41 -0.009909 0.125811 2.42 -0.009857 0.125486 2.43 -0.009805 0.125162 2.44 -0.009754 0.124840 2.45 -0.009703 0.124520 2.46 -0.009652 0.124202 2.47 -0.009602 0.123885 2.48 -0.009552 0.123569 2.49 -0.009502 0.123256 2.5 -0.009453 0.122944 2.51 -0.009404 0.122633 2.52 -0.009356 0.122324 2.53 -0.009308 0.122017 2.54 -0.009260 0.121711 2.55 -0.009213 0.121407 2.56 -0.009166 0.121105 2.57 -0.009120 0.120803 2.58 -0.009074 0.120504 2.59 -0.009028 0.120206 2.6 -0.008983 0.119909 2.61 -0.008937 0.119614 2.62 -0.008893 0.119320 2.63 -0.008848 0.119028 2.64 -0.008804 0.118737 2.65 -0.008760 0.118447 2.66 -0.008717 0.118159 2.67 -0.008674 0.117873 2.68 -0.008631 0.117588 2.69 -0.008589 0.117304 2.7 -0.008547 0.117021 2.71 -0.008505 0.116740 2.72 -0.008463 0.116461 2.73 -0.008422 0.116182 2.74 -0.008381 0.115905 2.75 -0.008341 0.115629 2.76 -0.008300 0.115355 2.77 -0.008260 0.115082 2.78 -0.008221 0.114810 2.79 -0.008181 0.114540 2.8 -0.008142 0.114270 2.81 -0.008103 0.114003 2.82 -0.008065 0.113736 2.83 -0.008026 0.113470 2.84 -0.007988 0.113206 2.85 -0.007951 0.112943 2.86 -0.007913 0.112682 2.87 -0.007876 0.112421 2.88 -0.007839 0.112162 2.89 -0.007802 0.111904 2.9 -0.007766 0.111647 2.91 -0.007730 0.111391 2.92 -0.007694 0.111137 2.93 -0.007658 0.110883 2.94 -0.007623 0.110631 2.95 -0.007588 0.110380 2.96 -0.007553 0.110130 2.97 -0.007518 0.109881 2.98 -0.007484 0.109634 2.99 -0.007449 0.109387 3 -0.007415 0.109142 3.01 -0.007382 0.108898 3.02 -0.007348 0.108654 3.03 -0.007315 0.108412 3.04 -0.007282 0.108171 3.05 -0.007249 0.107931 3.06 -0.007217 0.107693 3.07 -0.007184 0.107455 3.08 -0.007152 0.107218 3.09 -0.007120 0.106982 3.1 -0.007088 0.106748 3.11 -0.007057 0.106514 3.12 -0.007026 0.106281 3.13 -0.006995 0.106050 3.14 -0.006964 0.105819 3.15 -0.006933 0.105590 3.16 -0.006903 0.105361 3.17 -0.006872 0.105133 3.18 -0.006842 0.104907 3.19 -0.006812 0.104681 3.2 -0.006783 0.104457 3.21 -0.006753 0.104233 3.22 -0.006724 0.104010 3.23 -0.006695 0.103789 3.24 -0.006666 0.103568 3.25 -0.006637 0.103348 3.26 -0.006609 0.103129 3.27 -0.006581 0.102911 3.28 -0.006552 0.102694 3.29 -0.006524 0.102478 3.3 -0.006497 0.102263 3.31 -0.006469 0.102048 3.32 -0.006442 0.101835 3.33 -0.006414 0.101622 3.34 -0.006387 0.101411 3.35 -0.006360 0.101200 3.36 -0.006334 0.100990 3.37 -0.006307 0.100781 3.38 -0.006281 0.100573 3.39 -0.006254 0.100366 3.4 -0.006228 0.100159 3.41 -0.006202 0.099954 3.42 -0.006177 0.099749 3.43 -0.006151 0.099545 3.44 -0.006126 0.099342 3.45 -0.006100 0.099140 3.46 -0.006075 0.098939 3.47 -0.006050 0.098738 3.48 -0.006026 0.098538 3.49 -0.006001 0.098339 3.5 -0.005977 0.098141 3.51 -0.005952 0.097944 3.52 -0.005928 0.097747 3.53 -0.005904 0.097552 3.54 -0.005880 0.097357 3.55 -0.005856 0.097163 3.56 -0.005833 0.096969 3.57 -0.005809 0.096777 3.58 -0.005786 0.096585 3.59 -0.005763 0.096394 3.6 -0.005740 0.096203 3.61 -0.005717 0.096014 3.62 -0.005694 0.095825 3.63 -0.005671 0.095637 3.64 -0.005649 0.095449 3.65 -0.005627 0.095263 3.66 -0.005604 0.095077 3.67 -0.005582 0.094892 3.68 -0.005560 0.094707 3.69 -0.005539 0.094524 3.7 -0.005517 0.094341 3.71 -0.005495 0.094158 3.72 -0.005474 0.093977 3.73 -0.005453 0.093796 3.74 -0.005431 0.093616 3.75 -0.005410 0.093436 3.76 -0.005389 0.093258 3.77 -0.005369 0.093080 3.78 -0.005348 0.092902 3.79 -0.005327 0.092725 3.8 -0.005307 0.092549 3.81 -0.005287 0.092374 3.82 -0.005266 0.092199 3.83 -0.005246 0.092025 3.84 -0.005226 0.091852 3.85 -0.005206 0.091679 3.86 -0.005187 0.091507 3.87 -0.005167 0.091336 3.88 -0.005147 0.091165 3.89 -0.005128 0.090995 3.9 -0.005109 0.090825 3.91 -0.005089 0.090656 3.92 -0.005070 0.090488 3.93 -0.005051 0.090320 3.94 -0.005033 0.090153 3.95 -0.005014 0.089987 3.96 -0.004995 0.089821 3.97 -0.004977 0.089656 3.98 -0.004958 0.089491 3.99 -0.004940 0.089327 4 -0.004921 0.089164 4.01 -0.004903 0.089001 4.02 -0.004885 0.088839 4.03 -0.004867 0.088678 4.04 -0.004849 0.088517 4.05 -0.004832 0.088356 4.06 -0.004814 0.088196 4.07 -0.004797 0.088037 4.08 -0.004779 0.087879 4.09 -0.004762 0.087721 4.1 -0.004744 0.087563 4.11 -0.004727 0.087406 4.12 -0.004710 0.087250 4.13 -0.004693 0.087094 4.14 -0.004676 0.086939 4.15 -0.004659 0.086784 4.16 -0.004643 0.086630 4.17 -0.004626 0.086476 4.18 -0.004610 0.086323 4.19 -0.004593 0.086171 4.2 -0.004577 0.086019 4.21 -0.004561 0.085867 4.22 -0.004544 0.085716 4.23 -0.004528 0.085566 4.24 -0.004512 0.085416 4.25 -0.004496 0.085267 4.26 -0.004481 0.085118 4.27 -0.004465 0.084970 4.28 -0.004449 0.084822 4.29 -0.004434 0.084675 4.3 -0.004418 0.084528 4.31 -0.004403 0.084382 4.32 -0.004387 0.084236 4.33 -0.004372 0.084091 4.34 -0.004357 0.083946 4.35 -0.004342 0.083802 4.36 -0.004327 0.083658 4.37 -0.004312 0.083515 4.38 -0.004297 0.083373 4.39 -0.004282 0.083230 4.4 -0.004267 0.083089 4.41 -0.004253 0.082947 4.42 -0.004238 0.082807 4.43 -0.004224 0.082666 4.44 -0.004209 0.082526 4.45 -0.004195 0.082387 4.46 -0.004181 0.082248 4.47 -0.004166 0.082110 4.48 -0.004152 0.081972 4.49 -0.004138 0.081834 4.5 -0.004124 0.081697 4.51 -0.004110 0.081561 4.52 -0.004097 0.081425 4.53 -0.004083 0.081289 4.54 -0.004069 0.081154 4.55 -0.004056 0.081019 4.56 -0.004042 0.080885 4.57 -0.004028 0.080751 4.58 -0.004015 0.080618 4.59 -0.004002 0.080485 4.6 -0.003988 0.080352 4.61 -0.003975 0.080220 4.62 -0.003962 0.080088 4.63 -0.003949 0.079957 4.64 -0.003936 0.079826 4.65 -0.003923 0.079696 4.66 -0.003910 0.079566 4.67 -0.003897 0.079437 4.68 -0.003884 0.079308 4.69 -0.003872 0.079179 4.7 -0.003859 0.079051 4.71 -0.003847 0.078923 4.72 -0.003834 0.078795 4.73 -0.003822 0.078668 4.74 -0.003809 0.078542 4.75 -0.003797 0.078416 4.76 -0.003785 0.078290 4.77 -0.003772 0.078165 4.78 -0.003760 0.078040 4.79 -0.003748 0.077915 4.8 -0.003736 0.077791 4.81 -0.003724 0.077667 4.82 -0.003712 0.077544 4.83 -0.003700 0.077421 4.84 -0.003688 0.077298 4.85 -0.003677 0.077176 4.86 -0.003665 0.077054 4.87 -0.003653 0.076933 4.88 -0.003642 0.076812 4.89 -0.003630 0.076691 4.9 -0.003619 0.076571 4.91 -0.003607 0.076451 4.92 -0.003596 0.076331 4.93 -0.003585 0.076212 4.94 -0.003573 0.076093 4.95 -0.003562 0.075975 4.96 -0.003551 0.075857 4.97 -0.003540 0.075739 4.98 -0.003529 0.075622 4.99 -0.003518 0.075505 5 -0.003507 0.075388 5.01 -0.003496 0.075272 5.02 -0.003485 0.075156 5.03 -0.003475 0.075041 5.04 -0.003464 0.074926 5.05 -0.003453 0.074811 5.06 -0.003442 0.074696 5.07 -0.003432 0.074582 5.08 -0.003421 0.074468 5.09 -0.003411 0.074355 5.1 -0.003400 0.074242 5.11 -0.003390 0.074129 5.12 -0.003380 0.074017 5.13 -0.003369 0.073905 5.14 -0.003359 0.073793 5.15 -0.003349 0.073682 5.16 -0.003339 0.073571 5.17 -0.003329 0.073460 5.18 -0.003319 0.073350 5.19 -0.003309 0.073240 5.2 -0.003299 0.073130 5.21 -0.003289 0.073021 5.22 -0.003279 0.072912 5.23 -0.003269 0.072803 5.24 -0.003259 0.072695 5.25 -0.003249 0.072587 5.26 -0.003240 0.072479 5.27 -0.003230 0.072372 5.28 -0.003220 0.072264 5.29 -0.003211 0.072158 5.3 -0.003201 0.072051 5.31 -0.003192 0.071945 5.32 -0.003182 0.071839 5.33 -0.003173 0.071734 5.34 -0.003164 0.071629 5.35 -0.003154 0.071524 5.36 -0.003145 0.071419 5.37 -0.003136 0.071315 5.38 -0.003126 0.071211 5.39 -0.003117 0.071107 5.4 -0.003108 0.071004 5.41 -0.003099 0.070901 5.42 -0.003090 0.070798 5.43 -0.003081 0.070695 5.44 -0.003072 0.070593 5.45 -0.003063 0.070491 5.46 -0.003054 0.070390 5.47 -0.003045 0.070289 5.48 -0.003037 0.070188 5.49 -0.003028 0.070087 5.5 -0.003019 0.069986 5.51 -0.003010 0.069886 5.52 -0.003002 0.069786 5.53 -0.002993 0.069687 5.54 -0.002985 0.069588 5.55 -0.002976 0.069489 5.56 -0.002968 0.069390 5.57 -0.002959 0.069291 5.58 -0.002951 0.069193 5.59 -0.002942 0.069095 5.6 -0.002934 0.068998 5.61 -0.002926 0.068901 5.62 -0.002917 0.068803 5.63 -0.002909 0.068707 5.64 -0.002901 0.068610 5.65 -0.002893 0.068514 5.66 -0.002884 0.068418 5.67 -0.002876 0.068322 5.68 -0.002868 0.068227 5.69 -0.002860 0.068132 5.7 -0.002852 0.068037 5.71 -0.002844 0.067942 5.72 -0.002836 0.067848 5.73 -0.002828 0.067754 5.74 -0.002820 0.067660 5.75 -0.002813 0.067566 5.76 -0.002805 0.067473 5.77 -0.002797 0.067380 5.78 -0.002789 0.067287 5.79 -0.002782 0.067195 5.8 -0.002774 0.067102 5.81 -0.002766 0.067010 5.82 -0.002759 0.066919 5.83 -0.002751 0.066827 5.84 -0.002743 0.066736 5.85 -0.002736 0.066645 5.86 -0.002728 0.066554 5.87 -0.002721 0.066463 5.88 -0.002714 0.066373 5.89 -0.002706 0.066283 5.9 -0.002699 0.066193 5.91 -0.002691 0.066104 5.92 -0.002684 0.066014 5.93 -0.002677 0.065925 5.94 -0.002670 0.065837 5.95 -0.002662 0.065748 5.96 -0.002655 0.065660 5.97 -0.002648 0.065572 5.98 -0.002641 0.065484 5.99 -0.002634 0.065396 6 -0.002627 0.065309 6.01 -0.002620 0.065221 6.02 -0.002613 0.065135 6.03 -0.002606 0.065048 6.04 -0.002599 0.064961 6.05 -0.002592 0.064875 6.06 -0.002585 0.064789 6.07 -0.002578 0.064703 6.08 -0.002571 0.064618 6.09 -0.002564 0.064532 6.1 -0.002557 0.064447 6.11 -0.002551 0.064362 6.12 -0.002544 0.064278 6.13 -0.002537 0.064193 6.14 -0.002531 0.064109 6.15 -0.002524 0.064025 6.16 -0.002517 0.063941 6.17 -0.002511 0.063858 6.18 -0.002504 0.063774 6.19 -0.002497 0.063691 6.2 -0.002491 0.063608 6.21 -0.002484 0.063526 6.22 -0.002478 0.063443 6.23 -0.002472 0.063361 6.24 -0.002465 0.063279 6.25 -0.002459 0.063197 6.26 -0.002452 0.063116 6.27 -0.002446 0.063034 6.28 -0.002440 0.062953 6.29 -0.002433 0.062872 6.3 -0.002427 0.062791 6.31 -0.002421 0.062711 6.32 -0.002415 0.062630 6.33 -0.002408 0.062550 6.34 -0.002402 0.062470 6.35 -0.002396 0.062390 6.36 -0.002390 0.062311 6.37 -0.002384 0.062232 6.38 -0.002378 0.062152 6.39 -0.002372 0.062073 6.4 -0.002365 0.061995 6.41 -0.002359 0.061916 6.42 -0.002353 0.061838 6.43 -0.002347 0.061760 6.44 -0.002342 0.061682 6.45 -0.002336 0.061604 6.46 -0.002330 0.061526 6.47 -0.002324 0.061449 6.48 -0.002318 0.061372 6.49 -0.002312 0.061295 6.5 -0.002306 0.061218 6.51 -0.002301 0.061142 6.52 -0.002295 0.061065 6.53 -0.002289 0.060989 6.54 -0.002283 0.060913 6.55 -0.002278 0.060837 6.56 -0.002272 0.060762 6.57 -0.002266 0.060686 6.58 -0.002261 0.060611 6.59 -0.002255 0.060536 6.6 -0.002249 0.060461 6.61 -0.002244 0.060386 6.62 -0.002238 0.060312 6.63 -0.002233 0.060237 6.64 -0.002227 0.060163 6.65 -0.002222 0.060089 6.66 -0.002216 0.060016 6.67 -0.002211 0.059942 6.68 -0.002205 0.059869 6.69 -0.002200 0.059795 6.7 -0.002194 0.059722 6.71 -0.002189 0.059649 6.72 -0.002184 0.059577 6.73 -0.002178 0.059504 6.74 -0.002173 0.059432 6.75 -0.002168 0.059360 6.76 -0.002162 0.059288 6.77 -0.002157 0.059216 6.78 -0.002152 0.059144 6.79 -0.002147 0.059073 6.8 -0.002141 0.059002 6.81 -0.002136 0.058930 6.82 -0.002131 0.058859 6.83 -0.002126 0.058789 6.84 -0.002121 0.058718 6.85 -0.002116 0.058648 6.86 -0.002111 0.058577 6.87 -0.002106 0.058507 6.88 -0.002101 0.058437 6.89 -0.002095 0.058368 6.9 -0.002090 0.058298 6.91 -0.002085 0.058228 6.92 -0.002080 0.058159 6.93 -0.002076 0.058090 6.94 -0.002071 0.058021 6.95 -0.002066 0.057952 6.96 -0.002061 0.057884 6.97 -0.002056 0.057815 6.98 -0.002051 0.057747 6.99 -0.002046 0.057679 7 -0.002041 0.057611 7.01 -0.002036 0.057543 7.02 -0.002032 0.057475 7.03 -0.002027 0.057408 7.04 -0.002022 0.057341 7.05 -0.002017 0.057273 7.06 -0.002013 0.057206 7.07 -0.002008 0.057140 7.08 -0.002003 0.057073 7.09 -0.001998 0.057006 7.1 -0.001994 0.056940 7.11 -0.001989 0.056874 7.12 -0.001984 0.056808 7.13 -0.001980 0.056742 7.14 -0.001975 0.056676 7.15 -0.001971 0.056610 7.16 -0.001966 0.056545 7.17 -0.001962 0.056480 7.18 -0.001957 0.056414 7.19 -0.001952 0.056349 7.2 -0.001948 0.056285 7.21 -0.001943 0.056220 7.22 -0.001939 0.056155 7.23 -0.001934 0.056091 7.24 -0.001930 0.056027 7.25 -0.001926 0.055962 7.26 -0.001921 0.055898 7.27 -0.001917 0.055835 7.28 -0.001912 0.055771 7.29 -0.001908 0.055707 7.3 -0.001904 0.055644 7.31 -0.001899 0.055581 7.32 -0.001895 0.055518 7.33 -0.001891 0.055455 7.34 -0.001886 0.055392 7.35 -0.001882 0.055329 7.36 -0.001878 0.055267 7.37 -0.001874 0.055204 7.38 -0.001869 0.055142 7.39 -0.001865 0.055080 7.4 -0.001861 0.055018 7.41 -0.001857 0.054956 7.42 -0.001852 0.054894 7.43 -0.001848 0.054833 7.44 -0.001844 0.054771 7.45 -0.001840 0.054710 7.46 -0.001836 0.054649 7.47 -0.001832 0.054588 7.48 -0.001828 0.054527 7.49 -0.001824 0.054466 7.5 -0.001820 0.054406 7.51 -0.001815 0.054345 7.52 -0.001811 0.054285 7.53 -0.001807 0.054225 7.54 -0.001803 0.054165 7.55 -0.001799 0.054105 7.56 -0.001795 0.054045 7.57 -0.001791 0.053985 7.58 -0.001787 0.053926 7.59 -0.001783 0.053866 7.6 -0.001780 0.053807 7.61 -0.001776 0.053748 7.62 -0.001772 0.053689 7.63 -0.001768 0.053630 7.64 -0.001764 0.053571 7.65 -0.001760 0.053513 7.66 -0.001756 0.053454 7.67 -0.001752 0.053396 7.68 -0.001748 0.053338 7.69 -0.001745 0.053280 7.7 -0.001741 0.053222 7.71 -0.001737 0.053164 7.72 -0.001733 0.053106 7.73 -0.001729 0.053048 7.74 -0.001726 0.052991 7.75 -0.001722 0.052934 7.76 -0.001718 0.052876 7.77 -0.001715 0.052819 7.78 -0.001711 0.052762 7.79 -0.001707 0.052705 7.8 -0.001703 0.052649 7.81 -0.001700 0.052592 7.82 -0.001696 0.052536 7.83 -0.001692 0.052479 7.84 -0.001689 0.052423 7.85 -0.001685 0.052367 7.86 -0.001682 0.052311 7.87 -0.001678 0.052255 7.88 -0.001674 0.052199 7.89 -0.001671 0.052143 7.9 -0.001667 0.052088 7.91 -0.001664 0.052032 7.92 -0.001660 0.051977 7.93 -0.001657 0.051922 7.94 -0.001653 0.051867 7.95 -0.001650 0.051812 7.96 -0.001646 0.051757 7.97 -0.001643 0.051702 7.98 -0.001639 0.051648 7.99 -0.001636 0.051593 8 -0.001632 0.051539 8.01 -0.001629 0.051485 8.02 -0.001625 0.051431 8.03 -0.001622 0.051377 8.04 -0.001618 0.051323 8.05 -0.001615 0.051269 8.06 -0.001612 0.051215 8.07 -0.001608 0.051162 8.08 -0.001605 0.051108 8.09 -0.001601 0.051055 8.1 -0.001598 0.051002 8.11 -0.001595 0.050948 8.12 -0.001591 0.050895 8.13 -0.001588 0.050843 8.14 -0.001585 0.050790 8.15 -0.001582 0.050737 8.16 -0.001578 0.050684 8.17 -0.001575 0.050632 8.18 -0.001572 0.050580 8.19 -0.001568 0.050527 8.2 -0.001565 0.050475 8.21 -0.001562 0.050423 8.22 -0.001559 0.050371 8.23 -0.001555 0.050319 8.24 -0.001552 0.050268 8.25 -0.001549 0.050216 8.26 -0.001546 0.050165 8.27 -0.001543 0.050113 8.28 -0.001540 0.050062 8.29 -0.001536 0.050011 8.3 -0.001533 0.049960 8.31 -0.001530 0.049909 8.32 -0.001527 0.049858 8.33 -0.001524 0.049807 8.34 -0.001521 0.049756 8.35 -0.001518 0.049706 8.36 -0.001515 0.049655 8.37 -0.001511 0.049605 8.38 -0.001508 0.049555 8.39 -0.001505 0.049505 8.4 -0.001502 0.049455 8.41 -0.001499 0.049405 8.42 -0.001496 0.049355 8.43 -0.001493 0.049305 8.44 -0.001490 0.049255 8.45 -0.001487 0.049206 8.46 -0.001484 0.049156 8.47 -0.001481 0.049107 8.48 -0.001478 0.049058 8.49 -0.001475 0.049009 8.5 -0.001472 0.048960 8.51 -0.001469 0.048911 8.52 -0.001466 0.048862 8.53 -0.001463 0.048813 8.54 -0.001461 0.048764 8.55 -0.001458 0.048716 8.56 -0.001455 0.048667 8.57 -0.001452 0.048619 8.58 -0.001449 0.048571 8.59 -0.001446 0.048523 8.6 -0.001443 0.048474 8.61 -0.001440 0.048426 8.62 -0.001437 0.048379 8.63 -0.001435 0.048331 8.64 -0.001432 0.048283 8.65 -0.001429 0.048235 8.66 -0.001426 0.048188 8.67 -0.001423 0.048140 8.68 -0.001420 0.048093 8.69 -0.001418 0.048046 8.7 -0.001415 0.047999 8.71 -0.001412 0.047952 8.72 -0.001409 0.047905 8.73 -0.001407 0.047858 8.74 -0.001404 0.047811 8.75 -0.001401 0.047764 8.76 -0.001398 0.047718 8.77 -0.001396 0.047671 8.78 -0.001393 0.047625 8.79 -0.001390 0.047579 8.8 -0.001387 0.047532 8.81 -0.001385 0.047486 8.82 -0.001382 0.047440 8.83 -0.001379 0.047394 8.84 -0.001377 0.047348 8.85 -0.001374 0.047303 8.86 -0.001371 0.047257 8.87 -0.001369 0.047211 8.88 -0.001366 0.047166 8.89 -0.001363 0.047120 8.9 -0.001361 0.047075 8.91 -0.001358 0.047030 8.92 -0.001355 0.046985 8.93 -0.001353 0.046940 8.94 -0.001350 0.046895 8.95 -0.001348 0.046850 8.96 -0.001345 0.046805 8.97 -0.001343 0.046760 8.98 -0.001340 0.046715 8.99 -0.001337 0.046671 9 -0.001335 0.046626 9.01 -0.001332 0.046582 9.02 -0.001330 0.046538 9.03 -0.001327 0.046493 9.04 -0.001325 0.046449 9.05 -0.001322 0.046405 9.06 -0.001320 0.046361 9.07 -0.001317 0.046317 9.08 -0.001315 0.046274 9.09 -0.001312 0.046230 9.1 -0.001310 0.046186 9.11 -0.001307 0.046143 9.12 -0.001305 0.046099 9.13 -0.001302 0.046056 9.14 -0.001300 0.046012 9.15 -0.001297 0.045969 9.16 -0.001295 0.045926 9.17 -0.001292 0.045883 9.18 -0.001290 0.045840 9.19 -0.001288 0.045797 9.2 -0.001285 0.045754 9.21 -0.001283 0.045712 9.22 -0.001280 0.045669 9.23 -0.001278 0.045626 9.24 -0.001276 0.045584 9.25 -0.001273 0.045541 9.26 -0.001271 0.045499 9.27 -0.001268 0.045457 9.28 -0.001266 0.045414 9.29 -0.001264 0.045372 9.3 -0.001261 0.045330 9.31 -0.001259 0.045288 9.32 -0.001257 0.045246 9.33 -0.001254 0.045205 9.34 -0.001252 0.045163 9.35 -0.001250 0.045121 9.36 -0.001247 0.045080 9.37 -0.001245 0.045038 9.38 -0.001243 0.044997 9.39 -0.001241 0.044955 9.4 -0.001238 0.044914 9.41 -0.001236 0.044873 9.42 -0.001234 0.044832 9.43 -0.001231 0.044791 9.44 -0.001229 0.044750 9.45 -0.001227 0.044709 9.46 -0.001225 0.044668 9.47 -0.001222 0.044627 9.48 -0.001220 0.044587 9.49 -0.001218 0.044546 9.5 -0.001216 0.044506 9.51 -0.001214 0.044465 9.52 -0.001211 0.044425 9.53 -0.001209 0.044385 9.54 -0.001207 0.044344 9.55 -0.001205 0.044304 9.56 -0.001203 0.044264 9.57 -0.001200 0.044224 9.58 -0.001198 0.044184 9.59 -0.001196 0.044144 9.6 -0.001194 0.044104 9.61 -0.001192 0.044065 9.62 -0.001190 0.044025 9.63 -0.001187 0.043986 9.64 -0.001185 0.043946 9.65 -0.001183 0.043907 9.66 -0.001181 0.043867 9.67 -0.001179 0.043828 9.68 -0.001177 0.043789 9.69 -0.001175 0.043750 9.7 -0.001173 0.043710 9.71 -0.001171 0.043671 9.72 -0.001168 0.043633 9.73 -0.001166 0.043594 9.74 -0.001164 0.043555 9.75 -0.001162 0.043516 9.76 -0.001160 0.043477 9.77 -0.001158 0.043439 9.78 -0.001156 0.043400 9.79 -0.001154 0.043362 9.8 -0.001152 0.043323 9.81 -0.001150 0.043285 9.82 -0.001148 0.043247 9.83 -0.001146 0.043209 9.84 -0.001144 0.043171 9.85 -0.001142 0.043133 9.86 -0.001140 0.043095 9.87 -0.001138 0.043057 9.88 -0.001136 0.043019 9.89 -0.001134 0.042981 9.9 -0.001132 0.042943 9.91 -0.001130 0.042906 9.92 -0.001128 0.042868 9.93 -0.001126 0.042830 9.94 -0.001124 0.042793 9.95 -0.001122 0.042756 9.96 -0.001120 0.042718 9.97 -0.001118 0.042681 9.98 -0.001116 0.042644 9.99 -0.001114 0.042607 dmrgpp-6.02/TestSuite/oracles/data3005.cf000066400000000000000000001454411414604301300200530ustar00rootroot00000000000000-10 -0.001112 -0.042570 -9.99 -0.001114 -0.042607 -9.98 -0.001116 -0.042644 -9.97 -0.001118 -0.042681 -9.96 -0.001120 -0.042719 -9.95 -0.001122 -0.042756 -9.94 -0.001124 -0.042793 -9.93 -0.001126 -0.042831 -9.92 -0.001128 -0.042868 -9.91 -0.001130 -0.042906 -9.9 -0.001132 -0.042943 -9.89 -0.001134 -0.042981 -9.88 -0.001136 -0.043019 -9.87 -0.001138 -0.043057 -9.86 -0.001140 -0.043095 -9.85 -0.001142 -0.043133 -9.84 -0.001144 -0.043171 -9.83 -0.001146 -0.043209 -9.82 -0.001148 -0.043247 -9.81 -0.001150 -0.043285 -9.8 -0.001152 -0.043324 -9.79 -0.001154 -0.043362 -9.78 -0.001156 -0.043401 -9.77 -0.001158 -0.043439 -9.76 -0.001160 -0.043478 -9.75 -0.001162 -0.043516 -9.74 -0.001164 -0.043555 -9.73 -0.001166 -0.043594 -9.72 -0.001168 -0.043633 -9.71 -0.001171 -0.043672 -9.7 -0.001173 -0.043711 -9.69 -0.001175 -0.043750 -9.68 -0.001177 -0.043789 -9.67 -0.001179 -0.043828 -9.66 -0.001181 -0.043867 -9.65 -0.001183 -0.043907 -9.64 -0.001185 -0.043946 -9.63 -0.001187 -0.043986 -9.62 -0.001190 -0.044025 -9.61 -0.001192 -0.044065 -9.6 -0.001194 -0.044105 -9.59 -0.001196 -0.044145 -9.58 -0.001198 -0.044184 -9.57 -0.001200 -0.044224 -9.56 -0.001203 -0.044264 -9.55 -0.001205 -0.044304 -9.54 -0.001207 -0.044345 -9.53 -0.001209 -0.044385 -9.52 -0.001211 -0.044425 -9.51 -0.001214 -0.044465 -9.5 -0.001216 -0.044506 -9.49 -0.001218 -0.044546 -9.48 -0.001220 -0.044587 -9.47 -0.001223 -0.044628 -9.46 -0.001225 -0.044668 -9.45 -0.001227 -0.044709 -9.44 -0.001229 -0.044750 -9.43 -0.001232 -0.044791 -9.42 -0.001234 -0.044832 -9.41 -0.001236 -0.044873 -9.4 -0.001238 -0.044914 -9.39 -0.001241 -0.044956 -9.38 -0.001243 -0.044997 -9.37 -0.001245 -0.045038 -9.36 -0.001247 -0.045080 -9.35 -0.001250 -0.045122 -9.34 -0.001252 -0.045163 -9.33 -0.001254 -0.045205 -9.32 -0.001257 -0.045247 -9.31 -0.001259 -0.045289 -9.3 -0.001261 -0.045331 -9.29 -0.001264 -0.045373 -9.28 -0.001266 -0.045415 -9.27 -0.001269 -0.045457 -9.26 -0.001271 -0.045499 -9.25 -0.001273 -0.045542 -9.24 -0.001276 -0.045584 -9.23 -0.001278 -0.045626 -9.22 -0.001280 -0.045669 -9.21 -0.001283 -0.045712 -9.2 -0.001285 -0.045755 -9.19 -0.001288 -0.045797 -9.18 -0.001290 -0.045840 -9.17 -0.001292 -0.045883 -9.16 -0.001295 -0.045926 -9.15 -0.001297 -0.045969 -9.14 -0.001300 -0.046013 -9.13 -0.001302 -0.046056 -9.12 -0.001305 -0.046099 -9.11 -0.001307 -0.046143 -9.1 -0.001310 -0.046186 -9.09 -0.001312 -0.046230 -9.08 -0.001315 -0.046274 -9.07 -0.001317 -0.046318 -9.06 -0.001320 -0.046362 -9.05 -0.001322 -0.046405 -9.04 -0.001325 -0.046450 -9.03 -0.001327 -0.046494 -9.02 -0.001330 -0.046538 -9.01 -0.001332 -0.046582 -9 -0.001335 -0.046627 -8.99 -0.001337 -0.046671 -8.98 -0.001340 -0.046716 -8.97 -0.001343 -0.046760 -8.96 -0.001345 -0.046805 -8.95 -0.001348 -0.046850 -8.94 -0.001350 -0.046895 -8.93 -0.001353 -0.046940 -8.92 -0.001356 -0.046985 -8.91 -0.001358 -0.047030 -8.9 -0.001361 -0.047075 -8.89 -0.001363 -0.047121 -8.88 -0.001366 -0.047166 -8.87 -0.001369 -0.047212 -8.86 -0.001371 -0.047257 -8.85 -0.001374 -0.047303 -8.84 -0.001377 -0.047349 -8.83 -0.001379 -0.047395 -8.82 -0.001382 -0.047440 -8.81 -0.001385 -0.047487 -8.8 -0.001387 -0.047533 -8.79 -0.001390 -0.047579 -8.78 -0.001393 -0.047625 -8.77 -0.001396 -0.047672 -8.76 -0.001398 -0.047718 -8.75 -0.001401 -0.047765 -8.74 -0.001404 -0.047811 -8.73 -0.001407 -0.047858 -8.72 -0.001409 -0.047905 -8.71 -0.001412 -0.047952 -8.7 -0.001415 -0.047999 -8.69 -0.001418 -0.048046 -8.68 -0.001420 -0.048093 -8.67 -0.001423 -0.048141 -8.66 -0.001426 -0.048188 -8.65 -0.001429 -0.048236 -8.64 -0.001432 -0.048283 -8.63 -0.001435 -0.048331 -8.62 -0.001437 -0.048379 -8.61 -0.001440 -0.048427 -8.6 -0.001443 -0.048475 -8.59 -0.001446 -0.048523 -8.58 -0.001449 -0.048571 -8.57 -0.001452 -0.048619 -8.56 -0.001455 -0.048668 -8.55 -0.001458 -0.048716 -8.54 -0.001461 -0.048765 -8.53 -0.001463 -0.048813 -8.52 -0.001466 -0.048862 -8.51 -0.001469 -0.048911 -8.5 -0.001472 -0.048960 -8.49 -0.001475 -0.049009 -8.48 -0.001478 -0.049058 -8.47 -0.001481 -0.049107 -8.46 -0.001484 -0.049157 -8.45 -0.001487 -0.049206 -8.44 -0.001490 -0.049256 -8.43 -0.001493 -0.049305 -8.42 -0.001496 -0.049355 -8.41 -0.001499 -0.049405 -8.4 -0.001502 -0.049455 -8.39 -0.001505 -0.049505 -8.38 -0.001508 -0.049555 -8.37 -0.001511 -0.049605 -8.36 -0.001515 -0.049656 -8.35 -0.001518 -0.049706 -8.34 -0.001521 -0.049757 -8.33 -0.001524 -0.049807 -8.32 -0.001527 -0.049858 -8.31 -0.001530 -0.049909 -8.3 -0.001533 -0.049960 -8.29 -0.001536 -0.050011 -8.28 -0.001540 -0.050062 -8.27 -0.001543 -0.050114 -8.26 -0.001546 -0.050165 -8.25 -0.001549 -0.050216 -8.24 -0.001552 -0.050268 -8.23 -0.001556 -0.050320 -8.22 -0.001559 -0.050372 -8.21 -0.001562 -0.050424 -8.2 -0.001565 -0.050476 -8.19 -0.001568 -0.050528 -8.18 -0.001572 -0.050580 -8.17 -0.001575 -0.050632 -8.16 -0.001578 -0.050685 -8.15 -0.001582 -0.050737 -8.14 -0.001585 -0.050790 -8.13 -0.001588 -0.050843 -8.12 -0.001591 -0.050896 -8.11 -0.001595 -0.050949 -8.1 -0.001598 -0.051002 -8.09 -0.001601 -0.051055 -8.08 -0.001605 -0.051108 -8.07 -0.001608 -0.051162 -8.06 -0.001612 -0.051215 -8.05 -0.001615 -0.051269 -8.04 -0.001618 -0.051323 -8.03 -0.001622 -0.051377 -8.02 -0.001625 -0.051431 -8.01 -0.001629 -0.051485 -8 -0.001632 -0.051539 -7.99 -0.001636 -0.051594 -7.98 -0.001639 -0.051648 -7.97 -0.001643 -0.051703 -7.96 -0.001646 -0.051757 -7.95 -0.001650 -0.051812 -7.94 -0.001653 -0.051867 -7.93 -0.001657 -0.051922 -7.92 -0.001660 -0.051977 -7.91 -0.001664 -0.052033 -7.9 -0.001667 -0.052088 -7.89 -0.001671 -0.052144 -7.88 -0.001674 -0.052199 -7.87 -0.001678 -0.052255 -7.86 -0.001682 -0.052311 -7.85 -0.001685 -0.052367 -7.84 -0.001689 -0.052423 -7.83 -0.001692 -0.052479 -7.82 -0.001696 -0.052536 -7.81 -0.001700 -0.052592 -7.8 -0.001703 -0.052649 -7.79 -0.001707 -0.052706 -7.78 -0.001711 -0.052763 -7.77 -0.001715 -0.052820 -7.76 -0.001718 -0.052877 -7.75 -0.001722 -0.052934 -7.74 -0.001726 -0.052991 -7.73 -0.001730 -0.053049 -7.72 -0.001733 -0.053106 -7.71 -0.001737 -0.053164 -7.7 -0.001741 -0.053222 -7.69 -0.001745 -0.053280 -7.68 -0.001749 -0.053338 -7.67 -0.001752 -0.053396 -7.66 -0.001756 -0.053455 -7.65 -0.001760 -0.053513 -7.64 -0.001764 -0.053572 -7.63 -0.001768 -0.053630 -7.62 -0.001772 -0.053689 -7.61 -0.001776 -0.053748 -7.6 -0.001780 -0.053807 -7.59 -0.001783 -0.053867 -7.58 -0.001787 -0.053926 -7.57 -0.001791 -0.053986 -7.56 -0.001795 -0.054045 -7.55 -0.001799 -0.054105 -7.54 -0.001803 -0.054165 -7.53 -0.001807 -0.054225 -7.52 -0.001811 -0.054285 -7.51 -0.001815 -0.054346 -7.5 -0.001820 -0.054406 -7.49 -0.001824 -0.054467 -7.48 -0.001828 -0.054527 -7.47 -0.001832 -0.054588 -7.46 -0.001836 -0.054649 -7.45 -0.001840 -0.054710 -7.44 -0.001844 -0.054772 -7.43 -0.001848 -0.054833 -7.42 -0.001853 -0.054895 -7.41 -0.001857 -0.054956 -7.4 -0.001861 -0.055018 -7.39 -0.001865 -0.055080 -7.38 -0.001869 -0.055142 -7.37 -0.001874 -0.055205 -7.36 -0.001878 -0.055267 -7.35 -0.001882 -0.055330 -7.34 -0.001886 -0.055392 -7.33 -0.001891 -0.055455 -7.32 -0.001895 -0.055518 -7.31 -0.001899 -0.055581 -7.3 -0.001904 -0.055644 -7.29 -0.001908 -0.055708 -7.28 -0.001912 -0.055771 -7.27 -0.001917 -0.055835 -7.26 -0.001921 -0.055899 -7.25 -0.001926 -0.055963 -7.24 -0.001930 -0.056027 -7.23 -0.001935 -0.056091 -7.22 -0.001939 -0.056156 -7.21 -0.001943 -0.056220 -7.2 -0.001948 -0.056285 -7.19 -0.001952 -0.056350 -7.18 -0.001957 -0.056415 -7.17 -0.001962 -0.056480 -7.16 -0.001966 -0.056545 -7.15 -0.001971 -0.056611 -7.14 -0.001975 -0.056676 -7.13 -0.001980 -0.056742 -7.12 -0.001985 -0.056808 -7.11 -0.001989 -0.056874 -7.1 -0.001994 -0.056940 -7.09 -0.001998 -0.057007 -7.08 -0.002003 -0.057073 -7.07 -0.002008 -0.057140 -7.06 -0.002013 -0.057207 -7.05 -0.002017 -0.057274 -7.04 -0.002022 -0.057341 -7.03 -0.002027 -0.057408 -7.02 -0.002032 -0.057476 -7.01 -0.002036 -0.057543 -7 -0.002041 -0.057611 -6.99 -0.002046 -0.057679 -6.98 -0.002051 -0.057747 -6.97 -0.002056 -0.057816 -6.96 -0.002061 -0.057884 -6.95 -0.002066 -0.057953 -6.94 -0.002071 -0.058022 -6.93 -0.002076 -0.058090 -6.92 -0.002081 -0.058160 -6.91 -0.002085 -0.058229 -6.9 -0.002090 -0.058298 -6.89 -0.002096 -0.058368 -6.88 -0.002101 -0.058438 -6.87 -0.002106 -0.058508 -6.86 -0.002111 -0.058578 -6.85 -0.002116 -0.058648 -6.84 -0.002121 -0.058718 -6.83 -0.002126 -0.058789 -6.82 -0.002131 -0.058860 -6.81 -0.002136 -0.058931 -6.8 -0.002142 -0.059002 -6.79 -0.002147 -0.059073 -6.78 -0.002152 -0.059145 -6.77 -0.002157 -0.059216 -6.76 -0.002162 -0.059288 -6.75 -0.002168 -0.059360 -6.74 -0.002173 -0.059432 -6.73 -0.002178 -0.059505 -6.72 -0.002184 -0.059577 -6.71 -0.002189 -0.059650 -6.7 -0.002194 -0.059723 -6.69 -0.002200 -0.059796 -6.68 -0.002205 -0.059869 -6.67 -0.002211 -0.059942 -6.66 -0.002216 -0.060016 -6.65 -0.002222 -0.060090 -6.64 -0.002227 -0.060164 -6.63 -0.002233 -0.060238 -6.62 -0.002238 -0.060312 -6.61 -0.002244 -0.060387 -6.6 -0.002249 -0.060461 -6.59 -0.002255 -0.060536 -6.58 -0.002261 -0.060611 -6.57 -0.002266 -0.060687 -6.56 -0.002272 -0.060762 -6.55 -0.002278 -0.060838 -6.54 -0.002283 -0.060913 -6.53 -0.002289 -0.060989 -6.52 -0.002295 -0.061066 -6.51 -0.002301 -0.061142 -6.5 -0.002306 -0.061219 -6.49 -0.002312 -0.061295 -6.48 -0.002318 -0.061372 -6.47 -0.002324 -0.061450 -6.46 -0.002330 -0.061527 -6.45 -0.002336 -0.061604 -6.44 -0.002342 -0.061682 -6.43 -0.002348 -0.061760 -6.42 -0.002354 -0.061838 -6.41 -0.002359 -0.061917 -6.4 -0.002366 -0.061995 -6.39 -0.002372 -0.062074 -6.38 -0.002378 -0.062153 -6.37 -0.002384 -0.062232 -6.36 -0.002390 -0.062311 -6.35 -0.002396 -0.062391 -6.34 -0.002402 -0.062471 -6.33 -0.002408 -0.062550 -6.32 -0.002415 -0.062631 -6.31 -0.002421 -0.062711 -6.3 -0.002427 -0.062792 -6.29 -0.002433 -0.062872 -6.28 -0.002440 -0.062953 -6.27 -0.002446 -0.063035 -6.26 -0.002452 -0.063116 -6.25 -0.002459 -0.063198 -6.24 -0.002465 -0.063279 -6.23 -0.002472 -0.063361 -6.22 -0.002478 -0.063444 -6.21 -0.002484 -0.063526 -6.2 -0.002491 -0.063609 -6.19 -0.002498 -0.063692 -6.18 -0.002504 -0.063775 -6.17 -0.002511 -0.063858 -6.16 -0.002517 -0.063942 -6.15 -0.002524 -0.064026 -6.14 -0.002531 -0.064110 -6.13 -0.002537 -0.064194 -6.12 -0.002544 -0.064278 -6.11 -0.002551 -0.064363 -6.1 -0.002558 -0.064448 -6.09 -0.002564 -0.064533 -6.08 -0.002571 -0.064618 -6.07 -0.002578 -0.064704 -6.06 -0.002585 -0.064790 -6.05 -0.002592 -0.064876 -6.04 -0.002599 -0.064962 -6.03 -0.002606 -0.065048 -6.02 -0.002613 -0.065135 -6.01 -0.002620 -0.065222 -6 -0.002627 -0.065309 -5.99 -0.002634 -0.065396 -5.98 -0.002641 -0.065484 -5.97 -0.002648 -0.065572 -5.96 -0.002655 -0.065660 -5.95 -0.002662 -0.065748 -5.94 -0.002670 -0.065837 -5.93 -0.002677 -0.065926 -5.92 -0.002684 -0.066015 -5.91 -0.002691 -0.066104 -5.9 -0.002699 -0.066194 -5.89 -0.002706 -0.066284 -5.88 -0.002714 -0.066374 -5.87 -0.002721 -0.066464 -5.86 -0.002729 -0.066554 -5.85 -0.002736 -0.066645 -5.84 -0.002744 -0.066736 -5.83 -0.002751 -0.066828 -5.82 -0.002759 -0.066919 -5.81 -0.002766 -0.067011 -5.8 -0.002774 -0.067103 -5.79 -0.002782 -0.067195 -5.78 -0.002789 -0.067288 -5.77 -0.002797 -0.067381 -5.76 -0.002805 -0.067474 -5.75 -0.002813 -0.067567 -5.74 -0.002821 -0.067660 -5.73 -0.002828 -0.067754 -5.72 -0.002836 -0.067848 -5.71 -0.002844 -0.067943 -5.7 -0.002852 -0.068037 -5.69 -0.002860 -0.068132 -5.68 -0.002868 -0.068227 -5.67 -0.002876 -0.068323 -5.66 -0.002885 -0.068419 -5.65 -0.002893 -0.068514 -5.64 -0.002901 -0.068611 -5.63 -0.002909 -0.068707 -5.62 -0.002917 -0.068804 -5.61 -0.002926 -0.068901 -5.6 -0.002934 -0.068998 -5.59 -0.002942 -0.069096 -5.58 -0.002951 -0.069194 -5.57 -0.002959 -0.069292 -5.56 -0.002968 -0.069390 -5.55 -0.002976 -0.069489 -5.54 -0.002985 -0.069588 -5.53 -0.002993 -0.069687 -5.52 -0.003002 -0.069787 -5.51 -0.003010 -0.069887 -5.5 -0.003019 -0.069987 -5.49 -0.003028 -0.070087 -5.48 -0.003037 -0.070188 -5.47 -0.003045 -0.070289 -5.46 -0.003054 -0.070390 -5.45 -0.003063 -0.070492 -5.44 -0.003072 -0.070594 -5.43 -0.003081 -0.070696 -5.42 -0.003090 -0.070798 -5.41 -0.003099 -0.070901 -5.4 -0.003108 -0.071004 -5.39 -0.003117 -0.071108 -5.38 -0.003127 -0.071211 -5.37 -0.003136 -0.071315 -5.36 -0.003145 -0.071420 -5.35 -0.003154 -0.071524 -5.34 -0.003164 -0.071629 -5.33 -0.003173 -0.071734 -5.32 -0.003182 -0.071840 -5.31 -0.003192 -0.071946 -5.3 -0.003201 -0.072052 -5.29 -0.003211 -0.072158 -5.28 -0.003220 -0.072265 -5.27 -0.003230 -0.072372 -5.26 -0.003240 -0.072479 -5.25 -0.003249 -0.072587 -5.24 -0.003259 -0.072695 -5.23 -0.003269 -0.072804 -5.22 -0.003279 -0.072912 -5.21 -0.003289 -0.073021 -5.2 -0.003299 -0.073131 -5.19 -0.003309 -0.073240 -5.18 -0.003319 -0.073350 -5.17 -0.003329 -0.073461 -5.16 -0.003339 -0.073571 -5.15 -0.003349 -0.073682 -5.14 -0.003359 -0.073794 -5.13 -0.003369 -0.073905 -5.12 -0.003380 -0.074018 -5.11 -0.003390 -0.074130 -5.1 -0.003400 -0.074243 -5.09 -0.003411 -0.074356 -5.08 -0.003421 -0.074469 -5.07 -0.003432 -0.074583 -5.06 -0.003443 -0.074697 -5.05 -0.003453 -0.074811 -5.04 -0.003464 -0.074926 -5.03 -0.003475 -0.075041 -5.02 -0.003485 -0.075157 -5.01 -0.003496 -0.075273 -5 -0.003507 -0.075389 -4.99 -0.003518 -0.075505 -4.98 -0.003529 -0.075622 -4.97 -0.003540 -0.075740 -4.96 -0.003551 -0.075857 -4.95 -0.003562 -0.075975 -4.94 -0.003574 -0.076094 -4.93 -0.003585 -0.076213 -4.92 -0.003596 -0.076332 -4.91 -0.003607 -0.076451 -4.9 -0.003619 -0.076571 -4.89 -0.003630 -0.076692 -4.88 -0.003642 -0.076812 -4.87 -0.003653 -0.076933 -4.86 -0.003665 -0.077055 -4.85 -0.003677 -0.077177 -4.84 -0.003689 -0.077299 -4.83 -0.003700 -0.077421 -4.82 -0.003712 -0.077544 -4.81 -0.003724 -0.077668 -4.8 -0.003736 -0.077791 -4.79 -0.003748 -0.077916 -4.78 -0.003760 -0.078040 -4.77 -0.003772 -0.078165 -4.76 -0.003785 -0.078291 -4.75 -0.003797 -0.078416 -4.74 -0.003809 -0.078542 -4.73 -0.003822 -0.078669 -4.72 -0.003834 -0.078796 -4.71 -0.003847 -0.078923 -4.7 -0.003859 -0.079051 -4.69 -0.003872 -0.079180 -4.68 -0.003885 -0.079308 -4.67 -0.003897 -0.079437 -4.66 -0.003910 -0.079567 -4.65 -0.003923 -0.079697 -4.64 -0.003936 -0.079827 -4.63 -0.003949 -0.079958 -4.62 -0.003962 -0.080089 -4.61 -0.003975 -0.080221 -4.6 -0.003988 -0.080353 -4.59 -0.004002 -0.080485 -4.58 -0.004015 -0.080618 -4.57 -0.004029 -0.080752 -4.56 -0.004042 -0.080886 -4.55 -0.004056 -0.081020 -4.54 -0.004069 -0.081155 -4.53 -0.004083 -0.081290 -4.52 -0.004097 -0.081425 -4.51 -0.004110 -0.081561 -4.5 -0.004124 -0.081698 -4.49 -0.004138 -0.081835 -4.48 -0.004152 -0.081973 -4.47 -0.004167 -0.082110 -4.46 -0.004181 -0.082249 -4.45 -0.004195 -0.082388 -4.44 -0.004209 -0.082527 -4.43 -0.004224 -0.082667 -4.42 -0.004238 -0.082807 -4.41 -0.004253 -0.082948 -4.4 -0.004267 -0.083089 -4.39 -0.004282 -0.083231 -4.38 -0.004297 -0.083373 -4.37 -0.004312 -0.083516 -4.36 -0.004327 -0.083659 -4.35 -0.004342 -0.083803 -4.34 -0.004357 -0.083947 -4.33 -0.004372 -0.084092 -4.32 -0.004387 -0.084237 -4.31 -0.004403 -0.084383 -4.3 -0.004418 -0.084529 -4.29 -0.004434 -0.084676 -4.28 -0.004449 -0.084823 -4.27 -0.004465 -0.084971 -4.26 -0.004481 -0.085119 -4.25 -0.004496 -0.085268 -4.24 -0.004512 -0.085417 -4.23 -0.004528 -0.085567 -4.22 -0.004544 -0.085717 -4.21 -0.004561 -0.085868 -4.2 -0.004577 -0.086019 -4.19 -0.004593 -0.086171 -4.18 -0.004610 -0.086324 -4.17 -0.004626 -0.086477 -4.16 -0.004643 -0.086631 -4.15 -0.004660 -0.086785 -4.14 -0.004676 -0.086939 -4.13 -0.004693 -0.087095 -4.12 -0.004710 -0.087250 -4.11 -0.004727 -0.087407 -4.1 -0.004745 -0.087564 -4.09 -0.004762 -0.087721 -4.08 -0.004779 -0.087879 -4.07 -0.004797 -0.088038 -4.06 -0.004814 -0.088197 -4.05 -0.004832 -0.088357 -4.04 -0.004850 -0.088517 -4.03 -0.004867 -0.088678 -4.02 -0.004885 -0.088840 -4.01 -0.004903 -0.089002 -4 -0.004922 -0.089165 -3.99 -0.004940 -0.089328 -3.98 -0.004958 -0.089492 -3.97 -0.004977 -0.089657 -3.96 -0.004995 -0.089822 -3.95 -0.005014 -0.089988 -3.94 -0.005033 -0.090154 -3.93 -0.005051 -0.090321 -3.92 -0.005070 -0.090489 -3.91 -0.005090 -0.090657 -3.9 -0.005109 -0.090826 -3.89 -0.005128 -0.090995 -3.88 -0.005148 -0.091166 -3.87 -0.005167 -0.091336 -3.86 -0.005187 -0.091508 -3.85 -0.005206 -0.091680 -3.84 -0.005226 -0.091853 -3.83 -0.005246 -0.092026 -3.82 -0.005266 -0.092200 -3.81 -0.005287 -0.092375 -3.8 -0.005307 -0.092550 -3.79 -0.005327 -0.092726 -3.78 -0.005348 -0.092903 -3.77 -0.005369 -0.093080 -3.76 -0.005390 -0.093259 -3.75 -0.005410 -0.093437 -3.74 -0.005432 -0.093617 -3.73 -0.005453 -0.093797 -3.72 -0.005474 -0.093978 -3.71 -0.005495 -0.094159 -3.7 -0.005517 -0.094342 -3.69 -0.005539 -0.094525 -3.68 -0.005561 -0.094708 -3.67 -0.005582 -0.094893 -3.66 -0.005605 -0.095078 -3.65 -0.005627 -0.095264 -3.64 -0.005649 -0.095450 -3.63 -0.005672 -0.095638 -3.62 -0.005694 -0.095826 -3.61 -0.005717 -0.096015 -3.6 -0.005740 -0.096204 -3.59 -0.005763 -0.096394 -3.58 -0.005786 -0.096586 -3.57 -0.005809 -0.096777 -3.56 -0.005833 -0.096970 -3.55 -0.005856 -0.097163 -3.54 -0.005880 -0.097358 -3.53 -0.005904 -0.097553 -3.52 -0.005928 -0.097748 -3.51 -0.005952 -0.097945 -3.5 -0.005977 -0.098142 -3.49 -0.006001 -0.098340 -3.48 -0.006026 -0.098539 -3.47 -0.006051 -0.098739 -3.46 -0.006075 -0.098939 -3.45 -0.006101 -0.099141 -3.44 -0.006126 -0.099343 -3.43 -0.006151 -0.099546 -3.42 -0.006177 -0.099750 -3.41 -0.006203 -0.099955 -3.4 -0.006228 -0.100160 -3.39 -0.006255 -0.100367 -3.38 -0.006281 -0.100574 -3.37 -0.006307 -0.100782 -3.36 -0.006334 -0.100991 -3.35 -0.006360 -0.101201 -3.34 -0.006387 -0.101412 -3.33 -0.006414 -0.101623 -3.32 -0.006442 -0.101836 -3.31 -0.006469 -0.102049 -3.3 -0.006497 -0.102264 -3.29 -0.006525 -0.102479 -3.28 -0.006553 -0.102695 -3.27 -0.006581 -0.102912 -3.26 -0.006609 -0.103130 -3.25 -0.006637 -0.103349 -3.24 -0.006666 -0.103569 -3.23 -0.006695 -0.103790 -3.22 -0.006724 -0.104011 -3.21 -0.006753 -0.104234 -3.2 -0.006783 -0.104458 -3.19 -0.006813 -0.104682 -3.18 -0.006842 -0.104908 -3.17 -0.006872 -0.105135 -3.16 -0.006903 -0.105362 -3.15 -0.006933 -0.105591 -3.14 -0.006964 -0.105820 -3.13 -0.006995 -0.106051 -3.12 -0.007026 -0.106282 -3.11 -0.007057 -0.106515 -3.1 -0.007089 -0.106749 -3.09 -0.007120 -0.106983 -3.08 -0.007152 -0.107219 -3.07 -0.007184 -0.107456 -3.06 -0.007217 -0.107694 -3.05 -0.007249 -0.107933 -3.04 -0.007282 -0.108172 -3.03 -0.007315 -0.108414 -3.02 -0.007348 -0.108656 -3.01 -0.007382 -0.108899 -3 -0.007416 -0.109143 -2.99 -0.007450 -0.109389 -2.98 -0.007484 -0.109635 -2.97 -0.007518 -0.109883 -2.96 -0.007553 -0.110131 -2.95 -0.007588 -0.110381 -2.94 -0.007623 -0.110632 -2.93 -0.007658 -0.110885 -2.92 -0.007694 -0.111138 -2.91 -0.007730 -0.111392 -2.9 -0.007766 -0.111648 -2.89 -0.007803 -0.111905 -2.88 -0.007839 -0.112163 -2.87 -0.007876 -0.112422 -2.86 -0.007913 -0.112683 -2.85 -0.007951 -0.112945 -2.84 -0.007989 -0.113208 -2.83 -0.008027 -0.113472 -2.82 -0.008065 -0.113737 -2.81 -0.008103 -0.114004 -2.8 -0.008142 -0.114272 -2.79 -0.008181 -0.114541 -2.78 -0.008221 -0.114812 -2.77 -0.008261 -0.115083 -2.76 -0.008301 -0.115356 -2.75 -0.008341 -0.115631 -2.74 -0.008381 -0.115906 -2.73 -0.008422 -0.116183 -2.72 -0.008464 -0.116462 -2.71 -0.008505 -0.116742 -2.7 -0.008547 -0.117023 -2.69 -0.008589 -0.117305 -2.68 -0.008631 -0.117589 -2.67 -0.008674 -0.117874 -2.66 -0.008717 -0.118161 -2.65 -0.008761 -0.118449 -2.64 -0.008804 -0.118738 -2.63 -0.008849 -0.119029 -2.62 -0.008893 -0.119321 -2.61 -0.008938 -0.119615 -2.6 -0.008983 -0.119910 -2.59 -0.009028 -0.120207 -2.58 -0.009074 -0.120505 -2.57 -0.009120 -0.120805 -2.56 -0.009167 -0.121106 -2.55 -0.009213 -0.121409 -2.54 -0.009261 -0.121713 -2.53 -0.009308 -0.122019 -2.52 -0.009356 -0.122326 -2.51 -0.009405 -0.122635 -2.5 -0.009453 -0.122945 -2.49 -0.009502 -0.123257 -2.48 -0.009552 -0.123571 -2.47 -0.009602 -0.123886 -2.46 -0.009652 -0.124203 -2.45 -0.009703 -0.124522 -2.44 -0.009754 -0.124842 -2.43 -0.009805 -0.125164 -2.42 -0.009857 -0.125487 -2.41 -0.009910 -0.125812 -2.4 -0.009962 -0.126139 -2.39 -0.010016 -0.126468 -2.38 -0.010069 -0.126798 -2.37 -0.010123 -0.127130 -2.36 -0.010178 -0.127464 -2.35 -0.010233 -0.127800 -2.34 -0.010288 -0.128137 -2.33 -0.010344 -0.128477 -2.32 -0.010400 -0.128818 -2.31 -0.010457 -0.129161 -2.3 -0.010514 -0.129505 -2.29 -0.010572 -0.129852 -2.28 -0.010630 -0.130200 -2.27 -0.010689 -0.130551 -2.26 -0.010748 -0.130903 -2.25 -0.010808 -0.131257 -2.24 -0.010868 -0.131613 -2.23 -0.010929 -0.131971 -2.22 -0.010990 -0.132332 -2.21 -0.011052 -0.132694 -2.2 -0.011114 -0.133058 -2.19 -0.011177 -0.133424 -2.18 -0.011241 -0.133792 -2.17 -0.011304 -0.134162 -2.16 -0.011369 -0.134534 -2.15 -0.011434 -0.134909 -2.14 -0.011500 -0.135285 -2.13 -0.011566 -0.135664 -2.12 -0.011633 -0.136044 -2.11 -0.011700 -0.136427 -2.1 -0.011768 -0.136812 -2.09 -0.011837 -0.137200 -2.08 -0.011906 -0.137589 -2.07 -0.011976 -0.137981 -2.06 -0.012046 -0.138375 -2.05 -0.012117 -0.138771 -2.04 -0.012189 -0.139170 -2.03 -0.012261 -0.139571 -2.02 -0.012334 -0.139974 -2.01 -0.012408 -0.140380 -2 -0.012482 -0.140788 -1.99 -0.012557 -0.141198 -1.98 -0.012633 -0.141611 -1.97 -0.012709 -0.142026 -1.96 -0.012786 -0.142444 -1.95 -0.012864 -0.142864 -1.94 -0.012943 -0.143287 -1.93 -0.013022 -0.143712 -1.92 -0.013102 -0.144140 -1.91 -0.013183 -0.144570 -1.9 -0.013265 -0.145003 -1.89 -0.013347 -0.145439 -1.88 -0.013430 -0.145877 -1.87 -0.013514 -0.146318 -1.86 -0.013599 -0.146762 -1.85 -0.013684 -0.147208 -1.84 -0.013771 -0.147657 -1.83 -0.013858 -0.148109 -1.82 -0.013946 -0.148564 -1.81 -0.014035 -0.149022 -1.8 -0.014124 -0.149482 -1.79 -0.014215 -0.149946 -1.78 -0.014307 -0.150412 -1.77 -0.014399 -0.150881 -1.76 -0.014492 -0.151353 -1.75 -0.014587 -0.151828 -1.74 -0.014682 -0.152307 -1.73 -0.014778 -0.152788 -1.72 -0.014875 -0.153272 -1.71 -0.014973 -0.153760 -1.7 -0.015073 -0.154250 -1.69 -0.015173 -0.154744 -1.68 -0.015274 -0.155241 -1.67 -0.015376 -0.155741 -1.66 -0.015479 -0.156245 -1.65 -0.015584 -0.156752 -1.64 -0.015689 -0.157262 -1.63 -0.015796 -0.157775 -1.62 -0.015903 -0.158292 -1.61 -0.016012 -0.158813 -1.6 -0.016122 -0.159337 -1.59 -0.016233 -0.159864 -1.58 -0.016345 -0.160395 -1.57 -0.016459 -0.160929 -1.56 -0.016573 -0.161468 -1.55 -0.016689 -0.162009 -1.54 -0.016806 -0.162555 -1.53 -0.016925 -0.163104 -1.52 -0.017044 -0.163657 -1.51 -0.017165 -0.164214 -1.5 -0.017287 -0.164774 -1.49 -0.017411 -0.165339 -1.48 -0.017536 -0.165908 -1.47 -0.017662 -0.166480 -1.46 -0.017790 -0.167056 -1.45 -0.017919 -0.167637 -1.44 -0.018050 -0.168222 -1.43 -0.018182 -0.168810 -1.42 -0.018316 -0.169403 -1.41 -0.018451 -0.170001 -1.4 -0.018588 -0.170602 -1.39 -0.018726 -0.171208 -1.38 -0.018866 -0.171818 -1.37 -0.019007 -0.172433 -1.36 -0.019150 -0.173052 -1.35 -0.019295 -0.173676 -1.34 -0.019441 -0.174304 -1.33 -0.019589 -0.174937 -1.32 -0.019739 -0.175574 -1.31 -0.019891 -0.176217 -1.3 -0.020044 -0.176864 -1.29 -0.020200 -0.177515 -1.28 -0.020357 -0.178172 -1.27 -0.020516 -0.178834 -1.26 -0.020677 -0.179501 -1.25 -0.020840 -0.180173 -1.24 -0.021004 -0.180849 -1.23 -0.021171 -0.181532 -1.22 -0.021340 -0.182219 -1.21 -0.021511 -0.182912 -1.2 -0.021685 -0.183610 -1.19 -0.021860 -0.184313 -1.18 -0.022038 -0.185022 -1.17 -0.022217 -0.185736 -1.16 -0.022399 -0.186457 -1.15 -0.022584 -0.187182 -1.14 -0.022770 -0.187914 -1.13 -0.022960 -0.188651 -1.12 -0.023151 -0.189395 -1.11 -0.023345 -0.190144 -1.1 -0.023542 -0.190899 -1.09 -0.023741 -0.191661 -1.08 -0.023943 -0.192428 -1.07 -0.024147 -0.193202 -1.06 -0.024354 -0.193982 -1.05 -0.024564 -0.194769 -1.04 -0.024777 -0.195562 -1.03 -0.024992 -0.196362 -1.02 -0.025211 -0.197168 -1.01 -0.025432 -0.197982 -1 -0.025657 -0.198802 -0.99 -0.025884 -0.199629 -0.98 -0.026115 -0.200463 -0.97 -0.026349 -0.201304 -0.96 -0.026586 -0.202152 -0.95 -0.026826 -0.203008 -0.94 -0.027070 -0.203871 -0.93 -0.027318 -0.204741 -0.92 -0.027568 -0.205619 -0.91 -0.027823 -0.206505 -0.9 -0.028081 -0.207398 -0.89 -0.028343 -0.208300 -0.88 -0.028609 -0.209209 -0.87 -0.028878 -0.210127 -0.86 -0.029152 -0.211052 -0.85 -0.029429 -0.211986 -0.84 -0.029711 -0.212929 -0.83 -0.029997 -0.213880 -0.82 -0.030287 -0.214840 -0.81 -0.030582 -0.215808 -0.8 -0.030881 -0.216786 -0.79 -0.031184 -0.217772 -0.78 -0.031493 -0.218768 -0.77 -0.031806 -0.219772 -0.76 -0.032124 -0.220787 -0.75 -0.032447 -0.221811 -0.74 -0.032775 -0.222844 -0.73 -0.033108 -0.223887 -0.72 -0.033446 -0.224941 -0.71 -0.033790 -0.226004 -0.7 -0.034140 -0.227078 -0.69 -0.034495 -0.228162 -0.68 -0.034856 -0.229257 -0.67 -0.035223 -0.230362 -0.66 -0.035596 -0.231478 -0.65 -0.035975 -0.232605 -0.64 -0.036361 -0.233744 -0.63 -0.036753 -0.234894 -0.62 -0.037151 -0.236055 -0.61 -0.037557 -0.237228 -0.6 -0.037969 -0.238413 -0.59 -0.038389 -0.239610 -0.58 -0.038816 -0.240819 -0.57 -0.039250 -0.242040 -0.56 -0.039692 -0.243274 -0.55 -0.040142 -0.244521 -0.54 -0.040599 -0.245781 -0.53 -0.041065 -0.247055 -0.52 -0.041540 -0.248341 -0.51 -0.042023 -0.249641 -0.5 -0.042515 -0.250955 -0.49 -0.043016 -0.252283 -0.48 -0.043527 -0.253626 -0.47 -0.044047 -0.254983 -0.46 -0.044576 -0.256354 -0.45 -0.045116 -0.257741 -0.44 -0.045666 -0.259142 -0.43 -0.046227 -0.260559 -0.42 -0.046799 -0.261992 -0.41 -0.047381 -0.263441 -0.4 -0.047976 -0.264906 -0.39 -0.048582 -0.266387 -0.38 -0.049200 -0.267885 -0.37 -0.049831 -0.269401 -0.36 -0.050474 -0.270933 -0.35 -0.051131 -0.272483 -0.34 -0.051801 -0.274051 -0.33 -0.052485 -0.275637 -0.32 -0.053183 -0.277241 -0.31 -0.053896 -0.278864 -0.3 -0.054624 -0.280506 -0.29 -0.055368 -0.282168 -0.28 -0.056128 -0.283849 -0.27 -0.056904 -0.285550 -0.26 -0.057697 -0.287272 -0.25 -0.058508 -0.289014 -0.24 -0.059337 -0.290778 -0.23 -0.060185 -0.292562 -0.22 -0.061052 -0.294369 -0.21 -0.061938 -0.296197 -0.2 -0.062845 -0.298048 -0.19 -0.063774 -0.299922 -0.18 -0.064723 -0.301819 -0.17 -0.065696 -0.303740 -0.16 -0.066691 -0.305685 -0.15 -0.067711 -0.307653 -0.14 -0.068755 -0.309647 -0.13 -0.069824 -0.311666 -0.12 -0.070920 -0.313710 -0.11 -0.072044 -0.315781 -0.1 -0.073195 -0.317878 -0.090000 -0.074376 -0.320001 -0.080000 -0.075587 -0.322152 -0.070000 -0.076829 -0.324330 -0.060000 -0.078104 -0.326537 -0.050000 -0.079412 -0.328771 -0.040000 -0.080754 -0.331035 -0.030000 -0.082133 -0.333328 -0.020000 -0.083549 -0.335650 -0.010000 -0.085003 -0.338003 0 -0.086498 -0.340386 0.009999 -0.088034 -0.342800 0.019999 -0.089613 -0.345245 0.029999 -0.091236 -0.347722 0.039999 -0.092906 -0.350230 0.049999 -0.094624 -0.352771 0.059999 -0.096392 -0.355345 0.069999 -0.098212 -0.357951 0.079999 -0.100086 -0.360590 0.089999 -0.102016 -0.363263 0.099999 -0.104005 -0.365969 0.11 -0.106054 -0.368709 0.12 -0.108166 -0.371483 0.13 -0.110343 -0.374291 0.14 -0.112589 -0.377133 0.15 -0.114906 -0.380008 0.16 -0.117297 -0.382918 0.17 -0.119765 -0.385861 0.18 -0.122313 -0.388837 0.19 -0.124945 -0.391846 0.2 -0.127664 -0.394887 0.21 -0.130474 -0.397960 0.22 -0.133378 -0.401064 0.23 -0.136381 -0.404199 0.24 -0.139487 -0.407362 0.25 -0.142699 -0.410553 0.26 -0.146024 -0.413770 0.27 -0.149465 -0.417012 0.28 -0.153028 -0.420276 0.29 -0.156717 -0.423561 0.3 -0.160538 -0.426863 0.31 -0.164496 -0.430181 0.32 -0.168598 -0.433510 0.33 -0.172849 -0.436847 0.34 -0.177255 -0.440188 0.35 -0.181823 -0.443528 0.36 -0.186560 -0.446862 0.37 -0.191471 -0.450185 0.38 -0.196564 -0.453489 0.39 -0.201845 -0.456768 0.4 -0.207322 -0.460014 0.41 -0.213002 -0.463218 0.42 -0.218891 -0.466370 0.43 -0.224997 -0.469459 0.44 -0.231325 -0.472475 0.45 -0.237884 -0.475404 0.46 -0.244678 -0.478232 0.47 -0.251713 -0.480943 0.48 -0.258995 -0.483522 0.49 -0.266527 -0.485950 0.5 -0.274313 -0.488208 0.51 -0.282355 -0.490274 0.52 -0.290654 -0.492126 0.53 -0.299208 -0.493740 0.54 -0.308016 -0.495091 0.55 -0.317071 -0.496152 0.56 -0.326366 -0.496893 0.57 -0.335892 -0.497287 0.58 -0.345633 -0.497303 0.59 -0.355573 -0.496910 0.6 -0.365690 -0.496076 0.61 -0.375958 -0.494771 0.62 -0.386348 -0.492965 0.63 -0.396824 -0.490629 0.64 -0.407346 -0.487736 0.65 -0.417870 -0.484261 0.66 -0.428344 -0.480186 0.67 -0.438714 -0.475494 0.68 -0.448920 -0.470176 0.69 -0.458900 -0.464229 0.7 -0.468587 -0.457656 0.71 -0.477913 -0.450472 0.72 -0.486808 -0.442697 0.73 -0.495204 -0.434363 0.74 -0.503034 -0.425512 0.75 -0.510235 -0.416194 0.76 -0.516750 -0.406470 0.77 -0.522529 -0.396409 0.78 -0.527528 -0.386088 0.79 -0.531718 -0.375591 0.8 -0.535076 -0.365006 0.81 -0.537594 -0.354423 0.82 -0.539275 -0.343935 0.83 -0.540134 -0.333633 0.84 -0.540199 -0.323603 0.85 -0.539508 -0.313930 0.86 -0.538109 -0.304690 0.87 -0.536058 -0.295951 0.88 -0.533421 -0.287773 0.89 -0.530266 -0.280207 0.9 -0.526666 -0.273293 0.91 -0.522696 -0.267061 0.92 -0.518432 -0.261533 0.93 -0.513950 -0.256719 0.94 -0.509322 -0.252624 0.95 -0.504618 -0.249243 0.96 -0.499905 -0.246564 0.97 -0.495244 -0.244571 0.98 -0.490694 -0.243242 0.99 -0.486307 -0.242552 1 -0.482131 -0.242472 1.01 -0.478209 -0.242971 1.02 -0.474581 -0.244016 1.03 -0.471279 -0.245575 1.04 -0.468335 -0.247613 1.05 -0.465776 -0.250096 1.06 -0.463624 -0.252991 1.07 -0.461901 -0.256264 1.08 -0.460625 -0.259883 1.09 -0.459812 -0.263816 1.1 -0.459475 -0.268032 1.11 -0.459628 -0.272501 1.12 -0.460281 -0.277195 1.13 -0.461446 -0.282084 1.14 -0.463131 -0.287141 1.15 -0.465347 -0.292338 1.16 -0.468102 -0.297649 1.17 -0.471403 -0.303048 1.18 -0.475260 -0.308506 1.19 -0.479682 -0.313998 1.2 -0.484675 -0.319497 1.21 -0.490248 -0.324975 1.22 -0.496411 -0.330403 1.23 -0.503170 -0.335753 1.24 -0.510534 -0.340994 1.25 -0.518512 -0.346094 1.26 -0.527111 -0.351020 1.27 -0.536337 -0.355735 1.28 -0.546199 -0.360204 1.29 -0.556700 -0.364385 1.3 -0.567846 -0.368238 1.31 -0.579640 -0.371716 1.32 -0.592081 -0.374773 1.33 -0.605169 -0.377358 1.34 -0.618898 -0.379418 1.35 -0.633262 -0.380896 1.36 -0.648246 -0.381733 1.37 -0.663835 -0.381867 1.38 -0.680006 -0.381234 1.39 -0.696730 -0.379765 1.4 -0.713971 -0.377394 1.41 -0.731686 -0.374049 1.42 -0.749824 -0.369662 1.43 -0.768322 -0.364163 1.44 -0.787110 -0.357485 1.45 -0.806108 -0.349564 1.46 -0.825222 -0.340341 1.47 -0.844350 -0.329762 1.48 -0.863380 -0.317783 1.49 -0.882189 -0.304370 1.5 -0.900645 -0.289501 1.51 -0.918607 -0.273168 1.52 -0.935930 -0.255380 1.53 -0.952465 -0.236163 1.54 -0.968060 -0.215562 1.55 -0.982565 -0.193643 1.56 -0.995835 -0.170491 1.57 -1.007734 -0.146211 1.58 -1.018136 -0.120930 1.59 -1.026930 -0.094789 1.6 -1.034023 -0.067948 1.61 -1.039343 -0.040577 1.62 -1.042841 -0.012859 1.63 -1.044489 0.015021 1.64 -1.044287 0.042874 1.65 -1.042258 0.070513 1.66 -1.038450 0.097757 1.67 -1.032933 0.124436 1.68 -1.025797 0.150391 1.69 -1.017150 0.175479 1.7 -1.007115 0.199575 1.71 -0.995826 0.222574 1.72 -0.983426 0.244388 1.73 -0.970062 0.264953 1.74 -0.955885 0.284223 1.75 -0.941042 0.302172 1.76 -0.925680 0.318791 1.77 -0.909938 0.334089 1.78 -0.893948 0.348090 1.79 -0.877834 0.360830 1.8 -0.861710 0.372359 1.81 -0.845678 0.382733 1.82 -0.829830 0.392019 1.83 -0.814246 0.400290 1.84 -0.798996 0.407620 1.85 -0.784137 0.414090 1.86 -0.769716 0.419781 1.87 -0.755769 0.424775 1.88 -0.742324 0.429153 1.89 -0.729396 0.432995 1.9 -0.716995 0.436378 1.91 -0.705120 0.439377 1.92 -0.693763 0.442063 1.93 -0.682911 0.444501 1.94 -0.672542 0.446753 1.95 -0.662631 0.448876 1.96 -0.653146 0.450921 1.97 -0.644053 0.452930 1.98 -0.635314 0.454943 1.99 -0.626888 0.456992 2 -0.618735 0.459101 2.01 -0.610810 0.461290 2.02 -0.603073 0.463571 2.03 -0.595481 0.465951 2.04 -0.587995 0.468429 2.05 -0.580578 0.471002 2.06 -0.573196 0.473662 2.07 -0.565818 0.476394 2.08 -0.558418 0.479182 2.09 -0.550971 0.482009 2.1 -0.543461 0.484853 2.11 -0.535872 0.487693 2.12 -0.528194 0.490507 2.13 -0.520419 0.493273 2.14 -0.512544 0.495969 2.15 -0.504569 0.498575 2.16 -0.496494 0.501072 2.17 -0.488326 0.503440 2.18 -0.480069 0.505664 2.19 -0.471732 0.507728 2.2 -0.463324 0.509619 2.21 -0.454857 0.511324 2.22 -0.446341 0.512833 2.23 -0.437791 0.514136 2.24 -0.429220 0.515227 2.25 -0.420642 0.516099 2.26 -0.412071 0.516750 2.27 -0.403523 0.517177 2.28 -0.395012 0.517379 2.29 -0.386553 0.517358 2.3 -0.378161 0.517117 2.31 -0.369848 0.516660 2.32 -0.361628 0.515994 2.33 -0.353512 0.515126 2.34 -0.345512 0.514063 2.35 -0.337635 0.512816 2.36 -0.329891 0.511393 2.37 -0.322287 0.509806 2.38 -0.314827 0.508063 2.39 -0.307516 0.506177 2.4 -0.300358 0.504156 2.41 -0.293355 0.502011 2.42 -0.286507 0.499751 2.43 -0.279817 0.497386 2.44 -0.273284 0.494925 2.45 -0.266907 0.492375 2.46 -0.260685 0.489744 2.47 -0.254617 0.487040 2.48 -0.248702 0.484270 2.49 -0.242938 0.481440 2.5 -0.237322 0.478556 2.51 -0.231854 0.475625 2.52 -0.226529 0.472650 2.53 -0.221346 0.469639 2.54 -0.216303 0.466595 2.55 -0.211397 0.463524 2.56 -0.206625 0.460428 2.57 -0.201984 0.457314 2.58 -0.197473 0.454183 2.59 -0.193087 0.451041 2.6 -0.188824 0.447890 2.61 -0.184682 0.444733 2.62 -0.180657 0.441573 2.63 -0.176748 0.438413 2.64 -0.172951 0.435255 2.65 -0.169263 0.432102 2.66 -0.165683 0.428956 2.67 -0.162208 0.425819 2.68 -0.158836 0.422694 2.69 -0.155563 0.419581 2.7 -0.152388 0.416484 2.71 -0.149309 0.413403 2.72 -0.146322 0.410342 2.73 -0.143426 0.407301 2.74 -0.140619 0.404282 2.75 -0.137898 0.401288 2.76 -0.135260 0.398318 2.77 -0.132704 0.395376 2.78 -0.130226 0.392462 2.79 -0.127824 0.389578 2.8 -0.125496 0.386725 2.81 -0.123239 0.383904 2.82 -0.121050 0.381116 2.83 -0.118928 0.378362 2.84 -0.116868 0.375643 2.85 -0.114869 0.372958 2.86 -0.112928 0.370309 2.87 -0.111043 0.367696 2.88 -0.109211 0.365120 2.89 -0.107429 0.362579 2.9 -0.105695 0.360074 2.91 -0.104008 0.357606 2.92 -0.102364 0.355172 2.93 -0.100762 0.352775 2.94 -0.099200 0.350412 2.95 -0.097675 0.348083 2.96 -0.096187 0.345788 2.97 -0.094733 0.343526 2.98 -0.093311 0.341298 2.99 -0.091921 0.339101 3 -0.090560 0.336935 3.01 -0.089227 0.334801 3.02 -0.087921 0.332696 3.03 -0.086640 0.330621 3.04 -0.085384 0.328574 3.05 -0.084150 0.326556 3.06 -0.082938 0.324564 3.07 -0.081746 0.322598 3.08 -0.080575 0.320657 3.09 -0.079422 0.318740 3.1 -0.078286 0.316846 3.11 -0.077168 0.314975 3.12 -0.076067 0.313124 3.13 -0.074981 0.311293 3.14 -0.073912 0.309482 3.15 -0.072858 0.307688 3.16 -0.071819 0.305912 3.17 -0.070796 0.304153 3.18 -0.069787 0.302409 3.19 -0.068794 0.300680 3.2 -0.067817 0.298965 3.21 -0.066855 0.297265 3.22 -0.065909 0.295578 3.23 -0.064979 0.293905 3.24 -0.064064 0.292246 3.25 -0.063166 0.290599 3.26 -0.062284 0.288965 3.27 -0.061418 0.287345 3.28 -0.060568 0.285738 3.29 -0.059734 0.284143 3.3 -0.058915 0.282562 3.31 -0.058113 0.280994 3.32 -0.057326 0.279440 3.33 -0.056555 0.277899 3.34 -0.055798 0.276371 3.35 -0.055057 0.274857 3.36 -0.054330 0.273356 3.37 -0.053617 0.271868 3.38 -0.052918 0.270394 3.39 -0.052233 0.268933 3.4 -0.051562 0.267486 3.41 -0.050903 0.266051 3.42 -0.050258 0.264630 3.43 -0.049624 0.263222 3.44 -0.049004 0.261827 3.45 -0.048395 0.260445 3.46 -0.047799 0.259075 3.47 -0.047214 0.257719 3.48 -0.046640 0.256375 3.49 -0.046078 0.255044 3.5 -0.045526 0.253726 3.51 -0.044986 0.252420 3.52 -0.044455 0.251127 3.53 -0.043935 0.249846 3.54 -0.043425 0.248578 3.55 -0.042924 0.247322 3.56 -0.042433 0.246079 3.57 -0.041951 0.244848 3.58 -0.041478 0.243629 3.59 -0.041013 0.242422 3.6 -0.040556 0.241227 3.61 -0.040108 0.240044 3.62 -0.039667 0.238873 3.63 -0.039233 0.237713 3.64 -0.038807 0.236565 3.65 -0.038387 0.235428 3.66 -0.037974 0.234301 3.67 -0.037568 0.233186 3.68 -0.037168 0.232081 3.69 -0.036774 0.230986 3.7 -0.036386 0.229902 3.71 -0.036004 0.228828 3.72 -0.035628 0.227763 3.73 -0.035257 0.226708 3.74 -0.034892 0.225663 3.75 -0.034533 0.224627 3.76 -0.034178 0.223600 3.77 -0.033830 0.222582 3.78 -0.033486 0.221573 3.79 -0.033147 0.220574 3.8 -0.032814 0.219582 3.81 -0.032485 0.218600 3.82 -0.032162 0.217626 3.83 -0.031843 0.216661 3.84 -0.031529 0.215704 3.85 -0.031219 0.214755 3.86 -0.030914 0.213815 3.87 -0.030613 0.212883 3.88 -0.030316 0.211958 3.89 -0.030023 0.211042 3.9 -0.029734 0.210133 3.91 -0.029450 0.209232 3.92 -0.029169 0.208339 3.93 -0.028892 0.207452 3.94 -0.028618 0.206574 3.95 -0.028348 0.205702 3.96 -0.028082 0.204837 3.97 -0.027819 0.203979 3.98 -0.027560 0.203128 3.99 -0.027304 0.202284 4 -0.027051 0.201446 4.01 -0.026802 0.200615 4.02 -0.026557 0.199790 4.03 -0.026314 0.198972 4.04 -0.026075 0.198160 4.05 -0.025840 0.197354 4.06 -0.025607 0.196554 4.07 -0.025378 0.195761 4.08 -0.025152 0.194973 4.09 -0.024929 0.194192 4.1 -0.024710 0.193417 4.11 -0.024493 0.192647 4.12 -0.024280 0.191884 4.13 -0.024069 0.191126 4.14 -0.023861 0.190374 4.15 -0.023656 0.189629 4.16 -0.023454 0.188888 4.17 -0.023255 0.188154 4.18 -0.023059 0.187425 4.19 -0.022865 0.186702 4.2 -0.022673 0.185984 4.21 -0.022484 0.185272 4.22 -0.022298 0.184565 4.23 -0.022113 0.183864 4.24 -0.021932 0.183168 4.25 -0.021752 0.182477 4.26 -0.021575 0.181791 4.27 -0.021400 0.181111 4.28 -0.021227 0.180435 4.29 -0.021056 0.179764 4.3 -0.020887 0.179099 4.31 -0.020720 0.178438 4.32 -0.020556 0.177781 4.33 -0.020393 0.177130 4.34 -0.020233 0.176483 4.35 -0.020074 0.175841 4.36 -0.019918 0.175204 4.37 -0.019763 0.174571 4.38 -0.019610 0.173942 4.39 -0.019459 0.173318 4.4 -0.019310 0.172698 4.41 -0.019163 0.172083 4.42 -0.019018 0.171472 4.43 -0.018874 0.170865 4.44 -0.018733 0.170263 4.45 -0.018593 0.169665 4.46 -0.018455 0.169071 4.47 -0.018318 0.168481 4.48 -0.018183 0.167896 4.49 -0.018050 0.167314 4.5 -0.017918 0.166737 4.51 -0.017788 0.166164 4.52 -0.017660 0.165595 4.53 -0.017532 0.165030 4.54 -0.017407 0.164468 4.55 -0.017282 0.163911 4.56 -0.017160 0.163357 4.57 -0.017038 0.162808 4.58 -0.016918 0.162262 4.59 -0.016799 0.161720 4.6 -0.016681 0.161181 4.61 -0.016565 0.160646 4.62 -0.016450 0.160115 4.63 -0.016336 0.159588 4.64 -0.016223 0.159063 4.65 -0.016111 0.158543 4.66 -0.016000 0.158026 4.67 -0.015891 0.157512 4.68 -0.015783 0.157001 4.69 -0.015675 0.156494 4.7 -0.015569 0.155990 4.71 -0.015464 0.155489 4.72 -0.015360 0.154992 4.73 -0.015257 0.154498 4.74 -0.015155 0.154007 4.75 -0.015054 0.153518 4.76 -0.014955 0.153034 4.77 -0.014856 0.152552 4.78 -0.014758 0.152073 4.79 -0.014661 0.151597 4.8 -0.014565 0.151124 4.81 -0.014471 0.150654 4.82 -0.014377 0.150187 4.83 -0.014284 0.149723 4.84 -0.014192 0.149262 4.85 -0.014100 0.148804 4.86 -0.014010 0.148348 4.87 -0.013921 0.147896 4.88 -0.013832 0.147446 4.89 -0.013744 0.146999 4.9 -0.013657 0.146554 4.91 -0.013571 0.146112 4.92 -0.013486 0.145673 4.93 -0.013402 0.145237 4.94 -0.013318 0.144803 4.95 -0.013235 0.144372 4.96 -0.013153 0.143943 4.97 -0.013072 0.143517 4.98 -0.012991 0.143093 4.99 -0.012911 0.142672 5 -0.012832 0.142253 5.01 -0.012754 0.141837 5.02 -0.012677 0.141423 5.03 -0.012600 0.141011 5.04 -0.012524 0.140602 5.05 -0.012448 0.140195 5.06 -0.012374 0.139791 5.07 -0.012300 0.139389 5.08 -0.012227 0.138989 5.09 -0.012154 0.138591 5.1 -0.012082 0.138196 5.11 -0.012011 0.137803 5.12 -0.011941 0.137412 5.13 -0.011871 0.137024 5.14 -0.011802 0.136637 5.15 -0.011733 0.136253 5.16 -0.011666 0.135871 5.17 -0.011599 0.135492 5.18 -0.011532 0.135114 5.19 -0.011466 0.134738 5.2 -0.011401 0.134365 5.21 -0.011336 0.133994 5.22 -0.011272 0.133625 5.23 -0.011208 0.133258 5.24 -0.011145 0.132893 5.25 -0.011083 0.132530 5.26 -0.011021 0.132169 5.27 -0.010960 0.131810 5.28 -0.010899 0.131453 5.29 -0.010839 0.131098 5.3 -0.010779 0.130745 5.31 -0.010719 0.130394 5.32 -0.010660 0.130045 5.33 -0.010602 0.129698 5.34 -0.010544 0.129353 5.35 -0.010487 0.129009 5.36 -0.010430 0.128668 5.37 -0.010373 0.128328 5.38 -0.010317 0.127990 5.39 -0.010261 0.127654 5.4 -0.010206 0.127319 5.41 -0.010151 0.126986 5.42 -0.010097 0.126656 5.43 -0.010043 0.126326 5.44 -0.009989 0.125999 5.45 -0.009936 0.125673 5.46 -0.009883 0.125349 5.47 -0.009831 0.125026 5.48 -0.009779 0.124706 5.49 -0.009728 0.124386 5.5 -0.009677 0.124069 5.51 -0.009626 0.123753 5.52 -0.009576 0.123439 5.53 -0.009526 0.123126 5.54 -0.009477 0.122815 5.55 -0.009428 0.122505 5.56 -0.009379 0.122197 5.57 -0.009331 0.121891 5.58 -0.009283 0.121586 5.59 -0.009235 0.121283 5.6 -0.009188 0.120981 5.61 -0.009141 0.120681 5.62 -0.009095 0.120382 5.63 -0.009049 0.120085 5.64 -0.009003 0.119789 5.65 -0.008958 0.119495 5.66 -0.008913 0.119202 5.67 -0.008868 0.118910 5.68 -0.008824 0.118620 5.69 -0.008780 0.118332 5.7 -0.008736 0.118044 5.71 -0.008692 0.117759 5.72 -0.008649 0.117474 5.73 -0.008607 0.117191 5.74 -0.008564 0.116909 5.75 -0.008522 0.116629 5.76 -0.008480 0.116350 5.77 -0.008439 0.116072 5.78 -0.008398 0.115796 5.79 -0.008357 0.115521 5.8 -0.008316 0.115247 5.81 -0.008276 0.114974 5.82 -0.008236 0.114703 5.83 -0.008197 0.114433 5.84 -0.008157 0.114165 5.85 -0.008118 0.113897 5.86 -0.008079 0.113631 5.87 -0.008041 0.113366 5.88 -0.008003 0.113103 5.89 -0.007965 0.112840 5.9 -0.007927 0.112579 5.91 -0.007890 0.112319 5.92 -0.007853 0.112061 5.93 -0.007816 0.111803 5.94 -0.007780 0.111547 5.95 -0.007743 0.111292 5.96 -0.007707 0.111038 5.97 -0.007672 0.110785 5.98 -0.007636 0.110534 5.99 -0.007601 0.110283 6 -0.007566 0.110034 6.01 -0.007531 0.109786 6.02 -0.007496 0.109539 6.03 -0.007462 0.109293 6.04 -0.007428 0.109048 6.05 -0.007394 0.108804 6.06 -0.007360 0.108562 6.07 -0.007327 0.108320 6.08 -0.007294 0.108080 6.09 -0.007261 0.107840 6.1 -0.007228 0.107602 6.11 -0.007195 0.107365 6.12 -0.007163 0.107128 6.13 -0.007131 0.106893 6.14 -0.007099 0.106659 6.15 -0.007068 0.106426 6.16 -0.007036 0.106193 6.17 -0.007005 0.105962 6.18 -0.006974 0.105732 6.19 -0.006943 0.105503 6.2 -0.006913 0.105275 6.21 -0.006882 0.105047 6.22 -0.006852 0.104821 6.23 -0.006822 0.104596 6.24 -0.006792 0.104372 6.25 -0.006763 0.104148 6.26 -0.006734 0.103926 6.27 -0.006705 0.103705 6.28 -0.006676 0.103484 6.29 -0.006647 0.103265 6.3 -0.006618 0.103046 6.31 -0.006590 0.102829 6.32 -0.006562 0.102612 6.33 -0.006534 0.102396 6.34 -0.006506 0.102182 6.35 -0.006479 0.101968 6.36 -0.006451 0.101755 6.37 -0.006424 0.101543 6.38 -0.006397 0.101332 6.39 -0.006370 0.101121 6.4 -0.006343 0.100912 6.41 -0.006317 0.100703 6.42 -0.006290 0.100496 6.43 -0.006264 0.100289 6.44 -0.006238 0.100083 6.45 -0.006212 0.099878 6.46 -0.006186 0.099674 6.47 -0.006161 0.099470 6.48 -0.006135 0.099268 6.49 -0.006110 0.099066 6.5 -0.006085 0.098865 6.51 -0.006060 0.098665 6.52 -0.006035 0.098466 6.53 -0.006010 0.098267 6.54 -0.005986 0.098070 6.55 -0.005961 0.097873 6.56 -0.005937 0.097676 6.57 -0.005913 0.097481 6.58 -0.005889 0.097287 6.59 -0.005865 0.097093 6.6 -0.005841 0.096900 6.61 -0.005818 0.096708 6.62 -0.005794 0.096516 6.63 -0.005771 0.096325 6.64 -0.005748 0.096135 6.65 -0.005725 0.095946 6.66 -0.005702 0.095758 6.67 -0.005679 0.095570 6.68 -0.005657 0.095383 6.69 -0.005634 0.095197 6.7 -0.005612 0.095011 6.71 -0.005590 0.094826 6.72 -0.005568 0.094642 6.73 -0.005546 0.094459 6.74 -0.005524 0.094276 6.75 -0.005503 0.094094 6.76 -0.005481 0.093913 6.77 -0.005460 0.093733 6.78 -0.005439 0.093553 6.79 -0.005417 0.093374 6.8 -0.005396 0.093195 6.81 -0.005375 0.093017 6.82 -0.005355 0.092840 6.83 -0.005334 0.092664 6.84 -0.005313 0.092488 6.85 -0.005293 0.092313 6.86 -0.005273 0.092139 6.87 -0.005252 0.091965 6.88 -0.005232 0.091792 6.89 -0.005212 0.091619 6.9 -0.005193 0.091447 6.91 -0.005173 0.091276 6.92 -0.005153 0.091106 6.93 -0.005134 0.090936 6.94 -0.005114 0.090766 6.95 -0.005095 0.090598 6.96 -0.005076 0.090430 6.97 -0.005057 0.090262 6.98 -0.005038 0.090095 6.99 -0.005019 0.089929 7 -0.005001 0.089764 7.01 -0.004982 0.089599 7.02 -0.004964 0.089434 7.03 -0.004945 0.089271 7.04 -0.004927 0.089107 7.05 -0.004909 0.088945 7.06 -0.004891 0.088783 7.07 -0.004873 0.088622 7.08 -0.004855 0.088461 7.09 -0.004837 0.088301 7.1 -0.004820 0.088141 7.11 -0.004802 0.087982 7.12 -0.004785 0.087824 7.13 -0.004767 0.087666 7.14 -0.004750 0.087509 7.15 -0.004733 0.087352 7.16 -0.004716 0.087196 7.17 -0.004699 0.087041 7.18 -0.004682 0.086886 7.19 -0.004665 0.086731 7.2 -0.004648 0.086577 7.21 -0.004632 0.086424 7.22 -0.004615 0.086271 7.23 -0.004599 0.086119 7.24 -0.004582 0.085967 7.25 -0.004566 0.085816 7.26 -0.004550 0.085665 7.27 -0.004534 0.085515 7.28 -0.004518 0.085366 7.29 -0.004502 0.085217 7.3 -0.004486 0.085068 7.31 -0.004470 0.084920 7.32 -0.004454 0.084772 7.33 -0.004439 0.084625 7.34 -0.004423 0.084479 7.35 -0.004408 0.084333 7.36 -0.004392 0.084187 7.37 -0.004377 0.084042 7.38 -0.004362 0.083898 7.39 -0.004347 0.083754 7.4 -0.004332 0.083610 7.41 -0.004317 0.083467 7.42 -0.004302 0.083325 7.43 -0.004287 0.083183 7.44 -0.004273 0.083041 7.45 -0.004258 0.082900 7.46 -0.004243 0.082760 7.47 -0.004229 0.082620 7.48 -0.004215 0.082480 7.49 -0.004200 0.082341 7.5 -0.004186 0.082202 7.51 -0.004172 0.082064 7.52 -0.004158 0.081927 7.53 -0.004144 0.081789 7.54 -0.004130 0.081653 7.55 -0.004116 0.081516 7.56 -0.004102 0.081380 7.57 -0.004088 0.081245 7.58 -0.004074 0.081110 7.59 -0.004061 0.080975 7.6 -0.004047 0.080841 7.61 -0.004034 0.080708 7.62 -0.004020 0.080575 7.63 -0.004007 0.080442 7.64 -0.003993 0.080310 7.65 -0.003980 0.080178 7.66 -0.003967 0.080046 7.67 -0.003954 0.079915 7.68 -0.003941 0.079785 7.69 -0.003928 0.079654 7.7 -0.003915 0.079525 7.71 -0.003902 0.079395 7.72 -0.003889 0.079266 7.73 -0.003876 0.079138 7.74 -0.003864 0.079010 7.75 -0.003851 0.078882 7.76 -0.003839 0.078755 7.77 -0.003826 0.078628 7.78 -0.003814 0.078502 7.79 -0.003801 0.078376 7.8 -0.003789 0.078250 7.81 -0.003777 0.078125 7.82 -0.003765 0.078000 7.83 -0.003753 0.077876 7.84 -0.003741 0.077752 7.85 -0.003729 0.077628 7.86 -0.003717 0.077505 7.87 -0.003705 0.077382 7.88 -0.003693 0.077260 7.89 -0.003681 0.077138 7.9 -0.003669 0.077016 7.91 -0.003658 0.076895 7.92 -0.003646 0.076774 7.93 -0.003634 0.076654 7.94 -0.003623 0.076534 7.95 -0.003611 0.076414 7.96 -0.003600 0.076295 7.97 -0.003589 0.076176 7.98 -0.003577 0.076057 7.99 -0.003566 0.075939 8 -0.003555 0.075821 8.01 -0.003544 0.075704 8.02 -0.003532 0.075586 8.03 -0.003521 0.075470 8.04 -0.003510 0.075353 8.05 -0.003499 0.075237 8.06 -0.003488 0.075121 8.07 -0.003478 0.075006 8.08 -0.003467 0.074891 8.09 -0.003456 0.074776 8.1 -0.003445 0.074662 8.11 -0.003435 0.074548 8.12 -0.003424 0.074434 8.13 -0.003414 0.074321 8.14 -0.003403 0.074208 8.15 -0.003393 0.074095 8.16 -0.003382 0.073983 8.17 -0.003372 0.073871 8.18 -0.003362 0.073760 8.19 -0.003351 0.073649 8.2 -0.003341 0.073538 8.21 -0.003331 0.073427 8.22 -0.003321 0.073317 8.23 -0.003311 0.073207 8.24 -0.003301 0.073097 8.25 -0.003291 0.072988 8.26 -0.003281 0.072879 8.27 -0.003271 0.072771 8.28 -0.003261 0.072662 8.29 -0.003251 0.072555 8.3 -0.003242 0.072447 8.31 -0.003232 0.072340 8.32 -0.003222 0.072233 8.33 -0.003213 0.072126 8.34 -0.003203 0.072020 8.35 -0.003194 0.071914 8.36 -0.003184 0.071808 8.37 -0.003175 0.071702 8.38 -0.003165 0.071597 8.39 -0.003156 0.071493 8.4 -0.003147 0.071388 8.41 -0.003137 0.071284 8.42 -0.003128 0.071180 8.43 -0.003119 0.071076 8.44 -0.003110 0.070973 8.45 -0.003101 0.070870 8.46 -0.003092 0.070767 8.47 -0.003083 0.070665 8.48 -0.003074 0.070563 8.49 -0.003065 0.070461 8.5 -0.003056 0.070360 8.51 -0.003047 0.070258 8.52 -0.003038 0.070158 8.53 -0.003029 0.070057 8.54 -0.003021 0.069957 8.55 -0.003012 0.069857 8.56 -0.003003 0.069757 8.57 -0.002995 0.069657 8.58 -0.002986 0.069558 8.59 -0.002977 0.069459 8.6 -0.002969 0.069361 8.61 -0.002960 0.069262 8.62 -0.002952 0.069164 8.63 -0.002944 0.069067 8.64 -0.002935 0.068969 8.65 -0.002927 0.068872 8.66 -0.002919 0.068775 8.67 -0.002910 0.068678 8.68 -0.002902 0.068582 8.69 -0.002894 0.068486 8.7 -0.002886 0.068390 8.71 -0.002878 0.068294 8.72 -0.002869 0.068199 8.73 -0.002861 0.068104 8.74 -0.002853 0.068009 8.75 -0.002845 0.067915 8.76 -0.002837 0.067820 8.77 -0.002829 0.067726 8.78 -0.002821 0.067633 8.79 -0.002814 0.067539 8.8 -0.002806 0.067446 8.81 -0.002798 0.067353 8.82 -0.002790 0.067260 8.83 -0.002782 0.067168 8.84 -0.002775 0.067075 8.85 -0.002767 0.066984 8.86 -0.002759 0.066892 8.87 -0.002752 0.066800 8.88 -0.002744 0.066709 8.89 -0.002737 0.066618 8.9 -0.002729 0.066528 8.91 -0.002722 0.066437 8.92 -0.002714 0.066347 8.93 -0.002707 0.066257 8.94 -0.002699 0.066167 8.95 -0.002692 0.066078 8.96 -0.002685 0.065988 8.97 -0.002677 0.065899 8.98 -0.002670 0.065811 8.99 -0.002663 0.065722 9 -0.002656 0.065634 9.01 -0.002649 0.065546 9.02 -0.002641 0.065458 9.03 -0.002634 0.065371 9.04 -0.002627 0.065283 9.05 -0.002620 0.065196 9.06 -0.002613 0.065109 9.07 -0.002606 0.065023 9.08 -0.002599 0.064936 9.09 -0.002592 0.064850 9.1 -0.002585 0.064764 9.11 -0.002578 0.064678 9.12 -0.002571 0.064593 9.13 -0.002565 0.064508 9.14 -0.002558 0.064423 9.15 -0.002551 0.064338 9.16 -0.002544 0.064253 9.17 -0.002538 0.064169 9.18 -0.002531 0.064085 9.19 -0.002524 0.064001 9.2 -0.002518 0.063917 9.21 -0.002511 0.063833 9.22 -0.002504 0.063750 9.23 -0.002498 0.063667 9.24 -0.002491 0.063584 9.25 -0.002485 0.063502 9.26 -0.002478 0.063419 9.27 -0.002472 0.063337 9.28 -0.002465 0.063255 9.29 -0.002459 0.063173 9.3 -0.002453 0.063092 9.31 -0.002446 0.063010 9.32 -0.002440 0.062929 9.33 -0.002434 0.062848 9.34 -0.002427 0.062768 9.35 -0.002421 0.062687 9.36 -0.002415 0.062607 9.37 -0.002409 0.062527 9.38 -0.002402 0.062447 9.39 -0.002396 0.062367 9.4 -0.002390 0.062288 9.41 -0.002384 0.062208 9.42 -0.002378 0.062129 9.43 -0.002372 0.062051 9.44 -0.002366 0.061972 9.45 -0.002360 0.061893 9.46 -0.002354 0.061815 9.47 -0.002348 0.061737 9.48 -0.002342 0.061659 9.49 -0.002336 0.061582 9.5 -0.002330 0.061504 9.51 -0.002324 0.061427 9.52 -0.002318 0.061350 9.53 -0.002312 0.061273 9.54 -0.002306 0.061196 9.55 -0.002301 0.061120 9.56 -0.002295 0.061043 9.57 -0.002289 0.060967 9.58 -0.002283 0.060891 9.59 -0.002278 0.060815 9.6 -0.002272 0.060740 9.61 -0.002266 0.060664 9.62 -0.002261 0.060589 9.63 -0.002255 0.060514 9.64 -0.002249 0.060439 9.65 -0.002244 0.060365 9.66 -0.002238 0.060290 9.67 -0.002233 0.060216 9.68 -0.002227 0.060142 9.69 -0.002222 0.060068 9.7 -0.002216 0.059994 9.71 -0.002211 0.059921 9.72 -0.002205 0.059848 9.73 -0.002200 0.059774 9.74 -0.002194 0.059701 9.75 -0.002189 0.059629 9.76 -0.002184 0.059556 9.77 -0.002178 0.059484 9.78 -0.002173 0.059411 9.79 -0.002168 0.059339 9.8 -0.002162 0.059267 9.81 -0.002157 0.059195 9.82 -0.002152 0.059124 9.83 -0.002147 0.059052 9.84 -0.002141 0.058981 9.85 -0.002136 0.058910 9.86 -0.002131 0.058839 9.87 -0.002126 0.058768 9.88 -0.002121 0.058698 9.89 -0.002116 0.058628 9.9 -0.002110 0.058557 9.91 -0.002105 0.058487 9.92 -0.002100 0.058417 9.93 -0.002095 0.058348 9.94 -0.002090 0.058278 9.95 -0.002085 0.058209 9.96 -0.002080 0.058139 9.97 -0.002075 0.058070 9.98 -0.002070 0.058002 9.99 -0.002065 0.057933 dmrgpp-6.02/TestSuite/oracles/data3006.cf000066400000000000000000001415301414604301300200470ustar00rootroot00000000000000-10 0.002103 0.059230 -9.99 0.002108 0.059300 -9.98 0.002113 0.059370 -9.97 0.002118 0.059440 -9.96 0.002123 0.059511 -9.95 0.002128 0.059581 -9.94 0.002133 0.059652 -9.93 0.002138 0.059723 -9.92 0.002143 0.059794 -9.91 0.002149 0.059866 -9.9 0.002154 0.059937 -9.89 0.002159 0.060009 -9.88 0.002164 0.060081 -9.87 0.002169 0.060153 -9.86 0.002175 0.060225 -9.85 0.002180 0.060297 -9.84 0.002185 0.060370 -9.83 0.002190 0.060442 -9.82 0.002196 0.060515 -9.81 0.002201 0.060588 -9.8 0.002206 0.060662 -9.79 0.002212 0.060735 -9.78 0.002217 0.060809 -9.77 0.002223 0.060882 -9.76 0.002228 0.060956 -9.75 0.002234 0.061030 -9.74 0.002239 0.061105 -9.73 0.002245 0.061179 -9.72 0.002250 0.061254 -9.71 0.002256 0.061329 -9.7 0.002261 0.061404 -9.69 0.002267 0.061479 -9.68 0.002272 0.061554 -9.67 0.002278 0.061630 -9.66 0.002284 0.061706 -9.65 0.002289 0.061782 -9.64 0.002295 0.061858 -9.63 0.002301 0.061934 -9.62 0.002307 0.062011 -9.61 0.002312 0.062088 -9.6 0.002318 0.062164 -9.59 0.002324 0.062242 -9.58 0.002330 0.062319 -9.57 0.002336 0.062396 -9.56 0.002341 0.062474 -9.55 0.002347 0.062552 -9.54 0.002353 0.062630 -9.53 0.002359 0.062708 -9.52 0.002365 0.062787 -9.51 0.002371 0.062865 -9.5 0.002377 0.062944 -9.49 0.002383 0.063023 -9.48 0.002389 0.063102 -9.47 0.002395 0.063182 -9.46 0.002401 0.063261 -9.45 0.002407 0.063341 -9.44 0.002414 0.063421 -9.43 0.002420 0.063502 -9.42 0.002426 0.063582 -9.41 0.002432 0.063663 -9.4 0.002438 0.063744 -9.39 0.002445 0.063825 -9.38 0.002451 0.063906 -9.37 0.002457 0.063987 -9.36 0.002463 0.064069 -9.35 0.002470 0.064151 -9.34 0.002476 0.064233 -9.33 0.002482 0.064316 -9.32 0.002489 0.064398 -9.31 0.002495 0.064481 -9.3 0.002502 0.064564 -9.29 0.002508 0.064647 -9.28 0.002515 0.064730 -9.27 0.002521 0.064814 -9.26 0.002528 0.064898 -9.25 0.002535 0.064982 -9.24 0.002541 0.065066 -9.23 0.002548 0.065151 -9.22 0.002554 0.065236 -9.21 0.002561 0.065320 -9.2 0.002568 0.065406 -9.19 0.002575 0.065491 -9.18 0.002581 0.065577 -9.17 0.002588 0.065663 -9.16 0.002595 0.065749 -9.15 0.002602 0.065835 -9.14 0.002609 0.065921 -9.13 0.002616 0.066008 -9.12 0.002623 0.066095 -9.11 0.002630 0.066182 -9.1 0.002637 0.066270 -9.09 0.002644 0.066357 -9.08 0.002651 0.066445 -9.07 0.002658 0.066534 -9.06 0.002665 0.066622 -9.05 0.002672 0.066711 -9.04 0.002680 0.066799 -9.03 0.002687 0.066888 -9.02 0.002694 0.066978 -9.01 0.002701 0.067067 -9 0.002709 0.067157 -8.99 0.002716 0.067247 -8.98 0.002723 0.067337 -8.97 0.002731 0.067428 -8.96 0.002738 0.067519 -8.95 0.002746 0.067610 -8.94 0.002753 0.067701 -8.93 0.002761 0.067792 -8.92 0.002768 0.067884 -8.91 0.002776 0.067976 -8.9 0.002783 0.068068 -8.89 0.002791 0.068161 -8.88 0.002799 0.068254 -8.87 0.002806 0.068347 -8.86 0.002814 0.068440 -8.85 0.002822 0.068533 -8.84 0.002830 0.068627 -8.83 0.002837 0.068721 -8.82 0.002845 0.068815 -8.81 0.002853 0.068910 -8.8 0.002861 0.069005 -8.79 0.002869 0.069100 -8.78 0.002877 0.069195 -8.77 0.002885 0.069291 -8.76 0.002893 0.069387 -8.75 0.002901 0.069483 -8.74 0.002909 0.069579 -8.73 0.002917 0.069676 -8.72 0.002926 0.069773 -8.71 0.002934 0.069870 -8.7 0.002942 0.069968 -8.69 0.002950 0.070065 -8.68 0.002959 0.070164 -8.67 0.002967 0.070262 -8.66 0.002976 0.070360 -8.65 0.002984 0.070459 -8.64 0.002993 0.070558 -8.63 0.003001 0.070658 -8.62 0.003010 0.070758 -8.61 0.003018 0.070858 -8.6 0.003027 0.070958 -8.59 0.003036 0.071058 -8.58 0.003044 0.071159 -8.57 0.003053 0.071260 -8.56 0.003062 0.071362 -8.55 0.003071 0.071464 -8.54 0.003080 0.071566 -8.53 0.003089 0.071668 -8.52 0.003098 0.071770 -8.51 0.003107 0.071873 -8.5 0.003116 0.071976 -8.49 0.003125 0.072080 -8.48 0.003134 0.072184 -8.47 0.003143 0.072288 -8.46 0.003152 0.072392 -8.45 0.003161 0.072497 -8.44 0.003170 0.072602 -8.43 0.003180 0.072707 -8.42 0.003189 0.072812 -8.41 0.003198 0.072918 -8.4 0.003208 0.073025 -8.39 0.003217 0.073131 -8.38 0.003227 0.073238 -8.37 0.003236 0.073345 -8.36 0.003246 0.073452 -8.35 0.003256 0.073560 -8.34 0.003265 0.073668 -8.33 0.003275 0.073777 -8.32 0.003285 0.073886 -8.31 0.003294 0.073995 -8.3 0.003304 0.074104 -8.29 0.003314 0.074214 -8.28 0.003324 0.074324 -8.27 0.003334 0.074434 -8.26 0.003344 0.074545 -8.25 0.003354 0.074656 -8.24 0.003364 0.074767 -8.23 0.003374 0.074879 -8.22 0.003385 0.074991 -8.21 0.003395 0.075103 -8.2 0.003405 0.075216 -8.19 0.003416 0.075329 -8.18 0.003426 0.075443 -8.17 0.003436 0.075556 -8.16 0.003447 0.075671 -8.15 0.003458 0.075785 -8.14 0.003468 0.075900 -8.13 0.003479 0.076015 -8.12 0.003490 0.076130 -8.11 0.003500 0.076246 -8.1 0.003511 0.076362 -8.09 0.003522 0.076479 -8.08 0.003533 0.076596 -8.07 0.003544 0.076713 -8.06 0.003555 0.076831 -8.05 0.003566 0.076948 -8.04 0.003577 0.077067 -8.03 0.003589 0.077185 -8.02 0.003600 0.077304 -8.01 0.003611 0.077424 -8 0.003623 0.077544 -7.99 0.003634 0.077664 -7.98 0.003645 0.077784 -7.97 0.003657 0.077905 -7.96 0.003669 0.078026 -7.95 0.003680 0.078148 -7.94 0.003692 0.078270 -7.93 0.003703 0.078392 -7.92 0.003715 0.078515 -7.91 0.003727 0.078638 -7.9 0.003739 0.078762 -7.89 0.003751 0.078886 -7.88 0.003763 0.079010 -7.87 0.003775 0.079135 -7.86 0.003787 0.079260 -7.85 0.003799 0.079385 -7.84 0.003811 0.079511 -7.83 0.003823 0.079638 -7.82 0.003835 0.079764 -7.81 0.003848 0.079891 -7.8 0.003860 0.080019 -7.79 0.003873 0.080147 -7.78 0.003885 0.080275 -7.77 0.003898 0.080404 -7.76 0.003910 0.080534 -7.75 0.003923 0.080663 -7.74 0.003936 0.080793 -7.73 0.003949 0.080924 -7.72 0.003962 0.081055 -7.71 0.003975 0.081186 -7.7 0.003988 0.081318 -7.69 0.004001 0.081450 -7.68 0.004014 0.081583 -7.67 0.004027 0.081716 -7.66 0.004041 0.081850 -7.65 0.004054 0.081983 -7.64 0.004067 0.082118 -7.63 0.004081 0.082253 -7.62 0.004095 0.082388 -7.61 0.004108 0.082524 -7.6 0.004122 0.082660 -7.59 0.004136 0.082797 -7.58 0.004150 0.082934 -7.57 0.004164 0.083071 -7.56 0.004178 0.083209 -7.55 0.004192 0.083348 -7.54 0.004206 0.083486 -7.53 0.004220 0.083626 -7.52 0.004235 0.083766 -7.51 0.004249 0.083906 -7.5 0.004264 0.084047 -7.49 0.004278 0.084188 -7.48 0.004293 0.084329 -7.47 0.004307 0.084472 -7.46 0.004322 0.084614 -7.45 0.004337 0.084757 -7.44 0.004352 0.084901 -7.43 0.004367 0.085045 -7.42 0.004382 0.085190 -7.41 0.004397 0.085335 -7.4 0.004412 0.085481 -7.39 0.004427 0.085627 -7.38 0.004442 0.085773 -7.37 0.004458 0.085920 -7.36 0.004473 0.086068 -7.35 0.004489 0.086216 -7.34 0.004504 0.086365 -7.33 0.004520 0.086514 -7.32 0.004536 0.086664 -7.31 0.004552 0.086814 -7.3 0.004568 0.086965 -7.29 0.004584 0.087117 -7.28 0.004600 0.087268 -7.27 0.004616 0.087421 -7.26 0.004632 0.087574 -7.25 0.004649 0.087727 -7.24 0.004665 0.087881 -7.23 0.004682 0.088036 -7.22 0.004699 0.088191 -7.21 0.004715 0.088347 -7.2 0.004732 0.088503 -7.19 0.004749 0.088660 -7.18 0.004766 0.088817 -7.17 0.004784 0.088975 -7.16 0.004801 0.089134 -7.15 0.004818 0.089293 -7.14 0.004836 0.089452 -7.13 0.004853 0.089613 -7.12 0.004871 0.089773 -7.11 0.004889 0.089935 -7.1 0.004907 0.090097 -7.09 0.004925 0.090259 -7.08 0.004943 0.090422 -7.07 0.004961 0.090586 -7.06 0.004979 0.090750 -7.05 0.004998 0.090915 -7.04 0.005016 0.091080 -7.03 0.005035 0.091246 -7.02 0.005053 0.091413 -7.01 0.005072 0.091580 -7 0.005091 0.091748 -6.99 0.005110 0.091917 -6.98 0.005129 0.092086 -6.97 0.005148 0.092255 -6.96 0.005168 0.092426 -6.95 0.005187 0.092597 -6.94 0.005206 0.092768 -6.93 0.005226 0.092941 -6.92 0.005246 0.093114 -6.91 0.005265 0.093287 -6.9 0.005285 0.093461 -6.89 0.005305 0.093636 -6.88 0.005325 0.093812 -6.87 0.005346 0.093988 -6.86 0.005366 0.094165 -6.85 0.005386 0.094343 -6.84 0.005407 0.094521 -6.83 0.005428 0.094700 -6.82 0.005448 0.094880 -6.81 0.005469 0.095060 -6.8 0.005491 0.095241 -6.79 0.005512 0.095423 -6.78 0.005533 0.095605 -6.77 0.005555 0.095789 -6.76 0.005576 0.095973 -6.75 0.005598 0.096157 -6.74 0.005620 0.096343 -6.73 0.005642 0.096529 -6.72 0.005664 0.096715 -6.71 0.005686 0.096903 -6.7 0.005709 0.097091 -6.69 0.005731 0.097280 -6.68 0.005754 0.097470 -6.67 0.005777 0.097660 -6.66 0.005800 0.097852 -6.65 0.005823 0.098044 -6.64 0.005846 0.098236 -6.63 0.005870 0.098430 -6.62 0.005894 0.098624 -6.61 0.005917 0.098819 -6.6 0.005941 0.099015 -6.59 0.005965 0.099211 -6.58 0.005990 0.099408 -6.57 0.006014 0.099607 -6.56 0.006038 0.099805 -6.55 0.006063 0.100005 -6.54 0.006088 0.100205 -6.53 0.006113 0.100407 -6.52 0.006138 0.100609 -6.51 0.006163 0.100812 -6.5 0.006189 0.101015 -6.49 0.006214 0.101220 -6.48 0.006240 0.101425 -6.47 0.006266 0.101631 -6.46 0.006292 0.101838 -6.45 0.006318 0.102046 -6.44 0.006344 0.102255 -6.43 0.006371 0.102465 -6.42 0.006397 0.102675 -6.41 0.006424 0.102886 -6.4 0.006451 0.103099 -6.39 0.006478 0.103312 -6.38 0.006505 0.103526 -6.37 0.006532 0.103741 -6.36 0.006560 0.103956 -6.35 0.006588 0.104173 -6.34 0.006616 0.104391 -6.33 0.006644 0.104610 -6.32 0.006672 0.104829 -6.31 0.006701 0.105050 -6.3 0.006729 0.105271 -6.29 0.006758 0.105493 -6.28 0.006787 0.105717 -6.27 0.006816 0.105941 -6.26 0.006846 0.106166 -6.25 0.006876 0.106393 -6.24 0.006905 0.106620 -6.23 0.006936 0.106848 -6.22 0.006966 0.107077 -6.21 0.006996 0.107308 -6.2 0.007027 0.107539 -6.19 0.007058 0.107771 -6.18 0.007089 0.108004 -6.17 0.007120 0.108239 -6.16 0.007152 0.108474 -6.15 0.007184 0.108710 -6.14 0.007216 0.108947 -6.13 0.007248 0.109186 -6.12 0.007281 0.109425 -6.11 0.007313 0.109666 -6.1 0.007346 0.109907 -6.09 0.007380 0.110150 -6.08 0.007413 0.110394 -6.07 0.007447 0.110638 -6.06 0.007480 0.110884 -6.05 0.007515 0.111131 -6.04 0.007549 0.111379 -6.03 0.007584 0.111628 -6.02 0.007618 0.111878 -6.01 0.007653 0.112130 -6 0.007689 0.112382 -5.99 0.007724 0.112636 -5.98 0.007760 0.112891 -5.97 0.007796 0.113146 -5.96 0.007832 0.113404 -5.95 0.007869 0.113662 -5.94 0.007905 0.113921 -5.93 0.007942 0.114182 -5.92 0.007980 0.114444 -5.91 0.008017 0.114707 -5.9 0.008055 0.114971 -5.89 0.008093 0.115237 -5.88 0.008131 0.115504 -5.87 0.008170 0.115772 -5.86 0.008208 0.116041 -5.85 0.008248 0.116312 -5.84 0.008287 0.116584 -5.83 0.008327 0.116857 -5.82 0.008366 0.117131 -5.81 0.008407 0.117407 -5.8 0.008447 0.117685 -5.79 0.008488 0.117963 -5.78 0.008529 0.118243 -5.77 0.008571 0.118524 -5.76 0.008612 0.118807 -5.75 0.008655 0.119091 -5.74 0.008697 0.119376 -5.73 0.008740 0.119663 -5.72 0.008783 0.119951 -5.71 0.008826 0.120240 -5.7 0.008870 0.120531 -5.69 0.008914 0.120824 -5.68 0.008959 0.121118 -5.67 0.009004 0.121413 -5.66 0.009049 0.121709 -5.65 0.009094 0.122008 -5.64 0.009140 0.122307 -5.63 0.009187 0.122608 -5.62 0.009233 0.122911 -5.61 0.009280 0.123215 -5.6 0.009328 0.123520 -5.59 0.009375 0.123827 -5.58 0.009424 0.124136 -5.57 0.009472 0.124446 -5.56 0.009521 0.124758 -5.55 0.009570 0.125071 -5.54 0.009620 0.125386 -5.53 0.009670 0.125702 -5.52 0.009720 0.126020 -5.51 0.009771 0.126340 -5.5 0.009822 0.126661 -5.49 0.009874 0.126984 -5.48 0.009926 0.127309 -5.47 0.009978 0.127635 -5.46 0.010031 0.127963 -5.45 0.010084 0.128293 -5.44 0.010138 0.128624 -5.43 0.010192 0.128957 -5.42 0.010246 0.129292 -5.41 0.010301 0.129629 -5.4 0.010356 0.129968 -5.39 0.010412 0.130308 -5.38 0.010468 0.130650 -5.37 0.010525 0.130994 -5.36 0.010582 0.131340 -5.35 0.010639 0.131688 -5.34 0.010697 0.132037 -5.33 0.010756 0.132389 -5.32 0.010815 0.132742 -5.31 0.010874 0.133098 -5.3 0.010934 0.133455 -5.29 0.010995 0.133814 -5.28 0.011056 0.134176 -5.27 0.011118 0.134539 -5.26 0.011180 0.134904 -5.25 0.011243 0.135271 -5.24 0.011306 0.135641 -5.23 0.011370 0.136012 -5.22 0.011435 0.136386 -5.21 0.011500 0.136761 -5.2 0.011566 0.137139 -5.19 0.011632 0.137519 -5.18 0.011699 0.137901 -5.17 0.011766 0.138285 -5.16 0.011835 0.138671 -5.15 0.011903 0.139059 -5.14 0.011973 0.139450 -5.13 0.012043 0.139843 -5.12 0.012114 0.140238 -5.11 0.012185 0.140635 -5.1 0.012257 0.141034 -5.09 0.012330 0.141436 -5.08 0.012403 0.141840 -5.07 0.012477 0.142247 -5.06 0.012552 0.142656 -5.05 0.012627 0.143067 -5.04 0.012704 0.143480 -5.03 0.012780 0.143896 -5.02 0.012858 0.144314 -5.01 0.012936 0.144735 -5 0.013015 0.145158 -4.99 0.013095 0.145584 -4.98 0.013175 0.146012 -4.97 0.013256 0.146443 -4.96 0.013338 0.146877 -4.95 0.013421 0.147313 -4.94 0.013504 0.147751 -4.93 0.013588 0.148193 -4.92 0.013673 0.148637 -4.91 0.013759 0.149083 -4.9 0.013846 0.149533 -4.89 0.013933 0.149985 -4.88 0.014022 0.150440 -4.87 0.014111 0.150898 -4.86 0.014201 0.151359 -4.85 0.014292 0.151823 -4.84 0.014384 0.152289 -4.83 0.014477 0.152759 -4.82 0.014571 0.153231 -4.81 0.014665 0.153707 -4.8 0.014761 0.154186 -4.79 0.014858 0.154667 -4.78 0.014956 0.155152 -4.77 0.015055 0.155640 -4.76 0.015155 0.156130 -4.75 0.015256 0.156624 -4.74 0.015358 0.157122 -4.73 0.015461 0.157622 -4.72 0.015566 0.158126 -4.71 0.015671 0.158632 -4.7 0.015778 0.159142 -4.69 0.015886 0.159656 -4.68 0.015995 0.160173 -4.67 0.016105 0.160693 -4.66 0.016217 0.161216 -4.65 0.016329 0.161743 -4.64 0.016444 0.162273 -4.63 0.016559 0.162807 -4.62 0.016675 0.163344 -4.61 0.016793 0.163885 -4.6 0.016912 0.164429 -4.59 0.017033 0.164977 -4.58 0.017155 0.165528 -4.57 0.017278 0.166083 -4.56 0.017402 0.166642 -4.55 0.017528 0.167205 -4.54 0.017655 0.167771 -4.53 0.017784 0.168341 -4.52 0.017914 0.168915 -4.51 0.018045 0.169493 -4.5 0.018178 0.170075 -4.49 0.018312 0.170661 -4.48 0.018448 0.171251 -4.47 0.018585 0.171845 -4.46 0.018723 0.172443 -4.45 0.018863 0.173046 -4.44 0.019005 0.173653 -4.43 0.019148 0.174264 -4.42 0.019293 0.174880 -4.41 0.019440 0.175500 -4.4 0.019588 0.176125 -4.39 0.019738 0.176754 -4.38 0.019890 0.177388 -4.37 0.020044 0.178027 -4.36 0.020200 0.178670 -4.35 0.020357 0.179318 -4.34 0.020517 0.179971 -4.33 0.020679 0.180629 -4.32 0.020842 0.181292 -4.31 0.021008 0.181960 -4.3 0.021176 0.182633 -4.29 0.021347 0.183310 -4.28 0.021520 0.183993 -4.27 0.021695 0.184681 -4.26 0.021872 0.185374 -4.25 0.022052 0.186072 -4.24 0.022234 0.186776 -4.23 0.022419 0.187484 -4.22 0.022606 0.188198 -4.21 0.022796 0.188917 -4.2 0.022988 0.189642 -4.19 0.023183 0.190372 -4.18 0.023381 0.191107 -4.17 0.023581 0.191848 -4.16 0.023784 0.192594 -4.15 0.023990 0.193346 -4.14 0.024198 0.194104 -4.13 0.024409 0.194867 -4.12 0.024622 0.195636 -4.11 0.024839 0.196410 -4.1 0.025058 0.197191 -4.09 0.025280 0.197978 -4.08 0.025505 0.198771 -4.07 0.025732 0.199570 -4.06 0.025962 0.200375 -4.05 0.026196 0.201187 -4.04 0.026432 0.202006 -4.03 0.026671 0.202831 -4.02 0.026913 0.203663 -4.01 0.027159 0.204502 -4 0.027407 0.205348 -3.99 0.027659 0.206201 -3.98 0.027915 0.207061 -3.97 0.028174 0.207929 -3.96 0.028437 0.208805 -3.95 0.028703 0.209688 -3.94 0.028974 0.210579 -3.93 0.029248 0.211478 -3.92 0.029527 0.212384 -3.91 0.029810 0.213299 -3.9 0.030097 0.214221 -3.89 0.030389 0.215152 -3.88 0.030686 0.216090 -3.87 0.030988 0.217037 -3.86 0.031295 0.217992 -3.85 0.031606 0.218955 -3.84 0.031923 0.219927 -3.83 0.032245 0.220906 -3.82 0.032573 0.221894 -3.81 0.032905 0.222891 -3.8 0.033244 0.223896 -3.79 0.033587 0.224909 -3.78 0.033937 0.225931 -3.77 0.034292 0.226961 -3.76 0.034653 0.228000 -3.75 0.035019 0.229048 -3.74 0.035391 0.230105 -3.73 0.035769 0.231170 -3.72 0.036153 0.232245 -3.71 0.036543 0.233329 -3.7 0.036939 0.234422 -3.69 0.037341 0.235525 -3.68 0.037749 0.236638 -3.67 0.038163 0.237760 -3.66 0.038584 0.238893 -3.65 0.039011 0.240036 -3.64 0.039445 0.241189 -3.63 0.039886 0.242353 -3.62 0.040334 0.243528 -3.61 0.040789 0.244714 -3.6 0.041251 0.245911 -3.59 0.041721 0.247120 -3.58 0.042199 0.248340 -3.57 0.042685 0.249571 -3.56 0.043179 0.250814 -3.55 0.043682 0.252069 -3.54 0.044193 0.253335 -3.53 0.044713 0.254614 -3.52 0.045242 0.255905 -3.51 0.045780 0.257207 -3.5 0.046327 0.258522 -3.49 0.046883 0.259849 -3.48 0.047449 0.261189 -3.47 0.048024 0.262542 -3.46 0.048609 0.263907 -3.45 0.049203 0.265286 -3.44 0.049806 0.266678 -3.43 0.050420 0.268084 -3.42 0.051043 0.269504 -3.41 0.051676 0.270939 -3.4 0.052319 0.272389 -3.39 0.052972 0.273854 -3.38 0.053636 0.275335 -3.37 0.054311 0.276834 -3.36 0.054998 0.278349 -3.35 0.055696 0.279882 -3.34 0.056407 0.281433 -3.33 0.057131 0.283004 -3.32 0.057868 0.284593 -3.31 0.058620 0.286203 -3.3 0.059386 0.287832 -3.29 0.060169 0.289482 -3.28 0.060969 0.291153 -3.27 0.061786 0.292846 -3.26 0.062622 0.294560 -3.25 0.063478 0.296295 -3.24 0.064354 0.298052 -3.23 0.065252 0.299831 -3.22 0.066173 0.301632 -3.21 0.067117 0.303455 -3.2 0.068085 0.305299 -3.19 0.069079 0.307165 -3.18 0.070099 0.309052 -3.17 0.071147 0.310961 -3.16 0.072223 0.312890 -3.15 0.073328 0.314840 -3.14 0.074464 0.316811 -3.13 0.075630 0.318801 -3.12 0.076828 0.320810 -3.11 0.078060 0.322839 -3.1 0.079324 0.324886 -3.09 0.080624 0.326952 -3.08 0.081958 0.329035 -3.07 0.083329 0.331134 -3.06 0.084736 0.333250 -3.05 0.086180 0.335381 -3.04 0.087662 0.337528 -3.03 0.089183 0.339688 -3.02 0.090742 0.341863 -3.01 0.092341 0.344050 -3 0.093980 0.346249 -2.99 0.095659 0.348460 -2.98 0.097378 0.350681 -2.97 0.099137 0.352913 -2.96 0.100937 0.355155 -2.95 0.102778 0.357407 -2.94 0.104660 0.359667 -2.93 0.106584 0.361935 -2.92 0.108548 0.364212 -2.91 0.110554 0.366497 -2.9 0.112601 0.368789 -2.89 0.114691 0.371089 -2.88 0.116822 0.373396 -2.87 0.118995 0.375711 -2.86 0.121212 0.378032 -2.85 0.123471 0.380360 -2.84 0.125773 0.382694 -2.83 0.128119 0.385035 -2.82 0.130509 0.387382 -2.81 0.132943 0.389734 -2.8 0.135420 0.392091 -2.79 0.137942 0.394453 -2.78 0.140508 0.396820 -2.77 0.143118 0.399192 -2.76 0.145771 0.401568 -2.75 0.148466 0.403948 -2.74 0.151205 0.406334 -2.73 0.153984 0.408725 -2.72 0.156805 0.411123 -2.71 0.159667 0.413529 -2.7 0.162568 0.415943 -2.69 0.165510 0.418370 -2.68 0.168492 0.420809 -2.67 0.171514 0.423264 -2.66 0.174578 0.425737 -2.65 0.177683 0.428231 -2.64 0.180832 0.430748 -2.63 0.184027 0.433292 -2.62 0.187269 0.435865 -2.61 0.190561 0.438471 -2.6 0.193906 0.441111 -2.59 0.197307 0.443790 -2.58 0.200768 0.446508 -2.57 0.204292 0.449270 -2.56 0.207885 0.452076 -2.55 0.211550 0.454931 -2.54 0.215293 0.457836 -2.53 0.219118 0.460793 -2.52 0.223031 0.463805 -2.51 0.227039 0.466874 -2.5 0.231149 0.470002 -2.49 0.235368 0.473191 -2.48 0.239704 0.476443 -2.47 0.244165 0.479758 -2.46 0.248762 0.483137 -2.45 0.253504 0.486580 -2.44 0.258402 0.490088 -2.43 0.263468 0.493658 -2.42 0.268713 0.497288 -2.41 0.274151 0.500975 -2.4 0.279794 0.504714 -2.39 0.285655 0.508500 -2.38 0.291748 0.512327 -2.37 0.298086 0.516186 -2.36 0.304684 0.520068 -2.35 0.311554 0.523962 -2.34 0.318711 0.527856 -2.33 0.326167 0.531737 -2.32 0.333935 0.535589 -2.31 0.342028 0.539398 -2.3 0.350457 0.543144 -2.29 0.359234 0.546808 -2.28 0.368369 0.550371 -2.27 0.377870 0.553808 -2.26 0.387748 0.557097 -2.25 0.398007 0.560212 -2.24 0.408655 0.563126 -2.23 0.419694 0.565810 -2.22 0.431128 0.568235 -2.21 0.442955 0.570368 -2.2 0.455174 0.572177 -2.19 0.467780 0.573629 -2.18 0.480765 0.574687 -2.17 0.494118 0.575317 -2.16 0.507825 0.575483 -2.15 0.521869 0.575148 -2.14 0.536229 0.574275 -2.13 0.550879 0.572830 -2.12 0.565792 0.570777 -2.11 0.580934 0.568084 -2.1 0.596269 0.564719 -2.09 0.611758 0.560654 -2.08 0.627357 0.555863 -2.07 0.643019 0.550324 -2.06 0.658696 0.544018 -2.05 0.674335 0.536929 -2.04 0.689885 0.529049 -2.03 0.705290 0.520370 -2.02 0.720495 0.510891 -2.01 0.735444 0.500615 -2 0.750081 0.489548 -1.99 0.764351 0.477702 -1.98 0.778198 0.465090 -1.97 0.791569 0.451731 -1.96 0.804408 0.437647 -1.95 0.816662 0.422862 -1.94 0.828279 0.407406 -1.93 0.839203 0.391312 -1.92 0.849383 0.374615 -1.91 0.858766 0.357359 -1.9 0.867300 0.339590 -1.89 0.874934 0.321361 -1.88 0.881619 0.302734 -1.87 0.887310 0.283775 -1.86 0.891966 0.264560 -1.85 0.895552 0.245170 -1.84 0.898042 0.225695 -1.83 0.899417 0.206231 -1.82 0.899670 0.186879 -1.81 0.898807 0.167740 -1.8 0.896843 0.148923 -1.79 0.893812 0.130530 -1.78 0.889758 0.112663 -1.77 0.884737 0.095420 -1.76 0.878820 0.078889 -1.75 0.872089 0.063151 -1.74 0.864632 0.048276 -1.73 0.856549 0.034320 -1.72 0.847941 0.021329 -1.71 0.838916 0.009333 -1.7 0.829581 -0.001647 -1.69 0.820045 -0.011608 -1.68 0.810411 -0.020557 -1.67 0.800782 -0.028512 -1.66 0.791255 -0.035500 -1.65 0.781918 -0.041559 -1.64 0.772857 -0.046736 -1.63 0.764149 -0.051082 -1.62 0.755862 -0.054656 -1.61 0.748059 -0.057520 -1.6 0.740793 -0.059740 -1.59 0.734114 -0.061385 -1.58 0.728060 -0.062527 -1.57 0.722665 -0.063238 -1.56 0.717956 -0.063591 -1.55 0.713955 -0.063661 -1.54 0.710675 -0.063524 -1.53 0.708127 -0.063252 -1.52 0.706313 -0.062923 -1.51 0.705232 -0.062610 -1.5 0.704876 -0.062388 -1.49 0.705232 -0.062331 -1.48 0.706280 -0.062513 -1.47 0.707998 -0.063006 -1.46 0.710352 -0.063883 -1.45 0.713307 -0.065214 -1.44 0.716818 -0.067067 -1.43 0.720834 -0.069509 -1.42 0.725298 -0.072603 -1.41 0.730143 -0.076408 -1.4 0.735297 -0.080977 -1.39 0.740679 -0.086360 -1.38 0.746201 -0.092596 -1.37 0.751770 -0.099718 -1.36 0.757285 -0.107749 -1.35 0.762641 -0.116700 -1.34 0.767727 -0.126571 -1.33 0.772434 -0.137347 -1.32 0.776649 -0.149000 -1.31 0.780262 -0.161487 -1.3 0.783167 -0.174750 -1.29 0.785265 -0.188718 -1.28 0.786463 -0.203303 -1.27 0.786684 -0.218408 -1.26 0.785859 -0.233921 -1.25 0.783938 -0.249725 -1.24 0.780886 -0.265694 -1.23 0.776685 -0.281700 -1.22 0.771335 -0.297614 -1.21 0.764855 -0.313308 -1.2 0.757278 -0.328661 -1.19 0.748655 -0.343557 -1.18 0.739048 -0.357892 -1.17 0.728534 -0.371573 -1.16 0.717198 -0.384520 -1.15 0.705130 -0.396665 -1.14 0.692428 -0.407955 -1.13 0.679189 -0.418353 -1.12 0.665512 -0.427832 -1.11 0.651494 -0.436380 -1.1 0.637230 -0.443995 -1.09 0.622806 -0.450687 -1.08 0.608307 -0.456473 -1.07 0.593808 -0.461380 -1.06 0.579380 -0.465438 -1.05 0.565084 -0.468686 -1.04 0.550977 -0.471162 -1.03 0.537107 -0.472911 -1.02 0.523514 -0.473976 -1.01 0.510235 -0.474404 -1 0.497298 -0.474239 -0.99 0.484728 -0.473528 -0.98 0.472544 -0.472312 -0.97 0.460760 -0.470636 -0.96 0.449388 -0.468539 -0.95 0.438434 -0.466062 -0.94 0.427903 -0.463240 -0.93 0.417797 -0.460109 -0.92 0.408116 -0.456701 -0.91 0.398858 -0.453047 -0.9 0.390020 -0.449176 -0.89 0.381597 -0.445115 -0.88 0.373584 -0.440889 -0.87 0.365975 -0.436521 -0.86 0.358763 -0.432032 -0.85 0.351941 -0.427443 -0.84 0.345502 -0.422773 -0.83 0.339438 -0.418038 -0.82 0.333744 -0.413256 -0.81 0.328410 -0.408442 -0.8 0.323431 -0.403611 -0.79 0.318799 -0.398777 -0.78 0.314508 -0.393952 -0.77 0.310550 -0.389150 -0.76 0.306921 -0.384384 -0.75 0.303614 -0.379666 -0.74 0.300622 -0.375007 -0.73 0.297940 -0.370420 -0.72 0.295563 -0.365917 -0.71 0.293485 -0.361510 -0.7 0.291699 -0.357212 -0.69 0.290201 -0.353035 -0.68 0.288984 -0.348993 -0.67 0.288042 -0.345098 -0.66 0.287367 -0.341366 -0.65 0.286952 -0.337810 -0.64 0.286790 -0.334446 -0.63 0.286870 -0.331288 -0.62 0.287182 -0.328352 -0.61 0.287715 -0.325655 -0.6 0.288455 -0.323214 -0.59 0.289388 -0.321043 -0.58 0.290497 -0.319161 -0.57 0.291763 -0.317583 -0.56 0.293164 -0.316324 -0.55 0.294679 -0.315399 -0.54 0.296280 -0.314822 -0.53 0.297941 -0.314604 -0.52 0.299630 -0.314755 -0.51 0.301314 -0.315281 -0.5 0.302960 -0.316186 -0.49 0.304530 -0.317471 -0.48 0.305987 -0.319131 -0.47 0.307293 -0.321158 -0.46 0.308409 -0.323540 -0.45 0.309296 -0.326258 -0.44 0.309920 -0.329289 -0.43 0.310244 -0.332606 -0.42 0.310240 -0.336177 -0.41 0.309878 -0.339963 -0.4 0.309137 -0.343926 -0.39 0.308000 -0.348021 -0.38 0.306456 -0.352204 -0.37 0.304498 -0.356427 -0.36 0.302128 -0.360644 -0.35 0.299353 -0.364810 -0.34 0.296187 -0.368881 -0.33 0.292646 -0.372816 -0.32 0.288754 -0.376577 -0.31 0.284538 -0.380132 -0.3 0.280029 -0.383452 -0.29 0.275258 -0.386513 -0.28 0.270259 -0.389296 -0.27 0.265068 -0.391788 -0.26 0.259719 -0.393980 -0.25 0.254246 -0.395867 -0.24 0.248681 -0.397448 -0.23 0.243055 -0.398727 -0.22 0.237398 -0.399709 -0.21 0.231734 -0.400404 -0.2 0.226089 -0.400822 -0.19 0.220483 -0.400976 -0.18 0.214936 -0.400881 -0.17 0.209464 -0.400549 -0.16 0.204080 -0.399998 -0.15 0.198797 -0.399242 -0.14 0.193624 -0.398298 -0.13 0.188569 -0.397179 -0.12 0.183638 -0.395901 -0.11 0.178835 -0.394480 -0.1 0.174164 -0.392927 -0.090000 0.169626 -0.391256 -0.080000 0.165222 -0.389481 -0.070000 0.160951 -0.387611 -0.060000 0.156815 -0.385659 -0.050000 0.152810 -0.383634 -0.040000 0.148934 -0.381545 -0.030000 0.145186 -0.379402 -0.020000 0.141563 -0.377212 -0.010000 0.138061 -0.374982 0 0.134677 -0.372719 0.009999 0.131408 -0.370430 0.019999 0.128250 -0.368118 0.029999 0.125200 -0.365791 0.039999 0.122254 -0.363452 0.049999 0.119408 -0.361105 0.059999 0.116660 -0.358754 0.069999 0.114005 -0.356402 0.079999 0.111440 -0.354053 0.089999 0.108961 -0.351708 0.099999 0.106566 -0.349371 0.11 0.104251 -0.347043 0.12 0.102012 -0.344726 0.13 0.099848 -0.342422 0.14 0.097754 -0.340133 0.15 0.095729 -0.337860 0.16 0.093769 -0.335603 0.17 0.091872 -0.333364 0.18 0.090035 -0.331144 0.19 0.088257 -0.328943 0.2 0.086533 -0.326762 0.21 0.084864 -0.324601 0.22 0.083245 -0.322461 0.23 0.081676 -0.320343 0.24 0.080154 -0.318246 0.25 0.078678 -0.316170 0.26 0.077246 -0.314117 0.27 0.075855 -0.312086 0.28 0.074505 -0.310076 0.29 0.073194 -0.308089 0.3 0.071920 -0.306123 0.31 0.070682 -0.304180 0.32 0.069478 -0.302258 0.33 0.068308 -0.300358 0.34 0.067170 -0.298480 0.35 0.066063 -0.296624 0.36 0.064986 -0.294788 0.37 0.063937 -0.292974 0.38 0.062916 -0.291180 0.39 0.061921 -0.289408 0.4 0.060953 -0.287656 0.41 0.060009 -0.285924 0.42 0.059089 -0.284212 0.43 0.058192 -0.282520 0.44 0.057317 -0.280847 0.45 0.056464 -0.279194 0.46 0.055631 -0.277560 0.47 0.054819 -0.275944 0.48 0.054026 -0.274347 0.49 0.053252 -0.272769 0.5 0.052496 -0.271208 0.51 0.051758 -0.269665 0.52 0.051036 -0.268140 0.53 0.050332 -0.266632 0.54 0.049643 -0.265141 0.55 0.048969 -0.263667 0.56 0.048311 -0.262209 0.57 0.047667 -0.260768 0.58 0.047037 -0.259343 0.59 0.046420 -0.257933 0.6 0.045817 -0.256539 0.61 0.045227 -0.255160 0.62 0.044649 -0.253797 0.63 0.044083 -0.252448 0.64 0.043529 -0.251114 0.65 0.042986 -0.249794 0.66 0.042454 -0.248489 0.67 0.041933 -0.247197 0.68 0.041422 -0.245919 0.69 0.040922 -0.244655 0.7 0.040431 -0.243404 0.71 0.039950 -0.242166 0.72 0.039479 -0.240942 0.73 0.039016 -0.239729 0.74 0.038562 -0.238530 0.75 0.038117 -0.237343 0.76 0.037680 -0.236168 0.77 0.037251 -0.235005 0.78 0.036830 -0.233854 0.79 0.036417 -0.232714 0.8 0.036011 -0.231586 0.81 0.035613 -0.230469 0.82 0.035222 -0.229364 0.83 0.034838 -0.228269 0.84 0.034460 -0.227185 0.85 0.034089 -0.226112 0.86 0.033725 -0.225049 0.87 0.033367 -0.223997 0.88 0.033015 -0.222954 0.89 0.032669 -0.221922 0.9 0.032329 -0.220900 0.91 0.031994 -0.219887 0.92 0.031665 -0.218884 0.93 0.031342 -0.217891 0.94 0.031024 -0.216906 0.95 0.030711 -0.215931 0.96 0.030403 -0.214965 0.97 0.030100 -0.214009 0.98 0.029802 -0.213060 0.99 0.029509 -0.212121 1 0.029220 -0.211190 1.01 0.028936 -0.210268 1.02 0.028656 -0.209353 1.03 0.028381 -0.208447 1.04 0.028109 -0.207550 1.05 0.027842 -0.206660 1.06 0.027580 -0.205778 1.07 0.027321 -0.204904 1.08 0.027065 -0.204038 1.09 0.026814 -0.203179 1.1 0.026566 -0.202327 1.11 0.026323 -0.201483 1.12 0.026082 -0.200647 1.13 0.025845 -0.199817 1.14 0.025612 -0.198995 1.15 0.025382 -0.198179 1.16 0.025155 -0.197371 1.17 0.024931 -0.196569 1.18 0.024711 -0.195774 1.19 0.024494 -0.194986 1.2 0.024279 -0.194204 1.21 0.024068 -0.193428 1.22 0.023860 -0.192659 1.23 0.023654 -0.191897 1.24 0.023451 -0.191140 1.25 0.023251 -0.190390 1.26 0.023054 -0.189646 1.27 0.022859 -0.188908 1.28 0.022667 -0.188176 1.29 0.022478 -0.187449 1.3 0.022291 -0.186729 1.31 0.022106 -0.186014 1.32 0.021924 -0.185305 1.33 0.021745 -0.184601 1.34 0.021567 -0.183903 1.35 0.021392 -0.183210 1.36 0.021219 -0.182523 1.37 0.021049 -0.181841 1.38 0.020880 -0.181164 1.39 0.020714 -0.180492 1.4 0.020549 -0.179826 1.41 0.020387 -0.179164 1.42 0.020227 -0.178508 1.43 0.020069 -0.177856 1.44 0.019912 -0.177210 1.45 0.019758 -0.176568 1.46 0.019605 -0.175931 1.47 0.019455 -0.175299 1.48 0.019306 -0.174671 1.49 0.019159 -0.174048 1.5 0.019013 -0.173430 1.51 0.018870 -0.172816 1.52 0.018728 -0.172207 1.53 0.018588 -0.171602 1.54 0.018449 -0.171001 1.55 0.018312 -0.170405 1.56 0.018177 -0.169813 1.57 0.018043 -0.169225 1.58 0.017911 -0.168641 1.59 0.017780 -0.168062 1.6 0.017651 -0.167486 1.61 0.017523 -0.166915 1.62 0.017397 -0.166348 1.63 0.017272 -0.165784 1.64 0.017148 -0.165225 1.65 0.017026 -0.164669 1.66 0.016906 -0.164117 1.67 0.016786 -0.163569 1.68 0.016668 -0.163025 1.69 0.016551 -0.162484 1.7 0.016436 -0.161948 1.71 0.016321 -0.161414 1.72 0.016208 -0.160885 1.73 0.016096 -0.160359 1.74 0.015986 -0.159836 1.75 0.015876 -0.159317 1.76 0.015768 -0.158801 1.77 0.015661 -0.158289 1.78 0.015555 -0.157780 1.79 0.015450 -0.157275 1.8 0.015346 -0.156773 1.81 0.015244 -0.156274 1.82 0.015142 -0.155778 1.83 0.015041 -0.155286 1.84 0.014942 -0.154796 1.85 0.014843 -0.154310 1.86 0.014746 -0.153827 1.87 0.014649 -0.153347 1.88 0.014554 -0.152870 1.89 0.014459 -0.152397 1.9 0.014366 -0.151926 1.91 0.014273 -0.151458 1.92 0.014181 -0.150993 1.93 0.014090 -0.150531 1.94 0.014000 -0.150072 1.95 0.013911 -0.149616 1.96 0.013823 -0.149162 1.97 0.013736 -0.148712 1.98 0.013649 -0.148264 1.99 0.013564 -0.147819 2 0.013479 -0.147376 2.01 0.013395 -0.146937 2.02 0.013312 -0.146500 2.03 0.013229 -0.146066 2.04 0.013148 -0.145634 2.05 0.013067 -0.145205 2.06 0.012987 -0.144778 2.07 0.012908 -0.144354 2.08 0.012829 -0.143933 2.09 0.012751 -0.143514 2.1 0.012674 -0.143097 2.11 0.012598 -0.142683 2.12 0.012522 -0.142272 2.13 0.012448 -0.141863 2.14 0.012373 -0.141456 2.15 0.012300 -0.141052 2.16 0.012227 -0.140650 2.17 0.012155 -0.140250 2.18 0.012083 -0.139853 2.19 0.012012 -0.139457 2.2 0.011942 -0.139065 2.21 0.011872 -0.138674 2.22 0.011803 -0.138286 2.23 0.011735 -0.137900 2.24 0.011667 -0.137516 2.25 0.011600 -0.137134 2.26 0.011533 -0.136754 2.27 0.011467 -0.136377 2.28 0.011402 -0.136002 2.29 0.011337 -0.135629 2.3 0.011273 -0.135257 2.31 0.011209 -0.134888 2.32 0.011146 -0.134521 2.33 0.011083 -0.134156 2.34 0.011021 -0.133793 2.35 0.010960 -0.133432 2.36 0.010899 -0.133073 2.37 0.010838 -0.132716 2.38 0.010778 -0.132361 2.39 0.010719 -0.132008 2.4 0.010660 -0.131657 2.41 0.010601 -0.131307 2.42 0.010543 -0.130960 2.43 0.010486 -0.130614 2.44 0.010429 -0.130270 2.45 0.010372 -0.129928 2.46 0.010316 -0.129588 2.47 0.010261 -0.129250 2.48 0.010206 -0.128914 2.49 0.010151 -0.128579 2.5 0.010097 -0.128246 2.51 0.010043 -0.127915 2.52 0.009990 -0.127585 2.53 0.009937 -0.127257 2.54 0.009884 -0.126931 2.55 0.009832 -0.126607 2.56 0.009780 -0.126284 2.57 0.009729 -0.125963 2.58 0.009678 -0.125644 2.59 0.009628 -0.125326 2.6 0.009578 -0.125010 2.61 0.009528 -0.124696 2.62 0.009479 -0.124383 2.63 0.009430 -0.124072 2.64 0.009382 -0.123762 2.65 0.009334 -0.123454 2.66 0.009286 -0.123147 2.67 0.009239 -0.122842 2.68 0.009192 -0.122539 2.69 0.009145 -0.122237 2.7 0.009099 -0.121936 2.71 0.009053 -0.121637 2.72 0.009008 -0.121340 2.73 0.008963 -0.121044 2.74 0.008918 -0.120749 2.75 0.008873 -0.120456 2.76 0.008829 -0.120164 2.77 0.008785 -0.119874 2.78 0.008742 -0.119585 2.79 0.008699 -0.119298 2.8 0.008656 -0.119012 2.81 0.008614 -0.118727 2.82 0.008571 -0.118444 2.83 0.008530 -0.118162 2.84 0.008488 -0.117882 2.85 0.008447 -0.117603 2.86 0.008406 -0.117325 2.87 0.008365 -0.117048 2.88 0.008325 -0.116773 2.89 0.008285 -0.116499 2.9 0.008245 -0.116227 2.91 0.008206 -0.115955 2.92 0.008167 -0.115685 2.93 0.008128 -0.115417 2.94 0.008089 -0.115149 2.95 0.008051 -0.114883 2.96 0.008013 -0.114618 2.97 0.007975 -0.114354 2.98 0.007938 -0.114092 2.99 0.007900 -0.113830 3 0.007863 -0.113570 3.01 0.007827 -0.113312 3.02 0.007790 -0.113054 3.03 0.007754 -0.112797 3.04 0.007718 -0.112542 3.05 0.007683 -0.112288 3.06 0.007647 -0.112035 3.07 0.007612 -0.111783 3.08 0.007577 -0.111532 3.09 0.007542 -0.111283 3.1 0.007508 -0.111034 3.11 0.007474 -0.110787 3.12 0.007440 -0.110541 3.13 0.007406 -0.110296 3.14 0.007373 -0.110052 3.15 0.007339 -0.109809 3.16 0.007306 -0.109567 3.17 0.007274 -0.109326 3.18 0.007241 -0.109087 3.19 0.007209 -0.108848 3.2 0.007176 -0.108610 3.21 0.007145 -0.108374 3.22 0.007113 -0.108138 3.23 0.007081 -0.107904 3.24 0.007050 -0.107671 3.25 0.007019 -0.107438 3.26 0.006988 -0.107207 3.27 0.006958 -0.106976 3.28 0.006927 -0.106747 3.29 0.006897 -0.106519 3.3 0.006867 -0.106291 3.31 0.006837 -0.106065 3.32 0.006807 -0.105839 3.33 0.006778 -0.105615 3.34 0.006749 -0.105391 3.35 0.006720 -0.105169 3.36 0.006691 -0.104947 3.37 0.006662 -0.104727 3.38 0.006633 -0.104507 3.39 0.006605 -0.104288 3.4 0.006577 -0.104070 3.41 0.006549 -0.103853 3.42 0.006521 -0.103637 3.43 0.006494 -0.103422 3.44 0.006466 -0.103208 3.45 0.006439 -0.102994 3.46 0.006412 -0.102782 3.47 0.006385 -0.102570 3.48 0.006358 -0.102360 3.49 0.006332 -0.102150 3.5 0.006306 -0.101941 3.51 0.006279 -0.101733 3.52 0.006253 -0.101526 3.53 0.006227 -0.101319 3.54 0.006202 -0.101114 3.55 0.006176 -0.100909 3.56 0.006151 -0.100705 3.57 0.006125 -0.100502 3.58 0.006100 -0.100300 3.59 0.006075 -0.100098 3.6 0.006051 -0.099898 3.61 0.006026 -0.099698 3.62 0.006002 -0.099499 3.63 0.005977 -0.099301 3.64 0.005953 -0.099104 3.65 0.005929 -0.098907 3.66 0.005905 -0.098711 3.67 0.005882 -0.098516 3.68 0.005858 -0.098322 3.69 0.005834 -0.098129 3.7 0.005811 -0.097936 3.71 0.005788 -0.097744 3.72 0.005765 -0.097553 3.73 0.005742 -0.097362 3.74 0.005719 -0.097173 3.75 0.005697 -0.096984 3.76 0.005674 -0.096796 3.77 0.005652 -0.096608 3.78 0.005630 -0.096421 3.79 0.005608 -0.096235 3.8 0.005586 -0.096050 3.81 0.005564 -0.095866 3.82 0.005542 -0.095682 3.83 0.005521 -0.095499 3.84 0.005499 -0.095316 3.85 0.005478 -0.095135 3.86 0.005457 -0.094954 3.87 0.005436 -0.094773 3.88 0.005415 -0.094594 3.89 0.005394 -0.094415 3.9 0.005373 -0.094236 3.91 0.005353 -0.094059 3.92 0.005332 -0.093882 3.93 0.005312 -0.093706 3.94 0.005292 -0.093530 3.95 0.005272 -0.093355 3.96 0.005252 -0.093181 3.97 0.005232 -0.093007 3.98 0.005212 -0.092834 3.99 0.005193 -0.092662 4 0.005173 -0.092490 4.01 0.005154 -0.092319 4.02 0.005134 -0.092149 4.03 0.005115 -0.091979 4.04 0.005096 -0.091810 4.05 0.005077 -0.091642 4.06 0.005058 -0.091474 4.07 0.005040 -0.091307 4.08 0.005021 -0.091140 4.09 0.005002 -0.090974 4.1 0.004984 -0.090808 4.11 0.004966 -0.090644 4.12 0.004947 -0.090479 4.13 0.004929 -0.090316 4.14 0.004911 -0.090153 4.15 0.004893 -0.089990 4.16 0.004875 -0.089829 4.17 0.004858 -0.089667 4.18 0.004840 -0.089507 4.19 0.004822 -0.089347 4.2 0.004805 -0.089187 4.21 0.004788 -0.089028 4.22 0.004770 -0.088870 4.23 0.004753 -0.088712 4.24 0.004736 -0.088555 4.25 0.004719 -0.088398 4.26 0.004702 -0.088242 4.27 0.004685 -0.088086 4.28 0.004669 -0.087931 4.29 0.004652 -0.087777 4.3 0.004636 -0.087623 4.31 0.004619 -0.087470 4.32 0.004603 -0.087317 4.33 0.004587 -0.087164 4.34 0.004570 -0.087013 4.35 0.004554 -0.086861 4.36 0.004538 -0.086711 4.37 0.004522 -0.086561 4.38 0.004507 -0.086411 4.39 0.004491 -0.086262 4.4 0.004475 -0.086113 4.41 0.004460 -0.085965 4.42 0.004444 -0.085817 4.43 0.004429 -0.085670 4.44 0.004413 -0.085524 4.45 0.004398 -0.085378 4.46 0.004383 -0.085232 4.47 0.004368 -0.085087 4.48 0.004353 -0.084943 4.49 0.004338 -0.084798 4.5 0.004323 -0.084655 4.51 0.004308 -0.084512 4.52 0.004293 -0.084369 4.53 0.004279 -0.084227 4.54 0.004264 -0.084085 4.55 0.004250 -0.083944 4.56 0.004235 -0.083804 4.57 0.004221 -0.083663 4.58 0.004207 -0.083524 4.59 0.004193 -0.083384 4.6 0.004178 -0.083245 4.61 0.004164 -0.083107 4.62 0.004150 -0.082969 4.63 0.004137 -0.082832 4.64 0.004123 -0.082695 4.65 0.004109 -0.082558 4.66 0.004095 -0.082422 4.67 0.004082 -0.082287 4.68 0.004068 -0.082152 4.69 0.004055 -0.082017 4.7 0.004041 -0.081883 4.71 0.004028 -0.081749 4.72 0.004014 -0.081615 4.73 0.004001 -0.081482 4.74 0.003988 -0.081350 4.75 0.003975 -0.081218 4.76 0.003962 -0.081086 4.77 0.003949 -0.080955 4.78 0.003936 -0.080824 4.79 0.003923 -0.080694 4.8 0.003911 -0.080564 4.81 0.003898 -0.080434 4.82 0.003885 -0.080305 4.83 0.003873 -0.080176 4.84 0.003860 -0.080048 4.85 0.003848 -0.079920 4.86 0.003835 -0.079793 4.87 0.003823 -0.079666 4.88 0.003811 -0.079539 4.89 0.003798 -0.079413 4.9 0.003786 -0.079287 4.91 0.003774 -0.079162 4.92 0.003762 -0.079037 4.93 0.003750 -0.078912 4.94 0.003738 -0.078788 4.95 0.003726 -0.078664 4.96 0.003714 -0.078540 4.97 0.003703 -0.078417 4.98 0.003691 -0.078295 4.99 0.003679 -0.078172 5 0.003668 -0.078051 5.01 0.003656 -0.077929 5.02 0.003645 -0.077808 5.03 0.003633 -0.077687 5.04 0.003622 -0.077567 5.05 0.003611 -0.077447 5.06 0.003599 -0.077327 5.07 0.003588 -0.077208 5.08 0.003577 -0.077089 5.09 0.003566 -0.076970 5.1 0.003555 -0.076852 5.11 0.003544 -0.076734 5.12 0.003533 -0.076617 5.13 0.003522 -0.076500 5.14 0.003511 -0.076383 5.15 0.003500 -0.076267 5.16 0.003490 -0.076151 5.17 0.003479 -0.076035 5.18 0.003468 -0.075920 5.19 0.003458 -0.075805 5.2 0.003447 -0.075690 5.21 0.003437 -0.075576 5.22 0.003426 -0.075462 5.23 0.003416 -0.075348 5.24 0.003405 -0.075235 5.25 0.003395 -0.075122 5.26 0.003385 -0.075010 5.27 0.003375 -0.074898 5.28 0.003364 -0.074786 5.29 0.003354 -0.074674 5.3 0.003344 -0.074563 5.31 0.003334 -0.074452 5.32 0.003324 -0.074342 5.33 0.003314 -0.074231 5.34 0.003304 -0.074121 5.35 0.003294 -0.074012 5.36 0.003285 -0.073903 5.37 0.003275 -0.073794 5.38 0.003265 -0.073685 5.39 0.003255 -0.073577 5.4 0.003246 -0.073469 5.41 0.003236 -0.073361 5.42 0.003227 -0.073254 5.43 0.003217 -0.073147 5.44 0.003208 -0.073040 5.45 0.003198 -0.072934 5.46 0.003189 -0.072828 5.47 0.003180 -0.072722 5.48 0.003170 -0.072617 5.49 0.003161 -0.072512 5.5 0.003152 -0.072407 5.51 0.003143 -0.072302 5.52 0.003134 -0.072198 5.53 0.003124 -0.072094 5.54 0.003115 -0.071991 5.55 0.003106 -0.071887 5.56 0.003097 -0.071784 5.57 0.003088 -0.071682 5.58 0.003080 -0.071579 5.59 0.003071 -0.071477 5.6 0.003062 -0.071375 5.61 0.003053 -0.071274 5.62 0.003044 -0.071172 5.63 0.003036 -0.071071 5.64 0.003027 -0.070971 5.65 0.003018 -0.070870 5.66 0.003010 -0.070770 5.67 0.003001 -0.070670 5.68 0.002993 -0.070571 5.69 0.002984 -0.070472 5.7 0.002976 -0.070373 5.71 0.002967 -0.070274 5.72 0.002959 -0.070175 5.73 0.002951 -0.070077 5.74 0.002942 -0.069979 5.75 0.002934 -0.069882 5.76 0.002926 -0.069784 5.77 0.002918 -0.069687 5.78 0.002909 -0.069591 5.79 0.002901 -0.069494 5.8 0.002893 -0.069398 5.81 0.002885 -0.069302 5.82 0.002877 -0.069206 5.83 0.002869 -0.069111 5.84 0.002861 -0.069016 5.85 0.002853 -0.068921 5.86 0.002845 -0.068826 5.87 0.002837 -0.068732 5.88 0.002830 -0.068637 5.89 0.002822 -0.068544 5.9 0.002814 -0.068450 5.91 0.002806 -0.068357 5.92 0.002799 -0.068263 5.93 0.002791 -0.068171 5.94 0.002783 -0.068078 5.95 0.002776 -0.067986 5.96 0.002768 -0.067894 5.97 0.002761 -0.067802 5.98 0.002753 -0.067710 5.99 0.002746 -0.067619 6 0.002738 -0.067528 6.01 0.002731 -0.067437 6.02 0.002723 -0.067346 6.03 0.002716 -0.067256 6.04 0.002709 -0.067166 6.05 0.002701 -0.067076 6.06 0.002694 -0.066986 6.07 0.002687 -0.066897 6.08 0.002680 -0.066808 6.09 0.002672 -0.066719 6.1 0.002665 -0.066630 6.11 0.002658 -0.066542 6.12 0.002651 -0.066453 6.13 0.002644 -0.066365 6.14 0.002637 -0.066278 6.15 0.002630 -0.066190 6.16 0.002623 -0.066103 6.17 0.002616 -0.066016 6.18 0.002609 -0.065929 6.19 0.002602 -0.065842 6.2 0.002595 -0.065756 6.21 0.002588 -0.065670 6.22 0.002582 -0.065584 6.23 0.002575 -0.065498 6.24 0.002568 -0.065413 6.25 0.002561 -0.065328 6.26 0.002555 -0.065242 6.27 0.002548 -0.065158 6.28 0.002541 -0.065073 6.29 0.002535 -0.064989 6.3 0.002528 -0.064905 6.31 0.002521 -0.064821 6.32 0.002515 -0.064737 6.33 0.002508 -0.064654 6.34 0.002502 -0.064570 6.35 0.002495 -0.064487 6.36 0.002489 -0.064404 6.37 0.002482 -0.064322 6.38 0.002476 -0.064239 6.39 0.002470 -0.064157 6.4 0.002463 -0.064075 6.41 0.002457 -0.063993 6.42 0.002451 -0.063912 6.43 0.002444 -0.063830 6.44 0.002438 -0.063749 6.45 0.002432 -0.063668 6.46 0.002426 -0.063588 6.47 0.002420 -0.063507 6.48 0.002413 -0.063427 6.49 0.002407 -0.063347 6.5 0.002401 -0.063267 6.51 0.002395 -0.063187 6.52 0.002389 -0.063108 6.53 0.002383 -0.063028 6.54 0.002377 -0.062949 6.55 0.002371 -0.062870 6.56 0.002365 -0.062791 6.57 0.002359 -0.062713 6.58 0.002353 -0.062635 6.59 0.002347 -0.062556 6.6 0.002341 -0.062479 6.61 0.002335 -0.062401 6.62 0.002330 -0.062323 6.63 0.002324 -0.062246 6.64 0.002318 -0.062169 6.65 0.002312 -0.062092 6.66 0.002306 -0.062015 6.67 0.002301 -0.061938 6.68 0.002295 -0.061862 6.69 0.002289 -0.061786 6.7 0.002284 -0.061710 6.71 0.002278 -0.061634 6.72 0.002272 -0.061558 6.73 0.002267 -0.061483 6.74 0.002261 -0.061408 6.75 0.002256 -0.061332 6.76 0.002250 -0.061258 6.77 0.002245 -0.061183 6.78 0.002239 -0.061108 6.79 0.002234 -0.061034 6.8 0.002228 -0.060960 6.81 0.002223 -0.060886 6.82 0.002217 -0.060812 6.83 0.002212 -0.060738 6.84 0.002206 -0.060665 6.85 0.002201 -0.060592 6.86 0.002196 -0.060518 6.87 0.002190 -0.060446 6.88 0.002185 -0.060373 6.89 0.002180 -0.060300 6.9 0.002175 -0.060228 6.91 0.002169 -0.060156 6.92 0.002164 -0.060084 6.93 0.002159 -0.060012 6.94 0.002154 -0.059940 6.95 0.002149 -0.059868 6.96 0.002143 -0.059797 6.97 0.002138 -0.059726 6.98 0.002133 -0.059655 6.99 0.002128 -0.059584 7 0.002123 -0.059513 7.01 0.002118 -0.059443 7.02 0.002113 -0.059372 7.03 0.002108 -0.059302 7.04 0.002103 -0.059232 7.05 0.002098 -0.059162 7.06 0.002093 -0.059093 7.07 0.002088 -0.059023 7.08 0.002083 -0.058954 7.09 0.002078 -0.058885 7.1 0.002073 -0.058816 7.11 0.002068 -0.058747 7.12 0.002063 -0.058678 7.13 0.002059 -0.058610 7.14 0.002054 -0.058541 7.15 0.002049 -0.058473 7.16 0.002044 -0.058405 7.17 0.002039 -0.058337 7.18 0.002035 -0.058269 7.19 0.002030 -0.058202 7.2 0.002025 -0.058134 7.21 0.002020 -0.058067 7.22 0.002016 -0.058000 7.23 0.002011 -0.057933 7.24 0.002006 -0.057866 7.25 0.002002 -0.057799 7.26 0.001997 -0.057733 7.27 0.001993 -0.057666 7.28 0.001988 -0.057600 7.29 0.001983 -0.057534 7.3 0.001979 -0.057468 7.31 0.001974 -0.057403 7.32 0.001970 -0.057337 7.33 0.001965 -0.057272 7.34 0.001961 -0.057206 7.35 0.001956 -0.057141 7.36 0.001952 -0.057076 7.37 0.001947 -0.057011 7.38 0.001943 -0.056947 7.39 0.001938 -0.056882 7.4 0.001934 -0.056818 7.41 0.001930 -0.056753 7.42 0.001925 -0.056689 7.43 0.001921 -0.056625 7.44 0.001916 -0.056561 7.45 0.001912 -0.056498 7.46 0.001908 -0.056434 7.47 0.001904 -0.056371 7.48 0.001899 -0.056308 7.49 0.001895 -0.056245 7.5 0.001891 -0.056182 7.51 0.001886 -0.056119 7.52 0.001882 -0.056056 7.53 0.001878 -0.055993 7.54 0.001874 -0.055931 7.55 0.001870 -0.055869 7.56 0.001865 -0.055807 7.57 0.001861 -0.055745 7.58 0.001857 -0.055683 7.59 0.001853 -0.055621 7.6 0.001849 -0.055560 7.61 0.001845 -0.055498 7.62 0.001841 -0.055437 7.63 0.001837 -0.055376 7.64 0.001832 -0.055315 7.65 0.001828 -0.055254 7.66 0.001824 -0.055193 7.67 0.001820 -0.055132 7.68 0.001816 -0.055072 7.69 0.001812 -0.055012 7.7 0.001808 -0.054951 7.71 0.001804 -0.054891 7.72 0.001800 -0.054831 7.73 0.001796 -0.054771 7.74 0.001793 -0.054712 7.75 0.001789 -0.054652 7.76 0.001785 -0.054593 7.77 0.001781 -0.054533 7.78 0.001777 -0.054474 7.79 0.001773 -0.054415 7.8 0.001769 -0.054356 7.81 0.001765 -0.054297 7.82 0.001762 -0.054239 7.83 0.001758 -0.054180 7.84 0.001754 -0.054122 7.85 0.001750 -0.054063 7.86 0.001746 -0.054005 7.87 0.001743 -0.053947 7.88 0.001739 -0.053889 7.89 0.001735 -0.053832 7.9 0.001731 -0.053774 7.91 0.001728 -0.053716 7.92 0.001724 -0.053659 7.93 0.001720 -0.053602 7.94 0.001716 -0.053544 7.95 0.001713 -0.053487 7.96 0.001709 -0.053430 7.97 0.001705 -0.053374 7.98 0.001702 -0.053317 7.99 0.001698 -0.053260 8 0.001695 -0.053204 8.01 0.001691 -0.053148 8.02 0.001687 -0.053091 8.03 0.001684 -0.053035 8.04 0.001680 -0.052979 8.05 0.001677 -0.052923 8.06 0.001673 -0.052868 8.07 0.001670 -0.052812 8.08 0.001666 -0.052757 8.09 0.001663 -0.052701 8.1 0.001659 -0.052646 8.11 0.001656 -0.052591 8.12 0.001652 -0.052536 8.13 0.001649 -0.052481 8.14 0.001645 -0.052426 8.15 0.001642 -0.052371 8.16 0.001638 -0.052317 8.17 0.001635 -0.052262 8.18 0.001631 -0.052208 8.19 0.001628 -0.052154 8.2 0.001625 -0.052100 8.21 0.001621 -0.052046 8.22 0.001618 -0.051992 8.23 0.001615 -0.051938 8.24 0.001611 -0.051884 8.25 0.001608 -0.051831 8.26 0.001605 -0.051777 8.27 0.001601 -0.051724 8.28 0.001598 -0.051671 8.29 0.001595 -0.051618 8.3 0.001591 -0.051565 8.31 0.001588 -0.051512 8.32 0.001585 -0.051459 8.33 0.001582 -0.051406 8.34 0.001578 -0.051354 8.35 0.001575 -0.051301 8.36 0.001572 -0.051249 8.37 0.001569 -0.051197 8.38 0.001565 -0.051144 8.39 0.001562 -0.051092 8.4 0.001559 -0.051040 8.41 0.001556 -0.050989 8.42 0.001553 -0.050937 8.43 0.001549 -0.050885 8.44 0.001546 -0.050834 8.45 0.001543 -0.050782 8.46 0.001540 -0.050731 8.47 0.001537 -0.050680 8.48 0.001534 -0.050629 8.49 0.001531 -0.050578 8.5 0.001528 -0.050527 8.51 0.001525 -0.050476 8.52 0.001521 -0.050425 8.53 0.001518 -0.050375 8.54 0.001515 -0.050324 8.55 0.001512 -0.050274 8.56 0.001509 -0.050224 8.57 0.001506 -0.050173 8.58 0.001503 -0.050123 8.59 0.001500 -0.050073 8.6 0.001497 -0.050023 8.61 0.001494 -0.049974 8.62 0.001491 -0.049924 8.63 0.001488 -0.049874 8.64 0.001485 -0.049825 8.65 0.001482 -0.049775 8.66 0.001479 -0.049726 8.67 0.001476 -0.049677 8.68 0.001474 -0.049628 8.69 0.001471 -0.049579 8.7 0.001468 -0.049530 8.71 0.001465 -0.049481 8.72 0.001462 -0.049432 8.73 0.001459 -0.049384 8.74 0.001456 -0.049335 8.75 0.001453 -0.049287 8.76 0.001450 -0.049239 8.77 0.001448 -0.049190 8.78 0.001445 -0.049142 8.79 0.001442 -0.049094 8.8 0.001439 -0.049046 8.81 0.001436 -0.048998 8.82 0.001433 -0.048951 8.83 0.001431 -0.048903 8.84 0.001428 -0.048855 8.85 0.001425 -0.048808 8.86 0.001422 -0.048761 8.87 0.001419 -0.048713 8.88 0.001417 -0.048666 8.89 0.001414 -0.048619 8.9 0.001411 -0.048572 8.91 0.001408 -0.048525 8.92 0.001406 -0.048478 8.93 0.001403 -0.048431 8.94 0.001400 -0.048385 8.95 0.001398 -0.048338 8.96 0.001395 -0.048292 8.97 0.001392 -0.048245 8.98 0.001390 -0.048199 8.99 0.001387 -0.048153 9 0.001384 -0.048107 9.01 0.001382 -0.048061 9.02 0.001379 -0.048015 9.03 0.001376 -0.047969 9.04 0.001374 -0.047923 9.05 0.001371 -0.047877 9.06 0.001368 -0.047832 9.07 0.001366 -0.047786 9.08 0.001363 -0.047741 9.09 0.001361 -0.047695 9.1 0.001358 -0.047650 9.11 0.001355 -0.047605 9.12 0.001353 -0.047560 9.13 0.001350 -0.047515 9.14 0.001348 -0.047470 9.15 0.001345 -0.047425 9.16 0.001343 -0.047381 9.17 0.001340 -0.047336 9.18 0.001337 -0.047291 9.19 0.001335 -0.047247 9.2 0.001332 -0.047202 9.21 0.001330 -0.047158 9.22 0.001327 -0.047114 9.23 0.001325 -0.047070 9.24 0.001322 -0.047026 9.25 0.001320 -0.046982 9.26 0.001317 -0.046938 9.27 0.001315 -0.046894 9.28 0.001313 -0.046850 9.29 0.001310 -0.046807 9.3 0.001308 -0.046763 9.31 0.001305 -0.046719 9.32 0.001303 -0.046676 9.33 0.001300 -0.046633 9.34 0.001298 -0.046589 9.35 0.001296 -0.046546 9.36 0.001293 -0.046503 9.37 0.001291 -0.046460 9.38 0.001288 -0.046417 9.39 0.001286 -0.046374 9.4 0.001284 -0.046332 9.41 0.001281 -0.046289 9.42 0.001279 -0.046246 9.43 0.001276 -0.046204 9.44 0.001274 -0.046161 9.45 0.001272 -0.046119 9.46 0.001269 -0.046077 9.47 0.001267 -0.046034 9.48 0.001265 -0.045992 9.49 0.001262 -0.045950 9.5 0.001260 -0.045908 9.51 0.001258 -0.045866 9.52 0.001255 -0.045824 9.53 0.001253 -0.045783 9.54 0.001251 -0.045741 9.55 0.001249 -0.045699 9.56 0.001246 -0.045658 9.57 0.001244 -0.045616 9.58 0.001242 -0.045575 9.59 0.001240 -0.045534 9.6 0.001237 -0.045492 9.61 0.001235 -0.045451 9.62 0.001233 -0.045410 9.63 0.001231 -0.045369 9.64 0.001228 -0.045328 9.65 0.001226 -0.045287 9.66 0.001224 -0.045247 9.67 0.001222 -0.045206 9.68 0.001219 -0.045165 9.69 0.001217 -0.045125 9.7 0.001215 -0.045084 9.71 0.001213 -0.045044 9.72 0.001211 -0.045003 9.73 0.001209 -0.044963 9.74 0.001206 -0.044923 9.75 0.001204 -0.044883 9.76 0.001202 -0.044843 9.77 0.001200 -0.044803 9.78 0.001198 -0.044763 9.79 0.001196 -0.044723 9.8 0.001194 -0.044683 9.81 0.001191 -0.044643 9.82 0.001189 -0.044604 9.83 0.001187 -0.044564 9.84 0.001185 -0.044525 9.85 0.001183 -0.044485 9.86 0.001181 -0.044446 9.87 0.001179 -0.044407 9.88 0.001177 -0.044367 9.89 0.001175 -0.044328 9.9 0.001172 -0.044289 9.91 0.001170 -0.044250 9.92 0.001168 -0.044211 9.93 0.001166 -0.044172 9.94 0.001164 -0.044134 9.95 0.001162 -0.044095 9.96 0.001160 -0.044056 9.97 0.001158 -0.044018 9.98 0.001156 -0.043979 9.99 0.001154 -0.043941 dmrgpp-6.02/TestSuite/oracles/data3007.cf000066400000000000000000001410031414604301300200430ustar00rootroot00000000000000-10 0.001152 0.043902 -9.99 0.001154 0.043941 -9.98 0.001156 0.043979 -9.97 0.001158 0.044018 -9.96 0.001160 0.044056 -9.95 0.001162 0.044095 -9.94 0.001164 0.044134 -9.93 0.001166 0.044172 -9.92 0.001168 0.044211 -9.91 0.001170 0.044250 -9.9 0.001172 0.044289 -9.89 0.001175 0.044328 -9.88 0.001177 0.044367 -9.87 0.001179 0.044407 -9.86 0.001181 0.044446 -9.85 0.001183 0.044485 -9.84 0.001185 0.044525 -9.83 0.001187 0.044564 -9.82 0.001189 0.044604 -9.81 0.001191 0.044643 -9.8 0.001194 0.044683 -9.79 0.001196 0.044723 -9.78 0.001198 0.044763 -9.77 0.001200 0.044803 -9.76 0.001202 0.044843 -9.75 0.001204 0.044883 -9.74 0.001206 0.044923 -9.73 0.001209 0.044963 -9.72 0.001211 0.045003 -9.71 0.001213 0.045044 -9.7 0.001215 0.045084 -9.69 0.001217 0.045125 -9.68 0.001219 0.045165 -9.67 0.001222 0.045206 -9.66 0.001224 0.045247 -9.65 0.001226 0.045287 -9.64 0.001228 0.045328 -9.63 0.001231 0.045369 -9.62 0.001233 0.045410 -9.61 0.001235 0.045451 -9.6 0.001237 0.045492 -9.59 0.001240 0.045534 -9.58 0.001242 0.045575 -9.57 0.001244 0.045616 -9.56 0.001246 0.045658 -9.55 0.001249 0.045699 -9.54 0.001251 0.045741 -9.53 0.001253 0.045783 -9.52 0.001255 0.045824 -9.51 0.001258 0.045866 -9.5 0.001260 0.045908 -9.49 0.001262 0.045950 -9.48 0.001265 0.045992 -9.47 0.001267 0.046034 -9.46 0.001269 0.046077 -9.45 0.001272 0.046119 -9.44 0.001274 0.046161 -9.43 0.001276 0.046204 -9.42 0.001279 0.046246 -9.41 0.001281 0.046289 -9.4 0.001284 0.046332 -9.39 0.001286 0.046374 -9.38 0.001288 0.046417 -9.37 0.001291 0.046460 -9.36 0.001293 0.046503 -9.35 0.001296 0.046546 -9.34 0.001298 0.046590 -9.33 0.001300 0.046633 -9.32 0.001303 0.046676 -9.31 0.001305 0.046720 -9.3 0.001308 0.046763 -9.29 0.001310 0.046807 -9.28 0.001313 0.046850 -9.27 0.001315 0.046894 -9.26 0.001317 0.046938 -9.25 0.001320 0.046982 -9.24 0.001322 0.047026 -9.23 0.001325 0.047070 -9.22 0.001327 0.047114 -9.21 0.001330 0.047158 -9.2 0.001332 0.047202 -9.19 0.001335 0.047247 -9.18 0.001337 0.047291 -9.17 0.001340 0.047336 -9.16 0.001343 0.047381 -9.15 0.001345 0.047425 -9.14 0.001348 0.047470 -9.13 0.001350 0.047515 -9.12 0.001353 0.047560 -9.11 0.001355 0.047605 -9.1 0.001358 0.047650 -9.09 0.001361 0.047696 -9.08 0.001363 0.047741 -9.07 0.001366 0.047786 -9.06 0.001368 0.047832 -9.05 0.001371 0.047877 -9.04 0.001374 0.047923 -9.03 0.001376 0.047969 -9.02 0.001379 0.048015 -9.01 0.001382 0.048061 -9 0.001384 0.048107 -8.99 0.001387 0.048153 -8.98 0.001390 0.048199 -8.97 0.001392 0.048245 -8.96 0.001395 0.048292 -8.95 0.001398 0.048338 -8.94 0.001400 0.048385 -8.93 0.001403 0.048431 -8.92 0.001406 0.048478 -8.91 0.001408 0.048525 -8.9 0.001411 0.048572 -8.89 0.001414 0.048619 -8.88 0.001417 0.048666 -8.87 0.001419 0.048713 -8.86 0.001422 0.048761 -8.85 0.001425 0.048808 -8.84 0.001428 0.048855 -8.83 0.001431 0.048903 -8.82 0.001433 0.048951 -8.81 0.001436 0.048998 -8.8 0.001439 0.049046 -8.79 0.001442 0.049094 -8.78 0.001445 0.049142 -8.77 0.001448 0.049190 -8.76 0.001450 0.049239 -8.75 0.001453 0.049287 -8.74 0.001456 0.049335 -8.73 0.001459 0.049384 -8.72 0.001462 0.049433 -8.71 0.001465 0.049481 -8.7 0.001468 0.049530 -8.69 0.001471 0.049579 -8.68 0.001474 0.049628 -8.67 0.001476 0.049677 -8.66 0.001479 0.049726 -8.65 0.001482 0.049776 -8.64 0.001485 0.049825 -8.63 0.001488 0.049874 -8.62 0.001491 0.049924 -8.61 0.001494 0.049974 -8.6 0.001497 0.050023 -8.59 0.001500 0.050073 -8.58 0.001503 0.050123 -8.57 0.001506 0.050173 -8.56 0.001509 0.050224 -8.55 0.001512 0.050274 -8.54 0.001515 0.050324 -8.53 0.001518 0.050375 -8.52 0.001521 0.050425 -8.51 0.001525 0.050476 -8.5 0.001528 0.050527 -8.49 0.001531 0.050578 -8.48 0.001534 0.050629 -8.47 0.001537 0.050680 -8.46 0.001540 0.050731 -8.45 0.001543 0.050782 -8.44 0.001546 0.050834 -8.43 0.001549 0.050885 -8.42 0.001553 0.050937 -8.41 0.001556 0.050989 -8.4 0.001559 0.051040 -8.39 0.001562 0.051092 -8.38 0.001565 0.051144 -8.37 0.001569 0.051197 -8.36 0.001572 0.051249 -8.35 0.001575 0.051301 -8.34 0.001578 0.051354 -8.33 0.001581 0.051406 -8.32 0.001585 0.051459 -8.31 0.001588 0.051512 -8.3 0.001591 0.051565 -8.29 0.001595 0.051618 -8.28 0.001598 0.051671 -8.27 0.001601 0.051724 -8.26 0.001605 0.051777 -8.25 0.001608 0.051831 -8.24 0.001611 0.051884 -8.23 0.001615 0.051938 -8.22 0.001618 0.051992 -8.21 0.001621 0.052046 -8.2 0.001625 0.052100 -8.19 0.001628 0.052154 -8.18 0.001631 0.052208 -8.17 0.001635 0.052262 -8.16 0.001638 0.052317 -8.15 0.001642 0.052371 -8.14 0.001645 0.052426 -8.13 0.001649 0.052481 -8.12 0.001652 0.052536 -8.11 0.001656 0.052591 -8.1 0.001659 0.052646 -8.09 0.001663 0.052701 -8.08 0.001666 0.052757 -8.07 0.001670 0.052812 -8.06 0.001673 0.052868 -8.05 0.001677 0.052924 -8.04 0.001680 0.052979 -8.03 0.001684 0.053035 -8.02 0.001687 0.053091 -8.01 0.001691 0.053148 -8 0.001695 0.053204 -7.99 0.001698 0.053260 -7.98 0.001702 0.053317 -7.97 0.001705 0.053374 -7.96 0.001709 0.053430 -7.95 0.001713 0.053487 -7.94 0.001716 0.053544 -7.93 0.001720 0.053602 -7.92 0.001724 0.053659 -7.91 0.001728 0.053716 -7.9 0.001731 0.053774 -7.89 0.001735 0.053832 -7.88 0.001739 0.053889 -7.87 0.001743 0.053947 -7.86 0.001746 0.054005 -7.85 0.001750 0.054063 -7.84 0.001754 0.054122 -7.83 0.001758 0.054180 -7.82 0.001762 0.054239 -7.81 0.001765 0.054297 -7.8 0.001769 0.054356 -7.79 0.001773 0.054415 -7.78 0.001777 0.054474 -7.77 0.001781 0.054533 -7.76 0.001785 0.054593 -7.75 0.001789 0.054652 -7.74 0.001793 0.054712 -7.73 0.001796 0.054771 -7.72 0.001800 0.054831 -7.71 0.001804 0.054891 -7.7 0.001808 0.054951 -7.69 0.001812 0.055012 -7.68 0.001816 0.055072 -7.67 0.001820 0.055132 -7.66 0.001824 0.055193 -7.65 0.001828 0.055254 -7.64 0.001832 0.055315 -7.63 0.001837 0.055376 -7.62 0.001841 0.055437 -7.61 0.001845 0.055498 -7.6 0.001849 0.055560 -7.59 0.001853 0.055621 -7.58 0.001857 0.055683 -7.57 0.001861 0.055745 -7.56 0.001865 0.055807 -7.55 0.001870 0.055869 -7.54 0.001874 0.055931 -7.53 0.001878 0.055994 -7.52 0.001882 0.056056 -7.51 0.001886 0.056119 -7.5 0.001891 0.056182 -7.49 0.001895 0.056245 -7.48 0.001899 0.056308 -7.47 0.001903 0.056371 -7.46 0.001908 0.056434 -7.45 0.001912 0.056498 -7.44 0.001916 0.056561 -7.43 0.001921 0.056625 -7.42 0.001925 0.056689 -7.41 0.001930 0.056753 -7.4 0.001934 0.056818 -7.39 0.001938 0.056882 -7.38 0.001943 0.056947 -7.37 0.001947 0.057011 -7.36 0.001952 0.057076 -7.35 0.001956 0.057141 -7.34 0.001961 0.057206 -7.33 0.001965 0.057272 -7.32 0.001970 0.057337 -7.31 0.001974 0.057403 -7.3 0.001979 0.057468 -7.29 0.001983 0.057534 -7.28 0.001988 0.057600 -7.27 0.001993 0.057666 -7.26 0.001997 0.057733 -7.25 0.002002 0.057799 -7.24 0.002006 0.057866 -7.23 0.002011 0.057933 -7.22 0.002016 0.058000 -7.21 0.002020 0.058067 -7.2 0.002025 0.058134 -7.19 0.002030 0.058202 -7.18 0.002035 0.058269 -7.17 0.002039 0.058337 -7.16 0.002044 0.058405 -7.15 0.002049 0.058473 -7.14 0.002054 0.058541 -7.13 0.002059 0.058610 -7.12 0.002063 0.058678 -7.11 0.002068 0.058747 -7.1 0.002073 0.058816 -7.09 0.002078 0.058885 -7.08 0.002083 0.058954 -7.07 0.002088 0.059023 -7.06 0.002093 0.059093 -7.05 0.002098 0.059162 -7.04 0.002103 0.059232 -7.03 0.002108 0.059302 -7.02 0.002113 0.059372 -7.01 0.002118 0.059443 -7 0.002123 0.059513 -6.99 0.002128 0.059584 -6.98 0.002133 0.059655 -6.97 0.002138 0.059726 -6.96 0.002143 0.059797 -6.95 0.002149 0.059868 -6.94 0.002154 0.059940 -6.93 0.002159 0.060012 -6.92 0.002164 0.060084 -6.91 0.002169 0.060156 -6.9 0.002175 0.060228 -6.89 0.002180 0.060300 -6.88 0.002185 0.060373 -6.87 0.002190 0.060446 -6.86 0.002196 0.060519 -6.85 0.002201 0.060592 -6.84 0.002206 0.060665 -6.83 0.002212 0.060738 -6.82 0.002217 0.060812 -6.81 0.002223 0.060886 -6.8 0.002228 0.060960 -6.79 0.002234 0.061034 -6.78 0.002239 0.061108 -6.77 0.002245 0.061183 -6.76 0.002250 0.061258 -6.75 0.002256 0.061332 -6.74 0.002261 0.061408 -6.73 0.002267 0.061483 -6.72 0.002272 0.061558 -6.71 0.002278 0.061634 -6.7 0.002284 0.061710 -6.69 0.002289 0.061786 -6.68 0.002295 0.061862 -6.67 0.002301 0.061938 -6.66 0.002306 0.062015 -6.65 0.002312 0.062092 -6.64 0.002318 0.062169 -6.63 0.002324 0.062246 -6.62 0.002330 0.062323 -6.61 0.002335 0.062401 -6.6 0.002341 0.062479 -6.59 0.002347 0.062556 -6.58 0.002353 0.062635 -6.57 0.002359 0.062713 -6.56 0.002365 0.062791 -6.55 0.002371 0.062870 -6.54 0.002377 0.062949 -6.53 0.002383 0.063028 -6.52 0.002389 0.063108 -6.51 0.002395 0.063187 -6.5 0.002401 0.063267 -6.49 0.002407 0.063347 -6.48 0.002413 0.063427 -6.47 0.002420 0.063507 -6.46 0.002426 0.063588 -6.45 0.002432 0.063668 -6.44 0.002438 0.063749 -6.43 0.002444 0.063830 -6.42 0.002451 0.063912 -6.41 0.002457 0.063993 -6.4 0.002463 0.064075 -6.39 0.002470 0.064157 -6.38 0.002476 0.064239 -6.37 0.002482 0.064322 -6.36 0.002489 0.064404 -6.35 0.002495 0.064487 -6.34 0.002502 0.064570 -6.33 0.002508 0.064654 -6.32 0.002515 0.064737 -6.31 0.002521 0.064821 -6.3 0.002528 0.064905 -6.29 0.002535 0.064989 -6.28 0.002541 0.065073 -6.27 0.002548 0.065158 -6.26 0.002555 0.065242 -6.25 0.002561 0.065328 -6.24 0.002568 0.065413 -6.23 0.002575 0.065498 -6.22 0.002582 0.065584 -6.21 0.002588 0.065670 -6.2 0.002595 0.065756 -6.19 0.002602 0.065842 -6.18 0.002609 0.065929 -6.17 0.002616 0.066016 -6.16 0.002623 0.066103 -6.15 0.002630 0.066190 -6.14 0.002637 0.066278 -6.13 0.002644 0.066365 -6.12 0.002651 0.066453 -6.11 0.002658 0.066541 -6.1 0.002665 0.066630 -6.09 0.002672 0.066719 -6.08 0.002680 0.066808 -6.07 0.002687 0.066897 -6.06 0.002694 0.066986 -6.05 0.002701 0.067076 -6.04 0.002709 0.067166 -6.03 0.002716 0.067256 -6.02 0.002723 0.067346 -6.01 0.002731 0.067437 -6 0.002738 0.067528 -5.99 0.002746 0.067619 -5.98 0.002753 0.067710 -5.97 0.002761 0.067802 -5.96 0.002768 0.067894 -5.95 0.002776 0.067986 -5.94 0.002783 0.068078 -5.93 0.002791 0.068171 -5.92 0.002799 0.068263 -5.91 0.002806 0.068357 -5.9 0.002814 0.068450 -5.89 0.002822 0.068544 -5.88 0.002830 0.068637 -5.87 0.002837 0.068732 -5.86 0.002845 0.068826 -5.85 0.002853 0.068921 -5.84 0.002861 0.069016 -5.83 0.002869 0.069111 -5.82 0.002877 0.069206 -5.81 0.002885 0.069302 -5.8 0.002893 0.069398 -5.79 0.002901 0.069494 -5.78 0.002909 0.069591 -5.77 0.002918 0.069687 -5.76 0.002926 0.069784 -5.75 0.002934 0.069882 -5.74 0.002942 0.069979 -5.73 0.002951 0.070077 -5.72 0.002959 0.070175 -5.71 0.002967 0.070274 -5.7 0.002976 0.070373 -5.69 0.002984 0.070472 -5.68 0.002993 0.070571 -5.67 0.003001 0.070670 -5.66 0.003010 0.070770 -5.65 0.003018 0.070870 -5.64 0.003027 0.070971 -5.63 0.003036 0.071071 -5.62 0.003044 0.071172 -5.61 0.003053 0.071274 -5.6 0.003062 0.071375 -5.59 0.003071 0.071477 -5.58 0.003080 0.071579 -5.57 0.003088 0.071682 -5.56 0.003097 0.071784 -5.55 0.003106 0.071887 -5.54 0.003115 0.071991 -5.53 0.003124 0.072094 -5.52 0.003133 0.072198 -5.51 0.003143 0.072302 -5.5 0.003152 0.072407 -5.49 0.003161 0.072512 -5.48 0.003170 0.072617 -5.47 0.003180 0.072722 -5.46 0.003189 0.072828 -5.45 0.003198 0.072934 -5.44 0.003208 0.073040 -5.43 0.003217 0.073147 -5.42 0.003227 0.073254 -5.41 0.003236 0.073361 -5.4 0.003246 0.073469 -5.39 0.003255 0.073577 -5.38 0.003265 0.073685 -5.37 0.003275 0.073794 -5.36 0.003285 0.073903 -5.35 0.003294 0.074012 -5.34 0.003304 0.074121 -5.33 0.003314 0.074231 -5.32 0.003324 0.074342 -5.31 0.003334 0.074452 -5.3 0.003344 0.074563 -5.29 0.003354 0.074674 -5.28 0.003364 0.074786 -5.27 0.003375 0.074897 -5.26 0.003385 0.075010 -5.25 0.003395 0.075122 -5.24 0.003405 0.075235 -5.23 0.003416 0.075348 -5.22 0.003426 0.075462 -5.21 0.003437 0.075576 -5.2 0.003447 0.075690 -5.19 0.003458 0.075805 -5.18 0.003468 0.075920 -5.17 0.003479 0.076035 -5.16 0.003490 0.076151 -5.15 0.003500 0.076267 -5.14 0.003511 0.076383 -5.13 0.003522 0.076500 -5.12 0.003533 0.076617 -5.11 0.003544 0.076734 -5.1 0.003555 0.076852 -5.09 0.003566 0.076970 -5.08 0.003577 0.077089 -5.07 0.003588 0.077208 -5.06 0.003599 0.077327 -5.05 0.003611 0.077447 -5.04 0.003622 0.077567 -5.03 0.003633 0.077687 -5.02 0.003645 0.077808 -5.01 0.003656 0.077929 -5 0.003668 0.078050 -4.99 0.003679 0.078172 -4.98 0.003691 0.078295 -4.97 0.003703 0.078417 -4.96 0.003714 0.078540 -4.95 0.003726 0.078664 -4.94 0.003738 0.078788 -4.93 0.003750 0.078912 -4.92 0.003762 0.079037 -4.91 0.003774 0.079162 -4.9 0.003786 0.079287 -4.89 0.003798 0.079413 -4.88 0.003811 0.079539 -4.87 0.003823 0.079666 -4.86 0.003835 0.079793 -4.85 0.003848 0.079920 -4.84 0.003860 0.080048 -4.83 0.003873 0.080176 -4.82 0.003885 0.080305 -4.81 0.003898 0.080434 -4.8 0.003910 0.080564 -4.79 0.003923 0.080694 -4.78 0.003936 0.080824 -4.77 0.003949 0.080955 -4.76 0.003962 0.081086 -4.75 0.003975 0.081218 -4.74 0.003988 0.081350 -4.73 0.004001 0.081482 -4.72 0.004014 0.081615 -4.71 0.004028 0.081749 -4.7 0.004041 0.081882 -4.69 0.004055 0.082017 -4.68 0.004068 0.082151 -4.67 0.004082 0.082287 -4.66 0.004095 0.082422 -4.65 0.004109 0.082558 -4.64 0.004123 0.082695 -4.63 0.004136 0.082832 -4.62 0.004150 0.082969 -4.61 0.004164 0.083107 -4.6 0.004178 0.083245 -4.59 0.004193 0.083384 -4.58 0.004207 0.083523 -4.57 0.004221 0.083663 -4.56 0.004235 0.083803 -4.55 0.004250 0.083944 -4.54 0.004264 0.084085 -4.53 0.004279 0.084227 -4.52 0.004293 0.084369 -4.51 0.004308 0.084512 -4.5 0.004323 0.084655 -4.49 0.004338 0.084798 -4.48 0.004353 0.084942 -4.47 0.004368 0.085087 -4.46 0.004383 0.085232 -4.45 0.004398 0.085378 -4.44 0.004413 0.085524 -4.43 0.004429 0.085670 -4.42 0.004444 0.085817 -4.41 0.004460 0.085965 -4.4 0.004475 0.086113 -4.39 0.004491 0.086262 -4.38 0.004507 0.086411 -4.37 0.004522 0.086560 -4.36 0.004538 0.086711 -4.35 0.004554 0.086861 -4.34 0.004570 0.087013 -4.33 0.004587 0.087164 -4.32 0.004603 0.087317 -4.31 0.004619 0.087469 -4.3 0.004636 0.087623 -4.29 0.004652 0.087777 -4.28 0.004669 0.087931 -4.27 0.004685 0.088086 -4.26 0.004702 0.088242 -4.25 0.004719 0.088398 -4.24 0.004736 0.088555 -4.23 0.004753 0.088712 -4.22 0.004770 0.088870 -4.21 0.004788 0.089028 -4.2 0.004805 0.089187 -4.19 0.004822 0.089346 -4.18 0.004840 0.089507 -4.17 0.004858 0.089667 -4.16 0.004875 0.089828 -4.15 0.004893 0.089990 -4.14 0.004911 0.090153 -4.13 0.004929 0.090316 -4.12 0.004947 0.090479 -4.11 0.004966 0.090644 -4.1 0.004984 0.090808 -4.09 0.005002 0.090974 -4.08 0.005021 0.091140 -4.07 0.005040 0.091306 -4.06 0.005058 0.091474 -4.05 0.005077 0.091642 -4.04 0.005096 0.091810 -4.03 0.005115 0.091979 -4.02 0.005134 0.092149 -4.01 0.005154 0.092319 -4 0.005173 0.092490 -3.99 0.005193 0.092662 -3.98 0.005212 0.092834 -3.97 0.005232 0.093007 -3.96 0.005252 0.093181 -3.95 0.005272 0.093355 -3.94 0.005292 0.093530 -3.93 0.005312 0.093706 -3.92 0.005332 0.093882 -3.91 0.005353 0.094059 -3.9 0.005373 0.094236 -3.89 0.005394 0.094415 -3.88 0.005415 0.094593 -3.87 0.005436 0.094773 -3.86 0.005457 0.094953 -3.85 0.005478 0.095134 -3.84 0.005499 0.095316 -3.83 0.005521 0.095499 -3.82 0.005542 0.095682 -3.81 0.005564 0.095866 -3.8 0.005586 0.096050 -3.79 0.005608 0.096235 -3.78 0.005630 0.096421 -3.77 0.005652 0.096608 -3.76 0.005674 0.096795 -3.75 0.005697 0.096984 -3.74 0.005719 0.097173 -3.73 0.005742 0.097362 -3.72 0.005765 0.097553 -3.71 0.005788 0.097744 -3.7 0.005811 0.097936 -3.69 0.005834 0.098128 -3.68 0.005858 0.098322 -3.67 0.005881 0.098516 -3.66 0.005905 0.098711 -3.65 0.005929 0.098907 -3.64 0.005953 0.099103 -3.63 0.005977 0.099301 -3.62 0.006002 0.099499 -3.61 0.006026 0.099698 -3.6 0.006051 0.099898 -3.59 0.006075 0.100098 -3.58 0.006100 0.100300 -3.57 0.006125 0.100502 -3.56 0.006151 0.100705 -3.55 0.006176 0.100909 -3.54 0.006202 0.101113 -3.53 0.006227 0.101319 -3.52 0.006253 0.101525 -3.51 0.006279 0.101733 -3.5 0.006305 0.101941 -3.49 0.006332 0.102150 -3.48 0.006358 0.102359 -3.47 0.006385 0.102570 -3.46 0.006412 0.102782 -3.45 0.006439 0.102994 -3.44 0.006466 0.103208 -3.43 0.006494 0.103422 -3.42 0.006521 0.103637 -3.41 0.006549 0.103853 -3.4 0.006577 0.104070 -3.39 0.006605 0.104288 -3.38 0.006633 0.104507 -3.37 0.006662 0.104726 -3.36 0.006691 0.104947 -3.35 0.006719 0.105169 -3.34 0.006749 0.105391 -3.33 0.006778 0.105615 -3.32 0.006807 0.105839 -3.31 0.006837 0.106065 -3.3 0.006867 0.106291 -3.29 0.006897 0.106518 -3.28 0.006927 0.106747 -3.27 0.006957 0.106976 -3.26 0.006988 0.107207 -3.25 0.007019 0.107438 -3.24 0.007050 0.107670 -3.23 0.007081 0.107904 -3.22 0.007113 0.108138 -3.21 0.007144 0.108374 -3.2 0.007176 0.108610 -3.19 0.007209 0.108848 -3.18 0.007241 0.109086 -3.17 0.007273 0.109326 -3.16 0.007306 0.109567 -3.15 0.007339 0.109809 -3.14 0.007373 0.110051 -3.13 0.007406 0.110295 -3.12 0.007440 0.110541 -3.11 0.007474 0.110787 -3.1 0.007508 0.111034 -3.09 0.007542 0.111283 -3.08 0.007577 0.111532 -3.07 0.007612 0.111783 -3.06 0.007647 0.112035 -3.05 0.007682 0.112288 -3.04 0.007718 0.112542 -3.03 0.007754 0.112797 -3.02 0.007790 0.113054 -3.01 0.007827 0.113311 -3 0.007863 0.113570 -2.99 0.007900 0.113830 -2.98 0.007937 0.114091 -2.97 0.007975 0.114354 -2.96 0.008013 0.114618 -2.95 0.008051 0.114883 -2.94 0.008089 0.115149 -2.93 0.008128 0.115416 -2.92 0.008166 0.115685 -2.91 0.008206 0.115955 -2.9 0.008245 0.116226 -2.89 0.008285 0.116499 -2.88 0.008325 0.116773 -2.87 0.008365 0.117048 -2.86 0.008406 0.117324 -2.85 0.008447 0.117602 -2.84 0.008488 0.117881 -2.83 0.008529 0.118162 -2.82 0.008571 0.118444 -2.81 0.008613 0.118727 -2.8 0.008656 0.119012 -2.79 0.008699 0.119298 -2.78 0.008742 0.119585 -2.77 0.008785 0.119874 -2.76 0.008829 0.120164 -2.75 0.008873 0.120456 -2.74 0.008918 0.120749 -2.73 0.008963 0.121043 -2.72 0.009008 0.121339 -2.71 0.009053 0.121637 -2.7 0.009099 0.121936 -2.69 0.009145 0.122236 -2.68 0.009192 0.122538 -2.67 0.009239 0.122842 -2.66 0.009286 0.123147 -2.65 0.009334 0.123453 -2.64 0.009382 0.123762 -2.63 0.009430 0.124071 -2.62 0.009479 0.124382 -2.61 0.009528 0.124695 -2.6 0.009578 0.125010 -2.59 0.009628 0.125326 -2.58 0.009678 0.125644 -2.57 0.009729 0.125963 -2.56 0.009780 0.126284 -2.55 0.009832 0.126607 -2.54 0.009884 0.126931 -2.53 0.009937 0.127257 -2.52 0.009989 0.127585 -2.51 0.010043 0.127914 -2.5 0.010097 0.128245 -2.49 0.010151 0.128578 -2.48 0.010205 0.128913 -2.47 0.010261 0.129250 -2.46 0.010316 0.129588 -2.45 0.010372 0.129928 -2.44 0.010429 0.130270 -2.43 0.010486 0.130614 -2.42 0.010543 0.130959 -2.41 0.010601 0.131307 -2.4 0.010660 0.131656 -2.39 0.010719 0.132007 -2.38 0.010778 0.132361 -2.37 0.010838 0.132716 -2.36 0.010899 0.133073 -2.35 0.010960 0.133432 -2.34 0.011021 0.133793 -2.33 0.011083 0.134156 -2.32 0.011146 0.134521 -2.31 0.011209 0.134888 -2.3 0.011273 0.135257 -2.29 0.011337 0.135628 -2.28 0.011402 0.136001 -2.27 0.011467 0.136376 -2.26 0.011533 0.136754 -2.25 0.011600 0.137133 -2.24 0.011667 0.137515 -2.23 0.011735 0.137899 -2.22 0.011803 0.138285 -2.21 0.011872 0.138674 -2.2 0.011942 0.139064 -2.19 0.012012 0.139457 -2.18 0.012083 0.139852 -2.17 0.012154 0.140249 -2.16 0.012227 0.140649 -2.15 0.012300 0.141051 -2.14 0.012373 0.141455 -2.13 0.012447 0.141862 -2.12 0.012522 0.142271 -2.11 0.012598 0.142683 -2.1 0.012674 0.143097 -2.09 0.012751 0.143513 -2.08 0.012829 0.143932 -2.07 0.012908 0.144354 -2.06 0.012987 0.144777 -2.05 0.013067 0.145204 -2.04 0.013148 0.145633 -2.03 0.013229 0.146065 -2.02 0.013312 0.146499 -2.01 0.013395 0.146936 -2 0.013479 0.147376 -1.99 0.013563 0.147818 -1.98 0.013649 0.148263 -1.97 0.013736 0.148711 -1.96 0.013823 0.149162 -1.95 0.013911 0.149615 -1.94 0.014000 0.150071 -1.93 0.014090 0.150530 -1.92 0.014181 0.150992 -1.91 0.014273 0.151457 -1.9 0.014365 0.151925 -1.89 0.014459 0.152396 -1.88 0.014553 0.152870 -1.87 0.014649 0.153346 -1.86 0.014746 0.153826 -1.85 0.014843 0.154309 -1.84 0.014942 0.154795 -1.83 0.015041 0.155285 -1.82 0.015142 0.155777 -1.81 0.015243 0.156273 -1.8 0.015346 0.156772 -1.79 0.015450 0.157274 -1.78 0.015555 0.157779 -1.77 0.015661 0.158288 -1.76 0.015768 0.158800 -1.75 0.015876 0.159316 -1.74 0.015985 0.159835 -1.73 0.016096 0.160358 -1.72 0.016208 0.160884 -1.71 0.016321 0.161413 -1.7 0.016435 0.161947 -1.69 0.016551 0.162483 -1.68 0.016668 0.163024 -1.67 0.016786 0.163568 -1.66 0.016905 0.164116 -1.65 0.017026 0.164668 -1.64 0.017148 0.165224 -1.63 0.017272 0.165783 -1.62 0.017396 0.166347 -1.61 0.017523 0.166914 -1.6 0.017651 0.167485 -1.59 0.017780 0.168061 -1.58 0.017910 0.168640 -1.57 0.018043 0.169224 -1.56 0.018177 0.169812 -1.55 0.018312 0.170404 -1.54 0.018449 0.171000 -1.53 0.018587 0.171601 -1.52 0.018728 0.172206 -1.51 0.018869 0.172815 -1.5 0.019013 0.173429 -1.49 0.019158 0.174047 -1.48 0.019305 0.174670 -1.47 0.019454 0.175298 -1.46 0.019605 0.175930 -1.45 0.019757 0.176567 -1.44 0.019912 0.177208 -1.43 0.020068 0.177855 -1.42 0.020226 0.178506 -1.41 0.020387 0.179163 -1.4 0.020549 0.179824 -1.39 0.020713 0.180491 -1.38 0.020879 0.181162 -1.37 0.021048 0.181839 -1.36 0.021219 0.182521 -1.35 0.021391 0.183208 -1.34 0.021567 0.183901 -1.33 0.021744 0.184599 -1.32 0.021924 0.185303 -1.31 0.022106 0.186012 -1.3 0.022290 0.186727 -1.29 0.022477 0.187448 -1.28 0.022667 0.188174 -1.27 0.022859 0.188906 -1.26 0.023053 0.189644 -1.25 0.023251 0.190389 -1.24 0.023451 0.191139 -1.23 0.023653 0.191895 -1.22 0.023859 0.192658 -1.21 0.024067 0.193427 -1.2 0.024279 0.194202 -1.19 0.024493 0.194984 -1.18 0.024710 0.195772 -1.17 0.024931 0.196567 -1.16 0.025154 0.197369 -1.15 0.025381 0.198177 -1.14 0.025611 0.198993 -1.13 0.025844 0.199815 -1.12 0.026081 0.200645 -1.11 0.026322 0.201481 -1.1 0.026565 0.202325 -1.09 0.026813 0.203177 -1.08 0.027064 0.204035 -1.07 0.027319 0.204902 -1.06 0.027578 0.205776 -1.05 0.027841 0.206658 -1.04 0.028108 0.207548 -1.03 0.028379 0.208445 -1.02 0.028655 0.209351 -1.01 0.028935 0.210265 -1 0.029219 0.211188 -0.99 0.029507 0.212118 -0.98 0.029801 0.213058 -0.97 0.030099 0.214006 -0.96 0.030402 0.214963 -0.95 0.030709 0.215929 -0.94 0.031022 0.216904 -0.93 0.031340 0.217888 -0.92 0.031664 0.218882 -0.91 0.031993 0.219884 -0.9 0.032327 0.220897 -0.89 0.032667 0.221919 -0.88 0.033013 0.222952 -0.87 0.033365 0.223994 -0.86 0.033723 0.225046 -0.85 0.034087 0.226109 -0.84 0.034458 0.227182 -0.83 0.034836 0.228266 -0.82 0.035220 0.229361 -0.81 0.035611 0.230466 -0.8 0.036009 0.231583 -0.79 0.036415 0.232711 -0.78 0.036828 0.233850 -0.77 0.037249 0.235002 -0.76 0.037678 0.236165 -0.75 0.038115 0.237339 -0.74 0.038560 0.238527 -0.73 0.039014 0.239726 -0.72 0.039476 0.240938 -0.71 0.039948 0.242163 -0.7 0.040429 0.243400 -0.69 0.040919 0.244651 -0.68 0.041420 0.245915 -0.67 0.041930 0.247193 -0.66 0.042451 0.248485 -0.65 0.042983 0.249790 -0.64 0.043526 0.251110 -0.63 0.044080 0.252444 -0.62 0.044645 0.253793 -0.61 0.045223 0.255156 -0.6 0.045814 0.256535 -0.59 0.046417 0.257929 -0.58 0.047033 0.259338 -0.57 0.047663 0.260763 -0.56 0.048307 0.262205 -0.55 0.048965 0.263662 -0.54 0.049639 0.265136 -0.53 0.050327 0.266627 -0.52 0.051032 0.268135 -0.51 0.051753 0.269660 -0.5 0.052492 0.271203 -0.49 0.053247 0.272763 -0.48 0.054021 0.274342 -0.47 0.054814 0.275939 -0.46 0.055626 0.277554 -0.45 0.056458 0.279188 -0.44 0.057311 0.280841 -0.43 0.058186 0.282514 -0.42 0.059083 0.284206 -0.41 0.060003 0.285918 -0.4 0.060946 0.287649 -0.39 0.061915 0.289401 -0.38 0.062909 0.291174 -0.37 0.063930 0.292967 -0.36 0.064979 0.294782 -0.35 0.066056 0.296617 -0.34 0.067163 0.298473 -0.33 0.068301 0.300352 -0.32 0.069470 0.302251 -0.31 0.070673 0.304173 -0.3 0.071911 0.306116 -0.29 0.073185 0.308081 -0.28 0.074496 0.310069 -0.27 0.075846 0.312078 -0.26 0.077236 0.314109 -0.25 0.078668 0.316163 -0.24 0.080144 0.318238 -0.23 0.081665 0.320335 -0.22 0.083234 0.322453 -0.21 0.084852 0.324593 -0.2 0.086521 0.326753 -0.19 0.088244 0.328934 -0.18 0.090022 0.331135 -0.17 0.091858 0.333355 -0.16 0.093755 0.335594 -0.15 0.095714 0.337851 -0.14 0.097739 0.340124 -0.13 0.099832 0.342413 -0.12 0.101996 0.344717 -0.11 0.104233 0.347034 -0.1 0.106548 0.349361 -0.090000 0.108943 0.351699 -0.080000 0.111420 0.354043 -0.070000 0.113985 0.356393 -0.060000 0.116639 0.358744 -0.050000 0.119387 0.361095 -0.040000 0.122231 0.363443 -0.030000 0.125176 0.365782 -0.020000 0.128225 0.368109 -0.010000 0.131382 0.370421 0 0.134650 0.372710 0.009999 0.138033 0.374974 0.019999 0.141533 0.377204 0.029999 0.145156 0.379394 0.039999 0.148903 0.381538 0.049999 0.152777 0.383627 0.059999 0.156780 0.385652 0.069999 0.160916 0.387605 0.079999 0.165184 0.389475 0.089999 0.169587 0.391251 0.099999 0.174124 0.392923 0.11 0.178794 0.394476 0.12 0.183595 0.395899 0.13 0.188524 0.397178 0.14 0.193578 0.398297 0.15 0.198749 0.399244 0.16 0.204030 0.400001 0.17 0.209412 0.400554 0.18 0.214883 0.400887 0.19 0.220428 0.400984 0.2 0.226032 0.400832 0.21 0.231675 0.400416 0.22 0.237337 0.399724 0.23 0.242994 0.398744 0.24 0.248618 0.397468 0.25 0.254181 0.395890 0.26 0.259653 0.394006 0.27 0.265001 0.391818 0.28 0.270191 0.389329 0.29 0.275189 0.386550 0.3 0.279959 0.383493 0.31 0.284468 0.380177 0.32 0.288684 0.376626 0.33 0.292576 0.372869 0.34 0.296117 0.368939 0.35 0.299284 0.364872 0.36 0.302060 0.360711 0.37 0.304431 0.356498 0.38 0.306390 0.352279 0.39 0.307937 0.348101 0.4 0.309076 0.344010 0.41 0.309819 0.340052 0.42 0.310183 0.336269 0.43 0.310190 0.332703 0.44 0.309869 0.329390 0.45 0.309248 0.326362 0.46 0.308364 0.323648 0.47 0.307252 0.321270 0.48 0.305950 0.319246 0.49 0.304497 0.317589 0.5 0.302931 0.316307 0.51 0.301289 0.315405 0.52 0.299609 0.314881 0.53 0.297924 0.314733 0.54 0.296268 0.314954 0.55 0.294671 0.315533 0.56 0.293161 0.316460 0.57 0.291764 0.317720 0.58 0.290503 0.319300 0.59 0.289399 0.321184 0.6 0.288471 0.323356 0.61 0.287736 0.325799 0.62 0.287208 0.328497 0.63 0.286900 0.331434 0.64 0.286825 0.334593 0.65 0.286993 0.337958 0.66 0.287413 0.341515 0.67 0.288092 0.345248 0.68 0.289040 0.349143 0.69 0.290263 0.353186 0.7 0.291766 0.357364 0.71 0.293557 0.361662 0.72 0.295642 0.366069 0.73 0.298025 0.370573 0.74 0.300712 0.375160 0.75 0.303710 0.379819 0.76 0.307024 0.384537 0.77 0.310659 0.389303 0.78 0.314623 0.394104 0.79 0.318921 0.398928 0.8 0.323560 0.403762 0.81 0.328546 0.408592 0.82 0.333887 0.413405 0.83 0.339589 0.418185 0.84 0.345660 0.422918 0.85 0.352107 0.427587 0.86 0.358937 0.432174 0.87 0.366158 0.436660 0.88 0.373776 0.441026 0.89 0.381798 0.445249 0.9 0.390230 0.449306 0.91 0.399077 0.453173 0.92 0.408344 0.456822 0.93 0.418035 0.460224 0.94 0.428151 0.463350 0.95 0.438692 0.466165 0.96 0.449656 0.468636 0.97 0.461039 0.470724 0.98 0.472833 0.472392 0.99 0.485027 0.473598 1 0.497607 0.474299 1.01 0.510554 0.474453 1.02 0.523843 0.474013 1.03 0.537445 0.472934 1.04 0.551324 0.471171 1.05 0.565440 0.468679 1.06 0.579742 0.465415 1.07 0.594177 0.461339 1.08 0.608682 0.456414 1.09 0.623186 0.450608 1.1 0.637613 0.443895 1.11 0.651880 0.436259 1.12 0.665898 0.427689 1.13 0.679574 0.418188 1.14 0.692810 0.407767 1.15 0.705508 0.396453 1.16 0.717569 0.384286 1.17 0.728897 0.371316 1.18 0.739401 0.357613 1.19 0.748995 0.343256 1.2 0.757604 0.328339 1.21 0.765165 0.312967 1.22 0.771629 0.297255 1.23 0.776960 0.281325 1.24 0.781141 0.265304 1.25 0.784173 0.249322 1.26 0.786073 0.233506 1.27 0.786876 0.217983 1.28 0.786633 0.202871 1.29 0.785413 0.188280 1.3 0.783294 0.174308 1.31 0.780368 0.161042 1.32 0.776734 0.148553 1.33 0.772499 0.136900 1.34 0.767774 0.126125 1.35 0.762668 0.116257 1.36 0.757296 0.107308 1.37 0.751764 0.099281 1.38 0.746180 0.092163 1.39 0.740642 0.085931 1.4 0.735246 0.080553 1.41 0.730079 0.075988 1.42 0.725221 0.072188 1.43 0.720746 0.069099 1.44 0.716718 0.066662 1.45 0.713196 0.064813 1.46 0.710230 0.063486 1.47 0.707865 0.062614 1.48 0.706138 0.062124 1.49 0.705078 0.061946 1.5 0.704713 0.062007 1.51 0.705059 0.062232 1.52 0.706130 0.062549 1.53 0.707933 0.062882 1.54 0.710471 0.063156 1.55 0.713740 0.063297 1.56 0.717730 0.063230 1.57 0.722427 0.062879 1.58 0.727810 0.062172 1.59 0.733852 0.061034 1.6 0.740519 0.059392 1.61 0.747771 0.057176 1.62 0.755560 0.054316 1.63 0.763833 0.050747 1.64 0.772526 0.046406 1.65 0.781572 0.041236 1.66 0.790892 0.035183 1.67 0.800403 0.028203 1.68 0.810015 0.020257 1.69 0.819631 0.011319 1.7 0.829150 0.001368 1.71 0.838466 -0.009599 1.72 0.847473 -0.021580 1.73 0.856062 -0.034555 1.74 0.864128 -0.048493 1.75 0.871568 -0.063349 1.76 0.878283 -0.079065 1.77 0.884184 -0.095572 1.78 0.889190 -0.112790 1.79 0.893232 -0.130629 1.8 0.896251 -0.148994 1.81 0.898205 -0.167781 1.82 0.899061 -0.186887 1.83 0.898803 -0.206207 1.84 0.897425 -0.225637 1.85 0.894935 -0.245077 1.86 0.891351 -0.264431 1.87 0.886700 -0.283611 1.88 0.881018 -0.302534 1.89 0.874344 -0.321126 1.9 0.866725 -0.339319 1.91 0.858209 -0.357054 1.92 0.848847 -0.374278 1.93 0.838691 -0.390944 1.94 0.827794 -0.407010 1.95 0.816207 -0.422439 1.96 0.803985 -0.437201 1.97 0.791180 -0.451265 1.98 0.777845 -0.464608 1.99 0.764033 -0.477208 2 0.749800 -0.489047 2.01 0.735199 -0.500109 2.02 0.720286 -0.510385 2.03 0.705115 -0.519867 2.04 0.689742 -0.528552 2.05 0.674223 -0.536441 2.06 0.658610 -0.543540 2.07 0.642959 -0.549858 2.08 0.627319 -0.555411 2.09 0.611740 -0.560216 2.1 0.596269 -0.564295 2.11 0.580949 -0.567674 2.12 0.565820 -0.570381 2.13 0.550920 -0.572447 2.14 0.536280 -0.573905 2.15 0.521931 -0.574790 2.16 0.507896 -0.575137 2.17 0.494197 -0.574982 2.18 0.480853 -0.574363 2.19 0.467876 -0.573315 2.2 0.455278 -0.571874 2.21 0.443066 -0.570076 2.22 0.431246 -0.567953 2.23 0.419819 -0.565540 2.24 0.408785 -0.562867 2.25 0.398143 -0.559965 2.26 0.387888 -0.556862 2.27 0.378014 -0.553585 2.28 0.368515 -0.550160 2.29 0.359382 -0.546610 2.3 0.350606 -0.542957 2.31 0.342176 -0.539223 2.32 0.334081 -0.535425 2.33 0.326309 -0.531582 2.34 0.318850 -0.527710 2.35 0.311688 -0.523823 2.36 0.304813 -0.519936 2.37 0.298210 -0.516058 2.38 0.291867 -0.512203 2.39 0.285770 -0.508378 2.4 0.279905 -0.504592 2.41 0.274260 -0.500852 2.42 0.268821 -0.497164 2.43 0.263576 -0.493533 2.44 0.258512 -0.489961 2.45 0.253617 -0.486453 2.46 0.248880 -0.483008 2.47 0.244289 -0.479630 2.48 0.239835 -0.476317 2.49 0.235506 -0.473069 2.5 0.231295 -0.469886 2.51 0.227193 -0.466765 2.52 0.223191 -0.463705 2.53 0.219283 -0.460703 2.54 0.215461 -0.457758 2.55 0.211720 -0.454866 2.56 0.208055 -0.452024 2.57 0.204460 -0.449231 2.58 0.200930 -0.446482 2.59 0.197463 -0.443775 2.6 0.194053 -0.441108 2.61 0.190698 -0.438476 2.62 0.187395 -0.435876 2.63 0.184141 -0.433307 2.64 0.180935 -0.430765 2.65 0.177775 -0.428247 2.66 0.174659 -0.425751 2.67 0.171587 -0.423273 2.68 0.168557 -0.420812 2.69 0.165570 -0.418366 2.7 0.162626 -0.415933 2.71 0.159723 -0.413511 2.72 0.156863 -0.411098 2.73 0.154045 -0.408695 2.74 0.151270 -0.406299 2.75 0.148537 -0.403911 2.76 0.145848 -0.401529 2.77 0.143201 -0.399154 2.78 0.140598 -0.396785 2.79 0.138038 -0.394423 2.8 0.135521 -0.392067 2.81 0.133046 -0.389716 2.82 0.130614 -0.387372 2.83 0.128225 -0.385034 2.84 0.125877 -0.382702 2.85 0.123571 -0.380376 2.86 0.121307 -0.378055 2.87 0.119085 -0.375740 2.88 0.116904 -0.373431 2.89 0.114765 -0.371127 2.9 0.112668 -0.368830 2.91 0.110612 -0.366538 2.92 0.108598 -0.364253 2.93 0.106626 -0.361974 2.94 0.104696 -0.359702 2.95 0.102808 -0.357438 2.96 0.100962 -0.355181 2.97 0.099158 -0.352934 2.98 0.097395 -0.350696 2.99 0.095675 -0.348468 3 0.093996 -0.346252 3.01 0.092358 -0.344047 3.02 0.090761 -0.341855 3.03 0.089204 -0.339676 3.04 0.087687 -0.337512 3.05 0.086209 -0.335363 3.06 0.084769 -0.333229 3.07 0.083366 -0.331113 3.08 0.082000 -0.329013 3.09 0.080670 -0.326931 3.1 0.079375 -0.324867 3.11 0.078114 -0.322823 3.12 0.076886 -0.320797 3.13 0.075690 -0.318791 3.14 0.074526 -0.316805 3.15 0.073391 -0.314839 3.16 0.072286 -0.312894 3.17 0.071210 -0.310969 3.18 0.070161 -0.309065 3.19 0.069139 -0.307182 3.2 0.068142 -0.305320 3.21 0.067170 -0.303479 3.22 0.066222 -0.301659 3.23 0.065298 -0.299860 3.24 0.064395 -0.298082 3.25 0.063514 -0.296326 3.26 0.062654 -0.294590 3.27 0.061814 -0.292875 3.28 0.060992 -0.291181 3.29 0.060189 -0.289507 3.3 0.059403 -0.287854 3.31 0.058634 -0.286221 3.32 0.057880 -0.284608 3.33 0.057142 -0.283015 3.34 0.056418 -0.281441 3.35 0.055708 -0.279886 3.36 0.055011 -0.278349 3.37 0.054326 -0.276831 3.38 0.053654 -0.275330 3.39 0.052992 -0.273847 3.4 0.052342 -0.272380 3.41 0.051702 -0.270929 3.42 0.051072 -0.269495 3.43 0.050452 -0.268075 3.44 0.049842 -0.266670 3.45 0.049241 -0.265280 3.46 0.048650 -0.263903 3.47 0.048067 -0.262541 3.48 0.047494 -0.261191 3.49 0.046929 -0.259855 3.5 0.046373 -0.258531 3.51 0.045826 -0.257219 3.52 0.045288 -0.255920 3.53 0.044758 -0.254632 3.54 0.044236 -0.253357 3.55 0.043723 -0.252093 3.56 0.043218 -0.250841 3.57 0.042721 -0.249600 3.58 0.042232 -0.248370 3.59 0.041751 -0.247151 3.6 0.041277 -0.245943 3.61 0.040812 -0.244746 3.62 0.040353 -0.243560 3.63 0.039902 -0.242384 3.64 0.039459 -0.241219 3.65 0.039022 -0.240064 3.66 0.038593 -0.238919 3.67 0.038170 -0.237784 3.68 0.037754 -0.236659 3.69 0.037345 -0.235544 3.7 0.036942 -0.234438 3.71 0.036546 -0.233342 3.72 0.036157 -0.232256 3.73 0.035773 -0.231179 3.74 0.035396 -0.230111 3.75 0.035025 -0.229052 3.76 0.034660 -0.228003 3.77 0.034301 -0.226963 3.78 0.033948 -0.225931 3.79 0.033601 -0.224909 3.8 0.033259 -0.223896 3.81 0.032923 -0.222891 3.82 0.032592 -0.221895 3.83 0.032267 -0.220908 3.84 0.031946 -0.219930 3.85 0.031631 -0.218960 3.86 0.031320 -0.217999 3.87 0.031014 -0.217046 3.88 0.030713 -0.216101 3.89 0.030416 -0.215165 3.9 0.030123 -0.214236 3.91 0.029835 -0.213316 3.92 0.029551 -0.212403 3.93 0.029270 -0.211498 3.94 0.028994 -0.210601 3.95 0.028722 -0.209711 3.96 0.028453 -0.208829 3.97 0.028188 -0.207954 3.98 0.027927 -0.207086 3.99 0.027670 -0.206225 4 0.027416 -0.205371 4.01 0.027165 -0.204524 4.02 0.026918 -0.203684 4.03 0.026674 -0.202851 4.04 0.026434 -0.202024 4.05 0.026197 -0.201204 4.06 0.025963 -0.200390 4.07 0.025732 -0.199583 4.08 0.025505 -0.198782 4.09 0.025280 -0.197988 4.1 0.025059 -0.197200 4.11 0.024841 -0.196418 4.12 0.024625 -0.195642 4.13 0.024412 -0.194872 4.14 0.024202 -0.194108 4.15 0.023995 -0.193350 4.16 0.023791 -0.192598 4.17 0.023589 -0.191852 4.18 0.023390 -0.191111 4.19 0.023193 -0.190376 4.2 0.022999 -0.189647 4.21 0.022807 -0.188923 4.22 0.022618 -0.188204 4.23 0.022431 -0.187491 4.24 0.022247 -0.186783 4.25 0.022064 -0.186081 4.26 0.021885 -0.185383 4.27 0.021707 -0.184691 4.28 0.021532 -0.184004 4.29 0.021359 -0.183322 4.3 0.021188 -0.182645 4.31 0.021020 -0.181972 4.32 0.020853 -0.181305 4.33 0.020689 -0.180643 4.34 0.020526 -0.179985 4.35 0.020366 -0.179332 4.36 0.020208 -0.178684 4.37 0.020051 -0.178041 4.38 0.019897 -0.177402 4.39 0.019744 -0.176768 4.4 0.019594 -0.176139 4.41 0.019445 -0.175514 4.42 0.019297 -0.174893 4.43 0.019152 -0.174277 4.44 0.019008 -0.173666 4.45 0.018866 -0.173058 4.46 0.018726 -0.172455 4.47 0.018587 -0.171856 4.48 0.018449 -0.171262 4.49 0.018314 -0.170671 4.5 0.018179 -0.170085 4.51 0.018047 -0.169502 4.52 0.017915 -0.168924 4.53 0.017785 -0.168350 4.54 0.017657 -0.167779 4.55 0.017530 -0.167212 4.56 0.017404 -0.166650 4.57 0.017280 -0.166090 4.58 0.017157 -0.165535 4.59 0.017035 -0.164983 4.6 0.016915 -0.164435 4.61 0.016796 -0.163891 4.62 0.016679 -0.163350 4.63 0.016562 -0.162813 4.64 0.016447 -0.162279 4.65 0.016334 -0.161749 4.66 0.016221 -0.161222 4.67 0.016110 -0.160699 4.68 0.016000 -0.160179 4.69 0.015891 -0.159662 4.7 0.015783 -0.159149 4.71 0.015676 -0.158639 4.72 0.015571 -0.158132 4.73 0.015467 -0.157629 4.74 0.015363 -0.157129 4.75 0.015261 -0.156632 4.76 0.015160 -0.156138 4.77 0.015060 -0.155648 4.78 0.014961 -0.155160 4.79 0.014863 -0.154676 4.8 0.014766 -0.154195 4.81 0.014670 -0.153716 4.82 0.014574 -0.153241 4.83 0.014480 -0.152768 4.84 0.014387 -0.152299 4.85 0.014295 -0.151832 4.86 0.014203 -0.151369 4.87 0.014113 -0.150908 4.88 0.014023 -0.150450 4.89 0.013935 -0.149994 4.9 0.013847 -0.149542 4.91 0.013760 -0.149092 4.92 0.013674 -0.148645 4.93 0.013589 -0.148201 4.94 0.013504 -0.147759 4.95 0.013421 -0.147320 4.96 0.013338 -0.146884 4.97 0.013256 -0.146450 4.98 0.013175 -0.146019 4.99 0.013094 -0.145590 5 0.013015 -0.145164 5.01 0.012936 -0.144740 5.02 0.012858 -0.144319 5.03 0.012780 -0.143901 5.04 0.012704 -0.143485 5.05 0.012628 -0.143071 5.06 0.012553 -0.142660 5.07 0.012478 -0.142251 5.08 0.012404 -0.141844 5.09 0.012331 -0.141440 5.1 0.012259 -0.141038 5.11 0.012187 -0.140639 5.12 0.012116 -0.140242 5.13 0.012045 -0.139847 5.14 0.011975 -0.139454 5.15 0.011906 -0.139064 5.16 0.011837 -0.138675 5.17 0.011769 -0.138289 5.18 0.011702 -0.137905 5.19 0.011635 -0.137524 5.2 0.011568 -0.137144 5.21 0.011503 -0.136767 5.22 0.011438 -0.136391 5.23 0.011373 -0.136018 5.24 0.011309 -0.135647 5.25 0.011245 -0.135277 5.26 0.011182 -0.134910 5.27 0.011120 -0.134545 5.28 0.011058 -0.134182 5.29 0.010997 -0.133820 5.3 0.010936 -0.133461 5.31 0.010876 -0.133104 5.32 0.010816 -0.132748 5.33 0.010757 -0.132395 5.34 0.010698 -0.132043 5.35 0.010640 -0.131694 5.36 0.010582 -0.131346 5.37 0.010525 -0.131000 5.38 0.010468 -0.130656 5.39 0.010412 -0.130313 5.4 0.010356 -0.129973 5.41 0.010301 -0.129634 5.42 0.010246 -0.129297 5.43 0.010191 -0.128962 5.44 0.010137 -0.128629 5.45 0.010084 -0.128297 5.46 0.010031 -0.127968 5.47 0.009978 -0.127639 5.48 0.009926 -0.127313 5.49 0.009874 -0.126988 5.5 0.009822 -0.126665 5.51 0.009771 -0.126344 5.52 0.009720 -0.126024 5.53 0.009670 -0.125706 5.54 0.009620 -0.125389 5.55 0.009571 -0.125074 5.56 0.009521 -0.124761 5.57 0.009473 -0.124449 5.58 0.009424 -0.124139 5.59 0.009376 -0.123831 5.6 0.009328 -0.123523 5.61 0.009281 -0.123218 5.62 0.009234 -0.122914 5.63 0.009188 -0.122611 5.64 0.009142 -0.122310 5.65 0.009096 -0.122011 5.66 0.009050 -0.121713 5.67 0.009005 -0.121416 5.68 0.008960 -0.121121 5.69 0.008916 -0.120827 5.7 0.008872 -0.120535 5.71 0.008828 -0.120244 5.72 0.008785 -0.119955 5.73 0.008741 -0.119666 5.74 0.008699 -0.119380 5.75 0.008656 -0.119095 5.76 0.008614 -0.118811 5.77 0.008572 -0.118528 5.78 0.008531 -0.118247 5.79 0.008489 -0.117967 5.8 0.008448 -0.117689 5.81 0.008408 -0.117412 5.82 0.008367 -0.117136 5.83 0.008327 -0.116861 5.84 0.008288 -0.116588 5.85 0.008248 -0.116316 5.86 0.008209 -0.116046 5.87 0.008170 -0.115776 5.88 0.008131 -0.115508 5.89 0.008093 -0.115241 5.9 0.008055 -0.114975 5.91 0.008017 -0.114711 5.92 0.007979 -0.114448 5.93 0.007942 -0.114186 5.94 0.007905 -0.113925 5.95 0.007868 -0.113665 5.96 0.007832 -0.113407 5.97 0.007795 -0.113150 5.98 0.007759 -0.112894 5.99 0.007724 -0.112639 6 0.007688 -0.112385 6.01 0.007653 -0.112132 6.02 0.007618 -0.111881 6.03 0.007583 -0.111630 6.04 0.007549 -0.111381 6.05 0.007515 -0.111133 6.06 0.007481 -0.110886 6.07 0.007447 -0.110640 6.08 0.007413 -0.110395 6.09 0.007380 -0.110152 6.1 0.007347 -0.109909 6.11 0.007314 -0.109668 6.12 0.007282 -0.109427 6.13 0.007249 -0.109188 6.14 0.007217 -0.108950 6.15 0.007185 -0.108712 6.16 0.007153 -0.108476 6.17 0.007122 -0.108241 6.18 0.007090 -0.108007 6.19 0.007059 -0.107774 6.2 0.007028 -0.107542 6.21 0.006998 -0.107310 6.22 0.006967 -0.107080 6.23 0.006937 -0.106851 6.24 0.006907 -0.106623 6.25 0.006877 -0.106396 6.26 0.006847 -0.106170 6.27 0.006817 -0.105944 6.28 0.006788 -0.105720 6.29 0.006759 -0.105497 6.3 0.006730 -0.105274 6.31 0.006701 -0.105053 6.32 0.006673 -0.104833 6.33 0.006644 -0.104613 6.34 0.006616 -0.104394 6.35 0.006588 -0.104177 6.36 0.006560 -0.103960 6.37 0.006532 -0.103744 6.38 0.006505 -0.103529 6.39 0.006478 -0.103315 6.4 0.006451 -0.103102 6.41 0.006424 -0.102889 6.42 0.006397 -0.102678 6.43 0.006370 -0.102467 6.44 0.006344 -0.102257 6.45 0.006317 -0.102049 6.46 0.006291 -0.101841 6.47 0.006265 -0.101634 6.48 0.006240 -0.101427 6.49 0.006214 -0.101222 6.5 0.006188 -0.101017 6.51 0.006163 -0.100814 6.52 0.006138 -0.100611 6.53 0.006113 -0.100409 6.54 0.006088 -0.100207 6.55 0.006063 -0.100007 6.56 0.006039 -0.099807 6.57 0.006014 -0.099608 6.58 0.005990 -0.099410 6.59 0.005966 -0.099213 6.6 0.005942 -0.099016 6.61 0.005918 -0.098821 6.62 0.005894 -0.098626 6.63 0.005871 -0.098432 6.64 0.005847 -0.098238 6.65 0.005824 -0.098045 6.66 0.005801 -0.097853 6.67 0.005778 -0.097662 6.68 0.005755 -0.097472 6.69 0.005732 -0.097282 6.7 0.005710 -0.097093 6.71 0.005687 -0.096905 6.72 0.005665 -0.096718 6.73 0.005643 -0.096531 6.74 0.005621 -0.096345 6.75 0.005599 -0.096159 6.76 0.005577 -0.095975 6.77 0.005555 -0.095791 6.78 0.005534 -0.095608 6.79 0.005512 -0.095425 6.8 0.005491 -0.095244 6.81 0.005470 -0.095063 6.82 0.005449 -0.094882 6.83 0.005428 -0.094703 6.84 0.005407 -0.094524 6.85 0.005387 -0.094345 6.86 0.005366 -0.094168 6.87 0.005346 -0.093991 6.88 0.005325 -0.093815 6.89 0.005305 -0.093639 6.9 0.005285 -0.093464 6.91 0.005265 -0.093290 6.92 0.005245 -0.093116 6.93 0.005226 -0.092943 6.94 0.005206 -0.092771 6.95 0.005187 -0.092599 6.96 0.005167 -0.092428 6.97 0.005148 -0.092257 6.98 0.005129 -0.092088 6.99 0.005110 -0.091918 7 0.005091 -0.091750 7.01 0.005072 -0.091582 7.02 0.005053 -0.091415 7.03 0.005034 -0.091248 7.04 0.005016 -0.091082 7.05 0.004997 -0.090916 7.06 0.004979 -0.090751 7.07 0.004961 -0.090587 7.08 0.004943 -0.090423 7.09 0.004925 -0.090260 7.1 0.004907 -0.090098 7.11 0.004889 -0.089936 7.12 0.004871 -0.089775 7.13 0.004854 -0.089614 7.14 0.004836 -0.089454 7.15 0.004819 -0.089294 7.16 0.004801 -0.089135 7.17 0.004784 -0.088977 7.18 0.004767 -0.088819 7.19 0.004750 -0.088661 7.2 0.004733 -0.088505 7.21 0.004716 -0.088349 7.22 0.004699 -0.088193 7.23 0.004683 -0.088038 7.24 0.004666 -0.087883 7.25 0.004650 -0.087729 7.26 0.004633 -0.087576 7.27 0.004617 -0.087423 7.28 0.004600 -0.087271 7.29 0.004584 -0.087119 7.3 0.004568 -0.086967 7.31 0.004552 -0.086817 7.32 0.004536 -0.086666 7.33 0.004520 -0.086517 7.34 0.004504 -0.086367 7.35 0.004489 -0.086219 7.36 0.004473 -0.086070 7.37 0.004458 -0.085923 7.38 0.004442 -0.085776 7.39 0.004427 -0.085629 7.4 0.004412 -0.085483 7.41 0.004396 -0.085337 7.42 0.004381 -0.085192 7.43 0.004366 -0.085047 7.44 0.004351 -0.084903 7.45 0.004336 -0.084759 7.46 0.004322 -0.084616 7.47 0.004307 -0.084473 7.48 0.004292 -0.084331 7.49 0.004278 -0.084189 7.5 0.004263 -0.084048 7.51 0.004249 -0.083907 7.52 0.004235 -0.083767 7.53 0.004220 -0.083627 7.54 0.004206 -0.083488 7.55 0.004192 -0.083349 7.56 0.004178 -0.083210 7.57 0.004164 -0.083072 7.58 0.004150 -0.082935 7.59 0.004136 -0.082798 7.6 0.004122 -0.082661 7.61 0.004109 -0.082525 7.62 0.004095 -0.082389 7.63 0.004081 -0.082254 7.64 0.004068 -0.082119 7.65 0.004054 -0.081985 7.66 0.004041 -0.081851 7.67 0.004028 -0.081717 7.68 0.004015 -0.081584 7.69 0.004001 -0.081452 7.7 0.003988 -0.081319 7.71 0.003975 -0.081188 7.72 0.003962 -0.081056 7.73 0.003949 -0.080925 7.74 0.003936 -0.080795 7.75 0.003924 -0.080665 7.76 0.003911 -0.080535 7.77 0.003898 -0.080406 7.78 0.003885 -0.080277 7.79 0.003873 -0.080149 7.8 0.003860 -0.080021 7.81 0.003848 -0.079893 7.82 0.003836 -0.079766 7.83 0.003823 -0.079639 7.84 0.003811 -0.079513 7.85 0.003799 -0.079387 7.86 0.003787 -0.079261 7.87 0.003775 -0.079136 7.88 0.003763 -0.079012 7.89 0.003751 -0.078887 7.9 0.003739 -0.078763 7.91 0.003727 -0.078640 7.92 0.003715 -0.078516 7.93 0.003703 -0.078394 7.94 0.003692 -0.078271 7.95 0.003680 -0.078149 7.96 0.003668 -0.078028 7.97 0.003657 -0.077906 7.98 0.003645 -0.077785 7.99 0.003634 -0.077665 8 0.003622 -0.077545 8.01 0.003611 -0.077425 8.02 0.003600 -0.077306 8.03 0.003589 -0.077187 8.04 0.003577 -0.077068 8.05 0.003566 -0.076950 8.06 0.003555 -0.076832 8.07 0.003544 -0.076714 8.08 0.003533 -0.076597 8.09 0.003522 -0.076480 8.1 0.003511 -0.076363 8.11 0.003501 -0.076247 8.12 0.003490 -0.076131 8.13 0.003479 -0.076016 8.14 0.003469 -0.075901 8.15 0.003458 -0.075786 8.16 0.003447 -0.075672 8.17 0.003437 -0.075558 8.18 0.003426 -0.075444 8.19 0.003416 -0.075330 8.2 0.003406 -0.075217 8.21 0.003395 -0.075105 8.22 0.003385 -0.074992 8.23 0.003375 -0.074880 8.24 0.003365 -0.074769 8.25 0.003354 -0.074657 8.26 0.003344 -0.074546 8.27 0.003334 -0.074436 8.28 0.003324 -0.074325 8.29 0.003314 -0.074215 8.3 0.003304 -0.074105 8.31 0.003295 -0.073996 8.32 0.003285 -0.073887 8.33 0.003275 -0.073778 8.34 0.003265 -0.073670 8.35 0.003256 -0.073562 8.36 0.003246 -0.073454 8.37 0.003236 -0.073346 8.38 0.003227 -0.073239 8.39 0.003217 -0.073132 8.4 0.003208 -0.073026 8.41 0.003198 -0.072920 8.42 0.003189 -0.072814 8.43 0.003180 -0.072708 8.44 0.003170 -0.072603 8.45 0.003161 -0.072498 8.46 0.003152 -0.072393 8.47 0.003143 -0.072289 8.48 0.003134 -0.072185 8.49 0.003124 -0.072081 8.5 0.003115 -0.071977 8.51 0.003106 -0.071874 8.52 0.003097 -0.071771 8.53 0.003089 -0.071669 8.54 0.003080 -0.071566 8.55 0.003071 -0.071464 8.56 0.003062 -0.071363 8.57 0.003053 -0.071261 8.58 0.003044 -0.071160 8.59 0.003036 -0.071059 8.6 0.003027 -0.070959 8.61 0.003018 -0.070859 8.62 0.003010 -0.070759 8.63 0.003001 -0.070659 8.64 0.002993 -0.070559 8.65 0.002984 -0.070460 8.66 0.002976 -0.070361 8.67 0.002967 -0.070263 8.68 0.002959 -0.070165 8.69 0.002951 -0.070067 8.7 0.002942 -0.069969 8.71 0.002934 -0.069871 8.72 0.002926 -0.069774 8.73 0.002918 -0.069677 8.74 0.002909 -0.069580 8.75 0.002901 -0.069484 8.76 0.002893 -0.069388 8.77 0.002885 -0.069292 8.78 0.002877 -0.069196 8.79 0.002869 -0.069101 8.8 0.002861 -0.069006 8.81 0.002853 -0.068911 8.82 0.002845 -0.068817 8.83 0.002837 -0.068722 8.84 0.002830 -0.068628 8.85 0.002822 -0.068535 8.86 0.002814 -0.068441 8.87 0.002806 -0.068348 8.88 0.002799 -0.068255 8.89 0.002791 -0.068162 8.9 0.002783 -0.068069 8.91 0.002776 -0.067977 8.92 0.002768 -0.067885 8.93 0.002761 -0.067793 8.94 0.002753 -0.067702 8.95 0.002746 -0.067611 8.96 0.002738 -0.067520 8.97 0.002731 -0.067429 8.98 0.002723 -0.067338 8.99 0.002716 -0.067248 9 0.002709 -0.067158 9.01 0.002701 -0.067068 9.02 0.002694 -0.066979 9.03 0.002687 -0.066889 9.04 0.002680 -0.066800 9.05 0.002672 -0.066711 9.06 0.002665 -0.066623 9.07 0.002658 -0.066534 9.08 0.002651 -0.066446 9.09 0.002644 -0.066358 9.1 0.002637 -0.066271 9.11 0.002630 -0.066183 9.12 0.002623 -0.066096 9.13 0.002616 -0.066009 9.14 0.002609 -0.065922 9.15 0.002602 -0.065836 9.16 0.002595 -0.065750 9.17 0.002588 -0.065663 9.18 0.002582 -0.065578 9.19 0.002575 -0.065492 9.2 0.002568 -0.065407 9.21 0.002561 -0.065321 9.22 0.002555 -0.065236 9.23 0.002548 -0.065152 9.24 0.002541 -0.065067 9.25 0.002535 -0.064983 9.26 0.002528 -0.064899 9.27 0.002521 -0.064815 9.28 0.002515 -0.064731 9.29 0.002508 -0.064648 9.3 0.002502 -0.064565 9.31 0.002495 -0.064482 9.32 0.002489 -0.064399 9.33 0.002483 -0.064317 9.34 0.002476 -0.064234 9.35 0.002470 -0.064152 9.36 0.002463 -0.064070 9.37 0.002457 -0.063988 9.38 0.002451 -0.063907 9.39 0.002445 -0.063826 9.4 0.002438 -0.063745 9.41 0.002432 -0.063664 9.42 0.002426 -0.063583 9.43 0.002420 -0.063503 9.44 0.002414 -0.063422 9.45 0.002407 -0.063342 9.46 0.002401 -0.063262 9.47 0.002395 -0.063183 9.48 0.002389 -0.063103 9.49 0.002383 -0.063024 9.5 0.002377 -0.062945 9.51 0.002371 -0.062866 9.52 0.002365 -0.062787 9.53 0.002359 -0.062709 9.54 0.002353 -0.062631 9.55 0.002347 -0.062553 9.56 0.002341 -0.062475 9.57 0.002336 -0.062397 9.58 0.002330 -0.062320 9.59 0.002324 -0.062242 9.6 0.002318 -0.062165 9.61 0.002312 -0.062088 9.62 0.002307 -0.062012 9.63 0.002301 -0.061935 9.64 0.002295 -0.061859 9.65 0.002289 -0.061783 9.66 0.002284 -0.061707 9.67 0.002278 -0.061631 9.68 0.002273 -0.061555 9.69 0.002267 -0.061480 9.7 0.002261 -0.061405 9.71 0.002256 -0.061330 9.72 0.002250 -0.061255 9.73 0.002245 -0.061180 9.74 0.002239 -0.061106 9.75 0.002234 -0.061031 9.76 0.002228 -0.060957 9.77 0.002223 -0.060883 9.78 0.002217 -0.060809 9.79 0.002212 -0.060736 9.8 0.002207 -0.060662 9.81 0.002201 -0.060589 9.82 0.002196 -0.060516 9.83 0.002190 -0.060443 9.84 0.002185 -0.060371 9.85 0.002180 -0.060298 9.86 0.002175 -0.060226 9.87 0.002169 -0.060154 9.88 0.002164 -0.060082 9.89 0.002159 -0.060010 9.9 0.002154 -0.059938 9.91 0.002149 -0.059867 9.92 0.002143 -0.059795 9.93 0.002138 -0.059724 9.94 0.002133 -0.059653 9.95 0.002128 -0.059582 9.96 0.002123 -0.059512 9.97 0.002118 -0.059441 9.98 0.002113 -0.059371 9.99 0.002108 -0.059301 dmrgpp-6.02/TestSuite/oracles/data3008.cf000066400000000000000000001451341414604301300200550ustar00rootroot00000000000000-10 -0.002979 -0.095772 -9.99 -0.002986 -0.095871 -9.98 -0.002992 -0.095971 -9.97 -0.002998 -0.096070 -9.96 -0.003004 -0.096170 -9.95 -0.003011 -0.096270 -9.94 -0.003017 -0.096371 -9.93 -0.003023 -0.096471 -9.92 -0.003030 -0.096572 -9.91 -0.003036 -0.096673 -9.9 -0.003042 -0.096774 -9.89 -0.003049 -0.096875 -9.88 -0.003055 -0.096977 -9.87 -0.003061 -0.097078 -9.86 -0.003068 -0.097180 -9.85 -0.003074 -0.097283 -9.84 -0.003081 -0.097385 -9.83 -0.003087 -0.097488 -9.82 -0.003094 -0.097590 -9.81 -0.003100 -0.097693 -9.8 -0.003107 -0.097797 -9.79 -0.003114 -0.097900 -9.78 -0.003120 -0.098004 -9.77 -0.003127 -0.098108 -9.76 -0.003133 -0.098212 -9.75 -0.003140 -0.098316 -9.74 -0.003147 -0.098421 -9.73 -0.003154 -0.098526 -9.72 -0.003160 -0.098631 -9.71 -0.003167 -0.098736 -9.7 -0.003174 -0.098841 -9.69 -0.003181 -0.098947 -9.68 -0.003187 -0.099053 -9.67 -0.003194 -0.099159 -9.66 -0.003201 -0.099266 -9.65 -0.003208 -0.099372 -9.64 -0.003215 -0.099479 -9.63 -0.003222 -0.099586 -9.62 -0.003229 -0.099693 -9.61 -0.003236 -0.099801 -9.6 -0.003243 -0.099909 -9.59 -0.003250 -0.100017 -9.58 -0.003257 -0.100125 -9.57 -0.003264 -0.100233 -9.56 -0.003271 -0.100342 -9.55 -0.003278 -0.100451 -9.54 -0.003285 -0.100560 -9.53 -0.003292 -0.100670 -9.52 -0.003300 -0.100779 -9.51 -0.003307 -0.100889 -9.5 -0.003314 -0.100999 -9.49 -0.003321 -0.101110 -9.48 -0.003329 -0.101220 -9.47 -0.003336 -0.101331 -9.46 -0.003343 -0.101442 -9.45 -0.003351 -0.101554 -9.44 -0.003358 -0.101665 -9.43 -0.003365 -0.101777 -9.42 -0.003373 -0.101889 -9.41 -0.003380 -0.102001 -9.4 -0.003388 -0.102114 -9.39 -0.003395 -0.102227 -9.38 -0.003403 -0.102340 -9.37 -0.003410 -0.102453 -9.36 -0.003418 -0.102567 -9.35 -0.003426 -0.102681 -9.34 -0.003433 -0.102795 -9.33 -0.003441 -0.102909 -9.32 -0.003448 -0.103023 -9.31 -0.003456 -0.103138 -9.3 -0.003464 -0.103253 -9.29 -0.003472 -0.103369 -9.28 -0.003479 -0.103484 -9.27 -0.003487 -0.103600 -9.26 -0.003495 -0.103716 -9.25 -0.003503 -0.103833 -9.24 -0.003511 -0.103949 -9.23 -0.003519 -0.104066 -9.22 -0.003527 -0.104183 -9.21 -0.003535 -0.104301 -9.2 -0.003543 -0.104419 -9.19 -0.003551 -0.104537 -9.18 -0.003559 -0.104655 -9.17 -0.003567 -0.104773 -9.16 -0.003575 -0.104892 -9.15 -0.003583 -0.105011 -9.14 -0.003591 -0.105130 -9.13 -0.003599 -0.105250 -9.12 -0.003608 -0.105370 -9.11 -0.003616 -0.105490 -9.1 -0.003624 -0.105610 -9.09 -0.003632 -0.105731 -9.08 -0.003641 -0.105852 -9.07 -0.003649 -0.105973 -9.06 -0.003657 -0.106095 -9.05 -0.003666 -0.106216 -9.04 -0.003674 -0.106339 -9.03 -0.003683 -0.106461 -9.02 -0.003691 -0.106584 -9.01 -0.003700 -0.106706 -9 -0.003708 -0.106830 -8.99 -0.003717 -0.106953 -8.98 -0.003726 -0.107077 -8.97 -0.003734 -0.107201 -8.96 -0.003743 -0.107325 -8.95 -0.003752 -0.107450 -8.94 -0.003760 -0.107575 -8.93 -0.003769 -0.107700 -8.92 -0.003778 -0.107825 -8.91 -0.003787 -0.107951 -8.9 -0.003796 -0.108077 -8.89 -0.003805 -0.108204 -8.88 -0.003813 -0.108330 -8.87 -0.003822 -0.108457 -8.86 -0.003831 -0.108585 -8.85 -0.003840 -0.108712 -8.84 -0.003850 -0.108840 -8.83 -0.003859 -0.108968 -8.82 -0.003868 -0.109097 -8.81 -0.003877 -0.109225 -8.8 -0.003886 -0.109354 -8.79 -0.003895 -0.109484 -8.78 -0.003905 -0.109614 -8.77 -0.003914 -0.109744 -8.76 -0.003923 -0.109874 -8.75 -0.003932 -0.110004 -8.74 -0.003942 -0.110135 -8.73 -0.003951 -0.110267 -8.72 -0.003961 -0.110398 -8.71 -0.003970 -0.110530 -8.7 -0.003980 -0.110662 -8.69 -0.003989 -0.110795 -8.68 -0.003999 -0.110927 -8.67 -0.004008 -0.111061 -8.66 -0.004018 -0.111194 -8.65 -0.004028 -0.111328 -8.64 -0.004038 -0.111462 -8.63 -0.004047 -0.111596 -8.62 -0.004057 -0.111731 -8.61 -0.004067 -0.111866 -8.6 -0.004077 -0.112001 -8.59 -0.004087 -0.112137 -8.58 -0.004097 -0.112273 -8.57 -0.004107 -0.112410 -8.56 -0.004117 -0.112546 -8.55 -0.004127 -0.112683 -8.54 -0.004137 -0.112821 -8.53 -0.004147 -0.112958 -8.52 -0.004157 -0.113096 -8.51 -0.004167 -0.113235 -8.5 -0.004177 -0.113374 -8.49 -0.004188 -0.113513 -8.48 -0.004198 -0.113652 -8.47 -0.004208 -0.113792 -8.46 -0.004219 -0.113932 -8.45 -0.004229 -0.114072 -8.44 -0.004240 -0.114213 -8.43 -0.004250 -0.114354 -8.42 -0.004261 -0.114496 -8.41 -0.004271 -0.114637 -8.4 -0.004282 -0.114780 -8.39 -0.004293 -0.114922 -8.38 -0.004303 -0.115065 -8.37 -0.004314 -0.115208 -8.36 -0.004325 -0.115352 -8.35 -0.004336 -0.115496 -8.34 -0.004346 -0.115640 -8.33 -0.004357 -0.115785 -8.32 -0.004368 -0.115930 -8.31 -0.004379 -0.116075 -8.3 -0.004390 -0.116221 -8.29 -0.004401 -0.116367 -8.28 -0.004413 -0.116514 -8.27 -0.004424 -0.116660 -8.26 -0.004435 -0.116808 -8.25 -0.004446 -0.116955 -8.24 -0.004457 -0.117103 -8.23 -0.004469 -0.117252 -8.22 -0.004480 -0.117400 -8.21 -0.004491 -0.117549 -8.2 -0.004503 -0.117699 -8.19 -0.004514 -0.117849 -8.18 -0.004526 -0.117999 -8.17 -0.004538 -0.118150 -8.16 -0.004549 -0.118301 -8.15 -0.004561 -0.118452 -8.14 -0.004573 -0.118604 -8.13 -0.004584 -0.118756 -8.12 -0.004596 -0.118909 -8.11 -0.004608 -0.119062 -8.1 -0.004620 -0.119215 -8.09 -0.004632 -0.119369 -8.08 -0.004644 -0.119523 -8.07 -0.004656 -0.119677 -8.06 -0.004668 -0.119832 -8.05 -0.004680 -0.119988 -8.04 -0.004692 -0.120143 -8.03 -0.004705 -0.120300 -8.02 -0.004717 -0.120456 -8.01 -0.004729 -0.120613 -8 -0.004742 -0.120770 -7.99 -0.004754 -0.120928 -7.98 -0.004766 -0.121086 -7.97 -0.004779 -0.121245 -7.96 -0.004791 -0.121404 -7.95 -0.004804 -0.121564 -7.94 -0.004817 -0.121723 -7.93 -0.004830 -0.121884 -7.92 -0.004842 -0.122044 -7.91 -0.004855 -0.122206 -7.9 -0.004868 -0.122367 -7.89 -0.004881 -0.122529 -7.88 -0.004894 -0.122691 -7.87 -0.004907 -0.122854 -7.86 -0.004920 -0.123018 -7.85 -0.004933 -0.123181 -7.84 -0.004946 -0.123345 -7.83 -0.004960 -0.123510 -7.82 -0.004973 -0.123675 -7.81 -0.004986 -0.123841 -7.8 -0.005000 -0.124006 -7.79 -0.005013 -0.124173 -7.78 -0.005027 -0.124340 -7.77 -0.005040 -0.124507 -7.76 -0.005054 -0.124675 -7.75 -0.005067 -0.124843 -7.74 -0.005081 -0.125011 -7.73 -0.005095 -0.125180 -7.72 -0.005109 -0.125350 -7.71 -0.005123 -0.125520 -7.7 -0.005137 -0.125690 -7.69 -0.005151 -0.125861 -7.68 -0.005165 -0.126032 -7.67 -0.005179 -0.126204 -7.66 -0.005193 -0.126377 -7.65 -0.005207 -0.126549 -7.64 -0.005221 -0.126723 -7.63 -0.005236 -0.126896 -7.62 -0.005250 -0.127071 -7.61 -0.005265 -0.127245 -7.6 -0.005279 -0.127420 -7.59 -0.005294 -0.127596 -7.58 -0.005308 -0.127772 -7.57 -0.005323 -0.127949 -7.56 -0.005338 -0.128126 -7.55 -0.005353 -0.128303 -7.54 -0.005368 -0.128481 -7.53 -0.005383 -0.128660 -7.52 -0.005398 -0.128839 -7.51 -0.005413 -0.129019 -7.5 -0.005428 -0.129199 -7.49 -0.005443 -0.129379 -7.48 -0.005458 -0.129560 -7.47 -0.005474 -0.129742 -7.46 -0.005489 -0.129924 -7.45 -0.005505 -0.130107 -7.44 -0.005520 -0.130290 -7.43 -0.005536 -0.130473 -7.42 -0.005552 -0.130657 -7.41 -0.005567 -0.130842 -7.4 -0.005583 -0.131027 -7.39 -0.005599 -0.131213 -7.38 -0.005615 -0.131399 -7.37 -0.005631 -0.131586 -7.36 -0.005647 -0.131773 -7.35 -0.005663 -0.131961 -7.34 -0.005679 -0.132149 -7.33 -0.005696 -0.132338 -7.32 -0.005712 -0.132528 -7.31 -0.005728 -0.132718 -7.3 -0.005745 -0.132908 -7.29 -0.005761 -0.133099 -7.28 -0.005778 -0.133291 -7.27 -0.005795 -0.133483 -7.26 -0.005812 -0.133676 -7.25 -0.005828 -0.133869 -7.24 -0.005845 -0.134063 -7.23 -0.005862 -0.134257 -7.22 -0.005879 -0.134452 -7.21 -0.005897 -0.134648 -7.2 -0.005914 -0.134844 -7.19 -0.005931 -0.135041 -7.18 -0.005949 -0.135238 -7.17 -0.005966 -0.135436 -7.16 -0.005984 -0.135634 -7.15 -0.006001 -0.135833 -7.14 -0.006019 -0.136033 -7.13 -0.006037 -0.136233 -7.12 -0.006054 -0.136434 -7.11 -0.006072 -0.136635 -7.1 -0.006090 -0.136837 -7.09 -0.006109 -0.137039 -7.08 -0.006127 -0.137242 -7.07 -0.006145 -0.137446 -7.06 -0.006163 -0.137651 -7.05 -0.006182 -0.137855 -7.04 -0.006200 -0.138061 -7.03 -0.006219 -0.138267 -7.02 -0.006237 -0.138474 -7.01 -0.006256 -0.138681 -7 -0.006275 -0.138889 -6.99 -0.006294 -0.139098 -6.98 -0.006313 -0.139307 -6.97 -0.006332 -0.139517 -6.96 -0.006351 -0.139728 -6.95 -0.006370 -0.139939 -6.94 -0.006390 -0.140151 -6.93 -0.006409 -0.140363 -6.92 -0.006429 -0.140576 -6.91 -0.006448 -0.140790 -6.9 -0.006468 -0.141004 -6.89 -0.006488 -0.141219 -6.88 -0.006508 -0.141435 -6.87 -0.006528 -0.141651 -6.86 -0.006548 -0.141868 -6.85 -0.006568 -0.142086 -6.84 -0.006588 -0.142304 -6.83 -0.006609 -0.142523 -6.82 -0.006629 -0.142743 -6.81 -0.006650 -0.142964 -6.8 -0.006670 -0.143185 -6.79 -0.006691 -0.143406 -6.78 -0.006712 -0.143629 -6.77 -0.006733 -0.143852 -6.76 -0.006754 -0.144076 -6.75 -0.006775 -0.144300 -6.74 -0.006796 -0.144525 -6.73 -0.006817 -0.144751 -6.72 -0.006839 -0.144978 -6.71 -0.006860 -0.145205 -6.7 -0.006882 -0.145433 -6.69 -0.006904 -0.145662 -6.68 -0.006926 -0.145891 -6.67 -0.006947 -0.146122 -6.66 -0.006969 -0.146353 -6.65 -0.006992 -0.146584 -6.64 -0.007014 -0.146817 -6.63 -0.007036 -0.147050 -6.62 -0.007059 -0.147284 -6.61 -0.007081 -0.147518 -6.6 -0.007104 -0.147754 -6.59 -0.007127 -0.147990 -6.58 -0.007150 -0.148226 -6.57 -0.007173 -0.148464 -6.56 -0.007196 -0.148702 -6.55 -0.007219 -0.148942 -6.54 -0.007242 -0.149181 -6.53 -0.007266 -0.149422 -6.52 -0.007289 -0.149664 -6.51 -0.007313 -0.149906 -6.5 -0.007337 -0.150149 -6.49 -0.007361 -0.150393 -6.48 -0.007385 -0.150637 -6.47 -0.007409 -0.150883 -6.46 -0.007433 -0.151129 -6.45 -0.007458 -0.151376 -6.44 -0.007482 -0.151624 -6.43 -0.007507 -0.151872 -6.42 -0.007532 -0.152122 -6.41 -0.007556 -0.152372 -6.4 -0.007581 -0.152623 -6.39 -0.007607 -0.152875 -6.38 -0.007632 -0.153128 -6.37 -0.007657 -0.153381 -6.36 -0.007683 -0.153636 -6.35 -0.007708 -0.153891 -6.34 -0.007734 -0.154147 -6.33 -0.007760 -0.154404 -6.32 -0.007786 -0.154662 -6.31 -0.007812 -0.154920 -6.3 -0.007838 -0.155180 -6.29 -0.007865 -0.155440 -6.28 -0.007891 -0.155702 -6.27 -0.007918 -0.155964 -6.26 -0.007945 -0.156227 -6.25 -0.007972 -0.156491 -6.24 -0.007999 -0.156755 -6.23 -0.008026 -0.157021 -6.22 -0.008054 -0.157288 -6.21 -0.008081 -0.157555 -6.2 -0.008109 -0.157824 -6.19 -0.008136 -0.158093 -6.18 -0.008164 -0.158363 -6.17 -0.008192 -0.158635 -6.16 -0.008221 -0.158907 -6.15 -0.008249 -0.159180 -6.14 -0.008278 -0.159454 -6.13 -0.008306 -0.159729 -6.12 -0.008335 -0.160004 -6.11 -0.008364 -0.160281 -6.1 -0.008393 -0.160559 -6.09 -0.008422 -0.160838 -6.08 -0.008452 -0.161118 -6.07 -0.008481 -0.161398 -6.06 -0.008511 -0.161680 -6.05 -0.008541 -0.161962 -6.04 -0.008571 -0.162246 -6.03 -0.008601 -0.162531 -6.02 -0.008632 -0.162816 -6.01 -0.008662 -0.163103 -6 -0.008693 -0.163391 -5.99 -0.008724 -0.163679 -5.98 -0.008755 -0.163969 -5.97 -0.008786 -0.164260 -5.96 -0.008817 -0.164551 -5.95 -0.008849 -0.164844 -5.94 -0.008881 -0.165138 -5.93 -0.008912 -0.165433 -5.92 -0.008944 -0.165729 -5.91 -0.008977 -0.166026 -5.9 -0.009009 -0.166324 -5.89 -0.009042 -0.166623 -5.88 -0.009074 -0.166923 -5.87 -0.009107 -0.167224 -5.86 -0.009140 -0.167526 -5.85 -0.009173 -0.167830 -5.84 -0.009207 -0.168134 -5.83 -0.009241 -0.168440 -5.82 -0.009274 -0.168747 -5.81 -0.009308 -0.169055 -5.8 -0.009343 -0.169364 -5.79 -0.009377 -0.169674 -5.78 -0.009412 -0.169985 -5.77 -0.009446 -0.170297 -5.76 -0.009481 -0.170611 -5.75 -0.009516 -0.170926 -5.74 -0.009552 -0.171241 -5.73 -0.009587 -0.171558 -5.72 -0.009623 -0.171877 -5.71 -0.009659 -0.172196 -5.7 -0.009695 -0.172517 -5.69 -0.009731 -0.172838 -5.68 -0.009768 -0.173161 -5.67 -0.009805 -0.173485 -5.66 -0.009842 -0.173811 -5.65 -0.009879 -0.174137 -5.64 -0.009916 -0.174465 -5.63 -0.009954 -0.174794 -5.62 -0.009992 -0.175124 -5.61 -0.010030 -0.175456 -5.6 -0.010068 -0.175789 -5.59 -0.010106 -0.176123 -5.58 -0.010145 -0.176458 -5.57 -0.010184 -0.176795 -5.56 -0.010223 -0.177133 -5.55 -0.010262 -0.177472 -5.54 -0.010302 -0.177812 -5.53 -0.010342 -0.178154 -5.52 -0.010382 -0.178497 -5.51 -0.010422 -0.178841 -5.5 -0.010463 -0.179187 -5.49 -0.010503 -0.179534 -5.48 -0.010544 -0.179883 -5.47 -0.010586 -0.180232 -5.46 -0.010627 -0.180584 -5.45 -0.010669 -0.180936 -5.44 -0.010711 -0.181290 -5.43 -0.010753 -0.181645 -5.42 -0.010795 -0.182002 -5.41 -0.010838 -0.182360 -5.4 -0.010881 -0.182719 -5.39 -0.010924 -0.183080 -5.38 -0.010968 -0.183442 -5.37 -0.011011 -0.183806 -5.36 -0.011055 -0.184171 -5.35 -0.011100 -0.184538 -5.34 -0.011144 -0.184906 -5.33 -0.011189 -0.185275 -5.32 -0.011234 -0.185646 -5.31 -0.011279 -0.186019 -5.3 -0.011325 -0.186393 -5.29 -0.011371 -0.186768 -5.28 -0.011417 -0.187145 -5.27 -0.011464 -0.187524 -5.26 -0.011510 -0.187904 -5.25 -0.011557 -0.188286 -5.24 -0.011605 -0.188669 -5.23 -0.011652 -0.189053 -5.22 -0.011700 -0.189440 -5.21 -0.011748 -0.189827 -5.2 -0.011797 -0.190217 -5.19 -0.011846 -0.190608 -5.18 -0.011895 -0.191001 -5.17 -0.011944 -0.191395 -5.16 -0.011994 -0.191791 -5.15 -0.012044 -0.192188 -5.14 -0.012094 -0.192587 -5.13 -0.012145 -0.192988 -5.12 -0.012196 -0.193391 -5.11 -0.012247 -0.193795 -5.1 -0.012299 -0.194201 -5.09 -0.012351 -0.194608 -5.08 -0.012403 -0.195017 -5.07 -0.012455 -0.195428 -5.06 -0.012508 -0.195841 -5.05 -0.012562 -0.196255 -5.04 -0.012615 -0.196672 -5.03 -0.012669 -0.197090 -5.02 -0.012723 -0.197509 -5.01 -0.012778 -0.197931 -5 -0.012833 -0.198354 -4.99 -0.012888 -0.198779 -4.98 -0.012944 -0.199206 -4.97 -0.013000 -0.199635 -4.96 -0.013057 -0.200065 -4.95 -0.013114 -0.200498 -4.94 -0.013171 -0.200932 -4.93 -0.013228 -0.201369 -4.92 -0.013286 -0.201807 -4.91 -0.013345 -0.202247 -4.9 -0.013403 -0.202689 -4.89 -0.013462 -0.203132 -4.88 -0.013522 -0.203578 -4.87 -0.013582 -0.204026 -4.86 -0.013642 -0.204476 -4.85 -0.013703 -0.204927 -4.84 -0.013764 -0.205381 -4.83 -0.013825 -0.205837 -4.82 -0.013887 -0.206294 -4.81 -0.013949 -0.206754 -4.8 -0.014012 -0.207216 -4.79 -0.014075 -0.207680 -4.78 -0.014139 -0.208146 -4.77 -0.014203 -0.208614 -4.76 -0.014267 -0.209084 -4.75 -0.014332 -0.209556 -4.74 -0.014398 -0.210031 -4.73 -0.014463 -0.210507 -4.72 -0.014530 -0.210986 -4.71 -0.014596 -0.211467 -4.7 -0.014664 -0.211950 -4.69 -0.014731 -0.212435 -4.68 -0.014799 -0.212922 -4.67 -0.014868 -0.213412 -4.66 -0.014937 -0.213904 -4.65 -0.015006 -0.214398 -4.64 -0.015076 -0.214895 -4.63 -0.015147 -0.215393 -4.62 -0.015218 -0.215894 -4.61 -0.015289 -0.216398 -4.6 -0.015361 -0.216904 -4.59 -0.015434 -0.217412 -4.58 -0.015507 -0.217922 -4.57 -0.015581 -0.218435 -4.56 -0.015655 -0.218950 -4.55 -0.015729 -0.219468 -4.54 -0.015804 -0.219988 -4.53 -0.015880 -0.220511 -4.52 -0.015956 -0.221036 -4.51 -0.016033 -0.221564 -4.5 -0.016110 -0.222094 -4.49 -0.016188 -0.222626 -4.48 -0.016267 -0.223162 -4.47 -0.016346 -0.223699 -4.46 -0.016425 -0.224240 -4.45 -0.016505 -0.224783 -4.44 -0.016586 -0.225328 -4.43 -0.016668 -0.225876 -4.42 -0.016750 -0.226427 -4.41 -0.016832 -0.226981 -4.4 -0.016915 -0.227537 -4.39 -0.016999 -0.228096 -4.38 -0.017084 -0.228658 -4.37 -0.017169 -0.229222 -4.36 -0.017254 -0.229790 -4.35 -0.017341 -0.230360 -4.34 -0.017428 -0.230933 -4.33 -0.017515 -0.231509 -4.32 -0.017604 -0.232087 -4.31 -0.017693 -0.232669 -4.3 -0.017782 -0.233253 -4.29 -0.017872 -0.233840 -4.28 -0.017963 -0.234431 -4.27 -0.018055 -0.235024 -4.26 -0.018148 -0.235620 -4.25 -0.018241 -0.236220 -4.24 -0.018335 -0.236822 -4.23 -0.018429 -0.237427 -4.22 -0.018524 -0.238036 -4.21 -0.018621 -0.238647 -4.2 -0.018717 -0.239262 -4.19 -0.018815 -0.239880 -4.18 -0.018913 -0.240501 -4.17 -0.019012 -0.241125 -4.16 -0.019112 -0.241753 -4.15 -0.019213 -0.242384 -4.14 -0.019314 -0.243018 -4.13 -0.019416 -0.243655 -4.12 -0.019520 -0.244296 -4.11 -0.019623 -0.244940 -4.1 -0.019728 -0.245587 -4.09 -0.019834 -0.246238 -4.08 -0.019940 -0.246892 -4.07 -0.020047 -0.247550 -4.06 -0.020156 -0.248211 -4.05 -0.020265 -0.248876 -4.04 -0.020374 -0.249545 -4.03 -0.020485 -0.250216 -4.02 -0.020597 -0.250892 -4.01 -0.020710 -0.251571 -4 -0.020823 -0.252254 -3.99 -0.020938 -0.252940 -3.98 -0.021053 -0.253631 -3.97 -0.021169 -0.254325 -3.96 -0.021287 -0.255023 -3.95 -0.021405 -0.255724 -3.94 -0.021524 -0.256430 -3.93 -0.021645 -0.257139 -3.92 -0.021766 -0.257852 -3.91 -0.021888 -0.258569 -3.9 -0.022012 -0.259291 -3.89 -0.022136 -0.260016 -3.88 -0.022262 -0.260745 -3.87 -0.022388 -0.261478 -3.86 -0.022516 -0.262216 -3.85 -0.022645 -0.262957 -3.84 -0.022775 -0.263703 -3.83 -0.022905 -0.264453 -3.82 -0.023038 -0.265207 -3.81 -0.023171 -0.265966 -3.8 -0.023305 -0.266729 -3.79 -0.023441 -0.267496 -3.78 -0.023578 -0.268268 -3.77 -0.023715 -0.269044 -3.76 -0.023855 -0.269824 -3.75 -0.023995 -0.270609 -3.74 -0.024137 -0.271399 -3.73 -0.024280 -0.272193 -3.72 -0.024424 -0.272992 -3.71 -0.024569 -0.273795 -3.7 -0.024716 -0.274603 -3.69 -0.024864 -0.275416 -3.68 -0.025013 -0.276234 -3.67 -0.025164 -0.277057 -3.66 -0.025316 -0.277884 -3.65 -0.025470 -0.278716 -3.64 -0.025625 -0.279554 -3.63 -0.025781 -0.280396 -3.62 -0.025939 -0.281244 -3.61 -0.026098 -0.282096 -3.6 -0.026259 -0.282954 -3.59 -0.026421 -0.283817 -3.58 -0.026584 -0.284685 -3.57 -0.026750 -0.285558 -3.56 -0.026916 -0.286437 -3.55 -0.027085 -0.287321 -3.54 -0.027254 -0.288211 -3.53 -0.027426 -0.289106 -3.52 -0.027599 -0.290006 -3.51 -0.027774 -0.290912 -3.5 -0.027950 -0.291824 -3.49 -0.028128 -0.292742 -3.48 -0.028308 -0.293665 -3.47 -0.028490 -0.294594 -3.46 -0.028673 -0.295529 -3.45 -0.028858 -0.296470 -3.44 -0.029045 -0.297416 -3.43 -0.029233 -0.298369 -3.42 -0.029424 -0.299328 -3.41 -0.029616 -0.300293 -3.4 -0.029810 -0.301264 -3.39 -0.030007 -0.302241 -3.38 -0.030205 -0.303225 -3.37 -0.030405 -0.304215 -3.36 -0.030607 -0.305212 -3.35 -0.030811 -0.306215 -3.34 -0.031017 -0.307224 -3.33 -0.031225 -0.308241 -3.32 -0.031436 -0.309264 -3.31 -0.031648 -0.310293 -3.3 -0.031863 -0.311330 -3.29 -0.032079 -0.312373 -3.28 -0.032298 -0.313423 -3.27 -0.032520 -0.314481 -3.26 -0.032743 -0.315545 -3.25 -0.032969 -0.316617 -3.24 -0.033197 -0.317696 -3.23 -0.033428 -0.318782 -3.22 -0.033661 -0.319875 -3.21 -0.033896 -0.320976 -3.2 -0.034134 -0.322085 -3.19 -0.034374 -0.323201 -3.18 -0.034617 -0.324325 -3.17 -0.034863 -0.325457 -3.16 -0.035111 -0.326596 -3.15 -0.035362 -0.327743 -3.14 -0.035615 -0.328899 -3.13 -0.035872 -0.330062 -3.12 -0.036131 -0.331234 -3.11 -0.036392 -0.332414 -3.1 -0.036657 -0.333602 -3.09 -0.036925 -0.334799 -3.08 -0.037195 -0.336004 -3.07 -0.037469 -0.337218 -3.06 -0.037745 -0.338441 -3.05 -0.038025 -0.339672 -3.04 -0.038307 -0.340912 -3.03 -0.038593 -0.342162 -3.02 -0.038882 -0.343420 -3.01 -0.039174 -0.344688 -3 -0.039470 -0.345965 -2.99 -0.039769 -0.347251 -2.98 -0.040071 -0.348547 -2.97 -0.040377 -0.349852 -2.96 -0.040687 -0.351167 -2.95 -0.040999 -0.352492 -2.94 -0.041316 -0.353827 -2.93 -0.041636 -0.355171 -2.92 -0.041960 -0.356526 -2.91 -0.042288 -0.357892 -2.9 -0.042619 -0.359267 -2.89 -0.042955 -0.360653 -2.88 -0.043294 -0.362050 -2.87 -0.043638 -0.363457 -2.86 -0.043985 -0.364876 -2.85 -0.044337 -0.366305 -2.84 -0.044693 -0.367745 -2.83 -0.045053 -0.369197 -2.82 -0.045418 -0.370660 -2.81 -0.045787 -0.372134 -2.8 -0.046160 -0.373620 -2.79 -0.046538 -0.375118 -2.78 -0.046921 -0.376628 -2.77 -0.047309 -0.378149 -2.76 -0.047701 -0.379683 -2.75 -0.048098 -0.381230 -2.74 -0.048501 -0.382788 -2.73 -0.048908 -0.384360 -2.72 -0.049320 -0.385944 -2.71 -0.049738 -0.387541 -2.7 -0.050161 -0.389151 -2.69 -0.050589 -0.390774 -2.68 -0.051023 -0.392411 -2.67 -0.051463 -0.394061 -2.66 -0.051908 -0.395725 -2.65 -0.052359 -0.397403 -2.64 -0.052816 -0.399095 -2.63 -0.053279 -0.400802 -2.62 -0.053747 -0.402522 -2.61 -0.054223 -0.404258 -2.6 -0.054704 -0.406008 -2.59 -0.055192 -0.407773 -2.58 -0.055686 -0.409553 -2.57 -0.056188 -0.411349 -2.56 -0.056695 -0.413160 -2.55 -0.057210 -0.414987 -2.54 -0.057732 -0.416830 -2.53 -0.058261 -0.418689 -2.52 -0.058797 -0.420564 -2.51 -0.059341 -0.422456 -2.5 -0.059892 -0.424365 -2.49 -0.060451 -0.426291 -2.48 -0.061018 -0.428234 -2.47 -0.061593 -0.430195 -2.46 -0.062176 -0.432173 -2.45 -0.062767 -0.434169 -2.44 -0.063367 -0.436183 -2.43 -0.063975 -0.438216 -2.42 -0.064592 -0.440268 -2.41 -0.065218 -0.442338 -2.4 -0.065853 -0.444428 -2.39 -0.066498 -0.446537 -2.38 -0.067152 -0.448665 -2.37 -0.067815 -0.450814 -2.36 -0.068489 -0.452983 -2.35 -0.069172 -0.455173 -2.34 -0.069866 -0.457383 -2.33 -0.070570 -0.459614 -2.32 -0.071285 -0.461867 -2.31 -0.072011 -0.464142 -2.3 -0.072748 -0.466438 -2.29 -0.073496 -0.468757 -2.28 -0.074256 -0.471099 -2.27 -0.075028 -0.473463 -2.26 -0.075811 -0.475851 -2.25 -0.076607 -0.478263 -2.24 -0.077416 -0.480698 -2.23 -0.078237 -0.483158 -2.22 -0.079072 -0.485642 -2.21 -0.079920 -0.488152 -2.2 -0.080781 -0.490687 -2.19 -0.081657 -0.493247 -2.18 -0.082547 -0.495834 -2.17 -0.083451 -0.498448 -2.16 -0.084370 -0.501088 -2.15 -0.085305 -0.503756 -2.14 -0.086255 -0.506451 -2.13 -0.087221 -0.509175 -2.12 -0.088203 -0.511927 -2.11 -0.089202 -0.514709 -2.1 -0.090218 -0.517520 -2.09 -0.091251 -0.520361 -2.08 -0.092302 -0.523232 -2.07 -0.093371 -0.526134 -2.06 -0.094459 -0.529068 -2.05 -0.095566 -0.532033 -2.04 -0.096692 -0.535031 -2.03 -0.097839 -0.538062 -2.02 -0.099006 -0.541126 -2.01 -0.100193 -0.544224 -2 -0.101402 -0.547357 -1.99 -0.102633 -0.550524 -1.98 -0.103887 -0.553728 -1.97 -0.105163 -0.556967 -1.96 -0.106463 -0.560243 -1.95 -0.107787 -0.563557 -1.94 -0.109136 -0.566908 -1.93 -0.110511 -0.570298 -1.92 -0.111911 -0.573728 -1.91 -0.113338 -0.577197 -1.9 -0.114792 -0.580706 -1.89 -0.116274 -0.584257 -1.88 -0.117785 -0.587850 -1.87 -0.119326 -0.591485 -1.86 -0.120897 -0.595164 -1.85 -0.122498 -0.598887 -1.84 -0.124132 -0.602655 -1.83 -0.125798 -0.606468 -1.82 -0.127498 -0.610327 -1.81 -0.129233 -0.614234 -1.8 -0.131003 -0.618188 -1.79 -0.132809 -0.622192 -1.78 -0.134653 -0.626244 -1.77 -0.136535 -0.630348 -1.76 -0.138456 -0.634502 -1.75 -0.140418 -0.638709 -1.74 -0.142422 -0.642970 -1.73 -0.144468 -0.647284 -1.72 -0.146559 -0.651653 -1.71 -0.148695 -0.656078 -1.7 -0.150878 -0.660560 -1.69 -0.153109 -0.665100 -1.68 -0.155389 -0.669700 -1.67 -0.157720 -0.674359 -1.66 -0.160103 -0.679079 -1.65 -0.162541 -0.683862 -1.64 -0.165034 -0.688708 -1.63 -0.167584 -0.693618 -1.62 -0.170193 -0.698594 -1.61 -0.172863 -0.703637 -1.6 -0.175596 -0.708748 -1.59 -0.178394 -0.713928 -1.58 -0.181258 -0.719178 -1.57 -0.184190 -0.724500 -1.56 -0.187194 -0.729895 -1.55 -0.190271 -0.735365 -1.54 -0.193424 -0.740909 -1.53 -0.196654 -0.746531 -1.52 -0.199965 -0.752231 -1.51 -0.203360 -0.758011 -1.5 -0.206840 -0.763871 -1.49 -0.210409 -0.769814 -1.48 -0.214070 -0.775841 -1.47 -0.217826 -0.781954 -1.46 -0.221680 -0.788153 -1.45 -0.225635 -0.794440 -1.44 -0.229696 -0.800817 -1.43 -0.233865 -0.807286 -1.42 -0.238147 -0.813847 -1.41 -0.242545 -0.820502 -1.4 -0.247064 -0.827253 -1.39 -0.251708 -0.834102 -1.38 -0.256481 -0.841049 -1.37 -0.261388 -0.848097 -1.36 -0.266435 -0.855246 -1.35 -0.271625 -0.862499 -1.34 -0.276965 -0.869856 -1.33 -0.282461 -0.877320 -1.32 -0.288117 -0.884891 -1.31 -0.293940 -0.892571 -1.3 -0.299937 -0.900362 -1.29 -0.306113 -0.908264 -1.28 -0.312477 -0.916278 -1.27 -0.319035 -0.924407 -1.26 -0.325794 -0.932650 -1.25 -0.332764 -0.941009 -1.24 -0.339951 -0.949484 -1.23 -0.347365 -0.958077 -1.22 -0.355015 -0.966787 -1.21 -0.362909 -0.975616 -1.2 -0.371059 -0.984563 -1.19 -0.379474 -0.993628 -1.18 -0.388165 -1.002811 -1.17 -0.397143 -1.012111 -1.16 -0.406420 -1.021527 -1.15 -0.416009 -1.031059 -1.14 -0.425921 -1.040705 -1.13 -0.436171 -1.050462 -1.12 -0.446772 -1.060329 -1.11 -0.457739 -1.070303 -1.1 -0.469086 -1.080379 -1.09 -0.480830 -1.090555 -1.08 -0.492986 -1.100825 -1.07 -0.505572 -1.111184 -1.06 -0.518605 -1.121626 -1.05 -0.532104 -1.132144 -1.04 -0.546087 -1.142730 -1.03 -0.560573 -1.153376 -1.02 -0.575584 -1.164070 -1.01 -0.591140 -1.174802 -1 -0.607262 -1.185559 -0.99 -0.623972 -1.196327 -0.98 -0.641294 -1.207091 -0.97 -0.659250 -1.217834 -0.96 -0.677864 -1.228537 -0.95 -0.697160 -1.239179 -0.94 -0.717163 -1.249736 -0.93 -0.737898 -1.260184 -0.92 -0.759389 -1.270496 -0.91 -0.781661 -1.280640 -0.9 -0.804740 -1.290584 -0.89 -0.828649 -1.300293 -0.88 -0.853413 -1.309727 -0.87 -0.879054 -1.318844 -0.86 -0.905595 -1.327599 -0.85 -0.933056 -1.335943 -0.84 -0.961456 -1.343823 -0.83 -0.990813 -1.351182 -0.82 -1.021139 -1.357961 -0.81 -1.052447 -1.364096 -0.8 -1.084743 -1.369518 -0.79 -1.118032 -1.374157 -0.78 -1.152313 -1.377937 -0.77 -1.187579 -1.380780 -0.76 -1.223817 -1.382605 -0.75 -1.261011 -1.383329 -0.74 -1.299133 -1.382864 -0.73 -1.338153 -1.381125 -0.72 -1.378028 -1.378023 -0.71 -1.418709 -1.373470 -0.7 -1.460140 -1.367378 -0.69 -1.502252 -1.359664 -0.68 -1.544971 -1.350243 -0.67 -1.588211 -1.339040 -0.66 -1.631879 -1.325981 -0.65 -1.675874 -1.311000 -0.64 -1.720087 -1.294039 -0.63 -1.764403 -1.275047 -0.62 -1.808700 -1.253984 -0.61 -1.852853 -1.230819 -0.6 -1.896734 -1.205531 -0.59 -1.940213 -1.178110 -0.58 -1.983157 -1.148556 -0.57 -2.025436 -1.116879 -0.56 -2.066921 -1.083100 -0.55 -2.107485 -1.047246 -0.54 -2.147003 -1.009355 -0.53 -2.185354 -0.969472 -0.52 -2.222419 -0.927647 -0.51 -2.258083 -0.883941 -0.5 -2.292234 -0.838417 -0.49 -2.324763 -0.791149 -0.48 -2.355564 -0.742214 -0.47 -2.384535 -0.691701 -0.46 -2.411578 -0.639702 -0.45 -2.436600 -0.586320 -0.44 -2.459516 -0.531666 -0.43 -2.480246 -0.475858 -0.42 -2.498722 -0.419022 -0.41 -2.514887 -0.361290 -0.4 -2.528695 -0.302797 -0.39 -2.540112 -0.243683 -0.38 -2.549120 -0.184086 -0.37 -2.555712 -0.124142 -0.36 -2.559893 -0.063983 -0.35 -2.561679 -0.003732 -0.34 -2.561094 0.056492 -0.33 -2.558166 0.116585 -0.32 -2.552927 0.176448 -0.31 -2.545408 0.235992 -0.3 -2.535639 0.295133 -0.29 -2.523644 0.353794 -0.28 -2.509443 0.411899 -0.27 -2.493049 0.469370 -0.26 -2.474473 0.526126 -0.25 -2.453720 0.582079 -0.24 -2.430796 0.637132 -0.23 -2.405710 0.691179 -0.22 -2.378475 0.744101 -0.21 -2.349115 0.795770 -0.2 -2.317667 0.846050 -0.19 -2.284182 0.894798 -0.18 -2.248732 0.941868 -0.17 -2.211407 0.987114 -0.16 -2.172317 1.030396 -0.15 -2.131592 1.071582 -0.14 -2.089381 1.110552 -0.13 -2.045848 1.147203 -0.12 -2.001170 1.181450 -0.11 -1.955535 1.213231 -0.1 -1.909135 1.242503 -0.090000 -1.862167 1.269247 -0.080000 -1.814824 1.293467 -0.070000 -1.767296 1.315187 -0.060000 -1.719763 1.334452 -0.050000 -1.672397 1.351323 -0.040000 -1.625358 1.365877 -0.030000 -1.578790 1.378205 -0.020000 -1.532824 1.388406 -0.010000 -1.487576 1.396590 0 -1.443147 1.402871 0.009999 -1.399622 1.407366 0.019999 -1.357072 1.410194 0.029999 -1.315556 1.411475 0.039999 -1.275118 1.411325 0.049999 -1.235793 1.409861 0.059999 -1.197604 1.407192 0.069999 -1.160565 1.403425 0.079999 -1.124681 1.398662 0.089999 -1.089952 1.393000 0.099999 -1.056369 1.386528 0.11 -1.023920 1.379333 0.12 -0.992587 1.371493 0.13 -0.962349 1.363082 0.14 -0.933182 1.354168 0.15 -0.905060 1.344815 0.16 -0.877954 1.335079 0.17 -0.851834 1.325015 0.18 -0.826670 1.314671 0.19 -0.802432 1.304091 0.2 -0.779087 1.293316 0.21 -0.756604 1.282382 0.22 -0.734952 1.271322 0.23 -0.714100 1.260166 0.24 -0.694017 1.248942 0.25 -0.674675 1.237673 0.26 -0.656043 1.226382 0.27 -0.638095 1.215088 0.28 -0.620801 1.203808 0.29 -0.604136 1.192559 0.3 -0.588074 1.181354 0.31 -0.572590 1.170206 0.32 -0.557661 1.159124 0.33 -0.543264 1.148120 0.34 -0.529376 1.137200 0.35 -0.515976 1.126373 0.36 -0.503045 1.115645 0.37 -0.490563 1.105021 0.38 -0.478511 1.094507 0.39 -0.466871 1.084105 0.4 -0.455628 1.073820 0.41 -0.444763 1.063653 0.42 -0.434262 1.053608 0.43 -0.424110 1.043686 0.44 -0.414293 1.033888 0.45 -0.404796 1.024216 0.46 -0.395608 1.014669 0.47 -0.386716 1.005249 0.48 -0.378108 0.995955 0.49 -0.369773 0.986788 0.5 -0.361700 0.977746 0.51 -0.353878 0.968830 0.52 -0.346298 0.960038 0.53 -0.338951 0.951369 0.54 -0.331827 0.942824 0.55 -0.324918 0.934400 0.56 -0.318216 0.926096 0.57 -0.311713 0.917911 0.58 -0.305402 0.909844 0.59 -0.299275 0.901893 0.6 -0.293325 0.894057 0.61 -0.287546 0.886334 0.62 -0.281932 0.878723 0.63 -0.276477 0.871222 0.64 -0.271174 0.863830 0.65 -0.266019 0.856544 0.66 -0.261007 0.849364 0.67 -0.256131 0.842287 0.68 -0.251388 0.835313 0.69 -0.246773 0.828439 0.7 -0.242281 0.821663 0.71 -0.237908 0.814985 0.72 -0.233651 0.808402 0.73 -0.229504 0.801913 0.74 -0.225465 0.795516 0.75 -0.221529 0.789210 0.76 -0.217694 0.782993 0.77 -0.213956 0.776864 0.78 -0.210312 0.770821 0.79 -0.206759 0.764862 0.8 -0.203294 0.758986 0.81 -0.199913 0.753193 0.82 -0.196616 0.747479 0.83 -0.193397 0.741844 0.84 -0.190256 0.736287 0.85 -0.187190 0.730805 0.86 -0.184197 0.725399 0.87 -0.181274 0.720065 0.88 -0.178419 0.714804 0.89 -0.175630 0.709614 0.9 -0.172905 0.704493 0.91 -0.170242 0.699440 0.92 -0.167640 0.694454 0.93 -0.165096 0.689534 0.94 -0.162609 0.684679 0.95 -0.160177 0.679888 0.96 -0.157799 0.675159 0.97 -0.155472 0.670491 0.98 -0.153197 0.665883 0.99 -0.150970 0.661335 1 -0.148791 0.656845 1.01 -0.146659 0.652412 1.02 -0.144571 0.648035 1.03 -0.142528 0.643714 1.04 -0.140527 0.639446 1.05 -0.138567 0.635232 1.06 -0.136648 0.631071 1.07 -0.134768 0.626960 1.08 -0.132927 0.622901 1.09 -0.131122 0.618891 1.1 -0.129354 0.614930 1.11 -0.127621 0.611017 1.12 -0.125922 0.607151 1.13 -0.124257 0.603332 1.14 -0.122624 0.599558 1.15 -0.121023 0.595829 1.16 -0.119453 0.592145 1.17 -0.117913 0.588503 1.18 -0.116403 0.584905 1.19 -0.114921 0.581348 1.2 -0.113467 0.577833 1.21 -0.112040 0.574358 1.22 -0.110640 0.570923 1.23 -0.109266 0.567528 1.24 -0.107917 0.564171 1.25 -0.106593 0.560852 1.26 -0.105293 0.557571 1.27 -0.104016 0.554326 1.28 -0.102762 0.551118 1.29 -0.101531 0.547945 1.3 -0.100321 0.544808 1.31 -0.099133 0.541705 1.32 -0.097966 0.538636 1.33 -0.096819 0.535600 1.34 -0.095692 0.532598 1.35 -0.094585 0.529628 1.36 -0.093496 0.526689 1.37 -0.092427 0.523782 1.38 -0.091375 0.520907 1.39 -0.090341 0.518061 1.4 -0.089324 0.515246 1.41 -0.088325 0.512460 1.42 -0.087342 0.509703 1.43 -0.086375 0.506975 1.44 -0.085424 0.504276 1.45 -0.084489 0.501604 1.46 -0.083569 0.498959 1.47 -0.082664 0.496342 1.48 -0.081773 0.493751 1.49 -0.080897 0.491186 1.5 -0.080034 0.488647 1.51 -0.079186 0.486134 1.52 -0.078350 0.483645 1.53 -0.077528 0.481182 1.54 -0.076719 0.478742 1.55 -0.075922 0.476327 1.56 -0.075137 0.473936 1.57 -0.074365 0.471567 1.58 -0.073604 0.469222 1.59 -0.072855 0.466900 1.6 -0.072117 0.464600 1.61 -0.071390 0.462321 1.62 -0.070674 0.460065 1.63 -0.069969 0.457830 1.64 -0.069275 0.455616 1.65 -0.068590 0.453423 1.66 -0.067916 0.451251 1.67 -0.067251 0.449099 1.68 -0.066597 0.446967 1.69 -0.065951 0.444855 1.7 -0.065315 0.442762 1.71 -0.064688 0.440688 1.72 -0.064070 0.438634 1.73 -0.063461 0.436598 1.74 -0.062861 0.434580 1.75 -0.062269 0.432581 1.76 -0.061685 0.430600 1.77 -0.061109 0.428636 1.78 -0.060542 0.426690 1.79 -0.059982 0.424761 1.8 -0.059430 0.422850 1.81 -0.058885 0.420955 1.82 -0.058348 0.419076 1.83 -0.057818 0.417215 1.84 -0.057296 0.415369 1.85 -0.056780 0.413539 1.86 -0.056271 0.411725 1.87 -0.055770 0.409927 1.88 -0.055274 0.408144 1.89 -0.054786 0.406376 1.9 -0.054303 0.404623 1.91 -0.053828 0.402885 1.92 -0.053358 0.401162 1.93 -0.052894 0.399453 1.94 -0.052437 0.397759 1.95 -0.051985 0.396078 1.96 -0.051539 0.394412 1.97 -0.051099 0.392759 1.98 -0.050664 0.391120 1.99 -0.050235 0.389494 2 -0.049812 0.387881 2.01 -0.049393 0.386282 2.02 -0.048980 0.384695 2.03 -0.048572 0.383122 2.04 -0.048169 0.381561 2.05 -0.047771 0.380012 2.06 -0.047378 0.378476 2.07 -0.046990 0.376952 2.08 -0.046607 0.375440 2.09 -0.046228 0.373940 2.1 -0.045854 0.372452 2.11 -0.045484 0.370975 2.12 -0.045119 0.369510 2.13 -0.044758 0.368056 2.14 -0.044401 0.366614 2.15 -0.044049 0.365183 2.16 -0.043701 0.363762 2.17 -0.043357 0.362353 2.18 -0.043017 0.360954 2.19 -0.042681 0.359566 2.2 -0.042349 0.358188 2.21 -0.042021 0.356821 2.22 -0.041696 0.355464 2.23 -0.041375 0.354118 2.24 -0.041058 0.352781 2.25 -0.040745 0.351454 2.26 -0.040435 0.350137 2.27 -0.040129 0.348830 2.28 -0.039826 0.347532 2.29 -0.039526 0.346244 2.3 -0.039230 0.344966 2.31 -0.038937 0.343696 2.32 -0.038648 0.342436 2.33 -0.038362 0.341185 2.34 -0.038078 0.339943 2.35 -0.037798 0.338710 2.36 -0.037521 0.337486 2.37 -0.037247 0.336270 2.38 -0.036976 0.335063 2.39 -0.036708 0.333865 2.4 -0.036443 0.332675 2.41 -0.036181 0.331493 2.42 -0.035922 0.330320 2.43 -0.035665 0.329155 2.44 -0.035411 0.327998 2.45 -0.035160 0.326849 2.46 -0.034911 0.325708 2.47 -0.034665 0.324574 2.48 -0.034422 0.323449 2.49 -0.034181 0.322331 2.5 -0.033943 0.321221 2.51 -0.033707 0.320119 2.52 -0.033474 0.319024 2.53 -0.033243 0.317936 2.54 -0.033014 0.316856 2.55 -0.032788 0.315783 2.56 -0.032564 0.314717 2.57 -0.032342 0.313658 2.58 -0.032123 0.312606 2.59 -0.031906 0.311562 2.6 -0.031691 0.310524 2.61 -0.031478 0.309493 2.62 -0.031267 0.308468 2.63 -0.031059 0.307451 2.64 -0.030852 0.306440 2.65 -0.030648 0.305436 2.66 -0.030445 0.304438 2.67 -0.030245 0.303446 2.68 -0.030047 0.302461 2.69 -0.029850 0.301483 2.7 -0.029655 0.300510 2.71 -0.029463 0.299544 2.72 -0.029272 0.298584 2.73 -0.029083 0.297630 2.74 -0.028896 0.296682 2.75 -0.028710 0.295740 2.76 -0.028527 0.294804 2.77 -0.028345 0.293873 2.78 -0.028165 0.292949 2.79 -0.027987 0.292030 2.8 -0.027810 0.291117 2.81 -0.027635 0.290210 2.82 -0.027461 0.289308 2.83 -0.027290 0.288412 2.84 -0.027119 0.287521 2.85 -0.026951 0.286636 2.86 -0.026784 0.285756 2.87 -0.026618 0.284882 2.88 -0.026454 0.284013 2.89 -0.026292 0.283149 2.9 -0.026131 0.282290 2.91 -0.025972 0.281436 2.92 -0.025814 0.280588 2.93 -0.025657 0.279744 2.94 -0.025502 0.278906 2.95 -0.025348 0.278073 2.96 -0.025196 0.277244 2.97 -0.025045 0.276420 2.98 -0.024895 0.275602 2.99 -0.024747 0.274788 3 -0.024600 0.273979 3.01 -0.024454 0.273174 3.02 -0.024310 0.272374 3.03 -0.024167 0.271579 3.04 -0.024025 0.270789 3.05 -0.023884 0.270003 3.06 -0.023745 0.269221 3.07 -0.023607 0.268444 3.08 -0.023470 0.267672 3.09 -0.023334 0.266903 3.1 -0.023199 0.266140 3.11 -0.023066 0.265380 3.12 -0.022933 0.264625 3.13 -0.022802 0.263874 3.14 -0.022672 0.263128 3.15 -0.022543 0.262385 3.16 -0.022415 0.261647 3.17 -0.022289 0.260913 3.18 -0.022163 0.260182 3.19 -0.022038 0.259456 3.2 -0.021915 0.258734 3.21 -0.021792 0.258016 3.22 -0.021671 0.257302 3.23 -0.021550 0.256592 3.24 -0.021431 0.255886 3.25 -0.021312 0.255183 3.26 -0.021195 0.254485 3.27 -0.021078 0.253790 3.28 -0.020962 0.253099 3.29 -0.020848 0.252411 3.3 -0.020734 0.251728 3.31 -0.020621 0.251048 3.32 -0.020509 0.250372 3.33 -0.020398 0.249699 3.34 -0.020288 0.249030 3.35 -0.020179 0.248364 3.36 -0.020071 0.247702 3.37 -0.019963 0.247044 3.38 -0.019857 0.246389 3.39 -0.019751 0.245737 3.4 -0.019646 0.245089 3.41 -0.019542 0.244444 3.42 -0.019439 0.243803 3.43 -0.019336 0.243164 3.44 -0.019235 0.242530 3.45 -0.019134 0.241898 3.46 -0.019034 0.241270 3.47 -0.018935 0.240645 3.48 -0.018836 0.240023 3.49 -0.018738 0.239405 3.5 -0.018642 0.238789 3.51 -0.018545 0.238177 3.52 -0.018450 0.237568 3.53 -0.018355 0.236962 3.54 -0.018261 0.236359 3.55 -0.018168 0.235759 3.56 -0.018075 0.235162 3.57 -0.017983 0.234568 3.58 -0.017892 0.233977 3.59 -0.017802 0.233389 3.6 -0.017712 0.232804 3.61 -0.017623 0.232222 3.62 -0.017535 0.231643 3.63 -0.017447 0.231066 3.64 -0.017360 0.230493 3.65 -0.017273 0.229922 3.66 -0.017187 0.229354 3.67 -0.017102 0.228789 3.68 -0.017018 0.228227 3.69 -0.016934 0.227667 3.7 -0.016850 0.227110 3.71 -0.016768 0.226556 3.72 -0.016686 0.226004 3.73 -0.016604 0.225456 3.74 -0.016523 0.224909 3.75 -0.016443 0.224366 3.76 -0.016363 0.223825 3.77 -0.016284 0.223287 3.78 -0.016206 0.222751 3.79 -0.016128 0.222218 3.8 -0.016050 0.221687 3.81 -0.015973 0.221159 3.82 -0.015897 0.220633 3.83 -0.015821 0.220110 3.84 -0.015746 0.219589 3.85 -0.015671 0.219071 3.86 -0.015597 0.218555 3.87 -0.015523 0.218042 3.88 -0.015450 0.217531 3.89 -0.015378 0.217022 3.9 -0.015305 0.216516 3.91 -0.015234 0.216012 3.92 -0.015163 0.215510 3.93 -0.015092 0.215011 3.94 -0.015022 0.214514 3.95 -0.014952 0.214019 3.96 -0.014883 0.213527 3.97 -0.014815 0.213037 3.98 -0.014746 0.212549 3.99 -0.014679 0.212063 4 -0.014611 0.211579 4.01 -0.014545 0.211098 4.02 -0.014478 0.210619 4.03 -0.014412 0.210142 4.04 -0.014347 0.209667 4.05 -0.014282 0.209194 4.06 -0.014217 0.208724 4.07 -0.014153 0.208255 4.08 -0.014090 0.207789 4.09 -0.014026 0.207325 4.1 -0.013963 0.206862 4.11 -0.013901 0.206402 4.12 -0.013839 0.205944 4.13 -0.013777 0.205488 4.14 -0.013716 0.205034 4.15 -0.013656 0.204581 4.16 -0.013595 0.204131 4.17 -0.013535 0.203683 4.18 -0.013476 0.203237 4.19 -0.013416 0.202793 4.2 -0.013358 0.202350 4.21 -0.013299 0.201910 4.22 -0.013241 0.201471 4.23 -0.013184 0.201035 4.24 -0.013126 0.200600 4.25 -0.013069 0.200167 4.26 -0.013013 0.199736 4.27 -0.012957 0.199307 4.28 -0.012901 0.198879 4.29 -0.012846 0.198454 4.3 -0.012790 0.198030 4.31 -0.012736 0.197608 4.32 -0.012681 0.197188 4.33 -0.012627 0.196770 4.34 -0.012574 0.196353 4.35 -0.012520 0.195938 4.36 -0.012467 0.195525 4.37 -0.012415 0.195114 4.38 -0.012362 0.194704 4.39 -0.012310 0.194296 4.4 -0.012259 0.193890 4.41 -0.012207 0.193486 4.42 -0.012156 0.193083 4.43 -0.012106 0.192682 4.44 -0.012055 0.192282 4.45 -0.012005 0.191884 4.46 -0.011955 0.191488 4.47 -0.011906 0.191093 4.48 -0.011857 0.190700 4.49 -0.011808 0.190309 4.5 -0.011759 0.189919 4.51 -0.011711 0.189531 4.52 -0.011663 0.189144 4.53 -0.011615 0.188759 4.54 -0.011568 0.188376 4.55 -0.011521 0.187994 4.56 -0.011474 0.187613 4.57 -0.011428 0.187235 4.58 -0.011381 0.186857 4.59 -0.011335 0.186481 4.6 -0.011290 0.186107 4.61 -0.011244 0.185734 4.62 -0.011199 0.185363 4.63 -0.011154 0.184993 4.64 -0.011110 0.184625 4.65 -0.011066 0.184258 4.66 -0.011021 0.183892 4.67 -0.010978 0.183528 4.68 -0.010934 0.183166 4.69 -0.010891 0.182804 4.7 -0.010848 0.182445 4.71 -0.010805 0.182086 4.72 -0.010763 0.181729 4.73 -0.010720 0.181374 4.74 -0.010678 0.181020 4.75 -0.010637 0.180667 4.76 -0.010595 0.180315 4.77 -0.010554 0.179965 4.78 -0.010513 0.179617 4.79 -0.010472 0.179269 4.8 -0.010431 0.178923 4.81 -0.010391 0.178578 4.82 -0.010351 0.178235 4.83 -0.010311 0.177893 4.84 -0.010271 0.177552 4.85 -0.010232 0.177213 4.86 -0.010193 0.176875 4.87 -0.010154 0.176538 4.88 -0.010115 0.176202 4.89 -0.010077 0.175868 4.9 -0.010038 0.175535 4.91 -0.010000 0.175203 4.92 -0.009962 0.174872 4.93 -0.009925 0.174543 4.94 -0.009887 0.174215 4.95 -0.009850 0.173888 4.96 -0.009813 0.173562 4.97 -0.009776 0.173238 4.98 -0.009740 0.172915 4.99 -0.009703 0.172593 5 -0.009667 0.172272 5.01 -0.009631 0.171952 5.02 -0.009595 0.171634 5.03 -0.009560 0.171317 5.04 -0.009525 0.171000 5.05 -0.009489 0.170685 5.06 -0.009454 0.170372 5.07 -0.009420 0.170059 5.08 -0.009385 0.169748 5.09 -0.009350 0.169437 5.1 -0.009316 0.169128 5.11 -0.009282 0.168820 5.12 -0.009248 0.168513 5.13 -0.009215 0.168207 5.14 -0.009181 0.167902 5.15 -0.009148 0.167598 5.16 -0.009115 0.167296 5.17 -0.009082 0.166994 5.18 -0.009049 0.166694 5.19 -0.009016 0.166395 5.2 -0.008984 0.166096 5.21 -0.008952 0.165799 5.22 -0.008920 0.165503 5.23 -0.008888 0.165208 5.24 -0.008856 0.164914 5.25 -0.008825 0.164621 5.26 -0.008793 0.164329 5.27 -0.008762 0.164038 5.28 -0.008731 0.163748 5.29 -0.008700 0.163459 5.3 -0.008669 0.163171 5.31 -0.008639 0.162884 5.32 -0.008608 0.162599 5.33 -0.008578 0.162314 5.34 -0.008548 0.162030 5.35 -0.008518 0.161747 5.36 -0.008488 0.161465 5.37 -0.008459 0.161184 5.38 -0.008429 0.160904 5.39 -0.008400 0.160625 5.4 -0.008371 0.160347 5.41 -0.008342 0.160070 5.42 -0.008313 0.159794 5.43 -0.008284 0.159519 5.44 -0.008256 0.159245 5.45 -0.008227 0.158972 5.46 -0.008199 0.158699 5.47 -0.008171 0.158428 5.48 -0.008143 0.158157 5.49 -0.008115 0.157888 5.5 -0.008087 0.157619 5.51 -0.008060 0.157351 5.52 -0.008033 0.157085 5.53 -0.008005 0.156819 5.54 -0.007978 0.156554 5.55 -0.007951 0.156290 5.56 -0.007924 0.156026 5.57 -0.007898 0.155764 5.58 -0.007871 0.155503 5.59 -0.007845 0.155242 5.6 -0.007818 0.154982 5.61 -0.007792 0.154723 5.62 -0.007766 0.154465 5.63 -0.007740 0.154208 5.64 -0.007714 0.153952 5.65 -0.007689 0.153696 5.66 -0.007663 0.153442 5.67 -0.007638 0.153188 5.68 -0.007612 0.152935 5.69 -0.007587 0.152683 5.7 -0.007562 0.152432 5.71 -0.007537 0.152181 5.72 -0.007513 0.151932 5.73 -0.007488 0.151683 5.74 -0.007463 0.151435 5.75 -0.007439 0.151188 5.76 -0.007415 0.150941 5.77 -0.007390 0.150696 5.78 -0.007366 0.150451 5.79 -0.007342 0.150207 5.8 -0.007319 0.149964 5.81 -0.007295 0.149721 5.82 -0.007271 0.149480 5.83 -0.007248 0.149239 5.84 -0.007224 0.148999 5.85 -0.007201 0.148760 5.86 -0.007178 0.148521 5.87 -0.007155 0.148283 5.88 -0.007132 0.148046 5.89 -0.007109 0.147810 5.9 -0.007087 0.147574 5.91 -0.007064 0.147340 5.92 -0.007041 0.147106 5.93 -0.007019 0.146872 5.94 -0.006997 0.146640 5.95 -0.006975 0.146408 5.96 -0.006953 0.146177 5.97 -0.006931 0.145946 5.98 -0.006909 0.145717 5.99 -0.006887 0.145488 6 -0.006865 0.145260 6.01 -0.006844 0.145032 6.02 -0.006822 0.144805 6.03 -0.006801 0.144579 6.04 -0.006780 0.144354 6.05 -0.006759 0.144129 6.06 -0.006738 0.143905 6.07 -0.006717 0.143682 6.08 -0.006696 0.143460 6.09 -0.006675 0.143238 6.1 -0.006654 0.143016 6.11 -0.006634 0.142796 6.12 -0.006613 0.142576 6.13 -0.006593 0.142357 6.14 -0.006573 0.142138 6.15 -0.006553 0.141921 6.16 -0.006532 0.141703 6.17 -0.006512 0.141487 6.18 -0.006493 0.141271 6.19 -0.006473 0.141056 6.2 -0.006453 0.140841 6.21 -0.006433 0.140627 6.22 -0.006414 0.140414 6.23 -0.006394 0.140202 6.24 -0.006375 0.139990 6.25 -0.006356 0.139778 6.26 -0.006336 0.139568 6.27 -0.006317 0.139358 6.28 -0.006298 0.139148 6.29 -0.006279 0.138939 6.3 -0.006261 0.138731 6.31 -0.006242 0.138524 6.32 -0.006223 0.138317 6.33 -0.006205 0.138110 6.34 -0.006186 0.137905 6.35 -0.006168 0.137700 6.36 -0.006149 0.137495 6.37 -0.006131 0.137291 6.38 -0.006113 0.137088 6.39 -0.006095 0.136885 6.4 -0.006077 0.136683 6.41 -0.006059 0.136482 6.42 -0.006041 0.136281 6.43 -0.006023 0.136081 6.44 -0.006005 0.135881 6.45 -0.005988 0.135682 6.46 -0.005970 0.135483 6.47 -0.005953 0.135285 6.48 -0.005935 0.135088 6.49 -0.005918 0.134891 6.5 -0.005901 0.134695 6.51 -0.005884 0.134499 6.52 -0.005866 0.134304 6.53 -0.005849 0.134110 6.54 -0.005832 0.133916 6.55 -0.005816 0.133722 6.56 -0.005799 0.133529 6.57 -0.005782 0.133337 6.58 -0.005765 0.133145 6.59 -0.005749 0.132954 6.6 -0.005732 0.132763 6.61 -0.005716 0.132573 6.62 -0.005699 0.132384 6.63 -0.005683 0.132195 6.64 -0.005667 0.132006 6.65 -0.005651 0.131818 6.66 -0.005635 0.131631 6.67 -0.005619 0.131444 6.68 -0.005603 0.131258 6.69 -0.005587 0.131072 6.7 -0.005571 0.130886 6.71 -0.005555 0.130702 6.72 -0.005540 0.130517 6.73 -0.005524 0.130334 6.74 -0.005508 0.130150 6.75 -0.005493 0.129968 6.76 -0.005477 0.129786 6.77 -0.005462 0.129604 6.78 -0.005447 0.129423 6.79 -0.005432 0.129242 6.8 -0.005416 0.129062 6.81 -0.005401 0.128882 6.82 -0.005386 0.128703 6.83 -0.005371 0.128524 6.84 -0.005356 0.128346 6.85 -0.005341 0.128168 6.86 -0.005327 0.127991 6.87 -0.005312 0.127814 6.88 -0.005297 0.127638 6.89 -0.005283 0.127462 6.9 -0.005268 0.127287 6.91 -0.005254 0.127112 6.92 -0.005239 0.126938 6.93 -0.005225 0.126764 6.94 -0.005211 0.126591 6.95 -0.005196 0.126418 6.96 -0.005182 0.126246 6.97 -0.005168 0.126074 6.98 -0.005154 0.125902 6.99 -0.005140 0.125731 7 -0.005126 0.125561 7.01 -0.005112 0.125391 7.02 -0.005098 0.125221 7.03 -0.005084 0.125052 7.04 -0.005071 0.124883 7.05 -0.005057 0.124715 7.06 -0.005043 0.124547 7.07 -0.005030 0.124380 7.08 -0.005016 0.124213 7.09 -0.005003 0.124046 7.1 -0.004989 0.123880 7.11 -0.004976 0.123715 7.12 -0.004963 0.123550 7.13 -0.004949 0.123385 7.14 -0.004936 0.123221 7.15 -0.004923 0.123057 7.16 -0.004910 0.122894 7.17 -0.004897 0.122731 7.18 -0.004884 0.122568 7.19 -0.004871 0.122406 7.2 -0.004858 0.122244 7.21 -0.004845 0.122083 7.22 -0.004833 0.121922 7.23 -0.004820 0.121762 7.24 -0.004807 0.121602 7.25 -0.004794 0.121442 7.26 -0.004782 0.121283 7.27 -0.004769 0.121125 7.28 -0.004757 0.120966 7.29 -0.004744 0.120808 7.3 -0.004732 0.120651 7.31 -0.004720 0.120494 7.32 -0.004707 0.120337 7.33 -0.004695 0.120181 7.34 -0.004683 0.120025 7.35 -0.004671 0.119870 7.36 -0.004659 0.119715 7.37 -0.004647 0.119560 7.38 -0.004635 0.119406 7.39 -0.004623 0.119252 7.4 -0.004611 0.119099 7.41 -0.004599 0.118945 7.42 -0.004587 0.118793 7.43 -0.004575 0.118641 7.44 -0.004564 0.118489 7.45 -0.004552 0.118337 7.46 -0.004540 0.118186 7.47 -0.004529 0.118035 7.48 -0.004517 0.117885 7.49 -0.004506 0.117735 7.5 -0.004494 0.117585 7.51 -0.004483 0.117436 7.52 -0.004471 0.117287 7.53 -0.004460 0.117139 7.54 -0.004449 0.116991 7.55 -0.004438 0.116843 7.56 -0.004426 0.116696 7.57 -0.004415 0.116549 7.58 -0.004404 0.116402 7.59 -0.004393 0.116256 7.6 -0.004382 0.116110 7.61 -0.004371 0.115965 7.62 -0.004360 0.115820 7.63 -0.004349 0.115675 7.64 -0.004338 0.115531 7.65 -0.004327 0.115387 7.66 -0.004317 0.115243 7.67 -0.004306 0.115100 7.68 -0.004295 0.114957 7.69 -0.004284 0.114814 7.7 -0.004274 0.114672 7.71 -0.004263 0.114530 7.72 -0.004253 0.114388 7.73 -0.004242 0.114247 7.74 -0.004232 0.114106 7.75 -0.004221 0.113966 7.76 -0.004211 0.113825 7.77 -0.004201 0.113686 7.78 -0.004190 0.113546 7.79 -0.004180 0.113407 7.8 -0.004170 0.113268 7.81 -0.004159 0.113130 7.82 -0.004149 0.112992 7.83 -0.004139 0.112854 7.84 -0.004129 0.112716 7.85 -0.004119 0.112579 7.86 -0.004109 0.112443 7.87 -0.004099 0.112306 7.88 -0.004089 0.112170 7.89 -0.004079 0.112034 7.9 -0.004069 0.111899 7.91 -0.004059 0.111764 7.92 -0.004050 0.111629 7.93 -0.004040 0.111494 7.94 -0.004030 0.111360 7.95 -0.004020 0.111226 7.96 -0.004011 0.111093 7.97 -0.004001 0.110960 7.98 -0.003992 0.110827 7.99 -0.003982 0.110694 8 -0.003972 0.110562 8.01 -0.003963 0.110430 8.02 -0.003954 0.110298 8.03 -0.003944 0.110167 8.04 -0.003935 0.110036 8.05 -0.003925 0.109905 8.06 -0.003916 0.109775 8.07 -0.003907 0.109645 8.08 -0.003897 0.109515 8.09 -0.003888 0.109386 8.1 -0.003879 0.109257 8.11 -0.003870 0.109128 8.12 -0.003861 0.108999 8.13 -0.003852 0.108871 8.14 -0.003843 0.108743 8.15 -0.003834 0.108615 8.16 -0.003825 0.108488 8.17 -0.003816 0.108361 8.18 -0.003807 0.108234 8.19 -0.003798 0.108108 8.2 -0.003789 0.107982 8.21 -0.003780 0.107856 8.22 -0.003771 0.107730 8.23 -0.003762 0.107605 8.24 -0.003754 0.107480 8.25 -0.003745 0.107355 8.26 -0.003736 0.107231 8.27 -0.003728 0.107107 8.28 -0.003719 0.106983 8.29 -0.003710 0.106859 8.3 -0.003702 0.106736 8.31 -0.003693 0.106613 8.32 -0.003685 0.106490 8.33 -0.003676 0.106368 8.34 -0.003668 0.106246 8.35 -0.003659 0.106124 8.36 -0.003651 0.106003 8.37 -0.003643 0.105881 8.38 -0.003634 0.105760 8.39 -0.003626 0.105639 8.4 -0.003618 0.105519 8.41 -0.003610 0.105399 8.42 -0.003601 0.105279 8.43 -0.003593 0.105159 8.44 -0.003585 0.105040 8.45 -0.003577 0.104921 8.46 -0.003569 0.104802 8.47 -0.003561 0.104683 8.48 -0.003553 0.104565 8.49 -0.003545 0.104447 8.5 -0.003537 0.104329 8.51 -0.003529 0.104212 8.52 -0.003521 0.104095 8.53 -0.003513 0.103978 8.54 -0.003505 0.103861 8.55 -0.003497 0.103744 8.56 -0.003489 0.103628 8.57 -0.003481 0.103512 8.58 -0.003473 0.103397 8.59 -0.003466 0.103281 8.6 -0.003458 0.103166 8.61 -0.003450 0.103051 8.62 -0.003443 0.102937 8.63 -0.003435 0.102822 8.64 -0.003427 0.102708 8.65 -0.003420 0.102594 8.66 -0.003412 0.102481 8.67 -0.003405 0.102367 8.68 -0.003397 0.102254 8.69 -0.003390 0.102141 8.7 -0.003382 0.102029 8.71 -0.003375 0.101916 8.72 -0.003367 0.101804 8.73 -0.003360 0.101692 8.74 -0.003352 0.101580 8.75 -0.003345 0.101469 8.76 -0.003338 0.101358 8.77 -0.003330 0.101247 8.78 -0.003323 0.101136 8.79 -0.003316 0.101026 8.8 -0.003309 0.100916 8.81 -0.003301 0.100806 8.82 -0.003294 0.100696 8.83 -0.003287 0.100587 8.84 -0.003280 0.100477 8.85 -0.003273 0.100368 8.86 -0.003266 0.100260 8.87 -0.003259 0.100151 8.88 -0.003251 0.100043 8.89 -0.003244 0.099935 8.9 -0.003237 0.099827 8.91 -0.003230 0.099719 8.92 -0.003224 0.099612 8.93 -0.003217 0.099505 8.94 -0.003210 0.099398 8.95 -0.003203 0.099291 8.96 -0.003196 0.099185 8.97 -0.003189 0.099079 8.98 -0.003182 0.098973 8.99 -0.003175 0.098867 9 -0.003169 0.098761 9.01 -0.003162 0.098656 9.02 -0.003155 0.098551 9.03 -0.003148 0.098446 9.04 -0.003142 0.098342 9.05 -0.003135 0.098237 9.06 -0.003128 0.098133 9.07 -0.003122 0.098029 9.08 -0.003115 0.097925 9.09 -0.003109 0.097822 9.1 -0.003102 0.097718 9.11 -0.003095 0.097615 9.12 -0.003089 0.097512 9.13 -0.003082 0.097410 9.14 -0.003076 0.097307 9.15 -0.003069 0.097205 9.16 -0.003063 0.097103 9.17 -0.003057 0.097001 9.18 -0.003050 0.096900 9.19 -0.003044 0.096798 9.2 -0.003037 0.096697 9.21 -0.003031 0.096596 9.22 -0.003025 0.096495 9.23 -0.003018 0.096395 9.24 -0.003012 0.096294 9.25 -0.003006 0.096194 9.26 -0.003000 0.096094 9.27 -0.002993 0.095995 9.28 -0.002987 0.095895 9.29 -0.002981 0.095796 9.3 -0.002975 0.095697 9.31 -0.002969 0.095598 9.32 -0.002962 0.095499 9.33 -0.002956 0.095401 9.34 -0.002950 0.095303 9.35 -0.002944 0.095205 9.36 -0.002938 0.095107 9.37 -0.002932 0.095009 9.38 -0.002926 0.094912 9.39 -0.002920 0.094814 9.4 -0.002914 0.094717 9.41 -0.002908 0.094620 9.42 -0.002902 0.094524 9.43 -0.002896 0.094427 9.44 -0.002890 0.094331 9.45 -0.002884 0.094235 9.46 -0.002879 0.094139 9.47 -0.002873 0.094043 9.48 -0.002867 0.093948 9.49 -0.002861 0.093852 9.5 -0.002855 0.093757 9.51 -0.002849 0.093662 9.52 -0.002844 0.093568 9.53 -0.002838 0.093473 9.54 -0.002832 0.093379 9.55 -0.002826 0.093285 9.56 -0.002821 0.093191 9.57 -0.002815 0.093097 9.58 -0.002809 0.093003 9.59 -0.002804 0.092910 9.6 -0.002798 0.092817 9.61 -0.002793 0.092724 9.62 -0.002787 0.092631 9.63 -0.002781 0.092538 9.64 -0.002776 0.092446 9.65 -0.002770 0.092353 9.66 -0.002765 0.092261 9.67 -0.002759 0.092169 9.68 -0.002754 0.092078 9.69 -0.002748 0.091986 9.7 -0.002743 0.091895 9.71 -0.002737 0.091804 9.72 -0.002732 0.091713 9.73 -0.002726 0.091622 9.74 -0.002721 0.091531 9.75 -0.002716 0.091441 9.76 -0.002710 0.091350 9.77 -0.002705 0.091260 9.78 -0.002700 0.091170 9.79 -0.002694 0.091080 9.8 -0.002689 0.090991 9.81 -0.002684 0.090902 9.82 -0.002678 0.090812 9.83 -0.002673 0.090723 9.84 -0.002668 0.090634 9.85 -0.002663 0.090546 9.86 -0.002658 0.090457 9.87 -0.002652 0.090369 9.88 -0.002647 0.090281 9.89 -0.002642 0.090193 9.9 -0.002637 0.090105 9.91 -0.002632 0.090017 9.92 -0.002627 0.089930 9.93 -0.002621 0.089842 9.94 -0.002616 0.089755 9.95 -0.002611 0.089668 9.96 -0.002606 0.089581 9.97 -0.002601 0.089495 9.98 -0.002596 0.089408 9.99 -0.002591 0.089322 dmrgpp-6.02/TestSuite/oracles/data3009.cf000066400000000000000000001452411414604301300200550ustar00rootroot00000000000000-10 -0.002586 -0.089236 -9.99 -0.002591 -0.089322 -9.98 -0.002596 -0.089408 -9.97 -0.002601 -0.089495 -9.96 -0.002606 -0.089581 -9.95 -0.002611 -0.089668 -9.94 -0.002616 -0.089755 -9.93 -0.002621 -0.089842 -9.92 -0.002627 -0.089930 -9.91 -0.002632 -0.090017 -9.9 -0.002637 -0.090105 -9.89 -0.002642 -0.090193 -9.88 -0.002647 -0.090281 -9.87 -0.002652 -0.090369 -9.86 -0.002658 -0.090457 -9.85 -0.002663 -0.090546 -9.84 -0.002668 -0.090634 -9.83 -0.002673 -0.090723 -9.82 -0.002678 -0.090812 -9.81 -0.002684 -0.090902 -9.8 -0.002689 -0.090991 -9.79 -0.002694 -0.091081 -9.78 -0.002700 -0.091170 -9.77 -0.002705 -0.091260 -9.76 -0.002710 -0.091350 -9.75 -0.002716 -0.091441 -9.74 -0.002721 -0.091531 -9.73 -0.002726 -0.091622 -9.72 -0.002732 -0.091713 -9.71 -0.002737 -0.091804 -9.7 -0.002743 -0.091895 -9.69 -0.002748 -0.091986 -9.68 -0.002754 -0.092078 -9.67 -0.002759 -0.092169 -9.66 -0.002765 -0.092261 -9.65 -0.002770 -0.092353 -9.64 -0.002776 -0.092446 -9.63 -0.002781 -0.092538 -9.62 -0.002787 -0.092631 -9.61 -0.002793 -0.092724 -9.6 -0.002798 -0.092817 -9.59 -0.002804 -0.092910 -9.58 -0.002809 -0.093003 -9.57 -0.002815 -0.093097 -9.56 -0.002821 -0.093191 -9.55 -0.002826 -0.093285 -9.54 -0.002832 -0.093379 -9.53 -0.002838 -0.093473 -9.52 -0.002844 -0.093568 -9.51 -0.002849 -0.093662 -9.5 -0.002855 -0.093757 -9.49 -0.002861 -0.093852 -9.48 -0.002867 -0.093948 -9.47 -0.002873 -0.094043 -9.46 -0.002879 -0.094139 -9.45 -0.002884 -0.094235 -9.44 -0.002890 -0.094331 -9.43 -0.002896 -0.094427 -9.42 -0.002902 -0.094524 -9.41 -0.002908 -0.094620 -9.4 -0.002914 -0.094717 -9.39 -0.002920 -0.094814 -9.38 -0.002926 -0.094912 -9.37 -0.002932 -0.095009 -9.36 -0.002938 -0.095107 -9.35 -0.002944 -0.095205 -9.34 -0.002950 -0.095303 -9.33 -0.002956 -0.095401 -9.32 -0.002962 -0.095499 -9.31 -0.002969 -0.095598 -9.3 -0.002975 -0.095697 -9.29 -0.002981 -0.095796 -9.28 -0.002987 -0.095895 -9.27 -0.002993 -0.095995 -9.26 -0.003000 -0.096094 -9.25 -0.003006 -0.096194 -9.24 -0.003012 -0.096295 -9.23 -0.003018 -0.096395 -9.22 -0.003025 -0.096495 -9.21 -0.003031 -0.096596 -9.2 -0.003037 -0.096697 -9.19 -0.003044 -0.096798 -9.18 -0.003050 -0.096900 -9.17 -0.003057 -0.097001 -9.16 -0.003063 -0.097103 -9.15 -0.003069 -0.097205 -9.14 -0.003076 -0.097307 -9.13 -0.003082 -0.097410 -9.12 -0.003089 -0.097512 -9.11 -0.003095 -0.097615 -9.1 -0.003102 -0.097718 -9.09 -0.003109 -0.097822 -9.08 -0.003115 -0.097925 -9.07 -0.003122 -0.098029 -9.06 -0.003128 -0.098133 -9.05 -0.003135 -0.098237 -9.04 -0.003142 -0.098342 -9.03 -0.003148 -0.098446 -9.02 -0.003155 -0.098551 -9.01 -0.003162 -0.098656 -9 -0.003169 -0.098761 -8.99 -0.003175 -0.098867 -8.98 -0.003182 -0.098973 -8.97 -0.003189 -0.099079 -8.96 -0.003196 -0.099185 -8.95 -0.003203 -0.099291 -8.94 -0.003210 -0.099398 -8.93 -0.003217 -0.099505 -8.92 -0.003224 -0.099612 -8.91 -0.003230 -0.099719 -8.9 -0.003237 -0.099827 -8.89 -0.003244 -0.099935 -8.88 -0.003251 -0.100043 -8.87 -0.003259 -0.100151 -8.86 -0.003266 -0.100260 -8.85 -0.003273 -0.100368 -8.84 -0.003280 -0.100477 -8.83 -0.003287 -0.100587 -8.82 -0.003294 -0.100696 -8.81 -0.003301 -0.100806 -8.8 -0.003309 -0.100916 -8.79 -0.003316 -0.101026 -8.78 -0.003323 -0.101136 -8.77 -0.003330 -0.101247 -8.76 -0.003338 -0.101358 -8.75 -0.003345 -0.101469 -8.74 -0.003352 -0.101581 -8.73 -0.003360 -0.101692 -8.72 -0.003367 -0.101804 -8.71 -0.003375 -0.101916 -8.7 -0.003382 -0.102029 -8.69 -0.003390 -0.102141 -8.68 -0.003397 -0.102254 -8.67 -0.003405 -0.102367 -8.66 -0.003412 -0.102481 -8.65 -0.003420 -0.102594 -8.64 -0.003427 -0.102708 -8.63 -0.003435 -0.102822 -8.62 -0.003443 -0.102937 -8.61 -0.003450 -0.103051 -8.6 -0.003458 -0.103166 -8.59 -0.003466 -0.103281 -8.58 -0.003473 -0.103397 -8.57 -0.003481 -0.103512 -8.56 -0.003489 -0.103628 -8.55 -0.003497 -0.103744 -8.54 -0.003505 -0.103861 -8.53 -0.003513 -0.103978 -8.52 -0.003521 -0.104095 -8.51 -0.003529 -0.104212 -8.5 -0.003537 -0.104329 -8.49 -0.003545 -0.104447 -8.48 -0.003553 -0.104565 -8.47 -0.003561 -0.104683 -8.46 -0.003569 -0.104802 -8.45 -0.003577 -0.104921 -8.44 -0.003585 -0.105040 -8.43 -0.003593 -0.105159 -8.42 -0.003601 -0.105279 -8.41 -0.003610 -0.105399 -8.4 -0.003618 -0.105519 -8.39 -0.003626 -0.105640 -8.38 -0.003634 -0.105760 -8.37 -0.003643 -0.105881 -8.36 -0.003651 -0.106003 -8.35 -0.003659 -0.106124 -8.34 -0.003668 -0.106246 -8.33 -0.003676 -0.106368 -8.32 -0.003685 -0.106490 -8.31 -0.003693 -0.106613 -8.3 -0.003702 -0.106736 -8.29 -0.003710 -0.106859 -8.28 -0.003719 -0.106983 -8.27 -0.003728 -0.107107 -8.26 -0.003736 -0.107231 -8.25 -0.003745 -0.107355 -8.24 -0.003754 -0.107480 -8.23 -0.003762 -0.107605 -8.22 -0.003771 -0.107730 -8.21 -0.003780 -0.107856 -8.2 -0.003789 -0.107982 -8.19 -0.003798 -0.108108 -8.18 -0.003807 -0.108234 -8.17 -0.003816 -0.108361 -8.16 -0.003825 -0.108488 -8.15 -0.003834 -0.108615 -8.14 -0.003843 -0.108743 -8.13 -0.003852 -0.108871 -8.12 -0.003861 -0.108999 -8.11 -0.003870 -0.109128 -8.1 -0.003879 -0.109257 -8.09 -0.003888 -0.109386 -8.08 -0.003897 -0.109515 -8.07 -0.003907 -0.109645 -8.06 -0.003916 -0.109775 -8.05 -0.003925 -0.109905 -8.04 -0.003935 -0.110036 -8.03 -0.003944 -0.110167 -8.02 -0.003954 -0.110298 -8.01 -0.003963 -0.110430 -8 -0.003972 -0.110562 -7.99 -0.003982 -0.110694 -7.98 -0.003992 -0.110827 -7.97 -0.004001 -0.110960 -7.96 -0.004011 -0.111093 -7.95 -0.004020 -0.111226 -7.94 -0.004030 -0.111360 -7.93 -0.004040 -0.111494 -7.92 -0.004050 -0.111629 -7.91 -0.004059 -0.111764 -7.9 -0.004069 -0.111899 -7.89 -0.004079 -0.112034 -7.88 -0.004089 -0.112170 -7.87 -0.004099 -0.112306 -7.86 -0.004109 -0.112443 -7.85 -0.004119 -0.112579 -7.84 -0.004129 -0.112716 -7.83 -0.004139 -0.112854 -7.82 -0.004149 -0.112992 -7.81 -0.004159 -0.113130 -7.8 -0.004170 -0.113268 -7.79 -0.004180 -0.113407 -7.78 -0.004190 -0.113546 -7.77 -0.004201 -0.113686 -7.76 -0.004211 -0.113826 -7.75 -0.004221 -0.113966 -7.74 -0.004232 -0.114106 -7.73 -0.004242 -0.114247 -7.72 -0.004253 -0.114388 -7.71 -0.004263 -0.114530 -7.7 -0.004274 -0.114672 -7.69 -0.004284 -0.114814 -7.68 -0.004295 -0.114957 -7.67 -0.004306 -0.115100 -7.66 -0.004317 -0.115243 -7.65 -0.004327 -0.115387 -7.64 -0.004338 -0.115531 -7.63 -0.004349 -0.115675 -7.62 -0.004360 -0.115820 -7.61 -0.004371 -0.115965 -7.6 -0.004382 -0.116110 -7.59 -0.004393 -0.116256 -7.58 -0.004404 -0.116402 -7.57 -0.004415 -0.116549 -7.56 -0.004426 -0.116696 -7.55 -0.004438 -0.116843 -7.54 -0.004449 -0.116991 -7.53 -0.004460 -0.117139 -7.52 -0.004471 -0.117287 -7.51 -0.004483 -0.117436 -7.5 -0.004494 -0.117585 -7.49 -0.004506 -0.117735 -7.48 -0.004517 -0.117885 -7.47 -0.004529 -0.118035 -7.46 -0.004540 -0.118186 -7.45 -0.004552 -0.118337 -7.44 -0.004564 -0.118489 -7.43 -0.004575 -0.118641 -7.42 -0.004587 -0.118793 -7.41 -0.004599 -0.118945 -7.4 -0.004611 -0.119099 -7.39 -0.004623 -0.119252 -7.38 -0.004635 -0.119406 -7.37 -0.004647 -0.119560 -7.36 -0.004659 -0.119715 -7.35 -0.004671 -0.119870 -7.34 -0.004683 -0.120025 -7.33 -0.004695 -0.120181 -7.32 -0.004707 -0.120337 -7.31 -0.004720 -0.120494 -7.3 -0.004732 -0.120651 -7.29 -0.004744 -0.120808 -7.28 -0.004757 -0.120966 -7.27 -0.004769 -0.121125 -7.26 -0.004782 -0.121283 -7.25 -0.004794 -0.121442 -7.24 -0.004807 -0.121602 -7.23 -0.004820 -0.121762 -7.22 -0.004833 -0.121922 -7.21 -0.004845 -0.122083 -7.2 -0.004858 -0.122244 -7.19 -0.004871 -0.122406 -7.18 -0.004884 -0.122568 -7.17 -0.004897 -0.122731 -7.16 -0.004910 -0.122894 -7.15 -0.004923 -0.123057 -7.14 -0.004936 -0.123221 -7.13 -0.004949 -0.123385 -7.12 -0.004963 -0.123550 -7.11 -0.004976 -0.123715 -7.1 -0.004989 -0.123880 -7.09 -0.005003 -0.124046 -7.08 -0.005016 -0.124213 -7.07 -0.005030 -0.124380 -7.06 -0.005043 -0.124547 -7.05 -0.005057 -0.124715 -7.04 -0.005071 -0.124883 -7.03 -0.005084 -0.125052 -7.02 -0.005098 -0.125221 -7.01 -0.005112 -0.125391 -7 -0.005126 -0.125561 -6.99 -0.005140 -0.125731 -6.98 -0.005154 -0.125902 -6.97 -0.005168 -0.126074 -6.96 -0.005182 -0.126246 -6.95 -0.005196 -0.126418 -6.94 -0.005211 -0.126591 -6.93 -0.005225 -0.126764 -6.92 -0.005239 -0.126938 -6.91 -0.005254 -0.127112 -6.9 -0.005268 -0.127287 -6.89 -0.005283 -0.127463 -6.88 -0.005297 -0.127638 -6.87 -0.005312 -0.127814 -6.86 -0.005327 -0.127991 -6.85 -0.005341 -0.128168 -6.84 -0.005356 -0.128346 -6.83 -0.005371 -0.128524 -6.82 -0.005386 -0.128703 -6.81 -0.005401 -0.128882 -6.8 -0.005416 -0.129062 -6.79 -0.005432 -0.129242 -6.78 -0.005447 -0.129423 -6.77 -0.005462 -0.129604 -6.76 -0.005477 -0.129786 -6.75 -0.005493 -0.129968 -6.74 -0.005508 -0.130150 -6.73 -0.005524 -0.130334 -6.72 -0.005540 -0.130517 -6.71 -0.005555 -0.130702 -6.7 -0.005571 -0.130886 -6.69 -0.005587 -0.131072 -6.68 -0.005603 -0.131258 -6.67 -0.005619 -0.131444 -6.66 -0.005635 -0.131631 -6.65 -0.005651 -0.131818 -6.64 -0.005667 -0.132006 -6.63 -0.005683 -0.132195 -6.62 -0.005699 -0.132384 -6.61 -0.005716 -0.132573 -6.6 -0.005732 -0.132763 -6.59 -0.005749 -0.132954 -6.58 -0.005765 -0.133145 -6.57 -0.005782 -0.133337 -6.56 -0.005799 -0.133529 -6.55 -0.005816 -0.133722 -6.54 -0.005832 -0.133916 -6.53 -0.005849 -0.134110 -6.52 -0.005866 -0.134304 -6.51 -0.005884 -0.134499 -6.5 -0.005901 -0.134695 -6.49 -0.005918 -0.134891 -6.48 -0.005935 -0.135088 -6.47 -0.005953 -0.135285 -6.46 -0.005970 -0.135483 -6.45 -0.005988 -0.135682 -6.44 -0.006005 -0.135881 -6.43 -0.006023 -0.136081 -6.42 -0.006041 -0.136281 -6.41 -0.006059 -0.136482 -6.4 -0.006077 -0.136683 -6.39 -0.006095 -0.136885 -6.38 -0.006113 -0.137088 -6.37 -0.006131 -0.137291 -6.36 -0.006149 -0.137495 -6.35 -0.006168 -0.137700 -6.34 -0.006186 -0.137905 -6.33 -0.006205 -0.138110 -6.32 -0.006223 -0.138317 -6.31 -0.006242 -0.138524 -6.3 -0.006261 -0.138731 -6.29 -0.006279 -0.138939 -6.28 -0.006298 -0.139148 -6.27 -0.006317 -0.139358 -6.26 -0.006337 -0.139568 -6.25 -0.006356 -0.139778 -6.24 -0.006375 -0.139990 -6.23 -0.006394 -0.140202 -6.22 -0.006414 -0.140414 -6.21 -0.006433 -0.140627 -6.2 -0.006453 -0.140841 -6.19 -0.006473 -0.141056 -6.18 -0.006493 -0.141271 -6.17 -0.006512 -0.141487 -6.16 -0.006532 -0.141703 -6.15 -0.006553 -0.141921 -6.14 -0.006573 -0.142138 -6.13 -0.006593 -0.142357 -6.12 -0.006613 -0.142576 -6.11 -0.006634 -0.142796 -6.1 -0.006654 -0.143016 -6.09 -0.006675 -0.143238 -6.08 -0.006696 -0.143460 -6.07 -0.006717 -0.143682 -6.06 -0.006738 -0.143905 -6.05 -0.006759 -0.144129 -6.04 -0.006780 -0.144354 -6.03 -0.006801 -0.144579 -6.02 -0.006822 -0.144805 -6.01 -0.006844 -0.145032 -6 -0.006865 -0.145260 -5.99 -0.006887 -0.145488 -5.98 -0.006909 -0.145717 -5.97 -0.006931 -0.145946 -5.96 -0.006953 -0.146177 -5.95 -0.006975 -0.146408 -5.94 -0.006997 -0.146640 -5.93 -0.007019 -0.146872 -5.92 -0.007041 -0.147106 -5.91 -0.007064 -0.147340 -5.9 -0.007087 -0.147574 -5.89 -0.007109 -0.147810 -5.88 -0.007132 -0.148046 -5.87 -0.007155 -0.148283 -5.86 -0.007178 -0.148521 -5.85 -0.007201 -0.148760 -5.84 -0.007224 -0.148999 -5.83 -0.007248 -0.149239 -5.82 -0.007271 -0.149480 -5.81 -0.007295 -0.149721 -5.8 -0.007319 -0.149964 -5.79 -0.007342 -0.150207 -5.78 -0.007366 -0.150451 -5.77 -0.007390 -0.150696 -5.76 -0.007415 -0.150941 -5.75 -0.007439 -0.151188 -5.74 -0.007463 -0.151435 -5.73 -0.007488 -0.151683 -5.72 -0.007513 -0.151932 -5.71 -0.007537 -0.152181 -5.7 -0.007562 -0.152432 -5.69 -0.007587 -0.152683 -5.68 -0.007612 -0.152935 -5.67 -0.007638 -0.153188 -5.66 -0.007663 -0.153442 -5.65 -0.007689 -0.153696 -5.64 -0.007714 -0.153952 -5.63 -0.007740 -0.154208 -5.62 -0.007766 -0.154465 -5.61 -0.007792 -0.154723 -5.6 -0.007818 -0.154982 -5.59 -0.007845 -0.155242 -5.58 -0.007871 -0.155503 -5.57 -0.007898 -0.155764 -5.56 -0.007924 -0.156026 -5.55 -0.007951 -0.156290 -5.54 -0.007978 -0.156554 -5.53 -0.008005 -0.156819 -5.52 -0.008033 -0.157085 -5.51 -0.008060 -0.157352 -5.5 -0.008087 -0.157619 -5.49 -0.008115 -0.157888 -5.48 -0.008143 -0.158157 -5.47 -0.008171 -0.158428 -5.46 -0.008199 -0.158699 -5.45 -0.008227 -0.158972 -5.44 -0.008256 -0.159245 -5.43 -0.008284 -0.159519 -5.42 -0.008313 -0.159794 -5.41 -0.008342 -0.160070 -5.4 -0.008371 -0.160347 -5.39 -0.008400 -0.160625 -5.38 -0.008429 -0.160904 -5.37 -0.008459 -0.161184 -5.36 -0.008488 -0.161465 -5.35 -0.008518 -0.161747 -5.34 -0.008548 -0.162030 -5.33 -0.008578 -0.162314 -5.32 -0.008608 -0.162599 -5.31 -0.008639 -0.162885 -5.3 -0.008669 -0.163171 -5.29 -0.008700 -0.163459 -5.28 -0.008731 -0.163748 -5.27 -0.008762 -0.164038 -5.26 -0.008793 -0.164329 -5.25 -0.008825 -0.164621 -5.24 -0.008856 -0.164914 -5.23 -0.008888 -0.165208 -5.22 -0.008920 -0.165503 -5.21 -0.008952 -0.165799 -5.2 -0.008984 -0.166096 -5.19 -0.009016 -0.166395 -5.18 -0.009049 -0.166694 -5.17 -0.009082 -0.166994 -5.16 -0.009115 -0.167296 -5.15 -0.009148 -0.167599 -5.14 -0.009181 -0.167902 -5.13 -0.009215 -0.168207 -5.12 -0.009248 -0.168513 -5.11 -0.009282 -0.168820 -5.1 -0.009316 -0.169128 -5.09 -0.009351 -0.169437 -5.08 -0.009385 -0.169748 -5.07 -0.009420 -0.170059 -5.06 -0.009454 -0.170372 -5.05 -0.009489 -0.170686 -5.04 -0.009525 -0.171000 -5.03 -0.009560 -0.171317 -5.02 -0.009595 -0.171634 -5.01 -0.009631 -0.171952 -5 -0.009667 -0.172272 -4.99 -0.009703 -0.172593 -4.98 -0.009740 -0.172915 -4.97 -0.009776 -0.173238 -4.96 -0.009813 -0.173562 -4.95 -0.009850 -0.173888 -4.94 -0.009887 -0.174215 -4.93 -0.009925 -0.174543 -4.92 -0.009962 -0.174872 -4.91 -0.010000 -0.175203 -4.9 -0.010038 -0.175535 -4.89 -0.010077 -0.175868 -4.88 -0.010115 -0.176202 -4.87 -0.010154 -0.176538 -4.86 -0.010193 -0.176875 -4.85 -0.010232 -0.177213 -4.84 -0.010271 -0.177552 -4.83 -0.010311 -0.177893 -4.82 -0.010351 -0.178235 -4.81 -0.010391 -0.178579 -4.8 -0.010431 -0.178923 -4.79 -0.010472 -0.179269 -4.78 -0.010513 -0.179617 -4.77 -0.010554 -0.179965 -4.76 -0.010595 -0.180315 -4.75 -0.010637 -0.180667 -4.74 -0.010678 -0.181020 -4.73 -0.010720 -0.181374 -4.72 -0.010763 -0.181729 -4.71 -0.010805 -0.182086 -4.7 -0.010848 -0.182445 -4.69 -0.010891 -0.182804 -4.68 -0.010934 -0.183166 -4.67 -0.010978 -0.183528 -4.66 -0.011021 -0.183892 -4.65 -0.011066 -0.184258 -4.64 -0.011110 -0.184625 -4.63 -0.011154 -0.184993 -4.62 -0.011199 -0.185363 -4.61 -0.011244 -0.185734 -4.6 -0.011290 -0.186107 -4.59 -0.011335 -0.186481 -4.58 -0.011381 -0.186857 -4.57 -0.011428 -0.187235 -4.56 -0.011474 -0.187614 -4.55 -0.011521 -0.187994 -4.54 -0.011568 -0.188376 -4.53 -0.011615 -0.188759 -4.52 -0.011663 -0.189144 -4.51 -0.011711 -0.189531 -4.5 -0.011759 -0.189919 -4.49 -0.011808 -0.190309 -4.48 -0.011857 -0.190700 -4.47 -0.011906 -0.191093 -4.46 -0.011955 -0.191488 -4.45 -0.012005 -0.191884 -4.44 -0.012055 -0.192282 -4.43 -0.012106 -0.192682 -4.42 -0.012156 -0.193083 -4.41 -0.012207 -0.193486 -4.4 -0.012259 -0.193890 -4.39 -0.012310 -0.194296 -4.38 -0.012362 -0.194704 -4.37 -0.012415 -0.195114 -4.36 -0.012467 -0.195525 -4.35 -0.012520 -0.195938 -4.34 -0.012574 -0.196353 -4.33 -0.012627 -0.196770 -4.32 -0.012681 -0.197188 -4.31 -0.012736 -0.197608 -4.3 -0.012790 -0.198030 -4.29 -0.012846 -0.198454 -4.28 -0.012901 -0.198879 -4.27 -0.012957 -0.199307 -4.26 -0.013013 -0.199736 -4.25 -0.013069 -0.200167 -4.24 -0.013126 -0.200600 -4.23 -0.013184 -0.201035 -4.22 -0.013241 -0.201471 -4.21 -0.013299 -0.201910 -4.2 -0.013358 -0.202350 -4.19 -0.013416 -0.202793 -4.18 -0.013476 -0.203237 -4.17 -0.013535 -0.203683 -4.16 -0.013595 -0.204131 -4.15 -0.013656 -0.204581 -4.14 -0.013716 -0.205034 -4.13 -0.013777 -0.205488 -4.12 -0.013839 -0.205944 -4.11 -0.013901 -0.206402 -4.1 -0.013963 -0.206862 -4.09 -0.014026 -0.207325 -4.08 -0.014090 -0.207789 -4.07 -0.014153 -0.208255 -4.06 -0.014217 -0.208724 -4.05 -0.014282 -0.209194 -4.04 -0.014347 -0.209667 -4.03 -0.014412 -0.210142 -4.02 -0.014478 -0.210619 -4.01 -0.014545 -0.211098 -4 -0.014611 -0.211579 -3.99 -0.014679 -0.212063 -3.98 -0.014746 -0.212549 -3.97 -0.014815 -0.213037 -3.96 -0.014883 -0.213527 -3.95 -0.014952 -0.214019 -3.94 -0.015022 -0.214514 -3.93 -0.015092 -0.215011 -3.92 -0.015163 -0.215510 -3.91 -0.015234 -0.216012 -3.9 -0.015305 -0.216516 -3.89 -0.015378 -0.217022 -3.88 -0.015450 -0.217531 -3.87 -0.015523 -0.218042 -3.86 -0.015597 -0.218555 -3.85 -0.015671 -0.219071 -3.84 -0.015746 -0.219589 -3.83 -0.015821 -0.220110 -3.82 -0.015897 -0.220633 -3.81 -0.015973 -0.221159 -3.8 -0.016050 -0.221687 -3.79 -0.016128 -0.222218 -3.78 -0.016206 -0.222751 -3.77 -0.016284 -0.223287 -3.76 -0.016363 -0.223825 -3.75 -0.016443 -0.224366 -3.74 -0.016523 -0.224909 -3.73 -0.016604 -0.225456 -3.72 -0.016686 -0.226004 -3.71 -0.016768 -0.226556 -3.7 -0.016850 -0.227110 -3.69 -0.016934 -0.227667 -3.68 -0.017018 -0.228227 -3.67 -0.017102 -0.228789 -3.66 -0.017187 -0.229354 -3.65 -0.017273 -0.229922 -3.64 -0.017360 -0.230493 -3.63 -0.017447 -0.231066 -3.62 -0.017535 -0.231643 -3.61 -0.017623 -0.232222 -3.6 -0.017712 -0.232804 -3.59 -0.017802 -0.233389 -3.58 -0.017892 -0.233977 -3.57 -0.017984 -0.234568 -3.56 -0.018075 -0.235162 -3.55 -0.018168 -0.235759 -3.54 -0.018261 -0.236359 -3.53 -0.018355 -0.236962 -3.52 -0.018450 -0.237568 -3.51 -0.018545 -0.238177 -3.5 -0.018642 -0.238789 -3.49 -0.018738 -0.239405 -3.48 -0.018836 -0.240023 -3.47 -0.018935 -0.240645 -3.46 -0.019034 -0.241270 -3.45 -0.019134 -0.241898 -3.44 -0.019235 -0.242530 -3.43 -0.019336 -0.243164 -3.42 -0.019439 -0.243803 -3.41 -0.019542 -0.244444 -3.4 -0.019646 -0.245089 -3.39 -0.019751 -0.245737 -3.38 -0.019857 -0.246389 -3.37 -0.019963 -0.247044 -3.36 -0.020071 -0.247702 -3.35 -0.020179 -0.248364 -3.34 -0.020288 -0.249030 -3.33 -0.020398 -0.249699 -3.32 -0.020509 -0.250372 -3.31 -0.020621 -0.251048 -3.3 -0.020734 -0.251728 -3.29 -0.020848 -0.252411 -3.28 -0.020962 -0.253099 -3.27 -0.021078 -0.253790 -3.26 -0.021195 -0.254485 -3.25 -0.021312 -0.255183 -3.24 -0.021431 -0.255886 -3.23 -0.021550 -0.256592 -3.22 -0.021671 -0.257302 -3.21 -0.021792 -0.258016 -3.2 -0.021915 -0.258734 -3.19 -0.022038 -0.259456 -3.18 -0.022163 -0.260183 -3.17 -0.022289 -0.260913 -3.16 -0.022415 -0.261647 -3.15 -0.022543 -0.262385 -3.14 -0.022672 -0.263128 -3.13 -0.022802 -0.263874 -3.12 -0.022933 -0.264625 -3.11 -0.023066 -0.265380 -3.1 -0.023199 -0.266140 -3.09 -0.023334 -0.266904 -3.08 -0.023470 -0.267672 -3.07 -0.023607 -0.268444 -3.06 -0.023745 -0.269221 -3.05 -0.023884 -0.270003 -3.04 -0.024025 -0.270789 -3.03 -0.024167 -0.271579 -3.02 -0.024310 -0.272374 -3.01 -0.024454 -0.273174 -3 -0.024600 -0.273979 -2.99 -0.024747 -0.274788 -2.98 -0.024895 -0.275602 -2.97 -0.025045 -0.276421 -2.96 -0.025196 -0.277244 -2.95 -0.025348 -0.278073 -2.94 -0.025502 -0.278906 -2.93 -0.025657 -0.279744 -2.92 -0.025814 -0.280588 -2.91 -0.025972 -0.281436 -2.9 -0.026131 -0.282290 -2.89 -0.026292 -0.283149 -2.88 -0.026454 -0.284013 -2.87 -0.026618 -0.284882 -2.86 -0.026784 -0.285756 -2.85 -0.026951 -0.286636 -2.84 -0.027119 -0.287521 -2.83 -0.027290 -0.288412 -2.82 -0.027461 -0.289308 -2.81 -0.027635 -0.290210 -2.8 -0.027810 -0.291117 -2.79 -0.027987 -0.292030 -2.78 -0.028165 -0.292949 -2.77 -0.028345 -0.293873 -2.76 -0.028527 -0.294804 -2.75 -0.028710 -0.295740 -2.74 -0.028896 -0.296682 -2.73 -0.029083 -0.297630 -2.72 -0.029272 -0.298584 -2.71 -0.029463 -0.299544 -2.7 -0.029655 -0.300510 -2.69 -0.029850 -0.301483 -2.68 -0.030047 -0.302461 -2.67 -0.030245 -0.303446 -2.66 -0.030445 -0.304438 -2.65 -0.030648 -0.305436 -2.64 -0.030852 -0.306440 -2.63 -0.031059 -0.307451 -2.62 -0.031267 -0.308469 -2.61 -0.031478 -0.309493 -2.6 -0.031691 -0.310524 -2.59 -0.031906 -0.311562 -2.58 -0.032123 -0.312606 -2.57 -0.032342 -0.313658 -2.56 -0.032564 -0.314717 -2.55 -0.032788 -0.315783 -2.54 -0.033014 -0.316856 -2.53 -0.033243 -0.317936 -2.52 -0.033474 -0.319024 -2.51 -0.033707 -0.320119 -2.5 -0.033943 -0.321221 -2.49 -0.034181 -0.322331 -2.48 -0.034422 -0.323449 -2.47 -0.034665 -0.324575 -2.46 -0.034911 -0.325708 -2.45 -0.035160 -0.326849 -2.44 -0.035411 -0.327998 -2.43 -0.035665 -0.329155 -2.42 -0.035922 -0.330320 -2.41 -0.036181 -0.331493 -2.4 -0.036443 -0.332675 -2.39 -0.036708 -0.333865 -2.38 -0.036976 -0.335063 -2.37 -0.037247 -0.336270 -2.36 -0.037521 -0.337486 -2.35 -0.037798 -0.338710 -2.34 -0.038078 -0.339943 -2.33 -0.038362 -0.341185 -2.32 -0.038648 -0.342436 -2.31 -0.038937 -0.343696 -2.3 -0.039230 -0.344966 -2.29 -0.039526 -0.346244 -2.28 -0.039826 -0.347532 -2.27 -0.040129 -0.348830 -2.26 -0.040435 -0.350137 -2.25 -0.040745 -0.351454 -2.24 -0.041058 -0.352781 -2.23 -0.041375 -0.354118 -2.22 -0.041696 -0.355464 -2.21 -0.042021 -0.356821 -2.2 -0.042349 -0.358189 -2.19 -0.042681 -0.359566 -2.18 -0.043017 -0.360954 -2.17 -0.043357 -0.362353 -2.16 -0.043701 -0.363762 -2.15 -0.044049 -0.365183 -2.14 -0.044401 -0.366614 -2.13 -0.044758 -0.368056 -2.12 -0.045119 -0.369510 -2.11 -0.045484 -0.370975 -2.1 -0.045854 -0.372452 -2.09 -0.046228 -0.373940 -2.08 -0.046607 -0.375440 -2.07 -0.046990 -0.376952 -2.06 -0.047378 -0.378476 -2.05 -0.047771 -0.380012 -2.04 -0.048169 -0.381561 -2.03 -0.048572 -0.383122 -2.02 -0.048980 -0.384695 -2.01 -0.049393 -0.386282 -2 -0.049812 -0.387881 -1.99 -0.050235 -0.389494 -1.98 -0.050664 -0.391120 -1.97 -0.051099 -0.392759 -1.96 -0.051539 -0.394412 -1.95 -0.051985 -0.396078 -1.94 -0.052437 -0.397759 -1.93 -0.052894 -0.399453 -1.92 -0.053358 -0.401162 -1.91 -0.053828 -0.402885 -1.9 -0.054304 -0.404623 -1.89 -0.054786 -0.406376 -1.88 -0.055274 -0.408144 -1.87 -0.055770 -0.409927 -1.86 -0.056272 -0.411725 -1.85 -0.056780 -0.413539 -1.84 -0.057296 -0.415369 -1.83 -0.057818 -0.417215 -1.82 -0.058348 -0.419077 -1.81 -0.058885 -0.420955 -1.8 -0.059430 -0.422850 -1.79 -0.059982 -0.424761 -1.78 -0.060542 -0.426690 -1.77 -0.061109 -0.428636 -1.76 -0.061685 -0.430600 -1.75 -0.062269 -0.432581 -1.74 -0.062861 -0.434580 -1.73 -0.063461 -0.436598 -1.72 -0.064070 -0.438634 -1.71 -0.064688 -0.440689 -1.7 -0.065315 -0.442762 -1.69 -0.065951 -0.444855 -1.68 -0.066597 -0.446967 -1.67 -0.067251 -0.449099 -1.66 -0.067916 -0.451251 -1.65 -0.068590 -0.453424 -1.64 -0.069275 -0.455617 -1.63 -0.069969 -0.457830 -1.62 -0.070674 -0.460065 -1.61 -0.071390 -0.462322 -1.6 -0.072117 -0.464600 -1.59 -0.072855 -0.466900 -1.58 -0.073604 -0.469222 -1.57 -0.074365 -0.471567 -1.56 -0.075137 -0.473936 -1.55 -0.075922 -0.476327 -1.54 -0.076719 -0.478742 -1.53 -0.077528 -0.481182 -1.52 -0.078350 -0.483645 -1.51 -0.079186 -0.486134 -1.5 -0.080034 -0.488647 -1.49 -0.080897 -0.491186 -1.48 -0.081773 -0.493751 -1.47 -0.082664 -0.496342 -1.46 -0.083569 -0.498959 -1.45 -0.084489 -0.501604 -1.44 -0.085424 -0.504276 -1.43 -0.086375 -0.506975 -1.42 -0.087342 -0.509703 -1.41 -0.088325 -0.512460 -1.4 -0.089325 -0.515246 -1.39 -0.090341 -0.518061 -1.38 -0.091375 -0.520907 -1.37 -0.092427 -0.523783 -1.36 -0.093497 -0.526689 -1.35 -0.094585 -0.529628 -1.34 -0.095692 -0.532598 -1.33 -0.096819 -0.535600 -1.32 -0.097966 -0.538636 -1.31 -0.099133 -0.541705 -1.3 -0.100321 -0.544808 -1.29 -0.101531 -0.547946 -1.28 -0.102762 -0.551118 -1.27 -0.104016 -0.554327 -1.26 -0.105293 -0.557571 -1.25 -0.106593 -0.560852 -1.24 -0.107917 -0.564171 -1.23 -0.109266 -0.567528 -1.22 -0.110640 -0.570923 -1.21 -0.112040 -0.574358 -1.2 -0.113467 -0.577833 -1.19 -0.114921 -0.581348 -1.18 -0.116403 -0.584905 -1.17 -0.117913 -0.588503 -1.16 -0.119453 -0.592145 -1.15 -0.121023 -0.595829 -1.14 -0.122624 -0.599558 -1.13 -0.124257 -0.603332 -1.12 -0.125922 -0.607151 -1.11 -0.127621 -0.611017 -1.1 -0.129354 -0.614930 -1.09 -0.131122 -0.618891 -1.08 -0.132927 -0.622901 -1.07 -0.134768 -0.626961 -1.06 -0.136648 -0.631071 -1.05 -0.138567 -0.635233 -1.04 -0.140527 -0.639447 -1.03 -0.142528 -0.643714 -1.02 -0.144571 -0.648036 -1.01 -0.146659 -0.652412 -1 -0.148791 -0.656845 -0.99 -0.150970 -0.661335 -0.98 -0.153197 -0.665884 -0.97 -0.155472 -0.670491 -0.96 -0.157799 -0.675159 -0.95 -0.160177 -0.679888 -0.94 -0.162609 -0.684679 -0.93 -0.165096 -0.689534 -0.92 -0.167640 -0.694454 -0.91 -0.170242 -0.699440 -0.9 -0.172905 -0.704493 -0.89 -0.175630 -0.709614 -0.88 -0.178419 -0.714804 -0.87 -0.181274 -0.720066 -0.86 -0.184197 -0.725399 -0.85 -0.187190 -0.730806 -0.84 -0.190257 -0.736287 -0.83 -0.193397 -0.741844 -0.82 -0.196616 -0.747479 -0.81 -0.199913 -0.753193 -0.8 -0.203294 -0.758987 -0.79 -0.206759 -0.764862 -0.78 -0.210312 -0.770821 -0.77 -0.213956 -0.776864 -0.76 -0.217694 -0.782993 -0.75 -0.221529 -0.789210 -0.74 -0.225465 -0.795516 -0.73 -0.229504 -0.801913 -0.72 -0.233651 -0.808402 -0.71 -0.237908 -0.814985 -0.7 -0.242281 -0.821663 -0.69 -0.246773 -0.828439 -0.68 -0.251388 -0.835313 -0.67 -0.256131 -0.842288 -0.66 -0.261007 -0.849364 -0.65 -0.266019 -0.856544 -0.64 -0.271174 -0.863830 -0.63 -0.276477 -0.871222 -0.62 -0.281932 -0.878723 -0.61 -0.287546 -0.886335 -0.6 -0.293325 -0.894057 -0.59 -0.299275 -0.901893 -0.58 -0.305402 -0.909844 -0.57 -0.311713 -0.917911 -0.56 -0.318216 -0.926096 -0.55 -0.324918 -0.934400 -0.54 -0.331827 -0.942824 -0.53 -0.338951 -0.951370 -0.52 -0.346298 -0.960038 -0.51 -0.353878 -0.968830 -0.5 -0.361700 -0.977746 -0.49 -0.369773 -0.986788 -0.48 -0.378108 -0.995956 -0.47 -0.386716 -1.005249 -0.46 -0.395609 -1.014669 -0.45 -0.404797 -1.024216 -0.44 -0.414293 -1.033888 -0.43 -0.424110 -1.043686 -0.42 -0.434262 -1.053608 -0.41 -0.444763 -1.063653 -0.4 -0.455628 -1.073820 -0.39 -0.466872 -1.084105 -0.38 -0.478511 -1.094507 -0.37 -0.490563 -1.105022 -0.36 -0.503045 -1.115645 -0.35 -0.515976 -1.126373 -0.34 -0.529376 -1.137200 -0.33 -0.543264 -1.148120 -0.32 -0.557661 -1.159124 -0.31 -0.572590 -1.170206 -0.3 -0.588074 -1.181354 -0.29 -0.604136 -1.192560 -0.28 -0.620801 -1.203809 -0.27 -0.638095 -1.215088 -0.26 -0.656044 -1.226382 -0.25 -0.674675 -1.237673 -0.24 -0.694018 -1.248942 -0.23 -0.714100 -1.260166 -0.22 -0.734952 -1.271322 -0.21 -0.756604 -1.282382 -0.2 -0.779087 -1.293316 -0.19 -0.802432 -1.304091 -0.18 -0.826671 -1.314671 -0.17 -0.851834 -1.325016 -0.16 -0.877954 -1.335079 -0.15 -0.905060 -1.344815 -0.14 -0.933182 -1.354168 -0.13 -0.962349 -1.363082 -0.12 -0.992587 -1.371493 -0.11 -1.023920 -1.379333 -0.1 -1.056370 -1.386529 -0.090000 -1.089952 -1.393000 -0.080000 -1.124682 -1.398662 -0.070000 -1.160565 -1.403425 -0.060000 -1.197604 -1.407192 -0.050000 -1.235793 -1.409861 -0.040000 -1.275118 -1.411326 -0.030000 -1.315556 -1.411475 -0.020000 -1.357072 -1.410194 -0.010000 -1.399622 -1.407366 0 -1.443147 -1.402871 0.009999 -1.487577 -1.396590 0.019999 -1.532825 -1.388406 0.029999 -1.578790 -1.378205 0.039999 -1.625358 -1.365877 0.049999 -1.672398 -1.351323 0.059999 -1.719763 -1.334452 0.069999 -1.767296 -1.315188 0.079999 -1.814825 -1.293467 0.089999 -1.862168 -1.269247 0.099999 -1.909136 -1.242503 0.11 -1.955535 -1.213231 0.12 -2.001170 -1.181450 0.13 -2.045848 -1.147203 0.14 -2.089381 -1.110552 0.15 -2.131593 -1.071582 0.16 -2.172317 -1.030396 0.17 -2.211407 -0.987114 0.18 -2.248733 -0.941868 0.19 -2.284182 -0.894798 0.2 -2.317667 -0.846050 0.21 -2.349115 -0.795770 0.22 -2.378475 -0.744101 0.23 -2.405710 -0.691179 0.24 -2.430796 -0.637132 0.25 -2.453720 -0.582079 0.26 -2.474473 -0.526126 0.27 -2.493050 -0.469370 0.28 -2.509443 -0.411899 0.29 -2.523644 -0.353794 0.3 -2.535639 -0.295133 0.31 -2.545408 -0.235992 0.32 -2.552927 -0.176448 0.33 -2.558166 -0.116585 0.34 -2.561094 -0.056492 0.35 -2.561679 0.003732 0.36 -2.559893 0.063983 0.37 -2.555712 0.124142 0.38 -2.549120 0.184086 0.39 -2.540112 0.243683 0.4 -2.528695 0.302797 0.41 -2.514887 0.361289 0.42 -2.498723 0.419022 0.43 -2.480246 0.475857 0.44 -2.459516 0.531665 0.45 -2.436601 0.586319 0.46 -2.411578 0.639701 0.47 -2.384535 0.691700 0.48 -2.355564 0.742214 0.49 -2.324763 0.791148 0.5 -2.292234 0.838417 0.51 -2.258083 0.883941 0.52 -2.222419 0.927647 0.53 -2.185354 0.969472 0.54 -2.147004 1.009355 0.55 -2.107486 1.047246 0.56 -2.066922 1.083100 0.57 -2.025436 1.116879 0.58 -1.983157 1.148556 0.59 -1.940213 1.178110 0.6 -1.896735 1.205531 0.61 -1.852854 1.230819 0.62 -1.808701 1.253984 0.63 -1.764404 1.275047 0.64 -1.720088 1.294039 0.65 -1.675875 1.311000 0.66 -1.631880 1.325981 0.67 -1.588212 1.339040 0.68 -1.544971 1.350244 0.69 -1.502253 1.359664 0.7 -1.460140 1.367379 0.71 -1.418710 1.373470 0.72 -1.378028 1.378023 0.73 -1.338153 1.381126 0.74 -1.299134 1.382865 0.75 -1.261011 1.383329 0.76 -1.223818 1.382605 0.77 -1.187579 1.380780 0.78 -1.152313 1.377937 0.79 -1.118033 1.374157 0.8 -1.084744 1.369518 0.81 -1.052447 1.364096 0.82 -1.021139 1.357961 0.83 -0.990813 1.351182 0.84 -0.961457 1.343823 0.85 -0.933056 1.335943 0.86 -0.905595 1.327599 0.87 -0.879054 1.318844 0.88 -0.853413 1.309727 0.89 -0.828649 1.300293 0.9 -0.804740 1.290584 0.91 -0.781662 1.280640 0.92 -0.759389 1.270496 0.93 -0.737898 1.260184 0.94 -0.717164 1.249736 0.95 -0.697161 1.239179 0.96 -0.677864 1.228537 0.97 -0.659250 1.217834 0.98 -0.641294 1.207091 0.99 -0.623973 1.196327 1 -0.607262 1.185559 1.01 -0.591140 1.174802 1.02 -0.575584 1.164070 1.03 -0.560574 1.153376 1.04 -0.546087 1.142730 1.05 -0.532104 1.132144 1.06 -0.518606 1.121626 1.07 -0.505572 1.111184 1.08 -0.492986 1.100825 1.09 -0.480830 1.090555 1.1 -0.469086 1.080379 1.11 -0.457739 1.070303 1.12 -0.446773 1.060329 1.13 -0.436172 1.050463 1.14 -0.425922 1.040705 1.15 -0.416009 1.031059 1.16 -0.406421 1.021528 1.17 -0.397144 1.012111 1.18 -0.388165 1.002811 1.19 -0.379474 0.993628 1.2 -0.371059 0.984563 1.21 -0.362910 0.975616 1.22 -0.355015 0.966788 1.23 -0.347365 0.958077 1.24 -0.339951 0.949485 1.25 -0.332764 0.941009 1.26 -0.325795 0.932650 1.27 -0.319035 0.924407 1.28 -0.312477 0.916278 1.29 -0.306114 0.908264 1.3 -0.299937 0.900362 1.31 -0.293940 0.892571 1.32 -0.288117 0.884891 1.33 -0.282461 0.877320 1.34 -0.276966 0.869856 1.35 -0.271626 0.862499 1.36 -0.266435 0.855246 1.37 -0.261388 0.848097 1.38 -0.256481 0.841049 1.39 -0.251708 0.834102 1.4 -0.247064 0.827254 1.41 -0.242545 0.820502 1.42 -0.238147 0.813847 1.43 -0.233865 0.807286 1.44 -0.229696 0.800818 1.45 -0.225635 0.794440 1.46 -0.221680 0.788153 1.47 -0.217826 0.781954 1.48 -0.214070 0.775842 1.49 -0.210409 0.769815 1.5 -0.206840 0.763872 1.51 -0.203360 0.758011 1.52 -0.199965 0.752231 1.53 -0.196654 0.746531 1.54 -0.193424 0.740910 1.55 -0.190271 0.735365 1.56 -0.187194 0.729896 1.57 -0.184191 0.724501 1.58 -0.181258 0.719179 1.59 -0.178394 0.713928 1.6 -0.175596 0.708748 1.61 -0.172864 0.703637 1.62 -0.170194 0.698595 1.63 -0.167584 0.693619 1.64 -0.165034 0.688708 1.65 -0.162541 0.683862 1.66 -0.160104 0.679080 1.67 -0.157720 0.674359 1.68 -0.155389 0.669700 1.69 -0.153109 0.665101 1.7 -0.150878 0.660561 1.71 -0.148695 0.656078 1.72 -0.146559 0.651653 1.73 -0.144468 0.647284 1.74 -0.142422 0.642970 1.75 -0.140418 0.638710 1.76 -0.138456 0.634503 1.77 -0.136535 0.630348 1.78 -0.134653 0.626245 1.79 -0.132809 0.622192 1.8 -0.131003 0.618188 1.81 -0.129233 0.614234 1.82 -0.127499 0.610327 1.83 -0.125799 0.606468 1.84 -0.124132 0.602655 1.85 -0.122499 0.598887 1.86 -0.120897 0.595164 1.87 -0.119326 0.591486 1.88 -0.117785 0.587850 1.89 -0.116274 0.584257 1.9 -0.114792 0.580707 1.91 -0.113338 0.577197 1.92 -0.111911 0.573728 1.93 -0.110511 0.570298 1.94 -0.109136 0.566908 1.95 -0.107788 0.563557 1.96 -0.106463 0.560243 1.97 -0.105163 0.556967 1.98 -0.103887 0.553728 1.99 -0.102633 0.550525 2 -0.101402 0.547357 2.01 -0.100193 0.544224 2.02 -0.099006 0.541126 2.03 -0.097839 0.538062 2.04 -0.096693 0.535031 2.05 -0.095566 0.532034 2.06 -0.094459 0.529068 2.07 -0.093371 0.526134 2.08 -0.092302 0.523232 2.09 -0.091251 0.520361 2.1 -0.090218 0.517520 2.11 -0.089202 0.514709 2.12 -0.088203 0.511928 2.13 -0.087221 0.509175 2.14 -0.086255 0.506451 2.15 -0.085305 0.503756 2.16 -0.084370 0.501088 2.17 -0.083451 0.498448 2.18 -0.082547 0.495834 2.19 -0.081657 0.493247 2.2 -0.080781 0.490687 2.21 -0.079920 0.488152 2.22 -0.079072 0.485642 2.23 -0.078237 0.483158 2.24 -0.077416 0.480698 2.25 -0.076607 0.478263 2.26 -0.075811 0.475851 2.27 -0.075028 0.473463 2.28 -0.074256 0.471099 2.29 -0.073496 0.468757 2.3 -0.072748 0.466439 2.31 -0.072011 0.464142 2.32 -0.071285 0.461867 2.33 -0.070570 0.459615 2.34 -0.069866 0.457383 2.35 -0.069172 0.455173 2.36 -0.068489 0.452983 2.37 -0.067815 0.450814 2.38 -0.067152 0.448666 2.39 -0.066498 0.446537 2.4 -0.065853 0.444428 2.41 -0.065218 0.442338 2.42 -0.064592 0.440268 2.43 -0.063975 0.438216 2.44 -0.063367 0.436184 2.45 -0.062767 0.434169 2.46 -0.062176 0.432173 2.47 -0.061593 0.430195 2.48 -0.061018 0.428234 2.49 -0.060451 0.426291 2.5 -0.059892 0.424365 2.51 -0.059341 0.422457 2.52 -0.058797 0.420565 2.53 -0.058261 0.418689 2.54 -0.057732 0.416830 2.55 -0.057210 0.414987 2.56 -0.056695 0.413160 2.57 -0.056188 0.411349 2.58 -0.055686 0.409553 2.59 -0.055192 0.407773 2.6 -0.054704 0.406008 2.61 -0.054223 0.404258 2.62 -0.053748 0.402523 2.63 -0.053279 0.400802 2.64 -0.052816 0.399096 2.65 -0.052359 0.397404 2.66 -0.051908 0.395726 2.67 -0.051463 0.394061 2.68 -0.051023 0.392411 2.69 -0.050589 0.390774 2.7 -0.050161 0.389151 2.71 -0.049738 0.387541 2.72 -0.049320 0.385944 2.73 -0.048908 0.384360 2.74 -0.048501 0.382788 2.75 -0.048098 0.381230 2.76 -0.047701 0.379683 2.77 -0.047309 0.378150 2.78 -0.046921 0.376628 2.79 -0.046538 0.375118 2.8 -0.046160 0.373620 2.81 -0.045787 0.372134 2.82 -0.045418 0.370660 2.83 -0.045053 0.369197 2.84 -0.044693 0.367745 2.85 -0.044337 0.366305 2.86 -0.043985 0.364876 2.87 -0.043638 0.363457 2.88 -0.043294 0.362050 2.89 -0.042955 0.360653 2.9 -0.042619 0.359267 2.91 -0.042288 0.357892 2.92 -0.041960 0.356526 2.93 -0.041636 0.355172 2.94 -0.041316 0.353827 2.95 -0.040999 0.352492 2.96 -0.040687 0.351167 2.97 -0.040377 0.349852 2.98 -0.040071 0.348547 2.99 -0.039769 0.347251 3 -0.039470 0.345965 3.01 -0.039174 0.344688 3.02 -0.038882 0.343420 3.03 -0.038593 0.342162 3.04 -0.038307 0.340913 3.05 -0.038025 0.339672 3.06 -0.037745 0.338441 3.07 -0.037469 0.337218 3.08 -0.037195 0.336004 3.09 -0.036925 0.334799 3.1 -0.036657 0.333602 3.11 -0.036392 0.332414 3.12 -0.036131 0.331234 3.13 -0.035872 0.330062 3.14 -0.035615 0.328899 3.15 -0.035362 0.327744 3.16 -0.035111 0.326596 3.17 -0.034863 0.325457 3.18 -0.034617 0.324325 3.19 -0.034375 0.323201 3.2 -0.034134 0.322085 3.21 -0.033896 0.320977 3.22 -0.033661 0.319876 3.23 -0.033428 0.318782 3.24 -0.033197 0.317696 3.25 -0.032969 0.316617 3.26 -0.032743 0.315545 3.27 -0.032520 0.314481 3.28 -0.032298 0.313424 3.29 -0.032079 0.312373 3.3 -0.031863 0.311330 3.31 -0.031648 0.310293 3.32 -0.031436 0.309264 3.33 -0.031225 0.308241 3.34 -0.031017 0.307225 3.35 -0.030811 0.306215 3.36 -0.030607 0.305212 3.37 -0.030405 0.304215 3.38 -0.030205 0.303225 3.39 -0.030007 0.302242 3.4 -0.029810 0.301264 3.41 -0.029616 0.300293 3.42 -0.029424 0.299328 3.43 -0.029233 0.298369 3.44 -0.029045 0.297416 3.45 -0.028858 0.296470 3.46 -0.028673 0.295529 3.47 -0.028490 0.294594 3.48 -0.028308 0.293665 3.49 -0.028128 0.292742 3.5 -0.027950 0.291824 3.51 -0.027774 0.290912 3.52 -0.027599 0.290006 3.53 -0.027426 0.289106 3.54 -0.027254 0.288211 3.55 -0.027085 0.287321 3.56 -0.026916 0.286437 3.57 -0.026750 0.285558 3.58 -0.026584 0.284685 3.59 -0.026421 0.283817 3.6 -0.026259 0.282954 3.61 -0.026098 0.282096 3.62 -0.025939 0.281244 3.63 -0.025781 0.280396 3.64 -0.025625 0.279554 3.65 -0.025470 0.278717 3.66 -0.025316 0.277884 3.67 -0.025164 0.277057 3.68 -0.025013 0.276234 3.69 -0.024864 0.275416 3.7 -0.024716 0.274603 3.71 -0.024569 0.273795 3.72 -0.024424 0.272992 3.73 -0.024280 0.272193 3.74 -0.024137 0.271399 3.75 -0.023995 0.270609 3.76 -0.023855 0.269824 3.77 -0.023715 0.269044 3.78 -0.023578 0.268268 3.79 -0.023441 0.267496 3.8 -0.023305 0.266729 3.81 -0.023171 0.265966 3.82 -0.023038 0.265207 3.83 -0.022905 0.264453 3.84 -0.022775 0.263703 3.85 -0.022645 0.262958 3.86 -0.022516 0.262216 3.87 -0.022388 0.261479 3.88 -0.022262 0.260745 3.89 -0.022136 0.260016 3.9 -0.022012 0.259291 3.91 -0.021888 0.258570 3.92 -0.021766 0.257852 3.93 -0.021645 0.257139 3.94 -0.021524 0.256430 3.95 -0.021405 0.255724 3.96 -0.021287 0.255023 3.97 -0.021169 0.254325 3.98 -0.021053 0.253631 3.99 -0.020938 0.252941 4 -0.020823 0.252254 4.01 -0.020710 0.251571 4.02 -0.020597 0.250892 4.03 -0.020485 0.250216 4.04 -0.020375 0.249545 4.05 -0.020265 0.248876 4.06 -0.020156 0.248211 4.07 -0.020047 0.247550 4.08 -0.019940 0.246892 4.09 -0.019834 0.246238 4.1 -0.019728 0.245587 4.11 -0.019623 0.244940 4.12 -0.019520 0.244296 4.13 -0.019417 0.243655 4.14 -0.019314 0.243018 4.15 -0.019213 0.242384 4.16 -0.019112 0.241753 4.17 -0.019012 0.241125 4.18 -0.018913 0.240501 4.19 -0.018815 0.239880 4.2 -0.018717 0.239262 4.21 -0.018621 0.238647 4.22 -0.018524 0.238036 4.23 -0.018429 0.237427 4.24 -0.018335 0.236822 4.25 -0.018241 0.236220 4.26 -0.018148 0.235620 4.27 -0.018055 0.235024 4.28 -0.017963 0.234431 4.29 -0.017872 0.233840 4.3 -0.017782 0.233253 4.31 -0.017693 0.232669 4.32 -0.017604 0.232087 4.33 -0.017515 0.231509 4.34 -0.017428 0.230933 4.35 -0.017341 0.230360 4.36 -0.017254 0.229790 4.37 -0.017169 0.229223 4.38 -0.017084 0.228658 4.39 -0.016999 0.228096 4.4 -0.016915 0.227537 4.41 -0.016832 0.226981 4.42 -0.016750 0.226427 4.43 -0.016668 0.225877 4.44 -0.016586 0.225328 4.45 -0.016505 0.224783 4.46 -0.016425 0.224240 4.47 -0.016346 0.223699 4.48 -0.016267 0.223162 4.49 -0.016188 0.222626 4.5 -0.016110 0.222094 4.51 -0.016033 0.221564 4.52 -0.015956 0.221036 4.53 -0.015880 0.220511 4.54 -0.015804 0.219988 4.55 -0.015729 0.219468 4.56 -0.015655 0.218950 4.57 -0.015581 0.218435 4.58 -0.015507 0.217922 4.59 -0.015434 0.217412 4.6 -0.015361 0.216904 4.61 -0.015289 0.216398 4.62 -0.015218 0.215894 4.63 -0.015147 0.215393 4.64 -0.015076 0.214895 4.65 -0.015006 0.214398 4.66 -0.014937 0.213904 4.67 -0.014868 0.213412 4.68 -0.014799 0.212922 4.69 -0.014731 0.212435 4.7 -0.014664 0.211950 4.71 -0.014596 0.211467 4.72 -0.014530 0.210986 4.73 -0.014463 0.210507 4.74 -0.014398 0.210031 4.75 -0.014332 0.209556 4.76 -0.014267 0.209084 4.77 -0.014203 0.208614 4.78 -0.014139 0.208146 4.79 -0.014075 0.207680 4.8 -0.014012 0.207216 4.81 -0.013949 0.206754 4.82 -0.013887 0.206295 4.83 -0.013825 0.205837 4.84 -0.013764 0.205381 4.85 -0.013703 0.204927 4.86 -0.013642 0.204476 4.87 -0.013582 0.204026 4.88 -0.013522 0.203578 4.89 -0.013462 0.203132 4.9 -0.013403 0.202689 4.91 -0.013345 0.202247 4.92 -0.013286 0.201807 4.93 -0.013228 0.201369 4.94 -0.013171 0.200932 4.95 -0.013114 0.200498 4.96 -0.013057 0.200066 4.97 -0.013000 0.199635 4.98 -0.012944 0.199206 4.99 -0.012888 0.198779 5 -0.012833 0.198354 5.01 -0.012778 0.197931 5.02 -0.012723 0.197509 5.03 -0.012669 0.197090 5.04 -0.012615 0.196672 5.05 -0.012562 0.196255 5.06 -0.012508 0.195841 5.07 -0.012455 0.195428 5.08 -0.012403 0.195017 5.09 -0.012351 0.194608 5.1 -0.012299 0.194201 5.11 -0.012247 0.193795 5.12 -0.012196 0.193391 5.13 -0.012145 0.192988 5.14 -0.012094 0.192587 5.15 -0.012044 0.192188 5.16 -0.011994 0.191791 5.17 -0.011944 0.191395 5.18 -0.011895 0.191001 5.19 -0.011846 0.190608 5.2 -0.011797 0.190217 5.21 -0.011748 0.189827 5.22 -0.011700 0.189440 5.23 -0.011652 0.189053 5.24 -0.011605 0.188669 5.25 -0.011557 0.188286 5.26 -0.011510 0.187904 5.27 -0.011464 0.187524 5.28 -0.011417 0.187145 5.29 -0.011371 0.186768 5.3 -0.011325 0.186393 5.31 -0.011279 0.186019 5.32 -0.011234 0.185646 5.33 -0.011189 0.185275 5.34 -0.011144 0.184906 5.35 -0.011100 0.184538 5.36 -0.011055 0.184171 5.37 -0.011011 0.183806 5.38 -0.010968 0.183442 5.39 -0.010924 0.183080 5.4 -0.010881 0.182719 5.41 -0.010838 0.182360 5.42 -0.010795 0.182002 5.43 -0.010753 0.181645 5.44 -0.010711 0.181290 5.45 -0.010669 0.180936 5.46 -0.010627 0.180584 5.47 -0.010586 0.180232 5.48 -0.010544 0.179883 5.49 -0.010503 0.179534 5.5 -0.010463 0.179187 5.51 -0.010422 0.178841 5.52 -0.010382 0.178497 5.53 -0.010342 0.178154 5.54 -0.010302 0.177812 5.55 -0.010262 0.177472 5.56 -0.010223 0.177133 5.57 -0.010184 0.176795 5.58 -0.010145 0.176458 5.59 -0.010106 0.176123 5.6 -0.010068 0.175789 5.61 -0.010030 0.175456 5.62 -0.009992 0.175124 5.63 -0.009954 0.174794 5.64 -0.009916 0.174465 5.65 -0.009879 0.174137 5.66 -0.009842 0.173811 5.67 -0.009805 0.173485 5.68 -0.009768 0.173161 5.69 -0.009731 0.172838 5.7 -0.009695 0.172517 5.71 -0.009659 0.172196 5.72 -0.009623 0.171877 5.73 -0.009587 0.171558 5.74 -0.009552 0.171241 5.75 -0.009516 0.170926 5.76 -0.009481 0.170611 5.77 -0.009446 0.170297 5.78 -0.009412 0.169985 5.79 -0.009377 0.169674 5.8 -0.009343 0.169364 5.81 -0.009308 0.169055 5.82 -0.009274 0.168747 5.83 -0.009241 0.168440 5.84 -0.009207 0.168134 5.85 -0.009174 0.167830 5.86 -0.009140 0.167527 5.87 -0.009107 0.167224 5.88 -0.009074 0.166923 5.89 -0.009042 0.166623 5.9 -0.009009 0.166324 5.91 -0.008977 0.166026 5.92 -0.008944 0.165729 5.93 -0.008912 0.165433 5.94 -0.008881 0.165138 5.95 -0.008849 0.164844 5.96 -0.008817 0.164551 5.97 -0.008786 0.164260 5.98 -0.008755 0.163969 5.99 -0.008724 0.163679 6 -0.008693 0.163391 6.01 -0.008662 0.163103 6.02 -0.008632 0.162816 6.03 -0.008601 0.162531 6.04 -0.008571 0.162246 6.05 -0.008541 0.161963 6.06 -0.008511 0.161680 6.07 -0.008481 0.161398 6.08 -0.008452 0.161118 6.09 -0.008422 0.160838 6.1 -0.008393 0.160559 6.11 -0.008364 0.160281 6.12 -0.008335 0.160004 6.13 -0.008306 0.159729 6.14 -0.008278 0.159454 6.15 -0.008249 0.159180 6.16 -0.008221 0.158907 6.17 -0.008192 0.158635 6.18 -0.008164 0.158363 6.19 -0.008136 0.158093 6.2 -0.008109 0.157824 6.21 -0.008081 0.157555 6.22 -0.008054 0.157288 6.23 -0.008026 0.157021 6.24 -0.007999 0.156756 6.25 -0.007972 0.156491 6.26 -0.007945 0.156227 6.27 -0.007918 0.155964 6.28 -0.007891 0.155702 6.29 -0.007865 0.155440 6.3 -0.007838 0.155180 6.31 -0.007812 0.154920 6.32 -0.007786 0.154662 6.33 -0.007760 0.154404 6.34 -0.007734 0.154147 6.35 -0.007708 0.153891 6.36 -0.007683 0.153636 6.37 -0.007657 0.153381 6.38 -0.007632 0.153128 6.39 -0.007607 0.152875 6.4 -0.007581 0.152623 6.41 -0.007556 0.152372 6.42 -0.007532 0.152122 6.43 -0.007507 0.151872 6.44 -0.007482 0.151624 6.45 -0.007458 0.151376 6.46 -0.007433 0.151129 6.47 -0.007409 0.150883 6.48 -0.007385 0.150637 6.49 -0.007361 0.150393 6.5 -0.007337 0.150149 6.51 -0.007313 0.149906 6.52 -0.007289 0.149664 6.53 -0.007266 0.149422 6.54 -0.007242 0.149182 6.55 -0.007219 0.148942 6.56 -0.007196 0.148702 6.57 -0.007173 0.148464 6.58 -0.007150 0.148226 6.59 -0.007127 0.147990 6.6 -0.007104 0.147754 6.61 -0.007081 0.147518 6.62 -0.007059 0.147284 6.63 -0.007036 0.147050 6.64 -0.007014 0.146817 6.65 -0.006992 0.146584 6.66 -0.006969 0.146353 6.67 -0.006947 0.146122 6.68 -0.006926 0.145892 6.69 -0.006904 0.145662 6.7 -0.006882 0.145433 6.71 -0.006860 0.145205 6.72 -0.006839 0.144978 6.73 -0.006817 0.144751 6.74 -0.006796 0.144525 6.75 -0.006775 0.144300 6.76 -0.006754 0.144076 6.77 -0.006733 0.143852 6.78 -0.006712 0.143629 6.79 -0.006691 0.143406 6.8 -0.006670 0.143185 6.81 -0.006650 0.142964 6.82 -0.006629 0.142743 6.83 -0.006609 0.142524 6.84 -0.006588 0.142305 6.85 -0.006568 0.142086 6.86 -0.006548 0.141868 6.87 -0.006528 0.141651 6.88 -0.006508 0.141435 6.89 -0.006488 0.141219 6.9 -0.006468 0.141004 6.91 -0.006448 0.140790 6.92 -0.006429 0.140576 6.93 -0.006409 0.140363 6.94 -0.006390 0.140151 6.95 -0.006370 0.139939 6.96 -0.006351 0.139728 6.97 -0.006332 0.139517 6.98 -0.006313 0.139307 6.99 -0.006294 0.139098 7 -0.006275 0.138889 7.01 -0.006256 0.138681 7.02 -0.006237 0.138474 7.03 -0.006219 0.138267 7.04 -0.006200 0.138061 7.05 -0.006182 0.137856 7.06 -0.006163 0.137651 7.07 -0.006145 0.137446 7.08 -0.006127 0.137243 7.09 -0.006109 0.137039 7.1 -0.006090 0.136837 7.11 -0.006072 0.136635 7.12 -0.006054 0.136434 7.13 -0.006037 0.136233 7.14 -0.006019 0.136033 7.15 -0.006001 0.135833 7.16 -0.005984 0.135634 7.17 -0.005966 0.135436 7.18 -0.005949 0.135238 7.19 -0.005931 0.135041 7.2 -0.005914 0.134844 7.21 -0.005897 0.134648 7.22 -0.005879 0.134452 7.23 -0.005862 0.134257 7.24 -0.005845 0.134063 7.25 -0.005828 0.133869 7.26 -0.005812 0.133676 7.27 -0.005795 0.133483 7.28 -0.005778 0.133291 7.29 -0.005761 0.133099 7.3 -0.005745 0.132908 7.31 -0.005728 0.132718 7.32 -0.005712 0.132528 7.33 -0.005696 0.132338 7.34 -0.005679 0.132149 7.35 -0.005663 0.131961 7.36 -0.005647 0.131773 7.37 -0.005631 0.131586 7.38 -0.005615 0.131399 7.39 -0.005599 0.131213 7.4 -0.005583 0.131027 7.41 -0.005567 0.130842 7.42 -0.005552 0.130657 7.43 -0.005536 0.130473 7.44 -0.005520 0.130290 7.45 -0.005505 0.130107 7.46 -0.005489 0.129924 7.47 -0.005474 0.129742 7.48 -0.005458 0.129560 7.49 -0.005443 0.129379 7.5 -0.005428 0.129199 7.51 -0.005413 0.129019 7.52 -0.005398 0.128839 7.53 -0.005383 0.128660 7.54 -0.005368 0.128481 7.55 -0.005353 0.128303 7.56 -0.005338 0.128126 7.57 -0.005323 0.127949 7.58 -0.005308 0.127772 7.59 -0.005294 0.127596 7.6 -0.005279 0.127420 7.61 -0.005265 0.127245 7.62 -0.005250 0.127071 7.63 -0.005236 0.126896 7.64 -0.005221 0.126723 7.65 -0.005207 0.126549 7.66 -0.005193 0.126377 7.67 -0.005179 0.126204 7.68 -0.005165 0.126033 7.69 -0.005151 0.125861 7.7 -0.005137 0.125690 7.71 -0.005123 0.125520 7.72 -0.005109 0.125350 7.73 -0.005095 0.125180 7.74 -0.005081 0.125011 7.75 -0.005067 0.124843 7.76 -0.005054 0.124675 7.77 -0.005040 0.124507 7.78 -0.005027 0.124340 7.79 -0.005013 0.124173 7.8 -0.005000 0.124006 7.81 -0.004986 0.123841 7.82 -0.004973 0.123675 7.83 -0.004960 0.123510 7.84 -0.004946 0.123345 7.85 -0.004933 0.123181 7.86 -0.004920 0.123018 7.87 -0.004907 0.122854 7.88 -0.004894 0.122692 7.89 -0.004881 0.122529 7.9 -0.004868 0.122367 7.91 -0.004855 0.122206 7.92 -0.004842 0.122044 7.93 -0.004830 0.121884 7.94 -0.004817 0.121723 7.95 -0.004804 0.121564 7.96 -0.004791 0.121404 7.97 -0.004779 0.121245 7.98 -0.004766 0.121087 7.99 -0.004754 0.120928 8 -0.004742 0.120771 8.01 -0.004729 0.120613 8.02 -0.004717 0.120456 8.03 -0.004705 0.120300 8.04 -0.004692 0.120143 8.05 -0.004680 0.119988 8.06 -0.004668 0.119832 8.07 -0.004656 0.119677 8.08 -0.004644 0.119523 8.09 -0.004632 0.119369 8.1 -0.004620 0.119215 8.11 -0.004608 0.119062 8.12 -0.004596 0.118909 8.13 -0.004584 0.118756 8.14 -0.004573 0.118604 8.15 -0.004561 0.118452 8.16 -0.004549 0.118301 8.17 -0.004538 0.118150 8.18 -0.004526 0.117999 8.19 -0.004514 0.117849 8.2 -0.004503 0.117699 8.21 -0.004491 0.117550 8.22 -0.004480 0.117400 8.23 -0.004469 0.117252 8.24 -0.004457 0.117103 8.25 -0.004446 0.116955 8.26 -0.004435 0.116808 8.27 -0.004424 0.116661 8.28 -0.004413 0.116514 8.29 -0.004401 0.116367 8.3 -0.004390 0.116221 8.31 -0.004379 0.116075 8.32 -0.004368 0.115930 8.33 -0.004357 0.115785 8.34 -0.004346 0.115640 8.35 -0.004336 0.115496 8.36 -0.004325 0.115352 8.37 -0.004314 0.115208 8.38 -0.004303 0.115065 8.39 -0.004293 0.114922 8.4 -0.004282 0.114780 8.41 -0.004271 0.114637 8.42 -0.004261 0.114496 8.43 -0.004250 0.114354 8.44 -0.004240 0.114213 8.45 -0.004229 0.114072 8.46 -0.004219 0.113932 8.47 -0.004208 0.113792 8.48 -0.004198 0.113652 8.49 -0.004188 0.113513 8.5 -0.004177 0.113374 8.51 -0.004167 0.113235 8.52 -0.004157 0.113096 8.53 -0.004147 0.112958 8.54 -0.004137 0.112821 8.55 -0.004127 0.112683 8.56 -0.004117 0.112546 8.57 -0.004107 0.112410 8.58 -0.004097 0.112273 8.59 -0.004087 0.112137 8.6 -0.004077 0.112001 8.61 -0.004067 0.111866 8.62 -0.004057 0.111731 8.63 -0.004047 0.111596 8.64 -0.004038 0.111462 8.65 -0.004028 0.111328 8.66 -0.004018 0.111194 8.67 -0.004008 0.111061 8.68 -0.003999 0.110927 8.69 -0.003989 0.110795 8.7 -0.003980 0.110662 8.71 -0.003970 0.110530 8.72 -0.003961 0.110398 8.73 -0.003951 0.110267 8.74 -0.003942 0.110135 8.75 -0.003932 0.110004 8.76 -0.003923 0.109874 8.77 -0.003914 0.109744 8.78 -0.003905 0.109614 8.79 -0.003895 0.109484 8.8 -0.003886 0.109355 8.81 -0.003877 0.109225 8.82 -0.003868 0.109097 8.83 -0.003859 0.108968 8.84 -0.003850 0.108840 8.85 -0.003840 0.108712 8.86 -0.003831 0.108585 8.87 -0.003822 0.108457 8.88 -0.003813 0.108330 8.89 -0.003805 0.108204 8.9 -0.003796 0.108077 8.91 -0.003787 0.107951 8.92 -0.003778 0.107825 8.93 -0.003769 0.107700 8.94 -0.003760 0.107575 8.95 -0.003752 0.107450 8.96 -0.003743 0.107325 8.97 -0.003734 0.107201 8.98 -0.003726 0.107077 8.99 -0.003717 0.106953 9 -0.003708 0.106830 9.01 -0.003700 0.106706 9.02 -0.003691 0.106584 9.03 -0.003683 0.106461 9.04 -0.003674 0.106339 9.05 -0.003666 0.106217 9.06 -0.003657 0.106095 9.07 -0.003649 0.105973 9.08 -0.003641 0.105852 9.09 -0.003632 0.105731 9.1 -0.003624 0.105610 9.11 -0.003616 0.105490 9.12 -0.003608 0.105370 9.13 -0.003599 0.105250 9.14 -0.003591 0.105130 9.15 -0.003583 0.105011 9.16 -0.003575 0.104892 9.17 -0.003567 0.104773 9.18 -0.003559 0.104655 9.19 -0.003551 0.104537 9.2 -0.003543 0.104419 9.21 -0.003535 0.104301 9.22 -0.003527 0.104183 9.23 -0.003519 0.104066 9.24 -0.003511 0.103949 9.25 -0.003503 0.103833 9.26 -0.003495 0.103716 9.27 -0.003487 0.103600 9.28 -0.003479 0.103484 9.29 -0.003472 0.103369 9.3 -0.003464 0.103253 9.31 -0.003456 0.103138 9.32 -0.003448 0.103024 9.33 -0.003441 0.102909 9.34 -0.003433 0.102795 9.35 -0.003426 0.102681 9.36 -0.003418 0.102567 9.37 -0.003410 0.102453 9.38 -0.003403 0.102340 9.39 -0.003395 0.102227 9.4 -0.003388 0.102114 9.41 -0.003380 0.102001 9.42 -0.003373 0.101889 9.43 -0.003365 0.101777 9.44 -0.003358 0.101665 9.45 -0.003351 0.101554 9.46 -0.003343 0.101442 9.47 -0.003336 0.101331 9.48 -0.003329 0.101220 9.49 -0.003321 0.101110 9.5 -0.003314 0.100999 9.51 -0.003307 0.100889 9.52 -0.003300 0.100779 9.53 -0.003292 0.100670 9.54 -0.003285 0.100560 9.55 -0.003278 0.100451 9.56 -0.003271 0.100342 9.57 -0.003264 0.100233 9.58 -0.003257 0.100125 9.59 -0.003250 0.100017 9.6 -0.003243 0.099909 9.61 -0.003236 0.099801 9.62 -0.003229 0.099693 9.63 -0.003222 0.099586 9.64 -0.003215 0.099479 9.65 -0.003208 0.099372 9.66 -0.003201 0.099266 9.67 -0.003194 0.099159 9.68 -0.003187 0.099053 9.69 -0.003181 0.098947 9.7 -0.003174 0.098841 9.71 -0.003167 0.098736 9.72 -0.003160 0.098631 9.73 -0.003154 0.098526 9.74 -0.003147 0.098421 9.75 -0.003140 0.098316 9.76 -0.003133 0.098212 9.77 -0.003127 0.098108 9.78 -0.003120 0.098004 9.79 -0.003114 0.097900 9.8 -0.003107 0.097797 9.81 -0.003100 0.097693 9.82 -0.003094 0.097590 9.83 -0.003087 0.097488 9.84 -0.003081 0.097385 9.85 -0.003074 0.097283 9.86 -0.003068 0.097180 9.87 -0.003061 0.097078 9.88 -0.003055 0.096977 9.89 -0.003049 0.096875 9.9 -0.003042 0.096774 9.91 -0.003036 0.096673 9.92 -0.003030 0.096572 9.93 -0.003023 0.096471 9.94 -0.003017 0.096371 9.95 -0.003011 0.096270 9.96 -0.003004 0.096170 9.97 -0.002998 0.096070 9.98 -0.002992 0.095971 9.99 -0.002986 0.095871 dmrgpp-6.02/TestSuite/oracles/data3010.cf000066400000000000000000001413161414604301300200440ustar00rootroot00000000000000-10 0.003234 0.104253 -9.99 0.003241 0.104361 -9.98 0.003247 0.104469 -9.97 0.003254 0.104577 -9.96 0.003261 0.104685 -9.95 0.003268 0.104794 -9.94 0.003274 0.104903 -9.93 0.003281 0.105012 -9.92 0.003288 0.105121 -9.91 0.003295 0.105231 -9.9 0.003302 0.105341 -9.89 0.003309 0.105450 -9.88 0.003316 0.105561 -9.87 0.003323 0.105671 -9.86 0.003330 0.105782 -9.85 0.003337 0.105893 -9.84 0.003344 0.106004 -9.83 0.003351 0.106115 -9.82 0.003358 0.106227 -9.81 0.003365 0.106339 -9.8 0.003372 0.106451 -9.79 0.003379 0.106563 -9.78 0.003386 0.106676 -9.77 0.003393 0.106788 -9.76 0.003400 0.106901 -9.75 0.003408 0.107015 -9.74 0.003415 0.107128 -9.73 0.003422 0.107242 -9.72 0.003430 0.107356 -9.71 0.003437 0.107470 -9.7 0.003444 0.107584 -9.69 0.003452 0.107699 -9.68 0.003459 0.107814 -9.67 0.003466 0.107929 -9.66 0.003474 0.108045 -9.65 0.003481 0.108160 -9.64 0.003489 0.108276 -9.63 0.003496 0.108393 -9.62 0.003504 0.108509 -9.61 0.003511 0.108626 -9.6 0.003519 0.108743 -9.59 0.003526 0.108860 -9.58 0.003534 0.108977 -9.57 0.003542 0.109095 -9.56 0.003549 0.109213 -9.55 0.003557 0.109331 -9.54 0.003565 0.109450 -9.53 0.003573 0.109568 -9.52 0.003580 0.109687 -9.51 0.003588 0.109807 -9.5 0.003596 0.109926 -9.49 0.003604 0.110046 -9.48 0.003612 0.110166 -9.47 0.003620 0.110286 -9.46 0.003628 0.110407 -9.45 0.003635 0.110527 -9.44 0.003643 0.110649 -9.43 0.003651 0.110770 -9.42 0.003659 0.110891 -9.41 0.003668 0.111013 -9.4 0.003676 0.111135 -9.39 0.003684 0.111258 -9.38 0.003692 0.111381 -9.37 0.003700 0.111503 -9.36 0.003708 0.111627 -9.35 0.003716 0.111750 -9.34 0.003725 0.111874 -9.33 0.003733 0.111998 -9.32 0.003741 0.112122 -9.31 0.003750 0.112247 -9.3 0.003758 0.112372 -9.29 0.003766 0.112497 -9.28 0.003775 0.112622 -9.27 0.003783 0.112748 -9.26 0.003792 0.112874 -9.25 0.003800 0.113000 -9.24 0.003809 0.113127 -9.23 0.003817 0.113254 -9.22 0.003826 0.113381 -9.21 0.003835 0.113508 -9.2 0.003843 0.113636 -9.19 0.003852 0.113764 -9.18 0.003861 0.113892 -9.17 0.003869 0.114021 -9.16 0.003878 0.114149 -9.15 0.003887 0.114279 -9.14 0.003896 0.114408 -9.13 0.003905 0.114538 -9.12 0.003913 0.114668 -9.11 0.003922 0.114798 -9.1 0.003931 0.114929 -9.09 0.003940 0.115060 -9.08 0.003949 0.115191 -9.07 0.003958 0.115322 -9.06 0.003967 0.115454 -9.05 0.003976 0.115586 -9.04 0.003986 0.115719 -9.03 0.003995 0.115851 -9.02 0.004004 0.115984 -9.01 0.004013 0.116118 -9 0.004022 0.116251 -8.99 0.004032 0.116385 -8.98 0.004041 0.116519 -8.97 0.004050 0.116654 -8.96 0.004060 0.116789 -8.95 0.004069 0.116924 -8.94 0.004079 0.117059 -8.93 0.004088 0.117195 -8.92 0.004098 0.117331 -8.91 0.004107 0.117468 -8.9 0.004117 0.117604 -8.89 0.004126 0.117742 -8.88 0.004136 0.117879 -8.87 0.004146 0.118017 -8.86 0.004155 0.118155 -8.85 0.004165 0.118293 -8.84 0.004175 0.118432 -8.83 0.004185 0.118571 -8.82 0.004195 0.118710 -8.81 0.004205 0.118850 -8.8 0.004214 0.118990 -8.79 0.004224 0.119130 -8.78 0.004234 0.119271 -8.77 0.004244 0.119412 -8.76 0.004255 0.119553 -8.75 0.004265 0.119695 -8.74 0.004275 0.119837 -8.73 0.004285 0.119979 -8.72 0.004295 0.120121 -8.71 0.004305 0.120264 -8.7 0.004316 0.120408 -8.69 0.004326 0.120551 -8.68 0.004336 0.120696 -8.67 0.004347 0.120840 -8.66 0.004357 0.120985 -8.65 0.004368 0.121130 -8.64 0.004378 0.121275 -8.63 0.004389 0.121421 -8.62 0.004399 0.121567 -8.61 0.004410 0.121713 -8.6 0.004421 0.121860 -8.59 0.004431 0.122007 -8.58 0.004442 0.122155 -8.57 0.004453 0.122303 -8.56 0.004464 0.122451 -8.55 0.004475 0.122600 -8.54 0.004485 0.122748 -8.53 0.004496 0.122898 -8.52 0.004507 0.123047 -8.51 0.004518 0.123198 -8.5 0.004529 0.123348 -8.49 0.004541 0.123499 -8.48 0.004552 0.123650 -8.47 0.004563 0.123801 -8.46 0.004574 0.123953 -8.45 0.004585 0.124105 -8.44 0.004597 0.124258 -8.43 0.004608 0.124411 -8.42 0.004619 0.124565 -8.41 0.004631 0.124718 -8.4 0.004642 0.124872 -8.39 0.004654 0.125027 -8.38 0.004665 0.125182 -8.37 0.004677 0.125337 -8.36 0.004689 0.125493 -8.35 0.004700 0.125649 -8.34 0.004712 0.125805 -8.33 0.004724 0.125962 -8.32 0.004736 0.126119 -8.31 0.004748 0.126277 -8.3 0.004759 0.126435 -8.29 0.004771 0.126593 -8.28 0.004783 0.126752 -8.27 0.004795 0.126911 -8.26 0.004808 0.127071 -8.25 0.004820 0.127231 -8.24 0.004832 0.127392 -8.23 0.004844 0.127552 -8.22 0.004856 0.127714 -8.21 0.004869 0.127875 -8.2 0.004881 0.128037 -8.19 0.004894 0.128200 -8.18 0.004906 0.128363 -8.17 0.004919 0.128526 -8.16 0.004931 0.128690 -8.15 0.004944 0.128854 -8.14 0.004956 0.129018 -8.13 0.004969 0.129183 -8.12 0.004982 0.129349 -8.11 0.004995 0.129514 -8.1 0.005007 0.129681 -8.09 0.005020 0.129847 -8.08 0.005033 0.130014 -8.07 0.005046 0.130182 -8.06 0.005059 0.130350 -8.05 0.005073 0.130518 -8.04 0.005086 0.130687 -8.03 0.005099 0.130856 -8.02 0.005112 0.131026 -8.01 0.005125 0.131196 -8 0.005139 0.131366 -7.99 0.005152 0.131537 -7.98 0.005166 0.131709 -7.97 0.005179 0.131881 -7.96 0.005193 0.132053 -7.95 0.005206 0.132226 -7.94 0.005220 0.132399 -7.93 0.005234 0.132573 -7.92 0.005248 0.132747 -7.91 0.005261 0.132922 -7.9 0.005275 0.133097 -7.89 0.005289 0.133272 -7.88 0.005303 0.133448 -7.87 0.005317 0.133625 -7.86 0.005332 0.133802 -7.85 0.005346 0.133979 -7.84 0.005360 0.134157 -7.83 0.005374 0.134335 -7.82 0.005389 0.134514 -7.81 0.005403 0.134694 -7.8 0.005417 0.134873 -7.79 0.005432 0.135054 -7.78 0.005447 0.135234 -7.77 0.005461 0.135416 -7.76 0.005476 0.135597 -7.75 0.005491 0.135779 -7.74 0.005505 0.135962 -7.73 0.005520 0.136145 -7.72 0.005535 0.136329 -7.71 0.005550 0.136513 -7.7 0.005565 0.136698 -7.69 0.005580 0.136883 -7.68 0.005596 0.137069 -7.67 0.005611 0.137255 -7.66 0.005626 0.137441 -7.65 0.005642 0.137629 -7.64 0.005657 0.137816 -7.63 0.005673 0.138005 -7.62 0.005688 0.138193 -7.61 0.005704 0.138382 -7.6 0.005719 0.138572 -7.59 0.005735 0.138763 -7.58 0.005751 0.138953 -7.57 0.005767 0.139145 -7.56 0.005783 0.139336 -7.55 0.005799 0.139529 -7.54 0.005815 0.139722 -7.53 0.005831 0.139915 -7.52 0.005847 0.140109 -7.51 0.005864 0.140304 -7.5 0.005880 0.140499 -7.49 0.005896 0.140694 -7.48 0.005913 0.140890 -7.47 0.005929 0.141087 -7.46 0.005946 0.141284 -7.45 0.005963 0.141482 -7.44 0.005979 0.141681 -7.43 0.005996 0.141879 -7.42 0.006013 0.142079 -7.41 0.006030 0.142279 -7.4 0.006047 0.142480 -7.39 0.006064 0.142681 -7.38 0.006082 0.142882 -7.37 0.006099 0.143085 -7.36 0.006116 0.143288 -7.35 0.006134 0.143491 -7.34 0.006151 0.143695 -7.33 0.006169 0.143900 -7.32 0.006186 0.144105 -7.31 0.006204 0.144311 -7.3 0.006222 0.144517 -7.29 0.006240 0.144724 -7.28 0.006258 0.144931 -7.27 0.006276 0.145139 -7.26 0.006294 0.145348 -7.25 0.006312 0.145558 -7.24 0.006330 0.145767 -7.23 0.006349 0.145978 -7.22 0.006367 0.146189 -7.21 0.006386 0.146401 -7.2 0.006404 0.146613 -7.19 0.006423 0.146826 -7.18 0.006442 0.147040 -7.17 0.006460 0.147254 -7.16 0.006479 0.147469 -7.15 0.006498 0.147684 -7.14 0.006517 0.147900 -7.13 0.006537 0.148117 -7.12 0.006556 0.148335 -7.11 0.006575 0.148553 -7.1 0.006595 0.148771 -7.09 0.006614 0.148991 -7.08 0.006634 0.149210 -7.07 0.006653 0.149431 -7.06 0.006673 0.149652 -7.05 0.006693 0.149874 -7.04 0.006713 0.150097 -7.03 0.006733 0.150320 -7.02 0.006753 0.150544 -7.01 0.006773 0.150768 -7 0.006794 0.150994 -6.99 0.006814 0.151220 -6.98 0.006835 0.151446 -6.97 0.006855 0.151673 -6.96 0.006876 0.151901 -6.95 0.006897 0.152130 -6.94 0.006917 0.152359 -6.93 0.006938 0.152589 -6.92 0.006959 0.152820 -6.91 0.006981 0.153051 -6.9 0.007002 0.153283 -6.89 0.007023 0.153516 -6.88 0.007045 0.153750 -6.87 0.007066 0.153984 -6.86 0.007088 0.154219 -6.85 0.007110 0.154454 -6.84 0.007131 0.154691 -6.83 0.007153 0.154928 -6.82 0.007175 0.155166 -6.81 0.007198 0.155404 -6.8 0.007220 0.155643 -6.79 0.007242 0.155883 -6.78 0.007265 0.156124 -6.77 0.007287 0.156366 -6.76 0.007310 0.156608 -6.75 0.007333 0.156851 -6.74 0.007355 0.157095 -6.73 0.007378 0.157339 -6.72 0.007402 0.157584 -6.71 0.007425 0.157830 -6.7 0.007448 0.158077 -6.69 0.007471 0.158325 -6.68 0.007495 0.158573 -6.67 0.007519 0.158822 -6.66 0.007542 0.159072 -6.65 0.007566 0.159323 -6.64 0.007590 0.159574 -6.63 0.007614 0.159827 -6.62 0.007638 0.160080 -6.61 0.007663 0.160334 -6.6 0.007687 0.160588 -6.59 0.007712 0.160844 -6.58 0.007736 0.161100 -6.57 0.007761 0.161357 -6.56 0.007786 0.161615 -6.55 0.007811 0.161874 -6.54 0.007836 0.162134 -6.53 0.007862 0.162394 -6.52 0.007887 0.162655 -6.51 0.007913 0.162917 -6.5 0.007938 0.163180 -6.49 0.007964 0.163444 -6.48 0.007990 0.163709 -6.47 0.008016 0.163974 -6.46 0.008042 0.164241 -6.45 0.008068 0.164508 -6.44 0.008095 0.164776 -6.43 0.008121 0.165045 -6.42 0.008148 0.165315 -6.41 0.008175 0.165585 -6.4 0.008202 0.165857 -6.39 0.008229 0.166130 -6.38 0.008256 0.166403 -6.37 0.008283 0.166677 -6.36 0.008311 0.166953 -6.35 0.008338 0.167229 -6.34 0.008366 0.167506 -6.33 0.008394 0.167784 -6.32 0.008422 0.168063 -6.31 0.008450 0.168342 -6.3 0.008478 0.168623 -6.29 0.008507 0.168905 -6.28 0.008535 0.169187 -6.27 0.008564 0.169471 -6.26 0.008593 0.169755 -6.25 0.008622 0.170041 -6.24 0.008651 0.170327 -6.23 0.008681 0.170615 -6.22 0.008710 0.170903 -6.21 0.008740 0.171192 -6.2 0.008769 0.171483 -6.19 0.008799 0.171774 -6.18 0.008829 0.172066 -6.17 0.008860 0.172360 -6.16 0.008890 0.172654 -6.15 0.008921 0.172949 -6.14 0.008951 0.173245 -6.13 0.008982 0.173543 -6.12 0.009013 0.173841 -6.11 0.009044 0.174140 -6.1 0.009076 0.174441 -6.09 0.009107 0.174742 -6.08 0.009139 0.175045 -6.07 0.009171 0.175348 -6.06 0.009203 0.175653 -6.05 0.009235 0.175958 -6.04 0.009267 0.176265 -6.03 0.009300 0.176573 -6.02 0.009332 0.176882 -6.01 0.009365 0.177192 -6 0.009398 0.177503 -5.99 0.009432 0.177815 -5.98 0.009465 0.178128 -5.97 0.009498 0.178442 -5.96 0.009532 0.178757 -5.95 0.009566 0.179074 -5.94 0.009600 0.179392 -5.93 0.009635 0.179710 -5.92 0.009669 0.180030 -5.91 0.009704 0.180351 -5.9 0.009738 0.180673 -5.89 0.009773 0.180997 -5.88 0.009809 0.181321 -5.87 0.009844 0.181647 -5.86 0.009880 0.181974 -5.85 0.009915 0.182302 -5.84 0.009951 0.182631 -5.83 0.009988 0.182961 -5.82 0.010024 0.183293 -5.81 0.010061 0.183626 -5.8 0.010097 0.183960 -5.79 0.010134 0.184295 -5.78 0.010172 0.184631 -5.77 0.010209 0.184969 -5.76 0.010247 0.185308 -5.75 0.010284 0.185648 -5.74 0.010322 0.185989 -5.73 0.010361 0.186332 -5.72 0.010399 0.186675 -5.71 0.010438 0.187021 -5.7 0.010476 0.187367 -5.69 0.010516 0.187715 -5.68 0.010555 0.188064 -5.67 0.010594 0.188414 -5.66 0.010634 0.188766 -5.65 0.010674 0.189118 -5.64 0.010714 0.189473 -5.63 0.010755 0.189828 -5.62 0.010795 0.190185 -5.61 0.010836 0.190543 -5.6 0.010877 0.190903 -5.59 0.010919 0.191264 -5.58 0.010960 0.191626 -5.57 0.011002 0.191990 -5.56 0.011044 0.192355 -5.55 0.011086 0.192721 -5.54 0.011129 0.193089 -5.53 0.011172 0.193458 -5.52 0.011215 0.193829 -5.51 0.011258 0.194201 -5.5 0.011302 0.194574 -5.49 0.011345 0.194949 -5.48 0.011390 0.195326 -5.47 0.011434 0.195703 -5.46 0.011478 0.196083 -5.45 0.011523 0.196463 -5.44 0.011568 0.196846 -5.43 0.011614 0.197229 -5.42 0.011659 0.197615 -5.41 0.011705 0.198001 -5.4 0.011751 0.198390 -5.39 0.011798 0.198779 -5.38 0.011845 0.199171 -5.37 0.011891 0.199563 -5.36 0.011939 0.199958 -5.35 0.011986 0.200354 -5.34 0.012034 0.200751 -5.33 0.012082 0.201150 -5.32 0.012131 0.201551 -5.31 0.012179 0.201953 -5.3 0.012228 0.202357 -5.29 0.012278 0.202762 -5.28 0.012327 0.203169 -5.27 0.012377 0.203578 -5.26 0.012427 0.203989 -5.25 0.012478 0.204401 -5.24 0.012529 0.204814 -5.23 0.012580 0.205230 -5.22 0.012631 0.205647 -5.21 0.012683 0.206065 -5.2 0.012735 0.206486 -5.19 0.012787 0.206908 -5.18 0.012840 0.207332 -5.17 0.012893 0.207757 -5.16 0.012947 0.208185 -5.15 0.013000 0.208614 -5.14 0.013054 0.209045 -5.13 0.013109 0.209477 -5.12 0.013163 0.209912 -5.11 0.013218 0.210348 -5.1 0.013274 0.210786 -5.09 0.013330 0.211226 -5.08 0.013386 0.211668 -5.07 0.013442 0.212111 -5.06 0.013499 0.212557 -5.05 0.013556 0.213004 -5.04 0.013614 0.213453 -5.03 0.013672 0.213904 -5.02 0.013730 0.214357 -5.01 0.013789 0.214812 -5 0.013848 0.215269 -4.99 0.013907 0.215728 -4.98 0.013967 0.216188 -4.97 0.014027 0.216651 -4.96 0.014088 0.217116 -4.95 0.014149 0.217582 -4.94 0.014210 0.218051 -4.93 0.014272 0.218522 -4.92 0.014334 0.218994 -4.91 0.014396 0.219469 -4.9 0.014459 0.219946 -4.89 0.014523 0.220425 -4.88 0.014587 0.220906 -4.87 0.014651 0.221389 -4.86 0.014716 0.221874 -4.85 0.014781 0.222361 -4.84 0.014846 0.222851 -4.83 0.014912 0.223342 -4.82 0.014979 0.223836 -4.81 0.015045 0.224332 -4.8 0.015113 0.224830 -4.79 0.015180 0.225330 -4.78 0.015249 0.225833 -4.77 0.015317 0.226338 -4.76 0.015386 0.226845 -4.75 0.015456 0.227354 -4.74 0.015526 0.227866 -4.73 0.015597 0.228380 -4.72 0.015668 0.228896 -4.71 0.015739 0.229414 -4.7 0.015811 0.229935 -4.69 0.015884 0.230459 -4.68 0.015957 0.230984 -4.67 0.016030 0.231512 -4.66 0.016104 0.232043 -4.65 0.016179 0.232576 -4.64 0.016254 0.233111 -4.63 0.016329 0.233649 -4.62 0.016405 0.234189 -4.61 0.016482 0.234732 -4.6 0.016559 0.235277 -4.59 0.016637 0.235825 -4.58 0.016715 0.236375 -4.57 0.016794 0.236928 -4.56 0.016873 0.237483 -4.55 0.016953 0.238042 -4.54 0.017034 0.238602 -4.53 0.017115 0.239166 -4.52 0.017197 0.239732 -4.51 0.017279 0.240300 -4.5 0.017362 0.240872 -4.49 0.017445 0.241446 -4.48 0.017529 0.242023 -4.47 0.017614 0.242602 -4.46 0.017699 0.243184 -4.45 0.017785 0.243770 -4.44 0.017872 0.244358 -4.43 0.017959 0.244948 -4.42 0.018046 0.245542 -4.41 0.018135 0.246138 -4.4 0.018224 0.246738 -4.39 0.018314 0.247340 -4.38 0.018404 0.247945 -4.37 0.018495 0.248554 -4.36 0.018587 0.249165 -4.35 0.018679 0.249779 -4.34 0.018772 0.250396 -4.33 0.018866 0.251016 -4.32 0.018961 0.251640 -4.31 0.019056 0.252266 -4.3 0.019152 0.252896 -4.29 0.019249 0.253528 -4.28 0.019346 0.254164 -4.27 0.019444 0.254803 -4.26 0.019543 0.255445 -4.25 0.019643 0.256091 -4.24 0.019743 0.256740 -4.23 0.019844 0.257392 -4.22 0.019946 0.258047 -4.21 0.020049 0.258706 -4.2 0.020153 0.259368 -4.19 0.020257 0.260033 -4.18 0.020362 0.260702 -4.17 0.020468 0.261374 -4.16 0.020575 0.262050 -4.15 0.020683 0.262729 -4.14 0.020791 0.263411 -4.13 0.020901 0.264098 -4.12 0.021011 0.264787 -4.11 0.021122 0.265481 -4.1 0.021234 0.266178 -4.09 0.021347 0.266878 -4.08 0.021461 0.267583 -4.07 0.021576 0.268291 -4.06 0.021691 0.269002 -4.05 0.021808 0.269718 -4.04 0.021925 0.270437 -4.03 0.022044 0.271161 -4.02 0.022163 0.271888 -4.01 0.022283 0.272618 -4 0.022405 0.273353 -3.99 0.022527 0.274092 -3.98 0.022651 0.274835 -3.97 0.022775 0.275582 -3.96 0.022900 0.276333 -3.95 0.023027 0.277087 -3.94 0.023154 0.277846 -3.93 0.023283 0.278610 -3.92 0.023413 0.279377 -3.91 0.023543 0.280149 -3.9 0.023675 0.280924 -3.89 0.023808 0.281705 -3.88 0.023942 0.282489 -3.87 0.024077 0.283278 -3.86 0.024214 0.284071 -3.85 0.024351 0.284869 -3.84 0.024490 0.285671 -3.83 0.024630 0.286477 -3.82 0.024771 0.287289 -3.81 0.024913 0.288104 -3.8 0.025057 0.288925 -3.79 0.025201 0.289750 -3.78 0.025347 0.290579 -3.77 0.025495 0.291414 -3.76 0.025643 0.292253 -3.75 0.025793 0.293097 -3.74 0.025944 0.293946 -3.73 0.026097 0.294800 -3.72 0.026251 0.295659 -3.71 0.026406 0.296522 -3.7 0.026563 0.297391 -3.69 0.026721 0.298265 -3.68 0.026880 0.299144 -3.67 0.027041 0.300028 -3.66 0.027203 0.300917 -3.65 0.027367 0.301812 -3.64 0.027532 0.302712 -3.63 0.027699 0.303617 -3.62 0.027867 0.304528 -3.61 0.028037 0.305444 -3.6 0.028208 0.306366 -3.59 0.028381 0.307293 -3.58 0.028556 0.308225 -3.57 0.028732 0.309164 -3.56 0.028910 0.310108 -3.55 0.029089 0.311058 -3.54 0.029270 0.312013 -3.53 0.029453 0.312975 -3.52 0.029638 0.313942 -3.51 0.029824 0.314915 -3.5 0.030012 0.315895 -3.49 0.030202 0.316880 -3.48 0.030394 0.317872 -3.47 0.030587 0.318869 -3.46 0.030782 0.319873 -3.45 0.030979 0.320884 -3.44 0.031179 0.321900 -3.43 0.031380 0.322923 -3.42 0.031583 0.323953 -3.41 0.031787 0.324989 -3.4 0.031994 0.326031 -3.39 0.032203 0.327081 -3.38 0.032414 0.328137 -3.37 0.032627 0.329200 -3.36 0.032843 0.330269 -3.35 0.033060 0.331346 -3.34 0.033280 0.332429 -3.33 0.033501 0.333520 -3.32 0.033725 0.334618 -3.31 0.033951 0.335723 -3.3 0.034180 0.336835 -3.29 0.034411 0.337955 -3.28 0.034644 0.339082 -3.27 0.034879 0.340216 -3.26 0.035117 0.341358 -3.25 0.035357 0.342508 -3.24 0.035600 0.343665 -3.23 0.035845 0.344830 -3.22 0.036093 0.346003 -3.21 0.036344 0.347184 -3.2 0.036597 0.348373 -3.19 0.036853 0.349570 -3.18 0.037111 0.350775 -3.17 0.037372 0.351989 -3.16 0.037636 0.353211 -3.15 0.037903 0.354441 -3.14 0.038172 0.355680 -3.13 0.038445 0.356927 -3.12 0.038720 0.358184 -3.11 0.038998 0.359449 -3.1 0.039280 0.360722 -3.09 0.039564 0.362005 -3.08 0.039851 0.363297 -3.07 0.040142 0.364598 -3.06 0.040436 0.365908 -3.05 0.040733 0.367228 -3.04 0.041033 0.368557 -3.03 0.041337 0.369896 -3.02 0.041644 0.371244 -3.01 0.041954 0.372602 -3 0.042268 0.373970 -2.99 0.042586 0.375348 -2.98 0.042907 0.376736 -2.97 0.043232 0.378135 -2.96 0.043560 0.379543 -2.95 0.043892 0.380962 -2.94 0.044228 0.382392 -2.93 0.044568 0.383832 -2.92 0.044912 0.385283 -2.91 0.045260 0.386745 -2.9 0.045612 0.388218 -2.89 0.045968 0.389702 -2.88 0.046328 0.391197 -2.87 0.046692 0.392704 -2.86 0.047061 0.394222 -2.85 0.047434 0.395752 -2.84 0.047811 0.397294 -2.83 0.048193 0.398847 -2.82 0.048580 0.400413 -2.81 0.048971 0.401991 -2.8 0.049367 0.403581 -2.79 0.049768 0.405184 -2.78 0.050174 0.406799 -2.77 0.050585 0.408427 -2.76 0.051001 0.410068 -2.75 0.051422 0.411722 -2.74 0.051848 0.413389 -2.73 0.052279 0.415070 -2.72 0.052716 0.416764 -2.71 0.053159 0.418472 -2.7 0.053607 0.420194 -2.69 0.054060 0.421930 -2.68 0.054520 0.423680 -2.67 0.054985 0.425444 -2.66 0.055457 0.427223 -2.65 0.055934 0.429017 -2.64 0.056418 0.430825 -2.63 0.056908 0.432649 -2.62 0.057404 0.434488 -2.61 0.057907 0.436343 -2.6 0.058416 0.438213 -2.59 0.058932 0.440099 -2.58 0.059455 0.442001 -2.57 0.059986 0.443919 -2.56 0.060523 0.445854 -2.55 0.061067 0.447806 -2.54 0.061619 0.449774 -2.53 0.062178 0.451760 -2.52 0.062745 0.453762 -2.51 0.063320 0.455783 -2.5 0.063902 0.457821 -2.49 0.064493 0.459877 -2.48 0.065092 0.461952 -2.47 0.065699 0.464045 -2.46 0.066315 0.466156 -2.45 0.066940 0.468287 -2.44 0.067573 0.470437 -2.43 0.068216 0.472606 -2.42 0.068867 0.474796 -2.41 0.069528 0.477005 -2.4 0.070199 0.479234 -2.39 0.070879 0.481484 -2.38 0.071569 0.483755 -2.37 0.072270 0.486047 -2.36 0.072980 0.488360 -2.35 0.073701 0.490695 -2.34 0.074433 0.493052 -2.33 0.075176 0.495432 -2.32 0.075930 0.497834 -2.31 0.076696 0.500259 -2.3 0.077473 0.502707 -2.29 0.078261 0.505179 -2.28 0.079062 0.507674 -2.27 0.079876 0.510194 -2.26 0.080702 0.512739 -2.25 0.081540 0.515308 -2.24 0.082392 0.517903 -2.23 0.083257 0.520524 -2.22 0.084136 0.523170 -2.21 0.085029 0.525843 -2.2 0.085936 0.528543 -2.19 0.086858 0.531270 -2.18 0.087795 0.534024 -2.17 0.088747 0.536807 -2.16 0.089714 0.539618 -2.15 0.090697 0.542458 -2.14 0.091697 0.545327 -2.13 0.092713 0.548226 -2.12 0.093746 0.551155 -2.11 0.094796 0.554115 -2.1 0.095865 0.557106 -2.09 0.096951 0.560128 -2.08 0.098056 0.563183 -2.07 0.099179 0.566270 -2.06 0.100322 0.569390 -2.05 0.101485 0.572544 -2.04 0.102668 0.575732 -2.03 0.103872 0.578954 -2.02 0.105098 0.582212 -2.01 0.106345 0.585505 -2 0.107614 0.588835 -1.99 0.108906 0.592201 -1.98 0.110222 0.595605 -1.97 0.111561 0.599047 -1.96 0.112925 0.602528 -1.95 0.114314 0.606048 -1.94 0.115728 0.609608 -1.93 0.117169 0.613208 -1.92 0.118637 0.616850 -1.91 0.120133 0.620534 -1.9 0.121657 0.624260 -1.89 0.123210 0.628030 -1.88 0.124793 0.631844 -1.87 0.126407 0.635702 -1.86 0.128052 0.639606 -1.85 0.129729 0.643557 -1.84 0.131439 0.647554 -1.83 0.133184 0.651600 -1.82 0.134963 0.655694 -1.81 0.136777 0.659837 -1.8 0.138629 0.664031 -1.79 0.140518 0.668276 -1.78 0.142446 0.672573 -1.77 0.144414 0.676923 -1.76 0.146422 0.681327 -1.75 0.148473 0.685786 -1.74 0.150566 0.690301 -1.73 0.152705 0.694872 -1.72 0.154888 0.699501 -1.71 0.157119 0.704189 -1.7 0.159398 0.708937 -1.69 0.161726 0.713745 -1.68 0.164106 0.718615 -1.67 0.166539 0.723549 -1.66 0.169025 0.728546 -1.65 0.171567 0.733609 -1.64 0.174167 0.738738 -1.63 0.176826 0.743935 -1.62 0.179545 0.749200 -1.61 0.182328 0.754536 -1.6 0.185175 0.759943 -1.59 0.188089 0.765422 -1.58 0.191072 0.770975 -1.57 0.194125 0.776603 -1.56 0.197252 0.782307 -1.55 0.200454 0.788090 -1.54 0.203734 0.793951 -1.53 0.207094 0.799893 -1.52 0.210538 0.805917 -1.51 0.214067 0.812024 -1.5 0.217685 0.818217 -1.49 0.221394 0.824495 -1.48 0.225198 0.830862 -1.47 0.229099 0.837317 -1.46 0.233101 0.843864 -1.45 0.237208 0.850503 -1.44 0.241423 0.857236 -1.43 0.245749 0.864065 -1.42 0.250191 0.870991 -1.41 0.254753 0.878015 -1.4 0.259438 0.885140 -1.39 0.264252 0.892366 -1.38 0.269199 0.899697 -1.37 0.274284 0.907132 -1.36 0.279511 0.914674 -1.35 0.284886 0.922324 -1.34 0.290414 0.930084 -1.33 0.296102 0.937955 -1.32 0.301954 0.945939 -1.31 0.307978 0.954038 -1.3 0.314179 0.962252 -1.29 0.320564 0.970583 -1.28 0.327141 0.979032 -1.27 0.333917 0.987601 -1.26 0.340900 0.996291 -1.25 0.348097 1.005103 -1.24 0.355517 1.014037 -1.23 0.363169 1.023094 -1.22 0.371062 1.032276 -1.21 0.379206 1.041582 -1.2 0.387610 1.051013 -1.19 0.396285 1.060569 -1.18 0.405243 1.070250 -1.17 0.414494 1.080055 -1.16 0.424051 1.089984 -1.15 0.433925 1.100035 -1.14 0.444130 1.110208 -1.13 0.454680 1.120500 -1.12 0.465589 1.130909 -1.11 0.476871 1.141433 -1.1 0.488541 1.152068 -1.09 0.500617 1.162810 -1.08 0.513113 1.173655 -1.07 0.526049 1.184598 -1.06 0.539440 1.195632 -1.05 0.553307 1.206751 -1.04 0.567669 1.217948 -1.03 0.582544 1.229212 -1.02 0.597955 1.240535 -1.01 0.613922 1.251904 -1 0.630467 1.263309 -0.99 0.647613 1.274734 -0.98 0.665382 1.286164 -0.97 0.683800 1.297583 -0.96 0.702889 1.308971 -0.95 0.722675 1.320307 -0.94 0.743182 1.331569 -0.93 0.764436 1.342731 -0.92 0.786462 1.353765 -0.91 0.809286 1.364642 -0.9 0.832932 1.375328 -0.89 0.857427 1.385788 -0.88 0.882794 1.395982 -0.87 0.909056 1.405869 -0.86 0.936237 1.415402 -0.85 0.964358 1.424533 -0.84 0.993437 1.433208 -0.83 1.023493 1.441372 -0.82 1.054539 1.448963 -0.81 1.086587 1.455918 -0.8 1.119646 1.462169 -0.79 1.153718 1.467643 -0.78 1.188803 1.472266 -0.77 1.224894 1.475961 -0.76 1.261980 1.478645 -0.75 1.300042 1.480235 -0.74 1.339054 1.480647 -0.73 1.378984 1.479794 -0.72 1.419790 1.477589 -0.71 1.461425 1.473946 -0.7 1.503831 1.468779 -0.69 1.546942 1.462006 -0.68 1.590686 1.453546 -0.67 1.634980 1.443325 -0.66 1.679735 1.431269 -0.65 1.724852 1.417316 -0.64 1.770229 1.401405 -0.63 1.815753 1.383485 -0.62 1.861309 1.363514 -0.61 1.906774 1.341458 -0.6 1.952023 1.317291 -0.59 1.996926 1.290998 -0.58 2.041351 1.262576 -0.57 2.085165 1.232030 -0.56 2.128234 1.199379 -0.55 2.170426 1.164651 -0.54 2.211611 1.127886 -0.53 2.251662 1.089136 -0.52 2.290459 1.048463 -0.51 2.327886 1.005938 -0.5 2.363838 0.961641 -0.49 2.398216 0.915660 -0.48 2.430933 0.868088 -0.47 2.461910 0.819021 -0.46 2.491078 0.768557 -0.45 2.518378 0.716796 -0.44 2.543757 0.663836 -0.43 2.567172 0.609771 -0.42 2.588580 0.554695 -0.41 2.607945 0.498698 -0.4 2.625231 0.441869 -0.39 2.640403 0.384295 -0.38 2.653424 0.326064 -0.37 2.664259 0.267269 -0.36 2.672871 0.208003 -0.35 2.679226 0.148367 -0.34 2.683291 0.088471 -0.33 2.685041 0.028428 -0.32 2.684455 -0.031637 -0.31 2.681525 -0.091596 -0.3 2.676253 -0.151316 -0.29 2.668656 -0.210658 -0.28 2.658766 -0.269487 -0.27 2.646628 -0.327671 -0.26 2.632304 -0.385082 -0.25 2.615865 -0.441604 -0.24 2.597397 -0.497132 -0.23 2.576989 -0.551574 -0.22 2.554737 -0.604853 -0.21 2.530738 -0.656904 -0.2 2.505084 -0.707679 -0.19 2.477867 -0.757137 -0.18 2.449169 -0.805250 -0.17 2.419064 -0.851994 -0.16 2.387618 -0.897349 -0.15 2.354889 -0.941296 -0.14 2.320928 -0.983814 -0.13 2.285779 -1.024875 -0.12 2.249487 -1.064449 -0.11 2.212093 -1.102497 -0.1 2.173642 -1.138973 -0.090000 2.134185 -1.173827 -0.080000 2.093780 -1.207004 -0.070000 2.052493 -1.238446 -0.060000 2.010402 -1.268097 -0.050000 1.967595 -1.295902 -0.040000 1.924169 -1.321813 -0.030000 1.880233 -1.345790 -0.020000 1.835902 -1.367802 -0.010000 1.791299 -1.387831 0 1.746548 -1.405870 0.009999 1.701776 -1.421928 0.019999 1.657111 -1.436026 0.029999 1.612674 -1.448198 0.039999 1.568585 -1.458493 0.049999 1.524954 -1.466968 0.059999 1.481883 -1.473691 0.069999 1.439467 -1.478738 0.079999 1.397789 -1.482192 0.089999 1.356922 -1.484141 0.099999 1.316929 -1.484676 0.11 1.277861 -1.483890 0.12 1.239762 -1.481876 0.13 1.202664 -1.478727 0.14 1.166590 -1.474534 0.15 1.131558 -1.469387 0.16 1.097575 -1.463370 0.17 1.064643 -1.456566 0.18 1.032760 -1.449053 0.19 1.001916 -1.440904 0.2 0.972098 -1.432190 0.21 0.943290 -1.422975 0.22 0.915472 -1.413320 0.23 0.888621 -1.403281 0.24 0.862715 -1.392909 0.25 0.837727 -1.382253 0.26 0.813631 -1.371357 0.27 0.790399 -1.360260 0.28 0.768004 -1.348999 0.29 0.746417 -1.337608 0.3 0.725610 -1.326116 0.31 0.705556 -1.314552 0.32 0.686226 -1.302940 0.33 0.667594 -1.291303 0.34 0.649633 -1.279659 0.35 0.632317 -1.268029 0.36 0.615621 -1.256426 0.37 0.599520 -1.244867 0.38 0.583991 -1.233363 0.39 0.569011 -1.221925 0.4 0.554557 -1.210564 0.41 0.540608 -1.199289 0.42 0.527144 -1.188106 0.43 0.514145 -1.177023 0.44 0.501592 -1.166045 0.45 0.489467 -1.155178 0.46 0.477752 -1.144425 0.47 0.466431 -1.133789 0.48 0.455487 -1.123275 0.49 0.444907 -1.112884 0.5 0.434673 -1.102618 0.51 0.424774 -1.092478 0.52 0.415195 -1.082466 0.53 0.405924 -1.072583 0.54 0.396949 -1.062828 0.55 0.388257 -1.053202 0.56 0.379837 -1.043705 0.57 0.371680 -1.034336 0.58 0.363774 -1.025095 0.59 0.356110 -1.015982 0.6 0.348679 -1.006995 0.61 0.341472 -0.998133 0.62 0.334479 -0.989395 0.63 0.327694 -0.980781 0.64 0.321108 -0.972288 0.65 0.314714 -0.963915 0.66 0.308505 -0.955662 0.67 0.302474 -0.947526 0.68 0.296614 -0.939506 0.69 0.290919 -0.931601 0.7 0.285384 -0.923808 0.71 0.280002 -0.916127 0.72 0.274768 -0.908555 0.73 0.269677 -0.901091 0.74 0.264724 -0.893733 0.75 0.259904 -0.886480 0.76 0.255212 -0.879329 0.77 0.250645 -0.872281 0.78 0.246197 -0.865331 0.79 0.241864 -0.858480 0.8 0.237644 -0.851725 0.81 0.233532 -0.845065 0.82 0.229524 -0.838498 0.83 0.225617 -0.832022 0.84 0.221808 -0.825637 0.85 0.218093 -0.819340 0.86 0.214470 -0.813130 0.87 0.210935 -0.807005 0.88 0.207487 -0.800965 0.89 0.204121 -0.795006 0.9 0.200835 -0.789129 0.91 0.197628 -0.783332 0.92 0.194496 -0.777612 0.93 0.191438 -0.771970 0.94 0.188450 -0.766403 0.95 0.185531 -0.760910 0.96 0.182679 -0.755490 0.97 0.179892 -0.750141 0.98 0.177167 -0.744863 0.99 0.174503 -0.739654 1 0.171899 -0.734513 1.01 0.169352 -0.729438 1.02 0.166861 -0.724429 1.03 0.164424 -0.719484 1.04 0.162040 -0.714603 1.05 0.159707 -0.709784 1.06 0.157423 -0.705026 1.07 0.155188 -0.700327 1.08 0.153000 -0.695688 1.09 0.150858 -0.691107 1.1 0.148760 -0.686582 1.11 0.146705 -0.682114 1.12 0.144693 -0.677701 1.13 0.142721 -0.673342 1.14 0.140789 -0.669035 1.15 0.138896 -0.664782 1.16 0.137041 -0.660579 1.17 0.135222 -0.656427 1.18 0.133439 -0.652325 1.19 0.131691 -0.648271 1.2 0.129977 -0.644266 1.21 0.128296 -0.640308 1.22 0.126648 -0.636396 1.23 0.125031 -0.632530 1.24 0.123444 -0.628708 1.25 0.121888 -0.624931 1.26 0.120360 -0.621198 1.27 0.118861 -0.617507 1.28 0.117390 -0.613858 1.29 0.115946 -0.610250 1.3 0.114528 -0.606684 1.31 0.113136 -0.603157 1.32 0.111769 -0.599669 1.33 0.110427 -0.596221 1.34 0.109108 -0.592811 1.35 0.107813 -0.589438 1.36 0.106541 -0.586102 1.37 0.105291 -0.582802 1.38 0.104063 -0.579539 1.39 0.102857 -0.576310 1.4 0.101671 -0.573117 1.41 0.100505 -0.569957 1.42 0.099360 -0.566832 1.43 0.098233 -0.563739 1.44 0.097126 -0.560679 1.45 0.096037 -0.557651 1.46 0.094967 -0.554655 1.47 0.093914 -0.551690 1.48 0.092879 -0.548756 1.49 0.091860 -0.545851 1.5 0.090859 -0.542977 1.51 0.089873 -0.540132 1.52 0.088904 -0.537316 1.53 0.087950 -0.534529 1.54 0.087011 -0.531769 1.55 0.086087 -0.529038 1.56 0.085178 -0.526333 1.57 0.084283 -0.523656 1.58 0.083402 -0.521005 1.59 0.082535 -0.518380 1.6 0.081681 -0.515781 1.61 0.080840 -0.513207 1.62 0.080012 -0.510658 1.63 0.079197 -0.508134 1.64 0.078395 -0.505634 1.65 0.077604 -0.503158 1.66 0.076825 -0.500706 1.67 0.076058 -0.498277 1.68 0.075302 -0.495871 1.69 0.074558 -0.493488 1.7 0.073824 -0.491127 1.71 0.073102 -0.488788 1.72 0.072389 -0.486471 1.73 0.071688 -0.484175 1.74 0.070996 -0.481901 1.75 0.070314 -0.479647 1.76 0.069642 -0.477414 1.77 0.068980 -0.475201 1.78 0.068327 -0.473009 1.79 0.067683 -0.470836 1.8 0.067048 -0.468683 1.81 0.066422 -0.466549 1.82 0.065805 -0.464434 1.83 0.065196 -0.462337 1.84 0.064596 -0.460260 1.85 0.064004 -0.458200 1.86 0.063420 -0.456159 1.87 0.062844 -0.454135 1.88 0.062276 -0.452129 1.89 0.061715 -0.450141 1.9 0.061162 -0.448169 1.91 0.060617 -0.446215 1.92 0.060079 -0.444277 1.93 0.059547 -0.442356 1.94 0.059023 -0.440451 1.95 0.058506 -0.438562 1.96 0.057995 -0.436689 1.97 0.057491 -0.434832 1.98 0.056994 -0.432990 1.99 0.056503 -0.431163 2 0.056019 -0.429352 2.01 0.055540 -0.427556 2.02 0.055068 -0.425774 2.03 0.054602 -0.424007 2.04 0.054141 -0.422255 2.05 0.053686 -0.420516 2.06 0.053237 -0.418792 2.07 0.052794 -0.417081 2.08 0.052356 -0.415385 2.09 0.051924 -0.413702 2.1 0.051497 -0.412032 2.11 0.051075 -0.410376 2.12 0.050658 -0.408732 2.13 0.050247 -0.407102 2.14 0.049840 -0.405484 2.15 0.049438 -0.403880 2.16 0.049042 -0.402287 2.17 0.048649 -0.400707 2.18 0.048262 -0.399139 2.19 0.047879 -0.397584 2.2 0.047501 -0.396040 2.21 0.047127 -0.394508 2.22 0.046758 -0.392987 2.23 0.046393 -0.391479 2.24 0.046032 -0.389981 2.25 0.045675 -0.388495 2.26 0.045323 -0.387020 2.27 0.044974 -0.385557 2.28 0.044630 -0.384104 2.29 0.044289 -0.382661 2.3 0.043952 -0.381230 2.31 0.043620 -0.379809 2.32 0.043291 -0.378399 2.33 0.042965 -0.376998 2.34 0.042644 -0.375608 2.35 0.042325 -0.374229 2.36 0.042011 -0.372859 2.37 0.041700 -0.371499 2.38 0.041392 -0.370149 2.39 0.041088 -0.368808 2.4 0.040787 -0.367477 2.41 0.040489 -0.366156 2.42 0.040195 -0.364844 2.43 0.039904 -0.363541 2.44 0.039616 -0.362248 2.45 0.039331 -0.360963 2.46 0.039049 -0.359688 2.47 0.038770 -0.358421 2.48 0.038494 -0.357164 2.49 0.038222 -0.355915 2.5 0.037951 -0.354674 2.51 0.037684 -0.353442 2.52 0.037420 -0.352219 2.53 0.037158 -0.351004 2.54 0.036899 -0.349797 2.55 0.036643 -0.348598 2.56 0.036390 -0.347408 2.57 0.036139 -0.346226 2.58 0.035891 -0.345051 2.59 0.035645 -0.343885 2.6 0.035402 -0.342726 2.61 0.035161 -0.341575 2.62 0.034922 -0.340431 2.63 0.034687 -0.339296 2.64 0.034453 -0.338167 2.65 0.034222 -0.337046 2.66 0.033993 -0.335933 2.67 0.033766 -0.334826 2.68 0.033542 -0.333727 2.69 0.033320 -0.332635 2.7 0.033100 -0.331550 2.71 0.032882 -0.330473 2.72 0.032667 -0.329402 2.73 0.032453 -0.328338 2.74 0.032242 -0.327280 2.75 0.032033 -0.326230 2.76 0.031825 -0.325186 2.77 0.031620 -0.324149 2.78 0.031417 -0.323118 2.79 0.031215 -0.322094 2.8 0.031016 -0.321076 2.81 0.030819 -0.320064 2.82 0.030623 -0.319059 2.83 0.030429 -0.318060 2.84 0.030237 -0.317068 2.85 0.030047 -0.316081 2.86 0.029859 -0.315101 2.87 0.029672 -0.314126 2.88 0.029487 -0.313158 2.89 0.029304 -0.312195 2.9 0.029123 -0.311239 2.91 0.028943 -0.310288 2.92 0.028765 -0.309343 2.93 0.028588 -0.308403 2.94 0.028414 -0.307469 2.95 0.028240 -0.306541 2.96 0.028069 -0.305619 2.97 0.027899 -0.304702 2.98 0.027730 -0.303790 2.99 0.027563 -0.302884 3 0.027397 -0.301983 3.01 0.027233 -0.301087 3.02 0.027071 -0.300197 3.03 0.026910 -0.299312 3.04 0.026750 -0.298432 3.05 0.026592 -0.297557 3.06 0.026435 -0.296687 3.07 0.026279 -0.295823 3.08 0.026125 -0.294963 3.09 0.025973 -0.294108 3.1 0.025821 -0.293258 3.11 0.025671 -0.292413 3.12 0.025522 -0.291573 3.13 0.025375 -0.290738 3.14 0.025228 -0.289907 3.15 0.025083 -0.289081 3.16 0.024940 -0.288260 3.17 0.024797 -0.287444 3.18 0.024656 -0.286632 3.19 0.024516 -0.285824 3.2 0.024377 -0.285021 3.21 0.024239 -0.284223 3.22 0.024103 -0.283429 3.23 0.023967 -0.282639 3.24 0.023833 -0.281854 3.25 0.023700 -0.281073 3.26 0.023568 -0.280296 3.27 0.023437 -0.279524 3.28 0.023307 -0.278756 3.29 0.023178 -0.277992 3.3 0.023051 -0.277232 3.31 0.022924 -0.276476 3.32 0.022798 -0.275725 3.33 0.022674 -0.274977 3.34 0.022550 -0.274234 3.35 0.022428 -0.273494 3.36 0.022306 -0.272758 3.37 0.022186 -0.272027 3.38 0.022066 -0.271299 3.39 0.021947 -0.270575 3.4 0.021830 -0.269855 3.41 0.021713 -0.269139 3.42 0.021597 -0.268426 3.43 0.021482 -0.267718 3.44 0.021368 -0.267013 3.45 0.021255 -0.266311 3.46 0.021143 -0.265614 3.47 0.021032 -0.264920 3.48 0.020921 -0.264229 3.49 0.020812 -0.263542 3.5 0.020703 -0.262859 3.51 0.020595 -0.262179 3.52 0.020488 -0.261503 3.53 0.020382 -0.260830 3.54 0.020277 -0.260160 3.55 0.020172 -0.259494 3.56 0.020069 -0.258832 3.57 0.019966 -0.258173 3.58 0.019864 -0.257517 3.59 0.019762 -0.256864 3.6 0.019662 -0.256215 3.61 0.019562 -0.255569 3.62 0.019463 -0.254926 3.63 0.019365 -0.254286 3.64 0.019267 -0.253650 3.65 0.019170 -0.253017 3.66 0.019074 -0.252386 3.67 0.018979 -0.251759 3.68 0.018884 -0.251136 3.69 0.018790 -0.250515 3.7 0.018697 -0.249897 3.71 0.018604 -0.249282 3.72 0.018512 -0.248670 3.73 0.018421 -0.248062 3.74 0.018331 -0.247456 3.75 0.018241 -0.246853 3.76 0.018152 -0.246253 3.77 0.018063 -0.245656 3.78 0.017975 -0.245062 3.79 0.017888 -0.244470 3.8 0.017801 -0.243882 3.81 0.017715 -0.243296 3.82 0.017630 -0.242713 3.83 0.017545 -0.242133 3.84 0.017461 -0.241556 3.85 0.017377 -0.240981 3.86 0.017294 -0.240410 3.87 0.017212 -0.239840 3.88 0.017130 -0.239274 3.89 0.017049 -0.238710 3.9 0.016969 -0.238149 3.91 0.016888 -0.237590 3.92 0.016809 -0.237034 3.93 0.016730 -0.236481 3.94 0.016652 -0.235930 3.95 0.016574 -0.235382 3.96 0.016497 -0.234836 3.97 0.016420 -0.234293 3.98 0.016344 -0.233752 3.99 0.016268 -0.233214 4 0.016193 -0.232678 4.01 0.016118 -0.232145 4.02 0.016044 -0.231614 4.03 0.015971 -0.231085 4.04 0.015897 -0.230559 4.05 0.015825 -0.230036 4.06 0.015753 -0.229514 4.07 0.015681 -0.228995 4.08 0.015610 -0.228479 4.09 0.015539 -0.227964 4.1 0.015469 -0.227452 4.11 0.015400 -0.226942 4.12 0.015330 -0.226435 4.13 0.015262 -0.225930 4.14 0.015193 -0.225427 4.15 0.015125 -0.224926 4.16 0.015058 -0.224427 4.17 0.014991 -0.223931 4.18 0.014925 -0.223437 4.19 0.014859 -0.222945 4.2 0.014793 -0.222455 4.21 0.014728 -0.221967 4.22 0.014663 -0.221482 4.23 0.014599 -0.220998 4.24 0.014535 -0.220517 4.25 0.014471 -0.220038 4.26 0.014408 -0.219561 4.27 0.014346 -0.219086 4.28 0.014283 -0.218612 4.29 0.014222 -0.218141 4.3 0.014160 -0.217672 4.31 0.014099 -0.217205 4.32 0.014039 -0.216740 4.33 0.013978 -0.216277 4.34 0.013918 -0.215816 4.35 0.013859 -0.215357 4.36 0.013800 -0.214900 4.37 0.013741 -0.214445 4.38 0.013683 -0.213991 4.39 0.013625 -0.213540 4.4 0.013567 -0.213090 4.41 0.013510 -0.212643 4.42 0.013453 -0.212197 4.43 0.013396 -0.211753 4.44 0.013340 -0.211311 4.45 0.013284 -0.210871 4.46 0.013229 -0.210432 4.47 0.013174 -0.209996 4.48 0.013119 -0.209561 4.49 0.013065 -0.209128 4.5 0.013011 -0.208697 4.51 0.012957 -0.208267 4.52 0.012903 -0.207839 4.53 0.012850 -0.207414 4.54 0.012797 -0.206989 4.55 0.012745 -0.206567 4.56 0.012693 -0.206146 4.57 0.012641 -0.205727 4.58 0.012590 -0.205310 4.59 0.012538 -0.204894 4.6 0.012488 -0.204480 4.61 0.012437 -0.204068 4.62 0.012387 -0.203657 4.63 0.012337 -0.203248 4.64 0.012287 -0.202841 4.65 0.012238 -0.202435 4.66 0.012189 -0.202031 4.67 0.012140 -0.201628 4.68 0.012091 -0.201227 4.69 0.012043 -0.200828 4.7 0.011995 -0.200430 4.71 0.011948 -0.200034 4.72 0.011900 -0.199639 4.73 0.011853 -0.199246 4.74 0.011807 -0.198854 4.75 0.011760 -0.198464 4.76 0.011714 -0.198076 4.77 0.011668 -0.197689 4.78 0.011622 -0.197303 4.79 0.011577 -0.196919 4.8 0.011532 -0.196537 4.81 0.011487 -0.196156 4.82 0.011442 -0.195776 4.83 0.011398 -0.195398 4.84 0.011354 -0.195022 4.85 0.011310 -0.194646 4.86 0.011266 -0.194273 4.87 0.011223 -0.193900 4.88 0.011180 -0.193529 4.89 0.011137 -0.193160 4.9 0.011095 -0.192792 4.91 0.011052 -0.192425 4.92 0.011010 -0.192060 4.93 0.010968 -0.191696 4.94 0.010927 -0.191333 4.95 0.010885 -0.190972 4.96 0.010844 -0.190612 4.97 0.010803 -0.190254 4.98 0.010762 -0.189897 4.99 0.010722 -0.189541 5 0.010682 -0.189187 5.01 0.010642 -0.188833 5.02 0.010602 -0.188482 5.03 0.010562 -0.188131 5.04 0.010523 -0.187782 5.05 0.010484 -0.187434 5.06 0.010445 -0.187087 5.07 0.010406 -0.186742 5.08 0.010368 -0.186398 5.09 0.010330 -0.186055 5.1 0.010292 -0.185713 5.11 0.010254 -0.185373 5.12 0.010216 -0.185034 5.13 0.010179 -0.184696 5.14 0.010141 -0.184359 5.15 0.010104 -0.184024 5.16 0.010068 -0.183690 5.17 0.010031 -0.183357 5.18 0.009995 -0.183025 5.19 0.009958 -0.182694 5.2 0.009922 -0.182365 5.21 0.009887 -0.182037 5.22 0.009851 -0.181710 5.23 0.009815 -0.181384 5.24 0.009780 -0.181059 5.25 0.009745 -0.180736 5.26 0.009710 -0.180413 5.27 0.009676 -0.180092 5.28 0.009641 -0.179772 5.29 0.009607 -0.179453 5.3 0.009573 -0.179135 5.31 0.009539 -0.178818 5.32 0.009505 -0.178503 5.33 0.009471 -0.178188 5.34 0.009438 -0.177875 5.35 0.009405 -0.177563 5.36 0.009372 -0.177251 5.37 0.009339 -0.176941 5.38 0.009306 -0.176632 5.39 0.009273 -0.176324 5.4 0.009241 -0.176017 5.41 0.009209 -0.175712 5.42 0.009177 -0.175407 5.43 0.009145 -0.175103 5.44 0.009113 -0.174800 5.45 0.009082 -0.174499 5.46 0.009050 -0.174198 5.47 0.009019 -0.173899 5.48 0.008988 -0.173600 5.49 0.008957 -0.173303 5.5 0.008926 -0.173006 5.51 0.008896 -0.172711 5.52 0.008866 -0.172416 5.53 0.008835 -0.172123 5.54 0.008805 -0.171830 5.55 0.008775 -0.171539 5.56 0.008745 -0.171248 5.57 0.008716 -0.170959 5.58 0.008686 -0.170670 5.59 0.008657 -0.170383 5.6 0.008628 -0.170096 5.61 0.008599 -0.169810 5.62 0.008570 -0.169526 5.63 0.008541 -0.169242 5.64 0.008512 -0.168959 5.65 0.008484 -0.168677 5.66 0.008456 -0.168396 5.67 0.008427 -0.168116 5.68 0.008399 -0.167837 5.69 0.008371 -0.167559 5.7 0.008344 -0.167282 5.71 0.008316 -0.167006 5.72 0.008289 -0.166730 5.73 0.008261 -0.166456 5.74 0.008234 -0.166182 5.75 0.008207 -0.165910 5.76 0.008180 -0.165638 5.77 0.008153 -0.165367 5.78 0.008126 -0.165097 5.79 0.008100 -0.164828 5.8 0.008073 -0.164559 5.81 0.008047 -0.164292 5.82 0.008021 -0.164026 5.83 0.007995 -0.163760 5.84 0.007969 -0.163495 5.85 0.007943 -0.163231 5.86 0.007917 -0.162968 5.87 0.007892 -0.162706 5.88 0.007867 -0.162444 5.89 0.007841 -0.162184 5.9 0.007816 -0.161924 5.91 0.007791 -0.161665 5.92 0.007766 -0.161407 5.93 0.007741 -0.161150 5.94 0.007717 -0.160893 5.95 0.007692 -0.160638 5.96 0.007667 -0.160383 5.97 0.007643 -0.160129 5.98 0.007619 -0.159875 5.99 0.007595 -0.159623 6 0.007571 -0.159371 6.01 0.007547 -0.159121 6.02 0.007523 -0.158871 6.03 0.007499 -0.158621 6.04 0.007476 -0.158373 6.05 0.007453 -0.158125 6.06 0.007429 -0.157878 6.07 0.007406 -0.157632 6.08 0.007383 -0.157387 6.09 0.007360 -0.157142 6.1 0.007337 -0.156898 6.11 0.007314 -0.156655 6.12 0.007291 -0.156412 6.13 0.007269 -0.156171 6.14 0.007246 -0.155930 6.15 0.007224 -0.155690 6.16 0.007202 -0.155450 6.17 0.007180 -0.155212 6.18 0.007158 -0.154974 6.19 0.007136 -0.154737 6.2 0.007114 -0.154500 6.21 0.007092 -0.154264 6.22 0.007070 -0.154029 6.23 0.007049 -0.153795 6.24 0.007027 -0.153561 6.25 0.007006 -0.153328 6.26 0.006985 -0.153096 6.27 0.006964 -0.152865 6.28 0.006942 -0.152634 6.29 0.006921 -0.152404 6.3 0.006901 -0.152174 6.31 0.006880 -0.151945 6.32 0.006859 -0.151717 6.33 0.006838 -0.151490 6.34 0.006818 -0.151263 6.35 0.006798 -0.151037 6.36 0.006777 -0.150812 6.37 0.006757 -0.150587 6.38 0.006737 -0.150363 6.39 0.006717 -0.150140 6.4 0.006697 -0.149917 6.41 0.006677 -0.149695 6.42 0.006657 -0.149474 6.43 0.006637 -0.149253 6.44 0.006618 -0.149033 6.45 0.006598 -0.148814 6.46 0.006579 -0.148595 6.47 0.006560 -0.148377 6.48 0.006540 -0.148159 6.49 0.006521 -0.147942 6.5 0.006502 -0.147726 6.51 0.006483 -0.147510 6.52 0.006464 -0.147296 6.53 0.006445 -0.147081 6.54 0.006426 -0.146867 6.55 0.006408 -0.146654 6.56 0.006389 -0.146442 6.57 0.006371 -0.146230 6.58 0.006352 -0.146019 6.59 0.006334 -0.145808 6.6 0.006316 -0.145598 6.61 0.006297 -0.145389 6.62 0.006279 -0.145180 6.63 0.006261 -0.144972 6.64 0.006243 -0.144764 6.65 0.006225 -0.144557 6.66 0.006208 -0.144350 6.67 0.006190 -0.144144 6.68 0.006172 -0.143939 6.69 0.006155 -0.143734 6.7 0.006137 -0.143530 6.71 0.006120 -0.143327 6.72 0.006102 -0.143124 6.73 0.006085 -0.142921 6.74 0.006068 -0.142720 6.75 0.006051 -0.142518 6.76 0.006033 -0.142318 6.77 0.006016 -0.142118 6.78 0.006000 -0.141918 6.79 0.005983 -0.141719 6.8 0.005966 -0.141521 6.81 0.005949 -0.141323 6.82 0.005933 -0.141125 6.83 0.005916 -0.140928 6.84 0.005899 -0.140732 6.85 0.005883 -0.140537 6.86 0.005867 -0.140341 6.87 0.005850 -0.140147 6.88 0.005834 -0.139953 6.89 0.005818 -0.139759 6.9 0.005802 -0.139566 6.91 0.005786 -0.139374 6.92 0.005770 -0.139182 6.93 0.005754 -0.138990 6.94 0.005738 -0.138799 6.95 0.005722 -0.138609 6.96 0.005707 -0.138419 6.97 0.005691 -0.138230 6.98 0.005675 -0.138041 6.99 0.005660 -0.137853 7 0.005645 -0.137665 7.01 0.005629 -0.137478 7.02 0.005614 -0.137291 7.03 0.005599 -0.137105 7.04 0.005583 -0.136919 7.05 0.005568 -0.136734 7.06 0.005553 -0.136549 7.07 0.005538 -0.136365 7.08 0.005523 -0.136181 7.09 0.005508 -0.135997 7.1 0.005493 -0.135815 7.11 0.005479 -0.135632 7.12 0.005464 -0.135451 7.13 0.005449 -0.135269 7.14 0.005435 -0.135088 7.15 0.005420 -0.134908 7.16 0.005406 -0.134728 7.17 0.005391 -0.134549 7.18 0.005377 -0.134370 7.19 0.005363 -0.134192 7.2 0.005348 -0.134014 7.21 0.005334 -0.133836 7.22 0.005320 -0.133659 7.23 0.005306 -0.133482 7.24 0.005292 -0.133306 7.25 0.005278 -0.133131 7.26 0.005264 -0.132956 7.27 0.005250 -0.132781 7.28 0.005236 -0.132607 7.29 0.005223 -0.132433 7.3 0.005209 -0.132259 7.31 0.005195 -0.132087 7.32 0.005182 -0.131914 7.33 0.005168 -0.131742 7.34 0.005155 -0.131571 7.35 0.005141 -0.131400 7.36 0.005128 -0.131229 7.37 0.005115 -0.131059 7.38 0.005101 -0.130889 7.39 0.005088 -0.130720 7.4 0.005075 -0.130551 7.41 0.005062 -0.130382 7.42 0.005049 -0.130214 7.43 0.005036 -0.130047 7.44 0.005023 -0.129879 7.45 0.005010 -0.129713 7.46 0.004997 -0.129546 7.47 0.004984 -0.129381 7.48 0.004972 -0.129215 7.49 0.004959 -0.129050 7.5 0.004946 -0.128885 7.51 0.004934 -0.128721 7.52 0.004921 -0.128557 7.53 0.004908 -0.128394 7.54 0.004896 -0.128231 7.55 0.004884 -0.128069 7.56 0.004871 -0.127907 7.57 0.004859 -0.127745 7.58 0.004847 -0.127584 7.59 0.004834 -0.127423 7.6 0.004822 -0.127262 7.61 0.004810 -0.127102 7.62 0.004798 -0.126942 7.63 0.004786 -0.126783 7.64 0.004774 -0.126624 7.65 0.004762 -0.126466 7.66 0.004750 -0.126308 7.67 0.004738 -0.126150 7.68 0.004726 -0.125993 7.69 0.004714 -0.125836 7.7 0.004703 -0.125679 7.71 0.004691 -0.125523 7.72 0.004679 -0.125367 7.73 0.004668 -0.125212 7.74 0.004656 -0.125057 7.75 0.004645 -0.124902 7.76 0.004633 -0.124748 7.77 0.004622 -0.124594 7.78 0.004610 -0.124441 7.79 0.004599 -0.124288 7.8 0.004588 -0.124135 7.81 0.004576 -0.123983 7.82 0.004565 -0.123831 7.83 0.004554 -0.123679 7.84 0.004543 -0.123528 7.85 0.004532 -0.123377 7.86 0.004521 -0.123227 7.87 0.004510 -0.123076 7.88 0.004499 -0.122927 7.89 0.004488 -0.122777 7.9 0.004477 -0.122628 7.91 0.004466 -0.122480 7.92 0.004455 -0.122331 7.93 0.004444 -0.122183 7.94 0.004433 -0.122036 7.95 0.004423 -0.121889 7.96 0.004412 -0.121742 7.97 0.004401 -0.121595 7.98 0.004391 -0.121449 7.99 0.004380 -0.121303 8 0.004370 -0.121158 8.01 0.004359 -0.121013 8.02 0.004349 -0.120868 8.03 0.004338 -0.120723 8.04 0.004328 -0.120579 8.05 0.004318 -0.120436 8.06 0.004307 -0.120292 8.07 0.004297 -0.120149 8.08 0.004287 -0.120006 8.09 0.004277 -0.119864 8.1 0.004267 -0.119722 8.11 0.004256 -0.119580 8.12 0.004246 -0.119439 8.13 0.004236 -0.119298 8.14 0.004226 -0.119157 8.15 0.004216 -0.119017 8.16 0.004206 -0.118877 8.17 0.004197 -0.118737 8.18 0.004187 -0.118598 8.19 0.004177 -0.118459 8.2 0.004167 -0.118320 8.21 0.004157 -0.118181 8.22 0.004148 -0.118043 8.23 0.004138 -0.117906 8.24 0.004128 -0.117768 8.25 0.004119 -0.117631 8.26 0.004109 -0.117494 8.27 0.004099 -0.117358 8.28 0.004090 -0.117222 8.29 0.004080 -0.117086 8.3 0.004071 -0.116950 8.31 0.004062 -0.116815 8.32 0.004052 -0.116680 8.33 0.004043 -0.116545 8.34 0.004033 -0.116411 8.35 0.004024 -0.116277 8.36 0.004015 -0.116143 8.37 0.004006 -0.116010 8.38 0.003996 -0.115877 8.39 0.003987 -0.115744 8.4 0.003978 -0.115612 8.41 0.003969 -0.115480 8.42 0.003960 -0.115348 8.43 0.003951 -0.115216 8.44 0.003942 -0.115085 8.45 0.003933 -0.114954 8.46 0.003924 -0.114823 8.47 0.003915 -0.114693 8.48 0.003906 -0.114563 8.49 0.003897 -0.114433 8.5 0.003889 -0.114304 8.51 0.003880 -0.114174 8.52 0.003871 -0.114046 8.53 0.003862 -0.113917 8.54 0.003854 -0.113789 8.55 0.003845 -0.113661 8.56 0.003836 -0.113533 8.57 0.003828 -0.113405 8.58 0.003819 -0.113278 8.59 0.003810 -0.113151 8.6 0.003802 -0.113025 8.61 0.003793 -0.112898 8.62 0.003785 -0.112772 8.63 0.003776 -0.112647 8.64 0.003768 -0.112521 8.65 0.003760 -0.112396 8.66 0.003751 -0.112271 8.67 0.003743 -0.112146 8.68 0.003735 -0.112022 8.69 0.003726 -0.111898 8.7 0.003718 -0.111774 8.71 0.003710 -0.111651 8.72 0.003702 -0.111527 8.73 0.003693 -0.111404 8.74 0.003685 -0.111282 8.75 0.003677 -0.111159 8.76 0.003669 -0.111037 8.77 0.003661 -0.110915 8.78 0.003653 -0.110793 8.79 0.003645 -0.110672 8.8 0.003637 -0.110551 8.81 0.003629 -0.110430 8.82 0.003621 -0.110309 8.83 0.003613 -0.110189 8.84 0.003605 -0.110069 8.85 0.003597 -0.109949 8.86 0.003590 -0.109830 8.87 0.003582 -0.109710 8.88 0.003574 -0.109591 8.89 0.003566 -0.109473 8.9 0.003559 -0.109354 8.91 0.003551 -0.109236 8.92 0.003543 -0.109118 8.93 0.003536 -0.109000 8.94 0.003528 -0.108883 8.95 0.003520 -0.108765 8.96 0.003513 -0.108648 8.97 0.003505 -0.108532 8.98 0.003498 -0.108415 8.99 0.003490 -0.108299 9 0.003483 -0.108183 9.01 0.003475 -0.108067 9.02 0.003468 -0.107952 9.03 0.003460 -0.107836 9.04 0.003453 -0.107721 9.05 0.003446 -0.107607 9.06 0.003438 -0.107492 9.07 0.003431 -0.107378 9.08 0.003424 -0.107264 9.09 0.003416 -0.107150 9.1 0.003409 -0.107037 9.11 0.003402 -0.106923 9.12 0.003395 -0.106810 9.13 0.003387 -0.106697 9.14 0.003380 -0.106585 9.15 0.003373 -0.106472 9.16 0.003366 -0.106360 9.17 0.003359 -0.106248 9.18 0.003352 -0.106137 9.19 0.003345 -0.106025 9.2 0.003338 -0.105914 9.21 0.003331 -0.105803 9.22 0.003324 -0.105693 9.23 0.003317 -0.105582 9.24 0.003310 -0.105472 9.25 0.003303 -0.105362 9.26 0.003296 -0.105252 9.27 0.003289 -0.105142 9.28 0.003282 -0.105033 9.29 0.003276 -0.104924 9.3 0.003269 -0.104815 9.31 0.003262 -0.104706 9.32 0.003255 -0.104598 9.33 0.003249 -0.104490 9.34 0.003242 -0.104382 9.35 0.003235 -0.104274 9.36 0.003228 -0.104167 9.37 0.003222 -0.104059 9.38 0.003215 -0.103952 9.39 0.003209 -0.103845 9.4 0.003202 -0.103739 9.41 0.003195 -0.103632 9.42 0.003189 -0.103526 9.43 0.003182 -0.103420 9.44 0.003176 -0.103314 9.45 0.003169 -0.103209 9.46 0.003163 -0.103103 9.47 0.003156 -0.102998 9.48 0.003150 -0.102893 9.49 0.003144 -0.102788 9.5 0.003137 -0.102684 9.51 0.003131 -0.102580 9.52 0.003124 -0.102476 9.53 0.003118 -0.102372 9.54 0.003112 -0.102268 9.55 0.003105 -0.102165 9.56 0.003099 -0.102061 9.57 0.003093 -0.101958 9.58 0.003087 -0.101856 9.59 0.003080 -0.101753 9.6 0.003074 -0.101651 9.61 0.003068 -0.101548 9.62 0.003062 -0.101446 9.63 0.003056 -0.101345 9.64 0.003050 -0.101243 9.65 0.003043 -0.101142 9.66 0.003037 -0.101040 9.67 0.003031 -0.100939 9.68 0.003025 -0.100839 9.69 0.003019 -0.100738 9.7 0.003013 -0.100638 9.71 0.003007 -0.100538 9.72 0.003001 -0.100438 9.73 0.002995 -0.100338 9.74 0.002989 -0.100238 9.75 0.002983 -0.100139 9.76 0.002977 -0.100040 9.77 0.002972 -0.099941 9.78 0.002966 -0.099842 9.79 0.002960 -0.099743 9.8 0.002954 -0.099645 9.81 0.002948 -0.099547 9.82 0.002942 -0.099449 9.83 0.002936 -0.099351 9.84 0.002931 -0.099253 9.85 0.002925 -0.099156 9.86 0.002919 -0.099059 9.87 0.002913 -0.098961 9.88 0.002908 -0.098865 9.89 0.002902 -0.098768 9.9 0.002896 -0.098671 9.91 0.002891 -0.098575 9.92 0.002885 -0.098479 9.93 0.002879 -0.098383 9.94 0.002874 -0.098287 9.95 0.002868 -0.098192 9.96 0.002863 -0.098096 9.97 0.002857 -0.098001 9.98 0.002852 -0.097906 9.99 0.002846 -0.097811 dmrgpp-6.02/TestSuite/oracles/data3011.cf000066400000000000000000001412151414604301300200430ustar00rootroot00000000000000-10 0.002841 0.097717 -9.99 0.002846 0.097811 -9.98 0.002852 0.097906 -9.97 0.002857 0.098001 -9.96 0.002863 0.098096 -9.95 0.002868 0.098192 -9.94 0.002874 0.098287 -9.93 0.002879 0.098383 -9.92 0.002885 0.098479 -9.91 0.002891 0.098575 -9.9 0.002896 0.098671 -9.89 0.002902 0.098768 -9.88 0.002908 0.098865 -9.87 0.002913 0.098961 -9.86 0.002919 0.099058 -9.85 0.002925 0.099156 -9.84 0.002931 0.099253 -9.83 0.002936 0.099351 -9.82 0.002942 0.099449 -9.81 0.002948 0.099547 -9.8 0.002954 0.099645 -9.79 0.002960 0.099743 -9.78 0.002966 0.099842 -9.77 0.002972 0.099941 -9.76 0.002977 0.100040 -9.75 0.002983 0.100139 -9.74 0.002989 0.100238 -9.73 0.002995 0.100338 -9.72 0.003001 0.100438 -9.71 0.003007 0.100538 -9.7 0.003013 0.100638 -9.69 0.003019 0.100738 -9.68 0.003025 0.100839 -9.67 0.003031 0.100939 -9.66 0.003037 0.101040 -9.65 0.003043 0.101142 -9.64 0.003050 0.101243 -9.63 0.003056 0.101345 -9.62 0.003062 0.101446 -9.61 0.003068 0.101548 -9.6 0.003074 0.101651 -9.59 0.003080 0.101753 -9.58 0.003087 0.101856 -9.57 0.003093 0.101958 -9.56 0.003099 0.102061 -9.55 0.003105 0.102165 -9.54 0.003112 0.102268 -9.53 0.003118 0.102372 -9.52 0.003124 0.102476 -9.51 0.003131 0.102580 -9.5 0.003137 0.102684 -9.49 0.003144 0.102788 -9.48 0.003150 0.102893 -9.47 0.003156 0.102998 -9.46 0.003163 0.103103 -9.45 0.003169 0.103209 -9.44 0.003176 0.103314 -9.43 0.003182 0.103420 -9.42 0.003189 0.103526 -9.41 0.003195 0.103632 -9.4 0.003202 0.103739 -9.39 0.003209 0.103845 -9.38 0.003215 0.103952 -9.37 0.003222 0.104059 -9.36 0.003228 0.104167 -9.35 0.003235 0.104274 -9.34 0.003242 0.104382 -9.33 0.003249 0.104490 -9.32 0.003255 0.104598 -9.31 0.003262 0.104706 -9.3 0.003269 0.104815 -9.29 0.003276 0.104924 -9.28 0.003282 0.105033 -9.27 0.003289 0.105142 -9.26 0.003296 0.105252 -9.25 0.003303 0.105362 -9.24 0.003310 0.105472 -9.23 0.003317 0.105582 -9.22 0.003324 0.105693 -9.21 0.003331 0.105803 -9.2 0.003338 0.105914 -9.19 0.003345 0.106025 -9.18 0.003352 0.106137 -9.17 0.003359 0.106248 -9.16 0.003366 0.106360 -9.15 0.003373 0.106472 -9.14 0.003380 0.106585 -9.13 0.003387 0.106697 -9.12 0.003395 0.106810 -9.11 0.003402 0.106923 -9.1 0.003409 0.107037 -9.09 0.003416 0.107150 -9.08 0.003424 0.107264 -9.07 0.003431 0.107378 -9.06 0.003438 0.107492 -9.05 0.003446 0.107607 -9.04 0.003453 0.107721 -9.03 0.003460 0.107836 -9.02 0.003468 0.107952 -9.01 0.003475 0.108067 -9 0.003483 0.108183 -8.99 0.003490 0.108299 -8.98 0.003498 0.108415 -8.97 0.003505 0.108532 -8.96 0.003513 0.108648 -8.95 0.003520 0.108765 -8.94 0.003528 0.108883 -8.93 0.003536 0.109000 -8.92 0.003543 0.109118 -8.91 0.003551 0.109236 -8.9 0.003559 0.109354 -8.89 0.003566 0.109473 -8.88 0.003574 0.109591 -8.87 0.003582 0.109710 -8.86 0.003590 0.109830 -8.85 0.003597 0.109949 -8.84 0.003605 0.110069 -8.83 0.003613 0.110189 -8.82 0.003621 0.110309 -8.81 0.003629 0.110430 -8.8 0.003637 0.110551 -8.79 0.003645 0.110672 -8.78 0.003653 0.110793 -8.77 0.003661 0.110915 -8.76 0.003669 0.111037 -8.75 0.003677 0.111159 -8.74 0.003685 0.111282 -8.73 0.003693 0.111404 -8.72 0.003702 0.111527 -8.71 0.003710 0.111651 -8.7 0.003718 0.111774 -8.69 0.003726 0.111898 -8.68 0.003735 0.112022 -8.67 0.003743 0.112146 -8.66 0.003751 0.112271 -8.65 0.003760 0.112396 -8.64 0.003768 0.112521 -8.63 0.003776 0.112647 -8.62 0.003785 0.112772 -8.61 0.003793 0.112898 -8.6 0.003802 0.113025 -8.59 0.003810 0.113151 -8.58 0.003819 0.113278 -8.57 0.003828 0.113405 -8.56 0.003836 0.113533 -8.55 0.003845 0.113661 -8.54 0.003854 0.113789 -8.53 0.003862 0.113917 -8.52 0.003871 0.114045 -8.51 0.003880 0.114174 -8.5 0.003889 0.114304 -8.49 0.003897 0.114433 -8.48 0.003906 0.114563 -8.47 0.003915 0.114693 -8.46 0.003924 0.114823 -8.45 0.003933 0.114954 -8.44 0.003942 0.115085 -8.43 0.003951 0.115216 -8.42 0.003960 0.115348 -8.41 0.003969 0.115480 -8.4 0.003978 0.115612 -8.39 0.003987 0.115744 -8.38 0.003996 0.115877 -8.37 0.004006 0.116010 -8.36 0.004015 0.116143 -8.35 0.004024 0.116277 -8.34 0.004033 0.116411 -8.33 0.004043 0.116545 -8.32 0.004052 0.116680 -8.31 0.004062 0.116815 -8.3 0.004071 0.116950 -8.29 0.004080 0.117086 -8.28 0.004090 0.117221 -8.27 0.004099 0.117358 -8.26 0.004109 0.117494 -8.25 0.004119 0.117631 -8.24 0.004128 0.117768 -8.23 0.004138 0.117906 -8.22 0.004148 0.118043 -8.21 0.004157 0.118181 -8.2 0.004167 0.118320 -8.19 0.004177 0.118459 -8.18 0.004187 0.118598 -8.17 0.004197 0.118737 -8.16 0.004206 0.118877 -8.15 0.004216 0.119017 -8.14 0.004226 0.119157 -8.13 0.004236 0.119298 -8.12 0.004246 0.119439 -8.11 0.004256 0.119580 -8.1 0.004267 0.119722 -8.09 0.004277 0.119864 -8.08 0.004287 0.120006 -8.07 0.004297 0.120149 -8.06 0.004307 0.120292 -8.05 0.004318 0.120436 -8.04 0.004328 0.120579 -8.03 0.004338 0.120723 -8.02 0.004349 0.120868 -8.01 0.004359 0.121013 -8 0.004370 0.121158 -7.99 0.004380 0.121303 -7.98 0.004391 0.121449 -7.97 0.004401 0.121595 -7.96 0.004412 0.121742 -7.95 0.004423 0.121889 -7.94 0.004433 0.122036 -7.93 0.004444 0.122183 -7.92 0.004455 0.122331 -7.91 0.004466 0.122480 -7.9 0.004477 0.122628 -7.89 0.004488 0.122777 -7.88 0.004499 0.122927 -7.87 0.004510 0.123076 -7.86 0.004521 0.123227 -7.85 0.004532 0.123377 -7.84 0.004543 0.123528 -7.83 0.004554 0.123679 -7.82 0.004565 0.123831 -7.81 0.004576 0.123983 -7.8 0.004588 0.124135 -7.79 0.004599 0.124288 -7.78 0.004610 0.124441 -7.77 0.004622 0.124594 -7.76 0.004633 0.124748 -7.75 0.004645 0.124902 -7.74 0.004656 0.125057 -7.73 0.004668 0.125212 -7.72 0.004679 0.125367 -7.71 0.004691 0.125523 -7.7 0.004703 0.125679 -7.69 0.004714 0.125836 -7.68 0.004726 0.125993 -7.67 0.004738 0.126150 -7.66 0.004750 0.126308 -7.65 0.004762 0.126466 -7.64 0.004774 0.126624 -7.63 0.004786 0.126783 -7.62 0.004798 0.126942 -7.61 0.004810 0.127102 -7.6 0.004822 0.127262 -7.59 0.004834 0.127423 -7.58 0.004847 0.127583 -7.57 0.004859 0.127745 -7.56 0.004871 0.127906 -7.55 0.004884 0.128069 -7.54 0.004896 0.128231 -7.53 0.004908 0.128394 -7.52 0.004921 0.128557 -7.51 0.004934 0.128721 -7.5 0.004946 0.128885 -7.49 0.004959 0.129050 -7.48 0.004972 0.129215 -7.47 0.004984 0.129381 -7.46 0.004997 0.129546 -7.45 0.005010 0.129713 -7.44 0.005023 0.129879 -7.43 0.005036 0.130047 -7.42 0.005049 0.130214 -7.41 0.005062 0.130382 -7.4 0.005075 0.130551 -7.39 0.005088 0.130720 -7.38 0.005101 0.130889 -7.37 0.005115 0.131059 -7.36 0.005128 0.131229 -7.35 0.005141 0.131400 -7.34 0.005155 0.131571 -7.33 0.005168 0.131742 -7.32 0.005182 0.131914 -7.31 0.005195 0.132087 -7.3 0.005209 0.132259 -7.29 0.005223 0.132433 -7.28 0.005236 0.132607 -7.27 0.005250 0.132781 -7.26 0.005264 0.132956 -7.25 0.005278 0.133131 -7.24 0.005292 0.133306 -7.23 0.005306 0.133482 -7.22 0.005320 0.133659 -7.21 0.005334 0.133836 -7.2 0.005348 0.134014 -7.19 0.005363 0.134191 -7.18 0.005377 0.134370 -7.17 0.005391 0.134549 -7.16 0.005406 0.134728 -7.15 0.005420 0.134908 -7.14 0.005435 0.135088 -7.13 0.005449 0.135269 -7.12 0.005464 0.135451 -7.11 0.005479 0.135632 -7.1 0.005493 0.135815 -7.09 0.005508 0.135997 -7.08 0.005523 0.136181 -7.07 0.005538 0.136364 -7.06 0.005553 0.136549 -7.05 0.005568 0.136734 -7.04 0.005583 0.136919 -7.03 0.005599 0.137105 -7.02 0.005614 0.137291 -7.01 0.005629 0.137478 -7 0.005645 0.137665 -6.99 0.005660 0.137853 -6.98 0.005675 0.138041 -6.97 0.005691 0.138230 -6.96 0.005707 0.138419 -6.95 0.005722 0.138609 -6.94 0.005738 0.138799 -6.93 0.005754 0.138990 -6.92 0.005770 0.139182 -6.91 0.005786 0.139374 -6.9 0.005802 0.139566 -6.89 0.005818 0.139759 -6.88 0.005834 0.139953 -6.87 0.005850 0.140147 -6.86 0.005867 0.140341 -6.85 0.005883 0.140536 -6.84 0.005899 0.140732 -6.83 0.005916 0.140928 -6.82 0.005933 0.141125 -6.81 0.005949 0.141323 -6.8 0.005966 0.141520 -6.79 0.005983 0.141719 -6.78 0.006000 0.141918 -6.77 0.006016 0.142117 -6.76 0.006033 0.142318 -6.75 0.006051 0.142518 -6.74 0.006068 0.142720 -6.73 0.006085 0.142921 -6.72 0.006102 0.143124 -6.71 0.006120 0.143327 -6.7 0.006137 0.143530 -6.69 0.006155 0.143734 -6.68 0.006172 0.143939 -6.67 0.006190 0.144144 -6.66 0.006208 0.144350 -6.65 0.006225 0.144557 -6.64 0.006243 0.144764 -6.63 0.006261 0.144971 -6.62 0.006279 0.145180 -6.61 0.006297 0.145389 -6.6 0.006316 0.145598 -6.59 0.006334 0.145808 -6.58 0.006352 0.146019 -6.57 0.006371 0.146230 -6.56 0.006389 0.146442 -6.55 0.006408 0.146654 -6.54 0.006426 0.146867 -6.53 0.006445 0.147081 -6.52 0.006464 0.147295 -6.51 0.006483 0.147510 -6.5 0.006502 0.147726 -6.49 0.006521 0.147942 -6.48 0.006540 0.148159 -6.47 0.006560 0.148377 -6.46 0.006579 0.148595 -6.45 0.006598 0.148814 -6.44 0.006618 0.149033 -6.43 0.006637 0.149253 -6.42 0.006657 0.149474 -6.41 0.006677 0.149695 -6.4 0.006697 0.149917 -6.39 0.006717 0.150140 -6.38 0.006737 0.150363 -6.37 0.006757 0.150587 -6.36 0.006777 0.150812 -6.35 0.006798 0.151037 -6.34 0.006818 0.151263 -6.33 0.006838 0.151490 -6.32 0.006859 0.151717 -6.31 0.006880 0.151945 -6.3 0.006901 0.152174 -6.29 0.006921 0.152404 -6.28 0.006942 0.152634 -6.27 0.006964 0.152864 -6.26 0.006985 0.153096 -6.25 0.007006 0.153328 -6.24 0.007027 0.153561 -6.23 0.007049 0.153795 -6.22 0.007070 0.154029 -6.21 0.007092 0.154264 -6.2 0.007114 0.154500 -6.19 0.007136 0.154736 -6.18 0.007158 0.154974 -6.17 0.007180 0.155212 -6.16 0.007202 0.155450 -6.15 0.007224 0.155690 -6.14 0.007246 0.155930 -6.13 0.007269 0.156171 -6.12 0.007291 0.156412 -6.11 0.007314 0.156655 -6.1 0.007337 0.156898 -6.09 0.007360 0.157142 -6.08 0.007383 0.157386 -6.07 0.007406 0.157632 -6.06 0.007429 0.157878 -6.05 0.007452 0.158125 -6.04 0.007476 0.158373 -6.03 0.007499 0.158621 -6.02 0.007523 0.158870 -6.01 0.007547 0.159121 -6 0.007571 0.159371 -5.99 0.007595 0.159623 -5.98 0.007619 0.159875 -5.97 0.007643 0.160129 -5.96 0.007667 0.160383 -5.95 0.007692 0.160638 -5.94 0.007717 0.160893 -5.93 0.007741 0.161150 -5.92 0.007766 0.161407 -5.91 0.007791 0.161665 -5.9 0.007816 0.161924 -5.89 0.007841 0.162184 -5.88 0.007867 0.162444 -5.87 0.007892 0.162706 -5.86 0.007917 0.162968 -5.85 0.007943 0.163231 -5.84 0.007969 0.163495 -5.83 0.007995 0.163760 -5.82 0.008021 0.164026 -5.81 0.008047 0.164292 -5.8 0.008073 0.164559 -5.79 0.008100 0.164828 -5.78 0.008126 0.165097 -5.77 0.008153 0.165367 -5.76 0.008180 0.165638 -5.75 0.008207 0.165910 -5.74 0.008234 0.166182 -5.73 0.008261 0.166456 -5.72 0.008289 0.166730 -5.71 0.008316 0.167006 -5.7 0.008344 0.167282 -5.69 0.008371 0.167559 -5.68 0.008399 0.167837 -5.67 0.008427 0.168116 -5.66 0.008456 0.168396 -5.65 0.008484 0.168677 -5.64 0.008512 0.168959 -5.63 0.008541 0.169242 -5.62 0.008570 0.169526 -5.61 0.008599 0.169810 -5.6 0.008628 0.170096 -5.59 0.008657 0.170383 -5.58 0.008686 0.170670 -5.57 0.008716 0.170959 -5.56 0.008745 0.171248 -5.55 0.008775 0.171539 -5.54 0.008805 0.171830 -5.53 0.008835 0.172123 -5.52 0.008866 0.172416 -5.51 0.008896 0.172711 -5.5 0.008926 0.173006 -5.49 0.008957 0.173303 -5.48 0.008988 0.173600 -5.47 0.009019 0.173899 -5.46 0.009050 0.174198 -5.45 0.009082 0.174499 -5.44 0.009113 0.174800 -5.43 0.009145 0.175103 -5.42 0.009177 0.175407 -5.41 0.009209 0.175712 -5.4 0.009241 0.176017 -5.39 0.009273 0.176324 -5.38 0.009306 0.176632 -5.37 0.009339 0.176941 -5.36 0.009372 0.177251 -5.35 0.009405 0.177563 -5.34 0.009438 0.177875 -5.33 0.009471 0.178188 -5.32 0.009505 0.178503 -5.31 0.009539 0.178818 -5.3 0.009573 0.179135 -5.29 0.009607 0.179453 -5.28 0.009641 0.179772 -5.27 0.009676 0.180092 -5.26 0.009710 0.180413 -5.25 0.009745 0.180736 -5.24 0.009780 0.181059 -5.23 0.009815 0.181384 -5.22 0.009851 0.181710 -5.21 0.009887 0.182037 -5.2 0.009922 0.182365 -5.19 0.009958 0.182694 -5.18 0.009995 0.183025 -5.17 0.010031 0.183357 -5.16 0.010068 0.183690 -5.15 0.010104 0.184024 -5.14 0.010141 0.184359 -5.13 0.010179 0.184696 -5.12 0.010216 0.185034 -5.11 0.010254 0.185373 -5.1 0.010292 0.185713 -5.09 0.010330 0.186055 -5.08 0.010368 0.186398 -5.07 0.010406 0.186742 -5.06 0.010445 0.187087 -5.05 0.010484 0.187434 -5.04 0.010523 0.187782 -5.03 0.010562 0.188131 -5.02 0.010602 0.188482 -5.01 0.010642 0.188833 -5 0.010682 0.189187 -4.99 0.010722 0.189541 -4.98 0.010762 0.189897 -4.97 0.010803 0.190254 -4.96 0.010844 0.190612 -4.95 0.010885 0.190972 -4.94 0.010927 0.191333 -4.93 0.010968 0.191696 -4.92 0.011010 0.192060 -4.91 0.011052 0.192425 -4.9 0.011095 0.192792 -4.89 0.011137 0.193160 -4.88 0.011180 0.193529 -4.87 0.011223 0.193900 -4.86 0.011266 0.194273 -4.85 0.011310 0.194646 -4.84 0.011354 0.195022 -4.83 0.011398 0.195398 -4.82 0.011442 0.195776 -4.81 0.011487 0.196156 -4.8 0.011532 0.196537 -4.79 0.011577 0.196919 -4.78 0.011622 0.197303 -4.77 0.011668 0.197689 -4.76 0.011714 0.198076 -4.75 0.011760 0.198464 -4.74 0.011807 0.198854 -4.73 0.011853 0.199246 -4.72 0.011900 0.199639 -4.71 0.011948 0.200034 -4.7 0.011995 0.200430 -4.69 0.012043 0.200828 -4.68 0.012091 0.201227 -4.67 0.012140 0.201628 -4.66 0.012189 0.202031 -4.65 0.012238 0.202435 -4.64 0.012287 0.202841 -4.63 0.012337 0.203248 -4.62 0.012387 0.203657 -4.61 0.012437 0.204068 -4.6 0.012488 0.204480 -4.59 0.012538 0.204894 -4.58 0.012590 0.205310 -4.57 0.012641 0.205727 -4.56 0.012693 0.206146 -4.55 0.012745 0.206567 -4.54 0.012797 0.206989 -4.53 0.012850 0.207413 -4.52 0.012903 0.207839 -4.51 0.012957 0.208267 -4.5 0.013011 0.208697 -4.49 0.013065 0.209128 -4.48 0.013119 0.209561 -4.47 0.013174 0.209996 -4.46 0.013229 0.210432 -4.45 0.013284 0.210871 -4.44 0.013340 0.211311 -4.43 0.013396 0.211753 -4.42 0.013453 0.212197 -4.41 0.013510 0.212643 -4.4 0.013567 0.213090 -4.39 0.013625 0.213540 -4.38 0.013683 0.213991 -4.37 0.013741 0.214445 -4.36 0.013800 0.214900 -4.35 0.013859 0.215357 -4.34 0.013918 0.215816 -4.33 0.013978 0.216277 -4.32 0.014039 0.216740 -4.31 0.014099 0.217205 -4.3 0.014160 0.217672 -4.29 0.014222 0.218141 -4.28 0.014283 0.218612 -4.27 0.014346 0.219085 -4.26 0.014408 0.219561 -4.25 0.014471 0.220038 -4.24 0.014535 0.220517 -4.23 0.014599 0.220998 -4.22 0.014663 0.221482 -4.21 0.014728 0.221967 -4.2 0.014793 0.222455 -4.19 0.014859 0.222945 -4.18 0.014925 0.223437 -4.17 0.014991 0.223931 -4.16 0.015058 0.224427 -4.15 0.015125 0.224926 -4.14 0.015193 0.225427 -4.13 0.015262 0.225930 -4.12 0.015330 0.226435 -4.11 0.015400 0.226942 -4.1 0.015469 0.227452 -4.09 0.015539 0.227964 -4.08 0.015610 0.228478 -4.07 0.015681 0.228995 -4.06 0.015753 0.229514 -4.05 0.015825 0.230035 -4.04 0.015897 0.230559 -4.03 0.015971 0.231085 -4.02 0.016044 0.231614 -4.01 0.016118 0.232145 -4 0.016193 0.232678 -3.99 0.016268 0.233214 -3.98 0.016344 0.233752 -3.97 0.016420 0.234293 -3.96 0.016497 0.234836 -3.95 0.016574 0.235382 -3.94 0.016652 0.235930 -3.93 0.016730 0.236481 -3.92 0.016809 0.237034 -3.91 0.016888 0.237590 -3.9 0.016969 0.238149 -3.89 0.017049 0.238710 -3.88 0.017130 0.239274 -3.87 0.017212 0.239840 -3.86 0.017294 0.240409 -3.85 0.017377 0.240981 -3.84 0.017461 0.241556 -3.83 0.017545 0.242133 -3.82 0.017630 0.242713 -3.81 0.017715 0.243296 -3.8 0.017801 0.243882 -3.79 0.017888 0.244470 -3.78 0.017975 0.245062 -3.77 0.018063 0.245656 -3.76 0.018152 0.246253 -3.75 0.018241 0.246853 -3.74 0.018331 0.247456 -3.73 0.018421 0.248062 -3.72 0.018512 0.248670 -3.71 0.018604 0.249282 -3.7 0.018697 0.249897 -3.69 0.018790 0.250515 -3.68 0.018884 0.251135 -3.67 0.018979 0.251759 -3.66 0.019074 0.252386 -3.65 0.019170 0.253017 -3.64 0.019267 0.253650 -3.63 0.019365 0.254286 -3.62 0.019463 0.254926 -3.61 0.019562 0.255569 -3.6 0.019662 0.256215 -3.59 0.019762 0.256864 -3.58 0.019864 0.257517 -3.57 0.019966 0.258173 -3.56 0.020069 0.258832 -3.55 0.020172 0.259494 -3.54 0.020277 0.260160 -3.53 0.020382 0.260830 -3.52 0.020488 0.261503 -3.51 0.020595 0.262179 -3.5 0.020703 0.262859 -3.49 0.020812 0.263542 -3.48 0.020921 0.264229 -3.47 0.021032 0.264919 -3.46 0.021143 0.265613 -3.45 0.021255 0.266311 -3.44 0.021368 0.267012 -3.43 0.021482 0.267718 -3.42 0.021597 0.268426 -3.41 0.021713 0.269139 -3.4 0.021830 0.269855 -3.39 0.021947 0.270575 -3.38 0.022066 0.271299 -3.37 0.022186 0.272027 -3.36 0.022306 0.272758 -3.35 0.022428 0.273494 -3.34 0.022550 0.274233 -3.33 0.022674 0.274977 -3.32 0.022798 0.275725 -3.31 0.022924 0.276476 -3.3 0.023051 0.277232 -3.29 0.023178 0.277992 -3.28 0.023307 0.278756 -3.27 0.023437 0.279524 -3.26 0.023568 0.280296 -3.25 0.023700 0.281073 -3.24 0.023833 0.281854 -3.23 0.023967 0.282639 -3.22 0.024103 0.283429 -3.21 0.024239 0.284223 -3.2 0.024377 0.285021 -3.19 0.024516 0.285824 -3.18 0.024656 0.286632 -3.17 0.024797 0.287444 -3.16 0.024940 0.288260 -3.15 0.025083 0.289081 -3.14 0.025228 0.289907 -3.13 0.025375 0.290738 -3.12 0.025522 0.291573 -3.11 0.025671 0.292413 -3.1 0.025821 0.293258 -3.09 0.025973 0.294108 -3.08 0.026125 0.294963 -3.07 0.026279 0.295822 -3.06 0.026435 0.296687 -3.05 0.026592 0.297557 -3.04 0.026750 0.298432 -3.03 0.026910 0.299312 -3.02 0.027071 0.300197 -3.01 0.027233 0.301087 -3 0.027397 0.301983 -2.99 0.027563 0.302884 -2.98 0.027730 0.303790 -2.97 0.027899 0.304701 -2.96 0.028069 0.305619 -2.95 0.028240 0.306541 -2.94 0.028414 0.307469 -2.93 0.028588 0.308403 -2.92 0.028765 0.309343 -2.91 0.028943 0.310288 -2.9 0.029123 0.311239 -2.89 0.029304 0.312195 -2.88 0.029487 0.313158 -2.87 0.029672 0.314126 -2.86 0.029859 0.315101 -2.85 0.030047 0.316081 -2.84 0.030237 0.317068 -2.83 0.030429 0.318060 -2.82 0.030623 0.319059 -2.81 0.030819 0.320064 -2.8 0.031016 0.321076 -2.79 0.031215 0.322094 -2.78 0.031417 0.323118 -2.77 0.031620 0.324149 -2.76 0.031825 0.325186 -2.75 0.032033 0.326230 -2.74 0.032242 0.327280 -2.73 0.032453 0.328337 -2.72 0.032667 0.329402 -2.71 0.032882 0.330473 -2.7 0.033100 0.331550 -2.69 0.033320 0.332635 -2.68 0.033542 0.333727 -2.67 0.033766 0.334826 -2.66 0.033993 0.335933 -2.65 0.034222 0.337046 -2.64 0.034453 0.338167 -2.63 0.034687 0.339295 -2.62 0.034922 0.340431 -2.61 0.035161 0.341575 -2.6 0.035402 0.342726 -2.59 0.035645 0.343885 -2.58 0.035891 0.345051 -2.57 0.036139 0.346226 -2.56 0.036390 0.347408 -2.55 0.036643 0.348598 -2.54 0.036899 0.349797 -2.53 0.037158 0.351004 -2.52 0.037420 0.352219 -2.51 0.037684 0.353442 -2.5 0.037951 0.354674 -2.49 0.038222 0.355914 -2.48 0.038494 0.357163 -2.47 0.038770 0.358421 -2.46 0.039049 0.359688 -2.45 0.039331 0.360963 -2.44 0.039616 0.362248 -2.43 0.039904 0.363541 -2.42 0.040195 0.364844 -2.41 0.040489 0.366156 -2.4 0.040787 0.367477 -2.39 0.041088 0.368808 -2.38 0.041392 0.370149 -2.37 0.041700 0.371499 -2.36 0.042011 0.372859 -2.35 0.042325 0.374229 -2.34 0.042644 0.375608 -2.33 0.042965 0.376998 -2.32 0.043291 0.378398 -2.31 0.043620 0.379809 -2.3 0.043952 0.381230 -2.29 0.044289 0.382661 -2.28 0.044630 0.384103 -2.27 0.044974 0.385556 -2.26 0.045323 0.387020 -2.25 0.045675 0.388495 -2.24 0.046032 0.389981 -2.23 0.046393 0.391479 -2.22 0.046758 0.392987 -2.21 0.047127 0.394508 -2.2 0.047501 0.396040 -2.19 0.047879 0.397583 -2.18 0.048262 0.399139 -2.17 0.048649 0.400707 -2.16 0.049042 0.402287 -2.15 0.049438 0.403879 -2.14 0.049840 0.405484 -2.13 0.050247 0.407102 -2.12 0.050658 0.408732 -2.11 0.051075 0.410376 -2.1 0.051497 0.412032 -2.09 0.051924 0.413702 -2.08 0.052356 0.415385 -2.07 0.052794 0.417081 -2.06 0.053237 0.418792 -2.05 0.053686 0.420516 -2.04 0.054141 0.422254 -2.03 0.054602 0.424007 -2.02 0.055068 0.425774 -2.01 0.055540 0.427556 -2 0.056019 0.429352 -1.99 0.056503 0.431163 -1.98 0.056994 0.432990 -1.97 0.057491 0.434832 -1.96 0.057995 0.436689 -1.95 0.058506 0.438562 -1.94 0.059023 0.440451 -1.93 0.059547 0.442356 -1.92 0.060079 0.444277 -1.91 0.060617 0.446215 -1.9 0.061162 0.448169 -1.89 0.061715 0.450141 -1.88 0.062276 0.452129 -1.87 0.062844 0.454135 -1.86 0.063420 0.456159 -1.85 0.064004 0.458200 -1.84 0.064596 0.460259 -1.83 0.065196 0.462337 -1.82 0.065805 0.464433 -1.81 0.066422 0.466548 -1.8 0.067048 0.468682 -1.79 0.067683 0.470836 -1.78 0.068327 0.473009 -1.77 0.068980 0.475201 -1.76 0.069642 0.477414 -1.75 0.070314 0.479647 -1.74 0.070996 0.481901 -1.73 0.071688 0.484175 -1.72 0.072389 0.486471 -1.71 0.073102 0.488788 -1.7 0.073824 0.491127 -1.69 0.074558 0.493488 -1.68 0.075302 0.495871 -1.67 0.076058 0.498277 -1.66 0.076825 0.500706 -1.65 0.077604 0.503158 -1.64 0.078394 0.505634 -1.63 0.079197 0.508134 -1.62 0.080012 0.510658 -1.61 0.080840 0.513207 -1.6 0.081681 0.515781 -1.59 0.082535 0.518380 -1.58 0.083402 0.521005 -1.57 0.084283 0.523656 -1.56 0.085178 0.526333 -1.55 0.086087 0.529038 -1.54 0.087011 0.531769 -1.53 0.087950 0.534529 -1.52 0.088904 0.537316 -1.51 0.089873 0.540132 -1.5 0.090859 0.542977 -1.49 0.091860 0.545851 -1.48 0.092879 0.548755 -1.47 0.093914 0.551690 -1.46 0.094967 0.554655 -1.45 0.096037 0.557651 -1.44 0.097126 0.560679 -1.43 0.098233 0.563739 -1.42 0.099360 0.566831 -1.41 0.100505 0.569957 -1.4 0.101671 0.573117 -1.39 0.102857 0.576310 -1.38 0.104063 0.579539 -1.37 0.105291 0.582802 -1.36 0.106541 0.586102 -1.35 0.107813 0.589438 -1.34 0.109108 0.592810 -1.33 0.110427 0.596221 -1.32 0.111769 0.599669 -1.31 0.113136 0.603157 -1.3 0.114528 0.606683 -1.29 0.115946 0.610250 -1.28 0.117390 0.613858 -1.27 0.118861 0.617507 -1.26 0.120360 0.621197 -1.25 0.121888 0.624931 -1.24 0.123444 0.628708 -1.23 0.125031 0.632529 -1.22 0.126648 0.636396 -1.21 0.128296 0.640307 -1.2 0.129977 0.644266 -1.19 0.131691 0.648271 -1.18 0.133439 0.652325 -1.17 0.135222 0.656427 -1.16 0.137041 0.660579 -1.15 0.138896 0.664781 -1.14 0.140789 0.669035 -1.13 0.142721 0.673341 -1.12 0.144693 0.677701 -1.11 0.146705 0.682114 -1.1 0.148760 0.686582 -1.09 0.150858 0.691107 -1.08 0.153000 0.695688 -1.07 0.155188 0.700327 -1.06 0.157423 0.705025 -1.05 0.159707 0.709784 -1.04 0.162040 0.714603 -1.03 0.164424 0.719484 -1.02 0.166861 0.724429 -1.01 0.169352 0.729438 -1 0.171899 0.734513 -0.99 0.174503 0.739654 -0.98 0.177167 0.744863 -0.97 0.179892 0.750141 -0.96 0.182679 0.755490 -0.95 0.185531 0.760910 -0.94 0.188450 0.766403 -0.93 0.191438 0.771970 -0.92 0.194496 0.777612 -0.91 0.197628 0.783332 -0.9 0.200836 0.789129 -0.89 0.204121 0.795006 -0.88 0.207487 0.800965 -0.87 0.210935 0.807005 -0.86 0.214470 0.813130 -0.85 0.218093 0.819340 -0.84 0.221808 0.825637 -0.83 0.225617 0.832022 -0.82 0.229524 0.838498 -0.81 0.233532 0.845065 -0.8 0.237644 0.851725 -0.79 0.241865 0.858480 -0.78 0.246197 0.865331 -0.77 0.250645 0.872280 -0.76 0.255213 0.879329 -0.75 0.259904 0.886480 -0.74 0.264724 0.893733 -0.73 0.269678 0.901090 -0.72 0.274768 0.908554 -0.71 0.280002 0.916126 -0.7 0.285384 0.923808 -0.69 0.290919 0.931601 -0.68 0.296614 0.939506 -0.67 0.302474 0.947526 -0.66 0.308505 0.955662 -0.65 0.314714 0.963915 -0.64 0.321108 0.972288 -0.63 0.327694 0.980780 -0.62 0.334479 0.989395 -0.61 0.341472 0.998133 -0.6 0.348679 1.006994 -0.59 0.356110 1.015982 -0.58 0.363774 1.025095 -0.57 0.371680 1.034336 -0.56 0.379837 1.043705 -0.55 0.388257 1.053202 -0.54 0.396949 1.062828 -0.53 0.405924 1.072583 -0.52 0.415196 1.082466 -0.51 0.424774 1.092478 -0.5 0.434674 1.102618 -0.49 0.444907 1.112884 -0.48 0.455487 1.123275 -0.47 0.466431 1.133789 -0.46 0.477752 1.144425 -0.45 0.489467 1.155178 -0.44 0.501592 1.166045 -0.43 0.514145 1.177023 -0.42 0.527144 1.188106 -0.41 0.540608 1.199288 -0.4 0.554557 1.210564 -0.39 0.569011 1.221925 -0.38 0.583991 1.233362 -0.37 0.599521 1.244867 -0.36 0.615621 1.256426 -0.35 0.632317 1.268029 -0.34 0.649633 1.279659 -0.33 0.667594 1.291303 -0.32 0.686226 1.302940 -0.31 0.705556 1.314552 -0.3 0.725610 1.326116 -0.29 0.746417 1.337607 -0.28 0.768004 1.348999 -0.27 0.790400 1.360259 -0.26 0.813631 1.371357 -0.25 0.837728 1.382253 -0.24 0.862715 1.392909 -0.23 0.888622 1.403281 -0.22 0.915472 1.413320 -0.21 0.943290 1.422975 -0.2 0.972098 1.432190 -0.19 1.001916 1.440904 -0.18 1.032761 1.449052 -0.17 1.064644 1.456566 -0.16 1.097575 1.463369 -0.15 1.131558 1.469386 -0.14 1.166591 1.474534 -0.13 1.202664 1.478727 -0.12 1.239762 1.481876 -0.11 1.277862 1.483890 -0.1 1.316929 1.484676 -0.090000 1.356923 1.484141 -0.080000 1.397790 1.482192 -0.070000 1.439468 1.478738 -0.060000 1.481884 1.473691 -0.050000 1.524954 1.466968 -0.040000 1.568586 1.458493 -0.030000 1.612675 1.448198 -0.020000 1.657112 1.436025 -0.010000 1.701777 1.421927 0 1.746548 1.405869 0.009999 1.791299 1.387830 0.019999 1.835903 1.367802 0.029999 1.880234 1.345790 0.039999 1.924170 1.321813 0.049999 1.967596 1.295901 0.059999 2.010403 1.268096 0.069999 2.052494 1.238445 0.079999 2.093781 1.207003 0.089999 2.134186 1.173826 0.099999 2.173643 1.138972 0.11 2.212094 1.102495 0.12 2.249488 1.064448 0.13 2.285781 1.024874 0.14 2.320929 0.983812 0.15 2.354890 0.941295 0.16 2.387619 0.897347 0.17 2.419065 0.851992 0.18 2.449170 0.805248 0.19 2.477869 0.757135 0.2 2.505086 0.707676 0.21 2.530739 0.656902 0.22 2.554738 0.604850 0.23 2.576990 0.551572 0.24 2.597398 0.497130 0.25 2.615866 0.441602 0.26 2.632304 0.385079 0.27 2.646629 0.327668 0.28 2.658766 0.269484 0.29 2.668656 0.210655 0.3 2.676253 0.151312 0.31 2.681524 0.091593 0.32 2.684454 0.031633 0.33 2.685040 -0.028432 0.34 2.683290 -0.088475 0.35 2.679225 -0.148371 0.36 2.672870 -0.208007 0.37 2.664257 -0.267273 0.38 2.653422 -0.326068 0.39 2.640401 -0.384299 0.4 2.625229 -0.441873 0.41 2.607943 -0.498702 0.42 2.588577 -0.554699 0.43 2.567169 -0.609775 0.44 2.543754 -0.663839 0.45 2.518374 -0.716800 0.46 2.491074 -0.768561 0.47 2.461905 -0.819024 0.48 2.430929 -0.868091 0.49 2.398212 -0.915663 0.5 2.363833 -0.961644 0.51 2.327881 -1.005940 0.52 2.290454 -1.048465 0.53 2.251657 -1.089138 0.54 2.211606 -1.127887 0.55 2.170421 -1.164652 0.56 2.128229 -1.199379 0.57 2.085159 -1.232030 0.58 2.041345 -1.262576 0.59 1.996920 -1.290998 0.6 1.952017 -1.317290 0.61 1.906769 -1.341457 0.62 1.861304 -1.363513 0.63 1.815748 -1.383484 0.64 1.770224 -1.401403 0.65 1.724848 -1.417313 0.66 1.679730 -1.431267 0.67 1.634976 -1.443322 0.68 1.590682 -1.453544 0.69 1.546939 -1.462003 0.7 1.503827 -1.468776 0.71 1.461422 -1.473942 0.72 1.419787 -1.477586 0.73 1.378981 -1.479791 0.74 1.339051 -1.480644 0.75 1.300040 -1.480232 0.76 1.261978 -1.478641 0.77 1.224892 -1.475957 0.78 1.188801 -1.472263 0.79 1.153716 -1.467640 0.8 1.119644 -1.462165 0.81 1.086586 -1.455915 0.82 1.054538 -1.448960 0.83 1.023492 -1.441369 0.84 0.993437 -1.433205 0.85 0.964357 -1.424530 0.86 0.936237 -1.415399 0.87 0.909056 -1.405866 0.88 0.882794 -1.395979 0.89 0.857427 -1.385785 0.9 0.832933 -1.375326 0.91 0.809286 -1.364639 0.92 0.786462 -1.353763 0.93 0.764436 -1.342728 0.94 0.743182 -1.331566 0.95 0.722675 -1.320305 0.96 0.702889 -1.308968 0.97 0.683800 -1.297581 0.98 0.665383 -1.286162 0.99 0.647613 -1.274732 1 0.630467 -1.263307 1.01 0.613922 -1.251903 1.02 0.597955 -1.240533 1.03 0.582545 -1.229210 1.04 0.567669 -1.217946 1.05 0.553308 -1.206750 1.06 0.539441 -1.195631 1.07 0.526049 -1.184596 1.08 0.513114 -1.173654 1.09 0.500618 -1.162809 1.1 0.488542 -1.152066 1.11 0.476872 -1.141431 1.12 0.465590 -1.130908 1.13 0.454681 -1.120499 1.14 0.444131 -1.110207 1.15 0.433926 -1.100034 1.16 0.424051 -1.089983 1.17 0.414495 -1.080054 1.18 0.405244 -1.070249 1.19 0.396286 -1.060568 1.2 0.387611 -1.051012 1.21 0.379206 -1.041581 1.22 0.371063 -1.032275 1.23 0.363170 -1.023094 1.24 0.355518 -1.014036 1.25 0.348098 -1.005102 1.26 0.340901 -0.996291 1.27 0.333918 -0.987601 1.28 0.327142 -0.979032 1.29 0.320565 -0.970583 1.3 0.314179 -0.962251 1.31 0.307978 -0.954037 1.32 0.301955 -0.945939 1.33 0.296102 -0.937955 1.34 0.290415 -0.930084 1.35 0.284886 -0.922324 1.36 0.279511 -0.914674 1.37 0.274284 -0.907132 1.38 0.269200 -0.899696 1.39 0.264253 -0.892366 1.4 0.259439 -0.885140 1.41 0.254753 -0.878015 1.42 0.250191 -0.870990 1.43 0.245749 -0.864065 1.44 0.241423 -0.857236 1.45 0.237208 -0.850503 1.46 0.233102 -0.843864 1.47 0.229099 -0.837317 1.48 0.225198 -0.830862 1.49 0.221394 -0.824495 1.5 0.217685 -0.818217 1.51 0.214067 -0.812024 1.52 0.210538 -0.805917 1.53 0.207095 -0.799893 1.54 0.203734 -0.793951 1.55 0.200454 -0.788090 1.56 0.197252 -0.782307 1.57 0.194125 -0.776603 1.58 0.191072 -0.770975 1.59 0.188089 -0.765422 1.6 0.185175 -0.759942 1.61 0.182328 -0.754536 1.62 0.179546 -0.749200 1.63 0.176826 -0.743935 1.64 0.174167 -0.738738 1.65 0.171567 -0.733609 1.66 0.169025 -0.728546 1.67 0.166539 -0.723549 1.68 0.164106 -0.718615 1.69 0.161727 -0.713745 1.7 0.159398 -0.708936 1.71 0.157119 -0.704189 1.72 0.154888 -0.699501 1.73 0.152705 -0.694872 1.74 0.150567 -0.690300 1.75 0.148473 -0.685786 1.76 0.146422 -0.681327 1.77 0.144414 -0.676923 1.78 0.142446 -0.672573 1.79 0.140518 -0.668276 1.8 0.138629 -0.664031 1.81 0.136778 -0.659837 1.82 0.134963 -0.655693 1.83 0.133184 -0.651599 1.84 0.131440 -0.647554 1.85 0.129729 -0.643557 1.86 0.128052 -0.639606 1.87 0.126407 -0.635702 1.88 0.124793 -0.631844 1.89 0.123210 -0.628030 1.9 0.121657 -0.624260 1.91 0.120133 -0.620534 1.92 0.118637 -0.616850 1.93 0.117169 -0.613208 1.94 0.115728 -0.609608 1.95 0.114314 -0.606048 1.96 0.112925 -0.602528 1.97 0.111561 -0.599047 1.98 0.110222 -0.595605 1.99 0.108906 -0.592201 2 0.107614 -0.588834 2.01 0.106345 -0.585505 2.02 0.105098 -0.582212 2.03 0.103873 -0.578954 2.04 0.102669 -0.575731 2.05 0.101485 -0.572544 2.06 0.100322 -0.569390 2.07 0.099179 -0.566270 2.08 0.098056 -0.563183 2.09 0.096951 -0.560128 2.1 0.095865 -0.557106 2.11 0.094797 -0.554115 2.12 0.093746 -0.551155 2.13 0.092713 -0.548226 2.14 0.091697 -0.545327 2.15 0.090697 -0.542458 2.16 0.089714 -0.539618 2.17 0.088747 -0.536807 2.18 0.087795 -0.534024 2.19 0.086858 -0.531270 2.2 0.085936 -0.528543 2.21 0.085029 -0.525843 2.22 0.084136 -0.523170 2.23 0.083257 -0.520523 2.24 0.082392 -0.517903 2.25 0.081540 -0.515308 2.26 0.080702 -0.512739 2.27 0.079876 -0.510194 2.28 0.079062 -0.507674 2.29 0.078261 -0.505179 2.3 0.077473 -0.502707 2.31 0.076696 -0.500259 2.32 0.075930 -0.497834 2.33 0.075176 -0.495432 2.34 0.074433 -0.493052 2.35 0.073701 -0.490695 2.36 0.072980 -0.488360 2.37 0.072270 -0.486047 2.38 0.071569 -0.483755 2.39 0.070879 -0.481484 2.4 0.070199 -0.479234 2.41 0.069528 -0.477005 2.42 0.068867 -0.474795 2.43 0.068216 -0.472606 2.44 0.067573 -0.470437 2.45 0.066940 -0.468287 2.46 0.066315 -0.466156 2.47 0.065699 -0.464045 2.48 0.065092 -0.461952 2.49 0.064493 -0.459877 2.5 0.063902 -0.457821 2.51 0.063320 -0.455783 2.52 0.062745 -0.453762 2.53 0.062178 -0.451760 2.54 0.061619 -0.449774 2.55 0.061067 -0.447806 2.56 0.060523 -0.445854 2.57 0.059986 -0.443919 2.58 0.059455 -0.442001 2.59 0.058932 -0.440099 2.6 0.058416 -0.438213 2.61 0.057907 -0.436343 2.62 0.057404 -0.434488 2.63 0.056908 -0.432649 2.64 0.056418 -0.430825 2.65 0.055934 -0.429017 2.66 0.055457 -0.427223 2.67 0.054985 -0.425444 2.68 0.054520 -0.423679 2.69 0.054060 -0.421929 2.7 0.053607 -0.420194 2.71 0.053159 -0.418472 2.72 0.052716 -0.416764 2.73 0.052279 -0.415070 2.74 0.051848 -0.413389 2.75 0.051422 -0.411722 2.76 0.051001 -0.410068 2.77 0.050585 -0.408427 2.78 0.050174 -0.406799 2.79 0.049768 -0.405183 2.8 0.049367 -0.403581 2.81 0.048971 -0.401991 2.82 0.048580 -0.400413 2.83 0.048193 -0.398847 2.84 0.047811 -0.397294 2.85 0.047434 -0.395752 2.86 0.047061 -0.394222 2.87 0.046692 -0.392704 2.88 0.046328 -0.391197 2.89 0.045968 -0.389702 2.9 0.045612 -0.388218 2.91 0.045260 -0.386745 2.92 0.044912 -0.385283 2.93 0.044568 -0.383832 2.94 0.044228 -0.382392 2.95 0.043892 -0.380962 2.96 0.043560 -0.379543 2.97 0.043232 -0.378135 2.98 0.042907 -0.376736 2.99 0.042586 -0.375348 3 0.042268 -0.373970 3.01 0.041954 -0.372602 3.02 0.041644 -0.371244 3.03 0.041337 -0.369896 3.04 0.041033 -0.368557 3.05 0.040733 -0.367228 3.06 0.040436 -0.365908 3.07 0.040142 -0.364598 3.08 0.039851 -0.363297 3.09 0.039564 -0.362005 3.1 0.039280 -0.360722 3.11 0.038998 -0.359448 3.12 0.038720 -0.358183 3.13 0.038445 -0.356927 3.14 0.038172 -0.355680 3.15 0.037903 -0.354441 3.16 0.037636 -0.353211 3.17 0.037372 -0.351989 3.18 0.037111 -0.350775 3.19 0.036853 -0.349570 3.2 0.036597 -0.348373 3.21 0.036344 -0.347184 3.22 0.036093 -0.346003 3.23 0.035845 -0.344830 3.24 0.035600 -0.343665 3.25 0.035357 -0.342508 3.26 0.035117 -0.341358 3.27 0.034879 -0.340216 3.28 0.034644 -0.339082 3.29 0.034411 -0.337955 3.3 0.034180 -0.336835 3.31 0.033951 -0.335723 3.32 0.033725 -0.334618 3.33 0.033501 -0.333520 3.34 0.033280 -0.332429 3.35 0.033060 -0.331346 3.36 0.032843 -0.330269 3.37 0.032627 -0.329200 3.38 0.032414 -0.328137 3.39 0.032203 -0.327081 3.4 0.031994 -0.326031 3.41 0.031787 -0.324989 3.42 0.031583 -0.323953 3.43 0.031380 -0.322923 3.44 0.031179 -0.321900 3.45 0.030979 -0.320884 3.46 0.030782 -0.319873 3.47 0.030587 -0.318869 3.48 0.030394 -0.317872 3.49 0.030202 -0.316880 3.5 0.030012 -0.315895 3.51 0.029824 -0.314915 3.52 0.029638 -0.313942 3.53 0.029453 -0.312975 3.54 0.029270 -0.312013 3.55 0.029089 -0.311058 3.56 0.028910 -0.310108 3.57 0.028732 -0.309164 3.58 0.028556 -0.308225 3.59 0.028381 -0.307293 3.6 0.028208 -0.306365 3.61 0.028037 -0.305444 3.62 0.027867 -0.304528 3.63 0.027699 -0.303617 3.64 0.027532 -0.302712 3.65 0.027367 -0.301812 3.66 0.027203 -0.300917 3.67 0.027041 -0.300028 3.68 0.026880 -0.299144 3.69 0.026721 -0.298265 3.7 0.026563 -0.297391 3.71 0.026406 -0.296522 3.72 0.026251 -0.295659 3.73 0.026097 -0.294800 3.74 0.025944 -0.293946 3.75 0.025793 -0.293097 3.76 0.025643 -0.292253 3.77 0.025495 -0.291414 3.78 0.025347 -0.290579 3.79 0.025201 -0.289750 3.8 0.025057 -0.288925 3.81 0.024913 -0.288104 3.82 0.024771 -0.287289 3.83 0.024630 -0.286477 3.84 0.024490 -0.285671 3.85 0.024351 -0.284869 3.86 0.024214 -0.284071 3.87 0.024077 -0.283278 3.88 0.023942 -0.282489 3.89 0.023808 -0.281705 3.9 0.023675 -0.280924 3.91 0.023543 -0.280149 3.92 0.023413 -0.279377 3.93 0.023283 -0.278610 3.94 0.023154 -0.277846 3.95 0.023027 -0.277087 3.96 0.022900 -0.276332 3.97 0.022775 -0.275582 3.98 0.022651 -0.274835 3.99 0.022527 -0.274092 4 0.022405 -0.273353 4.01 0.022283 -0.272618 4.02 0.022163 -0.271887 4.03 0.022044 -0.271160 4.04 0.021925 -0.270437 4.05 0.021808 -0.269718 4.06 0.021691 -0.269002 4.07 0.021576 -0.268291 4.08 0.021461 -0.267583 4.09 0.021347 -0.266878 4.1 0.021234 -0.266178 4.11 0.021122 -0.265481 4.12 0.021011 -0.264787 4.13 0.020901 -0.264097 4.14 0.020791 -0.263411 4.15 0.020683 -0.262729 4.16 0.020575 -0.262049 4.17 0.020468 -0.261374 4.18 0.020362 -0.260702 4.19 0.020257 -0.260033 4.2 0.020153 -0.259367 4.21 0.020049 -0.258705 4.22 0.019946 -0.258047 4.23 0.019844 -0.257392 4.24 0.019743 -0.256740 4.25 0.019643 -0.256091 4.26 0.019543 -0.255445 4.27 0.019444 -0.254803 4.28 0.019346 -0.254164 4.29 0.019249 -0.253528 4.3 0.019152 -0.252896 4.31 0.019056 -0.252266 4.32 0.018961 -0.251640 4.33 0.018866 -0.251016 4.34 0.018772 -0.250396 4.35 0.018679 -0.249779 4.36 0.018587 -0.249165 4.37 0.018495 -0.248554 4.38 0.018404 -0.247945 4.39 0.018314 -0.247340 4.4 0.018224 -0.246738 4.41 0.018135 -0.246138 4.42 0.018046 -0.245542 4.43 0.017959 -0.244948 4.44 0.017871 -0.244357 4.45 0.017785 -0.243770 4.46 0.017699 -0.243184 4.47 0.017614 -0.242602 4.48 0.017529 -0.242022 4.49 0.017445 -0.241446 4.5 0.017362 -0.240872 4.51 0.017279 -0.240300 4.52 0.017197 -0.239732 4.53 0.017115 -0.239166 4.54 0.017034 -0.238602 4.55 0.016953 -0.238041 4.56 0.016873 -0.237483 4.57 0.016794 -0.236928 4.58 0.016715 -0.236375 4.59 0.016637 -0.235825 4.6 0.016559 -0.235277 4.61 0.016482 -0.234732 4.62 0.016405 -0.234189 4.63 0.016329 -0.233649 4.64 0.016254 -0.233111 4.65 0.016179 -0.232576 4.66 0.016104 -0.232043 4.67 0.016030 -0.231512 4.68 0.015957 -0.230984 4.69 0.015884 -0.230459 4.7 0.015811 -0.229935 4.71 0.015739 -0.229414 4.72 0.015668 -0.228896 4.73 0.015597 -0.228380 4.74 0.015526 -0.227866 4.75 0.015456 -0.227354 4.76 0.015386 -0.226845 4.77 0.015317 -0.226338 4.78 0.015249 -0.225833 4.79 0.015180 -0.225330 4.8 0.015113 -0.224830 4.81 0.015045 -0.224332 4.82 0.014979 -0.223836 4.83 0.014912 -0.223342 4.84 0.014846 -0.222851 4.85 0.014781 -0.222361 4.86 0.014716 -0.221874 4.87 0.014651 -0.221389 4.88 0.014587 -0.220906 4.89 0.014523 -0.220425 4.9 0.014459 -0.219946 4.91 0.014396 -0.219469 4.92 0.014334 -0.218994 4.93 0.014272 -0.218522 4.94 0.014210 -0.218051 4.95 0.014149 -0.217582 4.96 0.014088 -0.217116 4.97 0.014027 -0.216651 4.98 0.013967 -0.216188 4.99 0.013907 -0.215728 5 0.013848 -0.215269 5.01 0.013789 -0.214812 5.02 0.013730 -0.214357 5.03 0.013672 -0.213904 5.04 0.013614 -0.213453 5.05 0.013556 -0.213004 5.06 0.013499 -0.212557 5.07 0.013442 -0.212111 5.08 0.013386 -0.211668 5.09 0.013330 -0.211226 5.1 0.013274 -0.210786 5.11 0.013218 -0.210348 5.12 0.013163 -0.209912 5.13 0.013109 -0.209477 5.14 0.013054 -0.209045 5.15 0.013000 -0.208614 5.16 0.012947 -0.208185 5.17 0.012893 -0.207757 5.18 0.012840 -0.207332 5.19 0.012787 -0.206908 5.2 0.012735 -0.206486 5.21 0.012683 -0.206065 5.22 0.012631 -0.205647 5.23 0.012580 -0.205230 5.24 0.012529 -0.204814 5.25 0.012478 -0.204401 5.26 0.012427 -0.203989 5.27 0.012377 -0.203578 5.28 0.012327 -0.203169 5.29 0.012278 -0.202762 5.3 0.012228 -0.202357 5.31 0.012179 -0.201953 5.32 0.012131 -0.201551 5.33 0.012082 -0.201150 5.34 0.012034 -0.200751 5.35 0.011986 -0.200354 5.36 0.011939 -0.199958 5.37 0.011891 -0.199563 5.38 0.011845 -0.199171 5.39 0.011798 -0.198779 5.4 0.011751 -0.198390 5.41 0.011705 -0.198001 5.42 0.011659 -0.197615 5.43 0.011614 -0.197229 5.44 0.011568 -0.196846 5.45 0.011523 -0.196463 5.46 0.011478 -0.196083 5.47 0.011434 -0.195703 5.48 0.011390 -0.195326 5.49 0.011345 -0.194949 5.5 0.011302 -0.194574 5.51 0.011258 -0.194201 5.52 0.011215 -0.193829 5.53 0.011172 -0.193458 5.54 0.011129 -0.193089 5.55 0.011086 -0.192721 5.56 0.011044 -0.192355 5.57 0.011002 -0.191990 5.58 0.010960 -0.191626 5.59 0.010919 -0.191264 5.6 0.010877 -0.190903 5.61 0.010836 -0.190543 5.62 0.010795 -0.190185 5.63 0.010755 -0.189828 5.64 0.010714 -0.189473 5.65 0.010674 -0.189118 5.66 0.010634 -0.188765 5.67 0.010594 -0.188414 5.68 0.010555 -0.188064 5.69 0.010516 -0.187715 5.7 0.010476 -0.187367 5.71 0.010438 -0.187021 5.72 0.010399 -0.186675 5.73 0.010361 -0.186332 5.74 0.010322 -0.185989 5.75 0.010284 -0.185648 5.76 0.010247 -0.185308 5.77 0.010209 -0.184969 5.78 0.010172 -0.184631 5.79 0.010134 -0.184295 5.8 0.010097 -0.183959 5.81 0.010061 -0.183625 5.82 0.010024 -0.183293 5.83 0.009988 -0.182961 5.84 0.009951 -0.182631 5.85 0.009915 -0.182302 5.86 0.009880 -0.181974 5.87 0.009844 -0.181647 5.88 0.009809 -0.181321 5.89 0.009773 -0.180997 5.9 0.009738 -0.180673 5.91 0.009704 -0.180351 5.92 0.009669 -0.180030 5.93 0.009635 -0.179710 5.94 0.009600 -0.179392 5.95 0.009566 -0.179074 5.96 0.009532 -0.178757 5.97 0.009498 -0.178442 5.98 0.009465 -0.178128 5.99 0.009432 -0.177815 6 0.009398 -0.177502 6.01 0.009365 -0.177192 6.02 0.009332 -0.176882 6.03 0.009300 -0.176573 6.04 0.009267 -0.176265 6.05 0.009235 -0.175958 6.06 0.009203 -0.175653 6.07 0.009171 -0.175348 6.08 0.009139 -0.175045 6.09 0.009107 -0.174742 6.1 0.009076 -0.174441 6.11 0.009044 -0.174140 6.12 0.009013 -0.173841 6.13 0.008982 -0.173543 6.14 0.008951 -0.173245 6.15 0.008921 -0.172949 6.16 0.008890 -0.172654 6.17 0.008860 -0.172360 6.18 0.008829 -0.172066 6.19 0.008799 -0.171774 6.2 0.008769 -0.171483 6.21 0.008740 -0.171192 6.22 0.008710 -0.170903 6.23 0.008681 -0.170615 6.24 0.008651 -0.170327 6.25 0.008622 -0.170041 6.26 0.008593 -0.169755 6.27 0.008564 -0.169471 6.28 0.008535 -0.169187 6.29 0.008507 -0.168905 6.3 0.008478 -0.168623 6.31 0.008450 -0.168342 6.32 0.008422 -0.168062 6.33 0.008394 -0.167784 6.34 0.008366 -0.167506 6.35 0.008338 -0.167229 6.36 0.008311 -0.166953 6.37 0.008283 -0.166677 6.38 0.008256 -0.166403 6.39 0.008229 -0.166130 6.4 0.008202 -0.165857 6.41 0.008175 -0.165585 6.42 0.008148 -0.165315 6.43 0.008121 -0.165045 6.44 0.008095 -0.164776 6.45 0.008068 -0.164508 6.46 0.008042 -0.164241 6.47 0.008016 -0.163974 6.48 0.007990 -0.163709 6.49 0.007964 -0.163444 6.5 0.007938 -0.163180 6.51 0.007913 -0.162917 6.52 0.007887 -0.162655 6.53 0.007862 -0.162394 6.54 0.007836 -0.162133 6.55 0.007811 -0.161874 6.56 0.007786 -0.161615 6.57 0.007761 -0.161357 6.58 0.007736 -0.161100 6.59 0.007712 -0.160844 6.6 0.007687 -0.160588 6.61 0.007663 -0.160334 6.62 0.007638 -0.160080 6.63 0.007614 -0.159827 6.64 0.007590 -0.159574 6.65 0.007566 -0.159323 6.66 0.007542 -0.159072 6.67 0.007519 -0.158822 6.68 0.007495 -0.158573 6.69 0.007471 -0.158325 6.7 0.007448 -0.158077 6.71 0.007425 -0.157830 6.72 0.007402 -0.157584 6.73 0.007378 -0.157339 6.74 0.007355 -0.157095 6.75 0.007333 -0.156851 6.76 0.007310 -0.156608 6.77 0.007287 -0.156366 6.78 0.007265 -0.156124 6.79 0.007242 -0.155883 6.8 0.007220 -0.155643 6.81 0.007198 -0.155404 6.82 0.007175 -0.155166 6.83 0.007153 -0.154928 6.84 0.007131 -0.154691 6.85 0.007110 -0.154454 6.86 0.007088 -0.154219 6.87 0.007066 -0.153984 6.88 0.007045 -0.153750 6.89 0.007023 -0.153516 6.9 0.007002 -0.153283 6.91 0.006981 -0.153051 6.92 0.006959 -0.152820 6.93 0.006938 -0.152589 6.94 0.006917 -0.152359 6.95 0.006897 -0.152130 6.96 0.006876 -0.151901 6.97 0.006855 -0.151673 6.98 0.006835 -0.151446 6.99 0.006814 -0.151220 7 0.006794 -0.150994 7.01 0.006773 -0.150768 7.02 0.006753 -0.150544 7.03 0.006733 -0.150320 7.04 0.006713 -0.150097 7.05 0.006693 -0.149874 7.06 0.006673 -0.149652 7.07 0.006653 -0.149431 7.08 0.006634 -0.149210 7.09 0.006614 -0.148991 7.1 0.006595 -0.148771 7.11 0.006575 -0.148553 7.12 0.006556 -0.148335 7.13 0.006537 -0.148117 7.14 0.006517 -0.147900 7.15 0.006498 -0.147684 7.16 0.006479 -0.147469 7.17 0.006460 -0.147254 7.18 0.006442 -0.147040 7.19 0.006423 -0.146826 7.2 0.006404 -0.146613 7.21 0.006386 -0.146401 7.22 0.006367 -0.146189 7.23 0.006349 -0.145978 7.24 0.006330 -0.145767 7.25 0.006312 -0.145557 7.26 0.006294 -0.145348 7.27 0.006276 -0.145139 7.28 0.006258 -0.144931 7.29 0.006240 -0.144724 7.3 0.006222 -0.144517 7.31 0.006204 -0.144310 7.32 0.006186 -0.144105 7.33 0.006169 -0.143900 7.34 0.006151 -0.143695 7.35 0.006134 -0.143491 7.36 0.006116 -0.143287 7.37 0.006099 -0.143085 7.38 0.006082 -0.142882 7.39 0.006064 -0.142681 7.4 0.006047 -0.142479 7.41 0.006030 -0.142279 7.42 0.006013 -0.142079 7.43 0.005996 -0.141879 7.44 0.005979 -0.141681 7.45 0.005963 -0.141482 7.46 0.005946 -0.141284 7.47 0.005929 -0.141087 7.48 0.005913 -0.140890 7.49 0.005896 -0.140694 7.5 0.005880 -0.140499 7.51 0.005864 -0.140304 7.52 0.005847 -0.140109 7.53 0.005831 -0.139915 7.54 0.005815 -0.139722 7.55 0.005799 -0.139529 7.56 0.005783 -0.139336 7.57 0.005767 -0.139145 7.58 0.005751 -0.138953 7.59 0.005735 -0.138762 7.6 0.005719 -0.138572 7.61 0.005704 -0.138382 7.62 0.005688 -0.138193 7.63 0.005673 -0.138004 7.64 0.005657 -0.137816 7.65 0.005642 -0.137629 7.66 0.005626 -0.137441 7.67 0.005611 -0.137255 7.68 0.005596 -0.137069 7.69 0.005580 -0.136883 7.7 0.005565 -0.136698 7.71 0.005550 -0.136513 7.72 0.005535 -0.136329 7.73 0.005520 -0.136145 7.74 0.005505 -0.135962 7.75 0.005491 -0.135779 7.76 0.005476 -0.135597 7.77 0.005461 -0.135415 7.78 0.005447 -0.135234 7.79 0.005432 -0.135054 7.8 0.005417 -0.134873 7.81 0.005403 -0.134693 7.82 0.005389 -0.134514 7.83 0.005374 -0.134335 7.84 0.005360 -0.134157 7.85 0.005346 -0.133979 7.86 0.005332 -0.133802 7.87 0.005317 -0.133625 7.88 0.005303 -0.133448 7.89 0.005289 -0.133272 7.9 0.005275 -0.133097 7.91 0.005261 -0.132922 7.92 0.005248 -0.132747 7.93 0.005234 -0.132573 7.94 0.005220 -0.132399 7.95 0.005206 -0.132226 7.96 0.005193 -0.132053 7.97 0.005179 -0.131881 7.98 0.005166 -0.131709 7.99 0.005152 -0.131537 8 0.005139 -0.131366 8.01 0.005125 -0.131196 8.02 0.005112 -0.131026 8.03 0.005099 -0.130856 8.04 0.005086 -0.130687 8.05 0.005073 -0.130518 8.06 0.005059 -0.130350 8.07 0.005046 -0.130182 8.08 0.005033 -0.130014 8.09 0.005020 -0.129847 8.1 0.005007 -0.129680 8.11 0.004995 -0.129514 8.12 0.004982 -0.129348 8.13 0.004969 -0.129183 8.14 0.004956 -0.129018 8.15 0.004944 -0.128854 8.16 0.004931 -0.128690 8.17 0.004919 -0.128526 8.18 0.004906 -0.128363 8.19 0.004894 -0.128200 8.2 0.004881 -0.128037 8.21 0.004869 -0.127875 8.22 0.004856 -0.127714 8.23 0.004844 -0.127552 8.24 0.004832 -0.127391 8.25 0.004820 -0.127231 8.26 0.004808 -0.127071 8.27 0.004795 -0.126911 8.28 0.004783 -0.126752 8.29 0.004771 -0.126593 8.3 0.004759 -0.126435 8.31 0.004748 -0.126277 8.32 0.004736 -0.126119 8.33 0.004724 -0.125962 8.34 0.004712 -0.125805 8.35 0.004700 -0.125649 8.36 0.004689 -0.125493 8.37 0.004677 -0.125337 8.38 0.004665 -0.125182 8.39 0.004654 -0.125027 8.4 0.004642 -0.124872 8.41 0.004631 -0.124718 8.42 0.004619 -0.124564 8.43 0.004608 -0.124411 8.44 0.004597 -0.124258 8.45 0.004585 -0.124105 8.46 0.004574 -0.123953 8.47 0.004563 -0.123801 8.48 0.004552 -0.123650 8.49 0.004541 -0.123499 8.5 0.004529 -0.123348 8.51 0.004518 -0.123197 8.52 0.004507 -0.123047 8.53 0.004496 -0.122898 8.54 0.004485 -0.122748 8.55 0.004475 -0.122599 8.56 0.004464 -0.122451 8.57 0.004453 -0.122303 8.58 0.004442 -0.122155 8.59 0.004431 -0.122007 8.6 0.004421 -0.121860 8.61 0.004410 -0.121713 8.62 0.004399 -0.121567 8.63 0.004389 -0.121421 8.64 0.004378 -0.121275 8.65 0.004368 -0.121130 8.66 0.004357 -0.120985 8.67 0.004347 -0.120840 8.68 0.004336 -0.120695 8.69 0.004326 -0.120551 8.7 0.004316 -0.120408 8.71 0.004305 -0.120264 8.72 0.004295 -0.120121 8.73 0.004285 -0.119979 8.74 0.004275 -0.119836 8.75 0.004265 -0.119695 8.76 0.004255 -0.119553 8.77 0.004244 -0.119412 8.78 0.004234 -0.119271 8.79 0.004224 -0.119130 8.8 0.004214 -0.118990 8.81 0.004205 -0.118850 8.82 0.004195 -0.118710 8.83 0.004185 -0.118571 8.84 0.004175 -0.118432 8.85 0.004165 -0.118293 8.86 0.004155 -0.118155 8.87 0.004146 -0.118017 8.88 0.004136 -0.117879 8.89 0.004126 -0.117742 8.9 0.004117 -0.117604 8.91 0.004107 -0.117468 8.92 0.004098 -0.117331 8.93 0.004088 -0.117195 8.94 0.004079 -0.117059 8.95 0.004069 -0.116924 8.96 0.004060 -0.116789 8.97 0.004050 -0.116654 8.98 0.004041 -0.116519 8.99 0.004032 -0.116385 9 0.004022 -0.116251 9.01 0.004013 -0.116118 9.02 0.004004 -0.115984 9.03 0.003995 -0.115851 9.04 0.003986 -0.115718 9.05 0.003976 -0.115586 9.06 0.003967 -0.115454 9.07 0.003958 -0.115322 9.08 0.003949 -0.115191 9.09 0.003940 -0.115059 9.1 0.003931 -0.114929 9.11 0.003922 -0.114798 9.12 0.003913 -0.114668 9.13 0.003905 -0.114538 9.14 0.003896 -0.114408 9.15 0.003887 -0.114279 9.16 0.003878 -0.114149 9.17 0.003869 -0.114021 9.18 0.003861 -0.113892 9.19 0.003852 -0.113764 9.2 0.003843 -0.113636 9.21 0.003835 -0.113508 9.22 0.003826 -0.113381 9.23 0.003817 -0.113254 9.24 0.003809 -0.113127 9.25 0.003800 -0.113000 9.26 0.003792 -0.112874 9.27 0.003783 -0.112748 9.28 0.003775 -0.112622 9.29 0.003766 -0.112497 9.3 0.003758 -0.112372 9.31 0.003750 -0.112247 9.32 0.003741 -0.112122 9.33 0.003733 -0.111998 9.34 0.003725 -0.111874 9.35 0.003716 -0.111750 9.36 0.003708 -0.111627 9.37 0.003700 -0.111503 9.38 0.003692 -0.111380 9.39 0.003684 -0.111258 9.4 0.003676 -0.111135 9.41 0.003668 -0.111013 9.42 0.003659 -0.110891 9.43 0.003651 -0.110770 9.44 0.003643 -0.110648 9.45 0.003635 -0.110527 9.46 0.003628 -0.110407 9.47 0.003620 -0.110286 9.48 0.003612 -0.110166 9.49 0.003604 -0.110046 9.5 0.003596 -0.109926 9.51 0.003588 -0.109807 9.52 0.003580 -0.109687 9.53 0.003573 -0.109568 9.54 0.003565 -0.109450 9.55 0.003557 -0.109331 9.56 0.003549 -0.109213 9.57 0.003542 -0.109095 9.58 0.003534 -0.108977 9.59 0.003526 -0.108860 9.6 0.003519 -0.108743 9.61 0.003511 -0.108626 9.62 0.003504 -0.108509 9.63 0.003496 -0.108393 9.64 0.003489 -0.108276 9.65 0.003481 -0.108160 9.66 0.003474 -0.108045 9.67 0.003466 -0.107929 9.68 0.003459 -0.107814 9.69 0.003452 -0.107699 9.7 0.003444 -0.107584 9.71 0.003437 -0.107470 9.72 0.003430 -0.107356 9.73 0.003422 -0.107242 9.74 0.003415 -0.107128 9.75 0.003408 -0.107015 9.76 0.003400 -0.106901 9.77 0.003393 -0.106788 9.78 0.003386 -0.106675 9.79 0.003379 -0.106563 9.8 0.003372 -0.106451 9.81 0.003365 -0.106339 9.82 0.003358 -0.106227 9.83 0.003351 -0.106115 9.84 0.003344 -0.106004 9.85 0.003337 -0.105893 9.86 0.003330 -0.105782 9.87 0.003323 -0.105671 9.88 0.003316 -0.105561 9.89 0.003309 -0.105450 9.9 0.003302 -0.105340 9.91 0.003295 -0.105231 9.92 0.003288 -0.105121 9.93 0.003281 -0.105012 9.94 0.003274 -0.104903 9.95 0.003268 -0.104794 9.96 0.003261 -0.104685 9.97 0.003254 -0.104577 9.98 0.003247 -0.104469 9.99 0.003241 -0.104361 dmrgpp-6.02/TestSuite/oracles/e0.txt000066400000000000000000000012311414604301300173510ustar00rootroot00000000000000#Energy=-3.5753656 #Energy=-5.6288932 #Energy=-7.6948332 #Energy=-9.7662746 #Energy=-11.840636 #Energy=-13.916731 #Energy=-15.993936 #Energy=-15.993935 #Energy=-15.993935 #Energy=-15.993936 #Energy=-15.993936 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 dmrgpp-6.02/TestSuite/oracles/e1.txt000066400000000000000000000012261414604301300173560ustar00rootroot00000000000000#Energy=-2.8759428 #Energy=-4.5463138 #Energy=-6.2256341 #Energy=-7.9087307 #Energy=-9.5937473 #Energy=-11.279848 #Energy=-12.966625 #Energy=-12.966606 #Energy=-12.96661 #Energy=-12.966614 #Energy=-12.966619 #Energy=-12.966621 #Energy=-12.966621 #Energy=-12.966621 #Energy=-12.966621 #Energy=-12.966621 #Energy=-12.966621 #Energy=-12.966622 #Energy=-12.966625 #Energy=-12.96663 #Energy=-12.966638 #Energy=-12.966642 #Energy=-12.966648 #Energy=-12.966652 #Energy=-12.966654 #Energy=-12.966656 #Energy=-12.966656 #Energy=-12.966656 #Energy=-12.966656 #Energy=-12.966656 #Energy=-12.966656 #Energy=-12.966658 #Energy=-12.96666 #Energy=-12.966664 #Energy=-12.966669 dmrgpp-6.02/TestSuite/oracles/e10.txt000066400000000000000000000024351414604301300174410ustar00rootroot00000000000000#Energy=-4.472136 #Energy=-6.9879184 #Energy=-9.517541 #Energy=-12.053348 #Energy=-14.59246 #Energy=-17.133544 #Energy=-19.675901 #Energy=-19.675901 #Energy=-19.675901 #Energy=-19.675901 #Energy=-19.6759 #Energy=-19.675898 #Energy=-19.675896 #Energy=-19.675896 #Energy=-19.675896 #Energy=-19.675896 #Energy=-19.675898 #Energy=-19.6759 #Energy=-19.6759 #Energy=-19.675894 #Energy=-19.675872 #Energy=-19.675814 #Energy=-19.675732 #Energy=-19.675527 #Energy=-19.675486 #Energy=-19.67536 #Energy=-19.675358 #Energy=-19.675358 #Energy=-19.675358 #Energy=-19.675358 #Energy=-19.67536 #Energy=-19.675486 #Energy=-19.675525 #Energy=-19.675721 #Energy=-19.675785 #Energy=-19.675811 #Energy=-19.675807 #Energy=-19.675774 #Energy=-19.675722 #Energy=-19.675672 #Energy=-19.67567 #Energy=-19.67567 #Energy=-19.67567 #Energy=-19.67567 #Energy=-19.675672 #Energy=-19.675722 #Energy=-19.675768 #Energy=-19.675716 #Energy=-19.675674 #Energy=-19.675467 #Energy=-19.675414 #Energy=-19.675184 #Energy=-19.675145 #Energy=-19.675012 #Energy=-19.67501 #Energy=-19.67501 #Energy=-19.67501 #Energy=-19.67501 #Energy=-19.675012 #Energy=-19.675145 #Energy=-19.675183 #Energy=-19.675411 #Energy=-19.67546 #Energy=-19.675648 #Energy=-19.675648 #Energy=-19.67562 #Energy=-19.675435 #Energy=-19.675269 #Energy=-19.675207 #Energy=-19.675207 dmrgpp-6.02/TestSuite/oracles/e100.txt000066400000000000000000000012311414604301300175120ustar00rootroot00000000000000#Energy=-3.5753656 #Energy=-5.6288932 #Energy=-7.6948332 #Energy=-9.7662746 #Energy=-11.840636 #Energy=-13.916731 #Energy=-15.993936 #Energy=-15.993935 #Energy=-15.993935 #Energy=-15.993936 #Energy=-15.993936 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 dmrgpp-6.02/TestSuite/oracles/e1000.txt000066400000000000000000000127161414604301300176040ustar00rootroot00000000000000#Energy=-4.472136 #Energy=-6.9879184 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 #Energy=-9.5175409 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.517541 #Energy=-9.5175409 dmrgpp-6.02/TestSuite/oracles/e101.txt000066400000000000000000000012301414604301300175120ustar00rootroot00000000000000#Energy=-2.8759428 #Energy=-4.5463138 #Energy=-6.2256341 #Energy=-7.9087307 #Energy=-9.5937473 #Energy=-11.279849 #Energy=-12.966626 #Energy=-12.966608 #Energy=-12.966613 #Energy=-12.966617 #Energy=-12.966621 #Energy=-12.966622 #Energy=-12.966622 #Energy=-12.966622 #Energy=-12.966622 #Energy=-12.966622 #Energy=-12.966622 #Energy=-12.966624 #Energy=-12.966628 #Energy=-12.966632 #Energy=-12.966639 #Energy=-12.966643 #Energy=-12.966646 #Energy=-12.966649 #Energy=-12.966652 #Energy=-12.966653 #Energy=-12.966653 #Energy=-12.966653 #Energy=-12.966653 #Energy=-12.966653 #Energy=-12.966653 #Energy=-12.966655 #Energy=-12.966659 #Energy=-12.966663 #Energy=-12.96667 dmrgpp-6.02/TestSuite/oracles/e102.txt000066400000000000000000000012311414604301300175140ustar00rootroot00000000000000#Energy=-3.5753656 #Energy=-5.6288932 #Energy=-7.6948332 #Energy=-9.7662746 #Energy=-11.840636 #Energy=-13.916731 #Energy=-15.993936 #Energy=-15.993935 #Energy=-15.993935 #Energy=-15.993936 #Energy=-15.993936 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993937 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 #Energy=-15.993938 dmrgpp-6.02/TestSuite/oracles/e103.txt000066400000000000000000000016751414604301300175310ustar00rootroot00000000000000#Energy=-4 #Energy=-7.6568542 #Energy=-10.472136 #Energy=-12.926135 #Energy=-16.114539 #Energy=-18.99918 #Energy=-21.530742 #Energy=-24.259988 #Energy=-27.420916 #Energy=-30.054471 #Energy=-32.817108 #Energy=-35.913589 #Energy=-38.5434 #Energy=-41.212334 #Energy=-44.348388 #Energy=-44.343288 #Energy=-44.353028 #Energy=-44.387097 #Energy=-44.389818 #Energy=-44.398625 #Energy=-44.408186 #Energy=-44.409631 #Energy=-44.409631 #Energy=-44.41235 #Energy=-44.419588 #Energy=-44.424668 #Energy=-44.432272 #Energy=-44.450149 #Energy=-44.450149 #Energy=-44.452857 #Energy=-44.459999 #Energy=-44.480063 #Energy=-44.482948 #Energy=-44.494521 #Energy=-44.502626 #Energy=-44.504043 #Energy=-44.504043 #Energy=-44.506404 #Energy=-44.512822 #Energy=-44.518545 #Energy=-44.526222 #Energy=-44.535037 #Energy=-44.550307 #Energy=-44.562972 #Energy=-44.564497 #Energy=-44.564896 #Energy=-44.565275 #Energy=-44.565455 #Energy=-44.565783 #Energy=-44.565783 #Energy=-44.565783 dmrgpp-6.02/TestSuite/oracles/e11.txt000066400000000000000000000011041414604301300174320ustar00rootroot00000000000000#Energy=-4 #Energy=-7.6568542 #Energy=-10.472136 #Energy=-12.926525 #Energy=-16.135229 #Energy=-16.134529 #Energy=-16.146607 #Energy=-16.161086 #Energy=-16.161086 #Energy=-16.161086 #Energy=-16.161086 #Energy=-16.161086 #Energy=-16.161086 #Energy=-16.161224 #Energy=-16.162456 #Energy=-16.162507 #Energy=-16.175147 #Energy=-16.188303 #Energy=-16.188303 #Energy=-16.188303 #Energy=-16.188303 #Energy=-16.188303 #Energy=-16.188303 #Energy=-16.188417 #Energy=-16.18987 #Energy=-16.190248 #Energy=-16.190422 #Energy=-16.190423 #Energy=-16.190423 #Energy=-16.190423 #Energy=-16.190423 dmrgpp-6.02/TestSuite/oracles/e12.txt000066400000000000000000000011161414604301300174360ustar00rootroot00000000000000#Energy=-0.44163932 #Energy=-0.64143735 #Energy=-0.8404915 #Energy=-1.039704 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 #Energy=-1.2389154 dmrgpp-6.02/TestSuite/oracles/e120.txt000066400000000000000000000026211414604301300175200ustar00rootroot00000000000000#Energy=-3.2320508 #Energy=-4.9871543 #Energy=-6.7498652 #Energy=-8.5160704 #Energy=-10.284181 #Energy=-12.053449 #Energy=-13.823474 #Energy=-15.594022 #Energy=-17.364947 #Energy=-19.136152 #Energy=-20.907572 #Energy=-22.679159 #Energy=-24.450881 #Energy=-26.222712 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 dmrgpp-6.02/TestSuite/oracles/e1200.txt000066400000000000000000000004371414604301300176030ustar00rootroot00000000000000#Energy=-0.48480762 #Energy=-0.74807314 #Energy=-1.0124798 #Energy=-1.0124798 #Energy=-1.0124798 #Energy=-1.0124798 #Energy=-1.0124798 #Energy=-1.0124798 #Energy=-1.0124798 #Energy=-1.0124798 #Energy=-1.0124798 #Energy=-1.0124798 #Energy=-1.0124798 #Energy=-1.0124798 #Energy=-1.0124798 dmrgpp-6.02/TestSuite/oracles/e1201.txt000066400000000000000000000004351414604301300176020ustar00rootroot00000000000000#Energy=-2.4545548 #Energy=-3.9913583 #Energy=-5.3202959 #Energy=-5.3202959 #Energy=-5.3202959 #Energy=-5.3202959 #Energy=-5.3202959 #Energy=-5.3202959 #Energy=-5.3202959 #Energy=-5.3202959 #Energy=-5.3202959 #Energy=-5.3202959 #Energy=-5.3202959 #Energy=-5.3202959 #Energy=-5.3202959 dmrgpp-6.02/TestSuite/oracles/e121.txt000066400000000000000000000012301414604301300175140ustar00rootroot00000000000000#Energy=-8.080127 #Energy=-12.467886 #Energy=-16.874663 #Energy=-21.290176 #Energy=-25.710453 #Energy=-30.133623 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558686 dmrgpp-6.02/TestSuite/oracles/e122.txt000066400000000000000000000026131414604301300175230ustar00rootroot00000000000000#Energy=-3.2320508 #Energy=-4.9871543 #Energy=-6.7498652 #Energy=-8.5160704 #Energy=-10.284181 #Energy=-12.053449 #Energy=-13.823474 #Energy=-15.594022 #Energy=-17.364947 #Energy=-19.136152 #Energy=-20.907572 #Energy=-22.679159 #Energy=-24.450881 #Energy=-26.222712 #Energy=-27.994631 #Energy=-27.994672 #Energy=-27.994586 #Energy=-27.994662 #Energy=-27.99465 #Energy=-27.994631 #Energy=-27.994632 #Energy=-27.994633 #Energy=-27.994633 #Energy=-27.994634 #Energy=-27.994627 #Energy=-27.994631 #Energy=-27.994635 #Energy=-27.99463 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994622 #Energy=-27.994668 #Energy=-27.994666 #Energy=-27.99468 #Energy=-27.994678 #Energy=-27.994609 #Energy=-27.994622 #Energy=-27.994675 #Energy=-27.994665 #Energy=-27.994656 #Energy=-27.994611 #Energy=-27.99462 #Energy=-27.994604 #Energy=-27.994669 #Energy=-27.994664 #Energy=-27.994672 #Energy=-27.994586 #Energy=-27.994662 #Energy=-27.99465 #Energy=-27.994631 #Energy=-27.994632 #Energy=-27.994634 #Energy=-27.994633 #Energy=-27.994634 #Energy=-27.994628 #Energy=-27.994631 #Energy=-27.994635 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994631 #Energy=-27.994622 #Energy=-27.994668 #Energy=-27.994666 #Energy=-27.994681 #Energy=-27.994678 #Energy=-27.994609 #Energy=-27.994622 #Energy=-27.994677 #Energy=-27.994665 #Energy=-27.994656 #Energy=-27.994611 #Energy=-27.99462 #Energy=-27.994603 #Energy=-27.994669 #Energy=-27.994667 dmrgpp-6.02/TestSuite/oracles/e123.txt000066400000000000000000000012261414604301300175230ustar00rootroot00000000000000#Energy=-8.080127 #Energy=-12.467886 #Energy=-16.874663 #Energy=-21.290176 #Energy=-25.710453 #Energy=-30.133623 #Energy=-34.558686 #Energy=-34.558692 #Energy=-34.558719 #Energy=-34.55868 #Energy=-34.558687 #Energy=-34.558684 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558716 #Energy=-34.558698 #Energy=-34.558671 #Energy=-34.558645 #Energy=-34.558639 #Energy=-34.558727 #Energy=-34.558708 #Energy=-34.558692 #Energy=-34.558719 #Energy=-34.55868 #Energy=-34.558687 #Energy=-34.558684 #Energy=-34.558686 #Energy=-34.558686 #Energy=-34.558716 #Energy=-34.558698 #Energy=-34.558671 #Energy=-34.558645 #Energy=-34.558639 #Energy=-34.558727 #Energy=-34.558708 dmrgpp-6.02/TestSuite/oracles/e140.txt000066400000000000000000000004351414604301300175230ustar00rootroot00000000000000#Energy=-1.8915644 #Energy=-3.0843581 #Energy=-4.1490508 #Energy=-4.1356499 #Energy=-4.1740696 #Energy=-4.1930908 #Energy=-4.1930908 #Energy=-4.1982316 #Energy=-4.2208586 #Energy=-4.2251098 #Energy=-4.2859987 #Energy=-4.3075415 #Energy=-4.3075415 #Energy=-4.3103893 #Energy=-4.3310127 dmrgpp-6.02/TestSuite/oracles/e15.txt000066400000000000000000000026021414604301300174420ustar00rootroot00000000000000#Energy=0 #Energy=-0.6 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 #Energy=-4.5298221 dmrgpp-6.02/TestSuite/oracles/e2.txt000066400000000000000000000015021414604301300173540ustar00rootroot00000000000000#Energy=-4.472136 #Energy=-6.9879184 #Energy=-9.517541 #Energy=-12.053348 #Energy=-14.592457 #Energy=-17.133537 #Energy=-19.675882 #Energy=-19.675881 #Energy=-19.675881 #Energy=-19.675882 #Energy=-19.675883 #Energy=-19.675884 #Energy=-19.675884 #Energy=-19.675884 #Energy=-19.675884 #Energy=-19.675884 #Energy=-19.675884 #Energy=-19.675884 #Energy=-19.675884 #Energy=-19.675884 #Energy=-19.675884 #Energy=-19.675884 #Energy=-19.675884 #Energy=-19.675885 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 dmrgpp-6.02/TestSuite/oracles/e20.txt000066400000000000000000000026201414604301300174360ustar00rootroot00000000000000#Energy=-1.6160254 #Energy=-2.4935771 #Energy=-3.3749326 #Energy=-4.2580352 #Energy=-5.1420906 #Energy=-6.0267247 #Energy=-6.9117371 #Energy=-7.7970111 #Energy=-8.6824733 #Energy=-9.5680759 #Energy=-10.453786 #Energy=-11.33958 #Energy=-12.225441 #Energy=-13.111356 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 #Energy=-13.997316 dmrgpp-6.02/TestSuite/oracles/e200.txt000066400000000000000000000024461414604301300175240ustar00rootroot00000000000000#Energy=-4.472136 #Energy=-6.9879184 #Energy=-9.517541 #Energy=-12.053348 #Energy=-14.59246 #Energy=-17.133544 #Energy=-19.675901 #Energy=-19.675901 #Energy=-19.675901 #Energy=-19.675901 #Energy=-19.6759 #Energy=-19.675898 #Energy=-19.675896 #Energy=-19.675896 #Energy=-19.675896 #Energy=-19.675896 #Energy=-19.675898 #Energy=-19.6759 #Energy=-19.6759 #Energy=-19.675894 #Energy=-19.675872 #Energy=-19.675814 #Energy=-19.675732 #Energy=-19.675527 #Energy=-19.675486 #Energy=-19.67536 #Energy=-19.675358 #Energy=-19.675358 #Energy=-19.675358 #Energy=-19.675358 #Energy=-19.67536 #Energy=-19.675486 #Energy=-19.675525 #Energy=-19.675721 #Energy=-19.675785 #Energy=-19.675811 #Energy=-19.675807 #Energy=-19.675774 #Energy=-19.675723 #Energy=-19.675673 #Energy=-19.675671 #Energy=-19.675671 #Energy=-19.675671 #Energy=-19.675671 #Energy=-19.675673 #Energy=-19.675723 #Energy=-19.675768 #Energy=-19.675716 #Energy=-19.675671 #Energy=-19.675451 #Energy=-19.675398 #Energy=-19.675166 #Energy=-19.675126 #Energy=-19.674993 #Energy=-19.674991 #Energy=-19.674991 #Energy=-19.674991 #Energy=-19.674991 #Energy=-19.674993 #Energy=-19.675126 #Energy=-19.675164 #Energy=-19.675395 #Energy=-19.675443 #Energy=-19.675644 #Energy=-19.675648 #Energy=-19.67562 #Energy=-19.675436 #Energy=-19.675271 #Energy=-19.675209 #Energy=-19.675209 dmrgpp-6.02/TestSuite/oracles/e201.txt000066400000000000000000000043171414604301300175240ustar00rootroot00000000000000LanczosSolver: Found Energy=-19.528567 after 33 iterations, orig. norm=0.99998775 LanczosSolver: Found Energy=-19.639095 after 35 iterations, orig. norm=0.99997413 LanczosSolver: Found Energy=-19.67381 after 31 iterations, orig. norm=0.99988771 LanczosSolver: Found Energy=-19.663712 after 28 iterations, orig. norm=0.99874733 LanczosSolver: Found Energy=-19.612732 after 28 iterations, orig. norm=0.99367186 LanczosSolver: Found Energy=-19.421671 after 25 iterations, orig. norm=0.97574371 LanczosSolver: Found Energy=-19.413171 after 20 iterations, orig. norm=0.99887873 LanczosSolver: Found Energy=-19.413171 after 5 iterations, orig. norm=1 LanczosSolver: Found Energy=-19.421674 after 25 iterations, orig. norm=1 LanczosSolver: Found Energy=-19.612733 after 31 iterations, orig. norm=1 LanczosSolver: Found Energy=-19.663708 after 35 iterations, orig. norm=0.99999996 LanczosSolver: Found Energy=-19.672913 after 30 iterations, orig. norm=0.99988369 LanczosSolver: Found Energy=-19.644975 after 30 iterations, orig. norm=0.99674248 LanczosSolver: Found Energy=-19.531214 after 31 iterations, orig. norm=0.98593801 LanczosSolver: Found Energy=-19.411809 after 32 iterations, orig. norm=0.98600614 LanczosSolver: Found Energy=-19.288599 after 28 iterations, orig. norm=0.98546321 LanczosSolver: Found Energy=-19.156372 after 28 iterations, orig. norm=0.98682746 LanczosSolver: Found Energy=-19.042296 after 25 iterations, orig. norm=0.98894316 LanczosSolver: Found Energy=-18.946328 after 23 iterations, orig. norm=0.99126426 LanczosSolver: Found Energy=-18.917538 after 19 iterations, orig. norm=0.99742763 LanczosSolver: Found Energy=-18.917225 after 17 iterations, orig. norm=0.99997495 LanczosSolver: Found Energy=-18.917225 after 5 iterations, orig. norm=1 LanczosSolver: Found Energy=-18.917537 after 19 iterations, orig. norm=1 LanczosSolver: Found Energy=-18.94633 after 24 iterations, orig. norm=1 LanczosSolver: Found Energy=-19.042297 after 27 iterations, orig. norm=1 LanczosSolver: Found Energy=-19.156372 after 31 iterations, orig. norm=0.99999992 LanczosSolver: Found Energy=-19.28859 after 31 iterations, orig. norm=0.9999988 LanczosSolver: Found Energy=-19.411754 after 34 iterations, orig. norm=0.99999374 dmrgpp-6.02/TestSuite/oracles/e21.txt000066400000000000000000000012311414604301300174340ustar00rootroot00000000000000#Energy=-4.0400635 #Energy=-6.2339428 #Energy=-8.4373315 #Energy=-10.645088 #Energy=-12.855227 #Energy=-15.066812 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 dmrgpp-6.02/TestSuite/oracles/e22.txt000066400000000000000000000063741414604301300174520ustar00rootroot00000000000000#Energy=-0.8080127 #Energy=-1.2467886 #Energy=-1.6874663 #Energy=-2.1290176 #Energy=-2.5710453 #Energy=-3.0133623 #Energy=-3.4558686 #Energy=-3.8985055 #Energy=-4.3412367 #Energy=-4.7840379 #Energy=-5.2268929 #Energy=-5.6697898 #Energy=-6.1127203 #Energy=-6.5556779 #Energy=-6.9986578 #Energy=-7.4416563 #Energy=-7.8846705 #Energy=-8.3276979 #Energy=-8.7707366 #Energy=-9.2137852 #Energy=-9.6568424 #Energy=-10.099907 #Energy=-10.542978 #Energy=-10.986055 #Energy=-11.429137 #Energy=-11.872224 #Energy=-12.315315 #Energy=-12.75841 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 #Energy=-13.201508 dmrgpp-6.02/TestSuite/oracles/e23.txt000066400000000000000000000006171414604301300174450ustar00rootroot00000000000000#Energy=-1.6160254 #Energy=-2.4935771 #Energy=-3.3749326 #Energy=-4.2580352 #Energy=-5.1420906 #Energy=-6.0267247 #Energy=-6.9117371 #Energy=-6.9117371 #Energy=-6.9117371 #Energy=-6.9117371 #Energy=-6.9117371 #Energy=-6.9117371 #Energy=-6.9117371 #Energy=-6.9117371 #Energy=-6.9117371 #Energy=-6.9117371 #Energy=-6.9117371 #Energy=-6.9117371 #Energy=-6.9117371 #Energy=-6.9117371 #Energy=-6.9117371 dmrgpp-6.02/TestSuite/oracles/e24.txt000066400000000000000000000004121414604301300174370ustar00rootroot00000000000000#Energy=-6.9117357 #Energy=-6.9117324 #Energy=-6.9117299 #Energy=-6.9117364 #Energy=-6.9117341 #Energy=-6.9117346 #Energy=-6.9117345 #Energy=-6.9117345 #Energy=-6.9117345 #Energy=-6.9117345 #Energy=-6.9117345 #Energy=-6.9117345 #Energy=-6.9117345 #Energy=-6.9117345 dmrgpp-6.02/TestSuite/oracles/e25.txt000066400000000000000000000012311414604301300174400ustar00rootroot00000000000000#Energy=-4.0400635 #Energy=-6.2339428 #Energy=-8.4373315 #Energy=-10.645088 #Energy=-12.855227 #Energy=-15.066812 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 #Energy=-17.279343 dmrgpp-6.02/TestSuite/oracles/e26.txt000066400000000000000000000063771414604301300174610ustar00rootroot00000000000000#Energy=-0.40061948 #Energy=-0.83508521 #Energy=-1.2747373 #Energy=-1.7160332 #Energy=-2.1580555 #Energy=-2.6004594 #Energy=-3.0430866 #Energy=-3.4858545 #Energy=-3.9287161 #Energy=-4.3716428 #Energy=-4.8146163 #Energy=-5.2576242 #Energy=-5.7006582 #Energy=-6.1437121 #Energy=-6.5867817 #Energy=-7.0298638 #Energy=-7.4729557 #Energy=-7.9160557 #Energy=-8.3591624 #Energy=-8.8022745 #Energy=-9.2453912 #Energy=-9.6885117 #Energy=-10.131635 #Energy=-10.574762 #Energy=-11.017891 #Energy=-11.461021 #Energy=-11.904154 #Energy=-12.347288 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 #Energy=-12.790423 dmrgpp-6.02/TestSuite/oracles/e3.txt000066400000000000000000000014341414604301300173610ustar00rootroot00000000000000#Energy=-4 #Energy=-7.6568542 #Energy=-10.472136 #Energy=-12.925558 #Energy=-16.082452 #Energy=-18.991304 #Energy=-21.510031 #Energy=-21.509828 #Energy=-21.533809 #Energy=-21.566728 #Energy=-21.567617 #Energy=-21.56867 #Energy=-21.56867 #Energy=-21.56867 #Energy=-21.56867 #Energy=-21.56867 #Energy=-21.56867 #Energy=-21.568901 #Energy=-21.569846 #Energy=-21.573491 #Energy=-21.573491 #Energy=-21.574944 #Energy=-21.589396 #Energy=-21.616793 #Energy=-21.61807 #Energy=-21.619362 #Energy=-21.619362 #Energy=-21.619362 #Energy=-21.619362 #Energy=-21.619362 #Energy=-21.619362 #Energy=-21.619618 #Energy=-21.620969 #Energy=-21.62489 #Energy=-21.635973 #Energy=-21.642104 #Energy=-21.642742 #Energy=-21.642757 #Energy=-21.64279 #Energy=-21.64279 #Energy=-21.64279 #Energy=-21.64279 #Energy=-21.64279 dmrgpp-6.02/TestSuite/oracles/e3000.txt000066400000000000000000000041571414604301300176060ustar00rootroot00000000000000#Energy=-4.47213 #Energy=-6.98791 #Energy=-9.51754 #Energy=-12.05334 #Energy=-14.59245 #Energy=-17.13353 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67587 #Energy=-19.67581 #Energy=-19.67578 #Energy=-19.67571 #Energy=-19.67571 #Energy=-19.67571 #Energy=-19.67571 #Energy=-19.67571 #Energy=-19.67578 #Energy=-19.67581 #Energy=-19.67587 #Energy=-19.67588 #Energy=-19.67587 #Energy=-19.67586 #Energy=-19.67581 #Energy=-19.67572 #Energy=-19.67569 #Energy=-19.67564 #Energy=-19.67564 #Energy=-19.67564 #Energy=-19.67564 #Energy=-19.67564 #Energy=-19.67569 #Energy=-19.67572 #Energy=-19.67581 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67582 #Energy=-19.67579 #Energy=-19.67575 #Energy=-19.67575 #Energy=-19.67575 #Energy=-19.67575 #Energy=-19.67575 #Energy=-19.67579 #Energy=-19.67582 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67583 #Energy=-19.67576 #Energy=-19.67572 #Energy=-19.67569 #Energy=-19.67569 #Energy=-19.67569 #Energy=-19.67569 #Energy=-19.67569 #Energy=-19.67572 #Energy=-19.67576 #Energy=-19.67583 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67582 #Energy=-19.67579 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67579 #Energy=-19.67582 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67585 #Energy=-19.67578 #Energy=-19.67575 #Energy=-19.67572 #Energy=-19.67571 #Energy=-19.67571 #Energy=-19.67571 #Energy=-19.67572 #Energy=-19.67575 #Energy=-19.67578 #Energy=-19.67585 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67582 #Energy=-19.67579 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67579 #Energy=-19.67582 #Energy=-19.67586 #Energy=-19.67585 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67585 #Energy=-19.67579 #Energy=-19.67576 #Energy=-19.67572 #Energy=-19.67572 #Energy=-19.67572 #Energy=-19.67572 #Energy=-19.67572 #Energy=-19.67576 #Energy=-19.67579 #Energy=-19.67585 #Energy=-19.67586 #Energy=-19.67586 #CFEnergy=-19.67588 dmrgpp-6.02/TestSuite/oracles/e3001.txt000066400000000000000000000041571414604301300176070ustar00rootroot00000000000000#Energy=-4.47213 #Energy=-6.98791 #Energy=-9.51754 #Energy=-12.05334 #Energy=-14.59245 #Energy=-17.13353 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67587 #Energy=-19.67581 #Energy=-19.67578 #Energy=-19.67571 #Energy=-19.67571 #Energy=-19.67571 #Energy=-19.67571 #Energy=-19.67571 #Energy=-19.67578 #Energy=-19.67581 #Energy=-19.67587 #Energy=-19.67588 #Energy=-19.67587 #Energy=-19.67586 #Energy=-19.67581 #Energy=-19.67572 #Energy=-19.67569 #Energy=-19.67564 #Energy=-19.67564 #Energy=-19.67564 #Energy=-19.67564 #Energy=-19.67564 #Energy=-19.67569 #Energy=-19.67572 #Energy=-19.67581 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67582 #Energy=-19.67579 #Energy=-19.67575 #Energy=-19.67575 #Energy=-19.67575 #Energy=-19.67575 #Energy=-19.67575 #Energy=-19.67579 #Energy=-19.67582 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67583 #Energy=-19.67576 #Energy=-19.67572 #Energy=-19.67569 #Energy=-19.67569 #Energy=-19.67569 #Energy=-19.67569 #Energy=-19.67569 #Energy=-19.67572 #Energy=-19.67576 #Energy=-19.67583 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67582 #Energy=-19.67579 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67579 #Energy=-19.67582 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67585 #Energy=-19.67578 #Energy=-19.67575 #Energy=-19.67572 #Energy=-19.67571 #Energy=-19.67571 #Energy=-19.67571 #Energy=-19.67572 #Energy=-19.67575 #Energy=-19.67578 #Energy=-19.67585 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67585 #Energy=-19.67582 #Energy=-19.67579 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67576 #Energy=-19.67579 #Energy=-19.67582 #Energy=-19.67585 #Energy=-19.67585 #Energy=-19.67586 #Energy=-19.67586 #Energy=-19.67585 #Energy=-19.67579 #Energy=-19.67576 #Energy=-19.67572 #Energy=-19.67572 #Energy=-19.67572 #Energy=-19.67572 #Energy=-19.67572 #Energy=-19.67576 #Energy=-19.67579 #Energy=-19.67585 #Energy=-19.67586 #Energy=-19.67586 #CFEnergy=-19.67588 dmrgpp-6.02/TestSuite/oracles/e3002.txt000066400000000000000000000041621414604301300176040ustar00rootroot00000000000000#Energy=-20.91149 #Energy=-31.44243 #Energy=-41.97484 #Energy=-52.50793 #Energy=-63.04137 #Energy=-73.57505 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #CFEnergy=-84.10886 dmrgpp-6.02/TestSuite/oracles/e3003.txt000066400000000000000000000041621414604301300176050ustar00rootroot00000000000000#Energy=-20.91149 #Energy=-31.44243 #Energy=-41.97484 #Energy=-52.50793 #Energy=-63.04137 #Energy=-73.57505 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #CFEnergy=-84.10886 dmrgpp-6.02/TestSuite/oracles/e3004.txt000066400000000000000000000041561414604301300176110ustar00rootroot00000000000000#Energy=-4.47213 #Energy=-6.98791 #Energy=-9.51754 #Energy=-12.05334 #Energy=-14.59245 #Energy=-17.13353 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67587 #Energy=-19.67584 #Energy=-19.67573 #Energy=-19.67566 #Energy=-19.67551 #Energy=-19.67544 #Energy=-19.67532 #Energy=-19.67529 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67529 #Energy=-19.67531 #Energy=-19.67541 #Energy=-19.67544 #Energy=-19.67554 #Energy=-19.67555 #Energy=-19.67560 #Energy=-19.67558 #Energy=-19.67556 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67556 #Energy=-19.67558 #Energy=-19.67561 #Energy=-19.67561 #Energy=-19.67561 #Energy=-19.67559 #Energy=-19.67557 #Energy=-19.67555 #Energy=-19.67552 #Energy=-19.67550 #Energy=-19.67550 #Energy=-19.67550 #Energy=-19.67550 #Energy=-19.67550 #Energy=-19.67552 #Energy=-19.67555 #Energy=-19.67557 #Energy=-19.67559 #Energy=-19.67560 #Energy=-19.67560 #Energy=-19.6756 #Energy=-19.67557 #Energy=-19.67555 #Energy=-19.67553 #Energy=-19.67553 #Energy=-19.67553 #Energy=-19.67553 #Energy=-19.67553 #Energy=-19.67555 #Energy=-19.67557 #Energy=-19.67560 #Energy=-19.67561 #Energy=-19.67561 #Energy=-19.67561 #Energy=-19.67559 #Energy=-19.67557 #Energy=-19.67554 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67554 #Energy=-19.67557 #Energy=-19.67559 #Energy=-19.67561 #Energy=-19.67562 #Energy=-19.67561 #Energy=-19.67560 #Energy=-19.67557 #Energy=-19.67555 #Energy=-19.67553 #Energy=-19.67553 #Energy=-19.67553 #Energy=-19.67553 #Energy=-19.67553 #Energy=-19.67555 #Energy=-19.67557 #Energy=-19.67560 #Energy=-19.67561 #Energy=-19.67562 #Energy=-19.67561 #Energy=-19.67559 #Energy=-19.67557 #Energy=-19.67555 #Energy=-19.67553 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67553 #Energy=-19.67555 #Energy=-19.67557 #Energy=-19.67559 #Energy=-19.67561 #Energy=-19.67562 #CFEnergy=-19.67523 dmrgpp-6.02/TestSuite/oracles/e3005.txt000066400000000000000000000041561414604301300176120ustar00rootroot00000000000000#Energy=-4.47213 #Energy=-6.98791 #Energy=-9.51754 #Energy=-12.05334 #Energy=-14.59245 #Energy=-17.13353 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67587 #Energy=-19.67584 #Energy=-19.67573 #Energy=-19.67566 #Energy=-19.67551 #Energy=-19.67544 #Energy=-19.67532 #Energy=-19.67529 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67529 #Energy=-19.67531 #Energy=-19.67541 #Energy=-19.67544 #Energy=-19.67554 #Energy=-19.67555 #Energy=-19.67560 #Energy=-19.67558 #Energy=-19.67556 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67556 #Energy=-19.67558 #Energy=-19.67561 #Energy=-19.67561 #Energy=-19.67561 #Energy=-19.67559 #Energy=-19.67557 #Energy=-19.67555 #Energy=-19.67552 #Energy=-19.67550 #Energy=-19.67550 #Energy=-19.67550 #Energy=-19.67550 #Energy=-19.67550 #Energy=-19.67552 #Energy=-19.67555 #Energy=-19.67557 #Energy=-19.67559 #Energy=-19.67561 #Energy=-19.67560 #Energy=-19.6756 #Energy=-19.67557 #Energy=-19.67555 #Energy=-19.67553 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67553 #Energy=-19.67555 #Energy=-19.67557 #Energy=-19.67560 #Energy=-19.67561 #Energy=-19.67561 #Energy=-19.67561 #Energy=-19.67559 #Energy=-19.67557 #Energy=-19.67554 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67554 #Energy=-19.67557 #Energy=-19.67559 #Energy=-19.67561 #Energy=-19.67562 #Energy=-19.67561 #Energy=-19.67560 #Energy=-19.67557 #Energy=-19.67555 #Energy=-19.67553 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67553 #Energy=-19.67555 #Energy=-19.67557 #Energy=-19.67560 #Energy=-19.67561 #Energy=-19.67562 #Energy=-19.67561 #Energy=-19.67559 #Energy=-19.67557 #Energy=-19.67555 #Energy=-19.67553 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67553 #Energy=-19.67555 #Energy=-19.67557 #Energy=-19.67559 #Energy=-19.67561 #Energy=-19.67562 #CFEnergy=-19.67523 dmrgpp-6.02/TestSuite/oracles/e3006.txt000066400000000000000000000041571414604301300176140ustar00rootroot00000000000000#Energy=-4.47213 #Energy=-6.98791 #Energy=-9.51754 #Energy=-12.05334 #Energy=-14.59245 #Energy=-17.13353 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67587 #Energy=-19.67584 #Energy=-19.67573 #Energy=-19.67566 #Energy=-19.67552 #Energy=-19.67545 #Energy=-19.67532 #Energy=-19.67529 #Energy=-19.67524 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67524 #Energy=-19.67529 #Energy=-19.67532 #Energy=-19.67542 #Energy=-19.67544 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67560 #Energy=-19.67558 #Energy=-19.67556 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67556 #Energy=-19.67558 #Energy=-19.67560 #Energy=-19.67560 #Energy=-19.67560 #Energy=-19.67558 #Energy=-19.67556 #Energy=-19.67553 #Energy=-19.67551 #Energy=-19.67548 #Energy=-19.67548 #Energy=-19.67548 #Energy=-19.67548 #Energy=-19.67548 #Energy=-19.67551 #Energy=-19.67553 #Energy=-19.67557 #Energy=-19.67558 #Energy=-19.67560 #Energy=-19.67559 #Energy=-19.67559 #Energy=-19.67556 #Energy=-19.67554 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67554 #Energy=-19.67556 #Energy=-19.67559 #Energy=-19.67559 #Energy=-19.67561 #Energy=-19.67559 #Energy=-19.67559 #Energy=-19.67556 #Energy=-19.67553 #Energy=-19.67551 #Energy=-19.67551 #Energy=-19.67551 #Energy=-19.67551 #Energy=-19.67551 #Energy=-19.67553 #Energy=-19.67556 #Energy=-19.67559 #Energy=-19.67559 #Energy=-19.67561 #Energy=-19.67559 #Energy=-19.67559 #Energy=-19.67556 #Energy=-19.67554 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67554 #Energy=-19.67556 #Energy=-19.67559 #Energy=-19.67560 #Energy=-19.67561 #Energy=-19.67560 #Energy=-19.67559 #Energy=-19.67556 #Energy=-19.67554 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67554 #Energy=-19.67556 #Energy=-19.67559 #Energy=-19.67560 #Energy=-19.67561 #CFEnergy=-19.67523 dmrgpp-6.02/TestSuite/oracles/e3007.txt000066400000000000000000000041571414604301300176150ustar00rootroot00000000000000#Energy=-4.47213 #Energy=-6.98791 #Energy=-9.51754 #Energy=-12.05334 #Energy=-14.59245 #Energy=-17.13353 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67588 #Energy=-19.67587 #Energy=-19.67584 #Energy=-19.67573 #Energy=-19.67566 #Energy=-19.67551 #Energy=-19.67544 #Energy=-19.67532 #Energy=-19.67529 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67523 #Energy=-19.67529 #Energy=-19.67531 #Energy=-19.67542 #Energy=-19.67544 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67560 #Energy=-19.67558 #Energy=-19.67556 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67554 #Energy=-19.67556 #Energy=-19.67558 #Energy=-19.67560 #Energy=-19.67560 #Energy=-19.67560 #Energy=-19.67558 #Energy=-19.67556 #Energy=-19.67553 #Energy=-19.67551 #Energy=-19.67548 #Energy=-19.67548 #Energy=-19.67548 #Energy=-19.67548 #Energy=-19.67548 #Energy=-19.67551 #Energy=-19.67553 #Energy=-19.67557 #Energy=-19.67558 #Energy=-19.67560 #Energy=-19.67559 #Energy=-19.67559 #Energy=-19.67556 #Energy=-19.67554 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67554 #Energy=-19.67556 #Energy=-19.67559 #Energy=-19.67559 #Energy=-19.67561 #Energy=-19.67559 #Energy=-19.67559 #Energy=-19.67556 #Energy=-19.67553 #Energy=-19.67551 #Energy=-19.67551 #Energy=-19.67551 #Energy=-19.67551 #Energy=-19.67551 #Energy=-19.67553 #Energy=-19.67556 #Energy=-19.67559 #Energy=-19.67559 #Energy=-19.67561 #Energy=-19.67559 #Energy=-19.67559 #Energy=-19.67556 #Energy=-19.67554 #Energy=-19.67552 #Energy=-19.67551 #Energy=-19.67551 #Energy=-19.67551 #Energy=-19.67552 #Energy=-19.67554 #Energy=-19.67556 #Energy=-19.67559 #Energy=-19.67560 #Energy=-19.67561 #Energy=-19.67560 #Energy=-19.67559 #Energy=-19.67556 #Energy=-19.67554 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67552 #Energy=-19.67554 #Energy=-19.67556 #Energy=-19.67559 #Energy=-19.67560 #Energy=-19.67561 #CFEnergy=-19.67523 dmrgpp-6.02/TestSuite/oracles/e3008.txt000066400000000000000000000041621414604301300176120ustar00rootroot00000000000000#Energy=-20.91149 #Energy=-31.44243 #Energy=-41.97484 #Energy=-52.50793 #Energy=-63.04137 #Energy=-73.57505 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #CFEnergy=-84.10886 dmrgpp-6.02/TestSuite/oracles/e3009.txt000066400000000000000000000041621414604301300176130ustar00rootroot00000000000000#Energy=-20.91149 #Energy=-31.44243 #Energy=-41.97484 #Energy=-52.50793 #Energy=-63.04137 #Energy=-73.57505 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #CFEnergy=-84.10886 dmrgpp-6.02/TestSuite/oracles/e3010.txt000066400000000000000000000041621414604301300176030ustar00rootroot00000000000000#Energy=-20.91149 #Energy=-31.44243 #Energy=-41.97484 #Energy=-52.50793 #Energy=-63.04137 #Energy=-73.57505 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #CFEnergy=-84.10886 dmrgpp-6.02/TestSuite/oracles/e3011.txt000066400000000000000000000041621414604301300176040ustar00rootroot00000000000000#Energy=-20.91149 #Energy=-31.44243 #Energy=-41.97484 #Energy=-52.50793 #Energy=-63.04137 #Energy=-73.57505 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #Energy=-84.10886 #CFEnergy=-84.10886 dmrgpp-6.02/TestSuite/oracles/e4.txt000066400000000000000000000010211414604301300173520ustar00rootroot00000000000000#Energy=-3.5753656 #Energy=-5.6288932 #Energy=-7.6948332 #Energy=-9.7662668 #Energy=-11.840614 #Energy=-13.916665 #Energy=-15.993821 #Energy=-15.993791 #Energy=-15.993795 #Energy=-15.9938 #Energy=-15.993804 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993809 #Energy=-15.993813 #Energy=-15.99382 #Energy=-15.993827 #Energy=-15.993833 #Energy=-15.993831 #Energy=-15.993777 #Energy=-15.993752 #Energy=-15.993639 #Energy=-15.993629 #Energy=-15.993629 dmrgpp-6.02/TestSuite/oracles/e40.txt000066400000000000000000000004341414604301300174410ustar00rootroot00000000000000#Energy=-1.8915644 #Energy=-3.0422077 #Energy=-4.1689085 #Energy=-4.1517034 #Energy=-4.1862883 #Energy=-4.2278982 #Energy=-4.2278982 #Energy=-4.230935 #Energy=-4.2489475 #Energy=-4.2516763 #Energy=-4.2894956 #Energy=-4.3344483 #Energy=-4.3344483 #Energy=-4.3393157 #Energy=-4.3494179 dmrgpp-6.02/TestSuite/oracles/e4000.txt000066400000000000000000000003331414604301300175770ustar00rootroot00000000000000#Energy=0 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 #Energy=-2 dmrgpp-6.02/TestSuite/oracles/e4001.txt000066400000000000000000000021361414604301300176030ustar00rootroot00000000000000#Energy=0 #Energy=0 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 #Energy=-2.216617 dmrgpp-6.02/TestSuite/oracles/e41.txt000066400000000000000000000004351414604301300174430ustar00rootroot00000000000000#Energy=-8.4881467 #Energy=-12.688915 #Energy=-16.949427 #Energy=-16.933806 #Energy=-16.937161 #Energy=-16.946113 #Energy=-16.946113 #Energy=-16.958199 #Energy=-16.960738 #Energy=-16.962491 #Energy=-16.967391 #Energy=-16.976443 #Energy=-16.976443 #Energy=-16.984808 #Energy=-16.988794 dmrgpp-6.02/TestSuite/oracles/e410.txt000066400000000000000000000017721414604301300175300ustar00rootroot00000000000000#Energy=-1.0998778 #Energy=-1.8038195 #Energy=-2.5078844 #Energy=-2.5078825 #Energy=-2.507882 #Energy=-2.507882 #Energy=-2.507882 #Energy=-2.507882 #Energy=-2.5078825 #Energy=-2.5078839 #Energy=-2.5078815 #Energy=-2.5078815 #Energy=-2.5078815 #Energy=-2.5078815 #Energy=-2.5078839 #Energy=-2.507884 #Energy=-2.5078762 #Energy=-2.5078762 #Energy=-2.5078762 #Energy=-2.5078762 #Energy=-2.507884 #Energy=-2.5078838 #Energy=-2.5078611 #Energy=-2.5078611 #Energy=-2.5078611 #Energy=-2.5078611 #Energy=-2.5078838 #Energy=-2.507883 #Energy=-2.5078486 #Energy=-2.5078486 #Energy=-2.5078486 #Energy=-2.5078486 #Energy=-2.507883 #Energy=-2.5078814 #Energy=-2.5078404 #Energy=-2.5078404 #Energy=-2.5078404 #Energy=-2.5078404 #Energy=-2.5078814 #Energy=-2.5078787 #Energy=-2.5078129 #Energy=-2.5078129 #Energy=-2.5078129 #Energy=-2.5078129 #Energy=-2.5078787 #Energy=-2.5078765 #Energy=-2.5077464 #Energy=-2.5077464 #Energy=-2.5077464 #Energy=-2.5077464 #Energy=-2.5078765 #Energy=-2.5078481 #Energy=-2.5077596 #Energy=-2.5077596 dmrgpp-6.02/TestSuite/oracles/e5.txt000066400000000000000000000010211414604301300173530ustar00rootroot00000000000000#Energy=-3.5753656 #Energy=-5.6288932 #Energy=-7.6948332 #Energy=-9.7662668 #Energy=-11.840614 #Energy=-13.916665 #Energy=-15.993821 #Energy=-15.993791 #Energy=-15.993795 #Energy=-15.9938 #Energy=-15.993804 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993809 #Energy=-15.993813 #Energy=-15.99382 #Energy=-15.993827 #Energy=-15.993833 #Energy=-15.993835 #Energy=-15.993839 #Energy=-15.993841 #Energy=-15.993842 #Energy=-15.993842 #Energy=-15.993842 dmrgpp-6.02/TestSuite/oracles/e6.txt000066400000000000000000000167001414604301300173660ustar00rootroot00000000000000#Energy=-5.5753656 #Energy=-7.9189476 attention: found 3 matrix blocks #Energy=-11.138067 attention: found 3 matrix blocks #Energy=-14.30829 attention: found 3 matrix blocks #Energy=-17.451608 attention: found 3 matrix blocks #Energy=-20.578564 attention: found 3 matrix blocks #Energy=-23.694833 attention: found 3 matrix blocks #Energy=-25.980987 attention: found 5 matrix blocks #Energy=-29.160618 attention: found 5 matrix blocks #Energy=-32.323283 attention: found 5 matrix blocks #Energy=-35.472855 attention: found 5 matrix blocks #Energy=-38.612031 attention: found 5 matrix blocks #Energy=-41.742835 attention: found 5 matrix blocks #Energy=-44.014342 attention: found 7 matrix blocks #Energy=-47.187658 attention: found 7 matrix blocks #Energy=-50.347846 attention: found 7 matrix blocks #Energy=-53.497039 attention: found 7 matrix blocks #Energy=-56.637092 attention: found 7 matrix blocks #Energy=-59.768967 attention: found 7 matrix blocks #Energy=-62.035388 attention: found 9 matrix blocks #Energy=-65.208681 attention: found 9 matrix blocks #Energy=-68.367138 attention: found 9 matrix blocks #Energy=-71.514218 attention: found 9 matrix blocks #Energy=-74.650563 attention: found 9 matrix blocks #Energy=-77.778612 attention: found 9 matrix blocks #Energy=-80.044857 attention: found 11 matrix blocks #Energy=-83.220925 attention: found 11 matrix blocks #Energy=-86.379876 attention: found 11 matrix blocks #Energy=-89.525448 attention: found 11 matrix blocks #Energy=-89.524914 attention: found 11 matrix blocks #Energy=-89.524957 attention: found 11 matrix blocks #Energy=-89.52567 attention: found 11 matrix blocks #Energy=-89.529367 attention: found 11 matrix blocks #Energy=-89.529907 attention: found 11 matrix blocks #Energy=-89.529319 attention: found 11 matrix blocks #Energy=-89.528657 attention: found 11 matrix blocks #Energy=-89.527926 attention: found 11 matrix blocks #Energy=-89.527856 attention: found 11 matrix blocks #Energy=-89.52987 attention: found 11 matrix blocks #Energy=-89.529204 attention: found 11 matrix blocks #Energy=-89.528337 attention: found 11 matrix blocks #Energy=-89.526645 attention: found 11 matrix blocks #Energy=-89.525301 attention: found 11 matrix blocks #Energy=-89.524264 attention: found 11 matrix blocks #Energy=-89.524224 attention: found 11 matrix blocks #Energy=-89.523033 attention: found 11 matrix blocks #Energy=-89.521689 attention: found 11 matrix blocks #Energy=-89.520313 attention: found 11 matrix blocks #Energy=-89.518663 attention: found 11 matrix blocks #Energy=-89.51727 attention: found 11 matrix blocks #Energy=-89.516355 attention: found 11 matrix blocks #Energy=-89.514918 attention: found 11 matrix blocks #Energy=-89.513921 attention: found 11 matrix blocks #Energy=-89.512906 attention: found 11 matrix blocks #Energy=-89.51235 attention: found 11 matrix blocks #Energy=-89.511688 attention: found 11 matrix blocks #Energy=-89.511257 attention: found 11 matrix blocks #Energy=-89.511257 attention: found 11 matrix blocks #Energy=-89.511257 attention: found 11 matrix blocks #Energy=-89.511257 attention: found 11 matrix blocks #Energy=-89.511688 attention: found 11 matrix blocks #Energy=-89.512329 attention: found 11 matrix blocks #Energy=-89.512794 attention: found 11 matrix blocks #Energy=-89.513646 attention: found 11 matrix blocks #Energy=-89.514408 attention: found 11 matrix blocks #Energy=-89.515436 attention: found 11 matrix blocks #Energy=-89.516031 attention: found 11 matrix blocks #Energy=-89.516933 attention: found 11 matrix blocks #Energy=-89.518102 attention: found 11 matrix blocks #Energy=-89.518585 attention: found 11 matrix blocks #Energy=-89.519191 attention: found 11 matrix blocks #Energy=-89.519873 attention: found 11 matrix blocks #Energy=-89.520582 attention: found 11 matrix blocks #Energy=-89.521219 attention: found 11 matrix blocks #Energy=-89.521968 attention: found 11 matrix blocks #Energy=-89.522625 attention: found 11 matrix blocks #Energy=-89.523037 attention: found 11 matrix blocks #Energy=-89.523616 attention: found 11 matrix blocks #Energy=-89.524051 attention: found 11 matrix blocks #Energy=-89.524515 attention: found 11 matrix blocks #Energy=-89.524881 attention: found 11 matrix blocks #Energy=-89.525395 attention: found 11 matrix blocks #Energy=-89.525773 attention: found 11 matrix blocks #Energy=-89.526057 attention: found 11 matrix blocks #Energy=-89.52635 attention: found 11 matrix blocks #Energy=-89.52645 attention: found 11 matrix blocks #Energy=-89.526612 attention: found 11 matrix blocks #Energy=-89.526632 attention: found 11 matrix blocks #Energy=-89.526617 attention: found 11 matrix blocks #Energy=-89.527181 attention: found 11 matrix blocks #Energy=-89.530377 attention: found 11 matrix blocks #Energy=-89.531181 attention: found 11 matrix blocks #Energy=-89.530734 attention: found 11 matrix blocks #Energy=-89.530116 attention: found 11 matrix blocks #Energy=-89.529361 attention: found 11 matrix blocks #Energy=-89.529144 attention: found 11 matrix blocks #Energy=-89.530724 attention: found 11 matrix blocks #Energy=-89.530191 attention: found 11 matrix blocks #Energy=-89.529403 attention: found 11 matrix blocks #Energy=-89.527786 attention: found 11 matrix blocks #Energy=-89.526416 attention: found 11 matrix blocks #Energy=-89.525329 attention: found 11 matrix blocks #Energy=-89.525137 attention: found 11 matrix blocks #Energy=-89.524045 attention: found 11 matrix blocks #Energy=-89.522725 attention: found 11 matrix blocks #Energy=-89.521378 attention: found 11 matrix blocks #Energy=-89.51966 attention: found 11 matrix blocks #Energy=-89.518287 attention: found 11 matrix blocks #Energy=-89.517357 attention: found 11 matrix blocks #Energy=-89.515914 attention: found 11 matrix blocks #Energy=-89.514915 attention: found 11 matrix blocks #Energy=-89.513909 attention: found 11 matrix blocks #Energy=-89.513359 attention: found 11 matrix blocks #Energy=-89.512706 attention: found 11 matrix blocks #Energy=-89.512285 attention: found 11 matrix blocks #Energy=-89.512285 attention: found 11 matrix blocks #Energy=-89.512285 attention: found 11 matrix blocks #Energy=-89.512285 attention: found 11 matrix blocks #Energy=-89.512706 attention: found 11 matrix blocks #Energy=-89.51334 attention: found 11 matrix blocks #Energy=-89.51381 attention: found 11 matrix blocks #Energy=-89.514632 attention: found 11 matrix blocks #Energy=-89.51532 attention: found 11 matrix blocks #Energy=-89.516361 attention: found 11 matrix blocks #Energy=-89.516967 attention: found 11 matrix blocks #Energy=-89.517848 attention: found 11 matrix blocks #Energy=-89.519082 attention: found 11 matrix blocks #Energy=-89.519569 attention: found 11 matrix blocks #Energy=-89.520185 attention: found 11 matrix blocks #Energy=-89.520762 attention: found 11 matrix blocks #Energy=-89.521483 attention: found 11 matrix blocks #Energy=-89.522163 attention: found 11 matrix blocks #Energy=-89.522942 attention: found 11 matrix blocks #Energy=-89.523678 attention: found 11 matrix blocks #Energy=-89.524122 attention: found 11 matrix blocks #Energy=-89.524732 attention: found 11 matrix blocks #Energy=-89.525202 attention: found 11 matrix blocks #Energy=-89.525716 attention: found 11 matrix blocks #Energy=-89.526101 attention: found 11 matrix blocks #Energy=-89.526442 attention: found 11 matrix blocks #Energy=-89.526811 attention: found 11 matrix blocks #Energy=-89.527129 attention: found 11 matrix blocks #Energy=-89.527412 attention: found 11 matrix blocks #Energy=-89.527494 attention: found 11 matrix blocks #Energy=-89.527634 attention: found 11 matrix blocks dmrgpp-6.02/TestSuite/oracles/e600.txt000066400000000000000000000154461414604301300175340ustar00rootroot00000000000000#Energy=-0.91149747 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 #Energy=-1.442439 dmrgpp-6.02/TestSuite/oracles/e7.txt000066400000000000000000000022431414604301300173640ustar00rootroot00000000000000#Energy=-3.5753656 #Energy=-5.6288932 #Energy=-7.6948332 #Energy=-9.7662668 #Energy=-11.840614 #Energy=-13.916665 #Energy=-15.993821 #Energy=-15.993791 #Energy=-15.993795 #Energy=-15.9938 #Energy=-15.993804 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993806 #Energy=-15.993809 #Energy=-15.993813 #Energy=-15.99382 #Energy=-15.993827 #Energy=-15.993833 #Energy=-15.99383 #Energy=-15.993777 #Energy=-15.993741 #Energy=-15.99368 #Energy=-15.993679 #Energy=-15.993679 #Energy=-15.993679 #Energy=-15.993679 #Energy=-15.99368 #Energy=-15.993749 #Energy=-15.993788 #Energy=-15.993852 #Energy=-15.993859 #Energy=-15.993863 #Energy=-15.993786 #Energy=-15.993637 #Energy=-15.993586 #Energy=-15.993509 #Energy=-15.993507 #Energy=-15.993507 #Energy=-15.993507 #Energy=-15.993507 #Energy=-15.993509 #Energy=-15.993589 #Energy=-15.993637 #Energy=-15.993781 #Energy=-15.99385 #Energy=-15.99386 #Energy=-15.993853 #Energy=-15.993795 #Energy=-15.99376 #Energy=-15.993696 #Energy=-15.993694 #Energy=-15.993694 #Energy=-15.993694 #Energy=-15.993694 #Energy=-15.993696 #Energy=-15.99376 #Energy=-15.993794 #Energy=-15.993852 #Energy=-15.993857 dmrgpp-6.02/TestSuite/oracles/e8.txt000066400000000000000000000020221414604301300173600ustar00rootroot00000000000000#Energy=-4.472136 #Energy=-6.9879184 #Energy=-9.517541 #Energy=-12.053348 #Energy=-14.59246 #Energy=-17.133544 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675898 #Energy=-19.675898 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675898 #Energy=-19.675898 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675898 #Energy=-19.675898 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675898 #Energy=-19.675898 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675898 #Energy=-19.675898 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675898 dmrgpp-6.02/TestSuite/oracles/e80.txt000066400000000000000000000002641414604301300174460ustar00rootroot00000000000000#Energy=-4.645751 #Energy=-7.370275 #Energy=-7.370275 #Energy=-7.370275 #Energy=-7.370275 #Energy=-7.370275 #Energy=-7.370275 #Energy=-7.370275 #Energy=-7.370275 #Energy=-7.370275 dmrgpp-6.02/TestSuite/oracles/e9.txt000066400000000000000000000025241414604301300173700ustar00rootroot00000000000000#Energy=-4.472136 #Energy=-6.9879184 #Energy=-9.517541 #Energy=-12.053348 #Energy=-14.59246 #Energy=-17.133544 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675903 #Energy=-19.675903 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675902 #Energy=-19.675903 #Energy=-19.675902 #Energy=-19.675898 #Energy=-19.675896 #Energy=-19.675891 #Energy=-19.675889 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675887 #Energy=-19.675889 #Energy=-19.675891 #Energy=-19.675894 #Energy=-19.675896 #Energy=-19.675898 #Energy=-19.675898 #Energy=-19.675897 #Energy=-19.675897 #Energy=-19.675897 #Energy=-19.675897 #Energy=-19.675897 #Energy=-19.675897 #Energy=-19.675897 #Energy=-19.675897 #Energy=-19.675898 #Energy=-19.675898 #Energy=-19.675895 #Energy=-19.675894 #Energy=-19.67589 #Energy=-19.675886 #Energy=-19.675884 #Energy=-19.675883 #Energy=-19.675883 #Energy=-19.675883 dmrgpp-6.02/TestSuite/oracles/mettsAverage1500.txt000066400000000000000000000033601414604301300220070ustar00rootroot00000000000000#Average=4.131607 0 3.000000 0.622197 0.328558 0.052892 0.071196 0.327105 0.521715 0.393728 0.682609 1 2.795325 0.417522 0.328558 0.052892 0.071196 0.327105 0.521715 0.393728 0.682609 2 2.857214 0.417505 0.494479 0.052892 0.071196 0.327105 0.521715 0.393728 0.578594 3 4.032537 0.38897 0.494479 0.411973 0.561432 0.618097 0.491776 0.487215 0.578595 4 4.022914 0.388956 0.494489 0.411973 0.561434 0.618087 0.491785 0.487215 0.568975 5 4.000496 0.342542 0.518594 0.411965 0.561465 0.618056 0.491786 0.487206 0.568882 6 4.109545 0.342539 0.518594 0.487582 0.614416 0.641237 0.514626 0.487206 0.503345 7 4.296461 0.52872 0.51858 0.487547 0.614487 0.641187 0.514625 0.487924 0.503391 8 4.258233 0.528658 0.51858 0.487546 0.614517 0.641066 0.514732 0.487924 0.46521 9 4.205588 0.71268 0.498889 0.469267 0.507856 0.475784 0.587842 0.487966 0.465304 10 4.381542 0.712556 0.498889 0.469254 0.507855 0.475755 0.587909 0.44227 0.687054 11 4.394638 0.725804 0.498831 0.46928 0.507854 0.475739 0.587877 0.44227 0.686983 12 4.369945 0.725793 0.521017 0.455996 0.602556 0.543042 0.45363 0.44214 0.625771 13 4.288143 0.643965 0.521017 0.456052 0.602448 0.54308 0.453624 0.44214 0.625817 14 4.418937 0.643988 0.52101 0.456071 0.602396 0.542996 0.453804 0.453403 0.745269 15 4.652771 0.753993 0.52101 0.586991 0.520231 0.633614 0.438217 0.453403 0.745312 16 4.544358 0.753971 0.447107 0.586992 0.520284 0.633206 0.438415 0.453146 0.711237 17 4.450736 0.546023 0.447107 0.586974 0.520266 0.63317 0.438422 0.567558 0.711216 18 4.485873 0.545981 0.447208 0.673542 0.409271 0.56553 0.544609 0.567558 0.732174 19 4.547036 0.628668 0.425667 0.673524 0.409278 0.565526 0.544609 0.567658 0.732106 20 4.651464 0.628701 0.425667 0.673521 0.409312 0.565481 0.544581 0.567658 0.836543 dmrgpp-6.02/TestSuite/oracles/niPerSiteVsTime500.txt000066400000000000000000000160601414604301300223320ustar00rootroot000000000000000 0.626772 0.612581 0.424868 0.424868 0.612581 0.1 0.626772 0.612581 0.424868 0.424868 0.612581 0.2 0.626763 0.612571 0.424877 0.424877 0.612567 0.3 0.626756 0.612496 0.424932 0.424931 0.612497 0.4 0.626675 0.612277 0.4251 0.425102 0.612274 0.5 0.626472 0.611792 0.425488 0.425482 0.611795 0.6 0.626009 0.610914 0.4262 0.426196 0.610914 0.7 0.625173 0.609491 0.427374 0.427367 0.609495 0.8 0.62379 0.607384 0.429138 0.429133 0.607387 0.9 0.62171 0.604455 0.431621 0.431616 0.604458 1 0.618757 0.600587 0.434929 0.434929 0.60059 1.1 0.614787 0.59569 0.439154 0.439152 0.595691 1.2 0.609661 0.589697 0.444348 0.444345 0.5897 1.3 0.603282 0.582587 0.45053 0.45053 0.582586 1.4 0.595583 0.574359 0.457686 0.457688 0.574358 1.5 0.586549 0.565061 0.465755 0.465761 0.565055 1.6 0.576207 0.554764 0.474643 0.47465 0.55476 1.7 0.564643 0.54358 0.484211 0.484221 0.543571 1.8 0.551989 0.531637 0.494292 0.494298 0.531631 1.9 0.53843 0.519104 0.504673 0.504688 0.519091 2 0.524195 0.506145 0.515144 0.515154 0.506138 2.1 0.509537 0.492964 0.525453 0.525463 0.492953 2.2 0.494751 0.479745 0.535361 0.535364 0.479743 2.3 0.480122 0.4667 0.544618 0.544623 0.466697 2.4 0.465943 0.454016 0.553003 0.553002 0.454024 2.5 0.452472 0.441888 0.560306 0.560311 0.441893 2.6 0.439948 0.430481 0.566359 0.566376 0.430495 2.7 0.428533 0.419961 0.571049 0.571066 0.419968 2.8 0.418358 0.41045 0.574292 0.57431 0.410463 2.9 0.409447 0.40207 0.57607 0.576084 0.402077 3 0.401784 0.394902 0.576409 0.576421 0.394912 3.1 0.395240395240395 0.389021389021389 0.575391575391575 0.575404575404575 0.389018389018389 3.2 0.38968438968439 0.384442384442384 0.573149573149573 0.573161573161573 0.384445384445384 3.3 0.384874384874385 0.381198381198381 0.56984956984957 0.56985156985157 0.381189381189381 3.4 0.380611380611381 0.379251379251379 0.565683565683566 0.565679565679566 0.379248379248379 3.5 0.376628376628377 0.378572378572379 0.560870560870561 0.560861560861561 0.378559378559379 3.6 0.372757372757373 0.379062379062379 0.555636555636556 0.555623555623556 0.379057379057379 3.7 0.368814368814369 0.380623380623381 0.55020955020955 0.55019755019755 0.380612380612381 3.8 0.364751364751365 0.383094383094383 0.544813544813545 0.544801544801545 0.383091383091383 3.9 0.360546721093442 0.386301772603545 0.539659079318159 0.539645079290159 0.386297772595545 4 0.356327712655425 0.39002878005756 0.53492906985814 0.53492106984214 0.39002678005356 4.1 0.352258704517409 0.394047788095576 0.530793061586123 0.530788061576123 0.394045788091576 4.2 0.348621697243394 0.398109796219592 0.527389054778109 0.52738405476811 0.398115796231592 4.3 0.345704691409383 0.401988803977608 0.524819049638099 0.524818049636099 0.401990803981608 4.4 0.343868687737375 0.405464810929622 0.523149046298093 0.523151046302093 0.405473810947622 4.5 0.343409686819374 0.408386816773634 0.52240204480409 0.52240604481209 0.408392816785634 4.6 0.344631033893102 0.410653231959696 0.522554567663703 0.522559567678703 0.410664231992696 4.7 0.347712043136129 0.41226523679571 0.523529570588712 0.523536570609712 0.41227123681371 4.8 0.352794058382175 0.41329823989472 0.525205575616727 0.525210575631727 0.41330823992472 4.9 0.359857079571239 0.413947241841725 0.527406582219747 0.527408582225747 0.413953241859726 5 0.368830106490319 0.41448024344073 0.529912589737769 0.529912589737769 0.41449124347373 5.1 0.379491138473415 0.415259245777737 0.532473597420792 0.532468597405792 0.415265245795737 5.2 0.391584174752524 0.41667825003475 0.534815604446813 0.534806604419813 0.41668725006175 5.3 0.404760214280643 0.419167257501772 0.53666060998183 0.53664460993383 0.419172257516773 5.4 0.418683256049768 0.423119269357808 0.53774161322484 0.537720613161839 0.423127269381808 5.5 0.432985298955897 0.42888628665886 0.53782561347684 0.53780261340784 0.42889028667086 5.6 0.447377342132026 0.43671031013093 0.536733610200831 0.53670961012883 0.43671431014293 5.7 0.461591384774154 0.44672234016702 0.534348603045809 0.534328602985809 0.446725340176021 5.8 0.475452426357279 0.45890637671913 0.530634591903776 0.530623591870776 0.45890437671313 5.9 0.4888564665694 0.473086419259258 0.525644576933731 0.525644576933731 0.473086419259258 6 0.501774505323516 0.488950466851401 0.519515558546676 0.519520558561676 0.4889444668334 6.1 0.514242542727628 0.506039518118554 0.512461537384612 0.512473537420612 0.506037518112554 6.2 0.526328105312421 0.523816095264381 0.504758019032076 0.504778019112076 0.523805095220381 6.3 0.53813315253261 0.541650166600666 0.496728986915948 0.496762987051948 0.541646166584666 6.4 0.549718198872795 0.558928235712943 0.48873195492782 0.48876695506782 0.558919235676943 6.5 0.561148244592978 0.575041300165201 0.481101924407698 0.481147924591698 0.575036300145201 6.6 0.572391289565158 0.589475357901432 0.474162896651587 0.474216896867587 0.589461357845431 6.7 0.583397333589334 0.601805407221629 0.468179872719491 0.468237872951492 0.601799407197629 6.8 0.593994375977504 0.611780447121789 0.463347853391414 0.463399853599414 0.611764447057788 6.9 0.604010416041664 0.619265477061908 0.459772839091356 0.459813839255357 0.619260477041908 7 0.613173452693811 0.624318497273989 0.45747382989532 0.45749782999132 0.624307497229989 7.1 0.62125748502994 0.627099508398034 0.456376825507302 0.456380825523302 0.627098508394034 7.2 0.627991511966048 0.627913511654047 0.456331825327301 0.456314825259301 0.627912511650047 7.3 0.633213532854131 0.627117508470034 0.457125828503314 0.457085828343313 0.627126508506034 7.4 0.636772547090188 0.625124500498002 0.458501834007336 0.458443833775335 0.625130500522002 7.5 0.638681554726219 0.622323489293957 0.460185840743363 0.460110840443362 0.622337489349957 7.6 0.638990555962224 0.619086476345905 0.46190484761939 0.461818847275389 0.619094476377905 7.7 0.637924551698207 0.615695462781851 0.463407853631415 0.463319853279413 0.615709462837851 7.8 0.635723542894172 0.612379449517798 0.464483857935432 0.46439885759543 0.612384449537798 7.9 0.632764531058124 0.609254437017748 0.46496885987544 0.464892859571438 0.609262437049748 8 0.62938051752207 0.606385425541702 0.464751859007436 0.464691858767435 0.606383425533702 8.1 0.625962503850015 0.60375441501766 0.46377485509942 0.46373385493542 0.60375441501766 8.2 0.622778491113964 0.601325405301621 0.462027848111392 0.462010848043392 0.601314405257621 8.3 0.620078480313921 0.599016396065584 0.459550838203353 0.459549838199353 0.599014396057584 8.4 0.617933471733887 0.596781387125548 0.456407825631302 0.456426825707303 0.596773387093548 8.5 0.616352465409862 0.594551378205513 0.452707810831243 0.452745810983244 0.594548378193513 8.6 0.615160460641843 0.592297369189477 0.448589794359177 0.448643794575178 0.592290369161477 8.7 0.614126456505826 0.58998535994144 0.444216776867107 0.444281777127109 0.58998535994144 8.8 0.612881451525806 0.587607350429402 0.439782759131036 0.439851759407038 0.587605350421402 8.9 0.611048444193777 0.585127340509362 0.435501742006968 0.435572742290969 0.585130340521362 9 0.608200432801731 0.58250533002132 0.431615726462906 0.431681726726907 0.58250633002532 9.1 0.603971415885663 0.579654318617274 0.428379713518854 0.428437713750855 0.579656318625275 9.2 0.598022392089568 0.576458305833223 0.426059704238817 dmrgpp-6.02/TestSuite/oracles/niPerSiteVsTime501.txt000066400000000000000000000105641414604301300223360ustar00rootroot000000000000000 0.778052 0.856736 0.16089 0.721303 0.163098 0.1 0.778052 0.856734 0.16089 0.721303 0.163098 0.2 0.778045 0.85673 0.160899 0.721296 0.163105 0.3 0.778028 0.856695 0.160948 0.721255 0.163153 0.4 0.777952 0.856605 0.161107 0.721125 0.163297 0.5 0.777778 0.856406 0.161452 0.720841 0.163615 0.6 0.777409 0.856064 0.162075 0.720326 0.164188 0.7 0.776775 0.855534 0.163055 0.719514 0.16508 0.8 0.775787 0.854777 0.164463 0.718348 0.166341 0.9 0.774369 0.853767 0.166334 0.716799 0.167992 1 0.772444 0.852485 0.168686 0.714853 0.170032 1.1 0.769973 0.850915 0.171502 0.712534 0.172435 1.2 0.766909 0.849044 0.17475 0.709867 0.175171 1.3 0.763259 0.84685 0.178376 0.706924 0.178201 1.4 0.759021 0.844309 0.182326 0.703755 0.181499 1.5 0.754232 0.841385 0.186545 0.700426 0.185046 1.6 0.748918 0.838038 0.19099 0.69699 0.188841 1.7 0.743128 0.834221 0.195626 0.693494 0.192893 1.8 0.736886 0.829889 0.200441 0.689963 0.19722 1.9 0.730226 0.824991 0.205434 0.686411 0.201849 2 0.723149 0.81949 0.210633 0.682828 0.206802 2.1 0.715658 0.813348 0.216072 0.679189 0.212107 2.2 0.707727 0.806537 0.221812 0.675452 0.217775 2.3 0.699329 0.799041 0.227905 0.671571 0.223831 2.4 0.69041 0.790857 0.234424 0.667479 0.230281 2.5 0.680933 0.781985 0.24143 0.663126 0.237139 2.6 0.670839 0.772442 0.248991 0.658443 0.244412 2.7 0.660101 0.762244 0.257158 0.653376 0.252118 2.8 0.648682 0.751419 0.265981 0.647871 0.260271 2.9 0.636588 0.739989 0.275499 0.641887 0.268892 3 0.623825 0.727985 0.285738 0.635386 0.278006 3.1 0.610447 0.715424 0.29672 0.628347 0.287639 3.2 0.59651 0.702333 0.308458 0.620751 0.29782 3.3 0.582123 0.688714 0.320966 0.612588 0.308587 3.4 0.567391 0.674583 0.334251 0.603855 0.319977 3.5 0.552464 0.659927 0.348328 0.594557 0.332028 3.6 0.537487 0.644739 0.363216 0.5847 0.344779 3.7 0.522634 0.628993 0.378928 0.574309 0.358282 3.8 0.508051 0.612677 0.395481 0.563411 0.372575 3.9 0.493902 0.595769 0.412879 0.552061 0.387706 4 0.480325 0.57826 0.431137 0.540308 0.403711 4.1 0.467442 0.560156 0.450242 0.528239 0.420617 4.2 0.455335 0.541481 0.470153 0.515969 0.438444 4.3 0.444065 0.522294 0.490818 0.503601 0.457192 4.4 0.433646 0.502677 0.512133 0.49131 0.47684 4.5 0.424064 0.482767 0.533974 0.479232 0.497349 4.6 0.41527 0.462716 0.55617 0.467544 0.518655 4.7 0.407188 0.442716 0.578534 0.456409 0.540664 4.8 0.399724 0.422975 0.600852 0.445965 0.56327 4.9 0.39277 0.403728 0.622908 0.436314 0.586343 5 0.386227 0.385187 0.644493 0.427514 0.609744 5.1 0.379991 0.36759 0.665421 0.419538 0.63333 5.2 0.373976 0.351138 0.68553 0.412309 0.656958 5.3 0.368104 0.336041 0.704682 0.405678 0.680482 5.4 0.362313 0.322496 0.722753 0.399459 0.703761 5.5 0.356541 0.310729 0.739626 0.393424 0.726637 5.6 0.35073 0.300982 0.75515 0.387371 0.748943 5.7 0.344808 0.293553 0.769146 0.381127 0.770451 5.8 0.338702 0.288751 0.781387 0.374606 0.790893 5.9 0.332327 0.286905 0.791612 0.367822 0.809911 6 0.325625 0.288266 0.79957 0.360921 0.827072 6.1 0.31855 0.292969 0.805067 0.354148 0.841872 6.2 0.311139 0.300885 0.808068 0.347845 0.853771 6.3 0.303477 0.31158 0.808745 0.342397 0.86224 6.4 0.295764 0.324212 0.807564 0.33818 0.866846 6.5 0.288246 0.337567 0.805277 0.335488 0.867325 6.6 0.281248 0.350093 0.80289 0.334493 0.863675 6.7 0.275062 0.36009 0.801546 0.335193 0.856199 6.8 0.269945 0.365893 0.802349 0.337411 0.845555 6.9 0.266 0.366148 0.806173 0.340801 0.832705 7 0.263194 0.360018 0.813458 0.344894 0.818871 7.1 0.26128 0.347369 0.824079 0.349152 0.805394 7.2 0.259881 0.328795 0.837295 0.353037 0.793621 7.3 0.258501 0.305566 0.851819 0.356071 0.78472 7.4 0.256671 0.279412 0.865982 0.35789 0.779594 7.5 0.25398 0.252278 0.877984 0.35827 0.778766 7.6 0.250231 0.226017 0.886165 0.357137 0.782373 7.7 0.245404 0.202185 0.88925 0.354558 0.790164 7.8 0.239731 0.181867 0.886523 0.35072 0.801589 7.9 0.233571 0.165669 0.877899 0.345899 0.81586 8 0.227393 0.153764 0.863902 0.340437 0.832057 8.1 0.221623 0.146027 0.845558 0.334711 0.849175 8.2 0.216613 0.142152 0.824256 0.329115 0.86619 8.3 0.212555 0.141757 0.801595 0.324037 0.882074 8.4 0.209519 0.144406 0.779248 0.319846 0.895823 8.5 0.207444 0.149609 0.758855 0.316865 0.906477 8.6 0.206251 0.15676 0.741934 0.31536 0.913181 8.7 0.205847 0.165129 0.729796 0.315511 0.915242 8.8 0.206234 0.17385 0.723455 0.317414 0.912227 8.9 0.207461 0.182017 0.723537 0.321058 0.90404 9 0.209669 0.188788 0.730179 0.326342 0.890996 9.1 0.21299 0.193542 0.742964 0.333081 0.873831 9.2 0.217562 0.195991 0.760906 dmrgpp-6.02/TestSuite/oracles/niPerSiteVsTime503.txt000066400000000000000000000164461414604301300223450ustar00rootroot000000000000000 0.949618 0.926464 0.171338 0.783786 0.159872 0.1 0.949619 0.926464 0.171338 0.783786 0.159871 0.2 0.949588 0.926441 0.171375 0.783758 0.159896 0.3 0.949506 0.926306 0.171593 0.783586 0.160091 0.4 0.949149 0.925899 0.172259 0.783064 0.160666 0.5 0.948351 0.925009 0.173716 0.781914 0.161946 0.6 0.946804 0.923402 0.17635 0.779841 0.164224 0.7 0.944332 0.920843 0.180522 0.776557 0.167803 0.8 0.940672 0.917115 0.186551 0.771831 0.172868 0.9 0.93572 0.912023 0.194678 0.765503 0.179573 1 0.929263 0.905395 0.205075 0.757503 0.187953 1.1 0.921199 0.897069 0.217836 0.747848 0.198039 1.2 0.911244 0.886895 0.233005 0.736634 0.209803 1.3 0.899172 0.874698 0.250598 0.724014 0.223263 1.4 0.884519 0.860304 0.270614 0.710188 0.238428 1.5 0.866861 0.843486 0.29305 0.695383 0.255373 1.6 0.845543 0.824021 0.317923 0.679811 0.274184 1.7 0.819966 0.801634 0.345236 0.6637 0.294979 1.8 0.78938 0.776082 0.374978 0.647251 0.317868 1.9 0.753185 0.747114 0.40709 0.630645 0.342932 2 0.710836 0.714574 0.441426 0.614036 0.370189 2.1 0.662148 0.678382 0.4777 0.597549 0.39953 2.2 0.607364 0.638662 0.515437 0.581273 0.430724 2.3 0.547405 0.595711 0.553943 0.565271 0.463311 2.4 0.484077 0.550147 0.59225 0.549558 0.496679 2.5 0.420085 0.502845 0.629193 0.534121 0.529941 2.6 0.359165359165359 0.454985454985455 0.663397663397663 0.518923518923519 0.562145562145562 2.7 0.305541305541306 0.408022408022408 0.693515693515694 0.503859503859504 0.592229592229592 2.8 0.263643263643264 0.363506363506364 0.718299718299718 0.488878488878489 0.619317619317619 2.9 0.236911236911237 0.323075323075323 0.736911736911737 0.473919473919474 0.642783642783643 3 0.227064227064227 0.288105288105288 0.749107749107749 0.459021459021459 0.662568662568663 3.1 0.232974232974233 0.25976825976826 0.755378755378755 0.444300444300444 0.679126679126679 3.2 0.25035525035525 0.238667238667239 0.756923756923757 0.43012443012443 0.693585693585694 3.3 0.272130272130272 0.224974224974225 0.755592755592756 0.417033417033417 0.707274707274707 3.4 0.289772579545159 0.218351436702873 0.753412506825014 0.405823811647623 0.721553443106886 3.5 0.295514591029182 0.218195436390873 0.752271504543009 0.39739079478159 0.737041474082948 3.6 0.284773854321563 0.223774671324014 0.75336926010778 0.392702178106534 0.75337326011978 3.7 0.257842031368125 0.234488937955752 0.756952027808111 0.39252457009828 0.7687260749043 3.8 0.22041110205551 0.249976249881249 0.762168810844054 0.397345986729934 0.780207901039505 3.9 0.18193909163455 0.270160620963726 0.767362604175625 0.407104442626656 0.784242705456233 4 0.152864222913783 0.295106360850887 0.770506164049312 0.421170369362955 0.77765022120177 4.1 0.141015269137422 0.324775922983307 0.769823928415356 0.438320944888504 0.758473826264436 4.2 0.148973489734897 0.358688586885869 0.764310643106431 0.456919569195692 0.726783267832678 4.3 0.17305590361494 0.39570535275888 0.754043294476239 0.475157226729494 0.684811532926862 4.4 0.20472045664548 0.433847206166474 0.740155881870582 0.491350896210755 0.63659863918367 4.5 0.233213031769413 0.470391115084496 0.724508418609442 0.504225554932214 0.58715863306223 4.6 0.24938949145288 0.502135029890418 0.709169928378997 0.513083183164564 0.541412579776117 4.7 0.248040472566616 0.52581436140106 0.69586574212039 0.517877250281504 0.503329046606653 4.8 0.229585214192999 0.538639540953573 0.685547597666367 0.519111267557746 0.475309654335161 4.9 0.199205788881044 0.53872454214359 0.678210494946929 0.517662247271462 0.458121413699792 5 0.165307479612194 0.525434881523223 0.672911093666405 0.514545718185773 0.451128766931504 5.1 0.13706605599084 0.499543493152397 0.668018020270304 0.510686660299905 0.452788791831877 5.2 0.122280834212513 0.463166947504213 0.661577923668855 0.506720600809012 0.461164917473762 5.3 0.126032890493357 0.419564293464402 0.651651774776622 0.502926543898158 0.474361115416731 5.4 0.15004625069376 0.37270959064386 0.636655549833248 0.499227488412326 0.490766361495422 5.5 0.193008895133427 0.326949904248564 0.615559233388501 0.495267429011435 0.509091636374546 5.6 0.251307769616544 0.286558298374476 0.587991819877298 0.490464356965354 0.528350925263879 5.7 0.319916798751981 0.25528782931744 0.554275314129712 0.484286264293964 0.547675215128227 5.8 0.393431294900718 0.236185778972464 0.515324245187923 0.47628762060193 0.566205059280949 5.9 0.466594465511448 0.231111697787165 0.472554560872974 0.466306460903374 0.583108329733276 6 0.535149097534658 0.240922095675627 0.427801272621635 0.454438725458333 0.597209152555593 6.1 0.595626721280983 0.265064771165881 0.383127896302133 0.441214941868954 0.607461934314818 6.2 0.645912272333174 0.302000738014022 0.34069147313799 0.427536123186341 0.612546638386129 6.3 0.684786380513991 0.349053330119933 0.30256235380943 0.414598706572838 0.611544842441691 6.4 0.712119090858181 0.403030672736146 0.270495491891805 0.403847692344616 0.60361048665168 6.5 0.728453668249043 0.460284427679547 0.24573363480814 0.396729711702216 0.588482889038004 6.6 0.735190790914518 0.517374038595196 0.228764091686842 0.394638233785247 0.566220552837138 6.7 0.733962422647215 0.571249564984339 0.219370897352305 0.398571348568548 0.537714357716878 6.8 0.726772524446027 0.619702027485154 0.21642308976977 0.409091181829637 0.504279179725548 6.9 0.715594064109141 0.661332405287859 0.21815068938378 0.425965872327744 0.467836924009276 7 0.702188322546063 0.695893970062323 0.222363452353332 0.448173097693471 0.430469106269951 7.1 0.687808395354093 0.72370076425044 0.226745965233705 0.473920278738397 0.394557040764691 7.2 0.673054825221542 0.745465400835864 0.229395663466087 0.50083156403043 0.36233089947926 7.3 0.657743539174987 0.761991817271737 0.228979379164746 0.52610282315126 0.335996903724431 7.4 0.641225046179757 0.77379870126623 0.224996174605984 0.547002341241148 0.31739369155023 7.5 0.622722481252788 0.781033161913106 0.217604677351928 0.561229225048556 0.308112357258156 7.6 0.602098283268241 0.783514774494557 0.207514014391943 0.567339590844764 0.30921974466553 7.7 0.580391219465359 0.780853689760844 0.195594730399021 0.564930869492163 0.321198822220978 7.8 0.560269245771781 0.77267335447026 0.182662052548933 0.554761309422602 0.343667423461989 7.9 0.545816159254099 0.758659386624072 0.169375011877245 0.538600795550359 0.375359943029232 8 0.541741140416066 0.738671905084352 0.156376369908571 0.518897411764235 0.41400569917973 8.1 0.552347830609718 0.712611050097322 0.144479652401443 0.498350627241757 0.456652203397968 8.2 0.579981515489779 0.68047803664094 0.134891913626925 0.479466989945547 0.499971993166333 8.3 0.62435195586048 0.642421672056407 0.129259736791303 0.464215160156801 0.540784144661757 8.4 0.681922210530106 0.598908298690439 0.129486738339782 0.453822254942364 0.576503114859701 8.5 0.746585256309586 0.551111373409662 0.137371975244796 0.448749586129564 0.605350156895657 8.6 0.810637433779869 0.500922280373233 0.15412385365151 0.448848449928778 0.626511459483683 8.7 0.866177712157042 0.451214583808483 0.179989876801069 0.453549321585621 0.639885203724377 8.8 0.906503520147568 0.405428169583284 0.214159816100049 0.462135656223929 0.645857549561157 8.9 0.926924519714104 0.36738507399979 0.254684319246948 0.473902757423737 0.645014079716705 9 0.925365400332314 0.340544806868756 0.299030567484647 0.488259472999239 0.637864787622154 9.1 0.902189766418246 0.327601660581203 0.344286500275096 0.504722652928525 0.624870704746661 9.2 0.859816094529653 0.329896443133756 0.387912096706428 dmrgpp-6.02/TestSuite/oracles/niPerSiteVsTime504.txt000066400000000000000000000171351414604301300223420ustar00rootroot000000000000000 0.91209 0.762928 0.14831 0.228606 0.123715 0.1 0.912091 0.762928 0.14831 0.228606 0.123715 0.2 0.91206 0.762902 0.148346 0.228593 0.12374 0.3 0.911985 0.762727 0.148565 0.228508 0.123936 0.4 0.911635 0.762221 0.149231 0.228256 0.124519 0.5 0.910857 0.761106 0.150692 0.227725 0.125842 0.6 0.909327 0.759096 0.153332 0.226816 0.128237 0.7 0.906868 0.755875 0.157525 0.225487 0.132073 0.8 0.903204 0.75115 0.1636 0.223767 0.137625 0.9 0.898217 0.74463 0.171822 0.221788 0.145162 1 0.891663 0.736067 0.182378 0.219786 0.154854 1.1 0.883412 0.725214 0.195395 0.218103 0.166889 1.2 0.873152 0.71185 0.210942 0.217176 0.181399 1.3 0.860609 0.695779 0.229046 0.217514 0.198563 1.4 0.84529 0.676818 0.249705 0.219688 0.218542 1.5 0.826717 0.654835 0.272892 0.22429 0.241511 1.6 0.80419 0.629771 0.298537 0.2319 0.26763 1.7 0.777058 0.601663 0.326511 0.243063 0.296996 1.8 0.744525 0.570711 0.356625 0.258231 0.329577 1.9 0.705948705948706 0.537267537267537 0.388571388571389 0.277712277712278 0.365161365161365 2 0.660726660726661 0.501953501953502 0.421909421909422 0.301604301604302 0.403298403298403 2.1 0.608616608616609 0.465582465582466 0.456075456075456 0.32967632967633 0.443228443228443 2.2 0.54981954981955 0.429177429177429 0.49039949039949 0.361358361358361 0.483882483882484 2.3 0.485151970303941 0.393913787827576 0.524136048272097 0.395583791167582 0.523874047748096 2.4 0.416322248966747 0.360952082856249 0.556588669766009 0.430780292340877 0.561696685090055 2.5 0.345837037511112 0.331370994112982 0.587118761356284 0.464923394770184 0.595798787396362 2.6 0.277202108808435 0.305837223348893 0.615425461701847 0.495520982083928 0.624990499962 2.7 0.214347071735359 0.284657423287116 0.641468207341037 0.519895599477997 0.648661243306217 2.8 0.161408968453811 0.267452604715628 0.665674994049964 0.535426212557275 0.667114002684016 2.9 0.121673851716962 0.253458774211419 0.688653820576744 0.54000878006146 0.681739772178405 3 0.0970301792112545 0.241476690336832 0.711125977881845 0.532496727477092 0.694881864173049 3.1 0.0869484955879647 0.230544844358755 0.733475867806942 0.513108104864839 0.709558676469412 3.2 0.0884619961579654 0.219984979864819 0.755522799705197 0.483718353465181 0.728663557972022 3.3 0.0963840638406384 0.210020100201002 0.776166761667617 0.447806478064781 0.754261542615426 3.4 0.104635150986661 0.2016532181854 0.793442727870007 0.410231512546638 0.786674653421188 3.5 0.107894294731537 0.1965273583283 0.804829657955895 0.376392516710201 0.824146889762677 3.6 0.103507345595493 0.196341552440182 0.807882502472532 0.3514785692214 0.862827216753818 3.7 0.0925370955193373 0.202114829607615 0.801057214801007 0.33938975145652 0.897492564895909 3.8 0.0798367975519633 0.213608204123062 0.784422766341495 0.34199912998695 0.92280184202763 3.9 0.0724395590329445 0.229011664186627 0.760027160434567 0.358783740539849 0.934521952351238 4 0.0771390113631932 0.245206168504865 0.731727439366469 0.38699057883984 0.930683821624968 4.1 0.0977497594956709 0.258527653497763 0.704370678672216 0.422339602112838 0.911988415791484 4.2 0.133344666893338 0.26572531450629 0.682678653573071 0.460041200824017 0.881553631072621 4.3 0.177971737406486 0.264950563961843 0.670030070631483 0.495879413467683 0.844023724498215 4.4 0.22237589226963 0.256232637118017 0.667608687391123 0.527052595157093 0.804448697871353 4.5 0.25642689781865 0.241434552994719 0.674179506128641 0.552548708620298 0.76718364522384 4.6 0.272422538140915 0.223689368544845 0.686485475651416 0.57302075249806 0.735281646759522 4.7 0.266774402585662 0.206443954654912 0.700149803595286 0.590218165235966 0.710314047537141 4.8 0.241147028675717 0.192629815745394 0.710837770944274 0.606196154903873 0.692625315632891 4.9 0.201418236874159 0.183957782902355 0.715193595033471 0.622569186798857 0.681845727988928 5 0.156180216865855 0.180841882730834 0.711416208237622 0.640009280250567 0.677231285244702 5.1 0.114567093311519 0.182491927282037 0.699490886253929 0.657913763671619 0.67810630887034 5.2 0.0844063633781746 0.187569251939054 0.680933066125852 0.674730892464989 0.683704143716024 5.3 0.0711729640159564 0.194592643186652 0.658140086062496 0.688129955768717 0.693313106080076 5.4 0.077396621898657 0.202614078422353 0.633870016100483 0.695805874176225 0.70581117433523 5.5 0.102996192881979 0.21135255192911 0.61058292807077 0.695631564578502 0.719884316413809 5.6 0.145847667125348 0.221451086434766 0.590102883292265 0.686524968799002 0.733303465710903 5.7 0.20246068120248 0.234047723574878 0.573493925299535 0.668192050337661 0.74369154182088 5.8 0.268800139204733 0.250915531128058 0.560884070058382 0.641517811605595 0.748098435346802 5.9 0.340672264201511 0.273600849630587 0.551796864687129 0.608246896888288 0.743804776971971 6 0.4144047473804 0.303519533742282 0.545259719869355 0.570918694910407 0.72806766657133 6.1 0.486640465618625 0.341267650706028 0.540226609064363 0.532254290171607 0.699213968558742 6.2 0.554635849341522 0.386729629374063 0.535771038154641 0.495063287721372 0.656528230713921 6.3 0.616153959236084 0.438834625227386 0.531105961980213 0.461740701812985 0.601022248045658 6.4 0.669446141753229 0.495651278215189 0.526049828541256 0.434164142371261 0.535141292205902 6.5 0.713227227497512 0.554620504127727 0.520536629514623 0.413379735885474 0.463227477511263 6.6 0.746582794967698 0.612910774646479 0.514905894353661 0.399828989739384 0.390688441306478 6.7 0.769360008400546 0.667693400071005 0.509336106846945 0.393172556216154 0.323627035757324 6.8 0.781973520119929 0.716781891514297 0.503817771061745 0.392730883892756 0.267633001943138 6.9 0.785865511644397 0.758669417545151 0.498002346180656 0.39738059830607 0.226812464559771 7 0.783209006347527 0.792876808775128 0.49097975131936 0.406050702208283 0.202875838694612 7.1 0.776840138772351 0.819794961751596 0.48178887921025 0.417546161608383 0.194557315601088 7.2 0.769625884084872 0.840224661567511 0.469422064518194 0.430761353089897 0.19812502000192 7.3 0.763872678885925 0.855115076852916 0.453612722110377 0.444475781005444 0.208159440422363 7.4 0.760594665413196 0.864726119873186 0.434921841402554 0.457452319755173 0.219504145456 7.5 0.759264593222 0.868636499106895 0.415155988406632 0.468296258958557 0.228760993797268 7.6 0.757894494706333 0.865429044059551 0.396877006502819 0.4757369428548 0.235714700052207 7.7 0.75398327977621 0.853342494551775 0.382998938858868 0.478721669982108 0.243434376772111 7.8 0.745559123836461 0.83086215156337 0.375853995413353 0.47684823560122 0.257215267352697 7.9 0.732511876781517 0.797598639795969 0.37644446667 0.470558583787568 0.282483372505876 8 0.717033291260019 0.754934279616179 0.383887654249371 0.461310887120165 0.322485952780539 8.1 0.703490779469392 0.706219232392577 0.395512655100747 0.451406933550969 0.376455491611608 8.2 0.697022584907189 0.656483571657897 0.407457490145795 0.44354373306582 0.439195980904697 8.3 0.702073075226616 0.611643707511059 0.415694240657559 0.440174671615562 0.502051871388721 8.4 0.720487451640908 0.577381547730973 0.417178429544754 0.442848255472029 0.555133365072634 8.5 0.750901674924935 0.558203291438539 0.410717679229771 0.451705630892393 0.589902441073568 8.6 0.788625725145029 0.556542308461692 0.397376475295059 0.465257051410282 0.601363272654531 8.7 0.826799320660056 0.572563948173324 0.380267335071025 0.480661016169331 0.589098354260978 8.8 0.858027185708999 0.604241890797067 0.363839406275318 0.494179777753328 0.55708298742736 8.9 0.875853308461319 0.647728261576239 0.352950884440155 0.502109953640033 0.51240216646579 9 0.876163879889696 0.69833593556989 0.351753033914427 0.50134379429095 0.463424489963302 9.1 0.857525085619179 0.750916205229971 0.362994310725603 0.490299827161284 0.417926615561886 9.2 0.821194232284961 0.800865597356197 0.387524355553066 dmrgpp-6.02/TestSuite/oracles/operatorC11.txt000066400000000000000000000012351414604301300211510ustar00rootroot00000000000000OperatorC: 6 12 0.501077 -0.272335 -0.315393 0.000844478 0.000283685 0.21963 -0.0245608 -0.00117432 0.000715755 -0.117808 0.117017 0.000119523 0 0.500918 0.000685108 -0.315212 0.219568 0.000276391 -0.000915224 -0.0262844 -0.118983 0.00121018 0.000235538 0.117122 0 0 0.500622 -0.0524528 -0.339531 -1.40682e-05 0.000730983 0.0943731 0.0983241 -0.000261641 -0.00125071 -0.118198 0 0 0 0.500618 -0.000168181 -0.33874 0.0955587 0.000347171 -4.50795e-05 0.0983465 -0.11939 -0.000982822 0 0 0 0 0.500018 -0.175539 -0.215378 -1.85231e-05 -0.00019898 0.0946021 -0.0260008 0.00162454 0 0 0 0 0 0.499941 -3.37186e-05 -0.215468 0.0956742 -0.000550885 0.000839695 -0.0244412 dmrgpp-6.02/TestSuite/oracles/operatorC2.txt000066400000000000000000000022261414604301300210720ustar00rootroot00000000000000OperatorC: 8 16 0.499998 -0.426244 -1.06215e-06 0.17347 9.65919e-07 -0.114803 -7.52361e-07 0.0886481 7.78349e-07 -0.0745129 -4.68467e-06 0.0662306 6.42521e-06 -0.0613719 -3.1456e-06 0.0589959 0 0.5 -0.252774 -2.14288e-07 0.0586682 3.57203e-07 -0.0262043 -4.63152e-07 0.0142252 1.80058e-06 -0.00813394 1.45382e-07 0.00444746 -2.53019e-06 -0.00194441 3.12936e-06 0 0 0.499999 -0.367576 -7.9502e-07 0.147283 3.68602e-07 -0.100565 -7.80631e-07 0.0803121 3.19578e-06 -0.0697747 -5.07809e-06 0.0640471 2.52605e-06 -0.0613721 0 0 0 0.499999 -0.278959 -5.18765e-07 0.0728721 1.48514e-06 -0.0344523 -3.81154e-06 0.0188804 -1.40159e-09 -0.0102028 5.14659e-06 0.00444752 -6.43513e-06 0 0 0 0 0.5 -0.353361 -7.78886e-07 0.139019 7.16843e-07 -0.0958606 2.45212e-06 0.0781365 -3.69016e-08 -0.0697746 -1.73216e-07 0.0662308 0 0 0 0 0 0.499999 -0.287215 -5.34997e-07 0.077532 4.07777e-07 -0.036573 -2.46014e-06 0.0188804 -3.25421e-06 -0.00813407 4.65548e-06 0 0 0 0 0 0 0.5 -0.348685 -2.77909e-07 0.136885 -4.1153e-07 -0.0958607 3.87974e-06 0.0803121 -1.7491e-06 -0.0745131 0 0 0 0 0 0 0 0.5 -0.289344 3.89865e-07 0.077532 -7.64175e-07 -0.0344523 9.10446e-07 0.0142254 -7.77032e-07 dmrgpp-6.02/TestSuite/oracles/operatorN11.txt000066400000000000000000000010341414604301300211610ustar00rootroot00000000000000OperatorN: 6 12 1.50202 0.85239 0.802829 1.00218 1.00053 0.904671 0.999718 1.00025 1.00043 0.9728 0.972857 1.00026 0 1.50164 1.00173 0.803341 0.90413 1.00087 1.00073 0.999828 0.972981 1.00031 1.00058 0.972834 0 0 1.50198 0.996544 0.769738 1.00072 1.00102 0.983435 0.981364 1.00069 0.999969 0.971858 0 0 0 1.50239 1.00067 0.770464 0.982244 1.00036 0.999679 0.981307 0.971819 0.999677 0 0 0 0 1.49946 0.937984 0.907641 0.999896 0.998803 0.981955 0.998002 0.997789 0 0 0 0 0 1.49955 0.999923 0.907484 0.980751 0.998956 0.998466 0.997278 dmrgpp-6.02/TestSuite/oracles/operatorN2.txt000066400000000000000000000016171414604301300211100ustar00rootroot00000000000000OperatorN: 8 16 1.5 0.636632 0.999999 0.939817 0.999999 0.973647 1.00004 0.984255 0.999964 0.988868 0.999921 0.99124 0.999924 0.992543 0.999965 0.993186 0 1.5 0.87221 0.999999 0.993118 0.999986 0.998615 1.00002 0.999637 1 0.999897 0.99998 0.999973 0.999968 0.999996 0.999965 0 0 1.5 0.729776 0.999998 0.956627 0.999941 0.979822 1.00005 0.987094 0.999985 0.990234 0.999947 0.991804 0.999968 0.992543 0 0 0 1.5 0.844364 0.999995 0.989419 0.999929 0.997611 1.00004 0.999366 0.999999 0.99984 0.999948 0.999974 0.999925 0 0 0 0 1.5 0.750273 0.999991 0.961387 0.999894 0.981681 1.00005 0.987793 0.999998 0.990233 0.999979 0.991239 0 0 0 0 0 1.5 0.835016 0.999989 0.988052 0.999896 0.9973 1.00005 0.999366 0.999986 0.999899 0.999923 0 0 0 0 0 0 1.5 0.756838 0.999986 0.962577 0.999894 0.981681 1.00004 0.987094 1 0.988868 0 0 0 0 0 0 0 1.5 0.83256 0.999988 0.988051 0.999896 0.997611 1.00005 0.999638 0.999965 dmrgpp-6.02/TestSuite/oracles/operatorSz11.txt000066400000000000000000000012751414604301300213670ustar00rootroot00000000000000OperatorSz: 6 12 0.500007 -0.149559 -0.19919 -3.21536e-05 -4.84967e-05 -0.0959851 -0.00128894 -0.000650414 0.000432493 -0.0276728 -0.0272065 0.000784122 0 0.500088 -0.000141192 -0.198766 -0.0964365 -5.91259e-05 -0.000403754 -0.00111931 -0.027645 -4.7095e-05 0.000547379 -0.0272198 0 0 0.499995 -0.00569305 -0.230949 1.6175e-05 -5.59971e-05 -0.0175974 -0.0188571 0.000341723 -2.48781e-05 -0.027957 0 0 0 0.499967 -6.08744e-05 -0.230043 -0.018439 -0.000212762 -0.000130719 -0.0187999 -0.0279241 0.000457657 0 0 0 0 0.500001 -0.061672 -0.0923024 0.000111238 -0.000250467 -0.0176402 -0.00112773 -0.000589807 0 0 0 0 0 0.499987 0.000156094 -0.0924088 -0.0184593 -0.000171548 -0.000336909 -0.00129583 dmrgpp-6.02/TestSuite/oracles/operatorSz2.txt000066400000000000000000000023141414604301300213020ustar00rootroot00000000000000OperatorSz: 8 16 0.5 -0.363367 1.30025e-07 -0.0601818 -4.4018e-07 -0.0263507 3.47753e-05 -0.0157461 -3.72036e-05 -0.0111335 -7.85459e-05 -0.00876017 -7.61505e-05 -0.00745544 -3.59376e-05 -0.00681194 0 0.5 -0.12779 -1.9335e-07 -0.00688231 -1.51731e-05 -0.00138231 2.30718e-05 -0.000361492 6.87981e-07 -0.000102705 -2.18194e-05 -2.71784e-05 -3.26885e-05 -4.80444e-06 -3.60086e-05 0 0 0.5 -0.270223 -1.5855e-06 -0.0433715 -5.92967e-05 -0.0201757 4.70737e-05 -0.0129072 -1.4583e-05 -0.00976732 -5.3163e-05 -0.0081955 -3.26147e-05 -0.00745569 0 0 0 0.5 -0.155636 -5.25116e-06 -0.0105814 -7.27851e-05 -0.00238713 4.06387e-05 -0.000633854 -2.61515e-06 -0.000160109 -5.32312e-05 -2.71802e-05 -7.62161e-05 0 0 0 0 0.5 -0.249726 -7.80729e-06 -0.038612 -0.00010538 -0.0183171 4.82627e-05 -0.0122076 -2.55958e-06 -0.00976744 -2.17466e-05 -0.00876054 0 0 0 0 0 0.5 -0.164984 -1.21417e-05 -0.0119477 -0.000104618 -0.00270191 4.81568e-05 -0.000633871 -1.44693e-05 -0.000102715 -7.83664e-05 0 0 0 0 0 0 0.499999 -0.243162 -1.30104e-05 -0.0374246 -0.000104571 -0.0183172 4.04864e-05 -0.0129071 7.15203e-07 -0.0111336 0 0 0 0 0 0 0 0.500001 -0.167439 -1.30688e-05 -0.0119476 -0.000105495 -0.00238736 4.71161e-05 -0.000361574 -3.69838e-05 dmrgpp-6.02/TestSuite/oracles/postProcessingTimeEvolution410.txt000066400000000000000000000337161414604301300250550ustar00rootroot00000000000000SuperDensity(Weight of the timeVector)=(1.32974,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0238186,0) (0.0330285,0) 0 2 (0.0303812,0) (2.48718e-13,0) 0 3 (0.0303814,0) (0.0298981,0) 0 4 (0.0303814,0) (1.27969,0) 0.1 5 (0.0303809,0) (0.0431277,0) 0.1 6 (0.0238187,0) (0.0318505,0) 0.1 7 (0.0238176,0) (0.0334562,0) 0.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.32974,0) 0 2 (1,0) (1.69549e-12,0) 0 3 (1,0) (1.32974,0) 0 4 (0.999999,0) (2.60905,0) 0.1 5 (1,0) (1.3426,0) 0.1 6 (1,0) (1.3428,0) 0.1 7 (1,0) (1.32987,0) 0.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(-1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(0,0) site sz(gs) sz(timevector) time 1 (9.48085e-08,0) (-7.03454e-07,0) 0 2 (5.04867e-07,0) (-3.02822e-13,0) 0 3 (-6.13876e-07,0) (1.15277e-06,0) 0 4 (1.39704e-07,0) (9.24929e-09,0) 0.1 5 (-7.85247e-07,0) (7.97669e-07,0) 0.1 6 (-1.38884e-06,0) (4.57299e-07,0) 0.1 7 (1.20396e-06,0) (8.67378e-09,0) 0.1 #Sites=0 1 2 3 4 5 6 7 OperatorSz: 4 8 (0.746349,0) (-0.537716,0) (-2.55829e-13,0) (0.0591703,0) (-0.00232608,0) (-0.189115,0) (-0.0973494,0) (0.0432509,0) (0,0) (0.729901,0) (-2.36788e-14,0) (-0.229426,0) (-0.000285992,0) (0.139084,0) (0.0700855,0) (-0.0699061,0) (0,0) (0,0) (6.91992e-13,0) (-7.34266e-05,0) (-0.0120097,0) (-0.00794906,0) (0.00170041,0) (-0.00562649,0) (0,0) (0,0) (0,0) (0.733517,0) (-0.00505153,0) (-0.364958,0) (-0.123013,0) (0.0731225,0) SuperDensity(Weight of the timeVector)=(1.32974,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 6 (0.0238187,0) (0.0318505,0) 0.1 5 (0.0303808,0) (0.0431277,0) 0.1 4 (0.0303815,0) (1.16066,0) 0.2 3 (0.0303814,0) (0.0314654,0) 0.2 2 (0.0303801,0) (0.00482807,0) 0.2 1 (0.0238178,0) (0.0336591,0) 0.2 0 (0.0238167,0) (0.018996,0) 0.2 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 6 (1,0) (1.3428,0) 0.1 5 (0.999999,0) (1.3426,0) 0.1 4 (1,0) (2.48557,0) 0.2 3 (1,0) (1.28268,0) 0.2 2 (1,0) (0.173895,0) 0.2 1 (1,0) (1.32793,0) 0.2 0 (1,0) (1.28011,0) 0.2 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(-1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(0,0) site sz(gs) sz(timevector) time 6 (-1.38927e-06,0) (4.57299e-07,0) 0.1 5 (-4.13909e-07,0) (-3.2052e-07,0) 0.1 4 (-8.55148e-07,0) (1.0661e-07,0) 0.2 3 (7.58488e-08,0) (-3.88016e-07,0) 0.2 2 (-1.06382e-06,0) (2.65918e-07,0) 0.2 1 (-1.4752e-07,0) (-8.74799e-07,0) 0.2 0 (-5.37089e-08,0) (-9.28789e-07,0) 0.2 #Sites=7 6 5 4 3 2 1 0 OperatorSz: 4 8 (0.729482,0) (-0.531823,0) (-0.0598769,0) (0.00439257,0) (0.109975,0) (0.00267386,0) (-0.10355,0) (0.0982865,0) (0,0) (0.738806,0) (-0.110148,0) (-0.011462,0) (-0.205289,0) (-0.0138546,0) (0.094009,0) (-0.139782,0) (0,0) (0,0) (0.725664,0) (-0.0158393,0) (-0.297874,0) (-0.0160785,0) (0.120396,0) (-0.153022,0) (0,0) (0,0) (0,0) (0.0948706,0) (-0.0233198,0) (-0.00797211,0) (0.00136585,0) (-0.00863034,0) SuperDensity(Weight of the timeVector)=(1.32974,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0238178,0) (0.0336591,0) 0.2 2 (0.03038,0) (0.0164321,0) 0.3 3 (0.0303814,0) (0.0338044,0) 0.3 4 (0.0303814,0) (1.028,0) 0.3 5 (0.0303794,0) (0.127628,0) 0.3 6 (0.0238182,0) (0.122701,0) 0.3 7 (0.0238151,0) (0.0402799,0) 0.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.32793,0) 0.2 2 (1,0) (0.318167,0) 0.3 3 (1,0) (1.23593,0) 0.3 4 (1,0) (2.3413,0) 0.3 5 (1,0) (1.42355,0) 0.3 6 (1,0) (1.43301,0) 0.3 7 (1,0) (1.33733,0) 0.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(-1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(0,0) site sz(gs) sz(timevector) time 1 (-1.4059e-07,0) (-8.74799e-07,0) 0.2 2 (-1.63499e-06,0) (1.38544e-08,0) 0.3 3 (2.18973e-07,0) (-4.41371e-07,0) 0.3 4 (8.26309e-07,0) (1.01416e-06,0) 0.3 5 (-2.68789e-06,0) (2.05923e-06,0) 0.3 6 (-1.91103e-06,0) (7.67306e-07,0) 0.3 7 (5.19647e-07,0) (-2.26067e-06,0) 0.3 #Sites=0 1 2 3 4 5 6 7 OperatorSz: 4 8 (0.717448,0) (-0.514869,0) (-0.034444,0) (-0.0829899,0) (-0.0258042,0) (-0.196721,0) (-0.0772038,0) (0.0312492,0) (0,0) (0.728126,0) (-0.0259664,0) (-0.0541995,0) (0.0152477,0) (0.111024,0) (0.0615806,0) (-0.0656796,0) (0,0) (0,0) (0.164791,0) (-0.01886,0) (-0.0391885,0) (-0.0456557,0) (-0.0277901,0) (0.0153401,0) (0,0) (0,0) (0,0) (0.674824,0) (-0.0435636,0) (-0.256536,0) (-0.0947062,0) (0.0564056,0) SuperDensity(Weight of the timeVector)=(1.32973,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 6 (0.0238182,0) (0.186438,0) 0.4 5 (0.0303792,0) (0.184247,0) 0.4 4 (0.0303814,0) (0.900247,0) 0.4 3 (0.0303813,0) (0.0375968,0) 0.4 2 (0.0303792,0) (0.0310216,0) 0.4 1 (0.0238163,0) (0.0240326,0) 0.5 0 (0.0238145,0) (0.0182988,0) 0.5 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 6 (1,0) (1.49685,0) 0.4 5 (1,0) (1.47637,0) 0.4 4 (1,0) (2.19894,0) 0.4 3 (1,0) (1.1831,0) 0.4 2 (1,0) (0.460475,0) 0.4 1 (0.999998,0) (1.29442,0) 0.5 0 (0.999999,0) (1.09362,0) 0.5 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(-1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(0,0) site sz(gs) sz(timevector) time 6 (-1.9334e-06,0) (-1.08146e-07,0) 0.4 5 (-1.39769e-06,0) (1.24844e-06,0) 0.4 4 (3.29506e-07,0) (1.35505e-06,0) 0.4 3 (5.14567e-07,0) (1.61273e-06,0) 0.4 2 (-1.06158e-06,0) (1.29846e-07,0) 0.4 1 (-1.31635e-06,0) (-1.37262e-06,0) 0.5 0 (1.00911e-06,0) (-1.98979e-07,0) 0.5 #Sites=7 6 5 4 3 2 1 0 OperatorSz: 4 8 (0.723306,0) (-0.459318,0) (-0.271786,0) (-0.0469873,0) (0.0891596,0) (0.0151508,0) (0.0598972,0) (-0.0434624,0) (0,0) (0.649212,0) (0.106031,0) (-0.0131737,0) (-0.152355,0) (-0.0296009,0) (-0.115644,0) (0.0494248,0) (0,0) (0,0) (0.639912,0) (-0.0244316,0) (-0.237192,0) (-0.0467347,0) (-0.109837,0) (0.0465806,0) (0,0) (0,0) (0,0) (0.230146,0) (-0.0730128,0) (-0.0211024,0) (-0.0448201,0) (0.0142897,0) SuperDensity(Weight of the timeVector)=(1.32971,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0238164,0) (0.0240326,0) 0.5 2 (0.0303792,0) (0.0444887,0) 0.5 3 (0.0303813,0) (0.0430012,0) 0.5 4 (0.0303813,0) (0.755458,0) 0.5 5 (0.0303783,0) (0.297084,0) 0.6 6 (0.0238178,0) (0.322997,0) 0.6 7 (0.0238121,0) (0.0751582,0) 0.6 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (0.999998,0) (1.29442,0) 0.5 2 (1,0) (0.618771,0) 0.5 3 (0.999999,0) (1.12921,0) 0.5 4 (1,0) (2.04066,0) 0.5 5 (1,0) (1.57631,0) 0.6 6 (1,0) (1.63528,0) 0.6 7 (1,0) (1.38571,0) 0.6 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(-1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(0,0) site sz(gs) sz(timevector) time 1 (-1.29748e-06,0) (-1.37262e-06,0) 0.5 2 (-1.03794e-06,0) (-3.7748e-08,0) 0.5 3 (3.41959e-07,0) (6.41765e-07,0) 0.5 4 (1.10666e-06,0) (1.15102e-07,0) 0.5 5 (5.56869e-07,0) (1.63058e-06,0) 0.6 6 (1.35293e-06,0) (-2.21344e-06,0) 0.6 7 (-1.9476e-06,0) (-1.62848e-07,0) 0.6 #Sites=0 1 2 3 4 5 6 7 OperatorSz: 4 8 (0.610541,0) (-0.427953,0) (-0.0525451,0) (-0.0847268,0) (-0.0430432,0) (-0.106053,0) (0.0594449,0) (-0.107556,0) (0,0) (0.719905,0) (-0.0845473,0) (-0.0156089,0) (0.0293282,0) (0.0628607,0) (-0.0596808,0) (0.0588008,0) (0,0) (0,0) (0.306013,0) (-0.0552334,0) (-0.0323252,0) (-0.0624034,0) (0.0340946,0) (-0.072785,0) (0,0) (0,0) (0,0) (0.602566,0) (-0.0793306,0) (-0.164126,0) (0.0657708,0) (-0.104728,0) SuperDensity(Weight of the timeVector)=(1.32967,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 6 (0.0238178,0) (0.322997,0) 0.6 5 (0.0303785,0) (0.297083,0) 0.6 4 (0.0303813,0) (0.579528,0) 0.6 3 (0.030381,0) (0.0616027,0) 0.7 2 (0.0303779,0) (0.0898212,0) 0.7 1 (0.0238108,0) (0.0165642,0) 0.7 0 (0.0238142,0) (0.0183373,0) 0.7 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 6 (1,0) (1.63528,0) 0.6 5 (1,0) (1.57631,0) 0.6 4 (1,0) (1.84735,0) 0.6 3 (1,0) (1.05716,0) 0.7 2 (1.00001,0) (1.02455,0) 0.7 1 (1,0) (1.24786,0) 0.7 0 (1,0) (0.960743,0) 0.7 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(-1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(0,0) site sz(gs) sz(timevector) time 6 (1.35892e-06,0) (-2.21344e-06,0) 0.6 5 (-4.14922e-07,0) (2.42914e-06,0) 0.6 4 (-5.50097e-07,0) (2.25593e-07,0) 0.6 3 (-1.21125e-06,0) (1.96681e-06,0) 0.7 2 (3.86297e-06,0) (-8.00865e-07,0) 0.7 1 (3.25211e-06,0) (-5.06745e-06,0) 0.7 0 (-1.3647e-05,0) (4.39458e-06,0) 0.7 #Sites=7 6 5 4 3 2 1 0 OperatorSz: 4 8 (0.713589,0) (-0.396267,0) (-0.225892,0) (0.0720795,0) (0.0580158,0) (0.00369119,0) (0.0257959,0) (-0.0255806,0) (0,0) (0.571437,0) (0.062378,0) (-0.0916441,0) (-0.0906332,0) (-0.0232861,0) (-0.0604705,0) (0.0197567,0) (0,0) (0,0) (0.567308,0) (-0.15334,0) (-0.124586,0) (-0.0208978,0) (-0.0549138,0) (0.0186305,0) (0,0) (0,0) (0,0) (0.397576,0) (-0.116459,0) (-0.0883186,0) (-0.0523844,0) (0.00569821,0) SuperDensity(Weight of the timeVector)=(1.3296,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0238108,0) (0.0165642,0) 0.7 2 (0.0303779,0) (0.0898212,0) 0.7 3 (0.030381,0) (0.078509,0) 0.8 4 (0.0303802,0) (0.238655,0) 0.8 5 (0.030378,0) (0.350545,0) 0.8 6 (0.0238167,0) (0.437468,0) 0.8 7 (0.0238118,0) (0.129551,0) 0.8 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.24786,0) 0.7 2 (1.00001,0) (1.02455,0) 0.7 3 (0.999999,0) (1.0578,0) 0.8 4 (1,0) (1.44582,0) 0.8 5 (1.00001,0) (1.60161,0) 0.8 6 (1,0) (1.7451,0) 0.8 7 (1,0) (1.44181,0) 0.8 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(-1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(0,0) site sz(gs) sz(timevector) time 1 (3.24134e-06,0) (-5.06745e-06,0) 0.7 2 (3.40473e-06,0) (-1.58356e-07,0) 0.7 3 (-1.24499e-06,0) (8.27496e-06,0) 0.8 4 (-9.05353e-07,0) (-4.3271e-06,0) 0.8 5 (1.98782e-06,0) (8.54845e-06,0) 0.8 6 (-1.40456e-07,0) (-4.73198e-06,0) 0.8 7 (-8.80582e-07,0) (-2.57982e-06,0) 0.8 #Sites=0 1 2 3 4 5 6 7 OperatorSz: 4 8 (0.533787,0) (-0.364442,0) (-0.0650799,0) (0.0486887,0) (-0.0669223,0) (-0.0641314,0) (-0.0528694,0) (0.0429339,0) (0,0) (0.701688,0) (-0.135468,0) (-0.212077,0) (0.0402951,0) (0.0524479,0) (0.0451695,0) (-0.0746649,0) (0,0) (0,0) (0.488058,0) (-0.0164126,0) (-0.0935815,0) (-0.0767636,0) (-0.0510852,0) (0.0268123,0) (0,0) (0,0) (0,0) (0.520337,0) (-0.094146,0) (-0.116842,0) (-0.0465285,0) (0.0391305,0) dmrgpp-6.02/TestSuite/oracles/postProcessingTimeEvolution600.txt000066400000000000000000002547171414604301300250640ustar00rootroot00000000000000SuperDensity(Weight of the timeVector)=(0.950512,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.0161329,0) 0 3 (0.0247443,0) (0.950511,0) 0 VectorWithOffsets: No partition found 2 (0.0247444,0) (0,0) 0 1 (0.0255042,0) (0.029436,0) 0 0 (0.016727,0) (0.0294044,0) 0 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (0.950512,0) 0 3 (1,0) (1.90102,0) 0 VectorWithOffsets: No partition found 2 (1,0) (0,0) 0 1 (0.999999,0) (1.69454,0) 0 0 (0.999999,0) (1.69454,0) 0 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.029436,0) 0 2 (0.0247443,0) (3.29273e-18,0) 0 3 (0.0247444,0) (1.69453,0) 0 4 (0.0255041,0) (0.0294359,0) 0 5 (0.016727,0) (0.0294043,0) 0 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (0.999999,0) (1.69454,0) 0 2 (1,0) (6.72034e-18,0) 0 3 (0.999999,0) (3.38906,0) 0 4 (0.999999,0) (1.69453,0) 0 5 (1,0) (1.69453,0) 0 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.0294359,0) 0 3 (0.0247444,0) (1.64714,0) 0.1 2 (0.0247444,0) (0.000318034,0) 0.1 1 (0.0255041,0) (0.0288299,0) 0.1 0 (0.0167269,0) (0.0293167,0) 0.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (1.69453,0) 0 3 (1,0) (3.34137,0) 0.1 2 (1,0) (0.0477157,0) 0.1 1 (0.999999,0) (1.67782,0) 0.1 0 (0.999999,0) (1.69447,0) 0.1 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.0288299,0) 0.1 2 (0.0247444,0) (0.000318033,0) 0.1 3 (0.0247443,0) (1.64714,0) 0.1 4 (0.0255042,0) (0.0455431,0) 0.1 5 (0.016727,0) (0.0293833,0) 0.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (0.999999,0) (1.67782,0) 0.1 2 (0.999999,0) (0.0477157,0) 0.1 3 (1,0) (3.34135,0) 0.1 4 (1,0) (1.71125,0) 0.1 5 (1,0) (1.6946,0) 0.1 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.0917246,0) 0.2 3 (0.0247445,0) (1.53959,0) 0.2 2 (0.0247443,0) (0.00409944,0) 0.2 1 (0.0255041,0) (0.0274942,0) 0.2 0 (0.0167271,0) (0.0288638,0) 0.2 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.75877,0) 0.2 3 (1,0) (3.23003,0) 0.2 2 (1,0) (0.159042,0) 0.2 1 (1,0) (1.6303,0) 0.2 0 (1,0) (1.69353,0) 0.2 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.0274942,0) 0.2 2 (0.0247443,0) (0.00409944,0) 0.2 3 (0.0247444,0) (1.5396,0) 0.2 4 (0.0255042,0) (0.162029,0) 0.3 5 (0.016727,0) (0.0323654,0) 0.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.6303,0) 0.2 2 (0.999999,0) (0.159042,0) 0.2 3 (1,0) (3.23004,0) 0.2 4 (1,0) (1.83042,0) 0.3 5 (1,0) (1.69919,0) 0.3 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.162029,0) 0.3 3 (0.0247444,0) (1.4363,0) 0.3 2 (0.0247444,0) (0.0145495,0) 0.3 1 (0.0255041,0) (0.0261439,0) 0.3 0 (0.0167272,0) (0.0277132,0) 0.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.83042,0) 0.3 3 (1,0) (3.11629,0) 0.3 2 (1,0) (0.272781,0) 0.3 1 (1,0) (1.55865,0) 0.3 0 (1,0) (1.68988,0) 0.3 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.0261439,0) 0.3 2 (0.0247445,0) (0.0145495,0) 0.3 3 (0.0247445,0) (1.36085,0) 0.4 4 (0.0255043,0) (0.248844,0) 0.4 5 (0.016727,0) (0.0390116,0) 0.4 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.55865,0) 0.3 2 (1,0) (0.272781,0) 0.3 3 (0.999999,0) (3.02666,0) 0.4 4 (1,0) (1.91866,0) 0.4 5 (1,0) (1.7077,0) 0.4 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255043,0) (0.248844,0) 0.4 3 (0.0247445,0) (1.36085,0) 0.4 2 (0.0247444,0) (0.0287159,0) 0.4 1 (0.0255043,0) (0.0247247,0) 0.4 0 (0.016727,0) (0.0258514,0) 0.4 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.91866,0) 0.4 3 (1,0) (3.02667,0) 0.4 2 (1,0) (0.36239,0) 0.4 1 (1,0) (1.47042,0) 0.4 0 (1,0) (1.68138,0) 0.4 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255043,0) (0.0247247,0) 0.4 2 (0.0247444,0) (0.0420003,0) 0.5 3 (0.0247444,0) (1.27775,0) 0.5 4 (0.0255042,0) (0.346035,0) 0.5 5 (0.0167269,0) (0.0521729,0) 0.5 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.47042,0) 0.4 2 (1,0) (0.458792,0) 0.5 3 (1,0) (2.93029,0) 0.5 4 (0.999999,0) (2.01788,0) 0.5 5 (0.999999,0) (1.72299,0) 0.5 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.346035,0) 0.5 3 (0.0247444,0) (1.27774,0) 0.5 2 (0.0247443,0) (0.0420003,0) 0.5 1 (0.0255043,0) (0.0226865,0) 0.5 0 (0.0167269,0) (0.0237199,0) 0.5 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (2.01788,0) 0.5 3 (1,0) (2.93026,0) 0.5 2 (1,0) (0.458793,0) 0.5 1 (1,0) (1.37119,0) 0.5 0 (1,0) (1.66608,0) 0.5 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255043,0) (0.0199469,0) 0.6 2 (0.0247445,0) (0.0576696,0) 0.6 3 (0.0247444,0) (1.1423,0) 0.6 4 (0.0255042,0) (0.449061,0) 0.6 5 (0.0167271,0) (0.0741564,0) 0.6 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.26542,0) 0.6 2 (1,0) (0.609903,0) 0.6 3 (1,0) (2.77915,0) 0.6 4 (0.999999,0) (2.12365,0) 0.6 5 (0.999999,0) (1.74689,0) 0.6 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.449061,0) 0.6 3 (0.0247444,0) (1.1423,0) 0.6 2 (0.0247445,0) (0.0576698,0) 0.6 1 (0.0255043,0) (0.0171848,0) 0.7 0 (0.0167271,0) (0.0200837,0) 0.7 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (2.12365,0) 0.6 3 (1,0) (2.77916,0) 0.6 2 (0.999999,0) (0.609903,0) 0.6 1 (1,0) (1.16124,0) 0.7 0 (1,0) (1.60733,0) 0.7 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255043,0) (0.0171848,0) 0.7 2 (0.0247445,0) (0.085149,0) 0.7 3 (0.0247444,0) (0.954614,0) 0.7 4 (0.0255041,0) (0.550485,0) 0.7 5 (0.0167271,0) (0.10729,0) 0.7 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.16124,0) 0.7 2 (1,0) (0.825071,0) 0.7 3 (1,0) (2.564,0) 0.7 4 (1,0) (2.22784,0) 0.7 5 (1,0) (1.78174,0) 0.7 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.550485,0) 0.7 3 (0.0247444,0) (0.954614,0) 0.7 2 (0.0247444,0) (0.126798,0) 0.8 1 (0.0255043,0) (0.015663,0) 0.8 0 (0.0167271,0) (0.0182201,0) 0.8 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.22784,0) 0.7 3 (1,0) (2.564,0) 0.7 2 (0.999999,0) (1.06397,0) 0.8 1 (1,0) (1.07326,0) 0.8 0 (1,0) (1.5585,0) 0.8 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255043,0) (0.015663,0) 0.8 2 (0.0247445,0) (0.126798,0) 0.8 3 (0.0247444,0) (0.757358,0) 0.8 4 (0.0255041,0) (0.636938,0) 0.8 5 (0.0167271,0) (0.154255,0) 0.8 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.07326,0) 0.8 2 (1,0) (1.06397,0) 0.8 3 (1,0) (2.32509,0) 0.8 4 (1,0) (2.31581,0) 0.8 5 (1,0) (1.83057,0) 0.8 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.636938,0) 0.8 3 (0.0247444,0) (0.590659,0) 0.9 2 (0.0247444,0) (0.171592,0) 0.9 1 (0.0255041,0) (0.0172352,0) 0.9 0 (0.016727,0) (0.016183,0) 0.9 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.31581,0) 0.8 3 (1,0) (2.1136,0) 0.9 2 (1,0) (1.27547,0) 0.9 1 (1,0) (1.01748,0) 0.9 0 (1,0) (1.49302,0) 0.9 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.0172352,0) 0.9 2 (0.0247444,0) (0.171593,0) 0.9 3 (0.0247444,0) (0.590659,0) 0.9 4 (0.0255042,0) (0.694289,0) 0.9 5 (0.016727,0) (0.217695,0) 0.9 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.01748,0) 0.9 2 (1,0) (1.27547,0) 0.9 3 (1,0) (2.1136,0) 0.9 4 (0.999999,0) (2.37159,0) 0.9 5 (0.999999,0) (1.89605,0) 0.9 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.717214,0) 1 3 (0.0247444,0) (0.461089,0) 1 2 (0.0247444,0) (0.206078,0) 1 1 (0.0255042,0) (0.0235554,0) 1 0 (0.016727,0) (0.0146711,0) 1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (2.38819,0) 1 3 (1,0) (1.94955,0) 1 2 (1,0) (1.43953,0) 1 1 (1,0) (1.00088,0) 1 0 (1,0) (1.41092,0) 1 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.0235554,0) 1 2 (0.0247444,0) (0.206078,0) 1 3 (0.0247444,0) (0.46109,0) 1 4 (0.0255042,0) (0.711402,0) 1.1 5 (0.016727,0) (0.392695,0) 1.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.00088,0) 1 2 (1,0) (1.43952,0) 1 3 (1,0) (1.94955,0) 1 4 (0.999999,0) (2.37205,0) 1.1 5 (0.999999,0) (2.07274,0) 1.1 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.711402,0) 1.1 3 (0.0247444,0) (0.352391,0) 1.1 2 (0.0247444,0) (0.228524,0) 1.1 1 (0.0255042,0) (0.0338873,0) 1.1 0 (0.016727,0) (0.0144893,0) 1.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (2.37205,0) 1.1 3 (1,0) (1.8184,0) 1.1 2 (1,0) (1.57067,0) 1.1 1 (0.999999,0) (1.01702,0) 1.1 0 (0.999999,0) (1.31633,0) 1.1 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.0338873,0) 1.1 2 (0.0247444,0) (0.228524,0) 1.1 3 (0.0247444,0) (0.253506,0) 1.2 4 (0.0255042,0) (0.684524,0) 1.2 5 (0.016727,0) (0.49455,0) 1.2 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (0.999999,0) (1.01702,0) 1.1 2 (1,0) (1.57067,0) 1.1 3 (1,0) (1.70081,0) 1.2 4 (1,0) (2.33463,0) 1.2 5 (1,0) (2.17349,0) 1.2 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.684524,0) 1.2 3 (0.0247445,0) (0.253506,0) 1.2 2 (0.0247444,0) (0.247233,0) 1.2 1 (0.0255042,0) (0.0444346,0) 1.2 0 (0.016727,0) (0.015594,0) 1.2 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.33463,0) 1.2 3 (1,0) (1.70081,0) 1.2 2 (1,0) (1.68826,0) 1.2 1 (1,0) (1.05445,0) 1.2 0 (0.999999,0) (1.21558,0) 1.2 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.0444346,0) 1.2 2 (0.0247444,0) (0.265945,0) 1.3 3 (0.0247444,0) (0.169967,0) 1.3 4 (0.0255042,0) (0.636991,0) 1.3 5 (0.016727,0) (0.599173,0) 1.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.05445,0) 1.2 2 (1,0) (1.79051,0) 1.3 3 (0.999999,0) (1.59856,0) 1.3 4 (0.999999,0) (2.27911,0) 1.3 5 (0.999999,0) (2.27663,0) 1.3 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.636991,0) 1.3 3 (0.0247445,0) (0.169966,0) 1.3 2 (0.0247444,0) (0.265946,0) 1.3 1 (0.0255042,0) (0.0524178,0) 1.3 0 (0.016727,0) (0.017075,0) 1.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (2.27911,0) 1.3 3 (1,0) (1.59856,0) 1.3 2 (1,0) (1.79051,0) 1.3 1 (1,0) (1.10996,0) 1.3 0 (1,0) (1.11244,0) 1.3 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.0614915,0) 1.4 2 (0.0247444,0) (0.27661,0) 1.4 3 (0.0247444,0) (0.114292,0) 1.4 4 (0.0255041,0) (0.564444,0) 1.4 5 (0.0167271,0) (0.707049,0) 1.4 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.19158,0) 1.4 2 (0.999999,0) (1.85685,0) 1.4 3 (1,0) (1.53222,0) 1.4 4 (0.999999,0) (2.19749,0) 1.4 5 (0.999999,0) (2.38339,0) 1.4 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.564444,0) 1.4 3 (0.0247445,0) (0.114292,0) 1.4 2 (0.0247445,0) (0.27661,0) 1.4 1 (0.0255041,0) (0.0800773,0) 1.5 0 (0.0167271,0) (0.0191675,0) 1.5 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (2.19749,0) 1.4 3 (0.999999,0) (1.53222,0) 1.4 2 (1,0) (1.85685,0) 1.4 1 (1,0) (1.30604,0) 1.5 0 (1,0) (0.893374,0) 1.5 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.0800773,0) 1.5 2 (0.0247445,0) (0.268623,0) 1.5 3 (0.0247443,0) (0.0931253,0) 1.5 4 (0.0255042,0) (0.468569,0) 1.5 5 (0.016727,0) (0.820329,0) 1.5 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.30604,0) 1.5 2 (1,0) (1.87003,0) 1.5 3 (1,0) (1.51904,0) 1.5 4 (1,0) (2.08303,0) 1.5 5 (1,0) (2.4957,0) 1.5 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.468569,0) 1.5 3 (0.0247445,0) (0.0931254,0) 1.5 2 (0.0247444,0) (0.241501,0) 1.6 1 (0.0255043,0) (0.111223,0) 1.6 0 (0.0167269,0) (0.0206583,0) 1.6 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.08303,0) 1.5 3 (0.999999,0) (1.51904,0) 1.5 2 (1,0) (1.83319,0) 1.6 1 (1,0) (1.44355,0) 1.6 0 (1,0) (0.780867,0) 1.6 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255043,0) (0.111223,0) 1.6 2 (0.0247443,0) (0.241501,0) 1.6 3 (0.0247445,0) (0.102843,0) 1.6 4 (0.0255043,0) (0.362206,0) 1.6 5 (0.016727,0) (0.934327,0) 1.6 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.44355,0) 1.6 2 (1,0) (1.8332,0) 1.6 3 (1,0) (1.55588,0) 1.6 4 (1,0) (1.94552,0) 1.6 5 (1,0) (2.60821,0) 1.6 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255043,0) (0.362206,0) 1.6 3 (0.0247444,0) (0.131926,0) 1.7 2 (0.0247445,0) (0.20537,0) 1.7 1 (0.0255042,0) (0.145463,0) 1.7 0 (0.0167269,0) (0.0228557,0) 1.7 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.94552,0) 1.6 3 (1,0) (1.62109,0) 1.7 2 (1,0) (1.76798,0) 1.7 1 (1,0) (1.57715,0) 1.7 0 (1,0) (0.683105,0) 1.7 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.145463,0) 1.7 2 (0.0247444,0) (0.20537,0) 1.7 3 (0.0247444,0) (0.131926,0) 1.7 4 (0.0255041,0) (0.262851,0) 1.7 5 (0.0167271,0) (1.03429,0) 1.7 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.57715,0) 1.7 2 (0.999999,0) (1.76798,0) 1.7 3 (1,0) (1.62109,0) 1.7 4 (0.999998,0) (1.81193,0) 1.7 5 (0.999999,0) (2.70597,0) 1.7 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.183296,0) 1.8 3 (0.0247444,0) (0.165942,0) 1.8 2 (0.0247445,0) (0.170965,0) 1.8 1 (0.0255042,0) (0.168121,0) 1.8 0 (0.0167271,0) (0.0254,0) 1.8 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999998,0) (1.70971,0) 1.8 3 (1,0) (1.68951,0) 1.8 2 (1,0) (1.69956,0) 1.8 1 (1,0) (1.67936,0) 1.8 0 (1,0) (0.615795,0) 1.8 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.168121,0) 1.8 2 (0.0247444,0) (0.170964,0) 1.8 3 (0.0247444,0) (0.165942,0) 1.8 4 (0.0255041,0) (0.129262,0) 1.9 5 (0.0167271,0) (1.13988,0) 1.9 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.67936,0) 1.8 2 (1,0) (1.69956,0) 1.8 3 (1,0) (1.68951,0) 1.8 4 (0.999999,0) (1.64858,0) 1.9 5 (1,0) (2.80632,0) 1.9 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.129262,0) 1.9 3 (0.0247444,0) (0.193665,0) 1.9 2 (0.0247443,0) (0.142264,0) 1.9 1 (0.0255042,0) (0.17522,0) 1.9 0 (0.016727,0) (0.0280978,0) 1.9 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (1.64858,0) 1.9 3 (1,0) (1.74594,0) 1.9 2 (1,0) (1.64313,0) 1.9 1 (1,0) (1.74049,0) 1.9 0 (1,0) (0.582756,0) 1.9 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.17522,0) 1.9 2 (0.0247444,0) (0.142264,0) 1.9 3 (0.0247444,0) (0.211175,0) 2 4 (0.0255041,0) (0.102877,0) 2 5 (0.016727,0) (1.152,0) 2 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.74049,0) 1.9 2 (1,0) (1.64314,0) 1.9 3 (0.999999,0) (1.78778,0) 2 4 (1,0) (1.61875,0) 2 5 (1,0) (2.8155,0) 2 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.102877,0) 2 3 (0.0247444,0) (0.211175,0) 2 2 (0.0247445,0) (0.117931,0) 2 1 (0.0255041,0) (0.178659,0) 2 0 (0.0167269,0) (0.0310331,0) 2 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.61875,0) 2 3 (0.999999,0) (1.78778,0) 2 2 (1,0) (1.60129,0) 2 1 (1,0) (1.77032,0) 2 0 (1,0) (0.573566,0) 2 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.178659,0) 2 2 (0.0247445,0) (0.0965566,0) 2.1 3 (0.0247444,0) (0.220018,0) 2.1 4 (0.0255041,0) (0.105114,0) 2.1 5 (0.016727,0) (1.15227,0) 2.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.77032,0) 2 2 (1,0) (1.57107,0) 2.1 3 (0.999999,0) (1.818,0) 2.1 4 (1,0) (1.60756,0) 2.1 5 (1,0) (2.81306,0) 2.1 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.105114,0) 2.1 3 (0.0247444,0) (0.220019,0) 2.1 2 (0.0247444,0) (0.0965564,0) 2.1 1 (0.0255041,0) (0.192089,0) 2.1 0 (0.0167271,0) (0.0337469,0) 2.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.60756,0) 2.1 3 (1,0) (1.818,0) 2.1 2 (1,0) (1.57107,0) 2.1 1 (1,0) (1.78151,0) 2.1 0 (1,0) (0.576009,0) 2.1 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.213194,0) 2.2 2 (0.0247444,0) (0.0797759,0) 2.2 3 (0.0247443,0) (0.221373,0) 2.2 4 (0.0255042,0) (0.135961,0) 2.2 5 (0.016727,0) (1.13873,0) 2.2 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.77177,0) 2.2 2 (0.999999,0) (1.55294,0) 2.2 3 (1,0) (1.83613,0) 2.2 4 (0.999999,0) (1.6173,0) 2.2 5 (0.999999,0) (2.79828,0) 2.2 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.135961,0) 2.2 3 (0.0247444,0) (0.221373,0) 2.2 2 (0.0247443,0) (0.079776,0) 2.2 1 (0.0255042,0) (0.224482,0) 2.3 0 (0.0167271,0) (0.0340064,0) 2.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (1.6173,0) 2.2 3 (1,0) (1.83613,0) 2.2 2 (1,0) (1.55294,0) 2.2 1 (1,0) (1.72355,0) 2.3 0 (1,0) (0.631717,0) 2.3 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.224482,0) 2.3 2 (0.0247444,0) (0.0722229,0) 2.3 3 (0.0247444,0) (0.213117,0) 2.3 4 (0.0255042,0) (0.195465,0) 2.3 5 (0.0167269,0) (1.09683,0) 2.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.72355,0) 2.3 2 (1,0) (1.55364,0) 2.3 3 (1,0) (1.83543,0) 2.3 4 (1,0) (1.66552,0) 2.3 5 (1,0) (2.75736,0) 2.3 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.195465,0) 2.3 3 (0.0247444,0) (0.213116,0) 2.3 2 (0.0247444,0) (0.078808,0) 2.4 1 (0.0255042,0) (0.212845,0) 2.4 0 (0.016727,0) (0.0320456,0) 2.4 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.66552,0) 2.3 3 (1,0) (1.83543,0) 2.3 2 (1,0) (1.58063,0) 2.4 1 (0.999999,0) (1.62297,0) 2.4 0 (0.999999,0) (0.709929,0) 2.4 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.212845,0) 2.4 2 (0.0247444,0) (0.0788081,0) 2.4 3 (0.0247444,0) (0.192715,0) 2.4 4 (0.0255041,0) (0.28441,0) 2.4 5 (0.0167269,0) (1.01665,0) 2.4 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (0.999999,0) (1.62297,0) 2.4 2 (1,0) (1.58063,0) 2.4 3 (1,0) (1.80844,0) 2.4 4 (1,0) (1.7661,0) 2.4 5 (1,0) (2.67914,0) 2.4 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.28441,0) 2.4 3 (0.0247444,0) (0.161648,0) 2.5 2 (0.0247444,0) (0.0998216,0) 2.5 1 (0.0255041,0) (0.184837,0) 2.5 0 (0.0167271,0) (0.0314334,0) 2.5 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.7661,0) 2.4 3 (1,0) (1.75636,0) 2.5 2 (1,0) (1.63271,0) 2.5 1 (1,0) (1.47922,0) 2.5 0 (1,0) (0.818974,0) 2.5 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.184837,0) 2.5 2 (0.0247444,0) (0.0998213,0) 2.5 3 (0.0247444,0) (0.161649,0) 2.5 4 (0.0255042,0) (0.400153,0) 2.5 5 (0.016727,0) (0.906995,0) 2.5 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.47922,0) 2.5 2 (1,0) (1.63271,0) 2.5 3 (0.999999,0) (1.75636,0) 2.5 4 (1,0) (1.90985,0) 2.5 5 (1,0) (2.5701,0) 2.5 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.530208,0) 2.6 3 (0.0247444,0) (0.126744,0) 2.6 2 (0.0247444,0) (0.127845,0) 2.6 1 (0.0255043,0) (0.159534,0) 2.6 0 (0.016727,0) (0.0329232,0) 2.6 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.06521,0) 2.6 3 (1,0) (1.69343,0) 2.6 2 (0.999999,0) (1.69564,0) 2.6 1 (0.999999,0) (1.32386,0) 2.6 0 (0.999998,0) (0.937478,0) 2.6 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255043,0) (0.159534,0) 2.6 2 (0.0247445,0) (0.127845,0) 2.6 3 (0.0247444,0) (0.126744,0) 2.6 4 (0.0255043,0) (0.653681,0) 2.7 5 (0.016727,0) (0.682245,0) 2.7 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (0.999999,0) (1.32386,0) 2.6 2 (1,0) (1.69564,0) 2.6 3 (1,0) (1.69344,0) 2.6 4 (1,0) (2.20021,0) 2.7 5 (1,0) (2.34237,0) 2.7 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255043,0) (0.653681,0) 2.7 3 (0.0247444,0) (0.0982979,0) 2.7 2 (0.0247443,0) (0.151876,0) 2.7 1 (0.0255041,0) (0.14801,0) 2.7 0 (0.016727,0) (0.0344083,0) 2.7 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.20021,0) 2.7 3 (1,0) (1.64096,0) 2.7 2 (1,0) (1.74811,0) 2.7 1 (1,0) (1.18886,0) 2.7 0 (1,0) (1.0467,0) 2.7 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.14801,0) 2.7 2 (0.0247444,0) (0.151875,0) 2.7 3 (0.0247444,0) (0.0865545,0) 2.8 4 (0.0255041,0) (0.75362,0) 2.8 5 (0.0167271,0) (0.583543,0) 2.8 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.18886,0) 2.7 2 (1,0) (1.74811,0) 2.7 3 (1,0) (1.61444,0) 2.8 4 (1,0) (2.3046,0) 2.8 5 (1,0) (2.24497,0) 2.8 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.75362,0) 2.8 3 (0.0247444,0) (0.0865547,0) 2.8 2 (0.0247444,0) (0.16665,0) 2.8 1 (0.0255042,0) (0.143556,0) 2.8 0 (0.016727,0) (0.0331135,0) 2.8 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.3046,0) 2.8 3 (1,0) (1.61444,0) 2.8 2 (1,0) (1.77463,0) 2.8 1 (0.999999,0) (1.08447,0) 2.8 0 (0.999999,0) (1.14411,0) 2.8 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.143556,0) 2.8 2 (0.0247445,0) (0.176819,0) 2.9 3 (0.0247444,0) (0.0974133,0) 2.9 4 (0.0255043,0) (0.827995,0) 2.9 5 (0.0167271,0) (0.484291,0) 2.9 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (0.999999,0) (1.08447,0) 2.8 2 (1,0) (1.77394,0) 2.9 3 (1,0) (1.61513,0) 2.9 4 (1,0) (2.39011,0) 2.9 5 (1,0) (2.14986,0) 2.9 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255043,0) (0.827995,0) 2.9 3 (0.0247444,0) (0.0974134,0) 2.9 2 (0.0247444,0) (0.17682,0) 2.9 1 (0.0255042,0) (0.132422,0) 2.9 0 (0.016727,0) (0.0289659,0) 2.9 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.39011,0) 2.9 3 (1,0) (1.61513,0) 2.9 2 (1,0) (1.77394,0) 2.9 1 (1,0) (0.998963,0) 2.9 0 (1,0) (1.23921,0) 2.9 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.110437,0) 3 2 (0.0247444,0) (0.189965,0) 3 3 (0.0247444,0) (0.130403,0) 3 4 (0.0255042,0) (0.885228,0) 3 5 (0.0167269,0) (0.381766,0) 3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (0.919745,0) 3 2 (1,0) (1.7541,0) 3 3 (0.999999,0) (1.63497,0) 3 4 (1,0) (2.46933,0) 3 5 (1,0) (2.0513,0) 3 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.885228,0) 3 3 (0.0247444,0) (0.130403,0) 3 2 (0.0247444,0) (0.189965,0) 3 1 (0.0255042,0) (0.0863929,0) 3.1 0 (0.016727,0) (0.0240619,0) 3.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.46933,0) 3 3 (1,0) (1.63498,0) 3 2 (0.999999,0) (1.7541,0) 3 1 (1,0) (0.853006,0) 3.1 0 (1,0) (1.43226,0) 3.1 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.0863929,0) 3.1 2 (0.0247444,0) (0.206271,0) 3.1 3 (0.0247444,0) (0.182599,0) 3.1 4 (0.0255042,0) (0.927922,0) 3.1 5 (0.016727,0) (0.286336,0) 3.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (0.853006,0) 3.1 2 (0.999999,0) (1.71821,0) 3.1 3 (1,0) (1.67086,0) 3.1 4 (0.999999,0) (2.53606,0) 3.1 5 (0.999999,0) (1.95681,0) 3.1 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.927922,0) 3.1 3 (0.0247444,0) (0.182599,0) 3.1 2 (0.0247444,0) (0.217375,0) 3.2 1 (0.0255042,0) (0.0708277,0) 3.2 0 (0.016727,0) (0.0256702,0) 3.2 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (2.53606,0) 3.1 3 (0.999999,0) (1.67086,0) 3.1 2 (1,0) (1.65693,0) 3.2 1 (1,0) (0.821404,0) 3.2 0 (1,0) (1.50797,0) 3.2 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.0708277,0) 3.2 2 (0.0247444,0) (0.217374,0) 3.2 3 (0.0247444,0) (0.254976,0) 3.2 4 (0.0255043,0) (0.94396,0) 3.2 5 (0.016727,0) (0.212239,0) 3.2 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (0.821404,0) 3.2 2 (1,0) (1.65693,0) 3.2 3 (1,0) (1.73214,0) 3.2 4 (0.999999,0) (2.56767,0) 3.2 5 (0.999999,0) (1.8811,0) 3.2 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255043,0) (0.94396,0) 3.2 3 (0.0247444,0) (0.351097,0) 3.3 2 (0.0247444,0) (0.215606,0) 3.3 1 (0.0255042,0) (0.0652418,0) 3.3 0 (0.016727,0) (0.0267931,0) 3.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (2.56767,0) 3.2 3 (1,0) (1.83003,0) 3.3 2 (1,0) (1.55905,0) 3.3 1 (1,0) (0.843177,0) 3.3 0 (1,0) (1.55649,0) 3.3 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.0652418,0) 3.3 2 (0.0247444,0) (0.215607,0) 3.3 3 (0.0247444,0) (0.351097,0) 3.3 4 (0.0255042,0) (0.916602,0) 3.3 5 (0.016727,0) (0.164842,0) 3.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (0.843177,0) 3.3 2 (1,0) (1.55905,0) 3.3 3 (0.999999,0) (1.83003,0) 3.3 4 (1,0) (2.5459,0) 3.3 5 (1,0) (1.83258,0) 3.3 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.843095,0) 3.4 3 (0.0247444,0) (0.466558,0) 3.4 2 (0.0247444,0) (0.202733,0) 3.4 1 (0.0255043,0) (0.0632397,0) 3.4 0 (0.016727,0) (0.0255469,0) 3.4 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.47439,0) 3.4 3 (1,0) (1.95836,0) 3.4 2 (1,0) (1.43071,0) 3.4 1 (1,0) (0.914682,0) 3.4 0 (0.999999,0) (1.58195,0) 3.4 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255043,0) (0.0632397,0) 3.4 2 (0.0247444,0) (0.202732,0) 3.4 3 (0.0247444,0) (0.466558,0) 3.4 4 (0.0255042,0) (0.741201,0) 3.5 5 (0.016727,0) (0.12295,0) 3.5 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (0.914682,0) 3.4 2 (1,0) (1.43071,0) 3.4 3 (1,0) (1.95836,0) 3.4 4 (0.999999,0) (2.37629,0) 3.5 5 (0.999999,0) (1.79415,0) 3.5 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.741201,0) 3.5 3 (0.0247444,0) (0.583861,0) 3.5 2 (0.0247444,0) (0.189306,0) 3.5 1 (0.0255043,0) (0.0594451,0) 3.5 0 (0.0167271,0) (0.0233395,0) 3.5 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (2.37629,0) 3.5 3 (1,0) (2.08909,0) 3.5 2 (1,0) (1.29998,0) 3.5 1 (1,0) (1.01278,0) 3.5 0 (1,0) (1.59492,0) 3.5 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255043,0) (0.0594451,0) 3.5 2 (0.0247444,0) (0.189306,0) 3.5 3 (0.0247444,0) (0.685197,0) 3.6 4 (0.0255041,0) (0.63643,0) 3.6 5 (0.016727,0) (0.115152,0) 3.6 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.01278,0) 3.5 2 (0.999999,0) (1.29998,0) 3.5 3 (1,0) (2.19317,0) 3.6 4 (0.999999,0) (2.27662,0) 3.6 5 (1,0) (1.78666,0) 3.6 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.63643,0) 3.6 3 (0.0247444,0) (0.685197,0) 3.6 2 (0.0247444,0) (0.186568,0) 3.6 1 (0.0255042,0) (0.0543456,0) 3.6 0 (0.0167271,0) (0.0230262,0) 3.6 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (2.27662,0) 3.6 3 (0.999999,0) (2.19316,0) 3.6 2 (1,0) (1.19591,0) 3.6 1 (1,0) (1.11245,0) 3.6 0 (0.999999,0) (1.60241,0) 3.6 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.0543456,0) 3.6 2 (0.0247444,0) (0.198218,0) 3.7 3 (0.0247444,0) (0.770653,0) 3.7 4 (0.0255042,0) (0.543092,0) 3.7 5 (0.0167271,0) (0.115719,0) 3.7 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.11245,0) 3.6 2 (0.999999,0) (1.1221,0) 3.7 3 (1,0) (2.26697,0) 3.7 4 (1,0) (2.18689,0) 3.7 5 (1,0) (1.78473,0) 3.7 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.543092,0) 3.7 3 (0.0247444,0) (0.770653,0) 3.7 2 (0.0247444,0) (0.198218,0) 3.7 1 (0.0255042,0) (0.0507437,0) 3.7 0 (0.016727,0) (0.0255294,0) 3.7 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.18689,0) 3.7 3 (1,0) (2.26697,0) 3.7 2 (1,0) (1.1221,0) 3.7 1 (1,0) (1.20219,0) 3.7 0 (1,0) (1.60434,0) 3.7 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.0485792,0) 3.8 2 (0.0247444,0) (0.217289,0) 3.8 3 (0.0247444,0) (0.855649,0) 3.8 4 (0.0255042,0) (0.457797,0) 3.8 5 (0.016727,0) (0.125489,0) 3.8 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.28532,0) 3.8 2 (1,0) (1.05618,0) 3.8 3 (1,0) (2.3329,0) 3.8 4 (0.999999,0) (2.10375,0) 3.8 5 (0.999999,0) (1.79101,0) 3.8 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.457797,0) 3.8 3 (0.0247444,0) (0.855649,0) 3.8 2 (0.0247444,0) (0.217289,0) 3.8 1 (0.0255041,0) (0.0456775,0) 3.9 0 (0.016727,0) (0.0313271,0) 3.9 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (2.10375,0) 3.8 3 (0.999999,0) (2.3329,0) 3.8 2 (0.999998,0) (1.05618,0) 3.8 1 (0.999999,0) (1.36943,0) 3.9 0 (0.999999,0) (1.58368,0) 3.9 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.0456775,0) 3.9 2 (0.0247444,0) (0.2307,0) 3.9 3 (0.0247444,0) (0.945488,0) 3.9 4 (0.0255043,0) (0.370789,0) 3.9 5 (0.0167271,0) (0.142185,0) 3.9 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (0.999999,0) (1.36943,0) 3.9 2 (1,0) (0.979749,0) 3.9 3 (1,0) (2.40932,0) 3.9 4 (0.999999,0) (2.01965,0) 3.9 5 (0.999999,0) (1.80539,0) 3.9 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255043,0) (0.370789,0) 3.9 3 (0.0247444,0) (0.945487,0) 3.9 2 (0.0247445,0) (0.230592,0) 4 1 (0.0255041,0) (0.0427168,0) 4 0 (0.016727,0) (0.0324867,0) 4 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (0.999999,0) (2.01965,0) 3.9 3 (1,0) (2.40932,0) 3.9 2 (0.999999,0) (0.906176,0) 4 1 (1,0) (1.45434,0) 4 0 (1,0) (1.56486,0) 4 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.0427168,0) 4 2 (0.0247445,0) (0.230592,0) 4 3 (0.0247444,0) (1.01895,0) 4 4 (0.0255042,0) (0.282908,0) 4 5 (0.016727,0) (0.162157,0) 4 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.45434,0) 4 2 (0.999999,0) (0.906175,0) 4 3 (0.999999,0) (2.4829,0) 4 4 (1,0) (1.93473,0) 4 5 (1,0) (1.82421,0) 4 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.282908,0) 4 3 (0.0247444,0) (1.04679,0) 4.1 2 (0.0247444,0) (0.223703,0) 4.1 1 (0.0255042,0) (0.044244,0) 4.1 0 (0.016727,0) (0.0342112,0) 4.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.93473,0) 4 3 (1,0) (2.51762,0) 4.1 2 (1,0) (0.871452,0) 4.1 1 (1,0) (1.52824,0) 4.1 0 (1,0) (1.54609,0) 4.1 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.044244,0) 4.1 2 (0.0247444,0) (0.223702,0) 4.1 3 (0.0247443,0) (1.04679,0) 4.1 4 (0.0255043,0) (0.210538,0) 4.1 5 (0.016727,0) (0.182653,0) 4.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.52824,0) 4.1 2 (1,0) (0.87145,0) 4.1 3 (1,0) (2.51762,0) 4.1 4 (1,0) (1.86083,0) 4.1 5 (1,0) (1.84298,0) 4.1 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255043,0) (0.172697,0) 4.2 3 (0.0247444,0) (1.02586,0) 4.2 2 (0.0247444,0) (0.226392,0) 4.2 1 (0.0255043,0) (0.0528297,0) 4.2 0 (0.016727,0) (0.0374829,0) 4.2 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.8144,0) 4.2 3 (1,0) (2.494,0) 4.2 2 (1,0) (0.895073,0) 4.2 1 (0.999999,0) (1.57467,0) 4.2 0 (0.999998,0) (1.53083,0) 4.2 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255043,0) (0.0528297,0) 4.2 2 (0.0247444,0) (0.226391,0) 4.2 3 (0.0247444,0) (1.02586,0) 4.2 4 (0.0255041,0) (0.173035,0) 4.3 5 (0.0167271,0) (0.214411,0) 4.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (0.999999,0) (1.57467,0) 4.2 2 (1,0) (0.895073,0) 4.2 3 (0.999999,0) (2.494,0) 4.2 4 (1,0) (1.80369,0) 4.3 5 (1,0) (1.86749,0) 4.3 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.173035,0) 4.3 3 (0.0247444,0) (0.985293,0) 4.3 2 (0.0247444,0) (0.245972,0) 4.3 1 (0.0255041,0) (0.0638795,0) 4.3 0 (0.016727,0) (0.0414545,0) 4.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.80369,0) 4.3 3 (0.999999,0) (2.43386,0) 4.3 2 (0.999999,0) (0.955213,0) 4.3 1 (1,0) (1.58538,0) 4.3 0 (1,0) (1.52158,0) 4.3 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.0638795,0) 4.3 2 (0.0247444,0) (0.245972,0) 4.3 3 (0.0247444,0) (0.954177,0) 4.4 4 (0.0255041,0) (0.196307,0) 4.4 5 (0.016727,0) (0.22038,0) 4.4 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.58538,0) 4.3 2 (1,0) (0.955214,0) 4.3 3 (1,0) (2.37992,0) 4.4 4 (1,0) (1.82121,0) 4.4 5 (1,0) (1.86992,0) 4.4 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.196307,0) 4.4 3 (0.0247444,0) (0.954177,0) 4.4 2 (0.0247444,0) (0.268796,0) 4.4 1 (0.0255042,0) (0.0696291,0) 4.4 0 (0.0167271,0) (0.0450002,0) 4.4 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.82121,0) 4.4 3 (1,0) (2.37992,0) 4.4 2 (0.999999,0) (1.00915,0) 4.4 1 (0.999999,0) (1.56786,0) 4.4 0 (1,0) (1.51916,0) 4.4 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.0696291,0) 4.4 2 (0.0247444,0) (0.273368,0) 4.5 3 (0.0247445,0) (0.929706,0) 4.5 4 (0.0255042,0) (0.224209,0) 4.5 5 (0.0167271,0) (0.222511,0) 4.5 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (0.999999,0) (1.56786,0) 4.4 2 (0.999999,0) (1.0382,0) 4.5 3 (1,0) (2.35087,0) 4.5 4 (1,0) (1.84966,0) 4.5 5 (1,0) (1.86849,0) 4.5 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.224209,0) 4.5 3 (0.0247443,0) (0.929707,0) 4.5 2 (0.0247444,0) (0.273368,0) 4.5 1 (0.0255042,0) (0.0690799,0) 4.5 0 (0.016727,0) (0.0485573,0) 4.5 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.84966,0) 4.5 3 (1,0) (2.35087,0) 4.5 2 (1,0) (1.0382,0) 4.5 1 (0.999998,0) (1.53941,0) 4.5 0 (0.999998,0) (1.52058,0) 4.5 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.0708257,0) 4.6 2 (0.0247444,0) (0.25687,0) 4.6 3 (0.0247444,0) (0.884563,0) 4.6 4 (0.0255043,0) (0.2531,0) 4.6 5 (0.016727,0) (0.228951,0) 4.6 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (0.999998,0) (1.51226,0) 4.6 2 (1,0) (1.06684,0) 4.6 3 (1,0) (2.32223,0) 4.6 4 (1,0) (1.87681,0) 4.6 5 (1,0) (1.86997,0) 4.6 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255043,0) (0.2531,0) 4.6 3 (0.0247444,0) (0.884564,0) 4.6 2 (0.0247444,0) (0.256869,0) 4.6 1 (0.0255041,0) (0.0828816,0) 4.7 0 (0.0167271,0) (0.0599538,0) 4.7 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.87681,0) 4.6 3 (1,0) (2.32223,0) 4.6 2 (1,0) (1.06684,0) 4.6 1 (1,0) (1.48473,0) 4.7 0 (1,0) (1.50885,0) 4.7 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.0828816,0) 4.7 2 (0.0247444,0) (0.242178,0) 4.7 3 (0.0247444,0) (0.802324,0) 4.7 4 (0.0255041,0) (0.292692,0) 4.7 5 (0.0167269,0) (0.245636,0) 4.7 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.48473,0) 4.7 2 (1,0) (1.13439,0) 4.7 3 (1,0) (2.25468,0) 4.7 4 (1,0) (1.90434,0) 4.7 5 (1,0) (1.88022,0) 4.7 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255041,0) (0.292692,0) 4.7 3 (0.0247444,0) (0.802324,0) 4.7 2 (0.0247444,0) (0.25308,0) 4.8 1 (0.0255042,0) (0.101017,0) 4.8 0 (0.0167271,0) (0.0659678,0) 4.8 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.90434,0) 4.7 3 (0.999999,0) (2.25468,0) 4.7 2 (1,0) (1.25052,0) 4.8 1 (1,0) (1.44825,0) 4.8 0 (1,0) (1.49021,0) 4.8 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.101017,0) 4.8 2 (0.0247444,0) (0.25308,0) 4.8 3 (0.0247444,0) (0.697091,0) 4.8 4 (0.0255043,0) (0.347299,0) 4.8 5 (0.016727,0) (0.270295,0) 4.8 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.44825,0) 4.8 2 (1,0) (1.25052,0) 4.8 3 (1,0) (2.13855,0) 4.8 4 (1,0) (1.94082,0) 4.8 5 (0.999999,0) (1.89886,0) 4.8 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255043,0) (0.347299,0) 4.8 3 (0.0247444,0) (0.597495,0) 4.9 2 (0.0247444,0) (0.286243,0) 4.9 1 (0.0255042,0) (0.111462,0) 4.9 0 (0.016727,0) (0.0701254,0) 4.9 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (1.94082,0) 4.8 3 (0.999999,0) (2.00579,0) 4.9 2 (0.999999,0) (1.38328,0) 4.9 1 (0.999999,0) (1.40255,0) 4.9 0 (0.999999,0) (1.46917,0) 4.9 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.111462,0) 4.9 2 (0.0247444,0) (0.286243,0) 4.9 3 (0.0247444,0) (0.597496,0) 4.9 4 (0.0255042,0) (0.403444,0) 4.9 5 (0.016727,0) (0.29549,0) 4.9 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (0.999999,0) (1.40255,0) 4.9 2 (1,0) (1.38328,0) 4.9 3 (1,0) (2.00579,0) 4.9 4 (1,0) (1.98652,0) 4.9 5 (1,0) (1.9199,0) 4.9 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.440177,0) 5 3 (0.0247444,0) (0.519301,0) 5 2 (0.0247444,0) (0.315348,0) 5 1 (0.0255042,0) (0.106549,0) 5 0 (0.016727,0) (0.0738914,0) 5 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.02816,0) 5 3 (1,0) (1.89849,0) 5 2 (1,0) (1.49058,0) 5 1 (1,0) (1.36091,0) 5 0 (1,0) (1.45006,0) 5 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.106549,0) 5 2 (0.0247444,0) (0.315349,0) 5 3 (0.0247444,0) (0.519302,0) 5 4 (0.0255042,0) (0.449561,0) 5.1 5 (0.016727,0) (0.345437,0) 5.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.36091,0) 5 2 (1,0) (1.49058,0) 5 3 (1,0) (1.89849,0) 5 4 (1,0) (2.0501,0) 5.1 5 (1,0) (1.95944,0) 5.1 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.449561,0) 5.1 3 (0.0247444,0) (0.458097,0) 5.1 2 (0.0247444,0) (0.322945,0) 5.1 1 (0.0255041,0) (0.0939918,0) 5.1 0 (0.016727,0) (0.0805304,0) 5.1 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.0501,0) 5.1 3 (1,0) (1.82969,0) 5.1 2 (0.999999,0) (1.55938,0) 5.1 1 (1,0) (1.33897,0) 5.1 0 (1,0) (1.42963,0) 5.1 SuperDensity(Weight of the timeVector)=(1.69453,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255041,0) (0.0939918,0) 5.1 2 (0.0247444,0) (0.322945,0) 5.1 3 (0.0247444,0) (0.402994,0) 5.2 4 (0.0255042,0) (0.441642,0) 5.2 5 (0.016727,0) (0.385863,0) 5.2 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.33897,0) 5.1 2 (0.999999,0) (1.55938,0) 5.1 3 (1,0) (1.77735,0) 5.2 4 (1,0) (2.04898,0) 5.2 5 (1,0) (1.98916,0) 5.2 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.441642,0) 5.2 3 (0.0247444,0) (0.402994,0) 5.2 2 (0.0247444,0) (0.320179,0) 5.2 1 (0.0255042,0) (0.0872023,0) 5.2 0 (0.016727,0) (0.0912396,0) 5.2 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.04898,0) 5.2 3 (0.999999,0) (1.77735,0) 5.2 2 (1,0) (1.61172,0) 5.2 1 (1,0) (1.3401,0) 5.2 0 (1,0) (1.39991,0) 5.2 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.0872023,0) 5.2 2 (0.0247444,0) (0.330602,0) 5.3 3 (0.0247444,0) (0.350138,0) 5.3 4 (0.0255042,0) (0.428713,0) 5.3 5 (0.016727,0) (0.440674,0) 5.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.3401,0) 5.2 2 (0.999999,0) (1.675,0) 5.3 3 (1,0) (1.71407,0) 5.3 4 (1,0) (2.0347,0) 5.3 5 (1,0) (2.03198,0) 5.3 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 4 (0.0255042,0) (0.428713,0) 5.3 3 (0.0247444,0) (0.350138,0) 5.3 2 (0.0247444,0) (0.330603,0) 5.3 1 (0.0255042,0) (0.0885501,0) 5.3 0 (0.016727,0) (0.103234,0) 5.3 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 4 (1,0) (2.0347,0) 5.3 3 (1,0) (1.71407,0) 5.3 2 (1,0) (1.675,0) 5.3 1 (1,0) (1.35437,0) 5.3 0 (1,0) (1.3571,0) 5.3 SuperDensity(Weight of the timeVector)=(1.69454,0) #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(0,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(0,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(1,0) site nupNdown(gs) nupNdown(timevector) time 1 (0.0255042,0) (0.0873716,0) 5.4 2 (0.0247444,0) (0.360175,0) 5.4 #Using Matrix A: #A(0,0)=(0,0) #A(0,1)=(0,0) #A(0,2)=(0,0) #A(0,3)=(0,0) #A(1,0)=(0,0) #A(1,1)=(1,0) #A(1,2)=(0,0) #A(1,3)=(0,0) #A(2,0)=(0,0) #A(2,1)=(0,0) #A(2,2)=(1,0) #A(2,3)=(0,0) #A(3,0)=(0,0) #A(3,1)=(0,0) #A(3,2)=(0,0) #A(3,3)=(2,0) site nup+ndown(gs) nup+ndown(timevector) time 1 (1,0) (1.37183,0) 5.4 2 (1,0) (1.75045,0) 5.4 Fri May 13 10:49:00 PDT 2011 dmrgpp-6.02/TestSuite/oracles/raw10.txt000066400000000000000000001300031414604301300177770ustar00rootroot00000000000000 ALL OPERATORS HAVE BEEN APPLIED #Sites=15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 #Time=0 OperatorC: 16 16 (0.287124,0) (-1.63952e-07,0) (-0.028541,0) (0.00332886,0) (1.97209e-06,0) (9.35802e-07,0) (0.00134204,0) (-0.00149035,0) (-0.000926052,0) (-2.02044e-05,0) (0.000231899,0) (-0.000252131,0) (-0.000258219,0) (-0.000104661,0) (5.07761e-05,0) (-5.95844e-05,0) (0,0) (0.287126,0) (4.62599e-07,0) (-0.0702856,0) (-7.05798e-07,0) (9.93317e-07,0) (0.00130368,0) (-0.00440325,0) (-0.0037985,0) (-0.0110681,0) (-0.000293852,0) (0.00224404,0) (4.2582e-05,0) (0.0101343,0) (0.00126874,0) (-0.00148337,0) (0,0) (0,0) (0.287125,0) (-0.0140605,0) (-8.30901e-07,0) (5.01231e-07,0) (-0.00385252,0) (0.00384011,0) (0.00208749,0) (0.000115252,0) (-0.000584914,0) (0.000682814,0) (0.000599307,0) (0.000262819,0) (-0.000107685,0) (0.000127123,0) (0,0) (0,0) (0,0) (0.287125,0) (6.52524e-08,0) (-1.23067e-06,0) (0.0035675,0) (-0.00795798,0) (-0.00728771,0) (-0.0208446,0) (-0.000978649,0) (0.00476301,0) (0.000443783,0) (0.0157227,0) (0.00194538,0) (-0.002268,0) (0,0) (0,0) (0,0) (0,0) (0.574251,0) (-3.37152e-08,0) (-5.02349e-06,0) (-0.00122119,0) (5.06125e-05,0) (-0.00081078,0) (-0.000101733,0) (-0.000992118,0) (3.06068e-05,0) (0.0013966,0) (1.47395e-05,0) (-1.84686e-05,0) (0,0) (0,0) (0,0) (0,0) (0,0) (1.72223e-08,0) (0.000281442,0) (0.0052589,0) (-0.000386448,0) (0.00294715,0) (0.000236182,0) (2.26323e-05,0) (-3.55514e-05,0) (-0.00180388,0) (-3.48249e-05,0) (3.99649e-05,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287123,0) (-0.0831338,0) (-0.0187998,0) (-3.71688e-05,0) (0.00185339,0) (-0.00156777,0) (-0.00260743,0) (5.31877e-05,0) (0.000612816,0) (-0.000712172,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287127,0) (-0.0135792,0) (0.0301881,0) (4.7564e-05,0) (-0.00512932,0) (0.000318647,0) (-0.0186866,0) (-0.00220553,0) (0.00255799,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287119,0) (0.00898269,0) (-0.00445266,0) (0.00418985,0) (0.00460991,0) (0.000104405,0) (-0.00111161,0) (0.00127894,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287128,0) (0.000219161,0) (0.00718997,0) (-0.000177139,0) (0.0236407,0) (0.00244649,0) (-0.00279113,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287121,0) (-0.0297904,0) (-0.0115001,0) (-0.00107469,0) (0.00230239,0) (-0.00261062,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287134,0) (-0.000901602,0) (-0.0364232,0) (-0.00240148,0) (0.00261563,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287129,0) (0.0197179,0) (-0.00647152,0) (0.00703377,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287139,0) (-0.0115421,0) (0.00986844,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.28713,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) #Time=0 OperatorC: 16 16 (0.287125,0) (4.08093e-07,0) (-0.028541,0) (0.000570339,0) (1.10575e-06,0) (-2.92961e-07,0) (-0.00085057,0) (0.0013085,0) (0.000996984,0) (-0.000275221,0) (0.000566911,0) (-0.000337773,0) (-0.000218086,0) (5.27371e-06,0) (-9.89729e-05,0) (0.00011612,0) (0,0) (0.287125,0) (4.74667e-07,0) (-0.0706345,0) (1.25114e-06,0) (-8.23427e-07,0) (0.00288797,0) (0.00084132,0) (-0.00120184,0) (-0.0163638,0) (0.000934283,0) (-0.000936859,0) (-0.00016111,0) (0.013385,0) (-0.00102343,0) (0.00119809,0) (0,0) (0,0) (0.287125,0) (0.0166342,0) (-4.72745e-07,0) (1.14759e-07,0) (0.00244463,0) (-0.00339296,0) (-0.00228477,0) (0.000901833,0) (-0.0013459,0) (0.000628564,0) (0.000514073,0) (-0.000118173,0) (0.000229297,0) (-0.000269726,0) (0,0) (0,0) (0,0) (0.287125,0) (4.2822e-09,0) (2.16695e-09,0) (0.00155331,0) (2.96739e-05,0) (-0.00393668,0) (-0.0271473,0) (0.00167543,0) (-0.000934914,0) (-0.000142919,0) (0.0210721,0) (-0.00156669,0) (0.00183076,0) (0,0) (0,0) (0,0) (0,0) (0.574251,0) (-7.27519e-08,0) (-0.000251227,0) (0.00158063,0) (-1.91021e-05,0) (0.000262715,0) (0.000111434,0) (-0.000142189,0) (4.51524e-06,0) (0.00125253,0) (0.000106389,0) (-0.000123728,0) (0,0) (0,0) (0,0) (0,0) (0,0) (1.72257e-08,0) (-2.6402e-05,0) (-0.00482161,0) (0.000571089,0) (0.00220886,0) (-5.71015e-05,0) (0.000995446,0) (2.30349e-05,0) (-0.000110041,0) (-0.00016345,0) (0.000188987,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287125,0) (0.0834521,0) (0.0177783,0) (0.000659726,0) (0.00602207,0) (-0.00725021,0) (-0.00209425,0) (-0.00151173,0) (-0.000814854,0) (0.000949768,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287124,0) (-6.30704e-05,0) (0.0412835,0) (-0.000800886,0) (0.00319949,0) (0.000188754,0) (-0.0250371,0) (0.00178822,0) (-0.00207753,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287123,0) (0.00386387,0) (-0.0149566,0) (0.0165024,0) (0.003971,0) (0.00232937,0) (0.00150998,0) (-0.00174894,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.28713,0) (-0.00415804,0) (-0.00984455,0) (-0.000176792,0) (0.0317881,0) (-0.00197429,0) (0.00225631,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287124,0) (-0.101592,0) (-0.0104861,0) (-0.00464118,0) (-0.00314346,0) (0.00358832,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287135,0) (-0.00114265,0) (-0.0495391,0) (0.00193425,0) (-0.00210851,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.28713,0) (0.016377,0) (0.00885818,0) (-0.00966478,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287136,0) (0.00935571,0) (-0.00796927,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287131,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) ALL OPERATORS HAVE BEEN APPLIED #Sites=15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 #Time=0 OperatorN: 16 16 (0.861019,0) (0.359323,0) (0.573663,0) (0.523165,0) (1.14875,0) (3.12291e-08,0) (0.569613,0) (0.562853,0) (0.573941,0) (0.567565,0) (0.573927,0) (0.568798,0) (0.570136,0) (0.570523,0) (0.574217,0) (0.571298,0) (0,0) (0.861354,0) (0.505525,0) (0.573574,0) (1.14849,0) (3.17377e-08,0) (0.572536,0) (0.573919,0) (0.573773,0) (0.574149,0) (0.574128,0) (0.574192,0) (0.574202,0) (0.574219,0) (0.574252,0) (0.574232,0) (0,0) (0,0) (0.860412,0) (0.388237,0) (1.1479,0) (3.30301e-08,0) (0.568267,0) (0.56118,0) (0.573818,0) (0.567343,0) (0.573935,0) (0.56868,0) (0.570337,0) (0.570565,0) (0.574254,0) (0.571297,0) (0,0) (0,0) (0,0) (0.849001,0) (1.14887,0) (3.26991e-08,0) (0.553844,0) (0.571088,0) (0.572684,0) (0.576313,0) (0.578797,0) (0.576313,0) (0.575549,0) (0.577718,0) (0.579794,0) (0.579098,0) (0,0) (0,0) (0,0) (0,0) (2.297,0) (5.31388e-08,0) (1.1472,0) (1.14035,0) (1.13933,0) (1.13595,0) (1.13162,0) (1.13782,0) (1.14102,0) (1.13501,0) (1.13155,0) (1.13159,0) (0,0) (0,0) (0,0) (0,0) (0,0) (4.55934e-08,0) (0.000815953,0) (0.00648819,0) (0.00890053,0) (0.0122032,0) (0.016857,0) (0.0108042,0) (0.00742232,0) (0.0133903,0) (0.0169674,0) (0.0168761,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.847467,0) (0.415453,0) (0.568294,0) (0.533318,0) (0.567539,0) (0.549924,0) (0.557062,0) (0.557092,0) (0.568579,0) (0.559089,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.860619,0) (0.488373,0) (0.572252,0) (0.568412,0) (0.573508,0) (0.57356,0) (0.573936,0) (0.574066,0) (0.574009,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861285,0) (0.441684,0) (0.572952,0) (0.545859,0) (0.558047,0) (0.559863,0) (0.574195,0) (0.564282,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861217,0) (0.484223,0) (0.572624,0) (0.572675,0) (0.574059,0) (0.573572,0) (0.574148,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861357,0) (0.443823,0) (0.54451,0) (0.546575,0) (0.574128,0) (0.558612,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861331,0) (0.550677,0) (0.573826,0) (0.570457,0) (0.5742,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861386,0) (0.424774,0) (0.574059,0) (0.539448,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861371,0) (0.501625,0) (0.573869,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.86139,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) ALL OPERATORS HAVE BEEN APPLIED #Sites=15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OperatorSz: 16 16 (0.28748,0) (-0.214926,0) (-0.00422855,0) (-0.0481546,0) (-4.59e-09,0) (-2.22036e-09,0) (0.00215806,0) (-0.00881281,0) (-0.00209407,0) (-0.00836979,0) (-0.0067651,0) (-0.00502065,0) (-0.00374574,0) (-0.00364276,0) (-0.000391881,0) (-0.0026475,0) (0,0) (0.28715,0) (-0.063913,0) (-4.19232e-05,0) (-4.74815e-09,0) (-2.17959e-09,0) (-0.00171286,0) (9.23897e-05,0) (-0.000417446,0) (2.95091e-05,0) (-2.27668e-05,0) (2.04107e-05,0) (-7.77002e-06,0) (2.27215e-05,0) (-6.10017e-06,0) (1.51932e-05,0) (0,0) (0,0) (0.288087,0) (-0.18848,0) (-4.26401e-09,0) (-2.28445e-09,0) (0.00386042,0) (-0.010002,0) (-0.00229164,0) (-0.00908074,0) (-0.0069153,0) (-0.00513704,0) (-0.00380871,0) (-0.0036379,0) (-0.00039375,0) (-0.00268733,0) (0,0) (0,0) (0,0) (0.2995,0) (-7.1523e-10,0) (-1.90044e-09,0) (-0.0257362,0) (0.00233852,0) (-0.00532858,0) (0.00111615,0) (4.5576e-05,0) (0.000955976,0) (0.000311968,0) (0.000741995,0) (-7.26293e-05,0) (0.000561391,0) (0,0) (0,0) (0,0) (0,0) (3.16442e-08,0) (-2.12481e-09,0) (-2.35292e-05,0) (-1.04582e-05,0) (-4.40053e-05,0) (9.7457e-06,0) (4.28076e-06,0) (7.69424e-06,0) (5.48695e-07,0) (6.22842e-06,0) (-1.56822e-07,0) (4.82907e-06,0) (0,0) (0,0) (0,0) (0,0) (0,0) (2.33025e-08,0) (2.50408e-06,0) (-0.000187461,0) (-1.08126e-05,0) (-0.00017613,0) (-0.000278071,0) (-0.000173844,0) (-7.23086e-05,0) (-7.67824e-05,0) (-2.06154e-05,0) (-6.99188e-05,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.30103,0) (-0.165418,0) (-0.00494497,0) (-0.0426272,0) (-0.0301099,0) (-0.0192095,0) (-0.0152384,0) (-0.0132951,0) (-0.00137936,0) (-0.00835131,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287884,0) (-0.0767934,0) (-0.00144238,0) (-0.000617078,0) (2.65072e-05,0) (-0.000254424,0) (0.00014353,0) (-0.0001557,0) (6.52887e-05,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287198,0) (-0.123196,0) (-0.0332454,0) (-0.0270378,0) (-0.0146983,0) (-0.0144977,0) (-0.00129356,0) (-0.00874903,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287299,0) (-0.0214669,0) (-0.000702131,0) (-0.00183213,0) (-4.9105e-05,0) (-0.000615764,0) (-4.91082e-05,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287133,0) (-0.135559,0) (-0.0267247,0) (-0.0277122,0) (-0.00201967,0) (-0.0137339,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287206,0) (-0.0296319,0) (-0.000493484,0) (-0.00335682,0) (-0.000429528,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287131,0) (-0.149204,0) (-0.00441046,0) (-0.0305517,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287179,0) (-0.0637665,0) (-0.00909285,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287132,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) ALL OPERATORS HAVE BEEN APPLIED #Sites=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #Time=0.3 OperatorC: 16 16 (0.287144,0) (-0.245096,0) (1.0063e-05,0) (0.100601,0) (-0.0182126,0) (0.0127892,0) (-0.0186757,0) (0.020254,0) (-0.0365373,0) (0.0235688,0) (-0.00948385,0) (0.00289171,0) (0.0113951,0) (-0.00721764,0) (-0.00209647,0) (0.0199298,0) (0,0) (0.28713,0) (-0.144779,0) (-0.000430474,0) (-0.0171473,0) (-0.00113074,0) (-0.0010414,0) (0.000647254,0) (-9.81449e-05,0) (0.000266873,0) (-0.00126362,0) (0.000332349,0) (-0.000997987,0) (-0.000189364,0) (-0.00117017,0) (9.21551e-05,0) (0,0) (0,0) (0.28714,0) (-0.211411,0) (0.0231299,0) (-0.0148866,0) (0.0200862,0) (-0.0220495,0) (0.0387067,0) (-0.0251677,0) (0.00982963,0) (-0.00304475,0) (-0.0118474,0) (0.00751218,0) (0.00215415,0) (-0.020733,0) (0,0) (0,0) (0,0) (0.287128,0) (0.0766976,0) (0.00306399,0) (0.00267405,0) (-0.00155431,0) (0.000242028,0) (-0.000656423,0) (0.00293258,0) (-0.000732861,0) (0.00234576,0) (0.000474246,0) (0.00271569,0) (-0.000206832,0) (0,0) (0,0) (0,0) (0,0) (0.287135,0) (0.0251663,0) (-0.0238106,0) (0.0272033,0) (-0.0436818,0) (0.0290716,0) (-0.0102986,0) (0.00330811,0) (0.0127238,0) (-0.00804601,0) (-0.0022491,0) (0.0222006,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287123,0) (-0.00783119,0) (0.00338789,0) (-0.000709006,0) (0.00121742,0) (-0.00538119,0) (0.0014631,0) (-0.00441951,0) (-0.000935714,0) (-0.00512016,0) (0.000373397,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287131,0) (-0.0499405,0) (0.0552498,0) (-0.0386693,0) (0.010887,0) (-0.00401926,0) (-0.0140099,0) (0.00897893,0) (0.00234375,0) (-0.0245875,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287125,0) (0.00408007,0) (-0.00238995,0) (0.00975997,0) (-0.00288944,0) (0.00907497,0) (0.00241483,0) (0.00999303,0) (-0.000567588,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287119,0) (0.0829775,0) (-0.0107354,0) (0.00464202,0) (0.0139611,0) (-0.00993856,0) (-0.00191621,0) (0.0269663,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.276257,0) (-0.0158312,0) (0.00448192,0) (-0.0343729,0) (-0.0173352,0) (-0.0278487,0) (-0.000434266,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.0332618,0) (0.0878627,0) (-0.0055649,0) (0.00449353,0) (0.00241844,0) (-0.00336887,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.540976,0) (-0.044407,0) (-0.0450992,0) (-0.0176039,0) (-0.00381944,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.29801,0) (-0.0257076,0) (-0.0101594,0) (0.0796147,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287649,0) (-0.0934478,0) (0.0114453,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287137,0) (-0.248769,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287146,0) #Time=0.3 OperatorC: 16 16 (0.287138,0) (-0.245099,0) (5.87425e-06,0) (0.100595,0) (0.000375806,0) (0.0215954,0) (0.00628542,0) (0.0203868,0) (-0.0203644,0) (0.0165428,0) (0.00490128,0) (0.00476017,0) (-0.0163629,0) (0.00272445,0) (-0.00623952,0) (0.0144807,0) (0,0) (0.287131,0) (-0.144777,0) (-0.000405527,0) (0.0266444,0) (-0.00241462,0) (-0.00532449,0) (0.000135172,0) (0.00173492,0) (0.000118898,0) (-0.000557745,0) (-0.00128896,0) (-0.00107151,0) (-0.000197909,0) (-0.000793785,0) (0.000300703,0) (0,0) (0,0) (0.287136,0) (-0.211416,0) (-0.000502226,0) (-0.024488,0) (-0.00685549,0) (-0.0227988,0) (0.021685,0) (-0.0176301,0) (-0.00537597,0) (-0.00492984,0) (0.0172377,0) (-0.0028182,0) (0.00643225,0) (-0.0150736,0) (0,0) (0,0) (0,0) (0.28713,0) (-0.127115,0) (0.00653363,0) (0.0149484,0) (-0.000354666,0) (-0.00425048,0) (-0.000297222,0) (0.00130907,0) (0.00297604,0) (0.00250418,0) (0.000483271,0) (0.00184766,0) (-0.000659877,0) (0,0) (0,0) (0,0) (0,0) (0.287135,0) (0.0372043,0) (0.00845505,0) (0.0303785,0) (-0.0249316,0) (0.020245,0) (0.00670326,0) (0.00524365,0) (-0.0190779,0) (0.00298985,0) (-0.00674604,0) (0.0161581,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287126,0) (-0.0600842,0) (0.000875364,0) (0.00958876,0) (0.000530998,0) (-0.00236625,0) (-0.00565071,0) (-0.00473991,0) (-0.000974689,0) (-0.00348916,0) (0.00116961,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287133,0) (-0.069614,0) (0.0328453,0) (-0.0266597,0) (-0.0102198,0) (-0.00552894,0) (0.0229094,0) (-0.00327793,0) (0.00709447,0) (-0.0179339,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287131,0) (-0.0361291,0) (-0.000977495,0) (0.00473686,0) (0.011063,0) (0.00964097,0) (0.00249927,0) (0.00677756,0) (-0.00179805,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287114,0) (0.0560339,0) (0.0294523,0) (0.00567511,0) (-0.0319016,0) (0.00316989,0) (-0.00601557,0) (0.0198388,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.276258,0) (0.0289279,0) (-0.0267477,0) (-0.0212818,0) (-0.0177931,0) (-0.0192441,0) (-0.00528091,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.0332631,0) (-0.0778745,0) (-0.00600799,0) (-0.00143392,0) (0.00776881,0) (-0.00237391,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.540977,0) (-0.0261904,0) (-0.0370532,0) (-0.0075591,0) (-0.0204342,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.29801,0) (0.0307882,0) (-0.0266594,0) (0.0563075,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287646,0) (-0.066918,0) (0.0336551,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287135,0) (-0.248769,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287151,0) ALL OPERATORS HAVE BEEN APPLIED #Sites=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #Time=0.3 OperatorN: 16 16 (0.861396,0) (0.365065,0) (0.574251,0) (0.539236,0) (0.571923,0) (0.553452,0) (0.562,0) (0.560624,0) (0.570425,0) (0.540428,0) (0.0657215,0) (1.08282,0) (0.5924,0) (0.570769,0) (0.573684,0) (0.571852,0) (0,0) (0.86139,0) (0.501238,0) (0.574215,0) (0.57055,0) (0.574001,0) (0.573822,0) (0.574189,0) (0.574075,0) (0.552436,0) (0.0665123,0) (1.08194,0) (0.595995,0) (0.575247,0) (0.574261,0) (0.57427,0) (0,0) (0,0) (0.861372,0) (0.418104,0) (0.571342,0) (0.543528,0) (0.559673,0) (0.557597,0) (0.569955,0) (0.538726,0) (0.065629,0) (1.08291,0) (0.591964,0) (0.570281,0) (0.573617,0) (0.571608,0) (0,0) (0,0) (0,0) (0.861384,0) (0.490812,0) (0.572569,0) (0.570811,0) (0.573906,0) (0.573259,0) (0.552309,0) (0.0664751,0) (1.08184,0) (0.596015,0) (0.575207,0) (0.57423,0) (0.574241,0) (0,0) (0,0) (0,0) (0,0) (0.861333,0) (0.440635,0) (0.551549,0) (0.546367,0) (0.568695,0) (0.534298,0) (0.0654263,0) (1.08299,0) (0.591188,0) (0.569448,0) (0.573489,0) (0.571202,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861363,0) (0.528324,0) (0.572836,0) (0.569266,0) (0.551806,0) (0.0663502,0) (1.08148,0) (0.596187,0) (0.57515,0) (0.574148,0) (0.574205,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861225,0) (0.441957,0) (0.56518,0) (0.520541,0) (0.0648831,0) (1.08304,0) (0.58971,0) (0.567885,0) (0.573276,0) (0.570574,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861306,0) (0.505333,0) (0.549877,0) (0.0658978,0) (1.08015,0) (0.596498,0) (0.574708,0) (0.573831,0) (0.573969,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.860631,0) (0.400124,0) (0.0613456,0) (1.08152,0) (0.585121,0) (0.564876,0) (0.571915,0) (0.569077,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.806433,0) (0.054916,0) (1.02633,0) (0.555254,0) (0.538067,0) (0.524101,0) (0.522585,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.0702775,0) (0.0953149,0) (0.130538,0) (0.0920752,0) (0.149813,0) (0.149035,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (2.10108,0) (1.06176,0) (1.0464,0) (0.998163,0) (0.995108,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.894816,0) (0.438772,0) (0.614565,0) (0.587221,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.86301,0) (0.519107,0) (0.56392,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861375,0) (0.358771,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861104,0) ALL OPERATORS HAVE BEEN APPLIED #Sites=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 OperatorSz: 16 16 (0.287169,0) (-0.209215,0) (-0.00019679,0) (-0.0359225,0) (-0.00151301,0) (-0.0312186,0) (-0.0110467,0) (-0.0130746,0) (-0.00775531,0) (-0.00981502,0) (-0.000724007,0) (-0.000500635,0) (-0.00168438,0) (-0.00309499,0) (-0.0010616,0) (-0.00175751,0) (0,0) (0.287132,0) (-0.0727979,0) (-0.000600745,0) (-0.00386094,0) (-0.000245093,0) (-0.000480597,0) (-3.56072e-05,0) (-0.000130359,0) (-3.55497e-05,0) (-1.22007e-05,0) (-7.85066e-06,0) (-3.28292e-05,0) (-2.48909e-05,0) (-1.28032e-05,0) (-1.59574e-05,0) (0,0) (0,0) (0.287179,0) (-0.154726,0) (-0.00221683,0) (-0.0410872,0) (-0.0131805,0) (-0.0160977,0) (-0.00878622,0) (-0.0113591,0) (-0.000810432,0) (-0.000545417,0) (-0.00187242,0) (-0.0033933,0) (-0.00115045,0) (-0.00193591,0) (0,0) (0,0) (0,0) (0.287132,0) (-0.0846581,0) (-0.00166016,0) (-0.00374991,0) (-0.000140802,0) (-0.000686543,0) (-1.37262e-05,0) (-5.1368e-05,0) (-4.42427e-05,0) (-0.000131704,0) (-2.71336e-05,0) (-3.72694e-05,0) (-3.08376e-05,0) (0,0) (0,0) (0,0) (0,0) (0.287207,0) (-0.112875,0) (-0.0206589,0) (-0.0273898,0) (-0.0114715,0) (-0.0155711,0) (-0.000997396,0) (-0.000652899,0) (-0.00222476,0) (-0.00390671,0) (-0.00128985,0) (-0.00224757,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287135,0) (-0.0497258,0) (-0.000419531,0) (-0.00338114,0) (5.64311e-06,0) (-0.000175895,0) (-0.000136579,0) (-0.000460428,0) (1.37635e-05,0) (-0.000100345,0) (-4.094e-05,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287302,0) (-0.135131,0) (-0.0194574,0) (-0.0295515,0) (-0.0014847,0) (-0.000887161,0) (-0.00304841,0) (-0.00480904,0) (-0.00149927,0) (-0.00277524,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287206,0) (-0.0441078,0) (0.000229631,0) (-0.000678067,0) (-0.000519258,0) (-0.00184872,0) (0.00023262,0) (-0.000340715,0) (-3.01425e-05,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287836,0) (-0.161968,0) (-0.0047254,0) (-0.00179521,0) (-0.00590104,0) (-0.0055458,0) (-0.00126634,0) (-0.00343718,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.298597,0) (-0.00882451,0) (-0.00369398,0) (-0.00566007,0) (0.00162596,0) (-0.00379995,0) (0.00125525,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.0627723,0) (-0.0339609,0) (-0.00154756,0) (-0.000340294,0) (-0.000629617,0) (4.12547e-05,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.0628219,0) (-0.00817839,0) (-0.00942921,0) (-0.00288578,0) (-0.00187167,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.297224,0) (-0.18011,0) (-0.0183678,0) (-0.0241647,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287579,0) (-0.0369544,0) (-0.0278687,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287168,0) (-0.215532,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287488,0) ALL OPERATORS HAVE BEEN APPLIED #Sites=15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 #Time=0.6 OperatorC: 16 16 (0.287146,0) (4.52636e-06,0) (-0.0275881,0) (0.00565788,0) (-0.00120105,0) (-0.00129474,0) (0.00164112,0) (-0.000888896,0) (-0.000541691,0) (0.000284061,0) (-0.000128013,0) (0.000425467,0) (7.63654e-05,0) (-8.53133e-05,0) (4.1689e-05,0) (-4.27081e-05,0) (0,0) (0.287137,0) (-0.000251375,0) (-0.0558858,0) (0.0152127,0) (-0.0101357,0) (0.000217367,0) (0.00678623,0) (-7.44675e-05,0) (0.00294381,0) (0.000850675,0) (-0.00579704,0) (0.000221437,0) (-0.0154145,0) (0.000334483,0) (-0.000417035,0) (0,0) (0,0) (0.287649,0) (-0.041124,0) (0.00780713,0) (0.00282486,0) (-0.00453001,0) (0.00144444,0) (0.000976181,0) (-0.000746622,0) (0.000145962,0) (-0.000644821,0) (-8.63206e-05,0) (0.000915903,0) (-6.13826e-05,0) (6.51755e-05,0) (0,0) (0,0) (0,0) (0.324579,0) (0.0381502,0) (-0.0179722,0) (-0.000993896,0) (0.00749299,0) (-0.000208309,0) (0.00314395,0) (0.0003636,0) (-0.00549625,0) (0.000165913,0) (-0.0120123,0) (0.00041384,0) (-0.000485269,0) (0,0) (0,0) (0,0) (0,0) (0.453815,0) (0.09019,0) (-0.00361552,0) (0.00064449,0) (-0.000664699,0) (-0.00344487,0) (0.000446258,0) (0.000468646,0) (-0.000202368,0) (0.00200369,0) (-0.000235113,0) (0.000265845,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.12039,0) (0.00336948,0) (0.016132,0) (-0.00133695,0) (-0.00896812,0) (0.00230734,0) (-0.00425292,0) (-0.000258505,0) (-0.00157937,0) (-0.000731468,0) (0.00078502,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.249826,0) (0.063217,0) (0.00504666,0) (-0.00638716,0) (0.00295084,0) (-0.00273084,0) (-0.000940169,0) (-0.0002826,0) (-0.000130823,0) (0.000127781,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.283515,0) (0.0010198,0) (-0.00774745,0) (-0.00164698,0) (0.0119801,0) (-0.000828202,0) (0.0275853,0) (-0.000155974,0) (0.000291693,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287007,0) (-0.0919552,0) (0.0111519,0) (-0.0112618,0) (-0.00228727,0) (-0.0017933,0) (-0.000625633,0) (0.000579777,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287165,0) (-0.00775755,0) (-0.0172448,0) (0.000766179,0) (-0.0348093,0) (0.000334263,0) (-0.000484445,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.28719,0) (-0.0645238,0) (-0.00541615,0) (-0.00310784,0) (-0.00123131,0) (0.00111639,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.28712,0) (0.00525733,0) (0.0479253,0) (-0.00038283,0) (0.000470973,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287156,0) (0.00379901,0) (-0.00319956,0) (0.00296065,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287108,0) (-0.0019085,0) (0.00116371,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.28714,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) #Time=0.6 OperatorC: 16 16 (0.287151,0) (6.56498e-06,0) (-0.0275883,0) (0.00249413,0) (-0.00024468,0) (0.000523872,0) (9.79351e-05,0) (-0.00125315,0) (0.0009012,0) (-0.000106513,0) (-0.000174828,0) (0.000535794,0) (4.94275e-05,0) (4.74459e-05,0) (-3.57325e-05,0) (3.44115e-05,0) (0,0) (0.287135,0) (-0.000252074,0) (-0.0542393,0) (-0.012349,0) (-0.00717595,0) (-0.00054573,0) (0.000276529,0) (-0.00101322,0) (-0.00729191,0) (-0.0011086,0) (0.00553758,0) (-0.000943201,0) (0.012909,0) (-0.00049984,0) (0.000410166,0) (0,0) (0,0) (0.287646,0) (-0.0116428,0) (-0.00198172,0) (-0.00138118,0) (-0.000348769,0) (0.00230805,0) (-0.00142263,0) (0.000399842,0) (5.21343e-05,0) (-0.00123541,0) (-7.02659e-05,0) (-0.000555965,0) (7.10906e-05,0) (-6.41375e-05,0) (0,0) (0,0) (0,0) (0.324581,0) (-0.0367538,0) (-0.0118825,0) (-0.00220627,0) (-0.000570622,0) (-0.00148992,0) (-0.0068638,0) (-0.00113985,0) (0.00586764,0) (-0.000727165,0) (0.00994995,0) (-0.000245334,0) (0.000159426,0) (0,0) (0,0) (0,0) (0,0) (0.453821,0) (-0.0222935,0) (0.00187001,0) (0.00494811,0) (0.000219138,0) (-0.000347769,0) (-7.0956e-05,0) (-0.00321172,0) (0.000292458,0) (-0.000682298,0) (7.01449e-05,0) (-3.32576e-05,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.120387,0) (0.00981874,0) (0.0181049,0) (-0.00173933,0) (-0.00663397,0) (0.000946453,0) (-0.00449555,0) (0.000468832,0) (0.00639924,0) (-0.000106304,0) (0.000150214,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.249819,0) (0.0839637,0) (-0.0144106,0) (-0.00338138,0) (0.00266645,0) (-0.00393899,0) (0.000136222,0) (-0.000861636,0) (0.000305725,0) (-0.00025323,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.283514,0) (-0.00763057,0) (0.0186697,0) (0.00110916,0) (-0.012198,0) (0.00160232,0) (-0.0241958,0) (0.000985973,0) (-0.000862603,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287023,0) (-0.0652074,0) (0.0110733,0) (-0.011819,0) (0.000648282,0) (-0.00041118,0) (0.000588227,0) (-0.000463549,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287172,0) (0.00669681,0) (0.023627,0) (-0.00123733,0) (0.0300007,0) (-0.00111123,0) (0.000968747,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.28719,0) (-0.0792864,0) (0.00175602,0) (-0.00132588,0) (0.00114191,0) (-0.000890739,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287115,0) (-0.0044803,0) (-0.0415852,0) (0.00104586,0) (-0.000955574,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287156,0) (-0.0108478,0) (0.00297741,0) (-0.00249779,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.2871,0) (0.00404171,0) (-0.00470563,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287138,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) ALL OPERATORS HAVE BEEN APPLIED #Sites=15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 #Time=0.6 OperatorN: 16 16 (0.861104,0) (0.358771,0) (0.574852,0) (0.60921,0) (0.893864,0) (0.237636,0) (0.490174,0) (0.553184,0) (0.563626,0) (0.568748,0) (0.573165,0) (0.568269,0) (0.572956,0) (0.57092,0) (0.574573,0) (0.57232,0) (0,0) (0.861376,0) (0.50797,0) (0.648588,0) (0.906885,0) (0.24031,0) (0.498334,0) (0.566841,0) (0.5738,0) (0.574566,0) (0.574821,0) (0.57448,0) (0.575642,0) (0.575419,0) (0.576031,0) (0.575846,0) (0,0) (0,0) (0.86301,0) (0.486498,0) (0.890421,0) (0.237265,0) (0.49973,0) (0.559429,0) (0.571917,0) (0.578832,0) (0.587334,0) (0.581159,0) (0.593598,0) (0.590038,0) (0.595737,0) (0.594032,0) (0,0) (0,0) (0,0) (1.01006,0) (1.00422,0) (0.261666,0) (0.559267,0) (0.651971,0) (0.67733,0) (0.700535,0) (0.691079,0) (0.680778,0) (0.707264,0) (0.71272,0) (0.718596,0) (0.717537,0) (0,0) (0,0) (0,0) (0,0) (1.62455,0) (0.268777,0) (0.717707,0) (0.836812,0) (0.78685,0) (0.710265,0) (0.713881,0) (0.754171,0) (0.628104,0) (0.622471,0) (0.593893,0) (0.592967,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.290773,0) (0.234919,0) (0.261256,0) (0.347153,0) (0.425789,0) (0.430634,0) (0.385066,0) (0.51733,0) (0.519037,0) (0.553915,0) (0.550843,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.709908,0) (0.3519,0) (0.426897,0) (0.42385,0) (0.454496,0) (0.447205,0) (0.436576,0) (0.426304,0) (0.43047,0) (0.425073,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.846871,0) (0.551864,0) (0.564497,0) (0.555131,0) (0.561862,0) (0.551934,0) (0.554629,0) (0.551455,0) (0.551442,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.860732,0) (0.43404,0) (0.567072,0) (0.53998,0) (0.564813,0) (0.556719,0) (0.572188,0) (0.56258,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861355,0) (0.496605,0) (0.572475,0) (0.570014,0) (0.573669,0) (0.57342,0) (0.573805,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861623,0) (0.456652,0) (0.559708,0) (0.544656,0) (0.573583,0) (0.558992,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.86125,0) (0.518141,0) (0.573233,0) (0.570591,0) (0.573988,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861489,0) (0.431014,0) (0.572464,0) (0.540458,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861225,0) (0.505149,0) (0.571341,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861418,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) ALL OPERATORS HAVE BEEN APPLIED #Sites=15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OperatorSz: 16 16 (0.287488,0) (-0.215532,0) (-0.00542753,0) (-0.0384609,0) (-0.0088643,0) (-0.00382444,0) (-0.00617694,0) (-0.0101037,0) (-0.0092863,0) (-0.005338,0) (-0.00662334,0) (-0.00434184,0) (-0.00443242,0) (-0.00445946,0) (-0.00198016,0) (-0.000802499,0) (0,0) (0.287168,0) (-0.0614191,0) (0.000197038,0) (-0.000485609,0) (-0.000977481,0) (-0.00081421,0) (-7.32126e-05,0) (-0.000113481,0) (5.63108e-05,0) (-7.02097e-05,0) (1.36178e-05,0) (-0.00012972,0) (-2.24616e-05,0) (-9.01178e-05,0) (2.77694e-05,0) (0,0) (0,0) (0.28758,0) (-0.163523,0) (-0.0199314,0) (-0.00573823,0) (-0.00352469,0) (-0.00760311,0) (-0.00744049,0) (-0.00406039,0) (-0.00514728,0) (-0.00324123,0) (-0.00311378,0) (-0.00309893,0) (-0.00133194,0) (-0.000585382,0) (0,0) (0,0) (0,0) (0.288263,0) (-0.0261745,0) (-0.0139967,0) (-0.0131208,0) (-0.0040151,0) (-0.00203267,0) (-0.0010901,0) (-0.00166691,0) (-0.00112551,0) (-0.0019453,0) (-0.00114261,0) (-0.000971792,0) (-0.000256217,0) (0,0) (0,0) (0,0) (0,0) (0.190727,0) (-0.104791,0) (-0.00852421,0) (-0.00387852,0) (-0.00212092,0) (-0.00156213,0) (-0.00137593,0) (-0.00087704,0) (-0.00202042,0) (-0.00135025,0) (-0.00117172,0) (-5.08576e-05,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.190781,0) (-0.0204664,0) (-0.0267115,0) (-0.0110199,0) (-0.00798171,0) (-0.00708731,0) (-0.00386069,0) (-0.00494585,0) (-0.00440932,0) (-0.00229883,0) (-0.000502534,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.28938,0) (-0.133122,0) (-0.0426069,0) (-0.0215364,0) (-0.0221152,0) (-0.0133823,0) (-0.0105049,0) (-0.0107299,0) (-0.00414791,0) (-0.00167911,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287187,0) (-0.0140289,0) (-0.00036995,0) (-0.00112397,0) (-0.000271433,0) (-0.000596905,0) (-6.73247e-05,0) (-0.000284825,0) (-3.906e-05,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287329,0) (-0.141684,0) (-0.0357527,0) (-0.026604,0) (-0.0187748,0) (-0.0182947,0) (-0.00761252,0) (-0.00263364,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287319,0) (-0.0178524,0) (-0.00171048,0) (-0.00133505,0) (-0.000165084,0) (-0.000357243,0) (-0.000410633,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287137,0) (-0.136306,0) (-0.033097,0) (-0.0320563,0) (-0.0114372,0) (-0.00427542,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287221,0) (-0.0146509,0) (-0.00103173,0) (-0.00107368,0) (-0.00270275,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287135,0) (-0.134766,0) (-0.0251829,0) (-0.00950525,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.28719,0) (-0.0199138,0) (-0.0522184,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287139,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) ALL OPERATORS HAVE BEEN APPLIED #Sites=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #Time=1 OperatorC: 16 16 (0.287111,0) (-0.245115,0) (-3.22688e-05,0) (0.102246,0) (0.0352332,0) (0.000915986,0) (-0.0095118,0) (0.056126,0) (0.0278822,0) (-0.0203388,0) (0.00242477,0) (-0.00917966,0) (0.0104775,0) (0.00670992,0) (-0.00375612,0) (-0.0109692,0) (0,0) (0.287141,0) (-0.143457,0) (-0.00270342,0) (0.0156207,0) (-0.00228479,0) (-0.00886634,0) (-0.000325376,0) (0.00128612,0) (-0.00078579,0) (0.000155756,0) (-0.000929636,0) (0.00105648,0) (7.4096e-05,0) (0.00101877,0) (0.000102975,0) (0,0) (0,0) (0.287109,0) (-0.209605,0) (-0.0415549,0) (-0.000181994,0) (0.0103922,0) (-0.0616525,0) (-0.0298829,0) (0.0215706,0) (-0.00231078,0) (0.00953148,0) (-0.0109027,0) (-0.00704979,0) (0.00384207,0) (0.0115706,0) (0,0) (0,0) (0,0) (0.287156,0) (-0.0749908,0) (0.00621247,0) (0.0246716,0) (0.000774787,0) (-0.00335177,0) (0.00194754,0) (-0.000504161,0) (0.00217794,0) (-0.00246321,0) (-0.000166478,0) (-0.00256588,0) (-0.000220717,0) (0,0) (0,0) (0,0) (0,0) (0.287127,0) (-0.00625846,0) (-0.0130777,0) (0.0784894,0) (0.0348227,0) (-0.0242982,0) (0.001817,0) (-0.0101928,0) (0.0116373,0) (0.00768974,0) (-0.00384091,0) (-0.012781,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287254,0) (-0.0975981,0) (-0.00212977,0) (0.00814328,0) (-0.0036033,0) (0.00174724,0) (-0.00402782,0) (0.00476378,0) (0.000304834,0) (0.00541175,0) (0.00038949,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.286774,0) (-0.157551,0) (-0.0473324,0) (0.0291501,0) (0.00196167,0) (0.0103406,0) (-0.0120431,0) (-0.00811686,0) (0.00297513,0) (0.014532,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.28548,0) (-0.0422286,0) (0.00526911,0) (-0.00793874,0) (0.00673128,0) (-0.0132221,0) (-0.000642089,0) (-0.0143328,0) (-0.000207771,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.27104,0) (-0.0536754,0) (-0.0271883,0) (-0.0154911,0) (0.022406,0) (0.00426427,0) (0.00159387,0) (-0.0117511,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.213235,0) (-0.0240005,0) (0.00679005,0) (0.0461076,0) (0.00161603,0) (0.00780016,0) (0.00555195,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.34673,0) (0.0759376,0) (-0.0949982,0) (-0.011849,0) (0.00787314,0) (0.00569202,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.22803,0) (0.00892837,0) (0.00260423,0) (0.0434387,0) (-0.00731896,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.362882,0) (0.0236232,0) (-0.0124388,0) (-0.0417039,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.312545,0) (0.0300291,0) (0.0303826,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.29058,0) (-0.247064,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.289317,0) #Time=1 OperatorC: 16 16 (0.287103,0) (-0.245117,0) (-4.31448e-05,0) (0.102105,0) (0.00240203,0) (-0.000875422,0) (0.0264966,0) (0.0503178,0) (-0.0138645,0) (0.0113918,0) (-0.00892431,0) (0.0113291,0) (0.0109003,0) (0.00322456,0) (0.0151575,0) (0.00209477,0) (0,0) (0.287139,0) (-0.143455,0) (-0.002553,0) (0.0260753,0) (0.000310554,0) (-0.00641912,0) (-0.000679956,0) (0.00209031,0) (0.000527219,0) (0.000411721,0) (0.000565145,0) (-0.000158995,0) (0.000424279,0) (-0.000286563,0) (-0.000757414,0) (0,0) (0,0) (0.287098,0) (-0.209704,0) (-0.0031034,0) (0.00100578,0) (-0.02918,0) (-0.0553308,0) (0.0149271,0) (-0.0120825,0) (0.00927124,0) (-0.0118834,0) (-0.0112694,0) (-0.00340056,0) (-0.0157325,0) (-0.00225655,0) (0,0) (0,0) (0,0) (0.287158,0) (-0.123311,0) (-0.000788273,0) (0.0176332,0) (0.00167576,0) (-0.0050618,0) (-0.00120706,0) (-0.000964873,0) (-0.00139883,0) (0.000239664,0) (-0.000970829,0) (0.00076364,0) (0.00183903,0) (0,0) (0,0) (0,0) (0,0) (0.287118,0) (-0.00216129,0) (0.0376673,0) (0.0706976,0) (-0.0173903,0) (0.0138148,0) (-0.00990956,0) (0.0130382,0) (0.0119384,0) (0.00372218,0) (0.0165653,0) (0.00264214,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287265,0) (-0.068893,0) (-0.00437244,0) (0.0110777,0) (0.001933,0) (0.00114714,0) (0.0032641,0) (-0.000454773,0) (0.00192563,0) (-0.0016262,0) (-0.00387359,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.286778,0) (-0.14323,0) (0.0240982,0) (-0.0179588,0) (0.00963347,0) (-0.0143961,0) (-0.0115874,0) (-0.00401163,0) (-0.0161158,0) (-0.00368409,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.285487,0) (-0.0310017,0) (-0.00216819,0) (0.00533902,0) (-0.0123321,0) (0.000347854,0) (-0.00366398,0) (0.00545741,0) (0.00832931,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.271117,0) (0.0368207,0) (0.0033747,0) (0.00708018,0) (0.00238952,0) (0.00424382,0) (0.0111789,0) (0.00014361,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.213848,0) (0.0282018,0) (0.0395764,0) (-0.0229398,0) (-9.22638e-05,0) (-0.0041031,0) (-0.00915281,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.346673,0) (-0.0212446,0) (-0.0174625,0) (-0.0114016,0) (-0.0534338,0) (0.0273144,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.227569,0) (0.0630502,0) (-0.00350935,0) (-0.0318964,0) (-0.000308888,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.362554,0) (0.0275491,0) (0.042409,0) (0.020904,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.312871,0) (0.0113152,0) (-0.0906499,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.290846,0) (-0.247043,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.288915,0) ALL OPERATORS HAVE BEEN APPLIED #Sites=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #Time=1 OperatorN: 16 16 (0.861246,0) (0.364975,0) (0.574102,0) (0.53937,0) (0.569833,0) (0.553989,0) (0.568023,0) (0.55694,0) (0.531265,0) (0.419056,0) (0.688256,0) (0.453727,0) (0.724967,0) (0.621769,0) (0.57939,0) (0.57733,0) (0,0) (0.861419,0) (0.501174,0) (0.573982,0) (0.570657,0) (0.574247,0) (0.572962,0) (0.570871,0) (0.542068,0) (0.427021,0) (0.693344,0) (0.45556,0) (0.7254,0) (0.625354,0) (0.581389,0) (0.578206,0) (0,0) (0,0) (0.86122,0) (0.418054,0) (0.568523,0) (0.544086,0) (0.566812,0) (0.553913,0) (0.52965,0) (0.417945,0) (0.68754,0) (0.453369,0) (0.724925,0) (0.621387,0) (0.579164,0) (0.577234,0) (0,0) (0,0) (0,0) (0.861493,0) (0.495463,0) (0.572464,0) (0.569346,0) (0.570381,0) (0.541842,0) (0.426787,0) (0.693191,0) (0.455435,0) (0.725282,0) (0.625144,0) (0.581265,0) (0.578114,0) (0,0) (0,0) (0,0) (0,0) (0.861273,0) (0.439806,0) (0.562488,0) (0.542759,0) (0.525562,0) (0.415005,0) (0.68591,0) (0.452443,0) (0.724943,0) (0.620724,0) (0.578758,0) (0.577095,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.861918,0) (0.502936,0) (0.569053,0) (0.54136,0) (0.42631,0) (0.693012,0) (0.455188,0) (0.724998,0) (0.624623,0) (0.580853,0) (0.577787,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.85983,0) (0.438751,0) (0.51169,0) (0.406025,0) (0.679387,0) (0.448339,0) (0.7236,0) (0.618605,0) (0.576207,0) (0.575037,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.854408,0) (0.526189,0) (0.419116,0) (0.680668,0) (0.446817,0) (0.713968,0) (0.613755,0) (0.567705,0) (0.56525,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.798078,0) (0.306582,0) (0.602997,0) (0.391598,0) (0.651921,0) (0.559138,0) (0.512486,0) (0.512428,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.587029,0) (0.490037,0) (0.290614,0) (0.516008,0) (0.475823,0) (0.470811,0) (0.461485,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (1.11423,0) (0.470014,0) (0.814766,0) (0.722473,0) (0.727913,0) (0.714101,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.635087,0) (0.545928,0) (0.411614,0) (0.400539,0) (0.408511,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (1.18959,0) (0.695858,0) (0.683087,0) (0.700225,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.967015,0) (0.63506,0) (0.606701,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.87554,0) (0.372634,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.869565,0) ALL OPERATORS HAVE BEEN APPLIED #Sites=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 OperatorSz: 16 16 (0.287182,0) (-0.209244,0) (-0.00867822,0) (-0.0422911,0) (-0.000376388,0) (-0.0231313,0) (-0.0129385,0) (-0.0157999,0) (-0.00979353,0) (-0.00771191,0) (-0.00389986,0) (-0.00223746,0) (-0.00260723,0) (-0.00224201,0) (-0.000591942,0) (-0.00109675,0) (0,0) (0.28714,0) (-0.064317,0) (-0.00122433,0) (-0.00405778,0) (-0.000269802,0) (-0.000306503,0) (-7.71108e-05,0) (-8.82776e-05,0) (-6.72892e-05,0) (-3.33421e-05,0) (-4.91784e-05,0) (-2.90655e-05,0) (-3.69661e-05,0) (-8.81265e-06,0) (-2.09844e-05,0) (0,0) (0,0) (0.287193,0) (-0.147887,0) (-0.000541711,0) (-0.0329069,0) (-0.0154696,0) (-0.0190607,0) (-0.0111896,0) (-0.00885079,0) (-0.00444011,0) (-0.00262361,0) (-0.0028042,0) (-0.002412,0) (-0.000669881,0) (-0.00115959,0) (0,0) (0,0) (0,0) (0.287136,0) (-0.0871841,0) (-0.00182251,0) (-0.00258971,0) (-0.000374559,0) (-0.000474844,0) (-0.000305922,0) (-0.00016329,0) (-0.000247729,0) (-0.000108382,0) (-0.00019308,0) (-3.48489e-05,0) (-0.000117293,0) (0,0) (0,0) (0,0) (0,0) (0.287218,0) (-0.129674,0) (-0.0247123,0) (-0.0304035,0) (-0.0148643,0) (-0.0119626,0) (-0.00589047,0) (-0.00365193,0) (-0.0030371,0) (-0.00261615,0) (-0.000844356,0) (-0.0011946,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287121,0) (-0.0422381,0) (-0.000925736,0) (-0.00125723,0) (-0.00100689,0) (-0.000522754,0) (-0.000845576,0) (-0.000123168,0) (-0.000344969,0) (-0.000101456,0) (-0.000251846,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287274,0) (-0.126653,0) (-0.0244952,0) (-0.0210879,0) (-0.0104002,0) (-0.00710586,0) (-0.00338619,0) (-0.00268776,0) (-0.00117815,0) (-0.000978734,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287527,0) (-0.0205267,0) (-0.0056502,0) (-0.0029645,0) (-0.00507108,0) (-0.00130668,0) (-0.00209353,0) (-0.000434847,0) (-0.0013922,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.286236,0) (-0.0765163,0) (-0.0225983,0) (-0.0222061,0) (-0.00327207,0) (-0.00249821,0) (-0.00150822,0) (-0.000547262,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.267137,0) (-0.0368962,0) (-0.0564463,0) (-0.0119343,0) (-0.00820309,0) (-0.000896998,0) (-0.00176427,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.272577,0) (-0.0725257,0) (-0.0411821,0) (-0.0520221,0) (-0.00302705,0) (-0.0251013,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.27611,0) (-0.0506759,0) (-0.0533369,0) (-0.0038793,0) (-0.0117536,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.261283,0) (-0.0839016,0) (-0.00705146,0) (-0.00981772,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.283816,0) (-0.0495019,0) (-0.00898397,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.287311,0) (-0.212422,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0.286898,0) Not found #FERMIONICSIGN in file data10.txt level=0 counter=0 CAUGHT: IoSimple::In::read() Ignore prev. error, if any. It simply means there's no more data CAUGHT: No more data to construct this object There's no more data dmrgpp-6.02/TestSuite/oracles/timeEvolution10.txt000066400000000000000000000510471414604301300220630ustar00rootroot000000000000001 (0.5,0) 0 1 1 0.707107 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 2 (0.5,0) 0 1 1 0.707107 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 3 (0.5,0) 0 1 1 0.707107 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 4 (0.5,0) 0 1 1 0.707107 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 5 (0.5,0) 0 1 1 0.707107 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 6 (0.5,0) 0 1 1 0.707107 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 7 (0.5,0) 0 1 1 0.707107 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 8 (0.5,0) 0 1 1 0.707107 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 9 (0.5,0) 0 1 1 0.707107 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 10 (0.5,0) 0 1 1 0.707107 10 (0.5,0) 0 1 1 1 10 (0.499688,0) 0 1 1 0.999688 10 (0.498752,0) 0 1 1 0.998751 10 (0.4972,0) 0 1 1 0.997193 10 (0.495038,0) 0 1 1 0.995017 11 (0.5,0) 0 1 1 0.707107 11 (0,0) 0 0.978813 0.978813 0 11 (0.000526471,0) 0 0.978813 0.978813 0.0299077 11 (0.0021026,0) 0 0.978813 0.978813 0.0597688 11 (0.00471854,0) 0 0.978813 0.978813 0.0895363 11 (0.00835794,0) 0 0.978813 0.978813 0.119164 12 (0.5,0) 0 1 1 0.707107 12 (0.281042,0) 0 0.978813 0.978813 0.682254 12 (0.280867,0) 0 0.978813 0.978813 0.682049 12 (0.280342,0) 0 0.978813 0.978813 0.681433 12 (0.279473,0) 0 0.978813 0.978813 0.680413 12 (0.278267,0) 0 0.978813 0.978813 0.678996 13 (0.5,0) 0 1 1 0.707107 13 (0.281042,0) 0 0.978812 0.978812 0.691454 13 (0.281042,0) 0 0.978812 0.978812 0.691453 13 (0.281041,0) 0 0.978812 0.978812 0.69145 13 (0.28104,0) 0 0.978812 0.978812 0.691443 13 (0.281035,0) 0 0.978812 0.978812 0.691432 14 (0.5,0) 0 1 1 0.707107 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692107 14 (0.281042,0) 0 0.978812 0.978812 0.692107 14 (0.5,0) 0 1 1 0.707107 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692107 14 (0.281042,0) 0 0.978812 0.978812 0.692107 13 (0.5,0) 0.1 1 1 0.707107 13 (0.281035,0) 0.1 0.978812 0.978812 0.691432 13 (0.281025,0) 0.1 0.978812 0.978812 0.691412 13 (0.281008,0) 0.1 0.978812 0.978812 0.691382 13 (0.28098,0) 0.1 0.978812 0.978812 0.691338 13 (0.280938,0) 0.1 0.978812 0.978812 0.691275 12 (0.5,0) 0.1 1 1 0.707107 12 (0.278267,0) 0.1 0.978812 0.978812 0.678996 12 (0.276736,0) 0.1 0.978812 0.978812 0.677193 12 (0.274895,0) 0.1 0.978812 0.978812 0.675019 12 (0.27276,0) 0.1 0.978812 0.978812 0.672491 12 (0.270352,0) 0.1 0.978812 0.978812 0.669629 11 (0.5,0) 0.1 1 1 0.707107 11 (0.00835666,0) 0.1 0.978812 0.978812 0.119141 11 (0.0129966,0) 0.1 0.978812 0.978812 0.148582 11 (0.0186083,0) 0.1 0.978812 0.978812 0.177792 11 (0.0251571,0) 0.1 0.978812 0.978812 0.206724 11 (0.0326021,0) 0.1 0.978812 0.978812 0.235334 10 (0.5,0) 0.1 1 1 0.707107 10 (0.553729,0) 0.1 0.978812 0.978812 0.971514 10 (0.54909,0) 0.1 0.978812 0.978812 0.967438 10 (0.543478,0) 0.1 0.978812 0.978812 0.962484 10 (0.536929,0) 0.1 0.978812 0.978812 0.956668 10 (0.529484,0) 0.1 0.978812 0.978812 0.950012 9 (0.5,0) 0.1 1 1 0.707107 9 (0.283839,0) 0.1 0.97881 0.97881 0.684819 9 (0.285365,0) 0.1 0.97881 0.97881 0.687003 9 (0.287203,0) 0.1 0.97881 0.97881 0.689614 9 (0.289333,0) 0.1 0.97881 0.97881 0.692617 9 (0.291737,0) 0.1 0.97881 0.97881 0.695975 8 (0.500001,0) 0.2 1 1 0.707107 8 (0.281136,0) 0.2 0.978803 0.978803 0.691682 8 (0.281205,0) 0.2 0.978803 0.978803 0.691754 8 (0.281297,0) 0.2 0.978803 0.978803 0.691853 8 (0.281417,0) 0.2 0.978803 0.978803 0.691985 8 (0.281571,0) 0.2 0.978803 0.978803 0.692155 7 (0.499999,0) 0.2 1 1 0.707106 7 (0.281057,0) 0.2 0.978772 0.978772 0.692056 7 (0.281056,0) 0.2 0.978772 0.978772 0.692053 7 (0.281056,0) 0.2 0.978772 0.978772 0.692051 7 (0.281056,0) 0.2 0.978772 0.978772 0.692048 7 (0.281057,0) 0.2 0.978772 0.978772 0.692046 6 (0.500002,0) 0.2 1 1 0.707109 6 (0.28098,0) 0.2 0.978706 0.978706 0.691867 6 (0.280979,0) 0.2 0.978706 0.978706 0.691865 6 (0.280978,0) 0.2 0.978706 0.978706 0.691863 6 (0.280977,0) 0.2 0.978706 0.978706 0.691861 6 (0.280976,0) 0.2 0.978706 0.978706 0.691859 5 (0.500002,0) 0.2 1 1 0.707108 5 (0.281021,0) 0.2 0.97866 0.97866 0.692022 5 (0.28102,0) 0.2 0.97866 0.97866 0.692021 5 (0.28102,0) 0.2 0.97866 0.97866 0.692021 5 (0.28102,0) 0.2 0.97866 0.97866 0.69202 5 (0.281019,0) 0.2 0.97866 0.97866 0.692019 4 (0.499977,0) 0.2 1 1 0.707091 4 (0.281001,0) 0.2 0.978604 0.978604 0.691915 4 (0.281001,0) 0.2 0.978604 0.978604 0.691915 4 (0.281002,0) 0.2 0.978604 0.978604 0.691915 4 (0.281002,0) 0.2 0.978604 0.978604 0.691915 4 (0.281002,0) 0.2 0.978604 0.978604 0.691915 3 (0.500016,0) 0.3 1 1 0.707118 3 (0.281006,0) 0.3 0.978589 0.978589 0.691969 3 (0.281006,0) 0.3 0.978589 0.978589 0.691969 3 (0.281006,0) 0.3 0.978589 0.978589 0.691969 3 (0.281006,0) 0.3 0.978589 0.978589 0.691969 3 (0.281006,0) 0.3 0.978589 0.978589 0.691969 2 (0.499989,0) 0.3 1 1 0.707099 2 (0.281011,0) 0.3 0.978577 0.978577 0.691932 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 1 (0.500003,0) 0.3 1 1 0.707109 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 1 (0.500003,0) 0.3 1 1 0.707109 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 2 (0.499989,0) 0.3 1 1 0.707099 2 (0.281011,0) 0.3 0.978577 0.978577 0.691932 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 3 (0.500016,0) 0.4 1 1 0.707118 3 (0.281004,0) 0.4 0.978577 0.978577 0.691961 3 (0.281004,0) 0.4 0.978577 0.978577 0.69196 3 (0.281003,0) 0.4 0.978577 0.978577 0.69196 3 (0.281003,0) 0.4 0.978577 0.978577 0.691959 3 (0.281003,0) 0.4 0.978577 0.978577 0.691958 4 (0.499977,0) 0.4 1 1 0.707091 4 (0.281047,0) 0.4 0.978577 0.978577 0.691944 4 (0.281039,0) 0.4 0.978577 0.978577 0.691936 4 (0.281031,0) 0.4 0.978577 0.978577 0.691926 4 (0.281022,0) 0.4 0.978577 0.978577 0.691915 4 (0.281012,0) 0.4 0.978577 0.978577 0.691903 5 (0.500001,0) 0.4 1 1 0.707108 5 (0.280722,0) 0.4 0.978577 0.978577 0.691711 5 (0.280736,0) 0.4 0.978577 0.978577 0.691725 5 (0.280751,0) 0.4 0.978577 0.978577 0.69174 5 (0.280767,0) 0.4 0.978577 0.978577 0.691755 5 (0.280784,0) 0.4 0.978577 0.978577 0.691771 6 (0.500003,0) 0.4 1 1 0.707109 6 (0.280953,0) 0.4 0.978576 0.978576 0.691755 6 (0.28096,0) 0.4 0.978576 0.978576 0.69176 6 (0.280967,0) 0.4 0.978576 0.978576 0.691766 6 (0.280976,0) 0.4 0.978576 0.978576 0.691774 6 (0.280986,0) 0.4 0.978576 0.978576 0.691784 7 (0.499999,0) 0.4 1 1 0.707106 7 (0.281304,0) 0.4 0.978573 0.978573 0.692169 7 (0.281317,0) 0.4 0.978573 0.978573 0.692179 7 (0.281334,0) 0.4 0.978573 0.978573 0.692191 7 (0.281354,0) 0.4 0.978573 0.978573 0.692207 7 (0.281379,0) 0.4 0.978573 0.978573 0.692227 8 (0.500001,0) 0.5 1 1 0.707108 8 (0.285111,0) 0.5 0.978565 0.978565 0.695934 8 (0.285673,0) 0.5 0.978565 0.978565 0.696584 8 (0.286307,0) 0.5 0.978565 0.978565 0.697315 8 (0.287014,0) 0.5 0.978565 0.978565 0.698131 8 (0.287797,0) 0.5 0.978565 0.978565 0.699031 9 (0.499999,0) 0.5 1 1 0.707106 9 (0.329461,0) 0.5 0.978552 0.978552 0.744231 9 (0.332853,0) 0.5 0.978552 0.978552 0.748442 9 (0.336092,0) 0.5 0.978552 0.978552 0.752448 9 (0.339143,0) 0.5 0.978552 0.978552 0.756216 9 (0.341977,0) 0.5 0.978552 0.978552 0.759713 10 (0.500003,0) 0.5 1 1 0.707109 10 (0.393993,0) 0.5 0.978527 0.978527 0.8221 10 (0.38059,0) 0.5 0.978527 0.978527 0.80819 10 (0.367218,0) 0.5 0.978527 0.978527 0.79404 10 (0.353953,0) 0.5 0.978527 0.978527 0.77972 10 (0.340867,0) 0.5 0.978527 0.978527 0.7653 11 (0.500002,0) 0.5 1 1 0.707108 11 (0.168667,0) 0.5 0.978481 0.978481 0.53071 11 (0.182095,0) 0.5 0.978481 0.978481 0.551574 11 (0.19549,0) 0.5 0.978481 0.978481 0.571657 11 (0.208779,0) 0.5 0.978481 0.978481 0.590932 11 (0.221885,0) 0.5 0.978481 0.978481 0.609372 12 (0.5,0) 0.5 1 1 0.707106 12 (0.233883,0) 0.5 0.978466 0.978466 0.625252 12 (0.23042,0) 0.5 0.978466 0.978466 0.620863 12 (0.227106,0) 0.5 0.978466 0.978466 0.616639 12 (0.223974,0) 0.5 0.978466 0.978466 0.612626 12 (0.221054,0) 0.5 0.978466 0.978466 0.60887 13 (0.500004,0) 0.6 1 1 0.70711 13 (0.272903,0) 0.6 0.978462 0.978462 0.681652 13 (0.272153,0) 0.6 0.978462 0.978462 0.680724 13 (0.271327,0) 0.6 0.978462 0.978462 0.679701 13 (0.270424,0) 0.6 0.978462 0.978462 0.678582 13 (0.269446,0) 0.6 0.978462 0.978462 0.677368 14 (0.499999,0) 0.6 1 1 0.707106 14 (0.280112,0) 0.6 0.978462 0.978462 0.690827 14 (0.28,0) 0.6 0.978462 0.978462 0.690698 14 (0.279877,0) 0.6 0.978462 0.978462 0.690556 14 (0.279741,0) 0.6 0.978462 0.978462 0.690398 14 (0.279592,0) 0.6 0.978462 0.978462 0.690223 14 (0.499999,0) 0.6 1 1 0.707106 14 (0.280112,0) 0.6 0.978462 0.978462 0.690827 14 (0.28,0) 0.6 0.978462 0.978462 0.690698 14 (0.279877,0) 0.6 0.978462 0.978462 0.690556 14 (0.279741,0) 0.6 0.978462 0.978462 0.690398 14 (0.279592,0) 0.6 0.978462 0.978462 0.690223 13 (0.500004,0) 0.6 1 1 0.70711 13 (0.272903,0) 0.6 0.978462 0.978462 0.681652 13 (0.272153,0) 0.6 0.978462 0.978462 0.680724 13 (0.271327,0) 0.6 0.978462 0.978462 0.679701 13 (0.270424,0) 0.6 0.978462 0.978462 0.678582 13 (0.269446,0) 0.6 0.978462 0.978462 0.677368 12 (0.499999,0) 0.6 1 1 0.707106 12 (0.221056,0) 0.6 0.978462 0.978462 0.60887 12 (0.218379,0) 0.6 0.978462 0.978462 0.605417 12 (0.215974,0) 0.6 0.978462 0.978462 0.602307 12 (0.213865,0) 0.6 0.978462 0.978462 0.599583 12 (0.212076,0) 0.6 0.978462 0.978462 0.59728 11 (0.500002,0) 0.7 1 1 0.707108 11 (0.271051,0) 0.7 0.978462 0.978462 0.674253 11 (0.282232,0) 0.7 0.978462 0.978462 0.688218 11 (0.29285,0) 0.7 0.978462 0.978462 0.701246 11 (0.302856,0) 0.7 0.978462 0.978462 0.713327 11 (0.312203,0) 0.7 0.978462 0.978462 0.724455 10 (0.500002,0) 0.7 1 1 0.707108 10 (0.291731,0) 0.7 0.978454 0.978454 0.708334 10 (0.280559,0) 0.7 0.978454 0.978454 0.694612 10 (0.269948,0) 0.7 0.978454 0.978454 0.68128 10 (0.259948,0) 0.7 0.978454 0.978454 0.668426 10 (0.250604,0) 0.7 0.978454 0.978454 0.656139 9 (0.499997,0) 0.7 1 1 0.707105 9 (0.350214,0) 0.7 0.978411 0.978411 0.769853 9 (0.351603,0) 0.7 0.978411 0.978411 0.771654 9 (0.352631,0) 0.7 0.978411 0.978411 0.773047 9 (0.353283,0) 0.7 0.978411 0.978411 0.774015 9 (0.353548,0) 0.7 0.978411 0.978411 0.774549 8 (0.499999,0) 0.7 1 1 0.707106 8 (0.292082,0) 0.7 0.978336 0.978336 0.704125 8 (0.293238,0) 0.7 0.978336 0.978336 0.705497 8 (0.294469,0) 0.7 0.978336 0.978336 0.706958 8 (0.295771,0) 0.7 0.978336 0.978336 0.708505 8 (0.297138,0) 0.7 0.978336 0.978336 0.71013 7 (0.500002,0) 0.7 1 1 0.707108 7 (0.282107,0) 0.7 0.97827 0.97827 0.692841 7 (0.282229,0) 0.7 0.97827 0.97827 0.692969 7 (0.282368,0) 0.7 0.97827 0.97827 0.693115 7 (0.282527,0) 0.7 0.97827 0.97827 0.693283 7 (0.282706,0) 0.7 0.97827 0.97827 0.693475 6 (0.500036,0) 0.8 1 1 0.707133 6 (0.281131,0) 0.8 0.97817 0.97817 0.691753 6 (0.281169,0) 0.8 0.97817 0.97817 0.691795 6 (0.281211,0) 0.8 0.97817 0.97817 0.691842 6 (0.281256,0) 0.8 0.97817 0.97817 0.691893 6 (0.281305,0) 0.8 0.97817 0.97817 0.69195 5 (0.500018,0) 0.8 1 1 0.70712 5 (0.281025,0) 0.8 0.978093 0.978093 0.691724 5 (0.281053,0) 0.8 0.978093 0.978093 0.69175 5 (0.28108,0) 0.8 0.978093 0.978093 0.691777 5 (0.281108,0) 0.8 0.978093 0.978093 0.691802 5 (0.281135,0) 0.8 0.978093 0.978093 0.691828 4 (0.500065,0) 0.8 1 1 0.707153 4 (0.280649,0) 0.8 0.978036 0.978036 0.691227 4 (0.280639,0) 0.8 0.978036 0.978036 0.691214 4 (0.280629,0) 0.8 0.978036 0.978036 0.691203 4 (0.280621,0) 0.8 0.978036 0.978036 0.691192 4 (0.280614,0) 0.8 0.978036 0.978036 0.691182 3 (0.500004,0) 0.8 1 1 0.70711 3 (0.280856,0) 0.8 0.978012 0.978012 0.691517 3 (0.280855,0) 0.8 0.978012 0.978012 0.691517 3 (0.280854,0) 0.8 0.978012 0.978012 0.691516 3 (0.280853,0) 0.8 0.978012 0.978012 0.691515 3 (0.280851,0) 0.8 0.978012 0.978012 0.691514 2 (0.500071,0) 0.8 1 1 0.707157 2 (0.280831,0) 0.8 0.977999 0.977999 0.691389 2 (0.28083,0) 0.8 0.977999 0.977999 0.691388 2 (0.280829,0) 0.8 0.977999 0.977999 0.691386 2 (0.280828,0) 0.8 0.977999 0.977999 0.691385 2 (0.280827,0) 0.8 0.977999 0.977999 0.691383 1 (0.499997,0) 0.9 1 1 0.707105 1 (0.280888,0) 0.9 0.977999 0.977999 0.691545 1 (0.280888,0) 0.9 0.977999 0.977999 0.691545 1 (0.280887,0) 0.9 0.977999 0.977999 0.691545 1 (0.280887,0) 0.9 0.977999 0.977999 0.691545 1 (0.280887,0) 0.9 0.977999 0.977999 0.691545 1 (0.499997,0) 0.9 1 1 0.707105 1 (0.280888,0) 0.9 0.977999 0.977999 0.691545 1 (0.280888,0) 0.9 0.977999 0.977999 0.691545 1 (0.280887,0) 0.9 0.977999 0.977999 0.691545 1 (0.280887,0) 0.9 0.977999 0.977999 0.691545 1 (0.280887,0) 0.9 0.977999 0.977999 0.691545 2 (0.500071,0) 0.9 1 1 0.707157 2 (0.280827,0) 0.9 0.977999 0.977999 0.691383 2 (0.280825,0) 0.9 0.977999 0.977999 0.691382 2 (0.280824,0) 0.9 0.977999 0.977999 0.69138 2 (0.280822,0) 0.9 0.977999 0.977999 0.691377 2 (0.280819,0) 0.9 0.977999 0.977999 0.691375 3 (0.500004,0) 0.9 1 1 0.70711 3 (0.28085,0) 0.9 0.977999 0.977999 0.691507 3 (0.280848,0) 0.9 0.977999 0.977999 0.691505 3 (0.280846,0) 0.9 0.977999 0.977999 0.691504 3 (0.280844,0) 0.9 0.977999 0.977999 0.691503 3 (0.280843,0) 0.9 0.977999 0.977999 0.691502 4 (0.500065,0) 0.9 1 1 0.707153 4 (0.280595,0) 0.9 0.977999 0.977999 0.691142 4 (0.28059,0) 0.9 0.977999 0.977999 0.691134 4 (0.280586,0) 0.9 0.977999 0.977999 0.691127 4 (0.280583,0) 0.9 0.977999 0.977999 0.691122 4 (0.280582,0) 0.9 0.977999 0.977999 0.691118 5 (0.500018,0) 1 1 1 0.70712 5 (0.281259,0) 1 0.977999 0.977999 0.691926 5 (0.281267,0) 1 0.977999 0.977999 0.691932 5 (0.281275,0) 1 0.977999 0.977999 0.691937 5 (0.281282,0) 1 0.977999 0.977999 0.691942 5 (0.28129,0) 1 0.977999 0.977999 0.691947 6 (0.500037,0) 1 1 1 0.707133 6 (0.281484,0) 1 0.977997 0.977997 0.692163 6 (0.281607,0) 1 0.977997 0.977997 0.692303 6 (0.281737,0) 1 0.977997 0.977997 0.692451 6 (0.281873,0) 1 0.977997 0.977997 0.69261 6 (0.282017,0) 1 0.977997 0.977997 0.692779 7 (0.500003,0) 1 1 1 0.707109 7 (0.285589,0) 1 0.977989 0.977989 0.696603 7 (0.285998,0) 1 0.977989 0.977989 0.697055 7 (0.286437,0) 1 0.977989 0.977989 0.697541 7 (0.286907,0) 1 0.977989 0.977989 0.698063 7 (0.287408,0) 1 0.977989 0.977989 0.698619 8 (0.499998,0) 1 1 1 0.707105 8 (0.306771,0) 1 0.977964 0.977964 0.721337 8 (0.308252,0) 1 0.977964 0.977964 0.723083 8 (0.309707,0) 1 0.977964 0.977964 0.724798 8 (0.311123,0) 1 0.977964 0.977964 0.726466 8 (0.312487,0) 1 0.977964 0.977964 0.728071 9 (0.500009,0) 1 1 1 0.707113 9 (0.341609,0) 1 0.977908 0.977908 0.762637 9 (0.338636,0) 1 0.977908 0.977908 0.759559 9 (0.335334,0) 1 0.977908 0.977908 0.756088 9 (0.331726,0) 1 0.977908 0.977908 0.752243 9 (0.327836,0) 1 0.977908 0.977908 0.748043 10 (0.500004,0) 1.1 1 1 0.70711 10 (0.200449,0) 1.1 0.977728 0.977728 0.584826 10 (0.200955,0) 1.1 0.977728 0.977728 0.585084 10 (0.202149,0) 1.1 0.977728 0.977728 0.58636 10 (0.203998,0) 1.1 0.977728 0.977728 0.5886 10 (0.206462,0) 1.1 0.977728 0.977728 0.59174 11 (0.5,0) 1.1 1 1 0.707107 11 (0.362909,0) 1.1 0.977492 0.977492 0.780445 11 (0.362375,0) 1.1 0.977492 0.977492 0.780177 11 (0.361146,0) 1.1 0.977492 0.977492 0.77916 11 (0.359258,0) 1.1 0.977492 0.977492 0.777425 11 (0.356748,0) 1.1 0.977492 0.977492 0.775006 12 (0.499995,0) 1.1 1 1 0.707103 12 (0.234218,0) 1.1 0.977377 0.977377 0.627212 12 (0.238156,0) 1.1 0.977377 0.977377 0.632365 12 (0.242333,0) 1.1 0.977377 0.977377 0.63779 12 (0.246718,0) 1.1 0.977377 0.977377 0.643444 12 (0.25128,0) 1.1 0.977377 0.977377 0.64928 13 (0.500008,0) 1.1 1 1 0.707112 13 (0.250272,0) 1.1 0.977351 0.977351 0.653861 13 (0.24923,0) 1.1 0.977351 0.977351 0.65251 13 (0.248246,0) 1.1 0.977351 0.977351 0.651224 13 (0.247332,0) 1.1 0.977351 0.977351 0.650019 13 (0.246501,0) 1.1 0.977351 0.977351 0.648912 14 (0.499993,0) 1.1 1 1 0.707102 14 (0.273726,0) 1.1 0.977351 0.977351 0.68276 14 (0.27324,0) 1.1 0.977351 0.977351 0.682173 14 (0.272732,0) 1.1 0.977351 0.977351 0.681556 14 (0.272199,0) 1.1 0.977351 0.977351 0.680908 14 (0.271644,0) 1.1 0.977351 0.977351 0.680229 dmrgpp-6.02/TestSuite/oracles/timeEvolution1000.txt000066400000000000000000002677401414604301300222340ustar00rootroot000000000000001 (0.5,0) 0 1 1 0.707107 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 2 (0.5,0) 0 1 1 0.707107 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 3 (0.5,0) 0 1 1 0.707107 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 4 (0.5,0) 0 1 1 0.707107 4 (0.5,0) 0 0.707107 0.707107 0.707107 4 (0.499696,0) 0 0.707107 0.707107 0.706892 4 (0.498785,0) 0 0.707107 0.707107 0.706247 4 (0.497273,0) 0 0.707107 0.707107 0.705176 4 (0.495168,0) 0 0.707107 0.707107 0.703682 5 (0.5,0) 0 1 1 0.707107 5 (0.893681,0) 0 1 1 0.945347 5 (0.893462,0) 0 1 1 0.945231 5 (0.892806,0) 0 1 1 0.944884 5 (0.891716,0) 0 1 1 0.944307 5 (0.890195,0) 0 1 1 0.943501 6 (0.5,0) 0 1 1 0.707107 6 (0.561211,0) 0 1 1 0.74914 6 (0.561373,0) 0 1 1 0.749249 6 (0.561859,0) 0 1 1 0.749572 6 (0.562664,0) 0 1 1 0.75011 6 (0.563785,0) 0 1 1 0.750856 6 (0.5,0) 0 1 1 0.707107 6 (0.561211,0) 0 1 1 0.74914 6 (0.561373,0) 0 1 1 0.749249 6 (0.561859,0) 0 1 1 0.749572 6 (0.562664,0) 0 1 1 0.75011 6 (0.563785,0) 0 1 1 0.750856 5 (0.5,0) 0 1 1 0.707107 5 (0.893681,0) 0 1 1 0.945347 5 (0.893462,0) 0 1 1 0.945231 5 (0.892806,0) 0 1 1 0.944884 5 (0.891716,0) 0 1 1 0.944307 5 (0.890195,0) 0 1 1 0.943501 4 (0.5,0) 0 1 1 0.707107 4 (0.893681,0) 0 1 1 0.945347 4 (0.893451,0) 0 1 1 0.945226 4 (0.892764,0) 0 1 1 0.944862 4 (0.89162,0) 0 1 1 0.944257 4 (0.890025,0) 0 1 1 0.943412 3 (0.5,0) 0 1 1 0.707107 3 (1.06989,0) 0 1.22474 1.22474 1.03436 3 (1.07001,0) 0 1.22474 1.22474 1.03441 3 (1.07035,0) 0 1.22474 1.22474 1.03458 3 (1.07092,0) 0 1.22474 1.22474 1.03485 3 (1.07171,0) 0 1.22474 1.22474 1.03524 2 (0.5,0) 0 1 1 0.707107 2 (0.795858,0) 0 1.22474 1.22474 0.892109 2 (0.795886,0) 0 1.22474 1.22474 0.892124 2 (0.795971,0) 0 1.22474 1.22474 0.892172 2 (0.796113,0) 0 1.22474 1.22474 0.892252 2 (0.796314,0) 0 1.22474 1.22474 0.892364 1 (0.5,0) 0 1 1 0.707107 1 (0.752704,0) 0 1.22474 1.22474 0.867585 1 (0.752728,0) 0 1.22474 1.22474 0.867599 1 (0.752799,0) 0 1.22474 1.22474 0.86764 1 (0.752917,0) 0 1.22474 1.22474 0.867708 1 (0.753083,0) 0 1.22474 1.22474 0.867803 1 (0.5,0) 0 1 1 0.707107 1 (0.752704,0) 0 1.22474 1.22474 0.867585 1 (0.752728,0) 0 1.22474 1.22474 0.867599 1 (0.752799,0) 0 1.22474 1.22474 0.86764 1 (0.752917,0) 0 1.22474 1.22474 0.867708 1 (0.753083,0) 0 1.22474 1.22474 0.867803 2 (0.5,0) 0 1 1 0.707107 2 (0.795858,0) 0 1.22474 1.22474 0.892109 2 (0.795886,0) 0 1.22474 1.22474 0.892124 2 (0.795971,0) 0 1.22474 1.22474 0.892172 2 (0.796113,0) 0 1.22474 1.22474 0.892252 2 (0.796314,0) 0 1.22474 1.22474 0.892364 3 (0.5,0) 0 1 1 0.707107 3 (1.06989,0) 0 1.22474 1.22474 1.03436 3 (1.07001,0) 0 1.22474 1.22474 1.03441 3 (1.07035,0) 0 1.22474 1.22474 1.03458 3 (1.07092,0) 0 1.22474 1.22474 1.03485 3 (1.07171,0) 0 1.22474 1.22474 1.03524 4 (0.5,0) 0 1 1 0.707107 4 (1.21358,0) 0 1.22474 1.22474 1.10162 4 (1.21352,0) 0 1.22474 1.22474 1.1016 4 (1.21334,0) 0 1.22474 1.22474 1.10152 4 (1.21306,0) 0 1.22474 1.22474 1.10139 4 (1.21265,0) 0 1.22474 1.22474 1.1012 5 (0.5,0) 0 1 1 0.707107 5 (1.26928,0) 0 1.22474 1.22474 1.12662 5 (1.26891,0) 0 1.22474 1.22474 1.12646 5 (1.2678,0) 0 1.22474 1.22474 1.12596 5 (1.26595,0) 0 1.22474 1.22474 1.12514 5 (1.26337,0) 0 1.22474 1.22474 1.124 6 (0.5,0) 0 1 1 0.707107 6 (0.813914,0) 0 1.22474 1.22474 0.902172 6 (0.814087,0) 0 1.22474 1.22474 0.902268 6 (0.814607,0) 0 1.22474 1.22474 0.902556 6 (0.815468,0) 0 1.22474 1.22474 0.903033 6 (0.816666,0) 0 1.22474 1.22474 0.903696 6 (0.5,0) 0.1 1 1 0.707107 6 (0.816666,0) 0.1 1.22474 1.22474 0.903696 6 (0.818192,0) 0.1 1.22474 1.22474 0.90454 6 (0.820036,0) 0.1 1.22474 1.22474 0.905558 6 (0.822184,0) 0.1 1.22474 1.22474 0.906744 6 (0.824623,0) 0.1 1.22474 1.22474 0.908087 5 (0.5,0) 0.1 1 1 0.707107 5 (1.26337,0) 0.1 1.22474 1.22474 1.124 5 (1.26007,0) 0.1 1.22474 1.22474 1.12253 5 (1.25607,0) 0.1 1.22474 1.22474 1.12075 5 (1.25138,0) 0.1 1.22474 1.22474 1.11865 5 (1.24603,0) 0.1 1.22474 1.22474 1.11626 4 (0.5,0) 0.1 1 1 0.707107 4 (1.21265,0) 0.1 1.22474 1.22474 1.1012 4 (1.21213,0) 0.1 1.22474 1.22474 1.10097 4 (1.21148,0) 0.1 1.22474 1.22474 1.10067 4 (1.21072,0) 0.1 1.22474 1.22474 1.10033 4 (1.20984,0) 0.1 1.22474 1.22474 1.09993 3 (0.5,0) 0.1 1 1 0.707107 3 (1.07171,0) 0.1 1.22474 1.22474 1.03524 3 (1.07272,0) 0.1 1.22474 1.22474 1.03572 3 (1.07394,0) 0.1 1.22474 1.22474 1.03631 3 (1.07537,0) 0.1 1.22474 1.22474 1.037 3 (1.07699,0) 0.1 1.22474 1.22474 1.03778 2 (0.5,0) 0.1 1 1 0.707107 2 (0.796313,0) 0.1 1.22474 1.22474 0.892364 2 (0.796574,0) 0.1 1.22474 1.22474 0.89251 2 (0.796897,0) 0.1 1.22474 1.22474 0.892691 2 (0.797284,0) 0.1 1.22474 1.22474 0.892908 2 (0.797739,0) 0.1 1.22474 1.22474 0.893162 1 (0.5,0) 0.1 1 1 0.707107 1 (0.753083,0) 0.1 1.22474 1.22474 0.867803 1 (0.753296,0) 0.1 1.22474 1.22474 0.867926 1 (0.753557,0) 0.1 1.22474 1.22474 0.868077 1 (0.753866,0) 0.1 1.22474 1.22474 0.868255 1 (0.754223,0) 0.1 1.22474 1.22474 0.86846 1 (0.5,0) 0.2 1 1 0.707107 1 (0.754223,0) 0.2 1.22474 1.22474 0.86846 1 (0.754628,0) 0.2 1.22474 1.22474 0.868693 1 (0.755082,0) 0.2 1.22474 1.22474 0.868955 1 (0.755586,0) 0.2 1.22474 1.22474 0.869244 1 (0.756138,0) 0.2 1.22474 1.22474 0.869562 2 (0.5,0) 0.2 1 1 0.707107 2 (0.797739,0) 0.2 1.22474 1.22474 0.893162 2 (0.798265,0) 0.2 1.22474 1.22474 0.893457 2 (0.798865,0) 0.2 1.22474 1.22474 0.893792 2 (0.799542,0) 0.2 1.22474 1.22474 0.894171 2 (0.800302,0) 0.2 1.22474 1.22474 0.894596 3 (0.5,0) 0.2 1 1 0.707107 3 (1.07699,0) 0.2 1.22474 1.22474 1.03778 3 (1.0788,0) 0.2 1.22474 1.22474 1.03865 3 (1.08078,0) 0.2 1.22474 1.22474 1.03961 3 (1.08293,0) 0.2 1.22474 1.22474 1.04064 3 (1.08523,0) 0.2 1.22474 1.22474 1.04174 4 (0.5,0) 0.2 1 1 0.707107 4 (1.20984,0) 0.2 1.22474 1.22474 1.09993 4 (1.20883,0) 0.2 1.22474 1.22474 1.09947 4 (1.20769,0) 0.2 1.22474 1.22474 1.09895 4 (1.20643,0) 0.2 1.22474 1.22474 1.09838 4 (1.20504,0) 0.2 1.22474 1.22474 1.09774 5 (0.5,0) 0.2 1 1 0.707107 5 (1.24603,0) 0.2 1.22474 1.22474 1.11626 5 (1.24002,0) 0.2 1.22474 1.22474 1.11356 5 (1.2334,0) 0.2 1.22474 1.22474 1.11059 5 (1.22619,0) 0.2 1.22474 1.22474 1.10733 5 (1.21841,0) 0.2 1.22474 1.22474 1.10382 6 (0.5,0) 0.2 1 1 0.707107 6 (0.824621,0) 0.2 1.22474 1.22474 0.908086 6 (0.827332,0) 0.2 1.22474 1.22474 0.909578 6 (0.830299,0) 0.2 1.22474 1.22474 0.911207 6 (0.8335,0) 0.2 1.22474 1.22474 0.912962 6 (0.836913,0) 0.2 1.22474 1.22474 0.914829 6 (0.5,0) 0.3 1 1 0.707107 6 (0.836913,0) 0.3 1.22474 1.22474 0.914829 6 (0.840515,0) 0.3 1.22474 1.22474 0.916796 6 (0.84428,0) 0.3 1.22474 1.22474 0.918847 6 (0.848184,0) 0.3 1.22474 1.22474 0.920969 6 (0.852199,0) 0.3 1.22474 1.22474 0.923146 5 (0.5,0) 0.3 1 1 0.707107 5 (1.21841,0) 0.3 1.22474 1.22474 1.10382 5 (1.2101,0) 0.3 1.22474 1.22474 1.10004 5 (1.20129,0) 0.3 1.22474 1.22474 1.09603 5 (1.19202,0) 0.3 1.22474 1.22474 1.0918 5 (1.18232,0) 0.3 1.22474 1.22474 1.08735 4 (0.5,0) 0.3 1 1 0.707107 4 (1.20503,0) 0.3 1.22474 1.22474 1.09774 4 (1.20351,0) 0.3 1.22474 1.22474 1.09705 4 (1.20185,0) 0.3 1.22474 1.22474 1.09629 4 (1.20005,0) 0.3 1.22474 1.22474 1.09547 4 (1.19811,0) 0.3 1.22474 1.22474 1.09458 3 (0.5,0) 0.3 1 1 0.707107 3 (1.08523,0) 0.3 1.22474 1.22474 1.04174 3 (1.08766,0) 0.3 1.22474 1.22474 1.04291 3 (1.09021,0) 0.3 1.22474 1.22474 1.04413 3 (1.09286,0) 0.3 1.22474 1.22474 1.0454 3 (1.09561,0) 0.3 1.22474 1.22474 1.04671 2 (0.5,0) 0.3 1 1 0.707107 2 (0.800302,0) 0.3 1.22474 1.22474 0.894596 2 (0.801148,0) 0.3 1.22474 1.22474 0.895069 2 (0.802084,0) 0.3 1.22474 1.22474 0.895592 2 (0.803116,0) 0.3 1.22474 1.22474 0.896167 2 (0.804247,0) 0.3 1.22474 1.22474 0.896798 1 (0.5,0) 0.3 1 1 0.707107 1 (0.756142,0) 0.3 1.22474 1.22474 0.869564 1 (0.756745,0) 0.3 1.22474 1.22474 0.869911 1 (0.757398,0) 0.3 1.22474 1.22474 0.870286 1 (0.758102,0) 0.3 1.22474 1.22474 0.870691 1 (0.758859,0) 0.3 1.22474 1.22474 0.871125 1 (0.5,0) 0.4 1 1 0.707107 1 (0.758859,0) 0.4 1.22474 1.22474 0.871125 1 (0.759668,0) 0.4 1.22474 1.22474 0.871589 1 (0.76053,0) 0.4 1.22474 1.22474 0.872084 1 (0.761448,0) 0.4 1.22474 1.22474 0.87261 1 (0.762421,0) 0.4 1.22474 1.22474 0.873167 2 (0.5,0) 0.4 1 1 0.707107 2 (0.804247,0) 0.4 1.22474 1.22474 0.896798 2 (0.805482,0) 0.4 1.22474 1.22474 0.897487 2 (0.806826,0) 0.4 1.22474 1.22474 0.898235 2 (0.808282,0) 0.4 1.22474 1.22474 0.899045 2 (0.809855,0) 0.4 1.22474 1.22474 0.899919 3 (0.5,0) 0.4 1 1 0.707107 3 (1.09561,0) 0.4 1.22474 1.22474 1.04671 3 (1.09842,0) 0.4 1.22474 1.22474 1.04806 3 (1.10129,0) 0.4 1.22474 1.22474 1.04942 3 (1.10419,0) 0.4 1.22474 1.22474 1.05081 3 (1.10711,0) 0.4 1.22474 1.22474 1.05219 4 (0.5,0) 0.4 1 1 0.707107 4 (1.19811,0) 0.4 1.22474 1.22474 1.09458 4 (1.19603,0) 0.4 1.22474 1.22474 1.09363 4 (1.1938,0) 0.4 1.22474 1.22474 1.09261 4 (1.19143,0) 0.4 1.22474 1.22474 1.09153 4 (1.18891,0) 0.4 1.22474 1.22474 1.09037 5 (0.5,0) 0.4 1 1 0.707107 5 (1.18232,0) 0.4 1.22474 1.22474 1.08735 5 (1.17224,0) 0.4 1.22474 1.22474 1.0827 5 (1.16181,0) 0.4 1.22474 1.22474 1.07787 5 (1.15107,0) 0.4 1.22474 1.22474 1.07288 5 (1.14007,0) 0.4 1.22474 1.22474 1.06774 6 (0.5,0) 0.4 1 1 0.707107 6 (0.852197,0) 0.4 1.22474 1.22474 0.923145 6 (0.856297,0) 0.4 1.22474 1.22474 0.925363 6 (0.860451,0) 0.4 1.22474 1.22474 0.927605 6 (0.864633,0) 0.4 1.22474 1.22474 0.929857 6 (0.868814,0) 0.4 1.22474 1.22474 0.932102 6 (0.5,0) 0.5 1 1 0.707107 6 (0.868814,0) 0.5 1.22474 1.22474 0.932102 6 (0.872965,0) 0.5 1.22474 1.22474 0.934326 6 (0.877057,0) 0.5 1.22474 1.22474 0.936513 6 (0.881064,0) 0.5 1.22474 1.22474 0.93865 6 (0.884957,0) 0.5 1.22474 1.22474 0.940721 5 (0.5,0) 0.5 1 1 0.707107 5 (1.14007,0) 0.5 1.22474 1.22474 1.06774 5 (1.12884,0) 0.5 1.22474 1.22474 1.06247 5 (1.11743,0) 0.5 1.22474 1.22474 1.05709 5 (1.10588,0) 0.5 1.22474 1.22474 1.05161 5 (1.09423,0) 0.5 1.22474 1.22474 1.04606 4 (0.5,0) 0.5 1 1 0.707107 4 (1.18891,0) 0.5 1.22474 1.22474 1.09037 4 (1.18624,0) 0.5 1.22474 1.22474 1.08915 4 (1.18342,0) 0.5 1.22474 1.22474 1.08785 4 (1.18045,0) 0.5 1.22474 1.22474 1.08649 4 (1.17733,0) 0.5 1.22474 1.22474 1.08505 3 (0.5,0) 0.5 1 1 0.707107 3 (1.10711,0) 0.5 1.22474 1.22474 1.05219 3 (1.11002,0) 0.5 1.22474 1.22474 1.05358 3 (1.11291,0) 0.5 1.22474 1.22474 1.05495 3 (1.11576,0) 0.5 1.22474 1.22474 1.05629 3 (1.11854,0) 0.5 1.22474 1.22474 1.05761 2 (0.5,0) 0.5 1 1 0.707107 2 (0.809856,0) 0.5 1.22474 1.22474 0.89992 2 (0.81155,0) 0.5 1.22474 1.22474 0.900861 2 (0.813368,0) 0.5 1.22474 1.22474 0.901869 2 (0.815313,0) 0.5 1.22474 1.22474 0.902947 2 (0.817388,0) 0.5 1.22474 1.22474 0.904095 1 (0.5,0) 0.5 1 1 0.707107 1 (0.762422,0) 0.5 1.22474 1.22474 0.873168 1 (0.763453,0) 0.5 1.22474 1.22474 0.873758 1 (0.764541,0) 0.5 1.22474 1.22474 0.87438 1 (0.76569,0) 0.5 1.22474 1.22474 0.875037 1 (0.766899,0) 0.5 1.22474 1.22474 0.875728 1 (0.5,0) 0.6 1 1 0.707107 1 (0.766899,0) 0.6 1.22474 1.22474 0.875728 1 (0.768172,0) 0.6 1.22474 1.22474 0.876454 1 (0.769509,0) 0.6 1.22474 1.22474 0.877217 1 (0.770913,0) 0.6 1.22474 1.22474 0.878017 1 (0.772385,0) 0.6 1.22474 1.22474 0.878855 2 (0.5,0) 0.6 1 1 0.707107 2 (0.817388,0) 0.6 1.22474 1.22474 0.904095 2 (0.819596,0) 0.6 1.22474 1.22474 0.905316 2 (0.821939,0) 0.6 1.22474 1.22474 0.906608 2 (0.824417,0) 0.6 1.22474 1.22474 0.907974 2 (0.827031,0) 0.6 1.22474 1.22474 0.909413 3 (0.5,0) 0.6 1 1 0.707107 3 (1.11855,0) 0.6 1.22474 1.22474 1.05761 3 (1.12125,0) 0.6 1.22474 1.22474 1.05889 3 (1.12386,0) 0.6 1.22474 1.22474 1.06012 3 (1.12634,0) 0.6 1.22474 1.22474 1.06129 3 (1.12869,0) 0.6 1.22474 1.22474 1.0624 4 (0.5,0) 0.6 1 1 0.707107 4 (1.17733,0) 0.6 1.22474 1.22474 1.08505 4 (1.17405,0) 0.6 1.22474 1.22474 1.08354 4 (1.17062,0) 0.6 1.22474 1.22474 1.08195 4 (1.16704,0) 0.6 1.22474 1.22474 1.0803 4 (1.16331,0) 0.6 1.22474 1.22474 1.07857 5 (0.5,0) 0.6 1 1 0.707107 5 (1.09423,0) 0.6 1.22474 1.22474 1.04606 5 (1.08253,0) 0.6 1.22474 1.22474 1.04045 5 (1.07081,0) 0.6 1.22474 1.22474 1.0348 5 (1.05911,0) 0.6 1.22474 1.22474 1.02913 5 (1.04747,0) 0.6 1.22474 1.22474 1.02346 6 (0.5,0) 0.6 1 1 0.707107 6 (0.884956,0) 0.6 1.22474 1.22474 0.940721 6 (0.888709,0) 0.6 1.22474 1.22474 0.942714 6 (0.892298,0) 0.6 1.22474 1.22474 0.944615 6 (0.895697,0) 0.6 1.22474 1.22474 0.946413 6 (0.898884,0) 0.6 1.22474 1.22474 0.948095 6 (0.5,0) 0.7 1 1 0.707107 6 (0.898884,0) 0.7 1.22474 1.22474 0.948095 6 (0.901838,0) 0.7 1.22474 1.22474 0.949651 6 (0.904539,0) 0.7 1.22474 1.22474 0.951073 6 (0.90697,0) 0.7 1.22474 1.22474 0.95235 6 (0.909114,0) 0.7 1.22474 1.22474 0.953475 5 (0.5,0) 0.7 1 1 0.707107 5 (1.04747,0) 0.7 1.22474 1.22474 1.02346 5 (1.03594,0) 0.7 1.22474 1.22474 1.01781 5 (1.02454,0) 0.7 1.22474 1.22474 1.01219 5 (1.01331,0) 0.7 1.22474 1.22474 1.00663 5 (1.00228,0) 0.7 1.22474 1.22474 1.00114 4 (0.5,0) 0.7 1 1 0.707107 4 (1.16331,0) 0.7 1.22474 1.22474 1.07857 4 (1.15943,0) 0.7 1.22474 1.22474 1.07677 4 (1.15541,0) 0.7 1.22474 1.22474 1.0749 4 (1.15124,0) 0.7 1.22474 1.22474 1.07296 4 (1.14693,0) 0.7 1.22474 1.22474 1.07095 3 (0.5,0) 0.7 1 1 0.707107 3 (1.12869,0) 0.7 1.22474 1.22474 1.0624 3 (1.13088,0) 0.7 1.22474 1.22474 1.06343 3 (1.1329,0) 0.7 1.22474 1.22474 1.06438 3 (1.13473,0) 0.7 1.22474 1.22474 1.06524 3 (1.13635,0) 0.7 1.22474 1.22474 1.066 2 (0.5,0) 0.7 1 1 0.707107 2 (0.82703,0) 0.7 1.22474 1.22474 0.909412 2 (0.829781,0) 0.7 1.22474 1.22474 0.910923 2 (0.832668,0) 0.7 1.22474 1.22474 0.912506 2 (0.835689,0) 0.7 1.22474 1.22474 0.914161 2 (0.838844,0) 0.7 1.22474 1.22474 0.915884 1 (0.5,0) 0.7 1 1 0.707107 1 (0.772387,0) 0.7 1.22474 1.22474 0.878855 1 (0.77393,0) 0.7 1.22474 1.22474 0.879733 1 (0.775545,0) 0.7 1.22474 1.22474 0.88065 1 (0.777235,0) 0.7 1.22474 1.22474 0.881609 1 (0.779002,0) 0.7 1.22474 1.22474 0.882611 1 (0.5,0) 0.8 1 1 0.707107 1 (0.779002,0) 0.8 1.22474 1.22474 0.882611 1 (0.780847,0) 0.8 1.22474 1.22474 0.883655 1 (0.782773,0) 0.8 1.22474 1.22474 0.884744 1 (0.784782,0) 0.8 1.22474 1.22474 0.885879 1 (0.786876,0) 0.8 1.22474 1.22474 0.88706 2 (0.5,0) 0.8 1 1 0.707107 2 (0.838844,0) 0.8 1.22474 1.22474 0.915884 2 (0.842128,0) 0.8 1.22474 1.22474 0.917675 2 (0.845539,0) 0.8 1.22474 1.22474 0.919532 2 (0.849072,0) 0.8 1.22474 1.22474 0.921451 2 (0.852722,0) 0.8 1.22474 1.22474 0.92343 3 (0.5,0) 0.8 1 1 0.707107 3 (1.13635,0) 0.8 1.22474 1.22474 1.066 3 (1.13775,0) 0.8 1.22474 1.22474 1.06665 3 (1.13892,0) 0.8 1.22474 1.22474 1.0672 3 (1.13983,0) 0.8 1.22474 1.22474 1.06763 3 (1.14048,0) 0.8 1.22474 1.22474 1.06793 4 (0.5,0) 0.8 1 1 0.707107 4 (1.14693,0) 0.8 1.22474 1.22474 1.07095 4 (1.14248,0) 0.8 1.22474 1.22474 1.06887 4 (1.1379,0) 0.8 1.22474 1.22474 1.06672 4 (1.13319,0) 0.8 1.22474 1.22474 1.06452 4 (1.12836,0) 0.8 1.22474 1.22474 1.06224 5 (0.5,0) 0.8 1 1 0.707107 5 (1.00228,0) 0.8 1.22474 1.22474 1.00114 5 (0.991489,0) 0.8 1.22474 1.22474 0.995735 5 (0.980962,0) 0.8 1.22474 1.22474 0.990435 5 (0.970725,0) 0.8 1.22474 1.22474 0.985254 5 (0.960805,0) 0.8 1.22474 1.22474 0.980207 6 (0.5,0) 0.8 1 1 0.707107 6 (0.909114,0) 0.8 1.22474 1.22474 0.953475 6 (0.910959,0) 0.8 1.22474 1.22474 0.954442 6 (0.912492,0) 0.8 1.22474 1.22474 0.955245 6 (0.913705,0) 0.8 1.22474 1.22474 0.955879 6 (0.914591,0) 0.8 1.22474 1.22474 0.956343 6 (0.5,0) 0.9 1 1 0.707107 6 (0.914591,0) 0.9 1.22474 1.22474 0.956343 6 (0.915145,0) 0.9 1.22474 1.22474 0.956632 6 (0.915366,0) 0.9 1.22474 1.22474 0.956747 6 (0.915253,0) 0.9 1.22474 1.22474 0.956689 6 (0.91481,0) 0.9 1.22474 1.22474 0.956457 5 (0.5,0) 0.9 1 1 0.707107 5 (0.960805,0) 0.9 1.22474 1.22474 0.980207 5 (0.951223,0) 0.9 1.22474 1.22474 0.975307 5 (0.941999,0) 0.9 1.22474 1.22474 0.970566 5 (0.933151,0) 0.9 1.22474 1.22474 0.965997 5 (0.924694,0) 0.9 1.22474 1.22474 0.96161 4 (0.5,0) 0.9 1 1 0.707107 4 (1.12836,0) 0.9 1.22474 1.22474 1.06224 4 (1.12341,0) 0.9 1.22474 1.22474 1.05991 4 (1.11835,0) 0.9 1.22474 1.22474 1.05752 4 (1.11319,0) 0.9 1.22474 1.22474 1.05508 4 (1.10793,0) 0.9 1.22474 1.22474 1.05258 3 (0.5,0) 0.9 1 1 0.707107 3 (1.14049,0) 0.9 1.22474 1.22474 1.06793 3 (1.14086,0) 0.9 1.22474 1.22474 1.06811 3 (1.14096,0) 0.9 1.22474 1.22474 1.06816 3 (1.14076,0) 0.9 1.22474 1.22474 1.06806 3 (1.14026,0) 0.9 1.22474 1.22474 1.06783 2 (0.5,0) 0.9 1 1 0.707107 2 (0.852721,0) 0.9 1.22474 1.22474 0.923429 2 (0.856483,0) 0.9 1.22474 1.22474 0.925464 2 (0.86035,0) 0.9 1.22474 1.22474 0.927551 2 (0.864316,0) 0.9 1.22474 1.22474 0.929686 2 (0.868371,0) 0.9 1.22474 1.22474 0.931864 1 (0.5,0) 0.9 1 1 0.707107 1 (0.786879,0) 0.9 1.22474 1.22474 0.887062 1 (0.78906,0) 0.9 1.22474 1.22474 0.88829 1 (0.79133,0) 0.9 1.22474 1.22474 0.889567 1 (0.79369,0) 0.9 1.22474 1.22474 0.890893 1 (0.796143,0) 0.9 1.22474 1.22474 0.892269 1 (0.5,0) 1 1 1 0.707107 1 (0.796143,0) 1 1.22474 1.22474 0.892269 1 (0.79869,0) 1 1.22474 1.22474 0.893695 1 (0.801332,0) 1 1.22474 1.22474 0.895172 1 (0.804071,0) 1 1.22474 1.22474 0.8967 1 (0.806906,0) 1 1.22474 1.22474 0.89828 2 (0.5,0) 1 1 1 0.707107 2 (0.868371,0) 1 1.22474 1.22474 0.931864 2 (0.872508,0) 1 1.22474 1.22474 0.934081 2 (0.876717,0) 1 1.22474 1.22474 0.936332 2 (0.880988,0) 1 1.22474 1.22474 0.93861 2 (0.885311,0) 1 1.22474 1.22474 0.940909 3 (0.5,0) 1 1 1 0.707107 3 (1.14026,0) 1 1.22474 1.22474 1.06783 3 (1.13946,0) 1 1.22474 1.22474 1.06745 3 (1.13834,0) 1 1.22474 1.22474 1.06693 3 (1.1369,0) 1 1.22474 1.22474 1.06626 3 (1.13515,0) 1 1.22474 1.22474 1.06543 4 (0.5,0) 1 1 1 0.707107 4 (1.10793,0) 1 1.22474 1.22474 1.05258 4 (1.10258,0) 1 1.22474 1.22474 1.05004 4 (1.09714,0) 1 1.22474 1.22474 1.04745 4 (1.09164,0) 1 1.22474 1.22474 1.04481 4 (1.08606,0) 1 1.22474 1.22474 1.04214 5 (0.5,0) 1 1 1 0.707107 5 (0.924691,0) 1 1.22474 1.22474 0.961609 5 (0.916638,0) 1 1.22474 1.22474 0.957412 5 (0.908998,0) 1 1.22474 1.22474 0.953414 5 (0.901781,0) 1 1.22474 1.22474 0.949621 5 (0.89499,0) 1 1.22474 1.22474 0.946039 6 (0.5,0) 1 1 1 0.707107 6 (0.914811,0) 1 1.22474 1.22474 0.956458 6 (0.914044,0) 1 1.22474 1.22474 0.956057 6 (0.91296,0) 1 1.22474 1.22474 0.955489 6 (0.91157,0) 1 1.22474 1.22474 0.954762 6 (0.909886,0) 1 1.22474 1.22474 0.95388 6 (0.5,0) 1.1 1 1 0.707107 6 (0.909886,0) 1.1 1.22474 1.22474 0.95388 6 (0.907924,0) 1.1 1.22474 1.22474 0.95285 6 (0.9057,0) 1.1 1.22474 1.22474 0.951683 6 (0.903234,0) 1.1 1.22474 1.22474 0.950386 6 (0.900547,0) 1.1 1.22474 1.22474 0.948972 5 (0.5,0) 1.1 1 1 0.707107 5 (0.89499,0) 1.1 1.22474 1.22474 0.946039 5 (0.888629,0) 1.1 1.22474 1.22474 0.942671 5 (0.882699,0) 1.1 1.22474 1.22474 0.93952 5 (0.877196,0) 1.1 1.22474 1.22474 0.936588 5 (0.872118,0) 1.1 1.22474 1.22474 0.933873 4 (0.5,0) 1.1 1 1 0.707107 4 (1.08606,0) 1.1 1.22474 1.22474 1.04214 4 (1.08043,0) 1.1 1.22474 1.22474 1.03944 4 (1.07475,0) 1.1 1.22474 1.22474 1.0367 4 (1.06904,0) 1.1 1.22474 1.22474 1.03394 4 (1.06329,0) 1.1 1.22474 1.22474 1.03116 3 (0.5,0) 1.1 1 1 0.707107 3 (1.13515,0) 1.1 1.22474 1.22474 1.06543 3 (1.13307,0) 1.1 1.22474 1.22474 1.06446 3 (1.13067,0) 1.1 1.22474 1.22474 1.06333 3 (1.12795,0) 1.1 1.22474 1.22474 1.06205 3 (1.12492,0) 1.1 1.22474 1.22474 1.06062 2 (0.5,0) 1.1 1 1 0.707107 2 (0.885308,0) 1.1 1.22474 1.22474 0.940908 2 (0.889672,0) 1.1 1.22474 1.22474 0.943224 2 (0.894064,0) 1.1 1.22474 1.22474 0.945549 2 (0.898473,0) 1.1 1.22474 1.22474 0.947878 2 (0.902886,0) 1.1 1.22474 1.22474 0.950203 1 (0.5,0) 1.1 1 1 0.707107 1 (0.806907,0) 1.1 1.22474 1.22474 0.89828 1 (0.809841,0) 1.1 1.22474 1.22474 0.899911 1 (0.812872,0) 1.1 1.22474 1.22474 0.901594 1 (0.816001,0) 1.1 1.22474 1.22474 0.903328 1 (0.819227,0) 1.1 1.22474 1.22474 0.905112 1 (0.5,0) 1.2 1 1 0.707107 1 (0.819227,0) 1.2 1.22474 1.22474 0.905112 1 (0.82255,0) 1.2 1.22474 1.22474 0.906946 1 (0.825969,0) 1.2 1.22474 1.22474 0.908828 1 (0.829481,0) 1.2 1.22474 1.22474 0.910758 1 (0.833085,0) 1.2 1.22474 1.22474 0.912735 2 (0.5,0) 1.2 1 1 0.707107 2 (0.902886,0) 1.2 1.22474 1.22474 0.950203 2 (0.907291,0) 1.2 1.22474 1.22474 0.952518 2 (0.911675,0) 1.2 1.22474 1.22474 0.954817 2 (0.916024,0) 1.2 1.22474 1.22474 0.957092 2 (0.920325,0) 1.2 1.22474 1.22474 0.959336 3 (0.5,0) 1.2 1 1 0.707107 3 (1.12491,0) 1.2 1.22474 1.22474 1.06062 3 (1.12156,0) 1.2 1.22474 1.22474 1.05904 3 (1.11791,0) 1.2 1.22474 1.22474 1.05731 3 (1.11395,0) 1.2 1.22474 1.22474 1.05544 3 (1.10969,0) 1.2 1.22474 1.22474 1.05342 4 (0.5,0) 1.2 1 1 0.707107 4 (1.06329,0) 1.2 1.22474 1.22474 1.03116 4 (1.05752,0) 1.2 1.22474 1.22474 1.02836 4 (1.05174,0) 1.2 1.22474 1.22474 1.02554 4 (1.04595,0) 1.2 1.22474 1.22474 1.02272 4 (1.04017,0) 1.2 1.22474 1.22474 1.01989 5 (0.5,0) 1.2 1 1 0.707107 5 (0.872118,0) 1.2 1.22474 1.22474 0.933872 5 (0.867458,0) 1.2 1.22474 1.22474 0.931374 5 (0.863208,0) 1.2 1.22474 1.22474 0.92909 5 (0.859359,0) 1.2 1.22474 1.22474 0.927016 5 (0.855898,0) 1.2 1.22474 1.22474 0.925148 6 (0.5,0) 1.2 1 1 0.707107 6 (0.900548,0) 1.2 1.22474 1.22474 0.948972 6 (0.897663,0) 1.2 1.22474 1.22474 0.947451 6 (0.894606,0) 1.2 1.22474 1.22474 0.945836 6 (0.891401,0) 1.2 1.22474 1.22474 0.944141 6 (0.888078,0) 1.2 1.22474 1.22474 0.942379 6 (0.5,0) 1.3 1 1 0.707107 6 (0.888078,0) 1.3 1.22474 1.22474 0.942379 6 (0.884665,0) 1.3 1.22474 1.22474 0.940566 6 (0.881191,0) 1.3 1.22474 1.22474 0.938718 6 (0.877687,0) 1.3 1.22474 1.22474 0.93685 6 (0.874186,0) 1.3 1.22474 1.22474 0.934979 5 (0.5,0) 1.3 1 1 0.707107 5 (0.855898,0) 1.3 1.22474 1.22474 0.925148 5 (0.852812,0) 1.3 1.22474 1.22474 0.923478 5 (0.850087,0) 1.3 1.22474 1.22474 0.922001 5 (0.847705,0) 1.3 1.22474 1.22474 0.920709 5 (0.845651,0) 1.3 1.22474 1.22474 0.919593 4 (0.5,0) 1.3 1 1 0.707107 4 (1.04017,0) 1.3 1.22474 1.22474 1.01989 4 (1.03441,0) 1.3 1.22474 1.22474 1.01706 4 (1.02867,0) 1.3 1.22474 1.22474 1.01423 4 (1.02296,0) 1.3 1.22474 1.22474 1.01141 4 (1.01728,0) 1.3 1.22474 1.22474 1.00861 3 (0.5,0) 1.3 1 1 0.707107 3 (1.10969,0) 1.3 1.22474 1.22474 1.05342 3 (1.10515,0) 1.3 1.22474 1.22474 1.05126 3 (1.10033,0) 1.3 1.22474 1.22474 1.04897 3 (1.09525,0) 1.3 1.22474 1.22474 1.04654 3 (1.08992,0) 1.3 1.22474 1.22474 1.04399 2 (0.5,0) 1.3 1 1 0.707107 2 (0.920325,0) 1.3 1.22474 1.22474 0.959335 2 (0.924565,0) 1.3 1.22474 1.22474 0.961543 2 (0.92873,0) 1.3 1.22474 1.22474 0.963707 2 (0.932808,0) 1.3 1.22474 1.22474 0.96582 2 (0.936785,0) 1.3 1.22474 1.22474 0.967876 1 (0.5,0) 1.3 1 1 0.707107 1 (0.833085,0) 1.3 1.22474 1.22474 0.912735 1 (0.836778,0) 1.3 1.22474 1.22474 0.914756 1 (0.840557,0) 1.3 1.22474 1.22474 0.916819 1 (0.844419,0) 1.3 1.22474 1.22474 0.918923 1 (0.848358,0) 1.3 1.22474 1.22474 0.921064 1 (0.5,0) 1.4 1 1 0.707107 1 (0.848358,0) 1.4 1.22474 1.22474 0.921064 1 (0.852372,0) 1.4 1.22474 1.22474 0.92324 1 (0.856454,0) 1.4 1.22474 1.22474 0.925448 1 (0.860599,0) 1.4 1.22474 1.22474 0.927685 1 (0.864801,0) 1.4 1.22474 1.22474 0.929947 2 (0.5,0) 1.4 1 1 0.707107 2 (0.936785,0) 1.4 1.22474 1.22474 0.967876 2 (0.940647,0) 1.4 1.22474 1.22474 0.96987 2 (0.944384,0) 1.4 1.22474 1.22474 0.971794 2 (0.947981,0) 1.4 1.22474 1.22474 0.973643 2 (0.951428,0) 1.4 1.22474 1.22474 0.975412 3 (0.5,0) 1.4 1 1 0.707107 3 (1.08992,0) 1.4 1.22474 1.22474 1.04399 3 (1.08434,0) 1.4 1.22474 1.22474 1.04132 3 (1.07854,0) 1.4 1.22474 1.22474 1.03853 3 (1.07253,0) 1.4 1.22474 1.22474 1.03563 3 (1.06632,0) 1.4 1.22474 1.22474 1.03263 4 (0.5,0) 1.4 1 1 0.707107 4 (1.01728,0) 1.4 1.22474 1.22474 1.00861 4 (1.01166,0) 1.4 1.22474 1.22474 1.00581 4 (1.00609,0) 1.4 1.22474 1.22474 1.00304 4 (1.00057,0) 1.4 1.22474 1.22474 1.00029 4 (0.995129,0) 1.4 1.22474 1.22474 0.997561 5 (0.5,0) 1.4 1 1 0.707107 5 (0.84565,0) 1.4 1.22474 1.22474 0.919592 5 (0.843905,0) 1.4 1.22474 1.22474 0.918643 5 (0.842449,0) 1.4 1.22474 1.22474 0.91785 5 (0.841264,0) 1.4 1.22474 1.22474 0.917204 5 (0.840329,0) 1.4 1.22474 1.22474 0.916695 6 (0.5,0) 1.4 1 1 0.707107 6 (0.874187,0) 1.4 1.22474 1.22474 0.93498 6 (0.870719,0) 1.4 1.22474 1.22474 0.933123 6 (0.867317,0) 1.4 1.22474 1.22474 0.931299 6 (0.864013,0) 1.4 1.22474 1.22474 0.929523 6 (0.860838,0) 1.4 1.22474 1.22474 0.927813 6 (0.5,0) 1.5 1 1 0.707107 6 (0.860838,0) 1.5 1.22474 1.22474 0.927813 6 (0.857824,0) 1.5 1.22474 1.22474 0.926188 6 (0.855001,0) 1.5 1.22474 1.22474 0.924663 6 (0.852401,0) 1.5 1.22474 1.22474 0.923256 6 (0.850051,0) 1.5 1.22474 1.22474 0.921982 5 (0.5,0) 1.5 1 1 0.707107 5 (0.840329,0) 1.5 1.22474 1.22474 0.916695 5 (0.839624,0) 1.5 1.22474 1.22474 0.91631 5 (0.839129,0) 1.5 1.22474 1.22474 0.91604 5 (0.838823,0) 1.5 1.22474 1.22474 0.915873 5 (0.838685,0) 1.5 1.22474 1.22474 0.915798 4 (0.5,0) 1.5 1 1 0.707107 4 (0.995129,0) 1.5 1.22474 1.22474 0.997562 4 (0.989754,0) 1.5 1.22474 1.22474 0.994864 4 (0.984456,0) 1.5 1.22474 1.22474 0.992198 4 (0.979239,0) 1.5 1.22474 1.22474 0.989565 4 (0.974106,0) 1.5 1.22474 1.22474 0.986968 3 (0.5,0) 1.5 1 1 0.707107 3 (1.06632,0) 1.5 1.22474 1.22474 1.03263 3 (1.05993,0) 1.5 1.22474 1.22474 1.02953 3 (1.05338,0) 1.5 1.22474 1.22474 1.02634 3 (1.04668,0) 1.5 1.22474 1.22474 1.02308 3 (1.03986,0) 1.5 1.22474 1.22474 1.01973 2 (0.5,0) 1.5 1 1 0.707107 2 (0.951427,0) 1.5 1.22474 1.22474 0.975411 2 (0.954713,0) 1.5 1.22474 1.22474 0.977094 2 (0.957826,0) 1.5 1.22474 1.22474 0.978686 2 (0.960757,0) 1.5 1.22474 1.22474 0.980182 2 (0.963497,0) 1.5 1.22474 1.22474 0.981579 1 (0.5,0) 1.5 1 1 0.707107 1 (0.864801,0) 1.5 1.22474 1.22474 0.929947 1 (0.869053,0) 1.5 1.22474 1.22474 0.93223 1 (0.873348,0) 1.5 1.22474 1.22474 0.934531 1 (0.877678,0) 1.5 1.22474 1.22474 0.936845 1 (0.882036,0) 1.5 1.22474 1.22474 0.939167 1 (0.5,0) 1.6 1 1 0.707107 1 (0.882036,0) 1.6 1.22474 1.22474 0.939167 1 (0.886411,0) 1.6 1.22474 1.22474 0.941494 1 (0.890796,0) 1.6 1.22474 1.22474 0.94382 1 (0.89518,0) 1.6 1.22474 1.22474 0.94614 1 (0.899554,0) 1.6 1.22474 1.22474 0.948448 2 (0.5,0) 1.6 1 1 0.707107 2 (0.963497,0) 1.6 1.22474 1.22474 0.981579 2 (0.966037,0) 1.6 1.22474 1.22474 0.982872 2 (0.968369,0) 1.6 1.22474 1.22474 0.984057 2 (0.970487,0) 1.6 1.22474 1.22474 0.985133 2 (0.972384,0) 1.6 1.22474 1.22474 0.986096 3 (0.5,0) 1.6 1 1 0.707107 3 (1.03986,0) 1.6 1.22474 1.22474 1.01973 3 (1.03292,0) 1.6 1.22474 1.22474 1.01633 3 (1.02589,0) 1.6 1.22474 1.22474 1.01286 3 (1.01878,0) 1.6 1.22474 1.22474 1.00934 3 (1.01161,0) 1.6 1.22474 1.22474 1.00579 4 (0.5,0) 1.6 1 1 0.707107 4 (0.974105,0) 1.6 1.22474 1.22474 0.986967 4 (0.96906,0) 1.6 1.22474 1.22474 0.984408 4 (0.964105,0) 1.6 1.22474 1.22474 0.981888 4 (0.959242,0) 1.6 1.22474 1.22474 0.979409 4 (0.954473,0) 1.6 1.22474 1.22474 0.976972 5 (0.5,0) 1.6 1 1 0.707107 5 (0.838685,0) 1.6 1.22474 1.22474 0.915798 5 (0.838697,0) 1.6 1.22474 1.22474 0.915804 5 (0.838839,0) 1.6 1.22474 1.22474 0.915882 5 (0.839093,0) 1.6 1.22474 1.22474 0.91602 5 (0.839439,0) 1.6 1.22474 1.22474 0.916209 6 (0.5,0) 1.6 1 1 0.707107 6 (0.850052,0) 1.6 1.22474 1.22474 0.921982 6 (0.847981,0) 1.6 1.22474 1.22474 0.920859 6 (0.846215,0) 1.6 1.22474 1.22474 0.919899 6 (0.844779,0) 1.6 1.22474 1.22474 0.919119 6 (0.843697,0) 1.6 1.22474 1.22474 0.91853 6 (0.5,0) 1.7 1 1 0.707107 6 (0.843697,0) 1.7 1.22474 1.22474 0.91853 6 (0.842989,0) 1.7 1.22474 1.22474 0.918144 6 (0.842675,0) 1.7 1.22474 1.22474 0.917974 6 (0.842773,0) 1.7 1.22474 1.22474 0.918027 6 (0.843297,0) 1.7 1.22474 1.22474 0.918312 5 (0.5,0) 1.7 1 1 0.707107 5 (0.839439,0) 1.7 1.22474 1.22474 0.916209 5 (0.839863,0) 1.7 1.22474 1.22474 0.91644 5 (0.840347,0) 1.7 1.22474 1.22474 0.916704 5 (0.840877,0) 1.7 1.22474 1.22474 0.916993 5 (0.84144,0) 1.7 1.22474 1.22474 0.9173 4 (0.5,0) 1.7 1 1 0.707107 4 (0.954474,0) 1.7 1.22474 1.22474 0.976972 4 (0.949798,0) 1.7 1.22474 1.22474 0.974576 4 (0.945217,0) 1.7 1.22474 1.22474 0.972223 4 (0.94073,0) 1.7 1.22474 1.22474 0.969912 4 (0.936334,0) 1.7 1.22474 1.22474 0.967644 3 (0.5,0) 1.7 1 1 0.707107 3 (1.01161,0) 1.7 1.22474 1.22474 1.00579 3 (1.00441,0) 1.7 1.22474 1.22474 1.0022 3 (0.997179,0) 1.7 1.22474 1.22474 0.998589 3 (0.989949,0) 1.7 1.22474 1.22474 0.994962 3 (0.982732,0) 1.7 1.22474 1.22474 0.991329 2 (0.5,0) 1.7 1 1 0.707107 2 (0.972385,0) 1.7 1.22474 1.22474 0.986096 2 (0.974057,0) 1.7 1.22474 1.22474 0.986943 2 (0.9755,0) 1.7 1.22474 1.22474 0.987674 2 (0.97671,0) 1.7 1.22474 1.22474 0.988287 2 (0.977687,0) 1.7 1.22474 1.22474 0.98878 1 (0.5,0) 1.7 1 1 0.707107 1 (0.899555,0) 1.7 1.22474 1.22474 0.948449 1 (0.903909,0) 1.7 1.22474 1.22474 0.950741 1 (0.908232,0) 1.7 1.22474 1.22474 0.953012 1 (0.912514,0) 1.7 1.22474 1.22474 0.955256 1 (0.916743,0) 1.7 1.22474 1.22474 0.957467 1 (0.5,0) 1.8 1 1 0.707107 1 (0.916743,0) 1.8 1.22474 1.22474 0.957467 1 (0.920908,0) 1.8 1.22474 1.22474 0.959639 1 (0.924998,0) 1.8 1.22474 1.22474 0.961768 1 (0.929002,0) 1.8 1.22474 1.22474 0.963847 1 (0.932909,0) 1.8 1.22474 1.22474 0.965872 2 (0.5,0) 1.8 1 1 0.707107 2 (0.977687,0) 1.8 1.22474 1.22474 0.98878 2 (0.978427,0) 1.8 1.22474 1.22474 0.989155 2 (0.978933,0) 1.8 1.22474 1.22474 0.98941 2 (0.979204,0) 1.8 1.22474 1.22474 0.989547 2 (0.979242,0) 1.8 1.22474 1.22474 0.989567 3 (0.5,0) 1.8 1 1 0.707107 3 (0.982732,0) 1.8 1.22474 1.22474 0.991328 3 (0.975546,0) 1.8 1.22474 1.22474 0.987697 3 (0.968407,0) 1.8 1.22474 1.22474 0.984077 3 (0.961332,0) 1.8 1.22474 1.22474 0.980475 3 (0.954335,0) 1.8 1.22474 1.22474 0.976901 4 (0.5,0) 1.8 1 1 0.707107 4 (0.936333,0) 1.8 1.22474 1.22474 0.967643 4 (0.932028,0) 1.8 1.22474 1.22474 0.965416 4 (0.92781,0) 1.8 1.22474 1.22474 0.963229 4 (0.923678,0) 1.8 1.22474 1.22474 0.961082 4 (0.919628,0) 1.8 1.22474 1.22474 0.958972 5 (0.5,0) 1.8 1 1 0.707107 5 (0.841439,0) 1.8 1.22474 1.22474 0.9173 5 (0.842022,0) 1.8 1.22474 1.22474 0.917618 5 (0.842615,0) 1.8 1.22474 1.22474 0.917941 5 (0.843208,0) 1.8 1.22474 1.22474 0.918264 5 (0.843794,0) 1.8 1.22474 1.22474 0.918582 6 (0.5,0) 1.8 1 1 0.707107 6 (0.843299,0) 1.8 1.22474 1.22474 0.918313 6 (0.844262,0) 1.8 1.22474 1.22474 0.918837 6 (0.845674,0) 1.8 1.22474 1.22474 0.919605 6 (0.847543,0) 1.8 1.22474 1.22474 0.920621 6 (0.849873,0) 1.8 1.22474 1.22474 0.921886 6 (0.5,0) 1.9 1 1 0.707107 6 (0.849873,0) 1.9 1.22474 1.22474 0.921886 6 (0.852668,0) 1.9 1.22474 1.22474 0.9234 6 (0.855927,0) 1.9 1.22474 1.22474 0.925163 6 (0.859647,0) 1.9 1.22474 1.22474 0.927171 6 (0.863822,0) 1.9 1.22474 1.22474 0.92942 5 (0.5,0) 1.9 1 1 0.707107 5 (0.843794,0) 1.9 1.22474 1.22474 0.918582 5 (0.844365,0) 1.9 1.22474 1.22474 0.918893 5 (0.844918,0) 1.9 1.22474 1.22474 0.919194 5 (0.845448,0) 1.9 1.22474 1.22474 0.919482 5 (0.845954,0) 1.9 1.22474 1.22474 0.919758 4 (0.5,0) 1.9 1 1 0.707107 4 (0.919627,0) 1.9 1.22474 1.22474 0.958972 4 (0.915655,0) 1.9 1.22474 1.22474 0.956899 4 (0.911757,0) 1.9 1.22474 1.22474 0.95486 4 (0.907928,0) 1.9 1.22474 1.22474 0.952853 4 (0.904165,0) 1.9 1.22474 1.22474 0.950876 3 (0.5,0) 1.9 1 1 0.707107 3 (0.954335,0) 1.9 1.22474 1.22474 0.976901 3 (0.947432,0) 1.9 1.22474 1.22474 0.973361 3 (0.940636,0) 1.9 1.22474 1.22474 0.969864 3 (0.933961,0) 1.9 1.22474 1.22474 0.966417 3 (0.927419,0) 1.9 1.22474 1.22474 0.963026 2 (0.5,0) 1.9 1 1 0.707107 2 (0.979243,0) 1.9 1.22474 1.22474 0.989567 2 (0.979052,0) 1.9 1.22474 1.22474 0.989471 2 (0.978636,0) 1.9 1.22474 1.22474 0.98926 2 (0.977999,0) 1.9 1.22474 1.22474 0.988938 2 (0.977148,0) 1.9 1.22474 1.22474 0.988508 1 (0.5,0) 1.9 1 1 0.707107 1 (0.932909,0) 1.9 1.22474 1.22474 0.965872 1 (0.936707,0) 1.9 1.22474 1.22474 0.967836 1 (0.940386,0) 1.9 1.22474 1.22474 0.969735 1 (0.943934,0) 1.9 1.22474 1.22474 0.971563 1 (0.947342,0) 1.9 1.22474 1.22474 0.973315 1 (0.5,0) 2 1 1 0.707107 1 (0.947342,0) 2 1.22474 1.22474 0.973315 1 (0.950599,0) 2 1.22474 1.22474 0.974986 1 (0.953695,0) 2 1.22474 1.22474 0.976573 1 (0.956621,0) 2 1.22474 1.22474 0.97807 1 (0.959368,0) 2 1.22474 1.22474 0.979473 2 (0.5,0) 2 1 1 0.707107 2 (0.977148,0) 2 1.22474 1.22474 0.988508 2 (0.976089,0) 2 1.22474 1.22474 0.987972 2 (0.97483,0) 2 1.22474 1.22474 0.987335 2 (0.973379,0) 2 1.22474 1.22474 0.9866 2 (0.971745,0) 2 1.22474 1.22474 0.985771 3 (0.5,0) 2 1 1 0.707107 3 (0.927419,0) 2 1.22474 1.22474 0.963026 3 (0.921022,0) 2 1.22474 1.22474 0.959699 3 (0.91478,0) 2 1.22474 1.22474 0.956442 3 (0.908704,0) 2 1.22474 1.22474 0.953259 3 (0.902801,0) 2 1.22474 1.22474 0.950158 4 (0.5,0) 2 1 1 0.707107 4 (0.904164,0) 2 1.22474 1.22474 0.950875 4 (0.900461,0) 2 1.22474 1.22474 0.948926 4 (0.896813,0) 2 1.22474 1.22474 0.947002 4 (0.893216,0) 2 1.22474 1.22474 0.945101 4 (0.889664,0) 2 1.22474 1.22474 0.94322 5 (0.5,0) 2 1 1 0.707107 5 (0.845954,0) 2 1.22474 1.22474 0.919758 5 (0.846436,0) 2 1.22474 1.22474 0.920019 5 (0.846894,0) 2 1.22474 1.22474 0.920268 5 (0.847331,0) 2 1.22474 1.22474 0.920506 5 (0.847751,0) 2 1.22474 1.22474 0.920734 6 (0.5,0) 2 1 1 0.707107 6 (0.863823,0) 2 1.22474 1.22474 0.929421 6 (0.868446,0) 2 1.22474 1.22474 0.931905 6 (0.873507,0) 2 1.22474 1.22474 0.934616 6 (0.878991,0) 2 1.22474 1.22474 0.937545 6 (0.884883,0) 2 1.22474 1.22474 0.940682 6 (0.5,0) 2.1 1 1 0.707107 6 (0.884883,0) 2.1 1.22474 1.22474 0.940682 6 (0.891166,0) 2.1 1.22474 1.22474 0.944016 6 (0.897818,0) 2.1 1.22474 1.22474 0.947533 6 (0.904818,0) 2.1 1.22474 1.22474 0.951219 6 (0.91214,0) 2.1 1.22474 1.22474 0.95506 5 (0.5,0) 2.1 1 1 0.707107 5 (0.847751,0) 2.1 1.22474 1.22474 0.920734 5 (0.848158,0) 2.1 1.22474 1.22474 0.920955 5 (0.84856,0) 2.1 1.22474 1.22474 0.921173 5 (0.848962,0) 2.1 1.22474 1.22474 0.921391 5 (0.849373,0) 2.1 1.22474 1.22474 0.921615 4 (0.5,0) 2.1 1 1 0.707107 4 (0.889664,0) 2.1 1.22474 1.22474 0.94322 4 (0.886152,0) 2.1 1.22474 1.22474 0.941357 4 (0.882676,0) 2.1 1.22474 1.22474 0.939508 4 (0.87923,0) 2.1 1.22474 1.22474 0.937673 4 (0.875811,0) 2.1 1.22474 1.22474 0.935848 3 (0.5,0) 2.1 1 1 0.707107 3 (0.9028,0) 2.1 1.22474 1.22474 0.950158 3 (0.897078,0) 2.1 1.22474 1.22474 0.947142 3 (0.891544,0) 2.1 1.22474 1.22474 0.944216 3 (0.886204,0) 2.1 1.22474 1.22474 0.941384 3 (0.881063,0) 2.1 1.22474 1.22474 0.938649 2 (0.5,0) 2.1 1 1 0.707107 2 (0.971745,0) 2.1 1.22474 1.22474 0.985771 2 (0.969938,0) 2.1 1.22474 1.22474 0.984854 2 (0.967968,0) 2.1 1.22474 1.22474 0.983854 2 (0.965846,0) 2.1 1.22474 1.22474 0.982775 2 (0.963584,0) 2.1 1.22474 1.22474 0.981623 1 (0.5,0) 2.1 1 1 0.707107 1 (0.959369,0) 2.1 1.22474 1.22474 0.979474 1 (0.961929,0) 2.1 1.22474 1.22474 0.98078 1 (0.964296,0) 2.1 1.22474 1.22474 0.981986 1 (0.966461,0) 2.1 1.22474 1.22474 0.983088 1 (0.96842,0) 2.1 1.22474 1.22474 0.984083 1 (0.5,0) 2.2 1 1 0.707107 1 (0.96842,0) 2.2 1.22474 1.22474 0.984083 1 (0.970166,0) 2.2 1.22474 1.22474 0.98497 1 (0.971697,0) 2.2 1.22474 1.22474 0.985747 1 (0.973008,0) 2.2 1.22474 1.22474 0.986412 1 (0.974098,0) 2.2 1.22474 1.22474 0.986964 2 (0.5,0) 2.2 1 1 0.707107 2 (0.963584,0) 2.2 1.22474 1.22474 0.981623 2 (0.961193,0) 2.2 1.22474 1.22474 0.980404 2 (0.958685,0) 2.2 1.22474 1.22474 0.979124 2 (0.956072,0) 2.2 1.22474 1.22474 0.977789 2 (0.953367,0) 2.2 1.22474 1.22474 0.976405 3 (0.5,0) 2.2 1 1 0.707107 3 (0.881062,0) 2.2 1.22474 1.22474 0.938649 3 (0.876122,0) 2.2 1.22474 1.22474 0.936014 3 (0.871386,0) 2.2 1.22474 1.22474 0.933481 3 (0.866857,0) 2.2 1.22474 1.22474 0.931051 3 (0.862534,0) 2.2 1.22474 1.22474 0.928727 4 (0.5,0) 2.2 1 1 0.707107 4 (0.875811,0) 2.2 1.22474 1.22474 0.935848 4 (0.872414,0) 2.2 1.22474 1.22474 0.934031 4 (0.869036,0) 2.2 1.22474 1.22474 0.932221 4 (0.865674,0) 2.2 1.22474 1.22474 0.930416 4 (0.862324,0) 2.2 1.22474 1.22474 0.928614 5 (0.5,0) 2.2 1 1 0.707107 5 (0.849373,0) 2.2 1.22474 1.22474 0.921615 5 (0.849803,0) 2.2 1.22474 1.22474 0.921848 5 (0.850261,0) 2.2 1.22474 1.22474 0.922096 5 (0.850757,0) 2.2 1.22474 1.22474 0.922365 5 (0.851303,0) 2.2 1.22474 1.22474 0.922661 6 (0.5,0) 2.2 1 1 0.707107 6 (0.912141,0) 2.2 1.22474 1.22474 0.955061 6 (0.91976,0) 2.2 1.22474 1.22474 0.959041 6 (0.927647,0) 2.2 1.22474 1.22474 0.963144 6 (0.935772,0) 2.2 1.22474 1.22474 0.967353 6 (0.944105,0) 2.2 1.22474 1.22474 0.971651 6 (0.5,0) 2.3 1 1 0.707107 6 (0.944105,0) 2.3 1.22474 1.22474 0.971651 6 (0.952613,0) 2.3 1.22474 1.22474 0.976019 6 (0.961262,0) 2.3 1.22474 1.22474 0.980439 6 (0.970018,0) 2.3 1.22474 1.22474 0.984895 6 (0.978846,0) 2.3 1.22474 1.22474 0.989366 5 (0.5,0) 2.3 1 1 0.707107 5 (0.851303,0) 2.3 1.22474 1.22474 0.922661 5 (0.851909,0) 2.3 1.22474 1.22474 0.922989 5 (0.852586,0) 2.3 1.22474 1.22474 0.923356 5 (0.853348,0) 2.3 1.22474 1.22474 0.923768 5 (0.854204,0) 2.3 1.22474 1.22474 0.924231 4 (0.5,0) 2.3 1 1 0.707107 4 (0.862324,0) 2.3 1.22474 1.22474 0.928614 4 (0.858985,0) 2.3 1.22474 1.22474 0.926814 4 (0.855654,0) 2.3 1.22474 1.22474 0.925016 4 (0.852331,0) 2.3 1.22474 1.22474 0.923218 4 (0.849015,0) 2.3 1.22474 1.22474 0.92142 3 (0.5,0) 2.3 1 1 0.707107 3 (0.862533,0) 2.3 1.22474 1.22474 0.928727 3 (0.858416,0) 2.3 1.22474 1.22474 0.926508 3 (0.854504,0) 2.3 1.22474 1.22474 0.924394 3 (0.850795,0) 2.3 1.22474 1.22474 0.922385 3 (0.847285,0) 2.3 1.22474 1.22474 0.920481 2 (0.5,0) 2.3 1 1 0.707107 2 (0.953367,0) 2.3 1.22474 1.22474 0.976405 2 (0.950583,0) 2.3 1.22474 1.22474 0.974978 2 (0.947732,0) 2.3 1.22474 1.22474 0.973515 2 (0.944826,0) 2.3 1.22474 1.22474 0.972022 2 (0.941879,0) 2.3 1.22474 1.22474 0.970504 1 (0.5,0) 2.3 1 1 0.707107 1 (0.974098,0) 2.3 1.22474 1.22474 0.986964 1 (0.974965,0) 2.3 1.22474 1.22474 0.987403 1 (0.975609,0) 2.3 1.22474 1.22474 0.987729 1 (0.976031,0) 2.3 1.22474 1.22474 0.987943 1 (0.976233,0) 2.3 1.22474 1.22474 0.988045 1 (0.5,0) 2.4 1 1 0.707107 1 (0.976233,0) 2.4 1.22474 1.22474 0.988045 1 (0.976219,0) 2.4 1.22474 1.22474 0.988038 1 (0.975992,0) 2.4 1.22474 1.22474 0.987923 1 (0.975559,0) 2.4 1.22474 1.22474 0.987704 1 (0.974926,0) 2.4 1.22474 1.22474 0.987383 2 (0.5,0) 2.4 1 1 0.707107 2 (0.941879,0) 2.4 1.22474 1.22474 0.970504 2 (0.938901,0) 2.4 1.22474 1.22474 0.968969 2 (0.935906,0) 2.4 1.22474 1.22474 0.967422 2 (0.932903,0) 2.4 1.22474 1.22474 0.965869 2 (0.929906,0) 2.4 1.22474 1.22474 0.964316 3 (0.5,0) 2.4 1 1 0.707107 3 (0.847285,0) 2.4 1.22474 1.22474 0.920481 3 (0.843971,0) 2.4 1.22474 1.22474 0.918679 3 (0.840849,0) 2.4 1.22474 1.22474 0.916978 3 (0.837913,0) 2.4 1.22474 1.22474 0.915376 3 (0.835157,0) 2.4 1.22474 1.22474 0.913869 4 (0.5,0) 2.4 1 1 0.707107 4 (0.849015,0) 2.4 1.22474 1.22474 0.92142 4 (0.845707,0) 2.4 1.22474 1.22474 0.919623 4 (0.842408,0) 2.4 1.22474 1.22474 0.917828 4 (0.83912,0) 2.4 1.22474 1.22474 0.916035 4 (0.835845,0) 2.4 1.22474 1.22474 0.914246 5 (0.5,0) 2.4 1 1 0.707107 5 (0.854203,0) 2.4 1.22474 1.22474 0.924231 5 (0.855165,0) 2.4 1.22474 1.22474 0.924751 5 (0.856244,0) 2.4 1.22474 1.22474 0.925335 5 (0.85745,0) 2.4 1.22474 1.22474 0.925986 5 (0.858793,0) 2.4 1.22474 1.22474 0.926711 6 (0.5,0) 2.4 1 1 0.707107 6 (0.978846,0) 2.4 1.22474 1.22474 0.989366 6 (0.98771,0) 2.4 1.22474 1.22474 0.993836 6 (0.996575,0) 2.4 1.22474 1.22474 0.998286 6 (1.0054,0) 2.4 1.22474 1.22474 1.0027 6 (1.01416,0) 2.4 1.22474 1.22474 1.00706 6 (0.5,0) 2.5 1 1 0.707107 6 (1.01416,0) 2.5 1.22474 1.22474 1.00706 6 (1.02282,0) 2.5 1.22474 1.22474 1.01134 6 (1.03133,0) 2.5 1.22474 1.22474 1.01554 6 (1.03966,0) 2.5 1.22474 1.22474 1.01964 6 (1.04779,0) 2.5 1.22474 1.22474 1.02361 5 (0.5,0) 2.5 1 1 0.707107 5 (0.858793,0) 2.5 1.22474 1.22474 0.926711 5 (0.860283,0) 2.5 1.22474 1.22474 0.927514 5 (0.861927,0) 2.5 1.22474 1.22474 0.9284 5 (0.863732,0) 2.5 1.22474 1.22474 0.929372 5 (0.865706,0) 2.5 1.22474 1.22474 0.930433 4 (0.5,0) 2.5 1 1 0.707107 4 (0.835846,0) 2.5 1.22474 1.22474 0.914246 4 (0.832588,0) 2.5 1.22474 1.22474 0.912463 4 (0.829352,0) 2.5 1.22474 1.22474 0.910688 4 (0.826142,0) 2.5 1.22474 1.22474 0.908923 4 (0.822963,0) 2.5 1.22474 1.22474 0.907173 3 (0.5,0) 2.5 1 1 0.707107 3 (0.835156,0) 2.5 1.22474 1.22474 0.913869 3 (0.832574,0) 2.5 1.22474 1.22474 0.912455 3 (0.830158,0) 2.5 1.22474 1.22474 0.91113 3 (0.827902,0) 2.5 1.22474 1.22474 0.909891 3 (0.825797,0) 2.5 1.22474 1.22474 0.908734 2 (0.5,0) 2.5 1 1 0.707107 2 (0.929905,0) 2.5 1.22474 1.22474 0.964316 2 (0.926923,0) 2.5 1.22474 1.22474 0.962768 2 (0.923966,0) 2.5 1.22474 1.22474 0.961231 2 (0.921044,0) 2.5 1.22474 1.22474 0.95971 2 (0.918165,0) 2.5 1.22474 1.22474 0.958209 1 (0.5,0) 2.5 1 1 0.707107 1 (0.974925,0) 2.5 1.22474 1.22474 0.987383 1 (0.9741,0) 2.5 1.22474 1.22474 0.986965 1 (0.973091,0) 2.5 1.22474 1.22474 0.986454 1 (0.971908,0) 2.5 1.22474 1.22474 0.985854 1 (0.970564,0) 2.5 1.22474 1.22474 0.985172 1 (0.5,0) 2.6 1 1 0.707107 1 (0.970564,0) 2.6 1.22474 1.22474 0.985172 1 (0.969069,0) 2.6 1.22474 1.22474 0.984413 1 (0.967437,0) 2.6 1.22474 1.22474 0.983584 1 (0.965682,0) 2.6 1.22474 1.22474 0.982691 1 (0.963819,0) 2.6 1.22474 1.22474 0.981743 2 (0.5,0) 2.6 1 1 0.707107 2 (0.918165,0) 2.6 1.22474 1.22474 0.958209 2 (0.915339,0) 2.6 1.22474 1.22474 0.956733 2 (0.912572,0) 2.6 1.22474 1.22474 0.955286 2 (0.909871,0) 2.6 1.22474 1.22474 0.953871 2 (0.907242,0) 2.6 1.22474 1.22474 0.952492 3 (0.5,0) 2.6 1 1 0.707107 3 (0.825797,0) 2.6 1.22474 1.22474 0.908734 3 (0.823836,0) 2.6 1.22474 1.22474 0.907654 3 (0.82201,0) 2.6 1.22474 1.22474 0.906647 3 (0.82031,0) 2.6 1.22474 1.22474 0.90571 3 (0.818729,0) 2.6 1.22474 1.22474 0.904836 4 (0.5,0) 2.6 1 1 0.707107 4 (0.822964,0) 2.6 1.22474 1.22474 0.907173 4 (0.819824,0) 2.6 1.22474 1.22474 0.905441 4 (0.81673,0) 2.6 1.22474 1.22474 0.903731 4 (0.813691,0) 2.6 1.22474 1.22474 0.902048 4 (0.810714,0) 2.6 1.22474 1.22474 0.900397 5 (0.5,0) 2.6 1 1 0.707107 5 (0.865706,0) 2.6 1.22474 1.22474 0.930433 5 (0.867852,0) 2.6 1.22474 1.22474 0.931586 5 (0.870176,0) 2.6 1.22474 1.22474 0.932832 5 (0.87268,0) 2.6 1.22474 1.22474 0.934173 5 (0.875364,0) 2.6 1.22474 1.22474 0.935609 6 (0.5,0) 2.6 1 1 0.707107 6 (1.04779,0) 2.6 1.22474 1.22474 1.02361 6 (1.05567,0) 2.6 1.22474 1.22474 1.02746 6 (1.06328,0) 2.6 1.22474 1.22474 1.03115 6 (1.07059,0) 2.6 1.22474 1.22474 1.03469 6 (1.07756,0) 2.6 1.22474 1.22474 1.03806 6 (0.5,0) 2.7 1 1 0.707107 6 (1.07756,0) 2.7 1.22474 1.22474 1.03806 6 (1.08418,0) 2.7 1.22474 1.22474 1.04124 6 (1.09042,0) 2.7 1.22474 1.22474 1.04423 6 (1.09625,0) 2.7 1.22474 1.22474 1.04702 6 (1.10166,0) 2.7 1.22474 1.22474 1.0496 5 (0.5,0) 2.7 1 1 0.707107 5 (0.875364,0) 2.7 1.22474 1.22474 0.935609 5 (0.878228,0) 2.7 1.22474 1.22474 0.937138 5 (0.881272,0) 2.7 1.22474 1.22474 0.938761 5 (0.884491,0) 2.7 1.22474 1.22474 0.940474 5 (0.88788,0) 2.7 1.22474 1.22474 0.942274 4 (0.5,0) 2.7 1 1 0.707107 4 (0.810714,0) 2.7 1.22474 1.22474 0.900397 4 (0.807809,0) 2.7 1.22474 1.22474 0.898782 4 (0.804986,0) 2.7 1.22474 1.22474 0.89721 4 (0.802255,0) 2.7 1.22474 1.22474 0.895687 4 (0.799628,0) 2.7 1.22474 1.22474 0.894219 3 (0.5,0) 2.7 1 1 0.707107 3 (0.818729,0) 2.7 1.22474 1.22474 0.904836 3 (0.817257,0) 2.7 1.22474 1.22474 0.904023 3 (0.815886,0) 2.7 1.22474 1.22474 0.903264 3 (0.814608,0) 2.7 1.22474 1.22474 0.902556 3 (0.813414,0) 2.7 1.22474 1.22474 0.901895 2 (0.5,0) 2.7 1 1 0.707107 2 (0.907242,0) 2.7 1.22474 1.22474 0.952493 2 (0.904691,0) 2.7 1.22474 1.22474 0.951152 2 (0.902222,0) 2.7 1.22474 1.22474 0.949853 2 (0.899838,0) 2.7 1.22474 1.22474 0.948598 2 (0.897543,0) 2.7 1.22474 1.22474 0.947387 1 (0.5,0) 2.7 1 1 0.707107 1 (0.963819,0) 2.7 1.22474 1.22474 0.981743 1 (0.961863,0) 2.7 1.22474 1.22474 0.980746 1 (0.959831,0) 2.7 1.22474 1.22474 0.97971 1 (0.95774,0) 2.7 1.22474 1.22474 0.978642 1 (0.955608,0) 2.7 1.22474 1.22474 0.977552 1 (0.5,0) 2.8 1 1 0.707107 1 (0.955608,0) 2.8 1.22474 1.22474 0.977552 1 (0.953452,0) 2.8 1.22474 1.22474 0.976448 1 (0.95129,0) 2.8 1.22474 1.22474 0.975341 1 (0.949143,0) 2.8 1.22474 1.22474 0.97424 1 (0.947028,0) 2.8 1.22474 1.22474 0.973154 2 (0.5,0) 2.8 1 1 0.707107 2 (0.897543,0) 2.8 1.22474 1.22474 0.947387 2 (0.895339,0) 2.8 1.22474 1.22474 0.946223 2 (0.893227,0) 2.8 1.22474 1.22474 0.945107 2 (0.891207,0) 2.8 1.22474 1.22474 0.944038 2 (0.889281,0) 2.8 1.22474 1.22474 0.943017 3 (0.5,0) 2.8 1 1 0.707107 3 (0.813414,0) 2.8 1.22474 1.22474 0.901895 3 (0.812296,0) 2.8 1.22474 1.22474 0.901275 3 (0.811246,0) 2.8 1.22474 1.22474 0.900692 3 (0.810258,0) 2.8 1.22474 1.22474 0.900143 3 (0.809323,0) 2.8 1.22474 1.22474 0.899624 4 (0.5,0) 2.8 1 1 0.707107 4 (0.799628,0) 2.8 1.22474 1.22474 0.894219 4 (0.797115,0) 2.8 1.22474 1.22474 0.892813 4 (0.794728,0) 2.8 1.22474 1.22474 0.891475 4 (0.792479,0) 2.8 1.22474 1.22474 0.890213 4 (0.79038,0) 2.8 1.22474 1.22474 0.889033 5 (0.5,0) 2.8 1 1 0.707107 5 (0.88788,0) 2.8 1.22474 1.22474 0.942274 5 (0.891434,0) 2.8 1.22474 1.22474 0.944158 5 (0.895145,0) 2.8 1.22474 1.22474 0.946121 5 (0.899003,0) 2.8 1.22474 1.22474 0.948158 5 (0.902999,0) 2.8 1.22474 1.22474 0.950262 6 (0.5,0) 2.8 1 1 0.707107 6 (1.10166,0) 2.8 1.22474 1.22474 1.0496 6 (1.10662,0) 2.8 1.22474 1.22474 1.05196 6 (1.11112,0) 2.8 1.22474 1.22474 1.0541 6 (1.11514,0) 2.8 1.22474 1.22474 1.056 6 (1.11868,0) 2.8 1.22474 1.22474 1.05768 6 (0.5,0) 2.9 1 1 0.707107 6 (1.11868,0) 2.9 1.22474 1.22474 1.05768 6 (1.12172,0) 2.9 1.22474 1.22474 1.05911 6 (1.12426,0) 2.9 1.22474 1.22474 1.06031 6 (1.12629,0) 2.9 1.22474 1.22474 1.06127 6 (1.1278,0) 2.9 1.22474 1.22474 1.06198 5 (0.5,0) 2.9 1 1 0.707107 5 (0.902999,0) 2.9 1.22474 1.22474 0.950262 5 (0.907118,0) 2.9 1.22474 1.22474 0.952427 5 (0.911349,0) 2.9 1.22474 1.22474 0.954646 5 (0.915675,0) 2.9 1.22474 1.22474 0.956909 5 (0.920082,0) 2.9 1.22474 1.22474 0.959209 4 (0.5,0) 2.9 1 1 0.707107 4 (0.79038,0) 2.9 1.22474 1.22474 0.889033 4 (0.788444,0) 2.9 1.22474 1.22474 0.887944 4 (0.786681,0) 2.9 1.22474 1.22474 0.886951 4 (0.785105,0) 2.9 1.22474 1.22474 0.886062 4 (0.783727,0) 2.9 1.22474 1.22474 0.885284 3 (0.5,0) 2.9 1 1 0.707107 3 (0.809323,0) 2.9 1.22474 1.22474 0.899624 3 (0.808435,0) 2.9 1.22474 1.22474 0.89913 3 (0.807588,0) 2.9 1.22474 1.22474 0.898659 3 (0.806777,0) 2.9 1.22474 1.22474 0.898208 3 (0.805996,0) 2.9 1.22474 1.22474 0.897773 2 (0.5,0) 2.9 1 1 0.707107 2 (0.88928,0) 2.9 1.22474 1.22474 0.943017 2 (0.887446,0) 2.9 1.22474 1.22474 0.942043 2 (0.885702,0) 2.9 1.22474 1.22474 0.941118 2 (0.884047,0) 2.9 1.22474 1.22474 0.940238 2 (0.882479,0) 2.9 1.22474 1.22474 0.939403 1 (0.5,0) 2.9 1 1 0.707107 1 (0.947028,0) 2.9 1.22474 1.22474 0.973154 1 (0.944965,0) 2.9 1.22474 1.22474 0.972093 1 (0.942973,0) 2.9 1.22474 1.22474 0.971068 1 (0.94107,0) 2.9 1.22474 1.22474 0.970088 1 (0.939276,0) 2.9 1.22474 1.22474 0.969162 1 (0.5,0) 3 1 1 0.707107 1 (0.939276,0) 3 1.22474 1.22474 0.969162 1 (0.937607,0) 3 1.22474 1.22474 0.968301 1 (0.936083,0) 3 1.22474 1.22474 0.967514 1 (0.934721,0) 3 1.22474 1.22474 0.966809 1 (0.933536,0) 3 1.22474 1.22474 0.966196 2 (0.5,0) 3 1 1 0.707107 2 (0.882479,0) 3 1.22474 1.22474 0.939403 2 (0.880994,0) 3 1.22474 1.22474 0.938613 2 (0.879589,0) 3 1.22474 1.22474 0.937864 2 (0.878262,0) 3 1.22474 1.22474 0.937156 2 (0.877007,0) 3 1.22474 1.22474 0.936486 3 (0.5,0) 3 1 1 0.707107 3 (0.805996,0) 3 1.22474 1.22474 0.897773 3 (0.805242,0) 3 1.22474 1.22474 0.897353 3 (0.804509,0) 3 1.22474 1.22474 0.896944 3 (0.803796,0) 3 1.22474 1.22474 0.896547 3 (0.803099,0) 3 1.22474 1.22474 0.896158 4 (0.5,0) 3 1 1 0.707107 4 (0.783727,0) 3 1.22474 1.22474 0.885283 4 (0.782559,0) 3 1.22474 1.22474 0.884623 4 (0.781612,0) 3 1.22474 1.22474 0.884088 4 (0.780896,0) 3 1.22474 1.22474 0.883683 4 (0.780423,0) 3 1.22474 1.22474 0.883416 5 (0.5,0) 3 1 1 0.707107 5 (0.920082,0) 3 1.22474 1.22474 0.959209 5 (0.924551,0) 3 1.22474 1.22474 0.961536 5 (0.929065,0) 3 1.22474 1.22474 0.96388 5 (0.933604,0) 3 1.22474 1.22474 0.966232 5 (0.938149,0) 3 1.22474 1.22474 0.968581 6 (0.5,0) 3 1 1 0.707107 6 (1.1278,0) 3 1.22474 1.22474 1.06198 6 (1.12881,0) 3 1.22474 1.22474 1.06246 6 (1.12931,0) 3 1.22474 1.22474 1.06269 6 (1.12931,0) 3 1.22474 1.22474 1.06269 6 (1.12881,0) 3 1.22474 1.22474 1.06246 6 (0.5,0) 3.1 1 1 0.707107 6 (1.12881,0) 3.1 1.22474 1.22474 1.06246 6 (1.12783,0) 3.1 1.22474 1.22474 1.06199 6 (1.12637,0) 3.1 1.22474 1.22474 1.06131 6 (1.12445,0) 3.1 1.22474 1.22474 1.0604 6 (1.12208,0) 3.1 1.22474 1.22474 1.05928 5 (0.5,0) 3.1 1 1 0.707107 5 (0.938149,0) 3.1 1.22474 1.22474 0.968581 5 (0.942677,0) 3.1 1.22474 1.22474 0.970916 5 (0.947169,0) 3.1 1.22474 1.22474 0.973226 5 (0.951603,0) 3.1 1.22474 1.22474 0.975501 5 (0.955956,0) 3.1 1.22474 1.22474 0.97773 4 (0.5,0) 3.1 1 1 0.707107 4 (0.780423,0) 3.1 1.22474 1.22474 0.883415 4 (0.780202,0) 3.1 1.22474 1.22474 0.88329 4 (0.780241,0) 3.1 1.22474 1.22474 0.883312 4 (0.780549,0) 3.1 1.22474 1.22474 0.883487 4 (0.781133,0) 3.1 1.22474 1.22474 0.883817 3 (0.5,0) 3.1 1 1 0.707107 3 (0.803099,0) 3.1 1.22474 1.22474 0.896158 3 (0.802417,0) 3.1 1.22474 1.22474 0.895777 3 (0.801748,0) 3.1 1.22474 1.22474 0.895404 3 (0.801093,0) 3.1 1.22474 1.22474 0.895038 3 (0.80045,0) 3.1 1.22474 1.22474 0.894679 2 (0.5,0) 3.1 1 1 0.707107 2 (0.877007,0) 3.1 1.22474 1.22474 0.936487 2 (0.875821,0) 3.1 1.22474 1.22474 0.935853 2 (0.874699,0) 3.1 1.22474 1.22474 0.935253 2 (0.873637,0) 3.1 1.22474 1.22474 0.934686 2 (0.872632,0) 3.1 1.22474 1.22474 0.934148 1 (0.5,0) 3.1 1 1 0.707107 1 (0.933535,0) 3.1 1.22474 1.22474 0.966196 1 (0.932544,0) 3.1 1.22474 1.22474 0.965683 1 (0.93176,0) 3.1 1.22474 1.22474 0.965277 1 (0.931199,0) 3.1 1.22474 1.22474 0.964987 1 (0.930873,0) 3.1 1.22474 1.22474 0.964818 1 (0.5,0) 3.2 1 1 0.707107 1 (0.930873,0) 3.2 1.22474 1.22474 0.964818 1 (0.930793,0) 3.2 1.22474 1.22474 0.964776 1 (0.930969,0) 3.2 1.22474 1.22474 0.964867 1 (0.93141,0) 3.2 1.22474 1.22474 0.965096 1 (0.932124,0) 3.2 1.22474 1.22474 0.965466 2 (0.5,0) 3.2 1 1 0.707107 2 (0.872632,0) 3.2 1.22474 1.22474 0.934148 2 (0.871678,0) 3.2 1.22474 1.22474 0.933637 2 (0.870772,0) 3.2 1.22474 1.22474 0.933152 2 (0.869911,0) 3.2 1.22474 1.22474 0.93269 2 (0.86909,0) 3.2 1.22474 1.22474 0.93225 3 (0.5,0) 3.2 1 1 0.707107 3 (0.80045,0) 3.2 1.22474 1.22474 0.894679 3 (0.799821,0) 3.2 1.22474 1.22474 0.894327 3 (0.799208,0) 3.2 1.22474 1.22474 0.893984 3 (0.798611,0) 3.2 1.22474 1.22474 0.893651 3 (0.798035,0) 3.2 1.22474 1.22474 0.893328 4 (0.5,0) 3.2 1 1 0.707107 4 (0.781133,0) 3.2 1.22474 1.22474 0.883817 4 (0.781999,0) 3.2 1.22474 1.22474 0.884307 4 (0.783153,0) 3.2 1.22474 1.22474 0.884959 4 (0.784599,0) 3.2 1.22474 1.22474 0.885776 4 (0.786339,0) 3.2 1.22474 1.22474 0.886758 5 (0.5,0) 3.2 1 1 0.707107 5 (0.955956,0) 3.2 1.22474 1.22474 0.97773 5 (0.960207,0) 3.2 1.22474 1.22474 0.979901 5 (0.964332,0) 3.2 1.22474 1.22474 0.982004 5 (0.968311,0) 3.2 1.22474 1.22474 0.984028 5 (0.972121,0) 3.2 1.22474 1.22474 0.985962 6 (0.5,0) 3.2 1 1 0.707107 6 (1.12208,0) 3.2 1.22474 1.22474 1.05928 6 (1.11928,0) 3.2 1.22474 1.22474 1.05796 6 (1.11608,0) 3.2 1.22474 1.22474 1.05644 6 (1.11248,0) 3.2 1.22474 1.22474 1.05474 6 (1.10851,0) 3.2 1.22474 1.22474 1.05286 6 (0.5,0) 3.3 1 1 0.707107 6 (1.10851,0) 3.3 1.22474 1.22474 1.05286 6 (1.1042,0) 3.3 1.22474 1.22474 1.05081 6 (1.09957,0) 3.3 1.22474 1.22474 1.0486 6 (1.09464,0) 3.3 1.22474 1.22474 1.04625 6 (1.08944,0) 3.3 1.22474 1.22474 1.04376 5 (0.5,0) 3.3 1 1 0.707107 5 (0.972121,0) 3.3 1.22474 1.22474 0.985962 5 (0.975741,0) 3.3 1.22474 1.22474 0.987796 5 (0.97915,0) 3.3 1.22474 1.22474 0.98952 5 (0.982329,0) 3.3 1.22474 1.22474 0.991125 5 (0.985257,0) 3.3 1.22474 1.22474 0.992601 4 (0.5,0) 3.3 1 1 0.707107 4 (0.78634,0) 3.3 1.22474 1.22474 0.886758 4 (0.788377,0) 3.3 1.22474 1.22474 0.887906 4 (0.790711,0) 3.3 1.22474 1.22474 0.88922 4 (0.793343,0) 3.3 1.22474 1.22474 0.890698 4 (0.796269,0) 3.3 1.22474 1.22474 0.892339 3 (0.5,0) 3.3 1 1 0.707107 3 (0.798033,0) 3.3 1.22474 1.22474 0.893327 3 (0.79748,0) 3.3 1.22474 1.22474 0.893017 3 (0.796953,0) 3.3 1.22474 1.22474 0.892722 3 (0.796457,0) 3.3 1.22474 1.22474 0.892444 3 (0.795996,0) 3.3 1.22474 1.22474 0.892186 2 (0.5,0) 3.3 1 1 0.707107 2 (0.869091,0) 3.3 1.22474 1.22474 0.932251 2 (0.868308,0) 3.3 1.22474 1.22474 0.93183 2 (0.86756,0) 3.3 1.22474 1.22474 0.931429 2 (0.866844,0) 3.3 1.22474 1.22474 0.931045 2 (0.86616,0) 3.3 1.22474 1.22474 0.930677 1 (0.5,0) 3.3 1 1 0.707107 1 (0.932124,0) 3.3 1.22474 1.22474 0.965466 1 (0.933117,0) 3.3 1.22474 1.22474 0.96598 1 (0.934392,0) 3.3 1.22474 1.22474 0.96664 1 (0.935954,0) 3.3 1.22474 1.22474 0.967447 1 (0.937802,0) 3.3 1.22474 1.22474 0.968402 1 (0.5,0) 3.4 1 1 0.707107 1 (0.937802,0) 3.4 1.22474 1.22474 0.968402 1 (0.939936,0) 3.4 1.22474 1.22474 0.969503 1 (0.942355,0) 3.4 1.22474 1.22474 0.97075 1 (0.945053,0) 3.4 1.22474 1.22474 0.972139 1 (0.948026,0) 3.4 1.22474 1.22474 0.973666 2 (0.5,0) 3.4 1 1 0.707107 2 (0.86616,0) 3.4 1.22474 1.22474 0.930677 2 (0.865507,0) 3.4 1.22474 1.22474 0.930326 2 (0.864883,0) 3.4 1.22474 1.22474 0.929991 2 (0.86429,0) 3.4 1.22474 1.22474 0.929672 2 (0.863729,0) 3.4 1.22474 1.22474 0.92937 3 (0.5,0) 3.4 1 1 0.707107 3 (0.795997,0) 3.4 1.22474 1.22474 0.892186 3 (0.795576,0) 3.4 1.22474 1.22474 0.891951 3 (0.795201,0) 3.4 1.22474 1.22474 0.891741 3 (0.794877,0) 3.4 1.22474 1.22474 0.891559 3 (0.794611,0) 3.4 1.22474 1.22474 0.891409 4 (0.5,0) 3.4 1 1 0.707107 4 (0.796269,0) 3.4 1.22474 1.22474 0.892339 4 (0.799486,0) 3.4 1.22474 1.22474 0.89414 4 (0.80299,0) 3.4 1.22474 1.22474 0.896097 4 (0.806775,0) 3.4 1.22474 1.22474 0.898207 4 (0.810834,0) 3.4 1.22474 1.22474 0.900463 5 (0.5,0) 3.4 1 1 0.707107 5 (0.985258,0) 3.4 1.22474 1.22474 0.992601 5 (0.987918,0) 3.4 1.22474 1.22474 0.993941 5 (0.990294,0) 3.4 1.22474 1.22474 0.995135 5 (0.992368,0) 3.4 1.22474 1.22474 0.996177 5 (0.994128,0) 3.4 1.22474 1.22474 0.99706 6 (0.5,0) 3.4 1 1 0.707107 6 (1.08944,0) 3.4 1.22474 1.22474 1.04376 6 (1.084,0) 3.4 1.22474 1.22474 1.04115 6 (1.07834,0) 3.4 1.22474 1.22474 1.03843 6 (1.0725,0) 3.4 1.22474 1.22474 1.03561 6 (1.06649,0) 3.4 1.22474 1.22474 1.03271 6 (0.5,0) 3.5 1 1 0.707107 6 (1.06649,0) 3.5 1.22474 1.22474 1.03271 6 (1.06034,0) 3.5 1.22474 1.22474 1.02973 6 (1.05409,0) 3.5 1.22474 1.22474 1.02669 6 (1.04776,0) 3.5 1.22474 1.22474 1.0236 6 (1.04138,0) 3.5 1.22474 1.22474 1.02048 5 (0.5,0) 3.5 1 1 0.707107 5 (0.994128,0) 3.5 1.22474 1.22474 0.99706 5 (0.995559,0) 3.5 1.22474 1.22474 0.997777 5 (0.996651,0) 3.5 1.22474 1.22474 0.998324 5 (0.997393,0) 3.5 1.22474 1.22474 0.998696 5 (0.997778,0) 3.5 1.22474 1.22474 0.998888 4 (0.5,0) 3.5 1 1 0.707107 4 (0.810834,0) 3.5 1.22474 1.22474 0.900463 4 (0.815157,0) 3.5 1.22474 1.22474 0.90286 4 (0.819735,0) 3.5 1.22474 1.22474 0.905392 4 (0.824555,0) 3.5 1.22474 1.22474 0.90805 4 (0.829607,0) 3.5 1.22474 1.22474 0.910828 3 (0.5,0) 3.5 1 1 0.707107 3 (0.794609,0) 3.5 1.22474 1.22474 0.891408 3 (0.794405,0) 3.5 1.22474 1.22474 0.891294 3 (0.794271,0) 3.5 1.22474 1.22474 0.891219 3 (0.794212,0) 3.5 1.22474 1.22474 0.891185 3 (0.794234,0) 3.5 1.22474 1.22474 0.891198 2 (0.5,0) 3.5 1 1 0.707107 2 (0.86373,0) 3.5 1.22474 1.22474 0.929371 2 (0.863203,0) 3.5 1.22474 1.22474 0.929087 2 (0.862711,0) 3.5 1.22474 1.22474 0.928823 2 (0.86226,0) 3.5 1.22474 1.22474 0.92858 2 (0.861852,0) 3.5 1.22474 1.22474 0.92836 1 (0.5,0) 3.5 1 1 0.707107 1 (0.948025,0) 3.5 1.22474 1.22474 0.973666 1 (0.951265,0) 3.5 1.22474 1.22474 0.975328 1 (0.954762,0) 3.5 1.22474 1.22474 0.977119 1 (0.958507,0) 3.5 1.22474 1.22474 0.979034 1 (0.962486,0) 3.5 1.22474 1.22474 0.981064 1 (0.5,0) 3.6 1 1 0.707107 1 (0.962486,0) 3.6 1.22474 1.22474 0.981064 1 (0.966685,0) 3.6 1.22474 1.22474 0.983202 1 (0.97109,0) 3.6 1.22474 1.22474 0.985439 1 (0.975683,0) 3.6 1.22474 1.22474 0.987767 1 (0.980446,0) 3.6 1.22474 1.22474 0.990175 2 (0.5,0) 3.6 1 1 0.707107 2 (0.861852,0) 3.6 1.22474 1.22474 0.92836 2 (0.861494,0) 3.6 1.22474 1.22474 0.928167 2 (0.861191,0) 3.6 1.22474 1.22474 0.928004 2 (0.860949,0) 3.6 1.22474 1.22474 0.927873 2 (0.860776,0) 3.6 1.22474 1.22474 0.92778 3 (0.5,0) 3.6 1 1 0.707107 3 (0.794235,0) 3.6 1.22474 1.22474 0.891198 3 (0.794345,0) 3.6 1.22474 1.22474 0.89126 3 (0.79455,0) 3.6 1.22474 1.22474 0.891375 3 (0.794855,0) 3.6 1.22474 1.22474 0.891546 3 (0.795265,0) 3.6 1.22474 1.22474 0.891776 4 (0.5,0) 3.6 1 1 0.707107 4 (0.829607,0) 3.6 1.22474 1.22474 0.910828 4 (0.834875,0) 3.6 1.22474 1.22474 0.913715 4 (0.840346,0) 3.6 1.22474 1.22474 0.916704 4 (0.846002,0) 3.6 1.22474 1.22474 0.919784 4 (0.851827,0) 3.6 1.22474 1.22474 0.922945 5 (0.5,0) 3.6 1 1 0.707107 5 (0.997778,0) 3.6 1.22474 1.22474 0.998888 5 (0.997799,0) 3.6 1.22474 1.22474 0.998899 5 (0.997452,0) 3.6 1.22474 1.22474 0.998725 5 (0.996735,0) 3.6 1.22474 1.22474 0.998366 5 (0.995647,0) 3.6 1.22474 1.22474 0.997821 6 (0.5,0) 3.6 1 1 0.707107 6 (1.04138,0) 3.6 1.22474 1.22474 1.02048 6 (1.03497,0) 3.6 1.22474 1.22474 1.01734 6 (1.02856,0) 3.6 1.22474 1.22474 1.01418 6 (1.02217,0) 3.6 1.22474 1.22474 1.01103 6 (1.01583,0) 3.6 1.22474 1.22474 1.00788 6 (0.5,0) 3.7 1 1 0.707107 6 (1.01583,0) 3.7 1.22474 1.22474 1.00788 6 (1.00956,0) 3.7 1.22474 1.22474 1.00477 6 (1.00338,0) 3.7 1.22474 1.22474 1.00169 6 (0.997303,0) 3.7 1.22474 1.22474 0.998651 6 (0.99136,0) 3.7 1.22474 1.22474 0.995671 5 (0.5,0) 3.7 1 1 0.707107 5 (0.995647,0) 3.7 1.22474 1.22474 0.997821 5 (0.99419,0) 3.7 1.22474 1.22474 0.997091 5 (0.992366,0) 3.7 1.22474 1.22474 0.996176 5 (0.990181,0) 3.7 1.22474 1.22474 0.995079 5 (0.987643,0) 3.7 1.22474 1.22474 0.993803 4 (0.5,0) 3.7 1 1 0.707107 4 (0.851827,0) 3.7 1.22474 1.22474 0.922945 4 (0.857802,0) 3.7 1.22474 1.22474 0.926176 4 (0.863909,0) 3.7 1.22474 1.22474 0.929467 4 (0.870127,0) 3.7 1.22474 1.22474 0.932806 4 (0.876437,0) 3.7 1.22474 1.22474 0.936182 3 (0.5,0) 3.7 1 1 0.707107 3 (0.795264,0) 3.7 1.22474 1.22474 0.891776 3 (0.795787,0) 3.7 1.22474 1.22474 0.892069 3 (0.796426,0) 3.7 1.22474 1.22474 0.892427 3 (0.797186,0) 3.7 1.22474 1.22474 0.892853 3 (0.798074,0) 3.7 1.22474 1.22474 0.89335 2 (0.5,0) 3.7 1 1 0.707107 2 (0.860777,0) 3.7 1.22474 1.22474 0.927781 2 (0.860682,0) 3.7 1.22474 1.22474 0.927729 2 (0.860672,0) 3.7 1.22474 1.22474 0.927724 2 (0.860757,0) 3.7 1.22474 1.22474 0.92777 2 (0.860947,0) 3.7 1.22474 1.22474 0.927873 1 (0.5,0) 3.7 1 1 0.707107 1 (0.980444,0) 3.7 1.22474 1.22474 0.990174 1 (0.985357,0) 3.7 1.22474 1.22474 0.992651 1 (0.990399,0) 3.7 1.22474 1.22474 0.995188 1 (0.995549,0) 3.7 1.22474 1.22474 0.997772 1 (1.00078,0) 3.7 1.22474 1.22474 1.00039 1 (0.5,0) 3.8 1 1 0.707107 1 (1.00078,0) 3.8 1.22474 1.22474 1.00039 1 (1.00608,0) 3.8 1.22474 1.22474 1.00303 1 (1.01141,0) 3.8 1.22474 1.22474 1.00569 1 (1.01675,0) 3.8 1.22474 1.22474 1.00834 1 (1.02208,0) 3.8 1.22474 1.22474 1.01098 2 (0.5,0) 3.8 1 1 0.707107 2 (0.860947,0) 3.8 1.22474 1.22474 0.927873 2 (0.861253,0) 3.8 1.22474 1.22474 0.928037 2 (0.861686,0) 3.8 1.22474 1.22474 0.92827 2 (0.862256,0) 3.8 1.22474 1.22474 0.928577 2 (0.862975,0) 3.8 1.22474 1.22474 0.928964 3 (0.5,0) 3.8 1 1 0.707107 3 (0.798074,0) 3.8 1.22474 1.22474 0.89335 3 (0.799091,0) 3.8 1.22474 1.22474 0.893919 3 (0.800243,0) 3.8 1.22474 1.22474 0.894563 3 (0.801532,0) 3.8 1.22474 1.22474 0.895283 3 (0.80296,0) 3.8 1.22474 1.22474 0.89608 4 (0.5,0) 3.8 1 1 0.707107 4 (0.876437,0) 3.8 1.22474 1.22474 0.936182 4 (0.882817,0) 3.8 1.22474 1.22474 0.939583 4 (0.889245,0) 3.8 1.22474 1.22474 0.942998 4 (0.8957,0) 3.8 1.22474 1.22474 0.946414 4 (0.90216,0) 3.8 1.22474 1.22474 0.949821 5 (0.5,0) 3.8 1 1 0.707107 5 (0.987642,0) 3.8 1.22474 1.22474 0.993802 5 (0.98476,0) 3.8 1.22474 1.22474 0.992351 5 (0.981544,0) 3.8 1.22474 1.22474 0.990729 5 (0.978007,0) 3.8 1.22474 1.22474 0.988942 5 (0.974163,0) 3.8 1.22474 1.22474 0.986997 6 (0.5,0) 3.8 1 1 0.707107 6 (0.991361,0) 3.8 1.22474 1.22474 0.995671 6 (0.985564,0) 3.8 1.22474 1.22474 0.992756 6 (0.97993,0) 3.8 1.22474 1.22474 0.989914 6 (0.974473,0) 3.8 1.22474 1.22474 0.987154 6 (0.969205,0) 3.8 1.22474 1.22474 0.984482 6 (0.5,0) 3.9 1 1 0.707107 6 (0.969205,0) 3.9 1.22474 1.22474 0.984482 6 (0.964137,0) 3.9 1.22474 1.22474 0.981905 6 (0.959279,0) 3.9 1.22474 1.22474 0.979428 6 (0.954639,0) 3.9 1.22474 1.22474 0.977056 6 (0.950224,0) 3.9 1.22474 1.22474 0.974794 5 (0.5,0) 3.9 1 1 0.707107 5 (0.974163,0) 3.9 1.22474 1.22474 0.986997 5 (0.97003,0) 3.9 1.22474 1.22474 0.984901 5 (0.965624,0) 3.9 1.22474 1.22474 0.982662 5 (0.960965,0) 3.9 1.22474 1.22474 0.980288 5 (0.956073,0) 3.9 1.22474 1.22474 0.97779 4 (0.5,0) 3.9 1 1 0.707107 4 (0.902159,0) 3.9 1.22474 1.22474 0.949821 4 (0.908601,0) 3.9 1.22474 1.22474 0.953206 4 (0.915002,0) 3.9 1.22474 1.22474 0.956557 4 (0.921341,0) 3.9 1.22474 1.22474 0.959865 4 (0.927594,0) 3.9 1.22474 1.22474 0.963117 3 (0.5,0) 3.9 1 1 0.707107 3 (0.802961,0) 3.9 1.22474 1.22474 0.896081 3 (0.804532,0) 3.9 1.22474 1.22474 0.896957 3 (0.806246,0) 3.9 1.22474 1.22474 0.897912 3 (0.808104,0) 3.9 1.22474 1.22474 0.898946 3 (0.810108,0) 3.9 1.22474 1.22474 0.90006 2 (0.5,0) 3.9 1 1 0.707107 2 (0.862974,0) 3.9 1.22474 1.22474 0.928964 2 (0.863854,0) 3.9 1.22474 1.22474 0.929438 2 (0.864906,0) 3.9 1.22474 1.22474 0.930003 2 (0.866142,0) 3.9 1.22474 1.22474 0.930668 2 (0.867574,0) 3.9 1.22474 1.22474 0.931437 1 (0.5,0) 3.9 1 1 0.707107 1 (1.02208,0) 3.9 1.22474 1.22474 1.01098 1 (1.02737,0) 3.9 1.22474 1.22474 1.01359 1 (1.03259,0) 3.9 1.22474 1.22474 1.01617 1 (1.03772,0) 3.9 1.22474 1.22474 1.01869 1 (1.04273,0) 3.9 1.22474 1.22474 1.02114 1 (0.5,0) 4 1 1 0.707107 1 (1.04273,0) 4 1.22474 1.22474 1.02114 1 (1.0476,0) 4 1.22474 1.22474 1.02352 1 (1.0523,0) 4 1.22474 1.22474 1.02582 1 (1.0568,0) 4 1.22474 1.22474 1.02801 1 (1.06109,0) 4 1.22474 1.22474 1.03009 2 (0.5,0) 4 1 1 0.707107 2 (0.867574,0) 4 1.22474 1.22474 0.931437 2 (0.869213,0) 4 1.22474 1.22474 0.932316 2 (0.87107,0) 4 1.22474 1.22474 0.933311 2 (0.873156,0) 4 1.22474 1.22474 0.934428 2 (0.87548,0) 4 1.22474 1.22474 0.935671 3 (0.5,0) 4 1 1 0.707107 3 (0.810108,0) 4 1.22474 1.22474 0.90006 3 (0.812257,0) 4 1.22474 1.22474 0.901253 3 (0.814549,0) 4 1.22474 1.22474 0.902523 3 (0.816983,0) 4 1.22474 1.22474 0.903871 3 (0.819558,0) 4 1.22474 1.22474 0.905294 4 (0.5,0) 4 1 1 0.707107 4 (0.927593,0) 4 1.22474 1.22474 0.963116 4 (0.93374,0) 4 1.22474 1.22474 0.966302 4 (0.939758,0) 4 1.22474 1.22474 0.969411 4 (0.945628,0) 4 1.22474 1.22474 0.972434 4 (0.951328,0) 4 1.22474 1.22474 0.975361 5 (0.5,0) 4 1 1 0.707107 5 (0.956073,0) 4 1.22474 1.22474 0.97779 5 (0.95097,0) 4 1.22474 1.22474 0.975177 5 (0.945679,0) 4 1.22474 1.22474 0.97246 5 (0.940224,0) 4 1.22474 1.22474 0.969651 5 (0.934629,0) 4 1.22474 1.22474 0.966762 6 (0.5,0) 4 1 1 0.707107 6 (0.950224,0) 4 1.22474 1.22474 0.974795 6 (0.946037,0) 4 1.22474 1.22474 0.972645 6 (0.942082,0) 4 1.22474 1.22474 0.970609 6 (0.938361,0) 4 1.22474 1.22474 0.96869 6 (0.934873,0) 4 1.22474 1.22474 0.966888 6 (0.5,0) 4.1 1 1 0.707107 6 (0.934873,0) 4.1 1.22474 1.22474 0.966888 6 (0.931617,0) 4.1 1.22474 1.22474 0.965203 6 (0.92859,0) 4.1 1.22474 1.22474 0.963634 6 (0.925788,0) 4.1 1.22474 1.22474 0.962179 6 (0.923206,0) 4.1 1.22474 1.22474 0.960836 5 (0.5,0) 4.1 1 1 0.707107 5 (0.934629,0) 4.1 1.22474 1.22474 0.966762 5 (0.92892,0) 4.1 1.22474 1.22474 0.963805 5 (0.923123,0) 4.1 1.22474 1.22474 0.960793 5 (0.917264,0) 4.1 1.22474 1.22474 0.957739 5 (0.91137,0) 4.1 1.22474 1.22474 0.954657 4 (0.5,0) 4.1 1 1 0.707107 4 (0.951328,0) 4.1 1.22474 1.22474 0.975361 4 (0.95684,0) 4.1 1.22474 1.22474 0.978182 4 (0.962144,0) 4.1 1.22474 1.22474 0.98089 4 (0.967224,0) 4.1 1.22474 1.22474 0.983475 4 (0.972063,0) 4.1 1.22474 1.22474 0.985932 3 (0.5,0) 4.1 1 1 0.707107 3 (0.819556,0) 4.1 1.22474 1.22474 0.905293 3 (0.822268,0) 4.1 1.22474 1.22474 0.90679 3 (0.825115,0) 4.1 1.22474 1.22474 0.908359 3 (0.828093,0) 4.1 1.22474 1.22474 0.909996 3 (0.831197,0) 4.1 1.22474 1.22474 0.9117 2 (0.5,0) 4.1 1 1 0.707107 2 (0.875481,0) 4.1 1.22474 1.22474 0.935671 2 (0.878053,0) 4.1 1.22474 1.22474 0.937045 2 (0.880883,0) 4.1 1.22474 1.22474 0.938553 2 (0.883977,0) 4.1 1.22474 1.22474 0.9402 2 (0.887342,0) 4.1 1.22474 1.22474 0.941988 1 (0.5,0) 4.1 1 1 0.707107 1 (1.06109,0) 4.1 1.22474 1.22474 1.03009 1 (1.06513,0) 4.1 1.22474 1.22474 1.03205 1 (1.0689,0) 4.1 1.22474 1.22474 1.03388 1 (1.0724,0) 4.1 1.22474 1.22474 1.03557 1 (1.07558,0) 4.1 1.22474 1.22474 1.0371 1 (0.5,0) 4.2 1 1 0.707107 1 (1.07558,0) 4.2 1.22474 1.22474 1.0371 1 (1.07844,0) 4.2 1.22474 1.22474 1.03848 1 (1.08096,0) 4.2 1.22474 1.22474 1.03969 1 (1.08312,0) 4.2 1.22474 1.22474 1.04073 1 (1.0849,0) 4.2 1.22474 1.22474 1.04159 2 (0.5,0) 4.2 1 1 0.707107 2 (0.887342,0) 4.2 1.22474 1.22474 0.941988 2 (0.890985,0) 4.2 1.22474 1.22474 0.94392 2 (0.89491,0) 4.2 1.22474 1.22474 0.945997 2 (0.899121,0) 4.2 1.22474 1.22474 0.94822 2 (0.903619,0) 4.2 1.22474 1.22474 0.950589 3 (0.5,0) 4.2 1 1 0.707107 3 (0.831197,0) 4.2 1.22474 1.22474 0.9117 3 (0.834423,0) 4.2 1.22474 1.22474 0.913467 3 (0.837765,0) 4.2 1.22474 1.22474 0.915295 3 (0.841217,0) 4.2 1.22474 1.22474 0.917179 3 (0.844774,0) 4.2 1.22474 1.22474 0.919116 4 (0.5,0) 4.2 1 1 0.707107 4 (0.972061,0) 4.2 1.22474 1.22474 0.985932 4 (0.976643,0) 4.2 1.22474 1.22474 0.988253 4 (0.980955,0) 4.2 1.22474 1.22474 0.990432 4 (0.984983,0) 4.2 1.22474 1.22474 0.992463 4 (0.988717,0) 4.2 1.22474 1.22474 0.994342 5 (0.5,0) 4.2 1 1 0.707107 5 (0.911371,0) 4.2 1.22474 1.22474 0.954657 5 (0.905468,0) 4.2 1.22474 1.22474 0.951561 5 (0.899584,0) 4.2 1.22474 1.22474 0.948464 5 (0.893744,0) 4.2 1.22474 1.22474 0.94538 5 (0.887976,0) 4.2 1.22474 1.22474 0.942325 6 (0.5,0) 4.2 1 1 0.707107 6 (0.923207,0) 4.2 1.22474 1.22474 0.960836 6 (0.920837,0) 4.2 1.22474 1.22474 0.959603 6 (0.918674,0) 4.2 1.22474 1.22474 0.958475 6 (0.916707,0) 4.2 1.22474 1.22474 0.957448 6 (0.914927,0) 4.2 1.22474 1.22474 0.956518 6 (0.5,0) 4.3 1 1 0.707107 6 (0.914927,0) 4.3 1.22474 1.22474 0.956518 6 (0.913323,0) 4.3 1.22474 1.22474 0.955679 6 (0.911885,0) 4.3 1.22474 1.22474 0.954927 6 (0.910601,0) 4.3 1.22474 1.22474 0.954254 6 (0.909459,0) 4.3 1.22474 1.22474 0.953656 5 (0.5,0) 4.3 1 1 0.707107 5 (0.887976,0) 4.3 1.22474 1.22474 0.942325 5 (0.882303,0) 4.3 1.22474 1.22474 0.93931 5 (0.876753,0) 4.3 1.22474 1.22474 0.936351 5 (0.871348,0) 4.3 1.22474 1.22474 0.93346 5 (0.866111,0) 4.3 1.22474 1.22474 0.930651 4 (0.5,0) 4.3 1 1 0.707107 4 (0.988717,0) 4.3 1.22474 1.22474 0.994342 4 (0.992146,0) 4.3 1.22474 1.22474 0.996065 4 (0.995263,0) 4.3 1.22474 1.22474 0.997629 4 (0.998061,0) 4.3 1.22474 1.22474 0.99903 4 (1.00053,0) 4.3 1.22474 1.22474 1.00027 3 (0.5,0) 4.3 1 1 0.707107 3 (0.844774,0) 4.3 1.22474 1.22474 0.919116 3 (0.84843,0) 4.3 1.22474 1.22474 0.921102 3 (0.852176,0) 4.3 1.22474 1.22474 0.923134 3 (0.856007,0) 4.3 1.22474 1.22474 0.925207 3 (0.859916,0) 4.3 1.22474 1.22474 0.927316 2 (0.5,0) 4.3 1 1 0.707107 2 (0.903618,0) 4.3 1.22474 1.22474 0.950588 2 (0.908405,0) 4.3 1.22474 1.22474 0.953103 2 (0.913479,0) 4.3 1.22474 1.22474 0.955761 2 (0.918839,0) 4.3 1.22474 1.22474 0.958561 2 (0.92448,0) 4.3 1.22474 1.22474 0.961499 1 (0.5,0) 4.3 1 1 0.707107 1 (1.08491,0) 4.3 1.22474 1.22474 1.04159 1 (1.08631,0) 4.3 1.22474 1.22474 1.04226 1 (1.08732,0) 4.3 1.22474 1.22474 1.04274 1 (1.08792,0) 4.3 1.22474 1.22474 1.04303 1 (1.08811,0) 4.3 1.22474 1.22474 1.04313 1 (0.5,0) 4.4 1 1 0.707107 1 (1.08811,0) 4.4 1.22474 1.22474 1.04313 1 (1.08789,0) 4.4 1.22474 1.22474 1.04302 1 (1.08725,0) 4.4 1.22474 1.22474 1.04271 1 (1.08619,0) 4.4 1.22474 1.22474 1.04221 1 (1.08472,0) 4.4 1.22474 1.22474 1.0415 2 (0.5,0) 4.4 1 1 0.707107 2 (0.92448,0) 4.4 1.22474 1.22474 0.961499 2 (0.930398,0) 4.4 1.22474 1.22474 0.964572 2 (0.936586,0) 4.4 1.22474 1.22474 0.967774 2 (0.943034,0) 4.4 1.22474 1.22474 0.971099 2 (0.949732,0) 4.4 1.22474 1.22474 0.974542 3 (0.5,0) 4.4 1 1 0.707107 3 (0.859916,0) 4.4 1.22474 1.22474 0.927316 3 (0.863894,0) 4.4 1.22474 1.22474 0.929459 3 (0.867934,0) 4.4 1.22474 1.22474 0.93163 3 (0.872028,0) 4.4 1.22474 1.22474 0.933824 3 (0.876169,0) 4.4 1.22474 1.22474 0.936039 4 (0.5,0) 4.4 1 1 0.707107 4 (1.00053,0) 4.4 1.22474 1.22474 1.00027 4 (1.00268,0) 4.4 1.22474 1.22474 1.00134 4 (1.00449,0) 4.4 1.22474 1.22474 1.00224 4 (1.00598,0) 4.4 1.22474 1.22474 1.00299 4 (1.00714,0) 4.4 1.22474 1.22474 1.00356 5 (0.5,0) 4.4 1 1 0.707107 5 (0.866112,0) 4.4 1.22474 1.22474 0.930651 5 (0.861067,0) 4.4 1.22474 1.22474 0.927937 5 (0.856234,0) 4.4 1.22474 1.22474 0.925329 5 (0.851634,0) 4.4 1.22474 1.22474 0.92284 5 (0.847283,0) 4.4 1.22474 1.22474 0.92048 6 (0.5,0) 4.4 1 1 0.707107 6 (0.90946,0) 4.4 1.22474 1.22474 0.953656 6 (0.908446,0) 4.4 1.22474 1.22474 0.953125 6 (0.907549,0) 4.4 1.22474 1.22474 0.952654 6 (0.906755,0) 4.4 1.22474 1.22474 0.952237 6 (0.906051,0) 4.4 1.22474 1.22474 0.951867 6 (0.5,0) 4.5 1 1 0.707107 6 (0.906051,0) 4.5 1.22474 1.22474 0.951867 6 (0.905424,0) 4.5 1.22474 1.22474 0.951538 6 (0.90486,0) 4.5 1.22474 1.22474 0.951241 6 (0.904348,0) 4.5 1.22474 1.22474 0.950972 6 (0.903874,0) 4.5 1.22474 1.22474 0.950723 5 (0.5,0) 4.5 1 1 0.707107 5 (0.847283,0) 4.5 1.22474 1.22474 0.92048 5 (0.8432,0) 4.5 1.22474 1.22474 0.918259 5 (0.8394,0) 4.5 1.22474 1.22474 0.916188 5 (0.835896,0) 4.5 1.22474 1.22474 0.914273 5 (0.8327,0) 4.5 1.22474 1.22474 0.912524 4 (0.5,0) 4.5 1 1 0.707107 4 (1.00714,0) 4.5 1.22474 1.22474 1.00356 4 (1.00797,0) 4.5 1.22474 1.22474 1.00398 4 (1.00849,0) 4.5 1.22474 1.22474 1.00423 4 (1.00869,0) 4.5 1.22474 1.22474 1.00433 4 (1.00858,0) 4.5 1.22474 1.22474 1.00428 3 (0.5,0) 4.5 1 1 0.707107 3 (0.876167,0) 4.5 1.22474 1.22474 0.936038 3 (0.880347,0) 4.5 1.22474 1.22474 0.938268 3 (0.884559,0) 4.5 1.22474 1.22474 0.94051 3 (0.888794,0) 4.5 1.22474 1.22474 0.942759 3 (0.893046,0) 4.5 1.22474 1.22474 0.945011 2 (0.5,0) 4.5 1 1 0.707107 2 (0.949734,0) 4.5 1.22474 1.22474 0.974543 2 (0.956671,0) 4.5 1.22474 1.22474 0.978096 2 (0.963833,0) 4.5 1.22474 1.22474 0.98175 2 (0.971204,0) 4.5 1.22474 1.22474 0.985497 2 (0.978768,0) 4.5 1.22474 1.22474 0.989327 1 (0.5,0) 4.5 1 1 0.707107 1 (1.08472,0) 4.5 1.22474 1.22474 1.0415 1 (1.08283,0) 4.5 1.22474 1.22474 1.04059 1 (1.08053,0) 4.5 1.22474 1.22474 1.03949 1 (1.07783,0) 4.5 1.22474 1.22474 1.03819 1 (1.07474,0) 4.5 1.22474 1.22474 1.0367 1 (0.5,0) 4.6 1 1 0.707107 1 (1.07474,0) 4.6 1.22474 1.22474 1.0367 1 (1.07127,0) 4.6 1.22474 1.22474 1.03502 1 (1.06743,0) 4.6 1.22474 1.22474 1.03317 1 (1.06325,0) 4.6 1.22474 1.22474 1.03114 1 (1.05872,0) 4.6 1.22474 1.22474 1.02894 2 (0.5,0) 4.6 1 1 0.707107 2 (0.978768,0) 4.6 1.22474 1.22474 0.989327 2 (0.986506,0) 4.6 1.22474 1.22474 0.99323 2 (0.994398,0) 4.6 1.22474 1.22474 0.997195 2 (1.00242,0) 4.6 1.22474 1.22474 1.00121 2 (1.01056,0) 4.6 1.22474 1.22474 1.00527 3 (0.5,0) 4.6 1 1 0.707107 3 (0.893047,0) 4.6 1.22474 1.22474 0.945012 3 (0.897308,0) 4.6 1.22474 1.22474 0.947264 3 (0.901573,0) 4.6 1.22474 1.22474 0.949512 3 (0.905833,0) 4.6 1.22474 1.22474 0.951753 3 (0.910083,0) 4.6 1.22474 1.22474 0.953983 4 (0.5,0) 4.6 1 1 0.707107 4 (1.00858,0) 4.6 1.22474 1.22474 1.00428 4 (1.00818,0) 4.6 1.22474 1.22474 1.00408 4 (1.0075,0) 4.6 1.22474 1.22474 1.00374 4 (1.00654,0) 4.6 1.22474 1.22474 1.00327 4 (1.00533,0) 4.6 1.22474 1.22474 1.00266 5 (0.5,0) 4.6 1 1 0.707107 5 (0.832702,0) 4.6 1.22474 1.22474 0.912525 5 (0.829825,0) 4.6 1.22474 1.22474 0.910947 5 (0.827275,0) 4.6 1.22474 1.22474 0.909547 5 (0.825059,0) 4.6 1.22474 1.22474 0.908328 5 (0.823182,0) 4.6 1.22474 1.22474 0.907294 6 (0.5,0) 4.6 1 1 0.707107 6 (0.903875,0) 4.6 1.22474 1.22474 0.950723 6 (0.903427,0) 4.6 1.22474 1.22474 0.950488 6 (0.902994,0) 4.6 1.22474 1.22474 0.95026 6 (0.902565,0) 4.6 1.22474 1.22474 0.950034 6 (0.902129,0) 4.6 1.22474 1.22474 0.949805 6 (0.5,0) 4.7 1 1 0.707107 6 (0.902129,0) 4.7 1.22474 1.22474 0.949805 6 (0.901677,0) 4.7 1.22474 1.22474 0.949567 6 (0.901198,0) 4.7 1.22474 1.22474 0.949315 6 (0.900685,0) 4.7 1.22474 1.22474 0.949044 6 (0.900131,0) 4.7 1.22474 1.22474 0.948752 5 (0.5,0) 4.7 1 1 0.707107 5 (0.823182,0) 4.7 1.22474 1.22474 0.907294 5 (0.821646,0) 4.7 1.22474 1.22474 0.906447 5 (0.820453,0) 4.7 1.22474 1.22474 0.905789 5 (0.819601,0) 4.7 1.22474 1.22474 0.905318 5 (0.819089,0) 4.7 1.22474 1.22474 0.905035 4 (0.5,0) 4.7 1 1 0.707107 4 (1.00533,0) 4.7 1.22474 1.22474 1.00266 4 (1.00387,0) 4.7 1.22474 1.22474 1.00194 4 (1.00219,0) 4.7 1.22474 1.22474 1.0011 4 (1.0003,0) 4.7 1.22474 1.22474 1.00015 4 (0.998224,0) 4.7 1.22474 1.22474 0.999112 3 (0.5,0) 4.7 1 1 0.707107 3 (0.910082,0) 4.7 1.22474 1.22474 0.953982 3 (0.914316,0) 4.7 1.22474 1.22474 0.956199 3 (0.918528,0) 4.7 1.22474 1.22474 0.958399 3 (0.922713,0) 4.7 1.22474 1.22474 0.960579 3 (0.926866,0) 4.7 1.22474 1.22474 0.962739 2 (0.5,0) 4.7 1 1 0.707107 2 (1.01056,0) 4.7 1.22474 1.22474 1.00527 2 (1.01878,0) 4.7 1.22474 1.22474 1.00935 2 (1.02706,0) 4.7 1.22474 1.22474 1.01344 2 (1.03538,0) 4.7 1.22474 1.22474 1.01754 2 (1.04371,0) 4.7 1.22474 1.22474 1.02162 1 (0.5,0) 4.7 1 1 0.707107 1 (1.05872,0) 4.7 1.22474 1.22474 1.02894 1 (1.05388,0) 4.7 1.22474 1.22474 1.02659 1 (1.04874,0) 4.7 1.22474 1.22474 1.02408 1 (1.04332,0) 4.7 1.22474 1.22474 1.02143 1 (1.03765,0) 4.7 1.22474 1.22474 1.01865 1 (0.5,0) 4.8 1 1 0.707107 1 (1.03765,0) 4.8 1.22474 1.22474 1.01865 1 (1.03175,0) 4.8 1.22474 1.22474 1.01575 1 (1.02565,0) 4.8 1.22474 1.22474 1.01274 1 (1.01936,0) 4.8 1.22474 1.22474 1.00963 1 (1.01292,0) 4.8 1.22474 1.22474 1.00644 2 (0.5,0) 4.8 1 1 0.707107 2 (1.04371,0) 4.8 1.22474 1.22474 1.02162 2 (1.05201,0) 4.8 1.22474 1.22474 1.02568 2 (1.06027,0) 4.8 1.22474 1.22474 1.02969 2 (1.06845,0) 4.8 1.22474 1.22474 1.03366 2 (1.07652,0) 4.8 1.22474 1.22474 1.03755 3 (0.5,0) 4.8 1 1 0.707107 3 (0.926866,0) 4.8 1.22474 1.22474 0.962739 3 (0.930984,0) 4.8 1.22474 1.22474 0.964875 3 (0.935062,0) 4.8 1.22474 1.22474 0.966986 3 (0.939097,0) 4.8 1.22474 1.22474 0.96907 3 (0.943087,0) 4.8 1.22474 1.22474 0.971127 4 (0.5,0) 4.8 1 1 0.707107 4 (0.998224,0) 4.8 1.22474 1.22474 0.999111 4 (0.995973,0) 4.8 1.22474 1.22474 0.997985 4 (0.993573,0) 4.8 1.22474 1.22474 0.996781 4 (0.991043,0) 4.8 1.22474 1.22474 0.995511 4 (0.988404,0) 4.8 1.22474 1.22474 0.994185 5 (0.5,0) 4.8 1 1 0.707107 5 (0.81909,0) 4.8 1.22474 1.22474 0.905036 5 (0.818912,0) 4.8 1.22474 1.22474 0.904938 5 (0.819063,0) 4.8 1.22474 1.22474 0.905021 5 (0.819536,0) 4.8 1.22474 1.22474 0.905282 5 (0.82032,0) 4.8 1.22474 1.22474 0.905715 6 (0.5,0) 4.8 1 1 0.707107 6 (0.90013,0) 4.8 1.22474 1.22474 0.948752 6 (0.899527,0) 4.8 1.22474 1.22474 0.948434 6 (0.898869,0) 4.8 1.22474 1.22474 0.948087 6 (0.898152,0) 4.8 1.22474 1.22474 0.947709 6 (0.897371,0) 4.8 1.22474 1.22474 0.947297 dmrgpp-6.02/TestSuite/oracles/timeEvolution15.txt000066400000000000000000000550161414604301300220700ustar00rootroot000000000000001 (4.84,0) 0 4.26028 4.26028 2.2 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 2 (0.288897,0) 0 1 1 0.537492 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 3 (0.408114,0) 0 1 1 0.638838 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 4 (0.408114,0) 0 1 1 0.638838 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 5 (0.408114,0) 0 1 1 0.638838 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 6 (0.0918861,0) 0 1 1 0.303127 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0.0918861,0) 0 1 1 0.303127 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 5 (0.408114,0) 0 1 1 0.638838 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 4 (0.408114,0) 0 1 1 0.638838 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 3 (0.408114,0) 0 1 1 0.638838 3 (0,0) 0 0.638838 0.638838 0 3 (5.13912e-05,0) 0 0.638838 0.638838 0.00716876 3 (0.000205499,0) 0 0.638838 0.638838 0.0143352 3 (0.000462125,0) 0 0.638838 0.638838 0.0214971 3 (0.000820941,0) 0 0.638838 0.638838 0.0286521 2 (0.408114,0) 0 1 1 0.638838 2 (0.160307,0) 0 0.638838 0.638838 0.400383 2 (0.160256,0) 0 0.638838 0.638838 0.400319 2 (0.160101,0) 0 0.638838 0.638838 0.400127 2 (0.159845,0) 0 0.638838 0.638838 0.399806 2 (0.159486,0) 0 0.638838 0.638838 0.399357 1 (0.0918861,0) 0 1 1 0.303127 1 (0.0125,0) 0 0.638838 0.638838 0.111803 1 (0.012506,0) 0 0.638838 0.638838 0.11183 1 (0.012524,0) 0 0.638838 0.638838 0.111911 1 (0.0125541,0) 0 0.638838 0.638838 0.112045 1 (0.012596,0) 0 0.638838 0.638838 0.112232 1 (0.0918861,0) 0 1 1 0.303127 1 (0.0125,0) 0 0.638838 0.638838 0.111803 1 (0.012506,0) 0 0.638838 0.638838 0.11183 1 (0.012524,0) 0 0.638838 0.638838 0.111911 1 (0.0125541,0) 0 0.638838 0.638838 0.112045 1 (0.012596,0) 0 0.638838 0.638838 0.112232 2 (0.408114,0) 0 1 1 0.638838 2 (0.160307,0) 0 0.638838 0.638838 0.400383 2 (0.160256,0) 0 0.638838 0.638838 0.400319 2 (0.160101,0) 0 0.638838 0.638838 0.400127 2 (0.159845,0) 0 0.638838 0.638838 0.399806 2 (0.159486,0) 0 0.638838 0.638838 0.399357 3 (0.408114,0) 0.1 1 1 0.638838 3 (0.000820941,0) 0.1 0.638838 0.638838 0.0286521 3 (0.00128149,0) 0.1 0.638838 0.638838 0.0357979 3 (0.00184317,0) 0.1 0.638838 0.638838 0.0429322 3 (0.00250527,0) 0.1 0.638838 0.638838 0.0500527 3 (0.00326695,0) 0.1 0.638838 0.638838 0.0571572 4 (0.408114,0) 0.1 1 1 0.638838 4 (0.159486,0) 0.1 0.638838 0.638838 0.399357 4 (0.159025,0) 0.1 0.638838 0.638838 0.39878 4 (0.158464,0) 0.1 0.638838 0.638838 0.398075 4 (0.157802,0) 0.1 0.638838 0.638838 0.397243 4 (0.15704,0) 0.1 0.638838 0.638838 0.396283 5 (0.408114,0) 0.1 1 1 0.638838 5 (0.000820941,0) 0.1 0.638838 0.638838 0.0286521 5 (0.00128149,0) 0.1 0.638838 0.638838 0.0357979 5 (0.00184317,0) 0.1 0.638838 0.638838 0.0429322 5 (0.00250527,0) 0.1 0.638838 0.638838 0.0500527 5 (0.00326695,0) 0.1 0.638838 0.638838 0.0571572 6 (0.0918861,0) 0.1 1 1 0.303127 6 (0.031154,0) 0.1 0.638838 0.638838 0.176505 6 (0.0311001,0) 0.1 0.638838 0.638838 0.176352 6 (0.0310344,0) 0.1 0.638838 0.638838 0.176166 6 (0.030957,0) 0.1 0.638838 0.638838 0.175946 6 (0.0308679,0) 0.1 0.638838 0.638838 0.175693 6 (0.0918861,0) 0.1 1 1 0.303127 6 (0.031154,0) 0.1 0.638838 0.638838 0.176505 6 (0.0311001,0) 0.1 0.638838 0.638838 0.176352 6 (0.0310344,0) 0.1 0.638838 0.638838 0.176166 6 (0.030957,0) 0.1 0.638838 0.638838 0.175946 6 (0.0308679,0) 0.1 0.638838 0.638838 0.175693 5 (0.408114,0) 0.2 1 1 0.638838 5 (0.00326695,0) 0.2 0.638838 0.638838 0.0571572 5 (0.00412721,0) 0.2 0.638838 0.638838 0.0642434 5 (0.00508497,0) 0.2 0.638838 0.638838 0.071309 5 (0.00613899,0) 0.2 0.638838 0.638838 0.0783517 5 (0.00728791,0) 0.2 0.638838 0.638838 0.0853693 4 (0.408114,0) 0.2 1 1 0.638838 4 (0.15704,0) 0.2 0.638838 0.638838 0.396283 4 (0.15618,0) 0.2 0.638838 0.638838 0.395196 4 (0.155222,0) 0.2 0.638838 0.638838 0.393982 4 (0.154168,0) 0.2 0.638838 0.638838 0.392642 4 (0.153019,0) 0.2 0.638838 0.638838 0.391176 3 (0.408114,0) 0.2 1 1 0.638838 3 (0.00326695,0) 0.2 0.638838 0.638838 0.0571572 3 (0.00412721,0) 0.2 0.638838 0.638838 0.0642434 3 (0.00508497,0) 0.2 0.638838 0.638838 0.071309 3 (0.00613899,0) 0.2 0.638838 0.638838 0.0783517 3 (0.00728791,0) 0.2 0.638838 0.638838 0.0853693 2 (0.408114,0) 0.2 1 1 0.638838 2 (0.15704,0) 0.2 0.638838 0.638838 0.396283 2 (0.15618,0) 0.2 0.638838 0.638838 0.395196 2 (0.155222,0) 0.2 0.638838 0.638838 0.393982 2 (0.154168,0) 0.2 0.638838 0.638838 0.392642 2 (0.153019,0) 0.2 0.638838 0.638838 0.391176 1 (0.0918861,0) 0.2 1 1 0.303127 1 (0.0128821,0) 0.2 0.638838 0.638838 0.113499 1 (0.0129827,0) 0.2 0.638838 0.638838 0.113942 1 (0.0130948,0) 0.2 0.638838 0.638838 0.114432 1 (0.013218,0) 0.2 0.638838 0.638838 0.11497 1 (0.0133524,0) 0.2 0.638838 0.638838 0.115553 1 (0.0918861,0) 0.3 1 1 0.303127 1 (0.0133524,0) 0.3 0.638838 0.638838 0.115553 1 (0.0134977,0) 0.3 0.638838 0.638838 0.11618 1 (0.0136538,0) 0.3 0.638838 0.638838 0.116849 1 (0.0138204,0) 0.3 0.638838 0.638838 0.11756 1 (0.0139973,0) 0.3 0.638838 0.638838 0.11831 2 (0.408114,0) 0.3 1 1 0.638838 2 (0.153019,0) 0.3 0.638838 0.638838 0.391176 2 (0.151777,0) 0.3 0.638838 0.638838 0.389585 2 (0.150442,0) 0.3 0.638838 0.638838 0.387869 2 (0.149018,0) 0.3 0.638838 0.638838 0.386029 2 (0.147505,0) 0.3 0.638838 0.638838 0.384064 3 (0.408114,0) 0.3 1 1 0.638838 3 (0.00728791,0) 0.3 0.638838 0.638838 0.0853693 3 (0.00853028,0) 0.3 0.638838 0.638838 0.0923595 3 (0.00986449,0) 0.3 0.638838 0.638838 0.0993201 3 (0.0112888,0) 0.3 0.638838 0.638838 0.106249 3 (0.0128015,0) 0.3 0.638838 0.638838 0.113144 4 (0.408114,0) 0.3 1 1 0.638838 4 (0.153019,0) 0.3 0.638838 0.638838 0.391176 4 (0.151777,0) 0.3 0.638838 0.638838 0.389585 4 (0.150442,0) 0.3 0.638838 0.638838 0.387869 4 (0.149018,0) 0.3 0.638838 0.638838 0.386029 4 (0.147505,0) 0.3 0.638838 0.638838 0.384064 5 (0.408114,0) 0.3 1 1 0.638838 5 (0.00728791,0) 0.3 0.638838 0.638838 0.0853693 5 (0.00853028,0) 0.3 0.638838 0.638838 0.0923595 5 (0.00986449,0) 0.3 0.638838 0.638838 0.0993201 5 (0.0112888,0) 0.3 0.638838 0.638838 0.106249 5 (0.0128015,0) 0.3 0.638838 0.638838 0.113144 6 (0.0918861,0) 0.4 1 1 0.303127 6 (0.0297527,0) 0.4 0.638838 0.638838 0.17249 6 (0.0295657,0) 0.4 0.638838 0.638838 0.171947 6 (0.0293688,0) 0.4 0.638838 0.638838 0.171373 6 (0.0291623,0) 0.4 0.638838 0.638838 0.17077 6 (0.0289464,0) 0.4 0.638838 0.638838 0.170137 6 (0.0918861,0) 0.4 1 1 0.303127 6 (0.0297527,0) 0.4 0.638838 0.638838 0.17249 6 (0.0295657,0) 0.4 0.638838 0.638838 0.171947 6 (0.0293688,0) 0.4 0.638838 0.638838 0.171373 6 (0.0291623,0) 0.4 0.638838 0.638838 0.17077 6 (0.0289464,0) 0.4 0.638838 0.638838 0.170137 5 (0.408114,0) 0.4 1 1 0.638838 5 (0.0128015,0) 0.4 0.638838 0.638838 0.113144 5 (0.0144005,0) 0.4 0.638838 0.638838 0.120002 5 (0.0160838,0) 0.4 0.638838 0.638838 0.126822 5 (0.0178493,0) 0.4 0.638838 0.638838 0.133601 5 (0.0196947,0) 0.4 0.638838 0.638838 0.140338 4 (0.408114,0) 0.4 1 1 0.638838 4 (0.147505,0) 0.4 0.638838 0.638838 0.384064 4 (0.145906,0) 0.4 0.638838 0.638838 0.381977 4 (0.144223,0) 0.4 0.638838 0.638838 0.379767 4 (0.142458,0) 0.4 0.638838 0.638838 0.377436 4 (0.140612,0) 0.4 0.638838 0.638838 0.374983 3 (0.408114,0) 0.4 1 1 0.638838 3 (0.0128015,0) 0.4 0.638838 0.638838 0.113144 3 (0.0144005,0) 0.4 0.638838 0.638838 0.120002 3 (0.0160838,0) 0.4 0.638838 0.638838 0.126822 3 (0.0178493,0) 0.4 0.638838 0.638838 0.133601 3 (0.0196947,0) 0.4 0.638838 0.638838 0.140338 2 (0.408114,0) 0.5 1 1 0.638838 2 (0.140612,0) 0.5 0.638838 0.638838 0.374983 2 (0.138689,0) 0.5 0.638838 0.638838 0.37241 2 (0.136691,0) 0.5 0.638838 0.638838 0.369718 2 (0.134621,0) 0.5 0.638838 0.638838 0.366907 2 (0.132481,0) 0.5 0.638838 0.638838 0.363979 1 (0.0918861,0) 0.5 1 1 0.303127 1 (0.0148036,0) 0.5 0.638838 0.638838 0.12167 1 (0.0150285,0) 0.5 0.638838 0.638838 0.122591 1 (0.0152622,0) 0.5 0.638838 0.638838 0.12354 1 (0.0155043,0) 0.5 0.638838 0.638838 0.124516 1 (0.0157547,0) 0.5 0.638838 0.638838 0.125518 1 (0.0918861,0) 0.5 1 1 0.303127 1 (0.0148036,0) 0.5 0.638838 0.638838 0.12167 1 (0.0150285,0) 0.5 0.638838 0.638838 0.122591 1 (0.0152622,0) 0.5 0.638838 0.638838 0.12354 1 (0.0155043,0) 0.5 0.638838 0.638838 0.124516 1 (0.0157547,0) 0.5 0.638838 0.638838 0.125518 2 (0.408114,0) 0.5 1 1 0.638838 2 (0.140612,0) 0.5 0.638838 0.638838 0.374983 2 (0.138689,0) 0.5 0.638838 0.638838 0.37241 2 (0.136691,0) 0.5 0.638838 0.638838 0.369718 2 (0.134621,0) 0.5 0.638838 0.638838 0.366907 2 (0.132481,0) 0.5 0.638838 0.638838 0.363979 3 (0.408114,0) 0.5 1 1 0.638838 3 (0.0196947,0) 0.5 0.638838 0.638838 0.140338 3 (0.0216176,0) 0.5 0.638838 0.638838 0.147029 3 (0.0236156,0) 0.5 0.638838 0.638838 0.153674 3 (0.025686,0) 0.5 0.638838 0.638838 0.160269 3 (0.0278264,0) 0.5 0.638838 0.638838 0.166812 4 (0.408114,0) 0.6 1 1 0.638838 4 (0.132481,0) 0.6 0.638838 0.638838 0.363979 4 (0.130273,0) 0.6 0.638838 0.638838 0.360934 4 (0.128001,0) 0.6 0.638838 0.638838 0.357773 4 (0.125668,0) 0.6 0.638838 0.638838 0.354497 4 (0.123277,0) 0.6 0.638838 0.638838 0.351108 5 (0.408114,0) 0.6 1 1 0.638838 5 (0.0278264,0) 0.6 0.638838 0.638838 0.166812 5 (0.0300338,0) 0.6 0.638838 0.638838 0.173303 5 (0.0323055,0) 0.6 0.638838 0.638838 0.179737 5 (0.0346385,0) 0.6 0.638838 0.638838 0.186114 5 (0.0370299,0) 0.6 0.638838 0.638838 0.192432 6 (0.0918861,0) 0.6 1 1 0.303127 6 (0.0279953,0) 0.6 0.638838 0.638838 0.167318 6 (0.0277372,0) 0.6 0.638838 0.638838 0.166545 6 (0.0274715,0) 0.6 0.638838 0.638838 0.165745 6 (0.0271986,0) 0.6 0.638838 0.638838 0.16492 6 (0.0269189,0) 0.6 0.638838 0.638838 0.16407 6 (0.0918861,0) 0.6 1 1 0.303127 6 (0.0279953,0) 0.6 0.638838 0.638838 0.167318 6 (0.0277372,0) 0.6 0.638838 0.638838 0.166545 6 (0.0274715,0) 0.6 0.638838 0.638838 0.165745 6 (0.0271986,0) 0.6 0.638838 0.638838 0.16492 6 (0.0269189,0) 0.6 0.638838 0.638838 0.16407 5 (0.408114,0) 0.6 1 1 0.638838 5 (0.0278264,0) 0.6 0.638838 0.638838 0.166812 5 (0.0300338,0) 0.6 0.638838 0.638838 0.173303 5 (0.0323055,0) 0.6 0.638838 0.638838 0.179737 5 (0.0346385,0) 0.6 0.638838 0.638838 0.186114 5 (0.0370299,0) 0.6 0.638838 0.638838 0.192432 4 (0.408114,0) 0.7 1 1 0.638838 4 (0.123277,0) 0.7 0.638838 0.638838 0.351108 4 (0.12083,0) 0.7 0.638838 0.638838 0.347607 4 (0.118331,0) 0.7 0.638838 0.638838 0.343993 4 (0.115784,0) 0.7 0.638838 0.638838 0.34027 4 (0.11319,0) 0.7 0.638838 0.638838 0.336437 3 (0.408114,0) 0.7 1 1 0.638838 3 (0.0370299,0) 0.7 0.638838 0.638838 0.192432 3 (0.0394766,0) 0.7 0.638838 0.638838 0.198687 3 (0.0419755,0) 0.7 0.638838 0.638838 0.204879 3 (0.0445233,0) 0.7 0.638838 0.638838 0.211005 3 (0.0471168,0) 0.7 0.638838 0.638838 0.217064 2 (0.408114,0) 0.7 1 1 0.638838 2 (0.123277,0) 0.7 0.638838 0.638838 0.351108 2 (0.12083,0) 0.7 0.638838 0.638838 0.347607 2 (0.118331,0) 0.7 0.638838 0.638838 0.343993 2 (0.115784,0) 0.7 0.638838 0.638838 0.34027 2 (0.11319,0) 0.7 0.638838 0.638838 0.336437 1 (0.0918861,0) 0.7 1 1 0.303127 1 (0.0168311,0) 0.7 0.638838 0.638838 0.129735 1 (0.0171173,0) 0.7 0.638838 0.638838 0.130833 1 (0.0174096,0) 0.7 0.638838 0.638838 0.131945 1 (0.0177076,0) 0.7 0.638838 0.638838 0.13307 1 (0.0180109,0) 0.7 0.638838 0.638838 0.134205 1 (0.0918861,0) 0.7 1 1 0.303127 1 (0.0168311,0) 0.7 0.638838 0.638838 0.129735 1 (0.0171173,0) 0.7 0.638838 0.638838 0.130833 1 (0.0174096,0) 0.7 0.638838 0.638838 0.131945 1 (0.0177076,0) 0.7 0.638838 0.638838 0.13307 1 (0.0180109,0) 0.7 0.638838 0.638838 0.134205 2 (0.408114,0) 0.8 1 1 0.638838 2 (0.11319,0) 0.8 0.638838 0.638838 0.336437 2 (0.110554,0) 0.8 0.638838 0.638838 0.332497 2 (0.107879,0) 0.8 0.638838 0.638838 0.32845 2 (0.105169,0) 0.8 0.638838 0.638838 0.324298 2 (0.102427,0) 0.8 0.638838 0.638838 0.320041 3 (0.408114,0) 0.8 1 1 0.638838 3 (0.0471168,0) 0.8 0.638838 0.638838 0.217064 3 (0.0497527,0) 0.8 0.638838 0.638838 0.223053 3 (0.0524275,0) 0.8 0.638838 0.638838 0.228971 3 (0.0551379,0) 0.8 0.638838 0.638838 0.234815 3 (0.0578804,0) 0.8 0.638838 0.638838 0.240584 4 (0.408114,0) 0.8 1 1 0.638838 4 (0.11319,0) 0.8 0.638838 0.638838 0.336437 4 (0.110554,0) 0.8 0.638838 0.638838 0.332497 4 (0.107879,0) 0.8 0.638838 0.638838 0.32845 4 (0.105169,0) 0.8 0.638838 0.638838 0.324298 4 (0.102427,0) 0.8 0.638838 0.638838 0.320041 5 (0.408114,0) 0.8 1 1 0.638838 5 (0.0471168,0) 0.8 0.638838 0.638838 0.217064 5 (0.0497527,0) 0.8 0.638838 0.638838 0.223053 5 (0.0524275,0) 0.8 0.638838 0.638838 0.228971 5 (0.0551379,0) 0.8 0.638838 0.638838 0.234815 5 (0.0578804,0) 0.8 0.638838 0.638838 0.240584 6 (0.0918861,0) 0.8 1 1 0.303127 6 (0.0257391,0) 0.8 0.638838 0.638838 0.160434 6 (0.0254308,0) 0.8 0.638838 0.638838 0.15947 6 (0.0251179,0) 0.8 0.638838 0.638838 0.158486 6 (0.0248009,0) 0.8 0.638838 0.638838 0.157483 6 (0.0244801,0) 0.8 0.638838 0.638838 0.156461 6 (0.0918861,0) 0.9 1 1 0.303127 6 (0.0244801,0) 0.9 0.638838 0.638838 0.156461 6 (0.024156,0) 0.9 0.638838 0.638838 0.155422 6 (0.023829,0) 0.9 0.638838 0.638838 0.154366 6 (0.0234994,0) 0.9 0.638838 0.638838 0.153295 6 (0.0231678,0) 0.9 0.638838 0.638838 0.15221 5 (0.408114,0) 0.9 1 1 0.638838 5 (0.0578804,0) 0.9 0.638838 0.638838 0.240584 5 (0.0606515,0) 0.9 0.638838 0.638838 0.246275 5 (0.0634475,0) 0.9 0.638838 0.638838 0.251888 5 (0.066265,0) 0.9 0.638838 0.638838 0.25742 5 (0.0691003,0) 0.9 0.638838 0.638838 0.262869 4 (0.408114,0) 0.9 1 1 0.638838 4 (0.102427,0) 0.9 0.638838 0.638838 0.320041 4 (0.0996555,0) 0.9 0.638838 0.638838 0.315683 4 (0.0968594,0) 0.9 0.638838 0.638838 0.311222 4 (0.0940419,0) 0.9 0.638838 0.638838 0.306663 4 (0.0912066,0) 0.9 0.638838 0.638838 0.302004 3 (0.408114,0) 0.9 1 1 0.638838 3 (0.0578804,0) 0.9 0.638838 0.638838 0.240584 3 (0.0606515,0) 0.9 0.638838 0.638838 0.246275 3 (0.0634475,0) 0.9 0.638838 0.638838 0.251888 3 (0.066265,0) 0.9 0.638838 0.638838 0.25742 3 (0.0691003,0) 0.9 0.638838 0.638838 0.262869 2 (0.408114,0) 0.9 1 1 0.638838 2 (0.102427,0) 0.9 0.638838 0.638838 0.320041 2 (0.0996555,0) 0.9 0.638838 0.638838 0.315683 2 (0.0968594,0) 0.9 0.638838 0.638838 0.311222 2 (0.0940419,0) 0.9 0.638838 0.638838 0.306663 2 (0.0912066,0) 0.9 0.638838 0.638838 0.302004 1 (0.0918861,0) 1 1 1 0.303127 1 (0.0205822,0) 1 0.638838 0.638838 0.143465 1 (0.0209155,0) 1 0.638838 0.638838 0.144622 1 (0.02125,0) 1 0.638838 0.638838 0.145774 1 (0.0215853,0) 1 0.638838 0.638838 0.146919 1 (0.021921,0) 1 0.638838 0.638838 0.148057 1 (0.0918861,0) 1 1 1 0.303127 1 (0.0205822,0) 1 0.638838 0.638838 0.143465 1 (0.0209155,0) 1 0.638838 0.638838 0.144622 1 (0.02125,0) 1 0.638838 0.638838 0.145774 1 (0.0215853,0) 1 0.638838 0.638838 0.146919 1 (0.021921,0) 1 0.638838 0.638838 0.148057 2 (0.408114,0) 1 1 1 0.638838 2 (0.0912066,0) 1 0.638838 0.638838 0.302004 2 (0.0883572,0) 1 0.638838 0.638838 0.297249 2 (0.0854972,0) 1 0.638838 0.638838 0.292399 2 (0.0826304,0) 1 0.638838 0.638838 0.287455 2 (0.0797603,0) 1 0.638838 0.638838 0.282419 3 (0.408114,0) 1 1 1 0.638838 3 (0.0691003,0) 1 0.638838 0.638838 0.262869 3 (0.0719498,0) 1 0.638838 0.638838 0.268235 3 (0.0748098,0) 1 0.638838 0.638838 0.273514 3 (0.0776766,0) 1 0.638838 0.638838 0.278705 3 (0.0805466,0) 1 0.638838 0.638838 0.283807 4 (0.408114,0) 1 1 1 0.638838 4 (0.0912066,0) 1 0.638838 0.638838 0.302004 4 (0.0883572,0) 1 0.638838 0.638838 0.297249 4 (0.0854972,0) 1 0.638838 0.638838 0.292399 4 (0.0826303,0) 1 0.638838 0.638838 0.287455 4 (0.0797603,0) 1 0.638838 0.638838 0.282419 5 (0.408114,0) 1.1 1 1 0.638838 5 (0.0805466,0) 1.1 0.638838 0.638838 0.283807 5 (0.0834161,0) 1.1 0.638838 0.638838 0.288818 5 (0.0862814,0) 1.1 0.638838 0.638838 0.293737 5 (0.0891389,0) 1.1 0.638838 0.638838 0.298561 5 (0.0919848,0) 1.1 0.638838 0.638838 0.30329 6 (0.0918861,0) 1.1 1 1 0.303127 6 (0.021829,0) 1.1 0.638838 0.638838 0.147746 6 (0.0214934,0) 1.1 0.638838 0.638838 0.146606 6 (0.0211583,0) 1.1 0.638838 0.638838 0.145459 6 (0.020824,0) 1.1 0.638838 0.638838 0.144305 6 (0.0204912,0) 1.1 0.638838 0.638838 0.143147 6 (0.0918861,0) 1.1 1 1 0.303127 6 (0.021829,0) 1.1 0.638838 0.638838 0.147746 6 (0.0214934,0) 1.1 0.638838 0.638838 0.146606 6 (0.0211583,0) 1.1 0.638838 0.638838 0.145459 6 (0.020824,0) 1.1 0.638838 0.638838 0.144305 6 (0.0204912,0) 1.1 0.638838 0.638838 0.143147 5 (0.408114,0) 1.1 1 1 0.638838 5 (0.0805466,0) 1.1 0.638838 0.638838 0.283807 5 (0.0834161,0) 1.1 0.638838 0.638838 0.288818 5 (0.0862814,0) 1.1 0.638838 0.638838 0.293737 5 (0.0891389,0) 1.1 0.638838 0.638838 0.298561 5 (0.0919848,0) 1.1 0.638838 0.638838 0.30329 4 (0.408114,0) 1.1 1 1 0.638838 4 (0.0797603,0) 1.1 0.638838 0.638838 0.282419 4 (0.0768908,0) 1.1 0.638838 0.638838 0.277292 4 (0.0740255,0) 1.1 0.638838 0.638838 0.272076 4 (0.071168,0) 1.1 0.638838 0.638838 0.266773 4 (0.0683221,0) 1.1 0.638838 0.638838 0.261385 3 (0.408114,0) 1.2 1 1 0.638838 3 (0.0919848,0) 1.2 0.638838 0.638838 0.30329 3 (0.0948156,0) 1.2 0.638838 0.638838 0.307921 3 (0.0976276,0) 1.2 0.638838 0.638838 0.312454 3 (0.100417,0) 1.2 0.638838 0.638838 0.316887 3 (0.103181,0) 1.2 0.638838 0.638838 0.321218 2 (0.408114,0) 1.2 1 1 0.638838 2 (0.0683221,0) 1.2 0.638838 0.638838 0.261385 2 (0.0654913,0) 1.2 0.638838 0.638838 0.255913 2 (0.0626794,0) 1.2 0.638838 0.638838 0.250358 2 (0.0598898,0) 1.2 0.638838 0.638838 0.244724 2 (0.0571262,0) 1.2 0.638838 0.638838 0.239011 1 (0.0918861,0) 1.2 1 1 0.303127 1 (0.0232588,0) 1.2 0.638838 0.638838 0.152508 1 (0.0235899,0) 1.2 0.638838 0.638838 0.15359 1 (0.0239188,0) 1.2 0.638838 0.638838 0.154657 1 (0.0242451,0) 1.2 0.638838 0.638838 0.155708 1 (0.0245683,0) 1.2 0.638838 0.638838 0.156743 1 (0.0918861,0) 1.2 1 1 0.303127 1 (0.0232588,0) 1.2 0.638838 0.638838 0.152508 1 (0.0235899,0) 1.2 0.638838 0.638838 0.15359 1 (0.0239188,0) 1.2 0.638838 0.638838 0.154657 1 (0.0242451,0) 1.2 0.638838 0.638838 0.155708 1 (0.0245683,0) 1.2 0.638838 0.638838 0.156743 2 (0.408114,0) 1.2 1 1 0.638838 2 (0.0683221,0) 1.2 0.638838 0.638838 0.261385 2 (0.0654913,0) 1.2 0.638838 0.638838 0.255913 2 (0.0626794,0) 1.2 0.638838 0.638838 0.250358 2 (0.0598898,0) 1.2 0.638838 0.638838 0.244724 2 (0.0571262,0) 1.2 0.638838 0.638838 0.239011 3 (0.408114,0) 1.3 1 1 0.638838 3 (0.103181,0) 1.3 0.638838 0.638838 0.321218 3 (0.105915,0) 1.3 0.638838 0.638838 0.325445 3 (0.108616,0) 1.3 0.638838 0.638838 0.329569 3 (0.11128,0) 1.3 0.638838 0.638838 0.333587 3 (0.113905,0) 1.3 0.638838 0.638838 0.337498 dmrgpp-6.02/TestSuite/oracles/timeEvolution200.txt000066400000000000000000000510541414604301300221420ustar00rootroot000000000000001 (0.5,0) 0 1 1 0.707107 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 2 (0.5,0) 0 1 1 0.707107 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 3 (0.5,0) 0 1 1 0.707107 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 4 (0.5,0) 0 1 1 0.707107 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 5 (0.5,0) 0 1 1 0.707107 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 6 (0.5,0) 0 1 1 0.707107 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 7 (0.5,0) 0 1 1 0.707107 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 8 (0.5,0) 0 1 1 0.707107 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 9 (0.5,0) 0 1 1 0.707107 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 10 (0.5,0) 0 1 1 0.707107 10 (0.5,0) 0 1 1 1 10 (0.499688,0) 0 1 1 0.999688 10 (0.498752,0) 0 1 1 0.998751 10 (0.4972,0) 0 1 1 0.997193 10 (0.495038,0) 0 1 1 0.995017 11 (0.5,0) 0 1 1 0.707107 11 (0,0) 0 0.978813 0.978813 0 11 (0.000526471,0) 0 0.978813 0.978813 0.0299078 11 (0.0021026,0) 0 0.978813 0.978813 0.0597689 11 (0.00471854,0) 0 0.978813 0.978813 0.0895365 11 (0.00835795,0) 0 0.978813 0.978813 0.119164 12 (0.5,0) 0 1 1 0.707107 12 (0.281042,0) 0 0.978813 0.978813 0.682254 12 (0.280867,0) 0 0.978813 0.978813 0.682049 12 (0.280342,0) 0 0.978813 0.978813 0.681433 12 (0.279473,0) 0 0.978813 0.978813 0.680413 12 (0.278267,0) 0 0.978813 0.978813 0.678996 13 (0.5,0) 0 1 1 0.707107 13 (0.281042,0) 0 0.978812 0.978812 0.691454 13 (0.281042,0) 0 0.978812 0.978812 0.691453 13 (0.281042,0) 0 0.978812 0.978812 0.69145 13 (0.28104,0) 0 0.978812 0.978812 0.691443 13 (0.281035,0) 0 0.978812 0.978812 0.691432 14 (0.5,0) 0 1 1 0.707107 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692107 14 (0.5,0) 0 1 1 0.707107 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692108 14 (0.281042,0) 0 0.978812 0.978812 0.692107 13 (0.5,0) 0.1 1 1 0.707107 13 (0.281035,0) 0.1 0.978812 0.978812 0.691432 13 (0.281025,0) 0.1 0.978812 0.978812 0.691412 13 (0.281008,0) 0.1 0.978812 0.978812 0.691382 13 (0.28098,0) 0.1 0.978812 0.978812 0.691337 13 (0.280938,0) 0.1 0.978812 0.978812 0.691274 12 (0.5,0) 0.1 1 1 0.707107 12 (0.278267,0) 0.1 0.978812 0.978812 0.678996 12 (0.276736,0) 0.1 0.978812 0.978812 0.677193 12 (0.274895,0) 0.1 0.978812 0.978812 0.675019 12 (0.27276,0) 0.1 0.978812 0.978812 0.672491 12 (0.270352,0) 0.1 0.978812 0.978812 0.669629 11 (0.5,0) 0.1 1 1 0.707107 11 (0.0083567,0) 0.1 0.978812 0.978812 0.119142 11 (0.0129966,0) 0.1 0.978812 0.978812 0.148583 11 (0.0186084,0) 0.1 0.978812 0.978812 0.177793 11 (0.0251571,0) 0.1 0.978812 0.978812 0.206725 11 (0.0326022,0) 0.1 0.978812 0.978812 0.235335 10 (0.5,0) 0.1 1 1 0.707107 10 (0.553729,0) 0.1 0.978812 0.978812 0.971514 10 (0.54909,0) 0.1 0.978812 0.978812 0.967438 10 (0.543478,0) 0.1 0.978812 0.978812 0.962484 10 (0.536929,0) 0.1 0.978812 0.978812 0.956668 10 (0.529484,0) 0.1 0.978812 0.978812 0.950012 9 (0.5,0) 0.1 1 1 0.707107 9 (0.283839,0) 0.1 0.97881 0.97881 0.68482 9 (0.285366,0) 0.1 0.97881 0.97881 0.687004 9 (0.287203,0) 0.1 0.97881 0.97881 0.689615 9 (0.289334,0) 0.1 0.97881 0.97881 0.692617 9 (0.291738,0) 0.1 0.97881 0.97881 0.695976 8 (0.500001,0) 0.2 1 1 0.707107 8 (0.281131,0) 0.2 0.978803 0.978803 0.691674 8 (0.2812,0) 0.2 0.978803 0.978803 0.691746 8 (0.281292,0) 0.2 0.978803 0.978803 0.691845 8 (0.281412,0) 0.2 0.978803 0.978803 0.691977 8 (0.281566,0) 0.2 0.978803 0.978803 0.692147 7 (0.499999,0) 0.2 1 1 0.707106 7 (0.281064,0) 0.2 0.978772 0.978772 0.692066 7 (0.281064,0) 0.2 0.978772 0.978772 0.692064 7 (0.281064,0) 0.2 0.978772 0.978772 0.692061 7 (0.281064,0) 0.2 0.978772 0.978772 0.692059 7 (0.281066,0) 0.2 0.978772 0.978772 0.692057 6 (0.500003,0) 0.2 1 1 0.707109 6 (0.280978,0) 0.2 0.978706 0.978706 0.691866 6 (0.280977,0) 0.2 0.978706 0.978706 0.691864 6 (0.280976,0) 0.2 0.978706 0.978706 0.691862 6 (0.280975,0) 0.2 0.978706 0.978706 0.691861 6 (0.280974,0) 0.2 0.978706 0.978706 0.691859 5 (0.500001,0) 0.2 1 1 0.707108 5 (0.281018,0) 0.2 0.97866 0.97866 0.69202 5 (0.281018,0) 0.2 0.97866 0.97866 0.692019 5 (0.281017,0) 0.2 0.97866 0.97866 0.692018 5 (0.281016,0) 0.2 0.97866 0.97866 0.692017 5 (0.281016,0) 0.2 0.97866 0.97866 0.692016 4 (0.499977,0) 0.2 1 1 0.707091 4 (0.281004,0) 0.2 0.978604 0.978604 0.691919 4 (0.281005,0) 0.2 0.978604 0.978604 0.691919 4 (0.281005,0) 0.2 0.978604 0.978604 0.691918 4 (0.281005,0) 0.2 0.978604 0.978604 0.691918 4 (0.281005,0) 0.2 0.978604 0.978604 0.691918 3 (0.500016,0) 0.3 1 1 0.707118 3 (0.281005,0) 0.3 0.978589 0.978589 0.691968 3 (0.281004,0) 0.3 0.978589 0.978589 0.691967 3 (0.281004,0) 0.3 0.978589 0.978589 0.691967 3 (0.281004,0) 0.3 0.978589 0.978589 0.691967 3 (0.281004,0) 0.3 0.978589 0.978589 0.691967 2 (0.499989,0) 0.3 1 1 0.707099 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 2 (0.281013,0) 0.3 0.978577 0.978577 0.691932 2 (0.281013,0) 0.3 0.978577 0.978577 0.691932 1 (0.500003,0) 0.3 1 1 0.707109 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 1 (0.281003,0) 0.3 0.978577 0.978577 0.691958 1 (0.281003,0) 0.3 0.978577 0.978577 0.691958 1 (0.281003,0) 0.3 0.978577 0.978577 0.691958 1 (0.500003,0) 0.3 1 1 0.707109 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 1 (0.281003,0) 0.3 0.978577 0.978577 0.691959 1 (0.281003,0) 0.3 0.978577 0.978577 0.691958 1 (0.281003,0) 0.3 0.978577 0.978577 0.691958 1 (0.281003,0) 0.3 0.978577 0.978577 0.691958 2 (0.499989,0) 0.3 1 1 0.707099 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 2 (0.281012,0) 0.3 0.978577 0.978577 0.691932 2 (0.281013,0) 0.3 0.978577 0.978577 0.691932 2 (0.281013,0) 0.3 0.978577 0.978577 0.691932 3 (0.500016,0) 0.4 1 1 0.707118 3 (0.281002,0) 0.4 0.978577 0.978577 0.691959 3 (0.281002,0) 0.4 0.978577 0.978577 0.691958 3 (0.281002,0) 0.4 0.978577 0.978577 0.691958 3 (0.281002,0) 0.4 0.978577 0.978577 0.691957 3 (0.281001,0) 0.4 0.978577 0.978577 0.691956 4 (0.499977,0) 0.4 1 1 0.707091 4 (0.281048,0) 0.4 0.978577 0.978577 0.691944 4 (0.28104,0) 0.4 0.978577 0.978577 0.691935 4 (0.281032,0) 0.4 0.978577 0.978577 0.691926 4 (0.281022,0) 0.4 0.978577 0.978577 0.691916 4 (0.281012,0) 0.4 0.978577 0.978577 0.691905 5 (0.500001,0) 0.4 1 1 0.707108 5 (0.280719,0) 0.4 0.978577 0.978577 0.691711 5 (0.280733,0) 0.4 0.978577 0.978577 0.691724 5 (0.280748,0) 0.4 0.978577 0.978577 0.691737 5 (0.280763,0) 0.4 0.978577 0.978577 0.691751 5 (0.28078,0) 0.4 0.978577 0.978577 0.691766 6 (0.500003,0) 0.4 1 1 0.707109 6 (0.280952,0) 0.4 0.978576 0.978576 0.691755 6 (0.280959,0) 0.4 0.978576 0.978576 0.691761 6 (0.280967,0) 0.4 0.978576 0.978576 0.691768 6 (0.280976,0) 0.4 0.978576 0.978576 0.691777 6 (0.280986,0) 0.4 0.978576 0.978576 0.691787 7 (0.499999,0) 0.4 1 1 0.707106 7 (0.281312,0) 0.4 0.978573 0.978573 0.692178 7 (0.281325,0) 0.4 0.978573 0.978573 0.692187 7 (0.281342,0) 0.4 0.978573 0.978573 0.692199 7 (0.281362,0) 0.4 0.978573 0.978573 0.692215 7 (0.281387,0) 0.4 0.978573 0.978573 0.692235 8 (0.500002,0) 0.5 1 1 0.707108 8 (0.285104,0) 0.5 0.978565 0.978565 0.69593 8 (0.285667,0) 0.5 0.978565 0.978565 0.696579 8 (0.286301,0) 0.5 0.978565 0.978565 0.69731 8 (0.28701,0) 0.5 0.978565 0.978565 0.698126 8 (0.287795,0) 0.5 0.978565 0.978565 0.699025 9 (0.499999,0) 0.5 1 1 0.707106 9 (0.329512,0) 0.5 0.978552 0.978552 0.744306 9 (0.332905,0) 0.5 0.978552 0.978552 0.748518 9 (0.336143,0) 0.5 0.978552 0.978552 0.752525 9 (0.339195,0) 0.5 0.978552 0.978552 0.756293 9 (0.342029,0) 0.5 0.978552 0.978552 0.759791 10 (0.500002,0) 0.5 1 1 0.707108 10 (0.393969,0) 0.5 0.978527 0.978527 0.822079 10 (0.380566,0) 0.5 0.978527 0.978527 0.808169 10 (0.367193,0) 0.5 0.978527 0.978527 0.794019 10 (0.353927,0) 0.5 0.978527 0.978527 0.779699 10 (0.340841,0) 0.5 0.978527 0.978527 0.76528 11 (0.500002,0) 0.5 1 1 0.707108 11 (0.168624,0) 0.5 0.97848 0.97848 0.530626 11 (0.18205,0) 0.5 0.97848 0.97848 0.551489 11 (0.195444,0) 0.5 0.97848 0.97848 0.571573 11 (0.208731,0) 0.5 0.97848 0.97848 0.590848 11 (0.221837,0) 0.5 0.97848 0.97848 0.609287 12 (0.499999,0) 0.5 1 1 0.707106 12 (0.233891,0) 0.5 0.978465 0.978465 0.625293 12 (0.230431,0) 0.5 0.978465 0.978465 0.620905 12 (0.227118,0) 0.5 0.978465 0.978465 0.616681 12 (0.223987,0) 0.5 0.978465 0.978465 0.612669 12 (0.221069,0) 0.5 0.978465 0.978465 0.608914 13 (0.500004,0) 0.6 1 1 0.707109 13 (0.272902,0) 0.6 0.978462 0.978462 0.681628 13 (0.272152,0) 0.6 0.978462 0.978462 0.680701 13 (0.271325,0) 0.6 0.978462 0.978462 0.679677 13 (0.270422,0) 0.6 0.978462 0.978462 0.678558 13 (0.269444,0) 0.6 0.978462 0.978462 0.677344 14 (0.499999,0) 0.6 1 1 0.707106 14 (0.280111,0) 0.6 0.978462 0.978462 0.690831 14 (0.28,0) 0.6 0.978462 0.978462 0.690703 14 (0.279877,0) 0.6 0.978462 0.978462 0.690561 14 (0.279743,0) 0.6 0.978462 0.978462 0.690404 14 (0.279594,0) 0.6 0.978462 0.978462 0.69023 14 (0.499999,0) 0.6 1 1 0.707106 14 (0.280111,0) 0.6 0.978462 0.978462 0.690831 14 (0.28,0) 0.6 0.978462 0.978462 0.690703 14 (0.279877,0) 0.6 0.978462 0.978462 0.690561 14 (0.279743,0) 0.6 0.978462 0.978462 0.690404 14 (0.279594,0) 0.6 0.978462 0.978462 0.69023 13 (0.500004,0) 0.6 1 1 0.707109 13 (0.272902,0) 0.6 0.978462 0.978462 0.681628 13 (0.272152,0) 0.6 0.978462 0.978462 0.680701 13 (0.271325,0) 0.6 0.978462 0.978462 0.679677 13 (0.270422,0) 0.6 0.978462 0.978462 0.678558 13 (0.269444,0) 0.6 0.978462 0.978462 0.677344 12 (0.499999,0) 0.6 1 1 0.707106 12 (0.22107,0) 0.6 0.978462 0.978462 0.608914 12 (0.218395,0) 0.6 0.978462 0.978462 0.605461 12 (0.215991,0) 0.6 0.978462 0.978462 0.602352 12 (0.213883,0) 0.6 0.978462 0.978462 0.599628 12 (0.212096,0) 0.6 0.978462 0.978462 0.597324 11 (0.500002,0) 0.7 1 1 0.707108 11 (0.271006,0) 0.7 0.978462 0.978462 0.674158 11 (0.282187,0) 0.7 0.978462 0.978462 0.688124 11 (0.292804,0) 0.7 0.978462 0.978462 0.701152 11 (0.302808,0) 0.7 0.978462 0.978462 0.713234 11 (0.312155,0) 0.7 0.978462 0.978462 0.724363 10 (0.500001,0) 0.7 1 1 0.707108 10 (0.291702,0) 0.7 0.978454 0.978454 0.708326 10 (0.28053,0) 0.7 0.978454 0.978454 0.694604 10 (0.269919,0) 0.7 0.978454 0.978454 0.681273 10 (0.25992,0) 0.7 0.978454 0.978454 0.668419 10 (0.250575,0) 0.7 0.978454 0.978454 0.656132 9 (0.499997,0) 0.7 1 1 0.707105 9 (0.350248,0) 0.7 0.978411 0.978411 0.76991 9 (0.351637,0) 0.7 0.978411 0.978411 0.771714 9 (0.352665,0) 0.7 0.978411 0.978411 0.773108 9 (0.353317,0) 0.7 0.978411 0.978411 0.774079 9 (0.353582,0) 0.7 0.978411 0.978411 0.774615 8 (0.5,0) 0.7 1 1 0.707107 8 (0.292096,0) 0.7 0.978335 0.978335 0.704137 8 (0.293253,0) 0.7 0.978335 0.978335 0.705507 8 (0.294485,0) 0.7 0.978335 0.978335 0.706969 8 (0.295788,0) 0.7 0.978335 0.978335 0.708516 8 (0.297157,0) 0.7 0.978335 0.978335 0.710141 7 (0.500003,0) 0.7 1 1 0.707109 7 (0.282148,0) 0.7 0.978269 0.978269 0.692906 7 (0.282269,0) 0.7 0.978269 0.978269 0.693032 7 (0.282407,0) 0.7 0.978269 0.978269 0.693176 7 (0.282563,0) 0.7 0.978269 0.978269 0.693342 7 (0.282741,0) 0.7 0.978269 0.978269 0.693531 6 (0.500041,0) 0.8 1 1 0.707136 6 (0.28112,0) 0.8 0.978167 0.978167 0.691747 6 (0.281158,0) 0.8 0.978167 0.978167 0.691789 6 (0.2812,0) 0.8 0.978167 0.978167 0.691836 6 (0.281246,0) 0.8 0.978167 0.978167 0.691888 6 (0.281296,0) 0.8 0.978167 0.978167 0.691946 5 (0.500012,0) 0.8 1 1 0.707115 5 (0.281042,0) 0.8 0.97809 0.97809 0.691732 5 (0.281069,0) 0.8 0.97809 0.97809 0.691758 5 (0.281097,0) 0.8 0.97809 0.97809 0.691783 5 (0.281124,0) 0.8 0.97809 0.97809 0.691809 5 (0.281151,0) 0.8 0.97809 0.97809 0.691835 4 (0.500069,0) 0.8 1 1 0.707155 4 (0.280634,0) 0.8 0.978032 0.978032 0.69121 4 (0.280624,0) 0.8 0.978032 0.978032 0.691198 4 (0.280616,0) 0.8 0.978032 0.978032 0.691186 4 (0.280608,0) 0.8 0.978032 0.978032 0.691175 4 (0.280601,0) 0.8 0.978032 0.978032 0.691165 3 (0.500002,0) 0.8 1 1 0.707108 3 (0.280855,0) 0.8 0.978008 0.978008 0.69152 3 (0.280854,0) 0.8 0.978008 0.978008 0.69152 3 (0.280852,0) 0.8 0.978008 0.978008 0.691519 3 (0.280851,0) 0.8 0.978008 0.978008 0.691518 3 (0.28085,0) 0.8 0.978008 0.978008 0.691517 2 (0.500072,0) 0.8 1 1 0.707158 2 (0.280816,0) 0.8 0.977995 0.977995 0.691365 2 (0.280815,0) 0.8 0.977995 0.977995 0.691364 2 (0.280814,0) 0.8 0.977995 0.977995 0.691363 2 (0.280813,0) 0.8 0.977995 0.977995 0.691362 2 (0.280811,0) 0.8 0.977995 0.977995 0.691361 1 (0.499997,0) 0.9 1 1 0.707104 1 (0.280883,0) 0.9 0.977995 0.977995 0.691538 1 (0.280883,0) 0.9 0.977995 0.977995 0.691538 1 (0.280883,0) 0.9 0.977995 0.977995 0.691538 1 (0.280883,0) 0.9 0.977995 0.977995 0.691537 1 (0.280882,0) 0.9 0.977995 0.977995 0.691537 1 (0.499997,0) 0.9 1 1 0.707104 1 (0.280883,0) 0.9 0.977995 0.977995 0.691538 1 (0.280883,0) 0.9 0.977995 0.977995 0.691538 1 (0.280883,0) 0.9 0.977995 0.977995 0.691538 1 (0.280883,0) 0.9 0.977995 0.977995 0.691537 1 (0.280882,0) 0.9 0.977995 0.977995 0.691537 2 (0.500072,0) 0.9 1 1 0.707158 2 (0.280811,0) 0.9 0.977995 0.977995 0.691361 2 (0.28081,0) 0.9 0.977995 0.977995 0.691359 2 (0.280808,0) 0.9 0.977995 0.977995 0.691357 2 (0.280806,0) 0.9 0.977995 0.977995 0.691355 2 (0.280804,0) 0.9 0.977995 0.977995 0.691353 3 (0.500002,0) 0.9 1 1 0.707108 3 (0.280849,0) 0.9 0.977995 0.977995 0.69151 3 (0.280847,0) 0.9 0.977995 0.977995 0.691509 3 (0.280845,0) 0.9 0.977995 0.977995 0.691507 3 (0.280844,0) 0.9 0.977995 0.977995 0.691506 3 (0.280842,0) 0.9 0.977995 0.977995 0.691504 4 (0.500069,0) 0.9 1 1 0.707155 4 (0.280582,0) 0.9 0.977995 0.977995 0.691126 4 (0.280577,0) 0.9 0.977995 0.977995 0.691118 4 (0.280573,0) 0.9 0.977995 0.977995 0.691112 4 (0.280571,0) 0.9 0.977995 0.977995 0.691107 4 (0.280571,0) 0.9 0.977995 0.977995 0.691104 5 (0.500012,0) 1 1 1 0.707115 5 (0.281267,0) 1 0.977994 0.977994 0.691959 5 (0.281275,0) 1 0.977994 0.977994 0.691962 5 (0.281281,0) 1 0.977994 0.977994 0.691965 5 (0.281287,0) 1 0.977994 0.977994 0.691966 5 (0.281294,0) 1 0.977994 0.977994 0.691968 6 (0.500042,0) 1 1 1 0.707136 6 (0.2815,0) 1 0.977993 0.977993 0.692108 6 (0.281625,0) 1 0.977993 0.977993 0.692253 6 (0.281758,0) 1 0.977993 0.977993 0.692408 6 (0.281898,0) 1 0.977993 0.977993 0.692574 6 (0.282046,0) 1 0.977993 0.977993 0.692751 7 (0.500004,0) 1 1 1 0.707109 7 (0.285537,0) 1 0.977985 0.977985 0.696586 7 (0.285938,0) 1 0.977985 0.977985 0.697029 7 (0.286369,0) 1 0.977985 0.977985 0.697507 7 (0.286831,0) 1 0.977985 0.977985 0.69802 7 (0.287324,0) 1 0.977985 0.977985 0.698568 8 (0.5,0) 1 1 1 0.707106 8 (0.307024,0) 1 0.977959 0.977959 0.721558 8 (0.308514,0) 1 0.977959 0.977959 0.723312 8 (0.309978,0) 1 0.977959 0.977959 0.725034 8 (0.311401,0) 1 0.977959 0.977959 0.726707 8 (0.31277,0) 1 0.977959 0.977959 0.728316 9 (0.500006,0) 1 1 1 0.707111 9 (0.341437,0) 1 0.977902 0.977902 0.762488 9 (0.338459,0) 1 0.977902 0.977902 0.759407 9 (0.335154,0) 1 0.977902 0.977902 0.755933 9 (0.331544,0) 1 0.977902 0.977902 0.752085 9 (0.327652,0) 1 0.977902 0.977902 0.747884 10 (0.500001,0) 1.1 1 1 0.707107 10 (0.200602,0) 1.1 0.97772 0.97772 0.58512 10 (0.20111,0) 1.1 0.97772 0.97772 0.585385 10 (0.202306,0) 1.1 0.97772 0.97772 0.586665 10 (0.204156,0) 1.1 0.97772 0.97772 0.588908 10 (0.206621,0) 1.1 0.97772 0.97772 0.59205 11 (0.499984,0) 1.1 1 1 0.707095 11 (0.362824,0) 1.1 0.977478 0.977478 0.780356 11 (0.362294,0) 1.1 0.977478 0.977478 0.780091 11 (0.361068,0) 1.1 0.977478 0.977478 0.779074 11 (0.359182,0) 1.1 0.977478 0.977478 0.77734 11 (0.356673,0) 1.1 0.977478 0.977478 0.774921 12 (0.499995,0) 1.1 1 1 0.707103 12 (0.233891,0) 1.1 0.977362 0.977362 0.626776 12 (0.237816,0) 1.1 0.977362 0.977362 0.631917 12 (0.24198,0) 1.1 0.977362 0.977362 0.637333 12 (0.246355,0) 1.1 0.977362 0.977362 0.642979 12 (0.250908,0) 1.1 0.977362 0.977362 0.648809 13 (0.499994,0) 1.1 1 1 0.707102 13 (0.250462,0) 1.1 0.977337 0.977337 0.653952 13 (0.249422,0) 1.1 0.977337 0.977337 0.652601 13 (0.248438,0) 1.1 0.977337 0.977337 0.651315 13 (0.247524,0) 1.1 0.977337 0.977337 0.65011 13 (0.246691,0) 1.1 0.977337 0.977337 0.649 14 (0.499992,0) 1.1 1 1 0.707101 14 (0.273769,0) 1.1 0.977337 0.977337 0.682835 14 (0.273285,0) 1.1 0.977337 0.977337 0.682249 14 (0.272776,0) 1.1 0.977337 0.977337 0.681632 14 (0.272244,0) 1.1 0.977337 0.977337 0.680984 14 (0.271689,0) 1.1 0.977337 0.977337 0.680306 dmrgpp-6.02/TestSuite/oracles/timeEvolution201.txt000066400000000000000000000215531414604301300221440ustar00rootroot000000000000008 (0.52511,0) 1 1 1 0.724644 8 (0.306691,0) 1 0.978447 0.978447 0.721961 8 (0.308253,0) 1 0.978447 0.978447 0.723811 8 (0.309784,0) 1 0.978447 0.978447 0.725625 8 (0.311271,0) 1 0.978447 0.978447 0.727384 8 (0.312697,0) 1 0.978447 0.978447 0.729073 9 (0.495859,0) 1 1 1 0.704172 9 (0.343574,0) 1 0.978409 0.978409 0.764927 9 (0.340618,0) 1 0.978409 0.978409 0.761787 9 (0.337328,0) 1 0.978409 0.978409 0.758252 9 (0.333728,0) 1 0.978409 0.978409 0.754339 9 (0.329839,0) 1 0.978409 0.978409 0.750068 10 (0.500025,0) 1 1 1 0.707125 10 (0.202574,0) 1 0.978292 0.978292 0.589745 10 (0.199989,0) 1 0.978292 0.978292 0.585697 10 (0.198196,0) 1 0.978292 0.978292 0.582782 10 (0.197181,0) 1 0.978292 0.978292 0.581002 10 (0.196924,0) 1 0.978292 0.978292 0.580341 11 (0.499996,0) 1 1 1 0.707104 11 (0.360661,0) 1 0.978131 0.978131 0.777617 11 (0.363123,0) 1 0.978131 0.978131 0.780444 11 (0.364787,0) 1 0.978131 0.978131 0.782409 11 (0.365668,0) 1 0.978131 0.978131 0.783534 11 (0.365787,0) 1 0.978131 0.978131 0.783845 12 (0.501948,0) 1.1 1 1 0.708483 12 (0.231985,0) 1.1 0.978057 0.978057 0.625486 12 (0.23623,0) 1.1 0.978057 0.978057 0.63111 12 (0.240714,0) 1.1 0.978057 0.978057 0.636997 12 (0.245406,0) 1.1 0.978057 0.978057 0.643099 12 (0.250274,0) 1.1 0.978057 0.978057 0.649369 13 (0.475462,0) 1.1 1 1 0.689538 13 (0.249464,0) 1.1 0.978047 0.978047 0.652285 13 (0.248094,0) 1.1 0.978047 0.978047 0.65053 13 (0.246792,0) 1.1 0.978047 0.978047 0.648853 13 (0.245573,0) 1.1 0.978047 0.978047 0.647273 13 (0.244448,0) 1.1 0.978047 0.978047 0.645807 14 (0.502059,0) 1.1 1 1 0.708561 14 (0.275331,0) 1.1 0.978047 0.978047 0.68468 14 (0.274816,0) 1.1 0.978047 0.978047 0.684048 14 (0.274265,0) 1.1 0.978047 0.978047 0.683373 14 (0.273679,0) 1.1 0.978047 0.978047 0.682653 14 (0.273058,0) 1.1 0.978047 0.978047 0.681889 14 (0.502059,0) 1.1 1 1 0.708561 14 (0.275331,0) 1.1 0.978047 0.978047 0.68468 14 (0.274816,0) 1.1 0.978047 0.978047 0.684048 14 (0.274265,0) 1.1 0.978047 0.978047 0.683373 14 (0.273679,0) 1.1 0.978047 0.978047 0.682653 14 (0.273058,0) 1.1 0.978047 0.978047 0.681889 13 (0.475462,0) 1.1 1 1 0.689538 13 (0.249465,0) 1.1 0.978047 0.978047 0.652285 13 (0.248094,0) 1.1 0.978047 0.978047 0.650531 13 (0.246793,0) 1.1 0.978047 0.978047 0.648853 13 (0.245573,0) 1.1 0.978047 0.978047 0.647273 13 (0.244448,0) 1.1 0.978047 0.978047 0.645807 12 (0.501947,0) 1.2 1 1 0.708482 12 (0.25027,0) 1.2 0.978047 0.978047 0.649342 12 (0.255279,0) 1.2 0.978047 0.978047 0.655733 12 (0.260395,0) 1.2 0.978047 0.978047 0.662197 12 (0.265583,0) 1.2 0.978047 0.978047 0.668689 12 (0.270807,0) 1.2 0.978047 0.978047 0.675164 11 (0.499997,0) 1.2 1 1 0.707104 11 (0.359157,0) 1.2 0.978047 0.978047 0.777251 11 (0.355944,0) 1.2 0.978047 0.978047 0.77398 11 (0.352189,0) 1.2 0.978047 0.978047 0.770101 11 (0.347938,0) 1.2 0.978047 0.978047 0.765659 11 (0.343245,0) 1.2 0.978047 0.978047 0.760698 10 (0.500009,0) 1.2 1 1 0.707113 10 (0.20311,0) 1.2 0.978007 0.978007 0.588798 10 (0.206154,0) 1.2 0.978007 0.978007 0.59296 10 (0.209741,0) 1.2 0.978007 0.978007 0.597883 10 (0.213822,0) 1.2 0.978007 0.978007 0.603481 10 (0.218347,0) 1.2 0.978007 0.978007 0.609664 9 (0.496784,0) 1.2 1 1 0.704829 9 (0.311681,0) 1.2 0.977791 0.977791 0.729324 9 (0.306835,0) 1.2 0.977791 0.977791 0.723723 9 (0.301882,0) 1.2 0.977791 0.977791 0.717936 9 (0.296858,0) 1.2 0.977791 0.977791 0.711998 9 (0.291798,0) 1.2 0.977791 0.977791 0.705949 8 (0.517856,0) 1.2 1 1 0.719622 8 (0.316747,0) 1.2 0.977558 0.977558 0.733365 8 (0.317772,0) 1.2 0.977558 0.977558 0.734609 8 (0.318676,0) 1.2 0.977558 0.977558 0.735716 8 (0.319446,0) 1.2 0.977558 0.977558 0.736672 8 (0.32007,0) 1.2 0.977558 0.977558 0.737465 7 (0.486178,0) 1.3 1 1 0.697265 7 (0.292324,0) 1.3 0.977444 0.977444 0.704338 7 (0.293114,0) 1.3 0.977444 0.977444 0.705263 7 (0.293929,0) 1.3 0.977444 0.977444 0.706217 7 (0.294766,0) 1.3 0.977444 0.977444 0.707196 7 (0.295621,0) 1.3 0.977444 0.977444 0.708195 6 (0.527347,0) 1.3 1 1 0.726187 6 (0.283148,0) 1.3 0.977371 0.977371 0.693686 6 (0.283354,0) 1.3 0.977371 0.977371 0.693924 6 (0.283576,0) 1.3 0.977371 0.977371 0.694182 6 (0.283815,0) 1.3 0.977371 0.977371 0.69446 6 (0.284072,0) 1.3 0.977371 0.977371 0.694758 5 (0.495037,0) 1.3 1 1 0.703588 5 (0.281047,0) 1.3 0.977341 0.977341 0.691456 5 (0.281083,0) 1.3 0.977341 0.977341 0.691497 5 (0.281123,0) 1.3 0.977341 0.977341 0.691541 5 (0.281165,0) 1.3 0.977341 0.977341 0.691589 5 (0.281211,0) 1.3 0.977341 0.977341 0.691641 4 (0.519815,0) 1.3 1 1 0.720982 4 (0.280996,0) 1.3 0.977325 0.977325 0.691269 4 (0.281006,0) 1.3 0.977325 0.977325 0.691278 4 (0.281016,0) 1.3 0.977325 0.977325 0.691288 4 (0.281026,0) 1.3 0.977325 0.977325 0.691299 4 (0.281038,0) 1.3 0.977325 0.977325 0.691311 3 (0.496037,0) 1.3 1 1 0.704299 3 (0.280725,0) 1.3 0.977316 0.977316 0.691081 3 (0.280725,0) 1.3 0.977316 0.977316 0.691082 3 (0.280725,0) 1.3 0.977316 0.977316 0.691083 3 (0.280726,0) 1.3 0.977316 0.977316 0.691085 3 (0.280727,0) 1.3 0.977316 0.977316 0.691087 2 (0.514729,0) 1.4 1 1 0.717446 2 (0.280814,0) 1.4 0.977315 0.977315 0.691061 2 (0.280815,0) 1.4 0.977315 0.977315 0.691061 2 (0.280816,0) 1.4 0.977315 0.977315 0.691062 2 (0.280817,0) 1.4 0.977315 0.977315 0.691063 2 (0.280818,0) 1.4 0.977315 0.977315 0.691064 1 (0.49897,0) 1.4 1 1 0.706378 1 (0.280721,0) 1.4 0.977315 0.977315 0.691067 1 (0.280721,0) 1.4 0.977315 0.977315 0.691067 1 (0.280721,0) 1.4 0.977315 0.977315 0.691067 1 (0.280721,0) 1.4 0.977315 0.977315 0.691068 1 (0.280721,0) 1.4 0.977315 0.977315 0.691068 1 (0.49897,0) 1.4 1 1 0.706378 1 (0.280721,0) 1.4 0.977315 0.977315 0.691067 1 (0.280721,0) 1.4 0.977315 0.977315 0.691067 1 (0.280721,0) 1.4 0.977315 0.977315 0.691067 1 (0.280721,0) 1.4 0.977315 0.977315 0.691068 1 (0.280721,0) 1.4 0.977315 0.977315 0.691068 2 (0.514729,0) 1.4 1 1 0.717446 2 (0.280814,0) 1.4 0.977315 0.977315 0.691061 2 (0.280815,0) 1.4 0.977315 0.977315 0.691061 2 (0.280816,0) 1.4 0.977315 0.977315 0.691062 2 (0.280816,0) 1.4 0.977315 0.977315 0.691062 2 (0.280817,0) 1.4 0.977315 0.977315 0.691063 3 (0.496037,0) 1.4 1 1 0.704299 3 (0.280726,0) 1.4 0.977315 0.977315 0.691086 3 (0.280727,0) 1.4 0.977315 0.977315 0.691088 3 (0.280729,0) 1.4 0.977315 0.977315 0.691091 3 (0.28073,0) 1.4 0.977315 0.977315 0.691093 3 (0.280732,0) 1.4 0.977315 0.977315 0.691097 4 (0.519815,0) 1.5 1 1 0.720982 4 (0.281086,0) 1.5 0.977315 0.977315 0.691378 4 (0.281103,0) 1.5 0.977315 0.977315 0.691397 4 (0.281122,0) 1.5 0.977315 0.977315 0.691417 4 (0.281141,0) 1.5 0.977315 0.977315 0.691439 4 (0.281162,0) 1.5 0.977315 0.977315 0.691462 5 (0.495036,0) 1.5 1 1 0.703588 5 (0.281484,0) 1.5 0.977315 0.977315 0.692025 5 (0.281557,0) 1.5 0.977315 0.977315 0.692107 5 (0.281636,0) 1.5 0.977315 0.977315 0.692195 5 (0.281723,0) 1.5 0.977315 0.977315 0.69229 5 (0.281818,0) 1.5 0.977315 0.977315 0.692394 6 (0.527349,0) 1.5 1 1 0.726188 6 (0.285421,0) 1.5 0.977313 0.977313 0.696255 6 (0.285773,0) 1.5 0.977313 0.977313 0.696663 6 (0.286146,0) 1.5 0.977313 0.977313 0.697095 6 (0.286543,0) 1.5 0.977313 0.977313 0.697554 6 (0.286964,0) 1.5 0.977313 0.977313 0.698039 7 (0.486222,0) 1.5 1 1 0.697296 7 (0.29866,0) 1.5 0.977304 0.977304 0.711443 7 (0.299512,0) 1.5 0.977304 0.977304 0.712427 7 (0.300353,0) 1.5 0.977304 0.977304 0.713394 7 (0.301174,0) 1.5 0.977304 0.977304 0.714335 7 (0.301969,0) 1.5 0.977304 0.977304 0.715243 dmrgpp-6.02/TestSuite/oracles/timeEvolution8.txt000066400000000000000000000367461414604301300220230ustar00rootroot000000000000001 (0.5,0) 0 1 1 0.707107 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 2 (0.5,0) 0 1 1 0.707107 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 3 (0.5,0) 0 1 1 0.707107 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 4 (0.5,0) 0 1 1 0.707107 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 5 (0.5,0) 0 1 1 0.707107 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 6 (0.5,0) 0 1 1 0.707107 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 7 (0.5,0) 0 1 1 0.707107 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 8 (0.5,0) 0 1 1 0.707107 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 9 (0.5,0) 0 1 1 0.707107 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 10 (0.5,0) 0 1 1 0.707107 10 (0,0) 0 0.707107 0.707107 0 10 (5.60295e-05,0) 0 0.707107 0.707107 0.00748529 10 (0.000224059,0) 0 0.707107 0.707107 0.0149686 10 (0.00050391,0) 0 0.707107 0.707107 0.0224479 10 (0.000895286,0) 0 0.707107 0.707107 0.0299213 11 (0.5,0) 0 1 1 0.707107 11 (0.125139,0) 0 0.707107 0.707107 0.35375 11 (0.12517,0) 0 0.707107 0.707107 0.353793 11 (0.125262,0) 0 0.707107 0.707107 0.353923 11 (0.125415,0) 0 0.707107 0.707107 0.35414 11 (0.12563,0) 0 0.707107 0.707107 0.354443 11 (0.5,0) 0 1 1 0.707107 11 (0.125139,0) 0 0.707107 0.707107 0.35375 11 (0.12517,0) 0 0.707107 0.707107 0.353793 11 (0.125262,0) 0 0.707107 0.707107 0.353923 11 (0.125415,0) 0 0.707107 0.707107 0.35414 11 (0.12563,0) 0 0.707107 0.707107 0.354443 10 (0.5,0) 0 1 1 0.707107 10 (4.01269e-09,0) 0 0.707107 0.707107 6.33458e-05 10 (5.6036e-05,0) 0 0.707107 0.707107 0.00748572 10 (0.000224068,0) 0 0.707107 0.707107 0.0149689 10 (0.000503923,0) 0 0.707107 0.707107 0.0224482 10 (0.000895304,0) 0 0.707107 0.707107 0.0299216 9 (0.5,0) 0 1 1 0.707107 9 (0.167504,0) 0 0.707107 0.707107 0.409273 9 (0.1675,0) 0 0.707107 0.707107 0.409268 9 (0.16749,0) 0 0.707107 0.707107 0.409255 9 (0.167472,0) 0 0.707107 0.707107 0.409233 9 (0.167447,0) 0 0.707107 0.707107 0.409202 8 (0.499999,0) 0 1 1 0.707106 8 (0.25,0) 0 0.707107 0.707107 0.5 8 (0.249972,0) 0 0.707107 0.707107 0.499972 8 (0.24989,0) 0 0.707107 0.707107 0.49989 8 (0.249753,0) 0 0.707107 0.707107 0.499753 8 (0.249561,0) 0 0.707107 0.707107 0.499561 8 (0.499999,0) 0 1 1 0.707106 8 (0.25,0) 0 0.707107 0.707107 0.5 8 (0.249972,0) 0 0.707107 0.707107 0.499972 8 (0.24989,0) 0 0.707107 0.707107 0.49989 8 (0.249753,0) 0 0.707107 0.707107 0.499753 8 (0.249561,0) 0 0.707107 0.707107 0.499561 9 (0.5,0) 0 1 1 0.707107 9 (0.167504,0) 0 0.707107 0.707107 0.409273 9 (0.1675,0) 0 0.707107 0.707107 0.409268 9 (0.16749,0) 0 0.707107 0.707107 0.409255 9 (0.167472,0) 0 0.707107 0.707107 0.409233 9 (0.167447,0) 0 0.707107 0.707107 0.409202 10 (0.5,0) 0 1 1 0.707107 10 (2.21693e-08,0) 0 0.707107 0.707107 0.000148894 10 (5.60741e-05,0) 0 0.707107 0.707107 0.00748827 10 (0.000224131,0) 0 0.707107 0.707107 0.014971 10 (0.000504015,0) 0 0.707107 0.707107 0.0224503 10 (0.00089543,0) 0 0.707107 0.707107 0.0299237 11 (0.5,0) 0 1 1 0.707107 11 (0.125139,0) 0 0.707107 0.707107 0.35375 11 (0.12517,0) 0 0.707107 0.707107 0.353793 11 (0.125262,0) 0 0.707107 0.707107 0.353923 11 (0.125415,0) 0 0.707107 0.707107 0.35414 11 (0.12563,0) 0 0.707107 0.707107 0.354443 11 (0.5,0) 0 1 1 0.707107 11 (0.125139,0) 0 0.707107 0.707107 0.35375 11 (0.12517,0) 0 0.707107 0.707107 0.353793 11 (0.125262,0) 0 0.707107 0.707107 0.353923 11 (0.125415,0) 0 0.707107 0.707107 0.35414 11 (0.12563,0) 0 0.707107 0.707107 0.354443 10 (0.5,0) 0 1 1 0.707107 10 (2.88316e-08,0) 0 0.707107 0.707107 0.000169799 10 (5.60836e-05,0) 0 0.707107 0.707107 0.0074889 10 (0.000224143,0) 0 0.707107 0.707107 0.0149714 10 (0.00050403,0) 0 0.707107 0.707107 0.0224506 10 (0.000895448,0) 0 0.707107 0.707107 0.029924 9 (0.5,0) 0 1 1 0.707107 9 (0.167504,0) 0 0.707107 0.707107 0.409273 9 (0.1675,0) 0 0.707107 0.707107 0.409268 9 (0.16749,0) 0 0.707107 0.707107 0.409255 9 (0.167472,0) 0 0.707107 0.707107 0.409233 9 (0.167447,0) 0 0.707107 0.707107 0.409202 8 (0.499999,0) 0 1 1 0.707106 8 (0.25,0) 0 0.707107 0.707107 0.5 8 (0.249972,0) 0 0.707107 0.707107 0.499972 8 (0.24989,0) 0 0.707107 0.707107 0.49989 8 (0.249753,0) 0 0.707107 0.707107 0.499753 8 (0.249561,0) 0 0.707107 0.707107 0.499561 8 (0.5,0) 0 1 1 0.707106 8 (0.25,0) 0 0.707107 0.707107 0.5 8 (0.249972,0) 0 0.707107 0.707107 0.499972 8 (0.24989,0) 0 0.707107 0.707107 0.49989 8 (0.249753,0) 0 0.707107 0.707107 0.499753 8 (0.249561,0) 0 0.707107 0.707107 0.499561 9 (0.5,0) 0 1 1 0.707107 9 (0.167504,0) 0 0.707107 0.707107 0.409273 9 (0.1675,0) 0 0.707107 0.707107 0.409268 9 (0.16749,0) 0 0.707107 0.707107 0.409255 9 (0.167472,0) 0 0.707107 0.707107 0.409233 9 (0.167447,0) 0 0.707107 0.707107 0.409202 10 (0.5,0) 0 1 1 0.707107 10 (6.50137e-08,0) 0 0.707107 0.707107 0.000254978 10 (5.61333e-05,0) 0 0.707107 0.707107 0.00749222 10 (0.000224207,0) 0 0.707107 0.707107 0.0149735 10 (0.000504107,0) 0 0.707107 0.707107 0.0224523 10 (0.000895538,0) 0 0.707107 0.707107 0.0299255 11 (0.5,0) 0 1 1 0.707107 11 (0.125139,0) 0 0.707107 0.707107 0.35375 11 (0.12517,0) 0 0.707107 0.707107 0.353793 11 (0.125262,0) 0 0.707107 0.707107 0.353923 11 (0.125415,0) 0 0.707107 0.707107 0.35414 11 (0.12563,0) 0 0.707107 0.707107 0.354443 11 (0.5,0) 0 1 1 0.707107 11 (0.125139,0) 0 0.707107 0.707107 0.35375 11 (0.12517,0) 0 0.707107 0.707107 0.353793 11 (0.125262,0) 0 0.707107 0.707107 0.353923 11 (0.125415,0) 0 0.707107 0.707107 0.35414 11 (0.12563,0) 0 0.707107 0.707107 0.354443 10 (0.5,0) 0 1 1 0.707107 10 (7.31603e-08,0) 0 0.707107 0.707107 0.000270482 10 (5.61442e-05,0) 0 0.707107 0.707107 0.00749295 10 (0.00022422,0) 0 0.707107 0.707107 0.014974 10 (0.000504124,0) 0 0.707107 0.707107 0.0224527 10 (0.000895558,0) 0 0.707107 0.707107 0.0299259 9 (0.5,0) 0 1 1 0.707107 9 (0.167504,0) 0 0.707107 0.707107 0.409273 9 (0.1675,0) 0 0.707107 0.707107 0.409268 9 (0.16749,0) 0 0.707107 0.707107 0.409255 9 (0.167472,0) 0 0.707107 0.707107 0.409233 9 (0.167447,0) 0 0.707107 0.707107 0.409202 8 (0.499999,0) 0 1 1 0.707106 8 (0.25,0) 0 0.707107 0.707107 0.5 8 (0.249972,0) 0 0.707107 0.707107 0.499972 8 (0.24989,0) 0 0.707107 0.707107 0.49989 8 (0.249753,0) 0 0.707107 0.707107 0.499753 8 (0.249561,0) 0 0.707107 0.707107 0.499561 8 (0.5,0) 0 1 1 0.707106 8 (0.25,0) 0 0.707107 0.707107 0.5 8 (0.249972,0) 0 0.707107 0.707107 0.499972 8 (0.24989,0) 0 0.707107 0.707107 0.49989 8 (0.249753,0) 0 0.707107 0.707107 0.499753 8 (0.249561,0) 0 0.707107 0.707107 0.499561 9 (0.5,0) 0 1 1 0.707107 9 (0.167504,0) 0 0.707107 0.707107 0.409272 9 (0.1675,0) 0 0.707107 0.707107 0.409268 9 (0.16749,0) 0 0.707107 0.707107 0.409255 9 (0.167472,0) 0 0.707107 0.707107 0.409233 9 (0.167447,0) 0 0.707107 0.707107 0.409202 10 (0.5,0) 0 1 1 0.707107 10 (1.21836e-07,0) 0 0.707107 0.707107 0.00034905 10 (5.62045e-05,0) 0 0.707107 0.707107 0.00749696 10 (0.000224292,0) 0 0.707107 0.707107 0.0149764 10 (0.000504207,0) 0 0.707107 0.707107 0.0224545 10 (0.000895652,0) 0 0.707107 0.707107 0.0299274 11 (0.5,0) 0 1 1 0.707107 11 (0.125139,0) 0 0.707107 0.707107 0.35375 11 (0.12517,0) 0 0.707107 0.707107 0.353793 11 (0.125262,0) 0 0.707107 0.707107 0.353924 11 (0.125415,0) 0 0.707107 0.707107 0.35414 11 (0.12563,0) 0 0.707107 0.707107 0.354443 11 (0.5,0) 0 1 1 0.707107 11 (0.125139,0) 0 0.707107 0.707107 0.35375 11 (0.12517,0) 0 0.707107 0.707107 0.353793 11 (0.125262,0) 0 0.707107 0.707107 0.353924 11 (0.125415,0) 0 0.707107 0.707107 0.35414 11 (0.12563,0) 0 0.707107 0.707107 0.354443 10 (0.5,0) 0 1 1 0.707107 10 (1.30751e-07,0) 0 0.707107 0.707107 0.000361594 10 (5.62165e-05,0) 0 0.707107 0.707107 0.00749777 10 (0.000224307,0) 0 0.707107 0.707107 0.0149769 10 (0.000504225,0) 0 0.707107 0.707107 0.022455 10 (0.000895674,0) 0 0.707107 0.707107 0.0299278 9 (0.5,0) 0 1 1 0.707107 9 (0.167504,0) 0 0.707107 0.707107 0.409272 9 (0.1675,0) 0 0.707107 0.707107 0.409268 9 (0.16749,0) 0 0.707107 0.707107 0.409255 9 (0.167472,0) 0 0.707107 0.707107 0.409233 9 (0.167447,0) 0 0.707107 0.707107 0.409202 8 (0.499999,0) 0 1 1 0.707106 8 (0.25,0) 0 0.707107 0.707107 0.5 8 (0.249972,0) 0 0.707107 0.707107 0.499972 8 (0.24989,0) 0 0.707107 0.707107 0.49989 8 (0.249753,0) 0 0.707107 0.707107 0.499753 8 (0.249561,0) 0 0.707107 0.707107 0.499561 8 (0.5,0) 0 1 1 0.707106 8 (0.25,0) 0 0.707107 0.707107 0.5 8 (0.249972,0) 0 0.707107 0.707107 0.499972 8 (0.24989,0) 0 0.707107 0.707107 0.49989 8 (0.249753,0) 0 0.707107 0.707107 0.499753 8 (0.249561,0) 0 0.707107 0.707107 0.499561 9 (0.5,0) 0 1 1 0.707107 9 (0.167504,0) 0 0.707107 0.707107 0.409272 9 (0.1675,0) 0 0.707107 0.707107 0.409268 9 (0.16749,0) 0 0.707107 0.707107 0.409255 9 (0.167472,0) 0 0.707107 0.707107 0.409233 9 (0.167447,0) 0 0.707107 0.707107 0.409202 10 (0.5,0) 0 1 1 0.707107 10 (1.90213e-07,0) 0 0.707107 0.707107 0.000436135 10 (5.62863e-05,0) 0 0.707107 0.707107 0.00750242 10 (0.000224387,0) 0 0.707107 0.707107 0.0149796 10 (0.000504315,0) 0 0.707107 0.707107 0.022457 10 (0.000895773,0) 0 0.707107 0.707107 0.0299295 11 (0.5,0) 0 1 1 0.707107 11 (0.125139,0) 0 0.707107 0.707107 0.35375 11 (0.12517,0) 0 0.707107 0.707107 0.353794 11 (0.125262,0) 0 0.707107 0.707107 0.353924 11 (0.125415,0) 0 0.707107 0.707107 0.35414 11 (0.12563,0) 0 0.707107 0.707107 0.354443 11 (0.5,0) 0 1 1 0.707107 11 (0.125139,0) 0 0.707107 0.707107 0.35375 11 (0.12517,0) 0 0.707107 0.707107 0.353794 11 (0.125262,0) 0 0.707107 0.707107 0.353924 11 (0.125415,0) 0 0.707107 0.707107 0.35414 11 (0.12563,0) 0 0.707107 0.707107 0.354443 10 (0.5,0) 0 1 1 0.707107 10 (1.99905e-07,0) 0 0.707107 0.707107 0.000447108 10 (5.62995e-05,0) 0 0.707107 0.707107 0.0075033 10 (0.000224404,0) 0 0.707107 0.707107 0.0149801 10 (0.000504336,0) 0 0.707107 0.707107 0.0224574 10 (0.000895797,0) 0 0.707107 0.707107 0.0299299 9 (0.5,0) 0 1 1 0.707107 9 (0.167504,0) 0 0.707107 0.707107 0.409272 9 (0.1675,0) 0 0.707107 0.707107 0.409268 9 (0.16749,0) 0 0.707107 0.707107 0.409255 9 (0.167472,0) 0 0.707107 0.707107 0.409233 9 (0.167447,0) 0 0.707107 0.707107 0.409202 8 (0.499999,0) 0 1 1 0.707106 8 (0.25,0) 0 0.707107 0.707107 0.5 8 (0.249972,0) 0 0.707107 0.707107 0.499972 8 (0.24989,0) 0 0.707107 0.707107 0.49989 8 (0.249753,0) 0 0.707107 0.707107 0.499753 8 (0.249561,0) 0 0.707107 0.707107 0.499561 8 (0.5,0) 0 1 1 0.707106 8 (0.25,0) 0 0.707107 0.707107 0.5 8 (0.249972,0) 0 0.707107 0.707107 0.499972 8 (0.24989,0) 0 0.707107 0.707107 0.49989 8 (0.249753,0) 0 0.707107 0.707107 0.499753 8 (0.249561,0) 0 0.707107 0.707107 0.499561 9 (0.5,0) 0 1 1 0.707107 9 (0.167504,0) 0 0.707107 0.707107 0.409272 9 (0.1675,0) 0 0.707107 0.707107 0.409268 9 (0.16749,0) 0 0.707107 0.707107 0.409255 9 (0.167472,0) 0 0.707107 0.707107 0.409233 9 (0.167447,0) 0 0.707107 0.707107 0.409202 10 (0.5,0) 0 1 1 0.707107 10 (2.6953e-07,0) 0 0.707107 0.707107 0.000519163 10 (5.63785e-05,0) 0 0.707107 0.707107 0.00750856 10 (0.000224492,0) 0 0.707107 0.707107 0.0149831 10 (0.000504432,0) 0 0.707107 0.707107 0.0224596 10 (0.000895903,0) 0 0.707107 0.707107 0.0299316 11 (0.5,0) 0 1 1 0.707107 11 (0.125139,0) 0 0.707107 0.707107 0.35375 11 (0.12517,0) 0 0.707107 0.707107 0.353794 11 (0.125262,0) 0 0.707107 0.707107 0.353924 11 (0.125416,0) 0 0.707107 0.707107 0.354141 11 (0.12563,0) 0 0.707107 0.707107 0.354443 11 (0.5,0) 0 1 1 0.707107 11 (0.125139,0) 0 0.707107 0.707107 0.35375 11 (0.12517,0) 0 0.707107 0.707107 0.353794 11 (0.125262,0) 0 0.707107 0.707107 0.353924 11 (0.125416,0) 0 0.707107 0.707107 0.354141 11 (0.12563,0) 0 0.707107 0.707107 0.354443 10 (0.5,0) 0 1 1 0.707107 10 (2.80186e-07,0) 0 0.707107 0.707107 0.000529326 10 (5.63931e-05,0) 0 0.707107 0.707107 0.00750953 10 (0.000224511,0) 0 0.707107 0.707107 0.0149837 10 (0.000504455,0) 0 0.707107 0.707107 0.0224601 10 (0.000895929,0) 0 0.707107 0.707107 0.0299321 9 (0.5,0) 0 1 1 0.707107 9 (0.167504,0) 0 0.707107 0.707107 0.409272 9 (0.1675,0) 0 0.707107 0.707107 0.409268 9 (0.16749,0) 0 0.707107 0.707107 0.409255 9 (0.167472,0) 0 0.707107 0.707107 0.409233 9 (0.167446,0) 0 0.707107 0.707107 0.409202 8 (0.499999,0) 0 1 1 0.707106 8 (0.25,0) 0 0.707107 0.707107 0.5 8 (0.249972,0) 0 0.707107 0.707107 0.499972 8 (0.24989,0) 0 0.707107 0.707107 0.49989 8 (0.249753,0) 0 0.707107 0.707107 0.499753 8 (0.249561,0) 0 0.707107 0.707107 0.499561 dmrgpp-6.02/TestSuite/oracles/timeEvolution9.txt000066400000000000000000000455361414604301300220210ustar00rootroot000000000000001 (0.5,0) 0 1 1 0.707107 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 2 (0.5,0) 0 1 1 0.707107 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 3 (0.5,0) 0 1 1 0.707107 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 4 (0.5,0) 0 1 1 0.707107 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 5 (0.5,0) 0 1 1 0.707107 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 6 (0.5,0) 0 1 1 0.707107 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 7 (0.5,0) 0 1 1 0.707107 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 8 (0.5,0) 0 1 1 0.707107 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0.5,0) 0 1 1 0.707107 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 7 (0.5,0) 0 1 1 0.707107 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 6 (0.5,0) 0 1 1 0.707107 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 5 (0.5,0) 0 1 1 0.707107 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 4 (0.5,0) 0 1 1 0.707107 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 3 (0.5,0) 0 1 1 0.707107 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 2 (0.5,0) 0 1 1 0.707107 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 1 (0.5,0) 0 1 1 0.707107 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0.5,0) 0 1 1 0.707107 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 1 (0,0) 0 0 0 0 2 (0.5,0) 0 1 1 0.707107 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 2 (0,0) 0 0 0 0 3 (0.5,0) 0 1 1 0.707107 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 3 (0,0) 0 0 0 0 4 (0.5,0) 0 1 1 0.707107 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 4 (0,0) 0 0 0 0 5 (0.5,0) 0 1 1 0.707107 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 5 (0,0) 0 0 0 0 6 (0.5,0) 0 1 1 0.707107 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 6 (0,0) 0 0 0 0 7 (0.5,0) 0 1 1 0.707107 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 7 (0,0) 0 0 0 0 8 (0.5,0) 0 1 1 0.707107 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 8 (0,0) 0 0 0 0 9 (0.5,0) 0 1 1 0.707107 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 9 (0,0) 0 0 0 0 10 (0.5,0) 0 1 1 0.707107 10 (0,0) 0 0.707107 0.707107 0 10 (5.60295e-05,0) 0 0.707107 0.707107 0.00748529 10 (0.000224059,0) 0 0.707107 0.707107 0.0149686 10 (0.00050391,0) 0 0.707107 0.707107 0.0224479 10 (0.000895286,0) 0 0.707107 0.707107 0.0299213 11 (0.5,0) 0 1 1 0.707107 11 (0.125139,0) 0 0.707107 0.707107 0.35375 11 (0.12517,0) 0 0.707107 0.707107 0.353793 11 (0.125262,0) 0 0.707107 0.707107 0.353924 11 (0.125415,0) 0 0.707107 0.707107 0.35414 11 (0.12563,0) 0 0.707107 0.707107 0.354443 12 (0.5,0) 0 1 1 0.707107 12 (0.25,0) 0 0.707107 0.707107 0.5 12 (0.249973,0) 0 0.707107 0.707107 0.499973 12 (0.249894,0) 0 0.707107 0.707107 0.499894 12 (0.249761,0) 0 0.707107 0.707107 0.499761 12 (0.249576,0) 0 0.707107 0.707107 0.499576 13 (0.5,0) 0 1 1 0.707107 13 (0.228311,0) 0 0.707107 0.707107 0.477819 13 (0.228295,0) 0 0.707107 0.707107 0.477802 13 (0.228247,0) 0 0.707107 0.707107 0.477752 13 (0.228167,0) 0 0.707107 0.707107 0.477668 13 (0.228056,0) 0 0.707107 0.707107 0.477552 14 (0.5,0) 0 1 1 0.707107 14 (0.25,0) 0 0.707107 0.707107 0.5 14 (0.249999,0) 0 0.707107 0.707107 0.499999 14 (0.249998,0) 0 0.707107 0.707107 0.499998 14 (0.249994,0) 0 0.707107 0.707107 0.499994 14 (0.249989,0) 0 0.707107 0.707107 0.499989 14 (0.5,0) 0.1 1 1 0.707107 14 (0.249989,0) 0.1 0.707107 0.707107 0.499989 14 (0.249983,0) 0.1 0.707107 0.707107 0.499983 14 (0.249976,0) 0.1 0.707107 0.707107 0.499976 14 (0.249966,0) 0.1 0.707107 0.707107 0.499966 14 (0.249955,0) 0.1 0.707107 0.707107 0.499955 13 (0.5,0) 0.1 1 1 0.707107 13 (0.228056,0) 0.1 0.707107 0.707107 0.477552 13 (0.227913,0) 0.1 0.707107 0.707107 0.477402 13 (0.227739,0) 0.1 0.707107 0.707107 0.47722 13 (0.227534,0) 0.1 0.707107 0.707107 0.477005 13 (0.227299,0) 0.1 0.707107 0.707107 0.476758 12 (0.5,0) 0.1 1 1 0.707107 12 (0.249576,0) 0.1 0.707107 0.707107 0.499576 12 (0.249338,0) 0.1 0.707107 0.707107 0.499338 12 (0.249048,0) 0.1 0.707107 0.707107 0.499047 12 (0.248706,0) 0.1 0.707107 0.707107 0.498705 12 (0.248313,0) 0.1 0.707107 0.707107 0.49831 11 (0.5,0) 0.1 1 1 0.707107 11 (0.12563,0) 0.1 0.707107 0.707107 0.354443 11 (0.125905,0) 0.1 0.707107 0.707107 0.354831 11 (0.126241,0) 0.1 0.707107 0.707107 0.355304 11 (0.126636,0) 0.1 0.707107 0.707107 0.35586 11 (0.127091,0) 0.1 0.707107 0.707107 0.356499 10 (0.5,0) 0.1 1 1 0.707107 10 (0.000895279,0) 0.1 0.707107 0.707107 0.0299212 10 (0.00139776,0) 0.1 0.707107 0.707107 0.0373867 10 (0.00201083,0) 0.1 0.707107 0.707107 0.0448423 10 (0.00273382,0) 0.1 0.707107 0.707107 0.052286 10 (0.00356599,0) 0.1 0.707107 0.707107 0.0597159 9 (0.5,0) 0.2 1 1 0.707107 9 (0.167278,0) 0.2 0.707107 0.707107 0.408996 9 (0.16722,0) 0.2 0.707107 0.707107 0.408926 9 (0.167157,0) 0.2 0.707107 0.707107 0.408848 9 (0.167088,0) 0.2 0.707107 0.707107 0.408764 9 (0.167014,0) 0.2 0.707107 0.707107 0.408674 8 (0.499999,0) 0.2 1 1 0.707106 8 (0.248256,0) 0.2 0.707107 0.707107 0.498253 8 (0.247799,0) 0.2 0.707107 0.707107 0.497794 8 (0.247289,0) 0.2 0.707107 0.707107 0.497282 8 (0.246729,0) 0.2 0.707107 0.707107 0.496718 8 (0.246119,0) 0.2 0.707107 0.707107 0.496104 7 (0.5,0) 0.2 1 1 0.707107 7 (0.243471,0) 0.2 0.707107 0.707107 0.493428 7 (0.243332,0) 0.2 0.707107 0.707107 0.493287 7 (0.243177,0) 0.2 0.707107 0.707107 0.49313 7 (0.243006,0) 0.2 0.707107 0.707107 0.492956 7 (0.242818,0) 0.2 0.707107 0.707107 0.492766 6 (0.5,0) 0.2 1 1 0.707107 6 (0.249924,0) 0.2 0.707106 0.707106 0.499924 6 (0.249903,0) 0.2 0.707106 0.707106 0.499903 6 (0.24988,0) 0.2 0.707106 0.707106 0.49988 6 (0.249854,0) 0.2 0.707106 0.707106 0.499854 6 (0.249825,0) 0.2 0.707106 0.707106 0.499825 5 (0.500001,0) 0.2 1 1 0.707108 5 (0.248621,0) 0.2 0.707106 0.707106 0.498619 5 (0.248611,0) 0.2 0.707106 0.707106 0.498609 5 (0.248601,0) 0.2 0.707106 0.707106 0.498599 5 (0.248589,0) 0.2 0.707106 0.707106 0.498587 5 (0.248576,0) 0.2 0.707106 0.707106 0.498574 4 (0.500001,0) 0.3 1 1 0.707108 4 (0.249967,0) 0.3 0.707106 0.707106 0.499967 4 (0.249962,0) 0.3 0.707106 0.707106 0.499962 4 (0.249956,0) 0.3 0.707106 0.707106 0.499956 4 (0.24995,0) 0.3 0.707106 0.707106 0.49995 4 (0.249943,0) 0.3 0.707106 0.707106 0.499943 3 (0.500003,0) 0.3 1 1 0.707109 3 (0.249634,0) 0.3 0.707106 0.707106 0.499634 3 (0.249632,0) 0.3 0.707106 0.707106 0.499631 3 (0.249629,0) 0.3 0.707106 0.707106 0.499629 3 (0.249626,0) 0.3 0.707106 0.707106 0.499626 3 (0.249624,0) 0.3 0.707106 0.707106 0.499624 2 (0.500003,0) 0.3 1 1 0.707109 2 (0.249991,0) 0.3 0.707106 0.707106 0.499991 2 (0.249989,0) 0.3 0.707106 0.707106 0.499989 2 (0.249987,0) 0.3 0.707106 0.707106 0.499987 2 (0.249985,0) 0.3 0.707106 0.707106 0.499985 2 (0.249983,0) 0.3 0.707106 0.707106 0.499983 1 (0.500002,0) 0.3 1 1 0.707108 1 (0.249932,0) 0.3 0.707106 0.707106 0.499932 1 (0.249931,0) 0.3 0.707106 0.707106 0.499931 1 (0.249931,0) 0.3 0.707106 0.707106 0.499931 1 (0.249931,0) 0.3 0.707106 0.707106 0.499931 1 (0.24993,0) 0.3 0.707106 0.707106 0.49993 1 (0.500002,0) 0.3 1 1 0.707108 1 (0.249932,0) 0.3 0.707106 0.707106 0.499932 1 (0.249931,0) 0.3 0.707106 0.707106 0.499931 1 (0.249931,0) 0.3 0.707106 0.707106 0.499931 1 (0.249931,0) 0.3 0.707106 0.707106 0.499931 1 (0.24993,0) 0.3 0.707106 0.707106 0.49993 2 (0.500003,0) 0.4 1 1 0.707109 2 (0.249983,0) 0.4 0.707106 0.707106 0.499983 2 (0.249981,0) 0.4 0.707106 0.707106 0.499981 2 (0.249978,0) 0.4 0.707106 0.707106 0.499978 2 (0.249975,0) 0.4 0.707106 0.707106 0.499975 2 (0.249972,0) 0.4 0.707106 0.707106 0.499972 3 (0.500003,0) 0.4 1 1 0.707109 3 (0.249624,0) 0.4 0.707106 0.707106 0.499624 3 (0.249621,0) 0.4 0.707106 0.707106 0.49962 3 (0.249617,0) 0.4 0.707106 0.707106 0.499617 3 (0.249614,0) 0.4 0.707106 0.707106 0.499614 3 (0.24961,0) 0.4 0.707106 0.707106 0.49961 4 (0.500002,0) 0.4 1 1 0.707108 4 (0.249943,0) 0.4 0.707106 0.707106 0.499943 4 (0.249935,0) 0.4 0.707106 0.707106 0.499935 4 (0.249928,0) 0.4 0.707106 0.707106 0.499928 4 (0.249919,0) 0.4 0.707106 0.707106 0.499919 4 (0.24991,0) 0.4 0.707106 0.707106 0.49991 5 (0.500001,0) 0.4 1 1 0.707108 5 (0.248507,0) 0.4 0.707106 0.707106 0.498505 5 (0.248486,0) 0.4 0.707106 0.707106 0.498484 5 (0.248464,0) 0.4 0.707106 0.707106 0.498461 5 (0.248439,0) 0.4 0.707106 0.707106 0.498436 5 (0.248412,0) 0.4 0.707106 0.707106 0.49841 6 (0.500001,0) 0.4 1 1 0.707107 6 (0.249671,0) 0.4 0.707106 0.707106 0.499671 6 (0.249623,0) 0.4 0.707106 0.707106 0.499623 6 (0.24957,0) 0.4 0.707106 0.707106 0.49957 6 (0.249512,0) 0.4 0.707106 0.707106 0.499512 6 (0.24945,0) 0.4 0.707106 0.707106 0.499449 7 (0.5,0) 0.5 1 1 0.707107 7 (0.240755,0) 0.5 0.707106 0.707106 0.490668 7 (0.240426,0) 0.5 0.707106 0.707106 0.490332 7 (0.240081,0) 0.5 0.707106 0.707106 0.489981 7 (0.239721,0) 0.5 0.707106 0.707106 0.489613 7 (0.239346,0) 0.5 0.707106 0.707106 0.489231 8 (0.5,0) 0.5 1 1 0.707107 8 (0.239581,0) 0.5 0.707106 0.707106 0.48947 8 (0.238568,0) 0.5 0.707106 0.707106 0.488434 8 (0.237517,0) 0.5 0.707106 0.707106 0.487357 8 (0.23643,0) 0.5 0.707106 0.707106 0.48624 8 (0.235307,0) 0.5 0.707106 0.707106 0.485085 9 (0.5,0) 0.5 1 1 0.707107 9 (0.166214,0) 0.5 0.707106 0.707106 0.407693 9 (0.166121,0) 0.5 0.707106 0.707106 0.40758 9 (0.16603,0) 0.5 0.707106 0.707106 0.407467 9 (0.16594,0) 0.5 0.707106 0.707106 0.407357 9 (0.165852,0) 0.5 0.707106 0.707106 0.407249 10 (0.5,0) 0.5 1 1 0.707107 10 (0.0216316,0) 0.5 0.707106 0.707106 0.147077 10 (0.0237635,0) 0.5 0.707106 0.707106 0.154154 10 (0.0259825,0) 0.5 0.707106 0.707106 0.161191 10 (0.0282865,0) 0.5 0.707106 0.707106 0.168186 10 (0.030673,0) 0.5 0.707106 0.707106 0.175137 11 (0.5,0) 0.5 1 1 0.707107 11 (0.136959,0) 0.5 0.707106 0.707106 0.37008 11 (0.138099,0) 0.5 0.707106 0.707106 0.371617 11 (0.139283,0) 0.5 0.707106 0.707106 0.373206 11 (0.140508,0) 0.5 0.707106 0.707106 0.374844 11 (0.141774,0) 0.5 0.707106 0.707106 0.376529 12 (0.5,0) 0.6 1 1 0.707107 12 (0.235631,0) 0.6 0.707106 0.707106 0.485419 12 (0.234495,0) 0.6 0.707106 0.707106 0.484247 12 (0.233326,0) 0.6 0.707106 0.707106 0.483038 12 (0.232125,0) 0.6 0.707106 0.707106 0.481794 12 (0.230896,0) 0.6 0.707106 0.707106 0.480516 13 (0.500001,0) 0.6 1 1 0.707107 13 (0.220042,0) 0.6 0.707106 0.707106 0.469086 13 (0.219402,0) 0.6 0.707106 0.707106 0.468404 13 (0.218748,0) 0.6 0.707106 0.707106 0.467705 13 (0.218081,0) 0.6 0.707106 0.707106 0.466991 13 (0.217402,0) 0.6 0.707106 0.707106 0.466264 14 (0.500001,0) 0.6 1 1 0.707107 14 (0.249445,0) 0.6 0.707106 0.707106 0.499445 14 (0.249382,0) 0.6 0.707106 0.707106 0.499381 14 (0.249313,0) 0.6 0.707106 0.707106 0.499313 14 (0.249239,0) 0.6 0.707106 0.707106 0.499238 14 (0.249159,0) 0.6 0.707106 0.707106 0.499158 14 (0.500001,0) 0.6 1 1 0.707107 14 (0.249445,0) 0.6 0.707106 0.707106 0.499445 14 (0.249382,0) 0.6 0.707106 0.707106 0.499381 14 (0.249313,0) 0.6 0.707106 0.707106 0.499313 14 (0.249239,0) 0.6 0.707106 0.707106 0.499238 14 (0.249159,0) 0.6 0.707106 0.707106 0.499158 13 (0.500001,0) 0.6 1 1 0.707107 13 (0.220042,0) 0.6 0.707106 0.707106 0.469086 13 (0.219402,0) 0.6 0.707106 0.707106 0.468404 13 (0.218748,0) 0.6 0.707106 0.707106 0.467705 13 (0.218081,0) 0.6 0.707106 0.707106 0.466991 13 (0.217402,0) 0.6 0.707106 0.707106 0.466264 12 (0.5,0) 0.7 1 1 0.707107 12 (0.230896,0) 0.7 0.707106 0.707106 0.480516 12 (0.229638,0) 0.7 0.707106 0.707106 0.479206 12 (0.228355,0) 0.7 0.707106 0.707106 0.477865 12 (0.227047,0) 0.7 0.707106 0.707106 0.476494 12 (0.225716,0) 0.7 0.707106 0.707106 0.475096 11 (0.5,0) 0.7 1 1 0.707107 11 (0.147203,0) 0.7 0.707106 0.707106 0.38367 11 (0.148643,0) 0.7 0.707106 0.707106 0.385542 11 (0.150112,0) 0.7 0.707106 0.707106 0.387443 11 (0.151608,0) 0.7 0.707106 0.707106 0.389369 11 (0.15313,0) 0.7 0.707106 0.707106 0.391318 10 (0.5,0) 0.7 1 1 0.707107 10 (0.040992,0) 0.7 0.707106 0.707106 0.202465 10 (0.0437527,0) 0.7 0.707106 0.707106 0.209172 10 (0.0465802,0) 0.7 0.707106 0.707106 0.215824 10 (0.0494714,0) 0.7 0.707106 0.707106 0.222422 10 (0.0524235,0) 0.7 0.707106 0.707106 0.228962 9 (0.5,0) 0.7 1 1 0.707107 9 (0.165545,0) 0.7 0.707106 0.707106 0.406873 9 (0.165482,0) 0.7 0.707106 0.707106 0.406794 9 (0.165425,0) 0.7 0.707106 0.707106 0.406725 9 (0.165376,0) 0.7 0.707106 0.707106 0.406665 9 (0.165336,0) 0.7 0.707106 0.707106 0.406616 8 (0.5,0) 0.7 1 1 0.707107 8 (0.230501,0) 0.7 0.707106 0.707106 0.480105 8 (0.229229,0) 0.7 0.707106 0.707106 0.478779 8 (0.227933,0) 0.7 0.707106 0.707106 0.477423 8 (0.226615,0) 0.7 0.707106 0.707106 0.47604 8 (0.225275,0) 0.7 0.707106 0.707106 0.474632 7 (0.5,0) 0.8 1 1 0.707107 7 (0.235832,0) 0.8 0.707106 0.707106 0.485625 7 (0.235329,0) 0.8 0.707106 0.707106 0.485107 7 (0.234812,0) 0.8 0.707106 0.707106 0.484574 7 (0.234283,0) 0.8 0.707106 0.707106 0.484028 7 (0.23374,0) 0.8 0.707106 0.707106 0.483467 6 (0.5,0) 0.8 1 1 0.707107 6 (0.248178,0) 0.8 0.707105 0.707105 0.498175 6 (0.248019,0) 0.8 0.707105 0.707105 0.498015 6 (0.247849,0) 0.8 0.707105 0.707105 0.497844 6 (0.247669,0) 0.8 0.707105 0.707105 0.497664 6 (0.247479,0) 0.8 0.707105 0.707105 0.497473 5 (0.500001,0) 0.8 1 1 0.707108 5 (0.247892,0) 0.8 0.707105 0.707105 0.497887 5 (0.24783,0) 0.8 0.707105 0.707105 0.497826 5 (0.247766,0) 0.8 0.707105 0.707105 0.49776 5 (0.247697,0) 0.8 0.707105 0.707105 0.497692 5 (0.247625,0) 0.8 0.707105 0.707105 0.497619 4 (0.500001,0) 0.8 1 1 0.707108 4 (0.249741,0) 0.8 0.707105 0.707105 0.499741 4 (0.249721,0) 0.8 0.707105 0.707105 0.499721 4 (0.2497,0) 0.8 0.707105 0.707105 0.4997 4 (0.249677,0) 0.8 0.707105 0.707105 0.499677 4 (0.249653,0) 0.8 0.707105 0.707105 0.499653 3 (0.500002,0) 0.8 1 1 0.707108 3 (0.249531,0) 0.8 0.707105 0.707105 0.499531 3 (0.249523,0) 0.8 0.707105 0.707105 0.499523 3 (0.249515,0) 0.8 0.707105 0.707105 0.499515 3 (0.249507,0) 0.8 0.707105 0.707105 0.499507 3 (0.249498,0) 0.8 0.707105 0.707105 0.499498 2 (0.500002,0) 0.9 1 1 0.707108 2 (0.249903,0) 0.9 0.707105 0.707105 0.499903 2 (0.249896,0) 0.9 0.707105 0.707105 0.499896 2 (0.249889,0) 0.9 0.707105 0.707105 0.499889 2 (0.249882,0) 0.9 0.707105 0.707105 0.499882 2 (0.249875,0) 0.9 0.707105 0.707105 0.499875 1 (0.500002,0) 0.9 1 1 0.707108 1 (0.24991,0) 0.9 0.707105 0.707105 0.49991 1 (0.249909,0) 0.9 0.707105 0.707105 0.499909 1 (0.249908,0) 0.9 0.707105 0.707105 0.499908 1 (0.249907,0) 0.9 0.707105 0.707105 0.499907 1 (0.249905,0) 0.9 0.707105 0.707105 0.499905 dmrgpp-6.02/TestSuite/postCi.pl000077500000000000000000000411201414604301300164560ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use Getopt::Long qw(:config no_ignore_case); use lib "."; use Ci; use lib "../scripts"; use timeObservablesInSitu; use Metts; my ($failed,$su2,$help,$workdir,$golddir,$ranges,$info); GetOptions( 'n=s' => \$ranges, 'f' => \$failed, 'su2' => \$su2, 'i=i' => \$info, 'h' => \$help, 'g=s' => \$golddir, 'w=s' => \$workdir); my $defaultGold = "../../OraclesDmrgpp/oracles/tests"; if (defined($help)) { print "USAGE: $0 [options]\n"; print "\tIf no option is given examines all runs\n"; print Ci::helpFor("-n"); print Ci::helpFor("-w"); print "\t-g golddir\n"; print "\t\tUse golddir for oracles directory instead of the "; print "default of $defaultGold\n"; print "\t-f\n"; print "\t\tPrint info only about failed tests\n"; print Ci::helpFor("-su2"); print "\t-i number\n"; print "\t\tPrint info for test number number\n"; print Ci::helpFor("-h"); exit(0); } defined($failed) or $failed = 0; defined($su2) or $su2 = 0; defined($workdir) or $workdir = "tests"; defined($golddir) or $golddir = $defaultGold; my @tests = Ci::getTests("inputs/descriptions.txt"); my %allowedTests = Ci::getAllowedTests(\@tests); my $total = $tests[$#tests]->{"number"}; if (defined($info)) { print STDERR "$0: INFO for $info\n"; print STDERR " ".$allowedTests{$info}."\n"; exit(0); } my @inRange = Ci::procRanges($ranges, $total); my $rangesTotal = scalar(@inRange); die "$0: No tests specified under -n\n" if ($rangesTotal == 0); for (my $j = 0; $j < $rangesTotal; ++$j) { my $n = $inRange[$j]; if (!exists($allowedTests{"$n"})) { #print STDERR "$0: Test $n does not exist, ignored\n"; next; } if ($n == 120) { print STDERR "$0: |$n| ignored\n"; next; } my $thisInput = Ci::getInputFilename($n); $thisInput =~ s/\.\.\///; my %keys = Ci::getInfoFromInput($thisInput, $n); my $isSu2 = Ci::isSu2(\%keys); if ($isSu2 and !$su2) { print STDERR "$0: WARNING: Ignored test $n "; print STDERR "because it's NOT an SU(2) test and "; print STDERR "you did not specify -su2\n"; next; } my $solverOpts = $keys{"SolverOptions"}; my $targetName = "GroundStateTargeting"; defined($solverOpts) or $solverOpts = ""; if ($solverOpts =~ /Targeting/ && !($solverOpts =~ /GroundStateTargeting/)) { $targetName = "NGST"; } procTest($n, $workdir, $golddir, $targetName); my @ciAnnotations = Ci::getCiAnnotations($thisInput, $n); my $totalAnnotations = scalar(@ciAnnotations); my @postProcessLabels = qw(getTimeObservablesInSitu getEnergyAncilla CollectBrakets metts observe); my %actions = (getTimeObservablesInSitu => \&checkTimeInSituObs, getEnergyAncilla => \&checkEnergyAncillaInSitu, CollectBrakets => \&checkCollectBrakets, metts => \&checkMetts, observe => \&checkObserve, procOmegas => \&checkProcOmegas); for (my $i = 0; $i < $totalAnnotations; ++$i) { my ($ppLabel, $w) = Ci::readAnnotationFromIndex(\@ciAnnotations, $i); my $x = $w ? scalar(@$w) : 0; next if ($x == 0); print "|$n| has $x $ppLabel lines\n"; if ($ppLabel eq "dmrg" || $ppLabel eq "nDollar") { print "|$n| ignoring $ppLabel label in postCi mode\n"; next; } $actions{$ppLabel}->($n, $w, $workdir, $golddir); } print "-----------------------------------------------\n"; } sub procTest { my ($n, $workdir, $golddir, $targetName) = @_; my %newValues; my %oldValues; procCout(\%newValues, $n,$workdir); procCout(\%oldValues, $n, $golddir); compareValues(\%newValues, \%oldValues, $n, $targetName); procMemcheck($n); } sub procCout { my ($values, $n, $dir) = @_; my $file = "$dir/runForinput$n.cout"; if (!(-r "$file")) { print "|$n|: No $file found\n"; return; } open(FILE, "<", "$file") or return; my @energies; my $counter = 0; while () { chomp; if (/DMRG\+\+ version (.*$)/) { $values->{"Version"} = $1; next; } if (/lowest eigenvalue= ([^ ]+) */) { push(@energies, $1); next; } if (/DmrgSolver \[([\d\.]+)\]\: Turning off the engine/) { $values->{"UserTime"} = $1; } if (/Current virtual memory is/) { if (/maximum was (.+)$/) { $values->{"MaxRAM"} = $1; } } } close(FILE); $values->{"Energies"} = \@energies; } sub compareValues { my ($newValues, $oldValues, $n, $targetName) = @_; foreach my $key (sort keys %$oldValues) { my $v1 = $newValues->{"$key"}; my $v2 = $oldValues->{"$key"}; defined($v1) or $v1 = "UNDEFINED"; defined($v2) or $v2 = "UNDEFINED"; if ($key ne "Energies") { print "|$n|: $key: $v1 $v2\n"; next; } my $maxEdiff = maxEnergyDiff($newValues->{$key}, $oldValues->{$key}); next if ($targetName ne "GroundStateTargeting" and $maxEdiff eq "NO ENERGIES!"); print "|$n|: MaxEnergyDiff = $maxEdiff .$targetName.\n"; } } sub maxEnergyDiff { my ($eNew, $eOld) = @_; return "NEW ENERGIES UNDEFINED" if (!defined($eNew)); return "OLD ENERGIES UNDEFINED" if (!defined($eOld)); my $n = scalar(@$eNew); return "ENERGY SIZES DIFFERENT ".scalar(@$eOld)." $n" if (scalar(@$eOld) != $n); return "NO ENERGIES!" if ($n == 0); my $maxEdiff = 0; for (my $i = 0; $i < $n; ++$i) { my $tmp = abs($eNew->[$i] - $eOld->[$i]); $maxEdiff = $tmp if ($tmp > $maxEdiff); } return "$maxEdiff [out of $n]"; } sub procMemcheck { my ($n) = @_; my $file1 = "$workdir/output$n.txt"; my $mode = "OK"; my $extra = "UNDEFINED"; my %lost; my $ret = open(FILE, "<", $file1); if (!$ret) { print STDERR "$0: Cannot open $file1 : $!\n"; return; } while () { if (/FATAL: You are requesting/ || /mandatory label/) { $mode = "FATAL"; $extra = $_; chomp($extra); last; } if (/terminate called after throwing/) { $mode = uc("throw"); while () { if (/what\(\)/) { $extra = $_; chomp($extra); last; } } last; } next unless (/^==/); if (/invalid/i) { $mode = uc("invalid"); last; } if (/uninitial/i) { $mode = uc("uninitialized"); last; } if (/([^ ]+) lost: ([^ ]+) bytes/) { my $val = $2; my $name = $1; $val =~ s/,//; $lost{"$name"}= $val; next; } } close(FILE); if ($mode eq "FATAL" || $mode eq uc("throw")) { print "|$n|: ".uc($mode)." couldn't run because of $extra\n"; return; } foreach my $key (keys %lost) { my $val = $lost{"$key"}; next if ($val == 0); print "|$n|: WARNING: $key lost ".$lost{"$key"}." bytes\n"; } } sub fileSize { my ($filename) = @_; my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = stat($filename); return $size; } sub checkEnergyAncillaInSitu { my ($n, $what, $workdir, $golddir) = @_; my $whatN = scalar(@$what); for (my $i = 0; $i < $whatN; ++$i) { my $file = "runForinput$n.cout"; if (!(-r "$file")) { print STDERR "|$n|: WARNING: $file not readable ".__LINE__."\n"; } my $file1 = "$workdir/energyAncillaInSitu${n}_$i.txt"; my $file2 = "$golddir/energyAncillaInSitu${n}_$i.txt"; print "kompare $file1 $file2\n"; my %vals1 = Metts::load($file1); my %vals2 = Metts::load($file2); compareHashes(\%vals1, \%vals2); } } sub checkTimeInSituObs { my ($n, $what, $workdir, $golddir) = @_; my $whatN = scalar(@$what); for (my $i = 0; $i < $whatN; ++$i) { my $file1 = "$workdir/timeObservablesInSitu${n}_$i.txt"; my $file2 = "$golddir/timeObservablesInSitu${n}_$i.txt"; print "kompare $file1 $file2\n"; my %m1 = timeObservablesInSitu::load($file1); my %m2 = timeObservablesInSitu::load($file2); if (keys %m1 != 4 or keys %m2 != 4) { print "\tIncorrect file $file1 or $file2\n"; return; } my $site = $m1{"site"}; my $label = $m1{"label"}; if ($label ne $m2{"label"}) { print "\tlabels NOT EQUAL\n"; next; } if ($site ne $m2{"site"}) { print "\tsites NOT EQUAL\n"; next; } print "\tChecking times...\n"; checkVectorsEqual($m1{"times"}, $m2{"times"}); compareMatrices($m1{"data"}, $m2{"data"}); } } sub checkCollectBrakets { my ($n, $what, $workdir, $golddir) = @_; my $whatN = scalar(@$what); for (my $i = 0; $i < $whatN; ++$i) { my $file = "runForinput$n.cout"; if (!(-r "$file")) { print STDERR "|$n|: WARNING: $file not readable ".__LINE__."\n"; } my $file1 = "$workdir/CollectBrakets${n}_$i.txt"; my $file2 = "$golddir/CollectBrakets${n}_$i.txt"; my %brakets1 = readBrakets($file1); my %brakets2 = readBrakets($file2); print "$0: kompare $file1 $file2\n"; compareBrakets(\%brakets1, \%brakets2); } } sub compareBrakets { my ($b1, $b2) = @_; my $n1 = scalar(keys %$b1); my $n2 = scalar(keys %$b2); if ($n1 != $n2) { print "WARNING: Braket n. of labels differs $n1 != $n2\n"; } my @ks = ($n1 < $n2) ? keys %$b2 : keys %$b1; foreach my $label (@ks) { my $a1 = $b1->{"$label"}; my $a2 = $b2->{"$label"}; if (!defined($a1)) { print "Warning, Braket with label $label not in working dir\n"; next; } if (!defined($a2)) { print "Warning, Braket with label $label not in gold dir\n"; next; } compareBraketGivenLabel($a1, $a2, $label); } } sub compareBraketGivenLabel { my ($a1, $a2, $label) = @_; my $n1 = scalar(@$a1); my $n2 = scalar(@$a2); if ($n1 != $n2) { print "WARNING: Braket $label n. of sites differs $n1 != $n2\n"; } my @items = ("time", "value", "norm"); my $n = ($n1 < $n2) ? $n1 : $n2; for (my $site = 0; $site < $n; ++$site) { my $h1 = $a1->[$site]; my $h2 = $a2->[$site]; defined($h1) or next; defined($h2) or next; foreach my $item (@items) { if (compareItem($item, $h1, $h2) > 1) { print "$0 $item undefined either old or new\n"; return; } } } } sub compareItem { my ($item, $h1, $h2) = @_; my $i1 = $h1->{"$item"}; my $i2 = $h2->{"$item"}; return 0 if (!defined($i1) and !defined($i2)); defined($i1) or return 2; defined($i2) or return 3; my $f1 = isFloat($i1); my $f2 = isFloat($i2); if ($f1 and $f2) { return (abs($f1 - $f2) < 1e-6) ? 0 : 1; } my ($re1, $im1) = getReImag($i1); my ($re2, $im2) = getReImag($i2); if ($re1 and $re2) { return (abs($re1 - $re2) < 1e-6 and abs($im1 - $im2) < 1e-6) ? 0 : 1; } if ($i1 ne $i2) { print "$0 $item differs in $item $i1 != $i2\n"; } return ($i1 eq $i2) ? 0 : 1; } sub getReImag { my ($val) = @_; if ($val =~ /^\(([^\,]+)\,([^\)]+)\)$/) { return ($1, $2); } return ("", ""); } sub readBrakets { my ($file) = @_; my %brakets; if (!open(FILE, "<", $file)) { print "$0: Could not open $file : $!\n"; return %brakets; } while () { my @temp = split; next if (scalar(@temp) != 5); my $site = $temp[0]; next unless ($site =~ /^\d+$/); my $label = $temp[3]; my $hptr = {"value" => $temp[1], "time" => $temp[2], "norm" => $temp[4]}; my $aptr = $brakets{"$label"}; if (defined($aptr)) { $brakets{"$label"}->[$site] = $hptr; } else { my @aOfSites; $aOfSites[$site] = $hptr; $brakets{"$label"} = \@aOfSites; } } close(FILE); return %brakets; } sub checkVectorsEqual { my ($a, $b) = @_; my $n = scalar(@$a); if ($n != scalar(@$b)) { print "\t\tSIZES NOT EQUAL\n"; return 0; } my $max = 0; for (my $i = 0; $i < $n; ++$i) { $_ = abs($a->[$i] - $b->[$i]); $max = $_ if ($max < $_); } print "\t\tMax diff=$max\n"; } sub checkMetts { my ($n,$what,$workdir, $golddir) = @_; my $whatN = scalar(@$what); for (my $i = 0; $i < $whatN; ++$i) { my $file1 = "$workdir/metts${n}_$i.txt"; my $file2 = "$golddir/metts${n}_$i.txt"; my %vals1 = Metts::load($file1); my %vals2 = Metts::load($file2); compareHashes(\%vals1, \%vals2); } } sub checkProcOmegas { my ($n, $what, $workdir, $golddir) = @_; my $file1 = "$workdir/out$n.spectrum"; my $file2 = "$golddir/out$n.spectrum"; print "$0: kompare $file1 $file2\n"; compareSpectrum($file1, $file2); } sub compareSpectrum { my ($file1, $file2) = @_; my %h1; loadSpectrum(\%h1, $file1); my %h2; loadSpectrum(\%h2, $file2); compareSpectrumHashes(\%h1, \%h2); } sub loadSpectrum { my ($h, $file) = @_; if (!open(FILE, "<", $file)) { print "\t\tWARNING: $file could not be opened\n"; return; } while () { next if (/^[ \t]*#/); chomp; my @temp = split; my $n = scalar(@temp); next if ($n < 2); my $key = shift @temp; $h->{"$key"} = \@temp; } close(FILE); } sub compareSpectrumHashes { my ($h1, $h2) = @_; my $n1 = keys %$h1; my $n2 = keys %$h2; print "\t\tWARNING:Spectrum: Different number of omegas $n1 and $n2\n" if ($n1 != $n2); my $maxDiff = 0; my @omegasUndef; foreach my $key (sort keys %$h1) { my $vec1 = $h1->{$key}; my $vec2 = $h2->{$key}; if (defined($vec2)) { my $diff = vectorAbsDiff($vec1, $vec2); $maxDiff = $diff if ($diff > $maxDiff); } else { push @omegasUndef, $key; } } my $n = scalar(@omegasUndef); print "\t\t WARNING:Spectrum: $n omegas not found\n" if ($n > 0); my $warnOrNot = ($maxDiff < 1e-5) ? "" : "WARNING"; print "\t\t$warnOrNot"."Spectrum: maxDiff=$maxDiff\n"; } sub vectorAbsDiff { my ($v1, $v2) = @_; my $n1 = scalar(@$v1); my $n2 = scalar(@$v2); print "\t\tWARNING:Spectrum: Different number of space points $n1 and $n2\n" if ($n1 != $n2); my $max = ($n1 < $n2) ? $n2 : $n1; my $maxDiff = 0; for (my $i = 0; $i < $max; ++$i) { my $val1 = $v1->[$i]; my $val2 = $v2->[$i]; defined($val1) or $val1 = 0; defined($val2) or $val2 = 0; my $diff = abs($v1->[$i] - $v2->[$i]); $maxDiff = $diff if ($diff > $maxDiff); } return $maxDiff; } sub checkObserve { my ($n, $ignored, $workdir, $golddir) = @_; my $file1 = "$workdir/observe$n.txt"; my $file2 = "$golddir/observe$n.txt"; print "$0: kompare $file1 $file2\n"; my @m1 = loadObserveData($file1); my @m2 = loadObserveData($file2); compareObserveData(\@m1, \@m2); } sub compareObserveData { my ($m1, $m2) = @_; my $n1 = scalar(@$m1); my $n2 = scalar(@$m2); print "work has $n1 observe matrices -- gold has $n2 observe matrices\n"; return if ($n1 != $n2); for (my $i = 0; $i < $n1; ++$i) { compareObserveDatum($m1->[$i], $m2->[$i]); } } sub compareObserveDatum { my ($h1, $h2) = @_; my $l1 = $h1->{"label"}; my $l2 = $h2->{"label"}; if ($l1 ne $l2) { print "Label $l1 NOT EQUAL to $l2\n"; return; } print "Comparing $l1\n"; compareMatrices($h1->{"data"}, $h2->{"data"}); } sub compareMatrices { my ($m1, $m2) = @_; if (scalar(@$m1) < 3 || scalar(@$m2) < 3) { print "\tMatrix TOO SMALL\n"; return; } if ($m1->[0] != $m2->[0]) { print "\tRows not equal\n"; return; } if ($m1->[1] != $m2->[1]) { print "\tCols not equal\n"; return; } my $total = $m1->[0] * $m1->[1]; my $max = 0; for (my $i = 0; $i < $total; ++$i) { next unless ($m1->[$i] && $m2->[$i]); my $val = realOrComplexNorm($m1->[$i], $m2->[$i]); $max = $val if ($max < $val); } print "\tMaximum difference= $max\n"; } sub realOrComplexNorm { my ($x, $y) = @_; die "$0: realOrComplexNorm\n" unless ($x and $y); return abs($x - $y) if (isFloat($x) and isFloat($y)); my ($xr, $xi) = getComplexNumberParts($x); my ($yr, $yi) = getComplexNumberParts($y); my $val = ($xr - $yr)**2 + ($xi - $yi)**2; return sqrt($val); } sub getComplexNumberParts { my ($x) = @_; die "$0: getComplexNumberParts\n" unless ($x); $x =~ s/\(//; $x =~ s/\)//; my @temp = split/,/, $x; die "$0: getComplexNumberParts $x\n" unless (scalar(@temp) == 2); return ($temp[0], $temp[1]); } sub loadObserveData { my ($file) = @_; my @m; my $fh; if (!open($fh, "<", "$file")) { print "$0: File $file NOT FOUND\n"; return @m; } while (<$fh>) { my $label = readNextLabel($fh); my @m1; my $ret = readNextMatrix($fh, \@m1); if ($ret ne "ok") { print "$0: $ret\n"; print "$0: $label\n" if (defined($label)); last; } my %h = ("label" => $label, "data" => \@m1); push @m, \%h; } close($fh); return @m; } sub readNextLabel { my ($fh) = @_; while (<$fh>) { #print; chomp; last if (/^\; defined($_) or return "eof"; chomp; if (!/^\d+ /) { # double label, read again $_ = <$fh>; defined($_) or return "eof"; chomp; } my @temp = split; if (scalar(@temp) != 2) { return "not a matrix"; } my ($rows, $cols) = @temp; $m->[0] = $rows; $m->[1] = $cols; for (my $i = 0; $i < $rows; ++$i) { $_ = <$fh>; defined($_) or return "file ended while reading matrix"; chomp; my @temp = split; (scalar(@temp) == $cols) or return "cols wrong for row $i"; for (my $j = 0; $j < $cols; ++$j) { $m->[2 + $i +$j*$rows] = $temp[$j]; } } return "ok"; } sub compareHashes { my ($h1, $h2) = @_; my $max = 0; foreach my $key1 (keys %$h1) { my $val2 = $h2->{"$key1"}; if (!defined($val2)) { print "\tNot value for $key1 in hash2\n"; next; } my $val1 = $h1->{"$key1"}; my $d = abs($val1->[0] - $val2->[0]); $max = $d if ($max < $d); } print "Maximum Error $max\n"; } sub isFloat { my ($x) = @_; $_ = $x; return (/^[+-]?(?=\.?\d)\d*\.?\d*(?:e[+-]?\d+)?\z/i); } dmrgpp-6.02/TestSuite/sanityRig.pl000077500000000000000000000046671414604301300172050ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my $makeJ = shift @ARGV; defined($makeJ) or die "USAGE: $0 makeJ\n"; my @testIndex = ({flavor => "callgrind", tool => "memcheck"}, {flavor => "drd", tool => "drd"}, {flavor => "helgrind", tool => "helgrind"}); main(scalar(@testIndex), $makeJ, \@ARGV); sub main { my ($items, $makeJ, $codes) = @_; for (my $i = 0; $i < $items; ++$i) { kompileRig($i, $makeJ, $codes); } print "---------------------\n"; } sub kompileRig { my ($ind, $makeJ, $codes) = @_; my $command = "make clean; make -j $makeJ"; my @paths = qw!../../PsimagLite/lib !; addCodes(\@paths, $codes); my $n = scalar(@paths); for (my $i = 0; $i < $n; ++$i) { kompileRigEach($ind, $paths[$i], $command); } } sub kompileRigEach { my ($ind, $path, $command) = @_; my $flavor = $testIndex[$ind]->{"flavor"}; $flavor = "production" unless $path eq "../src"; my $cmd = "cd $path; perl configure.pl -f $flavor"; executeAndDieIfNotSuccess($cmd); $cmd = "cd $path; $command"; executeAndDieIfNotSuccess($cmd); my $tool = $testIndex[$ind]->{"tool"}; $cmd = "./ci.pl -n \"0-*\" -S qsub --valgrind $tool -w workdir$ind "; executeAndDieIfNotSuccess($cmd); } sub addCodes { my ($paths, $codes) = @_; addAll($codes); my $n = scalar(@$codes); for (my $i = 0; $i < $n; ++$i) { my $code = $codes->[$i]; if ($code eq "dmrgpp") { push @$paths, "../src"; } elsif ($code eq "LanczosPlusPlus") { push @$paths, "../../LanczosPlusPlus/src"; } elsif ($code eq "BetheAnsatz") { push @$paths, "../../BetheAnsatz/src"; } elsif ($code eq "FreeFermions") { push @$paths, "../../FreeFermions/examples"; } elsif ($code eq "merapp") { push @$paths, "../../merapp/src"; } elsif ($code eq "PsimagLite") { push @$paths, " ../../PsimagLite/drivers"; } else { die "$0: Unknown code $code\n"; } } } sub addAll { my ($codes) = @_; return if (scalar(@$codes) > 0); @$codes = qw/PsimagLite dmrgpp LanczosPlusPlus/; # BetheAnsatz FreeFermions merapp/; } sub flattenWithNewLines { my ($items) = @_; my $text = ""; my $n = scalar(@$items); for (my $i = 0; $i < $n; ++$i) { $text .= "$items->[$i]\n"; } return $text; } sub appendToFile { my ($file, $textToAppend) = @_; open(FILE, ">>", $file) or die "$0: Cannot open $file : $!\n"; print FILE $textToAppend; close(FILE); } sub executeAndDieIfNotSuccess { my ($cmd) = @_; system($cmd); die "$0: Command $cmd FAILED\n" if ($? != 0); } dmrgpp-6.02/TestSuite/testsuite.8000066400000000000000000000111331414604301300170000ustar00rootroot00000000000000\" To see this file do less testsuite.8 or man -l testsuite.8 .TH testsuite.pl 8 "July 21, 2010" "version 1.0" "DMRG++" .SH NAME testsuite.pl \- Systematically run tests for DMRG++ .SH SYNOPSIS .B ./testsuite.pl [\-a] [\-n int] [\-l int] [\-r] [\-v] [\-m] [\-f] [\-u] .SH DESCRIPTION If a test number is not given to testsuite.pl, it will display a list of available tests and ask which test to run. The testsuite will create a driver program, a Config.make, a Makefile, and it will build DMRG++ and run it. Followed by interpretation of the results and comparisons with precomputed results. At any given time, the user can escape the .B testsuite.pl execution by pressing Control+C. .SH OPTIONS .TP .B \-a,\-\-all Runs all available tests sequentially starting from the lowest one. .TP .B \-n test number runs the test with the given number. .TP .B \-l last test number Number that specifies the last test to run when running multiple tests. Can be used to specify a range of tests to be ran. Applied when using the .B \-\-all option .TP .B \-v, --verbose Displays messages created during test selection, configuration, compilation, and execution of DMRG++. This includes the descriptions of all tests which are found in .B inputs/descriptions.txt. .TP .B \-f, --force Runs the configuration and compilation processes even though they had already been made previously and valid executables exist for that test number. .TP .SH FILE ASSOCIATIONS Each test has a file associated with it .B (inputs/processing#.txt) which specifies the types of analyses to be done for that test. The implementation of each analysis is denoted with a custom meta language in .B inputs/processingLibrary.txt. This implementation of the testsuite allows it to be scalable by adding new analyses to the processing library and hooking them with new subroutines in .B testsuite.pl. .SH TESTS PROCESSING FILES The processing files describe the types of analyses to be performed for each test. The analyses available are found in .B processingLibrary.txt as tags enclosed in square brackets .B [dmrg] , with a series of commands following it. The analyses associated with each test are independent from the other tests. An analysis can be set inactive by appending the analysis with the pound sign (#). The order of the analyses does not matters since the dependencies among analyses, if any, are specified in the processing library file. .SH PROCESSING LIBRARY The library .B (inputs/processingLibrary.txt) identifies the available analyses that can be used in the testsuite. Using a simple meta language, the user can specify the type of commands and form dependencies among analyses. Each analyses is independent from the others in terms of parameters and key:value pairs. The basic keywords are: .TP .B Let [key]=[value] Associates a key:value pair for the commands pertaining to that test. For each pair, the key and value have to be appended by the dollar sign ($) and an equal sign (=) should be between them. The keys (left) are established by the user and can be used in the commands. The values (right) can be composed of user names, and variables allowed in the .B keyValueParser subroutine in .B testsuite.pl. Example: Let $resultFile = mydata.txt .TP .B CallOnce [analysis] Creates dependencies among analyses. This means that the analysis specified with CallOnce has to occur before the analysis establishing the dependency. Its parameter is the name of another analysis. Example: CallOnce analysis1, where analysis2 is describing its dependency to analysis1 .TP .B Execute [subroutine] Runs a custom subroutine for that analysis. The name of the subroutine is user-defined and must be available in .B testsuite.pl. Passing parameters is allowed. Example: Execute createSimulation($geometry, $output) .TP .B [Others] The additional commands are common linux commands which are then hooked to a subroutine which will run them. In order to add an additional linux command, look for a similar command in .B testsuite.pl and copy the subroutine, change the name to "hook[command]", and change the command in the system call. The command availables should be specified in the .B commandsInterpreter subroutine in .B testsuite.pl. Available commands: Grep, Gprof, Diff Example: Diff $file1 $file2 > $output .SH AUTHOR Gonzalo Alvarez & Eduardo Ponce .SH BUGS Cannot catch and stop execution when a Diff command error occurs. .SH LIMITATIONS Currently, .B testsuite.pl does not support MPI tests, or pthread tests. Also, a lot of DMRG++ functionality needs corresponding tests in the testsuite. This will be added eventually. .SH SEE ALSO configure.pl, testsuite.pl, oracleCreator.pl, processingLibrary.txt dmrgpp-6.02/TestSuite/testsuite.pl000077500000000000000000000037121414604301300172530ustar00rootroot00000000000000#! /usr/bin/perl =pod // BEGIN LICENSE BLOCK /* Copyright (c) 2008-2011, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] [TestSuite by E.P., Puerto Rico and ORNL] UT Battelle Open Source Software License 11242008 see file LICENSE for more details ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* // END LICENSE BLOCK "Program testing can be a very effective way to show the presence of bugs, but it is hopelessly inadequate for showing their absence." -- Edsger Dijkstra =cut #Declarations of Perl modules required use strict; use warnings; use lib "../../PsimagLite/TestSuite"; use TestSuiteGlobals; #CHANGE ONLY HERE: use TestSuiteDmrg; *TestSuiteHooks:: = *TestSuiteDmrg::; #END OF CHANGE BLOCK TestSuiteGlobals::init(); TestSuiteGlobals::doMain(); dmrgpp-6.02/doc/000077500000000000000000000000001414604301300134735ustar00rootroot00000000000000dmrgpp-6.02/doc/CMakeLists.txt000066400000000000000000000015471414604301300162420ustar00rootroot00000000000000add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/manual.tex COMMAND bash -c "cp ${CMAKE_CURRENT_SOURCE_DIR}/*.pdf ${CMAKE_CURRENT_BINARY_DIR}/" COMMAND bash -c "cp ${CMAKE_CURRENT_SOURCE_DIR}/*.png ${CMAKE_CURRENT_BINARY_DIR}/" COMMAND find ${dmrgpp_SOURCE_DIR} -iname "*.h" -or -iname "*.cpp" | perl ${PsimagLite_SOURCE_DIR}/../scripts/doc.pl ${CMAKE_CURRENT_SOURCE_DIR}/manual.ptex ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating manual.tex from manual.ptex" # VERBATIM ) add_custom_target( manual.pdf ALL COMMAND pdflatex manual.tex COMMAND bibtex manual.aux COMMAND pdflatex manual.tex COMMAND pdflatex manual.tex WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating manual.pdf" DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/manual.tex VERBATIM ) dmrgpp-6.02/doc/DmrgPlusPlusFp0.tex000066400000000000000000000134751414604301300171760ustar00rootroot00000000000000\documentclass{article} \usepackage{amsmath} \usepackage{marginnote} \begin{document} \title{DMRG++ Feature Proposal:\\ Tracking Unnatural Operators} \author{various} \maketitle \marginnote{Definition of Natural}{\sc An Operator is natural} or more precisely \emph{strictly DMRG-natural} if it appears in a Hamiltonian connection. In the Hubbard model with Hamiltonian \begin{equation} H=\sum_{\sigma, i\neq j}t_{i,j} c^\dagger_{i,\sigma} c_{j,sigma} + V\sum_i n_i, \end{equation} the operators $c_{i,\sigma}$ are natural (and $c^\dagger_{i,sigma}$) but not $n_i$. Naturality is thus model-dependent. For example, $n_i$ isn't natural in the Hubbard model as we've just seen, but it is natural in the Hubbard extended model or in the t-J model, due to the $n_i n_j$ connection. \emph{Unnatural operators} are those that are not necessarily natural. The member function \texttt{naturalOperator} of each Model provides all natural operators in the one-site Hilbert space, and a few others. \marginnote{Definition of Resilient} Let $\{W_0, W_1, \cdots, W_{m-1}\}$ be a set of $m$ \emph{sequential} DMRG transformations, let $W =W_0\cdots W_{m-2} W_{m-1}$, and let $\tilde{B} = W^\dagger\, B\, W$ be the DMRG transformed operator of $B$ after these $m$ transformations. Let $\{B_0, B_1, \cdots B_{n-1}\}$ be a set of $n$ one-site operators in some basis, and let $f$ be a function with $f(B_0, B_1, \cdots, B_{n-1})$ an operator in the same basis. Let \begin{equation} \tilde{f}(B_0, B_1, \cdots, B_{n-1}) \equiv f(\tilde{B}_0, \tilde{B}_1, \cdots, \tilde{B}_{n-1}) \end{equation} The operator function $f$ is said to be \emph{DMRG-transformation resilient}, or just DMRG-resilient, if \begin{equation} \tilde{f}(B_0, B_1, \cdots, B_{n-1}) = W^\dagger\, f(B_0, B_1, \cdots, B_{n-1})\, W. \end{equation} For example, $f(A,B) = A*B$ is \emph{not} DMRG-resilient, but $f(A) = A^\dagger$ and $f(A,B) = A + B$ both are. \marginnote{Minimally complete natural set} A set of operators $\{B_0, B_1, \cdots, B_{n-1}\}$ is a \emph{minimally complete natural set}, if (i) all $B_i$ are natural, (ii) there is no DMRG-resilient operator function yielding one of them from the others, and (iii) if $A$ is a natural operator, then there exists a resilient operator function $f$ such that $A = f(B_0, B_1, \cdots, B_{n-1})$. For the Hubbard model, the set $\{c_{i, \uparrow}, c_{i, \downarrow}\}_i$ is a minimally complete natural set. For the extended Hubbard model we must add $n_i$ for $i$, and for the t-J model we must add $S^+_i$ and $S^z_i$ for all i. \marginnote{Tracking an operator}{\sc Tracking an operator} $A_i$ means to (i) create it of rows and columns equal to the one-site Hilbert space basis when site $i$ is first in view. (ii) To transform it by DMRG transform $W$ as $\tilde{A}_i = W^\dagger A_i W$, and to keep transforming it in this way as the lattice is swept. DMRG++ must track all operators of a minimally complete natural set in order to build the Hamiltonian. FIXME: EXPLAIN WHY. The targeting abstract module defines an interface to the density matrix module that specifies what vectors to target, with what weights, and how to construct and update said vectors. \marginnote{Definition of targeting and NGSTs} There are different ways to implement this abstract interface, and each way defines a \emph{instance} targeting. For instance, \texttt{GroundStateTargeting} is the simplest of them as it targets \emph{only} the ground state vector. All other instances are referred to as \emph{non ground state targets} or NGSTs; see \texttt{Engine/Targeting*.h} in DMRG++ for a list. For example, \texttt{TargetingTimeStep.h} does t{\sc{DMRG.}} \marginnote{Rationale} To obtain correlations $\langle gs| A_i B_j |gs\rangle$ \emph{in-situ} we need to target vectors $B_j |gs\rangle$. This approach has two problems: (i) We cannot use more than one \emph{NGSTs} as \texttt{TargetingInSitu} is already in use, and even if we could (ii) the vectors to target might become too many if targeting other things---considering that we have only one MPS. Tracking Operators $A_i$ and $B_j$ would make the braket $\langle gs| A_i B_j |gs\rangle$ directly available, and could be used in \emph{NGSTs} because this feature would be independent of the targeting feature, allowing for the calculation of $\langle P0| A_i B_j |gs\rangle$ or for other bra and kets. \marginnote{Syntax and User Perspective} We would run DMRG++ with\footnote{Instead of the bra and ket gs, other non ground state vectors may be used, like P0, P1, etc, depending on the NGST in use. Note that there are two ways of specifying operators in the command line: (1) by filename, as in ``:filename'' where \$ substitution is applied, (2) by natural operator \texttt{\_name[site]?dof'}, where site, dof and the transpose single quote are all optional. Before this feature the underscore did not exist, and the operator name had to be natural. This feature adds an optional underscore \_ that allows for an unnatural operator.} \begin{verbatim} ./dmrg -f input.inp '' \end{verbatim} where $A\_$ and $B\_$ are unnatural operators specified to be tracked in the input file as follows. \begin{verbatim} UnnaturalOperatorsTotal=3 UnnaturalOperatorsDelay 3 l0 l1 l2 \end{verbatim} where we here wish to track 3 unnatural operators. The delay specifies the delay of each for its creation, in units of finite loops. Each \texttt{} has the following syntax. \begin{verbatim} UnnaturalOperatorName=A_ , \end{verbatim} Note that the name of the to-be-tracked operators ends with a specific prefix which shall be underscore \_ (or something else haven't decided yet FIXME) Finally, the block \texttt{} is well-known and has been described in the DMRG++ manual. \marginnote{Implementation and Coder Perspective}To be Written TBW. \end{document} dmrgpp-6.02/doc/DmrgPlusPlusFp1.tex000066400000000000000000000073241414604301300171730ustar00rootroot00000000000000\documentclass{article} \usepackage{marginnote} \begin{document} \title{DMRG++ Feature Proposal:\\ Operators Expressions} \author{various} \maketitle \marginnote{Description of this Feature} This feature proposes to allow for \emph{operator expressions} (\texttt{opExpr} for short) where an \texttt{opSpec} was expected before. For the definition of \texttt{opSpec} see the manual. In this proposal, we shall first define \texttt{opExpr}, then explain where it can be used, and then explain the implementation. \marginnote{Definitions}{\textsc An operator expression} is an algebraic expression involving floating point numbers and operator specifications or \texttt{opSpec}s. For example, \begin{verbatim} 3*nup + ndown*(1.5*:sz.txt - 3.5*(c?1'*c?1 + I)). \end{verbatim} A \emph{canonical operator expression} is an operator expression composed of one or more canonical operator terms separated by the plus $+$ sign. A \emph{canonical operator term} is a string that starts with an optional canonical scalar, followed by a star $*$, followed by one or more \texttt{opSpec}s concatenated by starts $*$. A canonical scalar is of one the following forms. \begin{enumerate} \item One or more digits, followed by an optional dot $.$, followed by zero or more digits. For example, $3.5$, $3.$, $3$. \item A dot $.$ followed by one or more digits. For example, $.5$. \item A parenthesis followed by an optional minus sign $-$, followed by a scalar prefix of form (1) or (2) above, and ending in a parenthesis. For example, $(-3.5)$ $(3)$ $(.5)$ $-(.5)$ $(3.)$ $(-3.)$. \end{enumerate} Note that these scalars are \emph{not} canonical: $+3.5$, $(+3.5)$, $-3.5$. The sample expression above in canonical form is \begin{verbatim} 3*nup + 1.5*ndown*:sz.txt + (-3.5)*ndown*c?1'*c?1 + 3.5*ndown*I. \end{verbatim} \marginnote{Where expressions (canonical or general) can be used} An \texttt{opExpr} can be used in the following cases. (1) In a bare braket spec: \texttt{braketSpec = opExpr;opExpr;...} (2) In a dressed braket spec: \texttt{braketSpec =} \texttt{}. (3) After the input label \texttt{OperatorExpression=} when \texttt{TSPOperator=expression} is specified. And (4) after the option \verb!-e! in the operator driver. We shall first implement canonical operator expressions, and then general expressions, as we now describe. To compute a canonical expression we split on $+$, and obtain one or more terms. For each term we split on $*$. We check if the first factor is a canonical scalar and take note. All remaining factors are \texttt{opSpec}s. We loop over each factor, multiplying them as we go, and we finally multiply by the optional scalar. This term is then added to an accumulation variable that yields the final result at the end of the process. \marginnote{Implementation and Coder Perspective} For a general operator expression, we first assign a depth to each opening parenthesis.\footnote{We assign depth to opening parentheses as follows. We set counter=0. Each time we find an opening parenthesis we assign it depth=counter, and increase counter. Each time we find a closing parenthesis we decrease counter.} We then find the deepest opening parenthesis and its closing parenthesis; we take the contents, which shall contain no parentheses, and is thus almost canonical. We canonicalize this expression by removing all leading $+$ signs; by converting $-opsec...$ into $+(-1)*opsec...$; and by converting $-scalar$ into $+(-scalar)$. We evaluate the resulting canonical expressions, label it uniquely, and replace it in the full original operator expression. We proceed recursively until there are no more parentheses left. Syntax in errors in expression shall be found while parsing it in the way just described. \end{document} dmrgpp-6.02/doc/HybridSpaceMomentum.tex000066400000000000000000000025621414604301300201410ustar00rootroot00000000000000\documentclass{article} \usepackage{marginnote} \begin{document} \title{DMRG++ Hybrid space-momentum} \author{G.~A.} \maketitle We take the Hubbard model on a ladder $L_x\times L_y$ and transform into momentum $k$ only in the y-direction and obtain a hybrid space-momentum lattice with points $(x, k)$. Moreover, we consider the $k$ values as ``orbitals'' and think of the lattice as a \emph{multi-orbital chain.} We obtain for the hopping Hamiltonian term \begin{equation} H_{\textrm{hop.}}=\sum_{x\neq x',k,k',\sigma} F^{k, k'}_{x,x'} d^\dagger_{x, k, \sigma} d_{x',k',\sigma} + \sum_{x, k, k', \sigma} G_{x, k, k'}d^\dagger_{x, k, \sigma} d_{x,k',\sigma}, \end{equation} where \begin{equation} F^{k, k'}_{x, x'} = \sum_{y, y'} t_{x,y; x',y'}\textrm{e}^{i k y} \textrm{e}^{-i k' y'}, \end{equation} $t_{x,y; x',y'}$ being the fully spatial hopping of the original lattice, and $G_{x, k, k'} = F^{k, k'}_{x, x}$. Note that the $F$ term is a connection in DMRG++ jargon, but the $G$ term is on-site. The interaction becomes $H_{\textrm{int.}} = \sum_x U_x Q_x$ where \begin{equation} Q_x = \sum_{k_0, k_1, k_2, k_3} r(k_0, k_1, k_2, k_3) d^\dagger_{x,k_0,\downarrow} d_{x, k_1, \uparrow} d^\dagger_{x,k_2,\uparrow} d_{x, k_3, \downarrow}, \end{equation} where $r(k_0, k_1, k_2, k_3) = 1$ if \begin{equation} \sum_{i=0}^{i < 4} k_i = 0 \textrm{ mod }2\pi \end{equation} \end{document} dmrgpp-6.02/doc/Kitaev.tex000066400000000000000000000010371414604301300154410ustar00rootroot00000000000000\documentclass{article} \usepackage{marginnote} \begin{document} \title{DMRG++ Kitaev model} \author{G.~A.} \maketitle \[ H=\sum_{i,j,\gamma}J^\gamma_{i,j}S_i^\gamma S_j^\gamma \] where $i$ and $j$ are lattice sites, and $\gamma\in\{\hat{x}, \hat{y}, \hat{z}\}$ is the direction. For a honeycomb lattice we take $J^{\gamma}_{i,j}=J_\gamma$ if $i$ and $j$ are neighbors on a honeycomb lattice in the $\gamma$ direction, and $J^{\gamma}_{i,j}=0$ otherwise. The model then depends on three parameters: $J_x$, $J_y$, and $J_z$. \end{document} dmrgpp-6.02/doc/LiterateProgramming/000077500000000000000000000000001414604301300174475ustar00rootroot00000000000000dmrgpp-6.02/doc/LiterateProgramming/README000066400000000000000000000010341414604301300203250ustar00rootroot00000000000000This is work in progress. To obtain documentation do the following steps: 1) Download nuweb 2) Apply the patch nuweb-latex.patch found in this directory: patch -i nuweb-latex.patch latex.c 3) Compile nuweb (follow program instructions) make nuweb 4) Then, for example: cd src/Engine nuweb -v -l -s -d DensityMatrix.w 5) Then typeset it and rerun nuweb for references as needed: pdflatex DensityMatrix.tex nuweb -v -l -s -d DensityMatrix.w pdflatex DensityMatrix.tex 6) and you should get the documentation in DensityMatrix.pdf dmrgpp-6.02/doc/LiterateProgramming/nuweb-latex.patch000066400000000000000000000114111414604301300227210ustar00rootroot00000000000000107c107 < fputs("\\vspace{-1ex}\n\\begin{list}{}{} \\item\n", tex_file); --- > fputs("\\vspace{-1ex}\n\\begin{lstlisting}%AAAA\n", tex_file); 110c110 < fputs("{\\NWsep}\n\\end{list}\n", tex_file); --- > fputs("\\end{lstlisting}\n", tex_file); 113c113 < { --- > /*{ 119c119 < --- > */ 138c138 < { --- > /*{ 141c141 < } --- > }*/ 150c150 < fputs("\\end{minipage}\\vspace{4ex}\n", tex_file); --- > fputs("\\end{minipage}\n", tex_file); 217,218c217,219 < fputs("\\vspace{-1ex}\n\\begin{list}{}{} \\item\n", tex_file); < extra_scraps = 0; --- > //fputs("\\vspace{-1ex}\n\\begin{list}{}{} \\item\n", tex_file); > fputs("\\begin{lstlisting}%BBBB\n", tex_file); > extra_scraps = 0; 220c221,222 < fputs("{\\NWsep}\n\\end{list}\n", tex_file); --- > //fputs("{\\NWsep}\n\\end{list}\n", tex_file); > fputs("\\end{lstlisting}\n", tex_file); 223c225 < { --- > /*{ 228,229c230 < fputs("\\setlength{\\itemindent}{-\\leftmargin}}\n", tex_file);} < --- > fputs("\\setlength{\\itemindent}{-\\leftmargin}}\n", tex_file);} */ 231c232 < { --- > /*{ 236c237 < } --- > }*/ 238c239 < { --- > /*{ 259c260 < } --- > }*/ 263c264 < { --- > /*{ 266c267 < } --- > }*/ 448c449 < { "\\verb@", "@", "@{\\tt @}\\verb@", "\\mbox{}", "\\\\" }, --- > { "\\verb@", " ", " ", " "," " }, 470c471 < if((delimit_scrap[0][0]=strdup("\\lstinline@")) == NULL) { --- > if((delimit_scrap[0][0]=strdup(" ")) == NULL) { 521c522 < while (delta > 0) { --- > /*while (delta > 0) { 524c525,527 < } --- > }*/ > delta = 0; > putc('\t', file); 580,582c583,585 < if (prefix) < fputs("\\hbox{", file); < fputs("$\\langle\\,${\\it ", file); --- > //%CCC if (prefix) > //%CCC fputs("\\hbox{", file); > //%CCC fputs("$\\langle\\,${\\it ", file); 598c601 < fputs("}\\nobreak\\ ", file); --- > //%CCC fputs("}\\nobreak\\ ", file); 608c611 < fputs("{\\footnotesize ", file); --- > //%CCC fputs("{\\footnotesize ", file); 611c614 < fputs(" }", file); --- > //%CCC fputs(" }", file); 629c632 < fprintf(file, "{\\footnotesize "); --- > //%CCC fprintf(file, "{\\footnotesize "); 634,636c637,639 < fputs("\\NWlink{nuweb", file); < write_single_scrap_ref(file, p->scrap); < fputs("}{", file); --- > //%CCC fputs("\\NWlink{nuweb", file); > //%CCC write_single_scrap_ref(file, p->scrap); > //%CCC fputs("}{", file); 638c641 < fputs("}", file); --- > //%CCC fputs("}", file); 640,641c643,644 < if (p) < fputs(", \\ldots\\ ", file); --- > //%CCC if (p) > //%CCC fputs(", \\ldots\\ ", file); 648,651c651,654 < fputs("}$\\,\\rangle$", file); < if (prefix) < fputs("}", file); < fputs(delimit_scrap[scrap_type][0], file); --- > //%CCC fputs("}$\\,\\rangle$", file); > //%CCC if (prefix) > //%CCC fputs("}", file); > //%CCC fputs(delimit_scrap[scrap_type][0], file); dmrgpp-6.02/doc/Makefile000066400000000000000000000013511414604301300151330ustar00rootroot00000000000000CPPFLAGS = -I../src/Engine -I../src/Models/Heisenberg -I../src/Models/Heisenberg -I../src/Models/HubbardOneBand -I../src/Models/FeAsModel \ -IModels/Immm -I../src/Models/FeAsBasedScExtended -IModels/ExtendedHubbard1Orb -I../../PsimagLite/src -I../../PsimagLite/src/Geometry CXX = g++ all: manual.pdf FILES = $(shell find ../src -iname "*.h" -or -iname "*.cpp") manual.tex: manual.ptex ../README.md $(FILES) find ../src -iname "*.h" -or -iname "*.cpp" |\ perl ../../PsimagLite/scripts/doc.pl manual.ptex manual.pdf: manual.tex ../README.md ../src/*h ../src/Engine/*h ../src/*cpp pdflatex manual.tex bibtex manual.aux pdflatex manual.tex pdflatex manual.tex clean: rm -f ../README.tex rm -f manual.tex manual.pdf dmrgpp-6.02/doc/README000066400000000000000000000005761414604301300143630ustar00rootroot00000000000000 QUESTIONS ABOUT DMRG++ DOCUMENTATION: Where's manual.tex now? When one runs make under dmrgpp/src it should be created automatically. If not, one needs to run make in this directory, that is, in dmrgpp/doc. What does one needs in order to generate manual.tex? PsimagDoc, which is included in PsimagLite. What is PsimagDoc? See PsimagDoc/README in the PsimagLite distribution. dmrgpp-6.02/doc/Under_construction_icon-blue.eps000066400000000000000000000230251414604301300220320ustar00rootroot00000000000000%!PS-Adobe-3.0 EPSF-3.0 %%Creator: inkscape 0.46 %%Pages: 1 %%Orientation: Portrait %%BoundingBox: 9 2 480 393 %%HiResBoundingBox: 9.3445663 2.04848 479.25576 392.16995 %%EndComments %%Page: 1 1 0 400 translate 0.8 -0.8 scale 0 0 0 setrgbcolor [] 0 setdash 1 setlinewidth 0 setlinejoin 0 setlinecap gsave [1 0 0 1 0 0] concat gsave 0 0 0 setrgbcolor newpath 287.0439 30.68461 moveto 287.0439 30.68461 26.88238 457.8871 26.88238 457.8871 curveto 21.89034 466.0472 21.89034 476.1272 26.88238 484.2873 curveto 31.77841 492.3513 40.99446 497.4394 50.97852 497.4394 curveto 571.3016 497.4394 lineto 581.1896 497.4394 590.4057 492.3513 595.3977 484.2873 curveto 600.2937 476.1272 600.2937 466.0472 595.3977 457.8871 curveto 335.2362 30.68461 lineto 330.2442 22.52457 321.0281 17.43654 311.14 17.43654 curveto 301.252 17.43654 292.0359 22.52457 287.0439 30.68461 curveto closepath fill grestore gsave << /ShadingType 2 /ColorSpace /DeviceRGB /Coords [41.194874 616.47717 118.93135 527.55511] /Extend [true true] /Domain [0 1] /Function << /FunctionType 3 /Functions [ << /FunctionType 2 /Domain [0 1] /C0 [0 0.47058824 0.94901961] /C1 [0 0.60392159 0.94901961] /N 1 >> ] /Domain [0 1] /Bounds [ ] /Encode [ 0 1 ] >> >> newpath 275.5863 23.03565 moveto 275.5863 23.03565 15.42473 450.2381 15.42473 450.2381 curveto 10.4327 458.3982 10.4327 468.4783 15.42473 476.6383 curveto 20.32076 484.7024 29.53681 489.7904 39.52087 489.7904 curveto 559.8439 489.7904 lineto 569.732 489.7904 578.948 484.7024 583.9401 476.6383 curveto 588.8361 468.4783 588.8361 458.3982 583.9401 450.2381 curveto 323.7785 23.03565 lineto 318.7865 14.8756 309.5705 9.787568 299.6824 9.787568 curveto 289.7943 9.787568 280.5783 14.8756 275.5863 23.03565 curveto closepath clip gsave [4.556763 0 0 -4.315033 37.49756 2758.519] concat shfill grestore grestore gsave << /ShadingType 2 /ColorSpace /DeviceRGB /Coords [530.80951 486.63101 174.80548 211.22995] /Extend [true true] /Domain [0 1] /Function << /FunctionType 3 /Functions [ << /FunctionType 2 /Domain [0 1] /C0 [0 0.53725493 0.84705883] /C1 [0.2 0.59607846 1] /N 1 >> ] /Domain [0 1] /Bounds [ ] /Encode [ 0 1 ] >> >> newpath 299.6824 31.7717 moveto 298.0504 31.7717 296.5144 32.6357 295.6504 33.97971 curveto 165.5696 247.581 lineto 35.48885 461.1822 lineto 34.62484 462.5262 34.62484 464.2542 35.48885 465.5982 curveto 36.35285 466.9422 37.88886 467.8062 39.52087 467.8062 curveto 559.8439 467.8062 lineto 561.4759 467.8062 563.0119 466.9422 563.876 465.5982 curveto 564.74 464.2542 564.74 462.5262 563.876 461.1822 curveto 303.7144 33.97971 lineto 302.8504 32.6357 301.3144 31.7717 299.6824 31.7717 curveto closepath clip gsave [0.960006 0 0 0.960006 11.68071 9.787565] concat shfill grestore grestore gsave << /ShadingType 2 /ColorSpace /DeviceRGB /Coords [250.39845 101.53633 412.0943 264.54187] /Extend [true true] /Domain [0 1] /Function << /FunctionType 3 /Functions [ << /FunctionType 2 /Domain [0 1] /C0 [0.77254903 0.88627452 1] /C1 [0.2 0.59607846 1] /N 1 >> ] /Domain [0 1] /Bounds [ ] /Encode [ 0 1 ] >> >> newpath 299.7514 39.46512 moveto 298.2057 39.54152 296.7649 40.40413 295.9414 41.68514 curveto 165.8606 255.2864 lineto 147.7405 285.0466 lineto 191.8747 311.5396 243.5133 326.8068 298.7014 326.8068 curveto 354.6732 326.8068 407.0086 311.1293 451.5523 283.9366 curveto 304.0114 41.68514 lineto 303.1474 40.34112 301.6234 39.46512 299.9914 39.46512 curveto 299.9149 39.46512 299.8274 39.46136 299.7514 39.46512 curveto closepath clip gsave [0.960006 0 0 0.960006 11.68071 9.787565] concat shfill grestore grestore gsave << /ShadingType 3 /ColorSpace /DeviceRGB /Coords [295.47125 186.09634 0 295.47125 186.09634 179.55] /Extend [true true] /Domain [0 1] /Function << /FunctionType 3 /Functions [ << /FunctionType 2 /Domain [0 1] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0 1] /C0 [1 1 1] /C1 [0.83529413 0.83529413 0.83529413] /N 1 >> ] /Domain [0 1] /Bounds [ 0.5 ] /Encode [ 0 1 0 1 ] >> >> newpath 286.4344 145.7244 moveto 129.2814 403.678 lineto 126.5934 408.1901 126.5934 413.7581 129.2814 418.1741 curveto 131.9695 422.6861 137.0575 425.4702 142.5295 425.4702 curveto 456.7395 425.4702 lineto 462.2115 425.4702 467.2996 422.6861 469.9876 418.1741 curveto 472.6756 413.6621 472.6756 408.1901 469.9876 403.678 curveto 312.9306 145.7244 lineto 310.2426 141.2124 305.1545 138.4284 299.6825 138.4284 curveto 294.2105 138.4284 289.1224 141.2124 286.4344 145.7244 curveto closepath clip gsave [1.14292e-08 1.531256 -0.876504 -2.165967e-05 462.7486 -245.0023] concat shfill grestore grestore gsave [0.6994567 0 0 0.6994567 191.4048 211.37887] concat gsave 0 0 0 setrgbcolor newpath 385.98026 297.1542 moveto 140.36506 297.47 lineto 138.14026 297.2692 136.52876 296.7617 137.37106 294.1072 curveto 227.62156 178.4191 lineto 230.74276 173.9958 235.45166 171.6041 240.18906 171.7401 curveto 285.54036 171.6433 lineto 292.89546 171.6399 295.73166 173.769 299.77886 178.8507 curveto 388.15426 292.9709 lineto 388.96306 294.9787 388.23836 296.9865 385.98026 297.1542 curveto closepath eofill grestore gsave [0.8854492 0.4647361 -0.4080531 0.9129582 0 0] concat gsave 0 0 0.0078431377 setrgbcolor newpath 135.08097 -14.842998 moveto 174.81357 -14.842998 lineto 181.02088 -14.842998 186.01811 -9.5726515 186.01811 -3.0260782 curveto 186.01811 98.024165 lineto 186.01811 104.57074 181.02088 109.84108 174.81357 109.84108 curveto 135.08097 109.84108 lineto 128.87365 109.84108 123.87642 104.57074 123.87642 98.024165 curveto 123.87642 -3.0260782 lineto 123.87642 -9.5726515 128.87365 -14.842998 135.08097 -14.842998 curveto closepath eofill grestore grestore gsave 0 0 0 setrgbcolor newpath 71.647292 46.624874 moveto 152.82377 46.624874 lineto 158.03789 46.624874 162.23553 50.192874 162.23553 54.624874 curveto 162.23553 71.124874 lineto 162.23553 75.556874 158.03789 79.124874 152.82377 79.124874 curveto 71.647292 79.124874 lineto 66.433174 79.124874 62.235527 75.556874 62.235527 71.124874 curveto 62.235527 54.624874 lineto 62.235527 50.192874 66.433174 46.624874 71.647292 46.624874 curveto closepath eofill grestore gsave [0.4686899 -0.8833628 0.7446349 0.6674719 0 0] concat gsave 0 0 0 setrgbcolor newpath -72.57079 81.759407 moveto 3.0790529 81.759407 lineto 7.9381863 81.759407 11.850052 84.794185 11.850052 88.563842 curveto 11.850052 102.59799 lineto 11.850052 106.36765 7.9381863 109.40242 3.0790529 109.40242 curveto -72.57079 109.40242 lineto -77.429924 109.40242 -81.341789 106.36765 -81.341789 102.59799 curveto -81.341789 88.563842 lineto -81.341789 84.794185 -77.429924 81.759407 -72.57079 81.759407 curveto closepath eofill grestore grestore gsave [0.8845854 0.4663782 -0.4366812 0.8996163 0 0] concat gsave 0 0 0 setrgbcolor newpath 108.08129 83.646034 moveto 345.54989 83.646034 lineto 360.80295 83.646034 373.08248 85.348345 373.08248 87.462876 curveto 373.08248 95.335112 lineto 373.08248 97.449642 360.80295 99.151954 345.54989 99.151954 curveto 108.08129 99.151954 lineto 92.828233 99.151954 80.548698 97.449642 80.548698 95.335112 curveto 80.548698 87.462876 lineto 80.548698 85.348345 92.828233 83.646034 108.08129 83.646034 curveto closepath eofill grestore grestore gsave [-0.057205843 -0.9983624 0.9970356 -0.076942184 0 0] concat gsave 0 0 0 setrgbcolor newpath -190.47081 144.00377 moveto -80.921784 144.00377 lineto -73.885242 144.00377 -68.220444 146.97135 -68.220444 150.65754 curveto -68.220444 164.38094 lineto -68.220444 168.06713 -73.885242 171.03472 -80.921784 171.03472 curveto -190.47081 171.03472 lineto -197.50735 171.03472 -203.17215 168.06713 -203.17215 164.38094 curveto -203.17215 150.65754 lineto -203.17215 146.97135 -197.50735 144.00377 -190.47081 144.00377 curveto closepath eofill grestore grestore gsave [0.957573 0 0 0.972804 -219.55633 -423.0267] concat gsave 0 0 0 setrgbcolor newpath 450 467.36218 moveto 450 485.30218 436 499.86218 418.75 499.86218 curveto 401.5 499.86218 387.5 485.30218 387.5 467.36218 curveto 387.5 449.42218 401.5 434.86218 418.75 434.86218 curveto 436 434.86218 450 449.42218 450 467.36218 curveto closepath eofill grestore grestore gsave [-0.2340079 -0.9722347 0.9856452 -0.16883 0 0] concat gsave 0 0 0 setrgbcolor newpath -242.92419 45.608078 moveto -179.55271 45.608078 lineto -175.48224 45.608078 -172.20529 49.037323 -172.20529 53.296968 curveto -172.20529 69.155302 lineto -172.20529 73.414947 -175.48224 76.844193 -179.55271 76.844193 curveto -242.92419 76.844193 lineto -246.99466 76.844193 -250.27161 73.414947 -250.27161 69.155302 curveto -250.27161 53.296968 lineto -250.27161 49.037323 -246.99466 45.608078 -242.92419 45.608078 curveto closepath eofill grestore grestore gsave [-0.0075698648 -0.9999713 0.9970336 0.076967061 0 0] concat gsave 0 0 0 setrgbcolor newpath -280.36675 100.42473 moveto -216.85416 100.42473 lineto -212.77463 100.42473 -209.49039 103.85504 -209.49039 108.11601 curveto -209.49039 123.97928 lineto -209.49039 128.24025 -212.77463 131.67056 -216.85416 131.67056 curveto -280.36675 131.67056 lineto -284.44629 131.67056 -287.73053 128.24025 -287.73053 123.97928 curveto -287.73053 108.11601 lineto -287.73053 103.85504 -284.44629 100.42473 -280.36675 100.42473 curveto closepath eofill grestore grestore gsave [0.4947081 -0.8690592 0.8178671 0.5754071 0 0] concat gsave 0 0 0 setrgbcolor newpath -217.67196 135.70329 moveto -90.463705 135.70329 lineto -82.292878 135.70329 -75.71492 139.21126 -75.71492 143.56869 curveto -75.71492 159.79108 lineto -75.71492 164.14851 -82.292878 167.65648 -90.463705 167.65648 curveto -217.67196 167.65648 lineto -225.84279 167.65648 -232.42075 164.14851 -232.42075 159.79108 curveto -232.42075 143.56869 lineto -232.42075 139.21126 -225.84279 135.70329 -217.67196 135.70329 curveto closepath eofill grestore grestore grestore grestore showpage %%EOF dmrgpp-6.02/doc/Under_construction_icon-blue.pdf000066400000000000000000000153551414604301300220230ustar00rootroot00000000000000%PDF-1.4 %쏢 5 0 obj <> stream x=$7:EkP@iEh=S뭡u&ƨ; r+G^QTUGoۣXOVO+a'+va=l׹a((+e\nɖVWɩ֮Geǣ>|4oKwF[g^/om3r:8aOKsr S:m% >SSǼ62*_'E˺<xuùm͔55ϊCI:r%(׹aqټ_p{VL%G|21 Nh>i^-El怉sx @{)%rGz論ey}??I{oO>|?JF 7`:[jAD]:RyO3[KU%SVF[Ҡ~Z0O㎆7OFf)S߫zjH\(HTKfLC\II=~7m}w`!UPQyr954rK5D1V}0cu淽a{n{^ Gt M"MfS?Q`ꊪ-_O U6ge}Շ\OLEA*|%ϠZeF1KK5@O4"XQ78C; t#`=]tE1o)VǏ(4NU]#G ? kdȭE"*ZlŲq-P5g:.g}뛰UA+;J> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 7 0 obj <>endobj 8 0 obj [/Pattern] endobj 26 0 obj <> endobj 27 0 obj <> endobj 28 0 obj <> endobj 21 0 obj <>endobj 17 0 obj <>endobj 13 0 obj <>endobj 9 0 obj <>endobj 29 0 obj <> endobj 22 0 obj <>endobj 18 0 obj <>endobj 14 0 obj <>endobj 10 0 obj <>endobj 24 0 obj <>endobj 23 0 obj <>endobj 25 0 obj <>endobj 19 0 obj <>endobj 20 0 obj <>endobj 15 0 obj <>endobj 16 0 obj <>endobj 11 0 obj <>endobj 12 0 obj <>endobj 30 0 obj <>stream inkscape 0.46 Untitled endstream endobj 2 0 obj <>endobj xref 0 31 0000000000 65535 f 0000002507 00000 n 0000005973 00000 n 0000002439 00000 n 0000002247 00000 n 0000000015 00000 n 0000002227 00000 n 0000002572 00000 n 0000002613 00000 n 0000003070 00000 n 0000003638 00000 n 0000004423 00000 n 0000004524 00000 n 0000002973 00000 n 0000003506 00000 n 0000004235 00000 n 0000004333 00000 n 0000002876 00000 n 0000003372 00000 n 0000004047 00000 n 0000004145 00000 n 0000002762 00000 n 0000003229 00000 n 0000003868 00000 n 0000003772 00000 n 0000003943 00000 n 0000002639 00000 n 0000002669 00000 n 0000002699 00000 n 0000003164 00000 n 0000004614 00000 n trailer << /Size 31 /Root 1 0 R /Info 2 0 R /ID [<121A903D96305AF63D3367379493E53A><121A903D96305AF63D3367379493E53A>] >> startxref 6120 %%EOF dmrgpp-6.02/doc/dmrg.8000066400000000000000000000026011414604301300145140ustar00rootroot00000000000000\" To see this file do less dmrg.8 or man -l dmrg.8 .TH dmrg 8 "May 1, 2012" "version 2.6" "DMRG++" .SH NAME dmrg \- The main DMRG++ driver .SH SYNOPSIS .B ./dmrg [\-b] [\-\-threads=n] [\-\-wft=yes|no] [\-\-no\-finite\-loops] [\--logfile=logfile] [\-v] [\-h] [\-f input-file] .SH DESCRIPTION If no -f input-file is given, DMRG++ prints the version details and exits. Else it uses the input-file as input for the main driver. Command line options override input file options, which in turn override defaults. .SH OPTIONS .TP .B \-b Run in the background. Requires the \-\-logfile option. .TP .B \-f input-file Use input-file as the input for the main driver. If input-file is \- then read standard input. .TP .B \-h Print this message and exit. .TP .B \-\-logfile=logfile Do not print progress to the terminal. Close standard output and error and redirect both to logfile. .TP .B \-\-no-finite-loops Do not perform finite loops, that is, exit after the infinite algorithm has finished. .TP .B \-\-threads=n Use n pthreads. It is an error to specify this option unless the code was compiled with pthread support. .TP .B \-v Turn on verbose mode. .TP .B \-\-wft=yes|no Perform or do not perform the wave-function transformation for guessing the ground state. .TP .SH AUTHOR G.A. .TP .SH BUGS .TP .SH LIMITATIONS .TP .SH SEE ALSO configure.pl, observe, testsuite.pl, oracleCreator.pl, processingLibrary.txt dmrgpp-6.02/doc/dmrgV2Logo.pov000066400000000000000000000026111414604301300162030ustar00rootroot00000000000000#include "colors.inc" #include "finish.inc" #include "textures.inc" background { color White } camera { location <-1,-15,-1> look_at <-1,0,0> rotate 10*x rotate <0,0,clock*360> } light_source { <2,8,-4> spotlight point_at<2,0,0> } light_source { <-2,8,-4> White } light_source { <4,0,-2> } light_source { <-4,0,-2> White } plane { z, 0 //rotate -15*x translate 1.5*z translate 30*y texture { Water } } plane { z, 0 //rotate 15*x translate 30*y translate -5*z texture {Bright_Blue_Sky //pigment {color SkyBlue} finish{Luminous} } } box { <0, 0, 0> <0,200,50> translate -100*y translate -25*z texture { pigment {Gray} finish {Mirror} } } #declare MyDifference = difference { box { <0, 0, 0> <0,200,48> texture { DMFWood6 } } box { <0, 0, 0> <0,200,48> texture { DMFWood6 } } } cylinder { <0,0,0>, <12,0,0>, 0.5 translate 11*y translate -15*x texture { pigment {color Red} finish {Dull} } } sphere { <0, 0, 0>, 2 translate 10*y translate -3*x texture { pigment {color Red} finish {Metal} } } box { <0,0,0> <13,4,4> translate -20*x translate 10*y translate -2*z texture { pigment {color Red} finish {Dull} } } text { ttf "timrom.ttf" "DMRG++" 0.1, 0 texture { pigment {color Blue} finish {Shiny } } rotate -x*80 scale 4 translate -14.7*x translate +10*y translate -2*z } dmrgpp-6.02/doc/dmrgV2LogoBW.png000066400000000000000000000700671414604301300164260ustar00rootroot00000000000000PNG  IHDR, sRGBbKGD̿ pHYs  tIME IDATxtw]Wu6)Ǫw*M  H HH!!ׄGM1[$ے{M﷞Z,Fs{Uz64R$qB-lEaYD]Ff%,iaZXJϋ߇$J_8,LC"Ҋ5bZF(@ZS_" a |v@YkCXVZ Yv0G" GYy(qEAPPP9?ñiE7H,0cY W)4DTPR `'$$Hy~&8j09J- IM@! x^*: V&ORUƍX mSZq,/D@*DHE uLAN0"nZ " eL[y(D5P d((-^hzdS&E O)6MX%B)Qb"8Xb:rAx*LENke'm 5E+yZMm EJs/09'bRƣ8m˨—6-lAs[e!%ڀD-8j49ZMS"_I2it  $S DPJ(sHsT{dD/X(2" ┕7H3 ٠25H 1&;ccd9E&x:GA%z 蔂|ԀBƊ BPJhRؤ:$% xX VXR(i/l0LEDd@F,9O,gIYXaDCRZbD=h@&ImjcʳY9kjC"8N VjYJyZ4 ࠍώ+å)@>iҚ٪]iFu$0f,kGki+C)_@6LɴnR!(k8w_K)!p~6Ɋ/. iIYnԙ3J&yVF εBM0Ҿ ı^%E B@j"h":i`B(' /:fR.Ք*DQPRFu(z q*Z"L^%,O!r bB&dk)R`v 07BBA)OB*4JlI3!$qJ3T4$"Ya4+ĉo(QHXӡ(G9eE R:PڰL򼔵qJI*iLF)HlS$kA-@"-F#"'"QiI8 k Ҥahc,s+1ڈX (gN )( 3!L9ߑt`bQfj"2Y/k#+$)%K,IFF"XE RKFi(bEЖ#"2Ċd4HGVֲkIy4(V*J4RH!Ů ,HR&EIN>9Q'*&V`+: +"&Uå uDaisd4 U(&ŽL^Wί?L5/1U-eߒ$F2D' EPW_7=]lmd .Sv{'`^K)ѥuVZߚ IJa.1*0$ ASrH-=9'ڳ/S(2])T|sM?Q&&"pslA5 ᎷCr0* }!Ed_x}gU4)L5¬Lɯi #Oh;(@b1s co`^oR6金O㐙Q^AIlI` x3/Wi])ۙ4!hTըi֐kQ+_f}uߐ][.R>`Yg J`y' gL_7XXewBhRj9<)Q/̩@eMlR0 = S&CwNb< ~aK.y W|Q3@65ƙ'ua+yU'l㹤 I8Ll,)lA^ LH ZWAG*S؟xy4xoz:HY㤙,Zڶ8F:\:ONܶ}+Xk@uU +#ǏG~[RIgҿ$W9k! ?ʪZ23k\8Y<ϗp 7 %cmG$o$5@_֨ݕEq07߈ۍ]RoęFH3ٚNN0@L'x|;Ş%S^z]>[HΔ0-Ti_Yqic,k;ikI$cP\4P4Y?Pm _-@_{.]*0֦f9#Yi1v39WK\Xȷ2A!ȑ CFK̢'&ScL %qY/_l'y%`n*͓dkoŗj>kuCz5):RL&UzUӵ@K<+B /ȥ3Si(m$L_ dWJ QPJ7;=B_P9g]8FFu$`tTN?8@?+sz`|zƎr֩P\V GRͩM(۹LDCa6~d)vā2uSyh.({ 7e;Li5"crj*s }sžR:ü΍f'L<HB2vX 8:!0{Vy\Xopi{oTc]'W''ee ]oCۋЇuLlߋ_S חJSZ>e{NM|0ۮY3R _J=Tg#Ft{UⲛFVF+OnUK?FwƇzs7Oҙgj`һZ=R% ?=akOv GMeꊑÛd^KjV `lb}Ok= hj _4D}&OeFz]+Ο;T{pI(~٣x+? @ T/yɷۆNj'g=wP%}(܊)GƝƖinD'CKڮp<>;~el̪w%' g&zusUgفfm6\J tܿ;,;q޽;sﶽ΅/+;70D=7-{'9}A;~zGD?ᦻ\䉙,&es3>Q_0Cnu&-ִcvTsQ[yM]qn_гFM?+O`MF?zϮ~뷣.}[h^y4Ɵ55֏/~"?{Koo (_=m,0g2^w}d|oO]3;?sDBVAԶ|az҇=~c5[vEq$ծgߵ+&+{t}f$sbgmiڸklqh/?7C'mٮǏplWݽ7}|_4&/u|J~Ӭ<ٮEͯGo>X 魏݇=AL"|'Wr@Pv]xEzdzHDu!(?$ݻtȝƯߐsve7}xh_ʿQm6wpS3]uKL~a'[NOc|A{wno$#K&$aٙCgw/@߷e:W,]4Mli_Lc+Pt_3pO6NgehCC_|mY4,㝋Onf@T:ӳv.HKIUp@m3;)v4IFȝ=U w*7;"{lE~p沧ڛ) _VgG{ձsGnۏ[qWwr m?m׷hd>83W&4jp ]œg~E xӯ+O {[Np{hHzٖK Y|`wwǜC7u?DTC*B>] "U(*&}oxپڶWʝ^9=si@2bZĀ劃VE:q3T;tPs``'{~=Sʎ*g t~q{-̱Hfz}}v;exP:MwDSno$n)p gg>1s/lsZu_󎻻 ?a>YSd&\C{IU RR=%f;7 ݼfe7B7߯Jk7޳Y߭ţ!n?Z*Wnhu:@voIqIqc 1 |99_`֜9=SÏ^wx[MϘ%W;u(79v_K>rC[bۆY^g;:x ^9c=X@!7 ŀnzyd^S÷TV.ފ]WnٺwY9;#^2[#F֛ՏYg+O_{^+(o.5fW$89 ®hhOlzr]y6mu oKK_rm`v^52jV IrgI?|j9!r;?ʧ:Rީdbkǫˋ| \U1Dc0,ڀr53sMpxh8!@xhimj6,:^ `ѡsj/|@5X~<2ՠ:_Yq|lrõM溧s~ tNUV\7B=k疞;ʹ౛>[@:7PJc!}y+ '}"KT1oŇvx(;I|O}v=)mMs5/&{uv&,z\~b={ u^<-l>a߲$z~r IDAT >ij'N@ve u Ot3S/nop4?1~m?}KbI9t v6NuևIgT,w^ߢ_lWn:4g\v;?aDmJqRA83GyEk̲dT {TN>io5k̫Rw[m.fg`{;nZ\}dW~ԞmKwvp$3?ܭ;t}Ckhh5_NTEw-O-⮍ V|yc٧^V=t56U*T"k"sPdc,ZDg۱WOOd/8QZ;CYuF; k2C`!Q!*<{ÄnS?O; +.w½fv=tjj9[<##˯y{jf|{._j|u>tq4+J2>vfdG8hn !ٔtXT#il@CŊ*>k2 χjT嫓t:.g55&̜Xudjg4?_:$lSzǧ`W*+Zv~}%3KNŻ[?G*m6/{yHEr]RTڃXHa^?| 3K˱*yWs$qm3exWoh!z+Qift|cd8:4T~}).N˫hx 4 B_Bz ~ a|1B[:l,*>sSj\v/jo!nVvY,vH۳-P~g釛,_mj)7n?ܷܲgngѵ?Cw:9ۻ}"p^vƄYqkZ||_Ez"yBW"EPDH+hexzAj-El Vz"F)Mbă`uڲwnˏp٭'7ߪ;SAZx'lq;:Ǐ?|+rIC˒9muRi>e dh &5Ypݼ.1JrH J JN!拚IՏ֒ Žb ?2T~e{iodU\r._~-S׼:Ɵ]5Sѿ},Ùt}}ʿ39%tO'_T~u|ˏ!t|cMSl|j ǍkvJkR& IZmi5q7[$X-&I"е rԶ|$j{@0suܑmm\snM|exܲtS/sb! ط*K?O,gcלOԣe̗OZh]/ycOe/?v"vK 6V4@L-j)E M:P$BL`#("\hWB $Z)R:Dj*n> A)Sa䵵W:|YR9o7>rǑDt|e&N\殁RfuӏGcGr/o_޹ݍ37=3ε\44_ɄLߵ@{2UC=5n3oO\ h.Z D LB""(QPBM!(j iT+Z-@{R5g!2b-iqGﲳ67̍tvV6tx]s(^ӽ/=w䢫ՊxhۉFd>T%frNzW>D?˯ySlnԭ̔l)wqu y|o r& fD1 p$IraHTN &iQ.,iI ん>{gzMr֣E\חAl~ٹ'ݿ?\in}]ly wb͚tpo)\!}ĩ# ޖ=9og$_P fd?҄)溛ռ:Ee]BD "-iitHӹPpLsoUxg_j|Lkrs:ŽFm{Ӓ\%էz+o/_-ntL/0|3w.96<$$b6zZ}Li@!$BDҢs4y xhܔ6@ܔU/-ҳC73--!?skCWNjgnH/_YP9=Wz?ks &~}mfWʇƾNs[fU0T1qgKӿ6}fi&?i""^/;`.7Nj])MA@*J/pB0C`Bd".@VM@jl=ݒ\[!,ǿMUblexlĊ >ml:P»ζY:B_.nM0ZX8#SJFJj݅D(V-̊y9"PBt+R)EZC}Q+~uX\ mTJ tﺱCζC\x/W-ӥn_sT/wQ`sךz7Uk i;-i f_/d:rQJDZV( 'hM#&#Bza"ĊDԂ`%]w AĪ-\s!fF& 7Tꁉ+N'rݳo}niWIă^2ֹܮ(Ͽp7uZUk;6K?#mfَ̙eZ[H#(R,bZH[ff@A7!<&6@JTkJ+څB@ j4j.\-՚js`)Rͪ A-'x~:yŤb8Nϵ/Z{4d~#ђʕ[6=;8pd#lo ^W^H2ZbPwsH5U!v-GZ|jX.a84}" ֦'XHI /!Vi HSX8q 8մjǻqB" #ԞVtP&*Qffq4:8'f^}y"O^y}Ns51FzpW}VA0=dft Q$'4 PjV^i i}]u|{uBBJ Ѭ hjbP/lmдz mevb)Q \JCt jAvZ fs+_sAYvO^xK Ε<L dԲq(TIczVlB|+ocj0[͘XDZ'1dRΎ?k UK妤ZҺЪ]吞{b.U8\}[r2j4>禧" >|B -/Mܩ[(-E80~zTgz$z0!3oཥXD5a3$1fiCt5 JHVJX"~aדVE^.=9H7ԅiT5^DGTC!~(0BAMP 0]]fV{9xY/3#ZK itER{v|q?)g\7īnq{20/kQHP_Z5#aJH) 4xLD@)$0r nqtZ"RxD 4_T#B@|A^FG SPwS@ vXwp Ja21H``A^p$SrE!pDOtyzLC) N ENAx9*,}Un,BHpAczlZ? `%uJEYIL>\c ,O$hg5jyMm*9 QD@8%H kZ($t*Ԟ (" \7[J+:S/}/o HZj'A@=J=@;>, ML˞x}7VpjY:=O&H ՝Gt Mi Nwx*؃ShMyPj!Yݷׯ#*h" #>!$P:օSs A,wI- <Ѓ0%yJ-_ބO-%BB@@JH_ΎӨAS}d*yQzJrZ4]r VpڥO3iQƜvF &ozyGIR  B_$lTՂL0xLytK!Etf4q$ x2$)J6H|o;w@>)n}xrVz`qnn8V]6 ap`@/PD>][oRH1|!(^^v/4:eGB6 (L@49&Qjh|qmؗ,r@ci~'U,(5PB 8}὾P4Kh 7"Nm-:XBza蜾P)䙤?7X^D+FI%]@BI; nQ殀̸}ci6H|f@vRJ(dt`AzV\/q D.W^h%b _R!tT@^Ԕ>eƒ EqaLL>9"sްa _F7QҎ({[<*L6w/ݞ͏vhCH aQƦy w!s!ZTK棿t mq?߾O۝1{ (rqV[J! I?} 3I!-IN 0Ssa0?1MPN8R:Ӗ0Ɠॽ\wA˳כ ͍w!`!E H!b।^HoG @}L$A 8WC!K hrV#&s ^NŕFR2ݥw#!" )L/K~4<[v}m]7=bA-NbYFVq.x&$ez>Oာ4ݴ'R#@e=!DGRInWw A*$.wD xD#S yH8eB!>"{(+D x@suԏspe'9`1b(KKp;G{to>}mv$M!J1z/(QfN\0DDgSd~<7wRKd Jz%Ę^ެB|7pÍt!t4#@mfޛ[U&j4x97ՠpolB]A(DN `-w2R'pzw"F3Cټ<3OLܿ{F#T)7#9/ar>& Gx|n¦\ҤzxĴ~vge).\&Dh NBpS6gtBT#JWsdPb+=tJ!,<=u0^|;s_ݙirOHx^GA ,Gy3 Y V-DL qgx;.7 HG6+x,Ȯ!˧7*OUG. ?L=ó[ojƨ/w܅{ҧ$+%u ]8o>Z3Z^d_5/vj4Nƒo $F '*No!kzeZ.˻6/u)P{7_9m/_Lx@.@ (A-:NN1誢*&krA:$mapGg1nɽ`Xu?aW?e?E<(pp\u,  Ÿ-A6F}i/I*k-hA tNsMPC('௴`K=( Fb2p9ӨI9U> ? (A"7YΆIUj.ɡ^>Zҽp+-V s.XjȰR ='VQ!( f1. ޞxa|%\/ Piy^");i"Ț0+JX:Z@L|xY%G_lev(J&p} bc|>%0D'qd?.M+%Yj2]H 8Fե04 EyJ[)۟s-Gu!kUE?&@QхC& C&\l1pG (8cOU L*p"]N5Xxj/6jK-&j$`<ʔTj{@ԣnԒؾYm!HR@^4|!Q*þwv?RYδ`NPd{4I\9 Dsc !e Bi}~g ; -Q + 3?6klWh<$&h R6 1JvF;%FN<}L*4A1L"KWr?ak{h~gc\#HΝH-W׾v^F:8`eC Jou8s&~SLLj8ĵTI#kWfyun:be=3 Јע{7'f! :fP,7&NP\4_+ ~?H" TC^T'r`m@| D[!ޔDkKć;|wG(2t(a_DӲX04cۛ}[ߺC 辔;;n=;E=䥒5 r+X7s)H+2@)_c\@Z[jwб~- lUb8D%MIV}C+yhlN:L&?$KfNvYG}SctyY_J4F *&RyGZ_Ζ +r;e 1Fj6[JPْNMYurYÈ͖ObF~T4q=,%%:wrw0'8OXQ3(NSxmII~Ҥ1fMAILT~Ƒzd.>]F]#u̮z{);K 'b j>#Zt\Ugwɩm #Z>g8ѶYv"Mybyps=8 6NjA RhxcMo'^*\# 2)kFɵA7e&ЂZjě\.'rb;8R e;qu)/W2"g绯9V@8|@ _$ՕdZ)`+`guUޱ$ Bft<o>:9bͥY'OlRfs8@ϛ w*~Bdrc$SnL.JXʄuSTy B!ePDO ɣ1t.`uş L 0pc\54(g\ W~.V ľx9RKXGgsn9Y1PY>ج}=56-zXnbm#*q=~{:w jv {/(ep%B" K]vVn7CZwJKۉjPðӟuay_d}x\B:厢}0g0X!+*ddHN kD0EӃm<=Kv]X𰎐Mc&G?rX$a< > )ڟ{?LF,'"E-5#=۫ǥhG^.={([zYW85ڃIRߵ+wN )ɡ][̄lTH^Msfvy1kXLV/)RVe!'h5qQfg񐑫T<=ceE BՀ50'ډݯs_~ d.'ڙĄ:>}ƣb!0[BcaYy/%F;O7ւB0+=- `PVFuY2s3,iW~MC`<'h(0S<Тt0u99<#1Z9O'gZQ DŽȎ $gƔ@1 yIm"@IxE]pKJIuk'|^ǁBb)5V!xBt`(v=#j*=(s >֤:?:KpB)G珿$?>]%l\EVP_nK=)CpաT$2iLJj#dq&hjXN%vl3R ARגJHvP]X' hvbˎ(B|%n@nG]cPG:hb5yc~ѣ1G7-ӀeV70!RU(1B/ z}:;5 K F ϞT}%$-c^~^ ,"L&FgǡUZg&ݭ?7_ٍ9DtկcsLZ|\@ 1BRvԓ5FIx;p+ FΩVԈ8Db >(^VP;HW~/= fkH^Paq4x>^x'qkg  sO*>#kQwwɷ4iu_bVnS.8+Zʁ۟}<Ԣd2`Kᡐ:TBds;vLzp`I?Y#D8@BG|bgA垅hBVB1-1'': 0\s R ?XID IL͝5O<ʫ'+vg>܌!1Os(nM=gA؀Yj+Xy"Tm-'oA8F]1-`"-J>FHBr-Nڸr0q`'|ʎw+h.fdї={kNo|(du* :S ۊ$w;SB[#ӐJOͧ[kJ.9uYcZS_0\FpxQXy #1I$ feC0l1GY?MKy ~.'r]lG}}WIE<OЬlmZ\8ؽpwKXӷ8ƥ V]MKnaθpn<|n(>/{g/}a;eVj׌Q;tҎI09o9jmI؃xSy&+GZEAr7Z +@ cm齭}%Bټ' 18Pèғ_]z+F&r;1Kyihf|+޽xX3TU`J'tf4+x y}We#ZA˟ȫCk<3JKog턡ݥ<#*o3|B?s=pg=pRT%cסƫ$?X45Hj!}-%|YsPs@cQՆefL/*^ $>{Nw|5 +\/l_C]֠f|ƣ,R^ SqDNj_4f5gjxЉO*bm[wPԿx1U 3$k+̮n*U'8OVQF\a 'ζԀ"7/] %BjitgVXavi9h^ޭ]X:(|?V?Mfqӿ$uz"b49v6֠C>*w2ݘ0\~F\veSƒ|7js?ؘDTtO&pE@|F< FHhoskDv@f "#G]䓛|^9f5L$ h,0 xkzkהp-ԋ0PK!7eDLI3jx\8]q"0 ka_/Ć_LOYM#7fnʽ30*ZD= ָF eDtm8/Y7ɏfٟ_ T_2=َ8c<}A9dJ(ꉻI0i3 j'B]987s#}d7@{J'B|w/ԣ7n}NmLJ>KGgfv' 8߯?3b5tke5SIDATm~ZT*ϓ-F|9k}aR~fU5avC%>\sdjr9w+~'I'=߃m_OGOOR]wgڳN|}-Y҄y~ehŒjqSYec7%w]6ܲaZHruզэn6x Rs0xҮ oɍ7k/h^Qֺgj˃ բz8杯@|ޞ;JFH< EkQ᩻|T)k{6^= BK | 'ݷARXh(nuƜ3wǹ r˯}ܙ9h9v6%YnzM0C;)?}f(]18̉F},̝EGEˎokmIM}%r'ߙk1zt Fi; 0 IUI#O3Iq+2'ҙ3 1w甲6;Xl6yDƌqdȭYMKDAOҙe~t@ &m {׫ntG?HG!?Isz֢XK= V3!/s!LsF2LAl3~0BRzf+ݢ ^\ģ;[%<.y +u+QcdIIJ49vwG^1ZÑ;lԙ.i6~Y 9^MLBD?5V! ӹne`%5'Yvo~| yeg~EJ |14vȍj0;\S%ݩm 62|m#ʳ-}G:apgˍ7s~3X1k({0[-H\?G 2{矟^j;o,6lYlq#AaRzEY+IY6^@"wЈ0؅xQ:H>o[uRHnsqa<6m4v1w%=>y-X.C-Pٗ>^|ٙbH]`& Sͭ.'~%jl+goZ~3yCwu̝TS|W4-V:d0j<Gˍ|w~ 7 cn!=sAMT~|bL鸤GA-`z"^Jh.f'ʵ˺Y7SpK9Y nLggy*҉a\R;Jg{1Zr)6AGK'Ll=DIq{NbۉW9!S.mtƅ_n vAB^Ѹ#Wf/WW>3`D{omydVſڳ僔vחƑL}es<)/=˄NE-~l'Tb\c.rTpv8.%[E r0;\_q%⨝#[1WCGR nhɄ h-pQ~ u\}^U r\BnSM"} @]{GʌU]R\o>{Qz{NJm(/ ͬipgwߨvb w BNq_qs୏o콡)8D8ϯ-n{m\ yށ8[q§zHg>n_Vbza߱s(Wd *>uC9X $umalx9V^}1?zA=槲9a}f^HJe \و<رJ6`V;3/CkO?|ؚȮ#OĞApꤸL\F,ZbB]t/r=~㽫W%)m<`,w~HvjA4GYG Xm`\8O>zKhf榑̱u@ ߗ)C8{LUi]s{ӑa}֐Oe2|u3{B?VR}zP'Mp !^^?ʂ5\0-gHLi'^osb.@ER7EfX#Lkyx`C[;7囀l%b&5k+7.Y4;J-??z \/v MΪb掅gs'1PMPeσݻy:dUjXS+Af1ۘs=T {ʹӗ^iaki', WN dE;DpG6;h \ e(H3(mHoѕ>:錈3ѣ28 Κ .q}!mez,ʴo<(yN]V~TSƊ6+5v'}kX-e6o1|IENDB`dmrgpp-6.02/doc/manual.ptex000066400000000000000000001173021414604301300156560ustar00rootroot00000000000000\documentclass{book} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[english]{babel} \usepackage{xcolor} \usepackage{listings} \usepackage{graphicx} \usepackage{fancyvrb} %keep \usepackage{fancyhdr} \usepackage{booktabs} %keep \usepackage{mathtools} %keep \usepackage{hyperref} \fancyhead{} \fancyhead[LE]{\leftmark} \fancyhead[RO]{\rightmark} \cfoot{} \rfoot{\thepage} %exit \hypersetup{colorlinks=true} \newcommand{\cppFile}[1]{\texttt{#1}} \newcommand{\inputItem}[1]{\noindent\texttt{\bf #1} ---} \newcommand{\inputSubItem}[1]{\indent\texttt{\it #1} --} %% Remove the below command before submission \newcommand{\todo}[1]{\textcolor{red}{#1}} %Format to denote a C++ class name: \newcommand{\cppClass}[1]{{\sffamily #1}} %Format to denote a C++ variable: \newcommand{\cppFunction}[1]{{\tt #1}} % for the cover page: \newcommand{\HRule}{\noindent\rule{\linewidth}{1.5pt}} \newcommand{\ptexPaste}[1]{\fbox{\textcolor{red}{PLEASE RUN ptex.pl on this .ptex source to obtain the correct test for tag #1}}} \newcommand{\ptexLabel}[1]{\ptexPaste{#1}} \newcommand{\ptexInterface}[1]{\ptexPaste{#1}} \newcommand{\ptexReadFile}[1]{\ptexPaste{#1}} \newcommand{\ptexReadFileVerbatim}[1]{\ptexPaste{#1}} \hyphenation{Wave-Function-Transformation} \lstset{language=c++,basicstyle=\footnotesize\ttfamily, keywordstyle=\color{blue}\bfseries,frame=shadowbox} \pagestyle{fancy} \begin{document} \begin{titlepage} \vspace*{\stretch{1}} \HRule \begin{flushright} \LARGE DMRG++ v5 Manual\\ \end{flushright} \HRule \vspace*{\stretch{2}} % \begin{center} \Large Manual Version: \today\\ \end{center} \begin{center} \textsc{Oak Ridge, 2018} \end{center} \end{titlepage} % \begin{titlepage} \noindent \begin{minipage}{0.4\textwidth} \begin{flushleft} Gonzalo \textsc{Alvarez}\\ Nanomaterials Theory Institute\\ Oak Ridge National Laboratory\\[0.2cm] Oak Ridge, TN 37831\\ \today \end{flushleft} \end{minipage} \vspace*{\stretch{2}} \noindent %\begin{minipage}{0.6\textwidth} \begin{tiny} \fontshape{sc}\selectfont %\begin{verbatim} \noindent DISCLAIMER\\[0.2cm] THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS.\\[1cm] \fontshape{\shapedefault}\selectfont %\end{verbatim} \end{tiny} %\end{minipage} \noindent \begin{minipage}{0.4\textwidth} Copyright \copyright 2009,\\ UT-Battelle, LLC\\ All rights reserved \end{minipage} \hfill \begin{minipage}{0.4\textwidth} \begin{flushright} \includegraphics[width=3cm]{dmrgV2LogoBW.png} \end{flushright} \end{minipage} \end{titlepage} \tableofcontents \begin{center} \includegraphics[width=2cm]{Under_construction_icon-blue}\\ {\tiny http://commons.wikimedia.org/wiki/File:Under\_construction\_icon-blue.svg} \end{center} \pagebreak \ptexReadFile{../README.md} \chapter{Input}\label{sec:inputfile} \section{Running DMRG++} \ptexPaste{DmrgDriver} Examples of input files can be found under \verb!TestSuite/inputs/! There are three kinds of parameters in the input file: (i) model connections (``geometry'') parameters, (ii) model on-site parameters, and (iii) DMRG Solver parameters. Each type of input parameters is discussed below. \section{SolverOptions} \ptexPaste{dmrgSolverOptions} \section{Geometry Input} This needs to be in PsimagLite. \section{Model Input} The Model parameters vary from model to model. \section{DMRG Solver parameters} \ptexPaste{ParametersDmrgSolver} \subsection{Finite Loops} \ptexPaste{FiniteLoop} \chapter{Output} \section{Standard Output and Error} If you run \begin{verbatim} ./dmrg -f input.inp \end{verbatim} you will see messages printed to the log file. These are processed by the \verb!PsimagLite! class \verb!ProgressIndicator! and are designed to show the DMRG++ progress. All these messages are of the form: \begin{verbatim} Class [T]: Message \end{verbatim} where \verb!Class! is the class that is currently executing and the message hints at what is being executed. The number \verb!T! between brackets is the wall time ellapsed since program start. After the program finishes, all files are put in a tar file. You can obtain the energies with \begin{verbatim} grep -i energy runForinput.cout \end{verbatim} \section{The Disk Stacks} \section{The Wft Data Files} \chapter{Measurements} Both the main dmrg driver and the observe driver (CROSS REFERENCE) may have a whatToMeasure argument as follows. \begin{verbatim} ./dmrg -f input.inp whatToMeasure ./observe -f input.inp whatToMeasure \end{verbatim} \texttt{whatToMeasure} is a comma separated list of braket specifications: \texttt{whatToMeasure = braket spec, braket spec, ...} Braket specifications come in two forms: bare and dressed. \section{Bare braket specification} A bare braket specification is a semicolon-separated list of at least one operator expressions (opExpr) \verb!braket spec=opExpr; opExpr; opExpr; ...! If just one opExpr is given (no semicolon), then the bare braket is referred to as ``local'' or one-point; if two opExpr are given (one semicolon), then the bare braket is refererred to as a two-point correlation; and so on. Bare brakets cannot be computed directly by DMRG++, but must first be dressed with a bra and a ket. What bra and ket is chosen is Targeting and context dependent. Because of this it is recommended to use dressed braket specifications instead. For GroundStateTargeting, bra and ket are both equal to the current target, usually the ground state, sometimes only in \emph{WFT} form. But if restarting a run, the current target can be the state left off by the previous run. For MettsTargeting and TargetingAncilla, \verb!! is computed multiple times at each DMRG step for different bra=ket vectors. These are all the temperature evolved states, and the collapsed state for MettsTargeting. For all other targetings, \verb!! is computed multiple times at each DMRG step for different bra=ket vectors, including the one corresponding to GroundStateTargeting. The other vectors bra=ket are either (i) time vectors for TimeStepTargeting, (ii) dynamic vectors for AdaptiveDynamicTargeting and DynamicTargeting, and (iii) correction vectors for CorrectionVectorTargeting. To be able to compute Green functions, TimeStepTargeting computes \emph{in addition} \verb!! with bra not equal to ket: where bra is the GroundStateTargeting vector, and ket the first time vector. The same is true for CorrectionVectorTargeting, where ket is the correction vector. \section{Dressed braket specification} Operators in braket specifications may be dressed, as follows. \begin{verbatim} ./dmrg -f input.inp ',,...' \end{verbatim} The opsec was described previously.\footnote{What is new here is that bras and kets dress the operators, whereas before, an automatic dressing procedure was used, choosing what bras and kets to use.} The bras and kets must be in the set $\{gs, P0, P1, \cdots\}$. The meaning of $gs$ is context dependent, but often refers to the ground state vector, whether freshly computed or WFTed. ``P0'' is (always?) the first targeted vector other than ``gs'', ``P1'' the next targeted vector, and so on. FIXME: EXPLORE USE OF DRESSED BRAKETS IN ALL NGSTs. Bare and dressed braket specifications may \emph{not} be combined. \section{Operator Expressions} {\textsc An operator expression} is an algebraic expression involving floating point numbers and operator specifications or \texttt{opSpec}s. For example, \begin{verbatim} 3*nup + ndown*(1.5*:sz.txt - 3.5*(c?1'*c?1 + I)). \end{verbatim} A \emph{canonical operator expression} is an operator expression composed of one or more canonical operator terms separated by the plus $+$ sign. A \emph{canonical operator term} is a string that starts with an optional canonical scalar, followed by a star $*$, followed by one or more \texttt{opSpec}s concatenated by starts $*$. A canonical scalar is of one the following forms. \begin{enumerate} \item One or more digits, followed by an optional dot $.$, followed by zero or more digits. For example, $3.5$, $3.$, $3$. \item A dot $.$ followed by one or more digits. For example, $.5$. \item A parenthesis followed by an optional minus sign $-$, followed by a scalar prefix of form (1) or (2) above, and ending in a parenthesis. For example, $(-3.5)$ $(3)$ $(.5)$ $-(.5)$ $(3.)$ $(-3.)$. \end{enumerate} Note that these scalars are \emph{not} canonical: $+3.5$, $(+3.5)$, $-3.5$. The sample expression above in canonical form is \begin{verbatim} 3*nup + 1.5*ndown*:sz.txt + (-3.5)*ndown*c?1'*c?1 + 3.5*ndown*I. \end{verbatim} \textsc{A} \texttt{opExpr} can be used in the following cases. (1) In a bare braket spec: \texttt{braketSpec = opExpr;opExpr;...} (2) In a dressed braket spec: \texttt{braketSpec =} \texttt{}. (3) After the input label \texttt{OperatorExpression=} when \texttt{TSPOperator=expression} is specified. And (4) after the option \verb!-e! in the operator driver. \emph{Only canonical operator expression have been implemented so far.} \section{Operator specifications} There are two kinds of operator specifications: by label and by file. By label, it is given by \verb!name?dof'[site]! Name is mandatory; it is a non-empty string \verb![a-zA-Z_]+!, and if the label ends in underscore \_ then the operator is considered unnatural.\footnote{Unnatural operators aren't yet implemented.} Optionally, a site may be specified by enclosing it in brakets. Optionally, the character ? may be present, and if so, it must be followed by a non-negative integer \verb![0-9]+! that becomes \texttt{dof.} Optionally, a single quote ' may be present at the end, to mean that the whole operator must be transposed. The operator is obtained by calling the model member function \verb!naturalOperator! with arguments \verb!(name,site,dof)! and optionally transposing it. Defaults values of \verb!site! and \verb!dof! are 0. Note that the fermion sign and the $SU(2)$ properties of the resulting operator are determined by the member function in the corresponding model class. By file, it is given by \verb!:filename!, where filename must be a non-empty string. Every occurrence (if any) of the character \$ in filename is replaced by the current site. The resulting string names a file that must exist and be readable by the DMRG++ process owner. The file must contain an operator in file form; the format of this file is given by the following items, in order. \begin{itemize} \ptexPaste{Operator} \end{itemize} \section{The operator Driver}\label{sec:operator} The operator driver may be used to produce an operator by file. \ptexPaste{OperatorDriver} \chapter{Post Processing} \section{The Observer Driver}\label{sec:observe} \ptexPaste{ObserveDriver} \section{The DMRG ToolBox Driver}\label{sec:toolbox} \ptexPaste{ToolboxDriver} \ptexPaste{ToolBoxActions} \chapter{Miscellanea} \section{Restarting a run} \section{The TestSuite} \section{Signals} \ptexPaste{RegisterSignals} \chapter{Developer's Guide} \section{Main Driver} The high level program is this \begin{lstlisting} //! Setup the Model ModelType model(mp,dmrgGeometry); //! Setup the dmrg solver: SolverType dmrgSolver(dmrgSolverParams,model,concurrency); //! Perform DMRG Loops: dmrgSolver.main(); \end{lstlisting} \todo{Graphic showing the template dependencies of the classes} \section{DMRG Engine} \subsection{DMRG Algorithm} Let us define {\it block} to mean a finite set of sites. Let $C$ denote the states of a single site. This set is model dependent. For the Hubbard model it is given by: $C=\{e,\uparrow,\downarrow,(\uparrow,\downarrow)\}$, where $e$ is a formal element that denotes an empty state. For the t-J model it is given by $C=\{e,\uparrow,\downarrow\}$, and for the Heisenberg model by $C=\{\uparrow,\downarrow\}$. A {\it real-space-based Hilbert space} $\mathcal{V}$ on a block $B$ and set $C$ is a Hilbert space with basis $B^{C}$. I will simply denote this as $\mathcal{V}(B)$ and assume that $C$ is implicit and fixed. A {\it real-space-based Hilbert space} can also be thought of as the external product space of $\#B$ Hilbert spaces on a site, one for each site in block $B$. We will consider general Hamiltonians that act on Hilbert spaces $\mathcal{V}$, as previously defined. \ptexPaste{DmrgSolverInfiniteDmrgLoop} \ptexPaste{DmrgSolverFiniteDmrgLoops} The advantage of the DMRG algorithm is that the truncation procedure described above keeps the error bounded and small. Assume $m_S=m_E=m$. At each DMRG step\cite{re:dechiara08} the truncation error $\epsilon_{tr}=\sum_{i>m} \lambda_i$, where $\lambda_i$ are the eigenvalues of the truncated density matrix $\rho_S$ in decreasing order. The parameter $m$ should be chosen such that $\epsilon_{tr}$ remains small, say \cite{re:dechiara08} $\epsilon_{tr}<10^{-6}$. For critical 1D systems $\epsilon_{tr}$ decays as a function of $m$ with a power law, while for 1D system away from criticality it decays exponentially. For a more detailed description of the error introduced by the DMRG truncation in other systems see \cite{re:dechiara08,re:schollwock05,re:hallberg06,re:rodriguez02}. \subsection{Driver Program} Let us motivate the discussion by introducing a typical problem to be solved by DMRG: ``Using the DMRG method, one would like to calculate the local density of states on all sites for a Hubbard model with inhomogeneous Hubbard U values on a one-dimensional (1D) chain''. We want to modularize as many tasks mentioned in the last sentence as possible. We certainly want to separate the DMRG solver from the model in question, since we could later want to do the same calculation for the t-J model; and the model from the lattice, since we might want to do the same calculation on, say, a n-leg ladder, instead of a 1D chain. C++ is a computer language that is very fit for this purpose, since it allows to template classes. Then we can write a C++ class to implement the DMRG method (\cppClass{DmrgSolver} class), and template this class on a strongly-correlated-electron (SCE) model template, so that we can delegate all SCE model related code to the SCE model class. However, for DmrgSolver to be able to use a given SCE model, we need a convention that such SCE model class will have to follow. This is known as a C++ public interface, and for a SCE model it is given in \cppClass{DmrgModelBase}. To do the calculation for a new SCE model, we simply need to implement all functions found in \cppClass{DmrgModelBase} \emph{without} changing the \cppClass{DmrgSolver} class. The model will, in turn, be templated on the geometry. For example, the Hubbard model with inhomogeneous Hubbard U values and inhomogeneous hoppings (class \cppClass{DmrgModelHubbard}) delegates all geometry related operations to a templated geometry class. Then \cppClass{DmrgModelHubbard} can be used for, say, one-dimensional chains and n-leg ladders \emph{without} modification. This is done by just instantiating \cppClass{DmrgModelHubbard} with the appropriate geometry class, either \cppClass{DmrgGeometryOneD} or \cppClass{DmrgGeometryLadder}, or some other class that the reader may wish to write, which implements the interface given in \cppClass{DmrgGeometryBase}. \todo{Add figure showing interfaces} In the following sections I will describe these different modules. Since the reader may wish to first understand how the DMRG method is implemented, I will start with the core C++ classes that implement the method. The user of the program will not need to change these core classes to add functionality. Instead, new models and geometries can be added by creating implementations for \cppClass{DmrgModelBase} and \cppClass{DmrgGeometryBase}, and those public interfaces will be explained next. But for now I end this section by briefly describing the ``driver'' program for a Hubbard model on a 1D chain (see file \verb!dmrg.cpp!). There, \cppClass{DmrgSolver} is instantiated with \cppClass{DmrgModelHubbard}, since in this case one wishes to perform the calculation for the Hubbard model. In turn, \cppClass{DmrgModelHubbard} is instantiated with \cppClass{DmrgGeometryOneD} since now one wishes to perform the calculation on a 1D chain. \todo{Expand the driver explanation} \subsection{DmrgSolver and The ``Infinite'' DMRG Algorithm} The purpose of the \cppClass{DmrgSolver} class is to perform the loop for the DMRG ``infinite algorithm'' discussed before. This class also performs the ``finite algorithm'' \cite{re:schollwock05} to allow for the calculation of static (and in the future dynamic) observables, such as static correlations. The program is structured as a series of header files containing the implementation\footnote{Traditionally, implementation is written in cpp files that are compiled separately. However, here templates are used heavily, and to avoid complications related to templates that some C++ compilers cannot handle, we choose to have only one translation unit.} with each class written in the header file of the same name, and a ``driver'' program that uses the capabilities provided by the header files to solve a specific problem. To simplify the discussion, we start where the ``driver program'' starts, in its \cppFunction{int main()} function, which calls \cppFunction{dmrgSolver.main()}, whose main work is to perform the loop for the ``infinite'' DMRG algorithm. Let us now discuss this loop which is found in the \cppFunction{infiniteDmrgLoop} function, and is sketched in Fig.~\ref{fig:infiniteloop}. \begin{figure} \begin{lstlisting} for (step=0;stepj$). For example $C_{00}=0.5$, $C_{01}=0.426244$, $C_{12}=-0.252775$. The same is done for $N_{ij} = \langle n_{i}n_{j}\rangle$, where $n_i = n_{i\uparrow}+n_{i\downarrow}$, and also for $\langle S_{i}^zS_{j}^z\rangle$ The observer driver (\verb=observe.cpp=) controls what is calculated. Please have a look at it and modify as necessary. \todo{THIS SECTION NEEDS MORE WORK. IN PARTICULAR HOW TO SETUP THE INPUT FILE TO BE ABLE TO PRODUCE DATA FOR THE OBSERVER.} \subsection{Ground State Energy and Error} \subsection{Static Correlations} \subsection{Observables Driver} \section{Time Evolution} \subsection{Time Evolution Input} \begin{itemize} \ptexPaste{TargetParamsTimeVectors} \ptexPaste{TargetParamsCommon} \end{itemize} \section*{LICENSE} \begin{verbatim} \ptexReadFile{../src/LICENSE} \end{verbatim} \bibliographystyle{plain} \bibliography{thesis} \end{document} dmrgpp-6.02/doc/wft-eps-converted-to.pdf000066400000000000000000000227161414604301300201720ustar00rootroot00000000000000%PDF-1.7 %쏢 5 0 obj <> stream xXME3HSTe}duWi3<, =Y^a WgGdd{ǐ_ŝ㋭G =id -PwTj P[%Rk a`}7o XC2`&qZx?Ϸd`|rXĊJN=d9H)M`>YHJr`!e`XA.'QO5Fr* ObhB5pb*B Sj*o'0[OO8q8xXx/ї I>ט"gNJ VCn x"`ڟTKh|z"~+g8\%VaJBo?1{{JȐZ(Xb< /ubDCwtd}}f@Tcȗ' ؕ˫MW[5M`DOxZM@O^B' Cv'H8(xS D2I$^L p$HYّN;<iz;7Ӳ$"=pHcDN9hT"/ c ڨf@JtHZ ,!Q )4^n**3;h0gN*.Fq:3b,ޥ'64s4qU/Mq"i p}Qx%6GFl 7"N^3$EҜȉi*j WF 9%l9'0br$TD`NA WHG:%FܬgC'3P iueێ3&Îv"L2),#U 唝wJ˼jBZ:`ani^~R.:<^5VV XeB应0RFŮwZδX (BjQLQEI[샾Mcy};NRq$uO)]2wHqAse#h#(ȍ o Hmƚsxai CT8dVͧXtRL*4ߴEj׹A:d%6grZWNQd:Y5#syra׭%\UK'nLEKzXA19YL6V~̼G ȏ}CQ8b"ő4:3چt.ɍ+X ҭ;nL(ݸ#7Q|v]d Z)oh!292We@1A3c E~6Y~Bx!ZbKpԭ{%ه$cƄ ;jk5DćBsƈ;!h#=x7Kho~DU6A,MAL5@Z g>J8ɴ*`3YD8(3_ۮuu m#_Z} F{vno92e&~;x|Ea #Qw?_yۍ4c/Waݫ3*g?{|xrO t\>u1_tݿp=9ݿ,+bsCe>%oWϯ?cKa=[ҧØ?W&;Ěϑ1پ>XH!W_ǟ|0o >}IƗwxP*endstream endobj 6 0 obj 2457 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 12 0 obj <> endobj 13 0 obj <> endobj 8 0 obj <> endobj 10 0 obj <> endobj 16 0 obj <> endobj 9 0 obj <> endobj 14 0 obj <
>stream xUkp]!{K:5& ҒĐ0XO6/IFz,dٲd&$ghK!-´i^3 Y~tE;}==2xiu Y|ewn;WRg)6tTvb42IX/ɷJ]C/!%L]j)+f~SȀ \ Ĥ&.-ef=o\J#Qo\)N[i<}7?G0B+S5]7Vle=:ӸpӶJ R?bW7!<,UNmC _EkȖd dtIYwL^sU~΂ )%Ҋ )oT驐D%yPK" oGa3*p̭GĂv^˹ F \> oBY=Jj"{xTeZ"?7׺wm#"cgR :&_.zOsM\'jaƩt˙$'](Oq_Bt8j;0 RW'U7J0FB v{TDc̋}]u7p\ tt:\vlǴP/(Ε\rf(hPV;q_%ֳ/t6$(aw_RR3u75sL=~<(:5:xH>q:癴8FLp1 wwu=ىڑKg':V53 ~${T3gk;v Ӹf +FIhaTpbZwFw-GlZnɧ݃♙}.6^Dġc9J dq ݴ~ g.= ([b&A̳Ne~;l~C8VCCGpzI,gwp(Ck=v'3}؀FRbr?VԶ1jniQ֏*gEn u;;|cǁ1 GXRa- kzX>ZK.mMݮM:ĊoԷ]bZކe'Ư+_ѵ>7UG8{nVk}=Dy^Y7P ?B#[PMo^3# d]R:hTIqu~/%>t<"gWvov`QÙ1PW.$R^6T yzhwxX+pDcÞe|r1ҹ,T;-f]umv$8ٷ> W嵍*\qZ )7Ͽu&d hm.m^*V#lmj/); GYyU2Lj;yS U,tцȁ|npY {Hnÿ$M.ƀ7&itSxKi9hF?tPwTg qQiuIȱAX:J6?qY"<S<;="ȣ }w]vodȣdH{r('!e[e+ԤӉMj5M\Rg29Wm[ "Yk52Kh(O˵[{sGn2& /y9(dWBp¾`XLINn2]@[VE))6v P#3`tpSOv#E:kXxR{)xvرSP7M3..Jv߹=җKC[j2b~ y7χ'ʔ1@$a:`OxOM 9W endstream endobj 11 0 obj <> endobj 15 0 obj <
>stream xmL[e-}7n:`1..K8xӑhAKtʠv27ˀE*S2]"# !%v_?9矓/"Y|ZQ)t"N'P}(v}3> /"=ǢCH2^WOU)}csA^(_K(y} *ʕZQZ"^k%eLZQn{/QJTKjPim$%q$r q܁X$Olֽ34+Jq܋#i3fN>5SXST]&q|y,(u dž ;20uW@ VSPVk~'̇L?_{NyLVr &dI+O\c uå<1R2ͺ3[Hkq~[E\99P7$[hi,a҃#ҞdVq?~'V؛!5놌c]v{mjޢ^Ƒ㥹%޹ A h<øfD0Q duD5$ WUv 4r;7o 8'qW8ڗٟnˤi&M5P .'{[EㆀRv -nZFx*va'vkʂ%PO[p|l'A0>r{!lrȶ6[\9^CSa/2gs'Wʄ A rPuK.Svc&U!9 }:"w>stream 2018-11-29T10:18:10-05:00 2018-11-29T10:18:10-05:00 UnknownApplication Untitled endstream endobj 2 0 obj <>endobj xref 0 18 0000000000 65535 f 0000002772 00000 n 0000009042 00000 n 0000002713 00000 n 0000002562 00000 n 0000000015 00000 n 0000002542 00000 n 0000002837 00000 n 0000002949 00000 n 0000003599 00000 n 0000003294 00000 n 0000006215 00000 n 0000002878 00000 n 0000002908 00000 n 0000003872 00000 n 0000006459 00000 n 0000003471 00000 n 0000007621 00000 n trailer << /Size 18 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 9165 %%EOF dmrgpp-6.02/doc/wft.eps000066400000000000000000000155431414604301300150140ustar00rootroot00000000000000%!PS-Adobe-3.0 EPSF-3.0 %%Title: wft.fig %%Creator: fig2dev Version 3.2.6 %%CreationDate: Wed Jul 12 22:15:47 2017 %%BoundingBox: 0 0 288 339 %Magnification: 1.0000 %%EndComments %%BeginProlog /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def end /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def /pageheader { save newpath 0 339 moveto 0 0 lineto 288 0 lineto 288 339 lineto closepath clip newpath -111.3 369.4 translate 1 -1 scale $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06299 0.06299 sc } bind def /pagefooter { $F2psEnd restore } bind def %%EndProlog pageheader % % Fig objects follow % % % here starts figure with depth 50 % Ellipse 30.000 slw n 2925 3150 274 274 0 360 DrawEllipse gs col2 1.00 shd ef gr gs col2 s gr % Ellipse n 5175 3150 274 274 0 360 DrawEllipse gs col1 1.00 shd ef gr gs col1 s gr % Ellipse n 4050 3150 274 274 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Polyline 0 slj 0 slc [120] 0 sd n 4500 1125 m 4500 5625 l gs col0 s gr [] 0 sd % Polyline n 3600 1125 m 3600 5625 l gs col0 s gr % Polyline [15 120] 120 sd n 1800 3150 m 6300 3150 l gs col0 s gr [] 0 sd % Polyline gs clippath 5301 1155 m 4964 1155 l 4964 1275 l 5301 1275 l 5301 1275 l 5061 1215 l 5301 1155 l cp eoclip n 6165 1215 m 4995 1215 l gs col0 s gr gr % arrowhead n 5301 1155 m 5061 1215 l 5301 1275 l col0 s % Polyline 2 slj n 2700 4050 m 2703 4051 l 2710 4053 l 2721 4057 l 2739 4062 l 2763 4070 l 2793 4079 l 2828 4089 l 2866 4100 l 2906 4112 l 2947 4124 l 2988 4135 l 3027 4146 l 3065 4156 l 3101 4165 l 3134 4173 l 3165 4179 l 3194 4185 l 3221 4190 l 3246 4194 l 3271 4197 l 3294 4199 l 3316 4200 l 3338 4200 l 3361 4200 l 3384 4198 l 3407 4196 l 3430 4192 l 3454 4188 l 3479 4182 l 3505 4175 l 3532 4167 l 3561 4157 l 3591 4147 l 3622 4135 l 3654 4123 l 3686 4110 l 3717 4097 l 3746 4085 l 3770 4074 l 3791 4065 l 3806 4058 l 3817 4054 l 3822 4051 l 3825 4050 l gs col0 s gr % Polyline n 2835 1665 m 2837 1664 l 2841 1662 l 2849 1659 l 2861 1653 l 2878 1645 l 2900 1635 l 2928 1622 l 2961 1606 l 3000 1589 l 3043 1569 l 3090 1548 l 3140 1526 l 3193 1503 l 3247 1479 l 3302 1456 l 3356 1432 l 3410 1410 l 3464 1388 l 3515 1367 l 3565 1348 l 3613 1329 l 3659 1313 l 3703 1297 l 3745 1283 l 3785 1271 l 3823 1259 l 3860 1250 l 3894 1241 l 3928 1234 l 3960 1228 l 3992 1223 l 4022 1219 l 4052 1217 l 4081 1215 l 4110 1215 l 4142 1216 l 4174 1217 l 4205 1221 l 4237 1225 l 4269 1231 l 4301 1239 l 4334 1248 l 4367 1259 l 4402 1272 l 4438 1287 l 4475 1303 l 4513 1321 l 4553 1341 l 4594 1362 l 4636 1385 l 4680 1410 l 4724 1435 l 4768 1461 l 4812 1488 l 4854 1514 l 4895 1540 l 4933 1564 l 4967 1587 l 4998 1606 l 5023 1623 l 5044 1637 l 5060 1648 l 5072 1656 l 5079 1661 l 5083 1664 l 5085 1665 l gs col0 s gr % Polyline n 4005 2070 m 4008 2068 l 4016 2065 l 4029 2059 l 4048 2050 l 4072 2039 l 4102 2027 l 4134 2013 l 4167 1999 l 4201 1985 l 4234 1972 l 4265 1961 l 4294 1950 l 4321 1942 l 4346 1935 l 4370 1929 l 4392 1925 l 4413 1922 l 4434 1921 l 4455 1920 l 4476 1921 l 4497 1922 l 4518 1925 l 4540 1929 l 4564 1935 l 4589 1942 l 4616 1950 l 4645 1961 l 4676 1972 l 4709 1985 l 4743 1999 l 4776 2013 l 4808 2027 l 4838 2039 l 4862 2050 l 4881 2059 l 4894 2065 l 4902 2068 l 4905 2070 l gs col0 s gr % Polyline n 2970 4590 m 2972 4590 l 2976 4591 l 2985 4593 l 2997 4595 l 3016 4598 l 3040 4603 l 3070 4608 l 3105 4614 l 3147 4622 l 3193 4630 l 3243 4638 l 3297 4647 l 3353 4657 l 3411 4666 l 3469 4676 l 3528 4685 l 3586 4694 l 3642 4703 l 3698 4711 l 3751 4719 l 3802 4725 l 3851 4732 l 3898 4737 l 3942 4742 l 3985 4747 l 4025 4750 l 4064 4753 l 4101 4756 l 4136 4757 l 4171 4758 l 4204 4759 l 4236 4759 l 4267 4758 l 4297 4757 l 4328 4755 l 4361 4752 l 4394 4749 l 4427 4745 l 4459 4740 l 4492 4734 l 4525 4727 l 4559 4720 l 4594 4711 l 4629 4701 l 4665 4691 l 4703 4679 l 4742 4666 l 4783 4651 l 4824 4636 l 4867 4620 l 4911 4603 l 4955 4585 l 5000 4567 l 5044 4549 l 5087 4531 l 5128 4513 l 5166 4496 l 5201 4481 l 5231 4468 l 5257 4456 l 5278 4447 l 5294 4439 l 5306 4434 l 5313 4431 l 5317 4429 l 5319 4428 l gs col0 s gr /Times-Roman ff 412.75 scf sf 4275 5850 m gs 1 -1 sc (Prev.) col0 sh gr /Times-Roman ff 412.75 scf sf 3150 5850 m gs 1 -1 sc (Curr.) col0 sh gr /Times-Roman ff 412.75 scf sf 2925 3150 m gs 1 -1 sc (i) col0 sh gr /Times-Roman ff 412.75 scf sf 4050 3150 m gs 1 -1 sc (j) col0 sh gr /Times-Roman ff 412.75 scf sf 5175 3150 m gs 1 -1 sc (k) col0 sh gr /Symbol ff 412.75 scf sf 2700 2475 m gs 1 -1 sc (a) col0 sh gr /Symbol ff 412.75 scf sf 3825 2475 m gs 1 -1 sc (k) col0 sh gr /Symbol ff 412.75 scf sf 2700 3825 m gs 1 -1 sc (e) col0 sh gr /Symbol ff 412.75 scf sf 5175 4050 m gs 1 -1 sc (b) col0 sh gr /Times-Roman ff 317.50 scf sf 2970 2565 m gs 1 -1 sc (p) col0 sh gr /Times-Roman ff 317.50 scf sf 4050 2565 m gs 1 -1 sc (p) col0 sh gr /Symbol ff 412.75 scf sf 3870 3825 m gs 1 -1 sc (k) col0 sh gr /Times-Roman ff 317.50 scf sf 4095 3915 m gs 1 -1 sc (p) col0 sh gr /Symbol ff 412.75 scf sf 3105 4545 m gs 1 -1 sc (a) col0 sh gr /Symbol ff 412.75 scf sf 3870 765 m gs 1 -1 sc (h) col0 sh gr /Times-Roman ff 317.50 scf sf 4140 945 m gs 1 -1 sc (p) col0 sh gr /Symbol ff 412.75 scf sf 4860 2475 m gs 1 -1 sc (b) col0 sh gr /Times-Roman ff 317.50 scf sf 5085 2565 m gs 1 -1 sc (p) col0 sh gr /Symbol ff 412.75 scf sf 4230 1800 m gs 1 -1 sc (g) col0 sh gr /Times-Roman ff 412.75 scf sf 2205 900 m gs 1 -1 sc (System) col0 sh gr /Times-Roman ff 412.75 scf sf 4770 900 m gs 1 -1 sc (Environ) col0 sh gr /Symbol ff 412.75 scf sf 4050 5175 m gs 1 -1 sc (h) col0 sh gr % here ends figure; pagefooter showpage %%Trailer %EOF dmrgpp-6.02/doc/wft.fig000066400000000000000000000040221414604301300147600ustar00rootroot00000000000000#FIG 3.2 Produced by xfig version 3.2.5 Landscape Center Metric A4 100.00 Single -2 1200 2 1 3 0 3 2 2 50 -1 20 0.000 1 0.0000 2925 3150 274 274 2925 3150 3199 3150 1 3 0 3 1 1 50 -1 20 0.000 1 0.0000 5175 3150 274 274 5175 3150 5449 3150 1 3 0 3 4 4 50 -1 20 0.000 1 0.0000 4050 3150 274 274 4050 3150 4324 3150 2 1 1 3 0 7 50 -1 -1 8.000 0 0 -1 0 0 2 4500 1125 4500 5625 2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 3600 1125 3600 5625 2 1 2 3 0 7 50 -1 -1 8.000 0 0 -1 0 0 2 1800 3150 6300 3150 2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 0 0 3.00 120.00 240.00 6165 1215 4995 1215 3 0 0 3 0 7 50 -1 -1 8.000 0 0 0 3 2700 4050 3375 4275 3825 4050 0.000 1.000 0.000 3 0 0 3 0 7 50 -1 -1 8.000 0 0 0 3 2835 1665 4185 990 5085 1665 0.000 1.000 0.000 3 0 0 3 0 7 50 -1 -1 8.000 0 0 0 3 4005 2070 4455 1845 4905 2070 0.000 1.000 0.000 3 0 0 3 0 7 50 -1 -1 8.000 0 0 0 3 2970 4590 4419 4878 5319 4428 0.000 1.000 0.000 4 0 0 50 -1 0 26 0.0000 4 285 915 4275 5850 Prev.\001 4 0 0 50 -1 0 26 0.0000 4 285 915 3150 5850 Curr.\001 4 0 0 50 -1 0 26 0.0000 4 285 120 2925 3150 i\001 4 0 0 50 -1 0 26 0.0000 4 390 120 4050 3150 j\001 4 0 0 50 -1 0 26 0.0000 4 300 225 5175 3150 k\001 4 0 0 50 -1 32 26 0.0000 4 225 270 2700 2475 a\001 4 0 0 50 -1 32 26 0.0000 4 225 240 3825 2475 k\001 4 0 0 50 -1 32 26 0.0000 4 225 195 2700 3825 e\001 4 0 0 50 -1 32 26 0.0000 4 435 240 5175 4050 b\001 4 0 0 50 -1 0 20 0.0000 4 225 165 2970 2565 p\001 4 0 0 50 -1 0 20 0.0000 4 225 165 4050 2565 p\001 4 0 0 50 -1 32 26 0.0000 4 225 240 3870 3825 k\001 4 0 0 50 -1 0 20 0.0000 4 225 165 4095 3915 p\001 4 0 0 50 -1 32 26 0.0000 4 225 270 3105 4545 a\001 4 0 0 50 -1 32 26 0.0000 4 330 270 3870 765 h\001 4 0 0 50 -1 0 20 0.0000 4 225 165 4140 945 p\001 4 0 0 50 -1 32 26 0.0000 4 435 240 4860 2475 b\001 4 0 0 50 -1 0 20 0.0000 4 225 165 5085 2565 p\001 4 0 0 50 -1 32 26 0.0000 4 315 180 4230 1800 g\001 4 0 0 50 -1 0 26 0.0000 4 375 1290 2205 900 System\001 4 0 0 50 -1 0 26 0.0000 4 285 1440 4770 900 Environ\001 4 0 0 50 -1 32 26 0.0000 4 330 270 4050 5175 h\001 dmrgpp-6.02/scripts/000077500000000000000000000000001414604301300144155ustar00rootroot00000000000000dmrgpp-6.02/scripts/AkimaSumBatch.pm000066400000000000000000000035011414604301300174230ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; package AkimaSumBatch; sub main { my ($fh,$start,$end,$points,$root,$total,$ext)=@_; $ext = ".txt" if !defined($ext); #my ($start,$end,$points)=(0,3.0,100); my @x; my @s; my $n = 0; for (my $i=0;$i<$total;$i++) { my $file = getFile($i,$root,$end,$ext); my $outfile = "tmp.txt"; print STDERR "$0: Procing $file This is site=$i...\n"; my $ret = system("./akimaSpline $file $start $end $points > $outfile"); ($ret ==0) or die "./akimaSpline command failed\n"; my @y; $n = loadTwoColumnData(\@x,\@y,$outfile); sumData(\@s,\@y,$n); } printData($fh,\@x,\@s,$n); } sub getFile { my ($i,$root,$end,$ext) = @_; my $j=$i; my $f = "$root$j$ext"; print STDERR "Opening file $f...\n"; open(FILE,$f) or die "$0: Cannot open file $f: $!\n"; print STDERR "$0: in getFile: reading file $f\n"; open(FOUT,">tmp2.txt"); my $firstTime=1; my $prev = -10; my $val = 0; #while() { # last if (/^site/); #} while() { last if (/^#/); my @temp=split; if ($firstTime) { $firstTime=0; if ($temp[0]!=0) { print FOUT "0 $temp[1]\n"; } } # avoid duplicates next if ($prev>=$temp[0]); $prev = $temp[0]; $val = $temp[1]; print FOUT "$temp[0] $temp[1]\n"; } if ($prev<$end) { print FOUT "$end $val\n"; } close(FOUT); close(FILE); return "tmp2.txt"; } sub loadTwoColumnData { my ($x,$y,$file)=@_; my $counter=0; open(FILE,$file) or die "Cannot open file $file: $!\n"; while() { next if (/^#/); my @temp = split; last if ($#temp!=1); $x->[$counter] = $temp[0]; $y->[$counter] = $temp[1]; $counter++; } close(FILE); return $counter; } sub sumData { my ($s,$v,$n)=@_; for (my $i=0;$i<$n;$i++) { $s->[$i] += $v->[$i]; } } sub printData { my ($fh,$x,$s,$n)=@_; for (my $i=0;$i<$n;$i++) { print $fh "$x->[$i] $s->[$i]\n"; } } 1; dmrgpp-6.02/scripts/CollectBrakets.pm000066400000000000000000000024701414604301300176570ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; package CollectBrakets; sub main { my ($filename, $foutname) = @_; open(FILE, "<", $filename) or die "$0: Cannot open $filename : $!\n"; if (!open(FOUT, ">", $foutname)) { close(FILE); die "$0: Cannot write to $foutname : $!\n"; } while () { next if (/^#/); my $line = $_; chomp; my @temp = split; my $n = scalar(@temp); next if ($n != 5); next unless isBraket($temp[3]); print FOUT almostZeroToZero($line); } close(FOUT); close(FILE); } sub almostZeroToZero { my ($x) = @_; $_ = $x; my $hasEol = 0; if (substr($x, -1) eq "\n") { $hasEol = 1; } else { $_ = $x; } my @temp = split; my $ret = ""; my $n = scalar(@temp); for (my $i = 0; $i < $n; ++$i) { $ret .= almost0To0($temp[$i])." "; } return ($hasEol) ? $ret."\n" : $ret; } sub almost0To0 { my ($x) = @_; return $x if (!isFloat($x)); return (abs($x) < 1e-6) ? "0" : $x; } sub isFloat { my ($x) = @_; $_ = $x; return (/^[+-]?(?=\.?\d)\d*\.?\d*(?:e[+-]?\d+)?\z/i); } sub isBraket { my ($x) = @_; my ($bra, $ket); if ($x =~ /^\<(.+)\|.+\|(.+)\>$/) { $bra = $1; $ket = $2; } else { return 0; } (defined($bra) and defined($ket)) or return 0; return (isState($bra) and isState($ket)); } sub isState { my ($s) = @_; return ($s eq "gs" or $s =~ /^P\d+/); } 1; dmrgpp-6.02/scripts/EnergyAncillaInSitu.pm000066400000000000000000000027041414604301300206270ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; package EnergyAncillaInSitu; sub main { my ($beta, $betaLabel, $fin, $fout)=@_; defined($fout) or return; my $minSite = 1; my $minMeas = 0; my $counter = 0; my $sum = 0; my $sum2 = 0; my $meas =0; my $site = -1; my $flag=0; while (<$fin>) { chomp; if (/sites=([^\+]+)\+([^\+]+)/) { my $site1 = $1; my $site2 = $2; $site = $site1; $site-- if ($site1>$site2); $meas++ if ($site==$minSite); } if (/Hamiltonian average at $betaLabel\=([^ ]+) for target\=0 /) { next unless ($1==$beta); next unless ($meas>$minMeas); if (/\=/) { my @temp = split; my $tempSize = scalar(@temp); $tempSize > 1 or die "$0: Wrong line $_\n"; my $energy = $temp[$tempSize-1]; my ($re,$im) = complexCtor($energy); return "$0: $energy is not real\n" unless (abs($im)<1e-6); $sum2 += $re; $flag=1; } } if (/Hamiltonian average at $betaLabel\=([^ ]+) for target\=1 /) { next unless ($flag); $flag=0; $sum += $sum2; print $fout "$counter $sum2 $site\n"; $sum2=0; $counter++; } } return "$0: counter==0\n" if ($counter == 0); $sum /= ($counter); print $fout "#Energy=$sum $counter\n"; print $fout "#".$betaLabel."=$beta\n"; return ""; } sub complexCtor { my ($x) = @_; if ($x=~/\(([^,]+),([^\)]+)\)/) { return ($1,$2); } die "$0: $x is not numeric\n" unless ($x=~/^[0-9e\-\+\.]+$/); return ($x,0); } 1; dmrgpp-6.02/scripts/Fourier.pm000077500000000000000000000034331414604301300163740ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; use Math::Trig; package Fourier; my $pi = Math::Trig::pi; sub printArray { my ($array) = @_; my $n = scalar(@$array); for (my $m = 0; $m < $n; ++$m) { my $q = 2*$pi*$m/$n; print "$q ".$array->[$m]->[0]." ".$array->[$m]->[1]."\n"; } } sub fourierTransform { my ($array) = @_; my $n = scalar(@$array); my @sq; my $c = int($n/2); for (my $m = 0; $m < $n; ++$m) { my ($sumReal, $sumImag) = (0, 0); for (my $i = 0; $i < $n; ++$i) { my $ptr1 = $array->[$i]; for (my $c = 0; $c < $n; ++$c) { my $ptr2 = $array->[$c]; die "$0: undefined for $i \n" if (!defined($ptr1)); die "$0: undefined for $c \n" if (!defined($ptr2)); my $value = ($i < $c) ? $array->[$i]->[$c] : $array->[$c]->[$i]; $sumReal += cos(2*$pi*($i-$c)*$m/$n)*$value; $sumImag += sin(2*$pi*($i-$c)*$m/$n)*$value; } } $sq[$m] = [$sumReal/$n, $sumImag/$n]; } return @sq; } sub loadMatrix { my ($file, $label) = @_; open(FILE, "<", "$file") or die "$0: Cannot open $file : $!\n"; my @m; my $found = 0; while () { next if (/cmdline:/i); if (/^\Q$label/) { $found = 1; last; } } if (!$found) { close(FILE); die "$0: Cannot find $label in $file\n" } $_ = ; chomp; my @temp = split; if (scalar(@temp) != 2) { close(FILE); die "$0: Expected 2 sizes found @temp instead\n"; } my $rows = $temp[0]; my $cols = $temp[1]; while () { chomp; my @temp = split; last if (scalar(@temp) != $cols); #print @temp; #print "\n"; push @m, \@temp; } close(FILE); #print "----------\n"; my $r = scalar(@m); if ($r != $rows) { die "$0: Expected $rows rows but found $r instead\n"; } print STDERR "$0: Read matrix $label from $file with $rows rows and $cols columns.\n"; return @m; } 1; dmrgpp-6.02/scripts/GetTimeObs.pm000066400000000000000000000031271414604301300167600ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; package GetTimeObs; sub main { my ($fh,$site,$file,$whatState,$whatObservable)=@_; my $labelDoubleOcc = "site nupNdown(gs) nupNdown(timevector) time"; my $labelDensity = "site nUp+nDown(gs) nup+ndown(timevector) time"; my $label = $labelDoubleOcc; $label = $labelDensity if ($whatObservable eq "density"); defined($site) or die "$0: Undefined site\n"; defined($file) or die "$0: Undefined file\n"; defined($whatState) or die "$0: Must specify what state gs or time\n"; defined($whatObservable) or die "$0: Must specify what observable (density or nd)\n"; my $stateIndex = 2; $stateIndex = 1 if ($whatState eq "gs"); my $sd = getSuperDensity($site,$file); $sd = 1 if ($whatState eq "gs"); open(FILE,$file) or die "Cannot open file $file: $!\n"; while() { if (/\Q${label}/i) { last; } } my $prevT = -1; while() { next if (/^VectorWithOffsets/); last if (/^#/); if (/SuperDensity.*=\(([^,]+),/) { $sd = $1 unless ($whatState eq "gs"); next; } my @temp=split; last unless $temp[0]=~/^(\d+\.?\d*|\.\d+)$/; # match valid number if ($temp[0]==$site) { my $val = $temp[$stateIndex]; $val =~ s/\(//; $val =~ s/,.*\)//; next if ($prevT == $temp[3]); $prevT = $temp[3]; $val /= $sd; print $fh "$temp[3] $val\n"; } } close(FILE); } sub getSuperDensity { my ($site,$file)=@_; my $sd; open(FILE,$file) or die "Cannot open file $file: $!\n"; while() { if (/SuperDensity.*=\(([^,]+),/) { $sd = $1; last; } } close(FILE); defined $sd or die "SuperDensity is not defined\n"; return $sd; } 1; dmrgpp-6.02/scripts/Honeycomb.pm000066400000000000000000001037171414604301300167070ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; use List::Util qw( min max ); use Math::Trig; use Math::Round; package Honeycomb; my $pi = Math::Trig::pi; my @n1neigh; my @n3neigh; my $plot; my $infoToCreateInput; sub init { my ($templateInput) = @_; my $isAinur = isAinur($templateInput); my @letters = ("x", "y", "z"); my @magnetic = ("BxBxBx", "ByByBy", "BzBzBz"); my @Kit = ("KxKxKx", "KyKyKy", "KzKzKz"); my @Gammas = ("GammaX", "GammaY", "GammaZ"); my @GammaPrimes = ("GammaPrimeX", "GammaPrimeY", "GammaPrimeZ"); my $options = "periodicy"; my ($bx, $by, $bz) = @magnetic; my ($kxkx, $kyky, $kzkz) = @Kit; my ($gammaX, $gammaY, $gammaZ) = @Gammas; my ($gammaPrimeX, $gammaPrimeY, $gammaPrimeZ) = @GammaPrimes; my $printcut = 20; my ($lx, $ly); my ($jx, $jy, $jz) = (0,0,0); my ($j3x, $j3y, $j3z) = (0,0,0); my $model = "UNKNOWN"; my $dopingConcentration = 0; my $dashed = 1; my $withNumbers = 1; my $hoppingsComma = ""; my $hopt = {"Model" => \$model, "#lx" => \$lx, "#ly" => \$ly, "#options" => \$options, "#bx" => \$bx, "#by" => \$by, "#bz" => \$bz, "#kxkx" => \$kxkx, "#kyky" => \$kyky, "#kzkz" => \$kzkz, "#jx" => \$jx, "#jy" => \$jy, "#jz" => \$jz, "#j3x" => \$j3x, "#j3y" => \$j3y, "#j3z" => \$j3z, "#gammax" => \$gammaX, "#gammay" => \$gammaY, "#gammaz" => \$gammaZ, "#gammaPrimeX" => \$gammaPrimeX, "#gammaPrimeY" => \$gammaPrimeY, "#gammaPrimeZ" => \$gammaPrimeZ, "#Hoppings" => \$hoppingsComma, "#printcut" => \$printcut, "#dashed" => \$dashed, "#withNumbers" => \$withNumbers, "#dopingConcentration" => \$dopingConcentration}; getLabels($hopt, $templateInput); $model =~ s/^[ \t]+//; $model =~ s/[ \t]*;*$//; $model =~ s/^\"//; $model =~ s/\"$//; @magnetic = ($bx, $by, $bz); @Kit = ($kxkx, $kyky, $kzkz); @Gammas = ($gammaX, $gammaY, $gammaZ); @GammaPrimes = ($gammaPrimeX, $gammaPrimeY, $gammaPrimeZ); my @heisenbergJ = ($jx, $jy, $jz); my @heisenbergJ3 = ($j3x, $j3y, $j3z); my $isHash = procOptions($options); my $isArmchairX = $isHash->{"isArmchairX"}; my $n = $lx*$ly*2; if ($isArmchairX) { $n = $lx*$ly*4; } my $replaceMagnetic; for (my $dir = 0; $dir < 3; ++$dir) { my $upDir = uc($letters[$dir]); my $type = ($isAinur) ? "vector ": ""; $replaceMagnetic .= getVector("${type}MagneticField$upDir", $n, $magnetic[$dir], $printcut, $isAinur); $replaceMagnetic .= "\n"; } my $withCharge = ($model =~ /WithCharge$/); my @hoppingsByDir = getHoppingsByDir($hoppingsComma, $withCharge); my $inputStruct = {"Kitaev" => \@Kit, "HeisenbergJ" => \@heisenbergJ, "HeisenbergJ3" => \@heisenbergJ3, "Gammas" => \@Gammas, "GammaPrimes" => \@GammaPrimes, "Hoppings" => \@hoppingsByDir, "model" => $model, "dashed" => $dashed, "withNumbers" => $withNumbers}; my ($replaceConnections, $plot) = getConnectionsAndPlot($lx, $ly, $options, $inputStruct, $isAinur); my $nOfTerms = 3; my $modelRoot = $model; $modelRoot =~ s/WithCharge$//; if ($modelRoot eq "Kitaev") { ; } elsif ($modelRoot eq "KitaevExtended") { $nOfTerms = 4; } elsif ($modelRoot eq "KitaevWithGammas") { $nOfTerms = 6; } else { die "$0: Model $model not supported\n"; } ++$nOfTerms if ($withCharge); $infoToCreateInput = {"n" => $n, "replaceMagnetic" => $replaceMagnetic, "replaceConnections" => $replaceConnections, "halfNminusOne" => ($n/2 - 1), "nMinusTwo" => ($n - 2), "nOfTerms" => $nOfTerms, "numberOfElectrons" => Math::Round::round($n*(1-$dopingConcentration))}; my $honey = {"info" => $infoToCreateInput, "plot" => $plot, "n1neigh" => \@n1neigh, "n3neigh" => \@n3neigh}; return $honey; } sub setSiteCoordinates { my ($tindx, $tindy, $ptsx, $ptsy, $ncmatrix, $lx, $ly, $isHash) = @_; my $isArmchairX = $isHash->{"isArmchairX"}; if ($isArmchairX){ armchairSetSiteCoordinates($tindx, $tindy, $ptsx, $ptsy, $ncmatrix, $lx, $ly, $isHash); } else { zigzagSetSiteCoordinates($tindx, $tindy, $ptsx, $ptsy, $ncmatrix, $lx, $ly, $isHash); } } sub honeyGetQ { my ($m1, $m2, $lx, $ly, $type) = @_; my ($b1x, $b1y) = (2*$pi/(3*$lx), 0); my ($b2x, $b2y) = (0, 2*$pi/(sqrt(3)*$ly)); if ($type eq "zigzag") { ($b1x, $b1y) = (2*$pi*sqrt(3)/(3*$lx), -1); ($b2x, $b2y) = (0, 4*$pi/(3*$ly)); } return ($m1 * $b1x + $m2 * $b2x, $m1 * $b1y + $m2 * $b2y); } sub honeySpace { my ($tindx, $tindy, $n, $hptr, $type) = @_; my %isHash = %$hptr; $isHash{"isArmchairX"} = ($type =~ /armchair/i); $isHash{"isLeft"} = ($hptr->{"#options"} =~ /left/i); my (@ptsx, @ptsy, $ncmatrix); my $lx = $hptr->{"#Lx"}; my $ly = $hptr->{"#Ly"}; setSiteCoordinates($tindx, $tindy, \@ptsx, \@ptsy, $ncmatrix, $lx, $ly, \%isHash); } sub fillQvalues { my ($hptr, $type) = @_; my $lx = $hptr->{"#Lx"}; my $ly = $hptr->{"#Ly"}; my ($M1, $M2) = (2*$lx, $ly); my @array; for (my $m1 = 0; $m1 < $M1; ++$m1) { for (my $m2 = 0; $m2 < $M2; ++$m2) { my ($qx, $qy) = honeyGetQ($m1, $m2, $lx, $ly, $type); # choose your path next if ($qy != 0); my $m = $m1 + $m2*$M1; my $temp = { "m" => $m, "q" => $qx}; push @array, $temp; } } return @array; } sub zigzagSetSiteCoordinates { my ($tindx, $tindy, $ptsx, $ptsy, $ncmatrix, $lx, $ly, $isHash) = @_; my $isLeft = $isHash->{"isLeft"}; my ($scalex, $scaley) = (2.0, 4.0/sqrt(3.0)); ### right is the default ### x-scale is scaled by 2 and y is scaled by 4/sqrt(3) my @t1 = (2, 0); #(1.0*$scalex, 0*$scaley); ### [2,0] my @t2 = (1, 2); #(0.5*$scalex,sqrt(3.0)/2.0 *$scaley); ### [1,2] if ($isLeft) { ### x-scale is scaled by 2 and y is scaled by 4/sqrt(3) @t1 = (2, 0); #(1.0*$scalex, 0*$scaley); ### [2,0] @t2 = (1, 2); #(-0.5*$scalex, sqrt(3.0)/2.0 *$scaley); ### [1,2] } my $ncrows = $ncmatrix->{"rows"}; my $counter = 0; for (my $i = 0; $i < $lx; ++$i) { my $xv = $i*$t1[0]; my $txv = $i; my $x0 = $xv; my $y0 = 0; my $tx0 = $txv; my $ty0 = 0; my $sign = ($isLeft) ? -1 : 1; my $x1 = $xv + $sign; my $y1 = 1.0; my $tx1 = $txv + 0.5*$sign; my $ty1 = 0.5/sqrt(3.0); for (my $j = 0; $j < $ly; ++$j) { my $cxa = int($x0 + $j*$t2[0]); my $cxb = int($x1 + $j*$t2[0]); my $cya = int($y0 + $j*$t2[1]); my $cyb = int($y1 + $j*$t2[1]); my $txa = $tx0 + $j*$t2[0]/$scalex; my $txb = $tx1 + $j*$t2[0]/$scalex; my $tya = $ty0 + $j*$t2[1]/$scaley; my $tyb = $ty1 + $j*$t2[1]/$scaley; $tindx->[$counter] = $txa; $tindy->[$counter] = $tya; #print x0, y0, cxa, cya push @$ptsx, $cxa; push @$ptsy, $cya; $ncmatrix->{"data"}->[$cxa + $cya*$ncrows] = $counter++; $tindx->[$counter] = $txb; $tindy->[$counter] = $tyb; push @$ptsx, $cxb; push @$ptsy, $cyb; $ncmatrix->{"data"}->[$cxb + $cyb*$ncrows] = $counter++; } } } sub armchairSetSiteCoordinates { my ($tindx, $tindy, $ptsx, $ptsy, $ncmatrix, $lx, $ly, $isHash) = @_; my $isLeft = $isHash->{"isLeft"}; my ($scalex, $scaley) = (1.0, 2.0/sqrt(3.0)); ### right is the default ### x-scale is scaled by 2 and y is scaled by 4/sqrt(3) my @t1 = (3, 0); #(1.0*$scalex, 0*$scaley); ### [2,0] my @t2 = (0, 2); #(0.5*$scalex,sqrt(3.0)/2.0 *$scaley); ### [1,2] if ($isLeft) { ### x-scale is scaled by 2 and y is scaled by 4/sqrt(3) @t1 = (3, 0); #(1.0*$scalex, 0*$scaley); ### [2,0] @t2 = (0, 2); #(-0.5*$scalex, sqrt(3.0)/2.0 *$scaley); ### [1,2] } my $ncrows = $ncmatrix->{"rows"}; my $counter = 0; for (my $i = 0; $i < $lx; ++$i) { my $xv = $i*4; my $txv = 3*$i; #Sublattice A my $x0 = $xv; my $y0 = 0; my $tx0 = $txv; my $ty0 = 0; #Sublattice B my $sign = ($isLeft) ? -1 : 1; my $x1 = $xv + $sign; my $y1 = 1.0; my $tx1 = $txv + 0.5*$sign; my $ty1 = 1./$scaley; #Sublattice C my $x2 = $xv + 2*$sign; my $y2 = $y1; my $tx2 = $txv + 1.5*$sign; my $ty2 = $ty1; #Sublattice D my $x3 = $xv + 3*$sign; my $y3 = $y0; my $tx3 = $txv + 2*$sign; my $ty3 = $ty0; for (my $j = 0; $j < $ly; ++$j) { my $cxa = int($x0 + $j*$t2[0]); my $cxb = int($x1 + $j*$t2[0]); my $cxc = int($x2 + $j*$t2[0]); my $cxd = int($x3 + $j*$t2[0]); my $cya = int($y0 + $j*$t2[1]); my $cyb = int($y1 + $j*$t2[1]); my $cyc = int($y2 + $j*$t2[1]); my $cyd = int($y3 + $j*$t2[1]); my $txa = $tx0 + $j*$t2[0]/$scalex; my $txb = $tx1 + $j*$t2[0]/$scalex; my $txc = $tx2 + $j*$t2[0]/$scalex; my $txd = $tx3 + $j*$t2[0]/$scalex; my $tya = $ty0 + $j*$t2[1]/$scaley; my $tyb = $ty1 + $j*$t2[1]/$scaley; my $tyc = $ty2 + $j*$t2[1]/$scaley; my $tyd = $ty3 + $j*$t2[1]/$scaley; $tindx->[$counter] = $txa; $tindy->[$counter] = $tya; #print x0, y0, cxa, cya push @$ptsx, $cxa; push @$ptsy, $cya; $ncmatrix->{"data"}->[$cxa + $cya*$ncrows] = $counter++; $tindx->[$counter] = $txb; $tindy->[$counter] = $tyb; push @$ptsx, $cxb; push @$ptsy, $cyb; $ncmatrix->{"data"}->[$cxb + $cyb*$ncrows] = $counter++; $tindx->[$counter] = $txc; $tindy->[$counter] = $tyc; push @$ptsx, $cxc; push @$ptsy, $cyc; $ncmatrix->{"data"}->[$cxc + $cyc*$ncrows] = $counter++; $tindx->[$counter] = $txd; $tindy->[$counter] = $tyd; push @$ptsx, $cxd; push @$ptsy, $cyd; $ncmatrix->{"data"}->[$cxd + $cyd*$ncrows] = $counter++; } } } sub getConnectionsAndPlot { my ($lx, $ly, $options, $inputStruct, $isAinur) = @_; my $n = 2*$lx*$ly; my $gconnections = ""; my $connections = ""; my $isHash = procOptions($options); my $isArmchairX = $isHash->{"isArmchairX"}; if ($isArmchairX){ $n = $lx*$ly*4; } my $withNumbers = $inputStruct->{"withNumbers"}; my $dashed = $inputStruct->{"dashed"}; $plot = honeycomb(\@n1neigh, \@n3neigh, $lx, $ly, $isHash, $dashed, $withNumbers); my $Kit = $inputStruct->{"Kitaev"}; my $heisenbergJ = $inputStruct->{"HeisenbergJ"}; my $heisenbergJ3 = $inputStruct->{"HeisenbergJ3"}; my $Gammas = $inputStruct->{"Gammas"}; my $GammaPrimes = $inputStruct->{"GammaPrimes"}; my $valueOfHoppings = $inputStruct->{"Hoppings"}; my $model = $inputStruct->{"model"}; my $withCharge = ($model =~ /WithCharge$/); my $total = $n*$n; my @hops; for (my $i = 0; $i < $total; ++$i) { $hops[$i] = 0; } for (my $dir = 0; $dir < 3; ++$dir) { my @kthisdir; for (my $i = 0; $i < $total; ++$i) { $kthisdir[$i] = 0; } if ($withCharge and !defined($valueOfHoppings->[$dir])) { die "$0: You set *WithCharge but did not provide a #Hoppings line\n"; } for (my $i = 0; $i < $n; ++$i) { #Kitaev my $j = $n1neigh[$i + $dir*$n]; if (defined($j) and $i < $j) { #my $jx = int($indx[$j]); #my $jy = int($indy[$j]); addSymmetric(\@kthisdir, $i, $j, $n, $Kit->[$dir]); } #Heisenberg for (my $dir2 = 0; $dir2 < 3; ++$dir2) { my $jj = $n1neigh[$i + $dir2*$n]; next unless (defined($jj) and $i < $jj); addSymmetric(\@kthisdir, $i, $jj, $n, $heisenbergJ->[$dir2]); } #Third nearest Heisenberg for (my $dir2 = 0; $dir2 < 3; ++$dir2) { my $jj = $n3neigh[$i + $dir2*$n]; next unless (defined($jj) and $i < $jj); addSymmetric(\@kthisdir, $i, $jj, $n, $heisenbergJ3->[$dir2]); } #Hopping if ($withCharge and defined($j) and $i < $j) { addSymmetric(\@hops, $i, $j, $n, $valueOfHoppings->[$dir]); } } my $kthismatrix = {"data" => \@kthisdir, "rows" => $n, "cols" => $n}; my $mIndex = ($withCharge) ? $dir + 1: $dir; $connections .= getDmrgppMatrix($kthismatrix, $mIndex, $isAinur); $connections .= "\n" unless ($dir == 2); } if ($withCharge) { my $hopMatrix = {"data" => \@hops, "rows" => $n, "cols" => $n}; my $hoppingConnections = getDmrgppMatrix($hopMatrix, 0, $isAinur); # Place hopping first $connections = $hoppingConnections."\n\n".$connections; } for (my $dirGamma = 0; $dirGamma < 3; ++$dirGamma) { my @gammathisdir; for (my $i = 0; $i < $total; ++$i) { $gammathisdir[$i] = 0; } for (my $i = 0; $i < $n; ++$i) { #Gammas my $j = $n1neigh[$i + $dirGamma*$n]; if (defined($j) and $i < $j) { addSymmetric(\@gammathisdir, $i, $j, $n, $Gammas->[$dirGamma]); } #Gamma primes // connects S^dir0 * S^dir1 my ($dir0, $dir1) = findGammaDirections($dirGamma); my $jj = $n1neigh[$i + $dir0*$n]; if (defined($jj) and $i < $jj) { addSymmetric(\@gammathisdir, $i, $jj, $n, $GammaPrimes->[$dir0]); } $jj = $n1neigh[$i + $dir1*$n]; if (defined($jj) and $i < $jj) { addSymmetric(\@gammathisdir, $i, $jj, $n, $GammaPrimes->[$dir1]); } } my $gthismatrix = {"data" => \@gammathisdir, "rows" => $n, "cols" => $n}; my $mIndex = ($withCharge) ? $dirGamma + 3 + 1 : $dirGamma + 3; my $someString = getDmrgppMatrix($gthismatrix, $mIndex, $isAinur); $gconnections .= "$someString"; $gconnections .= "\n" unless ($dirGamma == 2); } if ($model =~ /^KitaevWithGammas/) { $connections .= $gconnections; } return ($connections, $plot); } sub findGammaDirections { my ($dirGamma) = @_; my @dirs; for (my $d = 0; $d < 3; ++$d) { next if ($d == $dirGamma); push @dirs, $d; } my $n = scalar(@dirs); ($n == 2) or die "$0: findGammaDirections failed for dirGamma=$dirGamma\n"; return @dirs; } sub addSymmetric { my ($a, $i, $j, $n, $value) = @_; my $tmp = $a->[$i + $j*$n]; if ($tmp =~ /^[\d\.\-\+e]+$/ and $value =~ /^[\d\.\-\+e]+$/) { $a->[$i + $j*$n] += $value; $a->[$j + $i*$n] += $value; } else { my $extra = ""; if ($tmp eq "0") { $a->[$i + $j*$n] = $a->[$j + $i*$n] = ""; } else { $extra = " + "; } $a->[$i + $j*$n] .= "$extra$value"; $a->[$j + $i*$n] .= "$extra$value"; } } sub getDmrgppMatrix { my ($m, $index, $isAinur) = @_; my $maybeSemicolon = ($isAinur) ? ";" : ""; my $maybeDoubleQuote = ($isAinur) ? "\"" : ""; my $ainurPrefix0 = ($isAinur) ? "gt$index".":" : ""; my $ainurPrefix1 = ($isAinur) ? "string $ainurPrefix0" : ""; if ($index > 7) { # Artificial maximum; need to FIX DMRG++ not this script $ainurPrefix0 = "$ainurPrefix1"; } my $str= <{"rows"}; my $cols = $m->{"cols"}; my $total = $rows*$cols; my $str = ($isAinur) ? "$label=[\n" : "$label $rows $cols\n"; my $maybeComma = ($isAinur) ? "," : ""; for (my $i = 0; $i < $total; ++$i) { my $value = $m->{"data"}->[$i]; defined($value) or die "$i\n"; $str .= "[" if ($isAinur and ($i % $cols) == 0); $str .= "$value "; if (($i + 1) % $cols == 0) { if ($isAinur) { $str .= "]"; $str .= "," if ($i + 1 < $total); } $str .= "\n"; } else { $str .= "$maybeComma " if ($i + 1 != $total); } } $str .= "];" if ($isAinur); return "$str\n"; } sub procOptions { my ($options) = @_; my $isPeriodicX = ($options =~ /periodicx/i); my $isPeriodicY = ($options =~ /periodicy/i); my $isArmchairX = ($options =~ /armchairx/i); my $isLeft = ($options =~ /left/i); return {"isPeriodicX" => $isPeriodicX, "isPeriodicY" => $isPeriodicY, "isArmchairX" => $isArmchairX, "isLeft" => $isLeft}; } sub honeycomb { my ($n1neigh, $n3neigh, $lx, $ly, $isHash, $dashed, $withNumbers) = @_; my $isPeriodicX = $isHash->{"isPeriodicX"}; my $isPeriodicY = $isHash->{"isPeriodicY"}; my $isArmchairX = $isHash->{"isArmchairX"}; my $isLeft = $isHash->{"isLeft"}; my $n = $lx*$ly*2; my $ncrows = $lx*2 + $ly; my $nccols = $ly*2; if ($isArmchairX){ $n = $lx*$ly*4; $ncrows = $lx*4 + $ly; $nccols = $ly*2; } my @indx; my @indy; my @nc; my @tindx; my @tindy; my @ptsx; my @ptsy; my $ncmatrix = {"data" => \@nc, "rows" => $ncrows, "cols" => $nccols}; print "\nncrows=", $ncrows, ", nccols=", $nccols,"\n"; setSiteCoordinates(\@tindx, \@tindy, \@ptsx, \@ptsy, $ncmatrix, $lx, $ly, $isHash, $dashed); #### =============================================== my $xmax = List::Util::max @ptsx; my $ymax = List::Util::max @ptsy; for (my $i = 0; $i < $n; ++$i) { $indx[$i] = int($ptsx[$i]); $indy[$i] = int($ptsy[$i]); } my $n1neighrows = $n; my $n1neighcols = 3; my $n3neighrows = $n; my $n3neighcols = 3; my $n1neighmatrix = {"data" => $n1neigh, "rows" => $n1neighrows, "cols" => $n1neighcols}; my $n3neighmatrix = {"data" => $n3neigh, "rows" => $n3neighrows, "cols" => $n3neighcols}; my $otherArgs = {"isHash" => $isHash, "lx" => $lx, "ly" => $ly, "dashed" => $dashed, "withNumbers" => $withNumbers}; if ($isArmchairX){ armchairSetNeigh($n1neighmatrix, $lx, $ly, $isHash, \@indx, \@indy, $ncmatrix, $xmax, $ymax); armchairSetThirdNeigh($n3neighmatrix, $lx, $ly, $isHash, \@indx, \@indy, $ncmatrix, $xmax, $ymax); return "" unless defined($dashed); return armchairPlot(\@indx, \@indy, \@tindx, \@tindy, $n1neighmatrix, $ncmatrix, $otherArgs); } else { zigzagSetNeigh($n1neighmatrix, $lx, $ly, $isHash, \@indx, \@indy, $ncmatrix, $xmax, $ymax); zigzagSetThirdNeigh($n3neighmatrix, $lx, $ly, $isHash, \@indx, \@indy, $ncmatrix, $xmax, $ymax); return "" unless defined($dashed); return zigzagPlot(\@indx, \@indy, \@tindx, \@tindy, $n1neighmatrix, $ncmatrix, $otherArgs) } } sub zigzagSetNeigh { my ($n1neighmatrix, $lx, $ly, $isHash, $indx, $indy, $ncmatrix, $xmax, $ymax) = @_; my $isPeriodicX = $isHash->{"isPeriodicX"}; my $isPeriodicY = $isHash->{"isPeriodicY"}; my $isArmchairX = $isHash->{"isArmchairX"}; my $isLeft = $isHash->{"isLeft"}; #for NN bonds X=(1,1), Y=(1,-1), Z=(0,1): my @dirx = (1, 1, 0); my @diry = (1, -1, 1); my @ylimit = (1, 0, 1); my $n = 2*$lx*$ly; for (my $dir = 0; $dir < 3; ++$dir) { for (my $i = 0; $i < $n; ++$i) { my $ix = int($indx->[$i]); my $iy = int($indy->[$i]); my $mx = int($ix + $dirx[$dir]); # 1 1 0 my $my = int($iy + $diry[$dir]); # 1 -1 1 if ($mx < $xmax + $dirx[$dir] and $my < $ymax + $ylimit[$dir] and $my >= 0 and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n1neighmatrix, $i, $dir, $j); setMatrixElem($n1neighmatrix, $j, $dir, $i); } if ($dir == 2) { if ($isPeriodicY and !$isLeft) { $mx = int($ix - $ly); $my = 0; if ($mx < $xmax and $iy == $ymax and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n1neighmatrix, $i, 2, $j); setMatrixElem($n1neighmatrix, $j, 2, $i); } } elsif ($isPeriodicY and $isLeft) { $mx = int($ix + $ly); $my = 0; if ($mx < $xmax + 1 and $iy == $ymax and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n1neighmatrix, $i, 2, $j); setMatrixElem($n1neighmatrix, $j, 2, $i); } } } elsif ($dir == 1) { if ($isPeriodicX and !$isLeft and !($iy & 1)) { $mx = int($ix + $lx*2 - 1); $my = int($iy + 1); if ($mx < $xmax + 1 and $iy < $ymax + 1 and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n1neighmatrix, $i, 1, $j); setMatrixElem($n1neighmatrix, $j, 1, $i); } } } elsif ($dir == 0) { if ($isPeriodicX and $isLeft and ($iy & 1) and getMatrixElem($ncmatrix, $mx, $my) < $ly*2) { $mx = int($ix + $lx*2 - 1); $my = int($iy - 1); if ($mx < $xmax + 1 and $iy < $ymax + 1 and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n1neighmatrix, $i, 0, $j); setMatrixElem($n1neighmatrix, $j, 0, $i); } } } } } } sub zigzagSetThirdNeigh { my ($n3neighmatrix, $lx, $ly, $isHash, $indx, $indy, $ncmatrix, $xmax, $ymax) = @_; my $isPeriodicX = $isHash->{"isPeriodicX"}; my $isPeriodicY = $isHash->{"isPeriodicY"}; my $isArmchairX = $isHash->{"isArmchairX"}; my $isLeft = $isHash->{"isLeft"}; #for NNNN bonds X3=(-2,-1), Y3=(+2,-1), Z3=(0,-3): my @dirx = (2, 2, 0); my @diry = (1, -1, 3); my @ylimit = (1, 0, 3); my $n = scalar(@$indx); if($isPeriodicX) { print("\n\nPeriodicX not yet supported with J3.\n\n\n"); } for (my $dir = 0; $dir < 3; ++$dir) { for (my $i = 0; $i < $n; ++$i) { my $ix = int($indx->[$i]); my $iy = int($indy->[$i]); my $mx = int($ix + $dirx[$dir]); # 2 2 0 my $my = int($iy + $diry[$dir]); # 1 -1 3 if ($mx < $xmax + $dirx[$dir] and $my < $ymax + $ylimit[$dir] and $my >= 0 and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, $dir, $j); setMatrixElem($n3neighmatrix, $j, $dir, $i); } if ($dir == 2) { if ($isPeriodicY and !$isLeft) { $mx = int($ix - $ly); $my = 1; if ($mx < $xmax and $iy == (-1+$ymax) and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, 2, $j); setMatrixElem($n3neighmatrix, $j, 2, $i); } } elsif ($isPeriodicY and $isLeft) { $mx = int($ix + $ly); $my = 1; if ($mx < $xmax + 1 and $iy == (-1+$ymax) and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, 2, $j); setMatrixElem($n3neighmatrix, $j, 2, $i); } } } elsif ($dir == 1) { if ($isPeriodicY and !$isLeft) { $mx = int($ix + $ly + 2); $my = int($ymax); if ($mx < $xmax + 1 and ($iy == 0) and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, 1, $j); setMatrixElem($n3neighmatrix, $j, 1, $i); } } } elsif ($dir == 0) { if ($isPeriodicY and !$isLeft) { $mx = int($ix - $ly + 2); $my = int(0); if ($mx >= 0 and ($iy == $ymax) and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, 0, $j); setMatrixElem($n3neighmatrix, $j, 0, $i); } } } } } } sub armchairSetNeigh { my ($n1neighmatrix, $lx, $ly, $isHash, $indx, $indy, $ncmatrix, $xmax, $ymax) = @_; my $isPeriodicX = $isHash->{"isPeriodicX"}; my $isPeriodicY = $isHash->{"isPeriodicY"}; my $isArmchairX = $isHash->{"isArmchairX"}; my $isLeft = $isHash->{"isLeft"}; #for NN bonds X=..., Y=..., Z=...: my @dirx = (1, 1, 1); my @diry = (-1, 1, 0); my @xlimit = (1, 1, 1); my @ylimit = (1, 1, 0); my $n = scalar(@$indx); print "\nxmax=", $xmax; print "\nymax=", $ymax; for (my $dir = 0; $dir < 3; ++$dir) { print "\n=====NEW DIRECTION=====\n"; for (my $i = 0; $i < $n; ++$i) { my $ix = int($indx->[$i]); my $iy = int($indy->[$i]); my $mx = int($ix + $dirx[$dir]); # my $my = int($iy + $diry[$dir]); # print "\n"; print $i, " ", $ix, " ", $iy, " ", $mx, " ", $my; print "\n"; if ($mx < $xmax + $dirx[$dir] and $my <= $ymax + $ylimit[$dir] and $my >= 0 and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); print $i, " ", $j, "\n"; setMatrixElem($n1neighmatrix, $i, $dir, $j); setMatrixElem($n1neighmatrix, $j, $dir, $i); } if ($dir == 0) { if ($isPeriodicY) { $mx = int($ix-1); $my = 0; if ($mx < $xmax and $iy == ($ymax) and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); print "\nheyo0, ix=",$ix, " iy=",$iy," mx=",$mx," my=",$my,"\n"; print $i, " ", $j, "\n"; setMatrixElem($n1neighmatrix, $i, 0, $j); setMatrixElem($n1neighmatrix, $j, 0, $i); } } } elsif ($dir == 1) { if ($isPeriodicY) { $mx = int($ix+1); $my = 0; if ($mx <= $xmax and $iy == ($ymax) and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); print "\nheyo1, ix=",$ix, " iy=",$iy," mx=",$mx," my=",$my,"\n"; print $i, " ", $j, "\n"; setMatrixElem($n1neighmatrix, $i, 1, $j); setMatrixElem($n1neighmatrix, $j, 1, $i); } } } elsif ($dir == 2) { if ($isPeriodicX and $ix>0) { $mx = 0; $my = int($iy); if ($ix == $xmax and $iy < ($ymax) and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); print "\nheyo1, ix=",$ix, " iy=",$iy," mx=",$mx," my=",$my,"\n"; print $i, " ", $j, "\n"; setMatrixElem($n1neighmatrix, $i, 2, $j); setMatrixElem($n1neighmatrix, $j, 2, $i); } } } } } } sub armchairSetThirdNeigh { my ($n3neighmatrix, $lx, $ly, $isHash, $indx, $indy, $ncmatrix, $xmax, $ymax) = @_; my $isPeriodicX = $isHash->{"isPeriodicX"}; my $isPeriodicY = $isHash->{"isPeriodicY"}; my $isArmchairX = $isHash->{"isArmchairX"}; my $isLeft = $isHash->{"isLeft"}; #for NNNN bonds X3=(+1,-2), Y3=(+1,+2), Z3=(+3,0): my @dirx = (1, 1, 3); my @diry = (-2, 2, 0); my @ylimit = (2, 1, 1); my $n = scalar(@$indx); for (my $dir = 0; $dir < 3; ++$dir) { for (my $i = 0; $i < $n; ++$i) { my $ix = int($indx->[$i]); my $iy = int($indy->[$i]); my $mx = int($ix + $dirx[$dir]); # 1 1 3 my $my = int($iy + $diry[$dir]); # -2 2 0 if ($mx < $xmax + $dirx[$dir] and $my < $ymax + $ylimit[$dir] and $my >= 0 and defined(getMatrixElem($ncmatrix, $mx, $my))) { my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, $dir, $j); setMatrixElem($n3neighmatrix, $j, $dir, $i); } if ($dir == 2) { if ($isPeriodicX and ($ix == 1 ) ){ $mx = int(4*$lx - 2); $my = $iy; my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, 2, $j); setMatrixElem($n3neighmatrix, $j, 2, $i); } } elsif ($dir == 1) { if ($isPeriodicX and $ix == $xmax and $my < $ymax + $ylimit[$dir] and $my >= 0) { $mx = 0; my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, 1, $j); setMatrixElem($n3neighmatrix, $j, 1, $i); } elsif ($isPeriodicY and $iy == $ymax and ($ix & 1) and $mx < $xmax and $mx >= 0) { $my = 1; my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, 1, $j); setMatrixElem($n3neighmatrix, $j, 1, $i); } elsif ($isPeriodicY and $iy == $ymax-1 and ($ix & 1) and $mx < $xmax and $mx > 0) { $my = 0; my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, 1, $j); setMatrixElem($n3neighmatrix, $j, 1, $i); } elsif ($isPeriodicX and $isPeriodicY and $iy >= $ymax-1 and ($ix & 1) and $ix >= $xmax -1) { $mx = int($ix + 1 - 4*$lx); $my = int($iy + 2 - 2*$ly); my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, 1, $j); setMatrixElem($n3neighmatrix, $j, 1, $i); } } elsif ($dir == 0) { if ($isPeriodicX and $ix == $xmax and $my < $ymax + $ylimit[$dir] and $my >= 0) { $mx = 0; my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, 0, $j); setMatrixElem($n3neighmatrix, $j, 0, $i); } elsif ($isPeriodicY and $iy >= $ymax-1 and !($ix & 1) and $ix < $xmax and $ix-1 >= 0) { $mx = int($ix -1); $my = int($iy + 2 - 2*$ly); my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, 0, $j); setMatrixElem($n3neighmatrix, $j, 0, $i); } elsif ($isPeriodicX and $isPeriodicY and $iy-2 < 0){ $mx = int($ix + 1 - 4*$lx); $my = int($iy - 2 + 2*$ly); my $j = int(getMatrixElem($ncmatrix, $mx, $my)); setMatrixElem($n3neighmatrix, $i, 0, $j); setMatrixElem($n3neighmatrix, $j, 0, $i); } } } } } sub zigzagPlot { my ($indx, $indy, $tindx, $tindy, $n1neighmatrix, $ncmatrix, $otherArgs) = @_; my $isHash = $otherArgs->{"isHash"}; my $lx = $otherArgs->{"lx"}; my $ly = $otherArgs->{"ly"}; my $withNumbers = $otherArgs->{"withNumbers"}; my $dashed = $otherArgs->{"dashed"}; my $str = ""; my $tindyMax = List::Util::max @$tindy; my $tindyMin = List::Util::min @$tindy; my $n = scalar(@$indx); for (my $i = 0; $i < $n; ++$i) { my $sqix = int($indx->[$i]); my $sqiy = int($indy->[$i]); my $ix = $tindx->[$i]; my $iy = $tindy->[$i]; my $ymove = 1.0; my $e0 = getMatrixElem($n1neighmatrix, $i, 0); if (defined($e0)) { my $jx = $tindx->[$e0]; my $jy = $tindy->[$e0]; my $enc = getMatrixElem($ncmatrix, $sqix, $sqiy); if ($isHash->{"isLeft"}) { if ($enc < $ly*2 or $enc > $n - $ly*2 - 1) { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle1"); } else { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle2"); } } else { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle2"); } } my $e1 = getMatrixElem($n1neighmatrix, $i, 1); if( defined($e1)) { my $jx = $tindx->[$e1]; my $jy = $tindy->[$e1]; if (!$isHash->{"isLeft"}) { if($i < $ly*2 - 1 and !($i & 1)) { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle3"); } elsif ($i < $ly*2 - 1 or $i > $n - $ly*2) { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle3"); } else { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle4"); } } else { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle4"); } } my $e2 = getMatrixElem($n1neighmatrix, $i, 2); if( defined($e2)) { my $jx = $tindx->[$e2]; my $jy = $tindy->[$e2]; if ($iy == $tindyMax) { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle5") if ($dashed); } elsif ($iy == $tindyMin) { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle5") if ($dashed); } else { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle6"); } } } for (my $i = 0; $i < $n; ++$i) { my $sqix = int($indx->[$i]); my $sqiy = int($indy->[$i]); my $ix = $tindx->[$i]; my $iy = $tindy->[$i]; $str .= plotNode($ix, $iy, 0.07, "$i", $withNumbers); } return $str; } sub armchairPlot { my ($indx, $indy, $tindx, $tindy, $n1neighmatrix, $ncmatrix, $otherArgs) = @_; my $isHash = $otherArgs->{"isHash"}; my $lx = $otherArgs->{"lx"}; my $ly = $otherArgs->{"ly"}; my $withNumbers = $otherArgs->{"withNumbers"}; my $str = ""; my $tindyMax = List::Util::max @$tindy; my $tindyMin = List::Util::min @$tindy; my $tindxMax = List::Util::max @$tindx; my $tindxMin = List::Util::min @$tindx; my $isArmchairX = $isHash->{"isArmchairX"}; my $n = ($isArmchairX) ? 4*$lx*$ly : 2*$lx*$ly; for (my $i = 0; $i < $n; ++$i) { my $sqix = int($indx->[$i]); my $sqiy = int($indy->[$i]); my $ix = $tindx->[$i]; my $iy = $tindy->[$i]; my $ymove = 1.0; my $e0 = getMatrixElem($n1neighmatrix, $i, 0); if (defined($e0)) { my $jx = $tindx->[$e0]; my $jy = $tindy->[$e0]; my $enc = getMatrixElem($ncmatrix, $sqix, $sqiy); if (($iy == $tindyMax and ($i & 1)) or ($iy == $tindyMin and !($i & 1))){ $str .= plotLine($ix, $jx, $iy, $jy, "mystyle1"); } else { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle2"); } } my $e1 = getMatrixElem($n1neighmatrix, $i, 1); if( defined($e1)) { my $jx = $tindx->[$e1]; my $jy = $tindy->[$e1]; if (($iy == $tindyMax and !($i & 1)) or ($iy == $tindyMin and ($i & 1))){ $str .= plotLine($ix, $jx, $iy, $jy, "mystyle3"); } else { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle4"); } } my $e2 = getMatrixElem($n1neighmatrix, $i, 2); if( defined($e2)) { my $jx = $tindx->[$e2]; my $jy = $tindy->[$e2]; print "\ni=",$i,", jx=",$jx,", jy=",$jy; if ($ix == $tindxMax or $ix == $tindxMin) { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle7"); } else { $str .= plotLine($ix, $jx, $iy, $jy, "mystyle6"); } } } for (my $i = 0; $i < $n; ++$i) { my $sqix = int($indx->[$i]); my $sqiy = int($indy->[$i]); my $ix = $tindx->[$i]; my $iy = $tindy->[$i]; $str .= plotNode($ix, $iy, 0.07, "$i", $withNumbers); } return $str; } sub plotLine { my ($ix, $jx, $iy, $jy, $style) = @_; my $cix = sprintf("%.2f", $ix); my $ciy = sprintf("%.2f", $iy); my $cjx = sprintf("%.2f", $jx); my $cjy = sprintf("%.2f", $jy); return "\\draw[$style] ($cix, $ciy) -- ($cjx, $cjy);\n" } sub plotNode { my ($ix, $iy, $radius, $label, $withNumbers) = @_; my $cix = sprintf("%.2f", $ix); my $ciy = sprintf("%.2f", $iy); my $prespx = ($label < 10) ? 0.2 : 0.3; my $spx = ($label & 1) ? $prespx : -0.28; my $spy = ($label & 1) ? 0.02 : -0.02; my $str = "\\draw[mystycir] ($cix, $ciy) circle ($radius);\n"; if ($withNumbers) { $str .= "\\node at ($cix + $spx, $ciy + $spy) {\\tiny $label };\n"; } return $str; } sub getHoppingsByDir { my ($hoppingsComma, $withCharge) = @_; return () if (!$withCharge); my @a = split/,/, $hoppingsComma; return @a; } sub getMatrixElem { my ($a, $mx, $my) = @_; return $a->{"data"}->[$mx + $my*$a->{"rows"}]; } sub setMatrixElem { my ($a, $mx, $my, $val) = @_; $a->{"data"}->[$mx + $my*$a->{"rows"}] = $val; } sub getLabels { my ($hptr,$file) = @_; open(FILE,$file) or die "$0: Cannot open $file : $!\n"; while () { chomp; foreach my $key (keys %$hptr) { if (/$key[= ]([^ ]+)/) { ${$hptr->{$key}} = $1; } } } close(FILE); foreach my $key (keys %$hptr) { my $x = ${$hptr->{$key}}; defined($x) or die "$0: Could not find $key in $file\n"; } } sub isAinur { my ($file) = @_; open(FILE, "<", "$file") or die "$0: Cannot open $file : $!\n"; $_ = ; close(FILE); chomp; return $_ eq "##Ainur1.0"; } 1; dmrgpp-6.02/scripts/Metts.pm000066400000000000000000000056721414604301300160610ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; package Metts; sub energy { my ($beta,$betaLabel,$option,$fin) = @_; defined($fin) or die "Metts::energy beta label option fin\n"; my $minSite = 1; my $minMeas = 0; my $counter = 0; my $sum = 0; my $sum2 = 0; my $meas =0; my $site = -1; my $flag=0; while (<$fin>) { if (/sites=([^\+])\+([^\+])/) { my $site1 = $1; my $site2 = $2; $site = $site1; $site-- if ($site1>$site2); $meas++ if ($site==$minSite); } if (/Hamiltonian average at $betaLabel\=([^ ]+) for target\=0 /) { next unless ($1==$beta); next unless ($meas>$minMeas); next unless ($site==$minSite); if (/\=([^ ]+) /) { my $energy = $1; my ($re,$im) = complexCtor($energy); die "$0: $energy is not real\n" unless (abs($im)<1e-6); $sum2 += $re; $flag=1; } } if (/Hamiltonian average at $betaLabel\=([^ ]+) for target\=1 /) { next unless ($flag); $flag=0; $sum += $sum2; print "$counter $sum2 $site\n" if ($option); $sum2=0; $counter++; } } die "$0: counter==0\n" if ($counter==0); $sum /= ($counter); return ($sum, $counter); } sub density { my ($beta,$label,$option,$fin)=@_; defined($fin) or die "Metts::density: beta label option fin\n"; #print STDERR "$beta $label $option\n"; my $minSite = 1000; my $maxSite = 0; my @value; my @value2; my @counter; while(<$fin>) { next unless (/\Q$label/); my @temp=split; (scalar(@temp) > 2) or next; my $site = $temp[0]; my $val = $temp[1]; my $t = $temp[2]; next unless ($t == $beta); if (!defined($counter[$site])) { $counter[$site]=0; } else { $counter[$site]++; } $value[$site][$counter[$site]]=$val; $minSite = $site if ($site<$minSite); $maxSite = $site if ($site>$maxSite); } my $total = $counter[1]; my ($denominator,$average)=(0,0); defined($total) or die "$0: No data found\n"; for (my $i=0;$i<$total;$i++) { my $sum = 0; my $exitHere = 0; for (my $site=$minSite;$site<=$maxSite;$site++) { $_ = $value[$site][$i]; if (!defined($_)) { $exitHere=1; last; } $sum += $_; } last if ($exitHere); print "$i $sum " if ($option); $average += $sum; $denominator++; for (my $site=$minSite;$site<=$maxSite;$site++) { $_ = $value[$site][$i]; $_ = 0 if (!defined($_)); print "$_ " if ($option); } print "\n" if ($option); } ($denominator>0) or die "$0: No data found yet\n"; $average /= $denominator; return ($average, $total); } sub load { my ($file) = @_; my %h; open(FILE, "$file") or return %h; while () { # label= values next unless (/=/); my @temp = split(/=/); (scalar(@temp) == 2) or next; my $label = $temp[0]; $_ = $temp[1]; my @values = split; $h{"$label"} = \@values; } close(FILE); return %h; } sub complexCtor { my ($x) = @_; if ($x=~/\(([^,]+),([^\)]+)\)/) { return ($1,$2); } die "$0: $x is not numeric\n" unless ($x=~/^[0-9e\-\+\.]+$/); return ($x,0); } 1; dmrgpp-6.02/scripts/Ndollar.pm000066400000000000000000000017631414604301300163550ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; package Ndollar; sub main { my ($file) = @_; defined($file) or die "USAGE: $0 file\n"; my $label = "site time"; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; while () { last if (/\Q$label/); } my @values; while () { chomp; my @temp = split; (scalar(@temp) == 3) or next; my $site = $temp[0]; ($site =~ /^\d+$/) or next; $values[$site] = $temp[1]; } close(FILE); my $n = scalar(@values); print STDERR "$0: Read $n values\n"; die "$0: Too big $n >= 100\n" if ($n >= 100); for (my $i = 0; $i < $n; ++$i) { my $v0 = -$values[$i]; my $v1 = 1.0 + $v0; my $v2 = 2.0 + $v0; my $fout = "n$i.txt"; open(FOUT, ">", "$fout") or die "$0: Cannot write to $fout : $!\n"; print FOUT<; close(FILE); chomp; return $_ eq "##Ainur1.0"; } sub getLabels { my ($hptr,$file) = @_; open(FILE,$file) or die "$0: Cannot open $file : $!\n"; while () { chomp; foreach my $key (keys %$hptr) { if (/$key[= ]([^ ]+)/) { my $newVal = $1; my $prev = ${$hptr->{$key}}; if ($prev && $prev ne $newVal) { print STDERR "Already a previous value for $key of $prev\n"; print "New value is $newVal\n"; print "To take new value press ENTER. Or enter value "; $_ = ; chomp; if ($_) { ${$hptr->{$key}} = $_; print STDERR "$0: Value for $key is ".${$hptr->{$key}}."\n"; next; } } ${$hptr->{$key}} = $newVal; print STDERR "$0: Value for $key is ".${$hptr->{$key}}."\n"; } } } close(FILE); foreach my $key (keys %$hptr) { my $x = ${$hptr->{$key}}; defined($x) or die "$0: Could not find $key in $file\n"; } } sub printGnuplot { my ($inFile, $geometry, $isPeriodic, $zeroAtCenter, $nonNegativeOnly) = @_; my $hasPrinted = 0; open(FIN, "<", "$inFile") or die "$0: Cannot open $inFile : $!\n"; my %h; my $npoints; while () { my @temp = split; my $n = scalar(@temp); if ($n < 1) { print STDERR "$0: line $. in $inFile is empty, skipping\n"; next; } print STDERR "$0: Columns $n in $inFile\n" if (!$hasPrinted); $hasPrinted = 1; my $omega = $temp[0]; my $tmpPoints = scalar(@temp); defined($npoints) or $npoints = $tmpPoints; if ($npoints != $tmpPoints) { print "$0: Discared values for omega=$omega; found $tmpPoints, expected $npoints\n"; next; } $h{$omega} = \@temp; } close(FIN); printGnuplotFromHash(\%h, $geometry, $isPeriodic, $zeroAtCenter, $nonNegativeOnly); } sub printGnuplotFromHash { my ($ptr, $geometry, $isPeriodic, $zeroAtCenter, $nonNegativeOnly) = @_; my ($factor, $fileIndices, $leg) = getGeometryDetails($geometry); foreach my $fileIndex (@$fileIndices) { my $outFile = "outSpectrum$fileIndex.gnuplot"; my $outFile2 = "outSpectrum$fileIndex.pgfplots"; open(FOUT, ">", "$outFile") or die "$0: Cannot write to $outFile : $!\n"; open(FOUT2, ">", "$outFile2") or die "$0: Cannot write to $outFile2 : $!\n"; for my $omega (sort {$a <=> $b} keys %$ptr) { my $aptr = $ptr->{$omega}; my $nks = scalar(@$aptr) - 1; my $numberOfQs = int($factor*$nks); my @array; if ($geometry->{"subname"} =~ /^Honeycomb/) { my $type = $geometry->{"subname"}; @array = Honeycomb::fillQvalues($ptr, $type); } else { @array = fillQvalues($numberOfQs, $isPeriodic, $zeroAtCenter); } foreach my $ptr2 (@array) { my ($m, $q) = ($ptr2->{"m"}, $ptr2->{"q"}); my $realPart = $aptr->[2*$m+1+2*$fileIndex*$numberOfQs]; my $imagPart = $aptr->[2*$m+2+2*$fileIndex*$numberOfQs]; $imagPart = 0 if ($nonNegativeOnly and $imagPart < 0); print FOUT "$q $omega $realPart $imagPart\n"; print FOUT2 "$q $omega $imagPart\n"; } print FOUT2 "\n"; } close(FOUT); close(FOUT2); print "$0: Written $outFile\n"; print "$0: Written $outFile2\n"; } } sub fillQvalues { my ($numberOfQs, $isPeriodic, $zeroAtCenter) = @_; my $centerShift = ($numberOfQs & 1) ? ($numberOfQs - 1)/2 : $numberOfQs/2; $centerShift = 0 unless ($zeroAtCenter); my @array; for (my $m2 = 0; $m2 < $numberOfQs; ++$m2) { my $m = $m2 - $centerShift; $m += $numberOfQs if ($m < 0); my $q = getQ($m2 - $centerShift, $numberOfQs, $isPeriodic); my $temp = { "m" => $m, "q" => $q}; push @array, $temp; } return @array; } sub printOffsetPlots { my ($ext, $ptr, $geometry, $isPeriodic, $zeroAtCenter) = @_; if ($geometry->{"subname"} =~ /^Honeycomb/) { print STDERR "$0: WARNING: Honeycomb: printOffsetPlots not supported yet\n"; return; } my ($factor, $fileIndices, $leg) = getGeometryDetails($geometry); foreach my $fileIndex (@$fileIndices) { my $offset = 0.7*findMaxVertical($ptr, $factor, $fileIndex); my $outFile = "outSpectrum$fileIndex.$ext"; open(FOUT, ">", "$outFile") or die "$0: Cannot write to $outFile : $!\n"; for my $omega (sort {$a <=> $b} keys %$ptr) { my $aptr = $ptr->{$omega}; my $nks = scalar(@$aptr) - 1; my $numberOfQs = int($factor*$nks); my $centerShift = ($numberOfQs & 1) ? ($numberOfQs - 1)/2 : $numberOfQs/2; $centerShift = 0 unless ($zeroAtCenter); print FOUT "$omega "; for (my $m2 = 0; $m2 < $numberOfQs; ++$m2) { my $m = $m2 - $centerShift; $m += $numberOfQs if ($m < 0); my $q = getQ($m2 - $centerShift, $numberOfQs, $isPeriodic); #my $realPart = $aptr->[2*$m+1+2*$fileIndex*$numberOfQs]; my $imagPart = $aptr->[2*$m+2+2*$fileIndex*$numberOfQs]; my $val = $imagPart + $m2*$offset; print FOUT "$val "; } print FOUT "\n"; } close(FOUT); print "$0: Written $outFile\n"; } } sub getGeometryDetails { my ($geometry, $my) = @_; my $factor = 0; my @fileIndices=(0); my $leg = 1; my $name = $geometry->{"name"}; my $subname = $geometry->{"subname"}; if ($name eq "chain") { $factor = 0.5; die "$0: Chain does not have ky != 0\n" if (defined($my) and $my != 0) } elsif ($subname eq "GrandCanonical" and $name eq "ladder") { $factor = 0.5; die "$0: Chain does not have ky != 0\n" if (defined($my) and $my != 0); } elsif ($name eq "ladder" || $subname eq "average") { $leg = $geometry->{"leg"}; $factor = 0.25; @fileIndices=(0, 1) if ($leg == 2 || $subname eq "average"); } elsif ($geometry->{"subname"} =~ /^Honeycomb/) { return (1, \@fileIndices, $leg); } else { die "$0: Unknown geometry $name\n"; } return ($factor, \@fileIndices, $leg); } sub findMaxVertical { my ($ptr, $factor, $fileIndex) = @_; my $max = 0; for my $omega (sort {$a <=> $b} keys %$ptr) { my $aptr = $ptr->{$omega}; my $nks = scalar(@$aptr) - 1; my $numberOfQs = int($factor*$nks); for (my $m = 0; $m < $numberOfQs; ++$m) { my $imagPart = abs($aptr->[2*$m + 2 + 2*$fileIndex*$numberOfQs]); $max = $imagPart if ($max < $imagPart); } } return $max; } sub fourier { my ($f, $v, $geometry, $hptr) = @_; my $subname = $geometry->{"subname"}; if ($subname eq "average") { return fourierLadderAverage($f, $v, $geometry->{"leg"}, $hptr); } my $name = $geometry->{"name"}; if ($name eq "chain") { return fourierChain($f, $v, $hptr); } if ($name eq "ladder" and $subname eq "GrandCanonical") { return fourierChainGC($f, $v, $hptr); } if ($name eq "ladder") { return fourierLadder($f, $v, $geometry->{"leg"}, $hptr); } if ($name eq "LongRange" || $name eq "General") { my $orbitals = $hptr->{"Orbitals"}; if ($geometry->{"subname"} eq "chain") { if ($orbitals == 1) { return fourierChain($f, $v, $hptr); } elsif ($orbitals == 2) { return fourierChain2orb($f, $v, $hptr); } } if ($geometry->{"subname"} eq "ladder") { if ($orbitals == 1) { return fourierLadder($f, $v, $geometry->{"leg"}, $hptr); } elsif ($orbitals == 2) { return fourierLadder2orb($f, $v, $hptr); } } if ($geometry->{"subname"} =~ /^Honeycomb/) { my $type = $geometry->{"subname"}; $type =~ s/^Honeycomb//; return fourierHoneycomb($f, $v, $hptr, $type); } } die "$0: ft: undefined geometry ".$geometry->{"name"}."\n"; } sub fourierChain { my ($f, $v, $hptr) = @_; my $n = scalar(@$v); my $mMax = $hptr->{"mMax"}; my $isPeriodic = $hptr->{"isPeriodic"}; my $centralSite = $hptr->{"centralSite"}; my @centralSites = ($centralSite); if (!$isPeriodic) { my $b = ($centralSite == int($n/2)); if (!$b && ($centralSite != int($n/2) - 1)) { print STDERR "$0: Chain of $n sites, but central site is $centralSite\n"; } # FIXME: DOES NOT WORK, CHECK FORMULA BELOW if ($hptr->{"multicenter"}) { my $otherCenter = ($b) ? $centralSite - 1 : $centralSite + 1; push @centralSites, $otherCenter; } } my $numberOfQs = (defined($mMax)) ? $mMax : $n; for (my $m = 0; $m < $numberOfQs; ++$m) { my @sum = (0,0); my $q = getQ($m, $numberOfQs, $isPeriodic); foreach my $cSite (@centralSites) { for (my $i = 0; $i < $n; $i++) { my $ptr = $v->[$i]; my @temp = @$ptr; my $arg = $q*($i-$cSite); my $carg = cos($arg); my $sarg = sin($q*($i + 1))*sin($q*($cSite + 1)); my $cOrSarg = ($isPeriodic) ? $carg : $sarg; $sum[0] += $temp[0]*$cOrSarg; $sum[1] += $temp[1]*$cOrSarg; } } $f->[$m] = \@sum; } } sub fourierLadder { my ($f, $v, $leg, $hptr) = @_; my $n = scalar(@$v); my $mMax = $hptr->{"mMax"}; my $isPeriodic = $hptr->{"isPeriodic"}; my $centralSite = $hptr->{"centralSite"}; my $numberOfQs = (defined($mMax)) ? $mMax : int($n/$leg); for (my $m = 0; $m < $numberOfQs; ++$m) { my $q = getQ($m, $numberOfQs, $isPeriodic); my @fPerLeg; my @sumKy0 = (0, 0); for (my $ll = 0; $ll < $leg; ++$ll) { my @f = fourierF($v, $q, $ll, $leg, $centralSite, $isPeriodic); $fPerLeg[$ll] = \@f; $sumKy0[0] += $f[0]; $sumKy0[1] += $f[1]; } $f->[$m] = \@sumKy0; next if ($leg != 2); for (my $x = 1; $x < 2; ++$x) { my $sign = 1-2*$x; my $realPart = $fPerLeg[0]->[0] + $sign*$fPerLeg[1]->[0]; my $imagPart = $fPerLeg[0]->[1] + $sign*$fPerLeg[1]->[1]; my @sum = ($realPart,$imagPart); $f->[$m+$numberOfQs*$x] = \@sum; } } } sub fourierF { my ($v, $q, $ll, $leg, $centralSite, $isPeriodic) = @_; my $n = scalar(@$v); my @sum; for (my $i = $ll; $i < $n; $i += $leg) { my $ptr = $v->[$i]; my @temp = @$ptr; my $arg = $q*distanceLadder($i, $centralSite, $ll, $leg); my $carg = cos($arg); my $sarg = sin($q*($i + 1))*sin($q*($centralSite + 1)); my $cOrSarg = ($isPeriodic) ? $carg : $sarg; $sum[0] += $temp[0]*$cOrSarg; $sum[1] += $temp[1]*$cOrSarg; } return @sum; } sub distanceLadder { my ($ind, $jnd, $ll, $leg) = @_; return ($ind - $ll - $jnd)/$leg; } sub fourierChain2orb { my ($f, $v, $hptr) = @_; my $mMax = $hptr->{"mMax"}; my $isPeriodic = $hptr->{"isPeriodic"}; my $n = int(0.25*scalar(@$v)); my $numberOfQs = (defined($mMax)) ? $mMax : $n; my $cSite = $n/2-1; for (my $m = 0; $m < $numberOfQs; ++$m) { my @sum = (0,0); my $q = getQ($m, $numberOfQs, $isPeriodic); for (my $orb = 0; $orb < 2; ++$orb) { for (my $i = 0; $i < $n; $i++) { my @temp = ($v->[4*$i + 2*$orb],$v->[4*$i + 2*$orb + 1]); my $arg = $q*($i-$cSite); my $carg = cos($arg); my $sarg = sin($q*($i + 1))*sin($q*($cSite + 1)); my $cOrSarg = ($isPeriodic) ? $carg : $sarg; $sum[0] += $temp[0]*$cOrSarg; $sum[1] += $temp[1]*$cOrSarg; } } $f->[$m] = \@sum; } } sub fourierLadder2orb { my ($f, $v, $leg, $hptr) = @_; my $mMax = $hptr->{"mMax"}; my $isPeriodic = $hptr->{"isPeriodic"}; my $centralSite = $hptr->{"centralSite"}; my $n = int(0.125*scalar(@$v)); my $numberOfQs = (defined($mMax)) ? $mMax : $n; for (my $m = 0; $m < $numberOfQs; ++$m) { my $q = getQ($m,$numberOfQs,$isPeriodic); my @f0 = fourierF0test($v, $q, $centralSite, $isPeriodic); my @f1 = fourierF1test($v, $q, $centralSite, $isPeriodic); for (my $x = 0; $x < 2; ++$x) { my $sign = 1-2*$x; my $realPart = $f0[0] + $sign*$f1[0]; my $imagPart = $f0[1] + $sign*$f1[1]; my @sum = ($realPart,$imagPart); $f->[$m+$numberOfQs*$x] = \@sum; } } } sub fourierF0test { my ($v, $q, $cSite, $isPeriodic) = @_; my $n = int(0.25*scalar(@$v)); my @sum; for (my $orb = 0; $orb < 2; ++$orb) { for (my $i = 0; $i < $n; $i += 2) { my @temp = ($v->[4*$i + 2*$orb],$v->[4*$i + 2*$orb + 1]); my $arg = $q*($i-$cSite)*0.5; my $carg = cos($arg); my $sarg = sin($q*($i + 1))*sin($q*($cSite + 1)); my $cOrSarg = ($isPeriodic) ? $carg : $sarg; $sum[0] += $temp[0]*$cOrSarg; $sum[1] += $temp[1]*$cOrSarg; } } return @sum; } sub fourierF1 { my ($v, $q, $cSite, $isPeriodic) = @_; my $n = int(0.5*scalar(@$v)); my @sum; for (my $i = 1; $i < $n; $i+=2) { my @temp = ($v->[2*$i],$v->[2*$i+1]); my $arg = $q*distanceLadder($i,$cSite,0,2); my $carg = cos($arg); my $sarg = sin($q*($i + 1))*sin($q*($cSite + 1)); my $cOrSarg = ($isPeriodic) ? $carg : $sarg; $sum[0] += $temp[0]*$cOrSarg; $sum[1] += $temp[1]*$cOrSarg; } return @sum; } sub fourierF1test { my ($v, $q, $cSite, $isPeriodic) = @_; my $n = int(0.25*scalar(@$v)); my @sum; for (my $orb = 0; $orb < 2; ++$orb) { for (my $i = 1; $i < $n; $i += 2) { my @temp = ($v->[4*$i + 2*$orb],$v->[4*$i + 2*$orb + 1]); my $arg = $q*distanceLadder($i,$cSite,0,2); my $carg = cos($arg); my $sarg = sin($q*($i + 1))*sin($q*($cSite + 1)); my $cOrSarg = ($isPeriodic) ? $carg : $sarg; $sum[0] += $temp[0]*$cOrSarg; $sum[1] += $temp[1]*$cOrSarg; } } return @sum; } sub fourierLadderAverage { my ($f, $v, $leg, $hptr) = @_; my $n = scalar(@$v); my $lx = int($n/$leg); my $legSmall = 2; my $total = int($leg/$legSmall); my $centralSite = $hptr->{"centralSite"}; my $ll = ($centralSite == int($n/2)) ? 0 : 1; die "$0: Wrong central site $centralSite\n" if ($centralSite != int($n/2) + $ll*2); # prepare partialV my @partialV = fourierLadderAverageInput($v, $ll, $leg, $hptr); print STDERR "$0: partialV for ll=$ll with ".scalar(@partialV)." entries\n"; my %modifiedHptr = %$hptr; $modifiedHptr{"centralSite"} = $lx; my @partialF; fourierLadder($f, \@partialV, 2, \%modifiedHptr); } sub fourierLadderAverageInput { my ($v, $ll, $leg, $hptr) = @_; my $n = scalar(@$v); my $lx = int($n/$leg); my $legSmall = 2; my @partialV; for (my $x = 0; $x < $lx; ++$x) { for (my $y = 0; $y < $legSmall; ++$y) { my $oldY = $y + 2*$ll; $partialV[$y + $x*$legSmall] = $v->[$oldY + $x*$leg]; } } return @partialV; } sub fourierHoneycomb { my ($f, $v, $hptr, $type) = @_; my $lx = $hptr->{"#Lx"}; my $ly = $hptr->{"#Ly"}; my ($M1, $M2) = (2*$lx, $ly); my $n = scalar(@$v); my (@tindx, @tindy); Honeycomb::honeySpace(\@tindx, \@tindy, $n, $hptr, $type); for (my $m1 = 0; $m1 < $M1; ++$m1) { # loop over momenta for (my $m2 = 0; $m2 < $M2; ++$m2) { # loop over momenta # valid ($qx, $qy) my ($qx, $qy) = Honeycomb::honeyGetQ($m1, $m2, $lx, $ly, $type); my @sum = (0, 0); for (my $i = 0; $i < $n; ++$i) { # loop over space my $ptr = $v->[$i]; my @temp = @$ptr; my @fourierFactor = honeyFourierFactor($i, $qx, $qy, \@tindx, \@tindy, $hptr); $sum[0] += $fourierFactor[0]*$temp[1] + $fourierFactor[1]*$temp[0]; # imaginary part $sum[1] += $fourierFactor[0]*$temp[0] - $fourierFactor[1]*$temp[1]; # real part } $f->[$m1 + $m2*$M1] = \@sum; } } } sub honeyFourierFactor { my ($i, $qx, $qy, $tindx, $tindy, $hptr) = @_; # get (rx, ry) and (cx, cy) my $indexForCenter = $hptr->{"centralSite"}; my ($rx, $ry) = ($tindx->[$i], $tindy->[$i]); my ($cx, $cy) = ($tindx->[$indexForCenter], $tindy->[$indexForCenter]); my $arg = $qx*($rx - $cx) + $qy*($ry - $cy); return (cos($arg), sin($arg)); } sub fourierChainGC { my ($f, $v, $hptr) = @_; my $n = scalar(@$v); my $mMax = $hptr->{"mMax"}; my $isPeriodic = $hptr->{"isPeriodic"}; my $centralSite = $hptr->{"centralSite"}; my $nOver2 = int($n/2); die "$0: FATAL: ChainGC central site is odd\n" if ($centralSite & 1); if (!$isPeriodic) { my $b = ($centralSite != $nOver2); if ($b && $centralSite != $nOver2 - 2) { die "$0: FATAL ChainGC: wrong central site $centralSite\n"; } } my $cSite = int($centralSite/2); my $numberOfQs = (defined($mMax)) ? $mMax : $nOver2; for (my $m = 0; $m < $numberOfQs; ++$m) { my @sum = (0,0); my $q = getQ($m, $numberOfQs, $isPeriodic); for (my $ii = 0; $ii < $n; $ii += 2) { my $i = int($ii/2); my $ptr = $v->[$ii]; my @temp = @$ptr; my $arg = $q*($i - $cSite); my $carg = cos($arg); my $sarg = sin($q*($i + 1))*sin($q*($cSite + 1)); my $cOrSarg = ($isPeriodic) ? $carg : $sarg; $sum[0] += $temp[0]*$cOrSarg; $sum[1] += $temp[1]*$cOrSarg; } $f->[$m] = \@sum; } } sub writeFourier { my ($array, $f, $geometry) = @_; my $subname = $geometry->{"subname"}; my $isPeriodic = $geometry->{"isPeriodic"}; if ($geometry->{"name"} eq "chain" || $subname eq "GrandCanonical") { return writeFourierChain($array,$f, $isPeriodic); } if ($geometry->{"name"} eq "ladder" || $subname eq "average") { return writeFourierLadder($array, $f); } die "$0: writeFourier: undefined geometry ".$geometry->{"name"}."\n"; } sub writeFourierChain { my ($array, $f, $isPeriodic) = @_; my $n = scalar(@$f); for (my $m = 0; $m < $n; ++$m) { my $q = getQ($m, $n, $isPeriodic); my $ptr = $f->[$m]; my @temp = @$ptr; $array->[$m] = [$q, $temp[0], $temp[1]]; } } sub writeFourierLadder { my ($array, $f) = @_; my $n = scalar(@$f); for (my $m = 0; $m < $n; ++$m) { my $ptr = $f->[$m]; my @temp = @$ptr; my @temp2 = ($m); push @temp2, @temp; $array->[$m] = \@temp2; } } sub getQ { my ($m, $n, $isPeriodic) = @_; return ($isPeriodic) ? 2.0*$pi*$m/$n : ($m + 1)*$pi/($n+1.0); } 1; dmrgpp-6.02/scripts/Pgfplot2max.pl000077500000000000000000000030411414604301300171560ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my ($file) = @ARGV; defined($file) or die "USAGE: $0 filename\n"; my $pi = 3.14159; my $points = 3; my $kpoint = $pi; my %max = maxFromFile($file); my @disp = plotMax(\%max, 1); my $slope = findSlope(\@disp, $kpoint, $points); print STDERR "$0: Slope at $kpoint with $points points behind is $slope\n"; sub findSlope { my ($a, $kpoint, $points) = @_; my $n = scalar(@$a); for (my $i = 0; $i < $n; ++$i) { my $ptr = $a->[$i]; my ($k, $omega) = @$ptr; next if (abs($k - $kpoint) >= 1e-3); my $piIndex = $i; my $firstIndex = $i - $points; if ($firstIndex < 0) { die "$0: Points $points is too big\n"; } my $ptr2 = $a->[$firstIndex]; my ($k1, $omega1) = @$ptr2; my $slope = ($omega1 - $omega)/($k1 - $k); return $slope; } } sub plotMax { my ($h, $print) = @_; my @disp; my $counter = 0; foreach my $k (sort {$a <=> $b} keys %$h) { my $ptr = $h->{$k}; my ($omega, $value) = @$ptr; print "$k $omega\n" if ($print); $disp[$counter++] = [$k, $omega]; } return @disp; } sub maxFromFile { my ($file) = @_; my %max; open(FILE, "<", "$file") or die "$0: Cannot open $file : $!\n"; while () { my @temp = split; next if (scalar(@temp) != 3); my $k = $temp[0]; my $omega = $temp[1]; my $value = $temp[2]; my $ptr = $max{$k}; my @newptr = ($omega, $value); if (defined($ptr)) { my ($oldOmega, $oldValue) = @$ptr; $max{$k} = \@newptr if ($value > $oldValue); } else { $max{$k} = \@newptr; } } close(FILE); return %max; } dmrgpp-6.02/scripts/PgfplotSum.pl000077500000000000000000000027521414604301300170630ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my @sum; foreach my $file (@ARGV) { my @array; loadFile(\@array, $file); addFile(\@sum, \@array); } printTotal(\@sum); sub printTotal { my ($array) = @_; my $n = scalar(@$array); my $prevOmega = 0; for (my $i = 0; $i < $n; ++$i) { my $ptr = $array->[$i]; my $omega = $ptr->[1]; if ($i > 0 && abs($omega - $prevOmega)>1e-6) { print "\n"; } print "@$ptr\n"; $prevOmega = $omega; } } sub loadFile { my ($h, $file) = @_; open(FILE, "<", $file) or die "$0: Cannot open file $file : $!\n"; while () { chomp; next if ($_ eq ""); my @temp = split; die "$0: Incorrect line $_ in $file\n" if (scalar(@temp) != 3); push @$h, \@temp; } close(FILE); } sub addFile { my ($sum, $array) = @_; my $n = scalar(@$array); my $m = scalar(@$sum); if ($m == 0) { @$sum = @$array; return; } if ($m != $n) { die "$0: Trying to add an array of different size to previous $n != $m\n"; } for (my $i = 0; $i < $n; ++$i) { my $ptr1 = $array->[$i]; my $ptr2 = $sum->[$i]; my $nn = scalar(@$ptr1); die "$0: addFile: $i-th array incorrect size\n" if ($nn != scalar(@$ptr2)); die "$0: addFile: Neither $i-th array is size 3\n" if ($nn != 3); my $k = $ptr1->[0]; my $diff0 = abs($k - $ptr2->[0]); die "$0: addFile: Wrong k point\n" if ($diff0 > 1e-5); my $omega = $ptr1->[1]; my $diff1 = abs($omega - $ptr2->[1]); die "$0: addFile: Wrong omega point\n" if ($diff1 > 1e-5); $ptr2->[2] += $ptr1->[2]; } } dmrgpp-6.02/scripts/ToolsDmrgDynamics/000077500000000000000000000000001414604301300200175ustar00rootroot00000000000000dmrgpp-6.02/scripts/ToolsDmrgDynamics/README000066400000000000000000000033751414604301300207070ustar00rootroot00000000000000 ALL THIS HERE IS OBSOLETE. PLEASE REFER TO ../DmrgDynamics/ # Pre-Preparation Update Lanczos++, DMRG++, and PsimagLite Compile Lanczos++, DMRG++, continuedFractionCollection, combineContinuedFraction. You do NOT need to move or copy the executables. Have available an input file (and optionally a batch file) for the construction of the templates. # Preparation cd scripts/ToolsDmrgDynamics/ perl dynamicsPrepare.pl (and answer all questions) # Optional Configuration At ANY point below you can change parameters in the following files inputTemplate.inp <--- Do not change the $ labels batchTemplate.pbs <--- Do not change the $$ labels params.txt <--- Overwritten by dynamicsPrepare.pl If the executables lanczos or dmrg change please re-run dynamicsPrepare.pl. # Quick Test perl oneDynamicTest.pl 3 3 out c xmgrace out3_3.cf out3_3Lanczos.cf # Runnning Lanczos or Dmrg serially ## Example: Sum of the diagonals perl dynamicsRepeat.pl Lanczos out c nobatch This produces all pairs of sites and all parts. Now you can post-process one or many times without re-runnning: perl dynamicsLoop.pl -2 out c xmgrace outTotal-2.cf Instead of -2 use -1 for optical or a non-negative number for the ``momentum.'' To run DMRG serially just replace Lanczos for Dmrg: perl dynamicsRepeat.pl Dmrg out c nobatch The rest is the same. # Runnning Dmrg or Lanczos in parallel Do a dry run first: perl dynamicsRepeat.pl Dmrg out c nosubmit Check the generated Batch files to make sure they look OK. Now submit: perl dynamicsRepeat.pl Dmrg out c submit Postprocessing is as before perl dynamicsLoop.pl q out c where q is the ``momentum.'' You may post-process many times without re-running. To run Lanczos serially just replace Dmrg for Lanczos dmrgpp-6.02/scripts/ToolsDmrgDynamics/Utils.pm000066400000000000000000000033251414604301300214600ustar00rootroot00000000000000#!/usr/bin/perl use warnings; use strict; package Utils; sub getLabel { my ($file,$label)=@_; open(FILE,"$file") or die "$0: Cannot open $file: $!\n"; my $value; while() { chomp; if (/$label(.*$)/) { $value=$1; last; } } close(FILE); defined($value) or die "$0: undefined $label in $file\n"; return $value; } sub myswap { my ($x,$y) = @_; my $tmp = $$x; $$x = $$y; $$y = $tmp; } sub setVector { my ($a,$value) = @_; my $total = scalar(@$a); for (my $i = 0; $i < $total; $i++) { $a->[$i] = $value; } } sub checkRange { my ($val,@list) = @_; foreach my $item (@list) { return if ($val eq $item); } die "$0: checkRange: $val does not belong to @list\n"; } sub loadParams { my ($file) = @_; my %params; open(FILE,"$file") or die "$0: Cannot open $file\n"; while() { next if (/^#/); if (/(^[a-zA-Z]+)=(.*$)/) { $params{"$1"}=$2; } } close(FILE); return %params; } sub scale { my ($file,$f,$c) = @_; open(FILE,"$file") or die "$0: Cannot open $file: $!\n"; my $counter = 0; my @saved; while() { my @temp = split; my $n = scalar(@temp); if ($n == $c) { for (my $i = 1; $i < scalar(@temp); ++$i) { $temp[$i] *= $f; } } $saved[$counter++] = \@temp; } close(FILE); open(FOUT,">$file") or die "$0: Cannot open $file: $!\n"; for (my $i = 0; $i < $counter; ++$i) { my $temp = $saved[$i]; print FOUT "@$temp\n"; } close(FOUT); } sub findReflection { my ($s,$L) = @_; return $L - 1 - $s; } sub reflected { my ($site1,$site2,$L) = @_; my $rsite1 = findReflection($site1,$L); my $rsite2 = findReflection($site2,$L); die "$0: reflected $site1 $site2\n" unless ($rsite1 >= $rsite2); return ($rsite2 >= $site1) ? 0 : 1; } 1; dmrgpp-6.02/scripts/ToolsDmrgDynamics/dynamicsDmrg.pl000066400000000000000000000242561414604301300230060ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use Utils; my ($site,$site2,$what,$root,$operatorLabel) = @ARGV; defined($operatorLabel) or die "USAGE: $0 site site2 what root operatorLabel\n"; Utils::checkRange($operatorLabel,"c","n","s+","s-","sz"); my %params = Utils::loadParams("params.txt"); my $matrixFermionSign = ($operatorLabel eq "c") ? -1 : 1; my $templateInput = "inputTemplate.inp"; my $n = Utils::getLabel($templateInput,"TotalNumberOfSites="); my $model = Utils::getLabel($templateInput,"Model="); checkOperatorLabels($operatorLabel,$model); my $hilbertSize = ($model eq "HeisenbergSpinOneHalf") ? 2 : 4; my @spectral; my $siteMin = ($site < $site2) ? $site : $site2; my $siteMax = ($site < $site2) ? $site2 : $site; my $output = "$root${siteMin}_$siteMax"; my $isDiagonal = ($site == $site2) ? 1 : 0; my $dataRoot = "$root${siteMin}_${siteMax}"; my $bb = ($what & 2); if ($bb && ($site2 >= $site)) { for (my $type=0;$type<4;$type++) { last if ($type>1 and $isDiagonal); my $input = createInput($n,$dataRoot,$siteMin,$siteMax,$type); my $retSystem = system("./dmrg -f $input &> out"); if ($retSystem != 0) { modifyInput($input); $retSystem = system("./dmrg -f $input &> out"); die "$0: $input failed\n" if ($retSystem != 0); } print STDERR "Type $type done\n"; } print STDERR "Sites $site $site2 done\n"; } $bb = ($what & 1); my $result; if ($bb && ($site2 >= $site)) { $result = postProc($dataRoot,$siteMin,$siteMax); } die "$0: $result does not exist\n" unless (defined($result) and -r "$result"); print STDERR "$0: Done $site $site2\n"; sub modifyInput { my ($input) = @_; my $fileinput = "file$input"; open(FILE,$input) or die "$0: Cannot open $input : $!\n"; open(FOUT,"> $fileinput") or die "$0: Cannot ope $fileinput for writing: $!\n"; while() { if (/^TSPLoops/) { my @temp = split; print FOUT "$temp[0] $temp[1] "; my $total = scalar(@temp); for (my $i = 2; $i < $total; ++$i) { $_ = ($temp[$i] == 1) ? 3 : 1; print FOUT "$_ "; } print FOUT "\n"; next; } print FOUT; } close(FILE); close(FOUT); system("cp $fileinput $input"); system("sync; sleep 1"); unlink("$fileinput"); } sub postProc { my ($dataRoot,$siteMin,$siteMax)=@_; my $energy = readEnergy("${dataRoot}_0.txt"); print STDERR "Energy=$energy\n"; my $isDiagonal = ($siteMin == $siteMax) ? 1 : 0; my $data = ""; for (my $type=0;$type<4;$type++) { last if ($type>1 and $isDiagonal); my $dataTmp = "${dataRoot}_$type.txt"; $data .= "$dataTmp "; unlink("EnvironStack$dataTmp"); unlink("SystemStack$dataTmp"); unlink("Wft$dataTmp"); } my ($psimagLite,$begin,$end,$step,$eps) = ($params{"PsimagLite"},$params{"OmegaBegin"},$params{"OmegaEnd"}, $params{"OmegaStep"},$params{"OmegaEps"}); system("$psimagLite/drivers/combineContinuedFraction $data > $dataRoot.comb"); setEnergy("$dataRoot.comb",$energy); system("$psimagLite/drivers/continuedFractionCollection -f $dataRoot.comb -b -$begin -e $end -s $step -d $eps > $dataRoot.cf"); my @temp = split/ /,$data; foreach (@temp) { unlink ($_) if (/$dataRoot/); } return "$dataRoot.cf"; } sub createInput { my ($n,$dataRoot,$site1,$site2,$type)=@_; my @sites = ($site1,$site2); my $file="input${site1}_${site2}_$type.inp"; open(FOUT,">$file") or die "$0: Cannot write to $file\n"; my ($sites,$loops,@matrix) = calcSitesAndLoops($n,$type,@sites); my $U = Utils::getLabel($templateInput,"##U="); my $hubbardU = setVector($n,$U); my $V = Utils::getLabel($templateInput,"##V="); my $potentialV = setVector(2*$n,$V); my $data = "${dataRoot}_${type}.txt"; my $steps = int($n/2) - 1; open(FILE,"$templateInput") or die "$0: Cannot open $templateInput: $!\n"; while() { next if (/^#/); if (/\$([a-zA-Z0-9\[\]]+)/) { my $name = $1; my $str = "\$".$name; my $val = eval "$str"; defined($val) or die "$0: Undefined substitution for $name\n"; s/\$\Q$name/$val/g; } print FOUT; } close(FILE); close(FOUT); return $file; } sub calcSitesAndLoops { my ($n,$type,@sites)=@_; my ($sites,$loops,$matrix) = calcSitesAndLoopsAux($n,$type,@sites); return reorderSites($sites,$loops,$matrix); } sub reorderSites { my ($sites,$loops,$matrix) = @_; my @sites2 = @$sites; my $nsites = scalar(@sites2); my @perm = sort { $sites2[$a] < $sites2[$b] } 0 .. @sites2-1; my @newsites; my @newloops; my @newmatrix; for (my $i = 0; $i < 4; $i++) { $newmatrix[$i] = zeroMatrix(); } for (my $i = 0; $i < $nsites; $i++) { my $j = $i; $newsites[$i] = $sites2[$perm[$j]]; $newloops[$i] = $loops->[$perm[$j]]; $newmatrix[$i] = $matrix->[$perm[$j]]; } my $newsites = "$nsites ".arrayToString(\@newsites); my $newloops = "$nsites ".arrayToString(\@newloops); my $nOver2 = int($n/2); if ($newsites[0] == $n-1) { my $indexToSwap = 1; $indexToSwap = 2 if ($nsites == 3 and $newsites[2] >= $nOver2); my ($tmp1,$tmp2) = ($newsites[0],$newsites[$indexToSwap]); Utils::myswap(\$tmp1,\$tmp2); ($newsites[0],$newsites[$indexToSwap]) = ($tmp1,$tmp2); $newsites = "$nsites ".arrayToString(\@newsites); Utils::setVector(\@newloops,0); $newloops = "$nsites ".arrayToString(\@newloops); ($tmp1,$tmp2) = ($newmatrix[0], $newmatrix[$indexToSwap]); Utils::myswap(\$tmp1,\$tmp2); ($newmatrix[0], $newmatrix[$indexToSwap]) = ($tmp1,$tmp2); } return ($newsites,$newloops,@newmatrix); } sub arrayToString { my ($a) = @_; my $total = scalar(@$a); my $str = ""; for (my $i = 0; $i < $total; $i++) { $str .= "$a->[$i] "; } return $str; } sub calcSitesAndLoopsAux { my ($n,$type,@sites)=@_; my $loopDelay = 1; my @sites2 = @sites; my @loops = ($loopDelay, $loopDelay); my $isDiagonal = ($sites[0] == $sites[1]) ? 1 : 0; @sites2 = ($sites[0]) if ($isDiagonal); @loops = ($loopDelay) if ($isDiagonal); my @matrix; $matrix[0] = findMatrix($type,0); $matrix[1] = findMatrix($type,1); $matrix[2] = zeroMatrix(); $matrix[3] = zeroMatrix(); my $isOk1 = ($sites[0] != 0 and $sites[1] != $n-1) ? 1 : 0; my $isOk2 = ($sites[0] == 0 and $sites[1] == 1) ? 1 : 0; my $isOk3 = ($sites[0] == $n-2 and $sites[1] == $n-1) ? 1 : 0; return (\@sites2,\@loops,\@matrix) if ($isOk1 || $isOk2 || $isOk3); if ($isDiagonal) { if ($sites[0] == 0) { @sites2 = (1, 0); @loops = ($loopDelay, $loopDelay); $matrix[0] = zeroMatrix(); $matrix[1] = findMatrix($type,0); return (\@sites2,\@loops,\@matrix); } if ($sites[0] == $n - 1) { @sites2 = ($n-2,$n-1); @loops = ($loopDelay, $loopDelay); $matrix[0] = zeroMatrix(); $matrix[1] = findMatrix($type,1); return (\@sites2,\@loops,\@matrix); } die "$0: calcSitesAndLoops\n"; } if ($sites[0] == 0 && $sites[1] != $n - 1) { @sites2 = (1, $sites[0], $sites[1]); @loops = ($loopDelay, $loopDelay, $loopDelay); $matrix[0] = zeroMatrix(); $matrix[1] = findMatrix($type,0); $matrix[2] = findMatrix($type,1); return (\@sites2,\@loops,\@matrix); } if ($sites[0] != 0 && $sites[1] == $n - 1) { @sites2 = ($sites[0], $n-2, $sites[1]); @loops = ($loopDelay, $loopDelay, $loopDelay); $matrix[0] = findMatrix($type,0); $matrix[1] = zeroMatrix(); $matrix[2] = findMatrix($type,1); return (\@sites2,\@loops,\@matrix); } die "$0: calcSitesAndLoops\n" unless ($sites[0] == 0 and $sites[1] == $n-1); @sites2 = ($sites[0], 1, $n-2, $sites[1]); @loops = ($loopDelay, $loopDelay, $loopDelay, $loopDelay); $matrix[0] = findMatrix($type,0); $matrix[1] = zeroMatrix(); $matrix[2] = zeroMatrix(); $matrix[3] = findMatrix($type,1); return (\@sites2,\@loops,\@matrix); } sub findMatrix { my ($type,$type2)=@_; my $m = findMatrixAux($type,$type2); my $matrixEnd = "FERMIONSIGN=$matrixFermionSign\nJMVALUES 0 0\nAngularFactor=1\n\n"; return "$m$matrixEnd"; } sub findMatrixAux { my ($type,$type2)=@_; if ($model eq "HeisenbergSpinOneHalf") { return findMatrixHeisenbergSpinOneHalf($type,$type2); } findMatrixHubbard($type,$type2); } sub findMatrixHeisenbergSpinOneHalf { my ($type,$type2)=@_; my $matrix = ($operatorLabel eq "sz") ? "1 0\n0 -1\n" : "0 0\n1 0\n"; if (($type & 1) && !($operatorLabel eq "sz")) { $matrix = "0 1\n0 0\n"; } return $matrix if ($type2==0); if ($type>1) { $matrix = multiplyMatrix($matrix,-1); } return $matrix; } sub findMatrixHubbard { my ($type,$type2)=@_; my $matrix = ($operatorLabel eq "c") ? "0 1 0 0\n0 0 0 0\n0 0 0 1\n0 0 0 0\n" : "0 0 0 0\n0 1 0 0\n0 0 0 0\n0 0 0 1\n"; if (($type & 1) && ($operatorLabel eq "c")) { $matrix = "0 0 0 0\n1 0 0 0\n0 0 0 0\n0 0 1 0\n"; } return $matrix if ($type2==0); if ($type>1) { $matrix = multiplyMatrix($matrix,-1); } return $matrix; } sub zeroMatrix { my $id = ""; for (my $i = 0; $i < $hilbertSize; ++$i) { for (my $j = 0; $j < $hilbertSize; ++$j) { $id .= "0 "; } $id .= "\n"; } my $matrixEnd = "FERMIONSIGN=1\nJMVALUES 0 0\nAngularFactor=1\n\n"; return "$id$matrixEnd"; } sub multiplyMatrix { my ($matrix)=@_; $matrix=~s/\n/ /g; my @temp=split(/ /,$matrix); my $matrix2=""; for (my $i=0;$itmp.comb") or die "$0: Cannot write to tmp.comb\n"; while() { if (/#CFEnergy=/) { print FOUT "#CFEnergy=$energy\n"; next; } print FOUT; } close(FILE); close(FOUT); system("cp tmp.comb data.comb"); } sub readEnergy { my ($file)=@_; open(FILE,"$file") or die "$0: Cannot open $file\n"; my $energy = 0; my $prevEnergy; while() { chomp; if (/#Energy=(.*$)/) { $energy=$1; if (defined($prevEnergy) and abs($energy-$prevEnergy)<1e-3) { last; } $prevEnergy = $energy; } } close(FILE); return $energy; } sub checkOperatorLabels { my ($operatorLabel,$model) = @_; if ($model eq "HeisenbergSpinOneHalf") { return if ($operatorLabel eq "sz" or $operatorLabel eq "s+" or $operatorLabel eq "s-"); die "$0: $operatorLabel not valid for $model\n"; } else { return if ($operatorLabel eq "c" or $operatorLabel eq "n"); } die "$0: $operatorLabel not valid for $model\n"; } dmrgpp-6.02/scripts/ToolsDmrgDynamics/dynamicsLanczos.pl000066400000000000000000000172211414604301300235200ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use Utils; my ($site,$site2,$what,$root,$operatorLabel) = @ARGV; defined($operatorLabel) or die "USAGE: $0 site site2 what root operatorLabel\n"; Utils::checkRange($operatorLabel,"c","n","s+","s-","sz"); my %params = Utils::loadParams("params.txt"); my $matrixFermionSign = ($operatorLabel eq "c") ? -1 : 1; my $templateInput = "inputTemplate.inp"; my $n = Utils::getLabel($templateInput,"TotalNumberOfSites="); my $model = Utils::getLabel($templateInput,"Model="); #die "$0: Only HubbardOneBand supported, not $model\n" unless ($model eq "HubbardOneBand"); my $hilbertSize = ($model eq "HeisenbergSpinOneHalf") ? 2 : 4; my @spectral; my $input = createInput($n,"data",$site,$site2,0); my $siteMin = ($site < $site2) ? $site : $site2; my $siteMax = ($site < $site2) ? $site2 : $site; my $output = "$root${siteMin}_$siteMax"; my $bb = ($what & 2); if ($bb && ($site2 >= $site)) { print STDERR "Running ./lanczos -f $input -g $operatorLabel &> $output.comb\n"; system("./lanczos -f $input -g $operatorLabel &> $output.comb"); } die "$0: $output.comb does not exist\n" unless (-r "$output.comb"); $bb = ($what & 1); if ($bb && ($site2 >= $site)) { my ($psimagLite,$begin,$end,$step,$eps) = ($params{"PsimagLite"},$params{"OmegaBegin"},$params{"OmegaEnd"}, $params{"OmegaStep"},$params{"OmegaEps"}); system("$psimagLite/drivers/continuedFractionCollection -f $output.comb -b $begin -e $end -s $step -d $eps > $output.cf"); } die "$0: $output.cf does not exist\n" unless (-r "$output.cf"); print STDERR "$0: Done $site $site2\n"; sub createInput { my ($n,$dataRoot,$site1,$site2,$type)=@_; my @sites = ($site1,$site2); my $file="input${site1}_${site2}_$type.inp"; open(FOUT,">$file") or die "$0: Cannot write to $file\n"; my ($sites,$loops,@matrix) = calcSitesAndLoops($n,$type,@sites); my $U = Utils::getLabel($templateInput,"##U="); my $hubbardU = setVector($n,$U); my $V = Utils::getLabel($templateInput,"##V="); my $potentialV = setVector(2*$n,$V); my $data = "${dataRoot}_${type}.txt"; my $steps = int($n/2) - 1; open(FILE,"$templateInput") or die "$0: Cannot open $templateInput: $!\n"; while() { next if (/^#/); if (/\$([a-zA-Z0-9\[\]]+)/) { my $name = $1; my $str = "\$".$name; my $val = eval "$str"; defined($val) or die "$0: Undefined substitution for $name\n"; s/\$\Q$name/$val/g; } print FOUT; } close(FILE); close(FOUT); return $file; } sub calcSitesAndLoops { my ($n,$type,@sites)=@_; my ($sites,$loops,$matrix) = calcSitesAndLoopsAux($n,$type,@sites); return reorderSites($sites,$loops,$matrix); } sub reorderSites { my ($sites,$loops,$matrix) = @_; my @sites2 = @$sites; my $nsites = scalar(@sites2); my @perm = sort { $sites2[$a] < $sites2[$b] } 0 .. @sites2-1; my @newsites; my @newloops; my @newmatrix; for (my $i = 0; $i < 4; $i++) { $newmatrix[$i] = zeroMatrix(); } for (my $i = 0; $i < $nsites; $i++) { my $j = $i; $newsites[$i] = $sites2[$perm[$j]]; $newloops[$i] = $loops->[$perm[$j]]; $newmatrix[$i] = $matrix->[$perm[$j]]; } my $newsites = "$nsites ".arrayToString(\@newsites); my $newloops = "$nsites ".arrayToString(\@newloops); my $nOver2 = int($n/2); if ($newsites[0] == $n-1) { my $indexToSwap = 1; $indexToSwap = 2 if ($nsites == 3 and $newsites[2] >= $nOver2); my ($tmp1,$tmp2) = ($newsites[0],$newsites[$indexToSwap]); Utils::myswap(\$tmp1,\$tmp2); ($newsites[0],$newsites[$indexToSwap]) = ($tmp1,$tmp2); $newsites = "$nsites ".arrayToString(\@newsites); Utils::setVector(\@newloops,0); $newloops = "$nsites ".arrayToString(\@newloops); ($tmp1,$tmp2) = ($newmatrix[0], $newmatrix[$indexToSwap]); Utils::myswap(\$tmp1,\$tmp2); ($newmatrix[0], $newmatrix[$indexToSwap]) = ($tmp1,$tmp2); } return ($newsites,$newloops,@newmatrix); } sub arrayToString { my ($a) = @_; my $total = scalar(@$a); my $str = ""; for (my $i = 0; $i < $total; $i++) { $str .= "$a->[$i] "; } return $str; } sub calcSitesAndLoopsAux { my ($n,$type,@sites)=@_; my $loopDelay = 1; my @sites2 = @sites; my @loops = ($loopDelay, $loopDelay); my $isDiagonal = ($sites[0] == $sites[1]) ? 1 : 0; @sites2 = ($sites[0]) if ($isDiagonal); @loops = ($loopDelay) if ($isDiagonal); my @matrix; $matrix[0] = findMatrix($type,0); $matrix[1] = findMatrix($type,1); $matrix[2] = zeroMatrix(); $matrix[3] = zeroMatrix(); my $isOk1 = ($sites[0] != 0 and $sites[1] != $n-1) ? 1 : 0; my $isOk2 = ($sites[0] == 0 and $sites[1] == 1) ? 1 : 0; my $isOk3 = ($sites[0] == $n-2 and $sites[1] == $n-1) ? 1 : 0; return (\@sites2,\@loops,\@matrix) if ($isOk1 || $isOk2 || $isOk3); if ($isDiagonal) { if ($sites[0] == 0) { @sites2 = (1, 0); @loops = ($loopDelay, $loopDelay); $matrix[0] = zeroMatrix(); $matrix[1] = findMatrix($type,0); return (\@sites2,\@loops,\@matrix); } if ($sites[0] == $n - 1) { @sites2 = ($n-2,$n-1); @loops = ($loopDelay, $loopDelay); $matrix[0] = zeroMatrix(); $matrix[1] = findMatrix($type,1); return (\@sites2,\@loops,\@matrix); } die "$0: calcSitesAndLoops\n"; } if ($sites[0] == 0 && $sites[1] != $n - 1) { @sites2 = (1, $sites[0], $sites[1]); @loops = ($loopDelay, $loopDelay, $loopDelay); $matrix[0] = zeroMatrix(); $matrix[1] = findMatrix($type,0); $matrix[2] = findMatrix($type,1); return (\@sites2,\@loops,\@matrix); } if ($sites[0] != 0 && $sites[1] == $n - 1) { @sites2 = ($sites[0], $n-2, $sites[1]); @loops = ($loopDelay, $loopDelay, $loopDelay); $matrix[0] = findMatrix($type,0); $matrix[1] = zeroMatrix(); $matrix[2] = findMatrix($type,1); return (\@sites2,\@loops,\@matrix); } die "$0: calcSitesAndLoops\n" unless ($sites[0] == 0 and $sites[1] == $n-1); @sites2 = ($sites[0], 1, $n-2, $sites[1]); @loops = ($loopDelay, $loopDelay, $loopDelay, $loopDelay); $matrix[0] = findMatrix($type,0); $matrix[1] = zeroMatrix(); $matrix[2] = zeroMatrix(); $matrix[3] = findMatrix($type,1); return (\@sites2,\@loops,\@matrix); } sub findMatrix { my ($type,$type2)=@_; my $m = findMatrixAux($type,$type2); my $matrixEnd = "FERMIONSIGN=$matrixFermionSign\nJMVALUES 0 0\nAngularFactor=1\n\n"; return "$m$matrixEnd"; } sub findMatrixAux { my ($type,$type2)=@_; if ($model eq "HeisenbergSpinOneHalf") { return findMatrixHeisenbergSpinOneHalf($type,$type2); } findMatrixHubbard($type,$type2); } sub findMatrixHeisenbergSpinOneHalf { my ($type,$type2)=@_; my $matrix = ($operatorLabel eq "sz") ? "1 0\n0 -1\n" : "0 0\n1 0\n"; if (($type & 1) && !($operatorLabel eq "sz")) { $matrix = "0 1\n0 0\n"; } return $matrix if ($type2==0); if ($type>1) { $matrix = multiplyMatrix($matrix,-1); } return $matrix; } sub findMatrixHubbard { my ($type,$type2)=@_; my $matrix = ($operatorLabel eq "c") ? "0 1 0 0\n0 0 0 0\n0 0 0 1\n0 0 0 0\n" : "0 0 0 0\n0 1 0 0\n0 0 0 0\n0 0 0 1\n"; if (($type & 1) && ($operatorLabel eq "c")) { $matrix = "0 0 0 0\n1 0 0 0\n0 0 0 0\n0 0 1 0\n"; } return $matrix if ($type2==0); if ($type>1) { $matrix = multiplyMatrix($matrix,-1); } return $matrix; } sub zeroMatrix { my $id = ""; for (my $i = 0; $i < $hilbertSize; ++$i) { for (my $j = 0; $j < $hilbertSize; ++$j) { $id .= "0 "; } $id .= "\n"; } my $matrixEnd = "FERMIONSIGN=1\nJMVALUES 0 0\nAngularFactor=1\n\n"; return "$id$matrixEnd"; } sub multiplyMatrix { my ($matrix)=@_; $matrix=~s/\n/ /g; my @temp=split(/ /,$matrix); my $matrix2=""; for (my $i=0;$i= $site)) { my ($psimagLite,$begin,$end,$step,$eps) = ($params{"PsimagLite"},$params{"OmegaBegin"},$params{"OmegaEnd"}, $params{"OmegaStep"},$params{"OmegaEps"}); system("$psimagLite/drivers/continuedFractionCollection -f $output.comb -b $begin -e $end -s $step -d $eps > $output.cf"); } if ($q == -2) { print STDERR "$0: Doing addDiagonal\n"; addDiagonal("$output.cf",$site+$site2,$site,$site2,$n); } elsif ($q < 0) { addOptical("$output.cf",$site+$site2,$site,$site2,$n); } else { my @expq = findExp($site,$site2,$q); addThisCf("$output.cf",$site+$site2,\@expq); } print STDERR "$0: Done $site $site2"; print STDERR " (using $siteMin $siteMax)" if ($siteMin != $site); print STDERR "\n"; } } printCf("${root}Total$q.cf",\@spectral); print "$0: Result is in ${root}Total$q.cf\n"; sub findSubstitutes { my ($site,$site2,$n,$useReflection) = @_; my $siteMin = ($site < $site2) ? $site : $site2; my $siteMax = ($site < $site2) ? $site2 : $site; my ($s1,$s2) = ($siteMin,$siteMax); if ($useReflection and Utils::reflected($siteMin,$siteMax,$n)) { $s1 = Utils::findReflection($siteMax,$n); $s2 = Utils::findReflection($siteMin,$n); } return ($s1,$s2); } sub findExp { my ($site,$site2,$q) = @_; my $factor = ($site == $site2) ? 4 : 0.5; $factor = 1 if ($dmrgOrLanczos == "Lanczos"); my $tmp = ($site - $site2) * $q; return ($factor*cos($tmp),$factor*sin($tmp)); } sub acos { atan2( sqrt(1 - $_[0] * $_[0]), $_[0] ) } sub addThisCf { my ($file,$ind,$expq) = @_; open(FILE,"$file") or die "$0: Cannot open $file: $!\n"; my $c = 0; while() { chomp; my @temp = split; next if (scalar(@temp) != 3); my $freq = $spectral[$c]; my @freq; @freq = @$freq if ($ind > 0); checkFreq(\@freq,$ind,$temp[0]); my @value; $value[0] = $temp[1] * $expq->[0] + $temp[2] * $expq->[1]; $value[1] = $temp[2] * $expq->[0] - $temp[1] * $expq->[1]; $freq[1] += $value[0]; $freq[2] += $value[1]; $spectral[$c] = \@freq; $c++; } close(FILE); } sub addDiagonal { my ($file,$ind,$site,$site2,$L) = @_; open(FILE,"$file") or die "$0: line $. Cannot open $file: $!\n"; my $c = 0; return if ($site != $site2); my $diagFactor = ($site == $site2) ? 4 : 0.25; $diagFactor = 1 if ($dmrgOrLanczos eq "Lanczos"); while() { chomp; my @temp = split; next if (scalar(@temp) != 3); my $freq = $spectral[$c]; my @freq; @freq = @$freq if ($ind > 0); checkFreq(\@freq,$ind,$temp[0]); my @value; my $tmp = $diagFactor; $value[0] = $temp[1] * $tmp; $value[1] = $temp[2] * $tmp; $freq[1] += $value[0]; $freq[2] += $value[1]; $spectral[$c] = \@freq; $c++; } close(FILE); } sub addOptical { my ($file,$ind,$site,$site2,$L) = @_; open(FILE,"$file") or die "$0: line $. Cannot open $file: $!\n"; my $c = 0; my $diagFactor = ($site == $site2) ? 4 : 0.5; $diagFactor = 1 if ($dmrgOrLanczos eq "Lanczos"); while() { chomp; my @temp = split; next if (scalar(@temp) != 3); my $freq = $spectral[$c]; my @freq; @freq = @$freq if ($ind > 0); checkFreq(\@freq,$ind,$temp[0]); my @value; my $tmp = lMinusFactor($site,$L) * lMinusFactor($site2,$L) * $diagFactor; $value[0] = $temp[1] * $tmp; $value[1] = $temp[2] * $tmp; $freq[1] += $value[0]; $freq[2] += $value[1]; $spectral[$c] = \@freq; $c++; } close(FILE); } sub lMinusFactor { my ($l,$L) = @_; return ($l + 1 - ($L+1)/2); } sub checkFreq { my ($f,$ind,$omega) = @_; if ($ind == 0) { $f->[0] = $omega; $f->[1] = 0; $f->[1] = 0; return; } defined($f->[0]) or die "$0: Undefined freq for $omega\n"; ($f->[0] == $omega) or die "$0: Invalid frequency ".$f->[0]." should be $omega\n"; } sub printCf { my ($output,$f) = @_; my @freq = @$f; open(FOUT," > $output") or die "$0: Cannot open $output for writing: $!\n"; for (my $i = 0; $i < scalar(@freq); $i++) { my $oneF = $freq[$i]; my @oneFreq = @$oneF; print FOUT "$oneFreq[0] $oneFreq[1] $oneFreq[2]\n"; } close(FOUT); } dmrgpp-6.02/scripts/ToolsDmrgDynamics/dynamicsPrepare.pl000066400000000000000000000101641414604301300235040ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; my ($clean) = @ARGV; if (defined($clean)) { die "$0: Option $clean not understood.\nUSAGE: $0 [clean]\n" unless ($clean eq "clean"); cleanAll(); exit(0); } my $paramsFile = "params.txt"; my $b = checkForFile("inputTemplate.inp",0600,"StayAlive"); if (!$b || statOfFile("inputTemplate.inp",7)==0) { my $someInput = getInput("Please enter the filename to use as input template: "); system("perl makeTemplate.pl $someInput pbsname > inputTemplate.inp"); print STDERR "$0: WARNING file inputTemplate.inp size is 0: might want to run makeTemplate.pl manually\n" if (statOfFile("inputTemplate.inp",7)==0); } $b = checkForFile("batchTemplate.pbs",0600,"StayAlive"); if (!$b || statOfFile("batchTemplate.pbs",7)==0) { makeBatch(); } my $useParams = "n"; my $psimagLite; if (-r "$paramsFile") { print "$0: $paramsFile exits. Use it?\n"; print "Available: y or n\n"; print "Default: y\n"; print "Your answer: "; $_ = ; chomp; $useParams = "y" if ($_=~/^y/i or $_ eq ""); } if ($useParams eq "n") { $psimagLite = getInput("Please Enter PsimagLite directory: "); $psimagLite =~ s/\~/$ENV{"HOME"}/; $psimagLite =~ s/\/$//; createParamsFile($paramsFile); } else { $psimagLite = readLabel($paramsFile,"PsimagLite="); } defined($psimagLite) or die "$0: Undefined PsimagLite directory\n"; checkForFile($paramsFile,0600); checkForFile("$psimagLite/drivers/combineContinuedFraction",0700); checkForFile("$psimagLite/drivers/continuedFractionCollection",0700); checkForFile("$psimagLite/../dmrgpp/src/dmrg",0700); checkForFile("$psimagLite/../LanczosPlusPlus/src/lanczos",0700); systemWrapper("rsync $psimagLite/../dmrgpp/src/dmrg ."); systemWrapper("rsync $psimagLite/../LanczosPlusPlus/src/lanczos ."); sub makeBatch { my $yesOrNo = getInput("Do you want to set up a PBS Batch template? "); if (!($yesOrNo=~/^y/i)) { print STDERR "No PBS Batch template will be set\n"; return; } my $someBatch = getInput("Please enter the filename to use a PBS Batch template: "); my $pbsname = getInput("Please enter a root name for the #PBS -N entry: "); system("perl makeTemplate.pl $someBatch $pbsname > batchTemplate.pbs"); print STDERR "$0: WARNING file batchTemplate.pbs size is 0: might want to run makeTemplate.pl manually\n" if (statOfFile("batchTemplate.pbs",7)==0); } sub getInput { my ($txt) = @_; print "$txt "; $_=; chomp; return $_; } sub checkForFile { my ($file,$perm,$stayAlive) = @_; my $mode = statOfFile($file,2); if (!defined($mode)) { die "$0: File $file does not exist\n" unless (defined($stayAlive)); return 0; } my $b = ($perm & $mode); return 1 if ($b == $perm); die "$0: File $file has mode $mode, but $perm expected\n" unless defined($stayAlive); return 0; } sub statOfFile { #my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, # $atime,$mtime,$ctime,$blksize,$blocks) = stat($file); my ($file,$ind) = @_; my @a = stat($file); return $a[$ind]; } sub systemWrapper { my ($cmd) = @_; defined($cmd) or die "$0: systemWrapper\n"; system($cmd); print "$0: Executed $cmd\n"; } sub createParamsFile { my ($file) = @_; my %params; $params{"PsimagLite"} = $psimagLite; my @items = ("OmegaBegin","OmegaEnd","OmegaStep","OmegaEps"); foreach my $item (@items) { $params{"$item"} = getInput("Please enter a value for $item"); } printHash($file,\%params); } sub printHash { my ($file,$ptr) = @_; my $filebak = $file; $filebak =~ s/\.txt/\.bak/; systemWrapper("cp $file $filebak") if (-r "$file"); my %params = %$ptr; open(FOUT,">$file") or die "$0: Cannot open $file\n"; foreach my $key (keys %params) { print FOUT "$key=$params{$key}\n"; } print FOUT "\n\n"; close(FOUT); print "$0: File $file has been written.\n"; } sub readLabel { my ($file,$label) = @_; my $val; open(FILE,$file) or die "$0: Cannot open file $file : $!\n"; while() { chomp; if (/^$label(.*)/) { $val = $1; last; } } close(FILE); defined($val) or die "$0: No $label in $file\n"; return $val; } sub cleanAll { my @files = ("lanczos","dmrg","inputTemplate.inp","batchTemplate.pbs","params.txt"); foreach my $file (@files) { unlink($file); } } dmrgpp-6.02/scripts/ToolsDmrgDynamics/dynamicsRepeat.pl000066400000000000000000000036251414604301300233320ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use Utils; my ($dmrgOrLanczos,$root,$operatorLabel,$useReflectionSymmetry,$submit) = @ARGV; defined($submit) or die "USAGE: $0 dmrgOrLanczos root operatorLabel useReflectionSymmetry submit\n"; Utils::checkRange($dmrgOrLanczos,"Lanczos","Dmrg"); Utils::checkRange($operatorLabel,"c","n","s+","s-","sz"); Utils::checkRange($submit,"nobatch","nosubmit","submit"); my $templateInput = "inputTemplate.inp"; my $templateBatch = "batchTemplate.pbs"; my $n = Utils::getLabel($templateInput,"TotalNumberOfSites="); for (my $site=0; $site<$n; $site++) { for (my $site2=$site; $site2<$n; $site2++) { next if ($useReflectionSymmetry and Utils::reflected($site,$site2,$n)); if ($submit eq "nobatch") { noBatch($site,$site2,$dmrgOrLanczos,$root,$operatorLabel); next; } my $batch = createBatch($site,$site2,$dmrgOrLanczos,$root,$operatorLabel); system("sync"); submitBatch($batch) if ($submit eq "submit"); } } sub noBatch { my ($site,$site2,$dmrgOrLanczos,$root,$operatorLabel) = @_; system("perl dynamics$dmrgOrLanczos.pl $site $site2 3 $root $operatorLabel"); } sub createBatch { my ($site,$site2,$dmrgOrLanczos,$root,$operatorLabel) = @_; my $ind = "$site"."_"."$site2"; my $file = "Batch$ind.pbs"; open(FOUT,">$file") or die "$0: Cannot write to $file: $!\n"; open(FILE,"$templateBatch") or die "$0: Cannot open $templateBatch: $!\n"; while() { while (/\$\$([a-zA-Z0-9\[\]]+)/) { my $line = $_; my $name = $1; my $str = "\$".$name; my $val = eval "$str"; defined($val) or die "$0: Undefined substitution for $name\n"; $line =~ s/\$\$$name/$val/; $_ = $line; } print FOUT; } close(FILE); close(FOUT); print STDERR "$0: $file written\n"; return $file; } sub submitBatch { my ($batch) = @_; sleep(2); system("qsub $batch"); print STDERR "$0: Submitted $batch\n"; } dmrgpp-6.02/scripts/ToolsDmrgDynamics/makeTemplate.pl000066400000000000000000000036461414604301300227760ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; my ($file,$pbsname) = @ARGV; defined($pbsname) or die "USAGE: $0 file pbsname\n"; my $ext=" "; if ($file =~ /\.([^\.]*$)/) { $ext = $1; } if ($ext eq "inp") { makeTemplateInput($file); } elsif ($ext eq "pbs") { makeTemplateBatch($file,$pbsname); } else { die "$0: file must end in .inp or .pbs\n"; } print STDERR "$0: WARNING: Check produced output before using\n"; sub makeTemplateBatch { my ($file,$pbsname) = @_; defined($pbsname) or die "USAGE: $0 file.inp or $0 file.pbs pbsname\n"; open(FILE,$file) or die "$0: Cannot open file $file : $!\n"; while() { if (/#PBS +\-N +(.*$)/) { print "#PBS -N $pbsname\$\$site_\$\$site2\n"; next; } print; last unless (/^#/); } close(FILE); print "cd \$PBS_O_WORKDIR\n"; print "date\nperl dynamics\$\$dmrgOrLanczos.pl \$\$site \$\$site2 3 \$\$root \$\$operatorLabel\ndate\n\n"; } sub makeTemplateInput { my ($file) = @_; open(FILE,$file) or die "$0: Cannot open file $file : $!\n"; while() { if (/^hubbardU/) { my @temp = split; die "$0: $_\n" if (scalar(@temp)<3); print "##U=$temp[2]\n"; print "hubbardU \$hubbardU\n"; next; } if (/^potentialV/) { my @temp = split; print "##V=$temp[2]\n"; print "potentialV \$potentialV\n"; next; } if (/^OutputFile=/) { print "OutputFile=\$data\n"; next; } if (/^DynamicDmrgType=/) { print "DynamicDmrgType=\$type\n"; next; } if (/^TSPSites/) { print "TSPSites \$sites\n"; next; } if (/^TSPLoops/) { print "TSPLoops \$loops\n"; next; } last if (/^TSPOperator=/); print; } close(FILE); print< 1); my $dataRoot2 = "${dataRoot1}_${type}"; $input = createInput($n,$dataRoot2,$siteMin,$siteMax,$type); system("./dmrg -f $input &> out"); print STDERR "Sites $site $site2 Type $type done\n"; } my $result; if ($site2 >= $site) { $result = postProc($dataRoot1); } die "$0: $result does not exist\n" unless (defined($result) and -r "$result"); my $resultLanczos = doLanczos($input,"${dataRoot1}Lanczos",$operatorLabel); print STDERR "$0: Result $result for DMRG, Result $resultLanczos for Lanczos\n"; sub postProc { my ($dataRoot1)=@_; my $data = "${dataRoot1}_0.txt"; my $energy = readEnergy("$data"); print STDERR "Energy=$energy\n"; my $isDiagonal = ($siteMin == $siteMax) ? 1 : 0; for (my $type = 1; $type < 4; ++$type) { last if ($isDiagonal and $type > 1); $data .= " ${dataRoot1}_$type.txt"; } my $psimagLite = $params{"PsimagLite"}; system("$psimagLite/drivers/combineContinuedFraction $data > $dataRoot1.comb"); setEnergy("$dataRoot1.comb",$energy); my $cfFunction = functionVsOmega($dataRoot1); Utils::scale($cfFunction,4,3); return $cfFunction; } sub doLanczos { my ($input,$dataRoot,$operatorLabel) = @_; system("./lanczos -f $input -g $operatorLabel &> $dataRoot.comb"); return functionVsOmega($dataRoot); } sub functionVsOmega { my ($dataRoot) = @_; my ($psimagLite,$begin,$end,$step,$eps) = ($params{"PsimagLite"},$params{"OmegaBegin"},$params{"OmegaEnd"}, $params{"OmegaStep"},$params{"OmegaEps"}); my $cfFunction = "$dataRoot.cf"; system("$psimagLite/drivers/continuedFractionCollection -f $dataRoot.comb -b $begin -e $end -s $step -d $eps > $cfFunction"); return $cfFunction; } sub createInput { my ($n,$dataRoot,$site1,$site2,$type)=@_; my @sites = ($site1,$site2); my $file="input${site1}_${site2}_${type}.inp"; open(FOUT,">$file") or die "$0: Cannot write to $file\n"; my ($sites,$loops,@matrix) = calcSitesAndLoops($n,$type,@sites); my $U = Utils::getLabel($templateInput,"##U="); my $hubbardU = setVector($n,$U); my $V = Utils::getLabel($templateInput,"##V="); my $potentialV = setVector(2*$n,$V); my $data = "$dataRoot.txt"; my $steps = int($n/2) - 1; open(FILE,"$templateInput") or die "$0: Cannot open $templateInput: $!\n"; while() { next if (/^#/); if (/\$([a-zA-Z0-9\[\]]+)/) { my $name = $1; my $str = "\$".$name; my $val = eval "$str"; defined($val) or die "$0: Undefined substitution for $name\n"; s/\$\Q$name/$val/g; } print FOUT; } close(FILE); close(FOUT); return $file; } sub calcSitesAndLoops { my ($n,$type,@sites)=@_; my ($sites,$loops,$matrix) = calcSitesAndLoopsAux($n,$type,@sites); return reorderSites($sites,$loops,$matrix); } sub reorderSites { my ($sites,$loops,$matrix) = @_; my @sites2 = @$sites; my $nsites = scalar(@sites2); my @perm = sort { $sites2[$a] cmp $sites2[$b] } 0 .. @sites2-1; my @newsites; my @newloops; my @newmatrix; for (my $i = 0; $i < 4; $i++) { $newmatrix[$i] = zeroMatrix(); } for (my $i = 0; $i < $nsites; $i++) { my $j = $nsites - $i - 1; $newsites[$i] = $sites2[$perm[$j]]; $newloops[$i] = $loops->[$perm[$j]]; $newmatrix[$i] = $matrix->[$perm[$j]]; } my $newsites = "$nsites ".arrayToString(\@newsites); my $newloops = "$nsites ".arrayToString(\@newloops); my $nOver2 = int($n/2); if ($newsites[0] == $n-1) { my $indexToSwap = 1; $indexToSwap = 2 if ($nsites == 3 and $newsites[2] >= $nOver2); my ($tmp1,$tmp2) = ($newsites[0],$newsites[$indexToSwap]); Utils::myswap(\$tmp1,\$tmp2); ($newsites[0],$newsites[$indexToSwap]) = ($tmp1,$tmp2); $newsites = "$nsites ".arrayToString(\@newsites); Utils::setVector(\@newloops,0); $newloops = "$nsites ".arrayToString(\@newloops); ($tmp1,$tmp2) = ($newmatrix[0], $newmatrix[$indexToSwap]); Utils::myswap(\$tmp1,\$tmp2); ($newmatrix[0], $newmatrix[$indexToSwap]) = ($tmp1,$tmp2); } return ($newsites,$newloops,@newmatrix); } sub arrayToString { my ($a) = @_; my $total = scalar(@$a); my $str = ""; for (my $i = 0; $i < $total; $i++) { $str .= "$a->[$i] "; } return $str; } sub calcSitesAndLoopsAux { my ($n,$type,@sites)=@_; my $loopDelay = 1; my @sites2 = @sites; my @loops = ($loopDelay, $loopDelay); my $isDiagonal = ($sites[0] == $sites[1]) ? 1 : 0; @sites2 = ($sites[0]) if ($isDiagonal); @loops = ($loopDelay) if ($isDiagonal); my @matrix; $matrix[0] = findMatrix($type,0); $matrix[1] = findMatrix($type,1); $matrix[2] = zeroMatrix(); $matrix[3] = zeroMatrix(); my $isOk1 = ($sites[0] != 0 and $sites[1] != $n-1) ? 1 : 0; my $isOk2 = ($sites[0] == 0 and $sites[1] == 1) ? 1 : 0; my $isOk3 = ($sites[0] == $n-2 and $sites[1] == $n-1) ? 1 : 0; return (\@sites2,\@loops,\@matrix) if ($isOk1 || $isOk2 || $isOk3); if ($isDiagonal) { if ($sites[0] == 0) { @sites2 = (1, 0); @loops = ($loopDelay, $loopDelay); $matrix[0] = findMatrix($type,0); $matrix[1] = zeroMatrix(); return (\@sites2,\@loops,\@matrix); } if ($sites[0] == $n - 1) { @sites2 = ($n-2,$n-1); @loops = ($loopDelay, $loopDelay); $matrix[0] = zeroMatrix(); $matrix[1] = findMatrix($type,1); return (\@sites2,@loops,\@matrix); } die "$0: calcSitesAndLoops\n"; } if ($sites[0] == 0 && $sites[1] != $n - 1) { @sites2 = (1, $sites[0], $sites[1]); @loops = ($loopDelay, $loopDelay, $loopDelay); $matrix[0] = zeroMatrix(); $matrix[1] = findMatrix($type,0); $matrix[2] = findMatrix($type,1); return (\@sites2,\@loops,\@matrix); } if ($sites[0] != 0 && $sites[1] == $n - 1) { @sites2 = ($sites[0], $n-2, $sites[1]); @loops = ($loopDelay, $loopDelay, $loopDelay); $matrix[0] = findMatrix($type,0); $matrix[1] = zeroMatrix(); $matrix[2] = findMatrix($type,1); return (\@sites2,\@loops,\@matrix); } die "$0: calcSitesAndLoops\n" unless ($sites[0] == 0 and $sites[1] == $n-1); @sites2 = ($sites[0], 1, $n-2, $sites[1]); @loops = ($loopDelay, $loopDelay, $loopDelay, $loopDelay); $matrix[0] = findMatrix($type,0); $matrix[1] = zeroMatrix(); $matrix[2] = zeroMatrix(); $matrix[3] = findMatrix($type,1); return (\@sites2,\@loops,\@matrix); } sub findMatrix { my ($type,$type2)=@_; my $m = findMatrixAux($type,$type2); my $matrixEnd = "FERMIONSIGN=$matrixFermionSign\nJMVALUES 0 0\nAngularFactor=1\n\n"; return "$m$matrixEnd"; } sub findMatrixAux { my ($type,$type2)=@_; if ($model eq "HeisenbergSpinOneHalf") { return findMatrixHeisenbergSpinOneHalf($type,$type2); } findMatrixHubbard($type,$type2); } sub findMatrixHeisenbergSpinOneHalf { my ($type,$type2)=@_; my $matrix = ($operatorLabel eq "sz") ? "1 0\n0 -1\n" : "0 0\n1 0\n"; if (($type & 1) && !($operatorLabel eq "sz")) { $matrix = "0 1\n0 0\n"; } return $matrix if ($type2==0); if ($type>1) { $matrix = multiplyMatrix($matrix,-1); } return $matrix; } sub findMatrixHubbard { my ($type,$type2)=@_; my $matrix = ($operatorLabel eq "c") ? "0 1 0 0\n0 0 0 0\n0 0 0 1\n0 0 0 0\n" : "0 0 0 0\n0 1 0 0\n0 0 0 0\n0 0 0 1\n"; if (($type & 1) && ($operatorLabel eq "c")) { $matrix = "0 0 0 0\n1 0 0 0\n0 0 0 0\n0 0 1 0\n"; } return $matrix if ($type2==0); if ($type>1) { $matrix = multiplyMatrix($matrix,-1); } return $matrix; } sub zeroMatrix { my $id = ""; for (my $i = 0; $i < $hilbertSize; ++$i) { for (my $j = 0; $j < $hilbertSize; ++$j) { $id .= "0 "; } $id .= "\n"; } my $matrixEnd = "FERMIONSIGN=1\nJMVALUES 0 0\nAngularFactor=1\n\n"; return "$id$matrixEnd"; } sub multiplyMatrix { my ($matrix)=@_; $matrix=~s/\n/ /g; my @temp=split(/ /,$matrix); my $matrix2=""; for (my $i=0;$itmp.comb") or die "$0: Cannot write to tmp.comb\n"; while() { if (/#CFEnergy=/) { print FOUT "#CFEnergy=$energy\n"; next; } print FOUT; } close(FILE); close(FOUT); system("cp tmp.comb data.comb"); } sub readEnergy { my ($file)=@_; open(FILE,"$file") or die "$0: Cannot open $file\n"; my $energy = 0; my $prevEnergy; while() { chomp; if (/#Energy=(.*$)/) { $energy=$1; if (defined($prevEnergy) and abs($energy-$prevEnergy)<1e-3) { last; } $prevEnergy = $energy; } } close(FILE); return $energy; } sub checkOperatorLabels { my ($operatorLabel,$model) = @_; if ($model eq "HeisenbergSpinOneHalf") { return if ($operatorLabel eq "sz" or $operatorLabel eq "s+" or $operatorLabel eq "s-"); die "$0: $operatorLabel not valid for $model\n"; } else { return if ($operatorLabel eq "c" or $operatorLabel eq "n"); } die "$0: $operatorLabel not valid for $model\n"; } dmrgpp-6.02/scripts/ToolsDmrgDynamics/sampleInputTemplate.inp000066400000000000000000000021431414604301300245240ustar00rootroot00000000000000TotalNumberOfSites=8 NumberOfTerms=1 DegreesOfFreedom=1 GeometryKind=chain GeometryOptions=ConstantValues Connectors 1 1.0 Model=HubbardOneBand ##U=0.0 hubbardU $hubbardU ##V=0.0 potentialV $potentialV SolverOptions=twositedmrg,CorrectionVectorTargeting CorrectionA=0 Version=1219aeb832f7990323cca0baa17ad7b87b731ea6 OutputFile=$data InfiniteLoopKeptStates=100 FiniteLoops 16 $steps 100 0 -$steps 100 0 -$steps 100 0 $steps 100 0 $steps 100 0 -$steps 100 0 -$steps 100 0 $steps 100 0 $steps 100 0 -$steps 100 0 -$steps 100 0 $steps 100 0 $steps 100 0 -$steps 100 0 -$steps 100 0 $steps 100 0 TargetElectronsUp=4 TargetElectronsDown=4 Threads=4 DynamicDmrgType=$type TSPSites $sites TSPLoops $loops TSPProductOrSum=sum DynamicDmrgSteps=400 DynamicDmrgEps=1e-16 DynamicDmrgAdvanceEach=1 CorrectionVectorOmega=0 CorrectionVectorEta=0.3 TSPOperator=raw RAW_MATRIX $hilbertSize $hilbertSize $matrix[0] TSPOperator=raw RAW_MATRIX $hilbertSize $hilbertSize $matrix[1] TSPOperator=raw RAW_MATRIX $hilbertSize $hilbertSize $matrix[2] TSPOperator=raw RAW_MATRIX $hilbertSize $hilbertSize $matrix[3] IsPeriodicX=0 dmrgpp-6.02/scripts/akimaSumBatch.pl000066400000000000000000000004131414604301300174610ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; use lib "."; use AkimaSumBatch; my ($root,$total,$ext)=@ARGV; $ext = ".txt" if !defined($ext); my ($start,$end,$points)=(0,3.0,100); my $fh = *STDOUT; # write to stdout AkimaSumBatch::main($fh,$start,$end,$points,$root,$total,$ext); dmrgpp-6.02/scripts/betterTimeObs.pl000077500000000000000000000020471414604301300175300ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my ($file, $label) = @ARGV; defined($label) or die "USAGE: $0 file label\n"; print "#CmdLine: $file $label\n"; my @a; my %times; open(FIN, "<", $file) or die "$0: Cannot open $file : $!\n"; while () { next unless /\Q$label/; next if (/CmdLine/); my @tmp = split; next if (scalar(@tmp) < 5); my $site = $tmp[0]; my $value = $tmp[1]; my $time = $tmp[2]; my $superdensity = realPartOf($tmp[4]); $a[$site]{"$time"} = {"value" => $value, "superdensity" => $superdensity}; $times{"$time"} = 1; } close(FIN); my $nsites = scalar(@a); my $tt = scalar(keys %times); print STDERR "$0: Found $nsites sites and $tt times in $file\n"; foreach my $time (sort {$a <=> $b} keys %times) { for (my $site = 0; $site < $nsites; ++$site) { my $pair = $a[$site]{"$time"}; if (!defined($pair)) { print "$time $site -100 -100\n"; next; } print "$time $site ".$pair->{"value"}." ".$pair->{"superdensity"}."\n"; } } sub realPartOf { my ($x) = @_; $_ = $x; s/\,.*$//; s/\(//; return $_; } dmrgpp-6.02/scripts/breakInput.pl000077500000000000000000000073531414604301300170710ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use strict; my ($file, $movementsPerFile) = @ARGV; defined($movementsPerFile) or die "USAGE: $0 inputFile movementsPerFile\n"; open(FILE, "<", "$file") or die "$0: Cannot open $file : $!\n"; my @lines; my $needsRestart = 1; while () { chomp; my $line = $_; if (/SolverOptions/) { print STDERR "$0: WARNING: This is not a restart run\n" unless (/restart/); } if (/^ *OutputFile=/) { $line = "OutputFile=\$output"; } if (/^ *RestartFilename=/) { $line = "RestartFilename=\$restart"; $needsRestart = 0; } push @lines, $line; } close(FILE); if ($needsRestart) { push @lines, "RestartFilename=\$restart"; } my @finiteLoops; # Read all finite loops my $rest = readFiniteLoops(\@finiteLoops, \@lines); # Create vector of new finite loops my @newFl = createNewFiniteLoops(\@finiteLoops, $movementsPerFile); # output all inputs my $n = scalar(@newFl); print STDERR "$0: $n files will be created\n"; my $root = $file; $root =~ s/\.[^\.]+$//; for (my $i = 0; $i < $n; ++$i) { writeInput($root, $i, $rest, $newFl[$i]); } sub writeInput { my ($root, $ind, $rest, $h) = @_; my $fout = $root."_$ind".".inp"; open(FOUT, ">", "$fout") or die "$0: Cannot write to $fout : $!\n"; my $output = $root."_$ind"; $rest =~ s/\$output/$output/; if ($ind > 0) { my $prev = $root."_".($ind - 1); $rest =~ s/\$restart/$prev/; $rest =~ s/SolverOptions=/SolverOptions=restart,/; } print FOUT "$rest\nFiniteLoops 1\n"; print FOUT $h->{"move"}." ".$h->{"m"}." ".$h->{"option"}."\n"; close(FOUT); print "$0: File $fout has been written\n"; } sub createNewFiniteLoops { my ($fl, $movementsPerFile) = @_; my @newFl; my $counter = 0; my $hprev; my $sum = 0; my $n = scalar(@$fl); for (my $i = 0; $i < $n; ++$i) { my $doBreak = 0; my $h = $fl->[$i]; if ($counter < $movementsPerFile) { ++$counter; } else { $doBreak = 1; } if ($i > 0) { if ($h->{"move"} != $hprev->{"move"} || $h->{"m"} != $hprev->{"m"} || $h->{"option"} != $hprev->{"option"}) { $doBreak = 1; } } if ($doBreak) { my $hh = {"move" => $sum, "m" => $hprev->{"m"}, "option" => $hprev->{"option"}}; push @newFl, $hh; $sum = $h->{"move"}; $counter = 1; } else { $sum += $h->{"move"}; } $hprev = $h; } $hprev = $fl->[$n - 1]; my $hh = {"move" => $sum, "m" => $hprev->{"m"}, "option" => $hprev->{"option"}}; push @newFl, $hh; return @newFl; } sub readFiniteLoops { my ($fl, $lines) = @_; my ($rest, $blob) = readFiniteLoopsBlob($lines); $blob =~ s/^[ \t]+//; $blob =~ s/[ \t]+$//; my @temp = split/ +/,$blob; my $n = scalar(@temp); die "$0: FATAL: Too small FiniteLoops line\n" unless $n > 3; my $nofl =shift @temp; --$n; die "$0: FATAL: FiniteLoops: Expected 3n elements, got $n\n" unless ($n % 3 == 0); my $nofl2 = int($n/3); die "$0: FATAL: Number of Numbers to follow $nofl, expected $nofl2\n" unless ($nofl == $nofl2); for (my $i = 0; $i < $nofl; ++$i) { my $move = $temp[3*$i]; my $mvalue = $temp[3*$i + 1]; my $option = $temp[3*$i + 2]; my $sign = ($move > 0) ? 1 : -1; my $moves = abs($move); for (my $j = 0; $j < $moves; ++$j) { my $h = {"move" => $sign, "m" => $mvalue, "option" => $option}; push @$fl, $h; } } return ($rest); } sub readFiniteLoopsBlob { my ($lines) = @_; my $ind = 0; my $n = scalar(@lines); my $rest = ""; for (; $ind < $n; ++$ind) { last if ($lines[$ind] =~ /^[ \t]*FiniteLoops[ \t]/); last if ($lines[$ind] =~ /^[ \t]*FiniteLoops$/); $rest .= $lines[$ind]."\n"; } $_ = $lines[$ind++]; s/^ *FiniteLoops//; my $content = $_; for (; $ind < $n; ++$ind) { last if ($lines[$ind] =~ /[^\d\- \t]/); $content .= " ".$lines[$ind]; } for (; $ind < $n; ++$ind) { $rest .= $lines[$ind]."\n"; } return ($rest, $content); } dmrgpp-6.02/scripts/correlations.pl6000077500000000000000000000055371414604301300175610ustar00rootroot00000000000000#!/usr/bin/perl6 use v6; my $self = $*PROGRAM-NAME; sub MAIN($file, $label, $geometry, $sites, $label2?) { my @m = readMatrix($file, $label); my $mode2 = ""; my @m2; my @m3; if ($label2) { if ($label2 ~~ / ".cout"$ /) { $mode2 = "cout"; @m3 = getDensityFromCout($label2, ""); } else { $mode2 = "diagonal"; @m2 = readMatrix($file, $label2); } } my @h = getDistancesAndPairs($geometry, $sites); my $half = @h.elems; for 0..^$half -> Int $distance { my @pairs = @h[$distance].list; my $p = @pairs.elems; my $sum = 0; for 0..^$p -> Int $pind { my %onepair = @pairs[$pind]; my ($i, $j) = (%onepair{"i"}, %onepair{"j"}); #say "***$i **** $j"; #die "Testing\n" if ($distance == 2); $sum += @m[$i][$j]; $sum -= 4*@m2[$i][$i]*@m2[$j][$j] if ($mode2 eq "diagonal"); if ($mode2 eq "cout") { die "$self: Undefined m3 of $i\n" if (!defined(@m3[$i])); die "$self: Undefined m3 of $j\n" if (!defined(@m3[$j])); $sum -= @m3[$i]*@m3[$j]; } } $sum = abs($sum) if ($mode2); say "$distance "~$sum/$p~" $p"; } } sub getDensityFromCout($file, $label) { my @a; # 3 0.983119 0.000000 1.000000 my Int $ln = 0; my $fh = open $file, :r; while !$fh.eof { ++$ln; my $line = $fh.get; next if (/ "CmdLine" /); next unless ($line ~~ / "$label" /); my @temp = split(/\s/, $line); next unless (@temp.elems == 5); @a[@temp[0]] = @temp[1]; } return @a; } sub getDistancesAndPairs($geometry, Int $sites) { my @hptr; my Int $center = $sites div 2; for 0..^$sites -> Int $i { my $distance = geometryMetric($i, $center, $geometry); next if ($distance <= 0); my $imin = ($i < $center) ?? $i !! $center; my $j = ($i < $center) ?? $center !! $i; my $ij = {"i" => $imin, "j" => $j}; @hptr[$distance].append: $ij; } for 0..^$sites -> Int $i { my $ij = {"i" => $i, "j" => $i}; @hptr[0].append: $ij; } return @hptr; } sub geometryMetric($ind, $jnd, $geometry) { return abs($jnd - $ind) if ($geometry eq "chain"); die "$self: Geometry $geometry not implemented\n" unless ($geometry ~~ /^"ladder"/); my $b1 = ($ind +& 1); my $b2 = ($jnd +& 1); return -1 if ($b1 and !$b2); return -1 if ($b2 and !$b1); return abs($jnd - $ind) div 2; } sub readMatrix($file, $label) { my Int $ln = 0; my $fh = open $file, :r; while !$fh.eof { ++$ln; my $line = $fh.get; next if ($line ~~ /CmdLine/); last if ($line ~~ / "$label" /); } ++$ln; $_ = $fh.get; my @temp = split(/\s/, $_); die "$self: Rows Cols not found, line $ln ** $_ **\n" if (@temp.elems != 2); my $rows = @temp[0]; my $cols = @temp[1]; my $row = 0; my @m; while !$fh.eof { ++$ln; my $line = $fh.get; my @tmp = split(/\s/, $line); pop @tmp; die "$self: Wrong number of cols, line $ln, $cols not equal "~@tmp.elems~"\n" if ($cols != @tmp.elems); @m[$row++] = @tmp; last if ($row == $rows); } return @m; } dmrgpp-6.02/scripts/correlationsSymmetry.pl000066400000000000000000000061121414604301300212300ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; my ($file, $label) = @ARGV; defined($label) or die "USAGE: $0 file label\n"; my @matrix = readMatrix($file, $label); my $n = $matrix[0]; my @h = createPairs($n); #printPairs1(\@h); examinePairs1(\@matrix, \@h); sub createPairs { my ($n) = @_; my @h; my @a; my @b; my $counter = 0; ($n & 1) and die "$0: Number of sites must be even\n"; my $nOver2 = int($n/2); for (my $i = 0; $i < $nOver2; ++$i) { for (my $j = $i + 1; $j < $n; ++$j) { my @a = ($i, $j); my @b = findSymmetric($i, $j, $n); my @temp = (\@a, \@b); $h[$counter++] = \@temp; } } return @h; } sub findSymmetric { my ($ind, $jnd, $l) = @_; ($ind < $jnd) or die "$0: Error at findSymmetric\n"; ($l - 1 >= $ind) or die "$0: Error at findSymmetric\n"; my $i = $l - 1 - $ind; my $j = $l - 1 - $jnd; return ($j, $i); } sub printPairs1 { my ($h) = @_; my $p = scalar(@$h); for (my $i = 0; $i < $p; ++$i) { my $ptr = $h->[$i]; (scalar(@$ptr) == 2) or die "$0: bad pairs\n"; my $a = $ptr->[0]; my $b = $ptr->[1]; printPairs2($a, $b); } } sub printPairs2 { my ($a, $b) = @_; my @a = @$a; my @b = @$b; (scalar(@a) == 2) or die "$0: bad pair\n"; (scalar(@b) == 2) or die "$0: bad pair\n"; print "($a[0], $a[1]) == ($b[0], $b[1])\n"; } sub readMatrix { my ($file, $label) = @_; open(FILE, "<", "$file") or die "$0: Cannot open file $file : $!\n"; while () { last if (/^\Q$label/); } $_ = ; defined($_) or die "$0: Nothing found after $label in $file\n"; chomp; my @temp = split; (scalar(@temp) == 2) or die "$0: Error reading $label in $file\n"; $matrix[0] = $temp[0]; $matrix[1] = $temp[1]; my $rows = $matrix[0]; my $cols = $matrix[1]; for (my $i = 0; $i < $rows; ++$i) { $_ = ; defined($_) or die "$0: Error reading matrix $label in $file\n"; chomp; my @temp = split; (scalar(@temp) == $cols) or die "$0: Error in row $i, $file\n"; my @t = saveLine(\@temp); (scalar(@t) == $cols) or die "$0: Error in row $i, in $file\n"; for (my $j = 0; $j < $cols; ++$j) { $matrix[2 + $j*$rows + $i] = $t[$j]; } } close(FILE); return @matrix; } sub saveLine { my ($a) = @_; my $cols = scalar(@$a); my @t; for (my $i = 0; $i < $cols; ++$i) { my $x = $a->[$i]; $x =~ s/[\(\)]//; $x =~ s/,.*$//; $t[$i] = $x; } return @t; } sub examinePairs1 { my ($m, $h) = @_; my $p = scalar(@$h); for (my $i = 0; $i < $p; ++$i) { my $ptr = $h->[$i]; (scalar(@$ptr) == 2) or die "$0: bad pairs\n"; my $a = $ptr->[0]; my $b = $ptr->[1]; examinePairs2($m, $a, $b); } } sub examinePairs2 { my ($m, $a, $b) = @_; my @a = @$a; my @b = @$b; (scalar(@a) == 2) or die "$0: bad pair\n"; (scalar(@b) == 2) or die "$0: bad pair\n"; my $i = $a[0]; my $j = $a[1]; return if ($i == $b[0] and $j == $b[1]); my $x = printMatrixElement($m, $i, $j); print " --- "; $i = $b[0]; $j = $b[1]; my $y = printMatrixElement($m, $i, $j); my $diff = abs($x - $y); print " -- diff = $diff\n"; } sub printMatrixElement { my ($m, $i, $j) = @_; my $rows = $m->[0]; my $x = $m->[2 + $j*$rows + $i]; print "m($i, $j)=".$x; return $x; } dmrgpp-6.02/scripts/coutAnalysis.pl000077500000000000000000000145751414604301300174470ustar00rootroot00000000000000#!/usr/bin/perl =pod USAGE is coutAnalysis.pl runForinput.cout OUTPUT is 2 columns Module TimeSpent =cut use warnings; use strict; use utf8; use MIME::Base64; my ($file, $additional) = @ARGV; defined($file) or die "USAGE: $0 file [additional]\n"; my %h; my %deltas; my %various; my $input; my $totalTime = loadData(\%h, \%deltas, \%various, \$input, $file); print STDERR "#ElementsObserved=".scalar(keys %h)."\n"; printData(\%h, $totalTime); print STDERR "#TotalForRun=$totalTime\n"; printHash(\%deltas, "DeltaName", "DeltaTime") if (scalar(keys %deltas) > 0); printHash(\%various, "ItemName", "ItemValue") if (scalar(keys %various) > 0); if (defined($input) and defined($additional) and $additional eq "i") { print "------\n\n$input\n---------\n"; } sub loadData { my ($h, $deltas, $various, $input, $file) = @_; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; my ($firstT, $lastT); my $observed = 0; my ($lastE, $lanczosSteps); while () { if (/PsiApp::echoBase64: Echo of ([^ ]+) /) { $_ = ; chomp; $$input = decode_base64($_); next; } # lowest eigenvalue= -6.13004 if (/lowest eigenvalue= ([^ ]+)/) { $lastE = $1; } if (/after (\d+) steps/) { $lanczosSteps += $1; } #DeltaClock matrixVectorProduct 0.051095 if (/^DeltaClock ([^ ]+) ([^ ]+)/) { my $name = $1; my $dt = $2; next unless $dt =~ /^[\d\.]+$/; $deltas->{"$name"} += $dt; next; } #LanczosSolver [7.714]: starting clock next unless (/^([^ ]+) \[([\d\.]+)\]\: ([^ ]+) clock/); my $name = $1; my $t = $2; my $what = $3; (($name) and ($t) and ($what)) or next; next if ($what ne "starting" and $what ne "stopping"); $firstT = $t if (!defined($firstT)); $lastT = $t; if (defined($h->{$name})) { my $ptr = $h->{$name}; if (scalar(@$ptr) != 6) { print STDERR "$0: Error with $name\n"; next; } my $value = $ptr->[1]; my $dt = 0; my $otherness = $ptr->[3]; my $min = $ptr->[4]; my $max = $ptr->[5]; if ($what eq "starting") { if ($value != 0) { print STDERR "$0: $name starting without stopping at line $.\n"; next; } $value = $t; } elsif ($what eq "stopping") { if ($value > $t) { print STDERR "$0: $name has time skew\n"; next; } $dt = $t - $value; $min = $dt if ($dt < $min); $max = $dt if ($dt > $max); # Increase otherness by dt for all labels that are in open mode $value = 0; if ($dt < $otherness) { die "$0: Otherness $otherness greater than $dt for $name line $.\n"; } $dt -= $otherness; otherNess($h, $dt); $otherness = 0; $observed += $dt; } else { print STDERR "$0: expecting starting or stopping not $what\n"; next; } my @temp = ($ptr->[0] + $dt, $value, $ptr->[2] + 1, $otherness, $min, $max); $h->{$name} = \@temp; } else { if ($what ne "starting") { print STDERR "$0: expecting starting not $what\n"; next; } my @temp = (0, $t, 1, 0, 0, 0); $h->{$name} = \@temp } } close(FILE); $various{"lastE"} = $lastE if (defined($lastE)); $various{"lanczosSteps"} = $lanczosSteps if (defined($lanczosSteps)); my $total = $lastT - $firstT; if ($total < $observed) { print STDERR "total $total is less than observed $observed\n"; return $total; } my $unobserved = $total - $observed; my @temp = ($unobserved, 0, 0, 0); $h->{"Unobserved"} = \@temp; return $total; } sub otherNess { my ($h, $dt) = @_; foreach my $k (keys %$h) { my $ptr = $h->{$k}; next if ($ptr->[1] == 0); $ptr->[3] += $dt; } } sub printData { my ($hptr, $totalTime) = @_; my %h = %$hptr; my @ls = (25, 14, 12); my $h1 = toFixedLength("Module", $ls[0], "center"); my $h2 = toFixedLength("SelfInSeconds", $ls[1], "center", 3); my $h3 = toFixedLength("SelfPerCent", $ls[2], "center", 1); my $h4 = toFixedLength("TimesCalled", $ls[2], "center"); my $sep = multiChar(" ", 4); my $sep2 = multiChar(" ", 4); print "$h1$sep$h2$sep2$h3$sep2$h4\n"; my $c = {"time" => 0, "percent" => 0}; foreach my $k (sort {$h{$b}->[0] <=> $h{$a}->[0]} keys %h) { my $ptr = $hptr->{$k}; if (scalar(@$ptr) != 6) { print STDERR "$0: Error with $k\n"; next; } my $name = toFixedLength($k, $ls[0], "after"); my $t = int($ptr->[0]*1000)/1000; $c->{"time"} += $t; my $time = toFixedLength($t, $ls[1], "before", 3); my $shouldBeZero = $ptr->[1]; if ($shouldBeZero != 0) { print STDERR "$0: Error with $k, expecting 0, got $shouldBeZero\n"; } my $perCent = int($t*1000/$totalTime)/10; $c->{"percent"} += $perCent; $_ = correctDecimalPointIfNeeded($perCent, 1); my $perCentPrint = toFixedLength($_." %", $ls[2], "before", 1); my $numberOfTimes = toFixedLength($ptr->[2], $ls[2], "before"); #my $min = $ptr->[4]; my $max = sprintf("%.3f", $ptr->[5]); my $average = $time/$numberOfTimes; $average = sprintf("%.3f", $average); print "$name$sep$time$sep2$perCentPrint$sep2$numberOfTimes"; print " m $max a $average\n"; } my ($t, $perCent) = ($c->{"time"}, $c->{"percent"}); my $name = toFixedLength("Totals", $ls[0], "after"); my $time = toFixedLength($t, $ls[1], "before", 3); my $perCentPrint = toFixedLength($perCent." %", $ls[2], "before", 1); print "----------------------------------------------\n"; print "$name$sep$time$sep2$perCentPrint\n"; } sub printHash { my ($deltas, $h1, $h2) = @_; print "\n$h1\t$h2\n"; foreach my $name (sort keys %$deltas) { my $val = $deltas->{"$name"}; if ($h1 eq "DeltaName") { $val = int($val*1000)/1000; } print "$name\t$val\n"; } } sub toFixedLength { my ($what, $n, $alignment, $prec) = @_; my $x = correctDecimalPointIfNeeded($what, $prec); my $l = length($x); return $x if ($l >= $n); my $spaces = multiChar(" ", $n - $l); if ($alignment eq "after") { return "$x$spaces"; } elsif ($alignment eq "before") { return "$spaces$x"; } my $nml = $n - $l; ++$nml if ($nml & 1); my $h = multiChar(" ", int($nml/2)); return "$h$x$h"; } sub correctDecimalPointIfNeeded { my ($x, $prec) = @_; if ($x =~ /(^\d+)\.(\d*$)/) { my $a = $1; my $b = $2; my $l = length($b); return "$x" if ($l >= $prec); my $paddingLength = $prec - $l; my $pad = multiChar("0", $paddingLength); return "$x"."$pad"; } if ($x =~ /(^\d+$)/ and defined($prec)) { my $pad = multiChar("0", $prec); return "$x"."."."$pad"; } return "$x"; } sub multiChar { my ($c, $n) = @_; my $sum = ""; for (my $i = 0; $i < $n; ++$i) { $sum .= "$c"; } return $sum; } dmrgpp-6.02/scripts/deltaDeltaRead.pl6000077500000000000000000000051621414604301300177060ustar00rootroot00000000000000#!/usr/bin/perl6 use v6; my $self = $*PROGRAM-NAME; sub MAIN(Int $sites, $file) { my %h = readDeltaDelta($sites, $file); my @a = %h{"a"}.list; my @b = %h{"b"}.list; note "a has " ~ @a.elems ~ " and b has " ~ @b.elems; my Int $center = $sites div 2; my @value; my @count; for 0..^$sites -> Int $s { next if (!defined(@a[$s])); next if (!defined(@b[$s])); my $val = @a[$s] - @b[$s]; my Int $distance = abs($s - $center) div 2; if (!defined(@value[$distance])) { @value[$distance] = $val; @count[$distance] = 1; } else { @value[$distance] += $val; ++@count[$distance]; } } my $max = @value.elems; for 1..^$max -> Int $distance { my $val = @value[$distance]/@count[$distance]; say "$distance " ~ $val; } } sub readDeltaDelta(Int $sites, $file) { my Int $center = $sites div 2; my $label; my $readNext = 0; my @a; my @b; for $file.IO.lines -> $line { next if ($line ~~ / "CmdLine" /); if ($readNext) { my @temp = split(/\s+/, $line); die "$self: Wrong line $line\n" if (@temp.elems != 5); my ($type, $site) = findTypeAndSite($label, $center); if ($type == 0) { @a[$site] = @temp[4]; } else { @b[$site] = @temp[4]; } $readNext = 0; next; } if ($line ~~ / "Fixed all sites" /) { $readNext = 1; } else { $readNext = 0; } if ($line ~~ /^" @a, "b" => @b}; } sub findTypeAndSite($label, Int $center) { # my @temp = split(/"|"/, $label); @temp.elems == 3 or die "$self: Wrong label $label\n"; my @temp2 = split(/";"/, @temp[1]); @temp2.elems == 4 or die "$self: Wrong operators "~@temp[1]~"\n"; my @sites; my @spins; my ($removedCenter, $removedCenterP1) = (0, 0); for 0..^4 -> Int $ind { my $op = @temp2[$ind]; my ($spin, $site) = getSpinAndSite($op); if ($site == $center and !$removedCenter) { $removedCenter = 1; next; } if ($site == $center + 1 and !$removedCenterP1) { $removedCenterP1 = 1; next; } push @sites, $site; push @spins, $spin; } @sites.elems == 2 or die "$self: Wrong operators (sites): "~@temp[1]~"\n"; my $s = (@sites[0] < @sites[1]) ?? @sites[0] !! @sites[1]; my $indexForSpin0 = (@spins[0] == 0) ?? 0 !! 1; my $type = (@sites[$indexForSpin0] > @sites[1 - $indexForSpin0]); my $diff = ($type) ?? @sites[$indexForSpin0] - @sites[1-$indexForSpin0] !! @sites[1 - $indexForSpin0] - @sites[$indexForSpin0]; #note $diff; return ($type, $s); } sub getSpinAndSite($op) { my $spin = 0; if ($op ~~ /"?1"/) { $spin = 1; } my $site; if ($op ~~ /"[" (\d+) "]"/) { $site = $0; } return ($spin, $site); } dmrgpp-6.02/scripts/deltaDeltaWrite.pl6000077500000000000000000000016361414604301300201270ustar00rootroot00000000000000#!/usr/bin/perl6 use v6; sub MAIN($sites, Str $type = "vertical") { my %offsets = ("vertical" => 1, "horizontal" => 2, "diagonal" => 3); my $offset = %offsets{"$type"}; my Int $center = $sites div 2; my $x = ""; for 0..^$sites -> Int $j { next if ($j +& 1); next if ($j + $offset >= $sites); $x ~= compute($center, 0, $j, 1, $offset)~","; $x ~= compute($center, 0, $j, 0, $offset)~","; } $x ~~ s/","$//; say '"' ~ $x ~ '"'; } sub compute($ind, $s0, $jnd, $sb1, $offset) { my $ss0 = ($s0) ?? "?1" !! ""; my $ssb0 = ($s0) ?? "" !! "?1"; my $ssb1 = ($sb1) ?? "?1" !! ""; my $ss1 = ($sb1) ?? "" !! "?1"; my $bind = $ind + 1; my $bjnd = $jnd + $offset; my $op1 = "c$ss0'["~$ind~"]"; my $op2 = "c$ssb0'["~$bind~"]"; my $op3 = "c$ssb1"~"["~$bjnd~ "]"; my $op4 = "c$ss1"~"["~$jnd~"]"; if ($ind < $jnd) { return ""; } else { return ""; } } dmrgpp-6.02/scripts/deltaEnergies.pl000077500000000000000000000016001414604301300175250ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my ($file) = @ARGV; defined($file) or die "USAGE: $0 file\n"; my @energies; my @ms; loadEnergies(\@energies, \@ms, $file); printDeltas(\@energies, \@ms); sub loadEnergies { my ($e, $m, $file) = @_; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; while () { last if (/Infinite dmrg loop has been done/); } my $counter = 0; while () { chomp; if (/lowest eigenvalue= ([^ ]+)/) { $e->[$counter++] = $1; } if (/kept states=([^ ]+)/) { $m->[$counter] = $1; } } close(FILE); } sub printDeltas { my ($e, $ms) = @_; my $n = scalar(@$e); return if ($n < 3); my $eprev = $e->[0]; my $mprev = $ms->[0]; for (my $i = 1; $i < $n; ++$i) { my $delta = $eprev - $e->[$i]; $eprev = $e->[$i]; my $m = $ms->[$i]; defined($m) or $m = $mprev; print "$i $delta $m\n"; $mprev = $m; } } dmrgpp-6.02/scripts/densityToTikz.pl000066400000000000000000000033111414604301300175740ustar00rootroot00000000000000#!/usr/bin/perl # use strict; use warnings; use utf8; my ($file, $sites, $label) = @ARGV; defined($sites) or die "USAGE: file sites [label]\n"; defined($label) or $label = ""; my @data; loadData(\@data, $file); plotData(\@data); sub plotData { my ($d) = @_; print "\\documentclass{article}\n"; print "\\usepackage{tikz}\n"; print "\\usepackage{pgfplots}\n"; print "\\usepackage[margin=0.5cm]{geometry}\n"; print "\\begin{document}\n"; print "\\begin{tikzpicture}\n"; my $leg = 2; my $sitesOverLeg = $sites/$leg; my $r = 0.15; for (my $x = 0; $x < $sitesOverLeg; ++$x) { my $xx = $x*0.4; for (my $y = 0; $y < $leg; ++$y) { my $id = $y + $x*2; my $c = int($d->[$id]*100); die "$0: $c > 100 or $c < 0\n" if ($c < 0 || $c > 100); my $yy = $y*0.5; print "\\draw[fill=black!$c!white,draw=none] ($xx, $yy) circle [radius=${r}];\n"; } } print "%\n"; my $dx = 0.5; my $dy = 0.5; my $yy = 1; for (my $i = 0; $i < 10; ++$i) { my $c = $i*10; my $xx = $i*0.5; print "\\draw[draw=black,fill=black!$c!white] ($xx,$yy) rectangle ("; print "".($xx+$dx).",".($yy+$dy).");\n"; } print <[$id].") "; } print <) { next if (/^#/); if (/\Q$label/) { chomp; my @temp = split; my $n = scalar(@temp); if ($n != 5) { print STDERR "$0: Line $.\n"; next; } $d->[$temp[0]] = $temp[1]; } } close(FILE); } dmrgpp-6.02/scripts/dumpEigs.pl000077500000000000000000000043701414604301300165360ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my ($file, $center, $occurrence) = @ARGV; ($file) or die "USAGE: $0 datafile.hd5 [center] [occurrence]\n"; my $label = "/Def/DensityMatrixEigenvalues/Size"; my $n = readDataSet($file, $label); print "#There are $n center of orthogonalities\n"; my $nodata = "datafile.hd5 doesn't contain the data,"; my $perhaps = "perhaps you didn't add saveDensityMatrixEigenvalues in SolverOptions"; ($n > 0) or die "$0: $nodata $perhaps\n"; ($center) or exit(0); if ($center =~ /(^\d+)\+(\d+$)/) { $center = $1 - 1; } ($center =~ /(^\d+$)/) or die "$0: center must be a number or number+number\n"; die "$0: Center too big, must be smaller than $n\n" if ($center >= $n); $label = "/Def/DensityMatrixEigenvalues/$center/Size"; $n = readDataSet($file, $label); print "#Center of orthogonality $center has $n occurrences\n"; ($n > 0) or die "$0: $nodata for this center of orthogonality\n"; $occurrence = 0 if (!defined($occurrence) and $n == 1); ($occurrence) or exit(0); ($occurrence =~ /(^\d+$)/) or die "$0: occurrence must be a number\n"; die "$0: occurrence too big, must be smaller than $n\n" if ($occurrence >= $n); $label = "/Def/DensityMatrixEigenvalues/$center/$occurrence"; my @eigs = readDataSet($file, $label); printVector(\@eigs); sub readDataSet { my ($file, $label) = @_; if ($label =~ /(^[a-zA-Z0-9\/]+)/) { $label = $1; } else { die "$0: Invalid label $label\n"; } if ($file =~ /(^[a-zA-Z0-9\.\/]+)/) { $file = $1; } else { die "$0: Invalid file $file\n"; } die "$0: File $file not readable\n" unless (-r "$file"); $ENV{"PATH"} = ""; $ENV{"ENV"} = ""; $ENV{"BASH_ENV"} = ""; my $value = ""; open (PIPE, "/usr/bin/h5dump -d \"$label\" \"$file\" |") or die "$0: Cannot open pipe : $!\n"; while () { chomp; if (/\([0-9]+\)\: +(.+$)/) { $value .= $1; } } close(PIPE); die "$0: $label not found in $file" if ($value eq ""); my @a = split/,/, $value; trimSpacesVector(\@a); return (scalar(@a) == 1) ? $a[0] : @a; } sub trimSpacesVector { my ($a) = @_; my $n = scalar(@$a); for (my $i = 0; $i < $n; ++$i) { $a->[$i] =~ s/^ +//; $a->[$i] =~ s/ +$//; } } sub printVector { my ($a) = @_; my $n = scalar(@$a); for (my $i = 0; $i < $n; ++$i) { print "$a->[$i]\n"; } } dmrgpp-6.02/scripts/fit.pl000066400000000000000000000065761414604301300155520ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; use Math::Trig; use lib "."; use OmegaUtils; my $pi = Math::Trig::pi; use Getopt::Long qw(:config no_ignore_case); =pod tbw =cut my $usage = "USAGE: $0 -f dollarizedInput -m mu -k kx [-p] [-z] out.gnuplot\n"; my $templateInput; my $isPeriodic; my $zeroAtCenter = 0; my $mu; my $kx; GetOptions('f=s' => \$templateInput, 'm=f' => \$mu, 'p' => \$isPeriodic, 'z' => \$zeroAtCenter, 'k=f' => \$kx) or die "$usage\n"; my $x = (defined($kx) & defined($mu)); ($x and defined($templateInput) and defined($isPeriodic)) or die "$usage\n"; my $sites; my $eta; my $geometryName; my $geometryLeg = 1; my $hptr = {"GeometryKind" => \$geometryName, "LadderLeg" => \$geometryLeg, "TotalNumberOfSites" => \$sites, "CorrectionVectorEta" => \$eta}; OmegaUtils::getLabels($hptr,$templateInput); die "$0 doesn't support LadderLeg=$geometryLeg\n" if ($geometryLeg > 2); my ($file) = @ARGV; defined($file) or die "$usage\n"; my ($gamma, $delta, $anorm); getMinParams(\$gamma, \$delta, \$anorm, $file, $mu, $kx); $x = (defined($gamma) and defined($delta) and defined($anorm)); $x or die "$0: Fit failed\n"; print STDERR "gamma=$gamma delta=$delta anorm=$anorm\n"; my %spec; my $numberOfKs; my @omegas; findOmegas(\@omegas, \$numberOfKs, $file); createSpectrum(\%spec, \@omegas, $numberOfKs); my $geometry = {"name" => $geometryName, "leg" => $geometryLeg}; OmegaUtils::printOffsetPlots("fit", \%spec, $geometry, $isPeriodic, $zeroAtCenter); sub findOmegas { my ($omegas, $numberOfKs, $file) = @_; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; my $counter = 0; my $x = 0; my $omegaPrev; while () { my @temp = split; if (defined($omegaPrev) && $omegaPrev != $temp[1]) { $$numberOfKs = $counter; $counter = 0; $omegas[$x++] = $omegaPrev; } $omegaPrev = $temp[1]; ++$counter; } close(FILE); $omegas[$x++] = $omegaPrev; print STDERR "$0: Found ".scalar(@omegas)." omegas\n"; print STDERR "$0: Found numberOfKs= ".$$numberOfKs."\n"; } sub createSpectrum { my ($ptr, $omegas, $numberOfKs) = @_; foreach my $omega (@$omegas) { my @temp = generateSpectrum($omega, $numberOfKs); $ptr->{$omega} = \@temp; } } sub generateSpectrum { my ($omega, $numberOfQs) = @_; my $omega2 = $omega*$omega; my $gaom = $gamma*$omega; my @result; $result[0] = $omega; for (my $ky = 0; $ky < 2; ++$ky) { for (my $m2 = 0; $m2 < $numberOfQs; ++$m2) { my $q = OmegaUtils::getQ($m2, $numberOfQs, $isPeriodic); my $ek = dispersionBar($q, $ky*$pi); my $num = ($omega + $ek)*2.0*$gaom*$anorm/$pi; my $phi2 = $ek**2 + $gamma**2 + $delta**2; my $den = ($omega2 - $phi2)**2 + 4*$gaom*$gaom; my $imagPart = $num/$den; $result[2*$m2+1+2*$ky*$numberOfQs] = 0; # real part $result[2*$m2+2+2*$ky*$numberOfQs] = $imagPart; # imag part } } return @result; } sub dispersionBar { my ($kx, $ky) = @_; return -2*cos($kx) - cos($ky) - $mu; } sub getMinParams { my ($gamma, $delta, $anorm, $file, $mu, $kx) = @_; my $ky = 0; my $cmd = $ENV{"HOME"}."/github/PsimagLite/drivers/fit $file $mu $kx $ky"; open(PIPE, "$cmd |") or die "$0: Cannot open pipe : $!\n"; while () { next if (/^#/); if (/gamma=(.+$)/) { $$gamma = $1; next; } if (/delta=(.+$)/) { $$delta = $1; next; } if (/anorm=(.+$)/) { $$anorm = $1; next; } } close(PIPE); } dmrgpp-6.02/scripts/fourierTimeSpace.pl000077500000000000000000000117771414604301300202400ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; use Math::Trig; my $pi = Math::Trig::pi; my ($file, $wbegin, $wtotal, $wstep, $mode) = @ARGV; defined($wstep) or die "USAGE: $0 filename wbegin wtotal wstep [mode]\n"; defined($mode) or $mode = -1; my @data; my $tmax = loadData(\@data, $file); my $n = scalar(@data); print STDERR "$0: Found $n sites\n"; printLoadedData(\@data, $mode) if ($mode >= 0); my @omegas = fillOmegas($wbegin, $wtotal, $wstep); my @dataOmega = ftTime(\@data, \@omegas, \&dampFunction); printSpaceOmega(\@dataOmega, \@omegas) if ($mode == -2); my @dataOmegaK = ftSpace(\@dataOmega, scalar(@omegas)); printData(\@dataOmegaK, \@omegas) if ($mode == -1); sub dampFunction { my ($time) = @_; return 0.5*(1.0+cos(($time)*pi/$tmax)); } sub loadData { my ($data, $file) = @_; my $tmax = 0; open(FILE, "<", "$file") or die "$0: Cannot open $file : $!\n"; while () { next if (/^#/); my @temp = split; next if (scalar(@temp) != 4); my $time = $temp[0]; my $site = $temp[1]; my $value = $temp[2]; $value = "(0,0)" if ($value eq "-100"); my $h = {"time" => $time, "value" => $value}; $tmax = $time if ($time > $tmax); if (defined($data->[$site])) { my $a = $data->[$site]; push @$a, $h; } else { my @a = ($h); $data->[$site] = \@a; } } close(FILE); return $tmax; } sub printLoadedData { my ($data, $mode) = @_; my $start = 0; my $end = scalar(@$data); if ($mode >= 0 && $mode < $end) { $start = $mode; $end = $start + 1; } my $ptr = $data->[1]; my $nptr = scalar(@$ptr); my %hash; for (my $i = 0; $i < $nptr; ++$i) { my $h = $ptr->[$i]; my $time = $h->{"time"}; my $value = $h->{"value"}; $hash{$time} = $value; } for my $time (sort keys %hash) { print "$time "; for (my $i = $start; $i < $end; ++$i) { my $ptr = $data->[$i]; my $nptr = scalar(@$ptr); for (my $j = 0; $j < $nptr; ++$j) { my $h = $ptr->[$j]; my $t = $h->{"time"}; next unless ($time == $t); my $value = $h->{"value"}; print " $value"; } } print "\n"; } } sub fillOmegas { my ($wbegin, $wtotal, $wstep) = @_; my @omegas; for (my $i = 0; $i < $wtotal; ++$i) { my $omega = $wbegin + $i*$wstep; push @omegas, $omega; } return @omegas; } sub ftTime { my ($data, $omegas, $dampF) = @_; my @dataO; for (my $i = 0; $i < $n; ++$i) { my $src = $data->[$i]; my @dest = ftTimeOneSite($src, $omegas, $dampF); $dataO[$i] = \@dest; } return @dataO; } sub printSpaceOmega { my ($dataOmega, $omegas) = @_; my $n = scalar(@omegas); my $sites = scalar(@dataOmega); my $center = int($sites/2); for (my $i = 0; $i < $n; ++$i) { my $omega = $omegas->[$i]; my ($re, $im) = realImag($dataOmega->[$center]->[$i]); print "$omega $re $im\n"; } } sub ftTimeOneSite { my ($src, $omegas, $dampF) = @_; # a(omega) = \sum_times sin(omega*t) * src[t] my @dest; my $n = scalar(@$omegas); my $m = scalar(@$src); for (my $i = 0; $i < $n; ++$i) { my $omega = $omegas->[$i]; my ($sumr, $sumi) = (0, 0); for (my $j = 0; $j < $m; ++$j) { my $ptr = $src->[$j]; my $time = $ptr->{"time"}; my $value = $ptr->{"value"}; my ($c, $s) = (cos($omega*$time), sin($omega*$time)); my ($re, $im) = realImag($value); my $damp = $dampF->($time); $sumr += ($c*$re - $s*$im)*$damp; $sumi += ($c*$im + $s*$re)*$damp; } $dest[$i] = "(".$sumr.",".$sumi.")"; } return @dest; } sub realImag { my ($x) = @_; my @temp = split/,/, $x; my $n = scalar(@temp); $n == 2 or die "$0: Complex number $x\n"; my $re = $temp[0]; my $im = $temp[1]; $re =~ s/\(//; $im =~ s/\)//; return ($re, $im); } sub ftSpace { my ($src, $omegas) = @_; my @dest; my $ks = scalar(@$src); my $sites = $ks; for (my $k = 0; $k < $ks; ++$k) { my @dummy; $dest[$k] = \@dummy; } for (my $i = 0; $i < $omegas; ++$i) { my @values; for (my $j = 0; $j < $sites; ++$j) { $values[$j] = $src->[$j]->[$i]; } my @tmp = ftSpaceOneOmega(\@values); for (my $k = 0; $k < $ks; ++$k) { $dest[$k]->[$i] = $tmp[$k]; } } return @dest; } sub printData { my ($vals, $omegas) = @_; my $n = scalar(@$omegas); my $sites = scalar(@$vals); for (my $i = 0; $i < $n; ++$i) { my $omega = $omegas->[$i]; for (my $k = 0; $k < $sites; ++$k) { my $kactual = 2*$k*$pi/$sites; my $value = $vals->[$k]->[$i]; my ($re, $im) = realImag($value); #$value = 0 if (fabs($value) < 1e-4); #$value = int($value*1000)/1000; print "$kactual $omega $im\n"; } print "\n"; } } sub fabs { my ($x) = @_; return ($x >= 0) ? $x : -$x; } sub ftSpaceOneOmega { my ($array) = @_; my $n = scalar(@$array); my $center = int($n/2); my @dest; my $pi = Math::Trig::pi; for (my $k = 0; $k < $n; ++$k) { my $kactual = 2*$k*$pi/$n; my ($sumr, $sumi) = (0, 0); for (my $i = 0; $i < $n; ++$i) { my ($re, $im) = realImag($array->[$i]); my $arg = $kactual*($i-$center); my ($c, $s) = (cos($arg), sin($arg)); $sumr += $c*$re - $s*$im; $sumi += $c*$im + $s*$re; #$sum += $array->[$i]*cos($kactual*($i-$center)); } $dest[$k] = "(".$sumr.",".$sumi.")"; } return @dest; } dmrgpp-6.02/scripts/fourleg.pl000066400000000000000000000050521414604301300164170ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; use OmegaUtils; my ($file, $l, $whatLeg) = @ARGV; defined($whatLeg) or die "USAGE: $0 filename l whatLeg\n"; my $upperLeg = 0; if ($whatLeg eq "upper") { $upperLeg = 1; } elsif ($whatLeg eq "lower") { $upperLeg = 0; } else { die "USAGE: $0 filename l upper | lower\n"; } my @array = loadValues($file); ft(\@array, $l, $upperLeg); sub ft { my ($a, $l, $upperLeg) = @_; my ($isPeriodic, $zeroAtCenter, $nonNegativeOnly) = (1, 0, 0); my $omegas = scalar(@$a); my $centralSite = $l; my $geometry = {"name" => "ladder", "leg" => 2, "subname" => ""}; my $hptr = {isPeriodic => $isPeriodic, centralSite => $centralSite}; my $outSpectrum = "out.spectrum"; open(FOUTSPECTRUM, ">", "$outSpectrum") or die "$0: Cannot write to $outSpectrum : $!\n"; for (my $index = 0; $index < $omegas; ++$index) { my $ptr = $a->[$index]; (scalar(@$ptr) == 2) or die "$0: ptr.size should be 2\n"; my $omega = $ptr->[0]; print FOUTSPECTRUM "$omega "; my $ptr2 = $ptr->[1]; my @v; my $sites = scalar(@$ptr2); my $counter = 0; for (my $i = 0; $i < $sites; ++$i) { my $y = $i % 4; if ($upperLeg) { next if ($y > 1); } else { next if ($y < 2); } $v[$counter++] = $ptr2->[$i]; } die "$0: Counter error\n" if ($counter != 2*$l); my @f; OmegaUtils::fourierLadder(\@f, \@v, 2, $hptr); my @array; OmegaUtils::writeFourier(\@array, \@f, $geometry); printSpectrum(\@array); } close(FOUTSPECTRUM); OmegaUtils::printGnuplot($outSpectrum, $geometry, $isPeriodic, $zeroAtCenter, $nonNegativeOnly); } sub printSpectrum { my ($array) = @_; my $n = scalar(@$array); for (my $j = 0; $j < $n; ++$j) { my $array2 = $array->[$j]; my @array2 = @$array2; print FOUTSPECTRUM "$array2[1] $array2[2] "; } print FOUTSPECTRUM "\n"; } sub loadValues { my ($file) = @_; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; my @array; my $index = 0; while () { my @temp = split; my $n = scalar(@temp); die "$0: Expected two values, got $n\n" unless ($n == 2); my $omega = $temp[0]; my $sites = $temp[1]; my @values; for (my $i = 0; $i < $sites; ++$i) { $_ = ; chomp; my @temp = split; my $x = scalar(@temp); die "$0: Expected three values, got $x\n" unless ($x == 3); die "$0: Expected $i as first number, got $temp[0]\n" unless ($i == $temp[0]); my @temp2 = ($temp[1], $temp[2]); $values[$i] = \@temp2; } my @tmp = ($omega, \@values); $array[$index++] = \@tmp; } close(FILE); print STDERR "$0: Found $index omegas\n"; return @array; } dmrgpp-6.02/scripts/fromOutSpace.pl000066400000000000000000000042551414604301300173670ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use Math::Trig; use lib "."; use OmegaUtils; my ($outSpace, $templateInput, $isPeriodic, $multicenter) = @ARGV; defined($isPeriodic) or die "USAGE: $0 out.space inputFile isPeriodic [multicenter]\n"; defined($multicenter) or $multicenter = 0; my $geometryName; my $geometrySubName = ""; my $geometryLeg = 1; my $centralSite; my $hptr = {"GeometryKind" => \$geometryName, "GeometrySubKind" => \$geometrySubName, "LadderLeg" => \$geometryLeg, "TSPSites 1" => \$centralSite}; OmegaUtils::getLabels($hptr,$templateInput); my $geometry = {"name" => $geometryName, "leg" => $geometryLeg, "subname" => $geometrySubName}; $hptr->{"centralSite"} = $centralSite; $hptr->{"isPeriodic"} = $isPeriodic; $hptr->{"multicenter"} = $multicenter; $geometry->{"isPeriodic"} = $isPeriodic; my %h; readSpaceValues(\%h, $outSpace); my $outSpectrum = $outSpace; $outSpectrum =~ s/\.space/\.spectrum/; ($outSpectrum ne $outSpace) or die "$0: $outSpectrum eq $outSpace ERROR FATAL\n"; open(FOUTSPECTRUM, ">", "$outSpectrum") or die "$0: Cannot write to $outSpectrum : $!\n"; foreach my $omega (sort keys %h) { print FOUTSPECTRUM "$omega "; my $spaceValues = $h{"$omega"}; defined($spaceValues) or last; my @qValues; OmegaUtils::fourier(\@qValues,$spaceValues,$geometry,$hptr); my @array; OmegaUtils::writeFourier(\@array,\@qValues,$geometry); printSpectrum(\@array); } close(FOUTSPECTRUM); print STDERR "$0: Wrote $outSpectrum\n"; sub readSpaceValues { my ($h, $file) = @_; my $counter = 0; open(SPACEIN, "<", $file) or die "$0: Cannot open $file : $!\n"; while () { chomp; my ($omega, $n) = split; defined($n) or last; my @array; for (my $i = 0; $i < $n; ++$i) { $_ = ; chomp; my ($i, $vv1, $vv2) = split; my @a = ($vv1, $vv2); $array[$i] = \@a; } $h->{"$omega"} = \@array; ++$counter; } close(SPACEIN); print STDERR "$0: Read $counter omega values from $file\n"; } sub printSpectrum { my ($array) = @_; for (my $j = 0; $j < scalar(@$array); ++$j) { my $array2 = $array->[$j]; my @array2 = @$array2; print FOUTSPECTRUM "$array2[1] $array2[2] "; } print FOUTSPECTRUM "\n"; } dmrgpp-6.02/scripts/fromOutSpectrum.pl000066400000000000000000000014721414604301300201340ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use Math::Trig; use lib "."; use OmegaUtils; my ($outSpectrum, $templateInput, $isPeriodic, $zeroAtCenter, $nonNegativeOnly) = @ARGV; defined($templateInput) or die "USAGE: $0 out.spectrum inputFile [isPeriodic] [zeroAtCenter] [nonNegativeOnly]\n"; defined($isPeriodic) or $isPeriodic = 0; defined($zeroAtCenter) or $zeroAtCenter = 0; my $geometryName; my $geometrySubName = ""; my $geometryLeg = 1; my $hptr = {"GeometryKind" => \$geometryName, "GeometrySubKind" => \$geometrySubName, "LadderLeg" => \$geometryLeg}; OmegaUtils::getLabels($hptr,$templateInput); my $geometry = {"name" => $geometryName, "leg" => $geometryLeg, "subname" => $geometrySubName}; OmegaUtils::printGnuplot($outSpectrum, $geometry, $isPeriodic, $zeroAtCenter, $nonNegativeOnly); dmrgpp-6.02/scripts/gatherTimes.pl000066400000000000000000000021201414604301300172210ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; my $counter = 0; my @times; my @values; my $deltaT = 0.1; while() { next if (/^#/); my @temp = split; $times[$counter]=$temp[0]; $values[$counter]=$temp[1]; $counter++; } $counter = 0; my @newTs = @times; my @newVs = @values; foreach my $t (@times) { my $tx = int($t*10); if (($tx %2) == 1) { # it's odd then # does the next one exist? my $ind = isInVector(\@times,$#times+1,$t + $deltaT); if ($ind>=0) { # yes, then add it: $newVs[$ind] += $values[$counter]; #print STDERR "Adding to $ind the value $values[$counter] for $counter, noew = $newVs[$ind]\n"; } else { # no, then tranform the time: $newTs[$counter] = $t+ $deltaT; #print STDERR "Tranforming $counter into $t+ $deltaT\n"; } } $counter++; } $counter = 0; my $prevT = -1; foreach my $t (@newTs) { my $tx = int($t*10); if (($tx %2) == 1) { $counter++; next; } next if ($t == $prevT); $prevT = $t; print "$t $newVs[$counter++]\n"; } sub isInVector { my ($v,$n,$what)=@_; for (my $i=0;$i<$n;$i++) { return $i if ($v->[$i]==$what); } return -1; } dmrgpp-6.02/scripts/getEnergyAncilla.pl000077500000000000000000000005441414604301300201750ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; use lib "../scripts"; use EnergyAncillaInSitu; my ($beta,$betaLabel)=@ARGV; defined($beta) or die "USAGE: $0 beta [betaLabel] < file\n"; defined($betaLabel) or $betaLabel = "beta"; my $ret = EnergyAncillaInSitu::main($beta, $betaLabel, *STDIN, *STDOUT); if ($ret ne "") { print STDERR "$ret\n"; } dmrgpp-6.02/scripts/getInSitu.pl000077500000000000000000000013621414604301300166720ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my ($file, $label, $lx, $ly) = @ARGV; defined($lx) or die "USAGE: $0 filename label lx [ly]\n"; defined($ly) or $ly = 1; my @value; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; while () { if (/\Q$label/) { #63 0.899850 0.000000 1.000000 my @temp = split; next if (scalar(@temp) != 5); my $obs = $temp[3]; next unless ($obs eq $label); $value[$temp[0]] = $temp[1]; } } close(FILE); my $total = 0; for (my $y = 0; $y < $ly; ++$y) { for (my $x = 0; $x < $lx; ++$x) { my $ind = $y + $x*$ly; my $tmp = $value[$ind]; defined($tmp) or $tmp = "X"; $total += $tmp unless ($tmp eq "X"); print "$tmp "; } print "\n"; } print "#TOTAL=$total\n"; dmrgpp-6.02/scripts/getManySites.pl000066400000000000000000000052741414604301300173760ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; my ($file)=@ARGV; my $n = 12; my $offset = 0.2; my @times; my %val; my @nd; my $sd = getSuperDensity($file); #Note: the two extreme are not available since # DMRG++ cannot compute them my $firstSite = 1; for (my $site=$firstSite;$site<$n-1;$site++) { doOneSite($site); } printTotalNd($file,$sd); printAllSites($file,$sd); sub getOutputName { my ($file,$ext) = @_; my $fout = $file; $fout =~ s/\..*$/\.${ext}/; die "$0: Refusing to overwrite $fout\n" if ($fout eq $file); #die "$0: Refusing to overwrite $fout\n" if (-e $fout); return $fout; } sub printTotalNd { my ($file,$sd)=@_; my $fout = getOutputName($file,"ndt"); open(FOUT, ">", "$fout") or die "Cannot open $fout for writing: $!\n"; foreach my $t (@times) { $_=$val{$t}/$sd; print FOUT "$t $_\n"; } close(FOUT); } sub printAllSites { my ($file,$sd)=@_; my $fout = getOutputName($file,"nds"); open(FOUT, ">", "$fout") or die "Cannot open $fout for writing: $!\n"; # first row (labels:): print FOUT "#times/sites "; foreach my $t (@times) { print FOUT "$t "; } print FOUT "\n"; foreach my $t (@times) { print FOUT "$t "; for (my $site=$firstSite;$site<$n-1;$site++) { $_=$nd[$site]{$t}/$sd; # + $offset * $site; print FOUT "$_ "; } print FOUT "\n"; } close(FOUT); } sub getSuperDensity { my ($site)=@_; my $sd; open(FILE, "<", $file) or die "Cannot open file $file: $!\n"; while() { if (/SuperDensity.*=\(([^,]+),/) { $sd = $1; last; } } close(FILE); defined $sd or die "SuperDensity is not defined\n"; return $sd; } sub doOneSite { my ($site)=@_; system("perl getTimeObs.pl $site < $file > out1"); system("perl gatherTimes.pl < out1 > out "); open(FILE, "<", "out") or die "Cannot open file out: $!\n"; my $counter = 0; my @timesNow; while() { my @temp=split; $timesNow[$counter++]=$temp[0]; if (defined($val{$temp[0]})) { $val{$temp[0]} += $temp[1]; } else { $val{$temp[0]} = $temp[1]; } $nd[$site]{$temp[0]}=$temp[1]; } close(FILE); if ($site==$firstSite) { @times = @timesNow; print STDERR "Setting $#times\n"; } else { updateTimes(\@timesNow,$#timesNow+1,$site); } } sub updateTimes { my ($timesNow,$n,$site)=@_; # If there's a time in @times that's not in @timesNow # then delete it my $counter=0; my @newTimes; foreach my $t (@times) { if (isInVector($timesNow,$n,$t)) { $newTimes[$counter++]=$t; } else { #print STDERR "Eliminated $t when site=$site\n"; #if ($t==0.6) { # die "timesnow: @$timesNow\n"; #} } } @times = @newTimes; print STDERR "Updated to $#times\n"; } sub isInVector { my ($v,$n,$what)=@_; for (my $i=0;$i<$n;$i++) { return 1 if ($v->[$i]==$what); } return 0; } dmrgpp-6.02/scripts/getTimeObs.pl000066400000000000000000000003021414604301300170070ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; use lib "."; use GetTimeObs; my ($site,$file,$whatState,$whatObservable)=@ARGV; my $fh = *STDOUT; GetTimeObs::main($fh,$site,$file,$whatState,$whatObservable); dmrgpp-6.02/scripts/getTimeObservablesInSitu.pl000077500000000000000000000011441414604301300216770ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use lib "../scripts"; use timeObservablesInSitu; my ($site, $label, $tau)=@ARGV; defined($tau) or die "USAGE: $0 site label tau < file\n"; my @matrix = timeObservablesInSitu::getMatrix($site, $label, *STDIN, $tau); print "#site= $site\n"; print "#label=$label\n"; my $times = scalar(@matrix); print STDERR "$0: Found $times times in STDIN\n"; for (my $t = 0; $t < $times; $t += 1) { my $time = $tau*$t; my $a = $matrix[$site]; my $pair = $a->[$t]; if (!defined($pair)) { next; } print "$time $site ".$pair->{"value"}." ".$pair->{"superdensity"}."\n"; } dmrgpp-6.02/scripts/hamiltonianAverage.pl000066400000000000000000000017111414604301300205500ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; use warnings; my %val; my %superd; my %seenTime; my $time = 0; while() { last if (/^ALL OPERATORS/); } while() { #if (/Hamiltonian average at time=([^ ]+) for target=0 sector=[^ ]+ \=\(([^,]+),[^\)]+\) +\=\(([^,]+),/) { if (/Hamiltonian average at time=([^ ]+) for target=0 sector=[^ ]+ \=([^ ]+) +\=([^ ]+)/) { $time = $1; if ($seenTime{$time}) { $val{$time}=0; $superd{$time}=0; $seenTime{$time}=0; } if (!defined($val{$time})) { $val{$time} = $2; } else { $val{$time} += $2; } if (!defined($superd{$time})) { $superd{$time} = $3; } else { $superd{$time} += $3; } } else { $seenTime{$time}=1; } } print "#Time\t\tSuperdensity\tQuotient\n"; foreach my $key (sort {$a <=> $b} keys %val) { my $quot = $val{$key}/$superd{$key}; print "$key\t$val{$key}\t$superd{$key}\t$quot\n"; } dmrgpp-6.02/scripts/hd5ToAscii.pl000077500000000000000000000030171414604301300167120ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my ($file) = @ARGV; defined($file) or die "USAGE: $0 filename\n"; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; my $lastTitle; my @buffer; my %h; my $lengthOfData; my $sites; while () { chomp; if (/\(0\)\: (.+$)/) { $sites = $1; last; } } while () { chomp; next if (/DATASPACE /); if (/DATASET (.+$)/) { my $n = scalar(@buffer); if ($n > 0 and !defined($lastTitle)) { die "$0: Saw (\\d+): before DATASET\n"; } if ($n > 0) { if (defined($lengthOfData) and $lengthOfData != $n) { die "$0: Sets of different sizes for $lastTitle $lengthOfData != $n\n"; } $lengthOfData = $n; my @copy = @buffer; $h{"$lastTitle"} = \@copy; @buffer = (); } $lastTitle=$1; $lastTitle=~s/\"//g; $lastTitle=~s/[\{\}]//g; $lastTitle=~s/ //g; next; } if (/\(\d+\)\:(.+$)/) { my $tmp = $1; $tmp =~ s/, *$//; my @temp = split/,/, $tmp; push @buffer, @temp; next; } } close(FILE); my $n = scalar(@buffer); if ($n > 0) { if (defined($lengthOfData) and $lengthOfData != $n) { die "$0: Sets of different sizes for $lastTitle $lengthOfData != $n\n"; } my @copy = @buffer; $h{"$lastTitle"} = \@copy; @buffer = (); } printHash(\%h, $lengthOfData); sub printHash { my ($h, $lengthOfData) = @_; my $i = 0; for (my $l = 0; $l < $lengthOfData; ++$l) { print "$l"; foreach my $key (sort {$a <=> $b} keys %$h) { my $ptr = $h->{"$key"}; my $m = scalar(@$ptr); print " ".$ptr->[$l]; } print "\n"; } } dmrgpp-6.02/scripts/hd5ToTime.pl000077500000000000000000000010071414604301300165550ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my $cmd = "h5dump -d /Def/FinalPsi/TimeSerializer/Time "; my @files = (@ARGV); foreach my $file (@files) { my $cmd2 = "$cmd \"$file\""; my $ret = open(PIPE, "$cmd2 |"); if (!$ret) { print STDERR "$0: Could not open pipe $cmd2\n"; next; } my $time; while () { chomp; if (/\(0\)\: (.*$)/) { $time = $1; last; } } if (!$time) { print STDERR "$0: Could not find Time in $file\n"; next; } print "$file $time\n"; close(PIPE); } dmrgpp-6.02/scripts/honeycomb.pl000077500000000000000000000023161414604301300167420ustar00rootroot00000000000000#!/usr/bin/perl # All credit goes to Nirav P. # All errors go to G.A. use strict; use warnings; use utf8; use lib "."; use Honeycomb; my ($templateInput, $templateTex) = @ARGV; defined($templateInput) or die "USAGE: $0 templateInput [templateTex]\n"; my $honey = Honeycomb::init($templateInput); defined($honey) or die "$0: No honey\n"; createInput("test.inp", $honey->{"info"}, $templateInput); my $params2 = {"plot" => $honey->{"plot"}}; if (defined($templateTex)) { createInput("test.tex", $params2, $templateTex); } else { print STDERR "$0: No templateTex given, no tex created\n"; } sub createInput { my ($file, $params, $templateInput) = @_; open(FOUT, ">", "$file") or die "$0: Cannot write to $file\n"; open(FILE, "<", "$templateInput") or die "$0: Cannot open $templateInput: $!\n"; my $plot = $params->{"plot"}; while() { if (/^#/) { print FOUT; next; } if (/\$([a-zA-Z0-9\[\]]+)/) { my $name = $1; my $str = "\$"."params->{\"$name\"}"; my $val = eval "$str"; defined($val) or die "$0: Undefined substitution for $name\n"; s/\$\Q$name/$val/g; } print FOUT; } close(FILE); close(FOUT); print STDERR "$0: File $file has been written\n"; return $file; } dmrgpp-6.02/scripts/honeycombObservables.pl000077500000000000000000000024141414604301300211310ustar00rootroot00000000000000#!/usr/bin/perl # All credit goes to Nirav P. # All errors go to G.A. use strict; use warnings; use utf8; use lib "."; use Honeycomb; my ($templateInput, $observable) = @ARGV; defined($observable) or die "USAGE: $0 templateInput observable\n"; my $honey= Honeycomb::init($templateInput); defined($honey) or die "$0: No honey\n"; my $n1neigh = $honey->{"n1neigh"}; my $n = $honey->{"info"}->{"n"}; if ($observable eq "jexample") { my $str = getJexample($n1neigh, $n); print "jexample=$str\n"; exit(0); } elsif ($observable eq "js") { my $str = getJs($n1neigh, $n); print "je=$str\n"; exit(0); } else { die "$0: Don't know how to print observable $observable\n"; } sub getJexample { my ($n1neigh, $n) = @_; # Let $i be a site in the honeycomb lattice, then # what is the neighbor of $i in direction $dir, it's # $j = n1neigh->[$i + $dir*$n] # where $dir = 0, 1, or 2. #Just an example for now # This is \sum_i sz[i] * sz[i+x] * |gs> my $str = ""; for (my $i = 0; $i < $n; ++$i) { my $j = $n1neigh->[$i + 0*$n]; # neighbor of $i in the x direction $dir = 0 $str .= "+" if ($i > 0); # no leading plus $str .= "sz[$i]*sz[$j]*|gs>"; } return $str; } sub getJs { my ($n1neigh, $n) = @_; return "spin current NOT DONE YET (sorry) because I'm a slacker :-(\n"; } dmrgpp-6.02/scripts/hubbardEnergyInfiniteT.pl000077500000000000000000000026561414604301300213610ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my ($n, $m) = @ARGV; defined($m) or die "Usage: $0 sites electronsUp\n"; my $total = combinatorial($n, $m); print "TOTAL $total\n"; my $sum = 0; # with contributions from Alberto N. # N = number of sites # Nup = Ndown = M #numberOfDoubleOcc(D, N, M) = comb(N, D) * comb(N - D, M - D) * comb(N - M, M - D) # comb(N, D) accounts for the number of ways of having doubly occupied sites on # the lattice of N sites. Now, we have M-D ups and downs left to put somewhere. # #comb(N - D, M - D) accounts for the number of ways of putting the remaining M-D ups # on the remaining N-D sites. # Now, we need to fill the downs in the N-(M-D)-D=N-M spaces left, so # # comb(N-M, M - D) accounts for the number of ways of putting the # remaining M-D downs on the remaining N-M sites left without ups. for (my $d = 1; $d <= $m; ++$d) { my $r0 = factorialOf($n - $d); my $r1 = factorialOf($m - $d); my $r2 = factorialOf($n + $d - 2*$m); my $den = $r1*$r1*$r2; my $num = $d*$r0*combinatorial($n, $d); my $val = $num / $den; $sum += $val; } $sum /= $total; $sum /= $total; print "$n $m $sum\n"; sub combinatorial { my ($a, $b) = @_; my $sum = factorialOf($a)/factorialOf($b); return $sum/factorialOf($a - $b); } sub factorialOf { my ($a) = @_; die "$0: factorialOf $a < 0\n" if ($a < 0); return 1 if ($a < 2); my $prod = 1; for (my $i = 1; $i <= $a; ++$i) { $prod *= $i; } return $prod; } dmrgpp-6.02/scripts/inSituVsOmega.pl000077500000000000000000000051261414604301300175160ustar00rootroot00000000000000#!/usr/bin/perl =pod USAGE is inSituVsOmega.pl runForinput label [total] OUTPUT is 2 columns Omega Values =cut use warnings; use strict; use utf8; use MIME::Base64; my ($root, $label, $total, $wantsMax) = @ARGV; defined($label) or die "USAGE: $0 runForinput label [total] [wantsMax]\n"; #Avoid infinite loops here: my $hasTotal = 1; if (!defined($total)) { $hasTotal = 0; $total = 1000; } #\d+.cout my $start = 0; if ($root =~ /(\d+)\.cout/) { $start = $1; $root =~ s/\d+\.cout//; } print STDERR "#$root $label "; print STDERR "$total" if ($hasTotal); print STDERR "\n"; print STDERR "#Note value may take two columns if it is complex\n"; print STDERR "#Omega Value\n"; for (my $i = $start; $i < $total; ++$i) { my $file = $root."$i".".cout"; if (-r "$file") { my $input = loadInputFromCout($file); my $omega = extractOmegaFromInput($input); my ($value, $max) = extractValueFromCout($file, $label); $max = "" unless ($wantsMax); print "$omega $value $max\n"; next; } # File not readable or doesn't exist last unless ($hasTotal); } sub extractValueFromCout { my ($file, $label) = @_; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; my $value; my $prev; my $max = 0; while () { chomp; if (/$label/) { my @temp = split; my $n = scalar(@temp); next if ($n != 5); $value = $temp[1]; $value =~s/\(//; $value =~s/\)//; $value =~s/,/ /; } if (defined($prev)) { my $diff = findAbsDiff($prev, $value); $max = $diff if ($diff > $max); } $prev = $value; } close(FILE); defined($value) or die "$0: $label not found in $file\n"; return ($value, $max); } sub loadInputFromCout { my ($file) = @_; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; my $input; while () { if (/PsiApp::echoBase64: Echo of ([^ ]+) /) { $_ = ; chomp; $input = decode_base64($_); last; } } close(FILE); defined($input) or die "$0: PsiApp::echoBase64: not found in $file\n"; return $input; } sub extractOmegaFromInput { my ($input) = @_; my @lines = split/\n/, $input; foreach my $line (@lines) { if ($line=~/CorrectionVectorOmega=(.+)/) { return $1; } } die "$0: Did not find CorrectionVectorOmega=\n"; } sub findAbsDiff { my ($a, $b) = @_; my @temp1 = split/ /, $a; my @temp2 = split/ /, $b; my $n = scalar(@temp1); (scalar(@temp2) == $n) or die "$0: findAbsDiff different sizes for $a and $b\n"; ($n > 0 and $n < 3) or die "$0: findAbsDiff: sizes not 1 or 2 for $a and $b\n"; return abs($a - $b) if ($n == 1); my $x = $temp1[0] - $temp2[0]; my $y = $temp1[1] - $temp2[1]; return sqrt($x*$x + $y*$y); } dmrgpp-6.02/scripts/inp2ain.pl6000077500000000000000000000006751414604301300164130ustar00rootroot00000000000000#!/usr/bin/perl6 use v6; my $myself = $*PROGRAM-NAME; sub MAIN($file) { my $input = open($file, :r); my Int $ln = 0; print "##Ainur1.0\n"; for $file.IO.lines -> $line { ++$ln; my $copy = $line; $copy ~~ s/\s+$//; $copy ~~ s/\.txt// if ($copy ~~ /OutputFile\=/); $copy ~~ s/\=(<-[\d\-\.\+]>.*$)/\=\"$0\"/; $copy ~~ s/\s+1\s+(<[\d\-\.\+]>+$)/\=\[$0\]/; my $sc = ($copy ~~ /^$/) ?? "" !! ";"; print "$copy$sc\n"; } } dmrgpp-6.02/scripts/input.pl000066400000000000000000000254771414604301300161300ustar00rootroot00000000000000#!/usr/bin/perl =pod // BEGIN LICENSE BLOCK Copyright 2009 , UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] ********************************************************* THE SOFTWARE IS SUPPLIED 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. Please see full open source license included in file LICENSE. ********************************************************* // END LICENSE BLOCK =cut use warnings; use strict; sub askQuestions { if ($model=~/febasedsc/i) { $geometry="ladderfeas"; } else { print "What geometry do you want to use?\n"; print "Available: 1D, Ladder or LadderFeAs\n"; print "Default is: 1D (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_="1d"; } $geometry=$_; } if ($geometry=~/ladder$/i) { print "Enter the leg of ladder\n"; print "Available: any even number\n"; print "Default is: 2 (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_=2; } $legOfLadder=$_; } print "What targeting do you want?\n"; print "Available: GroundStateTargeting TimeStepTargeting\n"; print "Default is: GroundStateTargeting (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_="GroundStateTargeting"; } $targeting = $_; print "Enter the number of kept states for the infinite loop\n"; print "Available: any\n"; print "Default is: 64 (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_=64; } $infiniteKeptStates=$_; print "Enter the total number of sites (system+environment)\n"; print "Available: any\n"; print "Default is: 16 (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_=16; } $linSize=$_; askAboutFiniteLoops(); print "Enter the value of the $connectors\n"; print "Available: any\n"; print "Default is: 1.0 (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_="1.0"; } $connectorValue=$_; if (defined($connectors2)) { print "Enter the value of the $connectors2\n"; print "Available: any\n"; print "Default is: 1.0 (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_="1.0"; } $connectorValue2=$_; } if ($model=~/hubbard/i) { askQuestionsHubbard(); } elsif ($model=~/febasedsc/i) { askQuestionsFeAs(); } elsif ($model=~/tjoneorbital/i) { #askQuestionsTjOneOrbital(); # FIXME: ask questions about potential } print "Do you want to run with SU(2) symmetry enabled?\n"; print "Available: yes or no\n"; print "Default is: no (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_="no"; } $su2Symmetry=$_; if ($su2Symmetry=~/y/i) { print "There will be ".($linSize)." sites in total, so...\n"; print "how many total electrons should I consider?\n"; print "Default is: ".($linSize)." (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_=$linSize; } $electrons=$_; print "If there are ".($linSize)." sites in total...\n"; print "What value of angular momentum j do you want?\n"; print "Default is: 0 (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_=0; } $momentumJ=$_; } } sub askQuestionsHubbard() { print "Enter the value of the Hubbard U values\n"; print "Available: any\n"; print "Default is: 1.0 (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_="1.0"; } $hubbardUvalue=$_; print "Enter the value of the potential values\n"; print "Available: any\n"; print "Default is: 0.0 (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_="0.0"; } $potentialVvalue=$_; } sub askQuestionsFeAs() { print STDERR "Please check your input file is written correctly\n"; } sub createInput { system("cp input.inp input.bak") if (-r "input.inp"); open(FOUT, ">", "input.inp") or die "Cannot open file input.inp for writing: $!\n"; my $connectorValues=createConnectors($connectorValue); my $version=getVersion(); my $qns = "2 0.5 0.5"; my $inputForTimeEvolution = getTimeEvolutionInput(); my $geometryName = getGeometryName(); if ($su2Symmetry=~/y/i) { $_ = $electrons/(2*$linSize); $momentumJ /= ($linSize); $qns="3 $_ $_ $momentumJ\n"; $su2Symmetry="useSu2Symmetry"; } else { $su2Symmetry="nosu2"; } my $terms = 1; # it is 2 for t-j model my $edof = 1; print FOUT "TotalNumberOfSites=$linSize\n"; print FOUT "NumberOfTerms=$terms\n"; print FOUT "DegreesOfFreedom=$edof\n"; print FOUT "GeometryKind=$geometryName\n"; print FOUT "GeometryOptions=ConstantValues\n"; print FOUT "Connectors 1 1.0\n"; # FIXME only valid for hubbard model if ($model=~/febasedsc/i) { $qns = "3 1.0 1.0 0.0"; print FOUT<& /dev/null"); if ($tmp==0) { $hasGit=1; } $version=getGitVersion() if ($hasGit); #If not then read it from a file if ($version=~/NOGIT/i) { if (open(VERSIONF, "<", "version.txt")) { while() { chomp; if (/commit (.*$)/) { $version=$1; } } close(VERSIONF); } else { $version="UNDEFINED"; print STDERR "$0: (WARNING): Could not open version.txt for reading: $!\n"; } } return $version; } sub getGitVersion { my $version="NOGIT"; open(PIPE,"git log -1 |") or return $version; while() { chomp; if (/commit (.*$)/) { $version=$1; } } close(PIPE); if (open(VERSIONF, ">", "version.txt")) { print VERSIONF "commit $version\n"; close(VERSIONF); } else { print STDERR "$0: (WARNING): Could not open version.txt for writing: $!\n"; } return $version; } sub askAboutFiniteLoops { print "Do you want to do finite loops?\n"; print "Available: y or n\n"; print "Default is: y (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_="y"; } $finiteLoops = ""; $hasLoops=""; if ($_=~/n/i) { $finiteLoops="1 1 100 0"; $hasLoops="nofiniteloops"; return; } my ($log,$m); my $x = $linSize/2-1; my $counter=1; while (1) { $m = addFiniteLoop(); print "Do you want to add another finite loop?\n"; print "Available: y or n\n"; print "Default is: n (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_="n"; } $log = 0; last if ($_=~/n/i); $log =0; $finiteLoops = $finiteLoops." $x $m $log -$x $m $log -$x $m $log $x $m $log "; $counter++; } $finiteLoops = (4*$counter)." ".$finiteLoops." $x $m $log -$x $m $log -$x $m $log $x $m $log "; } sub addFiniteLoop { print "What's the m for this loop?\n"; print "Available: any\n"; print "Default is: 60 (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_=60; } return $_; } sub getGeometryName { my $geometryName = "UNKNOWN"; if ($geometry=~/1d/i) { $geometryName = "chain"; } elsif ($geometry=~/ladder$/i) { $geometryName = "ladder"; } elsif ($geometry=~/ladderfeas/i) { $geometryName = "ladderx"; } return $geometryName; } dmrgpp-6.02/scripts/manyOmegas.pl000066400000000000000000000102031414604301300170460ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use Math::Trig; use lib "."; use OmegaUtils; my ($templateInput,$templateBatch,$parallel) = @ARGV; my $usage = "dollarizedInput dollarizedBatch howToSubmit\n"; $usage .="\t howToSubmit is one of nobatch submit test"; defined($parallel) or die "USAGE: $0 $usage\n"; my ($omega0,$total,$omegaStep,$obs,$GlobalNumberOfSites); my $offset = 0; my $isAinur = OmegaUtils::isAinur($templateInput); my $hptr = { "#OmegaBegin" => \$omega0, "#OmegaTotal" => \$total, "#OmegaStep" => \$omegaStep, "#Observable" => \$obs, "#Offset" => \$offset, "TotalNumberOfSites" => \$GlobalNumberOfSites}; OmegaUtils::getLabels($hptr, $templateInput); if ($omegaStep < 0) { my $beta = -$omegaStep; print STDERR "$0: Matsubara freq. assumed with beta= $beta\n"; $omega0 = $omegaStep = 2.0*pi/$beta; } my $jobs = ""; my @outfiles; for (my $i = $offset; $i < $total; ++$i) { my $omega = sprintf("%.3f", $omega0 + $omegaStep * $i); print STDERR "$0: About to run for omega = $omega\n"; my ($jobid,$outfile) = runThisOmega($i, $omega, $obs, $isAinur); print STDERR "$0: Finished omega = $omega\n"; push @outfiles, $outfile; } sub runThisOmega { my ($ind, $omega, $obs, $isAinur) = @_; my $n = $GlobalNumberOfSites; my $input = createInput($n, $ind, $omega, $obs, $isAinur); my $jobid = ""; my $outfile = "runFor$input"; my $ext = ($isAinur) ? "ain" : "inp"; $outfile =~ s/\.$ext//; $outfile .= ".cout"; my $batch = createBatch($ind, $omega, $input, $obs); $jobid = submitBatch($batch, $parallel); #system("echo '#omega=$omega' >> $outfile") if ($submit eq "nobatch"); return ($jobid,$outfile); } sub createInput { my ($n, $ind, $omega, $obs, $isAinur)=@_; $n =~ s/;// if ($isAinur); my $ext = ($isAinur) ? "ain" : "inp"; my $file="input$ind.$ext"; open(FOUT, ">", "$file") or die "$0: Cannot write to $file\n"; print FOUT "##Ainur1.0\n" if ($isAinur); my $steps = int($n/2) - 1; my $data = "data$ind.txt"; my $nup = int($n/2); my $ndown = $nup; my %valuesHash = ( "steps" => $steps, "data" => $data, "nup" => $nup, "ndown" => $ndown, "omega" => $omega, "obs" => $obs); open(FILE, "<", "$templateInput") or die "$0: Cannot open $templateInput: $!\n"; while() { next if (/^#/); if (/\$([a-zA-Z0-9\[\]]+)/) { my $name = $1; my $val = $valuesHash{"$name"}; defined($val) or die "$0: Undefined substitution for $name\n"; s/\$\Q$name/$val/g; } print FOUT; } close(FILE); close(FOUT); return $file; } sub createFinalBatch { my ($ind, $tarname, $files, $obs) = @_; createBatch($ind,0,"FINAL"); my $fout = "temp.pbs"; my $file = "Batch$ind.pbs"; open(FOUT, ">", "$fout") or die "$0: Cannot write to $file: $!\n"; open(FILE, "<", "$file") or die "$0: Cannot open $fout: $!\n"; my @outfiles = @$files; while () { if (/FINAL/) { print FOUT "$tarname @outfiles\n"; next; } print FOUT; } close(FOUT); close(FILE); system("cp $fout $file"); unlink($fout); return $file; } sub createBatch { my ($ind, $omega, $input, $obs) = @_; my $file = "Batch$ind.pbs"; my %valuesHash = ( "input" => $input, "ind" => $ind, "omega" => $omega, "obs" => $obs); open(FOUT, ">", "$file") or die "$0: Cannot write to $file: $!\n"; open(FILE, "<", "$templateBatch") or die "$0: Cannot open $templateBatch: $!\n"; while () { while (/\$\$([a-zA-Z0-9\[\]]+)/) { my $line = $_; my $name = $1; my $val = $valuesHash{"$name"}; defined($val) or die "$0: Undefined substitution for $name\n"; $line =~ s/\$\$$name/$val/; $_ = $line; } print FOUT; } close(FILE); close(FOUT); print STDERR "$0: $file written\n"; return $file; } sub submitBatch { my ($batch, $doIt) = @_; return if ($doIt ne "nobatch" and $doIt ne "submit"); sleep(1); print STDERR "$0: Submitted $batch \n"; my $execCommand = ($doIt eq "nobatch") ? "env PBS_O_WORKDIR=. /usr/bin/bash" : "qsub"; my $ret = `$execCommand $batch`; chomp($ret); return $ret; } dmrgpp-6.02/scripts/matrixRawToAinur.pl000077500000000000000000000014741414604301300202430ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my ($file, $label) = @ARGV; defined($file) or die "USAGE: $0 filename [label]\n"; defined($label) or $label = "RAW_MATRIX"; open(FILE, "<", "$file") or die "$0: Cannot open $file : $!\n"; while () { last if (/^\Q$label/); } $_ = ; chomp; my @temp = split; scalar(@temp) == 2 or die "$0: Expecting two integers, not $_\n"; my $n = $temp[0]; ($n == $temp[1]) or die "$0: Expecting rows == cols, not $_\n"; print "$label=[\n"; for (my $row = 0; $row < $n; ++$row) { $_ = ; chomp; @temp = split; scalar(@temp) == $n or die "$0: Expecting row $row to contain $n columns\n"; print "[".$temp[0]; for (my $col = 1; $col < $n; ++$col) { print ", ".$temp[$col]; } print "]"; print "," if ($row + 1 < $n); print "\n"; } close(FILE); print "];\n"; dmrgpp-6.02/scripts/matrixdiff.pl000066400000000000000000000122201414604301300171040ustar00rootroot00000000000000#!/usr/bin/perl # Always use these two lines for every perl script: use strict; use warnings; =pod The line above starts a multi-line comment. We want to load two files $file1 and $file2 containing matrices and we want to compute the percentage difference element by element, and then print it. The line below ends this multi-line comment: =cut # This is the label we need to look for in $file1: my $label1="OperatorC:"; # This is the label we need to look for in $file2: my $label2="Energy="; # The line below reads the command line in the array @ARGV: # and places the first word in $file1 and the second in $file2 my ($file1,$file2) = @ARGV; # These are the two matrices. # Note that perl has no matrix data type, so we use vectors, and # store matrix element $m($i,$j) in $matrix[$i + $j*$rows], this is called # linear ordering my @matrix1; my @matrix2; # Usually, we would use a single load function, but here # the matrices have different formats, so we need to load functions: my $cols1 = loadMatrix1(\@matrix1,$file1); print STDERR "Matrix1 in file $file1 has $cols1 columns\n"; my $cols2=loadMatrix2(\@matrix2,$file2); print STDERR "Matrix2 in file $file2 has $cols2 columns\n"; # After that we compute the percentage difference. # But before doing this we have to get rid of the signs since # I haven't been careful with them for cicj, sorry. # so we construct absolute values of matrix1 into matrix1abs my @matrix1abs; matrixKillSign(\@matrix1abs,\@matrix1); #and same for 2: my @matrix2abs; matrixKillSign(\@matrix2abs,\@matrix2); my @matrixPd; # <-- this matrix will contain the perc. diff. percentageDiff(\@matrixPd,\@matrix1abs,\@matrix2abs,$cols1); # Finally we print it: printMatrix(\@matrixPd,$cols2); # Now we need to write the functions we used above. # Let's start with printMatrix, which is the easiest: sub printMatrix { my ($m,$cols)=@_; # Read the arguments my $col = 0; # column counter foreach my $x (@$m) { print "$x "; # increment column count $col++; # start a new line if new row: #print STDERR "$col\n"; if ($col==$cols) { print "\n"; $col=0; # and reset the column counter } } } sub loadMatrix1 { my ($m,$f)=@_; # Read the arguments open(FILE, "<", $f) or die "Cannot open file $f: $!\n"; # Note that $! above contains the error message # Read up to let's say "OperatorC:", which is contained in $label while() { last if (/^$label1/); } $_=; # read the rows and columns, like 3 6... #... and store them: my @temp=split; # this splits a space separated line into an array my $rows = $temp[0]; my $cols = $temp[1]; # now read the rest of the matrix: my $i = 0; # row counter while() { @temp=split; # this splits a space separated line into an array #save this row: my $cols = $#temp+1; for (my $j=0;$j<$cols;$j++) { $m->[$j+$i*$cols]=$temp[$j]; } #increment the row $i++; # exit if we're done: last if ($i==$rows); } close(FILE); return $#temp+1; # return the number of columns } # Now for loading the second matrix. Again we need a different # function because the matrix formats are different, # compare file1.txt with file2.txt sub loadMatrix2 { my ($m,$f)=@_; # Read the arguments open(FILE, "<", $f) or die "Cannot open file $f: $!\n"; # Read up to let's say "Energy=", which is contained in $label2 while() { last if (/^$label2/); } # now read the rest of the matrix: my $i = 0; # row counter my $cols=0; # number of columns while() { my @temp=split; # this splits a space separated line into an array #save this row: $cols = $#temp+1; for (my $j=0;$j<$cols;$j++) { $m->[$j+$i*$cols]=realPartOf($temp[$j]); } #increment the row $i++; # exit if we're done: last if ($i==$cols); } close(FILE); return $cols; # return the number of columns } # This little function returns $x, if given ($x,$y): sub realPartOf { my ($xy)=@_; $_=$xy; s/\(//; # kill the starting parens s/,.*$//; # kill everything from the comma to the end return $_; } sub percentageDiff { my ($mpdiff,$m1,$m2,$cols1)=@_; # First we do mdiff=m1-m2 my @mdiff; matrixDiff(\@mdiff,$m1,$m2,$cols1); # Then we divide mdiff by m2: matrixDivide($mpdiff,\@mdiff,$m2,$cols1); #Now we kill the sign and multiply by 100%: # and also adjust the precision to .xx my $counter=0; foreach my $x (@$mpdiff) { $mpdiff->[$counter++]=int(abs($x)*10000)/100; } } sub matrixDiff { my ($mdiff,$ma,$mb,$cols)=@_; my $rows = $cols; # matrix is square: for (my $i=0;$i<$rows;$i++) { for (my $j=0;$j<$cols;$j++) { next if (!defined($ma->[$j+$i*$cols])); next if (!defined($mb->[$j+$i*$cols])); $mdiff->[$j+$i*$cols]=$ma->[$j+$i*$cols]-$mb->[$j+$i*$cols]; } } } sub matrixDivide { my ($mdiv,$ma,$mb,$cols)=@_; my $rows = $cols; # matrix is square: for (my $i=0;$i<$rows;$i++) { for (my $j=0;$j<$cols;$j++) { next if (!defined($ma->[$j+$i*$cols])); next if (!defined($mb->[$j+$i*$cols])); next if ($mb->[$j+$i*$cols]==0); $mdiv->[$j+$i*$cols]=$ma->[$j+$i*$cols]/$mb->[$j+$i*$cols]; } } } # This does: dest(i,j) = |src(i,j)| for each element i,j sub matrixKillSign { my ($dest,$src)=@_; my $counter=0; foreach my $x (@$src) { $dest->[$counter++]=abs($x); } } dmrgpp-6.02/scripts/mettsAverage3.pl000066400000000000000000000003561414604301300174700ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; use warnings; use lib "."; use Metts; my ($beta,$label)=@ARGV; my ($average, $total) = Metts::density($beta, $label, 1, *STDIN); print STDERR "#Average= ".$average."\n"; print STDERR "#Total= $total\n"; dmrgpp-6.02/scripts/mettsCorrelation.pl000066400000000000000000000041731414604301300203150ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use Math::Complex; my ($beta,$label,$start)=@ARGV; defined($label) or die "USAGE: $0 beta label [start] < observerOutput.txt\n"; $start = 0 if (!defined($start)); my $flag=0; my @matrix; my @sum; my $counter=0; my $effectiveCounter=0; while () { if (/^\#Sites=0 1 2/) { $flag=1; next; } if (/^\#Time=$beta/ and $flag==1) { $flag++; next; } if (/^\Q$label/ and $flag==2) { matrixRead(\@matrix); if ($counter >= $start) { $effectiveCounter++; matrixAdd(\@sum,\@matrix); } $counter++; } $flag=0; } print STDERR "#Counter=$counter EffectiveCounter=$effectiveCounter\n"; ($effectiveCounter>0) or die "$0: effectiveCounter==0\n"; matrixDivide(\@sum,$effectiveCounter); print "$label\n"; matrixPrint(\@sum); sub matrixRead { my ($matrix)=@_; $_=; my @temp=split; my $rows=$temp[0]; my $cols=$temp[1]; my $i=0; while () { my @temp=split; for (my $j=0;$j[$index]=$temp[$j]; } $i++; last if ($i==$rows); } } sub matrixAdd { my ($matrix1,$matrix2)=@_; my $cols = sqrt(scalar(@$matrix2)); my $rows = $cols; for (my $i=0;$i<$rows;$i++) { for (my $j=0;$j<$cols;$j++) { my $index = $i+$j*$rows; if (!defined($matrix1->[$index])) { $matrix1->[$index] = Math::Complex->make($matrix2->[$index]); } else { $matrix1->[$index] += Math::Complex->make($matrix2->[$index]); } } } } sub matrixDivide { my ($matrix,$divisor)=@_; my $cols = sqrt(scalar(@$matrix)); my $rows = $cols; defined($rows) or die "$0: rows undefined\n"; for (my $i=0;$i<$rows;$i++) { for (my $j=0;$j<$cols;$j++) { my $index = $i+$j*$rows; defined($matrix->[$index]) or die "$0: matrix $i $j undefined\n"; $matrix->[$index] /= $divisor; } } } sub matrixPrint { my ($matrix)=@_; my $cols = sqrt(scalar(@$matrix)); my $rows = $cols; print "$rows $cols\n"; for (my $i=0;$i<$rows;$i++) { for (my $j=0;$j<$cols;$j++) { my $index = $i+$j*$rows; print "$matrix->[$index] "; } print "\n"; } } sub toReal { my ($t) = @_; $t=~s/,.*$//; $t=~s/\(//; return $t; } dmrgpp-6.02/scripts/mettsEnergy.pl000066400000000000000000000003251414604301300172600ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use lib "../scripts"; use Metts; my ($beta,$betaLabel)=@ARGV; my ($sum, $counter) = Metts::energy($beta, $betaLabel,1,*STDIN); print STDERR "#Energy=$sum $counter\n"; dmrgpp-6.02/scripts/mettsOnePoint.pl000066400000000000000000000024451414604301300175670ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; my ($beta,$label) = @ARGV; defined($label) or die "USAGE: $0 beta label < observeOutput\n"; my $label2 = "site $label time"; my $flag = 0; my @value; my $maxSite = 0; my $counter = -1; while () { if (!$flag && /\Q$label2/) { $flag = 1; $counter++; next; } next if (!$flag); if (/^DOFS=/) { $flag = 0; next; } my @temp = split; if (scalar(@temp) != 3) { next; } if (!isNumeric($temp[2]) || $temp[2] != $beta) { next; } $value[$counter][$temp[0]]=$temp[1]; $maxSite = $temp[0] if ($temp[0] > $maxSite); } print "#$0: Found $counter vectors, maxSite=$maxSite\n"; for (my $i = 0; $i < $counter; ++$i) { print "$i "; my $missing = 0; my $sum = 0; my $missingSite; for (my $site = 0; $site <= $maxSite; ++$site) { my $x = $value[$i][$site]; if (!defined($x)) { $x = "-100"; $missingSite = $site; $missing++; } else { $sum += $x; } print "$x "; } if ($missing == 0) { print " $sum \n"; next; } if ($missing == 1 && $i > 0) { my $iPrev = $i - 1; my $x = $value[$iPrev][$missingSite]; if (!defined($x)) { print "UNDEF\n"; next; } $sum += $x; print " $sum \n"; next; } print " UNDEF\n"; } sub isNumeric { my ($x) = @_; return 1 if ($x =~ /^[\d\.e\-+]+$/); return 0; } dmrgpp-6.02/scripts/nDollar.pl000066400000000000000000000002471414604301300163500ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; use lib "."; use Ndollar; my ($file) = @ARGV; defined($file) or die "USAGE: $0 file\n"; Ndollar::main($file); dmrgpp-6.02/scripts/nFromAkw.pl000066400000000000000000000172521414604301300165050ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; use Math::Trig; use lib "."; use OmegaUtils; my $pi = Math::Trig::pi; use Getopt::Long qw(:config no_ignore_case); =pod Place the out.spectrum for minus spectrum into (say) outMinus.spectrum and the out.spectrum for plus spectrum into (say) outPlus.spectrum Compute the mu = E(Nup, Ndown) - E(Nup - 1, Ndown) or with the +1 particle Take one input dollarized file (either one is fine) and run perl nFromAkw.pl -f InputDollarized.inp -p -z -m 1.16 outMinus.spectrum outPlus.spectrum The mu is optional; if not given weights aren't computed. Moreover, outMinus.spectrum can be outMinus1.spectrum,outMinus2.spectrum,... and similarly for outPlus.spectrum. This is useful if you have multiple patches to build a full omega, but not that patches of omega should NOT overlap for one sign (minus or plus). =cut my $usage = "USAGE: $0 -f dollarizedInput [-m mu] [-p] [-z] minusSpectrum plusSpectrum\n"; my $templateInput; my $isPeriodic; my $zeroAtCenter = 0; my $nonNegativeOnly = 0; my $mu; GetOptions('f=s' => \$templateInput, 'm=f' => \$mu, 'p' => \$isPeriodic, 'N' => \$nonNegativeOnly, 'z' => \$zeroAtCenter) or die "$usage\n"; (defined($templateInput) and defined($isPeriodic)) or die "$usage\n"; my $sites; my $eta; my $geometryName; my $geometryLeg = 1; my $hptr = {"GeometryKind" => \$geometryName, "LadderLeg" => \$geometryLeg, "TotalNumberOfSites" => \$sites, "CorrectionVectorEta" => \$eta}; OmegaUtils::getLabels($hptr,$templateInput); die "$0 doesn't support LadderLeg=$geometryLeg\n" if ($geometryLeg > 2); my ($fmString, $fpString) = @ARGV; defined($fmString) or die "$usage\n"; defined($fpString) or print STDERR "$0: WARNING: Only one spectrum\n"; my (@filesMinus, @filesPlus); getFiles(\@filesMinus, $fmString); getFiles(\@filesPlus, $fpString) if (defined($fpString)); my $numberKs; my %specMinus; for (my $i = 0; $i < scalar(@filesMinus); ++$i) { readSpectrum(\%specMinus, \$numberKs, $filesMinus[$i]); } my %specPlus; for (my $i = 0; $i < scalar(@filesPlus); ++$i) { readSpectrum(\%specPlus, \$numberKs, $filesPlus[$i]); } my %specFull; addSpectrum(\%specFull, \%specMinus); addSpectrum(\%specFull, \%specPlus) if (defined($fpString)); my $geometry = {"name" => $geometryName, "leg" => $geometryLeg}; OmegaUtils::printGnuplot(\%specFull, $geometry, $isPeriodic, $zeroAtCenter, $nonNegativeOnly); OmegaUtils::printOffsetPlots("offset", \%specFull, $geometry, $isPeriodic, $zeroAtCenter); exit(0) if (!defined($fpString)); my @nkx0; my $norm = sumOverOmega(\@nkx0, \%specMinus, 0); print "Norm=$norm\n"; if ($geometry->{"name"} eq "ladder") { my @nkxpi; $norm += sumOverOmega(\@nkxpi, \%specMinus, 1); printVsQ("outnkxpi.dat", \@nkxpi, $norm*$eta); } print "Norm=$norm\n"; printVsQ("outnkx0.dat", \@nkx0, $norm*$eta); my $totalMy = ($geometry->{"name"} eq "ladder") ? 2 : 1; my %fullVsOmega; for (my $mp = 0; $mp < 2; ++$mp) { #mp = 0 is -, mp=1 is + my $ptr = ($mp == 0) ? \%specMinus : \%specPlus; for (my $my = 0; $my < $totalMy; ++$my) { my %h; sumOverKx(\%h, $ptr, $my); printVsOmega("nVsOmegaky$my"."Sector$mp.dat", \%h, $norm*$eta); addToFullOmega(\%fullVsOmega, \%h); } } printVsOmega("nVsOmega.dat", \%fullVsOmega, $norm*$eta); if (defined($mu)) { sumWeight(\%fullVsOmega, $mu, $norm*$eta); } sub sumWeight { my ($ptr, $mu, $scale) = @_; my ($below, $above) = (0, 0); my $max = 0; for my $omega (sort {$a <=> $b} keys %$ptr) { my $val = $ptr->{$omega}; $max = $val if ($val > $max); #$val = 0 if ($val < 0); if ($omega < $mu) { $below += $val; } else { $above += $val; } } $max /= $scale; my $fout = "mu.dat"; open(FOUT, ">", "$fout") or die "$0: Cannot write to $fout : $!\n"; print FOUT "$mu 0\n"; print FOUT "$mu $max\n"; close(FOUT); print STDERR "File $fout written\n"; my $factor = $below + $above; print STDERR "Factor= $factor, "; print STDERR "factor*eta/sites= ".$factor*$eta/$sites."\n"; $factor = $sites/$factor; $below *= $factor; $above *= $factor; print STDERR "Below $mu : $below, above $mu: $above\n"; } sub addToFullOmega { my ($v, $ptr) = @_; for my $omega (sort {$a <=> $b} keys %$ptr) { my $val = $ptr->{$omega}; $val = 0 if ($val < 0); if (!defined($v->{$omega})) { $v->{$omega} = $val; } else { $v->{$omega} += $val; } } } sub printVsOmega { my ($fout, $ptr, $norm) = @_; open(FOUT, ">", "$fout") or die "$0: Cannot write to $fout : $!\n"; for my $omega (sort {$a <=> $b} keys %$ptr) { my $val = $ptr->{$omega}/$norm; print FOUT "$omega $val\n"; } close(FOUT); print STDERR "$0: File $fout has been written.\n"; } sub sumOverKx { my ($v, $ptr, $my) = @_; my ($factor, $fileIndices, $leg) = OmegaUtils::getGeometryDetails($geometry, $my); my $fileIndex = $my; for my $omega (sort {$a <=> $b} keys %$ptr) { my $aptr = $ptr->{$omega}; my $nks = scalar(@$aptr) - 1; my $numberOfQs = int($factor*$nks); for (my $m2 = 0; $m2 < $numberOfQs; ++$m2) { #my $realPart = $aptr->[2*$m2+1+2*$fileIndex*$numberOfQs]; my $imagPart = $aptr->[2*$m2+2+2*$fileIndex*$numberOfQs]; if (defined($v->{$omega})) { $v->{$omega} += $imagPart; } else { $v->{$omega} = $imagPart; } } } } sub printVsQ { my ($fout, $v, $norm) = @_; my $numberOfQs = scalar(@$v); my $centerShift = ($numberOfQs & 1) ? ($numberOfQs - 1)/2 : $numberOfQs/2; $centerShift = 0 unless ($zeroAtCenter); open(FOUT, ">", "$fout") or die "$0: Cannot write to $fout : $!\n"; for (my $m2 = 0; $m2 < $numberOfQs; ++$m2) { my $m = $m2 - $centerShift; $m += $numberOfQs if ($m < 0); my $q = getQ($m2 - $centerShift, $numberOfQs, $isPeriodic); my $val = pi*$v->[$m]/$norm; print FOUT "$q $val\n"; } close(FOUT); print STDERR "$0: File $fout has been written.\n"; } sub sumOverOmega { my ($v, $ptr, $my) = @_; my ($factor, $fileIndices, $leg) = OmegaUtils::getGeometryDetails($geometry, $my); my $fileIndex = $my; my $norm = 0; for my $omega (sort {$a <=> $b} keys %$ptr) { #no need to sort my $aptr = $ptr->{$omega}; my $nks = scalar(@$aptr) - 1; my $numberOfQs = int($factor*$nks); for (my $m2 = 0; $m2 < $numberOfQs; ++$m2) { #my $realPart = $aptr->[2*$m2+1+2*$fileIndex*$numberOfQs]; my $imagPart = $aptr->[2*$m2+2+2*$fileIndex*$numberOfQs]; $norm += $imagPart; if (defined($v->[$m2])) { $v->[$m2] += $imagPart; } else { $v->[$m2] = $imagPart; } } } return $norm; } sub readSpectrum { my ($ptr, $ptrN, $file) = @_; my $isGood = 1; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; while () { next if (/^#/); my @temp = split; my $n = scalar(@temp); if ($n < 2) { print STDERR "$0: Ignored line $. in $file, less than 2 cols\n"; next; } $$ptrN = $n - 1 if (!defined($$ptrN)); if ($n - 1 != $$ptrN) { $isGood = 0; print STDERR "$0: Line $. in $file with wrong cols\n"; last; } my $omega = $temp[0]; my $oldVal = $ptr->{$omega}; if (defined($oldVal)) { for (my $i = 1; $i < $$ptrN; ++$i) { $temp[$i] += $oldVal->[$i]; } } $ptr->{$omega} = \@temp; } close(FILE); return if ($isGood); die "$0: $file with at least 1 line with wrong number of cols, ".$$ptrN." expected\n"; } sub addSpectrum { my ($v, $ptr) = @_; for my $omega (sort {$a <=> $b} keys %$ptr) { #no need to sort my $oldVal = $ptr->{$omega}; my $aptr = $v->{$omega}; if (defined($aptr)) { my $n = scalar(@$aptr); for (my $i = 1; $i < $n; ++$i) { $v->{$omega}->[$i] += $oldVal->[$i]; } } else { my @temp = @$oldVal; $v->{$omega} = \@temp; } } } sub getQ { my ($m, $n, $isPeriodic) = @_; return ($isPeriodic) ? 2.0*$pi*$m/$n : ($m + 1)*$pi/($n+1.0); } sub getFiles { my ($fm, $string) = @_; my @temp = split(/,/, $string); @$fm = @temp; } dmrgpp-6.02/scripts/nq.pl000066400000000000000000000026511414604301300153740ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; use Fourier; my ($filename) = @ARGV; defined($filename) or die "USAGE: $0 filename\n"; my $labeln = "site "; my @n = loadVector($filename, $labeln); my $averageN = computeAverage(\@n); my $labelNn = ""; my @Nn = Fourier::loadMatrix($filename, $labelNn); my @nq = Fourier::fourierTransform(\@Nn); correctNqZero(\@nq, $averageN); Fourier::printArray(\@nq); # Here we n_{q=0}Corrected = n_{q=0} -L*n^2, sub correctNqZero { my ($nq, $average) = @_; my $val = $nq->[0]->[0]; if (!defined($val)) { print STDERR "$0: Could not correct nq[0], it does not exist\n"; return; } my $nsites = scalar(@$nq); my $correction = $nsites*$average*$average; $nq->[0]->[0] = $val - $correction; } sub loadVector { my ($file, $label) = @_; open(FILE, "<", "$file") or die "$0: Cannot open $file : $!\n"; my $found = 0; while () { next if (/cmdline:/i); if (/^\Q$label/) { $found = 1; last; } } if (!$found) { close(FILE); die "$0: Cannot find $label in $file\n" } my @v; while () { my @temp = split; last unless (scalar(@temp) == 3); $v[$temp[0]] = $temp[1]; } close(FILE); print STDERR "$0: Read vector $label from $file with ".scalar(@v)." entries.\n"; return @v; } sub computeAverage { my ($v) = @_; my $n = scalar(@$v); my $sum = 0; for (my $i = 0; $i < $n; ++$i) { $sum += $v->[$i]; } return $sum/$n; } dmrgpp-6.02/scripts/omegaCuts.pl000077500000000000000000000027671414604301300167200ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my ($file) = @ARGV; defined($file) or die "USAGE: $0 filename\n"; my @kvalues = (0, 3.1415927); my @data = loadData($file, \@kvalues); die "$0: No k values found in $file\n" if (scalar(@data) == 0); printData(\@data, \@kvalues); sub printData { my ($data) = @_; my $n = scalar(@$data); die "$0: No k values found\n" if ($n == 0); print STDERR "$0: Found $n kvalues\n"; my $h = $data->[0]; foreach my $omega (sort {$a <=> $b} keys %$h) { print "$omega"; for (my $j = 0; $j < $n; ++$j) { my $value = $data->[$j]->{$omega}; die "$0: Value too negative\n" if ($value < -4); $value = 0 if ($value < 0); print " $value"; } print "\n"; } } sub loadData { my ($file, $kvalues) = @_; my @data; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; while () { chomp; my @temp = split; my $n = scalar(@temp); next if ($n != 3); my $k = $temp[0]; my $omega = $temp[1]; my $value = $temp[2]; my $ind = findKindex($kvalues, $k); next if ($ind < 0); my $hptr = $data[$ind]; if (defined($hptr)) { my $sum = $hptr->{$omega}; if (defined($sum)) { $sum += $value; } else { $sum = $value; } $hptr->{$omega} = $sum; } else { my $h = {"$omega" => $value }; $data[$ind] = $h; } } close(FILE); return @data; } sub findKindex { my ($kvalues, $k) = @_; my $n = scalar(@$kvalues); for (my $i = 0; $i < $n; ++$i) { return $i if (abs($k - $kvalues->[$i]) < 1e-5); } return -1; } dmrgpp-6.02/scripts/outSpaceToDos.pl000077500000000000000000000037561414604301300175240ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my ($file, $site) = @ARGV; defined($site) or die "USAGE: $0 file site\n"; my %data = readData($file); plotData(\%data, $site); sub readData { my ($file) = @_; open(FILE, "<", $file) or die "$0: Cannot open file : $!\n"; my $n; my %data; while () { chomp; my @temp = split; # omega, n my $x = scalar(@temp); die "$0: FATAL: $file : $. : Expecting 2 items, got $n instead\n" if ($x != 2); my $omega = $temp[0]; if (!defined($n)) { $n = $temp[1]; } else { die "$0: FATAL: $file : $., expecting second number to be $n, got ".$temp[1]."\n" if ($n != $temp[1]); } my @values; for (my $i = 0; $i < $n; ++$i) { $_ = ; chomp; my @temp = split; # site, real, imag my $x = scalar(@temp); die "$0: FATAL: $file : $. : Expecting 3 items, got $x instead\n" if ($x != 3); push @values, \@temp; } $data{"$omega"} = \@values; } close(FILE); return %data; } sub plotData { my ($h, $site) = @_; my $hasParens = 0; foreach my $omega (sort {$a <=> $b} keys %$h) { my $ptr = $h->{$omega}; my $n = scalar(@$ptr); die "FATAL: $site >= $n\n" if ($site >= $n); my $ptr2 = $ptr->[$site]; die "$0: Internal error, expecting 3 elements\n" if (scalar(@$ptr2) != 3); my $x = $ptr2->[0]; die "$0: Internal error, expecting 1st element to be $site, got $x\n" if ($x != $site); my $value1 = $ptr2->[1]; my $value2 = $ptr2->[2]; $hasParens = checkParens($value1, $value2); if ($hasParens) { ($value1, $value2) = reIm($value2); } print "$omega $value1 $value2\n"; } } sub checkParens { my ($val1, $val2) = @_; my $flag = hasParens($val1); die "$0: INTERNAL error (parens)\n" if ($flag && !hasParens($val2)); return $flag; } sub hasParens { my ($val) = @_; return ($val =~ /\(/); } sub reIm { my ($val) = @_; my @temp = split/,/, $val; scalar(@temp) == 2 or die "$0: Not a complex value $val\n"; my $re = $temp[0]; $re =~ s/\(//; my $im = $temp[1]; $im =~ s/\)//; return ($re, $im); } dmrgpp-6.02/scripts/palette.tex000066400000000000000000000001501414604301300165710ustar00rootroot00000000000000\definecolor{myblue}{HTML}{0074D9} \definecolor{mygray}{HTML}{AAAAAA} \definecolor{myred}{HTML}{FF4136} dmrgpp-6.02/scripts/pgfplot.pl000077500000000000000000000035371414604301300164400ustar00rootroot00000000000000#!/usr/bin/perl # use strict; use warnings; use utf8; my ($uroot, $runLatex, $lOrUp) = @ARGV; defined($uroot) or die "USAGE: $0 root [runLatex=1] [L | U | sz]\n"; defined($runLatex) or $runLatex = 1; if (!defined($lOrUp)) { if ($uroot =~ /(^[^\.]+)\.pgfplots/) { $uroot = $1; } my $file = "sample.tex"; my $fout = "$uroot.tex"; my $name = "$uroot.pgfplots"; fromTexToTex($fout, $file, $name, $runLatex); exit(0); } my $root = "$uroot$lOrUp"."_ky"; doFile(0, $root, $runLatex); doFile(1, $root, $runLatex); sub doFile { my ($ind, $root, $runLatex) = @_; my $file = "outSpectrum$ind.pgfplots"; return unless (-r "$file"); my $fout = "$root$ind.pgfplots"; unlink("$fout"); my $cmd = "cp $file $fout"; die "$0: Failed to create $fout\n" if (-r "$fout"); system("$cmd"); $file = "sample.tex"; $fout = "$root$ind.tex"; my $name = $fout; $name =~ s/tex$/pgfplots/; fromTexToTex($fout, $file, $name, $runLatex); } sub fromTexToTex { my ($fout, $file, $name, $runLatex) = @_; my $dirForTex = $0; $dirForTex =~ s/pgfplot\.pl$//; die "$0: Not a directory $dirForTex\n" unless (-d "$dirForTex"); system("cp $dirForTex/sample.tex .") unless (-r "sample.tex"); system("cp $dirForTex/palette.tex .") unless (-r "palette.tex"); copyAndEdit($fout, $file, $name); return if (!$runLatex); my $cmd = "pdflatex $fout"; system("$cmd"); sleep(1); my $foutpdf = $fout; $foutpdf =~ s/\.tex$/.pdf/; $cmd = "/usr/bin/pdftocairo -singlefile -png $foutpdf"; system("$cmd") if (-x "/usr/bin/pdftocairo"); } sub copyAndEdit { my ($fout, $file, $name) = @_; open(FILE, "<", "$file") or die "$0: Cannot open $file : $!\n"; my $ret = open(FOUT, ">", "$fout"); if (!$ret) { close(FILE); die "$0: Cannot open write to $fout : $!\n"; } while () { next if (/^ *\%/); s/outSpectrum\d\.pgfplots/$name/; print FOUT; } close(FOUT); close(FILE); } dmrgpp-6.02/scripts/potentialT.pl000066400000000000000000000013751414604301300171030ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; use warnings; print "Enter number of sites\n"; print "Available: Any\n"; print "Default is 16 (press ENTER) "; $_=; chomp; if ($_ eq "") { $_= 16; } my $sites = $_; print "For E_0*i*cos(omega*time)\n"; print "Enter E_0\n"; print "Available: Any\n"; print "Default is -0.2 (press ENTER) "; $_=; chomp; if ($_ eq "") { $_= -0.2; } my $E0 = $_; print "Enter omega\n"; print "Available: Any\n"; print "Default is 0.8 (press ENTER) "; $_=; chomp; if ($_ eq "") { $_= 0.8; } my $omega = $_; print "Copy this into your input file in the correct place:\n\n"; print "potentialT $sites "; for (my $i=0;$i<$sites;$i++) { my $val = $E0*($i+1); print "$val "; } print "\n"; print "omega=$omega\n"; dmrgpp-6.02/scripts/predictLoops.pl000066400000000000000000000016761414604301300174330ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; my ($totalT,$deltaT,$sites,$m,$advanceEach); getInput(\$sites,"Total number of sites","Any",16); getInput(\$advanceEach,"Advance Each","Any",4); getInput(\$totalT,"Total Time","Any",2.0); getInput(\$deltaT,"Delta Time","Any",0.1); getInput(\$m,"m for finite loops","Any",200); #print "$totalT $deltaT $sites $m\n"; my $x = $sites/2 - 1; my $steps = $totalT * $advanceEach; $steps /= ($deltaT * $x); $steps = int($steps) + 1; my $loops = int($steps/4); my $buffer="$x $m 0 -$x $m 0 -$x $m 0 $x $m 0\n"; my $count = 4; for (my $i=0;$i<$loops;$i++) { $buffer=$buffer."$x $m 0 -$x $m 0 -$x $m 0 $x $m 0\n"; $count += 4; } print "FiniteLoops $count $buffer\n"; sub getInput { my ($var,$what,$available,$default)=@_; print "Please enter the: $what\n"; print "Available: $available\n"; print "Default is: $default (press ENTER): "; $_=; chomp; if ($_ eq "" or $_ eq "\n") { $_=$default; } $$var=$_; } dmrgpp-6.02/scripts/procOmegas.pl000066400000000000000000000311441414604301300170540ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use Math::Trig; use lib "."; use OmegaUtils; use Getopt::Long qw(:config no_ignore_case); my $usage = "-f dollarizedInput [-M mForQ] [-S site] [-p] [-r] [-z]\n"; my ($templateInput,$site,$m,$GlobalNumberOfSites); my ($siteForSpectrum,$mForQ,$mMax,$wantsRealPart); my $zeroAtCenter = 0; my $isPeriodic = 0; my $nonNegativeOnly = 0; my $noFourier = 0; my $comment = "#"; GetOptions('f=s' => \$templateInput, 'S:i' => \$siteForSpectrum, 'm:i' => \$mForQ, 'p' => \$isPeriodic, 'M:i' => \$mMax, 'c=s' => \$comment, 'r' => \$wantsRealPart, 'N' => \$nonNegativeOnly, 'z' => \$zeroAtCenter, 'X' => \$noFourier) or die "$usage\n"; (defined($templateInput) and defined($isPeriodic)) or die "$0: USAGE: $usage\n"; my ($omega0, $omegaTotal, $omegaStep, $centralSite); my $geometryName; my $geometrySubName = "NONE"; my $geometryLeg = 1; my $orbitals = 1; my $omegaOffset = 0; my $jacksOrLorentz = "none"; my $ChebyC = 0; my $ChebySign = 1; my $testoutputfile = "runForinput\$"; my ($lx, $ly) = (0, 0); my $options = ""; my $isAinur = OmegaUtils::isAinur ($templateInput); my $hptr = {"${comment}OmegaBegin" => \$omega0, "${comment}OmegaTotal" => \$omegaTotal, "${comment}OmegaStep" => \$omegaStep, "${comment}OmegaOffset" => \$omegaOffset, "#Lx" => \$lx, "#Ly" => \$ly, "#options" => \$options, "GeometryKind" => \$geometryName, "GeometrySubKind" => \$geometrySubName, "LadderLeg" => \$geometryLeg, "Orbitals" => \$orbitals, "${comment}ChebyshevC" => \$ChebyC, "${comment}ChebyshevSign" => \$ChebySign, "${comment}JacksonOrLorentz" => \$jacksOrLorentz, "TotalNumberOfSites" => \$GlobalNumberOfSites, "OutputFile" => \$testoutputfile}; OmegaUtils::getLabels($hptr, $templateInput); $centralSite = getCentralSite($templateInput, $isAinur); if ($isAinur) { $geometryName =~ s/[\";]//g; $GlobalNumberOfSites =~ s/;//g; $geometrySubName =~ s/[\";]//g; $omega0 =~ s/[\";]//g; $omegaTotal =~ s/[\";]//g; $omegaStep =~ s/[\";]//g; $omegaOffset =~ s/[\";]//g; $geometryLeg =~ s/;//; } $hptr->{"isPeriodic"} = $isPeriodic; $hptr->{"mMax"} = $mMax; $hptr->{"centralSite"} = $centralSite; $hptr->{"isCheby"} = findIfWeAreCheby($jacksOrLorentz, $testoutputfile, $ChebyC); my $logFile = "Log$templateInput"; $logFile =~ s/\..*$//; $logFile .= ".log"; open(LOGFILEOUT, ">", "$logFile") or die "$0: Cannot write to $logFile : $!\n"; if ($omegaStep < 0) { my $beta = -$omegaStep; print LOGFILEOUT "$0: Matsubara freq. assumed with beta= $beta\n"; $omega0 = $omegaStep = 2.0*pi/$beta; } my $geometry = {"name" => $geometryName, "leg" => $geometryLeg, "subname" => $geometrySubName}; my $outSpectrum = "out.spectrum"; open(FOUTSPECTRUM, ">", "$outSpectrum") or die "$0: Cannot write to $outSpectrum : $!\n"; open(SPACEOUT, ">", "out.space") or die "$0: Cannot write to out.space : $!\n"; my %cheby; prepareCheby(\%cheby) if ($hptr->{"isCheby"}); for (my $i = $omegaOffset; $i < $omegaTotal; ++$i) { my $omega = $omega0 + $omegaStep * $i; print FOUTSPECTRUM "$omega "; print LOGFILEOUT "$0: About to proc for omega = $omega\n"; if ($hptr->{"isCheby"}) { doCheby($i, \%cheby, $omega, $centralSite, $geometry); } elsif (defined($mForQ)) { procThisOmegaKspace($i, $omega, $centralSite, $mForQ, $geometry); } elsif (defined($siteForSpectrum)) { procThisOmegaSpace($i, $omega, $centralSite, $siteForSpectrum, $geometry); } else { procAllQs($i, $omega, $centralSite, $geometry); } print LOGFILEOUT "$0: Finished omega = $omega\n"; } close(FOUTSPECTRUM); print STDERR "$0: Momentum Spectrum written to $outSpectrum\n"; close(SPACEOUT); print STDERR "$0: Spatial Spectrum written to out.space\n"; exit(0) if ($noFourier); my $wantsRealOrImag = (defined($wantsRealPart)) ? "real" : "imag"; my $omegaMax = $omega0 + $omegaStep * $omegaTotal; OmegaUtils::printGnuplot($outSpectrum, $geometry, $isPeriodic, $zeroAtCenter, $nonNegativeOnly); close(LOGFILEOUT); print STDERR "$0: Log written to $logFile\n"; sub printSpectrum { my ($array) = @_; for (my $j = 0; $j < scalar(@$array); ++$j) { my $array2 = $array->[$j]; my @array2 = @$array2; print FOUTSPECTRUM "$array2[1] $array2[2] "; } print FOUTSPECTRUM "\n"; } sub procCommon { my ($array, $ind, $omega, $centralSite, $geometry) = @_; my $n = $GlobalNumberOfSites; my $inputRoot = "input"; my $prefix = "runFor$inputRoot$ind"; my $inFile = "$prefix.cout"; my @values; my @values2; my $maxSite = correctionVectorRead(\@values,\@values2,$inFile); print STDERR "$0: omega=$omega maxSite=$maxSite\n"; my @spaceValues; correctionVectorWrite(\@spaceValues,\@values,\@values2,$maxSite,$omega); writeSpaceValues($omega, \@spaceValues); return if ($noFourier); my @qValues; OmegaUtils::fourier(\@qValues,\@spaceValues,$geometry,$hptr); print LOGFILEOUT "$0: Number of k values ".scalar(@qValues)."\n"; OmegaUtils::writeFourier($array,\@qValues,$geometry); } sub writeSpaceValues { my ($omega, $array) = @_; my $n = scalar(@$array); print SPACEOUT "$omega $n\n"; for (my $i = 0; $i < $n; ++$i) { my $ptr = $array->[$i]; my $vv1 = $ptr->[0]; my $vv2 = $ptr->[1]; print SPACEOUT "$i $vv1 $vv2\n"; } } sub correctionVectorRead { my ($v1,$v2,$inFile,$fh) = @_; if (-r "$inFile") { open(FIN, "<", "$inFile") or die "$0: Cannot open $inFile : $!\n"; } else { my $input = $inFile; $input =~s/runFor//; $input =~s/\.cout/\.inp/; open(FIN,"./toolboxdmrg -f \"$input\" -a grep -E \"<\" 2>/dev/null |") or die "$0: Cannot open pipe : $!\n"; } my $maxSite = 0; my @v12 = ($v1, $v2); my $labels = ["P3", "P2"]; # ORDER IMPORTANT HERE! $maxSite = correctionVectorReadOpen(\@v12, $labels, $inFile,\*FIN); close(FIN); $maxSite++; print LOGFILEOUT "$0: correctionVectorRead maxsite= $maxSite\n"; return $maxSite; } sub correctionVectorReadOpen { my ($vs, $labels, $inFile, $fh) = @_; my $status = "clear"; my $maxSite = 0; while (<$fh>) { next if (/PsiApp\: +CmdLine/); my $skip = 1; my $thisLine = $_; foreach my $label (@$labels) { my $isGs = ($thisLine =~ /gs/ or $thisLine =~ /X0/); next unless (/$label/ and $isGs); $status = $label; $skip = 0; } next if ($skip); chomp; my @temp = split; die "$0: Line $_\n" unless (scalar(@temp)==5); my $site = $temp[0]; my $time = ($hptr->{"isCheby"}) ? $temp[2] : 0; my $c = 0; foreach my $label (@$labels) { ++$c; next unless ($status eq $label); $vs->[$c - 1]->[$site + $time*$GlobalNumberOfSites] = $temp[1]; } $maxSite = $site if ($maxSite < $site); $status = "clear"; } return $maxSite; } sub correctionVectorWrite { my ($array, $v1, $v2, $maxSite, $omega) = @_; for (my $i = 0; $i < $maxSite; ++$i) { my $vv1 = $v1->[$i]; if (!defined($vv1)) { print STDERR "$0: P3: Undefined value for site = $i and omega = $omega\n"; $vv1 = 0.0; } my $vv2 = $v2->[$i]; if (!defined($vv2)) { print STDERR "$0: P2: Undefined value for site = $i and omega = $omega\n"; $vv2 = 0.0; } $array->[$i] = [$vv1, $vv2]; } } sub procThisOmegaKspace { my ($ind, $omega, $centralSite, $mForQ, $geometry) = @_; my @array; procCommon(\@array, $ind, $omega, $centralSite, $geometry); my @temp = extractValue(\@array, $mForQ); shift @temp; print "$omega @temp\n"; } sub procThisOmegaSpace { my ($ind, $omega, $centralSite, $siteForSpectrum) = @_; my @array; procCommon(\@array, $ind, $omega, $centralSite, $geometry); my @temp = extractValue(\@array ,$siteForSpectrum); shift @temp; print "$omega @temp\n"; } sub readCheby { my ($v1, $input) = @_; my $file = $input; $file =~s/\.inp//; my ($dir, $base) = getDirAndBase($file); $file = "runFor$base.cout"; open(FIN, "<", "$file") or die "$0: Cannot open $file : $!\n"; correctionVectorReadOpen([$v1], ["P1"], $file, \*FIN); close(FIN); } sub getDirAndBase { my ($file) = @_; my $b1 = ($file =~ /^\//); my $b2 = ($file =~ /^\.\.\//); return ("./", $file) if (!$b1 && !$b2); my @temp = split/\//, $file; my $n = scalar(@temp); die "$0: getDirAndBase: expected n >= 2, got $n\n" if ($n < 2); my $dir = $temp[0]."/"; my $base = $temp[$n - 1]; for (my $i = 1; $i < $n - 1; ++$i) { $dir = $temp[$i]."/"; } return ($dir, $base); } sub dampCheby { my ($times) = @_; my @dampG = (1.0); if ($jacksOrLorentz eq "Jackson") { my $timesPlusOne = ($times + 1.0); my $cot = cot(pi/$timesPlusOne); for (my $n = 1; $n < $times; ++$n) { my $num = ($timesPlusOne - $n) * cos(pi*$n/$timesPlusOne) + sin(pi*$n/$timesPlusOne) * $cot; $dampG[$n] = $num/$timesPlusOne; } } else { my $den = sinh(4.0); for (my $n = 1; $n < $times; ++$n) { my $num = sinh(4.0*(1.0-$n/$times)); $dampG[$n] = $num/$den; } } #print STDERR "Damping Factor\n"; #for (my $i =0; $i < $times; ++$i) { #print STDERR "$i\t$dampG[$i]\n"; #} return @dampG; } # Does only one omegas sub chebyRealSpace { my ($om, $cheby) = @_; my $factor = $cheby->{"factor"}; my $ChebyPolyXfactor = $cheby->{"polyXfactor"}; my $dampG = $cheby->{"dampG"}; my $vM = $cheby->{"data"}; my @vMdamped; my $times = scalar(@$dampG); $vMdamped[0] = [0, 0]; for (my $p = 1; $p < $GlobalNumberOfSites - 1; ++$p) { # adding the zeroth Cheby momentum $n==0 my $sum = $factor->[$om]*$vM->[$p]; # adding all the others for (my $n = 1; $n < $times; ++$n) { $sum += 2.0*$dampG->[$n]*$ChebyPolyXfactor->[$n+$times*$om]* $vM->[$p + $GlobalNumberOfSites*$n]; } $vMdamped[$p] = [0, $sum]; # 0 would be the real part } return @vMdamped; } sub doFactorAndPolyXfactor { my ($times) = @_; my $epsilont = 0.025; my $Wprime = 1.0-0.5*$epsilont; my (@factor, @polyXfactor); for (my $om = 0; $om < $omegaTotal; ++$om) { my $omega = $omega0+$om*$omegaStep; # Scaling my $omegaPrime = ($ChebySign*$omega-$omega0)*$ChebyC-$Wprime; my $underSqrt = 1.0-$omegaPrime*$omegaPrime; die "$0: $omegaPrime is such that 1-w'^2 < 0\n" if ($underSqrt < 0); $factor[$om] = 1.0/(pi*sqrt($underSqrt)); for (my $n = 1; $n < $times; ++$n) { $polyXfactor[$n + $times*$om] = $ChebyC*$factor[$om]*cos($n*acos($omegaPrime)); } } return (\@factor, \@polyXfactor); } sub prepareCheby { my ($cheby) = @_; my @v; # index on site and time readCheby(\@v, $templateInput); $cheby->{"data"} = \@v; my $times = scalar(@v)/$GlobalNumberOfSites; print STDERR "$0: Read times=$times\n"; my @dampG = dampCheby($times); $cheby->{"dampG"} = \@dampG; my ($factor, $polyXfactor) = doFactorAndPolyXfactor($times); # returns 2 references $cheby->{"factor"} = $factor; $cheby->{"polyXfactor"} = $polyXfactor; } sub doCheby { my ($ind, $cheby, $omega, $centralSite, $geometry) = @_; my @spaceValues = chebyRealSpace($ind, $cheby); return if ($noFourier); my @qValues; OmegaUtils::fourier(\@qValues,\@spaceValues,$geometry,$hptr); my @array; OmegaUtils::writeFourier(\@array,\@qValues,$geometry); die "doCheby: array is empty\n" if (scalar(@array) == 0); printSpectrum(\@array); } sub procAllQs { my ($ind, $omega, $centralSite, $geometry) = @_; my @array; procCommon(\@array, $ind, $omega, $centralSite, $geometry); return if ($noFourier); die "procAllQs: array is empty\n" if (scalar(@array) == 0); printSpectrum(\@array); } sub execThis { my ($cmd) = @_; print LOGFILEOUT "$0: About to execute $cmd\n"; system($cmd); } sub extractValue { my ($array, $q) = @_; my $narray = scalar(@$array); for (my $i = 0; $i < $narray; ++$i) { my $ptr = $array->[$i]; my @temp = @$ptr; next unless (scalar(@temp) > 1); next unless (abs($temp[0]-$q)<1e-3); return @temp; } die "$0: No q=$q found in array\n"; } sub findIfWeAreCheby { my ($jacksOrLorentz, $testoutputfile, $chebyC) = @_; my $b1 = ($jacksOrLorentz eq "none"); my $b2 = ($testoutputfile =~ /\$/); return 0 if ($b1 and $b2); if ($chebyC == 0) { die "$0: Needs ChebyshevC in input\n"; } return 1 if (!$b1 and !$b2); if ($jacksOrLorentz ne "Jackson" and $jacksOrLorentz ne "Lorentz") { die "$0: #JacksOrLorentz= Jackson or Lorentz not $jacksOrLorentz\n"; } if ($b1 and !$b2) { die "$0: JacksOrLorentz is none, but OutputFile= is NOT dollarized\n"; } die "$0: JacksOrLorentz is NOT none, but OutputFile= is dollarized\n"; } sub getCentralSite { my ($input, $isAinur) = @_; open(FILE, "<", $input) or die "$0: Cannot open $input : $!\n"; my $c; while () { chomp; if (!$isAinur && /^[ \t]*TSPSites[ \t]+1[ \t]+(\d+)[ \t]*$/) { $c = $1; last; } if ($isAinur && /^[ \t]*TSPSites[ \t]*=[ \t]*\[[ \t]*(\d+)[ \t]*\]/) { $c = $1; last; } } close(FILE); defined($c) or die "$0: Could not find TSPSites in $input\n"; return $c; } dmrgpp-6.02/scripts/quasiparticleWeightZ.pl000077500000000000000000000057751414604301300211430ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; use Math::Trig; my ($file, $mode) = @ARGV; defined($file) or die "USAGE: $0 filename [mode]\n"; defined($mode) or $mode = ""; my $obs = ($mode eq "") ? "" : ""; my $label1 = "site $obs time"; my @cdaggerI = loadVector($file, $label1); my $sites = scalar(@cdaggerI); my $label2 = ""; my @cIcDaggerJ = loadMatrix($file, $label2, $mode); for (my $mForK = 0; $mForK < $sites; ++$mForK) { doOneMomentumK($mForK, $sites, \@cdaggerI, \@cIcDaggerJ); } sub doOneMomentumK { my ($mForK, $sites, $cdaggerI, $cIcDaggerJ) = @_; my $momentumK = findMomentumK($mForK, $sites); my @numerator = ftVector($cdaggerI, $momentumK); #print STDERR "$0: numerator= @numerator\n"; my @den = ftMatrix($cIcDaggerJ, $momentumK); #print STDERR "$0: denominator= @den\n"; die "$0: Denominator isn't real\n" if (abs($den[1]) > 1e-5); print $mForK." "; if ($mode eq "") { $_ = $numerator[0]*$numerator[0] + $numerator[1]*$numerator[1]; print "$_\n"; } else { print $numerator[0]/$den[0]." ".$numerator[1]/$den[0]."\n"; } } sub ftMatrix { my ($a, $momentumK) = @_; my $n = scalar(@$a); return (1, 0) if ($n == 0); my $center = $n/2; my ($sumR, $sumI) = (0, 0); for (my $i = 0; $i < $n; ++$i) { my $ptr = $a->[$i]; my $m = scalar(@$ptr); ($n == $m) or die "$0: Matrix not square\n"; for (my $j = 0; $j < $m; ++$j) { my $arg = $momentumK*($i - $j); my $value = ($i < $j) ? $a->[$i]->[$j] : $a->[$j]->[$i]; $sumR += $value*cos($arg); $sumI += $value*sin($arg); } } return ($sumR, $sumI); } sub ftVector { my ($a, $momentumK) = @_; my $n = scalar(@$a); my $center = $n/2; my ($sumR, $sumI) = (0, 0); for (my $i = 0; $i < $n; ++$i) { my $arg = $momentumK*($i - $center); my $value = $a->[$i]; $sumR += $value*cos($arg); $sumI += $value*sin($arg); } return ($sumR, $sumI); } sub loadVector { my ($file, $label) = @_; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; while () { last if (/^\Q$label/); } my @a; while () { chomp; next if (/^#/); my @temp = split; last if (scalar(@temp) != 3); last unless ($temp[0] =~ /^\d+$/); $a[$temp[0]] = $temp[1]; } close(FILE); print STDERR "$0: Found ".scalar(@a)." sites for \"$label\" in $file\n"; return @a; } sub loadMatrix { my ($file, $label, $mode) = @_; return () if ($mode eq ""); open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; while () { last if (/^\Q$label/); } $_ = ; chomp; my @sizes = split; die "$0: No matrix dimensions found for $label in $file\n" unless (scalar(@sizes) == 2); my @a; my ($rows, $cols) = @sizes; for (my $i = 0; $i < $rows; ++$i) { $_ = ; chomp; next if (/^#/); my @temp = split; (scalar(@temp) == $cols) or die "$0: row $i not with $cols columns\n"; $a[$i] = \@temp; } close(FILE); print STDERR "$0: Found matrix with ".scalar(@a)." rows for \"$label\" in $file\n"; return @a; } sub findMomentumK { my ($m, $total) = @_; return 2*pi*$m/$total; } dmrgpp-6.02/scripts/realTime.pl000077500000000000000000000020161414604301300165160ustar00rootroot00000000000000#!/usr/bin/perl # use strict; use warnings; my ($input) = @ARGV; defined ($input) or die "USAGE: $0 input.inp\n"; my $root = $input; if ($root =~ /\.inp$/) { $root =~ s/\.inp$//; } else { $input .= ".inp"; } my $cout = "runFor$root.cout"; my $t = getRunTime($cout); print "WallTimeSeconds= $t\n"; my $m = getMemory($cout); print "Memory=$m\n"; sub readLabel { my ($file, $label) = @_; my $value; open(FILE, "<", "$file") or die "$0: Cannot open file $file : $!\n"; while () { if (/^$label(.*$)/) { $value = $1; last; } } close(FILE); defined($value) or die "$0: File $file does not contain label $label\n"; return $value; } sub getRunTime { my ($file) = @_; my $v1 = readLabel($file, "UnixTimeStart="); my $v2 = readLabel($file, "UnixTimeEnd="); return ($v2 - $v1); } sub getMemory { my ($file) = @_; open(FILE, "<", "$file") or die "$0: Cannot open file $file : $!\n"; my $m = "UNDEFINED"; while () { chomp; if (/maximum was (.+$)/) { $m = $1; } } close(FILE); return $m; } dmrgpp-6.02/scripts/rearrangeObserverOutput.pl000066400000000000000000000033501414604301300216520ustar00rootroot00000000000000#!/usr/bin/perl -w # use strict; my ($file)=@ARGV; my ($label1,$label2) = ("nupNdown","nUp+nDown"); printSuper($file); rearrange($file,$label1); rearrange($file,$label2); sub printSuper { my ($file)=@_; open(FILE, "<", $file) or die "Cannot open file $file: $!\n"; my $found = 0; my $saved = "NOT_FOUND"; while() { if (/superdensity/i) { my $newSuperDensity = $_; last if (!($saved eq "NOT_FOUND") and diffBetweenSuperDensities($newSuperDensity,$saved)<1e-5); $saved = $_; $found = 1; } } close(FILE); ($found) or die "$0: Cannot find superdensity in file $file\n"; print "###\n"; print $saved; } sub diffBetweenSuperDensities { my ($t1,$t2)=@_; my $t1N = getNumericSuperDensity($t1); my $t2N = getNumericSuperDensity($t2); return abs($t2N - $t1N); } #SuperDensity(Weight of the timeVector)=(1.23456,0) sub getNumericSuperDensity { my ($t) = @_; my $sLabel = "SuperDensity(Weight of the timeVector)=("; $t=~s/\Q$sLabel//; $t=~s/,.*$//; return $t; } sub rearrange { my ($file,$label)=@_; open(FILE, "<", $file) or die "Cannot open file $file: $!\n"; while() { last if (/^#Using Matrix A:/); } my $x = $_; my $counter = 0; while() { $x = doOneBlock($label,$x,$counter); $counter++; } close(FILE); } sub doOneBlock { my ($label,$saved,$counter)=@_; while() { if (/^#/) { $saved .= $_; } if (/^site /) { $saved .= $_; last; } } my $needsPrinting = 0; $needsPrinting = 1 if (/\Q$label/i); print $saved if ($needsPrinting and $counter<2); while() { last if (/^#/); if (/superdensity/i) { print; next; } next if (/^Not found #FERMIONICSIGN in file/); next if (/^Ignore prev. error/); print if ($needsPrinting); } return $_; } dmrgpp-6.02/scripts/ritz.pl000077500000000000000000000013571414604301300157530ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my ($file, $n) = @ARGV; defined($file) or die "USAGE: $0 filename [set number]\n"; defined($n) or $n = -1; my @data = loadData($file, $n); printData(\@data); sub printData { my ($a) = @_; my $n = scalar(@$a); for (my $i = 0; $i < $n; ++$i) { print "$i ".$a->[$i]."\n"; } } sub loadData { my ($file, $n) = @_; open(FILE, "<", "$file") or die "$0: Cannot open $file : $!\n"; my @temp; my $counter = 0; while () { next unless (/RitzEigenvalues: index\=\d+\|/); s/RitzEigenvalues: index=\d+\|//; chomp; @temp = split; last if ($counter++ == $n); } close(FILE); my $m = scalar(@temp); die "$0: No /RitzEigenvalues found in $file\n" if ($m == 0); return @temp; } dmrgpp-6.02/scripts/rockOmegas.pl6000077500000000000000000000022601414604301300171350ustar00rootroot00000000000000#!/usr/bin/perl6 use v6; my $myself = $*PROGRAM-NAME; sub MAIN($file) { # For every plot #### Read pgfplots my @m; my Int $rows = readPlot(@m, $file); # For every plot #### weight plot #### write plot writePlot($rows, @m); } sub writePlot(Int $rows, @m) { my Int $cols = @m.elems; for 0..^$cols -> Int $col { for 0..^$rows -> Int $row { my $temp = @m[$col].list[$row]; my @temp2 = @$temp; @temp2.join(' ').say; } say ""; } } sub readPlot(@m, $file) { my $input = open($file, :r); my @thisrow; my (Int $x, Int $y) = (0, 0); my Int $rows; my Int $ln = 0; for $file.IO.lines -> $line { ++$ln; if ($line eq "") { my $rowsFound = @thisrow.elems; if (defined($rows)) { die "$myself: column with wrong n. of rows " ~ " expected $rows, found $rowsFound\n" if ($rows != $rowsFound); } else { $rows = $rowsFound; } my @copy = @thisrow; @thisrow = (); @m[$y++] = @copy; $rows = $x; $x = 0; next; } my @temp = split(/\s/, $line); my $total = 3; @temp.elems == $total or die "$myself: Wrong line $ln in $file\n"; @thisrow[$x++] = @temp; } note "$myself: Found $rows x $y in $file\n"; return $rows; } dmrgpp-6.02/scripts/runManyOmegas.pl000066400000000000000000000033111414604301300175350ustar00rootroot00000000000000#!/usr/bin/perl -w # use strict; my ($n,$step)=@ARGV; for (my $i=0;$i<$n;$i++) { my $omega = $i*$step; my $outputFile = runThisOmega($i,$omega); my $x = getResults($outputFile,$i,"OMEGA ".$omega); print "$omega $x\n"; } sub runThisOmega { my ($ind,$omega)=@_; my $inputFile = createInput($ind,$omega); my $outputFile = "output.out"; system("./dmrg $inputFile >& $outputFile"); return $outputFile; } sub getResults { my ($f,$ind,$omega)=@_; open(FILE, "<", $f) or die "Cannot open $f: $!\n"; my $ptrn = $omega; $ptrn =~ s/\./\\./; my $val=0; while() { if (/^$ptrn/) { my @temp = split; ($temp[0]==$omega) or die "$temp[0]!=$omega\n"; $val = $temp[1]; } } close(FILE); return $val; } sub createInput { my ($ind,$omega)=@_; my $inputFile = "input.inp"; open(FOUT, ">", "$inputFile") or die "Cannot open $inputFile for writing: $!\n"; print FOUT<[$i]; my $spsmPointer = $spsm->[$i]; my $smspPointer = $smsp->[$i]; my $cols = scalar(@$szszPointer); if ($cols != scalar(@$spsmPointer) || $cols != scalar(@$smspPointer)) { die "$0: Sz.Sz and Sp.Sm arrays have different row cols for row $i\n"; } my @temp; for (my $j = 0; $j < $cols; ++$j) { $temp[$j] = $szszPointer->[$j] + 0.5*($spsmPointer->[$j] + $smspPointer->[$j]); } #print @temp; #print "\n"; $sDotS[$i] = \@temp; } return @sDotS; } dmrgpp-6.02/scripts/sample.tex000066400000000000000000000017651414604301300164310ustar00rootroot00000000000000%\RequirePackage{luatex85} \documentclass{standalone} \usepackage{tikz} \usepackage{pgfplots} \pgfplotsset{compat=1.16} \input{palette.tex} \usepgfplotslibrary{colormaps} \pgfplotsset{colormap={mypa}% { color(0cm)=(white); color(1cm)=(myblue); color(2cm)=(myred)}} \begin{document} \begin{tikzpicture} \begin{axis}[ view={0}{90}, % not needed for `matrix plot*' variant xlabel=$q_x$, ylabel=Energy, colormap name = mypa, colorbar, colorbar style={ title= , yticklabel style={ /pgf/number format/.cd, fixed, precision=1, fixed zerofill, }, }, title= , enlargelimits=false, axis on top, ] \addplot [matrix plot*,point meta=explicit] table [meta index = {2}] {outSpectrum1.pgfplots}; \end{axis} \end{tikzpicture} \end{document} dmrgpp-6.02/scripts/spectrum2tikz.pl6000066400000000000000000000006741414604301300176750ustar00rootroot00000000000000#!/usr/bin/perl6 use v6; sub MAIN($file, $lx) { my $input = open($file, :r); my ($x, $y) = (0, 0); while (my $line = $input.get) { my @temp = split(/\s/, $line); #print "$x $y " ~ @temp[3] ~ "\n"; printThisLine(@temp, $lx); ++$x; if ($x == $lx) { $x = 0; ++$y; print "\n"; } } $input.close; } sub printThisLine($a, $lx) { my $kx = $a.[0]; my $omega = $a.[1]; my $imag = $a.[3]; print "$kx $omega $imag\n"; } dmrgpp-6.02/scripts/spectrum2tk.pl000066400000000000000000000130371414604301300172410ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use Tk; require Tk::Dialog; my ($file,$keep,$dx,$dy) = @ARGV; defined($file) or die "USAGE: $0 file\n"; if (defined($keep)) { if ($keep ne "i" && $keep ne "b") { die "$0: expected i (interactive) or b (batch) instead of $keep\n"; } } else { $keep = "b"; } defined($dx) or $dx = 10; defined($dy) or $dy = 10; my @colors; my ($xtotal,$ytotal,$GlobalOmegaMax) = loadColors(\@colors,$file); my $mw = MainWindow->new; $mw->title("Spectrum2Tk"); my @labels; my $totalwidth=$xtotal*$dx; my $totalheight=$ytotal*$dy; my $xScale = 4; my $scaleWidth = $xScale*$dx; my $cnvMain = $mw->Canvas(-width=>$totalwidth, -height=>$totalheight); my $cnvScale = $mw->Canvas(-width=>$scaleWidth, -height=>$totalheight); $cnvMain->CanvasBind(-command => \&canvasClicked); for (my $j = 0; $j < $ytotal; ++$j) { my $y = $j*$dy; for (my $i = 0; $i < $xtotal; ++$i) { my $x = $i*$dx; my $color = findColor($i,$j); addRectangle($x,$y,$color,$cnvMain); } } for (my $j = 0; $j < $ytotal; ++$j) { my $y = $j*$dy; my $color = rgbColor(int(($ytotal-$j-1)*255/$ytotal)); for (my $i = 0; $i < $xScale; ++$i) { my $x = $i*$dx; addRectangle($x,$y,$color,$cnvScale); } } #menues $mw->configure(-menu => my $mnb = $mw->Menu); my $itemsFile = [ [qw/command ~Open -accelerator Ctrl-o -command/ => \&fileOpen], [qw/command ~Save -accelerator Ctrl-s -command/ => \&fileSave], '', [qw/command ~Quit -accelerator Ctrl-q -command/ => \&exit] ]; my $mnbFile = $mnb->cascade(-label => '~File', -menuitems => $itemsFile); $cnvMain->pack(-side=>"left"); $cnvScale->pack(-side=>"right"); my $GlobalOutFile; if ($keep eq "b") { $GlobalOutFile = $file; $GlobalOutFile =~ s/\..*$//; $GlobalOutFile .= ".eps"; my $time1 = $mw->repeat(1000 => \&timer1); } MainLoop; sub timer1 { saveToFile($GlobalOutFile,$cnvMain); my $scaleFilename = $GlobalOutFile; $scaleFilename =~ s/\..*$//; $scaleFilename .= "Scale.eps"; saveToFile($scaleFilename,$cnvScale); $mw->withdraw(); my $width = 7; # in cm my $epsFile = $GlobalOutFile; my $texFile = tikzCreate($epsFile,$width,$GlobalOmegaMax); system("pdflatex --interaction nonstopmode $texFile &> /dev/null"); my $pdfFile = $texFile; $pdfFile =~ s/\..*$//; $pdfFile .= ".pdf"; system("evince $pdfFile"); exit 0; } sub addRectangle { my ($x,$y,$color,$cnv) = @_; my $xp = $x + $dx; my $yp = $y + $dy; my $id = $cnv->createRectangle($x,$y,$xp,$yp, -fill=>$color, -width=>0,-outline =>$color); } sub loadColors { my ($c,$file) = @_; open(FILE, "<", "$file") or die "$0: Cannot open file $file : $!\n"; $_=; chomp; my ($ytotal,$xtotal,$omegaMax) = split; my $counter = 0; while () { my @temp = split; $c->[$counter++] = \@temp; } close(FILE); print STDERR "$0: Read $counter lines, xtotal=$xtotal, ytotal=$ytotal\n"; return ($xtotal,$ytotal,$omegaMax); } sub findColor { my ($ind,$jnd) = @_; my $jnd2 = $ytotal - $jnd - 1; my $a = $colors[$jnd2]; defined($a) or die "$0: findColor undefined for ind=$ind\n"; defined($a->[$ind]) or die "$0: findColor undefined for ind=$jnd\n"; return rgbColor($a->[$ind]); } sub rgbColor { my ($value) = @_; my $green = 255-$value; my $blue = 255; my $red = $green; my $color = sprintf("#%02X%02X%02X", $red, $green, $blue); return $color; } sub findColor2 { my ($ind,$jnd) = @_; my $sum = $ind + $jnd; my $red = int(256*$ind/$xtotal); my $green = int(256*$sum/($xtotal+$ytotal)); my $blue = int(256*$jnd/$ytotal); my $color = sprintf("#%02X%02X%02X", $red, $green, $blue); return $color; } sub fileSave { my @types = (["PS files", [qw/.PS /]], ["All files", '*'], ); my $currentFile= $mw->getSaveFile(-filetypes => \@types); saveToFile($currentFile,$cnvMain); } sub saveToFile { my ($currentFile,$cnv) = @_; $cnv->postscript(-file => $currentFile); } sub tikzCreate { my ($graph,$w,$ymax) = @_; my $h = tikzHeight($w,$graph); my $graphScale = $graph; $graphScale =~ s/\..*$//; $graphScale .= "Scale.eps"; my $texFile = $graph; $texFile =~ s/\..*$//; $texFile .= ".tex"; open(FOUT, ">", "$texFile") or die "$0: Cannot write to $graph : $!\n"; print FOUT<) { chomp; if (/%%BoundingBox:/) { my @temp = split; next if (scalar(@temp) != 5); my $xl = abs($temp[3] - $temp[1]); my $yl = abs($temp[4] - $temp[2]); $h = int($w*$yl/$xl); } } close(FIN); defined($h) or die "$0: No BoundingBox in $graph?\n"; return $h; } dmrgpp-6.02/scripts/spectrumSum.pl6000077500000000000000000000033061414604301300173740ustar00rootroot00000000000000#!/usr/bin/perl6 use v6; my $self = $*PROGRAM-NAME; sub MAIN($file1, $file2) { my @m1; readPlot(@m1, $file1); my @m2; readPlot(@m2, $file2); my $mode = ($file1 ~~ /".pgfplots"$/); my @msum = sumPlot(@m1, @m2, $mode); writePlot(@msum, $mode); } sub sumPlot(@m1, @m2, $mode) { my Int $total = @m1.elems; die "$self: Plots not of equal size $total and "~@m2.elems~"\n" if ($total != @m2.elems); my @msum; for 0..^$total -> Int $ind { @msum[$ind] = sumThisRow(@m1[$ind], @m2[$ind], $mode); } return @msum; } sub sumThisRow(@row1, @row2, $mode) { my Int $total = @row1.elems; die "$self: Row not of equal size $total and "~@row2.elems~"\n" if ($total != @row2.elems); my @a; my $n = ($mode) ?? 2 !! 1; for 0..^$n -> Int $ind { @a[$ind] = @row1[$ind]; } for $n..^$total -> Int $ind { @a[$ind] = @row1[$ind] + @row2[$ind]; } return @a; } sub vectorEqual(@v1, @v2) { my $n = @v1.elems; return 0 if ($n != @v2.elems); for 0..^$n -> Int $ind { next if (@v1[$ind] == @v2[$ind]); die "$self: @v1[$ind] different from @v2[$ind] for $ind\n"; } return 1; } sub writePlot(@m, $mode) { my Int $total = @m.elems; my $prevOmega = 0; for 0..^$total -> Int $ind { my @thisrow = @m[$ind]; my $thisOmega = ($mode) ?? @thisrow[0][1] !! 0; say "" if ($mode && $ind > 0 && $prevOmega != $thisOmega); @thisrow.join(' ').say; $prevOmega = $thisOmega; } } sub readPlot(@m, $file) { my $input = open($file, :r); my @thisrow; my (Int $x, Int $y) = (0, 0); my Int $rows; my Int $ln = 0; for $file.IO.lines -> $line { ++$ln; next if ($line ~~ /^ '#' /); my @temp = split(/\s/, $line); next if (@temp.elems < 2); @m[$y++] = @temp; } note "$self: Found $y rows in $file\n"; } dmrgpp-6.02/scripts/sq.pl000077500000000000000000000004101414604301300153730ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; use Fourier; my ($file, $label) = @ARGV; defined($label) or die "USAGE: $0 filename label\n"; my @m = Fourier::loadMatrix($file, $label); my @ft = Fourier::fourierTransform(\@m); Fourier::printArray(\@ft); dmrgpp-6.02/scripts/staticCorrelations.pl000077500000000000000000000022541414604301300206340ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my ($file, $label) = @ARGV; my @m = readMatrix($file, $label); @m = symmetrize(@m); my $rows = scalar(@m); for (my $i = 0; $i < $rows; ++$i) { my $ptr = $m[$i]; my $cols = scalar(@$ptr); for (my $j = 0; $j < $cols; ++$j) { print $ptr->[$j]." "; } print "\n"; } sub symmetrize { my @m = @_; my @m2; my $rows = scalar(@m); for (my $i = 0; $i < $rows; ++$i) { my $ptr = $m[$i]; my $cols = scalar(@$ptr); my @tmp = @$ptr; for (my $j = 0; $j < $i; ++$j) { @tmp[$j] = $m[$j]->[$i]; } $m2[$i] = \@tmp; } return @m2; } sub readMatrix { my ($file, $label) = @_; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; while () { next if (/CmdLine/); last if (/$label/); } $_ = ; chomp; my @temp = split(/\s/, $_); die "$0: Rows Cols not found, line $. ** $_ **\n" if (scalar(@temp) != 2); my $rows = $temp[0]; my $cols = $temp[1]; my $row = 0; my @m; while () { chomp; my @tmp = split; die "$0: Wrong number of cols, line $., $cols not equal " .scalar(@tmp)."\n" if ($cols != scalar(@tmp)); $m[$row++] = \@tmp; last if ($row == $rows); } return @m; } dmrgpp-6.02/scripts/sumRule.pl000077500000000000000000000020171414604301300164110ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use utf8; my ($file) = @ARGV; defined($file) or die "USAGE: $0 filename\n"; my %data = loadData($file); die "$0: No k values found in $file\n" if (scalar(keys %data) == 0); printData(\%data); sub printData { my ($data) = @_; my $sum = 0; foreach my $k (sort {$a <=> $b} keys %$data) { my $value = $data->{$k}; $sum += $value; print "$k $value\n"; } print STDERR "#Sum=$sum\n"; } sub loadData { my ($file) = @_; my %data; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; while () { chomp; my @temp = split; my $n = scalar(@temp); next if ($n != 3); my $k = $temp[0]; my $omega = $temp[1]; my $value = $temp[2]; my $sum = $data{$k}; if (defined($sum)) { $sum += $value; } else { $sum = $value; } $data{$k} = $sum; } close(FILE); return %data; } sub findKindex { my ($kvalues, $k) = @_; my $n = scalar(@$kvalues); for (my $i = 0; $i < $n; ++$i) { return $i if (abs($k - $kvalues->[$i]) < 1e-5); } return -1; } dmrgpp-6.02/scripts/timeEvolution.pl000066400000000000000000000027741414604301300176270ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; use warnings; my ($observable,$useFlag)=@ARGV; defined($observable) or die "USAGE: $0 observable useFlag\n"; $useFlag=1 if (!defined($useFlag)); my $total = 0; my @counter; my @values; my $nsites=0; my $flag=0; my @times; while() { $flag = 0 if (/ALL LINKS CLEARED/); $flag = 1 if (/ALL LINKS SEEN/); next unless (/P0/); next unless (/$observable/); next if ($flag==0 and $useFlag==1); my @temp=split; my $denominator = realPart($temp[4]); next if ($denominator==0); next if (!isAnInteger($temp[0])); my $val = realPart($temp[1])/$denominator; my $c = $counter[$temp[0]]; $c=0 if (!defined($c)); $times[$c]=$temp[2]; $values[$temp[0]][$c]=$val; $counter[$temp[0]]=$c+1; $total = $c+1 if ($total<$c+1); $nsites = $temp[0] if ($nsites<$temp[0]); if ($useFlag == 2) { print STDERR "$denominator\n"; } } $nsites++; exit(0) if ($useFlag == 2); for (my $c=0;$c<$total;$c++) { #next if (!allDefined($c,\@values,$nsites)); print "$times[$c] "; for (my $site=0;$site<$nsites;$site++) { my $val = $values[$site][$c]; $val = "0.000" if (!defined($val)); print "$val "; } print "\n"; } sub allDefined { my ($c,$v,$nsites) = @_; for (my $site=0;$site<$nsites;$site++) { my $val = $v->[$site][$c]; return 0 if (!defined($val)); } return 1; } sub realPart { my ($t)=@_; $_=$t; return "-1" if (!defined($_)); s/\(//; s/\,.*$//; return $_; } sub isAnInteger { my ($t)=@_; return 0 if (!defined($t)); return 1 if ($t=~/^[0-9]+$/); return 0; } dmrgpp-6.02/scripts/timeEvolution1.pl000066400000000000000000000021511414604301300176750ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; use warnings; my ($obs,$useFlag)=@ARGV; defined($useFlag) or die "USAGE: $0 observable useFlag\n"; print STDERR "$0: command line: $obs $useFlag\n"; my $nsites=0; my $flag=0; my $biggestTimeSeen = 0; while() { my $line = $_; $flag = 1 if (/^ALL/); next unless (/\Q$obs/); next if ($flag==0 and $useFlag==1); my @temp=split; next if (!isAnInteger($temp[0])); print $line; my $time = $temp[2]; my $site = $temp[0]; if ($biggestTimeSeen > $time) { die "$0: Error at $. for time=$time\n$_\n"; } $biggestTimeSeen = $time if ($biggestTimeSeen < $time); $nsites = $site if ($nsites < $site); } $nsites++; print STDERR "$0: Largest site seen = $nsites\n"; print STDERR "$0: Largest time seen = $biggestTimeSeen\n"; sub realPart { my ($t)=@_; $_=$t; return "-1" if (!defined($_)); s/\(//; s/\,.*$//; return $_; } sub imagPart { my ($t)=@_; $_=$t; return "-1" if (!defined($_)); s/\)//; s/^.*\,//; return $_; } sub isAnInteger { my ($t)=@_; return 0 if (!defined($t)); return 1 if ($t=~/^[0-9]+$/); return 0; } dmrgpp-6.02/scripts/timeEvolution2.pl000066400000000000000000000045111414604301300177000ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; use warnings; my ($divide,$tau,$onesite)=@ARGV; defined($tau) or die "USAGE: $0 divide tau [site]\n"; defined($onesite) or $onesite = -1; print STDERR "$0: command line: $divide $tau $onesite\n"; my $nsites=0; my $biggestTimeSeen = 0; my @value; my ($times,$sites) = (0,0); while() { chomp; next if (/^#/); my @temp = split; if (scalar(@temp) != 5) { die "$0: Line $. does not have 5 columns\n"; } my ($site,$val,$time,$label,$den) = @temp; defined($den) or die "$0: Line $_\n"; if (!isAnInteger($site)) { die "$0: Line $. site $site is not an integer\n"; } $_ = $time/$tau; my $timeIndex = sprintf("%0.f",$_); my @valri = (realPart($val),imagPart($val)); if ($divide) { my $denReal = realPartStrict($den); $denReal = 1 if (realPart($denReal) == 0); divide(\@valri,$denReal); } $value[$timeIndex][$site] = \@valri; $times = $timeIndex if ($times < $timeIndex); $sites = $site if ($sites < $site); } $times++; $sites++; print STDERR "$0: Total sites = $sites\n"; print STDERR "$0: Total times = $times\n"; for (my $i = 0; $i < $times; ++$i) { my $time = $i*$tau; my $c = 0; my @temp; for (my $j = 0; $j < $sites; ++$j) { my $val = $value[$i][$j]; defined($val) or next; my @valri = @$val; (scalar(@valri) == 2) or die "$0: Internal error for @valri\n"; (defined($valri[0]) && defined($valri[1])) or next; $c++; $temp[$j] = $val; } print "$time "; for (my $j = 0; $j < $sites; ++$j) { next if ($onesite >=0 && $onesite != $j); my $val = $temp[$j]; my $valr = "0.00"; my $vali = "0.00"; if (defined($val) && scalar(@$val) == 2) { $valr = $val->[0]; $vali = $val->[1]; } printf("%.6f %.3f ",$valr, $vali); } print "\n"; } sub realPartStrict { my ($t)=@_; my $it = imagPart($t); if (abs($it) > 1e-6) { die "$0: $t has non-zero imaginary part $it\n"; } return realPart($t); } sub realPart { my ($t)=@_; $_=$t; return "-1" if (!defined($_)); s/\(//; s/\,.*$//; return $_; } sub imagPart { my ($t)=@_; $_=$t; return "-1" if (!defined($_)); s/\)//; s/^.*\,//; return $_; } sub isAnInteger { my ($t)=@_; return 0 if (!defined($t)); return 1 if ($t=~/^[0-9]+$/); return 0; } sub divide { my ($realAndImag, $divisor) = @_; $realAndImag->[0] /= $divisor; $realAndImag->[1] /= $divisor; } dmrgpp-6.02/scripts/timeEvolution3.pl000066400000000000000000000014471414604301300177060ustar00rootroot00000000000000#!/usr/bin/env perl #=============================================================================== # # FILE: timeEvolution3.pl # # USAGE: ./timeEvolution3.pl # # DESCRIPTION: # # OPTIONS: --- # REQUIREMENTS: --- # BUGS: --- # NOTES: --- # AUTHOR: G. A. # ORGANIZATION: # VERSION: 1.0 # CREATED: 08/14/2015 # REVISION: --- #=============================================================================== use strict; use warnings; use utf8; while () { chomp; my @temp = split; next if (/^#/); my $n = scalar(@temp); my $time = $temp[0]; my $total = $n - 1; $total /= 2.0; my $index = 1; for (my $i = 0; $i < $total; ++$i) { my ($valr,$vali) = ($temp[$index],$temp[$index+1]); $index += 2; print "$time $i $valr $vali\n"; } } dmrgpp-6.02/scripts/timeInterpolation.pl000066400000000000000000000037541414604301300204710ustar00rootroot00000000000000#!/usr/bin/env perl #=============================================================================== # # FILE: timeEvolution3.pl # # USAGE: ./timeEvolution3.pl # # DESCRIPTION: # # OPTIONS: --- # REQUIREMENTS: --- # BUGS: --- # NOTES: --- # AUTHOR: G. A. # ORGANIZATION: # VERSION: 1.0 # CREATED: 08/14/2015 # REVISION: --- #=============================================================================== use strict; use warnings; use utf8; my @m; my @times; my $numberOfSites; my $timeIndex = 0; while () { chomp; my @temp = split; next if (/^#/); my $n = scalar(@temp); my $time = $temp[0]; $times[$timeIndex] = $time; my $total = $n - 1; $total /= 2.0; my $index = 1; if (defined($numberOfSites)) { ($total == $numberOfSites) or die "$0: Line $_\n"; } else { $numberOfSites = $total; } for (my $i = 0; $i < $total; ++$i) { my @val = ($temp[$index],$temp[$index+1]); $index += 2; $m[$i + $timeIndex*$numberOfSites] = \@val; } $timeIndex++; } for (my $ti = 0; $ti < $timeIndex; ++$ti) { print "$times[$ti] "; for (my $i = 0; $i < $numberOfSites; ++$i) { my @val = getValue($i,$ti); my $n = scalar(@val); ($n == 2) or die "$0: Problem with @val\n"; my $b = ($val[0] eq "0.00" or $val[1] eq "0.00"); if ($b and $ti + 1 < $timeIndex) { ($ti > 0) or die "$0: Cannot interpolate for time=0\n"; ($ti + 1 < $timeIndex) or die "$0: Cannot interpolate for last time\n"; my @val1 = getValue($i,$ti-1); my @val2 = getValue($i,$ti+1); @val = averageOf(\@val1,\@val2); } print "@val "; } print "\n"; } sub getValue { my ($i,$ti) = @_; my $ptr = $m[$i + $ti*$numberOfSites]; return @$ptr; } sub averageOf { my ($ptr1,$ptr2) = @_; my @val1 = @$ptr1; my @val2 = @$ptr2; my $n1 = scalar(@val1); my $n2 = scalar(@val2); ($n1 == $n2) or die "$0: Cannot average arrays of different size\n"; my @result; for (my $i = 0; $i < $n1; ++$i) { @result[$i] = 0.5*($val1[$i] + $val2[$i]); } return @result; } dmrgpp-6.02/scripts/timeObservablesInSitu.pm000066400000000000000000000030051414604301300212330ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; package timeObservablesInSitu; sub getMatrix { my ($site, $label, $fin, $tau)=@_; defined($tau) or return; my $counter=0; while (<$fin>) { last if (/^ALL OPERATORS/); } my @a; while (<$fin>) { chomp; next unless /\Q$label/; if (/^${site} /) { my @temp = split; (scalar(@temp) >= 5) or next; my $value = procValue($temp[1]); my $time = int($temp[2]/$tau); my $superdensity = procValue($temp[4]); my $h = { "value" => $value, "superdensity" => $superdensity}; $a[$time] = $h; } } return @a; } sub load { my ($file) = @_; my %h; defined($file) or return %h; if (!open(FILE, "$file")) { print "$0: Could not open $file : $!\n"; return %h; } $_ = ; defined($_) or return %h; chomp; if (/#site= (.*$)/) { $h{"site"} = $1; } else { return %h; } $_ = ; defined($_) or return %h; chomp; if (/#label=(.*$)/) { $h{"label"} = $1; } else { return %h; } my $cols = 2; my $row = 0; my @t; my @m; while () { chomp; my @temp = split; (scalar(@temp) == 3) or next; $t[$row] = $temp[0]; $m[0 + $row*$cols] = $temp[1]; $m[1 + $row*$cols] = $temp[2]; ++$row; } close(FILE); $h{"times"} = \@t; my $rows = $row; my @m2; $m2[0] = $rows; $m2[1] = $cols; for (my $i = 0; $i < $rows; ++$i) { for (my $j = 0; $j < $cols; ++$j) { $m2[2 + $i + $j*$rows] = $m[$j + $i*$cols]; } } $h{"data"} = \@m2; return %h; } sub procValue { my ($t)=@_; $_=$t; s/\(//; s/,.*$//; return $_; } 1; dmrgpp-6.02/scripts/vonNeumann.pl000077500000000000000000000016361414604301300171070ustar00rootroot00000000000000#!/usr/bin/perl use strict; use utf8; use warnings; my ($file, $symmetrize) = @ARGV; defined($file) or die "USAGE: $0 filename [symmetrize 0 or 1]\n"; my @entropy = load($file); printEntropy(\@entropy); sub printEntropy { my ($entropy) = @_; my $n = scalar(@$entropy); print STDERR "$0: $n values in array\n"; my $nOver2 = int($n/2); for (my $i = 0; $i < $n; ++$i) { my $value = $entropy->[$i]; defined($value) or next; $value = $entropy->[$n - $i] if ($i >= $nOver2 and $symmetrize); print "$i $value\n"; } } sub load { my ($file) = @_; open(FILE, "<", $file) or die "$0: Cannot open $file : $!\n"; my $split; my $flag = 0; my @entropy; while () { if (/sites=([^\+]+)\+/) { $split = $1; $flag = 1; } if (/EntropyVonNeumann= ([^;]+);/) { my $entropy = $1; #last if ($flag != 1); $flag = 0; $entropy[$split] = $entropy; } } close(FILE); return @entropy; } dmrgpp-6.02/src/000077500000000000000000000000001414604301300135155ustar00rootroot00000000000000dmrgpp-6.02/src/DmrgDriver.h000066400000000000000000000062161414604301300157400ustar00rootroot00000000000000#ifndef DMRGDRIVER_H #define DMRGDRIVER_H #define USE_PTHREADS_OR_NOT_NG #include "DmrgSolver.h" #include "InputNg.h" #include "InputCheck.h" #include "ParametersDmrgSolver.h" #include "ModelSelector.h" #include "ModelHelperLocal.h" #include "ModelHelperSu2.h" #include "MatrixVectorOnTheFly.h" #include "MatrixVectorStored.h" #include "MatrixVectorKron/MatrixVectorKron.h" #include "TargetingBase.h" #include "VectorWithOffset.h" #include "VectorWithOffsets.h" #include "BasisWithOperators.h" #include "LeftRightSuper.h" #include "LanczosSolver.h" #include "ChebyshevSolver.h" #include "Operators.h" #include "CrsMatrix.h" #include "OperatorSpec.h" #include "CanonicalExpression.h" #include "ModelBase.h" #include "SuperGeometry.h" #include "ProgramGlobals.h" #ifndef USE_FLOAT typedef double RealType; #else typedef float RealType; #endif struct OperatorOptions { OperatorOptions() : site(0), dof(0), label(""), opexpr(""), hasOperatorExpression(false), transpose(false), enabled(false) {} SizeType site; SizeType dof; PsimagLite::String label; PsimagLite::String opexpr; bool hasOperatorExpression; bool transpose; bool enabled; }; typedef PsimagLite::InputNg InputNgType; typedef Dmrg::ParametersDmrgSolver ParametersDmrgSolverType; void usageOperator(); template void operatorDriver(const ModelBaseType& model, const OperatorOptions& obsOptions) { typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef Dmrg::OperatorSpec OperatorSpecType; if (obsOptions.hasOperatorExpression && obsOptions.label != "") { std::cerr<<"You must provide exactly one option: -l or -e;"; std::cerr<<" both were given\n"; usageOperator(); return; } if (!obsOptions.hasOperatorExpression && obsOptions.label == "") { if (model.introspect()) return; std::cerr<<"You must provide exactly one option: -l or -e;"; std::cerr<<" none were given\n"; usageOperator(); return; } OperatorType opC; const OperatorType opEmpty; if (obsOptions.hasOperatorExpression) { OperatorSpecType opSpec(model); int site = -1; PsimagLite::CanonicalExpression canonicalExpression(opSpec); canonicalExpression(opC, obsOptions.opexpr, opEmpty, site); } else { if (obsOptions.label == "B") { model.printBasis(obsOptions.site); return; } if (obsOptions.label == "H") { model.printTerms(); return; } opC = model.naturalOperator(obsOptions.label, obsOptions.site, obsOptions.dof); std::cerr<<"label="< void mainLoop4(typename SolverType::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); #endif // DMRGDRIVER_H dmrgpp-6.02/src/DmrgDriver.pm000066400000000000000000000071621414604301300161260ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; package DmrgDriver; sub createTemplates { my ($generateSources) = @_; my $cppEach = 2; my @lanczos = ("LanczosSolver","ChebyshevSolver"); my @matrixVector = ("MatrixVectorOnTheFly","MatrixVectorStored","MatrixVectorKron"); my @vecWithOffsets = ("","s"); my @complexOrReal = (0, 3); my @values; my $cppFiles = 0; my $counter = 0; my $fout; my $target = "TargetingBase"; my @su2files; foreach my $complexOrNot (@complexOrReal) { foreach my $lanczos (@lanczos) { foreach my $vecWithOffset (@vecWithOffsets) { foreach my $matrixVector (@matrixVector) { if ($counter == 0 or $counter % $cppEach == 0) { if ($counter > 0 and $generateSources) { close(FOUT); print STDERR "$0: File $fout written\n"; } $fout = "DmrgDriver$cppFiles.cpp"; $su2files[$cppFiles++] = 0; if ($generateSources) { open(FOUT,"> $fout") or die "$0: Cannot write to $fout : $!\n"; printHeader(); } } if ($generateSources) { printInstance($counter,$target,$lanczos,$matrixVector, $vecWithOffset,$complexOrNot,\@values); } $counter++; } } } } if ($generateSources) { close(FOUT); print STDERR "$0: $counter instances and $cppFiles files\n"; } return @su2files; } sub printInstance { my ($counter,$target,$lanczos,$matrixVector,$vecWithOffset,$complexOrNot, $values) = @_; my $sparseMatrix = "SparseMatrixInstance${counter}Type"; my $basisWithout = "Dmrg::Basis<$sparseMatrix>"; my $basisWith = "Dmrg::BasisWithOperators<$basisWithout >"; my $basis = $basisWithout; my $inputNg = "PsimagLite::InputNg::Readable"; my $geometry = "GeometryInstance${counter}Type"; my $basisSuperBlock = "$basis"; my $lrs = "Dmrg::LeftRightSuper<$basisWith,$basisSuperBlock >"; my $lanczosType = "LanczosSolver${counter}Type"; my $matrixVectorType = "MatrixVector${counter}Type"; my ($complexOrReal1, $complexOrReal2) = getDualRealComplex($complexOrNot); my $vecWithOffsetType = "Dmrg::VectorWithOffset${vecWithOffset}<$complexOrReal2, Dmrg::Qn> "; print FOUT< $sparseMatrix; typedef Dmrg::SuperGeometry<$complexOrReal1,$inputNg,Dmrg::ProgramGlobals> $geometry; typedef Dmrg::$matrixVector< Dmrg::ModelBase< Dmrg::ModelHelperLocal< $lrs >, ParametersDmrgSolverType, InputNgType::Readable, $geometry > > $matrixVectorType; typedef PsimagLite::$lanczos, $matrixVectorType, ${matrixVectorType}::VectorType> $lanczosType; template void mainLoop4<$lanczosType,$vecWithOffsetType> (${lanczosType}::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); EOF my $value = "Local$complexOrNot"; my $seen = 0; foreach my $item (@$values) { if ($item eq $value) { $seen = 1; last; } } return if ($seen); push @$values, $value; foreach my $item (@$values) { system("echo \'$item\' >> out.txt"); } system("echo \"-------------------\" >> out.txt"); } sub isComplexOption { my ($option) = @_; return ($option ne "RealType"); } sub targetNotComplex { my ($target) = @_; return ($target ne "TargetingTimeStep"); } sub printHeader { print FOUT< "; } 1; dmrgpp-6.02/src/DmrgDriver0.cpp000066400000000000000000000040211414604301300163430ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix SparseMatrixInstance0Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance0Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance0Type > > MatrixVector0Type; typedef PsimagLite::LanczosSolver, MatrixVector0Type, MatrixVector0Type::VectorType> LanczosSolver0Type; template void mainLoop4 > (LanczosSolver0Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix SparseMatrixInstance1Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance1Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance1Type > > MatrixVector1Type; typedef PsimagLite::LanczosSolver, MatrixVector1Type, MatrixVector1Type::VectorType> LanczosSolver1Type; template void mainLoop4 > (LanczosSolver1Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver1.cpp000066400000000000000000000040201414604301300163430ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix SparseMatrixInstance2Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance2Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance2Type > > MatrixVector2Type; typedef PsimagLite::LanczosSolver, MatrixVector2Type, MatrixVector2Type::VectorType> LanczosSolver2Type; template void mainLoop4 > (LanczosSolver2Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix SparseMatrixInstance3Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance3Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance3Type > > MatrixVector3Type; typedef PsimagLite::LanczosSolver, MatrixVector3Type, MatrixVector3Type::VectorType> LanczosSolver3Type; template void mainLoop4 > (LanczosSolver3Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver1.h000066400000000000000000000016441414604301300160210ustar00rootroot00000000000000#ifndef DMRG_DMRGDRIVER_1_H #define DMRG_DMRGDRIVER_1_H #include "DmrgDriver.h" template void mainLoop4(typename SolverType::MatrixType::ModelType::SuperGeometryType& geometry, const ParametersDmrgSolverType& dmrgSolverParams, InputNgType::Readable& io, const OperatorOptions& opOptions) { typedef typename SolverType::MatrixType::ModelType ModelBaseType; //! Setup the Model Dmrg::ModelSelector modelSelector(dmrgSolverParams.model); ModelBaseType& model = modelSelector(dmrgSolverParams,io,geometry); if (opOptions.enabled) { operatorDriver(model,opOptions); return; } //! Setup the dmrg solver: typedef Dmrg::DmrgSolver DmrgSolverType; DmrgSolverType dmrgSolver(model, io); //! Calculate observables: dmrgSolver.main(geometry); } #endif // DMRG_DMRGDRIVER_1_H dmrgpp-6.02/src/DmrgDriver10.cpp000066400000000000000000000042061414604301300164310ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix > SparseMatrixInstance20Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance20Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance20Type > > MatrixVector20Type; typedef PsimagLite::ChebyshevSolver, MatrixVector20Type, MatrixVector20Type::VectorType> LanczosSolver20Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver20Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix > SparseMatrixInstance21Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance21Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance21Type > > MatrixVector21Type; typedef PsimagLite::ChebyshevSolver, MatrixVector21Type, MatrixVector21Type::VectorType> LanczosSolver21Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver21Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver11.cpp000066400000000000000000000042051414604301300164310ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix > SparseMatrixInstance22Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance22Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance22Type > > MatrixVector22Type; typedef PsimagLite::ChebyshevSolver, MatrixVector22Type, MatrixVector22Type::VectorType> LanczosSolver22Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver22Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix > SparseMatrixInstance23Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance23Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance23Type > > MatrixVector23Type; typedef PsimagLite::ChebyshevSolver, MatrixVector23Type, MatrixVector23Type::VectorType> LanczosSolver23Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver23Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver12.cpp000066400000000000000000000041071414604301300164330ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix SparseMatrixInstance24Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance24Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance24Type > > MatrixVector24Type; typedef PsimagLite::LanczosSolver, MatrixVector24Type, MatrixVector24Type::VectorType> LanczosSolver24Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver24Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix SparseMatrixInstance25Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance25Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance25Type > > MatrixVector25Type; typedef PsimagLite::LanczosSolver, MatrixVector25Type, MatrixVector25Type::VectorType> LanczosSolver25Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver25Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver13.cpp000066400000000000000000000041061414604301300164330ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix SparseMatrixInstance26Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance26Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance26Type > > MatrixVector26Type; typedef PsimagLite::LanczosSolver, MatrixVector26Type, MatrixVector26Type::VectorType> LanczosSolver26Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver26Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix SparseMatrixInstance27Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance27Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance27Type > > MatrixVector27Type; typedef PsimagLite::LanczosSolver, MatrixVector27Type, MatrixVector27Type::VectorType> LanczosSolver27Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver27Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver14.cpp000066400000000000000000000041051414604301300164330ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix SparseMatrixInstance28Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance28Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance28Type > > MatrixVector28Type; typedef PsimagLite::LanczosSolver, MatrixVector28Type, MatrixVector28Type::VectorType> LanczosSolver28Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver28Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix SparseMatrixInstance29Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance29Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance29Type > > MatrixVector29Type; typedef PsimagLite::LanczosSolver, MatrixVector29Type, MatrixVector29Type::VectorType> LanczosSolver29Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver29Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver15.cpp000066400000000000000000000041131414604301300164330ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix SparseMatrixInstance30Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance30Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance30Type > > MatrixVector30Type; typedef PsimagLite::ChebyshevSolver, MatrixVector30Type, MatrixVector30Type::VectorType> LanczosSolver30Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver30Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix SparseMatrixInstance31Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance31Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance31Type > > MatrixVector31Type; typedef PsimagLite::ChebyshevSolver, MatrixVector31Type, MatrixVector31Type::VectorType> LanczosSolver31Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver31Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver16.cpp000066400000000000000000000041121414604301300164330ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix SparseMatrixInstance32Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance32Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance32Type > > MatrixVector32Type; typedef PsimagLite::ChebyshevSolver, MatrixVector32Type, MatrixVector32Type::VectorType> LanczosSolver32Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver32Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix SparseMatrixInstance33Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance33Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance33Type > > MatrixVector33Type; typedef PsimagLite::ChebyshevSolver, MatrixVector33Type, MatrixVector33Type::VectorType> LanczosSolver33Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver33Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver17.cpp000066400000000000000000000041111414604301300164330ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix SparseMatrixInstance34Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance34Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance34Type > > MatrixVector34Type; typedef PsimagLite::ChebyshevSolver, MatrixVector34Type, MatrixVector34Type::VectorType> LanczosSolver34Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver34Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix SparseMatrixInstance35Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance35Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance35Type > > MatrixVector35Type; typedef PsimagLite::ChebyshevSolver, MatrixVector35Type, MatrixVector35Type::VectorType> LanczosSolver35Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver35Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver18.cpp000066400000000000000000000042031414604301300164360ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix > SparseMatrixInstance36Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance36Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance36Type > > MatrixVector36Type; typedef PsimagLite::LanczosSolver, MatrixVector36Type, MatrixVector36Type::VectorType> LanczosSolver36Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver36Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix > SparseMatrixInstance37Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance37Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance37Type > > MatrixVector37Type; typedef PsimagLite::LanczosSolver, MatrixVector37Type, MatrixVector37Type::VectorType> LanczosSolver37Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver37Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver19.cpp000066400000000000000000000042021414604301300164360ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix > SparseMatrixInstance38Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance38Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance38Type > > MatrixVector38Type; typedef PsimagLite::LanczosSolver, MatrixVector38Type, MatrixVector38Type::VectorType> LanczosSolver38Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver38Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix > SparseMatrixInstance39Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance39Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance39Type > > MatrixVector39Type; typedef PsimagLite::LanczosSolver, MatrixVector39Type, MatrixVector39Type::VectorType> LanczosSolver39Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver39Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver2.cpp000066400000000000000000000040171414604301300163520ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix SparseMatrixInstance4Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance4Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance4Type > > MatrixVector4Type; typedef PsimagLite::LanczosSolver, MatrixVector4Type, MatrixVector4Type::VectorType> LanczosSolver4Type; template void mainLoop4 > (LanczosSolver4Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix SparseMatrixInstance5Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance5Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance5Type > > MatrixVector5Type; typedef PsimagLite::LanczosSolver, MatrixVector5Type, MatrixVector5Type::VectorType> LanczosSolver5Type; template void mainLoop4 > (LanczosSolver5Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver20.cpp000066400000000000000000000042011414604301300164250ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix > SparseMatrixInstance40Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance40Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance40Type > > MatrixVector40Type; typedef PsimagLite::LanczosSolver, MatrixVector40Type, MatrixVector40Type::VectorType> LanczosSolver40Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver40Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix > SparseMatrixInstance41Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance41Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance41Type > > MatrixVector41Type; typedef PsimagLite::LanczosSolver, MatrixVector41Type, MatrixVector41Type::VectorType> LanczosSolver41Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver41Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver21.cpp000066400000000000000000000042071414604301300164340ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix > SparseMatrixInstance42Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance42Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance42Type > > MatrixVector42Type; typedef PsimagLite::ChebyshevSolver, MatrixVector42Type, MatrixVector42Type::VectorType> LanczosSolver42Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver42Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix > SparseMatrixInstance43Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance43Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance43Type > > MatrixVector43Type; typedef PsimagLite::ChebyshevSolver, MatrixVector43Type, MatrixVector43Type::VectorType> LanczosSolver43Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver43Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver22.cpp000066400000000000000000000042061414604301300164340ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix > SparseMatrixInstance44Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance44Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance44Type > > MatrixVector44Type; typedef PsimagLite::ChebyshevSolver, MatrixVector44Type, MatrixVector44Type::VectorType> LanczosSolver44Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver44Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix > SparseMatrixInstance45Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance45Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance45Type > > MatrixVector45Type; typedef PsimagLite::ChebyshevSolver, MatrixVector45Type, MatrixVector45Type::VectorType> LanczosSolver45Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver45Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver23.cpp000066400000000000000000000042051414604301300164340ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix > SparseMatrixInstance46Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance46Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance46Type > > MatrixVector46Type; typedef PsimagLite::ChebyshevSolver, MatrixVector46Type, MatrixVector46Type::VectorType> LanczosSolver46Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver46Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix > SparseMatrixInstance47Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance47Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance47Type > > MatrixVector47Type; typedef PsimagLite::ChebyshevSolver, MatrixVector47Type, MatrixVector47Type::VectorType> LanczosSolver47Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver47Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver3.cpp000066400000000000000000000040251414604301300163520ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix SparseMatrixInstance6Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance6Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance6Type > > MatrixVector6Type; typedef PsimagLite::ChebyshevSolver, MatrixVector6Type, MatrixVector6Type::VectorType> LanczosSolver6Type; template void mainLoop4 > (LanczosSolver6Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix SparseMatrixInstance7Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance7Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance7Type > > MatrixVector7Type; typedef PsimagLite::ChebyshevSolver, MatrixVector7Type, MatrixVector7Type::VectorType> LanczosSolver7Type; template void mainLoop4 > (LanczosSolver7Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver4.cpp000066400000000000000000000040241414604301300163520ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix SparseMatrixInstance8Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance8Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance8Type > > MatrixVector8Type; typedef PsimagLite::ChebyshevSolver, MatrixVector8Type, MatrixVector8Type::VectorType> LanczosSolver8Type; template void mainLoop4 > (LanczosSolver8Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix SparseMatrixInstance9Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance9Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance9Type > > MatrixVector9Type; typedef PsimagLite::ChebyshevSolver, MatrixVector9Type, MatrixVector9Type::VectorType> LanczosSolver9Type; template void mainLoop4 > (LanczosSolver9Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver5.cpp000066400000000000000000000040531414604301300163550ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix SparseMatrixInstance10Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance10Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance10Type > > MatrixVector10Type; typedef PsimagLite::ChebyshevSolver, MatrixVector10Type, MatrixVector10Type::VectorType> LanczosSolver10Type; template void mainLoop4 > (LanczosSolver10Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix SparseMatrixInstance11Type; typedef Dmrg::SuperGeometry::Readable,Dmrg::ProgramGlobals> GeometryInstance11Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance11Type > > MatrixVector11Type; typedef PsimagLite::ChebyshevSolver, MatrixVector11Type, MatrixVector11Type::VectorType> LanczosSolver11Type; template void mainLoop4 > (LanczosSolver11Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver6.cpp000066400000000000000000000042031414604301300163530ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix > SparseMatrixInstance12Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance12Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance12Type > > MatrixVector12Type; typedef PsimagLite::LanczosSolver, MatrixVector12Type, MatrixVector12Type::VectorType> LanczosSolver12Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver12Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix > SparseMatrixInstance13Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance13Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance13Type > > MatrixVector13Type; typedef PsimagLite::LanczosSolver, MatrixVector13Type, MatrixVector13Type::VectorType> LanczosSolver13Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver13Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver7.cpp000066400000000000000000000042021414604301300163530ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix > SparseMatrixInstance14Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance14Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance14Type > > MatrixVector14Type; typedef PsimagLite::LanczosSolver, MatrixVector14Type, MatrixVector14Type::VectorType> LanczosSolver14Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver14Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix > SparseMatrixInstance15Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance15Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance15Type > > MatrixVector15Type; typedef PsimagLite::LanczosSolver, MatrixVector15Type, MatrixVector15Type::VectorType> LanczosSolver15Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver15Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver8.cpp000066400000000000000000000042011414604301300163530ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix > SparseMatrixInstance16Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance16Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance16Type > > MatrixVector16Type; typedef PsimagLite::LanczosSolver, MatrixVector16Type, MatrixVector16Type::VectorType> LanczosSolver16Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver16Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix > SparseMatrixInstance17Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance17Type; typedef Dmrg::MatrixVectorKron< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance17Type > > MatrixVector17Type; typedef PsimagLite::LanczosSolver, MatrixVector17Type, MatrixVector17Type::VectorType> LanczosSolver17Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver17Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/DmrgDriver9.cpp000066400000000000000000000042071414604301300163620ustar00rootroot00000000000000// Created automatically by ./configure.pl // DO NOT EDIT because file will be overwritten each // time you run ./configure.pl with the second argument set to 1 // This file should be commited #include "DmrgDriver1.h" typedef PsimagLite::CrsMatrix > SparseMatrixInstance18Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance18Type; typedef Dmrg::MatrixVectorOnTheFly< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance18Type > > MatrixVector18Type; typedef PsimagLite::ChebyshevSolver, MatrixVector18Type, MatrixVector18Type::VectorType> LanczosSolver18Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver18Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); typedef PsimagLite::CrsMatrix > SparseMatrixInstance19Type; typedef Dmrg::SuperGeometry ,PsimagLite::InputNg::Readable,Dmrg::ProgramGlobals> GeometryInstance19Type; typedef Dmrg::MatrixVectorStored< Dmrg::ModelBase< Dmrg::ModelHelperLocal< Dmrg::LeftRightSuper >,Dmrg::Basis > >, ParametersDmrgSolverType, InputNgType::Readable, GeometryInstance19Type > > MatrixVector19Type; typedef PsimagLite::ChebyshevSolver, MatrixVector19Type, MatrixVector19Type::VectorType> LanczosSolver19Type; template void mainLoop4 , Dmrg::Qn> > (LanczosSolver19Type::MatrixType::ModelType::SuperGeometryType&, const ParametersDmrgSolverType&, InputNgType::Readable&, const OperatorOptions&); dmrgpp-6.02/src/Engine/000077500000000000000000000000001414604301300147225ustar00rootroot00000000000000dmrgpp-6.02/src/Engine/AlgebraForTargetingExpression.h000066400000000000000000000120751414604301300230310ustar00rootroot00000000000000#ifndef ALGEBRAFORTARGETINGEXPRESSION_H #define ALGEBRAFORTARGETINGEXPRESSION_H #include "Vector.h" #include "AuxForTargetingExpression.h" #include "TermForTargetingExpression.h" #include "GetBraOrKet.h" namespace Dmrg { template class AlgebraForTargetingExpression { public: typedef typename TargetingBaseType::VectorWithOffsetType VectorWithOffsetType; typedef typename TargetingBaseType::ModelType ModelType; typedef typename VectorWithOffsetType::value_type ComplexOrRealType; typedef AuxForTargetingExpression AuxiliaryType; typedef PsimagLite::Vector::Type VectorStringType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef PsimagLite::Vector::Type VectorIntType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef PsimagLite::PackIndices PackIndicesType; typedef typename OperatorType::StorageType SparseMatrixType; typedef typename PsimagLite::Real::Type RealType; typedef TermForTargetingExpression TermType; typedef typename PsimagLite::Vector::Type VectorTermType; AlgebraForTargetingExpression(const AuxiliaryType& aux) : finalized_(false), aux_(aux) {} AlgebraForTargetingExpression(PsimagLite::String str, const AuxiliaryType& aux) : finalized_(false), aux_(aux) { terms_.push_back(TermType(str, aux)); } // AlgebraForTargetingExpression(const AlgebraForTargetingExpression&) = delete; AlgebraForTargetingExpression& operator=(const AlgebraForTargetingExpression& other) { finalized_ = other.finalized_; terms_ = other.terms_; return *this; } AlgebraForTargetingExpression& operator+=(const AlgebraForTargetingExpression& other) { if (other.terms_.size() != 1) err("Add only one term at a time\n"); AlgebraForTargetingExpression otherCopy = other; // finalize each term of this and ... for (SizeType i = 0; i < terms_.size(); ++i) terms_[i].finalize(); // ... and of otherCopy otherCopy.terms_[0].finalize(); // add those of otherCopy to this and ... terms_.push_back(otherCopy.terms_[0]); // ... simplify if possible simplifyTerms(); return *this; } AlgebraForTargetingExpression& operator*=(const AlgebraForTargetingExpression& other) { if (terms_.size() != 1 && other.terms_.size() != 1) err("Only canonical expressions supported\n"); terms_[0].multiply(other.terms_[0]); return *this; } AlgebraForTargetingExpression& operator*=(const ComplexOrRealType& scalar) { if (terms_.size() != 1) err("scalar multiplication\n"); terms_[0].multiply(scalar); return *this; } bool isEmpty() const { return (terms_.size() == 0); } void finalize() { const SizeType nterms = terms_.size(); for (SizeType i = 0; i < nterms; ++i) terms_[i].finalize(); } bool finalized() const { return finalized_; } PsimagLite::String toString() const { PsimagLite::String s; const SizeType n = terms_.size(); if (n == 0) err("toString returns empty\n"); for (SizeType i = 0; i < n - 1; ++i) s += terms_[i].toString() + "+"; return s + terms_[n - 1].toString(); } SizeType size() const { return terms_.size(); } int pIndex() const { if (terms_.size() != 1) return -1; return terms_[0].pIndex(); } bool hasSummationKetAndNoMult() const { const SizeType nterms = terms_.size(); bool summation = false; bool mult = false; for (SizeType i = 0; i < nterms; ++i) { if (terms_[i].size() != 1) continue; if (terms_[i].toString().substr(0, 3) == "|!a") summation = true; if (terms_[i].toString().substr(0, 3) == "|!m") mult = true; } return (summation && !mult); } private: void simplifyTerms() { PsimagLite::String name; VectorTermType termsNew; const SizeType nterms = terms_.size(); SizeType survivingTermIndex = nterms + 1000; SizeType survivingTerms = 0; for (SizeType i = 0; i < nterms; ++i) { if (!isTermSimplifiable(i)) { termsNew.push_back(terms_[i]); continue; } PsimagLite::GetBraOrKet ket(terms_[i].toString()); const SizeType pIndex = ket.pIndex(); if (survivingTerms == 0) { survivingTermIndex = termsNew.size(); termsNew.push_back(terms_[i]); name = "|!aP" + ttos(pIndex); } else { name += "pP" + ttos(pIndex); } ++survivingTerms; } if (survivingTerms < 2) return; name += ">"; termsNew[survivingTermIndex].setString(name); terms_ = termsNew; } bool isTermSimplifiable(SizeType i) const { if (terms_[i].size() != 1 || !terms_[i].finalized()) return false; PsimagLite::String str = terms_[i].toString(); return (str.substr(0, 2) != "|!"); } // important: needs operator= bool finalized_; const AuxiliaryType& aux_; VectorTermType terms_; }; } #endif // ALGEBRAFORTARGETINGEXPRESSION_H dmrgpp-6.02/src/Engine/AlgebraicStringToNumber.h000066400000000000000000000034111414604301300216060ustar00rootroot00000000000000#ifndef ALGEBRAICSTRINGTONUMBER_H #define ALGEBRAICSTRINGTONUMBER_H #include "Vector.h" #include "CanonicalExpression.h" namespace Dmrg { template class AlgebraicStringToNumber { class LoopLengthSpec { public: typedef FieldType ResultType; typedef FieldType ComplexOrRealType; typedef FieldType AuxiliaryType; LoopLengthSpec(SizeType n) : n_(n), c_(n/2) { if (n % 2 == 1) c_ = 0; } static bool isEmpty(ResultType x) { return (x == 0); } static bool metaEqual(ResultType, ResultType) { return true; } ResultType operator()(PsimagLite::String str, FieldType numberOfSites) const { if (str == "%lh") return n_ - 2; if (str == "%n") return n_; if (str == "%c") { if (c_ == 0) err("%c cannot be used with odd number of sites\n"); return c_; } return PsimagLite::atof(str); } PsimagLite::String convertVal(PsimagLite::String val) const { if (val == "-%lh") return "(-1.0)*%lh"; return val; } private: SizeType n_; SizeType c_; }; public: AlgebraicStringToNumber(PsimagLite::String msg, SizeType numberOfSites) : msg_(msg), numberOfSites_(numberOfSites) {} int procLength(PsimagLite::String val) { LoopLengthSpec loopLengthSpec(numberOfSites_); val = loopLengthSpec.convertVal(val); FieldType numberOfSites = numberOfSites_; PsimagLite::CanonicalExpression canonicalExpression(loopLengthSpec); typename LoopLengthSpec::ResultType opEmpty(1); typename LoopLengthSpec::ResultType p(1); canonicalExpression(p, val, opEmpty, numberOfSites); if (p != static_cast(p)) err(msg_ + ": string value " + val + " yields non integer\n"); return p; } private: PsimagLite::String msg_; SizeType numberOfSites_; }; } #endif // ALGEBRAICSTRINGTONUMBER_H dmrgpp-6.02/src/Engine/ApplyHamiltonian.h000066400000000000000000000045601414604301300203510ustar00rootroot00000000000000#ifndef DMRG_APPLYHAMILTONIAN_H #define DMRG_APPLYHAMILTONIAN_H namespace Dmrg { // ApplyHamiltonian, with Nsl = Not so local template class ApplyHamiltonian { public: typedef typename ApplyOperatorLocalType::VectorWithOffsetType VectorWithOffsetType; typedef typename ApplyOperatorLocalType::OperatorType OperatorType; typedef typename ApplyOperatorLocalType::FermionSignType FermionSignType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef typename ModelType::HamiltonianConnectionType HamiltonianConnectionType; typedef typename ApplyOperatorLocalType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::RealType RealType; ApplyHamiltonian(const LeftRightSuperType& lrs, const ModelType& model, const RealType& physicalTime) : model_(model), physicalTime_(physicalTime) {} //! FIXME: we need to make a fast version for when we're just //! figuring out where the (non-zero) partition is void operator()(VectorWithOffsetType& dest, const VectorWithOffsetType& phi) const { dest = phi; SizeType sectors = phi.sectors(); for (SizeType ii = 0; ii < sectors; ++ii) { SizeType i = phi.sector(ii); VectorType r; internal_(r, phi, i); dest.setDataInSector(r, i); } } private: void internal_(VectorType& r, const VectorWithOffsetType& phi, SizeType i0) const { SizeType p = applyOpLocal_.lrs().super().findPartitionNumber(phi.offset(i0)); HamiltonianConnectionType hc(p, applyOpLocal_.lrs(), model_.geometry(), model_.modelLinks(), physicalTime_, 0); MatrixForApplicationType lanczosHelper(model_, hc); SizeType total = phi.effectiveSize(i0); VectorType phi2(total); phi.extract(phi2, i0); r.resize(total); lanczosHelper.matrixVectorProduct(r, phi2); } ApplyHamiltonian(const ApplyHamiltonian&); ApplyHamiltonian& operator=(const ApplyHamiltonian&); ApplyOperatorLocalType applyOpLocal_; const ModelType& model_; const RealType& physicalTime_; }; } #endif // DMRG_APPLYHAMILTONIAN_H dmrgpp-6.02/src/Engine/ApplyOperatorExpression.h000066400000000000000000000706741414604301300217720ustar00rootroot00000000000000/* Copyright (c) 2014-2017-2018-2019, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ #ifndef APPLY_OP_EXPRESSION_H #define APPLY_OP_EXPRESSION_H #include "ProgressIndicator.h" #include "ApplyOperatorLocal.h" #include "TimeVectorsKrylov.h" #include "TimeVectorsChebyshev.h" #include "TimeVectorsRungeKutta.h" #include "TimeVectorsSuzukiTrotter.h" #include "Io/IoSelector.h" #include "TargetParamsBase.h" #include "StageEnum.h" #include "MultiSiteExpressionHelper.h" #include "CorrelationsSkeleton.h" namespace Dmrg { template class ApplyOperatorExpression { public: typedef typename TargetHelperType::RealType RealType; typedef typename TargetHelperType::ModelType ModelType; typedef typename ModelType::ParametersType ParametersType; typedef typename ParametersType::OptionsType OptionsType; typedef TargetParamsBase TargetParamsType; typedef typename TargetHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename TargetHelperType::WaveFunctionTransfType WaveFunctionTransfType; typedef TimeVectorsBase TimeVectorsBaseType; typedef TimeVectorsKrylov TimeVectorsKrylovType; typedef TimeVectorsChebyshev TimeVectorsChebyshevType; typedef TimeVectorsRungeKutta TimeVectorsRungeKuttaType; typedef TimeVectorsSuzukiTrotter TimeVectorsSuzukiTrotterType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename PsimagLite::Vector::Type VectorVectorWithOffsetType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef ApplyOperatorLocal ApplyOperatorType; typedef typename ApplyOperatorType::BorderEnum BorderEnumType; typedef typename TimeVectorsBaseType::PairType PairType; typedef StageEnum StageEnumType; typedef typename PsimagLite::Vector::Type VectorStageEnumType; typedef MultiSiteExpressionHelper MultiSiteExpressionHelperType; typedef typename MultiSiteExpressionHelperType::DmrgSerializerType DmrgSerializerType; typedef CorrelationsSkeleton CorrelationsSkeletonType; typedef typename TimeVectorsBaseType::WftHelperType WftHelperType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef typename PsimagLite::Vector::Type>::Type VectorVectorVectorWithOffsetType; ApplyOperatorExpression(const TargetHelperType& targetHelper, SizeType indexNoAdvance) : progress_("ApplyOperatorExpression"), targetHelper_(targetHelper), E0_(0.0), time_(0.0), currentTimeStep_(0), indexNoAdvance_(indexNoAdvance), applyOpLocal_(targetHelper.lrs(), targetHelper.withLegacyBugs()), targetVectors_(0), timeVectorsBase_(0), wftHelper_(targetHelper.model(), targetHelper.lrs(), targetHelper.wft()), multiSiteExprHelper_(targetHelper_.model().superGeometry().numberOfSites() - 2), correlationsSkel_(multiSiteExprHelper_, targetHelper.model(), false) { timesWithoutAdvancement_ = 0; firstSeeLeftCorner_ = false; } ~ApplyOperatorExpression() { delete timeVectorsBase_; timeVectorsBase_ = 0; clearPsi(); } virtual void initPsi(SizeType nsectors, SizeType nexcited) { if (psi_.size() > 0) { bool flag = true; if (psi_.size() != nsectors) { flag = false; } else { for (SizeType i = 0; i < nsectors; ++i) if (psi_[i].size() != nexcited) flag = false; } if (flag) return; std::cerr<<"AOE::initPsi(): WARNING sectors/nexcited changed during run\n"; std::cout<<"AOE::initPsi(): WARNING sectors/nexcited changed during run\n"; clearPsi(); } psi_.resize(nsectors); for (SizeType i = 0; i < nsectors; ++i) psi_[i].resize(nexcited, nullptr); } void postCtor(SizeType tstSites) { if (stage_.size() != 0) throw PsimagLite::RuntimeError("ApplyOperatorExpression: Internal Error\n"); stage_.resize((tstSites == 0) ? 1 : tstSites, StageEnum::DISABLED); } SizeType getPhi(VectorWithOffsetType* phiNew, RealType Eg, ProgramGlobals::DirectionEnum direction, SizeType site, SizeType loopNumber, const TargetParamsType& tstStruct) { SizeType count = 0; const SizeType nsectors = psi_.size(); const SizeType sectorIndex = tstStruct.sectorIndex(); if (sectorIndex >= nsectors) err("getPhi: sectors=" + ttos(nsectors) + " <= " + ttos(sectorIndex) + "\n"); const SizeType nlevels = psi_[sectorIndex].size(); const SizeType levelIndex = tstStruct.levelIndex(); if (levelIndex >= nlevels) err("getPhi: levels=" + ttos(nlevels) + " <= " + ttos(levelIndex) + "\n"); // deep copy needed VectorWithOffsetType phiOld = *(psi_[sectorIndex][levelIndex]); VectorWithOffsetType vectorSum; SizeType max = tstStruct.sites(); if (noStageIs(StageEnum::DISABLED)) { max = 1; for (SizeType i=0;i if (phiNew) computePhi(i, site, *phiNew, phiOld, direction, tstStruct); count += count2; if (!phiNew) continue; if (tstStruct.concatenation() == TargetParamsType::ConcatEnum::PRODUCT) { phiOld = *phiNew; } else { if (stage_[i] == StageEnum::OPERATOR) vectorSum += *phiNew; else vectorSum = *phiNew; } } if (phiNew && tstStruct.concatenation() == TargetParamsType::ConcatEnum::SUM) *phiNew = vectorSum; if (allStages(StageEnum::DISABLED)) E0_ = Eg; if (noStageIs(StageEnum::DISABLED)) { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"EnergyForExp was "; if (tstStruct.isEnergyForExp()) { E0_ = tstStruct.energyForExp(); msg<<"provided explicitly, "; } else { msg<<"not provided explicitly, "; } msg<<" value= "< void setPsi(SizeType sectorIndex, SizeType excitedIndex, VectorType& v, const SomeBasisType& basis, const VectorSizeType& sectors) { if (psi_.size() == 0) { psi_.resize(sectors.size()); const SizeType nexcited = targetHelper_.model().params().numberOfExcited; for (SizeType i = 0; i < psi_.size(); ++i) psi_[i].resize(nexcited); } assert(sectorIndex < sectors.size()); const SizeType sector = sectors[sectorIndex]; assert(sectorIndex < psi_.size()); assert(excitedIndex < psi_[sectorIndex].size()); if (!psi_[sectorIndex][excitedIndex]) psi_[sectorIndex][excitedIndex] = new VectorWithOffsetType; psi_[sectorIndex][excitedIndex]->set(v, sector, basis); } void writePsi(PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { const SizeType nsectors = psi_.size(); io.createGroup(prefix + "/PSI"); io.write(nsectors, prefix + "/PSI/Size"); for (SizeType sectorIndex = 0; sectorIndex < nsectors; ++sectorIndex) { const SizeType nexcited = psi_[sectorIndex].size(); PsimagLite::String label = prefix + "/PSI/" + ttos(sectorIndex); io.createGroup(label); io.write(nexcited, label + "/Size"); for (SizeType excitedIndex = 0; excitedIndex < nexcited; ++excitedIndex) psi_[sectorIndex][excitedIndex]->write(io, label + "/" + ttos(excitedIndex)); } } void readPsi(PsimagLite::IoSelector::In& io, PsimagLite::String prefix) { clearPsi(); SizeType nsectors = 0; try { io.read(nsectors, prefix + "/PSI/Size"); } catch (...) { psi_.resize(1); psi_[0].resize(1); psi_[0][0] = new VectorWithOffsetType; psi_[0][0]->read(io, prefix + "PSI"); return; } psi_.resize(nsectors); for (SizeType sectorIndex = 0; sectorIndex < nsectors; ++sectorIndex) { PsimagLite::String label = prefix + "/PSI/" + ttos(sectorIndex) + "/"; SizeType nexcited = 0; io.read(nexcited, label + "Size"); psi_[sectorIndex].resize(nexcited); for (SizeType excitedIndex = 0; excitedIndex < nexcited; ++excitedIndex) { psi_[sectorIndex][excitedIndex] = new VectorWithOffsetType; psi_[sectorIndex][excitedIndex]->read(io, label + ttos(excitedIndex)); } } } const VectorVectorWithOffsetType& targetVectors() const { return targetVectors_; } VectorWithOffsetType& targetVectors(SizeType i) // <--- FIXME { assert(i < targetVectors_.size()); return targetVectors_[i]; } const VectorWithOffsetType& targetVectors(SizeType i) const { assert(i < targetVectors_.size()); return targetVectors_[i]; } SizeType createPvector(const VectorWithOffsetType& v) { const SizeType n = targetVectors_.size(); targetVectors_.push_back(v); return n; } void destroyPvector(SizeType ind) { if (ind >= targetVectors_.size()) err("AOE: destroyPvector\n"); targetVectors_[ind].clear(); } void trimVectors() { const SizeType n = targetVectors_.size(); SizeType x = 0; for (SizeType ii = 0; ii < n; ++ii) { const SizeType i = n - ii - 1; if (targetVectors_[i].size() == 0) { ++x; } else { break; } } if (x == 0) return; targetVectorsResize(n - x); } void targetVectorsResize(SizeType x) { if (x == 0) targetVectors_.clear(); else targetVectors_.resize(x); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Number of target vectors is now "<::Type& indices, RealType Eg, const VectorWithOffsetType& phi, ProgramGlobals::DirectionEnum direction, bool allOperatorsApplied, bool wftAndAdvanceIfNeeded, const PsimagLite::Vector::Type& block, bool isLastCall) { typename TimeVectorsBaseType::ExtraData extra(direction, allOperatorsApplied, wftAndAdvanceIfNeeded, block, isLastCall, time_); if (!timeVectorsBase_) err("timeVectorsBase_ ptr not setup!?\n"); timeVectorsBase_->calcTimeVectors(indices, Eg, phi, extra); } void applyOneOperator(SizeType loopNumber, SizeType indexOfOperator, SizeType site, VectorWithOffsetType& phiNew, const VectorWithOffsetType& psiSrc, const ProgramGlobals::DirectionEnum systemOrEnviron, const TargetParamsType& tstStruct) { if (tstStruct.startingLoops().size()>0 && tstStruct.startingLoops()[indexOfOperator]>loopNumber) return; const bool hasBeenApplied = (phiNew.size() > 0); if (hasBeenApplied) return; VectorWithOffsetType phiOld = psiSrc; SizeType numberOfSites = targetHelper_.lrs().super().block().size(); BorderEnumType corner = (site == 0 || site == numberOfSites -1) ? ApplyOperatorType::BORDER_YES : ApplyOperatorType::BORDER_NO; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"I'm applying a local operator now"; progress_.printline(msgg, std::cout); const SizeType splitSize = targetHelper_.model().hilbertSize(site); typename PsimagLite::Vector::Type signs; targetHelper_.model().findOddElectronsOfOneSite(signs, site); FermionSign fs(targetHelper_.lrs().left(), signs); applyOpLocal_(phiNew, phiOld, tstStruct.aOperators()[indexOfOperator], fs, splitSize, systemOrEnviron, corner); RealType norma = norm(phiNew); if (norma<1e-6) { PsimagLite::OstringStream msgg2(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg2 = msgg2(); msg2<<"Norm of phi is zero\n"; progress_.printline(msgg2, std::cout); } } void multiSitePush(DmrgSerializerType const* ds) const { const VectorWithOffsetType& psi00 = ensureOnlyOnePsi("multiSitePush"); multiSiteExprHelper_.push(ds, psi00); } void wftSome(SizeType site, SizeType begin, SizeType end) { VectorVectorWithOffsetType& tvs = const_cast(targetVectors_); wftHelper_.wftSome(tvs, site, begin, end); } void wftOneVector(VectorWithOffsetType& phiNew, const VectorWithOffsetType& src, SizeType site) const { wftHelper_.wftOneVector(phiNew, src, site); } const VectorWithOffsetType& ensureOnlyOnePsi(PsimagLite::String func) const { if (psi_.size() != 1) err("ensureOnlyOnePsi failed (more than one excited); called from" + func + "\n"); if (psi_[0].size() != 1) err("ensureOnlyOnePsi failed (more than one sector); called from" + func + "\n"); return *(psi_[0][0]); } void timeHasAdvanced() { if (!timeVectorsBase_) err("timeHasAdvanced(): timeVectorsBase_ ptr not setup!?\n"); timeVectorsBase_->timeHasAdvanced(time_); } const ModelType& model() const { return targetHelper_.model(); } private: // legacy reading, use only as fallback void loadEnergyLegacy(PsimagLite::IoSelector::In& io, PsimagLite::String label) { SizeType total = 0; io.read(total, label + "/Size"); for (SizeType i = 0; i < total; ++i) io.read(E0_, label + "/" + ttos(i)); } void checkOrder(SizeType i, const TargetParamsType& tstStruct) const { if (i==0) return; for (SizeType j=0;j0 && tstStruct.startingLoops()[i]>loopNumber) return 0; if (site != tstStruct.sites(i) && stage_[i] == StageEnum::DISABLED) return 0; if (site != tstStruct.sites(i) && stage_[i] != StageEnum::DISABLED && i>0) return 0; if (site == tstStruct.sites(i) && stage_[i] == StageEnum::DISABLED) { stage_[i] = StageEnum::OPERATOR; } else { stage_[i] = StageEnum::WFT_NOADVANCE; } if (stage_[i] == StageEnum::OPERATOR) checkOrder(i, tstStruct); const OptionsType& options = targetHelper_.model().params().options; const bool advanceOnlyAtBorder = !options.isSet("advanceUnrestricted"); SizeType sites = targetHelper_.model().superGeometry().numberOfSites(); bool weAreAtBorder = (site < 1 || site >= sites-1); bool dontAdvance = (advanceOnlyAtBorder & !weAreAtBorder); if (advanceEach > 0 && timesWithoutAdvancement_ >= advanceEach && !dontAdvance) { stage_[i] = StageEnum::WFT_ADVANCE; if (i == lastI) { ++currentTimeStep_; timesWithoutAdvancement_ = 1; if (timeVectorsBase_) timeVectorsBase_->timeHasAdvanced(time_); } } else { if (i == lastI && stage_[i] == StageEnum::WFT_NOADVANCE && firstSeeLeftCorner_) ++timesWithoutAdvancement_; } if (!firstSeeLeftCorner_ && i==lastI && stage_[i] == StageEnum::WFT_NOADVANCE && site==1) firstSeeLeftCorner_ = true; PsimagLite::OstringStream msgg2(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg2 = msgg2(); msg2<<"Steps without advance: "<::Type signs; targetHelper_.model().findOddElectronsOfOneSite(signs, site); const SizeType splitSize = targetHelper_.model().hilbertSize(site); FermionSign fs(targetHelper_.lrs().left(), signs); applyOpLocal_(phiNew, phiOld, tstStruct.aOperators()[i], fs, splitSize, systemOrEnviron,corner); RealType norma = norm(phiNew); if (norma<1e-6) { PsimagLite::OstringStream msgg2(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg2 = msgg2(); msg2<<"Norm of phi is zero\n"; progress_.printline(msgg2, std::cout); } } else if (stage_[i] == StageEnum::WFT_NOADVANCE || stage_[i] == StageEnum::WFT_ADVANCE) { const SizeType advanceEach = tstStruct.advanceEach(); SizeType advance = indexNoAdvance_; if (advanceEach > 0 && stage_[i] == StageEnum::WFT_ADVANCE && timeVectorsBase_) { SizeType timeSteps = tstStruct.timeSteps(); advance = (timeSteps > 0) ? timeSteps - 1 : 0; } if (targetVectors_.size() <= advance) { PsimagLite::String s(__FILE__); s += ": TargetVectors.size()" + ttos(targetVectors_.size()); s += " but advance=" + ttos(advance) + "\n"; throw PsimagLite::RuntimeError(s); } const VectorWithOffsetType& src = targetVectors_[advance]; if (src.size() == 0) { PsimagLite::String s(__FILE__); s += ": TargetVectors[" + ttos(advance) + "].size()==0\n"; throw PsimagLite::RuntimeError(s); } if (site == 0 || site == numberOfSites -1) { // don't wft since we did it before assert(advance < targetVectors_.size()); if (timeVectorsBase_ || advanceEach == 0) phiNew = src; return; } wftHelper_.wftOneVector(phiNew, src, site); } else { throw PsimagLite::RuntimeError("computePhi\n"); } } void clearPsi() { const SizeType sectors = psi_.size(); for (SizeType i = 0; i < sectors; ++i) { const SizeType nexcited = psi_[i].size(); for (SizeType j = 0; j < nexcited; ++j) { delete psi_[i][j]; psi_[i][j] = 0; } } } ApplyOperatorExpression(const ApplyOperatorExpression&) = delete; ApplyOperatorExpression& operator=(const ApplyOperatorExpression&) = delete; PsimagLite::ProgressIndicator progress_; const TargetHelperType& targetHelper_; VectorStageEnumType stage_; RealType E0_; RealType time_; SizeType currentTimeStep_; SizeType indexNoAdvance_; ApplyOperatorType applyOpLocal_; VectorVectorVectorWithOffsetType psi_; VectorVectorWithOffsetType targetVectors_; TimeVectorsBaseType* timeVectorsBase_; WftHelperType wftHelper_; mutable MultiSiteExpressionHelperType multiSiteExprHelper_; CorrelationsSkeletonType correlationsSkel_; static SizeType timesWithoutAdvancement_; static bool firstSeeLeftCorner_; }; template SizeType ApplyOperatorExpression::timesWithoutAdvancement_ = 0; template bool ApplyOperatorExpression::firstSeeLeftCorner_ = false; } // namespace Dmrg #endif // APPLY_OP_EXPRESSION_H dmrgpp-6.02/src/Engine/ApplyOperatorLocal.h000066400000000000000000000352321414604301300206540ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ApplyOperatorLocal.h * * dest2 = transpose(A) * src */ #ifndef APPLY_OPERATOR_LOCAL_H #define APPLY_OPERATOR_LOCAL_H #include "PackIndices.h" // in PsimagLite #include "FermionSign.h" #include "ProgramGlobals.h" #include "OperatorStorage.h" namespace Dmrg { template class ApplyOperatorLocal { typedef typename VectorWithOffsetType_::VectorType TargetVectorType; typedef typename LeftRightSuperType_::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::RealType RealType; typedef typename BasisWithOperatorsType::ComplexOrRealType ComplexOrRealType; typedef PsimagLite::PackIndices PackIndicesType; typedef typename BasisWithOperatorsType::OperatorType OperatorType_; class LegacyBug { public: LegacyBug(bool withLegacyBug, const OperatorType_& A) : withLegacyBug_(withLegacyBug), Aptr_((withLegacyBug) ? const_cast(&A ): new OperatorType_) { if (withLegacyBug_) return; *Aptr_ = A; Aptr_->transpose(); } ~LegacyBug() { if (withLegacyBug_) return; delete Aptr_; Aptr_ = 0; } const OperatorType_& operator()() const { assert(Aptr_); return *Aptr_; } private: bool withLegacyBug_; OperatorType_* Aptr_; }; // class LegacyBug public: enum BorderEnum {BORDER_NO = false, BORDER_YES = true}; enum class LatticePartEnum {MIDDLE, LEFT_CORNER, RIGHT_CORNER}; typedef LeftRightSuperType_ LeftRightSuperType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef VectorWithOffsetType_ VectorWithOffsetType; typedef OperatorType_ OperatorType; typedef FermionSign FermionSignType; ApplyOperatorLocal(const LeftRightSuperType& lrs, bool withLegacyBug) : lrs_(lrs), withLegacyBug_(withLegacyBug) {} //! FIXME: we need to make a fast version for when we're just //! figuring out where the (non-zero) partition is void operator()(VectorWithOffsetType& dest, const VectorWithOffsetType& src, const OperatorType& AA, const FermionSign& fermionSign, SizeType splitSize, ProgramGlobals::DirectionEnum systemOrEnviron, BorderEnum corner) const { LegacyBug legacyBug(withLegacyBug_, AA); const OperatorType& A = legacyBug(); if (corner == BORDER_NO) { if (systemOrEnviron == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) applyLocalOpSystem(dest, src, A, fermionSign, splitSize, LatticePartEnum::MIDDLE); else applyLocalOpEnviron(dest, src, A, LatticePartEnum::MIDDLE); return; } applyLocalOpCorner(dest,src,A,fermionSign); } //! FIXME: we need to make a fast version for when we're just //! figuring out where the (non-zero) partition is void hookForZero(VectorWithOffsetType& dest, const VectorWithOffsetType& src, const OperatorType& A, SizeType splitSize, ProgramGlobals::DirectionEnum systemOrEnviron) const { assert(systemOrEnviron == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM); TargetVectorType dest2(lrs_.super().size(),0.0); for (SizeType ii = 0; ii < src.sectors(); ++ii) { SizeType i = src.sector(ii); hookForZeroSystem(dest2, src, A, splitSize, i); } dest.fromFull(dest2,lrs_.super()); } // dest2 = transpose(A) * src; corrected if !withLegacyBug void hookForZeroSystem(TargetVectorType& dest2, const VectorWithOffsetType& src, const OperatorType& AA, SizeType splitSize, SizeType i0) const { LegacyBug legacyBug(withLegacyBug_, AA); const OperatorType& A = legacyBug(); SizeType offset = src.offset(i0); SizeType final = offset + src.effectiveSize(i0); SizeType ns = lrs_.left().permutationVector().size(); SizeType nx = ns/splitSize; if (src.size() != lrs_.super().permutationVector().size()) err("applyLocalOpSystem SE\n"); PackIndicesType pack1(ns); PackIndicesType pack2(nx); for (SizeType i = offset; i < final; ++i) { SizeType x = 0; SizeType y = 0; pack1.unpack(x,y,lrs_.super().permutation(i)); SizeType x0 = 0; SizeType x1 = 0; assert(x= lrs_.left().permutationVector().size()) err("applyLocalOpSystem S\n"); const bool isFermion = (A.fermionOrBoson() == ProgramGlobals::FermionOrBosonEnum::FERMION); const RealType sign = lrs_.left().fermionicSign(x, (isFermion) ? -1 : 1); const SizeType start = A.getCRS().getRowPtr(y); const SizeType end = A.getCRS().getRowPtr(y + 1); for (SizeType k = start; k < end; ++k) { SizeType yprime = A.getCRS().getCol(k); SizeType j = lrs_.super().permutationInverse(x+yprime*ns); dest2[j] += src.slowAccess(i)*A.getCRS().getValue(k)*sign; } } } // entry point for corner cases. These are all when expanding ths system void applyLocalOpCorner(VectorWithOffsetType& dest, const VectorWithOffsetType& src, const OperatorType& A, const FermionSign& fermionSign) const { if (lrs_.right().size() == A.getCRS().rows()) { // right corner SizeType splitSize = A.getCRS().rows(); // FIXME: check for SDHS applyLocalOpSystem(dest, src, A, fermionSign, splitSize, LatticePartEnum::RIGHT_CORNER); return; } applyLocalOpEnviron(dest, src, A, LatticePartEnum::LEFT_CORNER); } const LeftRightSuperType& lrs_; bool withLegacyBug_; }; // class ApplyOperatorLocal } // namespace Dmrg /*@}*/ #endif //APPLY_OPERATOR_LOCAL_H dmrgpp-6.02/src/Engine/Array.h000066400000000000000000000031531414604301300161530ustar00rootroot00000000000000#ifndef ARRAY_H #define ARRAY_H #include "AllocatorCpu.h" #include "Vector.h" #include namespace Dmrg { template class Array { public: typedef T value_type; Array() : size_(0), data_(0) {} Array(SizeType n) : size_(0), data_(0) { allocate(n); } Array(const Array& other) : size_(0), data_(0) { assert(other.data_ || other.size_ == 0); clear(); allocate(other.size_); memcpy(data_, other.data_, size_*sizeof(T)); } Array(const std::vector& other) : size_(0), data_(0) { fromStdVector(other); } ~Array() { delete [] data_; data_ = 0; } Array& operator=(const Array& other) { assert(other.data_ || other.size_ == 0); clear(); allocate(other.size_); memcpy(data_, other.data_, size_*sizeof(T)); return *this; } void clear() { size_ = 0; delete [] data_; data_ = 0; } void resize(SizeType n) { if (size_ == n) return; clear(); allocate(n); } SizeType size() const { assert(size_ == 0 || data_); return size_; } const T& operator[](SizeType ind) const { assert(ind < size_); assert(data_); return data_[ind]; } T& operator[](SizeType ind) { assert(ind < size_); return data_[ind]; } void toStdVector(std::vector& v) const { if (size_ == 0) return; v.resize(size_); memcpy(&(v[0]), data_, sizeof(SizeType)*size_); } void fromStdVector(const std::vector& v) { clear(); allocate(v.size()); memcpy(data_, &(v[0]), size_*sizeof(T)); } private: void allocate(SizeType n) { assert(data_ == 0 && size_ == 0); size_ = n; data_ = new T[size_]; } SizeType size_; T* data_; }; } #endif // ARRAY_H dmrgpp-6.02/src/Engine/AuxForTargetingExpression.h000066400000000000000000000060641414604301300222320ustar00rootroot00000000000000#ifndef AUXFORTARGETINGEXPRESSION_H #define AUXFORTARGETINGEXPRESSION_H #include "Vector.h" #include "GetBraOrKet.h" #include "ProgramGlobals.h" namespace Dmrg { template class AuxForTargetingExpression { public: typedef typename TargetingBaseType::VectorWithOffsetType VectorWithOffsetType; typedef typename TargetingBaseType::ModelType ModelType; typedef typename TargetingBaseType::ApplyOperatorExpressionType ApplyOperatorExpressionType; typedef typename PsimagLite::Vector::Type VectorVectorWithOffsetType; typedef typename PsimagLite::Vector::Type>::Type VectorVectorVectorWithOffsetType; typedef typename ModelType::LeftRightSuperType LeftRightSuperType; typedef PsimagLite::Vector::Type VectorStringType; AuxForTargetingExpression(const ApplyOperatorExpressionType& aoe, const ModelType& model, const LeftRightSuperType& lrs, ProgramGlobals::DirectionEnum dir) : aoe_(aoe), model_(model), lrs_(lrs), direction_(dir) {} const ApplyOperatorExpressionType& aoe() const { return aoe_; } const ModelType& model() const { return model_; } const LeftRightSuperType& lrs() const { return lrs_; } ProgramGlobals::DirectionEnum direction() const { return direction_; } const VectorWithOffsetType& getCurrentVectorConst(PsimagLite::String braOrKet) const { PsimagLite::GetBraOrKet getBraOrKet(braOrKet); if (getBraOrKet.isPvector()) { const SizeType pIndex = getBraOrKet.pIndex(); if (pIndex >= aoe_.targetVectors().size()) err("getVector: out of range for " + braOrKet + "\n"); return aoe_.targetVectors()[pIndex]; } else if (getBraOrKet.isRvector()) { throw PsimagLite::RuntimeError("reserved vector\n"); } const SizeType sectorIndex = getBraOrKet.sectorIndex(); return *(aoe_.psiConst()[sectorIndex][getBraOrKet.levelIndex()]); } VectorWithOffsetType& getCurrentVectorNonConst(PsimagLite::String braOrKet) const { PsimagLite::GetBraOrKet getBraOrKet(braOrKet); if (getBraOrKet.isRvector()) { const SizeType pIndex = getBraOrKet.pIndex(); if (pIndex >= tempVectors_.size()) err("getCurrentVectorNonConst: out of range for " + braOrKet + "\n"); return tempVectors_[pIndex]; } throw PsimagLite::RuntimeError("getCurrentVectorNonConst: psi or tvs cannot be modified\n"); } PsimagLite::String createTemporaryVector(PsimagLite::String str) const { const SizeType n = tempVectors_.size(); tempVectors_.push_back(VectorWithOffsetType()); tempNames_.push_back(str); return "R" + ttos(n); } const VectorVectorWithOffsetType& tempVectors() const { return tempVectors_; } const VectorStringType& tempNames() const { return tempNames_; } private: const ApplyOperatorExpressionType& aoe_; const ModelType& model_; const LeftRightSuperType lrs_; ProgramGlobals::DirectionEnum direction_; mutable VectorVectorWithOffsetType tempVectors_; mutable VectorStringType tempNames_; }; } #endif // AUXFORTARGETINGEXPRESSION_H dmrgpp-6.02/src/Engine/Basis.h000066400000000000000000000747131414604301300161500ustar00rootroot00000000000000/* Copyright (c) 2009-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file Basis.h * * A class to represent in a light way a Dmrg basis (used only to implement symmetries). * */ #ifndef BASIS_HEADER_H #define BASIS_HEADER_H #include "Utils.h" #include "Sort.h" // in PsimagLite #include "HamiltonianSymmetryLocal.h" #include "Profiling.h" #include "Qn.h" #include "QnHash.h" #include "Parallelizer2.h" namespace Dmrg { // A class to represent in a light way a Dmrg basis (used only to implement symmetries). // (See corresponding section in paper) template class Basis { public: typedef typename SparseMatrixType_::value_type SparseElementType; typedef typename PsimagLite::Real::Type RealType_; typedef Basis ThisType; typedef HamiltonianSymmetryLocal HamiltonianSymmetryLocalType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef VectorSizeType BlockType; typedef SparseMatrixType_ SparseMatrixType; typedef RealType_ RealType; typedef PsimagLite::Vector::Type VectorBoolType; typedef Qn QnType; typedef typename QnType::VectorQnType VectorQnType; typedef PsimagLite::Matrix MatrixType; typedef std::pair PairSizeType; //! Constructor, s=name of this basis Basis(const PsimagLite::String& s) : dmrgTransformed_(false), name_(s) {} //! Loads this basis from memory or disk template Basis(IoInputter& io, const PsimagLite::String& ss, bool minimizeRead) : dmrgTransformed_(false), name_(ss) { correctNameIfNeeded(); PsimagLite::String prefix = ss + "/"; loadInternal(io, prefix, minimizeRead); } //! Loads this basis from memory or disk template void read(IoInputter& io, PsimagLite::String prefix) { name_ = ""; loadInternal(io, prefix, false); } //! Returns the name of this basis const PsimagLite::String& name() const { return name_; } const VectorBoolType& signs() const { return signs_; } //! Sets the block of sites for this basis void set(BlockType const &B) { block_ = B; } /* PSIDOC BasisSetToProduct The quantum numbers of the original (untransformed) real-space basis are set by the model class (to be described in Section~\ref{subsec:models}), whereas the quantum numbers of outer products are handled by the class \cppClass{Basis} and \cppClass{BasisImplementation}, function \cppFunction{setToProduct}. This can be done because if $|a\rangle$ has quantum number $q_a$ and $|b\rangle$ has quantum number $q_b$, then $|a\rangle\otimes|b\rangle$ has quantum number $q_a+q_b$. \cppClass{Basis} knows how quantum numbers change when we change the basis: they do not change since the DMRG transformation preserves quantum numbers; and \cppClass{Basis} also knows what happens to quantum numbers when we truncate the basis: quantum numbers of discarded states are discarded. In this way, symmetries are implemented efficiently, with minimal dependencies and in a model-independent way. */ void setToProduct(const ThisType& basis1, const ThisType& basis2, SizeType initialSizeOfHashTable = 10) { if (useSu2Symmetry_) err("SU(2) symmetry no longer supported\n"); PsimagLite::Profiling profiling("setToProduct", ttos(basis1.size()) + "x" + ttos(basis2.size()), std::cout); block_.clear(); utils::blockUnion(block_,basis1.block_,basis2.block_); SizeType ns = basis2.size(); SizeType ne = basis1.size(); unsigned long int check = ns*ne; unsigned int shift = 8*sizeof(SizeType)-1; unsigned long int max = 1; max <<= shift; if (check >= max) { PsimagLite::String msg("Basis::setToProduct: Basis too large. "); msg += "Current= "+ ttos(check) + " max " + ttos(max) + "\n"; msg += "Please recompile without -DUSE_SHORT\n"; throw PsimagLite::RuntimeError(msg); } SizeType npe = basis2.offsets_.size(); if (npe > 0) --npe; SizeType nps = basis1.offsets_.size(); if (nps > 0) --nps; // first pass for sizes in super std::hash myhash(true); std::unordered_map qnSizes(initialSizeOfHashTable, myhash); std::unordered_map seenThisQns(initialSizeOfHashTable, myhash); VectorBoolType signsPerOffset(nps*npe); // // ------------------------------- // precompute left and right sizes // ------------------------------- std::vector leftSize_array(nps); std::vector rightSize_array(npe); for(SizeType ps = 0; ps < nps; ++ps) { const SizeType leftSize = basis1.offsets_[ps + 1] - basis1.offsets_[ps]; leftSize_array[ps] = leftSize; }; for(SizeType pe = 0; pe < npe; ++pe) { const SizeType rightSize = basis2.offsets_[pe + 1] - basis2.offsets_[pe]; rightSize_array[pe] = rightSize; }; SizeType counter = 0; const QnType dummyQn(basis2.qns_[0], basis1.qns_[0]); qns_.clear(); qns_.resize(nps*npe, dummyQn); for (SizeType ps = 0; ps < nps; ++ps) { for (SizeType pe = 0; pe < npe; ++pe) { const SizeType leftSize = leftSize_array[ps]; const SizeType rightSize = rightSize_array[pe]; const QnType tensorProd(basis2.qns_[pe], basis1.qns_[ps]); qnSizes[tensorProd] += leftSize*rightSize; if (seenThisQns[tensorProd]) continue; seenThisQns[tensorProd] = counter+1; qns_[counter] = tensorProd; signsPerOffset[counter] = (basis1.signs_[basis1.offsets_[ps]] ^ basis2.signs_[basis2.offsets_[pe]]); ++counter; } } std::unordered_map offsets(initialSizeOfHashTable, myhash); std::unordered_map extraOffsets(initialSizeOfHashTable, myhash); qns_.resize(counter, dummyQn); signsPerOffset.resize(counter); const SizeType total = basis1.size() * basis2.size(); signs_.clear(); signs_.resize(total); offsetsFromSizes(offsets, qnSizes, signsPerOffset); // second pass for permutation in super const SizeType basisLeftSize = basis1.size(); const SizeType basisRightSize = basis2.size(); permInverse_.resize(basisLeftSize*basisRightSize); permutationVector_.resize(permInverse_.size()); counter = 0; // ----------------------------------- // extra pass to setup offset pointers // ----------------------------------- std::vector offset_into_perm_array(nps*npe); for(SizeType pe = 0; pe < npe; ++pe) { for(SizeType ps = 0; ps < nps; ++ps) { const SizeType leftSize = leftSize_array[ps]; const SizeType rightSize = rightSize_array[pe]; const QnType thisQn(basis2.qns_[pe], basis1.qns_[ps]); SizeType extraOffset = 0; { extraOffset = extraOffsets[thisQn]; extraOffsets[thisQn] += leftSize * rightSize; } const SizeType offset = offsets[thisQn]; const SizeType pspe = ps + pe * nps; const SizeType offset_into_perm = offset + extraOffset; offset_into_perm_array[ pspe ] = offset_into_perm; }; }; // ----------------------------------------- // collapsed loop to fill permutation vector // ----------------------------------------- PsimagLite::CodeSectionParams codeParams = PsimagLite::Concurrency::codeSectionParams; codeParams.npthreads = std::min(nps*npe, PsimagLite::Concurrency::codeSectionParams.npthreads); PsimagLite::Parallelizer2<> parallelizer2(codeParams); parallelizer2.parallelFor(0, nps*npe, [nps, basisLeftSize, &offset_into_perm_array, &leftSize_array, &rightSize_array, &basis1, &basis2, this] (SizeType pspe, SizeType) { // ---------------------------- // recall pspe = ps + pe * nps; // ---------------------------- const SizeType pe = pspe/nps; const SizeType ps = pspe - pe*nps; const SizeType offset_into_perm = offset_into_perm_array[ pspe ]; const SizeType leftSize = leftSize_array[ps]; const SizeType rightSize = rightSize_array[pe]; for (SizeType iright = 0; iright < rightSize; ++iright) { for (SizeType ileft = 0; ileft < leftSize; ++ileft) { const SizeType ileftOffset = basis1.offsets_[ps] + ileft; const SizeType irightOffset = basis2.offsets_[pe] + iright; const SizeType iglobalState = ileftOffset + irightOffset*basisLeftSize; const SizeType ipos = ileft + iright * leftSize + offset_into_perm; this->permutationVector_[ipos] = iglobalState; this->permInverse_[iglobalState] = ipos; } } }); checkPermutation(permInverse_); checkPermutation(permutationVector_); signsOld_ = signs_; } //! returns the effective quantum number of basis state i const QnType& qnEx(SizeType i) const { assert(i < qns_.size()); return qns_[i]; } //! returns the start of basis partition i (see paper) SizeType partition(SizeType i) const { assert(i < offsets_.size()); return offsets_[i]; } //! returns number of partitions for this basis (see paper) SizeType partition() const { return offsets_.size(); } //! returns the permutation of i SizeType permutation(SizeType i) const { assert(i 0); return offsets_[offsets_.size()-1]; } //! finds the partition that contains basis state i SizeType findPartitionNumber(SizeType i) const { for (SizeType j=0;j=offsets_[j] && i void changeBasis(VectorSizeType& removedIndices, const VectorSizeType& perm, SizeType kept, const SolverParametersType& solverParams) { removedIndices.clear(); if (useSu2Symmetry_) err("SU(2) symmetry no longer supported\n"); else symmLocal_.calcRemovedIndices(removedIndices, perm, kept, solverParams); if (removedIndices.size()==0) return; VectorSizeType unusedPerm(removedIndices.size()); PsimagLite::Sort sort; sort.sort(removedIndices, unusedPerm); } RealType truncateBasis(const typename PsimagLite::Vector::Type& eigs, const VectorSizeType& removedIndices) { dmrgTransformed_=true; if (removedIndices.size()==0) return 0; PsimagLite::Profiling profiling("truncateBasis", ttos(eigs.size()) + "-" + ttos(removedIndices.size()), std::cout); // we don't truncate the permutation vectors // because they're needed for the WFT const SizeType n = offsets_.size() - 1; assert(n < offsets_.size()); VectorSizeType newOffsets(n + 1); assert(qns_.size() > 0); const QnType dummyQn = qns_[0]; VectorQnType newQns(qns_.size(), dummyQn); SizeType j = 0; VectorBoolType newSigns(offsets_[n]); for (SizeType i = 0; i < n; ++i) { const SizeType offset = offsets_[i]; const SizeType thisSize = offsets_[i + 1] - offsets_[i]; const SizeType count = countRemovedStatesInRange(removedIndices, offset, thisSize); if (count == thisSize) continue; assert(count <= thisSize); const SizeType newSize = thisSize - count; newOffsets[j + 1] = newOffsets[j] + newSize; newQns[j] = qns_[i]; const bool oldSign = signs_[offsets_[i]]; assert(newOffsets[j] + newSize < newSigns.size() + 1); for (SizeType k = 0; k < newSize; ++k) newSigns[newOffsets[j] + k] = oldSign; ++j; } newOffsets.resize(j + 1); newQns.resize(j, dummyQn); newSigns.resize(newOffsets[j]); signs_ = newSigns; qns_ = newQns; offsets_ = newOffsets; return calcError(eigs, removedIndices); } //! returns the flavor of state i of this basis SizeType getFlavor(SizeType i) const { return symmLocal_.getFlavor(i); } const VectorBoolType& oldSigns() const { return signsOld_; } //! Returns the fermionic sign for state i int fermionicSign(SizeType i, int f) const { assert(i < signs_.size()); return (signs_[i]) ? f : 1; } //! Returns the (j,m) for state i of this basis PairSizeType jmValue(SizeType i) const { return PairSizeType(0, 0); } //! Returns true if using SU(2) symmetry or false otherwise static bool useSu2Symmetry() { return useSu2Symmetry_; } //! Tells this basis to use SU(2) symmetry or not static void useSu2Symmetry(bool flag) { useSu2Symmetry_=flag; } //! Returns true if this basis has been DMRG transformed, or false if it hasn't bool dmrgTransformed() const { return dmrgTransformed_; } PsimagLite::String pseudoQnToString(SizeType i) const { return "unimplemented"; } QnType pseudoQn(SizeType i) const { return qnEx(i); } void su2ElectronsBridge(VectorSizeType &v) const { QnType::su2ElectronsBridge(v, qns_); } //! saves this basis to disk void write(PsimagLite::IoNg::Out& io, const PsimagLite::String& ss, PsimagLite::IoNgSerializer::WriteMode mode, bool minimizeWrite) const { checkSigns(); PsimagLite::String label = ss + "/"; if (mode != PsimagLite::IoNgSerializer::ALLOW_OVERWRITE) io.createGroup(ss); io.write(useSu2Symmetry_, label + "useSu2Symmetry", mode); io.write(block_, label + "BLOCK", mode); if (!minimizeWrite) { io.write(signs_, label + "signs_", mode); io.write(signsOld_, label + "SignsOld", mode); } io.write(offsets_, label + "PARTITION", mode); io.write(permInverse_, label + "PERMUTATIONINVERSE", mode); if (mode == PsimagLite::IoNgSerializer::ALLOW_OVERWRITE) io.overwrite(qns_, label + "QNShrink"); else io.write(qns_, label + "QNShrink"); symmLocal_.write(io, label, mode); } //! saves this basis to disk template void write(SomeIoType& io, typename SomeIoType::Serializer::WriteMode mode, PsimagLite::String prefix, bool minimizeWrite, typename PsimagLite::EnableIf< PsimagLite::IsOutputLike::True, int>::Type = 0) const { write(io, prefix + "/" + name_, mode, minimizeWrite); } // not optimized, used for OneSiteTruncation static void notReallySortU(MatrixType& UnonConst, const MatrixType& Uconst, const VectorQnType& qns, SizeType start) { const SizeType ncols = Uconst.cols(); if (start >= ncols) err("notReallySortU: wrong start\n"); VectorQnType qnsSeen; typedef typename PsimagLite::Vector::Type VectorVectorSizeType; VectorVectorSizeType m; for (SizeType col = start; col < ncols; ++col) { QnType qForThisColumn = computeQforThisColumn(Uconst, qns, col); typename VectorQnType::const_iterator it = std::find(qnsSeen.begin(), qnsSeen.end(), qForThisColumn); if (it == qnsSeen.end()) { // we haven't seen this qn yet qnsSeen.push_back(qForThisColumn); VectorSizeType v={col}; m.push_back(v); continue; } // we have already seen this qn const SizeType qIndex = it - qnsSeen.begin(); assert(qIndex < m.size()); m[qIndex].push_back(col); } const SizeType qindices = m.size(); const SizeType qnsSize = qns.size(); PsimagLite::Vector::Type perm2(qindices, -1); SizeType counter1 = 0; for (SizeType i = 0; i < qnsSize; ++i) { typename VectorQnType::const_iterator it = std::find(qnsSeen.begin(), qnsSeen.end(), qns[i]); if (it == qnsSeen.end()) continue; const SizeType qIndex = it - qnsSeen.begin(); if (perm2[qIndex] < 0) perm2[qIndex] = counter1++; } assert(counter1 == qindices); VectorSizeType perm3(qindices); for (SizeType i = 0; i < qindices; ++i) perm3[perm2[i]] = i; assert(qindices <= qns.size()); SizeType counter = 0; VectorSizeType perm(ncols - start); for (SizeType i2 = 0; i2 < qindices; ++i2) { SizeType i = perm3[i2]; const SizeType jsize = m[i].size(); for (SizeType j = 0; j < jsize; ++j) { assert(counter + start < ncols); perm[counter++] = m[i][j]; } } assert(counter == ncols - start); const SizeType nrows = Uconst.rows(); UnonConst.resize(nrows, ncols - start); for (SizeType row = 0; row < nrows; ++row) for (SizeType col = 0; col < ncols - start; ++col) UnonConst(row, col) = Uconst(row, perm[col]); } //! The operator<< is a friend friend std::ostream& operator<<(std::ostream& os, const Basis& x) { os<<"dmrgTransformed="<>(std::istream& is, Basis&) { throw PsimagLite::RuntimeError("Unimplemented >>"); } protected: //! Sets symmetry information for this basis, see SymmetryElectronsSz.h for more void setSymmetryRelated(const VectorQnType& basisData) { SizeType n = basisData.size(); signs_.resize(n); for (SizeType i = 0; i < n; ++i) signs_[i] = basisData[i].oddElectrons; VectorQnType basisData2 = basisData; if (!useSu2Symmetry()) flattenQns(basisData2); // basisData2 is ALREADY SORTED qns_.clear(); offsets_.clear(); permutationVector_.resize(n); permInverse_.resize(n); assert(0 < basisData2.size()); QnType qnPrev = basisData2[0]; SizeType sum = 0; offsets_.push_back(0); for (SizeType i = 0; i < n; ++i) { const QnType& qn = basisData2[i]; permutationVector_[i] = permInverse_[i] = i; if (qn == qnPrev) { ++sum; continue; } const SizeType counter = qns_.size(); qns_.push_back(qnPrev); offsets_.push_back(offsets_[counter] + sum); qnPrev = qn; sum = 1; } const SizeType counter = qns_.size(); qns_.push_back(qnPrev); offsets_.push_back(offsets_[counter] + sum); assert(offsets_[counter + 1] == basisData2.size()); signsOld_ = signs_; } private: static QnType computeQforThisColumn(const MatrixType& U, const VectorQnType& qns, SizeType col) { const SizeType nrows = U.rows(); assert(nrows == qns.size()); bool nonZeroSeen = false; assert(qns.size() > 0); QnType qnSaved = qns[0]; for (SizeType row = 0; row < nrows; ++row) { if (PsimagLite::norm(U(row, col)) < 1e-5) continue; if (!nonZeroSeen) { nonZeroSeen = true; qnSaved = qns[row]; continue; } if (qnSaved != qns[row]) err("computeQforThisColumn: U does not respect symmetries !?\n"); } return qnSaved; } template void loadInternal(IoInputter& io, PsimagLite::String prefix, bool minimizeRead, typename PsimagLite::EnableIf< PsimagLite::IsInputLike::True, int>::Type = 0) { useSu2Symmetry_=false; prefix += "/"; io.read(useSu2Symmetry_, prefix + "useSu2Symmetry"); io.read(block_, prefix + "BLOCK"); if (!minimizeRead) { io.read(signs_, prefix + "signs_"); io.read(signsOld_, prefix + "SignsOld"); } io.read(offsets_, prefix + "PARTITION"); io.read(permInverse_, prefix + "PERMUTATIONINVERSE"); permutationVector_.resize(permInverse_.size()); for (SizeType i=0;i 0); --n; assert(offsets_[n] == signs_.size()); for (SizeType p = 0; p < n; ++p) { SizeType start = offsets_[p]; SizeType end = offsets_[p + 1]; bool expected = (qns_[p].other[0] & 1); for (SizeType i = start; i < end; ++i) { if (signs_[i] != expected) err("Unexpected sign\n"); } } #endif } void offsetsFromSizes(std::unordered_map& offsets, std::unordered_map& sizes, const VectorBoolType& signsPerOffset) { const SizeType total = qns_.size(); assert(total == sizes.size()); offsets_.resize(sizes.size() + 1); assert(signsPerOffset.size() == total); // signs_ has already the right size here offsets_[0] = 0; for (SizeType i = 0; i < total; ++i) { const QnType& qn = qns_[i]; const SizeType thisSize = sizes[qn]; offsets_[i + 1] = offsets_[i] + thisSize; offsets[qn] = offsets_[i]; const SizeType offset = offsets_[i]; const bool value = signsPerOffset[i]; for (SizeType k = 0; k < thisSize; ++k) signs_[offset + k] = value; } } void checkPermutation(const VectorSizeType& v) const { #ifdef NDEBUG return; #endif const SizeType n = v.size(); const SizeType expected = n*(n - 1); SizeType value = std::accumulate(v.begin(), v.end(), static_cast(0)); if (value*2 == expected) return; err("Permutation failed\n"); } static void flattenQns(VectorQnType& qns) { SizeType n = qns.size(); for (SizeType i = 0; i < n; ++i) { qns[i].flavors = 0; qns[i].jmPair.first = qns[i].jmPair.second = 0; } } // FIXME TODO: Can be made faster because removedIndices is already sorted SizeType countRemovedStatesInRange(const VectorSizeType& removedIndices, SizeType offset, SizeType thisSize) const { SizeType count = 0; const SizeType end = removedIndices.size(); const SizeType last = offset + thisSize; for (SizeType i = 0; i < end; ++i) { const SizeType ind = removedIndices[i]; if (ind < offset || ind >= last) continue; ++count; } return count; } RealType calcError(const typename PsimagLite::Vector::Type& eigs, const VectorSizeType& removedIndices) const { RealType sum=static_cast(0.0); for (SizeType i=0;i(ji), static_cast(rightSize_)); const SizeType ileftOffset = basis1OffsetsPs_ + q.quot; const SizeType irightOffset = basis2OffsetsPe_ + q.rem; const SizeType iglobalState = ileftOffset + irightOffset*basisLeftSize_; const SizeType ipos = offsetPlusExtraOffset_ + ji; permutationVector_[ipos] = iglobalState; permInverse_[iglobalState] = ipos; } SizeType tasks() const { return tasks_; } private: const SizeType basis1OffsetsPs_; const SizeType basis2OffsetsPe_; const SizeType basisLeftSize_; const SizeType rightSize_; const SizeType offsetPlusExtraOffset_; const SizeType tasks_; VectorSizeType& permutationVector_; VectorSizeType& permInverse_; }; // MyLoop /* PSIDOC BasisQuantumNumbers Symmetries will allow the solver to block the Hamiltonian matrix in blocks, using less memory, speeding up the computation and allowing the code to parallelize matrix blocks related by symmetry. Let us assume that our particular model has $N_s$ symmetries labeled by $0\le \alpha < N_s$. Therefore, each element $k$ of the basis has $N_s$ associated ``good'' quantum numbers $\tilde{q}_{k,\alpha}$. These quantum numbers can refer to practically anything, for example, to number of particles with a given spin or orbital or to the $z$ component of the spin. We do not need to know the details to block the matrix. We know, however, that these numbers are finite, and let $Q$ be an integer such that $\tilde{q}_{k,\alpha}< Q$ $\forall k,\alpha$. We can then combine all these quantum numbers into a single one, like this: $q_k = \sum_\alpha \tilde{q}_{k,\alpha} Q^\alpha$, and this mapping is bijective. In essence, we combined all ``good'' quantum numbers into a single one and from now on we will consider that we have only one Hamiltonian symmetry called the ``effective'' symmetry, and only one corresponding number $q_k$, the ``effective'' quantum number. These numbers are stored in the member {\it quantumNumbers} of C++ class \cppClass{Basis}. (Note that if one has 100 sites or less,\footnote{This is probably a maximum for systems of correlated electrons such as the Hubbard model or the t-J model.} then the number $Q$ defined above is probably of the order of hundreds for usual symmetries, making this implementation very practical for systems of correlated electrons.) */ VectorQnType qns_; VectorBoolType signs_; VectorBoolType signsOld_; /* PSIDOC BasisPartition What remains to be done is to find a partition of the basis which labels where the quantum number changes. Let us say that the quantum numbers of the reordered basis states are \[ \{3,3,3,3,8,8,9,9,9,15,\cdots\}. \] Then we define a vector named ``partition'', such that partition[0]=0, partition[1]=4, because the quantum number changes in the 4th position (from 3 to 8), and then partition[2]=6, because the quantum number changes again (from 8 to 9) in the 6th position, etc. Now we know that our Hamiltonian matrix will be composed first of a block of 4x4, then of a block of 2x2, etc. */ VectorSizeType offsets_; /* PSIDOC BasisPermutationVector We then reorder our basis such that its elements are given in increasing $q$ number. There will be a permutation vector associated with this reordering, that will be stored in the member \verb!permutationVector! of class \cppClass{Basis}. For ease of coding we also store its inverse in \verb!permInverse!. */ VectorSizeType permutationVector_; VectorSizeType permInverse_; HamiltonianSymmetryLocalType symmLocal_; /* PSIDOC BasisBlock The variable block of a \cppClass{DmrgBasis} object indicates over which sites the basis represented by this object is being built. */ BlockType block_; bool dmrgTransformed_; PsimagLite::String name_; static bool useSu2Symmetry_; }; // class Basis template bool Basis::useSu2Symmetry_=false; template struct IsBasisType > { enum {True = true}; }; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/BasisWithOperators.h000066400000000000000000000310211414604301300206640ustar00rootroot00000000000000/* Copyright (c) 2009-2012-2019-2020, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file BasisWithOperators.h */ #ifndef BASISWITHOPERATORS_HEADER_H #define BASISWITHOPERATORS_HEADER_H #include "Basis.h" #include "Operators.h" namespace Dmrg { /* PSIDOC BasisWithOperators A class to represent a Hilbert Space for a strongly correlated electron model Derives from Basis C++ class \cppClass{Basis} (and \cppClass{BasisImplementation}) implement only certain functionality associated with a Hilbert space basis, as mentioned in the previous section. However, more capabilities related to a Hilbert space basis are needed. C++ class \cppClass{BasisWithOperators} inherits from \cppClass{Basis}, and contains certain local operators for the basis in question, as well as the Hamiltonian matrix. The operators that need to be considered here are operators necessary to compute the Hamiltonian across the system and environment, and to compute observables. Therefore, the specific operators vary from model to model. For example, for the Hubbard model, we consider $c_{i\sigma}$ operators, that destroy an electron with spin $\sigma$ on site $i$. For the Heisenberg model, we consider operators $S^+_i$ and $S^z_i$ for each site $i$. In each case these operators are calculated by the model class (see Section~\ref{subsec:models}) on the ``natural'' basis, and added to the basis in question with a call to \cppFunction{setOperators()}. These local operators are stored as sparse matrices to save memory, although the matrix type is templated and could be anything. For details on the implementation of these operators, see \cppClass{OperatorsBase}, its common implementation \cppClass{OperatorsImplementation}, and the two examples provided \cppClass{OperatorsHubbard} and \cppClass{OperatorsHeisenberg} for the Hubbard and Heisenberg models, respectively. Additionally, \cppClass{BasisWithOperators} has a number of member functions to handle operations that the DMRG method performs on local operators in a Hilbert space basis. These include functions to create an outer product of two given Hilbert spaces, to transform a basis, to truncate a basis, etc. */ template class BasisWithOperators : public BasisType_ { public: typedef BasisType_ BaseType; typedef std::pair PairType; typedef typename BaseType::RealType RealType; typedef Operators OperatorsType; typedef typename OperatorsType::PairSizeSizeType PairSizeSizeType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorsType::BasisType BasisType; typedef typename BasisType::BlockType VectorSizeType; typedef typename OperatorType::StorageType OperatorStorageType; typedef BasisWithOperators ThisType; typedef typename OperatorStorageType::value_type ComplexOrRealType; typedef typename PsimagLite::CrsMatrix SparseMatrixType; typedef PsimagLite::Matrix MatrixType; typedef BlockDiagonalMatrix BlockDiagonalMatrixType; enum class SaveEnum {ALL, PARTIAL}; BasisWithOperators(const PsimagLite::String& s) : BasisType(s) {} template BasisWithOperators(IoInputter& io, const PsimagLite::String& ss, bool isObserveCode) : BasisType(io, ss, false), operators_(io, ss + "/", isObserveCode) { const PsimagLite::String prefix = ss + "/"; io.read(operatorsPerSite_, prefix + "OperatorPerSite"); } template void read(IoInputter& io, PsimagLite::String prefix, typename PsimagLite::EnableIf< PsimagLite::IsInputLike::True, int>::Type = 0) { BasisType::read(io, prefix); // parent loads operators_.read(io, prefix); io.read(operatorsPerSite_, prefix + "/OperatorPerSite"); } void dontCopyOperators(const BasisWithOperators& b) { BaseType& base = *this; const BaseType& b1 = static_cast(b); base = b1; operatorsPerSite_ = b.operatorsPerSite_; operators_.clear(); } // set this basis to the outer product of // basis2 and basis3 or basis3 and basis2 depending on dir template void setToProduct(const ThisType& basis2, const ThisType& basis3, const SomeSuperOperatorHelperType& someSuperOpHelper) { if (someSuperOpHelper.dir() == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) setToProductInternal(basis2, basis3, someSuperOpHelper); else setToProductInternal(basis3, basis2, someSuperOpHelper); } //! transform this basis by transform //! note: basis change must conserve total number of electrons and all quantum numbers RealType truncateBasis(const BlockDiagonalMatrixType& ftransform, const typename PsimagLite::Vector::Type& eigs, const VectorSizeType& removedIndices, const PairSizeSizeType& startEnd, SizeType gemmRnb, SizeType threadsForGemmR, SizeType opOnSiteThreshold) { RealType error = BasisType::truncateBasis(eigs, removedIndices); operators_.changeBasis(ftransform, startEnd, gemmRnb, threadsForGemmR, opsPerSiteOrMinusOne(), opOnSiteThreshold); return error; } void setHamiltonian(const SparseMatrixType& h) { operators_.setHamiltonian(h); } const OperatorStorageType& hamiltonian() const { return operators_.hamiltonian(); } const OperatorStorageType& reducedHamiltonian() const { return operators_.reducedHamiltonian(); } template SizeType setOneSite(const VectorSizeType& block, const SomeModelType& model, RealType time) { typename BaseType::VectorQnType qm; BaseType::set(block); typename PsimagLite::Vector::Type ops; SparseMatrixType h; SizeType oneSiteTruncActive = model.setOperatorMatrices(ops, qm, block); BaseType::setSymmetryRelated(qm); model.calcHamiltonian(h, ops, block, time); OperatorStorageType hOp(h); operators_.setHamiltonian(hOp); operators_.setLocal(ops); // one site basis is assumed ordered operatorsPerSite_.clear(); for (SizeType i = 0; i < block.size(); ++i) operatorsPerSite_.push_back(ops.size()/block.size()); assert(operatorsPerSite_.size() > 0); return oneSiteTruncActive; } SizeType localOperatorIndex(SizeType i,SizeType sigma) const { SizeType sum = 0; assert(i <= operatorsPerSite_.size()); for (SizeType j = 0; j < i; ++j) sum += operatorsPerSite_[j]; assert(i < operatorsPerSite_.size()); return sum + sigma; } const OperatorType& localOperator(SizeType i) const { return operators_.getLocalByIndex(i); } SizeType numberOfLocalOperators() const { return operators_.sizeOfLocal(); } SizeType superOperatorIndices(const VectorSizeType& sites, SizeType sigma) const { return operators_.superIndices(sites, sigma); } SizeType operatorsPerSite(SizeType i) const { assert(i < operatorsPerSite_.size()); return operatorsPerSite_[i]; } int fermionicSign(SizeType i, int fsign) const { return BasisType::fermionicSign(i, fsign); } template void write(SomeOutputType& io, typename SomeOutputType::Serializer::WriteMode mode, PsimagLite::String prefix, SaveEnum option, typename PsimagLite::EnableIf< PsimagLite::IsOutputLike::True, int*>::Type = 0) const { write(io, prefix + "/" + BasisType::name(), mode, option); } template void write(SomeOutputType& io, const PsimagLite::String& s, typename SomeOutputType::Serializer::WriteMode mode, SaveEnum option, typename PsimagLite::EnableIf< PsimagLite::IsOutputLike::True, int*>::Type = 0) const { BasisType::write(io, s, mode, false); // parent saves if (option == SaveEnum::ALL) operators_.write(io, s, mode); assert(operatorsPerSite_.size() > 0); io.write(operatorsPerSite_, s + "/OperatorPerSite", mode); } private: //! set this basis to the outer product of basis2 and basis3 //!PTEX_LABEL{setToProductOps} template void setToProductInternal(const ThisType& basis2, const ThisType& basis3, const SomeSuperOperatorHelperType& someSuperOpHelper) { // reorder the basis BasisType::setToProduct(basis2, basis3); // Do local and super operators_.setToProduct(basis2, basis2.operators_, basis3, basis3.operators_, BaseType::permutationInverse(), someSuperOpHelper); //! Calc. hamiltonian operators_.outerProductHamiltonian(basis2.hamiltonian(), basis3.hamiltonian(), BaseType::permutationInverse()); SizeType offset1 = basis2.operatorsPerSite_.size(); operatorsPerSite_.resize(offset1+basis3.operatorsPerSite_.size()); for (SizeType i=0;i 0); } SizeType opsPerSiteOrMinusOne() const { const SizeType n = BasisType::block().size(); SizeType result = operatorsPerSite(0); for (SizeType i = 1; i < n; ++i) if (result != operatorsPerSite(i)) return 0; return result; } // BasisWithOperators(const BasisWithOperators&); // BasisWithOperators& operator=(const BasisWithOperators&); OperatorsType operators_; VectorSizeType operatorsPerSite_; }; // class BasisWithOperators template struct IsBasisType > { enum {True = true}; }; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/BlockDiagonalMatrix.h000066400000000000000000000326331414604301300207600ustar00rootroot00000000000000/* Copyright (c) 2009-2017, UT-Battelle, LLC All rights reserved [DMRG++, Version 4.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file BlockDiagonalMatrix.h * * A class to represent a block diagonal matrix * */ #ifndef BLOCK_DIAGONAL_MATRIX_H #define BLOCK_DIAGONAL_MATRIX_H #include #include #include "Matrix.h" // in PsimagLite #include "ProgramGlobals.h" #include "Concurrency.h" #include "NoPthreadsNg.h" #include "CrsMatrix.h" #include "PsimagLite.h" #include "EnforcePhase.h" #include "Io/IoSelector.h" namespace Dmrg { template struct IsBasisType { enum {True = false}; }; // A block matrix class // Blocks can be of any type and are templated with the type MatrixInBlockTemplate template class BlockDiagonalMatrix { public: enum SaveEnum {SAVE_ALL, SAVE_PARTIAL}; typedef MatrixInBlockTemplate BuildingBlockType; typedef typename BuildingBlockType::value_type ComplexOrRealType; typedef typename PsimagLite::Real::Type RealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef PsimagLite::Vector::Type VectorSizeType; typedef PsimagLite::Vector::Type VectorIntType; typedef PsimagLite::IoSelector::In IoInType; BlockDiagonalMatrix() : isSquare_(true), readOnDemand_(false) {} BlockDiagonalMatrix(IoInType& io, PsimagLite::String label, bool readOnDemand) : readOnDemand_(readOnDemand) { if (readOnDemand_) return; io.read(isSquare_, label + "/isSquare_"); io.read(offsetsRows_, label + "/offsetRows_"); io.read(offsetsCols_, label + "/offsetCols_"); io.read(data_, label + "/data_"); } template BlockDiagonalMatrix(const SomeBasisType& basis, typename PsimagLite::EnableIf< IsBasisType::True, int>::Type = 0) : isSquare_(true), readOnDemand_(false), offsetsRows_(basis.partition()), offsetsCols_(basis.partition()), data_(basis.partition() - 1) { SizeType n = offsetsRows_.size(); assert(n == offsetsCols_.size()); for (SizeType i = 0; i < n; ++i) offsetsRows_[i] = offsetsCols_[i] = basis.partition(i); } template void write(PsimagLite::String label1, IoOutputType& io, PsimagLite::IoNgSerializer::WriteMode wM = PsimagLite::IoNgSerializer::NO_OVERWRITE) const { if (wM != PsimagLite::IoNgSerializer::ALLOW_OVERWRITE) io.createGroup(label1); io.write(isSquare_, label1 + "/isSquare_", wM); io.write(offsetsRows_, label1 + "/offsetRows_", wM); io.write(offsetsCols_, label1 + "/offsetCols_", wM); io.write(data_, label1 + "/data_", wM); } void setTo(ComplexOrRealType value) { SizeType n = data_.size(); if (n == 0) err("BlockDiagonalMatrix::setTo(...): cannot be called without structure\n"); for (SizeType i = 0; i < n; ++i) data_[i].setTo(value); } void operator+=(const BlockDiagonalMatrix& m) { mustBeSquare("operator+="); BlockDiagonalMatrix c; if (offsetsRows_.size() < m.blocks()) operatorPlus(c,*this,m); else operatorPlus(c,m,*this); *this = c; } void setBlock(SizeType i,int offset,MatrixInBlockTemplate const &m) { mustBeSquare("setBlock"); assert(i < data_.size()); data_[i]=m; assert(i < offsetsRows_.size() && i < offsetsCols_.size()); offsetsRows_[i] = offsetsCols_[i] = offset; } void sumBlock(SizeType i,MatrixInBlockTemplate const &m) { assert(i < data_.size()); data_[i] += m; } void enforcePhase() { SizeType n = data_.size(); for (SizeType i = 0; i < n; ++i) EnforcePhase::enforcePhase(data_[i]); } // rows aren't affected, columns may be truncated void truncate(const VectorSizeType& removedIndices2) { if (removedIndices2.size() == 0) return; mustBeSquare("truncate"); SizeType n = data_.size(); VectorIntType remap(cols(), -1); computeRemap(remap, removedIndices2); VectorSizeType offsetsOld = offsetsCols_; for (SizeType i = 0; i < n; ++i) truncate(i, remap, offsetsOld); isSquare_ = (rows() == cols()); assert(cols() == rows() - removedIndices2.size()); } SizeType rows() const { SizeType n = offsetsRows_.size(); return (n == 0) ? 0 : offsetsRows_[n - 1]; } SizeType cols() const { SizeType n = offsetsCols_.size(); return (n == 0) ? 0 : offsetsCols_[n - 1]; } const VectorSizeType& offsetsRows() const { return offsetsRows_; } const VectorSizeType& offsetsCols() const { return offsetsCols_; } SizeType offsetsRows(SizeType i) const { assert(i < offsetsRows_.size()); return offsetsRows_[i]; } SizeType offsetsCols(SizeType i) const { assert(i < offsetsCols_.size()); return offsetsCols_[i]; } SizeType blocks() const { return data_.size(); } void toSparse(PsimagLite::CrsMatrix& fm) const { SizeType r = rows(); SizeType c = cols(); fm.resize(r, c); SizeType counter = 0; SizeType k = 0; for (SizeType i = 0; i < r; ++i) { fm.setRow(i, counter); if (k + 1 < offsetsRows_.size() && offsetsRows_[k + 1] <= i) ++k; SizeType end = (k + 1 < offsetsCols_.size()) ? offsetsCols_[k + 1] : c; if (data_[k].rows() == 0 || data_[k].cols() == 0) continue; for (SizeType j = offsetsCols_[k]; j < end; ++j) { ComplexOrRealType val = data_[k](i - offsetsRows_[k], j - offsetsCols_[k]); if (PsimagLite::norm(val) == 0) continue; fm.pushValue(val); fm.pushCol(j); ++counter; } } fm.setRow(r, counter); fm.checkValidity(); } void toDense(PsimagLite::Matrix& fm) const { SizeType r = rows(); SizeType c = cols(); fm.resize(r, c); fm.setTo(static_cast(0)); SizeType k = 0; for (SizeType i = 0; i < r; ++i) { if (k + 1 < offsetsRows_.size() && offsetsRows_[k + 1] <= i) ++k; SizeType end = (k + 1 < offsetsCols_.size()) ? offsetsCols_[k + 1] : c; if (data_[k].rows() == 0 || data_[k].cols() == 0) continue; for (SizeType j = offsetsCols_[k]; j < end; ++j) { ComplexOrRealType val = data_[k](i - offsetsRows_[k], j - offsetsCols_[k]); fm(i, j) = val; } } } void diagAndEnforcePhase(SizeType m, VectorRealType& eigsTmp, char option) { assert(m < data_.size()); PsimagLite::diag(data_[m], eigsTmp, option); EnforcePhase::enforcePhase(data_[m]); } const MatrixInBlockTemplate& operator()(SizeType i) const { assert(i < data_.size()); return data_[i]; } void clear() { offsetsRows_.clear(); offsetsCols_.clear(); data_.clear(); } void read(PsimagLite::String label, PsimagLite::IoSerializer& ioSerializer) { ioSerializer.read(isSquare_, label + "/isSquare"); ioSerializer.read(offsetsRows_, label + "/offsetsRows"); ioSerializer.read(offsetsCols_, label + "/offsetsCols"); ioSerializer.read(data_, label + "/data"); } void write(PsimagLite::String label, PsimagLite::IoSerializer& ioSerializer, PsimagLite::IoSerializer::WriteMode wM = PsimagLite::IoSerializer::NO_OVERWRITE) const { if (wM != PsimagLite::IoSerializer::ALLOW_OVERWRITE) ioSerializer.createGroup(label); ioSerializer.write(label + "/isSquare", isSquare_, wM); ioSerializer.write(label + "/offsetsRows", offsetsRows_, wM); ioSerializer.write(label + "/offsetsCols", offsetsCols_, wM); ioSerializer.write(label + "/data", data_, wM); } friend std::ostream& operator<<(std::ostream& os, const BlockDiagonalMatrix& m) { PsimagLite::String str = (m.isSquare_) ? "1" : "0"; os<>(std::istream& is, BlockDiagonalMatrix& m) { int x = -1; PsimagLite::String temp; is>>temp; if (temp == "NAME=") is>>x; else x = atoi(temp.c_str()); if (x != 0 && x != 1) err("std::istream& operator>> BlockDiagonalMatrix(1)\n"); m.isSquare_ = (x == 1); is>>m.offsetsRows_; is>>m.offsetsCols_; int total = 0; is>>total; if (total < 0) err("std::istream& operator>> BlockDiagonalMatrix(2)\n"); if (total == 0) return is; m.data_.resize(total); for (SizeType i = 0; i < m.data_.size(); ++i) is>>m.data_[i]; return is; } private: void computeRemap(VectorIntType& remap, const VectorSizeType& removedIndices2) const { VectorSizeType removedIndices = removedIndices2; PsimagLite::Sort sort; VectorSizeType iperm(removedIndices.size(), 0); sort.sort(removedIndices, iperm); SizeType c = cols(); SizeType k = 0; VectorSizeType::iterator b = removedIndices.begin(); for (SizeType j = 0; j < c; ++j) { if (std::find(b, removedIndices.end(), j) != removedIndices.end()) { ++b; continue; } remap[j] = k++; } } // rows aren't affected, columns may be truncated, void truncate(SizeType ind, // <------ block to truncate const VectorIntType& remap, const VectorSizeType& offsetsOld) { assert(ind < data_.size()); MatrixInBlockTemplate& m = data_[ind]; assert(ind < offsetsOld.size()); SizeType offsetOld = offsetsOld[ind]; assert(ind < offsetsCols_.size()); SizeType offsetNew = offsetsCols_[ind]; SizeType c = m.cols(); SizeType counter = 0; for (SizeType j = 0; j < c; ++j) { assert(j + offsetOld < remap.size()); if (remap[j + offsetOld] >= 0) continue; ++counter; } if (counter == 0) { offsetsCols_[ind + 1] = offsetNew + c; return; } if (counter == c) { deleteThisColBlock(ind); return; } assert(counter < c); SizeType r = m.rows(); SizeType newCols = c - counter; assert(newCols < c); MatrixInBlockTemplate m2(r, newCols); for (SizeType i = 0; i < r; ++i) { for (SizeType j = 0; j < c; ++j) { if (remap[j + offsetOld] < 0) continue; SizeType cPrime = remap[j + offsetOld]; assert(offsetNew <= cPrime); m2(i, cPrime - offsetNew) = m(i, j); } } m = m2; assert(ind + 1 < offsetsCols_.size()); offsetsCols_[ind + 1] = offsetNew + newCols; } void deleteThisColBlock(SizeType ind) { assert(ind < data_.size()); data_[ind].clear(); assert(ind + 1 < offsetsCols_.size()); offsetsCols_[ind + 1] = offsetsCols_[ind]; } void mustBeSquare(PsimagLite::String msg) const { if (isSquare_) return; err("BlockDiagonalMatrix::" + msg + " must be square\n"); } bool isSquare_; bool readOnDemand_; VectorSizeType offsetsRows_; VectorSizeType offsetsCols_; typename PsimagLite::Vector::Type data_; }; // class BlockDiagonalMatrix // Companion Functions template bool isUnitary(const BlockDiagonalMatrix& B) { bool flag=true; MatrixInBlockTemplate matrixTmp; for (SizeType m=0;m struct IsMatrixLike > { enum {True=true}; }; } // namespace PsimagLite /*@}*/ #endif dmrgpp-6.02/src/Engine/BlockOffDiagMatrix.h000066400000000000000000000306371414604301300205430ustar00rootroot00000000000000#ifndef BLOCKOFFDIAGMATRIX_H #define BLOCKOFFDIAGMATRIX_H #include "CrsMatrix.h" #include "BlockDiagonalMatrix.h" #include "LAPACK.h" #include "GemmR.h" namespace Dmrg { template class BlockOffDiagMatrix { typedef typename MatrixBlockType::value_type ComplexOrRealType; typedef PsimagLite::CrsMatrix SparseMatrixType; typedef BlockDiagonalMatrix BlockDiagonalMatrixType; typedef typename PsimagLite::Real::Type RealType; typedef PsimagLite::Vector::Type VectorSizeType; typedef std::pair PairType; typedef PsimagLite::Vector::Type VectorVectorSizeType; public: typedef MatrixBlockType value_type; template BlockOffDiagMatrix(const SomeBasisType& rowBasis, const SomeBasisType& colBasis, const typename SomeBasisType::QnType& qtarget) { typedef typename SomeBasisType::VectorQnType::value_type QnType; SizeType rowPatches = rowBasis.partition(); offsetRows_.resize(rowPatches); for (SizeType i = 0; i < rowPatches; ++i) offsetRows_[i] = rowBasis.partition(i); rows_ = offsetRows_[rowPatches - 1]; SizeType colPatches = colBasis.partition(); offsetCols_.resize(colPatches); for (SizeType i = 0; i < colPatches; ++i) offsetCols_[i] = colBasis.partition(i); cols_ = offsetCols_[colPatches - 1]; data_.resize(rowPatches - 1, colPatches - 1, 0); for (SizeType i = 0; i < rowPatches - 1; ++i) { SizeType rows = offsetRows_[i + 1] - offsetRows_[i]; QnType qrow = rowBasis.qnEx(i); for (SizeType j = 0; j < colPatches - 1; ++j) { QnType qcol = colBasis.qnEx(j); QnType q(qrow, qcol); if (q != qtarget) continue; SizeType cols = offsetCols_[j + 1] - offsetCols_[j]; data_(i, j) = new MatrixBlockType(rows, cols); } } } BlockOffDiagMatrix(const SparseMatrixType& sparse, const VectorSizeType& partitions) : offsetRows_(partitions), rows_(0), cols_(0) { if (sparse.rows() != sparse.cols()) err("BlockOffDiagMatrix::ctor() expects square sparse matrix\n"); if (partitions.size() == 0) err("BlockOffDiagMatrix::ctor() expects partitions.size() > 0\n"); SizeType n = partitions.size() - 1; rows_ = cols_ = partitions[n]; data_.resize(partitions.size() -1, partitions.size() - 1); data_.setTo(0); VectorSizeType indexToPart(rows_, 0); fillIndexToPart(indexToPart, partitions); PsimagLite::Matrix icount(n, n); icount.setTo(0); for (SizeType row = 0; row < rows_; ++row) { SizeType kStart = sparse.getRowPtr(row); SizeType kEnd = sparse.getRowPtr(row + 1); SizeType ipatch = indexToPart[row]; for (SizeType k = kStart; k < kEnd; ++k) { SizeType col = sparse.getCol(k); SizeType jpatch = indexToPart[col]; icount(ipatch, jpatch)++; } } for (SizeType ipatch = 0; ipatch < n; ++ipatch) { SizeType rows = partitions[ipatch + 1] - partitions[ipatch]; for (SizeType jpatch = 0; jpatch < n; ++jpatch) { SizeType cols = partitions[jpatch + 1] - partitions[jpatch]; if (icount(ipatch, jpatch) == 0) continue; data_(ipatch, jpatch) = new MatrixBlockType(rows, cols); } } for (SizeType row = 0; row < rows_; ++row) { SizeType kStart = sparse.getRowPtr(row); SizeType kEnd = sparse.getRowPtr(row + 1); SizeType ipatch = indexToPart[row]; for (SizeType k = kStart; k < kEnd; ++k) { SizeType col = sparse.getCol(k); SizeType jpatch = indexToPart[col]; MatrixBlockType& m = *(data_(ipatch, jpatch)); m(row - partitions[ipatch], col - partitions[jpatch]) = sparse.getValue(k); } } } ~BlockOffDiagMatrix() { assert(offsetRows_.size() > 0); SizeType nr = offsetRows_.size() - 1; SizeType nc = (offsetCols_.size() == 0) ? nr : offsetCols_.size(); for (SizeType ipatch = 0; ipatch < nr; ++ipatch) { for (SizeType jpatch = 0; jpatch < nc; ++jpatch) { MatrixBlockType* m = data_(ipatch, jpatch); delete m; data_(ipatch, jpatch) = 0; } } } ComplexOrRealType operator*(const BlockOffDiagMatrix& other) const { ComplexOrRealType sum = 0; SizeType nr = data_.rows(); SizeType nc = data_.cols(); if (nr != other.data_.rows() || nc != other.data_.cols()) operatorFailed("*"); for (SizeType ipatch = 0; ipatch < nr; ++ipatch) { for (SizeType jpatch = 0; jpatch < nc; ++jpatch) { MatrixBlockType* m = data_(ipatch, jpatch); MatrixBlockType* o = other.data_(ipatch, jpatch); if (!m && !o) continue; const bool b1 = (m && !o); const bool b2 = (o && !m); if (b1 || b2) operatorFailed("*"); sum += scalarProduct(*m, *o); } } return sum; } void randomize() { SizeType nr = data_.rows(); SizeType nc = data_.cols(); RealType sum = 0; for (SizeType ipatch = 0; ipatch < nr; ++ipatch) { for (SizeType jpatch = 0; jpatch < nc; ++jpatch) { MatrixBlockType* m = data_(ipatch, jpatch); if (m == 0) continue; m->randomize(); sum += PsimagLite::norm2(*m); } } assert(sum > 0); RealType factor = 1.0/sqrt(sum); for (SizeType ipatch = 0; ipatch < nr; ++ipatch) { for (SizeType jpatch = 0; jpatch < nc; ++jpatch) { MatrixBlockType* m = data_(ipatch, jpatch); if (m == 0) continue; (*m) *= factor; } } } template void fromMatrixColumn(const MatrixBlockType& src, SizeType col, const SomeBasisType& super, SizeType partitionIndex) { SizeType start = super.partition(partitionIndex); SizeType end = super.partition(partitionIndex + 1) - start; SizeType nr = data_.rows(); SizeType nc = data_.cols(); for (SizeType ipatch = 0; ipatch < nr; ++ipatch) { for (SizeType jpatch = 0; jpatch < nc; ++jpatch) { MatrixBlockType* mptr = data_(ipatch, jpatch); if (mptr == 0) continue; MatrixBlockType& m = *mptr; SizeType rows = m.rows(); SizeType cols = m.cols(); for (SizeType i = 0; i < rows; ++i) { SizeType lindex = i + offsetRows_[ipatch]; for (SizeType j = 0; j < cols; ++j) { SizeType rindex = j + offsetCols_[jpatch]; SizeType sindex = super.permutationInverse(lindex + rindex*rows_); if (sindex < start || sindex >= end) continue; sindex -= start; m(i, j) = src(sindex, col); } } } } } void toSparse(SparseMatrixType& sparse) const { if (offsetCols_.size() != 0) err("BlockOffDiagMatrix::toSparse() only for square matrix\n"); assert(offsetRows_.size() > 0); SizeType n = offsetRows_.size() - 1; bool thereWasABug = false; for (SizeType ipatch = 0; ipatch < n; ++ipatch) { SizeType inThisIpatch = 0; for (SizeType jpatch = 0; jpatch < n; ++jpatch) { const MatrixBlockType* mptr = data_(ipatch, jpatch); if (mptr == 0) continue; ++inThisIpatch; } if (inThisIpatch > 1) thereWasABug = true; } if (thereWasABug && limitWarn_ < 3) { PsimagLite::String msg("BlockOffDiagMatrix: toSparse() "); msg += "there used to be a bug here: patches with overlapping rows\n"; std::cerr< gemmR(needsPrinting, nb, nthreadsInner); assert(offsetRows_.size() > 0); SizeType n = offsetRows_.size() - 1; for (SizeType ipatch = 0; ipatch < n; ++ipatch) { for (SizeType jpatch = 0; jpatch < n; ++jpatch) { MatrixBlockType* mptr = data_(ipatch, jpatch); if (mptr == 0) continue; MatrixBlockType& m = *mptr; const MatrixBlockType& mRight = f(jpatch); const MatrixBlockType& mLeft = f(ipatch); if (mLeft.rows() == 0 || mRight.rows() == 0) { m.clear(); continue; } assert(m.cols() == mRight.rows()); assert(m.rows() == mLeft.rows()); MatrixBlockType tmp(m.rows(), mRight.cols()); // tmp = data_[ii] * mRight; gemmR('N', 'N', m.rows(), mRight.cols(), m.cols(), 1.0, &(m(0,0)), m.rows(), &(mRight(0,0)), mRight.rows(), 0.0, &(tmp(0,0)), tmp.rows()); // data_[ii] = transposeConjugate(mLeft) * tmp; m.clear(); m.resize(mLeft.cols(), mRight.cols()); gemmR('C', 'N', mLeft.cols(), tmp.cols(), tmp.rows(), 1.0, &(mLeft(0,0)), mLeft.rows(), &(tmp(0,0)), tmp.rows(), 0.0, &(m(0,0)), m.rows()); } offsetRows_ = f.offsetsCols(); n = offsetRows_.size(); assert(n > 0); --n; cols_ = rows_ = offsetRows_[n]; } } SizeType rows() const { return rows_; } SizeType cols() const { return cols_; } const VectorSizeType& offsets(bool option) const { return (option) ? offsetRows_ : offsetCols_; } const RealType norm2() const { SizeType n = data_.rows(); SizeType m = data_.cols(); RealType sum = 0; for (SizeType i = 0; i < n; ++i) { for (SizeType j = 0; j < m; ++j) { MatrixBlockType* mptr = data_(i, j); if (mptr == 0) continue; sum += PsimagLite::norm2(*mptr); } } return sum; } BlockOffDiagMatrix& operator*=(const ComplexOrRealType& value) { SizeType n = data_.rows(); SizeType m = data_.cols(); for (SizeType i = 0; i < n; ++i) { for (SizeType j = 0; j < m; ++j) { MatrixBlockType* mptr = data_(i, j); if (mptr == 0) continue; (*mptr) *= value; } } return *this; } BlockOffDiagMatrix& operator/=(const ComplexOrRealType& value) { return (*this) *= (1.0/value); } friend RealType norm(const BlockOffDiagMatrix& m) { return sqrt(m.norm2()); } private: static void fillIndexToPart(VectorSizeType& indexToPart, const VectorSizeType& partitions) { SizeType n = partitions.size(); assert(n > 0); --n; assert(partitions[n] == indexToPart.size()); for (SizeType i = 0; i < n; ++i) { SizeType start = partitions[i]; SizeType total = partitions[i + 1] - start; for (SizeType r = 0; r < total; ++r) indexToPart[r + start] = i; } } void operatorFailed(PsimagLite::String what) const { err("BlockOffDiagMatrix::operator" + what + " failed\n"); } BlockOffDiagMatrix(const BlockOffDiagMatrix&); BlockOffDiagMatrix& operator=(const BlockOffDiagMatrix&); VectorSizeType offsetRows_; VectorSizeType offsetCols_; SizeType rows_; SizeType cols_; typename PsimagLite::Matrix data_; static SizeType limitWarn_; }; template SizeType BlockOffDiagMatrix::limitWarn_ = 0; } #endif // BLOCKOFFDIAGMATRIX_H dmrgpp-6.02/src/Engine/Braket.h000066400000000000000000000070631414604301300163110ustar00rootroot00000000000000#ifndef DMRG_braket_H #define DMRG_braket_H #include "Vector.h" #include "PsimagLite.h" #include "Matrix.h" #include "OperatorSpec.h" #include "CanonicalExpression.h" #include "GetBraOrKet.h" namespace Dmrg { template class Braket { public: typedef ModelType_ ModelType; typedef typename ModelType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorIntType; typedef typename OperatorType::PairType PairType; typedef typename OperatorType::Su2RelatedType Su2RelatedType; typedef typename OperatorType::StorageType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Real::Type RealType; typedef OperatorSpec OperatorSpecType; typedef typename OperatorSpecType::ResultType AlgebraType; typedef typename OperatorSpecType::OneOperatorSpecType OneOperatorSpecType; typedef typename PsimagLite::Vector::Type VectorAlgebraType; typedef PsimagLite::Vector::Type VectorStringType; typedef PsimagLite::GetBraOrKet GetBraOrKetType; typedef PsimagLite::Vector::Type VectorGetBraOrKetType; Braket(const ModelType& model,const PsimagLite::String& braket) : model_(model), savedString_(braket) { VectorStringType vecStr; PsimagLite::split(vecStr, braket, "|"); if (vecStr.size() == 2) { VectorStringType tmp; tmp.push_back(vecStr[0]); tmp.push_back("identity"); tmp.push_back(vecStr[1]); vecStr = tmp; } if (vecStr.size() != 3) { PsimagLite::String str("ObserverInterpreter: syntax error for "); str += braket + " is not a Braket\n"; throw PsimagLite::RuntimeError(str); } braket_.push_back(vecStr[0].substr(1,vecStr[0].length()-1)); braket_.push_back(vecStr[2].substr(0,vecStr[2].length()-1)); if (vecStr[1].length() > 1 && vecStr[1][0] == '!') { opExprName_.resize(1); opExprName_[0] = vecStr[1]; return; // early exit <=== } PsimagLite::split(opExprName_, vecStr[1], ";"); sites_.resize(opExprName_.size(),-1); OperatorSpecType opSpec(model); PsimagLite::CanonicalExpression canonicalExpression(opSpec); const AlgebraType opEmpty; for (SizeType i = 0; i < opExprName_.size(); ++i) { AlgebraType tmp; canonicalExpression(tmp, opExprName_[i], opEmpty, sites_[i]); op_.push_back(tmp); } } const AlgebraType& op(SizeType ind) const { assert(ind < op_.size()); return op_[ind]; } PsimagLite::String opName(SizeType ind) const { assert(ind < opExprName_.size()); return opExprName_[ind]; } const GetBraOrKetType& bra() const { assert(braket_.size() > 0); return braket_[0]; } const GetBraOrKetType& ket() const { assert(braket_.size() > 1); return braket_[1]; } SizeType points() const { return opExprName_.size(); } SizeType site(SizeType ind) const { if (sites_[ind] >= 0) return sites_[ind]; throw PsimagLite::RuntimeError("site is negative\n"); } PsimagLite::String toString() const { return savedString_; } const ModelType& model() const { return model_; } // avoid using this function in new code // it's only to support legacy code void forceOperators(const OperatorType& op1, const OperatorType& op2) { op_.resize(2); op_[0] = op1; op_[1] = op2; } private: const ModelType& model_; VectorGetBraOrKetType braket_; PsimagLite::String savedString_; VectorStringType opExprName_; SizeType type_; VectorAlgebraType op_; VectorIntType sites_; }; // class Braket } #endif // DMRG_braket_H dmrgpp-6.02/src/Engine/ChangeOfBasis.h000066400000000000000000000045221414604301300175320ustar00rootroot00000000000000#ifndef DMRG_CHANGEOFBASIS_H #define DMRG_CHANGEOFBASIS_H #include "BlockDiagonalMatrix.h" #include "BlockOffDiagMatrix.h" #include "ProgramGlobals.h" namespace Dmrg { template class ChangeOfBasis { public: typedef BlockDiagonalMatrix BlockDiagonalMatrixType; typedef BlockOffDiagMatrix BlockOffDiagMatrixType; typedef typename OperatorStorageType::value_type ComplexOrRealType; typedef PsimagLite::CrsMatrix SparseMatrixType; ChangeOfBasis() { if (!ProgramGlobals::oldChangeOfBasis) return; std::cout<<"Old ChangeOfBasis in use\n"; } void update(const BlockDiagonalMatrixType& transform) { if (!ProgramGlobals::oldChangeOfBasis) { transform_ = transform; return; } assert(ProgramGlobals::oldChangeOfBasis); transform.toSparse(oldT_); transposeConjugate(oldTtranspose_, oldT_); } void operator()(OperatorStorageType& v, SizeType gemmRnb, SizeType threadsForGemmR) const { if (!ProgramGlobals::oldChangeOfBasis) { BlockOffDiagMatrixType vBlocked(v.getCRS(), transform_.offsetsRows()); vBlocked.transform(transform_, gemmRnb, threadsForGemmR); vBlocked.toSparse(v.getCRSNonConst()); return; } assert(ProgramGlobals::oldChangeOfBasis); v.rotate(oldTtranspose_, oldT_); } static void changeBasis(OperatorStorageType &v, const BlockDiagonalMatrixType& ftransform1, SizeType gemmRnb, SizeType threadsForGemmR) { if (!v.justCRS()) err("changeBasis: operatorstorage not justCRS\n"); if (!ProgramGlobals::oldChangeOfBasis) { BlockOffDiagMatrixType vBlocked(v.getCRS(), ftransform1.offsetsRows()); vBlocked.transform(ftransform1, gemmRnb, threadsForGemmR); vBlocked.toSparse(v.getCRSNonConst()); return; } assert(ProgramGlobals::oldChangeOfBasis); SparseMatrixType ftransform; ftransform1.toSparse(ftransform); SparseMatrixType ftransformT; transposeConjugate(ftransformT,ftransform); v.rotate(ftransformT, ftransform); } void clear() { transform_.clear(); oldT_.clear(); oldTtranspose_.clear(); } private: BlockDiagonalMatrixType transform_; SparseMatrixType oldT_; SparseMatrixType oldTtranspose_; }; // class ChangeOfBasis } // namespace Dmrg #endif // DMRG_CHANGEOFBASIS_H dmrgpp-6.02/src/Engine/Checkpoint.h000066400000000000000000000434011414604301300171640ustar00rootroot00000000000000/* Copyright (c) 2009-2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file Checkpoint.h * * checkpointing functions * this class also owns the stacks since they * are so related to checkpointing */ #ifndef CHECKPOINT_H #define CHECKPOINT_H #include "Stack.h" #include "DiskStackNg.h" #include "ProgressIndicator.h" #include "ProgramGlobals.h" #include "Io/IoSelector.h" #include "DiskOrMemoryStack.h" namespace Dmrg { template class Checkpoint { public: typedef WaveFunctionTransfType_ WaveFunctionTransfType; typedef typename ModelType::RealType RealType; typedef typename ModelType::ParametersType ParametersType; typedef typename ModelType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::ComplexOrRealType ComplexOrRealType; typedef typename BasisWithOperatorsType::OperatorsType OperatorsType; typedef typename PsimagLite::IoSelector IoType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::StorageType SparseMatrixType; typedef DiskOrMemoryStack DiskOrMemoryStackType; typedef typename BasisWithOperatorsType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef DiskStack DiskStackType; typedef PsimagLite::Vector::Type VectorStringType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename PsimagLite::Vector::Type VectorVectorRealType; Checkpoint(const ParametersType& parameters, InputValidatorType& ioIn, const ModelType& model, SizeType nsectors, bool isObserveCode) : parameters_(parameters), isObserveCode_(isObserveCode), isRestart_(parameters_.options.isSet("restart")), systemStack_(parameters_.options.isSet("shrinkStacksOnDisk"), parameters_.filename, "Stacks", "system", isObserveCode), envStack_(systemStack_.onDisk(), parameters_.filename, "Stacks", "environ", isObserveCode), progress_("Checkpoint"), energiesFromFile_(nsectors), dummyBwo_("dummy") { DiskOrMemoryStackType::createFile_ = true; for (SizeType i = 0; i < nsectors; ++i) energiesFromFile_[i].resize(parameters_.numberOfExcited); if (parameters_.autoRestart) isRestart_ = true; SizeType site = 0; // FIXME for Immm model, find max of hilbert(site) over site SizeType hilbertOneSite = model.hilbertSize(site); if (parameters_.keptStatesInfinite > 0 && parameters_.keptStatesInfinite < hilbertOneSite) { PsimagLite::String str("FATAL: keptStatesInfinite= "); str += ttos(parameters_.keptStatesInfinite) + " < "; str += ttos(hilbertOneSite) + "\n"; throw PsimagLite::RuntimeError(str); } checkFiniteLoops(model.superGeometry().numberOfSites(), hilbertOneSite, ioIn); if (!isRestart_) return; VectorSizeType v; SizeType prevOpOnSiteThresh = 0; { IoType::In ioIn2(parameters_.checkpoint.filename()); readEnergies(energiesFromFile_, parameters_.checkpoint.labelForEnergy(), ioIn2); ioIn2.read(v, "CHKPOINTSYSTEM/OperatorPerSite"); if (v.size() == 0) return; ioIn2.read(prevOpOnSiteThresh, "PARAMETERS/opOnSiteThreshold"); bool iscomplex = false; ioIn2.read(iscomplex, "IsComplex"); // previous run ioIn2.close(); if (iscomplex && iscomplex != PsimagLite::IsComplexNumber::True) err("Previous run was complex and this one is not\n"); } // opOnSiteThreshold of the previous run SizeType operatorsPerSite = v[0] + prevOpOnSiteThresh; typename PsimagLite::Vector::Type creationMatrix; VectorSizeType test(1,0); VectorQnType qq; // restart run must be from stable model.setOperatorMatrices(creationMatrix, qq, test); if (creationMatrix.size() != operatorsPerSite) { PsimagLite::String msg("CheckPoint: FATAL: Perhaps trying to"); msg += " restart one model from a different one or different variant\n"; throw PsimagLite::RuntimeError(msg); } loadStacksDiskToMemory(); } ~Checkpoint() { if (parameters_.options.isSet("noSaveStacks")) return; loadStacksMemoryToDisk(); } static void readEnergies(VectorVectorRealType& energies, PsimagLite::String lfEnergy, IoType::In& ioIn2) { // Energies/Size <-- sectors // Energies/0/Size <--- excited SizeType nsectors = 0; ioIn2.read(nsectors, lfEnergy + "/Size"); energies.resize(nsectors); for (SizeType sectorIndex = 0; sectorIndex < nsectors; ++sectorIndex) { SizeType nexcited = 0; try { ioIn2.read(nexcited, lfEnergy + "/" + ttos(sectorIndex) + "/Size"); } catch (...) { // legacy reading readEnergiesLegacy(energies, lfEnergy, ioIn2); return; } energies[sectorIndex].resize(nexcited); for (SizeType e = 0; e < nexcited; ++e) ioIn2.read(energies[sectorIndex][e], lfEnergy + "/" + ttos(sectorIndex) + "/" + ttos(e)); } } static void writeEnergies(bool firstCall, PsimagLite::String label, const VectorVectorRealType& energies, IoType::Out& io) { PsimagLite::IoNgSerializer::WriteMode mode = (firstCall) ? PsimagLite::IoNgSerializer::NO_OVERWRITE : PsimagLite::IoNgSerializer::ALLOW_OVERWRITE; // Energies/Size <-- sectors // Energies/0/Size <--- excited const SizeType nsectors = energies.size(); if (firstCall) io.createGroup(label); io.write(nsectors, label + "/Size", mode); for (SizeType sectorIndex = 0; sectorIndex < nsectors; ++sectorIndex) { const SizeType nexcited = energies[sectorIndex].size(); if (firstCall) io.createGroup(label + "/" + ttos(sectorIndex)); io.write(nexcited, label + "/" + ttos(sectorIndex) + "/Size", mode); for (SizeType e = 0; e < nexcited; ++e) io.write(energies[sectorIndex][e], label + "/" + ttos(sectorIndex) + "/" + ttos(e), mode); } } void checkpointStacks(PsimagLite::String filename) const { // taken from dtor sayAboutToWrite(); static const bool needsToRead = false; DiskStackType systemDisk(filename, needsToRead, "system", isObserveCode_); systemStack_.toDisk(systemDisk); DiskStackType environDisk(filename, needsToRead, "environ", isObserveCode_); envStack_.toDisk(environDisk); sayWritingDone(); } // Not related to stacks void write(const BasisWithOperatorsType &pS, const BasisWithOperatorsType &pE, typename IoType::Out& io) const { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Saving pS and pE..."; progress_.printline(msgg, std::cout); pS.write(io, "CHKPOINTSYSTEM", IoType::Out::Serializer::NO_OVERWRITE, BasisWithOperatorsType::SaveEnum::ALL); pE.write(io, "CHKPOINTENVIRON", IoType::Out::Serializer::NO_OVERWRITE, BasisWithOperatorsType::SaveEnum::ALL); } // Not related to stacks void read(BasisWithOperatorsType &pS, BasisWithOperatorsType &pE, bool isObserveCode) { typename PsimagLite::IoSelector::In ioTmp(parameters_.checkpoint.filename()); BasisWithOperatorsType pS1(ioTmp, "CHKPOINTSYSTEM", isObserveCode); pS = pS1; BasisWithOperatorsType pE1(ioTmp, "CHKPOINTENVIRON", isObserveCode); pE = pE1; } void push(const BasisWithOperatorsType &pS,const BasisWithOperatorsType &pE) { systemStack_.push(pS); envStack_.push(pE); } void push(const BasisWithOperatorsType &pSorE, typename ProgramGlobals::SysOrEnvEnum what) { if (what == ProgramGlobals::SysOrEnvEnum::ENVIRON) envStack_.push(pSorE); else systemStack_.push(pSorE); } BasisWithOperatorsType& shrink(typename ProgramGlobals::SysOrEnvEnum what) { return (what == ProgramGlobals::SysOrEnvEnum::ENVIRON) ? shrinkInternal(envStack_) : shrinkInternal(systemStack_); } bool isRestart() const { return isRestart_; } SizeType stackSize(typename ProgramGlobals::SysOrEnvEnum what) const { return (what == ProgramGlobals::SysOrEnvEnum::ENVIRON) ? envStack_.size() : systemStack_.size(); } const DiskOrMemoryStackType& memoryStack(typename ProgramGlobals::SysOrEnvEnum option) const { return (option == ProgramGlobals::SysOrEnvEnum::SYSTEM) ? systemStack_ : envStack_; } const ParametersType& parameters() const { return parameters_; } const VectorVectorRealType& energies() const { return energiesFromFile_; } private: // legacy reading (use as fallback only) static void readEnergiesLegacy(VectorVectorRealType& energies, PsimagLite::String lfEnergy, IoType::In& ioIn2) { // Energies/Size <-- numbers // Energies/Energy <--- value SizeType total = 0; ioIn2.read(total, lfEnergy + "/Size"); energies.resize(1); energies[0].clear(); RealType value = 0; for (SizeType i = 0; i < total; ++i) ioIn2.read(value, lfEnergy + "/" + ttos(i)); energies[0].push_back(value); } void sayAboutToWrite() const { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Writing sys. and env. stacks to disk..."; progress_.printline(msgg, std::cout); } void sayWritingDone() const { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Written sys. and env. stacks to disk."; progress_.printline(msgg, std::cout); } Checkpoint(const Checkpoint&); Checkpoint& operator=(const Checkpoint&); void checkFiniteLoops(SizeType totalSites, SizeType hilbertOneSite, InputValidatorType& ioIn) const { if (parameters_.options.isSet("nofiniteloops")) return; bool allInSystem = (parameters_.options.isSet("geometryallinsystem")); PsimagLite::Vector::Type vfl; int lastSite = (allInSystem) ? totalSites-2 : totalSites/2-1; // must be signed int prevDeltaSign = 1; bool checkPoint = false; if (isRestart_) { PsimagLite::IoSelector::In io1(parameters_.checkpoint.filename()); io1.read(lastSite, "FinalPsi/TargetCentralSite"); io1.read(prevDeltaSign, "LastLoopSign"); checkPoint = true; } if (totalSites & 1) lastSite++; ParametersType::readFiniteLoops(ioIn,vfl); if (!parameters_.autoRestart) checkFiniteLoops(vfl,totalSites,lastSite,prevDeltaSign,checkPoint); checkMvalues(vfl, hilbertOneSite); } void checkFiniteLoops(const PsimagLite::Vector::Type& finiteLoop, SizeType totalSites, SizeType lastSite, int prevDeltaSign, bool checkPoint) const { PsimagLite::String s = "checkFiniteLoops: I'm falling out of the lattice "; PsimagLite::String loops = ""; int x = lastSite; if (finiteLoop[0].stepLength() < 0 && !checkPoint) x++; SizeType sopt = 0; // have we started saving yet? for (SizeType i=0;i0)); if (b1 && delta*prevDeltaSign < 0) x += prevDeltaSign; prevDeltaSign = 1; if (delta<0) prevDeltaSign = -1; // check that we don't fall out bool flag = false; if (x<=0) { s = s + "on the left end\n"; flag = true; } if (SizeType(x)>=totalSites-1) { s = s + "on the right end\n"; flag = true; } if (flag) { // complain and die if we fell out: s = s + "Loops so far: " + loops + "\n"; s =s + "x=" + ttos(x) + " last delta=" + ttos(delta); s =s + " sites=" + ttos(totalSites); throw PsimagLite::RuntimeError(s.c_str()); } } } void checkMvalues(const PsimagLite::Vector::Type& finiteLoop, SizeType hilbertOneSite) const { for (SizeType i = 0;i < finiteLoop.size(); ++i) { if (finiteLoop[i].keptStates() >= hilbertOneSite) continue; PsimagLite::String str("FATAL: Finite loop number "); str += ttos(i) +" has keptStates= " + ttos(finiteLoop[i].keptStates()); str += " < " + ttos(hilbertOneSite) + "\n"; throw PsimagLite::RuntimeError(str); } } //! shrink (we don't really shrink, we just undo the growth) BasisWithOperatorsType& shrinkInternal(DiskOrMemoryStackType& thisStack) { assert(thisStack.size() > 0); thisStack.pop(); assert(thisStack.size() > 0); dummyBwo_ = thisStack.top(); return dummyBwo_; } void loadStacksDiskToMemory() { DiskStackType systemDisk(parameters_.checkpoint.filename(), isRestart_, "system", isObserveCode_); DiskStackType envDisk(parameters_.checkpoint.filename(), isRestart_, "environ", isObserveCode_); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Loading sys. and env. stacks from disk..."; progress_.printline(msgg, std::cout); DiskOrMemoryStackType::loadStack(systemStack_, systemDisk); DiskOrMemoryStackType::loadStack(envStack_, envDisk); } void loadStacksMemoryToDisk() { const bool needsToRead = false; DiskStackType systemDisk(parameters_.filename, needsToRead, "system", isObserveCode_); DiskStackType envDisk(parameters_.filename, needsToRead, "environ", isObserveCode_); sayAboutToWrite(); DiskOrMemoryStackType::loadStack(systemDisk, systemStack_); DiskOrMemoryStackType::loadStack(envDisk, envStack_); sayWritingDone(); } //! Move elsewhere //! returns s1+s2 if s2 has no '/', //! if s2 = s2a + '/' + s2b return s2a + '/' + s1 + s2b PsimagLite::String appendWithDir(const PsimagLite::String& s1, const PsimagLite::String& s2) const { size_t x = s2.find("/"); if (x==PsimagLite::String::npos) return s1 + s2; PsimagLite::String suf = s2.substr(x+1,s2.length()); PsimagLite::String dir = s2.substr(0,s2.length()-suf.length()); return dir + s1 + suf; } const ParametersType& parameters_; bool isObserveCode_; bool isRestart_; DiskOrMemoryStackType systemStack_; DiskOrMemoryStackType envStack_; PsimagLite::ProgressIndicator progress_; VectorVectorRealType energiesFromFile_; BasisWithOperatorsType dummyBwo_; }; // class Checkpoint } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/ClebschGordan.h000066400000000000000000000165031414604301300175760ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ClebschGordan.h * * * */ #ifndef CLEBSCH_GORDAN_H #define CLEBSCH_GORDAN_H #include "ProgramGlobals.h" #include "ProgressIndicator.h" namespace Dmrg { // This is a class to compute ClebschGordan Coefficients // Don't use this class directly, use ClebschGordanCached instead, it'll improve performance // Parts taken from Ref.S = http://caps.gsfc.nasa.gov/simpson/software/cg_f90.txt //( David G. Simpson NASA, Goddard Space Flight Center, Greenbelt, Maryland 20771) template class ClebschGordan { typedef FieldType LongType; public: typedef std::pair PairType; ClebschGordan(SizeType numberOfFactorials) : factorial_(numberOfFactorials) { copies_ = 0; init(numberOfFactorials); } void init(SizeType numberOfFactorials) { factorial_.resize(numberOfFactorials), createFactorials(); copies_++; if (copies_>3) { std::cerr<<"WARNING: ClebschGordan has "; std::cerr< (j1+j2)) || (fabs(m1) > j1) || (fabs(m2) > j2) || (fabs(m3) > j3)) return false; return true; } void convert_(FieldType& j,FieldType& m,const PairType& jm) const { j=0.5*jm.first; m=jm.second-j; } // From Ref.S bool isfrac(FieldType x) const { FieldType eps=1e-8; if ((fabs(x)-int(fabs(x)))>eps) return true; return false; } //\delta_{m,m_1+m_2} \sqrt{\frac{(2j+1)(j+j_1-j_2)!(j-j_1+j_2)!(j_1+j_2-j)! }{(j_1+j_2+j+1)!}} \ \times // //\sqrt{(j+m)!(j-m)!(j_1-m_1)!(j_1+m_1)!(j_2-m_2)!(j_2+m_2)!}\ \times // //\sum_k \frac{(-1)^k}{k!(j_1+j_2-j-k)!(j_1-m_1-k)!(j_2+m_2-k)!(j-j_2+m_1+k)!(j-j_1-m_2+k)!}. FieldType cg(FieldType j, FieldType m, FieldType j1, FieldType m1, FieldType j2, FieldType m2) const { if (!passesHurdles(j,m,j1,m1,j2,m2)) return 0; if (!isNonZero(j,m,j1,m1,j2,m2)) return 0; // now we consider m>=0 and assume all hurdles have passed return cg_f1(j,m,j1,m1,j2,m2)*cg_f2(j,m,j1,m1,j2,m2); } // From Ref. S FieldType cg_f1(FieldType j3, FieldType m3, FieldType j1, FieldType m1, FieldType j2, FieldType m2) const { FieldType c = sqrt((j3+j3+1)/fact_(nint(j1+j2+j3+1))); c *= sqrt(fact_(nint(j1+j2-j3))*fact_(nint(j2+j3-j1))* fact_(nint(j3+j1-j2))); c *= sqrt(fact_(nint(j1+m1))*fact_(nint(j1-m1))*fact_(nint(j2+m2))* fact_(nint(j2-m2))*fact_(nint(j3+m3))*fact_(nint(j3-m3))); return c; } // From Ref. S FieldType cg_f2(FieldType j3, FieldType, FieldType j1, FieldType m1, FieldType j2, FieldType m2) const { FieldType sumk = 0; for (SizeType k=0;k::Type factorial_; }; // ClebschGordan template SizeType ClebschGordan::copies_=0; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/ClebschGordanCached.h000066400000000000000000000126241414604301300206660ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ClebschGordanCached.h * * * */ #ifndef CLEBSCH_GORDANCACHED_H #define CLEBSCH_GORDANCACHED_H #include "ClebschGordan.h" #include "ProgressIndicator.h" namespace Dmrg { template class ClebschGordanCached { typedef ClebschGordan ClebschGordanType; typedef typename ClebschGordanType::PairType PairType; public: ClebschGordanCached(SizeType jmax) : UNDEFINED_VALUE(-1000), jmax_(jmax), max2_(((jmax_-1)*(jmax_+2))/2+1),max22_(max2_*max2_), data_(max22_*jmax_*2,UNDEFINED_VALUE),cgObject_(2) { copies_ = 0; init(jmax,2); } void init(SizeType jmax,SizeType nfactorials) { jmax_=jmax; max2_=((jmax_-1)*(jmax_+2))/2+1; max22_=max2_*max2_; data_.resize(max22_*jmax_*2,UNDEFINED_VALUE); cgObject_.init(nfactorials); copies_++; if (copies_>2) { std::cerr<<"WARNING: ClebschGordanCached has "; std::cerr<jm2.first) jmin = jm1.first-jm2.first; else jmin = jm2.first-jm1.first; SizeType x = calcIndex(index1,index2)+(jm.first-jmin)*max22_; if (data_[x]== UNDEFINED_VALUE) { data_[x]=cgObject_(jm,jm1,jm2); } return data_[x]; } private: SizeType calcSubIndex(const PairType& jm) const { if (jm.second==0) return jm.first; SizeType x = 2*jmax_-1-jm.second; x *= jm.second; x /= 2; x += jm.first; if (x>=max2_) throw PsimagLite::RuntimeError("problem calcSubIndex\n"); return x; } SizeType calcIndex(SizeType i1,SizeType i2) const { if (i1>=max2_ || i2>=max2_) throw PsimagLite::RuntimeError("problem\n"); return i1+i2*max2_; } bool checkCg(const PairType& jm,const PairType& jm1,const PairType& jm2) const { if (!checkCg1(jm.first,jm1.first,jm2.first)) return false; int m=calcM(jm.first,jm1,jm2); if (m<0) return false; if (SizeType(m)!=jm.second) return false; return true; } bool checkCg1(SizeType j,SizeType j1,SizeType j2) const { if (j>j1+j2) return false; SizeType jmin=0; if (j1::Type data_; ClebschGordanType cgObject_; }; // class ClebschGordanCached template SizeType ClebschGordanCached::copies_=0; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/Cloner.h000066400000000000000000000101431414604301300163140ustar00rootroot00000000000000// BEGIN LICENSE BLOCK /* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ // END LICENSE BLOCK /** \ingroup DMRG */ /*@{*/ /*! \file Cloner.h * * A class to help repeating a task multiple times * */ #ifndef CLONER_HEADER_H #define CLONER_HEADER_H #include "String.h" #include #include #include #include "TypeToString.h" namespace Dmrg { template class Cloner { static const SizeType LINE_LENGTH = 1024; public: Cloner(const PsimagLite::String& infile, const PsimagLite::String& outRoot, const PsimagLite::String& ext) : infile_(infile),outRoot_(outRoot),ext_(ext) {} void push(const LineChangerType& lineChanger) { lineChanger_.push_back(lineChanger); } void createInputFile(SizeType ind) const { std::ifstream fin(infile_.c_str()); PsimagLite::String outfile = outRoot_ + ttos(ind) + ext_; std::ofstream fout(outfile.c_str()); char line[LINE_LENGTH]; while(!fin.eof()) { fin.getline(line,LINE_LENGTH); PsimagLite::String s(line); if (!procLine(s,ind)) continue; fout<::Type lineChanger_; }; // class Cloner } // namespace Dmrg /*@}*/ #endif // CLONER_HEADER_H dmrgpp-6.02/src/Engine/CompressedVector.h000066400000000000000000000026301414604301300203630ustar00rootroot00000000000000#ifndef COMPRESSEDVECTOR_H #define COMPRESSEDVECTOR_H #include "Vector.h" #include namespace Dmrg { template class CompressedVector { public: typedef T value_type; CompressedVector() : size_(0) { build(); } void read(std::ifstream& fin) { fin>>size_; if (size_ == 0) return; SizeType tmp; fin>>tmp; partition_.resize(tmp); for (SizeType i = 0; i < tmp; ++i) fin>>partition_[i]; fin>>tmp; for (SizeType i = 0; i < tmp; ++i) fin>>data_[i]; } void clear() { partition_.clear(); data_.clear(); size_ = 0; } void resize(SizeType n) { partition_.clear(); partition_.resize(2); partition_[0] = 0; partition_[1] = n; size_ = n; data_.clear(); data_.resize(1,0); } SizeType size() const { return size_; } const T& operator[](SizeType i) const { assert(i < size_); SizeType j = findPartition(i); return data_[j]; } private: void build() { throw PsimagLite::RuntimeError("CompressedVector: build\n"); } SizeType findPartition(SizeType ind) const { assert(ind < size_); for (SizeType i = 1; i < partition_.size(); ++i) if (ind < partition_[i]) return i - 1; throw PsimagLite::RuntimeError("CompressedVector: findPartition\n"); } SizeType size_; PsimagLite::Vector::Type partition_; typename PsimagLite::Vector::Type data_; }; // class CompressedVector } // namespace Dmrg #endif // COMPRESSEDVECTOR_H dmrgpp-6.02/src/Engine/ConjugateGradient.h000066400000000000000000000120111414604301300204630ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ConjugateGradient.h * * impl. of the conjugate gradient method * */ #ifndef CONJ_GRAD_H #define CONJ_GRAD_H #include "Matrix.h" #include "Vector.h" #include "ProgressIndicator.h" namespace Dmrg { template class ConjugateGradient { typedef typename MatrixType::value_type FieldType; typedef typename PsimagLite::Vector::Type VectorType; typedef typename PsimagLite::Real::Type RealType; public: ConjugateGradient(SizeType max,RealType eps) : progress_("ConjugateGradient"), max_(max), eps_(eps) {} //! A and b, the result x, and also the initial solution x0 void operator()(VectorType& x, const MatrixType& A, const VectorType& b) const { VectorType v = multiply(A,x); VectorType p(b.size()); VectorType rprev(b.size()); VectorType rnext; for (SizeType i=0;i::True> class CorrectionVectorActionBase { public: typedef typename PsimagLite::Real::Type RealType; typedef typename PsimagLite::Vector::Type VectorRealType; enum ActionEnum {ACTION_IMAG, ACTION_REAL}; CorrectionVectorActionBase(const TargetParamsType& tstStruct, RealType E0, const VectorRealType& eigs) : tstStruct_(tstStruct),E0_(E0),eigs_(eigs) { if (tstStruct_.omega().first == PsimagLite::FREQ_REAL) return; // <--- EARLY EXIT std::cout<::True> class CorrectionVectorAction {}; template class CorrectionVectorAction : public CorrectionVectorActionBase { public: typedef CorrectionVectorActionBase BaseType; typedef typename BaseType::RealType RealType; CorrectionVectorAction(const TargetParamsType& tstStruct, RealType E0, const typename BaseType::VectorRealType& eigs) : BaseType(tstStruct, E0, eigs) {} ComplexOrRealType operator()(SizeType k) const { return (BaseType::tstStruct_.omega().first == PsimagLite::FREQ_REAL) ? actionWhenFreqReal(k) : BaseType::actionWhenMatsubara(k); } void setReal() const { BaseType::action_ = BaseType::ACTION_REAL; } private: ComplexOrRealType actionWhenFreqReal(SizeType k) const { RealType sign = (BaseType::tstStruct_.type() == 0) ? -1.0 : 1.0; RealType part1 = (BaseType::eigs_[k] - BaseType::E0_)*sign + BaseType::tstStruct_.omega().second; const SizeType nFraction = BaseType::tstStruct_.nForFraction(); if (nFraction==1) { RealType denom = part1*part1 + BaseType::tstStruct_.eta()*BaseType::tstStruct_.eta(); return (BaseType::action_ == BaseType::ACTION_IMAG) ? BaseType::tstStruct_.eta()/denom : -part1/denom; } else { RealType exponent = 1.0/(2.0*nFraction); RealType denom = pow(part1*part1 + BaseType::tstStruct_.eta()*BaseType::tstStruct_.eta(), exponent); RealType denom1 = sqrt(part1*part1 + BaseType::tstStruct_.eta()*BaseType::tstStruct_.eta()); RealType cosreal = cos(acos(part1/denom1)/nFraction); RealType sinreal = sin(acos(part1/denom1)/nFraction); return (BaseType::action_ == BaseType::ACTION_IMAG) ? sinreal/denom : cosreal/denom; } } }; template class CorrectionVectorAction : public CorrectionVectorActionBase { public: typedef CorrectionVectorActionBase BaseType; typedef typename BaseType::RealType RealType; CorrectionVectorAction(const TargetParamsType& tstStruct, RealType E0, const typename BaseType::VectorRealType& eigs) : BaseType(tstStruct, E0, eigs) { if (firstCall_) { std::cout< bool CorrectionVectorAction::firstCall_ = true; } #endif // CORRECTIONVECTORACTION_H dmrgpp-6.02/src/Engine/CorrectionVectorFunction.h000066400000000000000000000112321414604301300220720ustar00rootroot00000000000000/* Copyright (c) 2009-2011, 2013, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file CorrectionVectorFunction.h * * This is an implementation of PRB 60, 335, Eq. (24) * */ #ifndef CORRECTION_V_FUNCTION_H #define CORRECTION_V_FUNCTION_H #include "ConjugateGradient.h" namespace Dmrg { template class CorrectionVectorFunction { typedef typename MatrixType::value_type FieldType; typedef typename PsimagLite::Vector::Type VectorType; typedef typename PsimagLite::Real::Type RealType; class InternalMatrix { public: typedef FieldType value_type ; InternalMatrix(const MatrixType& m,const InfoType& info,RealType E0) : m_(m),info_(info),E0_(E0) { if (info_.omega().first != PsimagLite::FREQ_REAL) throw PsimagLite::RuntimeError("Matsubara only with KRYLOV\n"); } SizeType rows() const { return m_.rows(); } void matrixVectorProduct(VectorType& x,const VectorType& y) const { RealType eta = info_.eta(); RealType omegaMinusE0 = info_.omega().second + E0_; VectorType xTmp(x.size(),0); m_.matrixVectorProduct(xTmp,y); // xTmp = Hy VectorType x2(x.size(),0); m_.matrixVectorProduct(x2,xTmp); // x2 = H^2 y const RealType f1 = (-2.0); // this needs fixing // preferred: // x <= x2 + f1*omegaMinusE0*xTmp + (omegaMinusE0*omegaMinusE0 + eta*eta)*y; // equivalent for (SizeType i = 0; i < x.size(); ++i) x[i] = x2[i] + f1*omegaMinusE0*xTmp[i] + (omegaMinusE0*omegaMinusE0 + eta*eta)*y[i]; x /= (-eta); } private: const MatrixType& m_; const InfoType& info_; RealType E0_; }; typedef ConjugateGradient ConjugateGradientType; public: CorrectionVectorFunction(const MatrixType& m,const InfoType& info,RealType E0) : im_(m,info,E0),cg_(info.cgSteps(),info.cgEps()) {} void getXi(VectorType& result,const VectorType& sv) const { VectorType x0(result.size(),0.0); result = x0; // initial ansatz cg_(result,im_,sv); } private: InternalMatrix im_; ConjugateGradientType cg_; }; // class CorrectionVectorFunction } // namespace Dmrg /*@}*/ #endif // CORRECTION_V_FUNCTION_H dmrgpp-6.02/src/Engine/CorrectionVectorSkeleton.h000066400000000000000000000312331414604301300220740ustar00rootroot00000000000000/* Copyright (c) 2009-2016-2018-2019, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file CorrectionVectorSkeleton.h * * Common code to TargetingCorrectionVector TargetingRixs[Static and Dynamic] * */ #ifndef CORRECTION_VECTOR_SKEL_H #define CORRECTION_VECTOR_SKEL_H #include "ProgressIndicator.h" #include "BLAS.h" #include "VectorWithOffsets.h" #include "CorrectionVectorFunction.h" #include "ParametersForSolver.h" #include "ParallelTriDiag.h" #include "FreqEnum.h" #include "NoPthreadsNg.h" #include "TridiagRixsStatic.h" #include "KrylovHelper.h" #include "CorrectionVectorAction.h" namespace Dmrg { template class CorrectionVectorSkeleton { public: typedef CorrectionVectorSkeleton ThisType; typedef LanczosSolverType_ LanczosSolverType; typedef typename TargetingBaseType::MatrixVectorType MatrixVectorType; typedef typename MatrixVectorType::ModelType ModelType; typedef typename ModelType::RealType RealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename ModelType::OperatorsType OperatorsType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename BasisType::BlockType BlockType; typedef typename TargetingBaseType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename WaveFunctionTransfType::VectorWithOffsetType VectorWithOffsetType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef VectorType TargetVectorType; typedef typename TargetingBaseType::TargetingCommonType TargetingCommonType; typedef typename TargetingCommonType::TimeSerializerType TimeSerializerType; typedef typename LanczosSolverType::TridiagonalMatrixType TridiagonalMatrixType; typedef PsimagLite::Matrix DenseMatrixType; typedef PsimagLite::Matrix DenseMatrixRealType; typedef typename LanczosSolverType::PostProcType PostProcType; typedef typename LanczosSolverType::MatrixType LanczosMatrixType; typedef CorrectionVectorFunction CorrectionVectorFunctionType; typedef ParallelTriDiag ParallelTriDiagType; typedef TridiagRixsStatic TridiagRixsStaticType; typedef typename ParallelTriDiagType::MatrixComplexOrRealType MatrixComplexOrRealType; typedef typename ParallelTriDiagType::VectorMatrixFieldType VectorMatrixFieldType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorVectorRealType; typedef typename ModelType::InputValidatorType InputValidatorType; class CalcR { public: typedef CorrectionVectorAction ActionType; CalcR(const TargetParamsType& tstStruct, RealType E0, const VectorRealType& eigs) : action_(tstStruct,E0,eigs) {} const ActionType& imag() const { action_.setImag(); return action_; } const ActionType& real() const { action_.setReal(); return action_; } private: ActionType action_; }; struct TypeWrapper { typedef typename ThisType::MatrixComplexOrRealType MatrixComplexOrRealType; typedef typename ThisType::VectorWithOffsetType VectorWithOffsetType; typedef typename ModelType::SolverParamsType SolverParamsType; }; typedef KrylovHelper KrylovHelperType; CorrectionVectorSkeleton(InputValidatorType& ioIn, const TargetParamsType& tstStruct, const ModelType& model, const LeftRightSuperType& lrs, const RealType& energy) : ioIn_(ioIn), tstStruct_(tstStruct), model_(model), lrs_(lrs), energy_(energy), progress_("CorrectionVectorSkeleton"), krylovHelper_(model.params(), tstStruct.firstRitz()) {} void calcDynVectors(const VectorWithOffsetType& tv0, VectorWithOffsetType& tv1, VectorWithOffsetType& tv2) { const bool needsTv2 = (!CalcR::ActionType::isValueComplex() || tstStruct_.algorithm() != TargetParamsType::BaseType::AlgorithmEnum::KRYLOV); const VectorWithOffsetType& phi = tv0; tv1 = phi; if (needsTv2) tv2 = phi; VectorMatrixFieldType V(phi.sectors()); VectorMatrixFieldType T(phi.sectors()); VectorSizeType steps(phi.sectors()); triDiag(phi,T,V,steps); VectorVectorRealType eigs(phi.sectors()); for (SizeType ii = 0;ii < phi.sectors(); ++ii) PsimagLite::diag(T[ii],eigs[ii],'V'); for (SizeType i=0;i ParallelizerType; ParallelizerType threadedTriDiag(PsimagLite::CodeSectionParams(1)); ParallelTriDiagType helperTriDiag(phi, T, V, steps, lrs_, fakeTime, model_, ioIn_); threadedTriDiag.loopCreate(helperTriDiag); } RealType dynWeightOf(VectorType& v,const VectorType& w) const { RealType sum = 0; for (SizeType i=0;i namespace Dmrg { template class CorrelationsSkeleton { public: typedef PsimagLite::PackIndices PackIndicesType; typedef Braket BraketType; typedef ObserverHelperType_ ObserverHelperType; typedef typename ObserverHelperType::VectorWithOffsetType VectorWithOffsetType; typedef typename VectorWithOffsetType::VectorType VectorType ; typedef typename ObserverHelperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename ObserverHelperType::FermionSignType FermionSignType; typedef typename BasisWithOperatorsType::RealType RealType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisType::VectorSizeType VectorSizeType; typedef typename VectorType::value_type FieldType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef PsimagLite::CrsMatrix SparseMatrixType; enum class GrowDirection {RIGHT, LEFT}; CorrelationsSkeleton(const ObserverHelperType& helper, const ModelType& model, bool normalizeResult) : helper_(helper), model_(model), normalizeResult_(normalizeResult) {} SizeType numberOfSites() const { return helper_.numberOfSites(); } //! i can be zero here!! void growDirectly(SparseMatrixType& Odest, const SparseMatrixType& Osrc, SizeType i, ProgramGlobals::FermionOrBosonEnum fermionicSign, SizeType ns, bool transform) const { Odest =Osrc; // from 0 --> i int nt=i-1; if (nt<0) nt=0; for (SizeType s = nt; s < ns; ++s) { const GrowDirection growOption = growthDirection(s, nt, i, s); SparseMatrixType Onew(helper_.cols(s),helper_.cols(s)); fluffUp(Onew, Odest, fermionicSign, growOption, false, s); if (!transform && s == ns - 1) { Odest = Onew; continue; } helper_.transform(Odest, Onew, s); } } GrowDirection growthDirection(SizeType s, int nt, SizeType i, SizeType ptr) const { const ProgramGlobals::DirectionEnum dir = helper_.direction(ptr); GrowDirection growOption = (dir == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? GrowDirection::RIGHT : GrowDirection::LEFT; if (s==SizeType(nt)) { growOption = (dir == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? GrowDirection::LEFT : GrowDirection::RIGHT; if (i==0) growOption = (dir == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? GrowDirection::RIGHT : GrowDirection::LEFT; } return growOption; } // Perfomance critical: void fluffUp(SparseMatrixType& ret2, const SparseMatrixType& O, ProgramGlobals::FermionOrBosonEnum fOrB, const GrowDirection growOption, bool transform, SizeType ptr) const { const int fermionicSign = (fOrB == ProgramGlobals::FermionOrBosonEnum::BOSON) ? 1 : -1; const ProgramGlobals::DirectionEnum dir = helper_.direction(ptr); const BasisType& basis = (dir == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? helper_.leftRightSuper(ptr).left() : helper_.leftRightSuper(ptr).right(); SizeType n = basis.size(); SizeType orows = O.rows(); SizeType ktotal = n/orows; SparseMatrixType ret(n, n, ktotal*O.nonZeros()); if (growOption == GrowDirection::RIGHT) { RealType sign = (dir == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON) ? fermionSignBasis(fermionicSign, helper_.leftRightSuper(ptr).left()) : 1; SizeType counter = 0; for (SizeType k = 0; k < ktotal; ++k) { for (SizeType i = 0; i < orows; ++i) { ret.setRow(i + k*orows, counter); for (int kj = O.getRowPtr(i); kj < O.getRowPtr(i + 1); ++kj) { // Sperm[e0] = i + k*n // Sperm[e1] = j + k*n SizeType col = basis. permutationInverse(O.getCol(kj) + k*orows); ret.setCol(counter, col); ret.setValues(counter++, O.getValue(kj)*sign); } } } ret.setRow(n, counter); ret.checkValidity(); } else { SizeType counter = 0; for (SizeType i = 0; i < orows; ++i) { for (SizeType k = 0; k < ktotal; ++k) { ret.setRow(k + i*ktotal, counter); RealType sign = 1; if (dir == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON) { sign = (fOrB == ProgramGlobals::FermionOrBosonEnum::BOSON) ? 1 : fermionSignBasis(fermionicSign, helper_.leftRightSuper(ptr).left())* helper_.signsOneSite(k); } else { sign = helper_.fermionicSignLeft(ptr)(k, fermionicSign); } for (int kj = O.getRowPtr(i); kj < O.getRowPtr(i + 1); ++kj) { // Sperm[e0] = k + i*m // Sperm[e1] = k + j*m SizeType col = basis. permutationInverse(k + O.getCol(kj)*ktotal); ret.setCol(counter, col); ret.setValues(counter++, O.getValue(kj)*sign); } } } ret.setRow(n, counter); ret.checkValidity(); } reorderRowsCrs(ret, basis); if (transform) { helper_.transform(ret2, ret, ptr); return; } ret2 = ret; } SizeType dmrgMultiply(SparseMatrixType& result, const SparseMatrixType& O1, const SparseMatrixType& O2, ProgramGlobals::FermionOrBosonEnum fermionicSign, SizeType ns) const { SizeType ptr = (ns == 0) ? ns : ns - 1; if (helper_.direction(ptr) == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) dmrgMultiplySystem(result, ptr, O1, O2, fermionicSign, ns); else dmrgMultiplyEnviron(result, ptr, O1, O2, fermionicSign, ns); return ptr; } static void createWithModification(SparseMatrixType& Om,const SparseMatrixType& O,char mod) { if (mod == 'n' || mod == 'N') { Om = O; return; } transposeConjugate(Om,O); } FieldType bracket(const SparseMatrixType& A, ProgramGlobals::FermionOrBosonEnum fermionicSign, SizeType ptr, const PsimagLite::GetBraOrKet& bra, const PsimagLite::GetBraOrKet& ket) const { //try { const VectorWithOffsetType& src1 = helper_.getVectorFromBracketId(bra, ptr); const VectorWithOffsetType& src2 = helper_.getVectorFromBracketId(ket, ptr); return bracket_(A,src1,src2,fermionicSign,ptr); /*} catch (std::exception& e) { std::cerr<<"CAUGHT: "<::Type col(sprime,0); typename PsimagLite::Vector::Type value(sprime, 0); PackIndicesType pack(ni); SizeType counter = 0; for (SizeType r=0;r::Type col(eprime,0); typename PsimagLite::Vector::Type value(eprime,0); PackIndicesType pack(nj); SizeType counter = 0; for (SizeType r=0;r 1); penultimateSite -= 2; typename ModelType::VectorBoolType oddElectrons; model_.findOddElectronsOfOneSite(oddElectrons, penultimateSite); SparseMatrixType A1crs(A1); SparseMatrixType A2crs(A2); SparseMatrixType Bcrs(B); FieldType sum=0; SizeType ni = helper_.leftRightSuper(ptr).left().size()/A2crs.rows(); SizeType leftSize = helper_.leftRightSuper(ptr).left().size(); // some sanity checks: assert(vec1.size()==vec2.size()); if (vec1.size()==0) return 0; assert(vec1.size()==helper_.leftRightSuper(ptr).super().size()); assert(ni==A1crs.rows()); // ok, we're ready for the main course: PackIndicesType pack1(helper_.leftRightSuper(ptr).left().size()); PackIndicesType pack2(ni); for (SizeType x=0;x1e-10 && fabs(PsimagLite::imag(tmp))<1e-6); return sum/norma2; } const ObserverHelperType& helper_; const ModelType& model_; bool normalizeResult_; }; //class CorrelationsSkeleton } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/DensityMatrixBase.h000066400000000000000000000111701414604301300204720ustar00rootroot00000000000000/* Copyright (c) 2009-2017, UT-Battelle, LLC All rights reserved [DMRG++, Version 4.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file DensityMatrixBase.h * * * */ #ifndef DENSITY_MATRIX_BASE_H #define DENSITY_MATRIX_BASE_H #include "BlockDiagonalMatrix.h" #include "PsimagLite.h" namespace Dmrg { template class DensityMatrixBase { public: typedef typename TargetingType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename TargetingType::TargetVectorType::value_type DensityMatrixElementType; typedef typename PsimagLite::Real::Type RealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef PsimagLite::Matrix MatrixType; typedef BlockDiagonalMatrix BlockDiagonalMatrixType; struct Params { Params(bool u, ProgramGlobals::DirectionEnum d, bool de, bool enablePersistentSvd_, bool serialSvd_) : useSvd(u), direction(d), debug(de), enablePersistentSvd(enablePersistentSvd_), serialSvd(serialSvd_) {} bool useSvd; ProgramGlobals::DirectionEnum direction; bool debug; bool enablePersistentSvd; bool serialSvd; }; typedef typename BlockDiagonalMatrixType::BuildingBlockType BuildingBlockType; virtual ~DensityMatrixBase() {} virtual const BlockDiagonalMatrixType& operator()()=0; virtual void diag(typename PsimagLite::Vector::Type&, char) = 0; virtual const typename PsimagLite::Vector::Type& vts() const { return vtsEmpty_; } virtual const typename PsimagLite::Vector::Type& s() const { return sEmpty_; } virtual const typename BasisWithOperatorsType::VectorQnType& qns() const { return qnsEmpty_; } private: typename PsimagLite::Vector::Type vtsEmpty_; typename PsimagLite::Vector::Type sEmpty_; typename BasisWithOperatorsType::VectorQnType qnsEmpty_; }; // class DensityMatrixBase } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/DensityMatrixLocal.h000066400000000000000000000211141414604301300206510ustar00rootroot00000000000000 /* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ #ifndef DENSITY_MATRIX_LOCAL_H #define DENSITY_MATRIX_LOCAL_H #include "ProgressIndicator.h" #include "TypeToString.h" #include "BlockDiagonalMatrix.h" #include "DensityMatrixBase.h" #include "ParallelDensityMatrix.h" #include "NoPthreads.h" #include "Concurrency.h" #include "Parallelizer.h" #include "DiagBlockDiagMatrix.h" namespace Dmrg { template class DensityMatrixLocal : public DensityMatrixBase { typedef DensityMatrixBase BaseType; typedef typename TargetingType::LeftRightSuperType LeftRightSuperType; typedef typename TargetingType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename TargetingType::VectorWithOffsetType TargetVectorType; typedef typename TargetingType::TargetVectorType::value_type DensityMatrixElementType; typedef PsimagLite::Concurrency ConcurrencyType; typedef PsimagLite::ProgressIndicator ProgressIndicatorType; typedef typename PsimagLite::Real::Type RealType; typedef typename DensityMatrixBase::Params ParamsType; public: typedef typename BaseType::BlockDiagonalMatrixType BlockDiagonalMatrixType; typedef typename BlockDiagonalMatrixType::BuildingBlockType BuildingBlockType; typedef ParallelDensityMatrix ParallelDensityMatrixType; typedef PsimagLite::Parallelizer ParallelizerType; typedef typename TargetingType::VectorVectorVectorWithOffsetType VectorVectorVectorWithOffsetType; DensityMatrixLocal(const TargetingType& target, const LeftRightSuperType& lrs, const ParamsType& p) : progress_("DensityMatrixLocal"), data_((p.direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? lrs.left() : lrs.right()), direction_(p.direction), debug_(p.debug) { { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Init partition for all targets"; progress_.printline(msgg, std::cout); } const BasisWithOperatorsType& pBasis = (p.direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? lrs.left() : lrs.right(); const BasisWithOperatorsType& pBasisSummed = (p.direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? lrs.right() : lrs.left(); //loop over all partitions: for (SizeType m=0;m::Type& eigs,char jobz) { DiagBlockDiagMatrix::diagonalise(data_,eigs,jobz); } friend std::ostream& operator<<(std::ostream& os, const DensityMatrixLocal& dm) { for (SizeType m = 0; m < dm.data_.blocks(); ++m) { SizeType ne = dm.pBasis_.electrons(dm.pBasis_.partition(m)); os<<" ne="< class DensityMatrixSvd : public DensityMatrixBase { typedef DensityMatrixBase BaseType; typedef typename TargetingType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename TargetingType::LeftRightSuperType LeftRightSuperType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename TargetingType::VectorWithOffsetType VectorWithOffsetType; typedef typename BaseType::BuildingBlockType MatrixType; typedef PsimagLite::Matrix MatrixSizeType; typedef typename PsimagLite::Vector::Type VectorMatrixType; typedef PsimagLite::Concurrency ConcurrencyType; typedef PsimagLite::ProgressIndicator ProgressIndicatorType; typedef typename PsimagLite::Real::Type RealType; typedef typename BaseType::Params ParamsType; typedef GenIjPatch GenIjPatchType; typedef typename GenIjPatchType::VectorSizeType VectorSizeType; typedef typename BaseType::VectorRealType VectorRealType; typedef typename PsimagLite::Vector::Type VectorGenIjPatchType; typedef std::pair PairSizeType; typedef typename BaseType::BlockDiagonalMatrixType BlockDiagonalMatrixType; typedef typename BasisType::QnType QnType; typedef typename BasisWithOperatorsType::VectorQnType VectorQnType; typedef typename PsimagLite::Vector::Type VectorVectorRealType; typedef typename TargetingType::VectorVectorVectorWithOffsetType VectorVectorVectorWithOffsetType; class GroupsStruct { struct PropsOfGroup { PropsOfGroup(SizeType t, SizeType s, SizeType j) : target(t), sector(s), jgroup(j) {} SizeType target; SizeType sector; SizeType jgroup; SizeType offset; }; typedef typename PsimagLite::Vector::Type VectorPropsOfGroupType; public: GroupsStruct(const LeftRightSuperType& lrs, ProgramGlobals::DirectionEnum direction) : lrs_(lrs), direction_(direction), propsThisIgroup_(this->basis().partition()) {} ~GroupsStruct() { SizeType n = m_.size(); for (SizeType i = 0; i < n; ++i) { delete m_[i]; m_[i] = nullptr; } } void deleteMatrix(SizeType igroup) { SizeType index = groupIndex(igroup); assert(index < m_.size()); delete m_[index]; m_[index] = nullptr; } void push(SizeType igroup, SizeType jgroup, SizeType target, SizeType sector) { // have I seen this group before? typename VectorSizeType::iterator it = std::find(seenGroups_.begin(), seenGroups_.end(), igroup); if (it == seenGroups_.end()) { // No --> create group seenGroups_.push_back(igroup); // included repeted jgroups here assert(igroup < propsThisIgroup_.size()); propsThisIgroup_[igroup].push_back(PropsOfGroup(target, sector, jgroup)); } else { // Yes, add to group assert(igroup < propsThisIgroup_.size()); propsThisIgroup_[igroup].push_back(PropsOfGroup(target, sector, jgroup)); } } void finalize() { SizeType n = seenGroups_.size(); m_.resize(n, 0); for (SizeType i = 0; i < n; ++i) { SizeType igroup = seenGroups_[i]; SizeType offset = this->basis().partition(igroup); SizeType rows = this->basis().partition(igroup + 1) - offset; SizeType cols = 0; SizeType m = propsThisIgroup_[igroup].size(); for (SizeType j = 0; j < m; ++j) { SizeType jgroup = propsThisIgroup_[igroup][j].jgroup; SizeType joffset = this->basisPrime().partition(jgroup); SizeType jsize = this->basisPrime().partition(jgroup + 1) - joffset; propsThisIgroup_[igroup][j].offset = cols; cols += jsize; } m_[i] = new MatrixType(rows, cols); m_[i]->setTo(0.0); } } // TODO: Move matrix out MatrixType& matrix(SizeType igroup) { SizeType index = groupIndex(igroup); assert(index < m_.size()); assert(m_[index]); return *(m_[index]); } const BasisWithOperatorsType& basis() const { return (expandSys()) ? lrs_.left() : lrs_.right(); } const BasisWithOperatorsType& basisPrime() const { return (expandSys()) ? lrs_.right() : lrs_.left(); } SizeType groupFromIndex(SizeType index) const { assert(index < seenGroups_.size()); return seenGroups_[index]; } SizeType groupPrimeIndex(SizeType target, SizeType sector, SizeType igroup) const { SizeType m = propsThisIgroup_[igroup].size(); for (SizeType j = 0; j < m; ++j) { if (propsThisIgroup_[igroup][j].target == target && propsThisIgroup_[igroup][j].sector == sector) return propsThisIgroup_[igroup][j].jgroup; } throw PsimagLite::RuntimeError("GroupsStruct: groupPrimeIndex\n"); } SizeType additionalOffset(SizeType igroup, SizeType target, SizeType sector, SizeType jgroup) const { SizeType m = propsThisIgroup_[igroup].size(); for (SizeType j = 0; j < m; ++j) { if (propsThisIgroup_[igroup][j].target == target && propsThisIgroup_[igroup][j].sector == sector && propsThisIgroup_[igroup][j].jgroup == jgroup) return propsThisIgroup_[igroup][j].offset; } throw PsimagLite::RuntimeError("GroupsStruct: additionalOffset\n"); } SizeType size() const { return seenGroups_.size(); } bool expandSys() const { return (direction_ == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM); } private: SizeType groupIndex(SizeType igroup) const { typename VectorSizeType::const_iterator it = std::find(seenGroups_.begin(), seenGroups_.end(), igroup); assert(it != seenGroups_.end()); return it - seenGroups_.begin(); } const LeftRightSuperType& lrs_; ProgramGlobals::DirectionEnum direction_; VectorSizeType seenGroups_; typename PsimagLite::Vector::Type propsThisIgroup_; // TODO: Move matrix out VectorMatrixType m_; }; typedef GroupsStruct GroupsStructType; class ParallelPsiSplit { public: ParallelPsiSplit(const LeftRightSuperType& lrs, const GenIjPatchType& ijPatch, const VectorWithOffsetType& v, SizeType target, SizeType sector, RealType sqrtW, GroupsStructType& allTargets) : lrs_(lrs), ijPatch_(ijPatch), v_(v), target_(target), sector_(sector), sqrtW_(sqrtW), allTargets_(allTargets) {} void doTask(SizeType ipatch, SizeType) { SizeType igroup = ijPatch_(GenIjPatchType::LEFT)[ipatch]; SizeType jgroup = ijPatch_(GenIjPatchType::RIGHT)[ipatch]; bool expandSys = allTargets_.expandSys(); SizeType groupBig = (expandSys) ? igroup : jgroup; MatrixType& matrix = allTargets_.matrix(groupBig); SizeType m = v_.sector(sector_); SizeType offset = v_.offset(m); SizeType nl = lrs_.left().size(); SizeType rowOffset = allTargets_.basis().partition(groupBig); SizeType rows = allTargets_.basis().partition(groupBig + 1) - rowOffset; SizeType groupSmall = allTargets_.groupPrimeIndex(target_, sector_, groupBig); SizeType colOffset = allTargets_.basisPrime().partition(groupSmall); SizeType cols = allTargets_.basisPrime().partition(groupSmall + 1) - colOffset; SizeType additionalOffset = allTargets_.additionalOffset(groupBig, target_, sector_, groupSmall); for (SizeType ind = 0; ind < rows; ++ind) { for (SizeType jnd = 0; jnd < cols; ++jnd) { SizeType i = ind + rowOffset; SizeType j = jnd + colOffset; SizeType ij = (expandSys) ? i + j * nl : j + i*nl; assert(!expandSys || (i < nl && j < lrs_.right().size())); assert(expandSys || (j < nl && i < lrs_.right().size())); assert(ij < lrs_.super().permutationInverse().size()); SizeType r = lrs_.super().permutationInverse()[ij]; if (r < offset || r >= offset + v_.effectiveSize(m)) continue; matrix(ind, jnd + additionalOffset) += sqrtW_*v_.slowAccess(r); } } } SizeType tasks() const { return ijPatch_(GenIjPatchType::LEFT).size(); } private: const LeftRightSuperType& lrs_; const GenIjPatchType& ijPatch_; const VectorWithOffsetType& v_; SizeType target_; SizeType sector_; RealType sqrtW_; GroupsStructType& allTargets_; }; class ParallelSvd { public: typedef PersistentSvd::Type, VectorVectorRealType, VectorQnType> PersistentSvdType; ParallelSvd(BlockDiagonalMatrixType& blockDiagonalMatrix, GroupsStructType& allTargets, VectorRealType& eigs, PersistentSvdType& additionalStorage) : blockDiagonalMatrix_(blockDiagonalMatrix), allTargets_(allTargets), eigs_(eigs), persistentSvd_(additionalStorage) { SizeType oneSide = allTargets.basis().size(); eigs_.resize(oneSide); std::fill(eigs_.begin(), eigs_.end(), 0.0); } void doTask(SizeType ipatch, SizeType) { SizeType igroup = allTargets_.groupFromIndex(ipatch); MatrixType& m = allTargets_.matrix(igroup); MatrixType& vt = persistentSvd_.vts(igroup); VectorRealType& eigsOnePatch = persistentSvd_.s(igroup); PsimagLite::Svd svd; svd('A', m, eigsOnePatch, vt); persistentSvd_.qns(igroup) = allTargets_.basis().qnEx(igroup); const BasisType& basis = allTargets_.basis(); SizeType offset = basis.partition(igroup); SizeType partSize = basis.partition(igroup + 1) - offset; assert(m.rows() == partSize); assert(m.rows() == m.cols()); blockDiagonalMatrix_.setBlock(igroup, offset, m); // DO NOT USE m after this line allTargets_.deleteMatrix(igroup); SizeType x = eigsOnePatch.size(); if (x > partSize) x = partSize; assert(x + offset <= eigs_.size()); for (SizeType i = 0; i < x; ++i) eigs_[i + offset] = eigsOnePatch[i]*eigsOnePatch[i]; } SizeType tasks() const { return allTargets_.size(); } // needed for WFT const PersistentSvdType& additionalStorage() const { return persistentSvd_; } private: BlockDiagonalMatrixType& blockDiagonalMatrix_; GroupsStructType& allTargets_; VectorRealType& eigs_; PersistentSvdType persistentSvd_; }; public: DensityMatrixSvd(const TargetingType& target, const LeftRightSuperType& lrs, const ParamsType& p) : lrs_(lrs), params_(p), allTargets_(lrs, p.direction), data_(allTargets_.basis()), persistentSvd_(data_.blocks()) { PsimagLite::Profiling profiling("DensityMatrixSvdCtor", std::cout); typename GenIjPatchType::LeftOrRightEnumType dir1 = (p.direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? GenIjPatchType::LEFT : GenIjPatchType::RIGHT; typename GenIjPatchType::LeftOrRightEnumType dir2 = (p.direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? GenIjPatchType::RIGHT : GenIjPatchType::LEFT; typename PsimagLite::Vector::Type effectiveTargets; SizeType x = 0; SizeType psiTargets = 0; if (target.includeGroundStage()) { const VectorVectorVectorWithOffsetType& psi = target.psiConst(); const SizeType nsectors = psi.size(); for (SizeType sectorIndex = 0; sectorIndex < nsectors; ++sectorIndex) { const SizeType nexcited = psi[sectorIndex].size(); for (SizeType excitedIndex = 0; excitedIndex < nexcited; ++excitedIndex) { effectiveTargets.push_back(psi[sectorIndex][excitedIndex]); pushOneTarget(*(psi[sectorIndex][excitedIndex]), x++, dir1, dir2); ++psiTargets; } } } SizeType targets = target.size(); // Number of non-GS targets; for (SizeType i = 0; i < targets; ++i) { const VectorWithOffsetType& v = target(i); effectiveTargets.push_back(&v); pushOneTarget(v, x++, dir1, dir2); } allTargets_.finalize(); assert(effectiveTargets.size() == x); RealType sum = 0; for (SizeType x = 0; x < effectiveTargets.size(); ++x) { const VectorWithOffsetType& v = *effectiveTargets[x]; RealType weight = (x < psiTargets) ? target.gsWeight() : target.weight(x - psiTargets); RealType mynorm = norm(v); bool needsDeepCopy = (fabs(mynorm - 1) > 1e-4); if (needsDeepCopy) { VectorWithOffsetType* vNormalized = new VectorWithOffsetType(v); if (norm(*vNormalized)>0) normalize(*vNormalized); if (effectiveTargets.size()==1) weight=1.0; addThisTarget2(x, *vNormalized, sqrt(weight)); delete vNormalized; vNormalized = nullptr; } else { if (effectiveTargets.size()==1) weight=1.0; addThisTarget2(x, v, sqrt(weight)); } sum += weight; } assert(fabs(sum - 1) < 1e-3); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Found "< ParallelizerType; PsimagLite::CodeSectionParams csp = PsimagLite::Concurrency::codeSectionParams; if (params_.serialSvd) { csp.npthreads = 1; std::cout<<"DensityMatrixSvd: SerialSvd in force\n"; } ParallelizerType threaded(csp); ParallelSvd parallelSvd(data_, allTargets_, eigs, persistentSvd_); threaded.loopCreate(parallelSvd); for (SizeType i = 0; i < data_.blocks(); ++i) { SizeType n = data_(i).rows(); if (n > 0) continue; SizeType offset = allTargets_.basis().partition(i); SizeType part = allTargets_.basis().partition(i + 1) - offset; MatrixType m(part, part); m.setTo(0.0); for (SizeType j = 0; j < part; ++j) m(j, j) = 1.0; data_.setBlock(i, offset, m); } data_.enforcePhase(); if (!params_.enablePersistentSvd) persistentSvd_.clear(); } // needed for WFT const typename PsimagLite::Vector::Type& vts() const { return persistentSvd_.vts(); } // needed for WFT const VectorVectorRealType& s() const { return persistentSvd_.s(); } // needed for WFT const VectorQnType& qns() const { return persistentSvd_.qns(); } friend std::ostream& operator<<(std::ostream& os, const DensityMatrixSvd& dm) { for (SizeType m = 0; m < dm.data_.blocks(); ++m) { SizeType ne = dm.pBasis_.electrons(dm.pBasis_.partition(m)); os<<" ne="< ParallelizerType; ParallelizerType threaded(PsimagLite::Concurrency::codeSectionParams); ParallelPsiSplit parallelPsiSplit(lrs_, genIjPatch, v, x, sector, sqrtW, allTargets_); threaded.loopCreate(parallelPsiSplit); } } void pushOneTarget(const VectorWithOffsetType& v, SizeType x, typename GenIjPatchType::LeftOrRightEnumType dir1, typename GenIjPatchType::LeftOrRightEnumType dir2) { SizeType sectors = v.sectors(); for (SizeType sector = 0; sector < sectors; ++sector) { SizeType m = v.sector(sector); QnType qn = lrs_.super().qnEx(m); GenIjPatchType genIjPatch(lrs_, qn); const VectorSizeType& groups = genIjPatch(dir1); for (SizeType i = 0; i < groups.size(); ++i) { SizeType igroup = groups[i]; assert(genIjPatch(dir2).size() > i); SizeType jgroup = genIjPatch(dir2)[i]; allTargets_.push(igroup, jgroup, x, sector); } } } const LeftRightSuperType& lrs_; const ParamsType& params_; GroupsStructType allTargets_; BlockDiagonalMatrixType data_; typename ParallelSvd::PersistentSvdType persistentSvd_; }; // class DensityMatrixSvd } // namespace Dmrg #endif dmrgpp-6.02/src/Engine/DiagBlockDiagMatrix.h000066400000000000000000000053021414604301300206640ustar00rootroot00000000000000#ifndef DIAGBLOCKDIAGMATRIX_H #define DIAGBLOCKDIAGMATRIX_H #include "EnforcePhase.h" namespace Dmrg { template class DiagBlockDiagMatrix { typedef typename BlockDiagonalMatrixType::BuildingBlockType BuildingBlockType; typedef typename BuildingBlockType::value_type ComplexOrRealType; typedef typename BlockDiagonalMatrixType::VectorRealType VectorRealType; class LoopForDiag { typedef PsimagLite::Concurrency ConcurrencyType; public: LoopForDiag(BlockDiagonalMatrixType& C1, VectorRealType& eigs1, char option1) : C(C1), eigs(eigs1), option(option1), eigsForGather(C.blocks()), weights(C.blocks()) { for (SizeType m=0;m::Type eigsForGather; typename PsimagLite::Vector::Type weights; }; public: // Parallel version of the diagonalization of a block diagonal matrix // Note: In reality, Parallelization is disabled here because a LAPACK call // is needed and LAPACK is not necessarily thread safe. // This function is NOT called by useSvd static void diagonalise(BlockDiagonalMatrixType& C, VectorRealType& eigs, char option) { typedef PsimagLite::NoPthreadsNg ParallelizerType; typedef PsimagLite::Concurrency ConcurrencyType; SizeType savedNpthreads = ConcurrencyType::codeSectionParams.npthreads; ConcurrencyType::codeSectionParams.npthreads = 1; ParallelizerType threadObject(ConcurrencyType::codeSectionParams); LoopForDiag helper(C,eigs,option); threadObject.loopCreate(helper); // FIXME: needs weights helper.gather(); ConcurrencyType::codeSectionParams.npthreads = savedNpthreads; } }; // class DiagBlockDiagMatrix } // namespace Dmrg #endif // DIAGBLOCKDIAGMATRIX_H dmrgpp-6.02/src/Engine/Diagonalization.h000066400000000000000000000646371414604301300202270ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file Diagonalization.h * * FIXME needs doc */ #ifndef DIAGONALIZATION_HEADER_H #define DIAGONALIZATION_HEADER_H #include "ProgressIndicator.h" #include "VectorWithOffset.h" // includes the PsimagLite::norm functions #include "VectorWithOffsets.h" // includes the PsimagLite::norm functions #include "ProgramGlobals.h" #include "LanczosSolver.h" #include "DavidsonSolver.h" #include "ParametersForSolver.h" #include "Concurrency.h" #include "Profiling.h" #include "FiniteLoop.h" #include "PackIndices.h" #include "PredicateAwesome.h" namespace Dmrg { template class Diagonalization { public: typedef std::pair PairSizeType; typedef typename ParametersType::OptionsType OptionsType; typedef typename TargetingType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename TargetingType::ModelType ModelType; typedef typename TargetingType::BasisType BasisType; typedef typename TargetingType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename TargetingType::BlockType BlockType; typedef typename TargetingType::TargetVectorType TargetVectorType; typedef typename TargetingType::RealType RealType; typedef typename TargetingType::VectorWithOffsetType VectorWithOffsetType; typedef typename BasisType::QnType QnType; typedef typename ModelType::OperatorsType OperatorsType; typedef typename ModelType::HamiltonianConnectionType HamiltonianConnectionType; typedef typename OperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename TargetingType::MatrixVectorType MatrixVectorType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorVectorRealType; typedef PsimagLite::ParametersForSolver ParametersForSolverType; typedef PsimagLite::LanczosOrDavidsonBase LanczosOrDavidsonBaseType; typedef PsimagLite::DavidsonSolver DavidsonSolverType; typedef PsimagLite::LanczosSolver LanczosSolverType; typedef typename PsimagLite::Vector::Type VectorVectorType; typedef typename PsimagLite::Vector::Type VectorVectorVectorType; typedef FiniteLoop FiniteLoopType; Diagonalization(const ParametersType& parameters, const ModelType& model, const bool& verbose, InputValidatorType& io, const typename QnType::VectorQnType& quantumSector, WaveFunctionTransfType& waveFunctionTransformation, const VectorVectorRealType& oldEnergy) : parameters_(parameters), model_(model), verbose_(verbose), io_(io), progress_("Diag."), quantumSector_(quantumSector), wft_(waveFunctionTransformation), oldEnergy_(oldEnergy) {} //!PTEX_LABEL{Diagonalization} void operator()(TargetingType& target, VectorVectorRealType& energies, ProgramGlobals::DirectionEnum direction, const BlockType& blockLeft, const BlockType& blockRight) { PsimagLite::Profiling profiling("Diagonalization", std::cout); assert(direction == ProgramGlobals::DirectionEnum::INFINITE); SizeType loopIndex = 0; internalMain_(target, energies, direction, loopIndex, blockLeft); // targeting: target.evolve(energies[0], direction, blockLeft, blockRight, loopIndex); wft_.triggerOff(target.lrs()); } void operator()(TargetingType& target, VectorVectorRealType& energies, ProgramGlobals::DirectionEnum direction, const BlockType& block, SizeType loopIndex) { PsimagLite::Profiling profiling("Diagonalization", std::cout); assert(direction != ProgramGlobals::DirectionEnum::INFINITE); internalMain_(target, energies, direction, loopIndex, block); // targeting: target.evolve(energies[0], direction, block, block, loopIndex); wft_.triggerOff(target.lrs()); } private: SizeType targetedSymmetrySectors(VectorSizeType& mVector, VectorSizeType& compactedWeights, const LeftRightSuperType& lrs) const { const SizeType total = lrs.super().partition() - 1; SizeType sum = 0; const bool findSymmetrySector = (parameters_.findSymmetrySector != ""); for (SizeType j = 0; j < quantumSector_.size(); ++j) { for (SizeType i = 0; i < total; ++i) { if (j == 0 && verbose_) std::cerr< fullm2; crsMatrixToFullMatrix(fullm2,fullm); if (PsimagLite::isZero(fullm2)) std::cerr<<"Matrix is zero\n"; if (options.isSet("printmatrix")) printFullMatrix(fullm,"matrix",1); if (!isHermitian(fullm,true)) throw PsimagLite::RuntimeError("Not hermitian matrix block\n"); typename PsimagLite::Vector::Type eigs(fullm2.rows()); std::cerr<<"Diagonalizing full matrix of rank "< fm; lanczosHelper.fullDiag(eigs,fm); SizeType minExcited = std::min(energyTmp.size(), eigs.size()); for (SizeType excited = 0; excited < minExcited; ++excited) { for (SizeType j = 0; j < eigs.size(); ++j) tmpVec[excited][j] = fm(j, excited); energyTmp[excited] = eigs[excited]; PsimagLite::OstringStream msgg2(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg2 = msgg2(); msg2<<"Found eigenvalue["< 0); const RealType factor = 1.0/sqrt(sum); for (SizeType i = 0; i < bs; ++i) v[i] *= factor; } // FIXME TODO: Write two versions: an unscaled one and an scaled one bool passSymmetryConstraints(const QnType& qn, SizeType superSize, SizeType matrixSize) const { //const SizeType latticeSize = model_.superGeometry().numberOfSites(); PsimagLite::String predicate = parameters_.findSymmetrySector; const SizeType total = qn.other.size(); for (SizeType ind = 0; ind < total; ++ind) { const SizeType x = qn.other[ind]; PsimagLite::PredicateAwesome<>::replaceAll(predicate, "%" + ttos(ind), ttos(x)); } PsimagLite::PredicateAwesome<> pAwesome(predicate); const RealType superSizeReal = superSize; // conversion from SizeType to RealType const RealType matrixSizeReal = matrixSize; const RealType oddElectrons = (qn.oddElectrons) ? 1 : 0; return pAwesome.isTrue("n", superSizeReal, "m", matrixSizeReal, "e", oddElectrons); } const ParametersType& parameters_; const ModelType& model_; const bool& verbose_; InputValidatorType& io_; PsimagLite::ProgressIndicator progress_; // quantumSector_ needs to be a reference since DmrgSolver will change it const typename QnType::VectorQnType& quantumSector_; WaveFunctionTransfType& wft_; VectorVectorRealType oldEnergy_; }; // class Diagonalization } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/DiskOrMemoryStack.h000066400000000000000000000075041414604301300204530ustar00rootroot00000000000000#ifndef DISKORMEMORYSTACK_H #define DISKORMEMORYSTACK_H #include "Stack.h" #include "DiskStackNg.h" #include "Io/IoNg.h" namespace Dmrg { template class DiskOrMemoryStack { public: typedef typename PsimagLite::Stack::Type MemoryStackType; typedef DiskStack DiskStackType; DiskOrMemoryStack(bool onDisk, const PsimagLite::String filename, const PsimagLite::String post, PsimagLite::String label, bool isObserveCode) : isObserveCode_(isObserveCode), diskW_(0), diskR_(0) { if (!onDisk) return; size_t lastindex = filename.find_last_of("."); PsimagLite::String file = filename.substr(0, lastindex) + post + ".hd5"; if (createFile_) { PsimagLite::IoNg::Out out(file, PsimagLite::IoNg::ACC_TRUNC); out.close(); createFile_ = false; } diskW_ = new DiskStackType(file, false, label, isObserveCode); diskR_ = new DiskStackType(file, true, label, isObserveCode); } ~DiskOrMemoryStack() { delete diskR_; diskR_ = 0; delete diskW_; diskW_ = 0; } void push(const BasisWithOperatorsType& b) { if (diskW_) { diskW_->push(b); diskW_->flush(); diskR_->restore(diskW_->size()); } else { memory_.push(b); } } void pop() { if (diskW_) { diskW_->pop(); diskW_->flush(); diskR_->restore(diskW_->size()); } else { memory_.pop(); } } bool onDisk() const { return (diskR_); } SizeType size() const { return (diskR_) ? diskR_->size() : memory_.size(); } const BasisWithOperatorsType& top() const { return (diskR_) ? diskR_->top() : memory_.top(); } void toDisk(DiskStackType& disk) const { if (diskR_) { SizeType total = diskR_->size(); DiskStackType& diskNonConst = const_cast(*diskR_); loadStack(disk, diskNonConst); assert(diskW_); diskW_->restore(total); diskR_->restore(total); } else { MemoryStackType memory = memory_; loadStack(disk, memory); } } void read(PsimagLite::String prefix, PsimagLite::IoNgSerializer& io) { if (diskW_) { assert(diskR_); readWftStacksOnDisk(prefix, io); } io.read(memory_, prefix); } void write(PsimagLite::String prefix, PsimagLite::IoNgSerializer& io) const { if (diskW_) { assert(diskR_); const SizeType total = diskR_->size(); writeWftStacksOnDisk(prefix, io); diskR_->restore(total); diskW_->restore(total); return; } MemoryStackType m = memory_; io.write(prefix, m); } template static void loadStack(StackType1& stackInMemory, StackType2& stackInDisk) { while (stackInDisk.size()>0) { BasisWithOperatorsType b = stackInDisk.top(); stackInMemory.push(b); stackInDisk.pop(); } } static bool createFile_; private: void writeWftStacksOnDisk(PsimagLite::String name, PsimagLite::IoNgSerializer& io) const { io.createGroup(name); io.write(name + "/Size", this->size()); SizeType i = 0; while (this->size() > 0) { const BasisWithOperatorsType& t = this->top(); t.write(name + "/" + ttos(i++), io); DiskOrMemoryStack& thisObject = const_cast(*this); thisObject.pop(); } } void readWftStacksOnDisk(PsimagLite::String name, PsimagLite::IoNgSerializer& io) { SizeType x = 0; io.read(x, name + "/Size"); for (SizeType i = 0; i < x; ++i) { BasisWithOperatorsType t; t.read(name + "/" + ttos(x - i - 1), io); this->push(t); } } DiskOrMemoryStack(const DiskOrMemoryStack&); DiskOrMemoryStack& operator=(const DiskOrMemoryStack&); bool isObserveCode_; mutable MemoryStackType memory_; DiskStackType *diskW_; DiskStackType *diskR_; }; template bool DiskOrMemoryStack::createFile_ = true; } #endif // DISKORMEMORYSTACK_H dmrgpp-6.02/src/Engine/DiskStackNg.h000066400000000000000000000130101414604301300172330ustar00rootroot00000000000000/* Copyright (c) 2009-2015-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ #ifndef DISKSTACK_NG_H #define DISKSTACK_NG_H // All these includes are in PsimagLite #include "Stack.h" #include "Io/IoNg.h" #include "ProgressIndicator.h" #include // A disk stack, similar to std::stack but stores in disk not in memory namespace Dmrg { template class DiskStack { typedef typename PsimagLite::IoNg::In IoInType; typedef typename PsimagLite::IoNg::Out IoOutType; public: DiskStack(const PsimagLite::String filename, bool needsToRead, PsimagLite::String label, bool isObserveCode) : ioOut_((needsToRead) ? 0 : new IoOutType(filename, PsimagLite::IoNg::ACC_RDW)), ioIn_((needsToRead) ? new IoInType(filename) : 0), label_("DiskStack" + label), isObserveCode_(isObserveCode), total_(0), progress_("DiskStack"), dt_(0) { if (!needsToRead) { ioOut_->createGroup(label_); ioOut_->write(total_, label_ + "/Size"); return; } ioIn_->read(total_, label_ + "/Size"); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Read from file " + filename + " succeeded"; progress_.printline(msgg, std::cout); } ~DiskStack() { delete dt_; dt_ = 0; delete ioIn_; ioIn_ = 0; delete ioOut_; ioOut_ = 0; } void flush() { assert(ioOut_); ioOut_->flush(); } bool inDisk() const { return true; } void push(const DataType& d) { assert(ioOut_); try { d.write(*ioOut_, label_ + "/" + ttos(total_), IoOutType::Serializer::NO_OVERWRITE, DataType::SaveEnum::ALL); } catch (...) { d.write(*ioOut_, label_ + "/" + ttos(total_), IoOutType::Serializer::ALLOW_OVERWRITE, DataType::SaveEnum::ALL); } ++total_; ioOut_->write(total_, label_ + "/Size", IoOutType::Serializer::ALLOW_OVERWRITE); } void pop() { if (total_ == 0) err("Can't pop; the stack is empty!\n"); --total_; if (!ioOut_) return; ioOut_->write(total_, label_ + "/Size", IoOutType::Serializer::ALLOW_OVERWRITE); } void restore(SizeType total) { total_ = total; if (!ioOut_) return; ioOut_->write(total_, label_ + "/Size", IoOutType::Serializer::ALLOW_OVERWRITE); } const DataType& top() const { if (!ioIn_) err("DiskStack::top() called with ioIn_ as nullptr\n"); assert(total_ > 0); delete dt_; dt_ = 0; dt_ = new DataType(*ioIn_, label_ + "/" + ttos(total_ - 1), isObserveCode_); return *dt_; } SizeType size() const { return total_; } private: DiskStack(const DiskStack&); DiskStack& operator=(const DiskStack&); IoOutType* ioOut_; IoInType* ioIn_; PsimagLite::String label_; bool isObserveCode_; int total_; PsimagLite::ProgressIndicator progress_; mutable DataType* dt_; }; // class DiskStack } // namespace Dmrg #endif dmrgpp-6.02/src/Engine/DmrgRunner.h000066400000000000000000000116241414604301300171620ustar00rootroot00000000000000#ifndef DMRGRUNNER_H #define DMRGRUNNER_H #include "CrsMatrix.h" #include "InputCheck.h" #include "Qn.h" #include "ProgramGlobals.h" #include "SuperGeometry.h" #include "ParametersDmrgSolver.h" #include "ModelSelector.h" #include "ModelHelperLocal.h" #include "MatrixVectorKron/MatrixVectorKron.h" #include "MatrixVectorOnTheFly.h" #include "MatrixVectorStored.h" #include "LeftRightSuper.h" #include "BasisWithOperators.h" #include "DmrgSolver.h" #include "VectorWithOffset.h" #include "PsimagLite.h" namespace Dmrg { template class DmrgRunner { public: typedef typename PsimagLite::Real::Type RealType; typedef PsimagLite::InputNg InputNgType; typedef Dmrg::ParametersDmrgSolver ParametersDmrgSolverType; typedef Dmrg::SuperGeometry SuperGeometryType; typedef Dmrg::VectorWithOffset VectorWithOffsetType; typedef PsimagLite::PsiApp ApplicationType; DmrgRunner(RealType precision, const ApplicationType& application) : precision_(precision), application_(application) {} void doOneRun(PsimagLite::String data, PsimagLite::String insitu, PsimagLite::String logfile) const { typedef PsimagLite::CrsMatrix MySparseMatrixComplex; typedef Dmrg::Basis BasisType; typedef Dmrg::BasisWithOperators BasisWithOperatorsType; typedef Dmrg::LeftRightSuper LeftRightSuperType; typedef Dmrg::ModelHelperLocal ModelHelperType; typedef Dmrg::ModelBase ModelBaseType; std::streambuf* globalCoutBuffer = 0; std::ofstream globalCoutStream; if (logfile != "-") { globalCoutBuffer = std::cout.rdbuf(); //save old buf globalCoutStream.open(logfile.c_str(), std::ofstream::out); if (!globalCoutStream || globalCoutStream.bad() || !globalCoutStream.good()) { PsimagLite::String str(application_.name()); str += ": Could not redirect std::cout to " + logfile + "\n"; err(str); } std::cout.rdbuf(globalCoutStream.rdbuf()); //redirect std::cout to file printOutputChange(logfile, data); } Dmrg::InputCheck inputCheck; InputNgType::Writeable ioWriteable(inputCheck, data); InputNgType::Readable io(ioWriteable); ParametersDmrgSolverType dmrgSolverParams(io, "", false); if (dmrgSolverParams.options.isSet("hd5DontPrint")) PsimagLite::IoNg::dontPrintDebug(); if (precision_ > 0) dmrgSolverParams.precision = precision_; dmrgSolverParams.insitu = insitu; if (dmrgSolverParams.options.isSet("MatrixVectorStored")) { doOneRun2 >(dmrgSolverParams, io); } else if (dmrgSolverParams.options.isSet("MatrixVectorOnTheFly")) { doOneRun2 >(dmrgSolverParams, io); } else { doOneRun2 >(dmrgSolverParams, io); } if (logfile == "-" || globalCoutBuffer == 0) return; globalCoutStream.close(); std::cout.rdbuf(globalCoutBuffer); } void printOutputChange(PsimagLite::String logfile, PsimagLite::String data) const { std::cerr< void doOneRun2(const ParametersDmrgSolverType& dmrgSolverParams, InputNgType::Readable& io) const { SuperGeometryType geometry(io); if (dmrgSolverParams.options.isSet("printgeometry")) std::cout< ParametersForSolverType; typedef PsimagLite::LanczosSolver SolverType; typedef typename SolverType::MatrixType::ModelType ModelBaseType; //! Setup the Model Dmrg::ModelSelector modelSelector(dmrgSolverParams.model); ModelBaseType& model = modelSelector(dmrgSolverParams, io, geometry); //! Setup the dmrg solver: (vectorwithoffset.h only): typedef Dmrg::DmrgSolver DmrgSolverType; DmrgSolverType dmrgSolver(model,io); //! Calculate observables: dmrgSolver.main(geometry); std::cout.flush(); } static void echoBase64(std::ostream& os, const PsimagLite::String& str) { os<<"ImpuritySolver::echoBase64: Echo of [[data]] in base64\n"; PsimagLite::PsiBase64::Encode base64(str); os< class DmrgSerializer { typedef DmrgSerializer ThisType; typedef typename LeftRightSuperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef PsimagLite::Matrix MatrixType; public: typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisType::VectorQnType VectorQnType; typedef typename BasisType::VectorSizeType VectorSizeType; typedef FermionSign FermionSignType; typedef typename BasisType::RealType RealType; typedef BlockDiagonalMatrix BlockDiagonalMatrixType; typedef BlockOffDiagMatrix BlockOffDiagMatrixType; typedef typename PsimagLite::Vector::Type>::Type VectorVectorVectorWithOffsetType; DmrgSerializer(const FermionSignType& fS, const FermionSignType& fE, const LeftRightSuperType& lrs, const VectorVectorVectorWithOffsetType& wf, const BlockDiagonalMatrixType& transform, ProgramGlobals::DirectionEnum direction) : fS_(fS), fE_(fE), wavefunction_(wf), ownWf_(false), transform_(transform), direction_(direction) { lrs_ = new LeftRightSuperType(lrs); } // used only by IoNg: template DmrgSerializer(IoInputType& io, PsimagLite::String prefix, bool bogus, bool isObserveCode, bool readOnDemand, typename PsimagLite::EnableIf< PsimagLite::IsInputLike::True, int>::Type = 0) : fS_(io, prefix + "/fS", bogus), fE_(io, prefix + "/fE", bogus), lrs_(new LeftRightSuperType(io, prefix, isObserveCode)), ownWf_(true), transform_(io, prefix + "/transform", readOnDemand) { if (bogus) return; try { SizeType nsectors = 0; io.read(nsectors, prefix + "/WaveFunction/Size"); wavefunction_.resize(nsectors); for (SizeType i = 0; i < nsectors; ++i) { SizeType nexcited = 0; io.read(nexcited, prefix + "/WaveFunction/" + ttos(i) + "/Size"); wavefunction_[i].resize(nexcited); for (SizeType j = 0; j < nexcited; ++j) { wavefunction_[i][j] = new VectorWithOffsetType; wavefunction_[i][j]->read(io, prefix + "/WaveFunction/" + ttos(i) + "/" + ttos(j)); } } } catch (...) { wavefunction_.resize(1); wavefunction_[0].resize(1); wavefunction_[0][0] = new VectorWithOffsetType; wavefunction_[0][0]->read(io, prefix + "/WaveFunction"); std::cerr<<"WARNING: Outdated branch of execution?!\n"; } io.read(direction_, prefix + "/direction"); } ~DmrgSerializer() { freeLrs(); if (!ownWf_) return; // <<--- EARLY EXIT HERE const SizeType nsectors = wavefunction_.size(); for (SizeType i = 0; i < nsectors; ++i) { const SizeType nexcited = wavefunction_[i].size(); for (SizeType j = 0; j < nexcited; ++j) { delete wavefunction_[i][j]; wavefunction_[i][j] = nullptr; } } } void freeLrs() { delete lrs_; lrs_ = nullptr; } template void write(SomeIoOutType& io, PsimagLite::String prefix, typename BasisWithOperatorsType::SaveEnum option, SizeType numberOfSites, SizeType counter, typename PsimagLite::EnableIf< PsimagLite::IsOutputLike::True, int>::Type = 0) const { if (counter == 0) io.createGroup(prefix); io.write(counter + 1, prefix + "/Size", (counter == 0) ? SomeIoOutType::Serializer::NO_OVERWRITE : SomeIoOutType::Serializer::ALLOW_OVERWRITE); prefix += ("/" + ttos(counter)); io.createGroup(prefix); fS_.write(io, prefix + "/fS"); fE_.write(io, prefix + "/fE"); assert(lrs_); bool minimizeWrite = (lrs_->super().block().size() == numberOfSites); lrs_->write(io, prefix, option, minimizeWrite); io.createGroup(prefix + "/WaveFunction"); const SizeType nsectors = wavefunction_.size(); io.write(nsectors, prefix + "/WaveFunction/Size"); for (SizeType i = 0; i < nsectors; ++i) { const SizeType nexcited = wavefunction_[i].size(); io.createGroup(prefix + "/WaveFunction/" + ttos(i)); io.write(nexcited, prefix + "/WaveFunction/" + ttos(i) + "/Size"); for (SizeType j = 0; j < nexcited; ++j) wavefunction_[i][j]->write(io, prefix + "/WaveFunction/" + ttos(i) + "/" + ttos(j)); } transform_.write(prefix + "/transform", io); io.write(direction_, prefix + "/direction"); } const FermionSignType& fermionicSignLeft() const { return fS_; } const FermionSignType& fermionicSignRight() const { return fE_; } const LeftRightSuperType& leftRightSuper() const { assert(lrs_); return *lrs_; } const VectorWithOffsetType& psiConst(SizeType sectorIndex, SizeType levelIndex) const { if (sectorIndex >= wavefunction_.size()) err(PsimagLite::String(__FILE__) + "::wavefunction(): sectorIndex = " + ttos(sectorIndex) + ">=" + ttos(wavefunction_.size()) + "\n"); if (levelIndex >= wavefunction_[sectorIndex].size()) err(PsimagLite::String(__FILE__) + "::wavefunction(): levelIndex = " + ttos(levelIndex) + ">=" + ttos(wavefunction_[sectorIndex].size()) + "\n"); return *(wavefunction_[sectorIndex][levelIndex]); } SizeType cols() const { return transform_.cols(); } SizeType rows() const { return transform_.rows(); } ProgramGlobals::DirectionEnum direction() const { return direction_; } SizeType site() const { assert(lrs_); return (direction_ == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? lrs_->right().block()[0] - 1 : lrs_->right().block()[0]; } void transform(SparseMatrixType& ret, const SparseMatrixType& O) const { transform(ret, O, transform_); } static void transform(SparseMatrixType& ret, const SparseMatrixType& O, const BlockDiagonalMatrixType& transformExternal) { BlockOffDiagMatrixType m(O, transformExternal.offsetsRows()); static const SizeType gemmRnb = 0; // disable GemmR static const SizeType threadsForGemmR = 1; // disable GemmR parallel m.transform(transformExternal, gemmRnb, threadsForGemmR); m.toSparse(ret); } SizeType centerOfOrthogonality() const { assert(lrs_); SizeType max = lrs_->left().block().size(); assert(max > 0); const SizeType site = lrs_->left().block()[max - 1]; return (direction_ == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? site : site + 1; } private: void fillOffsets(VectorSizeType& v, const BasisType& basis) const { SizeType n = basis.partition(); if (n == 0) return; v.resize(n); for (SizeType i = 0; i < n; ++i) v[i] = basis.partition(i); } // Disallowing copy and assignment here: DmrgSerializer(const ThisType& ds); ThisType& operator=(const ThisType& ds); FermionSignType fS_; FermionSignType fE_; LeftRightSuperType* lrs_; VectorVectorVectorWithOffsetType wavefunction_; bool ownWf_; BlockDiagonalMatrixType transform_; ProgramGlobals::DirectionEnum direction_; }; // class DmrgSerializer } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/DmrgSolver.h000066400000000000000000000652731414604301300171740ustar00rootroot00000000000000/* Copyright (c) 2009-2017, UT-Battelle, LLC All rights reserved [DMRG++, Version 4.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file DmrgSolver.h * * A class to represent a generic solver for the Dmrg method * */ #ifndef SOLVER_DMRG_HEADER_H #define SOLVER_DMRG_HEADER_H #include "ApplicationInfo.h" #include "ParametersDmrgSolver.h" #include "Diagonalization.h" #include "ProgressIndicator.h" #include "DmrgSerializer.h" #include "Recovery.h" #include "Truncation.h" #include "ObservablesInSitu.h" #include "TargetSelector.h" #include "PsiBase64.h" #include "PrinterInDetail.h" #include "OutputFileOrNot.h" #include "TargetingBase.h" #include "OneSiteTruncation.h" namespace Dmrg { // A class to represent a generic solver for the Dmrg method template class DmrgSolver { public: typedef TargetingBase TargetingType; typedef typename TargetingType::ModelType ModelType; typedef VectorWithOffsetType_ VectorWithOffsetType; typedef typename ModelType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef ObservablesInSitu ObservablesInSituType; typedef PsimagLite::Vector::Type VectorStringType; typedef typename OperatorsType::SparseMatrixType SparseMatrixType; typedef typename ModelType::MyBasis MyBasis; typedef typename MyBasis::RealType RealType; typedef typename MyBasis::BlockType BlockType; typedef typename ModelType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelType::ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename TargetingType::TargetVectorType TargetVectorType; typedef typename TargetVectorType::value_type ComplexOrRealType; typedef typename TargetingType::TargetParamsType TargetParamsType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename ModelType::SolverParamsType ParametersType; typedef Diagonalization DiagonalizationType; typedef typename TargetingType::WaveFunctionTransfType WaveFunctionTransfType; typedef Truncation TruncationType; typedef DmrgSerializer DmrgSerializerType; typedef typename ModelType::SuperGeometryType SuperGeometryType; typedef Checkpoint CheckpointType; typedef Recovery RecoveryType; typedef typename DmrgSerializerType::FermionSignType FermionSignType; typedef typename PsimagLite::Vector::Type VectorBlockType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename TargetingType::LanczosSolverType LanczosSolverType; typedef PrinterInDetail PrinterInDetailType; typedef typename DiagonalizationType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BlockDiagonalMatrixType BlockDiagonalMatrixType; typedef typename BasisWithOperatorsType::QnType QnType; typedef typename QnType::PairSizeType PairSizeType; typedef typename DiagonalizationType::VectorRealType VectorRealType; typedef typename DiagonalizationType::VectorVectorRealType VectorVectorRealType; typedef typename TargetingType::VectorVectorVectorWithOffsetType VectorVectorVectorWithOffsetType; typedef OneSiteTruncation OneSiteTruncationType; DmrgSolver(ModelType& model, InputValidatorType& ioIn) : model_(model), parameters_(model_.params()), ioIn_(ioIn), appInfo_("DmrgSolver:"), verbose_(parameters_.options.isSet("verbose")), lrs_("pSprime", "pEprime", "pSE"), ioOut_(parameters_.filename, PsimagLite::IoSelector::ACC_TRUNC, parameters_.options.isSet("minimizeDisk")), progress_("DmrgSolver"), stepCurrent_(0), checkpoint_(parameters_, ioIn, model, quantumSector_.size(), false), wft_(parameters_, model.hilbertSize(0)), diagonalization_(parameters_, model, verbose_, ioIn, quantumSector_, wft_, checkpoint_.energies()), truncate_(lrs_, wft_, parameters_, model.superGeometry(), ioOut_), saveData_(!parameters_.options.isSet("noSaveData")), oneSiteTruncation_(lrs_, model, ioIn, ioOut_) { firstCall_ = true; counter_ = 0; std::cout<::True, "IsComplex"); const SizeType n = model_.targetQuantum().size(); for (SizeType i = 0; i < n; ++i) quantumSector_.push_back(model_.targetQuantum().qn(i)); } ~DmrgSolver() { SizeType site = 0; // FIXME FOR IMMM typename BasisWithOperatorsType::VectorBoolType oddElectrons; model_.findOddElectronsOfOneSite(oddElectrons, site); ioOut_.write(oddElectrons, "OddElectronsOneSite"); appInfo_.finalize(); ioOut_.write(appInfo_, "ApplicationInfo"); ioOut_.close(); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Turning off the engine."; progress_.printline(msgg, std::cout); } void main(const SuperGeometryType& geometry) { ioOut_.write(geometry, "GEOMETRY"); BlockType S,E; VectorBlockType X,Y; const bool allInSystem = (parameters_.options.isSet("geometryallinsystem")); geometry.split(parameters_.sitesPerBlock,S,X,Y,E,allInSystem); for (SizeType i=0;i targetSelector(lrs_, model_, wft_, quantumSector_, ioIn_); TargetingType& psi = targetSelector(); ioIn_.printUnused(std::cerr); MyBasisWithOperators pS("BasisWithOperators.System"); MyBasisWithOperators pE("BasisWithOperators.Environ"); if (checkpoint_.isRestart()) { PsimagLite::IoSelector::In io(parameters_.checkpoint.filename()); checkpoint_.read(pS, pE, false); psi.read(io, "FinalPsi"); } else { // move this block elsewhere: RealType time = 0; pE.setOneSite(E, model_, time); pS.setOneSite(S, model_, time); infiniteDmrgLoop(X,Y,E,pS,pE,psi); } RecoveryType recovery(sitesIndices_, checkpoint_, wft_, pS, pE); finiteDmrgLoops(pS, pE, psi, recovery); inSitu_.init(psi,geometry.numberOfSites()); } const ComplexOrRealType& inSitu(SizeType i) const { return inSitu_(i); } private: /* PSIDOC DmrgSolverInfiniteDmrgLoop I shall give a procedural description of the DMRG method in the following. We start with an initial block $S$ (the initial system) and $E$ (the initial environment). Consider two sets of blocks $X$ and $Y$. We will be adding blocks from $X$ to $S$, one at a time, and from $Y$ to $E$, one at a time. Again, note that $X$ and $Y$ are sets of blocks whereas $S$ and $E$ are blocks. This is shown schematically in Fig.~\ref{fig:sxye}. All sites in $S$, $X$, $Y$ and $E$ are numbered as shown in the figure. \begin{figure} \caption{Labeling of blocks for the DMRG procedure. Blocks from vector of blocks X are added one at a time to block $S$ to form the system and blocks from vector of blocks Y are added one at a time to E to form the environment. Blocks are vectors of integers. The integers (numbers at the top of the figure) label all sites in a fixed and unique way.\label{fig:sxye}} \end{figure} Now we start a loop for the DMRG ``infinite'' algorithm by setting $step=0$ and $\mathcal{V}_R(S)\equiv\mathcal{V}(S)$ and $\mathcal{V}_R(E)\equiv\mathcal{V}(E)$. The system is grown by adding the sites in $X_{step}$ to it, and let $S'=S\cup X_{step}$, i.e. the $step$-th block of $X$ to $S$ is added to form the block $S'$; likewise, let $E'=E\cup Y_{step}$. Let us form the following product Hilbert spaces: $\mathcal{V}(S')=\mathcal{V}_R(S)\otimes \mathcal{V}(X_{step})$ and $\mathcal{V}(E')=\mathcal{V}_R(E)\otimes \mathcal{V}(Y_{step})$ and their union $\mathcal{V}(S')\otimes\mathcal{V}(E')$ which is disjoint. Consider $\hat{H}_{S'\cup E'}$, the Hamiltonian operator, acting on $\mathcal{V}(S')\otimes\mathcal{V}(E')$. Using Lanczos\ref{sec:lanczos}, we diagonalize $\hat{H}_{S'\cup E'}$ to obtain its lowest eigenvector: \begin{equation} |\psi\rangle = \sum_{\alpha\in \mathcal{V}(S'), \beta\in\mathcal{V}(E')}\psi_{\alpha,\beta}|\alpha\rangle\otimes|\beta\rangle, \label{eq:psi} \end{equation} where $\{|\alpha\rangle\}$ is a basis of $\mathcal{V}(S')$ and $\{|\beta\rangle\}$ is a basis of $\mathcal{V}(E')$. We proceed in the same way for the environment, diagonalize $\hat{\rho}_E$ to obtain ordered eigenvectors $w^E$, and define $(H^{ E' {\rm new\,\,basis}})_{\alpha,\alpha'}$. Now we set $S\leftarrow S'$, $\mathcal{V}_R(S)\leftarrow\mathcal{V}_R(S')$, $H_{S'}\leftarrow H_{S}$, and similarly for the environment, increase step by one, and continue with the growth phase of the algorithm. */ void infiniteDmrgLoop(const VectorBlockType& X, const VectorBlockType& Y, BlockType const &E, MyBasisWithOperators &pS, MyBasisWithOperators &pE, TargetingType& psi) { bool twoSiteDmrg = parameters_.options.isSet("twositedmrg"); bool extendedPrint = parameters_.options.isSet("extendedPrint"); PrinterInDetailType printerInDetail(lrs_, extendedPrint); lrs_.left(pS); lrs_.right(pE); checkpoint_.push(pS,pE); const SizeType ten = 10; const SizeType initialSizeOfHashTable = std::max(ten, parameters_.keptStatesInfinite); RealType time = 0; // no time advancement possible in the infiniteDmrgLoop VectorVectorRealType energies; for (SizeType step=0;step 0) { int signPrev = parameters_.finiteLoop[i - 1].stepLength(); int signThis = parameters_.finiteLoop[i].stepLength(); int sign = signPrev*signThis; if (sign > 0) { if (parameters_.finiteLoop[i].stepLength() > 0) stepCurrent_++; if (parameters_.finiteLoop[i].stepLength() < 0) stepCurrent_--; } else { // has bounced checkForWft((signThis > 0) ? ProgramGlobals::SysOrEnvEnum::SYSTEM : ProgramGlobals::SysOrEnvEnum::ENVIRON, pS); } } const SizeType wantsOneSiteTrunc = (parameters_.finiteLoop[i].wantsOneSiteTruncation()) ? 1 : 0; model_.announce("finite loop;" + ttos(wantsOneSiteTrunc)); finiteStep(pS, pE, i, psi); if (psi.end()) break; if (recovery.byLoop(i)) recovery.write(psi, i + 1, stepCurrent_, lastSign, ioOut_, ioIn_.data()); } if (!saveData_) return; //<<== EARLY EXIT HERE if (!ioOut_.nonNull()) return; //<<== EARLY EXIT HERE checkpoint_.write(pS, pE, ioOut_.handle()); ioOut_.createGroup("FinalPsi"); psi.write(sitesIndices_[stepCurrent_], ioOut_.handle(), "FinalPsi"); ioOut_.write(lastSign, "LastLoopSign"); } void checkForWft(ProgramGlobals::SysOrEnvEnum what, const MyBasis& pS) const { SizeType numberOfSites = model_.superGeometry().numberOfSites(); assert(numberOfSites > 2); SizeType last = pS.block().size(); assert(last > 0); SizeType lastSiteOfSystem = pS.block()[--last]; PsimagLite::String lOrR = ""; if (what == ProgramGlobals::SysOrEnvEnum::SYSTEM && lastSiteOfSystem != 0) lOrR = "right"; if (what == ProgramGlobals::SysOrEnvEnum::ENVIRON && lastSiteOfSystem != numberOfSites - 2) lOrR = "left"; if (lOrR == "") return; PsimagLite::String msg = "WARNING: To-the-" + lOrR; msg += " movement from middle of lattice not supported\n"; std::cout<(stepCurrent_) >= sitesIndices_.size()) err("stepCurrent_ too large!\n"); RealType time = target.time(); SizeType oneSiteTruncSize = 0; printerInDetail.print(std::cout, "finite"); if (direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) { oneSiteTruncSize = lrs_.growLeftBlock(model_, pS, sitesIndices_[stepCurrent_], time); BasisWithOperatorsType* dummyBwo = &checkpoint_.shrink(ProgramGlobals::SysOrEnvEnum::ENVIRON); target.updateOnSiteForCorners(*dummyBwo); // <-- only updates extreme sites lrs_.right(*dummyBwo); } else { oneSiteTruncSize = lrs_.growRightBlock(model_, pE, sitesIndices_[stepCurrent_], time); BasisWithOperatorsType* dummyBwo = &checkpoint_.shrink(ProgramGlobals::SysOrEnvEnum::SYSTEM); target.updateOnSiteForCorners(*dummyBwo); // <-- only updates extreme sites lrs_.left(*dummyBwo); } lrs_.printSizes("finite",std::cout); model_.targetQuantum().updateQuantumSector(quantumSector_, lrs_.sites(), direction, stepCurrent_, parameters_.adjustQuantumNumbers); assert(0 < quantumSector_.size()); // used only for SU(2) lrs_.setToProduct(initialSizeOfHashTable); diagonalization_(target, energies, direction, sitesIndices_[stepCurrent_], loopIndex); printEnergies(energies); assert(target.psiConst().size() > 0 || oneSiteTruncSize == 0); // METTS may not have a g.s. if (target.psiConst().size() > 0) { assert(target.psiConst()[0].size() > 0); oneSiteTruncation_.update(oneSiteTruncSize, *(target.psiConst()[0][0]), direction); } changeTruncateAndSerialize(pS,pE,target,keptStates,direction,loopIndex); if (finalStep(stepLength, stepFinal)) break; if (stepCurrent_ < 0) err("DmrgSolver::finiteStep() currentStep_ is negative\n"); progress_.printMemoryUsage(); if (target.end()) break; } if (direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) pE = lrs_.right(); else pS = lrs_.left(); } void changeTruncateAndSerialize(MyBasisWithOperators& pS, MyBasisWithOperators& pE, const TargetingType& target, SizeType keptStates, ProgramGlobals::DirectionEnum direction, SizeType loopIndex) { const bool twoSiteDmrg = parameters_.options.isSet("twositedmrg"); FermionSignType fsS(pS.signs()); FermionSignType fsE(pE.signs()); truncate_.changeBasisFinite(pS, pE, target, keptStates, direction); if (direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) checkpoint_.push((twoSiteDmrg) ? lrs_.left() : pS, ProgramGlobals::SysOrEnvEnum::SYSTEM); else checkpoint_.push((twoSiteDmrg) ? lrs_.right() : pE, ProgramGlobals::SysOrEnvEnum::ENVIRON); write(fsS,fsE,target,direction,loopIndex); } void write(const FermionSignType& fsS, const FermionSignType& fsE, const TargetingType& target, ProgramGlobals::DirectionEnum direction, SizeType loopIndex) { if (!saveData_) return; const FiniteLoop& finiteLoop = parameters_.finiteLoop[loopIndex]; if (!finiteLoop.wantsSave() && !finiteLoop.wantsMultiSitePush()) return; const BlockDiagonalMatrixType& transform = truncate_.transform(direction); // FIXME: Serializer will for now save only one psi target const VectorVectorVectorWithOffsetType& psi = target.psiConst(); if (psi.size() == 0) err("No psi targets?\n"); if (psi[0].size() == 0) err("No psi[0] targets?\n"); DmrgSerializerType* ds = new DmrgSerializerType(fsS, fsE, lrs_, psi, transform, direction); if (finiteLoop.wantsMultiSitePush()) { target.multiSitePush(ds); return; } typename BasisWithOperatorsType::SaveEnum saveOption2 = (finiteLoop.wantsOnlySlowWft()) ? BasisWithOperatorsType::SaveEnum::ALL : BasisWithOperatorsType::SaveEnum::PARTIAL; SizeType numberOfSites = model_.superGeometry().numberOfSites(); PsimagLite::String prefix("Serializer"); if (ioOut_.nonNull()) { ds->write(ioOut_.handle(), prefix, saveOption2, numberOfSites, counter_); PsimagLite::String prefixForTarget = TargetingType::buildPrefix(ioOut_.handle(), counter_); target.write(sitesIndices_[stepCurrent_], ioOut_.handle(), prefixForTarget); } ++counter_; delete ds; ds = 0; } bool finalStep(int stepLength,int stepFinal) { if (stepLength<0) { stepCurrent_--; if (stepCurrent_<=stepFinal) { stepCurrent_++; // revert return true; } return false; } stepCurrent_++; if (stepCurrent_>=stepFinal) { stepCurrent_--; //revert return true; } return false; } void printEnergies(const VectorVectorRealType& energies) { if (!saveData_ || !ioOut_.nonNull()) return; CheckpointType::writeEnergies(firstCall_, "Energies", energies, ioOut_.handle()); firstCall_ = false; } const BlockType& findRightBlock(const VectorBlockType& y, SizeType step, const BlockType& E) const { if (step < y.size()) return y[step]; return E; } void printFiniteLoops(std::ostream& os) const { const SizeType n = parameters_.finiteLoop.size(); os<<"FiniteLoops printing starts\n"; for (SizeType i = 0; i < n; ++i) { parameters_.finiteLoop[i].print(os); std::cout<<"\n"; } os<<"FiniteLoops printing ends\n"; } const ModelType& model_; const ParametersType& parameters_; InputValidatorType& ioIn_; PsimagLite::ApplicationInfo appInfo_; bool verbose_; LeftRightSuperType lrs_; OutputFileOrNot ioOut_; PsimagLite::ProgressIndicator progress_; typename QnType::VectorQnType quantumSector_; int stepCurrent_; CheckpointType checkpoint_; WaveFunctionTransfType wft_; VectorBlockType sitesIndices_; DiagonalizationType diagonalization_; TruncationType truncate_; ObservablesInSituType inSitu_; bool saveData_; OneSiteTruncationType oneSiteTruncation_; static bool firstCall_; static SizeType counter_; }; //class DmrgSolver template bool DmrgSolver::firstCall_ = true; template SizeType DmrgSolver::counter_ = 0; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/EnforcePhase.h000066400000000000000000000015151414604301300174370ustar00rootroot00000000000000#ifndef ENFORCEPHASE_H #define ENFORCEPHASE_H #include "Matrix.h" namespace Dmrg { template class EnforcePhase { typedef typename PsimagLite::Real::Type RealType; public: static void enforcePhase(PsimagLite::Matrix& a) { SizeType cols = a.cols(); for (SizeType i = 0; i < cols; ++i) { enforcePhase(a, i); } } private: static void enforcePhase(PsimagLite::Matrix& a, SizeType col) { RealType sign1 = 0; SizeType rows = a.rows(); for (SizeType j = 0; j < rows; ++j) { RealType val = PsimagLite::norm(a(j, col)); if (val < 1e-6) continue; sign1 = (val > 0) ? 1 : -1; break; } assert(sign1 != 0); // get a consistent phase for (SizeType j = 0; j < rows; ++j) a(j, col) *= sign1; } }; } #endif // ENFORCEPHASE_H dmrgpp-6.02/src/Engine/FermionSign.h000066400000000000000000000107661414604301300173250ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file FermionSign.h * * FIXME documentation */ #ifndef FEMION_SIGN_H #define FEMION_SIGN_H #include #include #include "PackIndices.h" namespace Dmrg { class FermionSign { typedef PsimagLite::PackIndices PackIndicesType; typedef PsimagLite::Vector::Type VectorSizeType; typedef PsimagLite::Vector::Type VectorBoolType; public: FermionSign(const VectorBoolType& signs) : signs_(signs) {} template FermionSign(const SomeBasisType& basis,const VectorBoolType& signs) { if (basis.oldSigns().size() != basis.permutationInverse().size()) err("FermionSign: Problem\n"); SizeType n = basis.oldSigns().size(); SizeType nx = basis.oldSigns().size()/signs.size(); PackIndicesType pack(nx); signs_.resize(nx); if (nx <= 1) return; for (SizeType x = 0; x < n; ++x) { SizeType x0 = 0; SizeType x1 = 0; pack.unpack(x0, x1, basis.permutation(x)); assert(x1 < signs.size()); bool parity1 = basis.oldSigns()[x]; bool parity2 = signs[x1]; assert(x0 < signs_.size()); signs_[x0] = (parity1 != parity2); } } template FermionSign(IoInputter& io, PsimagLite::String prefix, bool bogus, typename PsimagLite::EnableIf< PsimagLite::IsInputLike::True, int>::Type = 0) { if (bogus) return; io.read(signs_, prefix); } int operator()(SizeType i,int f) const { assert(i void write(IoOutputter& io, PsimagLite::String prefix, typename PsimagLite::EnableIf< PsimagLite::IsOutputLike::True, int>::Type = 0) const { io.write(signs_, prefix); } SizeType size() const { return signs_.size(); } private: VectorBoolType signs_; }; // class FermionSign } // namespace Dmrg /*@}*/ #endif // FEMION_SIGN_H dmrgpp-6.02/src/Engine/FiniteLoop.h000066400000000000000000000125031414604301300171440ustar00rootroot00000000000000#ifndef DMRG_FINITELOOP_H #define DMRG_FINITELOOP_H #include "Vector.h" #include #include "Io/IoSerializerStub.h" #include "PsimagLite.h" namespace Dmrg { /* PSIDOC FiniteLoop \subsection{Enabling finite loops} To enable finite loops make sure that the option `nofiniteloops` is \emph{not} present under `SolverOptions=`. Remember that the entry \verb!FiniteLoops! in the input file is a series of space-separated numbers. More than one space is allowed. The first number is the number of finite algorithm ``movements,'' followed by series of three numbers for each movement. Of the three numbers, the first is the number of sites to go forward if positive or backward if negative. The second number is the $m$ for this movement and the last number is a bitwise option described in \S\ref{sec:thirdnumber}. The first movement starts from where the infinite loop left off, at the middle of the lattice. \subsection{Example of a Finite loops line in the input file} \begin{verbatim} FiniteLoops 4 7 200 0 -7 200 0 7 200 1 7 200 1 \end{verbatim} The number 4 implies 4 finite loops. The first fine loop is \verb!7 200 0!, meaning go forward 7 steps, use \emph{m=200} for this finite sweep, and 0: do not store transformation in disk. The next is \verb!-7 200 0!, which goes backwards 7 sites, etc. Remember that the finite loops start at the middle of the lattice, where the infinite loop left off. \todo{ADD FIGURE SHOWING WHAT THIS DOES.} \subsection{The third number in the triplet}\label{sec:thirdnumber} The third number in the triplet is a bitwise option where the first bit means save or don't save, the second bit compute the g.s. or WFT it without eigenvalue or eigenvector updates, and the third bit compute the g.s. of WFT it updating eigenvalue and eigenvector. It is a fatal error to have both bits 1 and 2 set. If bit 5 is set then so must bit 3. \begin{table} \begin{tabular}{ll}\toprule Bit & What Happens if Set\\ 0 & Saves state for the observe code\\ 1 & WFTs the ground state in a fast way instead of computing it\\ 2 & WFTs the ground state slowly instead of computing it\\ 3 & Forces random guess for ground state\\ 4 & MultiSitePush (whatever that means)\\ 5 & OneSiteTruncation\\ \end{tabular} \caption{Meaning of each bit of the third number in the finite loop triplet. It is a fatal error to have both bits 1 and 2 set.} \end{table} \subsection{Caveats and Troubleshooting} If `nofiniteloops` is an option in the options line of the input file then the \verb!FiniteLoops! line in the input file is ignored, and no finite loops are done. In this case, DMRG++ stops when the infinite algorithm has finished. Make sure the first number is the number of triplets that follow. Make sure you don't fall off the lattice, by going forward or backwards too much. Remember that at least one site must remain for the system part of the lattice. So on a 16 site chain, when you start the finite loops you're at the middle, you can go forward at most 7 sites, and backwards at most 7 sites. There is some checking done to the finite loops input, but you might find that it's not comprehensive. */ class FiniteLoop { public: FiniteLoop(int sl, SizeType ks, SizeType so) : stepLength_(sl), keptStates_(ks), bitField_(so) { checkBitField(); } void write(PsimagLite::String label, PsimagLite::IoSerializer& ioSerializer, PsimagLite::IoNgSerializer::WriteMode mode = PsimagLite::IoNgSerializer::NO_OVERWRITE) const { PsimagLite::String root = label; if (mode != PsimagLite::IoNgSerializer::ALLOW_OVERWRITE) ioSerializer.createGroup(root); ioSerializer.write(root + "/stepLength", stepLength_, mode); ioSerializer.write(root + "/keptStates", keptStates_, mode); ioSerializer.write(root + "/saveOption", bitField_, mode); } int stepLength() const { return stepLength_; } SizeType keptStates() const { return keptStates_; } bool wantsSave() const { return (bitField_ & 1); } bool wantsOnlyFastWft() const { return (bitField_ & 2); } bool wantsOnlySlowWft() const { return (bitField_ & 4); } bool wantsRandomGuess() const { return (bitField_ & 8); } bool wantsMultiSitePush() const { return (bitField_ & 16); } bool wantsOneSiteTruncation() const { return (bitField_ & 32); } void print(std::ostream& os) const { os<>= 1; // ATTENTION: Discards bit 0 when i === 0 if (!(saveOption & 1)) continue; if (flag) { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Triplet 3rd: Only one bit of bit 1, bit 2, and bit 3 may be set"; msg<<" VALUE= "< class FourPointCorrelations { public: typedef typename CorrelationsSkeletonType::ObserverHelperType ObserverHelperType; typedef typename ObserverHelperType::VectorType VectorType ; typedef typename ObserverHelperType::VectorWithOffsetType VectorWithOffsetType; typedef typename ObserverHelperType::BasisWithOperatorsType BasisWithOperatorsType ; typedef SizeType IndexType; typedef typename VectorType::value_type FieldType; typedef typename BasisWithOperatorsType::RealType RealType; typedef typename CorrelationsSkeletonType::SparseMatrixType SparseMatrixType; typedef typename CorrelationsSkeletonType::OperatorType OperatorType; typedef typename ObserverHelperType::MatrixType MatrixType; typedef PsimagLite::Vector::Type VectorCharType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorSparseMatrixType; typedef typename CorrelationsSkeletonType::BraketType BraketType; FourPointCorrelations(const CorrelationsSkeletonType& skeleton) : skeleton_(skeleton) {} //! Four-point: these are expensive and uncached!!! //! requires i1i2 || i3>i4 || i2>i3) throw PsimagLite::RuntimeError("calcCorrelation: FourPoint needs ordered points\n"); if (i1==i2 || i3==i4) throw PsimagLite::RuntimeError("calcCorrelation: FourPoint needs distinct points\n"); if (i1==i3 || i2==i4) throw PsimagLite::RuntimeError("calcCorrelation: FourPoint needs distinct points\n"); if (i2==i3 || i1==i4) throw PsimagLite::RuntimeError("calcCorrelation: FourPoint needs distinct points\n"); SparseMatrixType O2gt; const bool finalTransform = true; firstStage(O2gt, 'N', i1, 'N', i2, braket, 0, 1, finalTransform); return secondStage(O2gt, i2, 'C', i3, 'C', i4, braket, 2, 3); } //! 3-point: these are expensive and uncached!!! //! requires i1i2 || i2>i3) err("calcCorrelation: FourPoint needs ordered points\n"); if (i1==i2 || i1==i3 || i2==i3) err("calcCorrelation: FourPoint needs distinct points\n"); SparseMatrixType O2gt; const SizeType nsites = skeleton_.numberOfSites(); const bool finalTransform = (i3 + 1 != nsites || i2 + 1 != i3); firstStage(O2gt, 'N', i1, 'N', i2, braket, 0, 1, finalTransform); return secondStage(O2gt,i2,'N',i3,braket,2); } //! 4-points or more: these are expensive and uncached!!! //! requires i0 3); SizeType end = n - 2; // do the middle for (SizeType i = 2; i < end; ++i) { SizeType i2 = braket.site(i - 1); SparseMatrixType OsoFar; middleStage(OsoFar, O2gt, i2, 'N', braket.site(i), braket.op(i), braket.op(i - 1).fermionOrBoson()); O2gt = OsoFar; } // handle the last 2 sites SizeType i2 = braket.site(n - 3); SizeType i3 = braket.site(n - 2); SizeType i4 = braket.site(n - 1); return secondStage(O2gt, i2, 'N', i3, 'N', i4, braket, n - 2, n - 1); } //! requires i1 i3) throw PsimagLite::RuntimeError("calcCorrelation: FourPoint needs ordered points\n"); if (i2 == i3) throw PsimagLite::RuntimeError("calcCorrelation: FourPoint needs distinct points\n"); SparseMatrixType O3m; skeleton_.createWithModification(O3m,Op3.getCRS(),mod3); int ns = i3-1; if (ns < 0) ns = 0; SparseMatrixType Otmp; growDirectly4p(Otmp,OsoFar,i2+1,fermionS,ns); SparseMatrixType O3g; skeleton_.dmrgMultiply(O3g,Otmp,O3m,Op3.fermionOrBoson(),ns); skeleton_.helper().transform(dest, O3g, ns); } private: //! requires i2 i int nt=i-1; if (nt<0) nt=0; const ObserverHelperType& helper = skeleton_.helper(); const SizeType totalSites = skeleton_.numberOfSites(); for (SizeType s = nt; s < ns; ++s) { SparseMatrixType Onew(helper.cols(s), helper.cols(s)); skeleton_.fluffUp(Onew, Odest, fermionicSign, CorrelationsSkeletonType::GrowDirection::RIGHT, (s < totalSites - 3), s); Odest = Onew; } } void checkIndicesForStrictOrdering(const BraketType& braket) const { if (braket.points() < 2) return; bool flag = true; SizeType prev = braket.site(0); for (SizeType i = 1; i < braket.points(); ++i) { if (braket.site(i) <= prev) { flag = false; break; } } if (flag) return; err("AnyPoint: Point must be strictly ordered\n"); } const CorrelationsSkeletonType& skeleton_; }; //class FourPointCorrelations } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/HamiltonianAbstract.h000066400000000000000000000026051414604301300210250ustar00rootroot00000000000000#ifndef HAMILTONIANABSTRACT_H #define HAMILTONIANABSTRACT_H #include "Vector.h" #include "ProgramGlobals.h" namespace Dmrg { template class HamiltonianAbstract { typedef PsimagLite::Vector::Type VectorSizeType; typedef PsimagLite::Vector::Type VectorVectorSizeType; public: HamiltonianAbstract(const SuperGeometryType& superGeometry, SizeType smax, SizeType emin, const VectorSizeType& block) : block_(block) { VectorSizeType v(2, 0); SizeType n = block.size(); for (SizeType i = 0; i < n; ++i) { for (SizeType j = i + 1; j < n; ++j) { v[0] = block[i]; v[1] = block[j]; if (!superGeometry.connected(smax, emin, v)) continue; ProgramGlobals::ConnectionEnum type = superGeometry.connectionKind(smax, v); if (type == ProgramGlobals::ConnectionEnum::SYSTEM_SYSTEM || type == ProgramGlobals::ConnectionEnum::ENVIRON_ENVIRON) continue; data_.push_back(v); } } superGeometry.addSuperConnections(data_, smax, emin); } SizeType items() const { return data_.size(); } VectorSizeType item(SizeType ind) const { assert(ind < data_.size()); return data_[ind]; } const VectorSizeType& block() const { return block_; } private: const VectorSizeType& block_; VectorVectorSizeType data_; }; } #endif // HAMILTONIANABSTRACT_H dmrgpp-6.02/src/Engine/HamiltonianConnection.h000066400000000000000000000343111414604301300213600ustar00rootroot00000000000000/* Copyright (c) 2009,-2012 UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /** \file HamiltonianConnection.h */ #ifndef HAMILTONIAN_CONNECTION_H #define HAMILTONIAN_CONNECTION_H #include "CrsMatrix.h" #include "Concurrency.h" #include #include "ProgramGlobals.h" #include "HamiltonianAbstract.h" #include "Vector.h" #include "VerySparseMatrix.h" #include "ProgressIndicator.h" #include "OperatorStorage.h" #include "OperatorsCached.h" #include "ManyToTwoConnection.h" #include "SuperOpHelperBase.h" namespace Dmrg { // Keep this class independent of x and y in x = H*y // For things that depend on x and y use ParallelHamiltonianConnection.h template class HamiltonianConnection { public: typedef ModelHelperType_ ModelHelperType; typedef ParamsForSolverType_ ParamsForSolverType; typedef typename ModelLinksType::SuperGeometryType SuperGeometryType; typedef HamiltonianAbstract HamiltonianAbstractType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename ModelHelperType::OperatorStorageType OperatorStorageType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef VerySparseMatrix VerySparseMatrixType; typedef typename ModelHelperType::LinkType LinkType; typedef std::pair PairType; typedef typename PsimagLite::Vector::Type VectorType; typedef typename PsimagLite::Vector::Type VectorVectorType; typedef typename PsimagLite::Concurrency ConcurrencyType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename PsimagLite::Vector::Type VectorLinkType; typedef typename ModelHelperType::Aux AuxType; typedef OperatorsCached OperatorsCachedType; typedef typename ModelLinksType::TermType::OneLinkType OneLinkType; typedef SuperOpHelperBase SuperOpHelperBaseType; typedef ManyToTwoConnection ManyToTwoConnectionType; HamiltonianConnection(const LeftRightSuperType& lrs, const ModelLinksType& lpb, RealType targetTime, const SuperOpHelperBaseType& superOpHelper) : modelHelper_(lrs), superGeometry_(superOpHelper.superGeometry()), modelLinks_(lpb), targetTime_(targetTime), superOpHelper_(superOpHelper), operatorsCached_(lrs), progress_("HamiltonianConnection"), systemBlock_(modelHelper_.leftRightSuper().left().block()), envBlock_(modelHelper_.leftRightSuper().right().block()), smax_(*std::max_element(systemBlock_.begin(),systemBlock_.end())), emin_(*std::min_element(envBlock_.begin(),envBlock_.end())), hamAbstract_(superGeometry_, smax_, emin_, modelHelper_.leftRightSuper().super().block()), totalOnes_(hamAbstract_.items()) { checkGeometryTerms(); lps_.reserve(ProgramGlobals::MAX_LPS); SizeType nitems = hamAbstract_.items(); for (SizeType x = 0; x < nitems; ++x) totalOnes_[x] = cacheConnections(x); SizeType last = lrs.super().block().size(); assert(last > 0); --last; SizeType numberOfSites = superGeometry_.numberOfSites(); assert(numberOfSites > 0); bool superIsReallySuper = (lrs.super().block()[0] == 0 && lrs.super().block()[last] == numberOfSites - 1); if (!superIsReallySuper) return; // <-- CONDITIONAL EARLY EXIT HERE PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"LinkProductStructSize="< fromModel) { err("FATAL: terms from input " + ttos(fromInput) + " > " + "terms from model = " + ttos(fromModel) + "\n"); } if (fromInput < inputTermsExpected) err("Too few terms in input, expected " + ttos(inputTermsExpected) + "\n"); if (fromInput > inputTermsExpected) err("Too many terms in input, expected " + ttos(inputTermsExpected) + "\n"); } static char conjugateChar(char c) { if (c != 'N' && c != 'C') err("conjugateChar\n"); return (c == 'N') ? 'C' : 'N'; } const ModelHelperType modelHelper_; const SuperGeometryType& superGeometry_; const ModelLinksType& modelLinks_; RealType targetTime_; const SuperOpHelperBaseType& superOpHelper_; OperatorsCachedType operatorsCached_; PsimagLite::ProgressIndicator progress_; VectorLinkType lps_; const VectorSizeType& systemBlock_; const VectorSizeType& envBlock_; SizeType smax_; SizeType emin_; HamiltonianAbstractType hamAbstract_; VectorSizeType totalOnes_; }; // class HamiltonianConnection } // namespace Dmrg /*@}*/ #endif // HAMILTONIAN_CONNECTION_H dmrgpp-6.02/src/Engine/HamiltonianSymmetryLocal.h000066400000000000000000000106001414604301300220600ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file HamiltonianSymmetryLocal.h * * This class contains the implementation of local symmetries * An object of this class is contained by DmrgBasisImplementation * */ #ifndef HAM_SYMM_LOCAL_H #define HAM_SYMM_LOCAL_H #include "Sort.h" #include "ProgramGlobals.h" #include "Io/IoSelector.h" namespace Dmrg { template class HamiltonianSymmetryLocal { typedef typename SparseMatrixType::value_type SparseElementType; typedef typename PsimagLite::Real::Type RealType; typedef PsimagLite::CrsMatrix FactorsType; typedef typename PsimagLite::Vector::Type VectorSizeType; public: SizeType getFlavor(SizeType) const { return 0; // meaningless } template void calcRemovedIndices(VectorSizeType& removedIndices, const VectorSizeType& perm, SizeType kept, const SolverParametersType&) const { const SizeType permSize = perm.size(); if (permSize <= kept) return; SizeType target = permSize - kept; removedIndices.clear(); for (SizeType i = 0; i < target; ++i) { if (removedIndices.size() >= target) break; if (PsimagLite::indexOrMinusOne(removedIndices, perm[i]) >= 0) continue; removedIndices.push_back(perm[i]); } } template void read(IoInputter&, PsimagLite::String, bool, typename PsimagLite::EnableIf< PsimagLite::IsInputLike::True, int>::Type = 0) {} void write(PsimagLite::IoSelector::Out& io, PsimagLite::String label, PsimagLite::IoNgSerializer::WriteMode mode) const { io.write(0, label + "FACTORSSIZE", mode); } }; //class HamiltonianSymmetryLocal } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/InputCheck.h000066400000000000000000000475321414604301300171430ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file InputCheck.h * * InputChecking functions */ #ifndef INPUT_CHECK_H #define INPUT_CHECK_H #include #include #include "../../PsimagLite/src/Options.h" #include "Geometry/Geometry.h" #include "ProgramGlobals.h" namespace Dmrg { class InputCheck { typedef PsimagLite::Options::Readable OptionsReadableType; typedef PsimagLite::Vector::Type VectorStringType; public: InputCheck() : optsReadable_(0) { allowedFileOptions_.push_back(""); allowedFileOptions_.push_back("DELETE"); allowedFileOptions_.push_back("list"); allowedFileOptions_.push_back("keep"); knownLabels_.push_back("TotalNumberOfSites"); knownLabels_.push_back("NumberOfTerms"); knownLabels_.push_back("DegreesOfFreedom"); knownLabels_.push_back("GeometryKind"); knownLabels_.push_back("GeometryOptions"); knownLabels_.push_back("Connectors"); knownLabels_.push_back("hubbardU"); knownLabels_.push_back("potentialV"); knownLabels_.push_back("Model"); knownLabels_.push_back("SolverOptions"); knownLabels_.push_back("Version"); knownLabels_.push_back("OutputFile"); knownLabels_.push_back("InfiniteLoopKeptStates"); knownLabels_.push_back("FiniteLoops"); knownLabels_.push_back("TargetElectronsUp"); knownLabels_.push_back("TargetElectronsDown"); knownLabels_.push_back("TargetSpinTimesTwo"); knownLabels_.push_back("UseSu2Symmetry"); knownLabels_.push_back("GsWeight"); knownLabels_.push_back("TSPTau"); knownLabels_.push_back("TSPTimeSteps"); knownLabels_.push_back("TSPAdvanceEach"); knownLabels_.push_back("ChebyshevTransform"); knownLabels_.push_back("TSPAlgorithm"); knownLabels_.push_back("TSPSites"); knownLabels_.push_back("TSPLoops"); knownLabels_.push_back("TSPProductOrSum"); knownLabels_.push_back("IsPeriodicX"); knownLabels_.push_back("Orbitals"); knownLabels_.push_back("TSPOperator"); knownLabels_.push_back("RAW_MATRIX"); knownLabels_.push_back("FERMIONSIGN"); knownLabels_.push_back("JMVALUES"); knownLabels_.push_back("AngularFactor"); knownLabels_.push_back("Threads"); knownLabels_.push_back("LadderLeg"); knownLabels_.push_back("linSize"); knownLabels_.push_back("jvalues"); knownLabels_.push_back("options"); knownLabels_.push_back("version"); knownLabels_.push_back("outputfile"); knownLabels_.push_back("QNS"); knownLabels_.push_back("BathSitesPerSite"); knownLabels_.push_back("hoppings"); knownLabels_.push_back("density"); knownLabels_.push_back("skip"); knownLabels_.push_back("ConnectorsX"); knownLabels_.push_back("ConnectorsY"); knownLabels_.push_back("ConnectorsBath"); knownLabels_.push_back("RepeatFiniteLoopsTimes"); knownLabels_.push_back("BetaDividedByTwo"); knownLabels_.push_back("TSPRngSeed"); knownLabels_.push_back("TSPOperatorMultiplier"); knownLabels_.push_back("MettsCollapse"); knownLabels_.push_back("HeisenbergTwiceS"); knownLabels_.push_back("TargetElectronsTotal"); knownLabels_.push_back("TargetSzPlusConst"); knownLabels_.push_back("RepeatFiniteLoopsFrom"); knownLabels_.push_back("RestartFilename"); knownLabels_.push_back("RestartLabelForEnergy"); knownLabels_.push_back("RestartMapStages"); knownLabels_.push_back("RestartSourceTvForPsi"); knownLabels_.push_back("RestartMappingTvs"); knownLabels_.push_back("COOKED_OPERATOR"); knownLabels_.push_back("COOKED_EXTRA"); knownLabels_.push_back("OperatorExpression"); knownLabels_.push_back("TargetExtra"); knownLabels_.push_back("TSPEnergyForExp"); knownLabels_.push_back("AdjustQuantumNumbers"); knownLabels_.push_back("FeAsMode"); knownLabels_.push_back("MaxMatrixRankStored"); knownLabels_.push_back("CorrectionA"); knownLabels_.push_back("DynamicDmrgType"); knownLabels_.push_back("CorrectionVectorFreqType"); knownLabels_.push_back("DynamicDmrgSteps"); knownLabels_.push_back("DynamicDmrgEps"); knownLabels_.push_back("DynamicDmrgAdvanceEach"); knownLabels_.push_back("CorrectionVectorOmega"); knownLabels_.push_back("CorrectionVectorEta"); knownLabels_.push_back("CorrectionVectorAlgorithm"); knownLabels_.push_back("CorrelationsType"); knownLabels_.push_back("LongChainDistance"); knownLabels_.push_back("IsPeriodicY"); knownLabels_.push_back("TruncationTolerance"); knownLabels_.push_back("PotentialT"); knownLabels_.push_back("omega"); knownLabels_.push_back("MagneticField"); knownLabels_.push_back("SpinOrbit"); knownLabels_.push_back("DegeneracyMax"); knownLabels_.push_back("JzSymmetry"); knownLabels_.push_back("DegeneracyMax"); knownLabels_.push_back("KroneckerDumperBegin"); knownLabels_.push_back("KroneckerDumperEnd"); knownLabels_.push_back("LanczosEps"); knownLabels_.push_back("LanczosSteps"); knownLabels_.push_back("TridiagEps"); knownLabels_.push_back("TridiagSteps"); knownLabels_.push_back("TruncationTolerance"); knownLabels_.push_back("GeometryMaxConnections"); knownLabels_.push_back("LanczosNoSaveLanczosVectors"); knownLabels_.push_back("DenseSparseThreshold"); knownLabels_.push_back("TridiagonalEps"); knownLabels_.push_back("HoneycombLy"); knownLabels_.push_back("GeometryValueModifier"); knownLabels_.push_back("ThreadsStackSize"); knownLabels_.push_back("RecoverySave"); knownLabels_.push_back("Intent"); knownLabels_.push_back("PrintHamiltonianAverage"); knownLabels_.push_back("SaveDensityMatrixEigenvalues"); knownLabels_.push_back("OpOnSiteThreshold"); knownLabels_.push_back("FirstRitz"); knownLabels_.push_back("CVnForFraction"); knownLabels_.push_back("AnisotropyD"); knownLabels_.push_back("FindSymmetrySector"); for (SizeType i = 0; i < 10; ++i) knownLabels_.push_back("Term" + ttos(i)); } ~InputCheck() { if (optsReadable_!=0) delete optsReadable_; } PsimagLite::String import() const { PsimagLite::String str = PsimagLite::Geometry::import(); str += "vector hubbardU;\n"; str += "vector potentialV;\n"; str += "string! Model;\n"; str += "string! SolverOptions;\n"; str += "string! Version;\n"; str += "integer! InfiniteLoopKeptStates;\n"; str += "string! OutputFile;\n"; str += "matrix.integer FiniteLoops;\n"; str += "integer RepeatFiniteLoopsFrom;\n"; str += "integer RepeatFiniteLoopsTimes;\n"; str += "integer TargetElectronsUp;\n"; str += "integer TargetElectronsDown;\n"; str += "integer TargetElectronsTotal;\n"; str += "real GsWeight;\n"; str += "real TSPTau;\n"; str += "integer TSPTimeSteps;\n"; str += "integer TSPAdvanceEach;\n"; str += "string TSPAlgorithm;\n"; str += "vector.integer TSPSites;\n"; str += "vector.integer TSPLoops;\n"; str += "string TSPProductOrSum;\n"; str += "string TSPOperator;\n"; str += "string OperatorExpression;\n"; str += "integer Threads = 1;\n"; str += "integer Orbitals = 1;\n"; str += "string FeAsMode;\n"; str += "integer TargetSpinTimesTwo;\n"; str += "integer UseSu2Symmetry;\n"; str += "integer Pvectors;\n"; str += "string TruncationTolerance;\n"; str += "integer HeisenbergTwiceS;\n"; str += "integer TargetSzPlusConst;\n"; str += "integer SpinTwiceS;\n"; str += "integer OrbitalTwiceS;\n"; str += "real LambdaOne;\n"; str += "real LambdaTwo;\n"; str += "real CorrectionA;\n"; str += "string RestartFilename;\n"; str += "real LanczosEps;\n"; str += "real TridiagonalEps;\n"; str += "integer DynamicDmrgType;\n"; str += "real CorrectionVectorFreqType;\n"; str += "real CorrectionVectorEta;\n"; str += "string CorrectionVectorAlgorithm;\n"; str += "real CorrectionVectorOmega;\n"; str += "string Intent;\n"; str += "integer OpOnSiteThreshold;\n"; str += "integer FirstRitz;\n"; str += "integer CVnForFraction;\n"; str += "real AnisotropyD;\n"; str += "string FindSymmetrySector;\n"; return str; } bool check(const PsimagLite::String& label, const PsimagLite::Vector::Type& vec, SizeType line) const { if (label=="JMVALUES" || label=="RS:JMVALUES") { if (vec.size()!=3) return error1("JMVALUES",line); return true; } else if (label=="RAW_MATRIX" || label=="RS:RAW_MATRIX" || label == "SpinOrbit") { if (!checkForMatrix(vec)) return error1(label,line); return true; } else if (label == "Connectors" || label == "hopOnSite") { if (!checkForMatrix(vec) && !checkForVector(vec)) return error1(label,line); return true; } else if (label == "MagneticField") { return true; } else if (label=="FiniteLoops") { SizeType n = atoi(vec[0].c_str()); if (vec.size()!=3*n+1) return error1("FiniteLoops",line); return true; } return false; } bool checkSimpleLabel(const PsimagLite::String& label, SizeType line) const { for (SizeType i = 0; i < knownLabels_.size(); ++i) if (knownLabels_[i] == label) return true; PsimagLite::String msg("WARNING: Unknown label " + label +"\n"); std::cout<::Type registerOpts; registerOpts.push_back("restart"); registerOpts.push_back("debugmatrix"); registerOpts.push_back("test"); registerOpts.push_back("exactdiag"); registerOpts.push_back("nodmrgtransform"); registerOpts.push_back("useDavidson"); registerOpts.push_back("verbose"); registerOpts.push_back("nofiniteloops"); registerOpts.push_back("nowft"); registerOpts.push_back("useComplex"); registerOpts.push_back("inflate"); registerOpts.push_back("none"); registerOpts.push_back("twositedmrg"); registerOpts.push_back("noloadwft"); registerOpts.push_back("ChebyshevSolver"); registerOpts.push_back("MatrixVectorStored"); registerOpts.push_back("MatrixVectorOnTheFly"); registerOpts.push_back("TimeStepTargeting"); registerOpts.push_back("DynamicTargeting"); registerOpts.push_back("AdaptiveDynamicTargeting"); registerOpts.push_back("CorrectionVectorTargeting"); registerOpts.push_back("CorrectionTargeting"); registerOpts.push_back("ChebyshevTargeting"); registerOpts.push_back("TargetingInSitu"); registerOpts.push_back("TargetingRixsStatic"); registerOpts.push_back("TargetingRixsDynamic"); registerOpts.push_back("MettsTargeting"); registerOpts.push_back("TargetingAncilla"); registerOpts.push_back("geometryallinsystem"); registerOpts.push_back("vectorwithoffsets"); registerOpts.push_back("allPvectors"); registerOpts.push_back("printgeometry"); registerOpts.push_back("recoveryEnableRead"); registerOpts.push_back("normalizeTimeVectors"); registerOpts.push_back("neverNormalizeVectors"); registerOpts.push_back("noSaveStacks"); registerOpts.push_back("noSaveData"); registerOpts.push_back("noSaveWft"); registerOpts.push_back("minimizeDisk"); registerOpts.push_back("advanceUnrestricted"); registerOpts.push_back("findSymmetrySector"); registerOpts.push_back("KroneckerDumper"); registerOpts.push_back("doNotCheckTwoSiteDmrg"); registerOpts.push_back("extendedPrint"); registerOpts.push_back("truncationNoSvd"); registerOpts.push_back("KronNoLoadBalance"); registerOpts.push_back("setAffinities"); registerOpts.push_back("wftNoAccel"); registerOpts.push_back("wftAccelPatches"); registerOpts.push_back("BatchedGemm"); registerOpts.push_back("KrylovNoAbridge"); registerOpts.push_back("fixLegacyBugs"); registerOpts.push_back("KronNoUseLowerPart"); registerOpts.push_back("shrinkStacksOnDisk"); registerOpts.push_back("OperatorsChangeAll"); registerOpts.push_back("calcAndPrintEntropies"); registerOpts.push_back("blasNotThreadSafe"); registerOpts.push_back("observeReadOnDemand"); registerOpts.push_back("ciRun"); PsimagLite::Options::Writeable optWriteable(registerOpts, PsimagLite::Options::Writeable::PERMISSIVE); optsReadable_ = new OptionsReadableType(optWriteable,val); bool mvs = (val.find("MatrixVectorStored") != PsimagLite::String::npos); bool mvo = (val.find("MatrixVectorOnTheFly") != PsimagLite::String::npos); bool notMvk = (mvs || mvo); if (val.find("BatchedGemm") != PsimagLite::String::npos) { if (notMvk) err("FATAL: BatchedGemm only with MatrixVectorKron\n"); #ifndef PLUGIN_SC err("BatchedGemm needs -DPLUGIN_SC in Config.make\n"); #endif } } bool isSet(const PsimagLite::String& thisOption) const { return optsReadable_->isSet(thisOption); } void usageMain(const PsimagLite::String& name) const { std::cerr<<"USAGE is "<::Type& vec) const { if (vec.size() == 0) return false; SizeType n = atoi(vec[0].c_str()); return (vec.size() == n+1); } bool checkForMatrix(const PsimagLite::Vector::Type& vec) const { if (vec.size() < 2) return false; SizeType row = atoi(vec[0].c_str()); SizeType col = atoi(vec[1].c_str()); SizeType n = row*col; return (vec.size() == n+2); } bool error1(const PsimagLite::String& message,SizeType line) const { PsimagLite::String s(__FILE__); s += " : Input error for label " + message + " near line " + ttos(line) + "\n"; throw PsimagLite::RuntimeError(s.c_str()); } OptionsReadableType* optsReadable_; VectorStringType allowedFileOptions_; VectorStringType knownLabels_; }; // class InputCheck } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/InputFromDataOrNot.h000066400000000000000000000042631414604301300205770ustar00rootroot00000000000000#ifndef INPUTFROMDATAORNOT_H #define INPUTFROMDATAORNOT_H #include "Vector.h" #include "InputNg.h" #include "Io/IoNg.h" namespace Dmrg { template class InputFromDataOrNot { public: typedef PsimagLite::InputNg InputNgType; typedef PsimagLite::IoNg::In IoNgInType; InputFromDataOrNot(PsimagLite::String filename, const InputCheckType& inputCheck, bool filenameIsCout) : ioWriteable_(0), isData_(false) { if (filenameIsCout) readFromCout(filename); else internal(filename); ioWriteable_ = (isData_) ? new typename InputNgType::Writeable(inputCheck, data_) : new typename InputNgType::Writeable(filename, inputCheck); //data_ = ""; } ~InputFromDataOrNot() { delete ioWriteable_; ioWriteable_ = 0; } const typename InputNgType::Writeable& ioWriteable() const { if (ioWriteable_) return *ioWriteable_; throw PsimagLite::RuntimeError("InputFromDataOrNot: INTERNAL ERROR (FATAL)\n"); } private: void internal(PsimagLite::String filename) { IoNgInType* io = 0; try { io = new IoNgInType(filename); isData_ = true; } catch (...) { return; } PsimagLite::String buffer; io->read(buffer, "InputBase64Encoded"); delete io; io = 0; PsimagLite::PsiBase64::Decode base64decode(buffer); data_ = base64decode(); } void readFromCout(PsimagLite::String filename) { std::ifstream fin(filename.c_str()); if (!fin || !fin.good() || fin.bad()) { PsimagLite::String s(__FILE__); err(s + " Cannot open file " + filename + "\n"); } static const PsimagLite::String search = "PsiApp::echoBase64: "; static const SizeType lsearch = search.length(); PsimagLite::String str; bool found = false; while (std::getline(fin, str)) { if (str.substr(0, lsearch) != search) continue; if (std::getline(fin, str)) found = true; break; } if (!found) err("Could not find " + search + " in " + filename + "\n"); PsimagLite::PsiBase64::Decode base64decode(str); data_ = base64decode(); isData_ = true; } typename InputNgType::Writeable* ioWriteable_; bool isData_; PsimagLite::String data_; }; } #endif // INPUTFROMDATAORNOT_H dmrgpp-6.02/src/Engine/Intent.h000066400000000000000000000127101414604301300163350ustar00rootroot00000000000000#ifndef INTENT_H #define INTENT_H #include "InputNg.h" #include "AnsiColors.h" namespace Dmrg { template class Intent { typedef PsimagLite::Vector::Type VectorSizeType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename ModelType::ParametersType DmrgSolverParamsType; enum class IntentEnum {NONE, UNKNOWN, GS, GIMP_MATSUBARA, ARPES0, ARPES1, NEUTRONS_SZSZ}; public: Intent(const ModelType& model) : model_(model) {} void check() const { const IntentEnum intent = getIntent(); switch (intent) { case IntentEnum::ARPES0: spectroscopy(); break; case IntentEnum::ARPES1: spectroscopy(); break; case IntentEnum::NEUTRONS_SZSZ: spectroscopy(); dynTypeShouldBe(0); operatorShouldBe("sz"); break; case IntentEnum::GS: case IntentEnum::GIMP_MATSUBARA: break; case IntentEnum::NONE: saySomethingAbout("No intent found"); break; default: saySomethingAbout("Could not understand your intent"); break; } } private: IntentEnum getIntent() const { PsimagLite::String intent(""); try { model_.ioIn().readline(intent, "Intent"); } catch (std::exception&) { return IntentEnum::NONE; } if (intent == "GroundState") return IntentEnum::GS; if (intent == "GimpMatsubara") return IntentEnum::GIMP_MATSUBARA; if (intent == "ARPES0") return IntentEnum::ARPES0; if (intent == "ARPES1") return IntentEnum::ARPES1; if (intent == "NeutronsSzSz") return IntentEnum::NEUTRONS_SZSZ; return IntentEnum::UNKNOWN; } void spectroscopy() const { if (!hasInSolverOptions("restart")) saySomethingAbout(PsimagLite::String("restart") + "in SolverOptions"); if (!hasInSolverOptions("CorrectionVectorTargeting") && !hasInSolverOptions("TargetingChebyshev")) saySomethingAbout(PsimagLite::String("CorrectionVectorTargeting or ") + "TargetingChebyshev in SolverOptions"); if (!hasInSolverOptions("minimizeDisk")) suggest("minimizeDisk in SolverOptions"); PsimagLite::String cvft; model_.ioIn().readline(cvft, "CorrectionVectorFreqType"); if (cvft != "Real") saySomethingAbout("CorrectionVectorFreqType should be equal to Real"); VectorSizeType tspsites; VectorSizeType tsploops; model_.ioIn().read(tspsites, "TSPSites"); model_.ioIn().read(tsploops, "TSPLoops"); if (tspsites.size() != 1 || tsploops.size() != 1) { saySomethingAbout("TSPSites and TSPLoops should have one site"); return; } if (model_.params().insitu == "") saySomethingAbout("No insitu measurements found"); assert(tspsites.size() > 0); const SizeType site = tspsites[0]; examineSite(site); const SizeType finiteLoops = model_.params().finiteLoop.size(); if (finiteLoops < tsploops.size() + 2) saySomethingAbout("Expected finite loops equal or bigger than tsploops + 2"); } void examineSite(SizeType site) const { const SizeType l = model_.superGeometry().numberOfSites(); const SizeType leg = (l & 1) ? 0 : getLeg(); const SizeType lOverTwo = l/2; if (leg == 1) { if (site != lOverTwo) saySomethingAbout("Expected: TSPSites 1" + ttos(lOverTwo)); return; } else if (leg == 2) { if (site != lOverTwo && site + 2 != lOverTwo) saySomethingAbout("Expected: TSPSites 1 L/2 or L/2 - 2"); return; } else if (leg == 4) { if (site != lOverTwo && site != lOverTwo + 2) saySomethingAbout("Expected: TSPSites 1 L/2 or L/2 + 2"); return; } else if (leg == 0) { saySomethingAbout("Couldn't check TSPSites value"); return; } else { saySomethingAbout("Geometry may not support center site approximation"); } } bool hasInSolverOptions(PsimagLite::String what) const { return model_.params().options.isSet(what); } void saySomethingAbout(PsimagLite::String what) const { std::cerr< 0 && name != model_.superGeometry().label(t)) return 0; name = model_.superGeometry().label(t); } if (name == "chain") return 1; if (name != "ladder") return 0; SizeType leg = 0; try { model_.ioIn().readline(leg, "LadderLeg="); } catch (std::exception&) { leg = 0; } return leg; } void dynTypeShouldBe(SizeType x) const { SizeType y = 0; try { model_.ioIn().readline(y, "DynamicDmrgType="); } catch (std::exception&) { saySomethingAbout("DynamicDmrgType= not found?"); return; } if (x == y) return; saySomethingAbout("DynamicDmrgType should be " + ttos(x) + ", but " + ttos(y) + " found instead"); } void operatorShouldBe(PsimagLite::String x) const { PsimagLite::String y(""); try { model_.ioIn().readline(y, "OperatorExpression="); } catch (std::exception&) { saySomethingAbout("OperatorExpression= not found"); return; } if (x == y) return; saySomethingAbout("OperatorExpression should be " + x + ", but " + y + " found instead"); } const ModelType& model_; }; } #endif // INTENT_H dmrgpp-6.02/src/Engine/JmPairs.h000066400000000000000000000145011414604301300164410ustar00rootroot00000000000000/* Copyright (c) 2009-2017, UT-Battelle, LLC All rights reserved [DMRG++, Version 4.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file JmPairs.h * * This is a "vector" of (2j,m+j) pairs. * Repeated entries are stored only once * Provides a transparent access as if it were a normal vector * */ #ifndef JMPAIRS_HEADER_H #define JMPAIRS_HEADER_H #include #include "Utils.h" #include "PsimagLite.h" namespace Dmrg { template class JmPairs { typedef typename PsimagLite::Vector::Type VectorSizeType; public: typedef PairType_ PairType; typedef PairType value_type; typedef typename PsimagLite::Vector::Type VectorPairType; //! indices_[alpha] = jm void push(const PairType& jm,SizeType) { int x = PsimagLite::indexOrMinusOne(jmPairs_,jm); if (x < 0) { jmPairs_.push_back(jm); x=jmPairs_.size()-1; } indices_.push_back(x); } const PairType& operator[](SizeType alpha) const { assert(alpha < indices_.size()); assert(indices_[alpha] < jmPairs_.size()); return jmPairs_[indices_[alpha]]; } JmPairs& operator=(const VectorPairType& jmpairs) { SizeType n = jmpairs.size(); jmPairs_.clear(); indices_.resize(n); for (SizeType i = 0; i < n; ++i) { int x = PsimagLite::indexOrMinusOne(jmPairs_, jmpairs[i]); if (x < 0) { jmPairs_.push_back(jmpairs[i]); x=jmPairs_.size()-1; } indices_[i] = x; } return *this; } void clear() { jmPairs_.clear(); indices_.clear(); } void reorder(const VectorSizeType& permutation) { utils::reorder(indices_,permutation); } void truncate(const VectorSizeType& removedIndices) { utils::truncateVector(indices_,removedIndices); VectorSizeType unusedPairs; findUnusedJmPairs(unusedPairs); removeUnusedPairs(unusedPairs); } template void maxFirst(SizeType& maxvalue) { Op f; for (SizeType i=0;i void write(IoOutputter& io, PsimagLite::String prefix, typename PsimagLite::EnableIf< PsimagLite::IsOutputLike::True, int>::Type = 0) const { io.write(jmPairs_, prefix + "su2JmPairs"); io.write(indices_, prefix + "su2JmIndices"); } template void read(IoInputter& io, PsimagLite::String prefix, typename PsimagLite::EnableIf< PsimagLite::IsInputLike::True, int>::Type = 0) { io.read(jmPairs_, prefix + "su2JmPairs"); io.read(indices_, prefix + "su2JmIndices"); } friend std::ostream& operator<<(std::ostream& os, JmPairs jmPairs) { for (SizeType i=0;i= 0) continue; tmpVector[counter]=jmPairs_[i]; neworder[i]=counter; counter++; } jmPairs_=tmpVector; VectorSizeType tmpVector2(indices_.size()); for (SizeType i=0;i class JmSubspace { typedef typename SparseMatrixType::value_type SparseElementType; typedef typename PsimagLite::Real::Type RealType; typedef std::pair PairType; typedef std::pair TwoPairsType; typedef Su2SymmetryGlobals Su2SymmetryGlobalsType; typedef typename Su2SymmetryGlobalsType::ClebschGordanType ClebschGordanType; typedef PsimagLite::PackIndices PackIndicesType; public: typedef std::pair FlavorType; JmSubspace(const PairType& jm, SizeType index, const PairType& jm1, const PairType& jm2, SizeType nelectrons, int heavy=1) : jm_(jm), nelectrons_(nelectrons), heavy_(heavy), cgObject_(&(Su2SymmetryGlobalsType::clebschGordanObject)) { push(index,jm1,jm2,nelectrons); } static void setToProduct(const SymmetryRelatedType* symm1, const SymmetryRelatedType* symm2, const PsimagLite::Vector::Type& ne1, const PsimagLite::Vector::Type& ne2) { symm1_=symm1; symm2_=symm2; ne1_=&ne1; ne2_=&ne2; } void push (SizeType index, const PairType& jm1, const PairType& jm2, SizeType nelectrons) { if (nelectrons!=nelectrons_) err("JmSubspace::push(): nelectrons changed!!\n"); indices_.push_back(index); setFlavorsIndex(index,jm1,jm2); } bool operator==(const std::pair& nejm) const { std::pair nejmStored=std::pair(jm_, nelectrons_); return (nejm == nejmStored); } SizeType heavy() const { return heavy_; } //! This function is performance critical SizeType createFactors(SparseMatrixType& factors,SizeType offset) { flavors_.clear(); PsimagLite::Vector::Type perm(indices_.size()); PsimagLite::Sort::Type > sort; sort.sort(flavorIndices_,perm); SizeType flavorSaved=flavorIndices_[0]; flavors_.push_back(flavorIndices_[0]); SizeType counter=0; for (SizeType k=0;kflavorsMax(); SizeType y = ne1 + ne2*symm1_->electronsMax(); SizeType z = j1 + j2*symm1_->jMax(); SizeType xmax = symm1_->flavorsMax()*symm2_->flavorsMax(); SizeType ret = x + y*xmax; SizeType ymax =symm1_->electronsMax()*symm2_->electronsMax(); return ret + z*xmax*ymax; } private: void setFlavorsIndex(SizeType i,const PairType& jm1,const PairType& jm2) { SizeType alpha=0,beta=0; PackIndicesType pack(symm1_->size()); pack.unpack(alpha,beta,i); SizeType ne1 = (*ne1_)[alpha]; SizeType ne2 = (*ne2_)[beta]; SizeType flavor1 = symm1_->getFlavor(alpha); SizeType flavor2 = symm2_->getFlavor(beta); PairType flavorPair = PairType(flavor1,flavor2); PairType nePair = PairType(ne1,ne2); PairType j1j2 = PairType(jm1.first,jm2.first); FlavorType flavorPair2 = FlavorType(flavorPair,TwoPairsType(nePair,j1j2)); flavorIndices_.push_back(calculateFlavor(flavorPair2)); RealType value = 0; if (heavy_) value=cgObject_->operator()(jm_,jm1,jm2); values_.push_back(value); } static SizeType calculateFlavor(const FlavorType& g) { // order is : f1, f2, ne1, ne2, j1, j2 SizeType f1 = (g.first).first; SizeType f2 = (g.first).second; TwoPairsType tp=g.second; SizeType ne1 = (tp.first).first; SizeType ne2 = (tp.first).second; SizeType j1 = (tp.second).first; SizeType j2 = (tp.second).second; return flavor(f1,f2,ne1,ne2,j1,j2); } PairType jm_; SizeType nelectrons_; int heavy_; ClebschGordanType* cgObject_; PsimagLite::Vector::Type indices_; typename PsimagLite::Vector::Type cg_,values_; typename PsimagLite::Vector::Type flavors_,flavorIndices_; static const PsimagLite::Vector::Type* ne1_; static const PsimagLite::Vector::Type* ne2_; static const SymmetryRelatedType* symm1_; static const SymmetryRelatedType* symm2_; static SizeType flavorsMaxPerSite__,numberOfSites__,electronsMaxPerSite__,jMaxPerSite__; }; // class JmSubspace template const SymmetryRelatedType* JmSubspace::symm1_=0; template const SymmetryRelatedType* JmSubspace::symm2_=0; template const PsimagLite::Vector::Type* JmSubspace::ne1_=0; template const PsimagLite::Vector::Type* JmSubspace::ne2_=0; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/KroneckerDumper.h000066400000000000000000000144631414604301300202030ustar00rootroot00000000000000#ifndef KRONECKERDUMPER_H #define KRONECKERDUMPER_H #include "Vector.h" #include "TypeToString.h" #include #include "../Version.h" #include "Concurrency.h" #include "ProgramGlobals.h" namespace Dmrg { template class KroneckerDumper { typedef PsimagLite::Concurrency ConcurrencyType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorType; typedef typename PsimagLite::Real::Type RealType; typedef typename PsimagLite::Vector::Type VectorBoolType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename BasisType::QnType QnType; typedef std::pair PairSizeType; public: struct ParamsForKroneckerDumper { ParamsForKroneckerDumper(bool enable = false, SizeType b = 0, SizeType e = 0, SizeType p = 6, SizeType nOfQns_ = 0) : enabled(enable), begin(b), end(e), precision(p),nOfQns(nOfQns_) {} bool enabled; SizeType begin; SizeType end; SizeType precision; SizeType nOfQns; }; // struct ParamsForKroneckerDumper KroneckerDumper(const SolverParamsType& params, const LeftRightSuperType& lrs, ProgramGlobals::DirectionEnum dir) : enabled_(false),pairCount_(0),disable_(false) { counter_ = 0; if (dir == ProgramGlobals::DirectionEnum::INFINITE) return; enabled_ = params.options.isSet("KroneckerDumper"); if (!enabled_) return; ParamsForKroneckerDumper p(enabled_, params.dumperBegin, params.dumperEnd, params.precision); bool b = (p.end > 0 && counter_ >= p.end); if (counter_ < p.begin || b) { ++counter_; enabled_ = false; return; } if (p.nOfQns == 0) { PsimagLite::String msg("KroneckerDumper::ctor(): internal error "); throw PsimagLite::RuntimeError(msg + "nOfQns\n"); } ConcurrencyType::mutexInit(&mutex_); PsimagLite::String filename = "kroneckerDumper" + ttos(counter_) + ".txt"; fout_.open(filename.c_str()); fout_.precision(p.precision); fout_<<"KroneckerDumper for DMRG++ version "< 0); if (notFirstVector(y)) { disable_ = true; return; } ConcurrencyType::mutexLock(&mutex_); fout_<<"START_AB_PAIR\n"; fout_<<"link.value="<= 1); return PairSizeType(q.other[0], q.electrons - q.other[0]); } // Ahat(ia,ja) = (-1)^e_L(ia) A(ia,ja)*value void calculateAhat(SparseMatrixType& Ahat, const SparseMatrixType& A, ComplexOrRealType val, ProgramGlobals::FermionOrBosonEnum bosonOrFermion) const { Ahat = A; SizeType rows = Ahat.rows(); SizeType counter = 0; for (SizeType i = 0; i < rows; ++i) { RealType sign = (bosonOrFermion == ProgramGlobals::FermionOrBosonEnum::FERMION && signs_[i]) ? -1.0 : 1.0; for (int k = Ahat.getRowPtr(i); k < Ahat.getRowPtr(i+1); ++k) { ComplexOrRealType tmp = Ahat.getValue(k)*sign*val; Ahat.setValues(counter++, tmp); } } } bool notFirstVector(const VectorType& y) const { VectorType ydiff; ydiff <= y - y_; return (PsimagLite::norm(ydiff) > 1e-8); } static SizeType counter_; bool enabled_; SizeType pairCount_; bool disable_; VectorType y_; std::ofstream fout_; VectorBoolType signs_; ConcurrencyType::MutexType mutex_; }; // class KroneckerDumpter template SizeType KroneckerDumper::counter_ = 0; } // namespace Dmrg #endif // KRONECKERDUMPER_H dmrgpp-6.02/src/Engine/KrylovHelper.h000066400000000000000000000052061414604301300175240ustar00rootroot00000000000000#ifndef KRYLOVHELPER_H #define KRYLOVHELPER_H #include "Vector.h" #include "ProgressIndicator.h" namespace Dmrg { template class KrylovHelper { public: typedef typename TypeWrapperType::MatrixComplexOrRealType MatrixComplexOrRealType; typedef typename TypeWrapperType::VectorWithOffsetType VectorWithOffsetType; typedef typename ActionType::VectorRealType VectorRealType; typedef typename TypeWrapperType::SolverParamsType SolverParamsType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef typename VectorWithOffsetType::value_type ComplexOrRealType; KrylovHelper(const SolverParamsType& params, SizeType firstRitz) : params_(params), firstRitz_(firstRitz), progress_("KrylovHelper") {} template void calcR(VectorType& r, const SomeActionType& whatRorI, const MatrixComplexOrRealType& T, const MatrixComplexOrRealType& V, const VectorWithOffsetType& phi, SizeType n2, SizeType i0) { const bool krylovAbridge = !params_.options.isSet("KrylovNoAbridge"); SizeType n3 = (krylovAbridge) ? 1 : n2; // --------------------------------------------------- // precompute values of calcVTimesPhi(kprime,v,phi,i0) // --------------------------------------------------- VectorType calcVTimesPhiArray(n3); for(SizeType kprime = 0; kprime < n3; ++kprime) calcVTimesPhiArray[kprime] = calcVTimesPhi(kprime, V, phi, i0); ComplexOrRealType sum2 = 0.0; for (SizeType k = firstRitz_; k < n2; ++k) { ComplexOrRealType sum = 0.0; for (SizeType kprime = 0; kprime < n3; ++kprime) { ComplexOrRealType tmp = PsimagLite::conj(T(kprime,k))* calcVTimesPhiArray[kprime]; sum += tmp; if (kprime > 0) sum2 += tmp; } r[k] = sum * whatRorI(k); } PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Abridgment="< class LabeledOperators { class Label { public: typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename PsimagLite::Vector::Type VectorStringType; typedef std::pair PairStringSizeType; Label(PsimagLite::String name, SizeType kindOfSite) : name_(name), kindOfSite_(kindOfSite), isTrackable_(false) {} const OperatorType_& operator()(SizeType dof) const { if (dof < ops_.size()) return ops_[dof]; PsimagLite::String msg("FATAL: LabeledOperators:"); msg += " dof=" + ttos(dof) + " OUT OF RANGE, for label = " + name_ + "\n"; throw PsimagLite::RuntimeError(msg); } bool operator==(const PsimagLite::String& name) const { return (name == name_); } SizeType rows() const { if (ops_.size() == 0) err("FATAL: LabeledOperators::Label::rows(): Internal Error\n"); return ops_[0].getStorage().rows(); } void push(const OperatorType_& op, PsimagLite::String desc = "") { const SizeType n = ops_.size(); if (n > 0 && ops_[n - 1].getStorage().rows() != op.getStorage().rows()) err("LabeledOperators::Label::push: FATAL\n"); ops_.push_back(op); descriptions_.push_back(desc); } void introspect() const { std::cout<<"Label "<::Type VectorLabelType; class IsValue { public: IsValue(PsimagLite::String value) : value_(value) {} bool operator()(Label const* label) const { return (*label == value_); } private: PsimagLite::String value_; }; public: typedef OperatorType_ OperatorType; typedef Label LabelType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename OperatorType::value_type ComplexOrRealType; typedef std::pair PairSizeType; LabeledOperators(PsimagLite::String model = "") : model_(model) {} ~LabeledOperators() { SizeType n = labels_.size(); for (SizeType i = 0; i < n; ++i) { delete labels_[i]; labels_[i] = 0; } } void clear() { const SizeType n = labels_.size(); for (SizeType i = 0; i < n; ++i) { delete labels_[i]; labels_[i] = nullptr; } labels_.clear(); } void setModelName(PsimagLite::String model) { model_ = model; SizeType n = labels_.size(); for (SizeType i = 0; i < n; ++i) { delete labels_[i]; labels_[i] = 0; } labels_.clear(); } Label& createLabel(PsimagLite::String name, SizeType kindOfSite) { typename VectorLabelType::const_iterator x = std::find_if(labels_.begin(), labels_.end(), IsValue(name)); if (x != labels_.end()) err("Repeated label " + name + "\n"); Label* label = new Label(name, kindOfSite); labels_.push_back(label); return *label; } const OperatorType& operator()(PsimagLite::String what, SizeType dof) const { return findLabel(what)(dof); } const LabelType& findLabel(PsimagLite::String what) const { typename VectorLabelType::const_iterator x = std::find_if(labels_.begin(), labels_.end(), IsValue(what)); if (x != labels_.end()) return *(labels_[x - labels_.begin()]); PsimagLite::String str("LabeledOperators: model=" + model_); str += " label=" + what + " not found\n"; throw PsimagLite::RuntimeError(str); } void introspect() const { SizeType n = labels_.size(); std::cout<<"There are "<introspect(); } void introspect(PsimagLite::String what) const { typename VectorLabelType::const_iterator x = std::find_if(labels_.begin(), labels_.end(), what); if (x != labels_.end()) return labels_[x - labels_.begin()]->introspect(); PsimagLite::String str("LabeledOperators: model=" + model_); str += " label=" + what + " not found\n"; throw PsimagLite::RuntimeError(str); } PsimagLite::String modelName() const { return model_; } SizeType size() const { return labels_.size(); } const LabelType& operator[](SizeType ind) const { assert(ind < labels_.size()); assert(labels_[ind]); return *(labels_[ind]); } void makeTrackable(PsimagLite::String name) { const LabelType& label = findLabel(name); LabelType& labelNonConst = const_cast(label); labelNonConst.makeTrackable(); } private: void pushIdentity(LabelType& label, SizeType nrow) { typename OperatorType::StorageType tmp(nrow, nrow); tmp.makeDiagonal(nrow, 1.0); typename OperatorType::Su2RelatedType su2Related; label.push(OperatorType(tmp, 1.0, typename OperatorType::PairType(0,0), 1.0, su2Related)); } LabeledOperators(const LabeledOperators&); LabeledOperators& operator=(const LabeledOperators&); PsimagLite::String model_; VectorLabelType labels_; }; } #endif // LABELEDOPERATORS_H dmrgpp-6.02/src/Engine/LazyAlgebra.h000066400000000000000000000070501414604301300172720ustar00rootroot00000000000000#ifndef LAZYALGEBRA_H #define LAZYALGEBRA_H #include "Vector.h" namespace Dmrg { template class LazyAlgebraFactor { typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename OperatorType::value_type ComplexOrRealType; public: LazyAlgebraFactor() : ops_(1, OperatorType()), indices_(1, 1), overallFactor_(1.0) {} LazyAlgebraFactor(const OperatorType& op) : ops_(1, op), indices_(1, 1), overallFactor_(1.0) {} const LazyAlgebraFactor& operator*=(const ComplexOrRealType& f) { overallFactor_ *= f; return *this; } SizeType metaDiff(const LazyAlgebraFactor& other) const { const SizeType n = indices_.size(); if (other.indices_.size() != n) return 1; SizeType sum = 0; for (SizeType i = 0; i < n; ++i) { SizeType ind = indices_[i]; if (ind != other.indices_[i]) return 2; if (ind == 0) continue; --ind; assert(ind < ops_.size() && ind < other.ops_.size()); sum += ops_[ind].metaDiff(other.ops_[ind]); } return sum; } bool isEmpty() const { const SizeType n = indices_.size(); for (SizeType i = 0; i < n; ++i) { SizeType ind = indices_[i]; if (ind == 0) return false; --ind; assert(ind < ops_.size()); if (ops_[ind].isEmpty()) continue; } return true; } friend LazyAlgebraFactor operator*(const LazyAlgebraFactor& a, const LazyAlgebraFactor& b) { LazyAlgebraFactor c = a; c.overallFactor_ *= b.overallFactor_; const SizeType n = b.indices_.size(); SizeType offset = c.ops_.size(); for (SizeType i = 0; i < n; ++i) { SizeType ind = b.indices_[i]; if (ind == 0) { c.indices_.push_back(0); continue; } --ind; assert(ind < b.ops_.size()); c.ops_.push_back(b.ops_[ind]); c.indices_.push_back(ind + 1 + offset); } return c; } private: VectorOperatorType ops_; VectorSizeType indices_; ComplexOrRealType overallFactor_; }; template class LazyAlgebra { public: typedef LazyAlgebraFactor LazyAlgebraFactorType; typedef typename PsimagLite::Vector::Type VectorLazyAlgebraFactorType; typedef typename OperatorType::value_type ComplexOrRealType; LazyAlgebra() : factors_(1, OperatorType()) {} LazyAlgebra(const OperatorType& op) : factors_(1, op) {} const LazyAlgebra& operator+=(const LazyAlgebra& f) { const SizeType n = f.factors_.size(); for (SizeType i = 0; i < n; ++i) factors_.push_back(f.factors_[i]); return *this; } const LazyAlgebra& operator*=(const ComplexOrRealType& f) { const SizeType n = factors_.size(); for (SizeType i = 0; i < n; ++i) factors_[i] *= f; return *this; } const LazyAlgebra& operator*=(const LazyAlgebra& other) { const SizeType n = factors_.size(); const SizeType m = other.factors_.size(); VectorLazyAlgebraFactorType newFactors; for (SizeType i = 0; i < n; ++i) for (SizeType j = 0; j < m; ++j) newFactors.push_back(factors_[i]*other.factors_[j]); factors_ = newFactors; return *this; } SizeType metaDiff(const LazyAlgebra& other) const { const SizeType n = factors_.size(); if (other.factors_.size() != n) return 1; SizeType sum = 0; for (SizeType i = 0; i < n; ++i) sum += factors_[i].metaDiff(other.factors_[i]); return sum; } bool isEmpty() const { const SizeType n = factors_.size(); for (SizeType i = 0; i < n; ++i) if (factors_[i].isEmpty()) continue; return true; } private: VectorLazyAlgebraFactorType factors_; }; } #endif // LAZYALGEBRA_H dmrgpp-6.02/src/Engine/LeftRightSuper.h000066400000000000000000000275561414604301300200210ustar00rootroot00000000000000/* Copyright (c) 2009-2014-2020, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file LeftRightSuper.h * * A class that contains the left block or system, the * right block or environ, and the superblock */ #ifndef LEFT_RIGHT_SUPER_H #define LEFT_RIGHT_SUPER_H #include "ProgressIndicator.h" #include "Io/IoNg.h" #include "ProgramGlobals.h" namespace Dmrg { template class LeftRightSuper { public: typedef typename SuperBlockType::RealType RealType; typedef BasisWithOperatorsType_ BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename BasisWithOperatorsType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::StorageType OperatorStorageType; typedef typename BasisType::BlockType BlockType; typedef PsimagLite::ProgressIndicator ProgressIndicatorType; typedef LeftRightSuper ThisType; typedef typename BasisType::QnType QnType; template LeftRightSuper(IoInputter& io, PsimagLite::String prefix, bool isObserveCode, typename PsimagLite::EnableIf< PsimagLite::IsInputLike::True, int>::Type = 0) : progress_("LeftRightSuper"), left_(0),right_(0),super_(0),refCounter_(0) { bool minimizeRead = isObserveCode; prefix += "/LRS"; PsimagLite::String nameSuper; io.read(nameSuper, prefix + "/NameSuper"); PsimagLite::String nameLeft; io.read(nameLeft, prefix + "/NameSystem"); PsimagLite::String nameRight; io.read(nameRight, prefix + "/NameEnviron"); super_ = new SuperBlockType(io, prefix + "/" + nameSuper, minimizeRead); left_ = new BasisWithOperatorsType(io, prefix + "/" + nameLeft, true); right_ = new BasisWithOperatorsType(io, prefix + "/" + nameRight, true); } LeftRightSuper(const PsimagLite::String& slabel, const PsimagLite::String& elabel, const PsimagLite::String& selabel) : progress_("LeftRightSuper"), left_(0),right_(0),super_(0),refCounter_(0) { left_ = new BasisWithOperatorsType(slabel); right_ = new BasisWithOperatorsType(elabel); super_ = new SuperBlockType(selabel); } ~LeftRightSuper() { if (refCounter_ > 0) { --refCounter_; return; } delete left_; left_ = 0; delete right_; right_ = 0; delete super_; super_ = 0; } LeftRightSuper(BasisWithOperatorsType& left, BasisWithOperatorsType& right, SuperBlockType& super) : progress_("LeftRightSuper"), left_(&left),right_(&right),super_(&super),refCounter_(1) {} LeftRightSuper(const ThisType& rls) : progress_("LeftRightSuper"),refCounter_(1) { left_ = rls.left_; right_ = rls.right_; super_ = rls.super_; } void dontCopyOperators(const ThisType& rls) { assert(left_); left_->dontCopyOperators(rls.left()); assert(right_); right_->dontCopyOperators(rls.right()); assert(super_); assert(rls.super_); *super_ = *rls.super_; if (refCounter_ > 0) --refCounter_; } template SizeType growLeftBlock(const SomeModelType& model, BasisWithOperatorsType &pS, BlockType const &X, RealType time) { assert(left_); return grow(*left_, model, pS, X, ProgramGlobals::DirectionEnum::EXPAND_SYSTEM, time); } template SizeType growRightBlock(const SomeModelType& model, BasisWithOperatorsType &pE, BlockType const &X, RealType time) { assert(right_); return grow(*right_, model, pE, X, ProgramGlobals::DirectionEnum::EXPAND_ENVIRON, time); } void printSizes(const PsimagLite::String& label,std::ostream& os) const { assert(left_); assert(right_); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<block().size(); progress_.printline(msgg, os); } SizeType sites() const { assert(left_); assert(right_); return left_->block().size() + right_->block().size(); } /*!PTEX_LABEL{setToProductLrs} */ void setToProduct(SizeType initialSizeOfHashTable) { assert(left_); assert(right_); assert(super_); super_->setToProduct(*left_, *right_, initialSizeOfHashTable); } void write(PsimagLite::IoNg::Out& io, PsimagLite::String prefix, typename BasisWithOperatorsType::SaveEnum option, bool minimizeWrite) const { prefix += "/LRS"; io.createGroup(prefix); io.write(super_->name(), prefix + "/NameSuper"); io.write(left_->name(), prefix + "/NameSystem"); io.write(right_->name(), prefix + "/NameEnviron"); assert(left_); assert(right_); assert(super_); super_->write(io, PsimagLite::IoSerializer::NO_OVERWRITE, prefix, minimizeWrite); left_->write(io, PsimagLite::IoSerializer::NO_OVERWRITE, prefix, option); right_->write(io, PsimagLite::IoSerializer::NO_OVERWRITE, prefix, option); } const BasisWithOperatorsType& left() const { assert(left_); return *left_; } const BasisWithOperatorsType& right() const { assert(right_); return *right_; } BasisWithOperatorsType& leftNonConst() { assert(left_); return *left_; } BasisWithOperatorsType& rightNonConst() { assert(right_); return *right_; } const SuperBlockType& super() const { assert(super_); return *super_; } void left(const BasisWithOperatorsType& left) { if (refCounter_ > 0) err("LeftRightSuper::left(...): not the owner\n"); assert(left_); *left_=left; // deep copy } void right(const BasisWithOperatorsType& right) { if (refCounter_ > 0) err("LeftRightSuper::right(...): not the owner\n"); assert(right_); *right_=right; // deep copy } template void read(IoInputType& io, PsimagLite::String prefix, typename PsimagLite::EnableIf< PsimagLite::IsInputLike::True, int>::Type = 0) { prefix += "/LRS"; PsimagLite::String nameSuper; io.read(nameSuper, prefix + "/NameSuper"); PsimagLite::String nameSys; io.read(nameSys, prefix + "/NameSystem"); PsimagLite::String nameEnviron; io.read(nameEnviron, prefix + "/NameEnviron"); super_->read(io, prefix + "/" + nameSuper); left_->read(io, prefix + "/" + nameSys); right_->read(io, prefix + "/" + nameEnviron); } private: //! add block X to basis pS and put the result in left_: /* PSIDOC LeftRightSuperGrow Local operators are set for the basis in question with a call to \cppClass{BasisWithOperators}'s member function \cppFunction{setOperators()}. When adding sites to the system or environment the program does a full outer product, i.e., it increases the size of all local operators. This is performed by the call to \verb!setToProduct! \verb!(pSprime,pS,Xbasis,dir,option)! in the grow function, which actually calls \verb!pSprime.setToProduct! \verb!(pS,xBasis,dir)! This function also recalculates the Hamiltonian in the outer product of (i) the previous system basis $pS$, and (ii) the basis $Xbasis$ corresponding to the site(s) that is (are) being added. To do this, the Hamiltonian connection between the two parts needs to be calculated and added, and this is done in the call to \cppFunction{addHamiltonianConnection}. Finally, the resulting dmrgBasis object for the outer product, pSprime, is set to contain this full Hamiltonian with the call to \cppFunction{pSprime.setHamiltonian(matrix)}. */ template SizeType grow(BasisWithOperatorsType& leftOrRight, const SomeModelType& model, BasisWithOperatorsType &pS, const BlockType& X, ProgramGlobals::DirectionEnum dir, RealType time) { BasisWithOperatorsType Xbasis("Xbasis"); typedef LeftRightSuper LeftRightSuper2Type; SizeType oneSiteTruncSize = Xbasis.setOneSite(X, model, time); assert(X.size() == 1); SizeType lastS = pS.block().size(); assert(lastS > 0); model.superOpHelper().setToProduct(pS.block()[--lastS], X[0], dir); leftOrRight.setToProduct(pS, Xbasis, model.superOpHelper()); SparseMatrixType matrix = leftOrRight.hamiltonian().getCRS(); LeftRightSuper2Type* lrs; BasisType* leftOrRightL = &leftOrRight; if (dir == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) { lrs = new LeftRightSuper2Type(pS,Xbasis,*leftOrRightL); } else { lrs = new LeftRightSuper2Type(Xbasis,pS,*leftOrRightL); } //!PTEX_LABEL{295} model.addHamiltonianConnection(matrix, *lrs, time); delete lrs; leftOrRight.setHamiltonian(matrix); return oneSiteTruncSize; } LeftRightSuper(LeftRightSuper&); LeftRightSuper& operator=(const LeftRightSuper&); ProgressIndicatorType progress_; BasisWithOperatorsType* left_; BasisWithOperatorsType* right_; SuperBlockType* super_; SizeType refCounter_; }; // class LeftRightSuper } // namespace Dmrg /*@}*/ #endif // LEFT_RIGHT_SUPER_H dmrgpp-6.02/src/Engine/LineChangerLinear.h000066400000000000000000000071331414604301300204110ustar00rootroot00000000000000// BEGIN LICENSE BLOCK /* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ // END LICENSE BLOCK /** \ingroup DMRG */ /*@{*/ /*! \file LineChangerLinear.h * * * */ #ifndef LINE_CHANGER_LINEAR_H #define LINE_CHANGER_LINEAR_H #include "String.h" #include #include "TypeToString.h" namespace Dmrg { template class LineChangerLinear { public: LineChangerLinear(const PsimagLite::String& match, ValueType step, ValueType init, const PsimagLite::String& pre, const PsimagLite::String& post) : match_(match),step_(step),init_(init),pre_(pre),post_(post) { } const PsimagLite::String& string() const { return match_; } bool act(SizeType i,PsimagLite::String& line) const { ValueType val = i*step_ + init_; line=match_ + pre_ + ttos(val) + post_; return true; } private: PsimagLite::String match_; ValueType step_,init_; PsimagLite::String pre_,post_; }; // class LineChangerLinear } // namespace Dmrg /*@}*/ #endif // LINE_CHANGER_LINEAR_H dmrgpp-6.02/src/Engine/Link.h000066400000000000000000000072561414604301300160020ustar00rootroot00000000000000/* Copyright (c) 2009-2013, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file Link.h * * DOC NEEDED FIXME */ #ifndef LINK_H #define LINK_H #include "ProgramGlobals.h" namespace Dmrg { template struct Link { typedef std::pair PairSizeType; typedef std::pair PairCharType; typedef typename PsimagLite::Real::Type RealType; Link(PairSizeType finalIndices1, ProgramGlobals::ConnectionEnum type1, const FieldType& value1, ProgramGlobals::FermionOrBosonEnum fOb, const PairCharType& mods1, SizeType aM, RealType aF, SizeType cat) : finalIndices(finalIndices1), type(type1), value(value1), fermionOrBoson(fOb), mods(mods1), angularMomentum(aM), angularFactor(aF), category(cat) {} PairSizeType finalIndices; ProgramGlobals::ConnectionEnum type; FieldType value; ProgramGlobals::FermionOrBosonEnum fermionOrBoson; PairCharType mods; // operator modifiers SizeType angularMomentum; RealType angularFactor; SizeType category; }; // struct Link } // namespace Dmrg /*@}*/ #endif // LINK_H dmrgpp-6.02/src/Engine/ManyOmegas.h000066400000000000000000000040531414604301300171350ustar00rootroot00000000000000#ifndef MANYOMEGAS_H #define MANYOMEGAS_H #include "DmrgRunner.h" #include "PsiBase64.h" #include "InputNg.h" #include "LanczosSolver.h" #include "Vector.h" #include "PsimagLite.h" #include "InterNode.h" #include "OmegaParams.h" namespace Dmrg { template class ManyOmegas { public: typedef typename PsimagLite::Real::Type RealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef DmrgRunner DmrgRunnerType; typedef typename DmrgRunnerType::InputNgType InputNgType; typedef PsimagLite::PsiApp ApplicationType; ManyOmegas(PsimagLite::String data, RealType precision, const OmegaParamsType& omegaParams, const ApplicationType& app) : data_(data), runner_(precision, app), omegaParams_(omegaParams) {} void run(bool dryRun, PsimagLite::String root, PsimagLite::String insitu) { //lambda PsimagLite::InterNode<> internode(PsimagLite::MPI::COMM_WORLD); internode.parallelFor(omegaParams_.offset(), omegaParams_.total(), [this, root, dryRun, insitu](SizeType i, SizeType) { const RealType omega = omegaParams_.omega(i); PsimagLite::String data2 = addOmega(omega); PsimagLite::String outputfile = "\nOutputFile=\"" + root + ttos(i) + "\";\n"; data2 += outputfile; PsimagLite::String logfile = "runForinput" + ttos(i) + ".cout"; std::cerr<<"ManyOmegas.h:: omega = "< PredicateAwesomeType; typedef PsimagLite::ExpressionCalculator ExpressionCalculatorType; typedef PsimagLite::PrepassData PrepassDataType; typedef PsimagLite::ExpressionPrepass ExpressionPrepassType; ManyPointAction(bool hasNonTrivialAction, PsimagLite::String actionString) : nonTrivial_(hasNonTrivialAction), actionString_(actionString) {} bool operator()(SizeType s0, SizeType s1, SizeType s2, SizeType s3) const { if (!nonTrivial_) return true; PredicateAwesomeType pred(actionString_, "~"); return pred.isTrue("%0", s0, "%1", s1, "%2", s2, "%3", s3); } bool operator()(SizeType s0, SizeType s1) const { if (!nonTrivial_) return true; PredicateAwesomeType pred(actionString_, "~"); return pred.isTrue("%0", s0, "%1", s1); } bool nonTrivial() const { return nonTrivial_; } private: bool nonTrivial_; PsimagLite::String actionString_; }; } #endif // MANYPOINTACTION_H dmrgpp-6.02/src/Engine/ManyToTwoConnection.h000066400000000000000000000140121414604301300210120ustar00rootroot00000000000000#ifndef MANYTOTWOCONNECTION_H #define MANYTOTWOCONNECTION_H #include "ProgramGlobals.h" namespace Dmrg { template class ManyToTwoConnection { public: typedef std::pair PairSizeType; typedef std::pair PairCharType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename ModelLinksType::TermType::OneLinkType ModelTermLinkType; typedef typename ModelLinksType::HermitianEnum HermitianEnum; ManyToTwoConnection(const VectorSizeType& hItems, ProgramGlobals::ConnectionEnum type, const ModelTermLinkType& oneLink, const LeftRightSuperType& lrs, const SuperOpHelperType& superOpHelper) : oneLink_(oneLink), lrs_(lrs) { finalIndices_ = finalIndices(hItems, type, superOpHelper); assert(oneLink.mods.size() == 2); mods_ = PairCharType(oneLink.mods[0], oneLink.mods[1]); } const PairSizeType& finalIndices() const { return finalIndices_; } const PairCharType& finalMods() const { return mods_; } bool connectionIsHermitian(const ModelLinksType& modelLinks) const { return (oneLink_.fermionOrBoson == ProgramGlobals::FermionOrBosonEnum::FERMION) ? linkIsHermitianFermion(modelLinks) : linkIsHermitianBoson(modelLinks); } private: bool linkIsHermitianFermion(const ModelLinksType& modelLinks) const { assert(oneLink_.fermionOrBoson == ProgramGlobals::FermionOrBosonEnum::FERMION); assert(oneLink_.indices.size() == 2); HermitianEnum h1 = modelLinks.getHermitianProperty(oneLink_.indices[0]); HermitianEnum h2 = modelLinks.getHermitianProperty(oneLink_.indices[1]); bool isHermit1 = (h1 == ModelLinksType::HERMIT_PLUS); bool isHermit2 = (h2 == ModelLinksType::HERMIT_PLUS); bool isAnti1 = (h1 == ModelLinksType::HERMIT_MINUS); bool isAnti2 = (h2 == ModelLinksType::HERMIT_MINUS); bool b1 = (isHermit1 && isAnti2); bool b2 = (isAnti1 && isHermit2); return (b1 || b2); } bool linkIsHermitianBoson(const ModelLinksType& modelLinks) const { assert(oneLink_.fermionOrBoson == ProgramGlobals::FermionOrBosonEnum::BOSON); assert(oneLink_.indices.size() == 2); HermitianEnum h1 = modelLinks.getHermitianProperty(oneLink_.indices[0]); HermitianEnum h2 = modelLinks.getHermitianProperty(oneLink_.indices[1]); bool isHermit1 = (h1 == ModelLinksType::HERMIT_PLUS); bool isHermit2 = (h2 == ModelLinksType::HERMIT_PLUS); return (isHermit1 && isHermit2); } PairSizeType finalIndices(const VectorSizeType& hItems, ProgramGlobals::ConnectionEnum type, const SuperOpHelperType& superOpHelper) const { if (hItems.size() == 4) { assert(type == ProgramGlobals::ConnectionEnum::SYSTEM_ENVIRON); return finalIndices4sites(hItems, superOpHelper); } const ProgramGlobals::SysOrEnvEnum sysOrEnv = (type == ProgramGlobals::ConnectionEnum::SYSTEM_ENVIRON) ? ProgramGlobals::SysOrEnvEnum::SYSTEM : ProgramGlobals::SysOrEnvEnum::ENVIRON; const ProgramGlobals::SysOrEnvEnum envOrSys = (type == ProgramGlobals::ConnectionEnum::SYSTEM_ENVIRON) ? ProgramGlobals::SysOrEnvEnum::ENVIRON : ProgramGlobals::SysOrEnvEnum::SYSTEM; assert(hItems.size() == 2); SizeType i = PsimagLite::indexOrMinusOne(lrs_.super().block(), hItems[0]); SizeType j = PsimagLite::indexOrMinusOne(lrs_.super().block(), hItems[1]); const SizeType offset = lrs_.left().block().size(); SizeType site1Corrected = (type == ProgramGlobals::ConnectionEnum::SYSTEM_ENVIRON) ? i : i - offset; SizeType site2Corrected = (type == ProgramGlobals::ConnectionEnum::SYSTEM_ENVIRON) ? j - offset : j; assert(oneLink_.indices.size() == 2); PairSizeType finalIndex0; finalIndex0.first = finalIndex(sysOrEnv, site1Corrected, oneLink_.indices[0]); finalIndex0.second = finalIndex(envOrSys, site2Corrected, oneLink_.indices[1]); return finalIndex0; } SizeType finalIndex(ProgramGlobals::SysOrEnvEnum type, SizeType i, SizeType sigma) const { assert(type == ProgramGlobals::SysOrEnvEnum::SYSTEM || type == ProgramGlobals::SysOrEnvEnum::ENVIRON); return (type == ProgramGlobals::SysOrEnvEnum::SYSTEM) ? lrs_.left(). localOperatorIndex(i, sigma) : lrs_.right().localOperatorIndex(i, sigma); } PairSizeType finalIndices4sites(const VectorSizeType& hItems, const SuperOpHelperType& superOpHelper) const { SizeType last = lrs_.left().block().size(); assert(last > 0); --last; SizeType lmax = lrs_.left().block()[last]; VectorSizeType sysSites; VectorSizeType envSites; assert(hItems.size() == 4); for (SizeType i = 0; i < 4; ++i) { if (hItems[i] <= lmax) sysSites.push_back(hItems[i]); else envSites.push_back(hItems[i]); } assert(sysSites.size() > 0); assert(envSites.size() > 0); SizeType finalLeft = 0; if (sysSites.size() == 1) { SizeType site1Corrected = PsimagLite::indexOrMinusOne(lrs_.super().block(), sysSites[0]); finalLeft = finalIndex(ProgramGlobals::SysOrEnvEnum::SYSTEM, site1Corrected, oneLink_.indices[0]); } else { finalLeft = superOpHelper.leftIndex(sysSites, oneLink_.indices[0]); } SizeType finalRight = 0; if (envSites.size() == 1) { SizeType jj = PsimagLite::indexOrMinusOne(lrs_.super().block(), envSites[0]); SizeType site2Corrected = jj - lrs_.left().block().size(); finalRight = finalIndex(ProgramGlobals::SysOrEnvEnum::ENVIRON, site2Corrected, oneLink_.indices[1]); } else { finalRight = superOpHelper.rightIndex(envSites, oneLink_.indices[1]); } return PairSizeType(finalLeft, finalRight); } const ModelTermLinkType& oneLink_; const LeftRightSuperType& lrs_; PairSizeType finalIndices_; PairCharType mods_; }; } #endif // MANYTOTWOCONNECTION_H dmrgpp-6.02/src/Engine/MatrixOrIdentity.h000066400000000000000000000066561414604301300203670ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file MatrixOrIdentity.h * * * */ #ifndef MATRIX_OR_IDENTITY #define MATRIX_OR_IDENTITY namespace Dmrg { template class MatrixOrIdentity { typedef typename SparseMatrixType::value_type SparseElementType; public: MatrixOrIdentity(bool enabled,const SparseMatrixType& m) : enabled_(enabled),m_(m),one_(1.0) {} SizeType getRowPtr(SizeType i) const { return (enabled_) ? m_.getRowPtr(i) : i; } int getColOrExit(SizeType i) const { if (enabled_) return m_.getCol(i); if (i < m_.cols()) return i; return -1; } const SparseElementType& getValue(SizeType i) const { return (enabled_) ? m_.getValue(i) : one_; } private: bool enabled_; const SparseMatrixType& m_; SparseElementType one_; }; // class MatrixOrIdentity } // namespace Dmrg /*@}*/ #endif // MATRIX_OR_IDENTITY dmrgpp-6.02/src/Engine/MatrixVectorBase.h000066400000000000000000000112021414604301300203110ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file MatrixVectorBase.h * * The base of a hierarchy to encapsulate the product x+=Hy, * where x and y are vectors and H is the Hamiltonian matrix * */ #ifndef DMRG_MATRIX_VECTOR_BASE_H #define DMRG_MATRIX_VECTOR_BASE_H #include namespace Dmrg { template class MatrixVectorBase { public: typedef ModelType_ ModelType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename PsimagLite::Vector::Type VectorType; typedef PsimagLite::Matrix FullMatrixType; SizeType reflectionSector() const { return 0; } void reflectionSector(SizeType) { } void fullDiag(VectorRealType& eigs,FullMatrixType& fm) const; static void fullDiag(VectorRealType& eigs, FullMatrixType& fm, const SparseMatrixType& matrixStored, int tmp) { SizeType maxMatrixRankStored = (tmp < 0) ? 0 : tmp; if (matrixStored.rows() == 0) { PsimagLite::String str("MatrixVectorBase:fullDiag: no stored matrix\n"); str += "\trow= " + ttos(eigs.size()) + " max row= "; str += ttos(maxMatrixRankStored) + "\n"; str += "Please add or increase MaxMatrixRankStored=" + ttos(2 + matrixStored.rows()); str += " in your input file\n"; err(str); } if (matrixStored.rows() > maxMatrixRankStored) { PsimagLite::String str("MatrixVectorBase:fullDiag: internal error!\n"); str += "\trow= " + ttos(matrixStored.rows()) + " max row= "; str += ttos(maxMatrixRankStored) + "\n"; str += "Please add or increase MaxMatrixRankStored= to at least " + ttos(2 + eigs.size()) + " in your input file\n"; err(str); } fm = matrixStored.toDense(); diag(fm,eigs,'V'); } }; // class MatrixVectorBase } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/MatrixVectorKron/000077500000000000000000000000001414604301300202035ustar00rootroot00000000000000dmrgpp-6.02/src/Engine/MatrixVectorKron/ArrayOfMatStruct.h000066400000000000000000000355541414604301300236020ustar00rootroot00000000000000/* Copyright (c) 2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ // END LICENSE BLOCK /** \ingroup DMRG */ /*@{*/ /*! \file ArrayOfMatStruct.h * * */ #ifndef ARRAY_OF_MAT_STRUCT_H #define ARRAY_OF_MAT_STRUCT_H #include "GenIjPatch.h" #include "CrsMatrix.h" #include "../KronUtil/MatrixDenseOrSparse.h" #include "Profiling.h" namespace Dmrg { template class ArrayOfMatStruct { public: typedef typename LeftRightSuperType::SparseMatrixType SparseMatrixType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::OperatorStorageType OperatorStorageType; typedef MatrixDenseOrSparse MatrixDenseOrSparseType; typedef typename MatrixDenseOrSparseType::RealType RealType; typedef GenIjPatch GenIjPatchType; typedef typename GenIjPatchType::VectorSizeType VectorSizeType; typedef typename GenIjPatchType::BasisType BasisType; typedef typename MatrixDenseOrSparseType::value_type ComplexOrRealType; typedef PsimagLite::Matrix MatrixType; ArrayOfMatStruct(const OperatorStorageType& sparse1, const GenIjPatchType& patchOld, const GenIjPatchType& patchNew, typename GenIjPatchType::LeftOrRightEnumType leftOrRight, RealType threshold, bool useLowerPart) : data_(patchNew(leftOrRight).size(), patchOld(leftOrRight).size()) { const SparseMatrixType& sparse = sparse1.getCRS(); const BasisType& basisOld = (leftOrRight == GenIjPatchType::LEFT) ? patchOld.lrs().left() : patchOld.lrs().right(); const BasisType& basisNew = (leftOrRight == GenIjPatchType::LEFT) ? patchNew.lrs().left() : patchNew.lrs().right(); const SizeType npatchOld = patchOld(leftOrRight).size(); const SizeType npatchNew = patchNew(leftOrRight).size(); const SizeType ipatchSize = npatchNew; const SizeType jpatchSize = npatchOld; const bool use_push = true; #ifdef NDEBUG const int idebug = 0; #else // --------------------------- // turn on more debug checking // --------------------------- const int idebug = 1; #endif // --------------------------------- // precompute the size of each patch // --------------------------------- std::vector ipatch_Size( ipatchSize ); std::vector jpatch_Size( jpatchSize ); // ---------------------------------- // setup mapping from index to ipatch // ---------------------------------- const SizeType ncols = sparse.cols(); const SizeType invalid_jpatch_number = jpatchSize + 1; // ---------------------------------------- // initiall fill array with invalid values // ---------------------------------------- std::vector index_to_jpatch(ncols, invalid_jpatch_number); std::vector offset_ipatch(ipatchSize); std::vector offset_jpatch(jpatchSize); for(SizeType ipatch=0; ipatch < ipatchSize; ++ipatch) { const SizeType igroup = patchNew(leftOrRight)[ipatch]; const SizeType i1 = basisNew.partition(igroup); const SizeType i2 = basisNew.partition(igroup+1); assert( (0 <= i1) && (i1 <= i2) && (i2 <= sparse.rows())); offset_ipatch[ ipatch ] = i1; const SizeType isize = i2 - i1; ipatch_Size[ ipatch ] = isize; assert( ipatch_Size[ ipatch ] >= 1 ); }; for(SizeType jpatch=0; jpatch < jpatchSize; ++jpatch) { const SizeType jgroup = patchOld(leftOrRight)[jpatch]; const SizeType j1 = basisOld.partition(jgroup); const SizeType j2 = basisOld.partition(jgroup+1); assert( (0 <= j1) && (j1 <= j2) && (j2 <= ncols) ); offset_jpatch[ jpatch ] = j1; const SizeType jsize = j2 - j1; jpatch_Size[ jpatch ] = jsize; assert( jpatch_Size[ jpatch ] >= 1 ); for(SizeType j=j1; j < j2; j++) { index_to_jpatch[ j ] = jpatch; }; }; // ------------ // double check // ------------ if (idebug >= 1) { SizeType sum_ipatch_Size = 0; for(SizeType ipatch=0; ipatch < ipatchSize; ipatch++) { sum_ipatch_Size += ipatch_Size[ ipatch ]; }; assert( (0 <= sum_ipatch_Size) && (sum_ipatch_Size <= sparse.rows()) ); SizeType sum_jpatch_Size = 0; for(SizeType jpatch=0; jpatch < jpatchSize; jpatch++) { sum_jpatch_Size += jpatch_Size[ jpatch ]; }; assert( (0 <= sum_jpatch_Size) && (sum_jpatch_Size <= ncols) ); }; // ----------------------------------------- // allocate data structure outside main loop // to avoid repeated allocation and deallocation // ----------------------------------------- SizeType max_ipatchSize = 0; for(SizeType ipatch=0; ipatch < ipatchSize; ipatch++) { max_ipatchSize = (ipatch_Size[ ipatch ] > max_ipatchSize) ? ipatch_Size[ ipatch ] : max_ipatchSize; }; std::vector< std::vector > rowPtr1D(jpatchSize); for(SizeType jpatch=0; jpatch < jpatchSize; jpatch++) { rowPtr1D[jpatch].reserve( max_ipatchSize ); }; std::vector< SizeType > total_nz(jpatchSize,0); std::vector is_dense1D( jpatchSize, false ); for(SizeType ipatch=0; ipatch < ipatchSize; ipatch++) { // ------------------------------------------------------ // initialize data structure to count number of nonzeros // per row in sparse matrix of data_(ipatch,jpatch) // ------------------------------------------------------ for(SizeType jpatch=0; jpatch < jpatchSize; jpatch++) { is_dense1D[ jpatch ] = false; }; for(SizeType jpatch=0; jpatch < jpatchSize; jpatch++) { total_nz[ jpatch ] = 0; }; const SizeType local_nrows = ipatch_Size[ipatch]; for(SizeType jpatch=0; jpatch < jpatchSize; jpatch++) { rowPtr1D[ jpatch ].clear(); rowPtr1D[ jpatch ].resize( local_nrows,0 ); }; // -------------------------------------- // first pass to count number of nonzeros // -------------------------------------- SizeType i1 = offset_ipatch[ ipatch ]; SizeType i2 = i1 + ipatch_Size[ipatch]; for(SizeType irow=i1; irow < i2; irow++) { const SizeType istart = sparse.getRowPtr(irow); const SizeType iend = sparse.getRowPtr(irow+1); for(SizeType k=istart; k < iend; k++) { const SizeType jcol = sparse.getCol(k); const SizeType jpatch = index_to_jpatch[ jcol ]; bool is_valid_jpatch = (0 <= jpatch) && (jpatch < jpatchSize); if (!is_valid_jpatch) continue; if (useLowerPart && (ipatch < jpatch)) continue; const SizeType indx = jpatch; const SizeType i1 = offset_ipatch[ ipatch ]; const SizeType local_irow = (irow - i1 ); assert( (0 <= local_irow) && (local_irow < ipatch_Size[ ipatch ]) ); (rowPtr1D[indx])[local_irow]++; total_nz[ indx ]++; }; }; // --------------------- // setup sparse matrices // --------------------- // ------------------------------------------------------ // This option tries to directly use data_(ipatch,jpatch) // but requires some changes to the interface to explicitly // construct a fully dense or sparse matrix and extract back out // the dense matrix or sparse matrix // ------------------------------------------------------ for(SizeType jpatch=0; jpatch < jpatchSize; ++jpatch) { data_(ipatch,jpatch) = 0; if (useLowerPart && (ipatch < jpatch)) continue; const SizeType lnrows = ipatch_Size[ipatch]; const SizeType lncols = jpatch_Size[jpatch]; const SizeType indx = jpatch; const SizeType nnz = total_nz[ indx ]; const bool isDense = (nnz >= threshold * lnrows * lncols); assert( nnz <= lnrows * lncols ); is_dense1D[ indx ] = isDense; if (nnz == 0) continue; // <--- ATTENTION: EARLY EXIT data_(ipatch, jpatch) = new MatrixDenseOrSparseType(lnrows, lncols, isDense, nnz); MatrixDenseOrSparseType* pmat = data_(ipatch, jpatch); if (isDense) { // --------------------------- // store as fully dense matrix // --------------------------- MatrixType& dense_mat = pmat->getDense(); assert( dense_mat.rows() == lnrows ); assert( dense_mat.cols() == lncols ); bool const need_zero_out = false; if (need_zero_out) { for( SizeType j=0; j < lncols; j++) { for( SizeType i=0; i < lnrows; i++) { dense_mat(i,j) = 0; }; }; }; } else { // ---------------------- // store as sparse matrix // ---------------------- SparseMatrixType& sparse_mat = pmat->getSparse(); assert( sparse_mat.rows() == lnrows ); assert( sparse_mat.cols() == lncols ); // ------------------------------ // preallocate sufficient storage // ------------------------------ if (use_push) { // ----------------------- // avoid zeroing out array // ----------------------- sparse_mat.resize( lnrows, lncols ); sparse_mat.reserve( nnz ); } else { sparse_mat.resize(lnrows,lncols,nnz); }; SizeType ip = 0; for(SizeType irow = 0; irow < lnrows; irow++) { SizeType icount = (rowPtr1D[ indx ])[irow]; (rowPtr1D[ indx ])[irow] = ip; sparse_mat.setRow( irow, ip ); ip += icount; }; sparse_mat.setRow( lnrows, ip ); }; }; // for jpatch // --------------------------------------- // second pass to fill in numerical values // --------------------------------------- for(SizeType irow=i1; irow < i2; irow++) { const SizeType istart = sparse.getRowPtr(irow); const SizeType iend = sparse.getRowPtr(irow+1); for(SizeType k=istart; k < iend; k++) { const SizeType jcol = sparse.getCol(k); const SizeType jpatch = index_to_jpatch[ jcol ]; const bool is_valid_jpatch = (0 <= jpatch) && (jpatch < jpatchSize); if (!is_valid_jpatch) continue; if (useLowerPart && (ipatch < jpatch)) continue; if (!data_(ipatch,jpatch)) continue; // <--- ATTENTION: EARLY EXIT const SizeType indx = jpatch; const SizeType i1 = offset_ipatch[ ipatch ]; const SizeType local_irow = (irow - i1 ); const SizeType j1 = offset_jpatch[ jpatch ]; const SizeType local_jcol = (jcol - j1); const ComplexOrRealType aij = sparse.getValue(k); if (is_dense1D[ indx ]) { MatrixType& dense_mat = data_(ipatch,jpatch)->getDense(); dense_mat(local_irow,local_jcol) = aij; } else { SparseMatrixType& sparse_mat = data_(ipatch,jpatch)->getSparse(); const SizeType ip = (rowPtr1D[ indx ])[ local_irow ]; if (use_push) { sparse_mat.pushCol( local_jcol ); sparse_mat.pushValue( aij ); } else { sparse_mat.setCol( ip, local_jcol ); sparse_mat.setValues(ip, aij ); }; (rowPtr1D[ indx ])[ local_irow ]++; }; }; }; // for irow // -------------------------------- // check data_(ipatch,jpatch) // -------------------------------- if (idebug >= 1) { for(SizeType jpatch=0; jpatch < jpatchSize; ++jpatch) { if (useLowerPart && (ipatch < jpatch)) continue; SizeType indx = jpatch; if (is_dense1D[ indx ]) continue; if (data_(ipatch,jpatch)) (data_(ipatch,jpatch)->getSparse()).checkValidity(); }; }; }; // for ipatch } const MatrixDenseOrSparseType* operator()(SizeType i, SizeType j) const { assert(i data_; }; //class ArrayOfMatStruct } // namespace Dmrg /*@}*/ #endif // ARRAY_OF_MAT_STRUCT_H dmrgpp-6.02/src/Engine/MatrixVectorKron/BatchedGemm2.h000066400000000000000000000250401414604301300225770ustar00rootroot00000000000000#ifndef BATCHEDGEMM_H #define BATCHEDGEMM_H #include "Vector.h" #include #include "BLAS.h" #include "ProgressIndicator.h" namespace Dmrg { template class BatchedGemm2 { typedef typename InitKronType::ArrayOfMatStructType ArrayOfMatStructType; typedef typename InitKronType::GenIjPatchType GenIjPatchType; typedef typename ArrayOfMatStructType::MatrixDenseOrSparseType MatrixDenseOrSparseType; typedef typename MatrixDenseOrSparseType::VectorType VectorType; typedef typename VectorType::value_type ComplexOrRealType; typedef PsimagLite::Matrix MatrixType; typedef long int IntegerType; typedef typename PsimagLite::Real::Type RealType; typedef PsimagLite::Vector::Type VectorSizeType; typedef PsimagLite::Vector::Type VectorCharType; typedef typename PsimagLite::Vector::Type VectorStarType; typedef typename PsimagLite::Vector::Type VectorConstStarType; static const int ialign_ = 32; static const int idebug_ = 0; // set to 0 until it gives correct results public: BatchedGemm2(const InitKronType& initKron) : initKron_(initKron), progress_("BatchedGemm") { if (!enabled()) return; { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Constructing..."; progress_.printline(msgg, std::cout); } SizeType npatches = initKron_.numberOfPatches(InitKronType::OLD); SizeType noperator = initKron_.connections(); SizeType leftMaxState = initKron_.lrs(InitKronType::NEW).left().size(); SizeType rightMaxState = initKron_.lrs(InitKronType::NEW).right().size(); int nrowAbatch = leftMaxState; int ncolAbatch = leftMaxState * noperator; int nrowBbatch = rightMaxState; int ncolBbatch = rightMaxState * noperator; int ldAbatch = ialign_ * iceil(nrowAbatch, ialign_ ); int ldBbatch = ialign_ * iceil(nrowBbatch, ialign_ ); Abatch_.resize(ldAbatch, ncolAbatch); Bbatch_.resize(ldBbatch, ncolBbatch); /* ------------------------- fill in Abatch and Bbatch ------------------------- */ assert(ldAbatch * leftMaxState * noperator >= 1); assert(ldBbatch * rightMaxState * noperator >= 1); for (SizeType ioperator = 0; ioperator < noperator; ++ioperator) { const ArrayOfMatStructType& xiStruct = initKron_.xc(ioperator); for (SizeType jpatch = 0; jpatch < npatches; ++jpatch) { for (SizeType ipatch = 0; ipatch < npatches; ++ipatch) { const MatrixDenseOrSparseType* AsrcPtr = xiStruct(ipatch, jpatch); if (!AsrcPtr) continue; const MatrixType& Asrc = AsrcPtr->dense(); SizeType igroup = initKron_.patch(InitKronType::NEW, GenIjPatchType::LEFT)[ipatch]; SizeType jgroup = initKron_.patch(InitKronType::NEW, GenIjPatchType::LEFT)[jpatch]; int ia = initKron_.lrs(InitKronType::NEW).left().partition(igroup); int ja = initKron_.lrs(InitKronType::NEW).left().partition(jgroup); mylacpy(Asrc, Abatch_, ia, ja + ioperator*leftMaxState); } } } for (SizeType ioperator = 0; ioperator < noperator; ++ioperator) { const ArrayOfMatStructType& yiStruct = initKron_.yc(ioperator); for (SizeType jpatch = 0; jpatch < npatches; ++jpatch) { for (SizeType ipatch = 0; ipatch < npatches; ++ipatch) { const MatrixDenseOrSparseType* BsrcPtr = yiStruct(ipatch,jpatch); if (!BsrcPtr) continue; const MatrixType& Bsrc = BsrcPtr->dense(); SizeType igroup = initKron_.patch(InitKronType::NEW, GenIjPatchType::RIGHT)[ipatch]; SizeType jgroup = initKron_.patch(InitKronType::NEW, GenIjPatchType::RIGHT)[jpatch]; int ib = initKron_.lrs(InitKronType::NEW).right().partition(igroup); int jb = initKron_.lrs(InitKronType::NEW).right().partition(jgroup); mylacpy(Bsrc, Bbatch_, ib, jb + ioperator*rightMaxState); } } } leftPatchSize_.resize(npatches, 0); rightPatchSize_.resize(npatches, 0); for (SizeType ipatch = 0; ipatch < npatches; ++ipatch) { SizeType igroup = initKron_.patch(InitKronType::NEW, GenIjPatchType::LEFT)[ipatch]; int L1 = initKron_.lrs(InitKronType::NEW).left().partition(igroup); int L2 = initKron_.lrs(InitKronType::NEW).left().partition(igroup + 1); leftPatchSize_[ipatch] = L2 - L1; } for(SizeType ipatch = 0; ipatch < npatches; ++ipatch) { SizeType igroup = initKron_.patch(InitKronType::NEW, GenIjPatchType::RIGHT)[ipatch]; int R1 = initKron_.lrs(InitKronType::NEW).right().partition(igroup); int R2 = initKron_.lrs(InitKronType::NEW).right().partition(igroup + 1); rightPatchSize_[ipatch] = R2 - R1; } int leftMaxStates = initKron_.lrs(InitKronType::NEW).left().size(); int rightMaxStates = initKron_.lrs(InitKronType::NEW).right().size(); int nrowA = leftMaxStates; int ncolA = nrowA; int nrowB = rightMaxStates; int nrowBX = nrowB; int ldBX = ialign_ * iceil(nrowBX, ialign_); BX_.resize(ldBX, ncolA*noperator); { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Construction done."; progress_.printline(msgg, std::cout); } } bool enabled() const { return initKron_.batchedGemm(); } void matrixVector(VectorType& vout, const VectorType& vin) const { if (!enabled()) err("BatchedGemm::matrixVector called but BatchedGemm not enabled\n"); /* ------------------ compute Y = H * X ------------------ */ int leftMaxStates = initKron_.lrs(InitKronType::NEW).left().size(); int rightMaxStates = initKron_.lrs(InitKronType::NEW).right().size(); SizeType npatches = initKron_.numberOfPatches(InitKronType::OLD); SizeType noperator = initKron_.connections(); int nrowA = leftMaxStates; int ncolA = nrowA; int nrowB = rightMaxStates; int ncolB = nrowB; int nrowBX = nrowB; int ncolBX = ncolA * noperator; int ldBX = ialign_ * iceil(nrowBX, ialign_); BX_.setTo(0.0); for (SizeType jpatch = 0; jpatch < npatches; ++jpatch) { long j1 = initKron_.offsetForPatches(InitKronType::NEW, jpatch); int nrowX = rightPatchSize_[jpatch]; assert(initKron_.offsetForPatches(InitKronType::NEW, jpatch + 1) - j1 == nrowX * leftPatchSize_[jpatch]); /* -------------------------------------- XJ = reshape( X(j1:j2), nrowX, ncolX ) -------------------------------------- */ assert(static_cast(j1) < vin.size()); int ldXJ = nrowX; SizeType jgroup = initKron_.patch(InitKronType::NEW, GenIjPatchType::RIGHT)[jpatch]; int R1 = initKron_.lrs(InitKronType::NEW).right().partition(jgroup); int R2 = initKron_.lrs(InitKronType::NEW).right().partition(jgroup + 1); SizeType igroup = initKron_.patch(InitKronType::NEW, GenIjPatchType::LEFT)[jpatch]; int L1 = initKron_.lrs(InitKronType::NEW).left().partition(igroup); int L2 = initKron_.lrs(InitKronType::NEW).left().partition(igroup + 1); assert(static_cast(j1 + R2 - R1 - 1 + (L2 - L1 - 1)*nrowX) < vin.size()); /* ------------------------------- independent DGEMM in same group ------------------------------- */ for (SizeType k = 0; k < noperator; ++k) { int offsetB = k*ncolB; int offsetBX = k*ncolA; /* ------------------------------------------------------------------------ BX(1:nrowBX, offsetBX + (L1:L2)) = Bbatch(1:nrowBX, offsetB + (R1:R2) ) * XJ( 1:(R2-R1+1), 1:(L2-L1+1)); ------------------------------------------------------------------------ */ psimag::BLAS::GEMM('N', 'N', nrowBX, L2 - L1, R2 - R1, 1.0, &(Bbatch_(0, offsetB + R1)), Bbatch_.rows(), &(vin[j1]), ldXJ, 0.0, &(BX_(0, offsetBX + L1)), ldBX); } } /* ------------------------------------------------- perform computations with Y += (BX)*transpose(A) ------------------------------------------------- */ for(SizeType ipatch = 0; ipatch < npatches; ++ipatch) { long i1 = initKron_.offsetForPatches(InitKronType::NEW, ipatch); SizeType jgroup = initKron_.patch(InitKronType::NEW, GenIjPatchType::RIGHT)[ipatch]; SizeType R1 = initKron_.lrs(InitKronType::NEW).right().partition(jgroup); SizeType R2 = initKron_.lrs(InitKronType::NEW).right().partition(jgroup + 1); SizeType igroup = initKron_.patch(InitKronType::NEW, GenIjPatchType::LEFT)[ipatch]; SizeType L1 = initKron_.lrs(InitKronType::NEW).left().partition(igroup); SizeType L2 = initKron_.lrs(InitKronType::NEW).left().partition(igroup + 1); assert(R2 - R1 == rightPatchSize_[ipatch] && L2 - L1 == leftPatchSize_[ipatch]); assert(static_cast(i1) < vout.size()); ComplexOrRealType *YI = &(vout[i1]); int nrowYI = R2 - R1; int ldYI = nrowYI; int ncolYI = L2 - L1; assert(static_cast(initKron_.offsetForPatches(InitKronType::NEW, ipatch + 1) - i1) == nrowYI * ncolYI); /* -------------------------------------------------------------------- YI(1:(R2-R1+1),1:(L2-L1+1)) = BX( R1:R2,1:ncolBX) * transpose( Abatch( L1:L2,1:ncolBX) ); -------------------------------------------------------------------- */ psimag::BLAS::GEMM('N', 'T', nrowYI, ncolYI, ncolBX, 1.0, &(BX_(R1, 0)), BX_.rows(), &(Abatch_(L1, 0)), Abatch_.rows(), 0.0, YI, ldYI); } } private: static int iceil(int x, int n) { return (x + n - 1)/n; } static void mylacpy(const MatrixType& a, MatrixType& b, SizeType xstart, SizeType ystart) { int m = a.rows(); int n = a.cols(); for (int j = 0; j < n; ++j) for (int i = 0; i < m; ++i) b(i + xstart, j + ystart) = a(i, j); } const InitKronType& initKron_; PsimagLite::ProgressIndicator progress_; MatrixType Abatch_; MatrixType Bbatch_; mutable MatrixType BX_; VectorSizeType leftPatchSize_; VectorSizeType rightPatchSize_; }; } #endif // BATCHEDGEMM_H dmrgpp-6.02/src/Engine/MatrixVectorKron/BatchedGemmPluginSc.h000066400000000000000000000116671414604301300241740ustar00rootroot00000000000000#ifndef BATCHEDGEMM_H #define BATCHEDGEMM_H #include #include #include "Matrix.h" #include "Vector.h" #include "../../../../dmrgppPluginSc/src/BatchedGemm.h" typedef PsimagLite::Vector::Type VectorIntegerType; typedef PsimagLite::Vector::Type VectorIntType; namespace Dmrg { template class BatchedGemm2 { typedef typename InitKronType::ArrayOfMatStructType ArrayOfMatStructType; typedef typename ArrayOfMatStructType::MatrixDenseOrSparseType MatrixDenseOrSparseType; typedef typename MatrixDenseOrSparseType::VectorType VectorType; typedef typename InitKronType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorMatrixType; typedef typename InitKronType::GenIjPatchType GenIjPatchType; typedef typename GenIjPatchType::BasisType BasisType; typedef BatchedGemm BatchedGemmPluginScType; static const typename InitKronType::WhatBasisEnum DUMMY = InitKronType::OLD; public: BatchedGemm2(const InitKronType& initKron) : progress_("BatchedGemm"), initKron_(initKron), batchedGemm_(0) { if (!enabled()) return; SizeType npatches = initKron_.numberOfPatches(DUMMY); SizeType nC = initKron_.connections(); const SizeType total = npatches*npatches*nC; ComplexOrRealType** aptr = new ComplexOrRealType*[total]; ComplexOrRealType** bptr = new ComplexOrRealType*[total]; VectorIntType ldAptr(npatches*npatches*nC); VectorIntType ldBptr(npatches*npatches*nC); memset(aptr, 0, total*sizeof(ComplexOrRealType*)); memset(bptr, 0, total*sizeof(ComplexOrRealType*)); pLeft_.resize(npatches, 0); pRight_.resize(npatches, 0); SizeType zeroes = 0; for (SizeType ic = 0; ic < nC; ++ic) { for (SizeType inPatch = 0; inPatch < npatches; ++inPatch) { for (SizeType outPatch = 0; outPatch < npatches; ++outPatch) { const ArrayOfMatStructType& xiStruct = initKron_.xc(ic); const ArrayOfMatStructType& yiStruct = initKron_.yc(ic); const MatrixDenseOrSparseType* Amat = xiStruct(outPatch,inPatch); const MatrixDenseOrSparseType* Bmat = yiStruct(outPatch,inPatch); if (!Amat || !Bmat) continue; ComplexOrRealType* a = 0; ComplexOrRealType* b = 0; getMatrixPointers(&a, &b, *Amat, *Bmat); if (a == 0) { assert(b == 0); ++zeroes; } aptr[outPatch + inPatch*npatches + ic*npatches*npatches] = a; bptr[outPatch + inPatch*npatches + ic*npatches*npatches] = b; initKron_.checks(*Amat, *Bmat, outPatch, inPatch); pLeft_[inPatch] = Amat->cols(); pRight_[inPatch] = Bmat->cols(); ldAptr[outPatch + inPatch*npatches + ic*npatches*npatches] = Amat->rows(); ldBptr[outPatch + inPatch*npatches + ic*npatches*npatches] = Bmat->rows(); } } } { PsimagLite::OstringStream msg(std::cout.precision()); msg()<<"PLUGIN_SC: is in use, npatches="< namespace Dmrg { template class GenIjPatch { public: typedef LeftRightSuperType_ LeftRightSuperType; typedef typename LeftRightSuperType::BasisType BasisType; typedef typename BasisType::QnType QnType; typedef PsimagLite::Vector::Type VectorSizeType; enum LeftOrRightEnumType {LEFT=0,RIGHT=1}; GenIjPatch(const LeftRightSuperType& lrs, const QnType& target) : lrs_(lrs), qn_(target) { for (SizeType i=0;i class InitKronBase { typedef typename PsimagLite::Vector::Type VectorBoolType; public: typedef typename LeftRightSuperType::SparseMatrixType SparseMatrixType; typedef typename LeftRightSuperType::RealType RealType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::OperatorStorageType OperatorStorageType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef ArrayOfMatStruct ArrayOfMatStructType; typedef typename ArrayOfMatStructType::MatrixDenseOrSparseType MatrixDenseOrSparseType; typedef typename LeftRightSuperType::BasisType BasisType; typedef typename BasisType::QnType QnType; typedef typename ArrayOfMatStructType::GenIjPatchType GenIjPatchType; typedef typename PsimagLite::Vector::Type VectorArrayOfMatStructType; typedef typename PsimagLite::Vector::Type VectorType; typedef typename ArrayOfMatStructType::VectorSizeType VectorSizeType; enum WhatBasisEnum {OLD, NEW}; InitKronBase(const LeftRightSuperType& lrs, SizeType m, const QnType& qn, RealType denseSparseThreshold, bool useLowerPart) : progress_("InitKronBase"), mOld_(m), mNew_(m), denseSparseThreshold_(denseSparseThreshold), useLowerPart_(useLowerPart), ijpatchesOld_(lrs, qn), ijpatchesNew_(&ijpatchesOld_), wftMode_(false) { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"::ctor (for H), "; msg<<"denseSparseThreshold= "< class InitKronHamiltonian : public InitKronBase { typedef typename PsimagLite::Vector::Type VectorBoolType; public: typedef ModelType_ ModelType; typedef typename ModelType::HamiltonianConnectionType HamiltonianConnectionType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename ModelHelperType::OperatorStorageType OperatorStorageType; typedef typename LeftRightSuperType::BasisType BasisType; typedef InitKronBase BaseType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename HamiltonianConnectionType::LinkType LinkType; typedef typename ModelHelperType::RealType RealType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename BaseType::ArrayOfMatStructType ArrayOfMatStructType; typedef typename ArrayOfMatStructType::GenIjPatchType GenIjPatchType; typedef typename PsimagLite::Vector::Type VectorArrayOfMatStructType; typedef typename PsimagLite::Vector::Type VectorType; typedef typename ArrayOfMatStructType::VectorSizeType VectorSizeType; InitKronHamiltonian(const ModelType& model, const HamiltonianConnectionType& hc, const typename ModelHelperType::Aux& aux) : BaseType(hc.modelHelper().leftRightSuper(), aux.m(), hc.modelHelper().quantumNumber(aux.m()), model.params().denseSparseThreshold, !model.params().options.isSet("KronNoUseLowerPart") && !model.params().options.isSet("BatchedGemm")), model_(model), hc_(hc), vstart_(BaseType::patch(BaseType::NEW, GenIjPatchType::LEFT).size() + 1), offsetForPatches_(BaseType::patch(BaseType::NEW, GenIjPatchType::LEFT).size() + 1) { addHlAndHr(); { PsimagLite::Profiling profiling("convertXcYcArrays", std::cout); convertXcYcArrays(); } BaseType::setUpVstart(vstart_, BaseType::NEW); assert(vstart_.size() > 0); SizeType nsize = vstart_[vstart_.size() - 1]; assert(nsize > 0); yin_.resize(nsize, 0.0); xout_.resize(nsize, 0.0); BaseType::computeOffsets(offsetForPatches_, BaseType::NEW); } bool isWft() const {return false; } bool loadBalance() const { return model_.params().options.isSet("KronLoadBalance"); } SizeType gemmRnb() const { return model_.params().gemmRnb; } SizeType nthreads2() const { return model_.params().nthreads2; } // ------------------- // copy vin(:) to yin(:) // ------------------- void copyIn(const VectorType& vout, const VectorType& vin) { VectorType& xout = xout_; VectorType& yin = yin_; const VectorSizeType& permInverse = BaseType::lrs(BaseType::NEW).super().permutationInverse(); const SparseMatrixType& leftH = BaseType::lrs(BaseType::NEW).left().hamiltonian().getCRS(); SizeType nl = leftH.rows(); SizeType offset = BaseType::offset(BaseType::NEW); SizeType npatches = BaseType::patch(BaseType::NEW, GenIjPatchType::LEFT).size(); const BasisType& left = BaseType::lrs(BaseType::NEW).left(); const BasisType& right = BaseType::lrs(BaseType::NEW).right(); for (SizeType ipatch=0; ipatch < npatches; ++ipatch) { SizeType igroup = BaseType::patch(BaseType::NEW, GenIjPatchType::LEFT)[ipatch]; SizeType jgroup = BaseType::patch(BaseType::NEW, GenIjPatchType::RIGHT)[ipatch]; assert(left.partition(igroup+1) >= left.partition(igroup)); SizeType sizeLeft = left.partition(igroup+1) - left.partition(igroup); assert(right.partition(jgroup+1) >= right.partition(jgroup)); SizeType sizeRight = right.partition(jgroup+1) - right.partition(jgroup); SizeType left_offset = left.partition(igroup); SizeType right_offset = right.partition(jgroup); for (SizeType ileft=0; ileft < sizeLeft; ++ileft) { for (SizeType iright=0; iright < sizeRight; ++iright) { SizeType i = ileft + left_offset; SizeType j = iright + right_offset; SizeType ij = i + j * nl; assert(i < nl); assert(j < BaseType::lrs(BaseType::NEW).right().hamiltonian().rows()); assert(ij < permInverse.size()); SizeType r = permInverse[ ij ]; assert(!((r < offset) || (r >= (offset + BaseType::size(BaseType::NEW))))); SizeType ip = vstart_[ipatch] + (iright + ileft * sizeRight); assert(ip < yin.size()); assert( (r >= offset) && ((r-offset) < vin.size()) ); yin[ip] = vin[r-offset]; xout[ip] = vout[r-offset]; } } } } // ------------------- // copy xout(:) to vout(:) // ------------------- void copyOut(VectorType& vout) const { BaseType::copyOut(vout, xout_, vstart_); } const VectorType& yin() const { return yin_; } VectorType& xout() { return xout_; } const SizeType& offsetForPatches(typename BaseType::WhatBasisEnum, SizeType ind) const { assert(ind < offsetForPatches_.size()); return offsetForPatches_[ind]; } bool batchedGemm() const { return model_.params().options.isSet("BatchedGemm"); } private: void addHlAndHr() { const RealType value = 1.0; const OperatorStorageType& aL = hc_.modelHelper().leftRightSuper().left().hamiltonian(); const OperatorStorageType& aR = hc_.modelHelper().leftRightSuper().right().hamiltonian(); identityL_.makeDiagonal(aL.rows(), value); identityR_.makeDiagonal(aR.rows(), value); BaseType::addOneConnection(aL,identityR_, value, ProgramGlobals::FermionOrBosonEnum::BOSON); BaseType::addOneConnection(identityL_,aR, value, ProgramGlobals::FermionOrBosonEnum::BOSON); } void convertXcYcArrays() { SizeType total = hc_.tasks(); for (SizeType ix=0;ix class KronConnections { typedef typename InitKronType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename InitKronType::ArrayOfMatStructType ArrayOfMatStructType; typedef typename InitKronType::GenIjPatchType GenIjPatchType; typedef PsimagLite::Concurrency ConcurrencyType; typedef typename ArrayOfMatStructType::MatrixDenseOrSparseType MatrixDenseOrSparseType; typedef PsimagLite::Vector::Type VectorSizeType; public: typedef PsimagLite::Matrix MatrixType; typedef typename MatrixDenseOrSparseType::VectorType VectorType; typedef typename PsimagLite::Vector::Type VectorVectorType; typedef typename InitKronType::RealType RealType; KronConnections(InitKronType& initKron) : initKron_(initKron), x_(initKron.xout()), y_(initKron.yin()) {} SizeType tasks() const { return initKron_.numberOfPatches(InitKronType::NEW); } void doTask(SizeType outPatch, SizeType) { const bool isComplex = PsimagLite::IsComplexNumber::True; static const bool needsPrinting = false; PsimagLite::GemmR gemmR(needsPrinting, initKron_.gemmRnb(), initKron_.nthreads2()); SizeType nC = initKron_.connections(); SizeType total = initKron_.numberOfPatches(InitKronType::OLD); SizeType offsetX = initKron_.offsetForPatches(InitKronType::NEW, outPatch); assert(offsetX < x_.size()); for (SizeType inPatch=0;inPatch class KronMatrix { typedef typename InitKronType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef KronConnections KronConnectionsType; typedef typename KronConnectionsType::MatrixType MatrixType; typedef typename KronConnectionsType::VectorType VectorType; typedef typename InitKronType::ArrayOfMatStructType ArrayOfMatStructType; typedef typename InitKronType::GenIjPatchType GenIjPatchType; typedef typename ArrayOfMatStructType::MatrixDenseOrSparseType MatrixDenseOrSparseType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename GenIjPatchType::BasisType BasisType; typedef BatchedGemm2 BatchedGemmType; public: KronMatrix(InitKronType& initKron, PsimagLite::String name) : initKron_(initKron), progress_("KronMatrix"), batchedGemm_(initKron) { PsimagLite::String str((initKron.loadBalance()) ? "true" : "false"); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"KronMatrix: "< parallelConnections(codeSectionParams); parallelConnections.loopCreate(kc, initKron_.weightsOfPatchesNew()); } else { PsimagLite::Parallelizer parallelConnections(codeSectionParams); parallelConnections.loopCreate(kc); } kc.sync(); initKron_.copyOut(vout); } private: KronMatrix(const KronMatrix&); const KronMatrix& operator=(const KronMatrix&); InitKronType& initKron_; PsimagLite::ProgressIndicator progress_; BatchedGemmType batchedGemm_; }; //class KronMatrix } // namespace PsimagLite /*@}*/ #endif // KRON_MATRIX_HEADER_H dmrgpp-6.02/src/Engine/MatrixVectorKron/MatrixVectorKron.h000066400000000000000000000137361414604301300236470ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file MatrixVectorKron.h * * A class to encapsulate the product x+=Hy, * where x and y are vectors and H is the Hamiltonian matrix * */ #ifndef MATRIX_VECTOR_KRON_H #define MATRIX_VECTOR_KRON_H #include "Vector.h" #include "InitKronHamiltonian.h" #include "KronMatrix.h" #include "MatrixVectorBase.h" namespace Dmrg { template class MatrixVectorKron : public MatrixVectorBase { typedef MatrixVectorBase BaseType; static const bool CHECK_KRON = true; public: typedef ModelType_ ModelType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelType::ParametersType ParametersType; typedef typename ModelHelperType::RealType RealType; typedef InitKronHamiltonian InitKronType; typedef KronMatrix KronMatrixType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename PsimagLite::Vector::Type VectorType; typedef PsimagLite::Matrix FullMatrixType; typedef typename SparseMatrixType::value_type value_type; typedef typename ModelType::HamiltonianConnectionType HamiltonianConnectionType; MatrixVectorKron(const ModelType& model, const HamiltonianConnectionType& hc, const typename ModelHelperType::Aux& aux) : params_(model.params()), initKron_(model, hc, aux), kronMatrix_(initKron_, "Hamiltonian"), time_(0, 0) { int maxMatrixRankStored = model.params().maxMatrixRankStored; if (hc.modelHelper().size(aux.m()) > maxMatrixRankStored) return; model.fullHamiltonian(matrixStored_, hc, aux); assert(isHermitian(matrixStored_,true)); checkKron(); } ~MatrixVectorKron() { std::cout<<"DeltaClock matrixVectorProduct "< void matrixVectorProduct(SomeVectorType &x,SomeVectorType const &y) const { const PsimagLite::MemoryUsage::TimeHandle time1 = PsimagLite::ProgressIndicator::time(); if (matrixStored_.rows() > 0) matrixStored_.matrixVectorProduct(x,y); else kronMatrix_.matrixVectorProduct(x,y); const PsimagLite::MemoryUsage::TimeHandle time2 = PsimagLite::ProgressIndicator::time(); const PsimagLite::MemoryUsage::TimeHandle deltaTime = time2 - time1; time_ += deltaTime; } void fullDiag(VectorRealType& eigs,FullMatrixType& fm) const { BaseType::fullDiag(eigs, fm, matrixStored_, params_.maxMatrixRankStored); } private: void checkKron() const { if (!CHECK_KRON) return; #ifdef NDEBUG return; #endif SizeType n = rows(); std::cout< #include "MatrixVectorBase.h" namespace Dmrg { template class MatrixVectorOnTheFly : public MatrixVectorBase { typedef MatrixVectorBase BaseType; public: typedef ModelType_ ModelType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type value_type; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef PsimagLite::Matrix FullMatrixType; typedef typename ModelType::HamiltonianConnectionType HamiltonianConnectionType; typedef typename ModelHelperType::Aux AuxType; MatrixVectorOnTheFly(const ModelType& model, const HamiltonianConnectionType& hc, const AuxType& aux) : model_(model), hc_(hc), aux_(aux) { int maxMatrixRankStored = model.params().maxMatrixRankStored; if (hc.modelHelper().size(aux_.m()) > maxMatrixRankStored) return; model.fullHamiltonian(matrixStored_, hc, aux_); assert(isHermitian(matrixStored_, true)); } SizeType rows() const { return hc_.modelHelper().size(aux_.m()); } template void matrixVectorProduct(SomeVectorType &x,SomeVectorType const &y) const { if (matrixStored_.rows() > 0) matrixStored_.matrixVectorProduct(x,y); else model_.matrixVectorProduct(x, y, hc_, aux_); } void fullDiag(VectorRealType& eigs,FullMatrixType& fm) const { int mrs = model_.params().maxMatrixRankStored; if (mrs < static_cast(rows())) { std::cerr<<"Full diag will likely fail, it would need "; std::cerr< #include "ProgressIndicator.h" #include "MatrixVectorBase.h" namespace Dmrg { template class MatrixVectorStored : public MatrixVectorBase { typedef MatrixVectorBase BaseType; public: typedef ModelType_ ModelType; typedef typename ModelType::HamiltonianConnectionType HamiltonianConnectionType; typedef typename ModelType::ParametersType ParametersType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename ModelHelperType::RealType RealType; typedef typename SparseMatrixType::value_type value_type; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename ParametersType::OptionsType OptionsType; typedef PsimagLite::Matrix FullMatrixType; MatrixVectorStored(const ModelType& model, const HamiltonianConnectionType& hc, const typename ModelHelperType::Aux& aux) : model_(model), matrixStored_(2), pointer_(0), progress_("MatrixVectorStored") { const OptionsType& options = model.params().options; const bool debugMatrix = options.isSet("debugmatrix"); matrixStored_[0].clear(); model.fullHamiltonian(matrixStored_[0], hc, aux); assert(isHermitian(matrixStored_[0],true)); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"fullHamiltonian has rank="< void matrixVectorProduct(SomeVectorType &x, SomeVectorType const &y) const { matrixStored_[pointer_].matrixVectorProduct(x,y); } value_type operator()(SizeType i,SizeType j) const { return matrixStored_[pointer_](i,j); } SizeType reflectionSector() const { return pointer_; } void reflectionSector(SizeType p) { pointer_=p; } void fullDiag(VectorRealType& eigs,FullMatrixType& fm) const { BaseType::fullDiag(eigs, fm, matrixStored_[pointer_], model_.params().maxMatrixRankStored); } private: const ModelType& model_; typename PsimagLite::Vector::Type matrixStored_; SizeType pointer_; PsimagLite::ProgressIndicator progress_; }; // class MatrixVectorStored } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/MettsCollapse.h000066400000000000000000000467031414604301300176640ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file MettsCollapse.h * * Stochastics (random choices) needed for the METTS algorithm * */ #ifndef METTS_COLLAPSE_H #define METTS_COLLAPSE_H #include #include #include #include "ProgressIndicator.h" #include "PackIndices.h" #include "Matrix.h" #include "ProgramGlobals.h" namespace Dmrg { template class MettsCollapse { typedef typename VectorWithOffsetType::VectorType VectorType; typedef typename MettsStochasticsType::PairType PairType; typedef typename MettsStochasticsType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename MettsStochasticsType::RealType RealType; typedef typename MettsStochasticsType::RngType RngType; typedef typename MettsStochasticsType::ModelType ModelType; typedef PsimagLite::Matrix MatrixType; static const bool COLLAPSE_INTO_RANDOM_BASIS = false; public: typedef PsimagLite::PackIndices PackIndicesType; MettsCollapse(const MettsStochasticsType& mettsStochastics, const LeftRightSuperType& lrs, const TargetParamsType& targetParams) : mettsStochastics_(mettsStochastics), lrs_(lrs), rng_(targetParams.rngSeed), targetParams_(targetParams), progress_("MettsCollapse"), prevDirection_(ProgramGlobals::DirectionEnum::INFINITE), collapseBasis_(0,0) {} bool operator()(VectorWithOffsetType& c, const VectorWithOffsetType& eToTheBetaH, typename PsimagLite::Vector::Type& block, ProgramGlobals::DirectionEnum direction) { assert(direction!=ProgramGlobals::DirectionEnum::INFINITE); if (targetParams_.collapse.find("every")!=PsimagLite::String::npos || collapseBasis_.rows() == 0) setCollapseBasis(block); internalAction(c,eToTheBetaH,block,direction,false); if (atBorder(direction,block)) { typename PsimagLite::Vector::Type block2; setBlockToBorder(block2,block); internalAction(c,eToTheBetaH,block2,direction,true); } for (SizeType i=0;i0); bool allSitesSeen = checkSites(block[block.size()-1]); if (!allSitesSeen) return false; sitesSeen_.clear(); return true; } void setNk(typename PsimagLite::Vector::Type& nk, const typename PsimagLite::Vector::Type& block) const { for (SizeType i=0;i::Type& v) const { assert(v.size()>0); SizeType ret = v[0]; for (SizeType i=1;i::Type& alphaFixed, const typename PsimagLite::Vector::Type& nk) const { assert(alphaFixed.size()>0); assert(alphaFixed.size()==nk.size()); SizeType sum = alphaFixed[0]; for (SizeType i=1;i::Type& block, ProgramGlobals::DirectionEnum direction, bool border) const { if (dest2.size()==0) { dest2 = src2; } typename PsimagLite::Vector::Type nk; setNk(nk,block); SizeType volumeOfNk = volumeOf(nk); typename PsimagLite::Vector::Type p(volumeOfNk,0); probability(p,dest2,direction,volumeOfNk,border); RealType sum = 0; for (SizeType i=0;i1e-6); dest2 = (1.0/x) * dest; assert(dest2.size()==src2.size()); } void collapseVector(VectorWithOffsetType& dest2, // <<---- CPS const VectorWithOffsetType& src, // <--- MPS ProgramGlobals::DirectionEnum direction, SizeType indexFixed, // <--- m1 SizeType nk, // <-- size of the Hilbert sp. of one site bool border) const { VectorWithOffsetType dest = dest2; dest.populateSectors(lrs_.super()); for (SizeType ii=0;ii1e-3) count++; } } RealType fraction = static_cast(count)/v1.size(); std::cout<<__FILE__<<" "<<__LINE__<<" count="<::Type& p, const VectorWithOffsetType& src, ProgramGlobals::DirectionEnum direction, SizeType volumeOfNk, bool border) const { RealType tmp = norm(src); if (fabs(tmp-1.0)>1e-3) std::cerr<<"probability "<1e-3) std::cerr<<"probability sum="<1e-6); for (SizeType alpha=0;alpha=0 && p[alpha]<=1); } } bool checkSites(SizeType site) const { std::cerr<<"MettsCollapse: SITES SEEN "; for (SizeType i=0;i::Type& block) { SizeType nk = 1; for (SizeType i=0;i0); SizeType site = block[0]; if (targetParams_.collapse.find("random")!=PsimagLite::String::npos) rotationNd(collapseBasis_, mettsStochastics_.model().hilbertSize(site), block.size()); if (targetParams_.collapse.find("particle")!=PsimagLite::String::npos) particleCollapse(collapseBasis_); std::cout<<"Collapse basis:\n"; std::cout<::Type& block) const { typename PsimagLite::Vector::Type nk; setNk(nk,block); SizeType volumeOfNk = volumeOf(nk); bool b1 = (direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM && lrs_.right().size()==volumeOfNk); bool b2 = (direction == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON && lrs_.left().size()==volumeOfNk); return (b1 || b2); } void setBlockToBorder(typename PsimagLite::Vector::Type& block2, const typename PsimagLite::Vector::Type& block) const { block2 = block; assert(block.size()>0); SizeType site = block[block.size()-1]; bool leftCorner = (site+2==lrs_.super().block().size()) ? false : true; int offset = (leftCorner) ? -block.size() : block.size(); for (SizeType i=0;i::Type sitesSeen_; }; //class MettsCollapse } // namespace Dmrg /*@}*/ #endif //METTS_COLLAPSE_H dmrgpp-6.02/src/Engine/MettsParams.h000066400000000000000000000111551414604301300173360ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file MettsParams.h * * This is a structure to represent the parameters of the TimeStep Evolution * algorithm. Don't add functions to this class because * this class's data is all public */ #ifndef METTS_PARAMS_H #define METTS_PARAMS_H #include "TargetParamsTimeVectors.h" namespace Dmrg { // Coordinates reading of TargetSTructure from input file template class MettsParams : public TargetParamsTimeVectors { typedef TargetParamsTimeVectors BaseType; typedef typename BaseType::VectorSizeType VectorSizeType; public: typedef typename ModelType::RealType RealType; typedef typename ModelType::OperatorType OperatorType; typedef TargetParamsTimeVectors TimeVectorParamsType; typedef typename OperatorType::StorageType SparseMatrixType; template MettsParams(IoInputter& io, PsimagLite::String targeting, const ModelType& model) : TimeVectorParamsType(io, targeting, model) { io.readline(beta,"BetaDividedByTwo="); io.readline(rngSeed,"TSPRngSeed="); io.readline(collapse,"MettsCollapse="); try { io.read(pure,"MettsPure"); } catch (std::exception& e) {} SizeType n = model.superGeometry().numberOfSites(); if (pure.size() > 0 && pure.size() != n) { PsimagLite::String msg("MettsParams: If provided, MettsPure must be"); msg += " a vector of " + ttos(n) + " entries.\n"; throw PsimagLite::RuntimeError(msg); } this->noOperator(false); } int long rngSeed; RealType beta; PsimagLite::String collapse; VectorSizeType pure; }; // class MettsParams template inline std::ostream& operator<<(std::ostream& os,const MettsParams& t) { os<<"TargetParams.type=Metts"; const typename MettsParams::TimeVectorParamsType& tp = t; os< class MettsSerializer { typedef typename VectorType::value_type VectorElementType; typedef typename PsimagLite::Real::Type RealType; public: // Unfortunately we need a default ctor // to build an array of these MettsSerializer() { } MettsSerializer(RealType currentBeta, SizeType site, const typename PsimagLite::Vector::Type& targetVectors) : currentBeta_(currentBeta),site_(site),targetVectors_(targetVectors) {} MettsSerializer(typename PsimagLite::IoSelector::In& io) { RealType x = 0; PsimagLite::String s = "BETA"; io.read(x, s); if (x<0) throw PsimagLite::RuntimeError("MettsSerializer:: time cannot be negative\n"); currentBeta_ = x; s = "TargetCentralSite"; int xi = 0; io.read(xi, s); if (xi<0) throw PsimagLite::RuntimeError("MettsSerializer:: site cannot be negative\n"); site_ = xi; s = "TNUMBEROFVECTORS"; io.read(xi, s); if (xi<=0) throw PsimagLite::RuntimeError("MettsSerializer:: n. of vectors must be positive\n"); targetVectors_.resize(xi); for (SizeType i=0;i void write(IoOutputter& io, typename PsimagLite::EnableIf< PsimagLite::IsOutputLike::True, int>::Type = 0) const { PsimagLite::String s = "BETA=" + ttos(currentBeta_); io.printline(s); s = "TargetCentralSite=" + ttos(site_); io.printline(s); s = "TNUMBEROFVECTORS="+ttos(targetVectors_.size()); io.printline(s); for (SizeType i=0;i::Type targetVectors_; }; // class MettsSerializer } // namespace Dmrg /*@}*/ #endif // METTS_SERIALIZER_H dmrgpp-6.02/src/Engine/MettsStochastics.h000066400000000000000000000143341414604301300204040ustar00rootroot00000000000000/* Copyright (c) 2009-2012, 2013, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file MettsStochastics.h * * Stochastics (random choices) needed for the METTS algorithm * */ #ifndef METTS_STOCHASTICS_H #define METTS_STOCHASTICS_H #include #include #include #include "ProgressIndicator.h" #include #include "TypeToString.h" #include "Utils.h" namespace Dmrg { template class MettsStochastics { public: typedef std::pair PairType; typedef ModelType_ ModelType; typedef typename ModelType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelType::RealType RealType; typedef typename ModelType::LeftRightSuperType LeftRightSuperType; typedef typename ModelType::HilbertBasisType HilbertBasisType; typedef RngType_ RngType; typedef typename RngType::LongType LongType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename PsimagLite::Vector::Type VectorSizeType; MettsStochastics(const ModelType& model, int long seed, const VectorSizeType& pure) : model_(model), rng_(seed), pure_(pure), progress_("MettsStochastics"), addedSites_(0) {} const ModelType& model() const { return model_; } SizeType chooseRandomState(SizeType site) const { if (site < pure_.size()) return pure_[site]; return SizeType(rng_()*model_.hilbertSize(site)); } SizeType chooseRandomState(const VectorRealType& probs) const { RealType r = rng_(); RealType s1 = 0; RealType s2 = 0; for (SizeType i=0;i::Type& block1, const typename PsimagLite::Vector::Type& block2, SizeType seed) { if (addedSites_.size()==0) { pureStates_.resize(block2[block2.size()-1]+block2.size()+1); initialSetOfPures(seed); for (SizeType i=0;i::Type& collapseBasisWeights, SizeType site) const { SizeType nk = model_.hilbertSize(site); for (SizeType alpha=0;alpha::Type pureStates_; typename PsimagLite::Vector::Type addedSites_; VectorQnType qnVsSize_; }; //class MettsStochastics } // namespace Dmrg /*@}*/ #endif //METTS_STOCHASTICS_H dmrgpp-6.02/src/Engine/ModelBase.h000066400000000000000000000654261414604301300167430ustar00rootroot00000000000000/* Copyright (c) 2009-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ModelBase.h * * */ #ifndef MODEL_BASE_H #define MODEL_BASE_H #include "Vector.h" #include "Sort.h" #include "MemResolv.h" #include "TargetQuantumElectrons.h" #include "Io/IoSerializerStub.h" #include "ModelCommon.h" #include "QnHash.h" #include "ParallelHamiltonianConnection.h" #include "Braket.h" #include "SuperOpHelperBase.h" #include "OutputFileOrNot.h" namespace Dmrg { template class ModelBase { public: struct OpaqueOp { OpaqueOp(PsimagLite::String name_, SizeType dof_ = 0, SizeType edof_ = 0) : name(name_), dof(dof_), edof(edof_) { fermionOrBoson = labeledOperators_(name_, dof_).fermionOrBoson(); kindOfSite = labeledOperators_.findLabel(name_).kindOfSite(); } PsimagLite::String name; SizeType dof; SizeType edof; SizeType kindOfSite; ProgramGlobals::FermionOrBosonEnum fermionOrBoson; }; typedef ParametersType_ ParametersType; typedef InputValidatorType_ InputValidatorType; typedef ModelHelperType_ ModelHelperType; typedef SuperGeometryType_ SuperGeometryType; typedef ModelBase ThisType; typedef Braket BraketType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelHelperType::BasisType MyBasis; typedef typename ModelHelperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::StorageType OperatorStorageType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename MyBasis::QnType QnType; typedef TargetQuantumElectrons TargetQuantumElectronsType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename ModelHelperType::SparseElementType ComplexOrRealType; typedef ModelCommon ModelCommonType; typedef typename ModelCommonType::HamiltonianConnectionType HamiltonianConnectionType; typedef typename ModelCommonType::VectorLinkType VectorLinkType; typedef typename ModelCommonType::VectorType VectorType; typedef ParametersType SolverParamsType; typedef typename ModelHelperType::LinkType LinkType; typedef PsimagLite::Vector::Type VectorSizeType; typedef VectorSizeType HilbertBasisType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename QnType::PairSizeType PairSizeType; typedef typename BasisWithOperatorsType::VectorBoolType VectorBoolType; typedef typename ModelCommonType::LabeledOperatorsType LabeledOperatorsType; typedef typename ModelCommonType::ModelLinksType ModelLinksType; typedef typename LabeledOperatorsType::LabelType OpsLabelType; typedef PsimagLite::Vector::Type VectorStringType; typedef typename ModelCommonType::VerySparseMatrixType VerySparseMatrixType; typedef ParallelHamiltonianConnection ParallelHamConnectionType; typedef typename ModelLinksType::TermType ModelTermType; typedef OpaqueOp OpForLinkType; typedef typename ModelLinksType::AtomKindBase AtomKindBaseType; typedef SuperOpHelperBase SuperOpHelperBaseType; typedef PsimagLite::Matrix MatrixType; typedef typename ModelLinksType::LabelType LabelType; ModelBase(const ParametersType& params, const SuperGeometryType& superGeometry, InputValidatorType& io) : modelCommon_(params, superGeometry), targetQuantum_(io), ioIn_(io), atomKind_(nullptr), superOpHelper_(nullptr) { labeledOperators_.setModelName(params.model); modelLinks_.clear(); qns_.clear(); } void postCtor() { modelLinks_.setAtomKind(&getAtomKind()); fillLabeledOperators(qns_); // fills qns_ and labeledOperators_ createIdentity(); if (modelLinks_.kindsOfAtoms() == 1) checkThatQnsAreNotReallySorted(); modelLinks_.postCtor1(labeledOperators_, modelCommon_.superGeometry().terms()); fillModelLinks(); // fills modelLinks_ customOperators(); modelLinks_.postCtor2(); superOpHelper_ = setSuperOpHelper(); assert(superOpHelper_); ProgramGlobals::init(maxElectronsOneSpin()); } // START OF VIRTUAL FUNCTIONS virtual ~ModelBase() { delete atomKind_; atomKind_ = nullptr; delete superOpHelper_; superOpHelper_ = nullptr; } /* PSIDOC ModelInterface These are the functions that each model must implement. PSIDOCCOPY ModelBaseWrite \noindent\dotfill\\ PSIDOCCOPY addDiagonalsInNaturalBasis \noindent\dotfill\\ PSIDOCCOPY fillLabeledOperators \noindent\dotfill\\ PSIDOCCOPY fillModelLinks */ /* PSIDOC ModelBaseWrite FirstProtoBelow PSIDOCCOPY $FirstProtoBelow For information purposes only. String is the first argument and contains the group. Serializer object is second argument. As an example, we describe the write() virtual memeber function for the Hubbard model. PSIDOCCOPY Hubbard::write */ virtual void write(PsimagLite::String, PsimagLite::IoNg::Out::Serializer&) const = 0; /* PSIDOC addDiagonalsInNaturalBasis PSIDOCCOPY $FirstProtoBelow Takes 3 arguments: the first one is output, the last two are input. The first argument is a CRS matrix that you need to fill with the on-site Hamiltonian terms in the on-site basis. The second argument is a vector of sites containing only one site; this argument is an input. The last argument is the current physical time; it's an input, and is given in case your model has time-dependent on-site terms. We briefly discuss the addition of a magnetic field Zeeman term to the Heisenberg model. PSIDOCCOPY Heisenberg::addDiagonalsInNaturalBasis */ virtual void addDiagonalsInNaturalBasis(SparseMatrixType&, const BlockType& block, RealType) const = 0; /* PSIDOC fillLabeledOperators PSIDOCCOPY $FirstProtoBelow The only argument given to this function is the qns that you must fill. This is a vector of \texttt{Qn} objects. You need to loop over the one-site Hilbert space, something like \begin{lstlisting} for (SizeType i = 0; i < numberOfStates; ++i) { ... qns[i] = QnType(sign, other, jmpair, flavor); } \end{lstlisting} where sign is true is state i has odd number of fermions and false otherwise, other is a vector of conserved quantities evaluated on state i, jmpair is the 2j and j+m of this state, and flavor is the flavor of state i. You may set jmpair to PairSizeType(0,0) and flavor to 0, in which case your model won't support SU(2) symmetry. After setting qns, you need to create all one-site labeled operators for this model. These are the operators that the engine must keep track, and, optionally, other labeled operators to be used in operator specifications. You create labeled operators with the following syntax. \begin{lstlisting} OpsLabelType& myoperator = this->createOperatorLabel("myoperator"); myoperator.makeTrackable(); // only if needs tracking \end{lstlisting} then you fill it with \begin{lstlisting} for (SizeType dof = 0; dof < numberOfDofs; ++dof) { ... OperatorType someOperator(sparseMatrix, fermionSign, ...); myoperator.push(someOperator); } \end{lstlisting} And you must mark the operators that need tracking as shown above. */ virtual void fillLabeledOperators(VectorQnType&) = 0; /* PSIDOC fillModelLinks PSIDOCCOPY $FirstProtoBelow Give the Hamiltonian connections that this model has. These are the terms in the Hamiltonian that connect \emph{different} sites. We'll go first though the simpler example of the Hubbard model. PSIDOCCOPY Hubbard::fillModelLinks \vspace{1em} OK, let's discuss a more complicated example: the case of the FeAs model. PSIDOCCOPY FeAs::fillModelLinks */ virtual void fillModelLinks() = 0; // END ^^^^^^^^^^^Functions that each model needs to implement virtual void findOddElectronsOfOneSite(VectorBoolType& oddElectrons, SizeType site) const { typename PsimagLite::Vector::Type block(1, site); typename PsimagLite::Vector::Type cm; VectorQnType qq; setOperatorMatrices(cm, qq, block); SizeType n = qq.size(); oddElectrons.resize(n); for (SizeType i = 0; i < n; ++i) oddElectrons[i] = qq[i].oddElectrons; } //! Full hamiltonian from creation matrices cm virtual void calcHamiltonian(SparseMatrixType &hmatrix, const VectorOperatorType& cm, const BlockType& block, RealType time) const { hmatrix.makeDiagonal(cm[0].getStorage().rows()); modelCommon_.addConnectionsInNaturalBasis(hmatrix,cm,block,time); addDiagonalsInNaturalBasis(hmatrix, block, time); } virtual SizeType maxElectronsOneSpin() const { SizeType tmp = hilbertSize(0); tmp = static_cast(log(tmp)/log(2.0)); SizeType maxElectrons = static_cast(tmp/2); if (tmp & 1) maxElectrons++; return maxElectrons*modelCommon_.superGeometry().numberOfSites() + 1; } virtual const AtomKindBaseType& getAtomKind() { if (!atomKind_) atomKind_ = new AtomKindBaseType(); return *atomKind_; } // No need to override unless doing OneSiteTruncation // Fill the VectorOperatorType with operators that need to be kept // track by the DMRG++ Engine. // Fill VectorQnType with the qns of the one site basis in the order // you chose to give the operators // You can check that block.size() == 1 or throw otherwise // The contents of block MUST be ignored unless your model has a site-dependent // Hilbert space (SDHS) // should be static virtual SizeType setOperatorMatrices(VectorOperatorType& cm, VectorQnType& qns, const BlockType& block) const { assert(block.size() == 1); const SizeType kindOfSite = modelLinks_.siteToAtomKind(block[0]); modelLinks_.setOperatorMatrices(cm, labeledOperators_, kindOfSite); const SizeType k = modelLinks_.kindsOfAtoms(); SizeType start = 0; for (SizeType i = 0; i < k; ++i) { if (i == kindOfSite) break; start += modelLinks_.hilbertSize(i); } const SizeType end = start + modelLinks_.hilbertSize(kindOfSite); assert(end >= start); assert(start < qns_.size()); qns.resize(end - start, qns_[start]); std::copy(qns_.begin() + start, qns_.begin() + end, qns.begin()); return 0; } // Models may ignore announcements from the engine virtual void announce(PsimagLite::String) const {} virtual PsimagLite::String oracle() const { return ""; } virtual void oneSiteTruncationUpdate(OutputFileOrNot&, const MatrixType&, SizeType) { qns_.clear(); labeledOperators_.clear(); modelLinks_.clear(); // we could also clear atomKind and superOpHelper here if needed (?) postCtor(); } // for models with entanglers only virtual bool isCorrectlyPaired(SizeType) const { throw PsimagLite::RuntimeError("This model does not support entanglers\n"); } // END OF VIRTUAL FUNCTIONS /** The function \cppFunction{addHamiltonianConnection} implements the Hamiltonian connection (e.g. tight-binding links in the case of the Hubbard Model or products $S_i\cdot S_j$ in the case of the Heisenberg model) between two basis, $basis2$ and $basis3$, in the order of the outer product, $basis1={\rm SymmetryOrdering}(basis2\otimes basis3)$. This was explained before in Section~\ref{subsec:dmrgBasisWithOperators}. This function has a default implementation. */ void addHamiltonianConnection(SparseMatrixType& matrix, const LeftRightSuperType& lrs, RealType currentTime) const { PsimagLite::Profiling profiling("addHamiltonianConnection", "", std::cout); assert(lrs.super().partition() > 0); SizeType total = lrs.super().partition()-1; typename PsimagLite::Vector::Type vvsm(total, 0); VectorSizeType nzs(total, 0); HamiltonianConnectionType hc(lrs, modelLinks_, currentTime, superOpHelper()); for (SizeType m = 0; m < total; ++m) { SizeType offset = lrs.super().partition(m); assert(lrs.super().partition(m + 1) >= offset); SizeType bs = lrs.super().partition(m + 1) - offset; vvsm[m] = new VerySparseMatrixType(bs, bs); VerySparseMatrixType& vsm = *(vvsm[m]); typename HamiltonianConnectionType::AuxType aux(m, lrs); hc.matrixBond(vsm, aux); nzs[m] = vsm.nonZeros(); if (nzs[m] > 0) continue; delete vvsm[m]; vvsm[m] = 0; } PsimagLite::Sort sort; VectorSizeType permutation(total, 0); sort.sort(nzs, permutation); typename PsimagLite::Vector::Type vectorOfCrs; assert(total == permutation.size()); for (SizeType i = 0; i < total; ++i) { // loop over new order SizeType m = permutation[i]; // get old index from new index if (vvsm[m] == 0) continue; const VerySparseMatrixType& vsm = *(vvsm[m]); SparseMatrixType matrixBlock2; matrixBlock2 = vsm; delete vvsm[m]; vvsm[m] = 0; SizeType offset = lrs.super().partition(m); SparseMatrixType* full = new SparseMatrixType(matrix.rows(), matrix.cols(), matrixBlock2.nonZeros()); fromBlockToFull(*full, matrixBlock2, offset); vectorOfCrs.push_back(full); } if (vectorOfCrs.size() == 0) return; vectorOfCrs.push_back(&matrix); SizeType effectiveTotal = vectorOfCrs.size(); VectorType ones(effectiveTotal, 1.0); SparseMatrixType sumCrs; sum(sumCrs, vectorOfCrs, ones); vectorOfCrs.pop_back(); effectiveTotal = vectorOfCrs.size(); for (SizeType i = 0; i < effectiveTotal; ++i) { delete vectorOfCrs[i]; vectorOfCrs[i] = 0; } matrix.swap(sumCrs); } /** Let H be the hamiltonian of the model for basis1 and partition m * consisting of the external product * of basis2 \otimes basis3 * This function does x += H*y * The \cppFunction{matrixVectorProduct} function implements the operation $x+=Hy$. * This function * has a default implementation. */ void matrixVectorProduct(VectorType& x, const VectorType& y, const HamiltonianConnectionType& hc, const typename ModelHelperType::Aux& aux) const { typedef PsimagLite::Parallelizer ParallelizerType; ParallelizerType parallelConnections(PsimagLite::Concurrency::codeSectionParams); ParallelHamConnectionType phc(x, y, hc, aux); parallelConnections.loopCreate(phc); phc.sync(); } void fullHamiltonian(SparseMatrixType& matrix, const HamiltonianConnectionType& hc, const typename ModelHelperType::Aux& aux) const { return modelCommon_.fullHamiltonian(matrix, hc, aux); } // Return the size of the one-site Hilbert space basis for this model // site MUST be ignored unless your model has a site-dependent // Hilbert space (SDHS) // should be static SizeType hilbertSize(SizeType actualSite) const { const SizeType kindOfSite = modelLinks_.siteToAtomKind(actualSite); return modelLinks_.hilbertSize(kindOfSite); } static const ModelLinksType& modelLinks() { return modelLinks_; } static OperatorType naturalOperator(const PsimagLite::String& what, SizeType site, SizeType dof) { static const PsimagLite::String expipi = "exp_i_pi_"; static const SizeType l = expipi.length(); PsimagLite::String what2 = what; OperatorType op; if (what.substr(0, l) == expipi) { what2 = what.substr(l, what.length() - l); op = labeledOperators_(what2, dof); if (op.fermionOrBoson() == ProgramGlobals::FermionOrBosonEnum::FERMION) err("Don't know how to exponentiate a fermionic operator\n"); MatrixType m2 = op.getCRS().toDense(); expIpi(m2); op.fromStorage(m2); } else { op = labeledOperators_(what, dof); } invalidateIfNeeded(op, site, what2); return op; } static bool introspect() { labeledOperators_.introspect(); return true; } void printBasis(SizeType site) const { BlockType block(1, site); typename PsimagLite::Vector::Type cm; VectorQnType qq; setOperatorMatrices(cm, qq, block); std::cout<<"block="< myhash(true); std::unordered_map qnSizes(initialSizeOfHashTable, myhash); std::unordered_map seenThisQns(initialSizeOfHashTable, myhash); VectorQnType uniqueQns; for (SizeType i = 0; i < n; ++i) { const QnType& qn = qns[i]; ++qnSizes[qn]; if (seenThisQns[qn] == 1) continue; seenThisQns[qn] = 1; uniqueQns.push_back(qn); } std::unordered_map offsets(initialSizeOfHashTable, myhash); offsetsFromSizes(offsets, qnSizes, uniqueQns); std::unordered_map extraOffsets(initialSizeOfHashTable, myhash); VectorSizeType basisNew(basis.size()); assert(0 < qns.size()); VectorQnType qnNew(qns.size(), qns[0]); for (SizeType i = 0; i < n; ++i) { const QnType& thisQn = qns[i]; SizeType sum = extraOffsets[thisQn]; const SizeType offset = offsets[thisQn]; const SizeType ipos = offset + sum; ++extraOffsets[thisQn]; basisNew[ipos] = i; qnNew[ipos] = thisQn; } basis = basisNew; qns = qnNew; } InputValidatorType_& ioIn() const { return ioIn_; } SuperOpHelperBaseType& superOpHelper() const { return *superOpHelper_; } // protected: PsimagLite::String oracle(const RealType& energy, const PsimagLite::String formula) const { if (modelCommon_.params().options.isSet("TargetingAncilla")) return ""; const PsimagLite::String s = " Oracle: " + ttos(energy) + " : " + formula; return s; } static OpsLabelType& createOpsLabel(PsimagLite::String name, SizeType kindOfSite = 0) { return labeledOperators_.createLabel(name, kindOfSite); } static void makeTrackable(PsimagLite::String name) { labeledOperators_.makeTrackable(name); } static ModelTermType& createTerm(PsimagLite::String name, bool wantsHermitian = true, PsimagLite::String geometryFrom = "") { return modelLinks_.createTerm(name, wantsHermitian, geometryFrom); } virtual SuperOpHelperBaseType* setSuperOpHelper() { return (superOpHelper_) ? superOpHelper_ : new SuperOpHelperBaseType(modelCommon_.superGeometry()); } static void notReallySort(VectorSizeType& basis, VectorQnType& qns) { const SizeType n = qns.size(); if (n == 0) return; VectorQnType qunique; findQunique(qunique, qns); assert(qunique.size() > 0); VectorQnType qns2; VectorSizeType basis2; VectorBoolType done(n, false); const SizeType m = qunique.size(); for (SizeType i = 0; i < m; ++i) { const QnType& thisq = qunique[i]; for (SizeType j = 0; j < n; ++j) { if (done[j]) continue; // add all qns with thisq if (qns[j] == thisq) { qns2.push_back(thisq); basis2.push_back(basis[j]); done[j] = true; } } } basis = basis2; qns = qns2; } private: static void invalidateIfNeeded(OperatorType& op, SizeType site, PsimagLite::String what) { SizeType siteKind = modelLinks_.siteToAtomKind(site); SizeType opKind = labeledOperators_.findLabel(what).kindOfSite(); if (siteKind == opKind) return; op.clear(); } static void offsetsFromSizes(std::unordered_map& offsets, std::unordered_map& sizes, const VectorQnType& qns) { const SizeType total = sizes.size(); SizeType offset = 0; for (SizeType i = 0; i < total; ++i) { const QnType& qn = qns[i]; const SizeType thisSize = sizes[qn]; offsets[qn] = offset; offset += thisSize; } } virtual void customOperators() { PsimagLite::String ops; try { ioIn_.readline(ops, "DefineOperators="); } catch (std::exception&) { return; } VectorStringType tokens; PsimagLite::split(tokens, ops, ","); const SizeType n = tokens.size(); for (SizeType i = 0; i < n; ++i) { customOperator(tokens[i]); } } virtual void customOperator(PsimagLite::String opStr) { VectorStringType tokens; PsimagLite::split(tokens, opStr, ":"); if (tokens.size() != 2) err("Custom Operator " + opStr + " must have exactly one colon\n"); if (tokens[0].length() == 0) return; const char firstChar = tokens[0][0]; OpsLabelType& c = this->createOpsLabel(tokens[0]); BraketType braket(*this, ""); c.push(braket.op(0)); if (firstChar == '_') this->makeTrackable(tokens[0]); } static void findQunique(VectorQnType& qunique, const VectorQnType& qns) { qunique.clear(); const SizeType n = qns.size(); if (n == 0) return; QnType qprev = qns[0]; qunique.push_back(qprev); for (SizeType i = 1; i < n; ++i) { QnType thisq = qns[i]; if (thisq == qprev) continue; qunique.push_back(thisq); qprev = thisq; } } void checkThatQnsAreNotReallySorted() const { #ifdef NDEBUG return; #endif VectorQnType qunique; findQunique(qunique, qns_); if (qunique.size() == 0) return; const SizeType m = qunique.size(); for (SizeType i = 0; i < m; ++i) { const QnType thisq = qunique[i]; for (SizeType j = i + 1; j < m; ++j) { if (thisq != qunique[j]) continue; err("QNS of one site: not ordered: Model must order QNS\n"); } } } static void createIdentity() { if (labeledOperators_.size() == 0) err("createIdentity: INTERNAL ERROR\n"); const SizeType n = labeledOperators_[0].rows(); MatrixType m(n, n); for (SizeType i = 0; i < n; ++i) m(i, i) = 1; typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(m), ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), 1, su2related); createOpsLabel("identity").push(myOp); } ModelCommonType modelCommon_; TargetQuantumElectronsType targetQuantum_; InputValidatorType_& ioIn_; AtomKindBaseType* atomKind_; mutable SuperOpHelperBaseType* superOpHelper_; static LabeledOperatorsType labeledOperators_; static ModelLinksType modelLinks_; static VectorQnType qns_; }; //class ModelBase template typename ModelBase::LabeledOperatorsType ModelBase::labeledOperators_; template typename ModelBase::ModelLinksType ModelBase::modelLinks_; template typename ModelBase::VectorQnType ModelBase::qns_; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/ModelCommon.h000066400000000000000000000146131414604301300173110ustar00rootroot00000000000000/* Copyright (c) 2009-2012-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ModelCommon.h * * An abstract class to represent the strongly-correlated-electron models that * can be used with the DmrgSolver * */ #ifndef MODEL_COMMON_H #define MODEL_COMMON_H #include #include "Su2SymmetryGlobals.h" #include "InputNg.h" #include "InputCheck.h" #include "ProgressIndicator.h" #include "NoPthreads.h" #include "Sort.h" #include "Profiling.h" #include "ModelLinks.h" #include "HamiltonianConnection.h" #include "LabeledOperators.h" namespace Dmrg { template class ModelCommon { typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelHelperType::LinkType LinkType; public: typedef typename PsimagLite::Vector::Type VectorType; typedef PsimagLite::InputNg::Readable InputValidatorType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename ModelHelperType::BlockType Block; typedef typename ModelHelperType::RealType RealType; typedef typename ModelHelperType::BasisType MyBasis; typedef typename ModelHelperType::BasisWithOperatorsType BasisWithOperatorsType; typedef LabeledOperators LabeledOperatorsType; typedef ModelLinks ModelLinksType; typedef HamiltonianConnection HamiltonianConnectionType; typedef typename HamiltonianConnectionType::VectorLinkType VectorLinkType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename PsimagLite::Vector::Type VectorVectorLinkType; typedef typename HamiltonianConnectionType::VectorSizeType VectorSizeType; typedef typename HamiltonianConnectionType::VerySparseMatrixType VerySparseMatrixType; ModelCommon(const ParametersType& params, const SuperGeometryType& superGeometry) : params_(params), superGeometry_(superGeometry), progress_("ModelCommon") { Su2SymmetryGlobals::init(ModelHelperType::isSu2()); MyBasis::useSu2Symmetry(ModelHelperType::isSu2()); if (params.options.isSet("OperatorsChangeAll")) OperatorsType::setChangeAll(true); } const ParametersType& params() const { return params_; } const SuperGeometryType& superGeometry() const { return superGeometry_; } void addConnectionsInNaturalBasis(SparseMatrixType& hmatrix, const VectorOperatorType& cm, const Block& block, RealType time) const { if (block.size() != 1) err("addConnectionsInNaturalBasis(): unimplemented\n"); } /** Returns H, the hamiltonian for basis1 and partition $m$ consisting of the external product of basis2$\otimes$basis3 Note: Used only for debugging purposes */ void fullHamiltonian(SparseMatrixType& matrix, const HamiltonianConnectionType& hc, const typename ModelHelperType::Aux& aux) const { SparseMatrixType matrixBlock; //! contribution to Hamiltonian from current system hc.modelHelper().calcHamiltonianPart(matrixBlock, true, aux); matrix = matrixBlock; //! contribution to Hamiltonian from current envirnoment hc.modelHelper().calcHamiltonianPart(matrixBlock, false, aux); matrix += matrixBlock; matrixBlock.clear(); VerySparseMatrixType vsm(matrix); hc.matrixBond(vsm, aux); matrix = vsm; } private: const ParametersType& params_; const SuperGeometryType& superGeometry_; PsimagLite::ProgressIndicator progress_; }; //class ModelCommon } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/ModelHelperLocal.h000066400000000000000000000351771414604301300202630ustar00rootroot00000000000000/* Copyright (c) 2009-2016-2018-2019, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ #ifndef DMRG_MODELHELPER_H #define DMRG_MODELHELPER_H #include "PackIndices.h" // in PsimagLite #include "Link.h" #include "Concurrency.h" #include "Vector.h" /** \ingroup DMRG */ /*@{*/ /*! \file ModelHelperLocal.h * * A class to contain state information about the Hamiltonian * to help with the calculation of x+=Hy * */ namespace Dmrg { template class ModelHelperLocal { typedef PsimagLite::PackIndices PackIndicesType; public: typedef LeftRightSuperType_ LeftRightSuperType; typedef typename LeftRightSuperType::OperatorsType OperatorsType; typedef typename OperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type SparseElementType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::StorageType OperatorStorageType; typedef typename OperatorsType::BasisType BasisType; typedef typename BasisType::BlockType BlockType; typedef typename BasisType::RealType RealType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef Link LinkType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorSparseElementType; typedef typename PsimagLite::Vector::Type VectorSparseMatrixType; typedef typename BasisType::QnType QnType; class Aux { public: Aux(SizeType m, const LeftRightSuperType& lrs) : m_(m), buffer_(lrs.left().size()) { createBuffer(lrs); createAlphaAndBeta(lrs); } SizeType m() const { return m_; } int buffer(SizeType i, SizeType j) const { assert(i < buffer_.size()); assert(j < buffer_[i].size()); return buffer_[i][j]; } const PsimagLite::Vector::Type& buffer(SizeType i) const { assert(i < buffer_.size()); return buffer_[i]; } SizeType alpha(SizeType i) const { assert(i < alpha_.size()); return alpha_[i]; } SizeType beta(SizeType i) const { assert(i < beta_.size()); return beta_[i]; } bool fermionSigns(SizeType i) const { assert(i < fermionSigns_.size()); return fermionSigns_[i]; } private: void createBuffer(const LeftRightSuperType& lrs) { SizeType ns = lrs.left().size(); SizeType ne = lrs.right().size(); int offset = lrs.super().partition(m_); int total = lrs.super().partition(m_+1) - offset; typename PsimagLite::Vector::Type tmpBuffer(ne); for (SizeType alphaPrime=0;alphaPrime=total) tmpBuffer[betaPrime]= -1; } buffer_[alphaPrime]=tmpBuffer; } } void createAlphaAndBeta(const LeftRightSuperType& lrs) { SizeType ns = lrs.left().size(); int offset = lrs.super().partition(m_); int total = lrs.super().partition(m_+1) - offset; PackIndicesType pack(ns); alpha_.resize(total); beta_.resize(total); fermionSigns_.resize(total); for (int i=0;i::Type>::Type buffer_; VectorSizeType alpha_; VectorSizeType beta_; typename PsimagLite::Vector::Type fermionSigns_; }; ModelHelperLocal(const LeftRightSuperType& lrs) : lrs_(lrs) {} static bool isSu2() { return false; } int size(SizeType mm) const { int tmp = lrs_.super().partition(mm + 1) - lrs_.super().partition(mm); return tmp; //reflection_.size(tmp); } const QnType& quantumNumber(SizeType mm) const { return lrs_.super().qnEx(mm); } //! Does matrixBlock= (AB), A belongs to pSprime and B // belongs to pEprime or viceversa (inter) void fastOpProdInter(SparseMatrixType const &A, SparseMatrixType const &B, SparseMatrixType &matrixBlock, const LinkType& link, const Aux& aux) const { RealType fermionSign = (link.fermionOrBoson == ProgramGlobals::FermionOrBosonEnum::FERMION) ? -1 : 1; //! work only on partition m if (link.type==ProgramGlobals::ConnectionEnum::ENVIRON_SYSTEM) { LinkType link2 = link; link2.value *= fermionSign; link2.type = ProgramGlobals::ConnectionEnum::SYSTEM_ENVIRON; fastOpProdInter(B, A, matrixBlock, link2, aux); return; } SizeType m = aux.m(); int offset = lrs_.super().partition(m); int total = lrs_.super().partition(m + 1) - offset; int counter=0; matrixBlock.resize(total,total); int i; for (i=0;i(0.0)) continue; matrixBlock.pushCol(j); matrixBlock.pushValue(tmp); counter++; } } } matrixBlock.setRow(i,counter); } // Does x+= (AB)y, where A belongs to pSprime and B belongs to pEprime or // viceversa (inter) // Has been changed to accomodate for reflection symmetry void fastOpProdInter(VectorSparseElementType& x, const VectorSparseElementType& y, const SparseMatrixType& A, const SparseMatrixType& B, const LinkType& link, const Aux& aux) const { RealType fermionSign = (link.fermionOrBoson == ProgramGlobals::FermionOrBosonEnum::FERMION) ? -1 : 1; if (link.type==ProgramGlobals::ConnectionEnum::ENVIRON_SYSTEM) { LinkType link2 = link; link2.value *= fermionSign; link2.type = ProgramGlobals::ConnectionEnum::SYSTEM_ENVIRON; fastOpProdInter(x, y, B, A, link2, aux); return; } //! work only on partition m int m = aux.m(); int offset = lrs_.super().partition(m); int total = lrs_.super().partition(m + 1) - offset; for (int i=0;i::Type& bufferTmp = aux.buffer(alphaPrime); for (int kk=startkk;kk=lrs_.super().partition(m+1)) continue; SparseElementType tmp = hamiltonian.getValue(k); matrixBlock.pushCol(j-offset); matrixBlock.pushValue(tmp); counter++; } } matrixBlock.setRow(lrs_.super().partition(m+1)-offset,counter); #ifndef NDEBUG if (!isHermitian(matrixBlock)) { std::cerr< class ModelHelperSu2 { typedef std::pair PairType; public: enum { System=0,Environ=1 }; typedef LeftRightSuperType_ LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::StorageType OperatorStorageType; typedef typename OperatorType::SparseMatrixType SparseMatrixType; typedef typename OperatorsType::BasisType BasisType; typedef typename BasisType::QnType QnType; typedef typename BasisType::BlockType BlockType; typedef typename BasisType::RealType RealType; typedef typename SparseMatrixType::value_type SparseElementType; typedef Link LinkType; typedef typename PsimagLite::Vector::Type VectorSparseElementType; typedef typename LeftRightSuperType::ParamsForKroneckerDumperType ParamsForKroneckerDumperType; ModelHelperSu2(int m, const LeftRightSuperType& lrs) : m_(m), lrs_(lrs), su2reduced_(m,lrs) {} void clearThreadSelves() const {} const SparseMatrixType& reducedOperator(char modifier, SizeType i, SizeType sigma, const ProgramGlobals::SysOrEnvEnum type) const { assert(BasisType::useSu2Symmetry()); if (type == ProgramGlobals::SysOrEnvEnum::SYSTEM) { PairType ii = lrs_.left().getOperatorIndices(i, sigma); return lrs_.left().getReducedOperatorByIndex(modifier, ii).data; } assert(type == ProgramGlobals::SysOrEnvEnum::ENVIRON); PairType ii = lrs_.right().getOperatorIndices(i, sigma); return lrs_.right().getReducedOperatorByIndex(modifier, ii).data; } static bool isSu2() { return true; } int size() const { int tmp = lrs_.super().partition(m_+1)-lrs_.super().partition(m_); return tmp; //reflection_.size(tmp); } const QnType& quantumNumber() const { return lrs_.super().qnEx(m_); } // Does matrixBlock= (AB), A belongs to pSprime and B // belongs to pEprime or viceversa (inter) void fastOpProdInter(SparseMatrixType const &A, SparseMatrixType const &B, SparseMatrixType &matrixBlock, const LinkType& link, bool flip=false) const { //int const SystemEnviron=1,EnvironSystem=2; RealType fermionSign = (link.fermionOrBoson == ProgramGlobals::FermionOrBosonEnum::FERMION) ? -1 : 1; if (link.type==ProgramGlobals::ConnectionEnum::ENVIRON_SYSTEM) { LinkType link2 = link; link2.value *= fermionSign; link2.type = ProgramGlobals::ConnectionEnum::SYSTEM_ENVIRON; fastOpProdInter(B,A,matrixBlock,link2,true); return; } //! work only on partition m int m = m_; int offset = lrs_.super().partition(m); int total = lrs_.super().partition(m+1) - offset; matrixBlock.resize(total,total); BlockType lElectrons; lrs_.left().su2ElectronsBridge(lElectrons); SizeType counter=0; for (SizeType i=0;i=int(matrixBlock.rows())) continue; matrixBlock.setRow(ix,counter); SizeType i1=su2reduced_.reducedEffective(i).first; SizeType i2=su2reduced_.reducedEffective(i).second; PairType jm1 = lrs_.left().jmValue(lrs_.left().reducedIndex(i1)); assert(lrs_.left().reducedIndex(i1) < lElectrons.size()); SizeType n1 = lElectrons[lrs_.left().reducedIndex(i1)]; RealType fsign=1; if (n1>0 && n1%2!=0) fsign= fermionSign; PairType jm2 = lrs_.right().jmValue(lrs_.right().reducedIndex(i2)); SizeType lf1 =jm1.first + jm2.first*lrs_.left().jMax(); for (int k1=A.getRowPtr(i1);k1(0)) continue; lfactor *= link.angularFactor; int jx = su2reduced_.flavorMapping(i1prime,i2prime)-offset; if (jx<0 || jx >= int(matrixBlock.rows()) ) continue; matrixBlock.pushCol(jx); matrixBlock.pushValue(fsign*link.value*lfactor* A.getValue(k1)*B.getValue(k2)); counter++; } } } matrixBlock.setRow(matrixBlock.rows(),counter); } // Does x+= (AB)y, where A belongs to pSprime and B // belongs to pEprime or viceversa (inter) // Has been changed to accomodate for reflection symmetry void fastOpProdInter(VectorSparseElementType& x, const VectorSparseElementType& y, SparseMatrixType const &A, SparseMatrixType const &B, const LinkType& link, bool flipped=false) const { //int const SystemEnviron=1,EnvironSystem=2; RealType fermionSign = (link.fermionOrBoson == ProgramGlobals::FermionOrBosonEnum::FERMION) ? -1 : 1; if (link.type == ProgramGlobals::ConnectionEnum::ENVIRON_SYSTEM) { LinkType link2 = link; link2.value *= fermionSign; link2.type = ProgramGlobals::ConnectionEnum::SYSTEM_ENVIRON; fastOpProdInter(x,y,B,A,link2,true); return; } //! work only on partition m int m = m_; int offset = lrs_.super().partition(m); BlockType lElectrons; lrs_.left().su2ElectronsBridge(lElectrons); for (SizeType i=0;i=int(x.size())) continue; SizeType i1=su2reduced_.reducedEffective(i).first; SizeType i2=su2reduced_.reducedEffective(i).second; PairType jm1 = lrs_.left().jmValue(lrs_.left().reducedIndex(i1)); assert(lrs_.left().reducedIndex(i1) < lElectrons.size()); SizeType n1= lElectrons[lrs_.left().reducedIndex(i1)]; RealType fsign=1; if (n1>0 && n1%2!=0) fsign= fermionSign; PairType jm2 = lrs_.right().jmValue(lrs_.right().reducedIndex(i2)); SizeType lf1 =jm1.first + jm2.first*lrs_.left().jMax(); for (int k1=A.getRowPtr(i1);k1(0)) continue; lfactor *= link.angularFactor; int jx = su2reduced_.flavorMapping(i1prime,i2prime)-offset; if (jx<0 || jx >= int(y.size()) ) continue; x[ix] += fsign*link.value*lfactor* A.getValue(k1)*B.getValue(k2)*y[jx]; } } } } // Let H_{alpha,beta; alpha',beta'} = basis2.hamiltonian_{alpha,alpha'} // delta_{beta,beta'} // Let H_m be the m-th block (in the ordering of basis1) of H // Then, this function does x += H_m * y // This is a performance critical function // Has been changed to accomodate for reflection symmetry void hamiltonianLeftProduct(VectorSparseElementType& x, const VectorSparseElementType& y) const { //! work only on partition m int m = m_; int offset = lrs_.super().partition(m); const SparseMatrixType& A = su2reduced_.hamiltonianLeft(); for (SizeType i=0;i=int(x.size())) continue; SizeType i1=su2reduced_.reducedEffective(i).first; SizeType i2=su2reduced_.reducedEffective(i).second; PairType jm1 = lrs_.left().jmValue(lrs_.left().reducedIndex(i1)); PairType jm2 = lrs_.right().jmValue(lrs_.right().reducedIndex(i2)); for (int k1=A.getRowPtr(i1);k1(0)) continue; int jx = su2reduced_.flavorMapping(i1prime,i2)-offset; if (jx<0 || jx >= int(y.size()) ) continue; x[ix] += A.getValue(k1)*y[jx]; } } } // Let H_{alpha,beta; alpha',beta'} = basis2.hamiltonian_{beta,beta'} // \delta_{alpha,alpha'} // Let H_m be the m-th block (in the ordering of basis1) of H // Then, this function does x += H_m * y // This is a performance critical function void hamiltonianRightProduct(VectorSparseElementType& x, const VectorSparseElementType& y) const { //! work only on partition m int m = m_; int offset = lrs_.super().partition(m); const SparseMatrixType& B = su2reduced_.hamiltonianRight(); for (SizeType i=0;i=int(x.size())) continue; SizeType i1=su2reduced_.reducedEffective(i).first; SizeType i2=su2reduced_.reducedEffective(i).second; PairType jm1 = lrs_.left().jmValue(lrs_.left().reducedIndex(i1)); PairType jm2 = lrs_.right().jmValue(lrs_.right().reducedIndex(i2)); for (int k2=B.getRowPtr(i2);k2(0)) continue; int jx = su2reduced_.flavorMapping(i1,i2prime)-offset; if (jx<0 || jx >= int(y.size()) ) continue; x[ix] += B.getValue(k2)*y[jx]; } } } //! Note: USed only for debugging void calcHamiltonianPartLeft(SparseMatrixType &matrixBlock) const { //! work only on partition m int m = m_; int offset = lrs_.super().partition(m); int bs = lrs_.super().partition(m+1)-offset; const SparseMatrixType& A = su2reduced_.hamiltonianLeft(); matrixBlock.resize(bs,bs); SizeType counter=0; for (SizeType i=0;i=int(matrixBlock.rows())) continue; SizeType i1=su2reduced_.reducedEffective(i).first; SizeType i2=su2reduced_.reducedEffective(i).second; PairType jm1 = lrs_.left().jmValue(lrs_.left().reducedIndex(i1)); PairType jm2 = lrs_.right().jmValue(lrs_.right().reducedIndex(i2)); for (int k1=A.getRowPtr(i1);k1(0)) continue; int jx = su2reduced_.flavorMapping(i1prime,i2)-offset; if (jx<0 || jx >= int(matrixBlock.rows()) ) continue; matrixBlock.pushCol(jx); matrixBlock.pushValue(A.getValue(k1)); counter++; } } matrixBlock.setRow(bs,counter); } //! Note: USed only for debugging void calcHamiltonianPartRight(SparseMatrixType &matrixBlock) const { //! work only on partition m int m = m_; int offset = lrs_.super().partition(m); int bs = lrs_.super().partition(m+1)-offset; const SparseMatrixType& B = su2reduced_.hamiltonianRight(); matrixBlock.resize(bs,bs); SizeType counter=0; for (SizeType i=0;i=int(matrixBlock.rows())) continue; SizeType i1=su2reduced_.reducedEffective(i).first; SizeType i2=su2reduced_.reducedEffective(i).second; PairType jm1 = lrs_.left().jmValue(lrs_.left().reducedIndex(i1)); PairType jm2 = lrs_.right().jmValue(lrs_.right().reducedIndex(i2)); for (int k2=B.getRowPtr(i2);k2(0)) continue; int jx = su2reduced_.flavorMapping(i1,i2prime)-offset; if (jx<0 || jx >= int(matrixBlock.rows()) ) continue; matrixBlock.pushCol(jx); matrixBlock.pushValue(B.getValue(k2)); counter++; } } matrixBlock.setRow(bs,counter); } // if option==true let H_{alpha,beta; alpha',beta'} = // basis2.hamiltonian_{alpha,alpha'} \delta_{beta,beta'} // if option==false let H_{alpha,beta; alpha',beta'} = // basis2.hamiltonian_{beta,beta'} \delta_{alpha,alpha'} // returns the m-th block (in the ordering of basis1) of H // Note: USed only for debugging void calcHamiltonianPart(SparseMatrixType &matrixBlock,bool option) const { if (option) calcHamiltonianPartLeft(matrixBlock); else calcHamiltonianPartRight(matrixBlock); } SizeType m() const {return m_;} const LeftRightSuperType& leftRightSuper() const { return lrs_; } private: int m_; const LeftRightSuperType& lrs_; Su2Reduced su2reduced_; }; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/ModelLinks.h000066400000000000000000000407031414604301300171400ustar00rootroot00000000000000#ifndef MODEL_LINKS_H #define MODEL_LINKS_H #include "Vector.h" #include "ProgramGlobals.h" #include "PsimagLite.h" #include #include namespace Dmrg { template class ModelLinks { public: typedef std::pair PairSizeType; typedef std::pair PairCharType; typedef std::pair PairStringType; typedef std::pair PairStringSizeType; typedef typename LabeledOperatorsType::OperatorType::RealType RealType_; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename LabeledOperatorsType::LabelType LabelType; typedef typename LabeledOperatorsType::ComplexOrRealType ComplexOrRealType; typedef typename LabeledOperatorsType::OperatorType OperatorType; typedef typename OperatorType::RealType RealType; typedef typename OperatorType::StorageType OperatorStorageType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename PsimagLite::Vector::Type VectorPairStringSizeType; class OneLink { public: typedef std::function LambdaType; OneLink(VectorSizeType indices_, VectorSizeType orbs_, ProgramGlobals::FermionOrBosonEnum fermionOrBoson_, PsimagLite::String mods_, SizeType angularMomentum_, RealType_ angularFactor_, SizeType category_, LambdaType vModifier_) : indices(indices_), orbs(orbs_), fermionOrBoson(fermionOrBoson_), mods(mods_), angularMomentum(angularMomentum_), angularFactor(angularFactor_), category(category_), modifier(vModifier_) {} VectorSizeType indices; VectorSizeType orbs; ProgramGlobals::FermionOrBosonEnum fermionOrBoson; PsimagLite::String mods; SizeType angularMomentum; RealType_ angularFactor; SizeType category; LambdaType modifier; }; // OneLink class AtomKindBase { public: virtual ~AtomKindBase() {} virtual SizeType siteToAtomKind(SizeType) const { return 0; } virtual SizeType kindsOfAtoms() const { return 1; } }; class Term { typedef typename PsimagLite::Vector::Type VectorOneLinkType; public: struct Su2Properties { Su2Properties(SizeType a = 0, RealType_ f = 1.0, SizeType c = 0) : angularMomentum(a), angularFactor(f), category(c) {} SizeType angularMomentum; RealType_ angularFactor; SizeType category; }; typedef OneLink OneLinkType; typedef typename OneLinkType::LambdaType LambdaType; // pair of sites should actually be pair of kinds of sites Term(PsimagLite::String name, bool wantsHermitian = true) // name of term, // not name of operator : name_(name), wantsHermitian_(wantsHermitian) {} bool wantsHermitian() const { return wantsHermitian_; } bool areSitesCompatible(const VectorSizeType& actualSites) const { const SizeType n = actualSites.size(); assert(n == vectorKind_.size()); for (SizeType i = 0; i < n; ++i) { if (vectorKind_[i] != atomKind_->siteToAtomKind(actualSites[i])) return false; } return true; } bool areSitesCompatible2(const VectorSizeType& kinds) const { const SizeType n = kinds.size(); assert(n == vectorKind_.size()); for (SizeType i = 0; i < n; ++i) { if (vectorKind_[i] != kinds[i]) return false; } return true; } template void push(const OpaqueOp& op1, char mod1, const OpaqueOp& op2, char mod2, Su2Properties su2properties) { push(op1, mod1, op2, mod2, [](ComplexOrRealType&) {}, su2properties); } template void push(const OpaqueOp& op1, char mod1, const OpaqueOp& op2, char mod2 ,LambdaType vModifier = [](ComplexOrRealType&) {} ,Su2Properties su2properties = Su2Properties()) { if (links_.size() > 0) { if (!areSitesCompatible2(VectorSizeType{op1.kindOfSite, op2.kindOfSite})) err("Term " + name_ + " incompatible atom kinds at push\n"); } else { vectorKind_ = VectorSizeType{op1.kindOfSite, op2.kindOfSite}; } SizeType index1 = findIndexOfOp(op1.name, op1.dof); SizeType index2 = findIndexOfOp(op2.name, op2.dof); ProgramGlobals::FermionOrBosonEnum fermionOrBoson = ProgramGlobals::FermionOrBosonEnum::BOSON; if (op1.fermionOrBoson == ProgramGlobals::FermionOrBosonEnum::FERMION && op2.fermionOrBoson == ProgramGlobals::FermionOrBosonEnum::FERMION) fermionOrBoson = ProgramGlobals::FermionOrBosonEnum::FERMION; // can we also infer angularMomentum, angularFactor, and category? FIXME TODO PsimagLite::String modStr("NN"); modStr[0] = mod1; modStr[1] = mod2; links_.push_back(OneLink(VectorSizeType{index1, index2}, VectorSizeType{op1.edof, op2.edof}, fermionOrBoson, modStr, su2properties.angularMomentum, su2properties.angularFactor, su2properties.category, vModifier)); } template void push4(const OpaqueOp& op1, char mod1, const OpaqueOp& op2, char mod2, const OpaqueOp& op3, char mod3, const OpaqueOp& op4, char mod4 ,LambdaType vModifier = [](ComplexOrRealType&) {}, Su2Properties su2properties = Su2Properties()) { if (links_.size() > 0) { if (!areSitesCompatible2(VectorSizeType{op1.kindOfSite, op2.kindOfSite, op3.kindOfSite, op4.kindOfSite})) err("Term " + name_ + " incompatible atom kinds at push\n"); } else { vectorKind_ = VectorSizeType{op1.kindOfSite, op2.kindOfSite, op3.kindOfSite, op4.kindOfSite}; } SizeType index1 = findIndexOfOp(op1.name, op1.dof); SizeType index2 = findIndexOfOp(op2.name, op2.dof); SizeType index3 = findIndexOfOp(op3.name, op2.dof); SizeType index4 = findIndexOfOp(op3.name, op2.dof); ProgramGlobals::FermionOrBosonEnum fermionOrBoson = ProgramGlobals::FermionOrBosonEnum::BOSON; // FIXME: if (op1.fermionOrBoson == ProgramGlobals::FermionOrBosonEnum::FERMION || op2.fermionOrBoson == ProgramGlobals::FermionOrBosonEnum::FERMION || op3.fermionOrBoson == ProgramGlobals::FermionOrBosonEnum::FERMION || op4.fermionOrBoson == ProgramGlobals::FermionOrBosonEnum::FERMION) err(PsimagLite::String(__FILE__) + "::push4(): Unsupported fermionic ops\n"); // can we also infer angularMomentum, angularFactor, and category? FIXME TODO PsimagLite::String modStr("NNNN"); modStr[0] = mod1; modStr[1] = mod2; modStr[2] = mod3; modStr[3] = mod4; links_.push_back(OneLink(VectorSizeType{index1, index2, index3, index4}, VectorSizeType{op1.edof, op2.edof, op3.edof, op4.edof}, fermionOrBoson, modStr, su2properties.angularMomentum, su2properties.angularFactor, su2properties.category, vModifier)); } SizeType size() const { return links_.size(); } const OneLinkType& operator()(SizeType dof) const { assert(dof < links_.size()); return links_[dof]; } const PsimagLite::String& name() const { return name_; } void print(std::ostream& os, const LabeledOperatorsType& labeledOps) const { os<<"Term Name="<name() == name_); } private: PsimagLite::String name_; }; enum HermitianEnum { HERMIT_NEITHER, HERMIT_PLUS, HERMIT_MINUS}; typedef SuperGeometryType_ SuperGeometryType; typedef PsimagLite::Vector::Type VectorStringType; typedef typename PsimagLite::Vector::Type VectorHermitianEnum; typedef typename PsimagLite::Vector::Type VectorTermType; typedef Term TermType; ModelLinks() : maxDofs_(0) {} ~ModelLinks() { clear(); } void clear() { //offsets_.clear(); SizeType n = terms_.size(); for (SizeType i = 0; i < n; ++i) delete terms_[i]; terms_.clear(); hermit_.clear(); termGeomReplacement_.clear(); hilbert_.clear(); } void setAtomKind(const AtomKindBase* ptr) { atomKind_ = ptr; } void postCtor1(const LabeledOperatorsType& labeledOps, SizeType geometryTerms) { if (terms_.size() > geometryTerms) { PsimagLite::String str("ModelBase: NumberOfTerms must be "); err(str + ttos(terms_.size()) + " in input file for this model\n"); } VectorOperatorType cm; // only for hermit SizeType n = labeledOps.size(); VectorSizeType dofsByKind(n); hilbert_.resize(atomKind_->kindsOfAtoms()); for (SizeType i = 0; i < n; ++i) { const LabelType& ll = labeledOps[i]; if (!ll.isTrackable()) continue; const SizeType kindOfSite = ll.kindOfSite(); offsets_[ll.name()] = (i == 0) ? 0 : dofsByKind[kindOfSite]; dofsByKind[kindOfSite] += ll.dofs(); for (SizeType j = 0; j < ll.dofs(); ++j) cm.push_back(ll(j)); hilbert_[kindOfSite] = ll(0).getCRS().rows(); } SizeType m = cm.size(); if (m == 0) return; hermit_.resize(m); for (SizeType i = 0; i < m; ++i) hermit_[i] = getHermitianProperty(cm[i].getStorage()); } void postCtor2() { const SizeType fromModel = terms_.size(); VectorStringType input; for (SizeType termIndex = 0; termIndex < fromModel; ++termIndex) { const SizeType termIndexForGeom = termIndexForGeometry(termIndex); if (termIndex == termIndexForGeom) { input.push_back(terms_[termIndex]->name()); } } VectorSizeType termGeomReplacement(fromModel); for (SizeType termIndex = 0; termIndex < fromModel; ++termIndex) { const SizeType termIndexForGeom = termIndexForGeometry(termIndex); PsimagLite::String name = terms_[termIndexForGeom]->name(); typename VectorStringType::const_iterator x = std::find(input.begin(), input.end(), name); if (x == input.end()) err("ModelLinks: INTERNAL ERROR term " + name + " termIndex= " + ttos(termIndex) + "\n"); termGeomReplacement[termIndex] = x - input.begin(); } termGeomReplacement_.swap(termGeomReplacement); SizeType t = terms_.size(); for (SizeType i = 0; i < t; ++i) { SizeType dof = terms_[i]->size(); if (dof > maxDofs_) maxDofs_ = dof; } } Term& createTerm(PsimagLite::String name, bool wantsHermitian, PsimagLite::String geometryFrom) { typename VectorTermType::const_iterator x = std::find_if(terms_.begin(), terms_.end(), IsValue(name)); if (x != terms_.end()) err("Repeated term " + name + "\n"); termGeomReplacement_.push_back(terms_.size()); if (geometryFrom != "") { typename VectorTermType::const_iterator y = std::find_if(terms_.begin(), terms_.end(), IsValue(geometryFrom)); termGeomReplacement_[termGeomReplacement_.size() - 1] = y - terms_.begin(); } Term* term = new Term(name, wantsHermitian); terms_.push_back(term); assert(termGeomReplacement_.size() == terms_.size()); return *term; } // FIXME: For Immm and SDHS HermitianEnum getHermitianProperty(SizeType opsIndex) const { assert(opsIndex < hermit_.size()); return hermit_[opsIndex]; } SizeType dofsAllocationSize() const { return maxDofs_; } SizeType termIndexForGeometry(SizeType termIndex) const { assert(termIndex < termGeomReplacement_.size()); return termGeomReplacement_[termIndex]; } SizeType numberOfTerms() const { return terms_.size(); } const TermType& term(SizeType term) const { assert(term < terms_.size()); return *(terms_[term]); } static void setOperatorMatrices(VectorOperatorType& cm, const LabeledOperatorsType& labeledOps, SizeType kindOfSite) { cm.clear(); SizeType n = labeledOps.size(); for (SizeType i = 0; i < n; ++i) { const LabelType& ll = labeledOps[i]; if (!ll.isTrackable()) continue; if (ll.kindOfSite() != kindOfSite) continue; const SizeType dofs = ll.dofs(); for (SizeType j = 0; j < dofs; ++j) cm.push_back(ll(j)); } } SizeType hilbertSize(SizeType kindOfSite) const { assert(kindOfSite < hilbert_.size()); return hilbert_[kindOfSite]; } bool areSitesCompatibleForThisTerm(SizeType termIndex, const VectorSizeType& actualSites) const { assert(atomKind_); assert(termIndex < terms_.size()); return terms_[termIndex]->areSitesCompatible(actualSites); } SizeType siteToAtomKind(SizeType actualSite) const { assert(atomKind_); return atomKind_->siteToAtomKind(actualSite); } SizeType kindsOfAtoms() const { assert(atomKind_); return atomKind_->kindsOfAtoms(); } void printTerms(std::ostream& os, const LabeledOperatorsType& labeledOps) const { const SizeType n = terms_.size(); os<<"Model "<print(os, labeledOps); } } private: static HermitianEnum getHermitianProperty(const OperatorStorageType& m) { if (isHermitian(m)) return HERMIT_PLUS; return (isAntiHermitian(m)) ? HERMIT_MINUS : HERMIT_NEITHER; } VectorTermType terms_; VectorHermitianEnum hermit_; SizeType maxDofs_; VectorSizeType termGeomReplacement_; const static AtomKindBase* atomKind_; static std::map offsets_; VectorSizeType hilbert_; }; template std::map ModelLinks::offsets_; template const typename ModelLinks::AtomKindBase* ModelLinks::atomKind_ = 0; } #endif // MODEL_LINKS_H dmrgpp-6.02/src/Engine/ModelSelector.h000066400000000000000000000246141414604301300176430ustar00rootroot00000000000000/* Copyright (c) 2012-2015, UT-Battelle, LLC All rights reserved [MPS++, Version 0.1] [by K. Al-Hassanieh, Oak Ridge National Laboratory] [by J. Rincon, Oak Ridge National Laboratory] [by G.A., Oak Ridge National Laboratory] See full open source LICENSE under file LICENSE in the root directory of this distribution. ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup Dmrg */ /*@{*/ /** \file ModelSelector.h */ #ifndef MODEL_SELECTOR_H #define MODEL_SELECTOR_H #define ALL_MODELS 1 #include #include "ProgramGlobals.h" #include "Utils.h" #include "../Models/Heisenberg/ModelHeisenberg.h" #if ALL_MODELS #include "../Models/HubbardOneBand/ModelHubbard.h" #include "../Models/HeisenbergAncillaC/HeisenbergAncillaC.h" #include "../Models/ExtendedHubbard1Orb/ExtendedHubbard1Orb.h" #include "../Models/SuperExtendedHubbard1Orb/SuperExtendedHubbard1Orb.h" #include "../Models/FeAsModel/ModelFeBasedSc.h" #include "../Models/FeAsBasedScExtended/FeAsBasedScExtended.h" #include "../Models/Immm/Immm.h" #include "../Models/TjMultiOrb/TjMultiOrb.h" #include "../Models/TjAnisotropic/TjAnisotropic.h" #include "../Models/TjAncillaC2/TjAncillaC2.h" #include "../Models/TjAncillaC/TjAncillaC.h" #include "../Models/TjAncillaG/TjAncillaG.h" #include "../Models/SuperHubbardExtended/SuperHubbardExtended.h" #include "../Models/HubbardAncilla/HubbardAncilla.h" #include "../Models/HubbardAncillaExtended/HubbardAncillaExtended.h" #include "../Models/FermionSpinless/FermionSpinless.h" #include "../Models/Kitaev/Kitaev.h" #include "../Models/HubbardMultiBand/ModelHubbardMultiBand.h" #include "../Models/HubbardHolstein/HubbardHolstein.h" #include "../Models/HolsteinThin/HolsteinThin.h" #include "../Models/Kondo/Kondo.h" #include "../Models/UlsOsu/UlsOsu.h" #include "../Models/Graphene/Graphene.h" #include "../Models/GaugeSpin/GaugeSpin.h" #include "../Models/Heisenberg/HeisenbergMix.h" #include "../Models/SpinOrbital/SpinOrbitalModel.h" #include "../Models/Su3/Su3Model.h" #endif namespace Dmrg { template class ModelSelector { typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; // start models here: typedef ModelHeisenberg ModelHeisenbergType; #if ALL_MODELS typedef ModelHubbard ModelHubbardType; typedef HeisenbergAncillaC HeisenbergAncillaCType; typedef ExtendedHubbard1Orb ModelHubbardExtType; typedef ExtendedSuperHubbard1Orb ModelHubbardExtSuperType; typedef ModelFeBasedSc FeBasedScType; typedef FeAsBasedScExtended FeBasedScExtType; typedef Immm ImmmType; typedef TjMultiOrb TjMultiOrbType; typedef TjAnisotropic TjAnisotropicType; typedef UlsOsu UlsOsuType; typedef TjAncillaC2 TjAncillaC2Type; typedef TjAncillaC TjAncillaCType; typedef TjAncillaG TjAncillaGType; typedef SuperHubbardExtended SuperHubbardExtendedType; typedef HubbardAncilla HubbardAncillaType; typedef HubbardAncillaExtended HubbardAncillaExtendedType; typedef FermionSpinless FermionSpinlessType; typedef Kitaev KitaevType; typedef ModelHubbardMultiBand ModelHubbardMultiBandType; typedef HubbardHolstein HubbardHolsteinType; typedef Kondo KondoType; typedef Graphene GrapheneType; typedef HolsteinThin HolsteinThinType; typedef GaugeSpin GaugeSpinType; typedef HeisenbergMix HeisenbergMixType; typedef SpinOrbitalModel SpinOrbitalModelType; typedef Su3Model Su3ModelType; #endif // end models public: ModelSelector(const PsimagLite::String& name) : name_(name),model_(0) {} ~ModelSelector() { if (model_) delete model_; } ModelBaseType& operator()(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) { if (model_) return *model_; PsimagLite::String hdf5fileIfAny = findHdf5FileIfAny(solverParams); if (name_ == "Heisenberg") { model_ = new ModelHeisenbergType(solverParams,io,geometry,""); } else if (name_ == "HeisenbergAnisotropic") { model_ = new ModelHeisenbergType(solverParams,io,geometry,"Anisotropic"); } else if (name_ == "Aklt") { model_ = new ModelHeisenbergType(solverParams,io,geometry,"Aklt"); } #if ALL_MODELS else if (name_ == "HubbardOneBand") { model_ = new ModelHubbardType(solverParams, io, geometry, ""); } else if (name_ == "HeisenbergAncillaC") { model_ = new HeisenbergAncillaCType(solverParams,io,geometry); } else if (name_ == "HubbardOneBandExtended") { model_ = new ModelHubbardExtType(solverParams,io,geometry); } else if (name_ == "HubbardOneBandExtendedSuper") { model_ = new ModelHubbardExtSuperType(solverParams,io,geometry); } else if (name_ == "FeAsBasedSc") { model_ = new FeBasedScType(solverParams,io,geometry); } else if (name_ == "FeAsBasedScExtended") { model_ = new FeBasedScExtType(solverParams,io,geometry); } else if (name_ == "Immm") { model_ = new ImmmType(solverParams,io,geometry); } else if (name_ == "TjMultiOrb") { model_ = new TjMultiOrbType(solverParams,io,geometry); } else if (name_ == "TjAnisotropic") { model_ = new TjAnisotropicType(solverParams,io,geometry); } else if (name_ == "UlsOsu") { model_ = new UlsOsuType(solverParams, io, geometry); } else if (name_ == "TjAncillaC2") { model_ = new TjAncillaC2Type(solverParams,io,geometry); } else if (name_ == "TjAncillaC") { model_ = new TjAncillaCType(solverParams,io,geometry); } else if (name_ == "TjAncillaG") { model_ = new TjAncillaGType(solverParams,io,geometry); } else if (name_ == "SuperHubbardExtended") { model_ = new SuperHubbardExtendedType(solverParams,io,geometry); } else if (name_ == "KaneMeleHubbard") { model_ = new ModelHubbardType(solverParams,io,geometry,""); } else if (name_ == "HubbardAncilla") { model_ = new HubbardAncillaType(solverParams,io,geometry); } else if (name_ == "HubbardAncillaExtended") { model_ = new HubbardAncillaExtendedType(solverParams,io,geometry); } else if (name_ == "FermionSpinless") { model_ = new FermionSpinlessType(solverParams, io, geometry, ""); } else if (name_ == "FermionSpinlessWithDelta") { model_ = new FermionSpinlessType(solverParams, io, geometry, "WithDelta"); } else if (name_.substr(0, 6) == "Kitaev") { PsimagLite::String tmp = (name_.length() == 6) ? "" : name_.substr(6, name_.length() - 6); model_ = new KitaevType(solverParams,io,geometry, tmp); } else if (name_ == "ModelHubbardMultiBand") { model_ = new ModelHubbardMultiBandType(solverParams,io,geometry); } else if (name_ == "HubbardHolstein") { model_ = new HubbardHolsteinType(solverParams, io, geometry, "", hdf5fileIfAny); } else if (name_ == "HubbardHolsteinSSH") { model_ = new HubbardHolsteinType(solverParams, io, geometry, "SSH", hdf5fileIfAny); } else if (name_ == "HubbardHolsteinLRH") { model_ = new HubbardHolsteinType(solverParams, io, geometry, "LRH", hdf5fileIfAny); } else if (name_ == "HolsteinThin") { model_ = new HolsteinThinType(solverParams, io, geometry, ""); } else if (name_.substr(0, 5) == "Kondo") { PsimagLite::String tmp = (name_.length() == 5) ? "" : name_.substr(5, name_.length() - 5); model_ = new KondoType(solverParams, io, geometry, tmp); } else if (name_ == "HubbardOneBandRashbaSOC") { model_ = new ModelHubbardType(solverParams, io, geometry, "RashbaSOC"); } else if (name_ == "Graphene") { model_ = new GrapheneType(solverParams, io, geometry); } else if (name_ == "GaugeSpin") { model_ = new GaugeSpinType(solverParams, io, geometry); } else if (name_ == "HeisenbergMix") { model_ = new HeisenbergMixType(solverParams, io, geometry); } else if (name_.substr(0, 11) == "SpinOrbital") { PsimagLite::String tmp = (name_.length() == 11) ? "" : name_.substr(11, name_.length() - 11); model_ = new SpinOrbitalModelType(solverParams, io, geometry, tmp); } else if (name_ == "Su3Model") { model_ = new Su3ModelType(solverParams, io, geometry); } #endif else { PsimagLite::String s(__FILE__); s += " Unknown model " + name_ + "\n"; throw PsimagLite::RuntimeError(s.c_str()); } model_->postCtor(); return *model_; } private: PsimagLite::String findHdf5FileIfAny(const SolverParamsType& solverParams) const { // check first for observe bool isObserve = solverParams.options.isSet("observe"); if (isObserve) return solverParams.filename; // then for restart bool isRestart = solverParams.options.isSet("restart"); if (isRestart) return solverParams.checkpoint.filename(); return ""; } PsimagLite::String name_; ModelBaseType* model_; }; // ModelSelector } // namespace Dmrg /*@}*/ #endif // MODEL_SELECTOR_H dmrgpp-6.02/src/Engine/MultiPointCorrelations.h000066400000000000000000000132531414604301300215700ustar00rootroot00000000000000/* Copyright (c) 2013, UT-Battelle, LLC All rights reserved [DMRG++, Version 5..0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file MultiPointCorrelations.h * * * */ #ifndef MULTI_POINT_CORRELATIONS_H #define MULTI_POINT_CORRELATIONS_H #include "CrsMatrix.h" #include "VectorWithOffsets.h" // for operator* #include "VectorWithOffset.h" // for operator* namespace Dmrg { template class MultiPointCorrelations { typedef typename CorrelationsSkeletonType::ObserverHelperType ObserverHelperType; typedef typename ObserverHelperType::VectorType VectorType; typedef typename ObserverHelperType::VectorWithOffsetType VectorWithOffsetType; typedef typename ObserverHelperType::BasisWithOperatorsType BasisWithOperatorsType ; typedef typename VectorType::value_type FieldType; typedef typename BasisWithOperatorsType::RealType RealType; typedef MultiPointCorrelations ThisType; typedef typename CorrelationsSkeletonType::SparseMatrixType SparseMatrixType; public: typedef typename ObserverHelperType::MatrixType MatrixType; MultiPointCorrelations(const CorrelationsSkeletonType& skeleton) : skeleton_(skeleton) {} template typename PsimagLite::EnableIf ::True,void>::Type operator()(VectorLikeType& result, const SparseMatrixType& O, SizeType rows, SizeType cols, PsimagLite::String bra, PsimagLite::String ket) { assert(rows == cols); result.resize(rows); SparseMatrixType Og; SparseMatrixType identity(O.rows(),O.cols()); identity.makeDiagonal(O.rows(),1.0); const size_t rowsOver2 = static_cast(rows/2); for (SizeType i = 0; i < rowsOver2; ++i) result[i] = calcCorrelation_(Og, i, O, identity, bra, ket); for (SizeType i=rowsOver2; i=skeleton_.numberOfSites()-1) throw PsimagLite::RuntimeError("calcCorrelation: i must be < sites-1\n"); ProgramGlobals::FermionOrBosonEnum fermionicSign = ProgramGlobals::FermionOrBosonEnum::BOSON; SizeType ns = i; SparseMatrixType O2g; if (i==0) { skeleton_.growDirectly(O2gt,O,i,fermionicSign,ns,true); const SizeType ptr = skeleton_.dmrgMultiply(O2g,O2gt,identity,fermionicSign,ns); FieldType ret = skeleton_.bracket(O2g, fermionicSign, ptr, bra, ket); return ret; } // if (i==5) { const SizeType ptr = skeleton_.dmrgMultiply(O2g, O2gt, O, fermionicSign, ns - 1); // } else { // skeleton_.dmrgMultiply(O2g,O2gt,identity,fermionicSign,ns-1); // } O2gt.clear(); FieldType ret = skeleton_.bracket(O2g,fermionicSign, ptr, bra, ket); skeleton_.helper().transform(O2gt, O2g, ns - 1); return ret; } const CorrelationsSkeletonType& skeleton_; }; //class MultiPointCorrelations } // namespace Dmrg /*@}*/ #endif // MULTI_POINT_CORRELATIONS_H dmrgpp-6.02/src/Engine/MultiSiteExpressionHelper.h000066400000000000000000000024201414604301300222300ustar00rootroot00000000000000#ifndef MULTISITEEXPRESSIONHELPER_H #define MULTISITEEXPRESSIONHELPER_H #include "DmrgSerializer.h" #include "Vector.h" namespace Dmrg { template class MultiSiteExpressionHelper { public: typedef VectorWithOffsetType_ VectorWithOffsetType; typedef DmrgSerializer DmrgSerializerType; typedef typename PsimagLite::Vector::Type VectorDmrgSerializerType; typedef typename PsimagLite::Vector::Type VectorVectorWithOffsetType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename DmrgSerializerType::FermionSignType FermionSignType; MultiSiteExpressionHelper(SizeType n) : vds_(n, nullptr) {} ~MultiSiteExpressionHelper() { const SizeType n = vds_.size(); for (SizeType i = 0; i < n; ++i) { delete vds_[i]; vds_[i] = nullptr; } } void push(DmrgSerializerType const* ds, const VectorWithOffsetType& psi) { SizeType coo = ds->centerOfOrthogonality(); assert(coo > 0); --coo; delete vds_[coo]; vds_[coo] = ds; vgs_[coo] = psi; } private: VectorDmrgSerializerType vds_; VectorVectorWithOffsetType vgs_; }; } #endif // MULTISITEEXPRESSIONHELPER_H dmrgpp-6.02/src/Engine/ObservableLibrary.h000066400000000000000000001367351414604301300205230ustar00rootroot00000000000000/* Copyright (c) 2009-2014-2019-2020, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ObservableLibrary.h * * A library of most used observables */ #ifndef OBSERVABLE_LIBRARY_H #define OBSERVABLE_LIBRARY_H #include "Matrix.h" // in PsimagLite #include "Concurrency.h" #include "Vector.h" #include "ProgramGlobals.h" #include "ApplyOperatorLocal.h" #include "GetBraOrKet.h" #include "StringOrderPost.h" namespace Dmrg { template class ObservableLibrary { public: typedef typename ObserverType::ModelType ModelType; typedef typename ModelType::LeftRightSuperType LeftRightSuperType; typedef typename ModelType::OperatorType OperatorType; typedef typename OperatorType::Su2RelatedType Su2RelatedType; typedef typename ObserverType::VectorWithOffsetType VectorWithOffsetType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef ApplyOperatorLocal ApplyOperatorType; typedef typename ModelType::RealType RealType; typedef typename OperatorType::SparseMatrixType SparseMatrixType; typedef typename VectorWithOffsetType::value_type FieldType; typedef typename PsimagLite::Vector::Type VectorFieldType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorMatrixType; typedef typename ObserverType::BraketType BraketType; typedef PsimagLite::Vector::Type VectorSizeType; typedef std::pair PairSizeType; typedef typename ObserverType::ManyPointActionType ManyPointActionType; template ObservableLibrary(IoInputter& io, SizeType numberOfSites, const ModelType& model, SizeType start, SizeType nf, SizeType trail) : numberOfSites_(numberOfSites), hasTimeEvolution_(false), model_(model), observe_(io, start, nf, trail, model) {} bool endOfData() const { return observe_.helper().endOfData(); } const ModelType& model() const { return model_; } void interpret(const PsimagLite::String& list, SizeType rows, SizeType cols, const ManyPointActionType& manyPointAction) { typename BraketType::VectorStringType vecStr; PsimagLite::split(vecStr, list, ","); for (SizeType i = 0; i < vecStr.size(); ++i) { BraketType braket(model_, vecStr[i]); if (braket.points() == 1) { const PsimagLite::String opName = braket.opName(0); if (opName.length() > 1 && opName[0] == '!') { StringOrderPost stringOrderPost(braket, observe_); MatrixType m(rows, cols); stringOrderPost.computeMatrix(m); std::cout<"); manyPoint(0,braket, rows, cols, manyPointAction); // c_{0,0} spin down BraketType braket2(model_,""); manyPoint(0,braket2, rows, cols, manyPointAction); // c_{0,0} spin down } else if (label=="nn") { MatrixType out(rows,cols); SizeType site = 1; for (SizeType i = 0; i < orbitals*2; ++i) { for (SizeType j = i; j < orbitals*2; ++j) { SparseMatrixType O2,O4,n1,n2; SparseMatrixType O1 = model_.naturalOperator("c",site,i).getCRS(); // c_i transposeConjugate(O2,O1); // O2 = transpose(O1) SparseMatrixType O3 = model_.naturalOperator("c",site,j).getCRS(); // c_j transposeConjugate(O4,O3); // O4 = transpose(O3) multiply(n1,O2,O1); // c_i^{\dagger}.c_i multiply(n2,O4,O3); // c_j^{\dagger}.c_j PsimagLite::String str = ""; BraketType braket(model_, str); OperatorType n1Op(n1, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); OperatorType n2Op(n2, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); braket.forceOperators(n1Op, n2Op); observe_.twoPoint(out, braket, ProgramGlobals::FermionOrBosonEnum::BOSON, "gs", "gs", manyPointAction); std::cout << str << std::endl; std::cout << out; } } } else if (label=="szsz") { resizeStorage(szsz_,rows,cols,orbitals); MatrixType tSzTotal; SizeType counter = 0; for (SizeType i = 0; i < orbitals; ++i) { for (SizeType j = i; j < orbitals; ++j) { PsimagLite::String str = ""; BraketType braket(model_,str); manyPoint(&szsz_[counter], braket, rows, cols, manyPointAction); MatrixType tSzThis = szsz_[counter]; RealType factor = (i != j) ? 2.0 : 1.0; if (counter == 0) tSzTotal = factor*tSzThis; else tSzTotal += factor*tSzThis; if (PsimagLite::Concurrency::root()) { std::cout<<"OperatorSz orb"< 1) { std::cout<<"OperatorSz tot:\n"; std::cout<"; BraketType braket(model_,str); manyPoint(&sPlusSminus_[counter], braket, rows, cols, manyPointAction); MatrixType tSpThis = sPlusSminus_[counter]; RealType factor = (i != j) ? 2.0 : 1.0; if (counter == 0) tSpTotal = factor*tSpThis; else tSpTotal += factor*tSpThis; if (PsimagLite::Concurrency::root()) { std::cout<<"OperatorS+S- orb"< 1) { std::cout<<"OperatorS+S- tot:\n"; std::cout<"; BraketType braket(model_,str); manyPoint(&sMinusSplus_[counter], braket, rows, cols, manyPointAction); MatrixType tSmThis = sMinusSplus_[counter]; RealType factor = (i != j) ? 2.0 : 1.0; if (counter == 0) tSmTotal = factor*tSmThis; else tSmTotal += factor*tSmThis; if (PsimagLite::Concurrency::root()) { std::cout<<"OperatorS-S+ orb"< 1) { std::cout<<"OperatorS-S+ tot:\n"; std::cout< 1) { std::cout<<"SpinTotalTotal:\n"; std::cout<"); manyPoint(0, braket, rows, cols, manyPointAction); } else if (label == "pp") { if (model_.params().model!="TjMultiOrb" && model_.params().model!="HubbardOneBandExtendedSuper") { throw PsimagLite::RuntimeError("pp: not for this model\n"); } typename PsimagLite::Vector::Type results; typename PsimagLite::Vector::Type names; ppTwopoint(results, names, rows, cols, "gs", "gs"); ppFourpoint(results, names, rows, cols); } else if (label=="dd4") { if (model_.superGeometry().label(0)!="ladderx") { PsimagLite::String str(__FILE__); str += " " + ttos(__LINE__) + "\n"; str += "dd4 only available for ladderx\n"; throw PsimagLite::RuntimeError(str.c_str()); } for (SizeType g=0;g<16;g++) { typename PsimagLite::Vector::Type gammas(4,0); gammas[0] = (g & 1); gammas[1] = (g & 2)>>1; gammas[2] = (g & 4) >> 2; gammas[3] = (g & 8) >> 3; std::cout<<"DD4 for the following orbitals: "; for (SizeType i=0;i::Type result; observe_.multiCorrelations(result, myMatrixSparse, rows, cols, "gs", "gs"); for (SizeType i=0;i::Type results; typename PsimagLite::Vector::Type names; ddOrbitalsTwopoint(results, names, rows, cols, "gs", "gs"); ddOrbitalsFourpoint(results,names,rows,cols); } else { err("Unknown label: " + label + "\n"); } } private: void measureOnePoint(const PsimagLite::GetBraOrKet& bra, PsimagLite::String label, const PsimagLite::GetBraOrKet& ket) { printMatrix(bra, label, ket); for (SizeType i0 = 0; i0 < observe_.helper().size(); ++i0) { SizeType site = observe_.helper().site(i0); cornerLeftOrRight(1, i0, bra, label, ket); PsimagLite::String str("<"); str += bra.toString() + "|" + label + "[" + ttos(site) + "]|" + ket.toString() + ">"; BraketType braket(model_, str); const OperatorType& opA = braket.op(0); if (!opA.isEmpty()) { FieldType tmp1 = observe_.template onePoint (i0, opA, site, ApplyOperatorType::BORDER_NO, bra, ket); std::cout<"; BraketType braket(model_, str); const OperatorType& opA = braket.op(0); if (opA.isEmpty()) continue; if (!printDone) { printDone = true; std::cout<<"Using Matrix A:\n"; std::cout< time\n"; break; } } } void cornerLeftOrRight(SizeType site, SizeType ptr, const PsimagLite::GetBraOrKet& bra, PsimagLite::String label, const PsimagLite::GetBraOrKet& ket) { if (observe_.helper().site(ptr) != site) return; bool atCorner = observe_.isAtCorner(numberOfSites_, ptr); if (site == 1 && !atCorner) { PsimagLite::String str("<"); str += bra.toString() + "|" + label + "[" + ttos(0) + "]|" + ket.toString() + ">"; BraketType braket(model_, str); const OperatorType& opA = braket.op(0); if (opA.isEmpty()) return; const SizeType splitSize = model_.hilbertSize(1); FieldType tmp1 = observe_.template onePointHookForZero(ptr, opA, splitSize, bra, ket); std::cout<<"0 "<"; BraketType braket(model_, str); const OperatorType& opAcorner = braket.op(0); if (opAcorner.isEmpty()) return; // do the corner case FieldType tmp1 = observe_.template onePoint(ptr, opAcorner, x, ApplyOperatorType::BORDER_YES, bra, ket); std::cout<::Type& result, typename PsimagLite::Vector::Type& names, SizeType rows, SizeType cols, PsimagLite::String bra, PsimagLite::String ket) { // Two-point Pair MatrixType m1(rows,cols); MatrixType m2(rows,cols); ppTwo(m1, m2, 0, bra, ket); if (model_.params().model=="HubbardOneBandExtendedSuper") { rows = rows/2; // Actually: divided by # of orbitals cols = cols/2; } m1.clear(); m1.resize(rows,cols); m2.clear(); m2.resize(rows,cols); ppTwo(m1, m2, 1, bra, ket); std::cout << "PairPair Correlations S^{lu}_{on}" << std::endl; std::cout << m1; std::cout << "PairPair Correlations T^{lu}_{on}" << std::endl; std::cout << m2; m1.clear(); m1.resize(rows,cols); m2.clear(); m2.resize(rows,cols); names.push_back("T_{on}"); ppTwo(m1, m2, 3, bra, ket); } void ppTwo(MatrixType& m, MatrixType& m2, SizeType flag, PsimagLite::String bra, PsimagLite::String ket) { const RealType oneF = 1; Su2RelatedType su2Related; SizeType site = 1; SizeType orbitals = logBase2(model_.hilbertSize(site)); assert(!(orbitals & 1)); orbitals /= 2; if (flag==0) { SizeType spin0 = 0; // up SizeType spin1 = 1; // down // c_dn,0 SparseMatrixType O1 = model_.naturalOperator("c",site,spin1).getCRS(); // c_up,0 SparseMatrixType O2 = model_.naturalOperator("c",site,spin0).getCRS(); SparseMatrixType A,B; multiply(B,O1,O2); // c_dn,0 . c_up,0. transposeConjugate(A, B); OperatorType opA(A, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); OperatorType opB(B, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); BraketType braket(model_, ""); braket.forceOperators(opA, opB); ManyPointActionType emptyAction(false, ""); observe_.twoPoint(m, braket, ProgramGlobals::FermionOrBosonEnum::BOSON, bra, ket, emptyAction); //std::cout << m; std::cout << "PairPair Correlations S^{l}_{on}" << std::endl; SliceOrbital(m,0,0); std::cout << "PairPair Correlations S^{u}_{on}" << std::endl; SliceOrbital(m,1,1); } else if (flag==1) { SizeType orb1 = 0; SizeType orb2 = 1; SizeType orb3 = 1; SizeType orb4 = 0; int sign = -1; PsimagLite::String onsiteOrNot = "two"; // notice - orb3 and orb4 order had to be fliped to preserve // i1 > i2 > i3 > i4 thin site ordering, this should add multiplication by (-1.0); //std::cout << "PairPair Correlations S^{lu}_{on}" << std::endl; ppFour(m,m2,orb1,orb2,orb4,orb3,onsiteOrNot,sign); } else if (flag==2) { SizeType orb1 = 0; SizeType orb2 = 1; SizeType orb3 = 1; SizeType orb4 = 0; int sign = 1; PsimagLite::String onsiteOrNot = "two"; // notice - orb3 and orb4 order had to be fliped to preserve // i1 > i2 > i3 > i4 ordering, this adds multiplication by (-1.0); std::cout << "PairPair Correlations T^{lu}_{on}" << std::endl; ppFour(m,m2,orb1,orb2,orb4,orb3,onsiteOrNot,sign); } else if (flag==3) { SizeType orb1 = 0; SizeType orb2 = 1; SizeType orb3 = 0; SizeType orb4 = 1; ppupupdndn(m, m2, orb1, orb2, orb3, orb4); std::cout << "PairPair Correlations T^{ab-upup}_{on}" << std::endl; std::cout << m; std::cout << "PairPair Correlations T^{ab-dndn}_{on}" << std::endl; std::cout << m2; } else { err("Unknown flag: " + ttos(flag)); } } void ppupupdndn(MatrixType& m, MatrixType& m2, SizeType orb1, SizeType orb2, SizeType orb3, SizeType orb4) const { PsimagLite::String string = "two"; if (string!="four" && string!="two") { throw PsimagLite::RuntimeError("ppFour: only string = 'two' or 'four' is allowed \n"); } SizeType rows = m.n_row(); SizeType cols = m.n_col(); assert(rows == cols); typename PsimagLite::Vector::Type pairs; int sign = 1; VectorSizeType gammas(1,1+sign); SizeType orbitals = 2; SizeType bigSize = rows*orbitals*rows*orbitals*2; m.resize(bigSize, bigSize, static_cast(0.0)); SizeType offset = (string=="four") ? orbitals : 1; SizeType jmax = (string=="four") ? cols-1 : cols; for (SizeType i = 0; i < rows; ++i) { SizeType thini1 = i*orbitals + orb1; SizeType thini2 = (string=="four") ? (i+1)*orbitals + orb2 : i*orbitals+orb2; for (SizeType j = i + offset; j < jmax; ++j) { SizeType thinj1 = j*orbitals + orb3; SizeType thinj2 = (string=="four") ? (j+1)*orbitals + orb4 : j*orbitals + orb4; for (SizeType spin0 = 0; spin0 < 2; ++spin0) { SizeType spin1=spin0; pairs.push_back(PairSizeType(thini1 + thini2*rows*orbitals + rows*orbitals*rows*orbitals*spin0, thinj1 + thinj2*rows*orbitals + rows*orbitals*rows*orbitals*spin1)); } } } typedef typename ObserverType::Parallel4PointDsType Parallel4PointDsType; typedef PsimagLite::Parallelizer ParallelizerType; ParallelizerType threaded4PointDs(PsimagLite::Concurrency::codeSectionParams); Parallel4PointDsType helper4PointDs(m, observe_.fourpoint(), model_, gammas, pairs, Parallel4PointDsType::MODE_THINupdn); threaded4PointDs.loopCreate(helper4PointDs); MatrixType mup(rows,cols); MatrixType mdown(rows,cols); for (SizeType i = 0; i < rows; ++i) { SizeType thini1 = i*orbitals + orb1; SizeType thini2 = (string=="four") ? (i+1)*orbitals + orb2 : i*orbitals+orb2; for (SizeType j = i + offset; j < jmax; ++j) { SizeType thinj1 = j*orbitals + orb3; SizeType thinj2 = (string=="four") ? (j+1)*orbitals + orb4 : j*orbitals + orb4; RealType vsign = -1.0; SizeType spin0=0; SizeType spin1=0; mup(i,j) += vsign*m(thini1+thini2*rows*orbitals+spin0*rows*orbitals*rows*orbitals, thinj1+thinj2*rows*orbitals+spin1*rows*orbitals*rows*orbitals); spin0=1; spin1=1; mdown(i,j) += vsign*m(thini1+thini2*rows*orbitals+spin0*rows*orbitals*rows*orbitals, thinj1+thinj2*rows*orbitals+spin1*rows*orbitals*rows*orbitals); } } m = mup; m2 = mdown; //std::cout << mSinglet; //std::cout << mTriplet; } void ddOrbitalsTwopoint(typename PsimagLite::Vector::Type& result, typename PsimagLite::Vector::Type& names, SizeType rows, SizeType cols, PsimagLite::String bra, PsimagLite::String ket) { // Two-point Pair MatrixType* m1 = new MatrixType(rows,cols); names.push_back("S^{l}_{on}"); std::cout << "PairPair Correlations S^{l}_{on}" << std::endl; ddOrbitalsTwo(*m1, 0, bra, ket); result.push_back(m1); m1 = new MatrixType(rows,cols); names.push_back("S^{u}_{on}"); std::cout << "PairPair Correlations S^{u}_{on}" << std::endl; ddOrbitalsTwo(*m1, 1, bra, ket); result.push_back(m1); m1 = new MatrixType(rows,cols); names.push_back("S^{lu}_{on}"); std::cout << "PairPair Correlations S^{lu}_{on}" << std::endl; ddOrbitalsTwo(*m1, 2, bra, ket); result.push_back(m1); m1 = new MatrixType(rows,cols); names.push_back("T^{lu}_{on}"); std::cout << "PairPair Correlations T^{lu}_{on}" << std::endl; ddOrbitalsTwo(*m1, 3, bra, ket); result.push_back(m1); m1 = new MatrixType(rows,cols); names.push_back("T^{lu}_{on}"); std::cout << "PairPair Correlations T^{up-up}_{on}" << std::endl; ddOrbitalsTwo(*m1, 4, bra, ket); result.push_back(m1); m1 = new MatrixType(rows,cols); names.push_back("T^{lu}_{on}"); std::cout << "PairPair Correlations T^{dn-dn}_{on}" << std::endl; ddOrbitalsTwo(*m1, 5, bra, ket); result.push_back(m1); m1 = new MatrixType(rows,cols); names.push_back("T^{lu}_{on}"); std::cout << "PairPair Correlations T^{up*up+dn*dn}_{on}" << std::endl; ddOrbitalsTwo(*m1, 6, bra, ket); result.push_back(m1); } void ddOrbitalsFourpoint(typename PsimagLite::Vector::Type& result, typename PsimagLite::Vector::Type& names, SizeType rows, SizeType cols) const { // Singlet four-points MatrixType* m1 = new MatrixType(rows,cols); std::cout << "PairPair Correlations S^{l}_{nn}" << std::endl; names.push_back("S^{l}_{nn}"); ddOrbitalsFour(*m1,0,0,0,0,-1); result.push_back(m1); m1 = new MatrixType(rows,cols); std::cout << "PairPair Correlations S^{u}_{nn}" << std::endl; names.push_back("S^{u}_{nn}"); ddOrbitalsFour(*m1,1,1,1,1,-1); result.push_back(m1); m1 = new MatrixType(rows,cols); std::cout << "PairPair Correlations S^{lu}_{nn}" << std::endl; names.push_back("S^{lu}_{nn}"); ddOrbitalsFour(*m1,0,1,1,0,-1); result.push_back(m1); m1 = new MatrixType(rows,cols); std::cout << "PairPair Correlations S^{l-u}_{nn}" << std::endl; names.push_back("S^{l-u}_{nn}"); ddOrbitalsFour(*m1,0,0,1,1,-1); result.push_back(m1); // Triplet four-points m1 = new MatrixType(rows,cols); std::cout << "PairPair Correlations T^{l}_{nn}" << std::endl; names.push_back("T^{l}_{nn}"); ddOrbitalsFour(*m1,0,0,0,0,1); result.push_back(m1); m1 = new MatrixType(rows,cols); std::cout << "PairPair Correlations T^{u}_{nn}" << std::endl; names.push_back("T{^{u}_{nn}"); ddOrbitalsFour(*m1,1,1,1,1,1); result.push_back(m1); m1 = new MatrixType(rows,cols); std::cout << "PairPair Correlations T^{lu}_{nn}" << std::endl; names.push_back("T^{lu}_{nn}"); ddOrbitalsFour(*m1,0,1,1,0,1); result.push_back(m1); m1 = new MatrixType(rows,cols); std::cout << "PairPair Correlations T^{l-u}_{nn}" << std::endl; names.push_back("T^{l-u}_{nn}"); ddOrbitalsFour(*m1,0,0,1,1,1); result.push_back(m1); } void ddOrbitalsTwo(MatrixType& m, const SizeType flag, PsimagLite::String bra, PsimagLite::String ket) { const RealType oneF = 1; Su2RelatedType su2Related; SizeType site = 1; SizeType orbitals = logBase2(model_.hilbertSize(site)); assert(!(orbitals & 1)); orbitals /= 2; ManyPointActionType emptyAction(false, ""); if (flag==0) { SizeType orb1 = 0; // lower orbital SizeType spin0 = 0; // up SizeType spin1 = 1; // down // c_dn,0 SparseMatrixType O1 = model_.naturalOperator("c",site,orb1+spin1*orbitals).getCRS(); // c_up,0 SparseMatrixType O2 = model_.naturalOperator("c",site,orb1+spin0*orbitals).getCRS(); SparseMatrixType A,B; multiply(B,O1,O2); // c_dn,0 . c_up,0. transposeConjugate(A,B); OperatorType opA(A, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); OperatorType opB(B, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); BraketType braket(model_, ""); braket.forceOperators(opA, opB); observe_.twoPoint(m, braket, ProgramGlobals::FermionOrBosonEnum::BOSON, bra, ket, emptyAction); std::cout << m; } else if (flag==1) { SizeType orb1 = 1; // lower orbital SizeType spin0 = 0; // up SizeType spin1 = 1; // down // c_dn,0 SparseMatrixType O1 = model_.naturalOperator("c",site,orb1+spin1*orbitals).getCRS(); // c_up,0 SparseMatrixType O2 = model_.naturalOperator("c",site,orb1+spin0*orbitals).getCRS(); SparseMatrixType A,B; multiply(B,O1,O2); // c_dn,0 . c_up,0. transposeConjugate(A,B); OperatorType opA(A, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); OperatorType opB(B, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); BraketType braket(model_, ""); braket.forceOperators(opA, opB); observe_.twoPoint(m, braket, ProgramGlobals::FermionOrBosonEnum::BOSON, bra, ket, emptyAction); std::cout << m; } else if (flag==2) { SizeType spin0 = 0; // up SizeType spin1 = 1; // down SparseMatrixType O1 = model_.naturalOperator("c",site,1+spin1*orbitals).getCRS(); // c_dn,1 SparseMatrixType O2 = model_.naturalOperator("c",site,0+spin0*orbitals).getCRS(); // c_up,0 SparseMatrixType O3 = model_.naturalOperator("c",site,1+spin0*orbitals).getCRS(); // c_up,1 SparseMatrixType O4 = model_.naturalOperator("c",site,0+spin1*orbitals).getCRS(); // c_dn,0 SparseMatrixType A,B,tmp1,tmp2; multiply(tmp1,O1,O2); // c_dn,1 . c_up,0 multiply(tmp2,O3,O4); // c_up,1 . c_dn,0 FieldType mult1, mult2; mult1 = 1.0; mult2 = -1.0; operatorPlus(B,tmp1,mult1,tmp2,mult2); // B = 1.0*tmp1 + (-1.0)*tmp2 = Singlet transposeConjugate(A,B); // A = transpose(B) OperatorType opA(A, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); OperatorType opB(B, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); BraketType braket(model_, ""); braket.forceOperators(opA, opB); observe_.twoPoint(m, braket, ProgramGlobals::FermionOrBosonEnum::BOSON, bra, ket, emptyAction); std::cout << m; } else if (flag==3) { SizeType spin0 = 0; // up SizeType spin1 = 1; // down SparseMatrixType O1 = model_.naturalOperator("c",site,1+spin1*orbitals).getCRS(); // c_dn,1 SparseMatrixType O2 = model_.naturalOperator("c",site,0+spin0*orbitals).getCRS(); // c_up,0 SparseMatrixType O3 = model_.naturalOperator("c",site,1+spin0*orbitals).getCRS(); // c_up,1 SparseMatrixType O4 = model_.naturalOperator("c",site,0+spin1*orbitals).getCRS(); // c_dn,0 SparseMatrixType A,B,tmp1,tmp2; multiply(tmp1,O1,O2); // c_dn,1 . c_up,0 multiply(tmp2,O3,O4); // c_up,1 . c_dn,0 FieldType mult1, mult2; mult1 = 1.0; mult2 = 1.0; operatorPlus(B,tmp1,mult1,tmp2,mult2); // B = 1.0*tmp1 + (1.0)*tmp2 = Triplet transposeConjugate(A,B); // A = transpose(B) OperatorType opA(A, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); OperatorType opB(B, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); BraketType braket(model_, ""); braket.forceOperators(opA, opB); observe_.twoPoint(m, braket, ProgramGlobals::FermionOrBosonEnum::BOSON, bra, ket, emptyAction); std::cout << m; } else if (flag==4) { SizeType orb0 = 0; // lower orbital SizeType orb1 = 1; // upper orbital SizeType spin0 = 0; // up // c_up,0 SparseMatrixType O1 = model_.naturalOperator("c",site,orb0+spin0*orbitals).getCRS(); // c_up,1 SparseMatrixType O2 = model_.naturalOperator("c",site,orb1+spin0*orbitals).getCRS(); SparseMatrixType A,B; multiply(B,O1,O2); // c_up,0 . c_up,1 transposeConjugate(A,B); OperatorType opA(A, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); OperatorType opB(B, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); BraketType braket(model_, ""); braket.forceOperators(opA, opB); observe_.twoPoint(m, braket, ProgramGlobals::FermionOrBosonEnum::BOSON, bra, ket, emptyAction); std::cout << m; } else if (flag==5) { SizeType orb0 = 0; // lower orbital SizeType orb1 = 1; // upper orbital SizeType spin1 = 1; // dn // c_dn,0 SparseMatrixType O1 = model_.naturalOperator("c",site,orb0+spin1*orbitals).getCRS(); // c_dn,1 SparseMatrixType O2 = model_.naturalOperator("c",site,orb1+spin1*orbitals).getCRS(); SparseMatrixType A,B; multiply(B,O1,O2); // c_dn,0 . c_dn,1 transposeConjugate(A,B); OperatorType opA(A, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); OperatorType opB(B, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); BraketType braket(model_, ""); braket.forceOperators(opA, opB); observe_.twoPoint(m, braket, ProgramGlobals::FermionOrBosonEnum::BOSON, bra, ket, emptyAction); std::cout << m; } else if (flag==6) { SizeType spin0 = 0; // up SizeType spin1 = 1; // down SparseMatrixType O1 = model_.naturalOperator("c",site,1+spin1*orbitals).getCRS(); // c_up,0 SparseMatrixType O2 = model_.naturalOperator("c",site,0+spin0*orbitals).getCRS(); // c_up,1 SparseMatrixType O3 = model_.naturalOperator("c",site,1+spin0*orbitals).getCRS(); // c_dn,0 SparseMatrixType O4 = model_.naturalOperator("c",site,0+spin1*orbitals).getCRS(); // c_dn,1 SparseMatrixType A,B,tmp1,tmp2; multiply(tmp1,O1,O2); // c_dn,1 . c_up,0 multiply(tmp2,O3,O4); // c_up,1 . c_dn,0 FieldType mult1, mult2; mult1 = 1.0; mult2 = 1.0; // B = 1.0*tmp1 + (1.0)*tmp2 = Triplet = up*up + dn*dn operatorPlus(B,tmp1,mult1,tmp2,mult2); transposeConjugate(A,B); // A = transpose(B) OperatorType opA(A, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); OperatorType opB(B, ProgramGlobals::FermionOrBosonEnum::BOSON, PairSizeType(0, 0), oneF, su2Related); BraketType braket(model_, ""); braket.forceOperators(opA, opB); observe_.twoPoint(m, braket, ProgramGlobals::FermionOrBosonEnum::BOSON, bra, ket, emptyAction); std::cout << m; } else { err("Unknown flag: " + ttos(flag)); } } void ddOrbitalsFour(MatrixType& m, SizeType orb1, SizeType orb2, SizeType orb3, SizeType orb4, int sign) const { SizeType rows = m.n_row(); SizeType cols = m.n_row(); for (SizeType i = 0; i < rows; ++i) { for (SizeType j = i + 2; j < cols; ++j) { m(i,j) = ddOrbitalsFour2(i,j,orb1,orb2,orb3,orb4,sign); } } std::cout << m; } FieldType ddOrbitalsFour2(SizeType i, SizeType j, SizeType orb1, SizeType orb2, SizeType orb3, SizeType orb4, int sign) const { SizeType i1 = i; SizeType i2 = i + 1; SizeType j1 = j; SizeType j2 = j + 1; FieldType sum = 0.0; SizeType site = 0; SizeType orbitals = logBase2(model_.hilbertSize(site)); assert(!(orbitals & 1)); orbitals /= 2; for (SizeType spin0 = 0; spin0 < 2; ++spin0) { // c(i1,orb1,spin0) PsimagLite::String str(""; BraketType braket(model_, str + str2); SizeType val = spin0 + spin1 + 1; int signTerm = (val & 1) ? sign : 1; sum += signTerm*observe_.fourpoint()(i1,i2,j1,j2,braket); } } return sum; } void ppFourpoint(typename PsimagLite::Vector::Type& result, typename PsimagLite::Vector::Type& names, SizeType rows, SizeType cols) const { /* Alberto Nocera * // // Singlet four-points // MatrixType* m1 = new MatrixType(rows,cols); // std::cout << "PairPair Correlations SrSr_{nn}" << std::endl; // names.push_back("S^{l}_{nn}"); // ppFour(*m1,0,0,0,0,0,-1); // result.push_back(m1); // m1 = new MatrixType(rows,cols); // std::cout << "PairPair Correlations SrSl_{nn}" << std::endl; // names.push_back("S^{u}_{nn}"); // ppFour(*m1,0,0,0,0,1,-1); // result.push_back(m1); * */ if (model_.params().model=="HubbardOneBandExtendedSuper") { rows = rows/2; // Actually: divided by # of orbitals cols = cols/2; } PsimagLite::String onsiteOrNot = "four"; // Singlet four-points MatrixType m1(rows,cols); MatrixType m2(rows,cols); // std::cout << "PairPair Correlations S^{l}_{nn}" << std::endl; // names.push_back("S^{l}_{nn}"); // ppFour(m1,m2,0,0,0,0,onsiteOrNot,-1); // m1.clear(); // m1.resize(rows,cols); // std::cout << "PairPair Correlations S^{u}_{nn}" << std::endl; // names.push_back("S^{u}_{nn}"); // ppFour(m1,m2,1,1,1,1,onsiteOrNot,-1); m1.clear(); m2.clear(); m1.resize(rows,cols); m2.resize(rows,cols); ppFour(m1,m2,0,1,0,1,onsiteOrNot,-1); std::cout << "PairPair Correlations S^{lu}_{nn}" << std::endl; std::cout << m1; std::cout << "PairPair Correlations T^{lu}_{nn}" << std::endl; std::cout << m2; m1.clear(); m2.clear(); m1.resize(rows,cols); m2.resize(rows,cols); ppFour(m1,m2,0,1,1,0,onsiteOrNot,-1); std::cout << "PairPair Correlations S_RL^{lu}_{nn}" << std::endl; std::cout << m1; std::cout << "PairPair Correlations T_RL^{lu}_{nn}" << std::endl; std::cout << m2; // m1 = new MatrixType(rows,cols); // std::cout << "PairPair Correlations S^{l-u}_{nn}" << std::endl; // names.push_back("S^{l-u}_{nn}"); // ppFour(*m1,0,0,1,1,onsiteOrNot,-1); // result.push_back(m1); // Triplet four-points // m1 = new MatrixType(rows,cols); // std::cout << "PairPair Correlations T^{l}_{nn}" << std::endl; // names.push_back("T^{l}_{nn}"); // ppFour(*m1,0,0,0,0,onsiteOrNot,1); // result.push_back(m1); // m1 = new MatrixType(rows,cols); // std::cout << "PairPair Correlations T^{u}_{nn}" << std::endl; // names.push_back("T^{u}_{nn}"); // ppFour(*m1,1,1,1,1,onsiteOrNot,1); // result.push_back(m1); // m1 = new MatrixType(rows,cols); // std::cout << "PairPair Correlations T^{l-u}_{nn}" << std::endl; // names.push_back("T^{l-u}_{nn}"); // ppFour(*m1,0,0,1,1,onsiteOrNot,1); // result.push_back(m1); } void ppFour(MatrixType& m, MatrixType& m2, SizeType orb1, SizeType orb2, SizeType orb3, SizeType orb4, const PsimagLite::String& string, int sign) const { if (string!="four" && string!="two") { throw PsimagLite::RuntimeError("ppFour: only string = 'two' or 'four' is allowed \n"); } SizeType rows = m.n_row(); SizeType cols = m.n_col(); assert(rows == cols); typename PsimagLite::Vector::Type pairs; VectorSizeType gammas(1,1+sign); SizeType orbitals = 2; SizeType bigSize = rows*orbitals*rows*orbitals*2; m.resize(bigSize, bigSize, static_cast(0.0)); SizeType offset = (string=="four") ? orbitals : 1; SizeType jmax = (string=="four") ? cols-1 : cols; for (SizeType i = 0; i < rows; ++i) { SizeType thini1 = i*orbitals + orb1; SizeType thini2 = (string=="four") ? (i+1)*orbitals + orb2 : i*orbitals+orb2; for (SizeType j = i + offset; j < jmax; ++j) { SizeType thinj1 = j*orbitals + orb3; SizeType thinj2 = (string=="four") ? (j+1)*orbitals + orb4 : j*orbitals + orb4; for (SizeType spin0 = 0; spin0 < 2; ++spin0) { for (SizeType spin1 = 0; spin1 < 2; ++spin1) { pairs.push_back(PairSizeType(thini1+thini2*rows*orbitals+rows*orbitals* rows*orbitals*spin0, thinj1+thinj2*rows*orbitals+ rows*orbitals*rows*orbitals*spin1)); } } } } typedef typename ObserverType::Parallel4PointDsType Parallel4PointDsType; typedef PsimagLite::Parallelizer ParallelizerType; ParallelizerType threaded4PointDs(PsimagLite::Concurrency::codeSectionParams); Parallel4PointDsType helper4PointDs(m, observe_.fourpoint(), model_, gammas, pairs, Parallel4PointDsType::MODE_THIN); threaded4PointDs.loopCreate(helper4PointDs); MatrixType mTriplet(rows,cols); MatrixType mSinglet(rows,cols); for (SizeType i = 0; i < rows; ++i) { SizeType thini1 = i*orbitals + orb1; SizeType thini2 = (string=="four") ? (i+1)*orbitals + orb2 : i*orbitals+orb2; for (SizeType j = i + offset; j < jmax; ++j) { SizeType thinj1 = j*orbitals + orb3; SizeType thinj2 = (string=="four") ? (j+1)*orbitals + orb4 : j*orbitals + orb4; for (SizeType spin0 = 0; spin0 < 2; ++spin0) { for (SizeType spin1 = 0; spin1 < 2; ++spin1) { RealType TripletSign = (spin0==spin1) ? -1.0:-1.0; mTriplet(i,j) += TripletSign*m(thini1+thini2*rows*orbitals+ spin0*rows*orbitals*rows*orbitals, thinj1+thinj2*rows*orbitals+ spin1*rows*orbitals*rows*orbitals); RealType SingletSign = (spin0==spin1) ? -1.0:1.0; mSinglet(i,j) += SingletSign*m(thini1+thini2*rows*orbitals+ spin0*rows*orbitals*rows*orbitals, thinj1+thinj2*rows*orbitals+ spin1*rows*orbitals*rows*orbitals); } } } } m = mSinglet; m2 = mTriplet; //std::cout << mSinglet; //std::cout << mTriplet; } void manyPoint(MatrixType* storage, const BraketType& braket, SizeType rows, SizeType cols, const ManyPointActionType& someAction) { static const bool DO_PRINT = true; if (hasTimeEvolution_) { printSites(); std::cout<<"Time="<(orbitals*(orbitals+1)/2)); for (SizeType i = 0; i < v.size(); ++i) v[i].resize(rows,cols); } SizeType logBase2(SizeType x) const { SizeType counter = 0; while (x > 0) { x >>= 1; counter++; } return (counter == 0) ? counter : counter - 1; } SizeType dofsFromModelName() const { const PsimagLite::String& modelName = model_.params().model; SizeType site = 0; // FIXME : account for Hilbert spaces changing with site SizeType dofs = SizeType(log(model_.hilbertSize(site))/log(2.0)); std::cerr<<"DOFS= "< class ObservablesInSitu { public: template void init(const TargetingType& psi, SizeType sites) // FIXME : Use ctor instead { inSitu_.resize(sites,0); for (SizeType i = 0; i < sites; ++i) inSitu_[i] = psi.inSitu(i); } const typename VectorType::value_type& operator()(SizeType i) const { return inSitu_[i]; } private: VectorType inSitu_; }; // ObservablesInSitu } // namespace Dmrg /*@}*/ #endif // DMRG_OBS_IN_SITU_H dmrgpp-6.02/src/Engine/Observer.h000066400000000000000000000451561414604301300166750ustar00rootroot00000000000000/* Copyright (c) 2008-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file Observer.h * * A class to perform post-processing calculation of observables * */ #ifndef DMRG_OBSERVE_H #define DMRG_OBSERVE_H #include "ObserverHelper.h" #include "OnePointCorrelations.h" #include "CorrelationsSkeleton.h" #include "TwoPointCorrelations.h" #include "FourPointCorrelations.h" #include "VectorWithOffsets.h" // for operator* #include "VectorWithOffset.h" // for operator* #include "Parallel4PointDs.h" #include "MultiPointCorrelations.h" #include "Concurrency.h" #include "Parallelizer.h" #include "Utils.h" #include "ExpressionCalculator.h" #include "PredicateAwesome.h" #include "ManyPointAction.h" namespace Dmrg { template class Observer { public: typedef ModelType_ ModelType; typedef typename VectorWithOffsetType_::value_type FieldType; typedef PsimagLite::SparseVector VectorType; typedef typename ModelType_::RealType RealType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorMatrixType; typedef typename ModelType_::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename ModelType_::ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename ModelType_::ParametersType ParametersType; typedef ObserverHelper ObserverHelperType; typedef CorrelationsSkeleton CorrelationsSkeletonType; typedef OnePointCorrelations OnePointCorrelationsType; typedef TwoPointCorrelations TwoPointCorrelationsType; typedef FourPointCorrelations FourPointCorrelationsType; typedef MultiPointCorrelations MultiPointCorrelationsType; typedef typename CorrelationsSkeletonType::BraketType BraketType; typedef VectorWithOffsetType_ VectorWithOffsetType; typedef Parallel4PointDs Parallel4PointDsType; typedef PsimagLite::Vector::Type VectorStringType; typedef ManyPointAction ManyPointActionType; Observer(IoInputType& io, SizeType start, SizeType nf, SizeType trail, const ModelType_& model) : helper_(io, start, nf, trail, !model.params().options.isSet("fixLegacyBugs"), model.params().options.isSet("observeReadOnDemand")), onepoint_(helper_, model), skeleton_(helper_, model, true), twopoint_(skeleton_), fourpoint_(skeleton_) {} const ObserverHelperType& helper() const { return helper_; } // return true if // we're at site 1 or n-2 bool isAtCorner(SizeType numberOfSites, SizeType ptr) const { const bool es = (helper_.direction(ptr) == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM); if (es && helper_.site(ptr) == numberOfSites - 2) return true; return (!es && helper_.site(ptr) == 1); } void twoPoint(MatrixType& storage, const BraketType& braket, bool needsPrinting, const ManyPointActionType& action) const { assert(braket.points() == 2); SizeType flag = 0; try { braket.site(0); flag |= 1; } catch (std::exception&) {} try { braket.site(1); flag |= 2; } catch (std::exception&) {} ProgramGlobals::FermionOrBosonEnum fermionSign = braket.op(0).fermionOrBoson(); SizeType site1 = 0; SizeType sites= storage.n_col(); switch (flag) { case 0: // no sites given twopoint_(storage, braket, fermionSign, braket.bra(), braket.ket(), action); if (needsPrinting) std::cout<<(storage); break; case 1: //first site given if (action.nonTrivial()) err("For non trivial action, give no sites\n"); for (site1 = braket.site(0); site1 < sites; ++site1) { storage(braket.site(0),site1) = twopoint_.calcCorrelation(braket.site(0), site1, braket, fermionSign, braket.bra(), braket.ket()); if (needsPrinting) std::cout<= 4); SizeType flag = 0; try { braket.site(0); flag |= 1; } catch (std::exception&) {} try { braket.site(1); flag |= 2; } catch (std::exception&) {} try { braket.site(2); flag |= 4; } catch (std::exception&) {} try { braket.site(3); flag |= 8; } catch (std::exception&) {} if (flag != 15) { PsimagLite::String str("fourPoint: "); str += "Give all sites\n"; throw PsimagLite::RuntimeError(str); } FieldType tmp = fourpoint_.anyPoint(braket); if (!needsPrinting) return tmp; // <<-- early exit std::cout<<"Fixed all sites\n"; for (SizeType i = 0; i < braket.points(); ++i) std::cout<::Type& gammas, const ModelType& model) { if (gammas.size()!=4) { std::cerr<<"Observer: fourPointDeltas(...): wrong number of gammas "; std::cerr<<" expected "<<4<<" got "<>=1; nx++; } nx /= 2; assert(fpd.n_row()>1); typedef std::pair PairType; typename PsimagLite::Vector::Type pairs; for (SizeType i=0;i=nsites) continue; for (SizeType j=i+1;j=nsites) continue; pairs.push_back(PairType(i,j)); } } typedef PsimagLite::Parallelizer ParallelizerType; ParallelizerType threaded4PointDs(PsimagLite::Concurrency::codeSectionParams); Parallel4PointDsType helper4PointDs(fpd, fourpoint_, model, gammas, pairs, Parallel4PointDsType::MODE_NORMAL); threaded4PointDs.loopCreate(helper4PointDs); } template FieldType onePoint(SizeType ptr, const typename ApplyOperatorType::OperatorType& A, SizeType site, typename ApplyOperatorType::BorderEnum corner, const PsimagLite::GetBraOrKet& bra, const PsimagLite::GetBraOrKet& ket) const { return onepoint_.template operator()(ptr, A, site, corner, bra, ket); } template FieldType onePointHookForZero(SizeType ptr, const typename ApplyOperatorType::OperatorType& A, SizeType splitSize, const PsimagLite::GetBraOrKet& bra, const PsimagLite::GetBraOrKet& ket) const { return onepoint_.template hookForZero(ptr, A, splitSize, bra, ket); } template typename PsimagLite::EnableIf ::True,void>::Type multiCorrelations(VectorLikeType& result, const SparseMatrixType& O, SizeType rows, SizeType cols, PsimagLite::String bra, PsimagLite::String ket) { MultiPointCorrelationsType multi(skeleton_); multi(result, O, rows, cols, bra, ket); } private: const ObserverHelperType helper_; const OnePointCorrelationsType onepoint_; const CorrelationsSkeletonType skeleton_; const TwoPointCorrelationsType twopoint_; const FourPointCorrelationsType fourpoint_; }; //class Observer } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/ObserverHelper.h000066400000000000000000000272411414604301300200300ustar00rootroot00000000000000/* Copyright (c) 2008-2013, UT-Battelle, LLC All rights reserved [DMRG++, Version 1.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ObserverHelper.h * * A class to read and serve precomputed data to the observer * */ #ifndef PRECOMPUTED_H #define PRECOMPUTED_H #include "SparseVector.h" #include "ProgramGlobals.h" #include "TimeSerializer.h" #include "DmrgSerializer.h" #include "VectorWithOffsets.h" // to include norm #include "VectorWithOffset.h" // to include norm #include "GetBraOrKet.h" #include "ProgressIndicator.h" namespace Dmrg { template class ObserverHelper { public: typedef IoInputType_ IoInputType; typedef MatrixType_ MatrixType; typedef VectorType_ VectorType; typedef VectorWithOffsetType_ VectorWithOffsetType; typedef SizeType IndexType; typedef typename VectorType::value_type FieldType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::RealType RealType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef TimeSerializer TimeSerializerType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef DmrgSerializer DmrgSerializerType; typedef typename DmrgSerializerType::BlockDiagonalMatrixType BlockDiagonalMatrixType; typedef typename DmrgSerializerType::FermionSignType FermionSignType; typedef PsimagLite::Vector::Type VectorSizeType; typedef PsimagLite::Vector::Type VectorShortIntType; typedef PsimagLite::GetBraOrKet GetBraOrKetType; typedef std::pair PairLeftRightSuperSizeType; enum class SaveEnum {YES, NO}; ObserverHelper(IoInputType& io, SizeType start, SizeType nf, SizeType trail, bool withLegacyBugs, bool readOnDemand) : io_(io), withLegacyBugs_(withLegacyBugs), readOnDemand_(readOnDemand), progress_("ObserverHelper"), noMoreData_(false), numberOfSites_(0), lrsStorage_(PairLeftRightSuperSizeType(nullptr, 0)) { typename BasisWithOperatorsType::VectorBoolType odds; io_.read(odds, "OddElectronsOneSite"); SizeType n = odds.size(); signsOneSite_.resize(n); for (SizeType i = 0; i < n; ++i) signsOneSite_[i] = (odds[i]) ? -1 : 1; if (readOnDemand_) { std::cout<<"ObserverHelper: observeReadOnDemand is ON\n"; std::cerr<<"ObserverHelper: observeReadOnDemand is ON\n"; } if (nf > 0) if (!init(start, start + nf, SaveEnum::YES)) return; if (trail > 0) if (!init(start, start + trail, SaveEnum::NO)) return; } ~ObserverHelper() { for (SizeType i = 0; i < dSerializerV_.size(); ++i) { delete dSerializerV_[i]; dSerializerV_[i] = 0; } for (SizeType i = 0; i < timeSerializerV_.size(); ++i) { delete timeSerializerV_[i]; timeSerializerV_[i] = 0; } delete lrsStorage_.first; lrsStorage_.first = nullptr; } const SizeType& numberOfSites() const { return numberOfSites_; } bool endOfData() const { return noMoreData_; } void transform(SparseMatrixType& ret, const SparseMatrixType& O2, SizeType ind) const { checkIndex(ind); if (!readOnDemand_) return dSerializerV_[ind]->transform(ret, O2); const PsimagLite::String prefix = "Serializer/" + ttos(ind); BlockDiagonalMatrixType transformStorage(io_, prefix + "/transform", false); DmrgSerializerType::transform(ret, O2, transformStorage); } SizeType cols(SizeType ind) const { checkIndex(ind); return dSerializerV_[ind]->cols(); } SizeType rows(SizeType ind) const { checkIndex(ind); return dSerializerV_[ind]->rows(); } short int signsOneSite(SizeType site) const { assert(site < signsOneSite_.size()); return signsOneSite_[site]; } const FermionSignType& fermionicSignLeft(SizeType ind) const { checkIndex(ind); return dSerializerV_[ind]->fermionicSignLeft(); } const FermionSignType& fermionicSignRight(SizeType ind) const { checkIndex(ind); return dSerializerV_[ind]->fermionicSignRight(); } const LeftRightSuperType& leftRightSuper(SizeType ind) const { checkIndex(ind); if (readOnDemand_) { if (ind != lrsStorage_.second) { delete lrsStorage_.first; lrsStorage_.first = nullptr; } if (!lrsStorage_.first) { static const bool isObserveCode = true; const PsimagLite::String prefix = "Serializer/" + ttos(ind); lrsStorage_.first = new LeftRightSuperType(io_, prefix, isObserveCode); lrsStorage_.second = ind; } return *lrsStorage_.first; } return dSerializerV_[ind]->leftRightSuper(); } ProgramGlobals::DirectionEnum direction(SizeType ind) const { checkIndex(ind); return dSerializerV_[ind]->direction(); } const VectorWithOffsetType& psiConst(SizeType ind, SizeType sectorIndex, SizeType levelIndex) const { checkIndex(ind); return dSerializerV_[ind]->psiConst(sectorIndex, levelIndex); } RealType time(SizeType ind) const { if (timeSerializerV_.size() == 0) return 0.0; assert(ind < timeSerializerV_.size()); assert(timeSerializerV_[ind]); return timeSerializerV_[ind]->time(); } SizeType site(SizeType ind) const { if (timeSerializerV_.size() == 0) { checkIndex(ind); return dSerializerV_[ind]->site(); } assert(ind < timeSerializerV_.size()); assert(timeSerializerV_[ind]); return timeSerializerV_[ind]->site(); } SizeType size() const { return dSerializerV_.size(); } const VectorWithOffsetType& getVectorFromBracketId(const PsimagLite::GetBraOrKet& braOrKet, SizeType index) const { if (braOrKet.isPvector()) { const SizeType pIndex = braOrKet.pIndex(); return timeVector(pIndex, index); } return psiConst(index, braOrKet.sectorIndex(), braOrKet.levelIndex()); } const VectorWithOffsetType& timeVector(SizeType braketId, SizeType ind) const { assert(ind < timeSerializerV_.size()); assert(timeSerializerV_[ind]); return timeSerializerV_[ind]->vector(braketId); } bool withLegacyBugs() const { return withLegacyBugs_; } friend std::ostream& operator<<(std::ostream& os, ObserverHelper& p) { for (SizeType i=0;i= end || start >= total || end > total) return false; for (SizeType i = start; i < end; ++i) { DmrgSerializerType* dSerializer = new DmrgSerializerType(io_, prefix + "/" + ttos(i), false, true, readOnDemand_); SizeType tmp = dSerializer->leftRightSuper().sites(); if (tmp > 0 && numberOfSites_ == 0) numberOfSites_ = tmp; if (readOnDemand_) dSerializer->freeLrs(); if (saveOrNot == SaveEnum::YES) dSerializerV_.push_back(dSerializer); else delete dSerializer; try { PsimagLite::String prefix("/TargetingCommon/" + ttos(i)); TimeSerializerType* ts = new TimeSerializerType(io_, prefix); std::cerr<<"Read TimeSerializer\n"; if (saveOrNot == SaveEnum::YES) timeSerializerV_.push_back(ts); else delete ts; } catch(...) {} std::cerr<<__FILE__<<" read "< 0); } static SizeType braketStringToNumber(const PsimagLite::String& str) { GetBraOrKetType ketOrBra(str); if (!ketOrBra.isPvector()) return 0; return ketOrBra.levelIndex(); } void checkIndex(SizeType ind) const { if (ind >= dSerializerV_.size()) err("Index " + ttos(ind) + " greater or equal to " + ttos(dSerializerV_.size())); if (dSerializerV_[ind]) return; err("dSerializerV_ at index " + ttos(ind) + " point to 0x0\n"); } IoInputType& io_; typename PsimagLite::Vector::Type dSerializerV_; typename PsimagLite::Vector::Type timeSerializerV_; const bool withLegacyBugs_; const bool readOnDemand_; PsimagLite::ProgressIndicator progress_; bool noMoreData_; VectorShortIntType signsOneSite_; SizeType numberOfSites_; mutable PairLeftRightSuperSizeType lrsStorage_; }; // ObserverHelper } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/OmegaParams.h000066400000000000000000000021131414604301300172640ustar00rootroot00000000000000#ifndef OMEGAPARAMS_H #define OMEGAPARAMS_H #include "Vector.h" #include "InputCheck.h" namespace Dmrg { template class OmegaParams { public: typedef RealType_ RealType; OmegaParams(PsimagLite::String data) { Dmrg::InputCheck inputCheck; typename InputNgType::Writeable ioWriteable(inputCheck, data); typename InputNgType::Readable io(ioWriteable); configure(io); } OmegaParams(typename InputNgType::Readable& io) { configure(io); } void configure(typename InputNgType::Readable& io) { io.readline(begin_, "OmegaBegin="); io.readline(step_, "OmegaStep="); io.readline(total_, "OmegaTotal="); io.readline(offset_, "OmegaOffset="); io.readline(obs_, "Observable="); } RealType omega(SizeType i) const { return i*step_ + begin_; } PsimagLite::String observable() const { return obs_; } SizeType offset() const { return offset_; } SizeType total() const { return total_; } private: RealType begin_; RealType step_; SizeType offset_; SizeType total_; PsimagLite::String obs_; }; } #endif // OMEGAPARAMS_H dmrgpp-6.02/src/Engine/OmegasFourier.h000066400000000000000000000125621414604301300176500ustar00rootroot00000000000000#ifndef OMEGASFOURIER_H #define OMEGASFOURIER_H #include "Vector.h" #include "ProgramGlobals.h" namespace Dmrg { template class OmegasFourier { class OmegasGeometry { public: OmegasGeometry(Readable& io) : subname_("NONE") { try { io.readline(name_, "GeometryName="); } catch (std::exception&) {} try { io.readline(subname_, "GeometrySubname="); } catch (std::exception&) {} } PsimagLite::String name() const { return name_; } PsimagLite::String subname() const { return subname_; } private: PsimagLite::String name_; PsimagLite::String subname_; }; public: typedef typename PsimagLite::Real::Type RealType; typedef std::complex ComplexType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename PsimagLite::Vector::Type VectorComplexType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef ProgramGlobals ProgramGlobalsType; static const SizeType M_MAX = 0; OmegasFourier(bool skipFourier, Readable& io) : skipFourier_(skipFourier), geometry_(io) { if (skipFourier_) return; io.readline(numberOfSites_, "TotalNumberOfSites="); int tmp = 0; io.readline(tmp, "IsPeriodicX="); isPeriodicX_ = (tmp > 0); VectorSizeType v; io.read(v, "TSPSites"); if (v.size() != 1) err("TSPSites must be a vector of exactly one entry\n"); centralSite_ = v[0]; io.readline(orbitals_, "Orbitals="); data_.resize(numberOfSites_); qValues_.resize(numberOfSites_); } void fourier(const VectorRealType& values1, const VectorRealType& values2) { if (skipFourier_) return; std::fill(data_.begin(), data_.end(), 0.0); //use data_; PsimagLite::String subname = geometry_.subname(); if (subname=="average") { return fourierLadderAverage(values1, values2); } PsimagLite::String name = geometry_.name(); if (name == "chain") { return fourierChain(values1, values2); } if (name == "ladder" && subname == "GrandCanonical") { return fourierChainGC(values1, values2); } if (name == "ladder") { return fourierLadder(values1, values2); } if (name == "LongRange" || name == "General") { if (subname == "chain") { if (orbitals_ == 1) { return fourierChain(values1, values2); } else if (orbitals_ == 2) { return fourierChain2orb(values1, values2); } } if (subname == "ladder") { if (orbitals_ == 1) { return fourierLadder(values1, values2); } else if (orbitals_ == 2) { return fourierLadder2orb(values1, values2); } } const PsimagLite::String honey = "HoneyComb"; if (subname.find(honey) == 0) { PsimagLite::String type = subname.substr(honey.length(), subname.size() - honey.length()); return fourierHoneycomb(values1, values2, type); } } err("OmegasFourier: undefined geometry " + name + "\n"); } const VectorComplexType& data() { return data_; } RealType q(SizeType ind) const { assert(ind < qValues_.size()); return qValues_[ind]; } private: void fourierChain(const VectorRealType& values1, const VectorRealType& values2) { const SizeType nOverTwo = static_cast(numberOfSites_/2); if (!isPeriodicX_) { bool b = (centralSite_ == nOverTwo); if (!b && (centralSite_ != nOverTwo - 1)) { err("Chain of " + ttos(numberOfSites_) + "sites, but central site is " + ttos(centralSite_) + ", makes no sense!?\n"); } } const SizeType numberOfQs = (M_MAX > 0) ? M_MAX : numberOfSites_; if (data_.size() < numberOfQs || qValues_.size() < numberOfQs) err("INTERNAL ERROR at fourierChain\n"); for (SizeType m = 0; m < numberOfQs; ++m) { ComplexType sum = 0; RealType q = getQ(m, numberOfQs, isPeriodicX_); qValues_[m] = q; for (SizeType i = 0; i < numberOfSites_; ++i) { RealType arg = q*(i - centralSite_); RealType carg = cos(arg); RealType sarg = sin(q*(i + 1))*sin(q*(centralSite_ + 1)); RealType cOrSarg = (isPeriodicX_) ? carg : sarg; sum += ComplexType(values1[i]*cOrSarg, values2[i]*cOrSarg); } assert(m < data_.size()); data_[m] = sum; } } void fourierLadderAverage(const VectorRealType& values1, const VectorRealType& values2) { err("unimplemented fourierLadderAverage\n"); } void fourierChainGC(const VectorRealType& values1, const VectorRealType& values2) { err("unimplemented fourierLadderAverage\n"); } void fourierLadder(const VectorRealType& values1, const VectorRealType& values2) { err("unimplemented fourierLadderAverage\n"); } void fourierChain2orb(const VectorRealType& values1, const VectorRealType& values2) { err("unimplemented fourierLadderAverage\n"); } void fourierLadder2orb(const VectorRealType& values1, const VectorRealType& values2) { err("unimplemented fourierLadder2orb\n"); } void fourierHoneycomb(const VectorRealType& values1, const VectorRealType& values2, PsimagLite::String type) { err("unimplemented fourierLadderAverage\n"); } static RealType getQ(SizeType m, SizeType n, bool isPeriodic) { return (isPeriodic) ? 2.0*M_PI*m/n : (m + 1.0)*M_PI/(n+1.0); } bool skipFourier_; OmegasGeometry geometry_; SizeType numberOfSites_; SizeType centralSite_; SizeType orbitals_; bool isPeriodicX_; VectorComplexType data_; VectorRealType qValues_; }; } #endif // OMEGASFOURIER_H dmrgpp-6.02/src/Engine/OnePointCorrelations.h000066400000000000000000000201511414604301300212120ustar00rootroot00000000000000/* Copyright (c) 2008-2017, UT-Battelle, LLC All rights reserved [DMRG++, Version 4.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file OnePointCorrelations.h * * * A class to perform post-processing calculation of one-point correlations * * Note that site below is not necessarily the site, but there's a mapping * mapping(site) = i */ #ifndef ONE_POINT_H #define ONE_POINT_H #include "CrsMatrix.h" #include "VectorWithOffsets.h" // for operator* #include "VectorWithOffset.h" // for operator* #include "GetBraOrKet.h" namespace Dmrg { template class OnePointCorrelations { typedef typename ObserverHelperType::MatrixType MatrixType; typedef typename ObserverHelperType::VectorType VectorType ; typedef typename ObserverHelperType::VectorWithOffsetType VectorWithOffsetType; typedef typename ObserverHelperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename VectorType::value_type FieldType; typedef typename BasisWithOperatorsType::RealType RealType; public: OnePointCorrelations(const ObserverHelperType& helper, const ModelType& model) : helper_(helper), model_(model) {} template FieldType operator()(SizeType ptr, const typename ApplyOperatorType::OperatorType& A, SizeType site, typename ApplyOperatorType::BorderEnum corner, const PsimagLite::GetBraOrKet& bra, const PsimagLite::GetBraOrKet& ket) const { try { const VectorWithOffsetType& src1 = helper_.getVectorFromBracketId(bra, ptr); const VectorWithOffsetType& src2 = helper_.getVectorFromBracketId(ket, ptr); return onePointInternal(A, site, src1, src2, corner, ptr); } catch (std::exception& e) { std::cerr<<"CAUGHT: "< FieldType hookForZero(SizeType ptr, const typename ApplyOperatorType::OperatorType& A, SizeType splitSize, const PsimagLite::GetBraOrKet& bra, const PsimagLite::GetBraOrKet& ket) const { try { const VectorWithOffsetType& src1 = helper_.getVectorFromBracketId(bra, ptr); const VectorWithOffsetType& src2 = helper_.getVectorFromBracketId(ket, ptr); return onePointInternalHookForZero(A, splitSize, src1, src2, ptr); } catch (std::exception& e) { std::cerr<<"CAUGHT: "< FieldType onePointInternal(const typename ApplyOperatorType::OperatorType& A, SizeType site, const VectorWithOffsetType& src1, const VectorWithOffsetType& src2, typename ApplyOperatorType::BorderEnum corner, SizeType ptr) const { if (src1.sectors() == 0 || src2.sectors() == 0) return 0.0; SizeType splitSize = model_.hilbertSize(site); ApplyOperatorType applyOpLocal1(helper_.leftRightSuper(ptr), true); VectorWithOffsetType dest; applyOpLocal1(dest, src1, A, helper_.fermionicSignLeft(ptr), splitSize, helper_.direction(ptr), corner); FieldType sum = static_cast(0.0); const VectorWithOffsetType& v1 = dest; const VectorWithOffsetType& v2 = src2; for (SizeType ii=0;ii FieldType onePointInternalHookForZero(const typename ApplyOperatorType::OperatorType& A, SizeType splitSize, const VectorWithOffsetType& src1, const VectorWithOffsetType& src2, SizeType ptr) const { ApplyOperatorType applyOpLocal1(helper_.leftRightSuper(ptr), true); VectorWithOffsetType dest; applyOpLocal1.hookForZero(dest, src1, A, splitSize, //helper_.fermionicSignLeft(ptr), helper_.direction(ptr)); FieldType sum = static_cast(0.0); const VectorWithOffsetType& v1 = dest; const VectorWithOffsetType& v2 = src2; for (SizeType ii=0;ii class OneSiteTruncation { public: typedef PsimagLite::PackIndices PackIndicesType; typedef typename ModelType::MatrixType MatrixType; typedef typename ModelType::LeftRightSuperType LeftRightSuperType; typedef typename ModelType::VectorRealType VectorRealType; typedef typename VectorWithOffsetType::value_type ComplexOrRealType; typedef typename PsimagLite::Real::Type RealType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename PsimagLite::InputNg::Readable ReadableType; OneSiteTruncation(const LeftRightSuperType& lrs, ModelType& model, ReadableType& io, OutputFileOrNot& ioOut) : lrs_(lrs), model_(model), m_(0), tolerance_(0), ioOut_(ioOut) { try { io.readline(m_, "OneSiteTruncationM="); std::cout<<"OneSiteTruncationM="<= total) continue; // respect all symmetries U(x1, x1prime) += PsimagLite::conj(psi.fastAccess(sector, sprime))*value; } } else { SizeType y0 = 0; SizeType y1 = 0; pack.unpack(y0, y1, lrs_.right().permutation(y)); for (SizeType y0prime = 0; y0prime < oneSiteTruncSize; ++y0prime) { const SizeType yprime = pack.pack(y0prime, y1, lrs_.right().permutationInverse()); const SizeType sWithOffsetprime = packSuper.pack(x, yprime, lrs_.super().permutationInverse()); if (sWithOffsetprime < offset) continue; // respect all symmetries const SizeType sprime = sWithOffsetprime - offset; if (sprime >= total) continue; // respect all symmetries U(y0, y0prime) += PsimagLite::conj(psi.fastAccess(sector, sprime))*value; } } } } assert(isHermitian(U)); VectorRealType eigs(U.rows()); diag(U, eigs, 'V'); return computeStart(eigs); } SizeType computeStart(const VectorRealType& eigs) const { const SizeType n = eigs.size(); if (tolerance_ <= 0) return (n > m_) ? n - m_ : 0; SizeType row = 0; RealType sum = 0; for (; row < n; ++row) { sum += fabs(eigs[n - row - 1]); if (sum >= tolerance_) break; } assert(row <= n); const SizeType start1 = n - row; const SizeType start2 = (n > m_) ? n - m_ : 0; return (start1 < start2) ? start1 : start2; } const LeftRightSuperType& lrs_; ModelType& model_; SizeType m_; RealType tolerance_; OutputFileOrNot& ioOut_; }; } #endif // ONESITETRUNCATION_H dmrgpp-6.02/src/Engine/Operator.h000066400000000000000000000374601414604301300167000ustar00rootroot00000000000000/* Copyright (c) 2009-2016-2018-2019, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /*! \file Operator.h * * A class to represent an operator * Contains the actual data_, the (J,M) that indicates * how this operator transforms, the fermionSign which * indicates if this operator commutes or anticommutes * with operators of the same class on different sites, and * other properties. * */ #ifndef OPERATOR_H #define OPERATOR_H #include "Su2Related.h" #include "CrsMatrix.h" #include "Io/IoSelector.h" #include "InputNg.h" #include "InputCheck.h" #include "CanonicalExpression.h" #include "Io/IoSerializerStub.h" #include "ProgramGlobals.h" #include "OperatorStorage.h" namespace Dmrg { // This is a structure, don't add member functions here! template class Operator { public: enum {CAN_BE_ZERO = false, MUST_BE_NONZERO = true}; typedef PsimagLite::Vector::Type VectorSizeType; typedef ComplexOrRealType value_type; typedef PsimagLite::CrsMatrix SparseMatrixType; typedef typename PsimagLite::Real::Type RealType; typedef std::pair PairType; typedef Su2Related Su2RelatedType; typedef PsimagLite::Matrix DenseMatrixType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef OperatorStorage StorageType; Operator() : fermionOrBoson_(ProgramGlobals::FermionOrBosonEnum::BOSON), angularFactor_(1) {} Operator(const SparseMatrixType& data1, ProgramGlobals::FermionOrBosonEnum fermionSign1, const PairType& jm1, RealType angularFactor1, const Su2RelatedType& su2Related1) : data_(data1), fermionOrBoson_(fermionSign1), jm_(jm1), angularFactor_(angularFactor1), su2Related_(su2Related1) {} Operator(const StorageType& data1, ProgramGlobals::FermionOrBosonEnum fermionSign1, const PairType& jm1, RealType angularFactor1, const Su2RelatedType& su2Related1) : data_(data1), fermionOrBoson_(fermionSign1), jm_(jm1), angularFactor_(angularFactor1), su2Related_(su2Related1) {} template Operator(IoInputType& io, SomeModelType& model, bool checkNonZero, PsimagLite::String prefix, int site = -1) { /*PSIDOC Operator \item[TSPOperator] [String] One of \{\verb!cooked!, \verb!raw!, \verb!expression!\}, in order to indicate how the operator will be specified. \item[OperatorExpression=] A label containing an operator expression. Specify only if \verb!TSPOperator! was set to \verb!expression! \item[COOKED\_OPERATOR] [String] A label naming the operator. This is model dependent and must be listed in the \verb!naturalOperator! function for the indicated in \verb!Model! in this input file. Do not specify unless \verb!TSPOperator! was set to \verb!cooked!. \item[COOKED\_EXTRA] [VectorInteger] The first number is the number of numbers to follow. The other numbers are degrees of freedom for the cooked operator mentioned, and are passed as arguments (in order) to the \verb!naturalOperator! function for the indicated in \verb!Model! in this input file. Do not specify unless \verb!TSPOperator! was set to \verb!cooked!. \item[RAW\_MATRIX] [MatrixComplexOrRealType] The number of rows and columns of this matrix, followed by the matrix in zig-zag format. Do not specify unless \verb!TSPOperator! was set to \verb!raw!. \item[FERMIONSIGN] [RealType] Either 1 or -1, indicating if this operator commutes or anticommutes at \emph{different} sites. Do not specify if \verb!TSPOperator! was set to \verb!expression!. \item[jm\_VALUES] [Integer*2] If not using $SU(2)$ symmetry this is \verb!0 0!. Else it is the $2j$ and $j+m$ for this operator. Do not specify if \verb!TSPOperator! was set to \verb!expression!. \item[angularFactor\_] [RealType] If not using $SU(2)$ symmetry this is \verb!1!. Else FIXME. Do not specify if \verb!TSPOperator! was set to \verb!expression!. */ PsimagLite::String s = ""; io.readline(s, prefix + "TSPOperator="); if (s == "cooked") { io.readline(s, prefix + "COOKED_OPERATOR="); VectorSizeType v; io.read(v,prefix + "COOKED_EXTRA"); if (v.size() != 2) throw PsimagLite::RuntimeError("COOKED_EXTRA must be followed 2 v0 v1\n"); data_ = model.naturalOperator(s,v[0],v[1]).data_; } else if (s == "raw") { DenseMatrixType m; io.read(m, prefix + "RAW_MATRIX"); if (checkNonZero) checkNotZeroMatrix(m); fullMatrixToCrsMatrix(data_,m); PsimagLite::String msg = "WARNING: RAW_MATRIX read, order of basis subject "; msg += "to change with DMRG++ version!\n"; std::cerr< 0) err("operator+= failed for Operator: metas not equal\n"); StorageType crs = data_*other.data_; data_ = crs; int fsOther = (other.fermionOrBoson_ == ProgramGlobals::FermionOrBosonEnum::FERMION) ? -1 : 1; int fs = fSaved * fsOther; fermionOrBoson_ = (fs < 0) ? ProgramGlobals::FermionOrBosonEnum::FERMION : ProgramGlobals::FermionOrBosonEnum::BOSON; return *this; } Operator& operator+=(const Operator& other) { if (metaDiff(other) > 0) err("operator+= failed for Operator: metas not equal\n"); data_ += other.data_; return *this; } // operators END void outerProduct(const Operator& A, SizeType nout, const VectorRealType& signs, bool order, const VectorSizeType& permutationFull) { externalProduct2(data_, A.getStorage(), nout, signs, order, permutationFull); } void outerProduct(const Operator& A, const Operator& B, const VectorRealType& signs, bool order, const VectorSizeType& permutationFull) { externalProduct2(data_, A.getStorage(), B.getStorage(), signs, order, permutationFull); } SizeType metaDiff(const Operator& op2) const { const Operator& op1 = *this; SizeType code = 0; PsimagLite::Vector::Type b(4, false); b[0] = (op1.fermionOrBoson_ != op2.fermionOrBoson_); b[1] = (op1.angularFactor_ != op2.angularFactor_); b[2] = (op1.jm_ != op2.jm_); //b[3] = (op1.su2Related_ != op2.su2Related_); SizeType orFactor = 0; for (SizeType i = 0; i < b.size(); ++i) { if (b[i]) code |= orFactor; orFactor <<= 1; } return code; } bool isEmpty() const { return (data_.rows() == 0); } void clear() { data_.clear(); } void set(ProgramGlobals::FermionOrBosonEnum fOrB) { fermionOrBoson_ = fOrB; } void set(ProgramGlobals::FermionOrBosonEnum fOrB, PairType jm1, RealType af, const Su2RelatedType& su2) { fermionOrBoson_ = fOrB; jm_ = jm1; angularFactor_ = af; su2Related_ = su2; } void set(ProgramGlobals::FermionOrBosonEnum fOrB, PairType jm1, RealType af) { fermionOrBoson_ = fOrB; jm_ = jm1; angularFactor_ = af; } // short cut const SparseMatrixType& getCRS() const { return data_.getCRS(); } const StorageType& getStorage() const { return data_; } // FIXME TODO StorageType& getStorageNonConst() { return data_; } const ProgramGlobals::FermionOrBosonEnum& fermionOrBoson() const { return fermionOrBoson_; } const PairType& jm() const { return jm_; } const RealType& angularFactor() const { return angularFactor_; } const Su2RelatedType& su2Related() const { return su2Related_; } // FIXME TODO Su2RelatedType& su2RelatedNonConst() { return su2Related_; } void conjugate() { data_.conjugate(); } void transpose() { data_.transpose(); } void dagger() { StorageType copy = data_; transposeConjugate(data_, copy); } friend void reorder2(Operator& v, const VectorSizeType& permutation) { reorder2(v.data_, permutation); } private: void checkNotZeroMatrix(const DenseMatrixType& m) const { RealType norma = norm2(m); RealType eps = 1e-6; if (norma>eps) return; PsimagLite::String s(__FILE__); s += " : " + ttos(__LINE__) + "\n"; s += "RAW_MATRIX or COOKED_OPERATOR "; s += " is less than " + ttos(eps) + "\n"; std::cerr<<"WARNING: "< class SomeVectorTemplate, typename SomeAllocator1Type, typename SomeAllocator2Type> void fillOperator(SomeVectorTemplate& data_, SomeVectorTemplate,SomeAllocator2Type>& op) { for (SizeType i = 0; i < data_.size(); ++i) data_[i] = &(op[i].data_); } template std::istream& operator>>(std::istream& is,Operator& op) { is>>op.data_; is>>op.fermionSign; SizeType theNumber2 = 0; is>>theNumber2; is>>op.jm_; is>>op.angularFactor_; is>>op.su2Related_; return is; } template std::ostream& operator<<(std::ostream& os,const Operator& op) { os< > class OperatorSpec { public: typedef typename ModelType::OperatorType OperatorType; typedef typename OperatorType::StorageType OperatorStorageType; typedef LazyAlgebra LazyAlgebraType; typedef PsimagLite::OneOperatorSpec OneOperatorSpecType; typedef typename OneOperatorSpecType::SiteSplit SiteSplitType; typedef AlgebraType ResultType; typedef typename OperatorStorageType::value_type ComplexOrRealType; typedef int AuxiliaryType; OperatorSpec(const ModelType& model) : model_(model) {} ResultType operator()(PsimagLite::String opLabel, int& site2) const { PsimagLite::String copyOfOpLabel = opLabel; SiteSplitType site3Split = OneOperatorSpecType::extractSiteIfAny(opLabel); if (site2 >= 0 && site3Split.hasSiteString && static_cast(site2) != OneOperatorSpecType::strToNumberOfFail(site3Split.siteString)) err(PsimagLite::String(__FILE__) + " FATAL , delete site from " + copyOfOpLabel + "\n"); opLabel = site3Split.root; if (site2 < 0 && site3Split.hasSiteString) site2 = OneOperatorSpecType::strToNumberOfFail(site3Split.siteString); SizeType site = (site2 < 0) ? 0 : site2; if (opLabel == "_1" || opLabel == "identity") return specialOperator(site, 1.0); if (opLabel == "_0" || opLabel == "zero") return specialOperator(site, 0.0); OperatorType nup; try { nup = findOperator(opLabel, site); } catch (std::exception& e) { if (opLabel[0] == ':') { std::cerr<::Writeable ioWriteable(label, inputCheck); PsimagLite::InputNg::Readable io(ioWriteable); PsimagLite::String prefix = ""; return OperatorType(io,model_,OperatorType::MUST_BE_NONZERO, prefix); } void replaceString(PsimagLite::String& str, PsimagLite::String substr) const { /* Locate the substring to replace. */ size_t index = str.find('$'); if (index == PsimagLite::String::npos) return; PsimagLite::String str1 = str.substr(0, index); ++index; PsimagLite::String str2 = str.substr(index); str = str1 + substr + str2; } const ModelType& model_; }; } #endif // OPERATORSPEC_H dmrgpp-6.02/src/Engine/OperatorStorage.h000066400000000000000000000223671414604301300202250ustar00rootroot00000000000000#ifndef OPERATORSTORAGE_H #define OPERATORSTORAGE_H #include "BlockDiagonalMatrix.h" #include "BlockOffDiagMatrix.h" #include "Matrix.h" #include "Io/IoNg.h" // Selects storage for operators, // This can be just a CRS matrix or it can be the following. // Blocked off diagonal matrix, // but blocks are now dense matrices, in the future we might make them // MatrixDenseOrSparse type // It also selects BlockDiagonalType for storage that we know is // block diagonal, like the DMRG transformation matrix namespace Dmrg { template class OperatorStorage { public: typedef ComplexOrRealType value_type; typedef PsimagLite::Matrix MatrixType; typedef BlockDiagonalMatrix BlockDiagonalMatrixType; typedef BlockOffDiagMatrix BlockOffDiagMatrixType; typedef BlockDiagonalMatrixType BlockDiagonalType; typedef BlockOffDiagMatrixType BlockOffDiagType; typedef typename PsimagLite::Real::Type RealType; typedef PsimagLite::CrsMatrix SparseMatrixType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef PsimagLite::Vector::Type VectorSizeType; OperatorStorage() : justCrs_(true) {} explicit OperatorStorage(const SparseMatrixType& src) : justCrs_(true), crs_(src) {} void makeDiagonal(SizeType rows, ComplexOrRealType value = 1) // replace this by a ctor { if (!justCrs_) throw PsimagLite::RuntimeError("OperatorStorage::makeDiagonal\n"); justCrs_ = true; crs_.makeDiagonal(rows, value); } void read(PsimagLite::String label, PsimagLite::IoNgSerializer& io) { if (justCrs_) return crs_.read(label, io); throw PsimagLite::RuntimeError("OperatorStorage::read\n"); } void write(PsimagLite::String label, PsimagLite::IoNgSerializer& io, PsimagLite::IoSerializer::WriteMode mode = PsimagLite::IoNgSerializer::NO_OVERWRITE) const { if (justCrs_) return crs_.write(label, io, mode); throw PsimagLite::RuntimeError("OperatorStorage::write\n"); } void overwrite(PsimagLite::String label, PsimagLite::IoNgSerializer& io) const { if (justCrs_) return crs_.overwrite(label, io); throw PsimagLite::RuntimeError("OperatorStorage::overwrite\n"); } OperatorStorage operator+=(const OperatorStorage& other) { if (justCrs_ && other.justCrs_) { crs_ += other.crs_; return *this; } throw PsimagLite::RuntimeError("OperatorStorage::operator+=\n"); } OperatorStorage operator*=(const ComplexOrRealType& value) { if (justCrs_) { crs_ *= value; return *this; } throw PsimagLite::RuntimeError("OperatorStorage::operator*=\n"); } void fromDense(const PsimagLite::Matrix& m) { if (!justCrs_) throw PsimagLite::RuntimeError("OperatorStorage::fromDense()\n"); fullMatrixToCrsMatrix(crs_, m); } void clear() { if (justCrs_) return crs_.clear(); throw PsimagLite::RuntimeError("OperatorStorage::clear()\n"); } void checkValidity() const { if (justCrs_) return crs_.checkValidity(); throw PsimagLite::RuntimeError("OperatorStorage::checkValidity\n"); } void conjugate() { if (justCrs_) return crs_.conjugate(); throw PsimagLite::RuntimeError("OperatorStorage::conjugate\n"); } void transpose() { if (!justCrs_) throw PsimagLite::RuntimeError("OperatorStorage::transpose\n"); // transpose conjugate SparseMatrixType copy = crs_; PsimagLite::transposeConjugate(crs_, copy); // conjugate again to end up transposing only crs_.conjugate(); } void rotate(const PsimagLite::CrsMatrix& left, const PsimagLite::CrsMatrix& right) { if (justCrs_) { SparseMatrixType tmp; multiply(tmp, crs_, right); multiply(crs_, left, tmp); return; } throw PsimagLite::RuntimeError("OperatorStorage::rotate\n"); } MatrixType toDense() const { if (justCrs_) return crs_.toDense(); throw PsimagLite::RuntimeError("OperatorStorage::toDense\n"); } const SparseMatrixType& getCRS() const { if (!justCrs_) throw PsimagLite::RuntimeError("OperatorStorage::toCRS\n"); return crs_; } // FIXME TODO DELETE THIS FUNCTION!! SparseMatrixType& getCRSNonConst() { if (!justCrs_) throw PsimagLite::RuntimeError("OperatorStorage::toCRS\n"); return crs_; } SizeType nonZeros() const { if (justCrs_) return crs_.nonZeros(); throw PsimagLite::RuntimeError("OperatorStorage::nonZeros\n"); } SizeType rows() const { if (justCrs_) return crs_.rows(); throw PsimagLite::RuntimeError("OperatorStorage::rows()\n"); } SizeType cols() const { if (justCrs_) return crs_.cols(); throw PsimagLite::RuntimeError("OperatorStorage::cols()\n"); } bool justCRS() const { return justCrs_; } friend void transposeConjugate(OperatorStorage& dest, const OperatorStorage& src) { if (dest.justCRS() && src.justCRS()) return transposeConjugate(dest.crs_, src.getCRS()); err("OperatorStorage: transposeConjugate\n"); } friend void fromCRS(OperatorStorage& dest, const PsimagLite::CrsMatrix& src) { if (dest.justCrs_) { dest.crs_ = src; return; } throw PsimagLite::RuntimeError("OperatorStorage: fromCRS\n"); } friend void bcast(OperatorStorage& dest) { if (dest.justCrs_) return bcast(dest.crs_); err("OperatorStorage: bcast\n"); } // See CrsMatrix.h line 734 friend void externalProduct2(OperatorStorage& B, const OperatorStorage& A, SizeType nout, const VectorRealType& signs, bool order, const VectorSizeType& permutationFull) { if (B.justCRS() && A.justCRS()) return externalProduct(B.crs_, A.getCRS(), nout, signs, order, permutationFull); throw PsimagLite::RuntimeError("OperatorStorage: externalProduct\n"); } friend void externalProduct2(OperatorStorage& C, const OperatorStorage& A, const OperatorStorage& B, const VectorRealType& signs, bool order, const VectorSizeType& permutationFull) { if (A.justCRS() && B.justCRS() && C.justCRS()) return externalProduct(C.crs_, A.getCRS(), B.getCRS(), signs, order, permutationFull); throw PsimagLite::RuntimeError("OperatorStorage: externalProduct\n"); } friend void fullMatrixToCrsMatrix(OperatorStorage& dest, const PsimagLite::Matrix& src) { if (dest.justCrs_) return fullMatrixToCrsMatrix(dest.crs_, src); err("OperatorStorage: fullMatrixToCrsMatrix\n"); } private: bool justCrs_; SparseMatrixType crs_; }; template OperatorStorage operator*(const typename OperatorStorage::RealType& value, const OperatorStorage& storage) { if (storage.justCRS()) return storage.getCRS()*value; throw PsimagLite::RuntimeError("OperatorStorage: operator*\n"); } template OperatorStorage operator*(const OperatorStorage& a, const OperatorStorage& b) { if (a.justCRS() && b.justCRS()) return OperatorStorage(a.getCRS()*b.getCRS()); throw PsimagLite::RuntimeError("OperatorStorage: operator*\n"); } template void crsMatrixToFullMatrix(PsimagLite::Matrix& dest, const OperatorStorage& src) { if (src.justCRS()) return crsMatrixToFullMatrix(dest, src.getCRS()); err("OperatorStorage: crsMatrixToFullMatrix\n"); } template PsimagLite::Matrix multiplyTc(const OperatorStorage& src1, const OperatorStorage& src2) { if (src1.justCRS() && src2.justCRS()) return multiplyTc(src1.getCRS(), src2.getCRS()); throw PsimagLite::RuntimeError("OperatorStorage: multiplyTc\n"); } template bool isHermitian(const OperatorStorage& src) { if (src.justCRS()) return isHermitian(src.getCRS()); throw PsimagLite::RuntimeError("OperatorStorage: isHermitian\n"); } template bool isAntiHermitian(const OperatorStorage& src) { if (src.justCRS()) return isAntiHermitian(src.getCRS()); throw PsimagLite::RuntimeError("OperatorStorage: isHermitian\n"); } template bool isTheIdentity(const OperatorStorage& src) { if (src.justCRS()) return isTheIdentity(src.getCRS()); throw PsimagLite::RuntimeError("OperatorStorage: isTheIdentity\n"); } template bool isNonZeroMatrix(const OperatorStorage& m) { return (m.rows() > 0 && m.cols() > 0); } } // namespace PsimagLite #endif // OPERATORSTORAGE_H dmrgpp-6.02/src/Engine/Operators.h000066400000000000000000000501711414604301300170550ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file Operators.h * * Documentation needed FIXME * */ #ifndef OPERATORS_H #define OPERATORS_H #include #include "ProgressIndicator.h" #include "Complex.h" #include "Concurrency.h" #include "Parallelizer.h" #include "BlockOffDiagMatrix.h" #include "ChangeOfBasis.h" #include "Operator.h" #include "Matrix.h" namespace Dmrg { /* PSIDOC Operators The \cppClass{Operators} class stores the local operators for this basis. Only the local operators corresponding to the most recently added sites will be meaningful. Indeed, if we apply transformation $W$ (possibly truncating the basis, then \begin{equation} (W^\dagger A W) (W^\dagger BW) \neq W^\dagger (AB) W, \end{equation} since $WW^\dagger\neq 1$ because the DMRG truncation does not assure us that $W^\dagger$ will be the right inverse of $W$ (but $W^\dagger W=1$ always holds). Because of this reason we cannot construct the Hamiltonian simply from transformed local operators, even if we store them for all sites, but we need to store also the Hamiltonian in the most recently transformed basis. The fact that \cppClass{Operators} stores local operators in the most recently transformed basis for \emph{all sites} does not increase memory usage too much, and simplifies the writing of code for complicated geometries or connections, because all local opeators are availabel at all times. Each SCE model class is responsible for determining whether a transformed operator can be used (or not because of the reason limitation above). */ template class Operators { public: typedef std::pair PairType; typedef BasisType_ BasisType; typedef Operators ThisType; typedef typename BasisType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type SparseElementType; typedef Operator OperatorType; typedef typename OperatorType::StorageType OperatorStorageType; typedef PsimagLite::Matrix DenseMatrixType; typedef ChangeOfBasis ChangeOfBasisType; typedef typename OperatorType::StorageType StorageType; typedef typename StorageType::value_type ComplexOrRealType; typedef typename PsimagLite::Real::Type RealType; typedef PsimagLite::Concurrency ConcurrencyType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef std::pair PairSizeSizeType; typedef typename ChangeOfBasisType::BlockDiagonalMatrixType BlockDiagonalMatrixType; typedef typename PsimagLite::Vector::Type VectorOperatorType; // law of the excluded middle went out the window here: enum class ChangeAllEnum { UNSET, TRUE_SET, FALSE_SET}; class MyLoop { public: MyLoop(VectorOperatorType& operators, VectorOperatorType& superOps, ChangeOfBasisType& changeOfBasis, const BlockDiagonalMatrixType& ftransform1, const PairSizeSizeType& startEnd, SizeType gemmRnb, SizeType threadsForGemmR, SizeType opsPerSite, SizeType opOnSiteThreshold) : operators_(operators), superOps_(superOps), changeOfBasis_(changeOfBasis), ftransform(ftransform1), startEnd_(startEnd), counter_(PsimagLite::Concurrency::codeSectionParams.npthreads), gemmRnb_(gemmRnb), threadsForGemmR_(threadsForGemmR), opsPerSite_(opsPerSite), opOnSiteThreshold_(opOnSiteThreshold) { changeOfBasis.update(ftransform); } void doTask(SizeType taskNumber, SizeType threadNum) { const SizeType nLocals = operators_.size(); if (taskNumber < nLocals) doTaskForLocal(taskNumber, threadNum); else doTaskForSuper(taskNumber - nLocals); } SizeType tasks() const { return operators_.size() + superOps_.size(); } SizeType finalize() const { SizeType sum = 0; for (SizeType i = 0; i < counter_.size(); ++i) sum += counter_[i]; return sum; } private: void doTaskForLocal(SizeType k, SizeType threadNum) { if (isLocalExcluded(k) && k < operators_.size()) { operators_[k].clear(); return; } changeOfBasis_(operators_[k].getStorageNonConst(), gemmRnb_, threadsForGemmR_); ++counter_[threadNum]; } void doTaskForSuper(SizeType k) { if (isSuperExcluded(k) && k < superOps_.size()) { superOps_[k].clear(); return; } changeOfBasis_(superOps_[k].getStorageNonConst(), gemmRnb_, threadsForGemmR_); } bool isLocalExcluded(SizeType k) const { if (changeAll_ == ChangeAllEnum::TRUE_SET) return false; // <-- this is the safest answer // excluded because not needed by geometry if (k < startEnd_.first || k >= startEnd_.second) return true; // excluded because not needed by Hamiltonian // (opsPerSite_ == 0 means that model is SDHS and this feature is then not supported) if (opsPerSite_ == 0 || opOnSiteThreshold_ == 0) return false; SizeType opNumber = k % opsPerSite_; return (opNumber >= opOnSiteThreshold_); } bool isSuperExcluded(SizeType) const { throw PsimagLite::RuntimeError("Operators.h: isSuperExcluded not written yet\n"); } VectorOperatorType& operators_; VectorOperatorType& superOps_; ChangeOfBasisType& changeOfBasis_; const BlockDiagonalMatrixType& ftransform; const PairSizeSizeType& startEnd_; VectorSizeType counter_; SizeType gemmRnb_; SizeType threadsForGemmR_; SizeType opsPerSite_; SizeType opOnSiteThreshold_; }; Operators() : progress_("Operators") { if (changeAll_ == ChangeAllEnum::UNSET) changeAll_ = ChangeAllEnum::FALSE_SET; } template Operators(IoInputter& io, PsimagLite::String prefix, bool isObserveCode) : progress_("Operators") { if (changeAll_ == ChangeAllEnum::UNSET) changeAll_ = ChangeAllEnum::FALSE_SET; if (isObserveCode) return; read(io, prefix, false); } template void read(IoInputter& io, PsimagLite::String prefix, bool roi = true, // it is false only when called from constructor typename PsimagLite::EnableIf< PsimagLite::IsInputLike::True, int>::Type = 0) { const SizeType last = prefix.length() - 1; if (last >= prefix.length()) err("Operators.h: read\n"); if (prefix[last] != '/') prefix += "/"; io.read(operators_, prefix + "Operators"); //io.read(superOps_, prefix + "SuperOperators"); io.read(hamiltonian_, prefix + "Hamiltonian"); } static void setChangeAll(bool flag) { if (!flag) { changeAll_ = ChangeAllEnum::FALSE_SET; printChangeAll(); return; } assert(flag); if (changeAll_ == ChangeAllEnum::UNSET) { changeAll_ = ChangeAllEnum::TRUE_SET; printChangeAll(); return; } err("Operators::setChangeAll(true) called to late\n"); } void setLocal(const VectorOperatorType& ops) { operators_ = ops; } const OperatorType& getLocalByIndex(SizeType i) const { assert(i < operators_.size()); return operators_[i]; } SizeType sizeOfLocal() const { return operators_.size(); } void changeBasis(const BlockDiagonalMatrixType& ftransform, const PairSizeSizeType& startEnd, SizeType gemmRnb, SizeType threadsForGemmR, SizeType opsPerSite, SizeType opOnSiteThreshold) { typedef PsimagLite::Parallelizer ParallelizerType; ParallelizerType threadObject(PsimagLite::Concurrency::codeSectionParams); MyLoop helper(operators_, superOps_, changeOfBasis_, ftransform, startEnd, gemmRnb, threadsForGemmR, opsPerSite, opOnSiteThreshold); threadObject.loopCreate(helper); // FIXME: needs weights PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Operators that were rotated= " + ttos(helper.finalize()); progress_.printline(msgg, std::cout); hamiltonian_.checkValidity(); ChangeOfBasisType::changeBasis(hamiltonian_, ftransform, gemmRnb, threadsForGemmR); } template void setToProduct(const BasisType& basis1, const ThisType& ops1, const BasisType& basis2, const ThisType& ops2, const VectorSizeType& permutationInverse, const SomeSuperOperatorHelperType& someSuperOpHelper) { setToProductLocal(basis1, ops1, basis2, ops2, permutationInverse); setToProductSuper(basis1, ops1, basis2, ops2, permutationInverse, someSuperOpHelper); } void outerProductHamiltonian(const StorageType& h2, const StorageType& h3, const VectorSizeType& permutationFull) { StorageType tmpMatrix; assert(h2.rows()==h2.cols()); VectorRealType ones(h2.rows(),1.0); externalProduct2(hamiltonian_,h2,h3.rows(),ones,true, permutationFull); externalProduct2(tmpMatrix,h3,h2.rows(),ones,false, permutationFull); hamiltonian_ += tmpMatrix; } void setHamiltonian(StorageType const &h) { hamiltonian_ = h; } void setHamiltonian(const SparseMatrixType& h) { fromCRS(hamiltonian_, h); } const StorageType& hamiltonian() const { return hamiltonian_; } void print(int ind= -1) const { if (ind<0) for (SizeType i=0;i void overwrite(SomeIoOutType& io, const PsimagLite::String& s, typename PsimagLite::EnableIf< PsimagLite::IsOutputLike::True, int*>::Type = 0) const { io.overwrite(operators_, s + "/Operators"); // io.overwrite(superOps_, s + "/SuperOperators"); io.overwrite(hamiltonian_, s + "/Hamiltonian"); } void write(PsimagLite::IoNg::Out& io, const PsimagLite::String& s, PsimagLite::IoNgSerializer::WriteMode mode) const { if (mode == PsimagLite::IoNgSerializer::ALLOW_OVERWRITE) { io.overwrite(operators_, s + "/Operators"); // io.overwrite(superOps_, s + "/SuperOperators"); io.overwrite(hamiltonian_, s + "/Hamiltonian"); } else { io.write(operators_, s + "/Operators"); // io.write(superOps_, s + "/SuperOperators"); io.write(hamiltonian_, s + "/Hamiltonian"); } } void clear() { operators_.clear(); superOps_.clear(); hamiltonian_.clear(); } const OperatorType& getSuperByIndex(SizeType ind) const { assert(ind < superOps_.size()); return superOps_[ind]; } SizeType superIndices(const VectorSizeType&, SizeType) const { PsimagLite::String msg(__FILE__); throw PsimagLite::RuntimeError(msg + "::superOperatorIndices() not implemented yet\n"); } private: void setToProductLocal(const BasisType& basis2, const ThisType& ops2, const BasisType& basis3, const ThisType& ops3, const VectorSizeType& permutationInverse) { typename PsimagLite::Vector::Type fermionicSigns; SizeType nlocalOps = ops2.sizeOfLocal() + ops3.sizeOfLocal(); operators_.resize(nlocalOps); ProgramGlobals::FermionOrBosonEnum savedSign = ProgramGlobals::FermionOrBosonEnum::BOSON; for (SizeType i = 0; i < nlocalOps; ++i) { if (i < ops2.sizeOfLocal()) { const OperatorType& myOp = ops2.getLocalByIndex(i); bool isFermion = (myOp.fermionOrBoson() == ProgramGlobals::FermionOrBosonEnum::FERMION); if (savedSign != myOp.fermionOrBoson() || fermionicSigns.size() == 0) { utils::fillFermionicSigns(fermionicSigns, basis2.signs(), (isFermion) ? -1 : 1); savedSign = myOp.fermionOrBoson(); } crossProductForLocal(i, myOp, basis3.size(), fermionicSigns, true, permutationInverse); } else { const OperatorType& myOp = ops3.getLocalByIndex(i - ops2.sizeOfLocal()); bool isFermion = (myOp.fermionOrBoson() == ProgramGlobals::FermionOrBosonEnum::FERMION); if (savedSign != myOp.fermionOrBoson() || fermionicSigns.size() == 0) { utils::fillFermionicSigns(fermionicSigns, basis2.signs(), (isFermion) ? -1 : 1); savedSign = myOp.fermionOrBoson(); } crossProductForLocal(i, myOp, basis2.size(), fermionicSigns, false, permutationInverse); } } } template void setToProductSuper(const BasisType& basis2, const ThisType& ops2, const BasisType& basis3, const ThisType& ops3, const VectorSizeType& permutationInverse, const SomeSuperOperatorHelperType& someSuperOpHelper) { if (someSuperOpHelper.size() == 0) return; typename PsimagLite::Vector::Type fermionicSigns; SizeType nSuperOps = someSuperOpHelper.size(); superOps_.resize(nSuperOps); ProgramGlobals::FermionOrBosonEnum savedSign = ProgramGlobals::FermionOrBosonEnum::BOSON; typedef typename SomeSuperOperatorHelperType::PairBoolSizeType PairBoolSizeType; const bool option = (basis3.block().size() == 1); for (SizeType i = 0; i < nSuperOps; ++i) { const PairBoolSizeType op2Index = someSuperOpHelper.leftOperatorIndex(i); const PairBoolSizeType op3Index = someSuperOpHelper.rightOperatorIndex(i); const OperatorType& op1 = (!op2Index.first) ? ops2.getLocalByIndex(op2Index.second) : ops2.getSuperByIndex(op2Index. second); const OperatorType& op3 = (!op3Index.first) ? ops3.getLocalByIndex(op3Index.second) : ops3.getSuperByIndex(op3Index. second); bool isFermion = (op3.fermionOrBoson() == ProgramGlobals::FermionOrBosonEnum::FERMION); if (savedSign != op3.fermionOrBoson() || fermionicSigns.size() == 0) { utils::fillFermionicSigns(fermionicSigns, basis2.signs(), (isFermion) ? -1 : 1); savedSign = op3.fermionOrBoson(); } superOps_[i].outerProduct(op1, op3, fermionicSigns, option, permutationInverse); } } /* PSIDOC OperatorsExternalProduct I will know explain how the full outer product between two operators is implemented. If local operator $A$ lives in Hilbert space $\mathcal{A}$ and local operator $B$ lives in Hilbert space $\mathcal{B}$, then $C=AB$ lives in Hilbert space $\mathcal{C}=\mathcal{A}\otimes\mathcal{B}$. Let $\alpha_1$ and $\alpha_2$ represent states of $\mathcal{A}$, and let $\beta_1$ and $\beta_2$ represent states of $\mathcal{B}$. Then, in the product basis, $C_{\alpha_1,\beta_1;\alpha_2,\beta_2}=A_{\alpha_1,\alpha_2} B_{\beta_1,\beta_2}$. Additionally, $\mathcal{C}$ is reordered such that each state of this outer product basis is labeled in increasing effective quantum number (see Section~\ref{sec:dmrgbasis}). In the previous example, if the Hilbert spaces $\mathcal{A}$ and $\mathcal{B}$ had sizes $a$ and $b$, respectively, then their outer product would have size $ab$. When we add sites to the system (or the environment) the memory usage remains bounded by the truncation, and it is usually not a problem to store full product matrices, as long as we do it in a sparse way (DMRG++ uses compressed row storage). In short, local operators are always stored in the most recently transformed basis for \emph{all sites} and, if applicable, \emph{all values} of the internal degree of freedom $\sigma$. See PTEXREF{setToProductOps} and PTEXREF{HERE}. */ void crossProductForLocal(SizeType i, const OperatorType& m, int x, const VectorRealType& fermionicSigns, bool option, const VectorSizeType& permutationFull) { assert(!BasisType::useSu2Symmetry()); operators_[i].outerProduct(m, x, fermionicSigns, option, permutationFull); // don't forget to set fermion sign and j: operators_[i].set(m.fermionOrBoson(), m.jm(), m.angularFactor()); // apply(operators_[i]); if (operators_[i].getStorage().rows() > 0) operators_[i].getStorage().checkValidity(); } static void printChangeAll() { PsimagLite::String msg("INFO: Operators::changeAll_="); msg += toString(changeAll_) + "\n"; if (changeAll_ == ChangeAllEnum::TRUE_SET) msg += "GeometryMaxConnections value might not be used\n"; std::cerr< typename Operators::ChangeAllEnum Operators::changeAll_ = Operators::ChangeAllEnum::UNSET; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/OperatorsCached.h000066400000000000000000000072721414604301300201510ustar00rootroot00000000000000#ifndef OPERATORSCACHED_H #define OPERATORSCACHED_H #include "ProgramGlobals.h" #include "Concurrency.h" namespace Dmrg { template class OperatorsCached { public: typedef std::pair PairType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename LeftRightSuperType::BasisType BasisType; typedef typename BasisType::BlockType BlockType; typedef typename BasisWithOperatorsType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::StorageType OperatorStorageType; typedef PsimagLite::Concurrency ConcurrencyType; typedef typename PsimagLite::Vector::Type VectorOperatorStorageType; typedef typename PsimagLite::Vector::Type VectorVectorOperatorStorageType; typedef BlockType VectorSizeType; OperatorsCached(const LeftRightSuperType& lrs) : lrs_(lrs), garbage_(ConcurrencyType::codeSectionParams.npthreads), seen_(ConcurrencyType::codeSectionParams.npthreads) { ConcurrencyType::mutexInit(&mutex_); } ~OperatorsCached() { const SizeType n = garbage_.size(); for (SizeType i = 0; i < n; ++i) { const SizeType m = garbage_[i].size(); for (SizeType j = 0; j < m; ++j) { delete garbage_[i][j]; garbage_[i][j] = 0; } } ConcurrencyType::mutexDestroy(&mutex_); } void clearThreadSelves() const { threadSelves_.clear(); } const OperatorStorageType& reducedOperator(char modifier, SizeType iifirst, const ProgramGlobals::SysOrEnvEnum type) const { assert(!BasisType::useSu2Symmetry()); const OperatorStorageType* m = 0; if (type == ProgramGlobals::SysOrEnvEnum::SYSTEM) { m = &(lrs_.left().localOperator(iifirst).getStorage()); } else { assert(type == ProgramGlobals::SysOrEnvEnum::ENVIRON); m =&(lrs_.right().localOperator(iifirst).getStorage()); } m->checkValidity(); if (modifier == 'N') return *m; assert(modifier == 'C'); SizeType typeIndex = (type == ProgramGlobals::SysOrEnvEnum::SYSTEM) ? 0 : 1; SizeType packed = typeIndex + iifirst*2; const ConcurrencyType::PthreadtType threadSelf = ConcurrencyType::threadSelf(); const SizeType threadNum = threadNumberFromSelf(threadSelf); if (garbage_.size() != seen_.size()) err("reducedOperator: FATAL: internal error\n"); if (garbage_.size() <= threadNum || seen_.size() <= threadNum) err("reducedOperator: FATAL: " + ttos(threadNum) + " >= " + ttos(garbage_.size()) + "\n"); int indexOfSeen = PsimagLite::indexOrMinusOne(seen_[threadNum], packed); if (indexOfSeen >= 0) { assert(static_cast(indexOfSeen) < garbage_[threadNum].size()); return *(garbage_[threadNum][indexOfSeen]); } OperatorStorageType* mc = new OperatorStorageType; transposeConjugate(*mc, *m); garbage_[threadNum].push_back(mc); seen_[threadNum].push_back(packed); mc->checkValidity(); return *mc; } private: SizeType threadNumberFromSelf(ConcurrencyType::PthreadtType threadSelf) const { ConcurrencyType::mutexLock(&mutex_); int threadPreNum = PsimagLite::indexOrMinusOne(threadSelves_, threadSelf); if (threadPreNum < 0) { threadPreNum = threadSelves_.size(); threadSelves_.push_back(threadSelf); } ConcurrencyType::mutexUnlock(&mutex_); return threadPreNum; } const LeftRightSuperType& lrs_; mutable VectorVectorOperatorStorageType garbage_; mutable typename PsimagLite::Vector::Type seen_; mutable ConcurrencyType::MutexType mutex_; mutable PsimagLite::Vector::Type threadSelves_; }; } #endif // OPERATORSCACHED_H dmrgpp-6.02/src/Engine/Options.h000066400000000000000000000026011414604301300165250ustar00rootroot00000000000000#ifndef OPTIONS_H #define OPTIONS_H #include "PsimagLite.h" #include namespace Dmrg { template class Options { public: typedef typename PsimagLite::String::value_type CharType; typedef typename PsimagLite::String::const_iterator StringConstIterator; Options(PsimagLite::String label, InputValidatorType& io) { io.readline(data_, label); } void operator+=(PsimagLite::String moreData) { data_ += moreData; } void write(PsimagLite::String label, PsimagLite::IoSerializer& ioSerializer) const { ioSerializer.write(label, data_); } bool isSet(PsimagLite::String what) const { return isSubstrCaseInsensitive(data_, what); } private: template struct CaseInsensitiveEqual { bool operator()(charT ch1, charT ch2) const { return std::toupper(ch1) == std::toupper(ch2); } }; bool isSubstrCaseInsensitive(const PsimagLite::String& str1, const PsimagLite::String& str2) const { StringConstIterator it = std::search(str1.begin(), str1.end(), str2.begin(), str2.end(), caseInsensitiveEqual_); return (it != str1.end()); } CaseInsensitiveEqual caseInsensitiveEqual_; PsimagLite::String data_; }; } #endif // OPTIONS_H dmrgpp-6.02/src/Engine/OracleChebyshev.h000066400000000000000000000103771414604301300201510ustar00rootroot00000000000000#ifndef ORACLECHEBYSHEV_H #define ORACLECHEBYSHEV_H #include "ScaledHamiltonian.h" namespace Dmrg { template class OracleChebyshev { public: typedef typename TargetingCommonType::ModelType ModelType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename TargetParamsType::RealType RealType; typedef typename TargetingCommonType::LanczosSolverType LanczosSolverType; typedef typename TargetingCommonType::ComplexOrRealType ComplexOrRealType; typedef typename TargetingCommonType::VectorWithOffsetType VectorWithOffsetType; typedef typename LanczosSolverType::MatrixType MatrixLanczosType; typedef ScaledHamiltonian ScaledHamiltonianType; typedef typename PsimagLite::Vector::Type VectorType; typedef typename TargetingCommonType::FermionSignType FermionSignType; OracleChebyshev(const ModelType& model, const LeftRightSuperType& lrs, const RealType& currentTime, const TargetParamsType& tstStruct, RealType E0) : model_(model), lrs_(lrs), currentTime_(currentTime), tstStruct_(tstStruct), E0_(E0) {} void operator()(SizeType n, const TargetingCommonType& common, SizeType systemOrEnviron, SizeType site, OperatorType& A, typename TargetingCommonType::BorderEnumType border) { VectorWithOffsetType p0; typename TargetingCommonType::ApplyOperatorType applyOpLocal(lrs_, common.withLegacyBugs()); typename PsimagLite::Vector::Type signs; model_.findOddElectronsOfOneSite(signs, site); FermionSignType fs(lrs_.left(), signs); OperatorType Aprime = A; Aprime.dagger(); applyOpLocal(p0,common.psi(),Aprime,fs,systemOrEnviron,border); VectorWithOffsetType p1; VectorType r; chebyIteration(r, p0, p0, true); p1.fromFull(r, lrs_.super()); for (SizeType i = 0; i < n; ++i) { chebyIteration(r, p1, p0, false); // p2 = 2*H*p1 - p0; VectorWithOffsetType p2; p2.fromFull(r, lrs_.super()); // ; ComplexOrRealType result = common.testRealWork(p2, common.psi(), systemOrEnviron, site, A, border); std::cout<<"OracleChebyshev: = "< void write(const T& t, PsimagLite::String str) { if (!ptr_) return; ptr_->write(t, str); } template void write(const T& t, PsimagLite::String str, PsimagLite::IoNg::Out::Serializer::WriteMode mode, typename std::enable_if::True, int>::type = 0) { if (!ptr_) return; ptr_->write(t, str, mode); } template void overwrite(const T& t, PsimagLite::String str) { if (!ptr_) return; ptr_->overwrite(t, str); } void write(SizeType c, PsimagLite::String str, PsimagLite::IoNg::Out::Serializer::WriteMode mode) { if (!ptr_) return; ptr_->write(c, str, mode); } void flush() { if (!ptr_) return; ptr_->flush(); } void close() { if (!ptr_) return; ptr_->close(); } void createGroup(PsimagLite::String str) { if (!ptr_) return; ptr_->createGroup(str); } private: OutputFileOrNot(const OutputFileOrNot&) = delete; OutputFileOrNot& operator=(const OutputFileOrNot&) = delete; PsimagLite::String filename_; PsimagLite::IoSelector::Out* ptr_; }; } #endif // OUTPUTFILEORNOT_H dmrgpp-6.02/src/Engine/Parallel2PointCorrelations.h000066400000000000000000000114661414604301300223200ustar00rootroot00000000000000/* Copyright (c) 2009,-2012 UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /** \file Parallel2PointCorrelations.h */ #ifndef PARALLEL_2POINT_CORRELATIONS_H #define PARALLEL_2POINT_CORRELATIONS_H #include "Matrix.h" #include "Mpi.h" #include "Concurrency.h" #include "ProgramGlobals.h" #include "GetBraOrKet.h" namespace Dmrg { template class Parallel2PointCorrelations { public: typedef typename TwoPointCorrelationsType::MatrixType MatrixType; typedef typename TwoPointCorrelationsType::SparseMatrixType SparseMatrixType; typedef typename MatrixType::value_type FieldType; typedef PsimagLite::Concurrency ConcurrencyType; typedef std::pair PairType; typedef typename PsimagLite::Real::Type RealType; typedef typename TwoPointCorrelationsType::BraketType BraketType; Parallel2PointCorrelations(MatrixType& w, const TwoPointCorrelationsType& twopoint, const typename PsimagLite::Vector::Type& pairs, const BraketType& braket, ProgramGlobals::FermionOrBosonEnum fermionicSign, const PsimagLite::GetBraOrKet& bra, const PsimagLite::GetBraOrKet& ket) : w_(w), twopoint_(twopoint), pairs_(pairs), braket_(braket), fermionicSign_(fermionicSign), bra_(bra), ket_(ket) {} void doTask(SizeType taskNumber, SizeType) { SizeType i = pairs_[taskNumber].first; SizeType j = pairs_[taskNumber].second; w_(i,j) = twopoint_.calcCorrelation(i, j, braket_, fermionicSign_, bra_, ket_); } SizeType tasks() const { return pairs_.size(); } private: MatrixType& w_; const TwoPointCorrelationsType& twopoint_; const typename PsimagLite::Vector::Type& pairs_; const BraketType& braket_; const ProgramGlobals::FermionOrBosonEnum fermionicSign_; const PsimagLite::GetBraOrKet& bra_; const PsimagLite::GetBraOrKet& ket_; }; // class Parallel2PointCorrelations } // namespace Dmrg /*@}*/ #endif // PARALLEL_2POINT_CORRELATIONS_H dmrgpp-6.02/src/Engine/Parallel4PointDs.h000066400000000000000000000201171414604301300202150ustar00rootroot00000000000000/* Copyright (c) 2009,-2015 UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /** \file Parallel4PointDs.h */ #ifndef PARALLEL_4POINT_DS_H #define PARALLEL_4POINT_DS_H #include "Matrix.h" #include "Mpi.h" #include "Concurrency.h" namespace Dmrg { template class Parallel4PointDs { typedef std::pair PairType; typedef typename FourPointCorrelationsType::MatrixType MatrixType; typedef typename FourPointCorrelationsType::BraketType BraketType; typedef typename MatrixType::value_type FieldType; typedef typename FourPointCorrelationsType::SparseMatrixType SparseMatrixType; typedef PsimagLite::Concurrency ConcurrencyType; public: enum FourPointModeEnum {MODE_NORMAL, MODE_THIN, MODE_THINupdn}; typedef typename ModelType::RealType RealType; Parallel4PointDs(MatrixType& fpd, const FourPointCorrelationsType& fourpoint, const ModelType& model, const typename PsimagLite::Vector::Type& gammas, const typename PsimagLite::Vector::Type& pairs, FourPointModeEnum mode) : fpd_(fpd), fourpoint_(fourpoint), model_(model), gammas_(gammas), pairs_(pairs), mode_(mode) {} void doTask(SizeType taskNumber, SizeType) { SizeType i = pairs_[taskNumber].first; SizeType j = pairs_[taskNumber].second; fpd_(i,j) = (mode_ == MODE_NORMAL) ? fourPointDelta(2*i, 2*j, gammas_) : fourPointThin(i, j); if (mode_ == MODE_NORMAL) { fpd_(i,j) = fourPointDelta(2*i,2*j,gammas_); } else if (mode_ == MODE_THIN) { fpd_(i,j) = fourPointThin(i, j); } else if (mode_ == MODE_THINupdn) { fpd_(i,j) = fourPointThinupdn(i, j); } else { throw PsimagLite::RuntimeError("Parallel4PointDs: No matching mode_ found \n"); } } SizeType tasks() const { return pairs_.size(); } private: FieldType fourPointDelta(SizeType i, SizeType j, const typename PsimagLite::Vector::Type& gammas) const { SizeType hs = model_.hilbertSize(0); SizeType nx = 0; while (hs) { hs>>=1; nx++; } nx /= 2; SizeType site = 0; // C_{gamma0,up} PsimagLite::String str(""; //const SparseMatrixType& opC3 = model.naturalOperator("c",site,gammas[3] + 0*nx).data; BraketType braket(model_, str); return fourpoint_(i,i+1,j,j+1,braket); } FieldType fourPointThin(SizeType i, SizeType j) const { SizeType number1 = fpd_.n_row()/2; SizeType spin0 = i/number1; SizeType tmp = i % number1; SizeType number2 = sqrt(number1); SizeType thini2 = tmp/number2; SizeType thini1 = tmp % number2; SizeType spin1 = j/number1; tmp = j % number1; SizeType thinj2 = tmp/number2; SizeType thinj1 = tmp % number2; //int sign = gammas[0] - 1; SizeType site = 0; // c(i1,orb1,spin0) PsimagLite::String str = ""; //SparseMatrixType O4 = model_.naturalOperator("c",site,1-spin1).data; // SizeType val = spin0 + spin1 + 1; // int signTerm = (val & 1) ? sign : 1; // FieldType fourval = fourpoint_(thini1,thini2,thinj1,thinj2,braket); // return signTerm*fourval; BraketType braket(model_, str); FieldType fourval = fourpoint_(thini1,thini2,thinj1,thinj2,braket); return fourval; } FieldType fourPointThinupdn(SizeType i, SizeType j) const { SizeType number1 = fpd_.n_row()/2; SizeType spin0 = i/number1; SizeType tmp = i % number1; SizeType number2 = sqrt(number1); SizeType thini2 = tmp/number2; SizeType thini1 = tmp % number2; SizeType spin1 = j/number1; tmp = j % number1; SizeType thinj2 = tmp/number2; SizeType thinj1 = tmp % number2; //int sign = gammas[0] - 1; SizeType site = 0; // c(i1,orb1,spin0) PsimagLite::String str = ""; BraketType braket(model_, str); FieldType fourval = fourpoint_(thini1,thini2,thinj1,thinj2,braket); return fourval; } MatrixType& fpd_; const FourPointCorrelationsType& fourpoint_; const ModelType& model_; const typename PsimagLite::Vector::Type& gammas_; const typename PsimagLite::Vector::Type& pairs_; const FourPointModeEnum mode_; }; // class Parallel4PointDs } // namespace Dmrg /*@}*/ #endif // PARALLEL_4POINT_DS_H dmrgpp-6.02/src/Engine/ParallelDensityMatrix.h000066400000000000000000000163171414604301300213640ustar00rootroot00000000000000/* Copyright (c) 2009,-2012 UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /** \file ParallelDensityMatrix.h */ #ifndef PARALLEL_DENSITY_MATRIX_H #define PARALLEL_DENSITY_MATRIX_H #include "ProgramGlobals.h" #include "Concurrency.h" namespace Dmrg { template class ParallelDensityMatrix { typedef typename BlockMatrixType::BuildingBlockType BuildingBlockType; typedef typename TargetVectorType::value_type DensityMatrixElementType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef PsimagLite::Concurrency ConcurrencyType; public: typedef typename PsimagLite::Real::Type RealType; ParallelDensityMatrix(const TargetVectorType& target, const BasisWithOperatorsType& pBasis, const BasisWithOperatorsType& pBasisSummed, const BasisType& pSE, ProgramGlobals::DirectionEnum direction, SizeType m, RealType weight, BuildingBlockType& matrixBlock) : target_(target), pBasis_(pBasis), pBasisSummed_(pBasisSummed), pSE_(pSE), direction_(direction), m_(m), weight_(weight), matrixBlock_(matrixBlock), hasMpi_(PsimagLite::Concurrency::hasMpi()) {} SizeType tasks() const { return pBasis_.partition(m_+1) - pBasis_.partition(m_); } void doTask(SizeType taskNumber, SizeType threadNum) { SizeType start = pBasis_.partition(m_); SizeType length = pBasis_.partition(m_+1) - start; SizeType ieff = taskNumber + start; for (SizeType j = 0; j < length; ++j) { matrixBlock_(taskNumber,j) += densityMatrixExpand(direction_, ieff, j+start, target_)*weight_; } } private: DensityMatrixElementType densityMatrixExpand(ProgramGlobals::DirectionEnum direction, SizeType alpha1, SizeType alpha2, const TargetVectorType& v) { if (direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) return densityMatrixExpandSystem(alpha1, alpha2, v); else return densityMatrixExpandEnviron(alpha1, alpha2, v); } DensityMatrixElementType densityMatrixExpandEnviron(SizeType alpha1, SizeType alpha2, const TargetVectorType& v) { SizeType ns = pBasisSummed_.size(); SizeType total = pBasisSummed_.size(); DensityMatrixElementType sum=0; SizeType x2 = alpha2*ns; SizeType x1 = alpha1*ns; for (SizeType beta=0;beta class ParallelHamiltonianConnection { typedef typename HamiltonianConnectionType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::OperatorStorageType OperatorStorageType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef PsimagLite::Concurrency ConcurrencyType; typedef typename HamiltonianConnectionType::VectorType VectorType; typedef typename HamiltonianConnectionType::LinkType LinkType; typedef typename ModelHelperType::Aux AuxType; public: ParallelHamiltonianConnection(VectorType& x, const VectorType& y, const HamiltonianConnectionType& hc, const AuxType& aux) : x_(x), y_(y), hc_(hc), aux_(aux), xtemp_(ConcurrencyType::storageSize(ConcurrencyType::codeSectionParams.npthreads)) { hc_.clearThreadSelves(); } void doTask(SizeType taskNumber ,SizeType threadNum) { if (xtemp_[threadNum].size() != x_.size()) xtemp_[threadNum].resize(x_.size(),0.0); if (taskNumber == 0) { hc_.modelHelper().hamiltonianLeftProduct(xtemp_[threadNum], y_, aux_); // const SparseMatrixType& hamiltonian = hc_.modelHelper().leftRightSuper(). // left().hamiltonian().getCRS(); // hc_.kroneckerDumper().push(true, hamiltonian, y_); return; } if (taskNumber == 1) { hc_.modelHelper().hamiltonianRightProduct(xtemp_[threadNum], y_, aux_); // const SparseMatrixType& hamiltonian = hc_.modelHelper().leftRightSuper(). // right().hamiltonian().getCRS(); // hc_.kroneckerDumper().push(false, hamiltonian, y_); return; } assert(taskNumber > 1); taskNumber -= 2; OperatorStorageType const* A = 0; OperatorStorageType const* B = 0; const LinkType& link2 = hc_.getKron(&A, &B, taskNumber); hc_.modelHelper().fastOpProdInter(xtemp_[threadNum], y_, A->getCRS(), B->getCRS(), link2, aux_); // hc_.kroneckerDumper().push(A->getCRS(), // B->getCRS(), // link2.value, // link2.fermionOrBoson, // y_); } SizeType tasks() const { return hc_.tasks() + 2; } void sync() { SizeType total = 0; for (SizeType threadNum = 0; threadNum < xtemp_.size(); threadNum++) if (xtemp_[threadNum].size() == x_.size()) total++; typename PsimagLite::Vector::Type x(x_.size(),0); for (SizeType threadNum = 0; threadNum < total; threadNum++) for (SizeType i=0;i void sync(SomeConcurrencyType& conc,SomeOtherConcurrencyType& conc2) { conc.reduce(x_,conc2); } private: VectorType& x_; const VectorType& y_; const HamiltonianConnectionType& hc_; const AuxType& aux_; typename PsimagLite::Vector::Type xtemp_; }; } #endif // PARALLELHAMILTONIANCONNECTION_H dmrgpp-6.02/src/Engine/ParallelTriDiag.h000066400000000000000000000134641414604301300201030ustar00rootroot00000000000000/* Copyright (c) 2009,-2014 UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /** \file ParallelTriDiag.h */ #ifndef PARALLEL_TRIDIAG_H #define PARALLEL_TRIDIAG_H #include "Mpi.h" #include "Concurrency.h" namespace Dmrg { template class ParallelTriDiag { typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Real::Type RealType; typedef typename LanczosSolverType::TridiagonalMatrixType TridiagonalMatrixType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef PsimagLite::Concurrency ConcurrencyType; public: typedef typename PsimagLite::Vector::Type TargetVectorType; typedef PsimagLite::Matrix MatrixComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorMatrixFieldType; ParallelTriDiag(const VectorWithOffsetType& phi, VectorMatrixFieldType& T, VectorMatrixFieldType& V, typename PsimagLite::Vector::Type& steps, const LeftRightSuperType& lrs, RealType currentTime, const ModelType& model, InputValidatorType& io) : phi_(phi), T_(T), V_(V), steps_(steps), lrs_(lrs), currentTime_(currentTime), model_(model), io_(io) {} SizeType tasks() const { return phi_.sectors(); } void doTask(SizeType ii, SizeType) { SizeType i = phi_.sector(ii); steps_[ii] = triDiag(phi_,T_[ii],V_[ii],i); } private: SizeType triDiag(const VectorWithOffsetType& phi, MatrixComplexOrRealType& T, MatrixComplexOrRealType& V, SizeType i0) { const SizeType p = lrs_.super().findPartitionNumber(phi.offset(i0)); typename ModelHelperType::Aux aux(p, lrs_); typename ModelType::HamiltonianConnectionType hc(lrs_, ModelType::modelLinks(), currentTime_, model_.superOpHelper()); typename LanczosSolverType::MatrixType lanczosHelper(model_, hc, aux); typename LanczosSolverType::ParametersSolverType params(io_,"Tridiag"); params.lotaMemory = true; LanczosSolverType lanczosSolver(lanczosHelper, params); TridiagonalMatrixType ab; SizeType total = phi.effectiveSize(i0); TargetVectorType phi2(total); phi.extract(phi2,i0); lanczosSolver.decomposition(phi2,ab); ab.buildDenseMatrix(T); lanczosSolver.lanczosVectorsSwap(V); return lanczosSolver.steps(); } const VectorWithOffsetType& phi_; VectorMatrixFieldType& T_; VectorMatrixFieldType& V_; typename PsimagLite::Vector::Type& steps_; const LeftRightSuperType& lrs_; RealType currentTime_; const ModelType& model_; InputValidatorType& io_; }; // class ParallelTriDiag } // namespace Dmrg /*@}*/ #endif // PARALLEL_TRIDIAG_H dmrgpp-6.02/src/Engine/ParametersDmrgSolver.h000066400000000000000000000540571414604301300212160ustar00rootroot00000000000000/* Copyright (c) 2009-2014-2019, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersDmrgSolver.h * * Contains the parameters for the DmrgSolver class and implements functionality to * read them from a JSON file * */ #ifndef PARAMETERSDMRGSOLVER_HEADER_H #define PARAMETERSDMRGSOLVER_HEADER_H #include "TypeToString.h" #include "Vector.h" #include "Provenance.h" #include "Io/IoSelector.h" #include "PsimagLite.h" #include "RestartStruct.h" #include "FiniteLoop.h" #include "Io/IoSerializerStub.h" #include "Recovery.h" #include "ProgressIndicator.h" #include #include "Options.h" #include #include #include "AlgebraicStringToNumber.h" namespace Dmrg { /* PSIDOC ParametersDmrgSolver \begin{itemize} \item[Model=string] A string indicating the model, be it HubbardOneBand Heisenberg, etc. \item[version=string] A mandatory string that is read and ignored. Usually contains the result of doing \verb!git rev-parse HEAD!. \item[outputfile=string] The root for the output file. If IoNg is used the output file will be added the hdf5 extension. If IoNg is not used then no extension will be added. This file will be created if non-existent, and if it exits it will be truncated. \item[InfiniteLoopKeptStates] If an integer then this is the \emph{m} value for the infinite algorithm. Else it is the name of the filename to restart from. If the filename is numeric, use double quotes around it to have it interpreted as a string. \item[FiniteLoops=vector] A series of space-separated numbers. More than one space is allowed. The first number is the number of finite algorithm movements, followed by series of three numbers for each movement. Of the three numbers, the first is the number of sites to go forward if positive or backward if negative. The second number is the \emph{m} for this movement and the last number is either 0 or 1, 0 will not save state data to disk and 1 will save all data to be able to calculate observables. The first movement starts from where the infinite loop left off, at the middle of the lattice. See the below for more information and examples on Finite Loops. \end{itemize} */ template struct ParametersDmrgSolver { typedef ParametersDmrgSolver ThisType; typedef typename QnType::PairSizeType PairSizeType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorFieldType; typedef PsimagLite::Matrix MatrixFieldType; typedef PsimagLite::Matrix MatrixStringType; typedef PsimagLite::Vector::Type VectorStringType; typedef std::pair PairRealSizeType; typedef typename PsimagLite::Vector::Type VectorFiniteLoopType; typedef Options OptionsType; SizeType nthreads; SizeType nthreads2; SizeType sitesPerBlock; SizeType maxMatrixRankStored; SizeType keptStatesInfinite; SizeType dumperBegin; SizeType dumperEnd; SizeType precision; SizeType numberOfExcited; SizeType gemmRnb; SizeType opOnSiteThreshold; bool autoRestart; PairRealSizeType truncationControl; PsimagLite::String filename; PsimagLite::String version; OptionsType options; PsimagLite::String model; PsimagLite::String insitu; PsimagLite::String recoverySave; PsimagLite::String printHamiltonianAverage; PsimagLite::String saveDensityMatrixEigenvalues; PsimagLite::String findSymmetrySector; RestartStruct checkpoint; typename QnType::VectorQnType adjustQuantumNumbers; VectorFiniteLoopType finiteLoop; FieldType degeneracyMax; FieldType denseSparseThreshold; void write(PsimagLite::String label, PsimagLite::IoSerializer& ioSerializer) const { PsimagLite::String root = label; ioSerializer.createGroup(root); ioSerializer.write(root + "/nthreads", nthreads); ioSerializer.write(root + "/nthreads2", nthreads2); ioSerializer.write(root + "/sitesPerBlock", sitesPerBlock); ioSerializer.write(root + "/maxMatrixRankStored", maxMatrixRankStored); ioSerializer.write(root + "/keptStatesInfinite", keptStatesInfinite); ioSerializer.write(root + "/numberOfExcited", numberOfExcited); ioSerializer.write(root + "/gemmRnb", gemmRnb); ioSerializer.write(root + "/dumperBegin", dumperBegin); ioSerializer.write(root + "/dumperEnd", dumperEnd); ioSerializer.write(root + "/precision", precision); ioSerializer.write(root + "/truncationControl", truncationControl); ioSerializer.write(root + "/filename", filename); ioSerializer.write(root + "/version", version); options.write(root + "/options", ioSerializer); ioSerializer.write(root + "/model", model); ioSerializer.write(root + "/insitu", insitu); ioSerializer.write(root + "/recoverySave", recoverySave); ioSerializer.write(root + "/printHamiltonianAverage", printHamiltonianAverage); ioSerializer.write(root + "/saveDensityMatrixEigenvalues", saveDensityMatrixEigenvalues); checkpoint.write(label + "/checkpoint", ioSerializer); ioSerializer.write(root + "/adjustQuantumNumbers", adjustQuantumNumbers); ioSerializer.write(root + "/finiteLoop", finiteLoop); ioSerializer.write(root + "/degeneracyMax", degeneracyMax); ioSerializer.write(root + "/denseSparseThreshold", denseSparseThreshold); ioSerializer.write(root + "/opOnSiteThreshold", opOnSiteThreshold); ioSerializer.write(root + "/findSymmetrySector", findSymmetrySector); } //! Read Dmrg parameters from inp file ParametersDmrgSolver(InputValidatorType& io, PsimagLite::String sOptions, bool earlyExit = false, bool isObserveCode = false) : nthreads(1), nthreads2(1), sitesPerBlock(1), maxMatrixRankStored(0), keptStatesInfinite(0), dumperBegin(0), dumperEnd(0), precision(6), numberOfExcited(1), gemmRnb(0), opOnSiteThreshold(0), autoRestart(false), options("SolverOptions=", io), recoverySave(""), adjustQuantumNumbers(0, QnType(false, VectorSizeType(), PairSizeType(0, 0), 0)), degeneracyMax(1e-12), denseSparseThreshold(0.2) { if (options.isSet("minimizeDisk")) options += ",noSaveWft,noSaveStacks,noSaveData"; io.readline(model,"Model="); options += sOptions; io.readline(version,"Version="); bool ciRun = options.isSet("ciRun"); try { io.readline(filename,"OutputFile="); ciRun = false; } catch (std::exception&) { filename = io.filename(); } filename = filenameFromRootname(filename, options.isSet("addPidToOutputName"), ciRun); if (earlyExit) return; readFiniteLoops(io,finiteLoop); if (options.isSet("hasQuantumNumbers")) { PsimagLite::String s = "*** FATAL: hasQuantumNumbers "; s += "option is no longer allowed in input file\n"; throw PsimagLite::RuntimeError(s.c_str()); } VectorSizeType tmpVector; try { io.read(tmpVector,"TargetQuantumNumbers"); } catch (std::exception&){} if (tmpVector.size()>0) { PsimagLite::String s = "*** FATAL: TargetQuantumNumbers "; s += "is no longer allowed in input file\n"; throw PsimagLite::RuntimeError(s.c_str()); } tmpVector.clear(); try { io.read(tmpVector,"AdjustQuantumNumbers"); } catch (std::exception&) {} if (tmpVector.size() > 0) QnType::adjustQns(adjustQuantumNumbers, tmpVector, modeFromModel(model)); truncationControl = PairRealSizeType(-1.0,keptStatesInfinite); try { PsimagLite::String s(""); VectorStringType tokens; io.readline(s,"TruncationTolerance="); PsimagLite::split(tokens, s, ","); truncationControl.first = atof(tokens[0].c_str()); if (tokens.size() > 1) truncationControl.second = atoi(tokens[1].c_str()); warnIfFiniteMlessThanMin(finiteLoop, truncationControl.second); if (!options.isSet("twositedmrg")) { std::cerr<<"WARNING: TruncationTolerance used without twositedmrg\n"; std::cout<<"WARNING: TruncationTolerance used without twositedmrg\n"; } } catch (std::exception&) {} try { io.readline(nthreads, "Threads="); } catch (std::exception&) {} try { io.readline(nthreads2, "ThreadsLevelTwo="); } catch (std::exception&) {} if (nthreads == 0 || nthreads2 == 0) { PsimagLite::String s (__FILE__); s += "\nFATAL: nthreads and nthreads2 cannot be zero\n"; throw PsimagLite::RuntimeError(s.c_str()); } try { io.readline(gemmRnb, "GemmRnb="); } catch (std::exception&) {} insitu = ""; try { io.readline(insitu,"insitu="); } catch (std::exception&) {} try { io.readline(sitesPerBlock,"SitesPerBlock="); } catch (std::exception&) {} try { io.readline(maxMatrixRankStored,"MaxMatrixRankStored="); } catch (std::exception&) {} try { io.readline(numberOfExcited, "NumberOfExcited="); } catch (std::exception&) {} try { io.readline(degeneracyMax,"DegeneracyMax="); } catch (std::exception&) {} try { io.readline(recoverySave,"RecoverySave="); } catch (std::exception&) {} try { io.readline(dumperBegin,"KroneckerDumperBegin="); } catch (std::exception&) {} try { io.readline(dumperEnd,"KroneckerDumperEnd="); } catch (std::exception&) {} if (options.isSet("KroneckerDumper")) { if (options.isSet("MatrixVectorStored")) { PsimagLite::String msg("FATAL: KroneckerDumper cannot run with "); throw PsimagLite::RuntimeError(msg + "MatrixVectorStored\n"); } } else { if (dumperBegin > 0 || dumperEnd > 0) { PsimagLite::String msg("FATAL: KroneckerDumperBegin|End needs "); throw PsimagLite::RuntimeError(msg + "KroneckerDumper in SolverOptions\n"); } } try { io.readline(precision,"Precision="); } catch (std::exception&) {} try { io.readline(denseSparseThreshold, "DenseSparseThreshold="); } catch (std::exception&) {} if (isObserveCode) return; bool hasRestart = false; PsimagLite::String restartFrom; bool hasRestartFrom = getValueIfPresent(restartFrom, "RestartFilename=", io); PsimagLite::String infLoops = "0"; bool infLoopsIsAnInt = true; try { io.readline(infLoops, "InfiniteLoopKeptStates="); std::istringstream iss(infLoops); iss >> keptStatesInfinite; infLoopsIsAnInt = (iss.eof()); } catch (std::exception&) { keptStatesInfinite = 0; } try { io.readline(printHamiltonianAverage, "PrintHamiltonianAverage="); } catch (std::exception&) {} try { io.readline(saveDensityMatrixEigenvalues, "SaveDensityMatrixEigenvalues="); } catch (std::exception&) {} try { io.readline(opOnSiteThreshold, "OpOnSiteThreshold="); } catch (std::exception&) {} if (options.isSet("findSymmetrySector")) findSymmetrySector="1==1"; PsimagLite::String tmpString; try { io.readline(tmpString, "FindSymmetrySector="); } catch (std::exception&) {} if (findSymmetrySector != "" && tmpString != "") err(PsimagLite::String("Either findSymmetrySector in SolverOptions or ") + PsimagLite::String("FindSymmetrySector= line or neither of them, but not both\n")); if (tmpString != "") findSymmetrySector = tmpString; if (options.isSet("restart")) { if (!infLoopsIsAnInt and hasRestartFrom) { PsimagLite::String tmp = "FATAL: RestartFilename found in input "; err(tmp + "while InfiniteLoopKeptStates not an int\n"); } checkpoint.setFilename(""); if (!infLoopsIsAnInt) { checkpoint.setFilename(infLoops); // remove double quotes if present SizeType begin = (infLoops[0] == '"') ? 1 : 0; SizeType last = infLoops.length(); assert(last > 0); --last; SizeType end = (infLoops[last] == '"') ? last : last + 1; checkpoint.setFilename(infLoops.substr(begin, end - begin)); } if (hasRestartFrom) checkpoint.setFilename(restartFrom); if (checkpoint.filename() == "") { PsimagLite::String tmp = "FATAL: RestartFilename NOT found in input "; err(tmp + "AND InfiniteLoopKeptStates is an int\n"); } checkpoint.setFilename(filenameFromRootname(checkpoint.filename(), false, false)); checkRestart(filename, checkpoint.filename(), options); hasRestart = true; } else { if (hasRestartFrom) { PsimagLite::String tmp = "FATAL: RestartFilename found in input "; err(tmp + "but no restart found in SolverOptions.\n"); } if (!infLoopsIsAnInt) { PsimagLite::String tmp = "FATAL: InfiniteLoopKeptStates not an integer "; err(tmp + "but no restart found in SolverOptions.\n"); } if (keptStatesInfinite == 0) { PsimagLite::String tmp = "FATAL: InfiniteLoopKeptStates must be "; err(tmp + "a positive integer for a NON restart run.\n"); } } Recovery::checkOptions(recoverySave, options); Recovery::autoRestart(*this); if (hasRestart) { checkpoint.read(io); } } template static bool getValueIfPresent(PsimagLite::String& str, PsimagLite::String label, SomeInputType& io) { try { io.readline(str, label); return true; } catch (std::exception&) { return false; } } template static void readFiniteLoops(SomeInputType& io, VectorFiniteLoopType& vfl) { if (io.version() < io.versionAinur()) { VectorFieldType tmpVec; io.read(tmpVec,"FiniteLoops"); readFiniteLoops_(io,vfl,tmpVec); } else { MatrixStringType tmpMat; io.read(tmpMat, "FiniteLoops"); readFiniteLoops_(io, vfl, tmpMat); } } template static void readFiniteLoops_(SomeInputType& io, VectorFiniteLoopType& vfl, const VectorFieldType& tmpVec) { for (SizeType i = 0; i < tmpVec.size(); i += 3) { typename PsimagLite::Vector::Type xTmp(3); assert(2 + i < tmpVec.size()); for (SizeType j = 0; j < xTmp.size(); ++j) xTmp[j] = static_cast(tmpVec[i+j]); FiniteLoop fl(xTmp[0], xTmp[1], xTmp[2]); vfl.push_back(fl); } readFiniteLoops_(io, vfl); } template static void readFiniteLoops_(SomeInputType& io, VectorFiniteLoopType& vfl, const MatrixStringType& tmpMat) { SizeType numberOfSites = 0; io.readline(numberOfSites, "TotalNumberOfSites="); std::cout<<"FiniteLoops=["; typedef AlgebraicStringToNumber AlgebraicStringToNumberType; AlgebraicStringToNumberType algebraicStringToNumber("FiniteLoops", numberOfSites); for (SizeType i = 0; i < tmpMat.rows(); ++i) { const int length = algebraicStringToNumber.procLength(tmpMat(i, 0)); SizeType m = PsimagLite::atof(tmpMat(i, 1)); SizeType bits = PsimagLite::atof(tmpMat(i, 2)); FiniteLoop fl(length, m, bits); vfl.push_back(fl); } readFiniteLoops_(io, vfl); } template static void readFiniteLoops_(SomeInputType& io, VectorFiniteLoopType& vfl) { SizeType repeat = 0; try { io.readline(repeat,"RepeatFiniteLoopsTimes="); } catch (std::exception&) {} SizeType fromFl = 0; try { io.readline(fromFl,"RepeatFiniteLoopsFrom="); } catch (std::exception&) {} if (vfl.size() == 0) { std::cerr<<"WARNING: No finite loops found\n"; } SizeType upToFl = vfl.size()-1; try { io.readline(upToFl,"RepeatFiniteLoopsTo="); } catch (std::exception&) {} if (upToFl >= vfl.size()) { PsimagLite::String s (__FILE__); s += "\nFATAL: RepeatFiniteLoopsTo=" + ttos(upToFl); s += " is larger than current finite loops\n"; s += "\nMaximum is " + ttos(vfl.size())+ "\n"; throw PsimagLite::RuntimeError(s.c_str()); } if (fromFl > upToFl) { PsimagLite::String s (__FILE__); s += "\nFATAL: RepeatFiniteLoopsFrom=" + ttos(fromFl); s += " is larger than RepeatFiniteLoopsTo\n"; s += "\nMaximum is " + ttos(upToFl)+ "\n"; throw PsimagLite::RuntimeError(s.c_str()); } upToFl++; for (SizeType i=0;i= minM) continue; std::cout<<"WARNING: Triplet number "<= 48 && f[j] <= 57) tmp += f[j]; else break; } const SizeType len = tmp.length(); PsimagLite::String result = tmp; for (SizeType i = 0; i < len; ++i) { SizeType j = len - i; result[i] = tmp[j]; } return result; } }; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/ParametersModelBase.h000066400000000000000000000006031414604301300207510ustar00rootroot00000000000000#ifndef PARAMETERSMODELBASE_H #define PARAMETERSMODELBASE_H #include "Io/IoNg.h" namespace Dmrg { template class ParametersModelBase { public: template ParametersModelBase(IoInputType&, bool) {} void write(PsimagLite::String, PsimagLite::IoNg::Out::Serializer&) const {} }; } #endif // PARAMETERSMODELBASE_H dmrgpp-6.02/src/Engine/PersistentSvd.h000066400000000000000000000022451414604301300177130ustar00rootroot00000000000000#ifndef PERSISTENTSVD_H #define PERSISTENTSVD_H #include "Vector.h" namespace Dmrg { // needef for WFT template class PersistentSvd { public: typedef typename VectorMatrixType::value_type MatrixType; typedef typename VectorVectorRealType::value_type VectorRealType; typedef typename VectorQnType::value_type QnType; PersistentSvd(SizeType n) : vts_(n), s_(n), qns_(n, QnType::zero()) {} void clear() { vts_.clear(); s_.clear(); qns_.clear(); } MatrixType& vts(SizeType igroup) { assert(igroup < vts_.size()); return vts_[igroup]; } VectorRealType& s(SizeType igroup) { assert(igroup < s_.size()); return s_[igroup]; } QnType& qns(SizeType igroup) { assert(igroup < qns_.size()); return qns_[igroup]; } const VectorMatrixType& vts() const { return vts_; } const VectorVectorRealType& s() const { return s_; } const VectorQnType& qns() const { return qns_; } private: VectorMatrixType vts_; // needed for WFT typename PsimagLite::Vector::Type s_; // needed for WFT VectorQnType qns_; // needed for WFT }; } #endif // PERSISTENTSVD_H dmrgpp-6.02/src/Engine/PrinterInDetail.h000066400000000000000000000040051414604301300201270ustar00rootroot00000000000000#ifndef PRINTERINDETAIL_H #define PRINTERINDETAIL_H #include namespace Dmrg { template class PrinterInDetail { typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::QnType QnType; typedef typename BasisWithOperatorsType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; public: PrinterInDetail(const LeftRightSuperType& lrs, bool extended) : lrs_(lrs), extended_(extended) {} void print(std::ostream& os, PsimagLite::String msg) const { if (!extended_) return; printOneSide(os, "left", lrs_.left()); printOneSide(os, "right", lrs_.right()); } private: void printOneSide(std::ostream& os, PsimagLite::String msg, const BasisWithOperatorsType& basis) const { SizeType sites = basis.block().size(); os<<"Side="< 0); SizeType site = basis.block()[sites - 1]; SizeType end = basis.operatorsPerSite(0); SizeType siteC = site; if (msg == "right") { assert(site >= basis.block()[0]); siteC = site - basis.block()[0]; } os<<"Operators at site "< class ProcOmegas { public: typedef typename PsimagLite::Real::Type RealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename PsimagLite::Vector::Type VectorStringType; typedef typename PsimagLite::Vector::Type VectorBoolType; typedef PsimagLite::PsiApp ApplicationType; typedef PsimagLite::InputNg InputNgType; typedef OmegasFourier OmegasFourierType; typedef typename OmegasFourierType::VectorComplexType VectorComplexType; static const SizeType MAX_LINE_SIZE = 409600; class Qdata { public: Qdata(SizeType n) : data_(n, nullptr) {} Qdata() {} void resize(SizeType n) { if (data_.size() != 0) err("Qdata::resize only supported for empty objects\n"); data_.resize(n, nullptr); } void set(SizeType ind, const VectorComplexType& v) { if (data_.size() <= ind) err("Qdata::set out of bounds\n"); if (data_[ind] != nullptr) err("Qdata::set already set\n"); data_[ind] = new VectorComplexType(v); } const VectorComplexType& get(SizeType ind) const { if (data_.size() <= ind) err("Qdata::get out of bounds\n"); if (data_[ind] == nullptr) err("Qdata::get empty location\n"); return *data_[ind]; } private: typename PsimagLite::Vector::Type data_; }; ProcOmegas(typename InputNgType::Readable& io, SizeType precision, bool skipFourier, PsimagLite::String rootIname, PsimagLite::String rootOname, const OmegaParamsType& omegaParams) : rootIname_(rootIname), rootOname_(rootOname), omegaParams_(omegaParams), omegasFourier_(skipFourier, io), numberOfSites_(0) { // set precision here FIXME TODO io.readline(numberOfSites_, "TotalNumberOfSites"); //const SizeType centralSite = getCentralSite(); } void run() { VectorRealType values1(numberOfSites_); VectorRealType values2(numberOfSites_); VectorBoolType defined(numberOfSites_); std::ofstream* fout = nullptr; if (rootOname_ != "") fout = new std::ofstream(rootOname_); if (!fout || !*fout || fout->bad() || !fout->good()) err("writeSpaceValues: Cannot write to " + rootOname_ + "\n"); qData_.resize(omegaParams_.total() - omegaParams_.offset()); for (SizeType i = omegaParams_.offset(); i < omegaParams_.total(); ++i) { const RealType omega = omegaParams_.omega(i); procCommon(i, omega, values1, values2, defined, fout); qData_.set(i - omegaParams_.offset(), omegasFourier_.data()); } if (fout) fout->close(); delete fout; fout = nullptr; } void printPgfplots(PsimagLite::String foutname) { std::ofstream fout(foutname); if (!fout || fout.bad() || !fout.good()) err("writeSpaceValues: Cannot write to " + foutname + "\n"); SizeType numberOfQs = 0; for (SizeType i = omegaParams_.offset(); i < omegaParams_.total(); ++i) { const RealType omega = omegaParams_.omega(i); const VectorComplexType& v = qData_.get(i - omegaParams_.offset()); if (i == omegaParams_.offset()) { assert(numberOfQs == 0); numberOfQs = v.size(); } else if (numberOfQs != v.size()) { err("INTERNAL ERROR: Omega set with non equal number of q points\n"); } for (SizeType m = 0; m < numberOfQs; ++m) { RealType q = omegasFourier_.q(m); fout<= numberOfSites_) err("correctionVectorRead: Site " + ttos(site) + " is too big\n"); if (c == 1) v1[site] = PsimagLite::atof(tokens[1]); else if (c == 2) v2[site] = PsimagLite::atof(tokens[1]); else err("correctionVectorRead: counter c wrong in " + inFile + "\n"); defined[site] = true; } status = "clear"; } delete[] ss; ss = 0; checkSites(defined, inFile); //print LOGFILEOUT "$0: correctionVectorRead maxsite= $maxSite\n"; } void checkSites(const VectorBoolType& defined, PsimagLite::String inFile) { const SizeType n = defined.size(); for (SizeType i = 0; i < n; ++i) if (!defined[i]) err("Undefined value for site= " + ttos(i) + " file= " + inFile + "\n"); } PsimagLite::String inputfile_; PsimagLite::String rootIname_; PsimagLite::String rootOname_; const OmegaParamsType& omegaParams_; OmegasFourierType omegasFourier_; SizeType numberOfSites_; Qdata qData_; }; } #endif // PROCOMEGAS_H dmrgpp-6.02/src/Engine/ProgramGlobals.h000066400000000000000000000140351414604301300200110ustar00rootroot00000000000000/* Copyright (c) 2009-2016-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ProgramGlobals.h * * * */ #ifndef PROGRAM_LIMITS_H #define PROGRAM_LIMITS_H #include "PsimagLite.h" #include "Vector.h" #include "Utils.h" #include "../../src/Version.h" namespace Dmrg { struct ProgramGlobals { static SizeType maxElectronsOneSpin; static bool oldChangeOfBasis; static const PsimagLite::String license; static const SizeType MAX_LPS = 1000; enum class DirectionEnum {INFINITE, EXPAND_ENVIRON, EXPAND_SYSTEM}; enum class ConnectionEnum {SYSTEM_SYSTEM, SYSTEM_ENVIRON, ENVIRON_SYSTEM, ENVIRON_ENVIRON}; enum class SysOrEnvEnum {SYSTEM, ENVIRON}; enum class FermionOrBosonEnum {FERMION, BOSON}; enum class VerboseEnum {NO, YES}; static FermionOrBosonEnum multipy(const FermionOrBosonEnum& a, const FermionOrBosonEnum& b) { if (a == FermionOrBosonEnum::BOSON) return b; return (b == FermionOrBosonEnum::BOSON) ? FermionOrBosonEnum::FERMION : FermionOrBosonEnum::BOSON; } static void init(SizeType maxElectronsOneSpin_) { if (maxElectronsOneSpin == maxElectronsOneSpin_) return; if (maxElectronsOneSpin != 0) { std::cerr< 0) { x >>= 1; counter++; } return (counter == 0) ? counter : counter - 1; } static SizeType volumeOf(const PsimagLite::Vector::Type& v) { assert(v.size()>0); SizeType ret = v[0]; for (SizeType i=1;i>(std::istream& is, DirectionEnum& direction) { int x = -1; is >> x; if (x == 0) { direction = DirectionEnum::INFINITE; } else if (x == 1) { direction = DirectionEnum::EXPAND_ENVIRON; } else if (x == 2) { direction = DirectionEnum::EXPAND_SYSTEM; } else { err("istream& operator>> DirectionEnum\n"); } return is; } static PsimagLite::String toString(const DirectionEnum d) { switch (d) { case DirectionEnum::INFINITE: return "INFINITE"; break; case DirectionEnum::EXPAND_ENVIRON: return "EXPAND_ENVIRON"; break; case DirectionEnum::EXPAND_SYSTEM: return "EXPAND_SYSTEM"; break; } return "UNKNOWN_DIRECTION_ENUM"; } static PsimagLite::String SYSTEM_STACK_STRING; static PsimagLite::String ENVIRON_STACK_STRING; }; // ProgramGlobals } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/Provenance.h000066400000000000000000000023251414604301300171750ustar00rootroot00000000000000#ifndef PROVENANCE_H #define PROVENANCE_H #include "../../PsimagLite/src/Version.h" #include "../Version.h" #include "AllocatorCpu.h" #include #include "AnsiColors.h" #include #include "../GitRevision.h" class Provenance { public: static PsimagLite::String compiledMicroArch() { #ifndef MICRO_ARCH #error "Please run ./configure.pl ...\n"; return ""; #else return MICRO_ARCH; #endif } static PsimagLite::String logo(PsimagLite::String appName) { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg< namespace Dmrg { template class Pvector { public: typedef typename PsimagLite::Real::Type RealType; typedef PsimagLite::Vector::Type VectorStringType; // |P0>=(c?0[0]'*c?0[1]' + c?1[0]'*c?1[1] - c?0[1]'*c?0[0] - c?1[1]'*c?1[0])|gs>*weight // The weight is optional Pvector(PsimagLite::String str) : weight_(1.0) { // find the weight first SizeType l = str.length(); if (l < 4) err("Pvector " + str + " string too short\n"); SizeType last = l - 1; if (str[last] != '>') weight_ = findWeightAndStripIt(str); vStr_.push_back(str); } void pushString(PsimagLite::String newstring) { vStr_.push_back(newstring); } void multiplyWeight(const RealType& factor) { weight_*= factor; } void sum(const Pvector& other, PsimagLite::String str) { const SizeType n = vStr_.size(); if (n == 0 || vStr_[n - 1] != "DONE" || other.vStr_.size() == 0) err("Pvector::sum\n"); PsimagLite::String def = vStr_[0] + other.vStr_[0]; vStr_.clear(); vStr_.resize(3); vStr_[0] = def; vStr_[1] = str; vStr_[2] = "DONE"; // weights?? } const PsimagLite::String& firstName() const { if (vStr_.size() == 0) err("Pvector has no name\n"); return vStr_[0]; } const PsimagLite::String& lastName() const { const SizeType n = vStr_.size(); if (n == 0) err("Pvector has no name\n"); return vStr_[n - 1]; } bool hasAnyName(PsimagLite::String str) const { const SizeType n = vStr_.size(); for (SizeType i = 0; i < n; ++i) if (vStr_[i] == str) return true; return false; } const RealType& weight() const { return weight_; } SizeType size() const { return vStr_.size(); } private: static RealType findWeightAndStripIt(PsimagLite::String str) { const SizeType l = str.length(); if (l < 4) err("Pvector " + str + " string too short\n"); PsimagLite::String buffer(""); for (SizeType i = 0; i < l; ++i) { const SizeType j = l - i - 1; const unsigned char letter = str[j]; if (letter == '*') break; if (!isAdigit(letter) && letter != '.' && letter != '+' && letter != '-') err("Wrong weight for vector " + str + "\n"); buffer += letter; } return atoi(buffer.c_str()); } static bool isAdigit(unsigned char letter) { return (letter > 47 && letter < 58); } VectorStringType vStr_; RealType weight_; }; } #endif // PVECTOR_H dmrgpp-6.02/src/Engine/Qn.h000066400000000000000000000207371414604301300154620ustar00rootroot00000000000000#ifndef QN_H #define QN_H #include "Vector.h" #include "ProgramGlobals.h" #include "Profiling.h" #include "Io/IoNg.h" #include "Array.h" namespace Dmrg { class Qn { public: enum ModalEnum { MODAL_SUM, MODAL_MODULO}; struct ModalStruct { ModalStruct() : modalEnum(MODAL_SUM), extra(0) {} template void read(PsimagLite::String str, SomeInputType& io) { io.read(modalEnum, str + "/modalEnum"); io.read(extra, str + "/extra"); } void write(PsimagLite::String str, PsimagLite::IoNgSerializer& io, typename PsimagLite::IoNgSerializer::WriteMode wM = PsimagLite::IoNgSerializer::NO_OVERWRITE) const { if (wM != PsimagLite::IoNgSerializer::ALLOW_OVERWRITE) io.createGroup(str); io.write(str+ "/modalEnum", modalEnum, wM); io.write(str + "/extra", extra, wM); } ModalEnum modalEnum; short unsigned int extra; }; typedef PsimagLite::Vector::Type VectorSizeType; typedef std::pair PairSizeType; typedef PsimagLite::Vector::Type VectorQnType; typedef PsimagLite::Vector::Type VectorModalStructType; Qn(bool odd, VectorSizeType szPlusConst, PairSizeType j, SizeType flavor) : oddElectrons(odd), other(szPlusConst), jmPair(j), flavors(flavor) { if (modalStruct.size() == szPlusConst.size()) { modularize(); return; } if (szPlusConst.size() > 0) { modalStruct.resize(szPlusConst.size()); modularize(); } if (szPlusConst.size() == 0) modalStruct.clear(); } Qn(const Qn& q1, const Qn& q2) { oddElectrons = (q1.oddElectrons ^ q2.oddElectrons); SizeType n = q1.other.size(); assert(q2.other.size() == n); assert(modalStruct.size() == n); other.resize(n); for (SizeType i = 0; i < n; ++i) { other[i] = q1.other[i] + q2.other[i]; if (modalStruct[i].modalEnum == MODAL_MODULO) other[i] %= modalStruct[i].extra; } jmPair.first = q1.jmPair.first + q2.jmPair.first; jmPair.second = q1.jmPair.second + q2.jmPair.second; flavors = q1.flavors; // ??? } template void read(PsimagLite::String str, SomeInputType& io) { io.read(oddElectrons, str + "/oddElectrons"); try { VectorSizeType otherVector; io.read(otherVector, str + "/other"); other.fromStdVector(otherVector); } catch (...) {} io.read(jmPair, str + "/jmPair"); io.read(flavors, str + "/flavors"); if (modalStruct.size() == 0) io.read(modalStruct, "modalStruct"); if (modalStruct.size() != other.size()) err("Qn::read\n"); } void write(PsimagLite::String str, PsimagLite::IoNgSerializer& io, typename PsimagLite::IoNgSerializer::WriteMode wM = PsimagLite::IoNgSerializer::NO_OVERWRITE) const { try { io.read(modalStruct, "modalStruct"); } catch(...) { io.write("modalStruct", modalStruct); } if (wM != PsimagLite::IoNgSerializer::ALLOW_OVERWRITE) io.createGroup(str); io.write(str + "/oddElectrons", oddElectrons, wM); VectorSizeType otherVector; other.toStdVector(otherVector); io.write(str + "/other", otherVector, wM); io.write(str + "/jmPair", jmPair, wM); io.write(str + "/flavors", flavors, wM); } void overwrite(PsimagLite::String str, PsimagLite::IoNgSerializer& io) const { const PsimagLite::IoNgSerializer::WriteMode mode = PsimagLite::IoNgSerializer::ALLOW_OVERWRITE; io.write(str + "/oddElectrons", oddElectrons, mode); VectorSizeType otherVector; other.toStdVector(otherVector); io.write(str + "/other", otherVector, mode); io.write(str + "/jmPair", jmPair, mode); io.write(str + "/flavors", flavors, mode); } bool operator==(const Qn& a) const { return (compare(a.other) && a.oddElectrons == oddElectrons #ifndef ENABLE_SU2 ); #else && pairEqual(a.jmPair) && flavors == a.flavors); #endif } bool operator!=(const Qn& a) const { return !(*this == a); } void scale(SizeType sites, SizeType totalSites, ProgramGlobals::DirectionEnum direction, bool isSu2) { Qn original = *this; SizeType mode = other.size(); if (isSu2 && mode != 2) err("Qn::scale() expects mode==1 for SU(2)\n"); if (direction == ProgramGlobals::DirectionEnum::INFINITE) { double ts = totalSites; for (SizeType x = 0; x < mode; ++x) { double flp = original.other[x]*sites; other[x] = static_cast(round(flp/ts)); } double flp = original.jmPair.first*sites; jmPair.first = static_cast(round(flp/ts)); } if (ifPresentOther0IsElectrons && other.size() > 0) oddElectrons = (other[0] & 1); if (!isSu2) return; assert(ifPresentOther0IsElectrons && other.size() > 0); SizeType tmp =jmPair.first; PsimagLite::String str("SymmetryElectronsSz: FATAL: Impossible parameters "); bool flag = false; if (original.oddElectrons) { if (!(tmp & 1)) { flag = true; str += "oddElectrons= " + ttos(original.oddElectrons) + " is odd "; str += "and 2j= " + ttos(tmp) + " is even."; tmp++; } } else { if (tmp & 1) { flag = true; str += "oddElectrons= " + ttos(original.oddElectrons) + " is even "; str += "and 2j= " + ttos(tmp) + " is odd."; tmp++; } } if (flag && sites == totalSites) throw PsimagLite::RuntimeError(str); jmPair.first = tmp; } template static void readVector(VectorQnType& vqns, PsimagLite::String prefix, SomeIoInType& io) { SizeType aSize = 0; io.read(aSize, prefix + "/Size"); vqns.resize(aSize, zero()); for (SizeType i = 0; i < aSize; ++i) vqns[i].read(prefix + "/" + ttos(i), io); } static void adjustQns(VectorQnType& outQns, const VectorSizeType& ints, SizeType mode) { SizeType modePlusOne = mode + 1; SizeType n = ints.size(); if (n == 0) err("adjustQns failed with n == 0\n"); if (n % modePlusOne != 0) err("adjustQns failed, n does not divide mode + 1\n"); n /= modePlusOne; outQns.resize(n, Qn(false, VectorSizeType(modePlusOne), PairSizeType(0, 0), 0)); for (SizeType i = 0; i < n; ++i) { assert(1 + i*modePlusOne < ints.size()); SizeType tmp = ints[1 + i*modePlusOne]; assert(outQns[i].other.size() > 0); outQns[i].other[0] = tmp; outQns[i].oddElectrons = (tmp & 1); for (SizeType j = 1; j < modePlusOne; ++j) { SizeType k = (j == 1) ? 0 : j; assert(k + i*modePlusOne < ints.size()); assert(j < outQns[i].other.size()); outQns[i].other[j] = ints[k + i*modePlusOne]; } } } bool isDefinedOther() const { SizeType n = other.size(); SizeType value = 1; SizeType total = sizeof(value)*8 - 1; value <<= total; for (SizeType i = 0; i < n; ++i) if (other[i] == value) return false; return true; } SizeType su2ElectronsBridge() const { assert(ifPresentOther0IsElectrons); assert(other.size() > 0); return other[0]; } static void su2ElectronsBridge(VectorSizeType& v, const VectorQnType& qns) { SizeType n = qns.size(); v.resize(n); for (SizeType i = 0; i < n; ++i) v[i] = qns[i].su2ElectronsBridge(); } static Qn zero() { SizeType value = 1; SizeType total = sizeof(value)*8 - 1; value <<= total; return Qn(false, VectorSizeType(modalStruct.size(), value), PairSizeType(0, 0), 0); } friend std::ostream& operator<<(std::ostream& os, const Qn& qn) { os<<"oddElectrons="< #include "Sort.h" #include "Concurrency.h" #include "Parallelizer.h" #include #include "Array.h" namespace std { template<> class hash { public: typedef Dmrg::Qn::VectorQnType VectorQnType; typedef Dmrg::Qn::VectorSizeType VectorSizeType; hash(bool addOdd) : addOdd_(addOdd) {} SizeType operator()(const Dmrg::Qn& qn) const { const SizeType offset = 8; // 8 bits const SizeType n = qn.other.size(); // small number SizeType key = (addOdd_ && qn.oddElectrons) ? 1 : 0; SizeType bits = (addOdd_) ? 1 : 0; for (SizeType i = 0; i < n; ++i) { SizeType val = qn.other[i]; val <<= bits; key += val; bits += offset; } return key; } private: bool addOdd_; }; } // namespace std #endif // DMRG_QN_HASH_H dmrgpp-6.02/src/Engine/Recovery.h000066400000000000000000000341771414604301300167050ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file Recovery.h * * */ #ifndef DMRG_RECOVER_H #define DMRG_RECOVER_H #include "Checkpoint.h" #include "Vector.h" #include "ProgramGlobals.h" #include "ProgressIndicator.h" #include #include #include #include "Io/IoNg.h" #include "PsimagLite.h" #include "PredicateAwesome.h" #include "OutputFileOrNot.h" namespace Dmrg { template class Recovery { typedef typename CheckpointType::ParametersType ParametersType; typedef Recovery RecoveryStaticType; typedef typename CheckpointType::ComplexOrRealType ComplexOrRealType; struct OptionSpec { OptionSpec() : keepFiles(false), maxFiles(10) {} bool keepFiles; SizeType maxFiles; }; struct OpaqueRestart { OpaqueRestart() : loopIndex(0), stepCurrent(0) {} SizeType loopIndex; SizeType stepCurrent; }; public: typedef PsimagLite::Vector::Type VectorStringType; typedef typename CheckpointType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename CheckpointType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename CheckpointType::IoType IoType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename CheckpointType::DiskOrMemoryStackType DiskOrMemoryStackType; typedef typename CheckpointType::DiskStackType DiskStackType; typedef PsimagLite::Vector::Type VectorBlockType; class SpecOptions { public: SpecOptions(bool& keepFiles, SizeType& maxFiles) : keepFiles_(keepFiles), maxFiles_(maxFiles) {} void operator()(PsimagLite::String str2) { if (str2.length() < 2) return; PsimagLite::String str = str2.substr(1, str2.length() - 1); if (str == "keep") { keepFiles_ = true; return; } if (str.length() < 3) dieWithError(str); if (str[0] == 'M' && str[1] == '=') { PsimagLite::String each = str.substr(2, str.length() - 2); maxFiles_ = atoi(each.c_str()); std::cerr<<"Recovery Max files= "<isTrue("%l", loopIndex); } void write(const TargetingType& psi, SizeType loopIndex, SizeType stepCurrent, int lastSign, OutputFileOrNot& ioOutCurrent, PsimagLite::String inputBlob) const { PsimagLite::String prefix(RecoveryStaticType::recoveryFilePrefix()); prefix += ttos(counter_++); PsimagLite::String savedName(prefix + checkpoint_.parameters().filename); ioOutCurrent.flush(); //copyFile(savedName.c_str(), ioOutCurrent.filename()); typename IoType::Out ioOut(savedName, IoType::ACC_TRUNC); PsimagLite::PsiBase64::Encode base64encode(inputBlob); ioOut.write(base64encode, "InputBase64Encoded"); writeEnergies(ioOut, ioOutCurrent.filename()); writeRecovery(ioOut, loopIndex, stepCurrent); // taken from end of finiteDmrgLoops checkpoint_.write(pS_, pE_, ioOut); ioOut.createGroup("FinalPsi"); psi.write(siteIndices_[stepCurrent], ioOut, "FinalPsi"); ioOut.write(lastSign, "LastLoopSign"); ioOut.write(PsimagLite::IsComplexNumber::True, "IsComplex"); // wft dtor wft_.write(ioOut); ioOut.close(); // checkpoint stacks checkpoint_.checkpointStacks(savedName); if (counter_ >= optionSpec_.maxFiles) counter_ = 0; } private: /* PSIDOC RecoverySave This is a comma-separated list options; whitespace isn't allowed. Supported options are as follows. no, which disables RecoverySave, and is assumed if RecoverySave= is absent from the input file. In other words, RecoverySave is disabled by default. keep, which keeps recovery files even if the run finishes normally. By default, all recovery files are deleted if the run finishes normally. M=n, where n is the maximum number of recovery files that will be saved, before the oldest file is overwritten. Defaults to 10. Any predicate awesome that can use the loop variable %l */ void procOptions() { PsimagLite::String str = checkpoint_.parameters().recoverySave; SpecOptions lambda(optionSpec_.keepFiles, optionSpec_.maxFiles); predicateAwesome_ = new PsimagLite::PredicateAwesome(str, ",", "&", &lambda); } static void dieWithError(PsimagLite::String str) { err("Syntax error for RecoverySave expression " + str + "\n"); } static void copyFile(PsimagLite::String destName, PsimagLite::String sourceName) { std::ifstream source(sourceName.c_str(), std::ios::binary); std::ofstream dest(destName.c_str(), std::ios::binary); dest << source.rdbuf(); source.close(); dest.close(); } void writeRecovery(typename IoType::Out& ioOut, SizeType loopIndex, SizeType stepCurrent) const { ioOut.createGroup("Recovery"); ioOut.write(loopIndex, "Recovery/loopIndex") ; ioOut.write(stepCurrent, "Recovery/stepCurrent"); } void readRecovery() { typename IoType::In ioIn2(checkpoint_.parameters().checkpoint.filename()); ioIn2.read(opaqueRestart_.loopIndex, "Recovery/loopIndex"); ioIn2.read(opaqueRestart_.stepCurrent, "Recovery/stepCurrent"); ioIn2.close(); } // set initial site to add to either system or environment: // this is a bit tricky and has been a source of endless bugs // basically we have pS on the left and pE on the right, // and we need to determine which site is to be added int nonRecoveryStepCurrent(ProgramGlobals::DirectionEnum direction) const { // all right, now we can get the actual site to add: SizeType sitesPerBlock = checkpoint_.parameters().sitesPerBlock; VectorSizeType siteToAdd(sitesPerBlock); // left-most site of pE for (SizeType j = 0; j < sitesPerBlock; ++j) siteToAdd[j] = pE_.block()[j]; if (direction == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON) { // right-most site of pS for (SizeType j = 0; j < sitesPerBlock; ++j) siteToAdd[j] = pS_.block()[pS_.block().size() - 1 - j]; } // now stepCurrent_ is such that sitesIndices_[stepCurrent_] = siteToAdd // so: int sc = PsimagLite::indexOrMinusOne(siteIndices_, siteToAdd); if (sc < 0) err("nonRecoveryStepCurrent(...): step current error\n"); return sc; // phew!!, that's all folks, now bugs, go away!! } void writeEnergies(typename IoType::Out& ioOut, PsimagLite::String file) const { PsimagLite::String energyLabel = checkpoint_.parameters().checkpoint.labelForEnergy(); ioOut.flush(); typename IoType::In ioIn(file); typename CheckpointType::VectorVectorRealType energies; CheckpointType::readEnergies(energies, energyLabel, ioIn); CheckpointType::writeEnergies(true, energyLabel, energies, ioOut); ioIn.close(); } PsimagLite::ProgressIndicator progress_; PsimagLite::PredicateAwesome* predicateAwesome_; OptionSpec optionSpec_; OpaqueRestart opaqueRestart_; const VectorBlockType& siteIndices_; const CheckpointType& checkpoint_; const WaveFunctionTransfType& wft_; const BasisWithOperatorsType& pS_; const BasisWithOperatorsType& pE_; mutable SizeType counter_; }; //class Recovery template class Recovery { public: static PsimagLite::String recoveryFilePrefix() { return "Recovery"; } static void checkOptions(PsimagLite::String recoverySave, const typename ParametersType::OptionsType& options) { if (recoverySave == "" || recoverySave == "no") return; if (!options.isSet("minimizeDisk")) return; err("minimizeDisk cannot be used with RecoverySave\n"); } // this function is called before the ctor static void autoRestart(ParametersType& params) { if (!params.options.isSet("recoveryEnableRead")) return; // params.filename must have been corrected already if necessary PsimagLite::String recoveryFile = getRecoveryFile(params.filename); if (recoveryFile == "") return; // * add the line RestartFilename= pointing to the data file of the // run to be restarted. params.checkpoint.setFilename(recoveryFile); //params.checkRestart(params.filename, recoveryFile, params.options, "INTERNAL="); params.autoRestart = true; } static void makeThreeParts(std::vector& parts, PsimagLite::String filename) { const PsimagLite::String prefix = recoveryFilePrefix(); const SizeType len = prefix.length(); if (filename.substr(0, len) != prefix) return; parts.push_back(prefix); PsimagLite::String buffer(""); for (SizeType i = len; i < filename.length(); ++i) { if (isAdigit(filename[i])) buffer += filename[i]; break; } if (buffer == "") return; parts.push_back(buffer); SizeType lastPartLen = filename.length() - buffer.length() - len; parts.push_back(filename.substr(len + buffer.length(), lastPartLen)); } private: static bool isAdigit(char c) { return (c > 47 && c < 58); } static void listFilesInDirectory(std::vector& files, PsimagLite::String path) { DIR* dir = 0; dirent* ent = 0; if ((dir = opendir(path.c_str())) != 0) { while ((ent = readdir(dir)) != 0) { files.push_back(ent->d_name); } closedir(dir); return; } /* could not open directory */ perror(""); } static PsimagLite::String getRecoveryFile(PsimagLite::String filename) { const PsimagLite::String prefix = recoveryFilePrefix(); std::vector files; listFilesInDirectory(files, "."); if (files.size() == 0) return ""; PsimagLite::String saved(""); SizeType max = 0; for (SizeType i = 0; i < files.size(); ++i) { std::vector parts; makeThreeParts(parts, files[i]); if (parts.size() != 3 || parts[0] != prefix || parts[2] != filename) continue; SizeType counter = atoi(parts[1].c_str()); if (counter >= max && isValidFile(files[i])) { max = counter; saved = files[i]; } } return saved; } static bool isValidFile(PsimagLite::String file) { try { PsimagLite::IoNg::In ioIn(file); ioIn.close(); return true; } catch (...) {} return false; } }; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/RegisterSignals.h000066400000000000000000000121321414604301300201770ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file RegisterSignals.h * * */ #ifndef DMRG_REGISTER_SIGNALS_H #define DMRG_REGISTER_SIGNALS_H #ifdef USE_SIGNALS #include #include "ProgressIndicator.h" #include #endif namespace Dmrg { /* PSIDOC RegisterSignals PLEASE NOTE: This is an experimental (CITATION NEEDED FIXME) feature. To use it you must add \verb!-DUSE_SIGNALS! to \verb!CPPFLAGS! in the Makefile. \subsection{SIGUSR1} Rationale: When running a process in a queue batching system the standard output and standard error might be buffered, and, thus, might not be seen until program completion. DMRG++ allows the user to store (a fragment of) the stdout and stderr buffers into a temporary file to monitor program process in situations where stdout and stderr would not normally be accessible. Sending the signal SIGUSR1 to the DMRG++ process will result in switching the state of the ProgressIndicator buffer: if the state was inactive it will become active, and viceversa. Only when the state of the ProgressIndicator buffer is active does ProgressIndicator store its stream in memory. This stream contains the standard output and standard error printed by DMRG++. When the state of the ProgressIndicator is switched back from active to inactive, DMRG++ dumps the buffer into a temporary file, and closes the buffer. The temporary file is named bufferN.txt where N is the PID of the DMRG++ process. HINT: qsig might be used to send a signal if the DMRG++ process is running in PBS or torque. CAVEATS: Leaving the buffer on for long periods of time might cause high memory consumption. The temporary buffer file is overwritten if the buffer is used more than once by the same process. The temporary buffer file is not deleted at the end of program execution. */ void registerSignals() { #ifdef USE_SIGNALS int signum = SIGUSR1; sigset_t *maskset = new sigset_t; int ret = sigemptyset(maskset); if (ret != 0) { PsimagLite::String str("RegisterSignals:"); throw PsimagLite::RuntimeError(str + " sigemptyset returned non zero\n"); } struct sigaction act; act.sa_handler = PsimagLite::ProgressIndicator::updateBuffer; act.sa_flags = 0; act.sa_mask = *maskset; ret = sigaction(signum,&act,0); delete maskset; if (ret != 0) { PsimagLite::String msg("FATAL: sigaction failed\n"); throw PsimagLite::RuntimeError(msg); } std::cerr<<"EXPERIMENTAL: Signal support enabled\n"; #endif } } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/RestartStruct.h000066400000000000000000000063651414604301300177360ustar00rootroot00000000000000#ifndef RestartStruct_H #define RestartStruct_H #include "Vector.h" #include #include "Io/IoSerializerStub.h" #include "InputNg.h" namespace Dmrg { // no longer a struct struct RestartStruct { typedef PsimagLite::Vector::Type VectorIntType; RestartStruct() : filename_(""), labelForEnergy_("Energies"), mapStages_(true), sourceTvForPsi_(-1) {} /* PSIDOC MiscRestartOptions RestartSourceTvForPsi=integer Optional. If present and non-negative, set the g.s. of this targeting to the previous run target vector indicated by this number. RestartMapStages=1 or 0 Optional. If present and 0, do not set stages for this targeting. If absent, or present and 1, set stages for this targeting to stages of previous run. RestartMappingTvs (vector of integers) Optional. If present the number of numbers to follow must be provided first, as for all vectors in InputNg legacy, and with the appropriate syntax for Ainur. Sets the i-th target vector for this targeting to the previous run target vector number MappingTvs[i], if MappingTvs[i] is non-negative; skips it if negative. */ template void read(SomeInputType& io) { try { io.readline(labelForEnergy_, "RestartLabelForEnergy="); } catch (std::exception&) {} try { io.readline(sourceTvForPsi_, "RestartSourceTvForPsi="); } catch (std::exception&) { sourceTvForPsi_ = -1; } try { int x = 1; io.readline(x, "RestartMapStages="); mapStages_ = (x > 0); } catch (std::exception&) {} try { io.read(mappingTvs_, "RestartMappingTvs"); } catch (std::exception&) {} } void setFilename(PsimagLite::String f) { filename_ = f; } PsimagLite::String filename() const { return filename_; } PsimagLite::String labelForEnergy() const { return labelForEnergy_; } bool mapStages() const { return mapStages_; } int mappingTvs(SizeType ind) const { if (mappingTvs_.size() == 0) return ind; if (ind >= mappingTvs_.size()) err("RestartStruct::mappingTvs not provided for ind= " + ttos(ind) + "\n"); return mappingTvs_[ind]; } int sourceTvForPsi() const { return sourceTvForPsi_; } void write(PsimagLite::String label, PsimagLite::IoSerializer& ioSerializer) const { PsimagLite::String root = label; ioSerializer.createGroup(root); ioSerializer.write(root + "/filename", filename_); ioSerializer.write(root + "/labelForEnergy", labelForEnergy_); ioSerializer.write(root + "/mapStages", mapStages_); ioSerializer.write(root + "/sourceTvForPsi", sourceTvForPsi_); if (mappingTvs_.size() > 0) ioSerializer.write(root + "/mappingTvs", mappingTvs_); } friend std::ostream& operator<<(std::ostream& os, const RestartStruct& c) { if (c.filename_ == "") return os; os<<"RestartStruct.filename="< 0) os<<"RestartStruct.mappingTvs="< #include #include #include "TypeToString.h" #include namespace Dmrg { class Runner { public: Runner(const PsimagLite::String& exec, const PsimagLite::String& inputRoot, const PsimagLite::String& ext) : exec_(exec),inputRoot_(inputRoot),ext_(ext) { } void operator()(SizeType i) const { PsimagLite::String s = exec_ + " " + inputRoot_ + ttos(i) + ext_; system(s.c_str()); } private: PsimagLite::String exec_,inputRoot_,ext_; }; // class Runner } // namespace Dmrg /*@}*/ #endif // RUNNER_HEADER_H dmrgpp-6.02/src/Engine/ScaledHamiltonian.h000066400000000000000000000045751414604301300204650ustar00rootroot00000000000000#ifndef SCALEDHAMILTONIAN_H #define SCALEDHAMILTONIAN_H #include "Vector.h" #include "ProgressIndicator.h" #include "ProgramGlobals.h" namespace Dmrg { // H' = c*H + d // c = oneovera = (2.0-epsilon)/Wstar // d = -oneovera*b = (2.0-epsilon)*(E0_+Wstar*0.5)/Wstar // FIXME: TODO: Constructor should only take c and d not tstruct and E0 template class ScaledHamiltonian { public: typedef typename TargetParamsType::RealType RealType; typedef typename MatrixLanczosType::ComplexOrRealType ComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorRealType; ScaledHamiltonian(const MatrixLanczosType& mat, const TargetParamsType& tstStruct, const RealType& E0, ProgramGlobals::VerboseEnum verbose) : matx_(mat), tstStruct_(tstStruct), E0_(E0) { if (tstStruct_.chebyTransform().size() != 2) err("ChebyshevTransform must be a vector of two real entries\n"); c_ = tstStruct_.chebyTransform()[0]; d_ = tstStruct_.chebyTransform()[1]; SizeType n = matx_.rows(); PsimagLite::ProgressIndicator progress("InternalMatrix"); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"H'="< class SdhsReinterpret { public: typedef PsimagLite::Vector::Type VectorSizeType; typedef typename BraketType::ModelType ModelType; typedef typename ModelType::OpaqueOp OpaqueOpType; typedef typename BraketType::RealType RealType; typedef typename BraketType::VectorAlgebraType VectorOperatorType; typedef typename BraketType::AlgebraType OperatorType; typedef typename BraketType::OneOperatorSpecType OneOperatorSpecType; typedef typename OneOperatorSpecType::SiteSplit SiteSplitType; SdhsReinterpret(const BraketType& braket, const VectorSizeType& sites) : forbidden_(false) { const SizeType n = sites.size(); if (n == 0) err("SdhsReinterpret: 0 sites not allowed (FATAL)\n"); if (n != braket.points()) err("SdhsReinterpret: braket.points != sites.size()\n"); PsimagLite::String str("<"); str += braket.bra().toString(); str += "|"; for (SizeType i = 0; i < n; ++i) { PsimagLite::String opName = braket.opName(i); str += opName; SiteSplitType siteSplit = OneOperatorSpecType::extractSiteIfAny(opName); if (!siteSplit.hasSiteString) str += "[" + ttos(sites[i])+ "]"; if (i < n - 1) str += ";"; } str += "|" + braket.ket().toString() + ">"; BraketType braket2(braket.model(), str); for (SizeType i = 0; i < n; ++i) { ops_.push_back(braket2.op(i)); if (ops_[i].isEmpty()) forbidden_ = true; } } bool forbidden() const { return forbidden_; } static RealType forbiddenValue() { return -100; } const OperatorType& op(SizeType ind) const { assert(ind < ops_.size()); return ops_[ind]; } private: bool forbidden_; VectorOperatorType ops_; }; } #endif // SDHSREINTERPRET_H dmrgpp-6.02/src/Engine/SpecForTargetingExpression.h000066400000000000000000000020061414604301300223570ustar00rootroot00000000000000#ifndef SPECFORTARGETINGEXPRESSION_H #define SPECFORTARGETINGEXPRESSION_H #include "Vector.h" #include "OneOperatorSpec.h" #include "CanonicalExpression.h" #include #include "GetBraOrKet.h" #include "ProgramGlobals.h" #include "PackIndices.h" #include "AlgebraForTargetingExpression.h" namespace Dmrg { template class SpecForTargetingExpression { public: typedef typename TargetingBaseType::VectorWithOffsetType VectorWithOffsetType; typedef AlgebraForTargetingExpression AlgebraType; typedef AlgebraType ResultType; typedef typename VectorWithOffsetType::value_type ComplexOrRealType; typedef typename AlgebraType::AuxiliaryType AuxiliaryType; AlgebraType operator()(PsimagLite::String str, const AuxiliaryType& aux) const { return AlgebraType(str, aux); } static bool metaEqual(const ResultType&, const ResultType&) { return true; } static bool isEmpty(const ResultType& term) { return term.isEmpty(); } }; } #endif // SPECFORTARGETINGEXPRESSION_H dmrgpp-6.02/src/Engine/SpinSquared.h000066400000000000000000000174241414604301300173410ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file SpinSquared.h * * Encapsulates the calculation of S^2 from creation * and anihilation operators. Works in conjunction with SpinSquaredHelper * */ #ifndef SPIN_SQUARED_H #define SPIN_SQUARED_H namespace Dmrg { template class SpinSquared { typedef typename CallbackType::Word Word; typedef typename CallbackType::FieldType FieldType; public: enum {SPIN_UP=0,SPIN_DOWN=1}; enum {ORBITAL_A=0,ORBITAL_B=1}; SpinSquared(CallbackType& callback, int NUMBER_OF_ORBITALS1, int DEGREES_OF_FREEDOM1) : callback_(callback), NUMBER_OF_ORBITALS(NUMBER_OF_ORBITALS1), DEGREES_OF_FREEDOM(DEGREES_OF_FREEDOM1) {} template SizeType memResolv(SomeMemResolvType& mres, SizeType, PsimagLite::String msg = "") const { PsimagLite::String str = msg; str += "SpinSquared"; const char* start = reinterpret_cast(this); const char* end = reinterpret_cast(&NUMBER_OF_ORBITALS); SizeType total = end - start; mres.push(SomeMemResolvType::MEMORY_HEAPPTR, SomeMemResolvType::SIZEOF_HEAPREF, this, str + " ref to callback"); mres.memResolv(&callback_, 0, str + " callback"); start = end; end = reinterpret_cast(&DEGREES_OF_FREEDOM); total += mres.memResolv(&NUMBER_OF_ORBITALS, end-start, str + " NUMBER_OF_ORBITALS"); total += mres.memResolv(&DEGREES_OF_FREEDOM, sizeof(*this) - total, str + " DEGREES_OF_FREEDOM"); return total; } void doOnePairOfSitesA(const Word& ket,SizeType i,SizeType j) const { FieldType value = 0.5; Word bra=ket; int ret = c(bra,j,ORBITAL_A,SPIN_UP); ret = cDagger(bra,j,ORBITAL_A,SPIN_DOWN,ret); ret = c(bra,i,ORBITAL_A,SPIN_DOWN,ret); ret = cDagger(bra,i,ORBITAL_A,SPIN_UP,ret); if (ret==0) callback_(ket,bra,value); if (NUMBER_OF_ORBITALS==1) return; bra=ket; ret = c(bra,j,ORBITAL_B,SPIN_UP); ret = cDagger(bra,j,ORBITAL_B,SPIN_DOWN,ret); ret = c(bra,i,ORBITAL_A,SPIN_DOWN,ret); ret = cDagger(bra,i,ORBITAL_A,SPIN_UP,ret); if (ret==0) callback_(ket,bra,value); bra=ket; ret = c(bra,j,ORBITAL_A,SPIN_UP); ret = cDagger(bra,j,ORBITAL_A,SPIN_DOWN,ret); ret = c(bra,i,ORBITAL_B,SPIN_DOWN,ret); ret = cDagger(bra,i,ORBITAL_B,SPIN_UP,ret); if (ret==0) callback_(ket,bra,value); bra=ket; ret = c(bra,j,ORBITAL_B,SPIN_UP); ret = cDagger(bra,j,ORBITAL_B,SPIN_DOWN,ret); ret = c(bra,i,ORBITAL_B,SPIN_DOWN,ret); ret = cDagger(bra,i,ORBITAL_B,SPIN_UP,ret); if (ret==0) callback_(ket,bra,value); } void doOnePairOfSitesB(const Word& ket,SizeType i,SizeType j) const { FieldType value = 0.5; Word bra=ket; int ret = c(bra,j,ORBITAL_A,SPIN_DOWN); ret = cDagger(bra,j,ORBITAL_A,SPIN_UP,ret); ret = c(bra,i,ORBITAL_A,SPIN_UP,ret); ret = cDagger(bra,i,ORBITAL_A,SPIN_DOWN,ret); if (ret==0) callback_(ket,bra,value); if (NUMBER_OF_ORBITALS==1) return; bra=ket; ret = c(bra,j,ORBITAL_B,SPIN_DOWN); ret = cDagger(bra,j,ORBITAL_B,SPIN_UP,ret); ret = c(bra,i,ORBITAL_A,SPIN_UP,ret); ret = cDagger(bra,i,ORBITAL_A,SPIN_DOWN,ret); if (ret==0) callback_(ket,bra,value); bra=ket; ret = c(bra,j,ORBITAL_A,SPIN_DOWN); ret = cDagger(bra,j,ORBITAL_A,SPIN_UP,ret); ret = c(bra,i,ORBITAL_B,SPIN_UP,ret); ret = cDagger(bra,i,ORBITAL_B,SPIN_DOWN,ret); if (ret==0) callback_(ket,bra,value); bra=ket; ret = c(bra,j,ORBITAL_B,SPIN_DOWN); ret = cDagger(bra,j,ORBITAL_B,SPIN_UP,ret); ret = c(bra,i,ORBITAL_B,SPIN_UP,ret); ret = cDagger(bra,i,ORBITAL_B,SPIN_DOWN,ret); if (ret==0) callback_(ket,bra,value); } void doDiagonal(const Word& ket,SizeType i,SizeType j) const { FieldType value = spinZ(ket,i)*spinZ(ket,j); callback_(ket,ket,value); } FieldType spinZ(const Word& ket,SizeType i) const { int sum=0; for (SizeType gamma=0;gamma0) return -1; ket |= mask; return 0; } int n(const Word& ket,SizeType i,SizeType gamma,SizeType spin) const { SizeType shift_ = (DEGREES_OF_FREEDOM*i); Word mask = 1<<(shift_+gamma+spin*NUMBER_OF_ORBITALS); if ((ket & mask)>0) return 1; return 0; } //serializr start class SpinSquared //serializr ref callback_ this CallbackType& callback_; //serializr normal NUMBER_OF_ORBITALS int const NUMBER_OF_ORBITALS; //serializr normal DEGREES_OF_FREEDOM int const DEGREES_OF_FREEDOM; }; // SpinSquared } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/SpinSquaredHelper.h000066400000000000000000000121061414604301300204710ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file SpinSquaredHelper.h * * Helper class for SpinSquared * */ #ifndef SPIN_SQ_HELPER_H #define SPIN_SQ_HELPER_H namespace Dmrg { template class SpinSquaredHelper { public: typedef FieldType_ FieldType; typedef Word_ Word; SpinSquaredHelper() : data_(0),ketSaved_(0) { } template SizeType memResolv(SomeMemResolvType& mres, SizeType, PsimagLite::String msg = "") const { PsimagLite::String str = msg; str += "SpinSquaredHelper"; const char* start = reinterpret_cast(this); const char* end = reinterpret_cast(&ketSaved_); SizeType total = mres.memResolv(&data_, end-start, str + " data"); total += mres.memResolv(&ketSaved_, sizeof(*this)-total, str + " ketSaved"); return total; } void operator()(const Word& ket,const Word& bra,const FieldType& value) { if (ket!=bra) { throw PsimagLite::RuntimeError("SpinSquaredHelper::operator(): ket!=bra\n"); } if (ket!=ketSaved_) data_=0; ketSaved_=ket; data_ += value; } //! receives m, returns (2*j,m+j) std::pair getJmPair(const FieldType& m) const { SizeType j = getJvalue(); SizeType mtilde = getMvalue(m,j); return std::pair(j,mtilde); } void clear() { data_=0; } void write(PsimagLite::String, PsimagLite::IoNg::Out::Serializer&) const {} private: int perfectSquareOrCrash(const FieldType& t) const { FieldType r = sqrt(t); int ri=int(r); if (ri!=r) PsimagLite::RuntimeError("SpinSquaredHelper:: sqrt(1+4d) not an integer\n"); return ri; } SizeType getJvalue() const { if (data_<0) PsimagLite::RuntimeError("SpinSquaredHelper::getJvalue(): d<0\n"); int tmp = perfectSquareOrCrash(1.0+4.0*data_); if (tmp<1) PsimagLite::RuntimeError("SpinSquaredHelper::getJvalue(): sqrt(1+4d)<1\n"); SizeType ret = tmp-1; return ret; } SizeType getMvalue(const FieldType& m,SizeType j) const { FieldType tmp = m+j*0.5; if (tmp<0) PsimagLite::RuntimeError("SpinSquaredHelper::getMvalue(): j+m <0\n"); SizeType ret = SizeType(tmp); if (ret!=tmp) PsimagLite::RuntimeError("SpinSquaredHelper::getMvalue: j+m not SizeType\n"); return ret; } //serializr start class SpinSquaredHelper //serializr normal data_ FieldType data_; //serializr normal ketSaved_ Word ketSaved_; }; // class SpinSquaredHelper } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/StageEnum.h000066400000000000000000000002451414604301300167640ustar00rootroot00000000000000#ifndef STAGEENUM_H #define STAGEENUM_H namespace Dmrg { enum class StageEnum {DISABLED, OPERATOR, WFT_NOADVANCE, WFT_ADVANCE, COLLAPSE}; } #endif // STAGEENUM_H dmrgpp-6.02/src/Engine/StringOrderPost.h000066400000000000000000000060621414604301300202070ustar00rootroot00000000000000#ifndef STRINGORDERPOST_H #define STRINGORDERPOST_H #include "Vector.h" #include "Braket.h" namespace Dmrg { template class StringOrderPost { public: typedef typename ObserverType::ModelType ModelType; typedef Braket BraketType; typedef typename BraketType::VectorStringType VectorStringType; typedef typename BraketType::AlgebraType AlgebraType; typedef typename BraketType::OperatorSpecType OperatorSpecType; typedef typename BraketType::VectorAlgebraType VectorAlgebraType; typedef typename BraketType::VectorIntType VectorIntType; typedef typename BraketType::MatrixType MatrixType; typedef typename BraketType::SparseMatrixType SparseMatrixType; typedef typename PsimagLite::Vector::Type VectorSparseMatrixType; typedef typename BraketType::ComplexOrRealType ComplexOrRealType; StringOrderPost(const BraketType& braket, const ObserverType& observe) : braket_(braket), observe_(observe) { static const PsimagLite::String stringop = "!stringorder="; const PsimagLite::String special = braket.opName(0); const SizeType l = stringop.length(); if (special.substr(0, l) == stringop) { PsimagLite::String rest = special.substr(l, special.length() - l); PsimagLite::split(ops_, rest, ":"); return; } err("FATAL: Braket: special op " + special + " not understood\n"); } void computeMatrix(MatrixType& m) { const SizeType rows = m.rows(); const SizeType cols = m.cols(); if (rows != cols) err("StringOrderPost::computeMatrix() must be square\n"); for (SizeType i = 0; i < rows; ++i) { for (SizeType k = i + 2; k < cols; ++k) { m(i, k) = computeOneMatrixElement(i, k); } } } private: ComplexOrRealType computeOneMatrixElement(SizeType i, SizeType k) const { const SizeType n = k - i - 1; if (n == 0) err("StringOrderPost::computeOneElement\n"); const PsimagLite::String bra = braket_.bra().toString(); const PsimagLite::String ket = braket_.ket().toString(); const PsimagLite::String op1 = "exp_i_pi_" + ops_[1]; const PsimagLite::String left = "<" + bra + "|" + ops_[0] + "[" + ttos(i) + "]"; const PsimagLite::String right = ops_[2] + "[" + ttos(k) + "]|" + ket + ">"; if (n == 1) { if (k != i + 2) err("StringOrderPost::computeOneElement k != i + 2\n"); // braket = op_[0] * exp(i*pi*op_[1]) * op_[2] // sites are i, i + 1, k PsimagLite::String str(left + ";" + op1 + "[" + ttos(i + 1) + "];" + right); BraketType braket(braket_.model(), str); return observe_.threePoint(braket, 0, 0, false); } // braket = op_[0] * exp(i*pi*op_[1]) * exp(i*pi*op_[1]) * ... exp(i*pi*op_[1]) * op_[2] // sites are i, i + 1, i + 2, ..., k - 1, k PsimagLite::String op1copies = ""; for (SizeType j = i + 1; j < k; ++j) op1copies += op1 + "[" + ttos(j) + "];"; PsimagLite::String str(left + ";" + op1copies + right); // op1copies carries a last ; BraketType braket(braket_.model(), str); return observe_.anyPoint(braket, false); } const BraketType& braket_; VectorStringType ops_; const ObserverType& observe_; }; } #endif // STRINGORDERPOST_H dmrgpp-6.02/src/Engine/Su2Reduced.h000066400000000000000000000404521414604301300170450ustar00rootroot00000000000000/* Copyright (c) 2009-2016-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ #ifndef SU2_REDUCED_HEADER_H #define SU2_REDUCED_HEADER_H #include "Map.h" #include "Su2SymmetryGlobals.h" #include "Sort.h" /** \ingroup DMRG */ /*@{*/ /*! \file Su2Reduced.h * * Using WignerEckart Theorem to speed up SU(2) algorithm * */ namespace Dmrg { template class Su2Reduced { typedef typename LeftRightSuperType::OperatorsType OperatorsType; typedef typename OperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type SparseElementType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename LeftRightSuperType::BasisType BasisType; typedef typename BasisType::BlockType VectorSizeType; typedef typename BasisType::RealType RealType; typedef std::pair PairType; typedef typename OperatorsType::OperatorType OperatorType; typedef Su2SymmetryGlobals Su2SymmetryGlobalsType; typedef typename Su2SymmetryGlobalsType::ClebschGordanType ClebschGordanType; static const SizeType System=0,Environ=1; public: Su2Reduced(int m, const LeftRightSuperType& lrs, bool = false) :m_(m), lrs_(lrs), cgObject_(Su2SymmetryGlobalsType::clebschGordanObject) { typename PsimagLite::Vector::Type jsEffective; typename PsimagLite::Vector::Type jvalues; // find all possible j values SizeType counter=0; for (SizeType i=0;i::Type basisrinverse(basis.size()); for (SizeType i=0;i::Type opSrc(angularMomentum+1); OperatorType myOp; myOp.data = basis.hamiltonian(); myOp.fermionSign=1; myOp.jm=typename OperatorType::PairType(0,0); myOp.angularFactor = 1.0; opSrc[0]=&myOp; createReducedOperator(hamReduced,opSrc,basis,basisrinverse,basis.reducedSize(),0); } SizeType findJf(const BasisWithOperatorsType& basis,SizeType j,SizeType f) { for (SizeType i=0;i::Type& opSrc, const BasisWithOperatorsType& basis, const typename PsimagLite::Vector::Type& basisrInverse, SizeType n, SizeType) { PsimagLite::Matrix opDest1(n,n); for (SizeType i=0;i& opDest1, const OperatorType& opSrc, const BasisWithOperatorsType& basis, const typename PsimagLite::Vector::Type& basisrInverse) { PsimagLite::Matrix opSrcdense; crsMatrixToFullMatrix(opSrcdense, opSrc.data); for (SizeType i=0;i& lfactor, SizeType k, SizeType mu1, SizeType mu2, typename PsimagLite::Vector::Type& jsEffective) { PairType kmu1(k,mu1); PairType kmu2(k,mu2); SizeType counter=0; int offset = lrs_.super().partition(m_); PairType jm=lrs_.super().jmValue(offset); lfactor.resize(lrs_.left().jMax()*lrs_.right().jMax(),lrs_.left().jMax()*lrs_.right().jMax()); for (SizeType i1=0;i1(0)) { counter++; PairType jj(PairType(lrs_.left().jVals(i1),lrs_.right().jVals(i2))); int x3=PsimagLite::indexOrMinusOne(jsEffective,jj); if (x3<0) jsEffective.push_back(jj); } SizeType row = lrs_.left().jVals(i1) + lrs_.right().jVals(i2)*lrs_.left().jMax(); SizeType col = lrs_.left().jVals(i1prime) + lrs_.right().jVals(i2prime)*lrs_.left().jMax(); lfactor(row, col) = sum; } } } } } void calcHamFactor(PsimagLite::Matrix& lfactor) { int offset = lrs_.super().partition(m_); PairType jm=lrs_.super().jmValue(offset); lfactor.resize(lrs_.left().jMax(),lrs_.right().jMax()); PairType kmu(0,0); for (SizeType i1=0;i1::Type jsEffective) { SizeType offset = lrs_.super().partition(m_); PairType jm=lrs_.super().jmValue(offset); reducedEffective_.clear(); reducedInverse_.resize(lrs_.left().reducedSize(),lrs_.right().reducedSize()); VectorSizeType sElectrons; lrs_.super().su2ElectronsBridge(sElectrons); VectorSizeType lElectrons; lrs_.left().su2ElectronsBridge(lElectrons); VectorSizeType rElectrons; lrs_.right().su2ElectronsBridge(rElectrons); assert(offset < sElectrons.size()); SizeType electrons = sElectrons[offset]; for (SizeType i=0;ij2) continue; x = j1prime-k-j1; if (x%2!=0) continue; if (static_cast(m1+mu1)+static_cast(x/2)<0) continue; SizeType m1prime = m1+mu1+SizeType(x/2); if (m1prime>j1prime) continue; PairType jm1prime(j1prime,m1prime); x = j2prime-k-j2; if (x%2!=0) continue; if (static_cast(m2+mu2)+static_cast(x/2)<0) continue; SizeType m2prime = m2+mu2+SizeType(x/2); if (m2prime>j2prime) continue; PairType jm2prime(j2prime,m2prime); x=j1prime+j2prime-jm.first; if (x%2!=0) continue; x= x/2; x += jm.second -m1prime-m2prime; if (x!=0) continue; sum += cgObject_(jm1prime,jm1,kmu1)* cgObject_(jm2prime,jm2,kmu2)* cgObject_(jm,jm1,jm2)*cgObject_(jm,jm1prime,jm2prime); } return sum; } void getFlavorMap(const PairType& jm) { PsimagLite::Map::Type flavorsOldInverse; lrs_.super().flavor2Index(flavorsOldInverse,jm); flavorsOldInverse_.resize(reducedEffective_.size()); VectorSizeType lElectrons; lrs_.left().su2ElectronsBridge(lElectrons); VectorSizeType rElectrons; lrs_.right().su2ElectronsBridge(rElectrons); for (SizeType i=0;i::Type perm(flavorsOldInverse_.size()); PsimagLite::Sort::Type > sort; sort.sort(flavorsOldInverse_,perm); typename PsimagLite::Vector::Type r(reducedEffective_.size()); PsimagLite::Matrix reducedInverse(reducedInverse_.rows(), reducedInverse_.cols()); for (SizeType i=0;i >::Type lfactor_; PsimagLite::Matrix lfactorHamiltonian_; SparseMatrixType hamiltonian2_,hamiltonian3_; typename PsimagLite::Vector::Type reducedEffective_; PsimagLite::Matrix reducedInverse_; typename PsimagLite::Vector::Type flavorsOldInverse_; ClebschGordanType& cgObject_; }; // class } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/Su2Related.h000066400000000000000000000101151414604301300170430ustar00rootroot00000000000000/* Copyright (c) 2009-2016-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /*! \file Su2Related.h * * */ #ifndef DMRG_SU2_RELATED_H #define DMRG_SU2_RELATED_H #include "CrsMatrix.h" #include "InputNg.h" #include "InputCheck.h" namespace Dmrg { // This is a structure, don't add member functions here! struct Su2Related { Su2Related() : offset(0) // setting to zero is necessary, because {} // we always print offset // and when running Abelian // it might be undefined template SizeType memResolv(SomeMemResolvType& mres, SizeType, PsimagLite::String msg = "") const { return 0; } void read(PsimagLite::String label, PsimagLite::IoSerializer& ioSerializer) { ioSerializer.read(offset, label + "/offset"); ioSerializer.read(source, label + "/source"); ioSerializer.read(transpose, label + "/transpose"); } void write(PsimagLite::String label, PsimagLite::IoSerializer& ioSerializer) const { ioSerializer.createGroup(label); ioSerializer.write(label + "/offset", offset); ioSerializer.write(label + "/source", source); ioSerializer.write(label + "/transpose", transpose); } SizeType offset; PsimagLite::Vector::Type source; PsimagLite::Vector::Type transpose; }; std::istream& operator>>(std::istream&,Su2Related&); std::ostream& operator<<(std::ostream&,const Su2Related&); void send(Su2Related&,int,int,PsimagLite::MPI::CommType); void recv(Su2Related&,int,int,PsimagLite::MPI::CommType); void bcast(Su2Related&); } // namespace Dmrg #endif dmrgpp-6.02/src/Engine/Su2SymmetryGlobals.h000066400000000000000000000073651414604301300206350ustar00rootroot00000000000000// BEGIN LICENSE BLOCK /* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ // END LICENSE BLOCK /** \ingroup DMRG */ /*@{*/ /*! \file Su2SymmetryGlobals.h * * * */ #ifndef SU2_GLOBALS_H #define SU2_GLOBALS_H #include "ClebschGordanCached.h" namespace Dmrg { template struct Su2SymmetryGlobals { typedef ClebschGordanCached ClebschGordanType; static void init(bool hasSu2Symmetry) { if (!hasSu2Symmetry) return; MaximumJValue=20; NumberOfFactorials=100; clebschGordanObject.init(MaximumJValue,NumberOfFactorials); } static SizeType MaximumJValue; // this is the maximum allowed \tile{j}=2j value (j is half this value) static SizeType NumberOfFactorials; // number of factorials for the Clebsch-Gordan coefficients static ClebschGordanType clebschGordanObject; }; // Su2SymmetryGlobals template SizeType Su2SymmetryGlobals::MaximumJValue = 2; template SizeType Su2SymmetryGlobals::NumberOfFactorials = 2; template ClebschGordanCached Su2SymmetryGlobals::clebschGordanObject(2); } // namespace Dmrg /*@}*/ #endif //SU2_GLOBALS_H dmrgpp-6.02/src/Engine/SuperGeometry.h000066400000000000000000000155551414604301300177200ustar00rootroot00000000000000#ifndef SUPERGEOMETRY_H #define SUPERGEOMETRY_H #include "Geometry/Geometry.h" #include "ProgramGlobals.h" #include "Geometry/GeometryDca.h" namespace Dmrg { template class SuperGeometry { typedef PsimagLite::Geometry GeometryType; typedef typename GeometryType::ComplexOrRealType ComplexOrRealType; typedef typename GeometryType::VectorSizeType VectorSizeType; typedef typename PsimagLite::Vector::Type VectorVectorSizeType; class SuperPlaquette { public: SuperPlaquette(InputType_& io) : value_(0) { io.readline(value_, "SuperPlaquetteValue="); } bool connected(SizeType emax, SizeType emin, const VectorSizeType& hItems) const { assert(hItems.size() == 4); return (hItems[1] == hItems[0] + 1 && hItems[2] == hItems[1] + 1 && hItems[3] == hItems[2] + 1); } void addSuperConnections(VectorVectorSizeType& data, SizeType smax, SizeType emin, SizeType linSize) const { return (smax + 1 == emin) ? addSuperConnectionsFinite_(data, smax, emin, linSize) : addSuperConnectionsInfinite_(data, smax, emin, linSize); } SizeType holloutRadius() const { return 4; } ComplexOrRealType operator()(SizeType smax, SizeType emin, const VectorSizeType& hItems, const VectorSizeType& edofs) const { return value_; } private: void addSuperConnectionsInfinite_(VectorVectorSizeType& data, SizeType smax, SizeType emin, SizeType linSize) const { // FIXME: Add here site substitutions for when the lattice is not fully built return; } void addSuperConnectionsFinite_(VectorVectorSizeType& data, SizeType smax, SizeType emin, SizeType linSize) const { // smax - 1, smax, emin, emin + 1 if (smax > 0 && emin + 1 < linSize) data.push_back(VectorSizeType{smax - 1, smax, emin, emin + 1}); // smax, emin, emin + 1, emin + 2 if (emin + 2 < linSize) data.push_back(VectorSizeType{smax, emin, emin + 1, emin + 2}); // smax - 2, smax -1, smax, emin if (smax > 1) data.push_back(VectorSizeType{smax - 2, smax - 1, smax, emin}); } typename GeometryType::RealType value_; }; public: typedef typename GeometryType::RealType RealType; typedef PsimagLite::GeometryDca GeometryDcaType; typedef typename PsimagLite::Vector::Type VectorSuperPlaquetteType; SuperGeometry(InputType_& io) : geometry_(io), dcaPtr_(0), hollowOutRadius_(0) { // add super terms as needed const SizeType n = geometry_.terms(); for (SizeType i = 0; i < n; ++i) { if (geometry_.directions(i) > 0) continue; // super term found // it's gotta be "SuperPlaquette" for now, (only one option, sorry!) if (geometry_.options(i) == "SuperPlaquette") { auto ptr = new SuperPlaquette(io); superStrings_.push_back(ptr); hollowOutRadius_ = std::max(hollowOutRadius_, ptr->holloutRadius()); } else { err("SuperGeometry " + geometry_.options(i) + " unsupported\n"); } } } ~SuperGeometry() { delete dcaPtr_; dcaPtr_ = nullptr; const SizeType n = superStrings_.size(); for (SizeType i = 0; i < n; ++i) { delete superStrings_[i]; superStrings_[i] = nullptr; } } void split(SizeType sitesPerBlock, VectorSizeType& S, VectorVectorSizeType& X, VectorVectorSizeType& Y, VectorSizeType& E, bool allInSystem = false) const { geometry_.split(sitesPerBlock, S, X, Y, E, allInSystem); } SizeType numberOfSites() const { return geometry_.numberOfSites(); } SizeType terms() const { return geometry_.terms(); } void write(PsimagLite::String label, PsimagLite::IoNgSerializer& ioSerializer) const { geometry_.write(label, ioSerializer); } SizeType hollowOutRadius(SizeType maxLeft) const { return std::max(maxLeft*geometry_.maxConnections(), hollowOutRadius_); } SizeType orbitals(SizeType term, SizeType site) const { return geometry_.orbitals(term, site); } PsimagLite::String label(SizeType i) const { return geometry_.label(i); } template typename PsimagLite::EnableIf::True || Loki::TypeTraits::isStdFloat, T>::Type vModifier(SizeType term, T value, RealType time) const { return geometry_.vModifier(term, value, time); } ComplexOrRealType operator()(SizeType smax, SizeType emin, const VectorSizeType& hItems, const VectorSizeType& edofs, SizeType term) const { const SizeType n = hItems.size(); assert(n == edofs.size()); if (n == 2) return geometry_(smax, emin, hItems[0], edofs[0], hItems[1], edofs[1], term); assert(superStrings_.size() == 1); return superStrings_[0]->operator()(smax, emin, hItems, edofs); } bool connected(SizeType smax,SizeType emin, const VectorSizeType& hItems) const { if (hItems.size() == 2) return geometry_.connected(smax, emin, hItems[0], hItems[1]); const SizeType n = superStrings_.size(); for (SizeType i = 0; i < n; ++i) if (superStrings_[i]->connected(smax, emin, hItems)) return true; return false; } typename ProgramGlobals::ConnectionEnum connectionKind(SizeType smax, const VectorSizeType& hItems) const { if (hItems.size() == 2) return geometry_.connectionKind(smax, hItems[0], hItems[1]); const SizeType n = hItems.size(); SizeType flag = 0; for (SizeType i = 0; i < n; ++i) { if (hItems[i] <= smax) flag |= 1; else flag |= 2; } return (flag == 3) ? ProgramGlobals::ConnectionEnum::SYSTEM_ENVIRON : ProgramGlobals::ConnectionEnum::SYSTEM_SYSTEM; } const GeometryDcaType& createDcaObject(SizeType orbitals) const { if (!dcaPtr_) dcaPtr_ = new GeometryDcaType(geometry_, orbitals); return *dcaPtr_; } void addSuperConnections(VectorVectorSizeType& data, SizeType smax, SizeType emin) const { const SizeType n = superStrings_.size(); for (SizeType i = 0; i < n; ++i) superStrings_[i]->addSuperConnections(data, smax, emin, geometry_.numberOfSites()); } friend std::ostream& operator<<(std::ostream& os, const SuperGeometry& supergeometry) { os< class SuperOpHelperBase { public: typedef PsimagLite::Vector::Type VectorSizeType; typedef std::pair PairBoolSizeType; SuperOpHelperBase(const SuperGeometryType& superGeometry) : superGeometry_(superGeometry) {} virtual ~SuperOpHelperBase() {} virtual void setToProduct(SizeType, SizeType, ProgramGlobals::DirectionEnum dir) { dir_ = dir; } // This below is for a plaquette, and will have to be // written somewhere else // testing devel FIXME TODO virtual SizeType size() const { return 0; } virtual PairBoolSizeType leftOperatorIndex(SizeType) const { return PairBoolSizeType(false, 0); } virtual PairBoolSizeType rightOperatorIndex(SizeType) const { return PairBoolSizeType(false, 0); } virtual SizeType leftIndex(VectorSizeType&, SizeType) const { throw PsimagLite::RuntimeError("SuperOpHelperBase::leftIndex\n"); } virtual SizeType rightIndex(VectorSizeType&, SizeType) const { throw PsimagLite::RuntimeError("SuperOpHelperBase::rightIndex\n"); } // non virtual below const SuperGeometryType& superGeometry() const { return superGeometry_; } const ProgramGlobals::DirectionEnum& dir() const { return dir_; } private: const SuperGeometryType& superGeometry_; ProgramGlobals::DirectionEnum dir_; }; } #endif // SuperOpHelperBase_H dmrgpp-6.02/src/Engine/TargetHelper.h000066400000000000000000000074331414604301300174700ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ // END LICENSE BLOCK /** \ingroup DMRG */ /*@{*/ /*! \file TargetHelper.h * * FIXME */ #ifndef TARGET_HELPER_H #define TARGET_HELPER_H namespace Dmrg { template class TargetHelper { public: typedef ModelType_ ModelType; typedef WaveFunctionTransfType_ WaveFunctionTransfType; typedef typename ModelType::RealType RealType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename ModelType::InputValidatorType InputValidatorType; TargetHelper(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft) : lrs_(lrs), model_(model), wft_(wft) {} const LeftRightSuperType& lrs() const { return lrs_; } const ModelType& model() const { return model_; } const WaveFunctionTransfType& wft() const { return wft_; } bool withLegacyBugs() const { return !model_.params().options.isSet("fixLegacyBugs"); } private: const LeftRightSuperType& lrs_; const ModelType& model_; const WaveFunctionTransfType& wft_; }; // TargetHelper } // namespace Dmrg /*@}*/ #endif // TARGET_HELPER_H dmrgpp-6.02/src/Engine/TargetParamsBase.h000066400000000000000000000156141414604301300202670ustar00rootroot00000000000000/* Copyright (c) 2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TargetParamsBase.h * * FIXME */ #ifndef TARGET_PARAMS_BASE_H #define TARGET_PARAMS_BASE_H #include #include #include "MemResolv.h" #include "FreqEnum.h" namespace Dmrg { template class TargetParamsBase { public: typedef typename ModelType::RealType RealType; typedef std::pair PairFreqType; typedef typename ModelType::OperatorType OperatorType; typedef typename OperatorType::PairType PairType; typedef typename OperatorType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef PsimagLite::Matrix MatrixType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorMatrixType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename PsimagLite::Vector::Type VectorRealType; enum class ConcatEnum {PRODUCT, SUM}; enum class AlgorithmEnum {KRYLOV, CONJUGATE_GRADIENT, CHEBYSHEV, KRYLOVTIME, RUNGE_KUTTA, SUZUKI_TROTTER}; TargetParamsBase(PsimagLite::String targeting) : targeting_(targeting) {} virtual ~TargetParamsBase() {} virtual SizeType sites() const = 0; virtual SizeType sectorIndex() const = 0; virtual SizeType levelIndex() const = 0; virtual SizeType sites(SizeType) const { PsimagLite::String s = "TargetParamsBase: unimplemented sites\n"; throw PsimagLite::RuntimeError(s); } virtual void setOperator(SizeType, SizeType, const OperatorType&) { unimplemented("type(setOperator)"); } virtual const VectorSizeType& startingLoops() const { PsimagLite::String s = "TargetParamsBase: unimplemented startingLoops\n"; throw PsimagLite::RuntimeError(s); } virtual const VectorRealType& chebyTransform() const { PsimagLite::String s = "TargetParamsBase: unimplemented chebyTransform\n"; throw PsimagLite::RuntimeError(s); } virtual ConcatEnum concatenation() const { throw PsimagLite::RuntimeError("concatenation"); } virtual const VectorOperatorType& aOperators() const { PsimagLite::String s = "TargetParamsBase: unimplemented aOperators\n"; throw PsimagLite::RuntimeError(s); } virtual RealType correctionA() const { return 0; } virtual SizeType type() const { return unimplementedInt("type"); } virtual void type(SizeType) { unimplemented("type(SizeType)"); } virtual SizeType advanceEach() const { return 0; } virtual SizeType cgSteps() const { return unimplementedInt("cgSteps"); } virtual PairFreqType omega() const { PsimagLite::String s("TargetParamsBase: unimplemented omega \n"); throw PsimagLite::RuntimeError(s); } virtual void omega(PsimagLite::FreqEnum, RealType) { unimplemented("omega(RealType)"); } virtual RealType eta() const { return unimplemented("eta"); } virtual RealType cgEps() const { return unimplemented("cgEps"); } virtual AlgorithmEnum algorithm() const { throw PsimagLite::RuntimeError("algorithm"); } virtual RealType tau() const { return unimplemented("tau"); } virtual RealType maxTime() const { return unimplemented("maxTime"); } virtual SizeType timeSteps() const { return unimplementedInt("timeSteps"); } virtual bool noOperator() const { return static_cast(unimplemented("noOperator")); } virtual void noOperator(bool) { unimplemented("noOperator"); } virtual bool skipTimeZero() const { return static_cast(unimplemented("skipTimeZero")); } virtual bool isEnergyForExp() const { return static_cast(unimplemented("isEnergyForExp")); } virtual RealType energyForExp() const { return unimplemented("energyForExp"); } virtual RealType gsWeight() const { return unimplemented("gsWeight"); } virtual RealType timeDirection() const { return unimplemented("timeDirection"); } virtual PsimagLite::String targeting() const { return targeting_; } private: RealType unimplemented(PsimagLite::String s) const { s = "TargetParamsBase: unimplemented " + s + "\n"; throw PsimagLite::RuntimeError(s); } SizeType unimplementedInt(PsimagLite::String s) const { s = "TargetParamsBase: unimplemented " + s + "\n"; throw PsimagLite::RuntimeError(s); } PsimagLite::String targeting_; }; // class TargetParamsBase } // namespace Dmrg /*@}*/ #endif // TARGET_PARAMS_BASE_H dmrgpp-6.02/src/Engine/TargetParamsCommon.h000066400000000000000000000341251414604301300206430ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TargetParamsCommon.h * * FIXME */ #ifndef TARGET_PARAMS_COMMON_H #define TARGET_PARAMS_COMMON_H #include #include #include #include "TargetParamsBase.h" #include "Io/IoSerializerStub.h" #include "ProgramGlobals.h" #include "AlgebraicStringToNumber.h" namespace Dmrg { // Coordinates reading of TargetSTructure from input file template class TargetParamsCommon : public TargetParamsBase { public: typedef typename ModelType::RealType RealType; typedef TargetParamsBase BaseType; typedef typename ModelType::OperatorType OperatorType; typedef typename OperatorType::PairType PairType; typedef typename OperatorType::StorageType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorMatrixType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef std::pair PairSizeType; typedef PsimagLite::Vector::Type VectorStringType; TargetParamsCommon(InputValidatorType& io, PsimagLite::String targeting, const ModelType& model) : BaseType(targeting), sites_(0), startingLoops_(0), concatenation_(BaseType::ConcatEnum::PRODUCT), noOperator_(false), skipTimeZero_(false), isEnergyForExp_(false), gsWeight_(0.0), energyForExp_(0.0), io_(io), model_(model), sectorLevel_(PairSizeType(0,0)) { /*PSIDOC TargetParamsCommon \item[TSPSites] [VectorInteger] The first number is the number of numbers to follow. The following numbers are the sites $\pi'(0),\pi'(1),\cdots$ where the operators to build state $|\phi\rangle$ should be applied; see Eq.~(4) of \cite{re:alvarez11}. These sites must be ordered by appearance in the DMRG sweeping. \item[TSPLoops] [VectorInteger] The first number is the number of numbers to follow. The following numbers are the delay (in units of finite loops) before evolving in time. Delaying the time evolution helps converge the state $|\phi\rangle$. \item[TSPProductOrSum] [String] Either \verb!product! or \verb!sum! indicating whether the operators $B$ in Eq.~(4) of \cite{re:alvarez11} should be multiplied or summed. Note that Eq.~(4) shows only multiplication. \item[TSPSkipTimeZero] [Integer] Either 0 or 1 to indicate whether to skip the application of the time evolution at $t=0$. It is ignored unless $|\phi\rangle$ is the ground state. \item[TSPEnergyForExp] [RealType] Energy to use as origin for the exponential in the time evolution. */ VectorStringType sitesStr; io.read(sitesStr, "TSPSites"); vecstringToVecnumbers(sites_, sitesStr); checkSites(); io.read(startingLoops_,"TSPLoops"); io.readline(gsWeight_,"GsWeight="); if (sites_.size() != startingLoops_.size()) { PsimagLite::String str(__FILE__); str += " Listed sites is " + ttos(sites_.size()); str += " but delay loops found is " + ttos(startingLoops_.size()) + "\n"; throw PsimagLite::RuntimeError(str); } PsimagLite::String productOrSum = "product"; try { io.readline(productOrSum,"TSPProductOrSum="); } catch (std::exception&) { PsimagLite::String s(__FILE__); s += "\n FATAL: Must provide TSPProductOrSum=.\n"; s += "Please add TSPProductOrSum=product or TSPProductOrSum=sum "; s += "immediately below the TSPLoops= line in the input file\n"; throw PsimagLite::RuntimeError(s.c_str()); } //! Concatenation specifies what to do with //! operators at different sites, add them or multiply them if (productOrSum == "product") { this->concatenation_ = BaseType::ConcatEnum::PRODUCT; } else if (productOrSum == "sum") { this->concatenation_ = BaseType::ConcatEnum::SUM; } else { PsimagLite::String s(__FILE__); s += " : Unknown concatentation " + productOrSum + "\n"; s += "Possible values: product sum\n"; throw PsimagLite::RuntimeError(s.c_str()); } try { int tmp = 0; io.readline(tmp,"TSPSkipTimeZero="); skipTimeZero_ = (tmp > 0); } catch (std::exception&) {} try { io.readline(energyForExp_,"TSPEnergyForExp="); isEnergyForExp_ = true; } catch (std::exception&) {} for (SizeType i = 0; i < sites_.size(); ++i) { PsimagLite::String prefix2 = (io.isAinur()) ? "TSPOp" + ttos(i) + ":" : ""; OperatorType myOp(io, model_, OperatorType::MUST_BE_NONZERO, prefix2, sites_[i]); aOperators_.push_back(myOp); } try { VectorType tmpVector; io.read(tmpVector,"TSPOperatorMultiplier"); multiplyOperators(tmpVector); std::cout<<"TSPOperatorMultiplier found with "<= sites_.size()) return -1; VectorSizeType::const_iterator it = std::find(sites_.begin() + start, sites_.end(), site); if (it == sites_.end()) return -1; return it - sites_.begin(); } virtual void setOperator(SizeType i, SizeType j, const OperatorType& op) { assert(i < sites_.size()); sites_[i] = j; assert(i < aOperators_.size()); aOperators_[i] = op; } virtual const VectorSizeType& startingLoops() const { return startingLoops_; } virtual typename BaseType::ConcatEnum concatenation() const { return concatenation_; } virtual const VectorOperatorType& aOperators() const { return aOperators_; } virtual bool noOperator() const { return noOperator_; } virtual void noOperator(bool x) { noOperator_ = x; } virtual bool skipTimeZero() const { return skipTimeZero_; } virtual bool isEnergyForExp() const { return isEnergyForExp_; } virtual RealType energyForExp() const { return energyForExp_; } virtual RealType gsWeight() const { return gsWeight_; } virtual SizeType sectorIndex() const { return sectorLevel_.first; } virtual SizeType levelIndex() const { return sectorLevel_.second; } void write(PsimagLite::String label, PsimagLite::IoSerializer& ioSerializer) const { ioSerializer.createGroup(label); ioSerializer.write(label + "/sites_", sites_); ioSerializer.write(label + "/startingLoops_", startingLoops_); ioSerializer.write(label + "/concatenation_", concatenation_); ioSerializer.write(label + "/noOperator_", noOperator_); ioSerializer.write(label + "/skipTimeZero_", skipTimeZero_); ioSerializer.write(label + "/isEnergyForExp_", isEnergyForExp_); ioSerializer.write(label + "/gsWeight_", gsWeight_); ioSerializer.write(label + "/energyForExp_", energyForExp_); ioSerializer.write(label + "/aOperators_", aOperators_); } friend std::ostream& operator<<(std::ostream& os, const TargetParamsCommon& t) { os<<"TargetParams.operators="<= linSize) { PsimagLite::String str(__FILE__); str += " TSPSites: The " + ttos(i) + "-th site is "; str += ttos(sites_[i]) + " is larger than the total "; str += "number of sites "+ ttos(linSize) + "\n"; throw PsimagLite::RuntimeError(str); } } } bool hasOperatorAt(SizeType site) const { for (SizeType i = 0; i < sites_.size(); ++i) { if (sites_[i] == site) return true; } return false; } void errorBorderOperators(SizeType site) const { SizeType linSize = model_.superGeometry().numberOfSites(); SizeType site2 = (site == 0) ? 1 : linSize - 2; PsimagLite::String str("ERROR: Operators at border site: Please "); str += "add the identity operator at site " + ttos(site2) + "\n"; throw PsimagLite::RuntimeError(str); } void vecstringToVecnumbers(VectorSizeType& nums, const VectorStringType& strs) { typedef AlgebraicStringToNumber AlgebraicStringToNumberType; const SizeType numberOfSites = model_.superGeometry().numberOfSites(); const SizeType n = strs.size(); nums.resize(n); AlgebraicStringToNumberType algebraicStringToNumber("TSPSites", numberOfSites); std::cout<<"TSPSites=["; for (SizeType i = 0; i < n; ++i) { nums[i] = algebraicStringToNumber.procLength(strs[i]); std::cout< #include "TargetParamsBase.h" namespace Dmrg { // Coordinates reading of TargetSTructure from input file template class TargetParamsCorrection : public TargetParamsBase { typedef TargetParamsBase BaseType; public: typedef typename BaseType::RealType RealType; template TargetParamsCorrection(IoInputter& io, PsimagLite::String targeting) : BaseType(targeting) { io.readline(correctionA_,"CorrectionA="); } virtual SizeType memResolv(PsimagLite::MemResolv&, SizeType, PsimagLite::String = "") const { return 0; } virtual SizeType sites() const { return 0; } virtual RealType correctionA() const { return correctionA_; } virtual SizeType sectorIndex() const { throw PsimagLite::RuntimeError("sectorIndex called for gs\n"); } virtual SizeType levelIndex() const { throw PsimagLite::RuntimeError("levelIndex called for gs\n"); } void write(PsimagLite::String label, PsimagLite::IoSerializer& ioSerializer) const { ioSerializer.createGroup(label); ioSerializer.write(label + "/correctionA_", correctionA_); } private: RealType correctionA_; }; // class TargetParamsCorrection template inline std::ostream& operator<<(std::ostream& os,const TargetParamsCorrection& t) { os<<"TargetParams.type=correction\n"; os<<"TargetCorrection.correctionA="< class TargetParamsCorrectionVector : public TargetParamsCommon { public: typedef TargetParamsCommon BaseType; typedef typename ModelType::RealType RealType; typedef typename BaseType::BaseType::PairFreqType PairFreqType; typedef typename ModelType::OperatorType OperatorType; typedef typename OperatorType::PairType PairType; typedef typename OperatorType::StorageType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrReal; typedef PsimagLite::Matrix MatrixType; template TargetParamsCorrectionVector(IoInputter& io, PsimagLite::String targeting, const ModelType& model) : BaseType(io, targeting, model), cgSteps_(1000), firstRitz_(0), nForFraction_(1), advanceEach_(0), cgEps_(1e-6) { io.readline(correctionA_,"CorrectionA="); io.readline(type_,"DynamicDmrgType="); PsimagLite::String tmp; io.readline(tmp,"CorrectionVectorFreqType="); PsimagLite::FreqEnum freqEnum = PsimagLite::FREQ_REAL; if (tmp == "Matsubara") { freqEnum = PsimagLite::FREQ_MATSUBARA; } else if (tmp != "Real") { PsimagLite::String msg("CorrectionVectorFreqType"); throw PsimagLite::RuntimeError(msg += "must be either Real or Matsubara\n"); } RealType omega; io.readline(omega,"CorrectionVectorOmega="); omega_=PairFreqType(freqEnum, omega); io.readline(eta_,"CorrectionVectorEta="); io.readline(tmp,"CorrectionVectorAlgorithm="); if (tmp == "Krylov") { algorithm_ = BaseType::AlgorithmEnum::KRYLOV; } else if (tmp == "ConjugateGradient") { algorithm_ = BaseType::AlgorithmEnum::CONJUGATE_GRADIENT; } else if (tmp == "Chebyshev") { algorithm_ = BaseType::AlgorithmEnum::CHEBYSHEV; } else if (tmp == "KrylovTime") { algorithm_ = BaseType::AlgorithmEnum::KRYLOVTIME; } else { PsimagLite::String str("TargetParamsCorrectionVector "); str += "Unknown algorithm " + tmp + "\n"; throw PsimagLite::RuntimeError(str); } try { io.readline(cgSteps_,"ConjugateGradientSteps="); } catch (std::exception&) {} try { io.readline(cgEps_,"ConjugateGradientEps="); } catch (std::exception&) {} try { int x = 0; io.readline(x,"TSPUseQns="); err("TSPUseQns= is no longer needed, please delete it from the input file\n"); } catch (std::exception&) {} try { io.readline(firstRitz_, "FirstRitz="); } catch (std::exception&) {} try { io.readline(nForFraction_, "CVnForFraction="); } catch (std::exception&) {} if (nForFraction_ > 1) io.readline(advanceEach_,"TSPAdvanceEach="); if (freqEnum == PsimagLite::FREQ_MATSUBARA && firstRitz_ != 0) err("FirstRitz must be 0 for Matsubara\n"); } virtual RealType correctionA() const { return correctionA_; } virtual SizeType type() const { return type_; } virtual void type(SizeType x) { type_ = x; } virtual SizeType cgSteps() const { return cgSteps_; } virtual PairFreqType omega() const { return omega_; } virtual void omega(PsimagLite::FreqEnum freqEnum,RealType x) { omega_ = PairFreqType(freqEnum,x); } virtual RealType eta() const { return eta_; } virtual RealType cgEps() const { return cgEps_; } virtual typename BaseType::AlgorithmEnum algorithm() const { return algorithm_; } virtual SizeType firstRitz() const { return firstRitz_; } virtual SizeType nForFraction() const { return nForFraction_; } virtual SizeType advanceEach() const { return advanceEach_; } private: SizeType type_; typename BaseType::AlgorithmEnum algorithm_; SizeType cgSteps_; SizeType firstRitz_; SizeType nForFraction_; SizeType advanceEach_; RealType correctionA_; PairFreqType omega_; RealType eta_; RealType cgEps_; }; // class TargetParamsCorrectionVector template inline std::ostream& operator<<(std::ostream& os, const TargetParamsCorrectionVector& t) { os<<"TargetParams.type=AdaptiveDynamic\n"; const TargetParamsCommon& tp = t; os< class TargetParamsDynamic : public TargetParamsCommon { public: typedef TargetParamsCommon TargetParamsCommonType; typedef typename ModelType::RealType RealType; typedef typename ModelType::OperatorType OperatorType; typedef typename OperatorType::PairType PairType; typedef typename OperatorType::StorageType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrReal; typedef PsimagLite::Matrix MatrixType; template TargetParamsDynamic(IoInputter& io, PsimagLite::String targeting, const ModelType& model) : TargetParamsCommonType(io, targeting, model) { io.readline(type_,"DynamicDmrgType="); } virtual SizeType memResolv(PsimagLite::MemResolv&, SizeType, PsimagLite::String = "") const { return 0; } virtual SizeType type() const { return type_; } private: SizeType type_; }; // class TargetParamsDynamic template inline std::ostream& operator<<(std::ostream& os,const TargetParamsDynamic& t) { os<<"TargetParams.type=DynamicDmrg\n"; const typename TargetParamsDynamic::TargetParamsCommonType& tp = t; os< class TargetParamsGroundState : public TargetParamsBase { typedef TargetParamsBase BaseType; public: typedef typename ModelType::RealType RealType; TargetParamsGroundState(PsimagLite::String targeting) : BaseType(targeting) {} virtual SizeType sites() const { return 0; } virtual SizeType sectorIndex() const { throw PsimagLite::RuntimeError("sectorIndex called for gs\n"); } virtual SizeType levelIndex() const { throw PsimagLite::RuntimeError("levelIndex called for gs\n"); } void write(PsimagLite::String, PsimagLite::IoSerializer&) const { // this function intentionally left blank } }; // class TargetParamsGroundState template inline std::ostream& operator<<(std::ostream& os,const TargetParamsGroundState&) { os<<"TargetParams.type=GroundState\n"; return os; } } // namespace Dmrg /*@}*/ #endif // TARGET_PARAMS_GROUNDSTATE_H dmrgpp-6.02/src/Engine/TargetParamsTimeStep.h000066400000000000000000000103501414604301300211370ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TargetParamsTimeStep.h * * This is a structure to represent the parameters of the TimeStep Evolution * algorithm. Don't add functions to this class because * this class's data is all public */ #ifndef TARGET_PARAMS_TIMESTEP_H #define TARGET_PARAMS_TIMESTEP_H #include "TargetParamsTimeVectors.h" #include "TargetParamsCommon.h" #include "GetBraOrKet.h" namespace Dmrg { // Coordinates reading of TargetSTructure from input file template class TargetParamsTimeStep : public TargetParamsTimeVectors { public: typedef TargetParamsTimeVectors TimeVectorParamsType; typedef TargetParamsCommon TargetParamsCommonType; typedef typename ModelType::RealType RealType; template TargetParamsTimeStep(IoInputter& io, PsimagLite::String targeting, const ModelType& model) : TimeVectorParamsType(io, targeting, model), maxTime_(0) { try { io.readline(maxTime_,"TSPMaxTime="); } catch (std::exception&) {} } virtual RealType maxTime() const { return maxTime_; } private: RealType maxTime_; }; // class TargetParamsTimeStep template inline std::ostream& operator<<(std::ostream& os,const TargetParamsTimeStep& t) { os<<"TargetParams.type=TimeStep\n"; const typename TargetParamsTimeStep::TimeVectorParamsType& tp1 = t; os<::TargetParamsCommonType& tp = t; os< 0) os<<"TSPMaxTime="< class TargetParamsTimeVectors : public TargetParamsCommon { public: typedef TargetParamsCommon BaseType; typedef typename ModelType::RealType RealType; typedef typename BaseType::VectorRealType VectorRealType; template TargetParamsTimeVectors(IoInputter& io, PsimagLite::String targeting, const ModelType& model) : BaseType(io, targeting, model), timeSteps_(0), advanceEach_(0), algorithm_(BaseType::AlgorithmEnum::KRYLOV), tau_(0), timeDirection_(1.0) { /*PSIDOC TargetParamsTimeVectors \item[TSPTau] [RealType], $\tau$ for the Krylov, see \cite{re:alvarez11} Section II.B and II.C. \item[TSPTimeSteps] [Integer] $n_v$ as defined in \cite{re:alvarez11} Section II.B \item[TSPAdvanceEach] [Integer] Number of sites to sweep before advancing to the next time. \item[TSPAlgorithm] [String] Either \verb!Krylov! or \verb!RungeKutta! or \verb!SuzukiTrotter!\\ Note that SuzukiTrotter is currently very experimental and unsupported. */ io.readline(tau_,"TSPTau="); io.readline(timeSteps_,"TSPTimeSteps="); io.readline(advanceEach_,"TSPAdvanceEach="); PsimagLite::String s=""; io.readline(s, "TSPAlgorithm="); if (s=="RungeKutta" || s=="rungeKutta" || s=="rungekutta") algorithm_ = BaseType::AlgorithmEnum::RUNGE_KUTTA; if (s=="SuzukiTrotter" || s=="suzukiTrotter" || s=="suzukitrotter") algorithm_ = BaseType::AlgorithmEnum::SUZUKI_TROTTER; if (s=="Chebyshev") { algorithm_ = BaseType::AlgorithmEnum::CHEBYSHEV; io.read(chebyTransform_, "ChebyshevTransform"); if (chebyTransform_.size() != 2) err("ChebyshevTransform must be a vector of two real entries\n"); } try { io.readline(timeDirection_,"TSPTimeFactor="); } catch (std::exception&) {} } virtual SizeType timeSteps() const { return timeSteps_; } virtual SizeType advanceEach() const { return advanceEach_; } virtual typename BaseType::AlgorithmEnum algorithm() const { return algorithm_; } virtual RealType tau() const { return tau_; } virtual RealType timeDirection() const { return timeDirection_; } virtual const VectorRealType& chebyTransform() const { return chebyTransform_; } private: SizeType timeSteps_; SizeType advanceEach_; typename BaseType::AlgorithmEnum algorithm_; RealType tau_; RealType timeDirection_; VectorRealType chebyTransform_; }; // class TargetParamsTimeVectors template inline std::ostream& operator<<(std::ostream& os,const TargetParamsTimeVectors& t) { os<<"TargetParams.type=TimeVectors"; os<<"TargetParams.tau="< class TargetQuantumElectrons { public: typedef PsimagLite::Vector::Type VectorSizeType; typedef typename QnType::PairSizeType PairSizeType; typedef typename QnType::VectorQnType VectorQnType; template TargetQuantumElectrons(IoInputType& io) : totalNumberOfSites_(0), isSu2_(false) { io.readline(totalNumberOfSites_, "TotalNumberOfSites="); int tmp = 0; try { io.readline(tmp,"UseSu2Symmetry="); } catch (std::exception&) {} isSu2_ = (tmp > 0); bool hasNqns = false; SizeType nqns = 0; try { io.readline(nqns, "NumberOfTargetQns="); hasNqns = true; } catch (std::exception&) {} if (!hasNqns) { readOneTarget(io, ""); return; } for (SizeType i = 0; i < nqns; ++i) readOneTarget(io, ttos(i)); } SizeType sizeOfOther() const { const SizeType n = vqn_.size(); if (n == 0) return 0; const SizeType answer = vqn_[0].other.size(); for (SizeType i = 1; i < n; ++i) { if (vqn_[i].other.size() == answer) continue; err("sizeOfOther must be the same for all target qns\n"); } return answer; } SizeType size() const { return vqn_.size(); } const QnType& qn(SizeType ind) const { assert(ind < vqn_.size()); return vqn_[ind]; } void updateQuantumSector(VectorQnType& quantumSector, SizeType sites, ProgramGlobals::DirectionEnum direction, SizeType step, const VectorQnType& adjustQuantumNumbers) const { const SizeType maxSites = totalNumberOfSites_; if (direction == ProgramGlobals::DirectionEnum::INFINITE && sites < maxSites && adjustQuantumNumbers.size() > step) { if (quantumSector.size() != 1) err("adjustQuantumNumbers only with single target\n"); quantumSector[0] = adjustQuantumNumbers[step]; return; } else { quantumSector = vqn_; } const SizeType n = quantumSector.size(); for (SizeType i = 0; i < n; ++i) quantumSector[i].scale(sites, totalNumberOfSites_, direction, isSu2_); } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/TargetQuantumElectrons"; io.createGroup(label); io.write(label + "/TotalNumberOfSites", totalNumberOfSites_); io.write(label + "/isSu2", isSu2_); vqn_.write(label + "/qn", io); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const TargetQuantumElectrons& p) { if (p.vqn_.size() == 0) return os; const QnType& qn = p.vqn_[0]; os<<"TargetElectronsTotal="< 1) os<<"FIXME TODO: More than one qn found\n"; return os; } private: TargetQuantumElectrons(const TargetQuantumElectrons&); TargetQuantumElectrons& operator=(const TargetQuantumElectrons&); template void readOneTarget(IoInputType& io, const PsimagLite::String label) { QnType qn(QnType::zero()); VectorSizeType qnOther; const bool allowUpDown = true; PsimagLite::String msg("TargetQuantumElectrons: "); bool hasTwiceJ = false; try { io.readline(qn.jmPair.first, "TargetSpinTimesTwo" + label + "="); hasTwiceJ = true; } catch (std::exception&) {} SizeType ready = 0; if (allowUpDown) { SizeType electronsUp = 0; SizeType electronsDown = 0; try { electronsUp = readNumberOrExpression(io, "TargetElectronsUp" + label + "="); electronsDown = readNumberOrExpression(io, "TargetElectronsDown" + label + "="); SizeType tmp = electronsUp + electronsDown; qn.oddElectrons = (tmp & 1); qnOther.push_back(tmp); qnOther.push_back(electronsUp); ready = 2; } catch (std::exception&) {} } try { SizeType tmp = readNumberOrExpression(io, "TargetElectronsTotal" + label + "="); qn.oddElectrons = (tmp & 1); qnOther.push_back(tmp); ready++; } catch (std::exception&) {} try { SizeType szPlusConst = readNumberOrExpression(io, "TargetSzPlusConst" + label + "="); qnOther.push_back(szPlusConst); } catch (std::exception&) {} if (ready == 3) { msg += "Provide either up/down or total/sz but not both.\n"; throw PsimagLite::RuntimeError(msg); } bool flag = false; try { readNumberOrExpression(io, "TargetExtra" + label + "="); flag = true; } catch (std::exception&) {} if (flag) err("Instead of TargetExtra" + label + "= please use a vector\n"); try { VectorSizeType extra; io.read(extra,"TargetExtra" + label); for (SizeType i = 0; i < extra.size(); ++i) qnOther.push_back(extra[i]); } catch (std::exception&) {} qn.other.fromStdVector(qnOther); if (isSu2_ && !hasTwiceJ) { msg += "Please provide TargetSpinTimesTwo when running with SU(2).\n"; throw PsimagLite::RuntimeError(msg); } if (isSu2_) qn.oddElectrons = (totalNumberOfSites_ & 1); vqn_.push_back(qn); } template SizeType readNumberOrExpression(IoInputType& io, PsimagLite::String fullLabel) { typedef AlgebraicStringToNumber AlgebraicStringToNumberType; PsimagLite::String val; io.readline(val, fullLabel); const PsimagLite::String msg = "Target number for " + fullLabel; AlgebraicStringToNumberType algebraicStringToNumber(msg, totalNumberOfSites_); SizeType p = algebraicStringToNumber.procLength(val); std::cout< class TargetSelector { typedef typename TargetingBaseType::MatrixVectorType MatrixVectorType; typedef typename MatrixVectorType::ModelType ModelType; typedef typename ModelType::ParametersType ParametersType; typedef typename ModelType::RealType RealType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename TargetingBaseType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisType::QnType QnType; typedef typename ParametersType::OptionsType OptionsType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename TargetingBaseType::LanczosSolverType LanczosSolverType; typedef typename TargetingBaseType::VectorWithOffsetType VectorWithOffsetType; typedef TargetingGroundState TargetingGroundStateType; typedef TargetingTimeStep TargetingTimeStepType; typedef TargetingChebyshev TargetingChebyshevType; typedef TargetingDynamic TargetingDynamicType; typedef TargetingCorrectionVector TargetingCorrectionVectorType; typedef TargetingCorrection TargetingCorrectionType; typedef TargetingMetts TargetingMettsType; typedef TargetingRixsStatic TargetingRixsStaticType; typedef TargetingRixsDynamic TargetingRixsDynamicType; typedef TargetingExpression TargetingExpressionType; typedef TargetingCVEvolution TargetingCVEvolutionType; typedef PsimagLite::Vector::Type VectorStringType; public: TargetSelector(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, const typename QnType::VectorQnType& quantumSector, InputValidatorType& ioIn) : psi_(nullptr), lrs_(lrs), model_(model), wft_(wft), quantumSector_(quantumSector), ioIn_(ioIn) {} ~TargetSelector() { delete psi_; psi_ = nullptr; } TargetSelector(const TargetSelector&) = delete; TargetSelector& operator=(const TargetSelector&) = delete; TargetingBaseType& operator()() { if (psi_) return *psi_; PsimagLite::String targeting = getTargeting(model_.params().options); return operator()(targeting); } TargetingBaseType& operator()(PsimagLite::String targeting) { if (psi_) err("TargetingBaseType::operator(): can only be called multiple times" + PsimagLite::String(" without argument\n")); check1(targeting); assert(0 < quantumSector_.size()); const QnType& qn = quantumSector_[0]; if (targeting=="TimeStepTargeting" || targeting == "TargetingAncilla") { psi_ = new TargetingTimeStepType(lrs_,model_,wft_,qn,ioIn_, targeting); } else if (targeting=="DynamicTargeting") { psi_ = new TargetingDynamicType(lrs_,model_,wft_,qn,ioIn_); } else if (targeting=="CorrectionVectorTargeting") { psi_ = new TargetingCorrectionVectorType(lrs_,model_,wft_,qn,ioIn_); } else if (targeting=="TargetingChebyshev") { psi_ = new TargetingChebyshevType(lrs_,model_,wft_,qn,ioIn_); } else if (targeting=="CorrectionTargeting") { psi_ = new TargetingCorrectionType(lrs_,model_,wft_,qn,ioIn_); } else if (targeting == "GroundStateTargeting") { psi_ = new TargetingGroundStateType(lrs_,model_,wft_,qn,ioIn_); } else if (targeting == "MettsTargeting") { psi_ = new TargetingMettsType(lrs_,model_,wft_,qn,ioIn_); } else if (targeting == "TargetingRixsStatic") { psi_ = new TargetingRixsStaticType(lrs_,model_,wft_,qn,ioIn_); } else if (targeting == "TargetingRixsDynamic") { psi_ = new TargetingRixsDynamicType(lrs_,model_,wft_,qn,ioIn_); } else if (targeting == "TargetingExpression") { psi_ = new TargetingExpressionType(lrs_, model_, wft_, qn, ioIn_); } else if (targeting == "TargetingCVEvolution") { psi_ = new TargetingCVEvolutionType(lrs_, model_, wft_, qn, ioIn_); } else { err("Unknown targeting " + targeting + "\n"); } psi_->postCtor(); return *psi_; } private: PsimagLite::String getTargeting(const OptionsType& options) const { PsimagLite::String targeting("GroundStateTargeting"); VectorStringType targets = {"GroundStateTargeting", "TimeStepTargeting", "AdaptiveDynamicTargeting", "DynamicTargeting", "CorrectionVectorTargeting", "CorrectionTargeting", "MettsTargeting", "TargetingAncilla", "TargetingCorrelations", "TargetingInSitu", "TargetingRixsStatic", "TargetingRixsDynamic", "TargetingChebyshev", "TargetingExpression", "TargetingMultiQ", "TargetingCVEvolution"}; const SizeType totalTargets = targets.size(); SizeType count = 0; for (SizeType i = 0;i < totalTargets; ++i) { if (options.isSet(targets[i])) { if (targeting == "AdaptiveDynamicTargeting" && targets[i] == "DynamicTargeting") continue; targeting = targets[i]; count++; } } if (count == 1) return targeting; if (count > 1) err("Only one targeting at a time supported\n"); std::cerr <<" No explicit targeting found, asumming " << targeting <<"\n"; std::cout <<" No explicit targeting found, asumming " << targeting <<"\n"; return targeting; } void check1(PsimagLite::String) const {} TargetingBaseType* psi_; const LeftRightSuperType& lrs_; const ModelType& model_; const WaveFunctionTransfType& wft_; const typename QnType::VectorQnType& quantumSector_; InputValidatorType& ioIn_; }; } #endif // TARGETSELECTOR_H dmrgpp-6.02/src/Engine/TargetingBase.h000066400000000000000000000314741414604301300176230ustar00rootroot00000000000000/* Copyright (c) 2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TargetingBase.h * * * */ #ifndef TARGETING_BASE_H #define TARGETING_BASE_H #include #include "TargetParamsBase.h" #include "TargetHelper.h" #include "TargetingCommon.h" #include "Wft/WaveFunctionTransfFactory.h" #include "Io/IoSelector.h" #include "Intent.h" namespace Dmrg { template class TargetingBase { public: typedef LanczosSolverType_ LanczosSolverType; typedef VectorWithOffsetType_ VectorWithOffsetType; typedef typename LanczosSolverType::MatrixType MatrixVectorType; typedef typename MatrixVectorType::ModelType ModelType; typedef typename ModelType::RealType RealType; typedef typename ModelType::ParametersType ParametersType; typedef typename ParametersType::OptionsType OptionsType; typedef PsimagLite::ParametersForSolver ParametersForSolverType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename BasisType::BlockType BlockType; typedef typename BasisType::QnType QnType; typedef WaveFunctionTransfFactory WaveFunctionTransfType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef VectorType TargetVectorType; typedef TargetParamsBase TargetParamsType; typedef TargetHelper TargetHelperType; typedef TargetingCommon TargetingCommonType; typedef typename TargetingCommonType::ApplyOperatorExpressionType ApplyOperatorExpressionType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ApplyOperatorExpressionType::StageEnumType StageEnumType; typedef typename ApplyOperatorExpressionType::DmrgSerializerType DmrgSerializerType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename PsimagLite::Vector::Type VectorVectorType; typedef typename PsimagLite::Vector::Type VectorVectorVectorType; typedef typename TargetingCommonType::VectorVectorVectorWithOffsetType VectorVectorVectorWithOffsetType; TargetingBase(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, SizeType indexNoAdvance) : lrs_(lrs), model_(model), commonTargeting_(lrs,model,wft,indexNoAdvance) { Intent intent(model_); intent.check(); const SizeType nexcited = model_.params().numberOfExcited; if (nexcited == 1) return; // EARLY EXIT PsimagLite::String msg = "nexcited = " + ttos(nexcited) + " > 1 is experimental\n"; std::cerr< 0); assert(nexcited > 0); if (nsectors != inV.size()) err("FATAL: inV.size == " + ttos(inV.size()) + " but params.excited.size= " + ttos(nsectors) + "\n"); for (SizeType sectorIndex = 0; sectorIndex < nsectors; ++sectorIndex) { if (inV[sectorIndex].size() != nexcited) err("Expected inV[" + ttos(sectorIndex) + "].size == " + ttos(nexcited) + " but found " + ttos(inV[sectorIndex].size()) + " instead\n"); for (SizeType excitedIndex = 0; excitedIndex < nexcited; ++excitedIndex) { commonTargeting_.aoe().setPsi(sectorIndex, excitedIndex, inV[sectorIndex][excitedIndex], someBasis, sectors); } } } virtual void updateOnSiteForCorners(BasisWithOperatorsType& basisWithOps) const { if (BasisWithOperatorsType::useSu2Symmetry()) return; BlockType X = basisWithOps.block(); if (X.size()!=1) return; if (X[0] != 0 && X[0] != lrs_.super().block().size()-1) return; basisWithOps.setOneSite(X, model_, commonTargeting_.aoe().time()); } virtual bool end() const { return false; } virtual SizeType size() const { if (commonTargeting_.aoe().allStages(StageEnumType::DISABLED)) return 0; return commonTargeting_.aoe().targetVectors().size(); } virtual RealType normSquared(SizeType i) const { return commonTargeting_.normSquared(i); } virtual void initPsi(SizeType nsectors, SizeType nexcited) { commonTargeting_.aoe().initPsi(nsectors, nexcited); } // legacy thing for vectorwithoffsets virtual void initialGuess(VectorVectorType& initialVector, const VectorSizeType& block, bool noguess, const VectorSizeType& compactedWeights, const VectorSizeType& sectors, const BasisType& basis) const { if (VectorWithOffsetType::name() != "vectorwithoffsets") err("FATAL: Wrong execution path\n"); const VectorWithOffsetType& psi00 = commonTargeting_.aoe(). ensureOnlyOnePsi("initialGuess"); VectorWithOffsetType vwo(compactedWeights, sectors, basis); commonTargeting_.initialGuess(vwo, psi00, block, noguess); const SizeType n = vwo.sectors(); initialVector.resize(n); for (SizeType i = 0; i < n; ++i) vwo.extract(initialVector[i], vwo.sector(i)); } virtual void initialGuess(VectorType& initialVector, const VectorSizeType& block, bool noguess, const VectorSizeType& compactedWeights, const VectorSizeType& sectors, SizeType sectorIndex, SizeType excited, const BasisType& basis) const { if (VectorWithOffsetType::name() == "vectorwithoffsets") err("FATAL: Wrong execution path\n"); const VectorVectorVectorWithOffsetType& psi = commonTargeting_.aoe().psiConst(); const SizeType nsectors = psi.size(); if (nsectors != compactedWeights.size()) err("initialGuess compactedWeights\n"); const SizeType numberOfExcited = psi[sectorIndex].size(); if (excited > numberOfExcited) err("initialGuess, excited=" + ttos(excited) + " > " + ttos(numberOfExcited) + "\n"); SizeType start = 0; SizeType end = numberOfExcited; if (excited < numberOfExcited) { start = excited; end = excited + 1; } assert(sectorIndex < psi.size()); assert(sectorIndex < compactedWeights.size()); assert(sectorIndex < sectors.size()); for (SizeType e = start; e < end; ++e) { VectorWithOffsetType vwo(compactedWeights[sectorIndex], sectors[sectorIndex], basis); assert(e < psi[sectorIndex].size()); if (psi[sectorIndex][e] == nullptr) { std::cerr<<__FILE__<<":"<<__LINE__<<" sectorIndex="< #include "ProgressIndicator.h" #include "TargetParamsCorrectionVector.h" #include "ProgramGlobals.h" #include "ParametersForSolver.h" #include "TimeVectorsKrylov.h" #include "TargetingBase.h" #include "BlockDiagonalMatrix.h" #include "PredicateAwesome.h" #include "CorrectionVectorSkeleton.h" namespace Dmrg { template class TargetingCVEvolution : public TargetingBase { enum {BORDER_NEITHER, BORDER_LEFT, BORDER_RIGHT}; public: typedef LanczosSolverType_ LanczosSolverType; typedef TargetingBase BaseType; typedef typename BaseType::TargetingCommonType TargetingCommonType; typedef std::pair PairType; typedef typename BaseType::OptionsType OptionsType; typedef typename BaseType::MatrixVectorType MatrixVectorType; typedef typename MatrixVectorType::ModelType ModelType; typedef typename ModelType::RealType RealType; typedef typename ModelType::OperatorsType OperatorsType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename BaseType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename WaveFunctionTransfType::VectorWithOffsetType VectorWithOffsetType; typedef typename VectorWithOffsetType::value_type ComplexOrRealType; typedef typename VectorWithOffsetType::VectorType TargetVectorType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef TargetParamsCorrectionVector TargetParamsType; typedef typename BasisType::BlockType BlockType; typedef typename TargetingCommonType::TimeSerializerType TimeSerializerType; typedef typename OperatorType::StorageType SparseMatrixType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename BasisType::QnType QnType; typedef typename TargetingCommonType::StageEnumType StageEnumType; typedef CorrectionVectorSkeleton CorrectionVectorSkeletonType; TargetingCVEvolution(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, const QnType&, InputValidatorType& ioIn) : BaseType(lrs, model, wft, 0), tstStruct_(ioIn, "TargetingCVEvolution", model), wft_(wft), progress_("TargetingCVEvolution"), counter_(0), almostDone_(0), skeleton_(ioIn, tstStruct_, model, lrs, this->common().aoe().energy()), weight_(targets()), gsWeight_(tstStruct_.gsWeight()) { if (!wft.isEnabled()) err("TST needs an enabled wft\n"); if (tstStruct_.sites() == 0) err("TST needs at least one TSPSite\n"); if (gsWeight_ < 0 || gsWeight_ >= 1) err("gsWeight_ must be in [0, 1)\n"); SizeType n = weight_.size(); RealType factor = (1.0 - gsWeight_)/n; for (SizeType i = 0; i < n; ++i) weight_[i] = factor; } SizeType sites() const { return tstStruct_.sites(); } SizeType targets() const { return PsimagLite::IsComplexNumber::True ? 3 : 5; } RealType weight(SizeType i) const { assert(!this->common().aoe().allStages(StageEnumType::DISABLED)); return weight_[i]; } RealType gsWeight() const { if (this->common().aoe().allStages(StageEnumType::DISABLED)) return 1.0; return gsWeight_; } bool includeGroundStage() const { if (!this->common().aoe().noStageIs(StageEnumType::DISABLED)) return true; bool b = (fabs(gsWeight_)>1e-6); return b; } void evolve(const VectorRealType& energies, ProgramGlobals::DirectionEnum direction, const BlockType& block1, const BlockType&, SizeType loopNumber) { assert(block1.size() > 0); SizeType site = block1[0]; assert(energies.size() > 0); RealType Eg = energies[0]; evolveInternal(Eg,direction,block1,loopNumber); SizeType numberOfSites = this->lrs().super().block().size(); if (site > 1 && site < numberOfSites - 2) return; if (direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) { if (site == 1) return; } else { if (site == numberOfSites - 2) return; } SizeType x = (site == 1) ? 0 : numberOfSites - 1; BlockType block(1, x); evolveInternal(Eg,direction,block,loopNumber); } bool end() const { return (almostDone_ >= 2); } void read(typename TargetingCommonType::IoInputType& io, PsimagLite::String prefix) { this->common().readGSandNGSTs(io, prefix, "TimeStep"); } void write(const VectorSizeType& block, PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Saving state..."; progress_.printline(msgg, std::cout); this->common().write(io, block, prefix); this->common().writeNGSTs(io, prefix, block, "TimeStep"); } private: void evolveInternal(RealType Eg, ProgramGlobals::DirectionEnum direction, const BlockType& block1, SizeType loopNumber) { if (direction == ProgramGlobals::DirectionEnum::INFINITE) return; VectorWithOffsetType phiNew; assert(block1.size() > 0); SizeType site = block1[0]; this->common().aoe().getPhi(&phiNew, Eg, direction, site, loopNumber, tstStruct_); if (phiNew.size() == 0) return; this->common().aoe().targetVectors(0) = phiNew; VectorWithOffsetType bogusTv; const SizeType currentTimeStep = this->common().aoe().currentTimeStep(); if (currentTimeStep == 0) { if (PsimagLite::IsComplexNumber::True) { skeleton_.calcDynVectors(phiNew, this->common().aoe().targetVectors(1), bogusTv); skeleton_.calcDynVectors(this->common().aoe().targetVectors(1), this->common().aoe().targetVectors(2), bogusTv); } else { skeleton_.calcDynVectors(phiNew, this->common().aoe().targetVectors(1), this->common().aoe().targetVectors(2)); skeleton_.calcDynVectors(this->common().aoe().targetVectors(1), this->common().aoe().targetVectors(2), this->common().aoe().targetVectors(3), this->common().aoe().targetVectors(4)); } } else { bool timeHasAdvanced = (counter_ != currentTimeStep && currentTimeStep < tstStruct_.nForFraction()); if (counter_ != currentTimeStep && !timeHasAdvanced) { std::cout<<__FILE__<<" is now DONE\n"; std::cerr<<__FILE__<<" is now DONE\n"; ++almostDone_; } if (PsimagLite::IsComplexNumber::True) { const SizeType advanceIndex = (timeHasAdvanced) ? 2 : 1; // wft tv1 this->common().aoe().wftOneVector(bogusTv, this->common().aoe().targetVectors(advanceIndex), site); this->common().aoe().targetVectors(1) = bogusTv; skeleton_.calcDynVectors(this->common().aoe().targetVectors(1), this->common().aoe().targetVectors(2), bogusTv); } else { VectorWithOffsetType bogusTv2; const SizeType advanceIndex = (timeHasAdvanced) ? 3 : 1; this->common().aoe().wftOneVector(bogusTv, this->common().aoe().targetVectors(advanceIndex), site); const SizeType advanceIndexp1 = advanceIndex+1; this->common().aoe().wftOneVector(bogusTv2, this->common().aoe().targetVectors(advanceIndexp1), site); this->common().aoe().targetVectors(1) = bogusTv; this->common().aoe().targetVectors(2) = bogusTv2; skeleton_.calcDynVectors(this->common().aoe().targetVectors(1), this->common().aoe().targetVectors(2), this->common().aoe().targetVectors(3), this->common().aoe().targetVectors(4)); } } counter_ = currentTimeStep; bool doBorderIfBorder = true; this->common().cocoon(block1, direction, doBorderIfBorder); this->common().printNormsAndWeights(gsWeight_, weight_); } TargetParamsType tstStruct_; const WaveFunctionTransfType& wft_; PsimagLite::ProgressIndicator progress_; SizeType counter_; SizeType almostDone_; CorrectionVectorSkeletonType skeleton_; VectorRealType weight_; RealType gsWeight_; }; //class TargetingCVEvolution } // namespace Dmrg #endif dmrgpp-6.02/src/Engine/TargetingChebyshev.h000066400000000000000000000312361414604301300206650ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ #ifndef TARGETING_CHEBYSHEV_H #define TARGETING_CHEBYSHEV_H #include #include "ProgressIndicator.h" #include "TargetParamsTimeStep.h" #include "ProgramGlobals.h" #include "ParametersForSolver.h" #include "TimeVectorsChebyshev.h" #include "BlockDiagonalMatrix.h" #include "OracleChebyshev.h" namespace Dmrg { template class TargetingChebyshev : public TargetingBase { enum {BORDER_NEITHER, BORDER_LEFT, BORDER_RIGHT}; public: typedef LanczosSolverType_ LanczosSolverType; typedef TargetingBase BaseType; typedef typename BaseType::TargetingCommonType TargetingCommonType; typedef typename BaseType::OptionsType OptionsType; typedef std::pair PairType; typedef typename BaseType::MatrixVectorType MatrixVectorType; typedef typename MatrixVectorType::ModelType ModelType; typedef typename ModelType::RealType RealType; typedef typename ModelType::OperatorsType OperatorsType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename BaseType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename WaveFunctionTransfType::VectorWithOffsetType VectorWithOffsetType; typedef typename VectorWithOffsetType::value_type ComplexOrRealType; typedef typename VectorWithOffsetType::VectorType TargetVectorType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef TargetParamsTimeStep TargetParamsType; typedef typename BasisType::BlockType BlockType; typedef typename TargetingCommonType::TimeSerializerType TimeSerializerType; typedef typename OperatorType::StorageType SparseMatrixType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename BasisType::QnType QnType; typedef typename TargetingCommonType::ApplyOperatorExpressionType ApplyOperatorExpressionType; typedef typename ApplyOperatorExpressionType::ApplyOperatorType ApplyOperatorType; typedef typename TargetingCommonType::StageEnumType StageEnumType; TargetingChebyshev(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, const QnType&, InputValidatorType& ioIn) : BaseType(lrs, model, wft, 0), tstStruct_(ioIn, "TargetingChebyshev", model), wft_(wft), progress_("TargetingChebyshev"), times_(tstStruct_.timeSteps()), weight_(tstStruct_.timeSteps()), tvEnergy_(times_.size(),0.0), gsWeight_(tstStruct_.gsWeight()) { if (!wft.isEnabled()) err("TST needs an enabled wft\n"); if (tstStruct_.sites() == 0) err("TST needs at least one TSPSite\n"); SizeType nops = tstStruct_.sites(); SizeType linSize = model.superGeometry().numberOfSites(); for (SizeType i = 0; i < nops; ++i) if (tstStruct_.sites(i) == 0 || tstStruct_.sites(i) == linSize - 1) err("TargetingChebyshev: FATAL: No application of operators at borders\n"); RealType tau = tstStruct_.tau(); RealType sum = 0; SizeType n = times_.size(); if (n < 3) throw PsimagLite::RuntimeError("At least 3 Chebyshev vectors need to be targets\n"); RealType factor = (n+4.0)/(n+2.0); factor *= (1.0 - gsWeight_); for (SizeType i=0;icommon().aoe().initTimeVectors(tstStruct_, times_, ioIn); } SizeType sites() const { return tstStruct_.sites(); } SizeType targets() const { return tstStruct_.timeSteps(); } RealType weight(SizeType i) const { assert(!this->common().aoe().allStages(StageEnumType::DISABLED)); return weight_[i]; } RealType gsWeight() const { if (this->common().aoe().allStages(StageEnumType::DISABLED)) return 1.0; return gsWeight_; } bool includeGroundStage() const { if (!this->common().aoe().noStageIs(StageEnumType::DISABLED)) return true; bool b = (fabs(gsWeight_)>1e-6); return b; } void evolve(const VectorRealType& energies, ProgramGlobals::DirectionEnum direction, const BlockType& block1, const BlockType&, SizeType loopNumber) { assert(energies.size() > 0); RealType Eg = energies[0]; evolveInternal(Eg, direction, block1, loopNumber); bool doBorderIfBorder = true; this->common().cocoon(block1, direction, doBorderIfBorder); // in-situ } bool end() const { return (tstStruct_.maxTime() != 0 && this->common().aoe().time() >= tstStruct_.maxTime()); } void read(typename TargetingCommonType::IoInputType& io, PsimagLite::String prefix) { this->common().readGSandNGSTs(io, prefix, "Chebyshev"); } void write(const VectorSizeType& block, PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Saving state..."; progress_.printline(msgg, std::cout); assert(block.size() > 0); this->common().write(io, block, prefix); this->common().writeNGSTs(io, prefix, block, "Chebyshev"); } private: void evolveInternal(RealType Eg, ProgramGlobals::DirectionEnum direction, const BlockType& block1, SizeType loopNumber) { if (direction == ProgramGlobals::DirectionEnum::INFINITE) return; VectorWithOffsetType phiNew; this->common().aoe().getPhi(&phiNew, Eg, direction, block1[0], loopNumber, tstStruct_); if (phiNew.size() == 0) return; VectorSizeType indices(times_.size()); for (SizeType i = 0; i < times_.size(); ++i) indices[i] = i; bool allOperatorsApplied = (this->common().aoe().noStageIs(StageEnumType::DISABLED) && this->common().aoe().noStageIs(StageEnumType::OPERATOR)); assert(0 < block1.size()); bool isLastCall = true; this->common().aoe().calcTimeVectors(indices, Eg, phiNew, direction, allOperatorsApplied, false, // don't wft or advance indices[0] block1, isLastCall); assert(phiNew.offset(0) == this->common().aoe().targetVectors()[1].offset(0)); const OptionsType& options = this->model().params().options; const bool normalizeTimeVectors = (options.isSet("normalizeVectors") && !options.isSet("neverNormalizeVectors")); assert(phiNew.offset(0) == this->common().aoe().targetVectors()[1].offset(0)); if (normalizeTimeVectors) this->common().normalizeTimeVectors(); this->common().printNormsAndWeights(gsWeight_, weight_); assert(phiNew.offset(0) == this->common().aoe().targetVectors()[1].offset(0)); } void oracleChebyshev(SizeType site, SizeType systemOrEviron) const { typedef OracleChebyshev OracleChebyshevType; OracleChebyshevType oracle(BaseType::model(), BaseType::lrs(), this->common().aoe().currentTime(), tstStruct_, this->common().aoe().energy()); OperatorType A = BaseType::model().naturalOperator("c", 0, 0); oracle(3, this->common(), systemOrEviron, site, A, ApplyOperatorType::BORDER_NO); } void printChebyshev() const { for (SizeType i=0;icommon().aoe().targetVectors().size();i++) printChebyshev(this->common().aoe().targetVectors()[i],i); } void printChebyshev(const VectorWithOffsetType& phi,SizeType whatTarget) const { for (SizeType ii=0;iilrs().super().findPartitionNumber(phi.offset(i0)); typename ModelType::HamiltonianConnectionType hc(p, BaseType::lrs(), BaseType::model().geometry(), BaseType::model().modelLinks(), this->common().aoe().currentTime(), 0); typename LanczosSolverType::MatrixType lanczosHelper(BaseType::model(), hc); SizeType total = phi.effectiveSize(i0); TargetVectorType phi2(total); phi.extract(phi2,i0); TargetVectorType x(total); lanczosHelper.matrixVectorProduct(x,phi2); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Hamiltonian average at Che-time="<common().aoe().currentTime(); msg<<" for target="<="<="< #include "ApplyOperatorExpression.h" #include "Io/IoSelector.h" #include "PsimagLite.h" #include "GetBraOrKet.h" #include "RestartStruct.h" #include "SdhsReinterpret.h" namespace Dmrg { template class TargetingCommon { public: enum SetTvsEnum { NO_TVS = false, READ_AND_SET_TVS = true}; typedef VectorWithOffsetType_ VectorWithOffsetType; typedef LanczosSolverType_ LanczosSolverType; typedef PsimagLite::IoSelector IoType; typedef typename IoType::In IoInputType; typedef typename TargetHelperType::RealType RealType; typedef typename TargetHelperType::ModelType ModelType; typedef typename TargetHelperType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LanczosSolverType::PostProcType PostProcType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef PsimagLite::Matrix DenseMatrixType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisWithOperatorsType::VectorQnType VectorQnType; typedef typename BasisType::BlockType BlockType; typedef PsimagLite::Vector::Type VectorStringType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef ApplyOperatorExpression ApplyOperatorExpressionType; typedef typename ApplyOperatorExpressionType::VectorSizeType VectorSizeType; typedef typename ApplyOperatorExpressionType::ApplyOperatorType ApplyOperatorType; typedef typename ApplyOperatorType::BorderEnum BorderEnumType; typedef typename TargetHelperType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename ApplyOperatorExpressionType::TargetParamsType TargetParamsType; typedef typename ApplyOperatorExpressionType::VectorVectorWithOffsetType VectorVectorWithOffsetType; typedef typename ApplyOperatorExpressionType::VectorRealType VectorRealType; typedef typename ApplyOperatorExpressionType::PairType PairType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef Braket BraketType; typedef FermionSign FermionSignType; typedef typename ApplyOperatorExpressionType::StageEnumType StageEnumType; typedef TimeSerializer TimeSerializerType; typedef RestartStruct RestartStructType; typedef typename ApplyOperatorExpressionType::VectorVectorVectorWithOffsetType VectorVectorVectorWithOffsetType; typedef SdhsReinterpret SdhsReinterpretType; enum class OpLabelCategory { DRESSED, BARE }; TargetingCommon(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, SizeType indexNoAdvance) : cocoonType_(OpLabelCategory::DRESSED), progress_("TargetingCommon"), targetHelper_(lrs, model, wft), aoe_(targetHelper_, indexNoAdvance), inSitu_(model.superGeometry().numberOfSites()) { PsimagLite::split(meas_, model.params().insitu, ","); SizeType n = meas_.size(); for (SizeType i = 0; i < n; ++i) { const bool isDressed = isOpLabelDressed(meas_[i]); // check this early that what's passed makes sense if (isDressed) BraketType(model, meas_[i]); OpLabelCategory cocoonExpected = (isDressed) ? OpLabelCategory::DRESSED : OpLabelCategory::BARE; if (i == 0) { cocoonType_ = cocoonExpected; continue; } if (cocoonType_ != cocoonExpected) err("FATAL: If one label is dressed (bare) then all must be dressed (bare)\n"); } } void postCtor(SizeType tstSites, SizeType targets) { aoe_.postCtor(tstSites); aoe_.targetVectorsResize(targets); } // START read/write void write(PsimagLite::IoSelector::Out& io, const VectorSizeType& block, PsimagLite::String prefix) const { if (block.size() != 1) err(PsimagLite::String(__FILE__) + " write() only supports blocks.size=1\n"); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Saving state..."; progress_.printline(msgg, std::cout); io.write(block[0], prefix + "/TargetCentralSite"); aoe_.writePsi(io, prefix); } void writeNGSTs(PsimagLite::IoSelector::Out& io, PsimagLite::String prefix, const VectorSizeType& block, PsimagLite::String name, const PostProcType& cf) const { cf.write(io, prefix); writeNGSTs(io, prefix, block, name); } void writeNGSTs(PsimagLite::IoSelector::Out& io, PsimagLite::String prefix, const VectorSizeType& block, PsimagLite::String name) const { SizeType site = block[0]; TimeSerializerType ts(aoe_.currentTimeStep(), aoe_.time(), site, aoe_.targetVectors(), aoe_.stages(), name); ts.write(io, prefix); } void read(IoInputType& io, PsimagLite::String prefix) { const PsimagLite::String label = targetHelper_.model().params(). checkpoint.labelForEnergy(); prefix += "/"; aoe_.loadEnergy(io, label); aoe_.readPsi(io, prefix); } void readGSandNGSTs(IoInputType& io, PsimagLite::String prefix, PsimagLite::String name) { read(io, prefix); TimeSerializerType* ts = 0; try { ts = new TimeSerializerType(io, prefix); } catch (...) { return; } const typename TimeSerializerType::VectorStageEnumType& stages = ts->stages(); const SizeType rstages = stages.size(); // read stages const SizeType dstages = aoe_.stages().size(); // destination stages const RestartStructType& checkpoint = targetHelper_.model().params().checkpoint; const SizeType dstagesOrZero = (checkpoint.mapStages()) ? dstages : 0; if (dstagesOrZero > 0 && dstagesOrZero != rstages) err("TargetingCommon::readGSandNGSTs: stages cannot be set from previous\n"); for (SizeType i = 0; i < dstagesOrZero; ++i) aoe_.setStage(i, stages[i]); SizeType rtvs = ts->numberOfVectors(); // read tvs SizeType dtvs = aoe_.targetVectors().size(); // destination tvs int tvForPsi = checkpoint.sourceTvForPsi(); if (tvForPsi >= 0) { SizeType tvForPsiUnsigned = tvForPsi; if (tvForPsiUnsigned >= rtvs) err("TargetingCommon::readGSandNGSTs: sourceTvForPsi >= " + ttos(rtvs) + "\n"); std::cout<<"FIXME TODO WARNING: Need better spec for TvForPsi\n"; std::cerr<<"FIXME TODO WARNING: Need better spec for TvForPsi\n"; aoe_.setOnlyOnePsi(ts->vector(tvForPsiUnsigned)); } for (SizeType i = 0; i < dtvs; ++i) { const int j = checkpoint.mappingTvs(i); if (j < 0) continue; const SizeType jj = j; if (jj >= rtvs) { err("TargetingCommon::readGSandNGSTs: tvs mapping failed " + ttos(j) + " >= " + ttos(rtvs) + "\n"); } aoe_.targetVectors(i) = ts->vector(j); } // FIXME TODO check that the NGST name changes instead bool sameNgst = isThisNgstSameAsPrevious(name, ts->name(), dtvs, rtvs); SizeType cTimeStep = (sameNgst) ? ts->currentTimeStep() : 0; aoe_.setCurrentTimeStep(cTimeStep); RealType timeReal = (sameNgst) ? ts->time() : 0; aoe_.setCurrentTime(timeReal); delete ts; ts = 0; } // END read/write const ApplyOperatorExpressionType& aoe() const { return aoe_; } ApplyOperatorExpressionType& aoe() { return aoe_; } // START Cocoons void cocoon(const BlockType& block, ProgramGlobals::DirectionEnum direction, bool doBorderIfBorder) const { if (aoe_.noStageIs(StageEnumType::DISABLED)) std::cout<<"ALL OPERATORS HAVE BEEN APPLIED\n"; else std::cout<<"NOT ALL OPERATORS APPLIED YET\n"; if (cocoonType_ == OpLabelCategory::BARE) err("TargetingCommon.h: cocoon(): Bare specs only for RIXS\n"); SizeType n = meas_.size(); assert(block.size()>0); SizeType site = block[0]; SizeType numberOfSites = targetHelper_.model().superGeometry().numberOfSites(); BorderEnumType border = ApplyOperatorType::BORDER_NO; if (site == 0 && direction == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON) border = ApplyOperatorType::BORDER_YES; if (site == numberOfSites - 1 && direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) border = ApplyOperatorType::BORDER_YES; const SizeType expectedSize = targetHelper_.model().hilbertSize(site); for (SizeType i = 0; i < n; ++i) { PsimagLite::String opLabel = meas_[i]; BraketType braket(targetHelper_.model(), opLabel); SdhsReinterpretType sdhs(braket, {site}); if (sdhs.forbidden()) continue; const typename BraketType::AlgebraType& nup = sdhs.op(0); const SizeType foundSize = nup.getStorage().rows(); if (foundSize != expectedSize) continue; const VectorWithOffsetType* v1 = getVector(braket.bra()); const VectorWithOffsetType* v2 = getVector(braket.ket()); if (!v1 || !v2) continue; if (v1->size() == 0 || v2->size() == 0) continue; test(*v1, *v2, direction, opLabel, site, nup, border); // don't repeat for border because this is called twice if needed } if (!doBorderIfBorder) return; SizeType site2 = numberOfSites; if (site == 1 && direction == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON) site2 = 0; if (site == numberOfSites - 2 && direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) site2 = numberOfSites - 1; if (site2 == numberOfSites) return; VectorSizeType block1(1, site2); cocoon(block1, direction, false); } // FIXME TODO REMOVE ComplexOrRealType rixsCocoon(ProgramGlobals::DirectionEnum direction, SizeType site, SizeType index1, SizeType index2, bool needsShift) const { const ModelType& model = targetHelper_.model(); SizeType h = model.hilbertSize(site); typename OperatorType::Su2RelatedType su2Related1; SparseMatrixType idSparse; idSparse.makeDiagonal(h, 1.0); OperatorType id(idSparse, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1.0, su2Related1); ComplexOrRealType value = 0.0; SizeType n = meas_.size(); if (n== 0) return value; if (n > 1) err("rixsCocoon: supports only 1 insitu operator\n"); if (cocoonType_ != OpLabelCategory::BARE) err("rixsCocoon: supports only bare operators\n"); SizeType numberOfSites = targetHelper_.model().superGeometry().numberOfSites(); BorderEnumType border = (site == 0 || site == numberOfSites - 1) ? ApplyOperatorType::BORDER_YES : ApplyOperatorType::BORDER_NO; const VectorWithOffsetType& v1 = aoe_.targetVectors(index1); const VectorWithOffsetType& v2 = aoe_.targetVectors(index2); assert(n == 1); for (SizeType i = 0; i < n; ++i) { const PsimagLite::String opLabel = meas_[i]; BraketType Braket(targetHelper_.model(), ""); if (needsShift) { const typename BraketType::AlgebraType& A = Braket.op(0); value = test_(v1, v2, direction, site, A, border); } else { value = test_(v1, v2, direction, site, id, border); } } return value; } // END Cocoons void setAllStagesTo(StageEnumType x) { SizeType n = aoe_.stages().size(); for (SizeType i = 0; i < n; ++i) aoe_.setStage(i, x); } RealType normSquared(SizeType i) const { const VectorWithOffsetType& v = aoe_.targetVectors()[i]; if (v.size() == 0) return 0; // call to mult will conjugate one of the vector return PsimagLite::real(v*v); } void normalizeTimeVectors(SizeType start = 0, SizeType end = 0) { SizeType total = aoe_.targetVectors().size(); if (end == 0) end = total; for (SizeType i = start; i < end; ++i) { RealType factor = normSquared(i); if (fabs(factor) == 0) continue; factor = 1.0/sqrt(factor); aoe_.multiplyTimeVector(i,factor); } } void initialGuess(VectorWithOffsetType& v, const VectorWithOffsetType& psi, const VectorSizeType& block, bool noguess) const { PsimagLite::Vector::Type nk; setNk(nk, block); const WaveFunctionTransfType& wft = targetHelper_.wft(); if (noguess) wft.createRandomVector(v); else wft.setInitialVector(v, psi, targetHelper_.lrs(), nk); } void computeCorrection(ProgramGlobals::DirectionEnum direction, const BlockType& block1) { const VectorWithOffsetType& psi = aoe_.ensureOnlyOnePsi("computeCorrection"); VectorWithOffsetType& v = aoe_.targetVectors(0); // operators in the one-site basis: typename PsimagLite::Vector::Type creationMatrix; VectorQnType q; targetHelper_.model().setOperatorMatrices(creationMatrix, q, block1); typename BasisWithOperatorsType::VectorBoolType signs(q.size()); for (SizeType i = 0; i < q.size(); ++i) signs[i] = q[i].oddElectrons; assert(0 < block1.size()); const SizeType splitSize = targetHelper_.model().hilbertSize(block1[0]); FermionSign fs(targetHelper_.lrs().left(), signs); for (SizeType j=0;j= 0) { border = ApplyOperatorType::BORDER_YES; // v1 == bra; v2 = ket test(*v1, *v2, direction, braket.toString(), site2, braket.op(0), border); } std::cout<<"-------------&*&*&* In-situ measurements end\n"; } bool withLegacyBugs() const { return targetHelper_.withLegacyBugs(); } // returns template ComplexOrRealType testRealWork(const VectorWithOffsetType& src1, const VectorWithOffsetType& src2, const ProgramGlobals::DirectionEnum systemOrEnviron, SizeType site, const SomeAlgebraType& A, BorderEnumType border) const { const SizeType splitSize = targetHelper_.model().hilbertSize(site); typename PsimagLite::Vector::Type oddElectrons; targetHelper_.model().findOddElectronsOfOneSite(oddElectrons, site); FermionSign fs(targetHelper_.lrs().left(), oddElectrons); VectorWithOffsetType dest; aoe_.applyOpLocal()(dest, src1, A, fs, splitSize, systemOrEnviron, border); ComplexOrRealType sum = 0.0; for (SizeType ii=0;ii 1) msg2<<"s"<::Type& nk, const typename PsimagLite::Vector::Type& block) const { for (SizeType i=0;i void cocoon_(ProgramGlobals::DirectionEnum direction, SizeType site, const VectorWithOffsetType& v1, PsimagLite::String label1, const VectorWithOffsetType& v2, PsimagLite::String label2, BorderEnumType border, bool wantsPrinting) const { SizeType n = meas_.size(); for (SizeType i = 0; i < n; ++i) { PsimagLite::String opLabel = braketTheBare(meas_[i], site, label1, label2); BraketType Braket(targetHelper_.model(), opLabel); const typename BraketType::AlgebraType& nup = Braket.op(0); if (wantsPrinting) test(v1,v2,direction,opLabel,site,nup,border); else test_(v1,v2,direction,site,nup,border); } } static PsimagLite::String braketTheBare(PsimagLite::String opLabel, SizeType, PsimagLite::String label1, PsimagLite::String label2) { if (label1 == "PSI") label1 = "gs"; if (label2 == "PSI") label2 = "gs"; if (opLabel.length() == 0 || opLabel[0] == '<') err("Expecting bare opspec, got empty or dressed: " + opLabel + "\n"); return "<"+label1 + "|" + opLabel + "|" + label2 + ">"; } static bool isOpLabelDressed(PsimagLite::String opLabel) { SizeType n = opLabel.length(); if (n < 2) return false; assert(n > 1); return (opLabel[0] == '<' && opLabel[n - 1] == '>'); } const VectorWithOffsetType* getVector(const PsimagLite::GetBraOrKet& getBraOrKet) const { if (getBraOrKet.isPvector()) { const SizeType pIndex = getBraOrKet.pIndex(); return &(aoe_.targetVectors(pIndex)); } const SizeType sectorIndex = getBraOrKet.sectorIndex(); if (aoe_.psiConst().size() <= sectorIndex) { std::cout<<"getVector: sectorIndex = "<="; std::cout< template void test(const VectorWithOffsetType& src1, const VectorWithOffsetType& src2, const ProgramGlobals::DirectionEnum systemOrEnviron, PsimagLite::String label, SizeType site, const SomeAlgebraType& A, BorderEnumType border) const { ComplexOrRealType sum = test_(src1,src2,systemOrEnviron,site,A,border); std::cout<; but if !withLegacyBugs returns template ComplexOrRealType test_(const VectorWithOffsetType& src1, const VectorWithOffsetType& src2, const ProgramGlobals::DirectionEnum systemOrEnviron, SizeType site, const SomeAlgebraType& A, BorderEnumType border) const { if (targetHelper_.withLegacyBugs()) return testRealWork(src1, src2, systemOrEnviron, site, A, border); else return testRealWork(src2, src1, systemOrEnviron, site, A, border); } TargetingCommon(const TargetingCommon&) = delete; TargetingCommon& operator=(const TargetingCommon&) = delete; OpLabelCategory cocoonType_; VectorStringType meas_; PsimagLite::ProgressIndicator progress_; TargetHelperType targetHelper_; ApplyOperatorExpressionType aoe_; mutable VectorType inSitu_; }; // class TargetingCommon template std::ostream& operator<<(std::ostream& os, const TargetingCommon& tst) { os<<"DT=NothingToSeeHereYet\n"; return os; } } // namespace /*@}*/ #endif // TARGETING_COMMON_H dmrgpp-6.02/src/Engine/TargetingCorrection.h000066400000000000000000000157631414604301300210630ustar00rootroot00000000000000/* Copyright (c) 2009-2013, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TargetingCorrection.h * * corrects the finite-size algorithm * following PRB 72, 180403(R) (2005) * */ #ifndef CORRECTION_TARGETING_H #define CORRECTION_TARGETING_H #include #include "TargetParamsCorrection.h" #include "TargetingBase.h" #include namespace Dmrg { template class TargetingCorrection : public TargetingBase { public: typedef LanczosSolverType_ LanczosSolverType; typedef TargetingBase BaseType; typedef typename BaseType::TargetingCommonType TargetingCommonType; typedef typename BaseType::MatrixVectorType MatrixVectorType; typedef typename MatrixVectorType::ModelType ModelType; typedef typename ModelType::RealType RealType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Vector::Type TargetVectorType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisType::BlockType BlockType; typedef typename BaseType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename WaveFunctionTransfType::VectorWithOffsetType VectorWithOffsetType; typedef TargetParamsCorrection TargetParamsType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename BasisType::QnType QnType; typedef typename TargetingCommonType::StageEnumType StageEnumType; typedef typename BaseType::VectorRealType VectorRealType; TargetingCorrection(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, const QnType&, InputValidatorType& io) : BaseType(lrs,model,wft,0), tstStruct_(io, "TargetingCorrection"), gsWeight_(1 - tstStruct_.correctionA()), progress_("TargetingCorrection") {} SizeType sites() const { return tstStruct_.sites(); } SizeType targets() const { return 1; } RealType normSquared(SizeType i) const { return PsimagLite::real(this->common().aoe().targetVectors()[i]* this->common().aoe().targetVectors()[i]); } RealType weight(SizeType) const { assert(this->common().aoe().noStageIs(StageEnumType::DISABLED)); RealType gsWeight = 1; RealType weight1 = 0; computeAllWeights(gsWeight, weight1); return weight1; } RealType gsWeight() const { RealType gsWeight = 1; RealType weight = 0; computeAllWeights(gsWeight, weight); return gsWeight; } void evolve(const VectorRealType&, ProgramGlobals::DirectionEnum direction, const BlockType& block1, const BlockType&, SizeType) { if (direction == ProgramGlobals::DirectionEnum::INFINITE) return; this->common().setAllStagesTo(StageEnumType::WFT_NOADVANCE); this->common().computeCorrection(direction,block1); bool doBorderIfBorder = false; this->common().cocoon(block1, direction, doBorderIfBorder); } void read(typename TargetingCommonType::IoInputType& io, PsimagLite::String prefix) { this->common().read(io, prefix); } void write(const typename PsimagLite::Vector::Type& block, PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { this->common().write(io, block, prefix); } private: void computeAllWeights(RealType& gsWeight, RealType& weight) const { assert(1 == this->common().aoe().targetVectors().size()); RealType norma = norm(this->common().aoe().targetVectors()[0]); weight = (norma > 1e-6) ? tstStruct_.correctionA() : 0; gsWeight = 1 - weight; if (gsWeight >= gsWeight_) return; // <--- EARLY EXIT HERE assert(weight > 1e-6); RealType factor = (1 - gsWeight_)/weight; weight *= factor; gsWeight = gsWeight_; } TargetParamsType tstStruct_; const RealType gsWeight_; PsimagLite::ProgressIndicator progress_; }; //class TargetingCorrection } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/TargetingCorrectionVector.h000066400000000000000000000255461414604301300222460ustar00rootroot00000000000000/* Copyright (c) 2009-2011, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TargetingCorrectionVector.h * * Implements the targeting required by * the correction targeting method * */ #ifndef TARGETING_CORRECTION_VECTOR_H #define TARGETING_CORRECTION_VECTOR_H #include "ProgressIndicator.h" #include "TargetParamsCorrectionVector.h" #include "VectorWithOffsets.h" #include "CorrectionVectorFunction.h" #include "TargetingBase.h" #include "ParametersForSolver.h" #include "ParallelTriDiag.h" #include "FreqEnum.h" #include "NoPthreadsNg.h" #include "CorrectionVectorSkeleton.h" namespace Dmrg { template class TargetingCorrectionVector : public TargetingBase { typedef LanczosSolverType_ LanczosSolverType; typedef TargetingBase BaseType; public: typedef typename BaseType::TargetingCommonType TargetingCommonType; typedef typename BaseType::MatrixVectorType MatrixVectorType; typedef typename MatrixVectorType::ModelType ModelType; typedef typename ModelType::RealType RealType; typedef typename BaseType::OptionsType OptionsType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename ModelType::OperatorsType OperatorsType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef TargetParamsCorrectionVector TargetParamsType; typedef typename BasisType::BlockType BlockType; typedef typename BaseType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename WaveFunctionTransfType::VectorWithOffsetType VectorWithOffsetType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef VectorType TargetVectorType; typedef typename TargetingCommonType::TimeSerializerType TimeSerializerType; typedef typename LanczosSolverType::TridiagonalMatrixType TridiagonalMatrixType; typedef PsimagLite::Matrix DenseMatrixType; typedef PsimagLite::Matrix DenseMatrixRealType; typedef typename LanczosSolverType::PostProcType PostProcType; typedef typename LanczosSolverType::MatrixType LanczosMatrixType; typedef CorrectionVectorFunction CorrectionVectorFunctionType; typedef ParallelTriDiag ParallelTriDiagType; typedef typename ParallelTriDiagType::MatrixComplexOrRealType MatrixComplexOrRealType; typedef typename ParallelTriDiagType::VectorMatrixFieldType VectorMatrixFieldType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorVectorRealType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef CorrectionVectorSkeleton CorrectionVectorSkeletonType; typedef typename BasisType::QnType QnType; TargetingCorrectionVector(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, const QnType&, InputValidatorType& ioIn) : BaseType(lrs, model, wft, 1), tstStruct_(ioIn, "TargetingCorrectionVector", model), ioIn_(ioIn), progress_("TargetingCorrectionVector"), gsWeight_(1.0), correctionEnabled_(false), skeleton_(ioIn_, tstStruct_, model, lrs, this->common().aoe().energy()) { if (!wft.isEnabled()) err("TargetingCorrectionVector needs wft\n"); } SizeType sites() const { return tstStruct_.sites(); } SizeType targets() const { return 4; } RealType weight(SizeType i) const { assert(i < weight_.size()); return weight_[i]; } RealType gsWeight() const { if (!correctionEnabled_) return 1.0; return gsWeight_; } SizeType size() const { if (!correctionEnabled_) return 0; return BaseType::size(); } void evolve(const VectorRealType& energies, ProgramGlobals::DirectionEnum direction, const BlockType& block1, const BlockType& block2, SizeType loopNumber) { if (block1.size()!=1 || block2.size()!=1) { PsimagLite::String str(__FILE__); str += " " + ttos(__LINE__) + "\n"; str += "evolve only blocks of one site supported\n"; throw PsimagLite::RuntimeError(str.c_str()); } assert(energies.size() > 0); RealType Eg = energies[0]; SizeType site = block1[0]; evolve(Eg,direction,site,loopNumber); this->common().printNormsAndWeights(gsWeight_, weight_); //corner case SizeType numberOfSites = this->lrs().super().block().size(); SizeType site2 = numberOfSites; if (site == 1 && direction == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON) site2 = 0; if (site == numberOfSites - 2 && direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) site2 = numberOfSites - 1; if (site2 == numberOfSites) return; evolve(Eg, direction, site2, loopNumber); } void write(const typename PsimagLite::Vector::Type& block, PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { this->common().write(io, block, prefix); this->common().writeNGSTs(io, prefix, block, "CorrectionVector"); } void read(typename TargetingCommonType::IoInputType& io, PsimagLite::String prefix) { this->common().readGSandNGSTs(io, prefix, "CorrectionVector"); setWeights(); } private: void evolve(RealType Eg, ProgramGlobals::DirectionEnum direction, SizeType site, SizeType loopNumber) { VectorWithOffsetType phiNew; SizeType count = this->common().aoe().getPhi(&phiNew, Eg, direction, site, loopNumber, tstStruct_); if (direction != ProgramGlobals::DirectionEnum::INFINITE) { correctionEnabled_=true; typename PsimagLite::Vector::Type block1(1,site); addCorrection(direction,block1); } if (count==0) return; this->common().aoe().targetVectors(1) = phiNew; skeleton_.calcDynVectors(this->common().aoe().targetVectors(1), this->common().aoe().targetVectors(2), this->common().aoe().targetVectors(3)); setWeights(); VectorSizeType block(1, site); bool doBorderIfBorder = false; this->common().cocoon(block, direction, doBorderIfBorder); } void setWeights() { gsWeight_ = tstStruct_.gsWeight(); RealType sum = 0; weight_.resize(this->common().aoe().targetVectors().size()); for (SizeType r=1;r::True) { sum = 0; for (SizeType r=1;rcommon().computeCorrection(direction,block1); gsWeight_ = 1.0-weight_[0]; } TargetParamsType tstStruct_; InputValidatorType& ioIn_; PsimagLite::ProgressIndicator progress_; RealType gsWeight_; bool correctionEnabled_; typename PsimagLite::Vector::Type weight_; CorrectionVectorSkeletonType skeleton_; }; // class TargetingCorrectionVector } // namespace /*@}*/ #endif // TARGETING_CORRECTION_VECTOR_H dmrgpp-6.02/src/Engine/TargetingDynamic.h000066400000000000000000000270531414604301300203330ustar00rootroot00000000000000 /* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ // END LICENSE BLOCK /** \ingroup DMRG */ /*@{*/ /*! \file TargetingDynamic.h * * Implements the targeting required by * a simple continued fraction calculation * of dynamical observables * */ #ifndef TARGETING_DYNAMIC_H #define TARGETING_DYNAMIC_H #include "ProgressIndicator.h" #include "ParametersForSolver.h" #include "TargetParamsDynamic.h" #include "VectorWithOffsets.h" #include "TargetingBase.h" #include #include "Concurrency.h" #include "Parallelizer.h" #include "ProgramGlobals.h" namespace Dmrg { template class TargetingDynamic : public TargetingBase { public: typedef LanczosSolverType_ LanczosSolverType; typedef TargetingBase BaseType; typedef typename BaseType::TargetingCommonType TargetingCommonType; typedef typename BaseType::MatrixVectorType MatrixVectorType; typedef typename MatrixVectorType::ModelType ModelType; typedef typename ModelType::RealType RealType; typedef typename ModelType::OperatorsType OperatorsType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef TargetParamsDynamic TargetParamsType; typedef typename BasisType::BlockType BlockType; typedef typename BaseType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename WaveFunctionTransfType::VectorWithOffsetType VectorWithOffsetType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef VectorType TargetVectorType; typedef typename TargetingCommonType::TimeSerializerType TimeSerializerType; typedef PsimagLite::Matrix DenseMatrixType; typedef PsimagLite::Matrix DenseMatrixRealType; typedef typename LanczosSolverType::PostProcType PostProcType; typedef typename LanczosSolverType::TridiagonalMatrixType TridiagonalMatrixType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename BasisType::QnType QnType; typedef typename TargetingCommonType::StageEnumType StageEnumType; typedef typename BaseType::VectorRealType VectorRealType; TargetingDynamic(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, const QnType&, InputValidatorType& io) : BaseType(lrs,model,wft,0), tstStruct_(io, "TargetingDynamic", model), wft_(wft), progress_("TargetingDynamic"), gsWeight_(tstStruct_.gsWeight()), paramsForSolver_(io,"DynamicDmrg"), weightForContinuedFraction_(0) { if (!wft.isEnabled()) err(" TargetingDynamic needs an enabled wft\n"); } SizeType sites() const { return tstStruct_.sites(); } SizeType targets() const { return 0; } RealType weight(SizeType i) const { assert(!this->common().aoe().allStages(StageEnumType::DISABLED)); return weight_[i]; } RealType gsWeight() const { if (this->common().aoe().allStages(StageEnumType::DISABLED)) return 1.0; return gsWeight_; } void evolve(const VectorRealType& energies, ProgramGlobals::DirectionEnum direction, const BlockType& block1, const BlockType& block2, SizeType loopNumber) { if (block1.size()!=1 || block2.size()!=1) { PsimagLite::String str(__FILE__); str += " " + ttos(__LINE__) + "\n"; str += "evolve only blocks of one site supported\n"; throw PsimagLite::RuntimeError(str.c_str()); } assert(energies.size() > 0); RealType Eg = energies[0]; SizeType site = block1[0]; evolve(Eg,direction,site,loopNumber); //corner case SizeType numberOfSites = this->lrs().super().block().size(); SizeType site2 = numberOfSites; if (site == 1 && direction == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON) site2 = 0; if (site == numberOfSites - 2 && direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) site2 = numberOfSites - 1; if (site2 == numberOfSites) return; evolve(Eg, direction, site2, loopNumber); } void write(const VectorSizeType& block, PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { this->common().write(io, block, prefix); SizeType type = tstStruct_.type(); int fermionSign = this->common().findFermionSignOfTheOperators(tstStruct_.concatenation(), tstStruct_.aOperators()); int s = (type&1) ? -1 : 1; int s2 = (type>1) ? -1 : 1; int s3 = (type&1) ? -fermionSign : 1; if (ab_.size() < 2) return; typename PostProcType::ParametersType params = paramsForSolver_; params.Eg = this->common().aoe().energy(); params.weight = s2*weightForContinuedFraction_*s3; params.isign = s; if (tstStruct_.aOperators()[0].fermionOrBoson() == ProgramGlobals::FermionOrBosonEnum::BOSON) s2 *= s; PostProcType cf(ab_,params); this->common().writeNGSTs(io, prefix, block, "Dynamic", cf); } void read(typename TargetingCommonType::IoInputType& io, PsimagLite::String prefix) { this->common().readGSandNGSTs(io, prefix, "Dynamic"); } private: void evolve(RealType Eg, ProgramGlobals::DirectionEnum direction, SizeType site, SizeType loopNumber) { VectorWithOffsetType phiNew; SizeType count = this->common().aoe().getPhi(&phiNew, Eg, direction, site, loopNumber, tstStruct_); if (count==0) return; calcLanczosVectors(gsWeight_,weight_,phiNew,direction); bool doBorderIfBorder = false; VectorSizeType block(1, site); this->common().cocoon(block, direction, doBorderIfBorder); } void calcLanczosVectors(RealType&, typename PsimagLite::Vector::Type&, const VectorWithOffsetType& phi, const ProgramGlobals::DirectionEnum) { for (SizeType i=0;ilrs().super().findPartitionNumber(phi.offset(i0)); getLanczosVectors(V,sv,p); if (i==0) { assert(V.cols() > 0); this->common().aoe().targetVectorsResize(V.cols()); for (SizeType j=0;jcommon().aoe().targetVectors().size();j++) this->common().aoe().targetVectors(j) = phi; } setVectors(V,i0); } setWeights(); if (fabs(weightForContinuedFraction_)<1e-6) weightForContinuedFraction_ = PsimagLite::real(phi*phi); } void getLanczosVectors(DenseMatrixType& V, const VectorType& sv, SizeType p) { const RealType fakeTime = 0; typename ModelHelperType::Aux aux(p, BaseType::lrs()); typename ModelType::HamiltonianConnectionType hc(BaseType::lrs(), ModelType::modelLinks(), fakeTime, BaseType::model().superOpHelper()); typename LanczosSolverType::MatrixType h(BaseType::model(), hc, aux); paramsForSolver_.lotaMemory = true; LanczosSolverType lanczosSolver(h,paramsForSolver_); lanczosSolver.decomposition(sv,ab_); lanczosSolver.lanczosVectorsSwap(V); } void setVectors(const DenseMatrixType& V, SizeType i0) { for (SizeType i=0;icommon().aoe().targetVectors().size();i++) { VectorType tmp(V.rows()); for (SizeType j=0;jcommon().aoe().targetVectors(i).setDataInSector(tmp,i0); } } void setWeights() { RealType sum = 0; weight_.resize(this->common().aoe().targetVectors().size()); for (SizeType r=0;r::Type weight_; TridiagonalMatrixType ab_; RealType weightForContinuedFraction_; }; // class TargetingDynamic } // namespace /*@}*/ #endif // TARGETING_DYNAMIC_H dmrgpp-6.02/src/Engine/TargetingExpression.h000066400000000000000000000444011414604301300211020ustar00rootroot00000000000000/* Copyright (c) 2009-2013-2019, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TargetingExpression.h * TBW FIXME TODO */ #ifndef TARGETING_EXPRESSION_H #define TARGETING_EXPRESSION_H #include #include "TargetingBase.h" #include #include "Pvector.h" #include "SpecForTargetingExpression.h" #include "CanonicalExpression.h" namespace Dmrg { template class TargetingExpression : public TargetingBase { typedef TargetingBase BaseType; typedef typename BaseType::TargetingCommonType TargetingCommonType; typedef typename BaseType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename BaseType::ModelType ModelType; typedef typename ModelType::RealType RealType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisType::BlockType BlockType; typedef typename BasisType::QnType QnType; typedef typename TargetingCommonType::StageEnumType StageEnumType; typedef Pvector PvectorType; typedef typename PsimagLite::Vector::Type VectorPvectorType; typedef SpecForTargetingExpression SpecForTargetingExpressionType; typedef typename SpecForTargetingExpressionType::AlgebraType AlgebraType; typedef PsimagLite::CanonicalExpression CanonicalExpressionType; typedef AuxForTargetingExpression AuxForTargetingExpressionType; typedef typename TargetingCommonType::VectorRealType VectorRealType; typedef typename AuxForTargetingExpressionType::VectorStringType VectorStringType; typedef typename AuxForTargetingExpressionType::VectorVectorWithOffsetType VectorVectorWithOffsetType; typedef PsimagLite::Vector::Type VectorBoolType; typedef typename AlgebraType::VectorSizeType VectorSizeType; public: TargetingExpression(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, const QnType&, InputValidatorType& io) : BaseType(lrs,model,wft,0), progress_("TargetingExpression"), gsWeight_(0.3), origPvectors_(0) { io.readline(gsWeight_, "GsWeight="); pvectorsFromInput(io); } ~TargetingExpression() { for (SizeType i = 0; i < pVectors_.size(); ++i) { delete pVectors_[i]; pVectors_[i] = 0; } } SizeType sites() const { return 0; } SizeType targets() const { return pVectors_.size(); } RealType normSquared(SizeType i) const { return PsimagLite::real(this->common().aoe().targetVectors()[i]* this->common().aoe().targetVectors()[i]); } RealType weight(SizeType i) const { assert(this->common().aoe().noStageIs(StageEnumType::DISABLED)); VectorRealType weights; RealType gsWeight = 0; computeAllWeights(gsWeight, weights); assert(i < weights.size()); return weights[i]; } RealType gsWeight() const { VectorRealType weights; RealType gsWeight = 0; computeAllWeights(gsWeight, weights); return gsWeight; } void evolve(const VectorRealType&, ProgramGlobals::DirectionEnum direction, const BlockType& block1, const BlockType&, SizeType) { if (direction == ProgramGlobals::DirectionEnum::INFINITE) return; this->common().setAllStagesTo(StageEnumType::WFT_NOADVANCE); assert(block1.size() == 1); const SizeType site = block1[0]; const SizeType total = this->common().aoe().targetVectors().size(); assert(total <= pVectors_.size()); this->common().aoe().wftSome(site, 0, total); computePvectors(direction); // may alter the number of tvs VectorRealType weight; RealType gsWeight = 0; computeAllWeights(gsWeight, weight); this->common().printNormsAndWeights(gsWeight, weight); const bool doBorderIfBorder = true; this->common().cocoon(block1, direction, doBorderIfBorder); // in-situ } void read(typename TargetingCommonType::IoInputType& io, PsimagLite::String prefix) { this->common().read(io, prefix); } void write(const typename PsimagLite::Vector::Type& block, PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { this->common().write(io, block, prefix); this->common().writeNGSTs(io, prefix, block, "Expression"); } private: void pvectorsFromInput(InputValidatorType& io) { SizeType total = 0; io.readline(total, "Pvectors="); pVectors_.resize(total); PsimagLite::String tmp; RealType sum = 0.0; for (SizeType i = 0; i < total; ++i) { io.readline(tmp, "P" + ttos(i) + "="); pVectors_[i] = new PvectorType(tmp); sum += pVectors_[i]->weight(); } if (sum == 0.0) return; RealType factor = (1.0 - gsWeight_)/sum; for (SizeType i = 0; i < total; ++i) pVectors_[i]->multiplyWeight(factor); origPvectors_ = pVectors_.size(); } void computePvectors(ProgramGlobals::DirectionEnum dir) { if (allOrigPvectorsDone()) { const SizeType tvs = this->common().aoe().targetVectors().size(); if (tvs == origPvectors_) return; if (tvs < origPvectors_) err("TVS could not have decreased ?!\n"); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"All user-provided P vectors finished"; progress_.printline(msgg, std::cout); std::cerr<common().aoe().targetVectorsResize(origPvectors_); return; } PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"P0="<lastName(); progress_.printline(msgg, std::cout); CanonicalExpressionType canonicalExpression(opSpec_); SizeType total = pVectors_.size(); AuxForTargetingExpressionType aux(this->common().aoe(), this->model(), this->lrs(), dir); const AlgebraType opEmpty(aux); bool needsTrimming = false; PsimagLite::String allpvectors; for (SizeType i = 0; i < total; ++i) { if (pVectors_[i]->lastName() == "DONE") continue; AlgebraType tmp(aux); canonicalExpression(tmp, pVectors_[i]->lastName(), opEmpty, aux); tmp.finalize(); PsimagLite::String thispBefore = tmp.toString(); finalize(aux.tempVectors(), aux.tempNames(), i, thispBefore); PsimagLite::String thispAfter = pVectors_[i]->lastName(); int x = tmp.pIndex(); if (x >= 0) { if (static_cast(x) == i) err("Self assigment\n"); VectorWithOffsetType_& v0 = this->common().aoe().targetVectors(i); v0 = this->common().aoe().targetVectors(x); pVectors_[i]->pushString("DONE"); continue; } if (!tmp.hasSummationKetAndNoMult()) { allpvectors += thispAfter; continue; } PsimagLite::String newpstring = simplifyTerms(thispBefore); if (newpstring != pVectors_[i]->lastName()) { needsTrimming = true; PsimagLite::String compr = compressExpression(newpstring); //checkNoUncompressedExists(compr); pVectors_[i]->pushString(compr); newpstring += compr; } allpvectors += newpstring; } if (needsTrimming) trimPvectors(allpvectors); } void finalize(const VectorVectorWithOffsetType& tempVectors, const VectorStringType& tempNames, SizeType pVectorIndex, PsimagLite::String tempExpr) { const SizeType ntemps = tempNames.size(); if (ntemps == 0) return; // find tempNames_ in pVectors_ and trim tempNames_ accordingly VectorBoolType removed_(ntemps); VectorSizeType tempToP(ntemps, 10000); for (SizeType i = 0; i < ntemps; ++i) { int x = findInOrigNames(tempNames[i]); if (x < 0) continue; this->common().aoe().targetVectors(x) = tempVectors[i]; pVectors_[x]->pushString("DONE"); removed_[i] = true; tempToP[i] = x; } // these surviving tempNames_ need storage, add them for (SizeType i = 0; i < ntemps; ++i) { if (removed_[i]) continue; int x = findInAnyNames(tempNames[i]); if (x >= 0) continue; const SizeType ind = this->common().aoe().createPvector(tempVectors[i]); tempToP[i] = ind; const PsimagLite::String ename = expandExpression(tempNames[i], tempToP); PvectorType* pnew = new PvectorType(ename); pnew->pushString("DONE"); pVectors_.push_back(pnew); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"P["<"; if (newpstring == selfName) newpstring = "DONE"; pVectors_[pVectorIndex]->pushString(newpstring); } bool allOrigPvectorsDone() const { for (SizeType i = 0; i < origPvectors_; ++i) if (pVectors_[i]->lastName() != "DONE") return false; return true; } int findInOrigNames(PsimagLite::String str) const { return findInNames(str, origPvectors_); } int findInAnyNames(PsimagLite::String str) const { return findInNames(str, pVectors_.size()); } int findInNames(PsimagLite::String str, SizeType end) const { assert(end <= pVectors_.size()); for (SizeType i = 0; i < end; ++i) if (pVectors_[i]->hasAnyName(str)) return i; return -1; } // replace "|!m" + something ==> "|P" + number PsimagLite::String compressExpression(PsimagLite::String str) const { SizeType i = 0; const SizeType len = str.length(); if (len < 4) return str; PsimagLite::String result; for (; i < len; ++i) { if (i + 4 < len && str.substr(i,3) == "|!m") { SizeType j = i + 3; PsimagLite::String buffer; for (;j < len; ++j) { buffer += str[j]; if (str[j] == '>') break; } const SizeType ind = findPforThisExpression(buffer); buffer = "|P" + ttos(ind) + ">"; i = j; result += buffer; continue; } result += str[i]; } return result; } SizeType findPforThisExpression(PsimagLite::String str) const { const SizeType pvectors = pVectors_.size(); for (SizeType i = 0; i < pvectors; ++i) { if (!pVectors_[i]->hasAnyName(str)) continue; return i; } throw PsimagLite::RuntimeError("findPforThisExpression: P not found\n"); } // replace "R" + i ==> "P" + tempToP[i] PsimagLite::String expandExpression(PsimagLite::String str, const VectorSizeType& tempToP) const { SizeType i = 0; const SizeType len = str.length(); if (len < 4) return str; PsimagLite::String expanded; for (; i < len; ++i) { if (i + 4 < len && str[i] == '|' && str[i + 1] == 'R') { SizeType j = i + 2; PsimagLite::String buffer; for (;j < len; ++j) { if (str[j] == '>') break; buffer += str[j]; } const SizeType ind = PsimagLite::atoi(buffer); if (ind >= tempToP.size()) err("tempToP.size() >= index\n"); buffer = "|P" + ttos(tempToP[ind]); i = j + 1; expanded += buffer; continue; } expanded += str[i]; } return expanded; } // replace |+PXpPY> ==> |PX>, update |PX>, // FIMXE: ask aoe destroying PY if no longer referencable PsimagLite::String simplifyTerms(PsimagLite::String str) { SizeType i = 0; const SizeType len = str.length(); if (len < 4) return str; PsimagLite::String simplified; for (; i < len; ++i) { if (i + 4 < len && str.substr(i, 4) == "|!aP") { SizeType j = i + 4; PsimagLite::String buffer; for (;j < len; ++j) { if (str[j] == 'p') break; buffer += str[j]; } SizeType ind0 = PsimagLite::atoi(buffer); buffer = ""; ++j; assert(str[j] == 'P'); ++j; for (;j < len; ++j) { if (str[j] == '>') break; buffer += str[j]; } SizeType ind1 = PsimagLite::atoi(buffer); // before reordering ind0 and ind1 PsimagLite::String p0PlusP1 = "|P" + ttos(ind0) + ">+|P" + ttos(ind1) + ">"; // ask aoe to sum ind0 and ind1 and put it into ind0 assert(ind0 != ind1); if (ind0 > ind1) { const SizeType tmp = ind0; ind0 = ind1; ind1 = tmp; } sumPvectors(ind0, ind1, p0PlusP1); buffer = "|P" + ttos(ind0) + ">"; i = j; simplified += buffer; continue; } simplified += str[i]; } return simplified; } static void checkNoUncompressedExists(PsimagLite::String str) { SizeType i = 0; const SizeType len = str.length(); if (len < 4) return; for (; i < len; ++i) { if (i + 4 < len && str.substr(i, 3) == "|!m") err("Uncompressed exists in " + str + "\n"); } } void sumPvectors(SizeType ind0, SizeType ind1, PsimagLite::String p0PlusP1) { assert(ind0 < ind1); VectorWithOffsetType_& v0 = this->common().aoe().targetVectors(ind0); const VectorWithOffsetType_& v1 = this->common().aoe().targetVectors(ind1); v0 += v1; pVectors_[ind0]->sum(*(pVectors_[ind1]), p0PlusP1); } void trimPvectors(PsimagLite::String str) { const SizeType tvs = this->common().aoe().targetVectors().size(); VectorBoolType used(tvs, false); assert(origPvectors_ <= tvs); for (SizeType i = 0; i < origPvectors_; ++i) used[i] = true; findUsedPvectors(used, str); for (SizeType i = 0; i < tvs; ++i) { if (used[i]) continue; this->common().aoe().destroyPvector(i); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"P["<common().aoe().trimVectors(); const SizeType tvsFinal = this->common().aoe().targetVectors().size(); if (tvs != tvsFinal) { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Number of target vectors is "<= 48 && str[j] <= 57) { buffer += str[j]; } else if (str[j] == '>') { break; } else { buffer = ""; break; } } i = j; if (buffer == "") continue; const SizeType ind = PsimagLite::atoi(buffer); used[ind] = true; } } void computeAllWeights(RealType& gsWeight, VectorRealType& weight) const { const SizeType n = this->common().aoe().targetVectors().size(); assert(n <= pVectors_.size()); weight.resize(n); std::fill(weight.begin(), weight.end(), 0); RealType sum = 0; for (SizeType i = 0; i < n; ++i) { RealType norma = norm(this->common().aoe().targetVectors()[i]); if (norma < 1e-6) continue; weight[i] = pVectors_[i]->weight()/norma; sum += weight[i]; } gsWeight = 1 - sum; if (gsWeight >= gsWeight_) return; // <--- EARLY EXIT HERE assert(sum > 1e-6); RealType factor = (1 - gsWeight_)/sum; for (SizeType i = 0; i < n; ++i) weight[i] *= factor; gsWeight = gsWeight_; } PsimagLite::ProgressIndicator progress_; RealType gsWeight_; SizeType origPvectors_; VectorPvectorType pVectors_; SpecForTargetingExpressionType opSpec_; }; //class TargetingExpression } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/TargetingGroundState.h000066400000000000000000000150761414604301300212100ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TargetingGroundState.h * * targets the ground state * */ #ifndef TARGETING_GS_H #define TARGETING_GS_H #include #include "TargetParamsGroundState.h" #include "ApplyOperatorLocal.h" #include #include "PsimagLite.h" #include "TargetingBase.h" #include "ParametersForSolver.h" namespace Dmrg { template class TargetingGroundState : public TargetingBase { public: typedef LanczosSolverType_ LanczosSolverType; typedef TargetingBase BaseType; typedef typename BaseType::TargetingCommonType TargetingCommonType; typedef typename BaseType::MatrixVectorType MatrixVectorType; typedef typename MatrixVectorType::ModelType ModelType; typedef typename ModelType::RealType RealType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorType; typedef typename BasisType::BlockType BlockType; typedef typename BaseType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename WaveFunctionTransfType::VectorWithOffsetType VectorWithOffsetType; typedef VectorType TargetVectorType; typedef TargetParamsGroundState TargetParamsType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename BasisType::QnType QnType; typedef typename BaseType::VectorRealType VectorRealType; typedef typename TargetingCommonType::VectorVectorVectorWithOffsetType VectorVectorVectorWithOffsetType; typedef typename PsimagLite::Vector::Type VectorVectorWithOffsetType; TargetingGroundState(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, const QnType&, InputValidatorType&) : BaseType(lrs, model, wft, 0), tstStruct_("TargetingGroundState"), progress_("TargetingGroundState") {} SizeType sites() const { return tstStruct_.sites(); } SizeType targets() const { return 0; } RealType weight(SizeType) const { throw PsimagLite::RuntimeError("GST: What are you doing here?\n"); } RealType gsWeight() const { const VectorVectorVectorWithOffsetType& v = this->common().aoe().psiConst(); const SizeType n = v.size(); RealType sum = 0; for (SizeType i = 0; i < n; ++i) { const VectorVectorWithOffsetType& vv = v[i]; const SizeType m = vv.size(); for (SizeType j = 0; j < m; ++j) { const VectorWithOffsetType* vvv= vv[j]; if (!vvv) continue; if (norm(*vvv) > 1e-3) ++sum; } } return 1.0/sum; } SizeType size() const { return 0; } void evolve(const VectorRealType&, ProgramGlobals::DirectionEnum direction, const BlockType& block1, const BlockType&, SizeType) { bool doBorderIfBorder = true; this->common().cocoon(block1, direction, doBorderIfBorder); } void write(const typename PsimagLite::Vector::Type& block, PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { this->common().write(io, block, prefix); } void read(typename TargetingCommonType::IoInputType& io, PsimagLite::String prefix) { this->common().readGSandNGSTs(io, prefix, "GroundState"); } private: TargetParamsType tstStruct_; PsimagLite::ProgressIndicator progress_; }; //class TargetingGroundState } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/TargetingMetts.h000066400000000000000000000751771414604301300200550ustar00rootroot00000000000000/* Copyright (c) 2009-2014-2021, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ #ifndef DMRG_TARGETING_METTS_H #define DMRG_TARGETING_METTS_H #include #include "ProgressIndicator.h" #include "ApplyOperatorLocal.h" #include "MettsSerializer.h" #include "MettsParams.h" #include "MettsStochastics.h" #include #include "MettsCollapse.h" #include "VectorWithOffset.h" #include "ParametersForSolver.h" #include "RandomForTests.h" #include "TimeVectorsKrylov.h" #include "TimeVectorsRungeKutta.h" #include "TimeVectorsSuzukiTrotter.h" #include "CrsMatrix.h" #include "TargetingBase.h" #include "Io/IoSelector.h" #include "PredicateAwesome.h" namespace Dmrg { template class TargetingMetts : public TargetingBase { typedef PsimagLite::Vector::Type VectorSizeType; typedef std::pair PairSizeType; struct MettsPrev { MettsPrev() : fixed(0),permutationInverse(0) {} SizeType fixed; VectorSizeType permutationInverse; }; public: typedef LanczosSolverType_ LanczosSolverType; typedef TargetingBase BaseType; typedef typename BaseType::OptionsType OptionsType; typedef typename BaseType::TargetingCommonType TargetingCommonType; typedef typename BaseType::MatrixVectorType MatrixVectorType; typedef typename MatrixVectorType::ModelType ModelType; typedef typename ModelType::RealType RealType; typedef typename ModelType::OperatorsType OperatorsType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename BaseType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename WaveFunctionTransfType::VectorWithOffsetType VectorWithOffsetType; typedef typename VectorWithOffsetType::VectorType TargetVectorType; typedef typename LanczosSolverType::TridiagonalMatrixType TridiagonalMatrixType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef MettsParams TargetParamsType; typedef typename BasisType::BlockType BlockType; typedef PsimagLite::Matrix MatrixType; typedef BlockDiagonalMatrix BlockDiagonalMatrixType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef ApplyOperatorLocal ApplyOperatorType; typedef typename ApplyOperatorType::BorderEnum BorderEnumType; typedef MettsSerializer MettsSerializerType; typedef typename PsimagLite::RandomForTests RngType; typedef MettsStochastics MettsStochasticsType; typedef typename MettsStochasticsType::PairType PairType; typedef MettsCollapse MettsCollapseType; typedef typename MettsCollapseType::PackIndicesType PackIndicesType; typedef typename TargetingCommonType::TimeSerializerType TimeSerializerType; typedef TimeVectorsBase TimeVectorsBaseType; typedef TimeVectorsKrylov TimeVectorsKrylovType; typedef TimeVectorsRungeKutta TimeVectorsRungeKuttaType; typedef TimeVectorsSuzukiTrotter TimeVectorsSuzukiTrotterType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename PsimagLite::Vector::Type VectorVectorWithOffsetType; typedef typename BasisType::QnType QnType; typedef typename PsimagLite::Vector::Type VectorBlockDiagonalMatrixType; typedef typename TargetingCommonType::StageEnumType StageEnumType; TargetingMetts(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, const QnType& quantumSector, InputValidatorType& ioIn) : BaseType(lrs, model, wft, 0), model_(model), lrs_(lrs), mettsStruct_(ioIn, "TargetingMetts", model), wft_(wft), quantumSector_(quantumSector), progress_("TargetingMetts"), betas_(mettsStruct_.timeSteps()), weight_(betas_.size() + 1), mettsStochastics_(model,mettsStruct_.rngSeed,mettsStruct_.pure), mettsCollapse_(mettsStochastics_,lrs,mettsStruct_), prevDirection_(ProgramGlobals::DirectionEnum::INFINITE), systemPrev_(), environPrev_() { timesWithoutAdvancement_ = 0; if (!wft.isEnabled()) err(" TargetingMetts needs an enabled wft\n"); const RealType tau = mettsStruct_.tau()/(mettsStruct_.timeSteps()-1); for (SizeType i = 0; i< betas_.size(); ++i) betas_[i] = i*tau; setWeights(); this->common().aoe().initTimeVectors(mettsStruct_, betas_, ioIn); } ~TargetingMetts() { SizeType n = garbage_.size(); for (SizeType i = 0; i < n; ++i) { delete garbage_[i]; garbage_[i] = 0; } } SizeType sites() const { return mettsStruct_.sites(); } SizeType targets() const { return mettsStruct_.timeSteps() + 1; } RealType weight(SizeType i) const { return weight_[i]; } RealType gsWeight() const { return gsWeight_; } bool includeGroundStage() const {return (fabs(gsWeight_)>1e-6); } SizeType size() const { if (this->common().aoe().allStages(StageEnumType::DISABLED)) return 1; SizeType n = this->common().aoe().targetVectors().size(); if (this->common().aoe().targetVectors()[n-1].size()==0) n--; return n; } void evolve(const VectorRealType&, ProgramGlobals::DirectionEnum direction, const BlockType& block1, const BlockType& block2, SizeType loopNumber) { RealType Eg = 0; VectorSizeType sites; if (direction == ProgramGlobals::DirectionEnum::INFINITE) utils::blockUnion(sites,block1,block2); else sites = block1; SizeType n1 = mettsStruct_.timeSteps(); if (direction == ProgramGlobals::DirectionEnum::INFINITE) { updateStochastics(block1,block2); getNewPures(block1,block2); return; } SizeType max = n1; if (this->common().aoe().noStageIs(StageEnumType::DISABLED)) { max = 1; if (this->common().aoe().allStages(StageEnumType::WFT_ADVANCE)) this->common().setAllStagesTo(StageEnumType::WFT_NOADVANCE); } // Advance or wft each target vector for beta/2 for (SizeType i=0;icommon().aoe().targetVectors()[n1].size()>0) evolve(n1,n1,n1-1,Eg,direction,sites,loopNumber); for (SizeType i=0;icommon().aoe().targetVectors().size();i++) assert(this->common().aoe().targetVectors()[i].size()==0 || this->common().aoe().targetVectors()[i].size()== lrs_.super().permutationVector().size()); bool doBorderIfBorder = true; this->common().cocoon(block1, direction, doBorderIfBorder); PsimagLite::String predicate = model_.params().printHamiltonianAverage; const SizeType center = model_.superGeometry().numberOfSites()/2; PsimagLite::PredicateAwesome<>::replaceAll(predicate, "c", ttos(center)); PsimagLite::PredicateAwesome<> pAwesome(predicate); assert(block1.size() > 0); if (pAwesome.isTrue("s", block1[0])) printEnergies(); // in-situ const OptionsType& options = this->model().params().options; const bool normalizeTimeVectors = !options.isSet("neverNormalizeVectors"); if (normalizeTimeVectors) this->common().normalizeTimeVectors(); setWeights(); this->common().printNormsAndWeights(gsWeight_, weight_); if (this->common().aoe().noStageIs(StageEnumType::COLLAPSE)) return; // collapse bool hasCollapsed = mettsCollapse_(this->common().aoe().targetVectors(n1), this->common().aoe().targetVectors()[n1-1], sites, direction); if (hasCollapsed) { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Has Collapsed"; progress_.printline(msgg, std::cout); } } void read(typename TargetingCommonType::IoInputType& io, PsimagLite::String prefix) { this->common().readGSandNGSTs(io, prefix, "Metts"); } void write(const VectorSizeType& block, PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { this->common().write(io, block, prefix); VectorVectorWithOffsetType& tv = const_cast (this->common().aoe().targetVectors()); if (mettsStruct_.beta > this->common().aoe().time()) { for (SizeType i = 0; i < this->common().aoe().targetVectors().size(); ++i) tv[i].clear(); } this->common().writeNGSTs(io, prefix, block, "Metts"); } void updateOnSiteForCorners(BasisWithOperatorsType&) const { // nothing to do here } bool end() const { return false; } private: void evolve(SizeType index, SizeType start, SizeType indexAdvance, RealType Eg, const ProgramGlobals::DirectionEnum direction, const VectorSizeType& block, SizeType loopNumber) { if (index==0 && start==0) advanceCounterAndComputeStage(block); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Evolving, stage="<common().aoe().targetVectors(startEnd.first),lrs_); bool allOperatorsApplied = (this->common().aoe().noStageIs(StageEnumType::DISABLED)); VectorSizeType indices(startEnd.second - startEnd.first); for (SizeType i = 0; i < indices.size(); ++i) indices[i] = i + startEnd.first; const bool isLastCall = true; this->common().aoe().calcTimeVectors(indices, Eg, phi, systemOrEnviron, allOperatorsApplied, false, // don't wft or advance indices[0] block, isLastCall); this->common().normalizeTimeVectors(startEnd.first+1,startEnd.second); } void advanceCounterAndComputeStage(const VectorSizeType& block) { if (this->common().aoe().noStageIs(StageEnumType::COLLAPSE)) this->common().setAllStagesTo(StageEnumType::WFT_NOADVANCE); if (this->common().aoe().allStages(StageEnumType::COLLAPSE)) { if (!allSitesCollapsed()) { if (sitesCollapsed_.size()>2*model_.superGeometry().numberOfSites()) throw PsimagLite::RuntimeError("advanceCounterAndComputeStage\n"); printAdvancement(timesWithoutAdvancement_); return; } sitesCollapsed_.clear(); this->common().setAllStagesTo(StageEnumType::WFT_NOADVANCE); timesWithoutAdvancement_ = 0; this->common().aoe().setCurrentTimeStep(0); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); SizeType n1 = mettsStruct_.timeSteps(); RealType x = norm(this->common().aoe().targetVectors()[n1]); msg<<"Changing direction, setting collapsed with norm="<common().aoe().targetVectors(i) = this->common().aoe().targetVectors()[n1]; this->common().aoe().timeHasAdvanced(); printAdvancement(timesWithoutAdvancement_); return; } if (timesWithoutAdvancement_ < mettsStruct_.advanceEach()) { ++timesWithoutAdvancement_; printAdvancement(timesWithoutAdvancement_); return; } if (this->common().aoe().noStageIs(StageEnumType::COLLAPSE) && this->common().aoe().time() < mettsStruct_.beta) { this->common().setAllStagesTo(StageEnumType::WFT_ADVANCE); const SizeType tmp = this->common().aoe().currentTimeStep() + 1; this->common().aoe().setCurrentTimeStep(tmp); timesWithoutAdvancement_ = 0; printAdvancement(timesWithoutAdvancement_); return; } if (this->common().aoe().noStageIs(StageEnumType::COLLAPSE) && this->common().aoe().time() >= mettsStruct_.beta && block[0]!=block.size()) { printAdvancement(timesWithoutAdvancement_); return; } if (this->common().aoe().noStageIs(StageEnumType::COLLAPSE) && this->common().aoe().time() >= mettsStruct_.beta) { this->common().setAllStagesTo(StageEnumType::COLLAPSE); sitesCollapsed_.clear(); SizeType n1 = mettsStruct_.timeSteps(); this->common().aoe().targetVectors(n1).clear(); timesWithoutAdvancement_ = 0; printAdvancement(timesWithoutAdvancement_); return; } } void printAdvancement(SizeType timesWithoutAdvancement) const { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Steps without advance: "< 0) progress_.printline(msgg,std::cout); } void advanceOrWft(SizeType index, SizeType indexAdvance, const ProgramGlobals::DirectionEnum, const VectorSizeType& block) { if (this->common().aoe().targetVectors()[index].size()==0) return; assert(norm(this->common().aoe().targetVectors()[index])>1e-6); VectorSizeType nk; mettsCollapse_.setNk(nk,block); if (this->common().aoe().allStages(StageEnumType::WFT_NOADVANCE) || this->common().aoe().allStages(StageEnumType::WFT_ADVANCE) || this->common().aoe().allStages(StageEnumType::COLLAPSE)) { SizeType advance = index; if (this->common().aoe().allStages(StageEnumType::WFT_ADVANCE)) { advance = indexAdvance; this->common().aoe().timeHasAdvanced(); } // don't advance the collapsed vector because we'll recompute if (index==weight_.size()-1) advance=index; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"I'm calling the WFT now"; progress_.printline(msgg, std::cout); VectorWithOffsetType phiNew; // same sectors as g.s. //phiNew.populateSectors(lrs_.super()); assert(norm(this->common().aoe().targetVectors()[advance])>1e-6); phiNew.populateSectors(lrs_.super()); // OK, now that we got the partition number right, let's wft: wft_.setInitialVector(phiNew,this->common().aoe().targetVectors()[advance],lrs_,nk); phiNew.collapseSectors(); assert(norm(phiNew)>1e-6); this->common().aoe().targetVectors(index) = phiNew; } else { assert(false); } } void updateStochastics(const VectorSizeType& block1, const VectorSizeType& block2) { const QnType& qn = model_.targetQuantum().qn(0); mettsStochastics_.update(qn,block1,block2,mettsStruct_.rngSeed); } SizeType getPartition() const { SizeType total = lrs_.super().partition()-1; for (SizeType i=0;i0, then do all m's if (lrs_.super().pseudoQnEqual(i, quantumSector_)) return i; } throw PsimagLite::RuntimeError("TargetingMetts: getPartition()\n"); } // direction here is INFINITE void getNewPures(const VectorSizeType& block1, const VectorSizeType& block2) { VectorSizeType alphaFixed(block1.size()); for (SizeType i=0;icommon().aoe().targetVectors(0),lrs_); assert(norm(this->common().aoe().targetVectors()[0])>1e-6); systemPrev_.fixed = alphaFixedVolume; systemPrev_.permutationInverse = lrs_.left().permutationInverse(); environPrev_.fixed = betaFixedVolume; environPrev_.permutationInverse = lrs_.right().permutationInverse(); } void getFullVector(TargetVectorType& v, SizeType m, const LeftRightSuperType& lrs) const { int offset = lrs.super().partition(m); int total = lrs.super().partition(m+1) - offset; PackIndicesType pack(lrs.left().size()); v.resize(total); assert(PsimagLite::norm(pureVectors_.first)>1e-6); assert(PsimagLite::norm(pureVectors_.second)>1e-6); for (int i=0;i1e-6); } else { MatrixType transform1; transform.toDense(transform1); delayedTransform(tmpVector,oldVector,direction,transform1,block); assert(PsimagLite::norm(tmpVector)>1e-6); } SizeType ns = tmpVector.size(); VectorSizeType nk; mettsCollapse_.setNk(nk,block); SizeType volumeOfNk = mettsCollapse_.volumeOf(nk); SizeType newSize = (transform.cols()==0) ? (ns*ns) : transform.cols() * volumeOfNk; newVector.resize(newSize); for (SizeType alpha=0;alpha1e-6); } void setFromInfinite(VectorWithOffsetType& phi, const LeftRightSuperType& lrs) const { phi.populateSectors(lrs.super()); for (SizeType ii=0;ii1e-6); } PsimagLite::String getStage() const { if (this->common().aoe().allStages(StageEnumType::DISABLED)) return "Disabled"; if (this->common().aoe().allStages(StageEnumType::COLLAPSE)) return "Collapsing"; if (this->common().aoe().allStages(StageEnumType::WFT_ADVANCE)) return "WFT with time stepping"; if (this->common().aoe().allStages(StageEnumType::WFT_NOADVANCE)) return "WFT without time change"; return "undefined"; } void findElectronsOfOneSite(VectorSizeType& electrons,SizeType site) const { VectorSizeType block(1,site); typename ModelType::HilbertBasisType basis; VectorSizeType quantumNumbs; model_.setNaturalBasis(basis,quantumNumbs,block); model_.findElectrons(electrons,basis,site); } bool allSitesCollapsed() const { SizeType n = model_.superGeometry().numberOfSites(); for (SizeType i=0;icommon().aoe().targetVectors().size();i++) printEnergies(this->common().aoe().targetVectors()[i],i); } void printEnergies(const VectorWithOffsetType& phi,SizeType whatTarget) const { for (SizeType ii=0;iilrs().super().findPartitionNumber(phi.offset(i0)); typename ModelHelperType::Aux aux(p, BaseType::lrs()); typename ModelType::HamiltonianConnectionType hc(BaseType::lrs(), BaseType::ModelType::modelLinks(), this->common().aoe().time(), model_.superOpHelper()); typename LanczosSolverType::MatrixType lanczosHelper(BaseType::model(), hc, aux); SizeType total = phi.effectiveSize(i0); TargetVectorType phi2(total); phi.extract(phi2,i0); TargetVectorType x(total); lanczosHelper.matrixVectorProduct(x,phi2); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Hamiltonian average at time="<common().aoe().time(); msg<<" for target="<="<="< 0) return wft_.getTransform(sysOrEnv); BlockDiagonalMatrixType* m = new BlockDiagonalMatrixType; garbage_.push_back(m); return *m; } void setWeights() { gsWeight_= 0; const SizeType n = weight_.size(); SizeType sum = 0; for (SizeType i = 0; i < n; ++i) { weight_[i] = 0; if (i >= this->common().aoe().targetVectors().size()) continue; const RealType norma = norm(this->common().aoe().targetVectors()[i]); if (norma < 1e-5) continue; weight_[i] = 1; ++sum; } if (sum == 0) sum = 1; static const RealType one = 1; const RealType factor = one/sum; for (SizeType i = 0; i < n; ++i) weight_[i] *= factor; } const ModelType& model_; const LeftRightSuperType& lrs_; TargetParamsType mettsStruct_; const WaveFunctionTransfType& wft_; const QnType& quantumSector_; PsimagLite::ProgressIndicator progress_; VectorRealType betas_; VectorRealType weight_; RealType gsWeight_; MettsStochasticsType mettsStochastics_; MettsCollapseType mettsCollapse_; ProgramGlobals::DirectionEnum prevDirection_; MettsPrev systemPrev_; MettsPrev environPrev_; std::pair pureVectors_; VectorSizeType sitesCollapsed_; VectorBlockDiagonalMatrixType garbage_; static SizeType timesWithoutAdvancement_; }; //class TargetingMetts template SizeType TargetingMetts::timesWithoutAdvancement_ = 0; } // namespace Dmrg #endif //DMRG_TARGETING_METTS_H dmrgpp-6.02/src/Engine/TargetingRixsDynamic.h000066400000000000000000000610751414604301300212030ustar00rootroot00000000000000/* Copyright (c) 2009-2016-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 4.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TargetingRixsDynamic.h * * Implements the targeting required by * RIXS Dynamic * * Must be restarted from RIXS Static * * We read from static tv[i] --> tv[i] * * the correction vectors are imag --> tv[8] * real --> tv[9] * */ #ifndef TARGETING_RIXS_DYNAMIC_H #define TARGETING_RIXS_DYNAMIC_H #include "ProgressIndicator.h" #include "TargetParamsCorrectionVector.h" #include "TargetParamsTimeStep.h" #include "VectorWithOffsets.h" #include "TargetingBase.h" #include "ParametersForSolver.h" #include "ParallelTriDiag.h" #include "FreqEnum.h" #include "CorrectionVectorSkeleton.h" namespace Dmrg { template class TargetingRixsDynamic : public TargetingBase { typedef LanczosSolverType_ LanczosSolverType; typedef TargetingBase BaseType; public: typedef typename BaseType::TargetingCommonType TargetingCommonType; typedef typename BaseType::MatrixVectorType MatrixVectorType; typedef typename MatrixVectorType::ModelType ModelType; typedef typename ModelType::RealType RealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename ModelType::OperatorsType OperatorsType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef TargetParamsCorrectionVector TargetParamsType; typedef TargetParamsTimeStep TargetParams2Type; typedef typename BasisType::BlockType BlockType; typedef typename BaseType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename WaveFunctionTransfType::VectorWithOffsetType VectorWithOffsetType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef VectorType TargetVectorType; typedef typename TargetingCommonType::TimeSerializerType TimeSerializerType; typedef typename LanczosSolverType::TridiagonalMatrixType TridiagonalMatrixType; typedef PsimagLite::Matrix DenseMatrixType; typedef PsimagLite::Matrix DenseMatrixRealType; typedef typename LanczosSolverType::PostProcType PostProcType; typedef typename LanczosSolverType::MatrixType LanczosMatrixType; typedef CorrectionVectorFunction CorrectionVectorFunctionType; typedef ParallelTriDiag ParallelTriDiagType; typedef typename ParallelTriDiagType::MatrixComplexOrRealType MatrixComplexOrRealType; typedef typename ParallelTriDiagType::VectorMatrixFieldType VectorMatrixFieldType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorVectorRealType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef CorrectionVectorSkeleton CorrectionVectorSkeletonType; typedef typename BasisType::QnType QnType; typedef typename TargetParamsType::BaseType::AlgorithmEnum AlgorithmEnumType; typedef typename TargetingCommonType::StageEnumType StageEnumType; TargetingRixsDynamic(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, const QnType&, InputValidatorType& ioIn) : BaseType(lrs,model,wft,1), tstStruct_(ioIn, "TargetingRixsDynamic", model), tstStruct2_(nullptr), ioIn_(ioIn), progress_("TargetingRixsDynamic"), gsWeight_(1.0), paramsForSolver_(ioIn,"DynamicDmrg"), skeleton_(ioIn_,tstStruct_,model,lrs,this->common().aoe().energy()), applied_(false), appliedFirst_(false) { firstCall_ = true; if (!wft.isEnabled()) err("TargetingRixsDynamic needs wft\n"); if (tstStruct_.algorithm() == TargetParamsType::BaseType::AlgorithmEnum::KRYLOV) { return; // early exit here } tstStruct2_ = new TargetParams2Type(ioIn, "TargetingRixsDynamic", model); times_.resize(tstStruct2_->timeSteps()); RealType tau = tstStruct2_->tau(); SizeType n = times_.size(); if (tstStruct_.algorithm() == TargetParamsType::BaseType::AlgorithmEnum::KRYLOVTIME) { if (n != 5) err("TargetingRixsDynamic with KrylovTime: number of TimeSteps must be 5\n"); } for (SizeType i = 0; i < n; ++i) times_[i] = i*tau/(n - 1); this->common().aoe().initTimeVectors(*tstStruct2_, times_, ioIn); } ~TargetingRixsDynamic() { delete tstStruct2_; tstStruct2_ = nullptr; } SizeType sites() const { return (tstStruct_.algorithm() == TargetParamsType::BaseType::AlgorithmEnum::KRYLOV) ? tstStruct_.sites() : tstStruct2_->sites(); } SizeType targets() const { const AlgorithmEnumType algo = tstStruct_.algorithm(); if (algo == TargetParamsType::BaseType::AlgorithmEnum::KRYLOV) { return 10; } else if (algo == TargetParamsType::BaseType::AlgorithmEnum::CHEBYSHEV) { return 12; } else { return 16; } } RealType weight(SizeType i) const { assert(i < weight_.size()); return weight_[i]; } RealType gsWeight() const { return gsWeight_; } SizeType size() const { if (!applied_ && appliedFirst_) return 8; SizeType tenOrTwelveOrSixteen; const AlgorithmEnumType algo = tstStruct_.algorithm(); if (algo == TargetParamsType::BaseType::AlgorithmEnum::KRYLOV) { tenOrTwelveOrSixteen = 10; } else if (algo == TargetParamsType::BaseType::AlgorithmEnum::CHEBYSHEV) { tenOrTwelveOrSixteen = 12; } else { tenOrTwelveOrSixteen = 16; } return (applied_) ? tenOrTwelveOrSixteen : 6; } // tv[6] = A^\dagger_{site} |tv[1]> // tv[7] = A^\dagger_{site} |tv[2]> // tv[8] = Re of (w*-H+i\eta)^{-1} A^\dagger_{site} |tv[6]> // - Im of (w*-H+i\eta)^{-1} A^\dagger_{site} |tv[7]> // tv[9] = Im of (w*-H+i\eta)^{-1} A^\dagger_{site} |tv[6]> // + Re of (w*-H+i\eta)^{-1} A^\dagger_{site} |tv[7]> void evolve(const VectorRealType& energies, ProgramGlobals::DirectionEnum direction, const BlockType& block1, const BlockType& block2, SizeType loopNumber) { if (block1.size()!=1 || block2.size()!=1) { PsimagLite::String str(__FILE__); str += " " + ttos(__LINE__) + "\n"; str += "evolve only blocks of one site supported\n"; throw PsimagLite::RuntimeError(str.c_str()); } if (direction == ProgramGlobals::DirectionEnum::INFINITE) return; assert(energies.size() > 0); const RealType Eg = energies[0]; SizeType max = tstStruct_.sites(); if (max > 2) err("You cannot apply more than 2 operators (only SUM is allowed)\n"); SizeType site = block1[0]; this->common().aoe().wftSome(site, 0, 6); const AlgorithmEnumType algo = tstStruct_.algorithm(); if (algo == TargetParamsType::BaseType::AlgorithmEnum::KRYLOV) { this->common().aoe().wftSome(site, 6, this->common().aoe().targetVectors().size()); } else { // just to set the stage and currenttime: CHEBY and KRYLOVTIME this->common().aoe().getPhi(0, Eg, direction, site, loopNumber, *tstStruct2_); } if (!applied_) { if (max == 1) doMax1(site, direction, loopNumber); if (max == 2 && tstStruct_.concatenation() == TargetParamsType::ConcatEnum::SUM) doMax2Sum(site, direction, loopNumber); if (max == 2 && tstStruct_.concatenation() == TargetParamsType::ConcatEnum::PRODUCT) doMax2Prod(site, direction, loopNumber); } calcDynVectors(Eg, direction, block1); // WEIGHTS ARE SET IN calcDynVectors() cocoon(site, direction); this->common().printNormsAndWeights(gsWeight_, weight_); } void write(const VectorSizeType& block, PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { this->common().write(io, block, prefix); this->common().writeNGSTs(io, prefix, block, "RixsDynamic"); } void read(typename TargetingCommonType::IoInputType& io, PsimagLite::String prefix) { this->common().read(io, prefix); TimeSerializerType ts(io, prefix); SizeType n = ts.numberOfVectors(); if (n != 6) err("TargetingRixsDynamic: number of TVs must be 6\n"); for (SizeType site = 0; site < 6; ++site) this->common().aoe().targetVectors(site) = ts.vector(site); } private: void doMax1(SizeType site, ProgramGlobals::DirectionEnum direction, SizeType loopNumber) { if (site == tstStruct_.sites(0)) { ComplexOrRealType densCim = this->common().rixsCocoon(direction,site,1,0,false); std::cout< 1\n"; // 1 here is the "superdensity" ComplexOrRealType densCre = this->common().rixsCocoon(direction,site,2,0,false); std::cout< 1\n"; // 1 here is the "superdensity" ComplexOrRealType densjim = this->common().rixsCocoon(direction,site,4,3,false); std::cout< 1\n"; // 1 here is the "superdensity" ComplexOrRealType densjre = this->common().rixsCocoon(direction,site,5,3,false); std::cout< 1\n"; // 1 here is the "superdensity" VectorWithOffsetType tmpV1; SizeType indexOfOperator = 0; applyOneOp(loopNumber, indexOfOperator, site, tmpV1, // phiNew this->common().aoe().targetVectors(1), // src1 apply op on Im|alpha(C)> direction); const VectorWithOffsetType& psi00 = this->common().aoe(). ensureOnlyOnePsi(__FILE__ + PsimagLite::String("::doMax1")); if (tmpV1.size() > 0) addFactor(tmpV1, psi00, densCim); if (tmpV1.size() > 0) this->common().aoe().targetVectors(6) = tmpV1; VectorWithOffsetType tmpV2; applyOneOp(loopNumber, indexOfOperator, site, tmpV2, // phiNew this->common().aoe().targetVectors(2), // src1 apply op on Re|alpha(C)> direction); if (tmpV2.size() > 0) addFactor(tmpV2, psi00, densCre); if (tmpV2.size() > 0) { this->common().aoe().targetVectors(7) = tmpV2; applied_ = true; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Applied"; progress_.printline(msgg, std::cout); } } } void doMax2Sum(SizeType site, ProgramGlobals::DirectionEnum direction, SizeType loopNumber) { if (site == tstStruct_.sites(0)) { VectorWithOffsetType tmpV1; SizeType indexOfOperator = 0; applyOneOp(loopNumber, indexOfOperator, site, tmpV1, // phiNew this->common().aoe().targetVectors(1), // src1 apply op on Im|alpha(C)> direction); if (tmpV1.size() > 0) this->common().aoe().targetVectors(6) = tmpV1; VectorWithOffsetType tmpV2; applyOneOp(loopNumber, indexOfOperator, site, tmpV2, // phiNew this->common().aoe().targetVectors(2), // src1 apply op on Re|alpha(C)> direction); if (tmpV2.size() > 0) { this->common().aoe().targetVectors(7) = tmpV2; applied_ = false; appliedFirst_ = true; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"First Operator Applied"; progress_.printline(msgg, std::cout); } } if (site == tstStruct_.sites(1)) { ComplexOrRealType densCim = this->common().rixsCocoon(direction,site,1,0,false); std::cout< 1\n"; // 1 here is the "superdensity" ComplexOrRealType densCre = this->common().rixsCocoon(direction,site,2,0,false); std::cout< 1\n"; // 1 here is the "superdensity" ComplexOrRealType densjim = this->common().rixsCocoon(direction,site,4,3,false); std::cout< 1\n"; // 1 here is the "superdensity" ComplexOrRealType densjre = this->common().rixsCocoon(direction,site,5,3,false); std::cout< 1\n"; // 1 here is the "superdensity" VectorWithOffsetType tmpV1; SizeType indexOfOperator = 1; applyOneOp(loopNumber, indexOfOperator, site, tmpV1, // phiNew this->common().aoe().targetVectors(1), // src1 apply op on Im|alpha(C)> direction); const VectorWithOffsetType& psi00 = this->common().aoe(). ensureOnlyOnePsi(__FILE__ + PsimagLite::String("::doMax2")); if (tmpV1.size() > 0) addFactor(tmpV1, psi00, densCim); if (tmpV1.size() > 0) this->common().aoe().targetVectors(6) += tmpV1; VectorWithOffsetType tmpV2; applyOneOp(loopNumber, indexOfOperator, site, tmpV2, // phiNew this->common().aoe().targetVectors(2), // src1 apply op on Re|alpha(C)> direction); if (tmpV2.size() > 0) addFactor(tmpV2, psi00, densCre); if (tmpV2.size() > 0) { this->common().aoe().targetVectors(7) += tmpV2; applied_ = true; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Applied"; progress_.printline(msgg, std::cout); } } } void doMax2Prod(SizeType site, ProgramGlobals::DirectionEnum direction, SizeType loopNumber) { if (site == tstStruct_.sites(0)) { VectorWithOffsetType tmpV1; SizeType indexOfOperator = 0; applyOneOp(loopNumber, indexOfOperator, site, tmpV1, // phiNew this->common().aoe().targetVectors(1), // src1 apply op on Im|alpha(C)> direction); if (tmpV1.size() > 0) this->common().aoe().targetVectors(6) = tmpV1; VectorWithOffsetType tmpV2; applyOneOp(loopNumber, indexOfOperator, site, tmpV2, // phiNew this->common().aoe().targetVectors(2), // src1 apply op on Re|alpha(C)> direction); if (tmpV2.size() > 0) { this->common().aoe().targetVectors(7) = tmpV2; applied_ = false; appliedFirst_ = true; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"PROD: First Operator Applied"; progress_.printline(msgg, std::cout); } } if (site == tstStruct_.sites(1)) { VectorWithOffsetType tmpV1; SizeType indexOfOperator = 1; applyOneOp(loopNumber, indexOfOperator, site, tmpV1, // phiNew this->common().aoe().targetVectors(6), // src1 apply op on Im|alpha(C)> direction); if (tmpV1.size() > 0) this->common().aoe().targetVectors(6) = tmpV1; VectorWithOffsetType tmpV2; applyOneOp(loopNumber, indexOfOperator, site, tmpV2, // phiNew this->common().aoe().targetVectors(7), // src1 apply op on Re|alpha(C)> direction); if (tmpV2.size() > 0) { this->common().aoe().targetVectors(7) = tmpV2; applied_ = true; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"PROD: Second Operator Applied"; progress_.printline(msgg, std::cout); } } } void cocoon(SizeType site, ProgramGlobals::DirectionEnum direction) const { const AlgorithmEnumType algo = tstStruct_.algorithm(); const bool isChevy = (algo == TargetParamsType::BaseType::AlgorithmEnum::CHEBYSHEV); SizeType nineOrTenOrFifteen = (isChevy) ? 10 : 15; SizeType eightOrEleven = (isChevy) ? 8 : 11; if (algo == TargetParamsType::BaseType::AlgorithmEnum::KRYLOV) { nineOrTenOrFifteen = 9; eightOrEleven = 8; } const ComplexOrRealType rr = this->common().rixsCocoon(direction,site,nineOrTenOrFifteen,5,true); const ComplexOrRealType ri = this->common().rixsCocoon(direction,site,nineOrTenOrFifteen,4,true); const ComplexOrRealType ir = this->common().rixsCocoon(direction,site,eightOrEleven,5,true); const ComplexOrRealType ii = this->common().rixsCocoon(direction,site,eightOrEleven,4,true); const RealType time = this->common().aoe().time(); std::cout< 1\n"; // 1 here is the "superdensity" std::cout< 1\n"; // 1 here is the "superdensity" } void addFactor(VectorWithOffsetType& phiNew, const VectorWithOffsetType& psiSrc2, ComplexOrRealType factor) const { // CHECK if psiSrc2 and phiNew have the same offset! if (psiSrc2.offset(0) == phiNew.offset(0)) phiNew += (-factor)*psiSrc2; RealType norma = norm(phiNew); if (norma<1e-6) { PsimagLite::OstringStream msgg2(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg2 = msgg2(); msg2<<"Norm of phi is zero\n"; progress_.printline(msgg2, std::cout); } } void calcDynVectors(RealType Eg, ProgramGlobals::DirectionEnum direction, const VectorSizeType& block1) { if (!applied_ && appliedFirst_) { setWeights(8); return; } if (!applied_) { setWeights(6); return; } const AlgorithmEnumType algo = tstStruct_.algorithm(); if (algo == TargetParamsType::BaseType::AlgorithmEnum::KRYLOV) { skeleton_.calcDynVectors(this->common().aoe().targetVectors(6), this->common().aoe().targetVectors(7), this->common().aoe().targetVectors(8), this->common().aoe().targetVectors(9)); setWeights(10); firstCall_ = false; // unused here but just in case return; } VectorSizeType indices; VectorSizeType indices2; SizeType numberOfWeights = 0; if (algo == TargetParamsType::BaseType::AlgorithmEnum::CHEBYSHEV) { indices = {6, 8, 9}; indices2 = {7, 10, 11}; numberOfWeights = 12; } else if (algo == TargetParamsType::BaseType::AlgorithmEnum::KRYLOVTIME){ indices = {6, 8, 9, 10, 11}; indices2 = {7, 12, 13, 14, 15}; numberOfWeights = 16; } assert(numberOfWeights > 0); assert(indices.size() > 0 && indices2.size() > 0); calcVectors(indices, Eg, direction, block1, !firstCall_, false); calcVectors(indices2, Eg, direction, block1, !firstCall_, true); firstCall_ = false; setWeights(numberOfWeights); } void calcVectors(const VectorSizeType& indices, RealType Eg, ProgramGlobals::DirectionEnum direction, const VectorSizeType& block1, bool wftOrAdvance, bool isLastCall) { bool allOperatorsApplied = (this->common().aoe().noStageIs(StageEnumType::DISABLED) && this->common().aoe().noStageIs(StageEnumType::OPERATOR)); const VectorWithOffsetType& v0 = this->common().aoe().targetVectors(indices[0]); this->common().aoe().calcTimeVectors(indices, Eg, v0, direction, allOperatorsApplied, wftOrAdvance, // wft and advance indices[0] block1, isLastCall); } void applyOneOp(SizeType loopNumber, SizeType indexOfOperator, SizeType site, VectorWithOffsetType& dest, const VectorWithOffsetType& src, ProgramGlobals::DirectionEnum direction) { const AlgorithmEnumType algo = tstStruct_.algorithm(); if (algo != TargetParamsType::BaseType::AlgorithmEnum::KRYLOV) this->common().aoe().applyOneOperator(loopNumber, indexOfOperator, site, dest, // phiNew src, // src1 direction, *tstStruct2_); else this->common().aoe().applyOneOperator(loopNumber, indexOfOperator, site, dest, // phiNew src, // src1 direction, tstStruct_); } void setWeights(SizeType n) { gsWeight_ = tstStruct_.gsWeight(); RealType sum = n; weight_.resize(n, 1); for (SizeType r=0;r::Type weight_; typename LanczosSolverType::ParametersSolverType paramsForSolver_; CorrectionVectorSkeletonType skeleton_; bool applied_; bool appliedFirst_; static bool firstCall_; }; // class TargetingRixsDynamic template bool TargetingRixsDynamic::firstCall_ = true; } // namespace /*@}*/ #endif // TARGETING_RIXS_DYNAMIC_H dmrgpp-6.02/src/Engine/TargetingRixsStatic.h000066400000000000000000000354671414604301300210540ustar00rootroot00000000000000/* Copyright (c) 2009-2016-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 4.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TargetingRixsStatic.h * * Implements the targeting required by * RIXS Static, restarts from Correction Vector run * tv[0] = A^\dagger_{site}|gs> * tv[1] = Imaginary of (w*-Htilde+i\eta)^{-1} A^\dagger_{site}|gs> * tv[2] = Real of (w*-Htilde+i\eta)^{-1} A^\dagger_{site}|gs> * tv[3] = A^\dagger_{sitep}|gs> * tv[4] = Imaginary of (w*-Htildep+i\eta)^{-1} A^\dagger_{sitep}|gs> * tv[5] = Real of (w*-Htildep+i\eta)^{-1} A^\dagger_{sitep}|gs> * */ #ifndef TARGETING_RIXS_STATIC_H #define TARGETING_RIXS_STATIC_H #include "ProgressIndicator.h" #include "TargetParamsCorrectionVector.h" #include "VectorWithOffsets.h" #include "TargetingBase.h" #include "ParametersForSolver.h" #include "ParallelTriDiag.h" #include "FreqEnum.h" #include "CorrectionVectorSkeleton.h" namespace Dmrg { template class TargetingRixsStatic : public TargetingBase { typedef LanczosSolverType_ LanczosSolverType; typedef TargetingBase BaseType; public: typedef typename BaseType::TargetingCommonType TargetingCommonType; typedef typename BaseType::MatrixVectorType MatrixVectorType; typedef typename MatrixVectorType::ModelType ModelType; typedef typename ModelType::RealType RealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename ModelType::OperatorsType OperatorsType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef TargetParamsCorrectionVector TargetParamsType; typedef typename BasisType::BlockType BlockType; typedef typename BaseType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename WaveFunctionTransfType::VectorWithOffsetType VectorWithOffsetType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef VectorType TargetVectorType; typedef typename LanczosSolverType::TridiagonalMatrixType TridiagonalMatrixType; typedef PsimagLite::Matrix DenseMatrixType; typedef PsimagLite::Matrix DenseMatrixRealType; typedef typename LanczosSolverType::PostProcType PostProcType; typedef typename TargetingCommonType::TimeSerializerType TimeSerializerType; typedef typename LanczosSolverType::MatrixType LanczosMatrixType; typedef CorrectionVectorFunction CorrectionVectorFunctionType; typedef ParallelTriDiag ParallelTriDiagType; typedef typename ParallelTriDiagType::MatrixComplexOrRealType MatrixComplexOrRealType; typedef typename ParallelTriDiagType::VectorMatrixFieldType VectorMatrixFieldType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorVectorRealType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef CorrectionVectorSkeleton CorrectionVectorSkeletonType; typedef typename BasisType::QnType QnType; TargetingRixsStatic(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, const QnType&, InputValidatorType& ioIn) : BaseType(lrs,model,wft,1), tstStruct_(ioIn, "TargetingRixsStatic", model), ioIn_(ioIn), progress_("TargetingRixsStatic"), gsWeight_(1.0), skeleton_(ioIn_,tstStruct_,model,lrs,this->common().aoe().energy()), applied_(false), appliedFirst_(false) { if (!wft.isEnabled()) err("TargetingRixsStatic needs wft\n"); } SizeType sites() const { return tstStruct_.sites(); } SizeType targets() const { return 6; } RealType weight(SizeType i) const { return weight_[i]; } RealType gsWeight() const { return gsWeight_; } SizeType size() const { if (!applied_ && appliedFirst_) { return 4; } return (applied_) ? 6 : 3; } void evolve(const VectorRealType& energies, ProgramGlobals::DirectionEnum direction, const BlockType& block1, const BlockType& block2, SizeType loopNumber) { if (block1.size()!=1 || block2.size()!=1) { PsimagLite::String str(__FILE__); str += " " + ttos(__LINE__) + "\n"; str += "evolve only blocks of one site supported\n"; throw PsimagLite::RuntimeError(str.c_str()); } assert(energies.size() > 0); RealType Eg = energies[0]; SizeType site = block1[0]; evolve(Eg,direction,site,loopNumber); this->common().printNormsAndWeights(gsWeight_, weight_); } void write(const VectorSizeType& block, PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { this->common().write(io, block, prefix); this->common().writeNGSTs(io, prefix, block, "RixsStatic"); } void read(typename TargetingCommonType::IoInputType& io, PsimagLite::String prefix) { this->common().read(io, prefix); TimeSerializerType ts(io, prefix); SizeType n = ts.numberOfVectors(); if (n != 4) err("TargetingRixsStatic: number of TVs must be 4\n"); for (SizeType site = 0; site < 3; ++site) { this->common().aoe().targetVectors(site) = ts.vector(site + 1); } } private: // tv[0] = A_site |gs> // tv[1] = imaginary cv for tv[0] // tv[2] = real cv for tv[0] // tv[3] = A_sitep |gs> // tv[4] = imaginary cv for tv[3] // tv[5] = real cv for tv[3] void evolve(RealType, ProgramGlobals::DirectionEnum direction, SizeType site, SizeType loopNumber) { if (direction == ProgramGlobals::DirectionEnum::INFINITE) return; // see if operator at sitep has been applied and result put into targetVectors[3] // if no apply operator at site and add into targetVectors[3] // also wft everything this->common().aoe().wftSome(site, 0, this->common().aoe().targetVectors().size()); SizeType max = tstStruct_.sites(); if (max>2) err("You cannot apply more than 2 operators (only SUM is allowed)\n"); if (!applied_) { const VectorWithOffsetType& psi00 = this->common().aoe(). ensureOnlyOnePsi(__FILE__ + PsimagLite::String("::evolve")); if (max==1) { if (site == tstStruct_.sites(0)) { VectorWithOffsetType tmpV1; SizeType indexOfOperator = 0; this->common().aoe().applyOneOperator(loopNumber, indexOfOperator, site, tmpV1, psi00, direction, tstStruct_); if (tmpV1.size() > 0) { this->common().aoe().targetVectors(3) = tmpV1; applied_ = true; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Applied operator"; progress_.printline(msgg, std::cout); } } } if (max==2 && tstStruct_.concatenation() == TargetParamsType::ConcatEnum::SUM) { if (site == tstStruct_.sites(0)) { VectorWithOffsetType tmpV1; SizeType indexOfOperator = 0; this->common().aoe().applyOneOperator(loopNumber, indexOfOperator, site, tmpV1, psi00, direction, tstStruct_); if (tmpV1.size() > 0) { this->common().aoe().targetVectors(3) = tmpV1; applied_ = false; appliedFirst_ = true; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Applied first operator"; progress_.printline(msgg, std::cout); } } if (site == tstStruct_.sites(1)) { VectorWithOffsetType tmpV2; SizeType indexOfOperator = 1; this->common().aoe().applyOneOperator(loopNumber, indexOfOperator, site, tmpV2, psi00, direction, tstStruct_); if (tmpV2.size() > 0) { this->common().aoe().targetVectors(3) += tmpV2; applied_ = true; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Applied second operator"; progress_.printline(msgg, std::cout); } } } if (max==2 && tstStruct_.concatenation() == TargetParamsType::ConcatEnum::PRODUCT) { if (site == tstStruct_.sites(0)) { VectorWithOffsetType tmpV1; SizeType indexOfOperator = 0; this->common().aoe().applyOneOperator(loopNumber, indexOfOperator, site, tmpV1, psi00, direction, tstStruct_); if (tmpV1.size() > 0) { this->common().aoe().targetVectors(3) = tmpV1; applied_ = false; appliedFirst_ = true; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"PROD: Applied First Operator"; progress_.printline(msgg, std::cout); } } if (site == tstStruct_.sites(1)) { VectorWithOffsetType tmpV2; SizeType indexOfOperator = 1; this->common().aoe().applyOneOperator(loopNumber, indexOfOperator, site, tmpV2, this->common().aoe().targetVectors(3), direction, tstStruct_); if (tmpV2.size() > 0) { this->common().aoe().targetVectors(3) = tmpV2; applied_ = true; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"PROD: Applied Second Operator"; progress_.printline(msgg, std::cout); } } } } doCorrectionVector(); bool doBorderIfBorder = true; VectorSizeType block(1, site); this->common().cocoon(block, direction, doBorderIfBorder); } void doCorrectionVector() { if (!applied_ && appliedFirst_) { setWeights(4); return; } if (!applied_) { setWeights(3); return; } skeleton_.calcDynVectors(this->common().aoe().targetVectors(3), this->common().aoe().targetVectors(4), this->common().aoe().targetVectors(5)); // this->common().aoe().targetVectors(4) = this->common().aoe().targetVectors(1); // this->common().aoe().targetVectors(5) = this->common().aoe().targetVectors(2); RealType n4 = PsimagLite::real(this->common().aoe().targetVectors(4)* this->common().aoe().targetVectors(4)); RealType n5 = PsimagLite::real(this->common().aoe().targetVectors(5)* this->common().aoe().targetVectors(5)); std::cout<<"HERE============> n4="<common().aoe().energy()<<"\n"; setWeights(6); } void setWeights(SizeType n) { gsWeight_ = tstStruct_.gsWeight(); RealType sum = n; weight_.resize(n, 1); for (SizeType r=0;r::Type weight_; CorrectionVectorSkeletonType skeleton_; bool applied_; bool appliedFirst_; }; // class TargetingRixsStatic } // namespace /*@}*/ #endif // TARGETING_RIXS_STATIC_H dmrgpp-6.02/src/Engine/TargetingTimeStep.h000066400000000000000000000307341414604301300205010ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ #ifndef TARGETING_TIMESTEP_H #define TARGETING_TIMESTEP_H #include #include "ProgressIndicator.h" #include "TargetParamsTimeStep.h" #include "ProgramGlobals.h" #include "ParametersForSolver.h" #include "TimeVectorsKrylov.h" #include "TimeVectorsRungeKutta.h" #include "TimeVectorsSuzukiTrotter.h" #include "TargetingBase.h" #include "BlockDiagonalMatrix.h" #include "PredicateAwesome.h" namespace Dmrg { template class TargetingTimeStep : public TargetingBase { enum {BORDER_NEITHER, BORDER_LEFT, BORDER_RIGHT}; public: typedef LanczosSolverType_ LanczosSolverType; typedef TargetingBase BaseType; typedef typename BaseType::TargetingCommonType TargetingCommonType; typedef std::pair PairType; typedef typename BaseType::OptionsType OptionsType; typedef typename BaseType::MatrixVectorType MatrixVectorType; typedef typename MatrixVectorType::ModelType ModelType; typedef typename ModelType::RealType RealType; typedef typename ModelType::OperatorsType OperatorsType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename BaseType::WaveFunctionTransfType WaveFunctionTransfType; typedef typename WaveFunctionTransfType::VectorWithOffsetType VectorWithOffsetType; typedef typename VectorWithOffsetType::value_type ComplexOrRealType; typedef typename VectorWithOffsetType::VectorType TargetVectorType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef TargetParamsTimeStep TargetParamsType; typedef typename BasisType::BlockType BlockType; typedef typename TargetingCommonType::TimeSerializerType TimeSerializerType; typedef typename OperatorType::StorageType SparseMatrixType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename BasisType::QnType QnType; typedef typename TargetingCommonType::StageEnumType StageEnumType; TargetingTimeStep(const LeftRightSuperType& lrs, const ModelType& model, const WaveFunctionTransfType& wft, const QnType&, InputValidatorType& ioIn, PsimagLite::String targeting) : BaseType(lrs, model, wft, 0), tstStruct_(ioIn, targeting, model), wft_(wft), progress_(targeting), times_(tstStruct_.timeSteps()), weight_(tstStruct_.timeSteps()), tvEnergy_(times_.size(),0.0), gsWeight_(tstStruct_.gsWeight()) { if (!wft.isEnabled()) err("TST needs an enabled wft\n"); if (tstStruct_.sites() == 0) err("TST needs at least one TSPSite\n"); RealType tau =tstStruct_.tau(); RealType sum = 0; SizeType n = times_.size(); RealType factor = (n+4.0)/(n+2.0); factor *= (1.0 - gsWeight_); for (SizeType i=0;icommon().aoe().initTimeVectors(tstStruct_, times_, ioIn); } SizeType sites() const { return tstStruct_.sites(); } SizeType targets() const { return tstStruct_.timeSteps(); } RealType weight(SizeType i) const { assert(!this->common().aoe().allStages(StageEnumType::DISABLED)); return weight_[i]; } RealType gsWeight() const { if (this->common().aoe().allStages(StageEnumType::DISABLED)) return 1.0; return gsWeight_; } bool includeGroundStage() const { if (!this->common().aoe().noStageIs(StageEnumType::DISABLED)) return true; bool b = (fabs(gsWeight_)>1e-6); return b; } void evolve(const VectorRealType& energies, ProgramGlobals::DirectionEnum direction, const BlockType& block1, const BlockType&, SizeType loopNumber) { assert(block1.size() > 0); SizeType site = block1[0]; assert(energies.size() > 0); RealType Eg = energies[0]; evolveInternal(Eg,direction,block1,loopNumber); SizeType numberOfSites = this->lrs().super().block().size(); if (site > 1 && site < numberOfSites - 2) return; if (direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) { if (site == 1) return; } else { if (site == numberOfSites - 2) return; } SizeType x = (site == 1) ? 0 : numberOfSites - 1; BlockType block(1, x); evolveInternal(Eg,direction,block,loopNumber); } bool end() const { return (tstStruct_.maxTime() != 0 && this->common().aoe().time() >= tstStruct_.maxTime()); } void read(typename TargetingCommonType::IoInputType& io, PsimagLite::String prefix) { this->common().readGSandNGSTs(io, prefix, "TimeStep"); } void write(const VectorSizeType& block, PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Saving state..."; progress_.printline(msgg, std::cout); this->common().write(io, block, prefix); this->common().writeNGSTs(io, prefix, block, "TimeStep"); } private: void evolveInternal(RealType Eg, ProgramGlobals::DirectionEnum direction, const BlockType& block1, SizeType loopNumber) { if (direction == ProgramGlobals::DirectionEnum::INFINITE) return; VectorWithOffsetType phiNew; assert(block1.size() > 0); SizeType site = block1[0]; this->common().aoe().getPhi(&phiNew, Eg, direction, site, loopNumber, tstStruct_); PairType startEnd(0,times_.size()); bool allOperatorsApplied = (this->common().aoe().noStageIs(StageEnumType::DISABLED) && this->common().aoe().noStageIs(StageEnumType::OPERATOR)); VectorSizeType indices(startEnd.second - startEnd.first); for (SizeType i = 0; i < indices.size(); ++i) indices[i] = i + startEnd.first; const bool isLastCall = true; this->common().aoe().calcTimeVectors(indices, Eg, phiNew, direction, allOperatorsApplied, false, // don't wft or advance indices[0] block1, isLastCall); bool doBorderIfBorder = false; this->common().cocoon(block1, direction, doBorderIfBorder); PsimagLite::String predicate = this->model().params().printHamiltonianAverage; const SizeType center = this->model().superGeometry().numberOfSites()/2; PsimagLite::PredicateAwesome<>::replaceAll(predicate, "c", ttos(center)); PsimagLite::PredicateAwesome<> pAwesome(predicate); assert(block1.size() > 0); if (pAwesome.isTrue("s", block1[0])) printEnergies(); // in-situ const OptionsType& options = this->model().params().options; bool normalizeTimeVectors = (options.isSet("normalizeTimeVectors") || options.isSet("TargetingAncilla")); if (options.isSet("neverNormalizeVectors")) normalizeTimeVectors = false; if (normalizeTimeVectors) this->common().normalizeTimeVectors(); this->common().printNormsAndWeights(gsWeight_, weight_); } void printEnergies() const { for (SizeType i=0;icommon().aoe().targetVectors().size();i++) printEnergies(this->common().aoe().targetVectors()[i],i); } void printEnergies(const VectorWithOffsetType& phi,SizeType whatTarget) const { for (SizeType ii=0;iilrs().super().findPartitionNumber(phi.offset(i0)); typename ModelHelperType::Aux aux(p, BaseType::lrs()); typename ModelType::HamiltonianConnectionType hc(BaseType::lrs(), ModelType::modelLinks(), this->common().aoe().time(), BaseType::model().superOpHelper()); typename LanczosSolverType::MatrixType lanczosHelper(BaseType::model(), hc, aux); const SizeType total = phi.effectiveSize(i0); TargetVectorType phi2(total); phi.extract(phi2,i0); TargetVectorType x(total); lanczosHelper.matrixVectorProduct(x,phi2); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Hamiltonian average at time="<common().aoe().time(); msg<<" for target="<="<="< class TermForTargetingExpression { public: typedef typename TargetingBaseType::ModelType ModelType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::StorageType SparseMatrixType; typedef typename TargetingBaseType::VectorWithOffsetType VectorWithOffsetType; typedef typename VectorWithOffsetType::value_type ComplexOrRealType; typedef typename PsimagLite::Real::Type RealType; typedef PsimagLite::Vector::Type VectorStringType; typedef PsimagLite::Vector::Type VectorSizeType; typedef AuxForTargetingExpression AuxiliaryType; typedef PsimagLite::OneOperatorSpec OneOperatorSpecType; typedef typename PsimagLite::Vector::Type VectorOneOperatorSpecType; typedef typename OneOperatorSpecType::SiteSplit SiteSplitType; typedef typename TargetingBaseType::ApplyOperatorExpressionType ApplyOperatorExpressionType; typedef typename ApplyOperatorExpressionType::BorderEnumType BorderEnumType; TermForTargetingExpression(const AuxiliaryType& aux) : finalized_(false), aux_(aux), factor_(1.0) {} TermForTargetingExpression(PsimagLite::String str, const AuxiliaryType& aux) : finalized_(false), aux_(aux), factor_(1.0), vStr_(1, str) {} TermForTargetingExpression& operator=(const TermForTargetingExpression& other) { finalized_ = other.finalized_; factor_ = other.factor_; strFactor_ = other.strFactor_; vStr_ = other.vStr_; return *this; } void multiply(const TermForTargetingExpression& other) { const SizeType n = other.vStr_.size(); for (SizeType i = 0; i < n; ++i) vStr_.push_back(other.vStr_[i]); } void multiply(ComplexOrRealType val) { factor_ *= val; return (PsimagLite::IsComplexNumber::True) ? finalMultImag() : finalMultReal(); } void finalize() { if (finalized_) return; SizeType n = vStr_.size(); if (n == 0) err("AlgebraForTargetingExpression: Cannot finalize an empty object\n"); PsimagLite::String ket; SizeType sitesEqualToCoo = 0; VectorSizeType discardedTerms; VectorStringType newVstr; for (SizeType ii = 0; ii < n; ++ii) { const SizeType i = n -ii - 1; // read vector backwards PsimagLite::String tmp = vStr_[i]; if (tmp[0] == '|') { // it's a vector if (ket != "") err("More than one ket found in " + toString() + "\n"); ket = tmp; if (i + 1 != n) err("Vector is not at the end in " + toString() + "\n"); newVstr.push_back(tmp); continue; // == first read } // it's a matrix or a scalar if (tmp[0] == '-' || tmp[0] == '+' || tmp[0] == '.' || (tmp[0] >= 48 && tmp[0] <= 57)) { err("Scalars not supported yet\n"); } // it's a matrix if (ii != 1) { newVstr.push_back(tmp); continue; // apply in order only IMPORTANT // the last is the ket } SiteSplitType siteSplit = OneOperatorSpecType::extractSiteIfAny(tmp); if (!siteSplit.hasSiteString) err("Each op must have a site\n"); SizeType site = OneOperatorSpecType::strToNumberOfFail(siteSplit.siteString); // can only apply at center of orthogonality (coo) if (!siteCanBeApplied(site)) { newVstr.push_back(tmp); continue; } // for now we delay application of more than one site // even if possible at the current coo if (sitesEqualToCoo > 0) { newVstr.push_back(tmp); continue; } ++sitesEqualToCoo; discardedTerms.push_back(i); OneOperatorSpecType opspec(siteSplit.root); const PsimagLite::String destKet = tmp + "*" + ket; OperatorType* op = new OperatorType(aux_.model().naturalOperator(opspec.label, 0, // FIXME TODO SDHS Immm opspec.dof)); if (opspec.transpose) op->transpose(); oneOperator(destKet, ket, *op, site); ket = "|!m" + tmp + "*" + ket; factor_ = 1; strFactor_ = ""; delete op; op = 0; } // discarded terms and inversion const SizeType nnew = newVstr.size(); vStr_.clear(); for (SizeType i = 0; i < nnew; ++i) vStr_.push_back(newVstr[nnew - i - 1]); vStr_[nnew - 1] = ket; finalized_ = true; } PsimagLite::String toString() const { PsimagLite::String s; const SizeType n = vStr_.size(); if (n == 0) err("toString returns empty\n"); PsimagLite::String f = (strFactor_ != "") ? strFactor_ + "*" : ""; for (SizeType i = 0; i < n - 1; ++i) s += vStr_[i] + "*"; return f + s + vStr_[n - 1]; } void setString(PsimagLite::String str) { if (vStr_.size() != 1) err("TermForTargetingExpression::setString\n"); vStr_[0] = str; } SizeType size() const { return vStr_.size(); } bool finalized() const { return finalized_; } int pIndex() const { if (vStr_.size() != 1) return -1; const PsimagLite::String str = vStr_[0]; SizeType last = str.length(); if (last < 4) return -1; --last; if (str.substr(0, 2) == "|P" && str[last] == '>') return PsimagLite::atoi(str.substr(2, last - 2)); return -1; } private: bool siteCanBeApplied(SizeType site) const { const SizeType currentCoO = getCurrentCoO(); const SizeType linSize = aux_.model().superGeometry().numberOfSites(); const bool b1 = (site == 0 && currentCoO == 1 && aux_.direction() == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON); const bool b2 = (site == linSize - 1 && currentCoO == linSize - 2 && aux_.direction() == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM); return (b1 || b2 || site == currentCoO); } void oneOperator(PsimagLite::String destKet, PsimagLite::String srcKet, const OperatorType& op, SizeType site) { assert(siteCanBeApplied(site)); const VectorWithOffsetType& srcVwo = aux_.getCurrentVectorConst(srcKet); PsimagLite::String internalName = aux_.createTemporaryVector(destKet); VectorWithOffsetType& destVwo = aux_.getCurrentVectorNonConst(internalName); applyInSitu(destVwo, srcVwo, site, op); destVwo *= factor_; } // returns A|src1> void applyInSitu(VectorWithOffsetType& dest, const VectorWithOffsetType& src1, SizeType site, const OperatorType& A) { const SizeType splitSize = aux_.aoe().model().hilbertSize(site); typename PsimagLite::Vector::Type oddElectrons; aux_.model().findOddElectronsOfOneSite(oddElectrons, site); FermionSign fs(aux_.lrs().left(), oddElectrons); bool b1 = (site == 0); SizeType n = aux_.model().superGeometry().numberOfSites(); assert(n > 2); bool b2 = (site == n - 1); BorderEnumType border = (b1 || b2) ? BorderEnumType::BORDER_YES : BorderEnumType::BORDER_NO; aux_.aoe().applyOpLocal()(dest, src1, A, fs, splitSize, aux_.direction(), border); } SizeType getCurrentCoO() const { const LeftRightSuperType& lrs = aux_.lrs(); const SizeType systemBlockSize = lrs.left().block().size(); assert(systemBlockSize > 0); const int maxSystemSite = lrs.left().block()[systemBlockSize - 1]; return (aux_.direction() == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? maxSystemSite : maxSystemSite + 1; } void finalMultReal() { assert(PsimagLite::imag(factor_) == 0); const RealType f = PsimagLite::real(factor_); if (f < 0) strFactor_ = "(" + ttos(f) + ")"; else strFactor_ = ttos(f); if (f == 1) strFactor_ = ""; } void finalMultImag() { const RealType freal = PsimagLite::real(factor_); const RealType fimag = PsimagLite::imag(factor_); strFactor_ = "(" + ttos(freal) + "+" + ttos(fimag) + "i)"; if (freal == 1 && fimag == 0) strFactor_ = ""; } // ATTENTION: has assignment operator bool finalized_; const AuxiliaryType& aux_; ComplexOrRealType factor_; PsimagLite::String strFactor_; VectorStringType vStr_; }; } #endif // TERMFORTARGETINGEXPRESSION_H dmrgpp-6.02/src/Engine/TimeSerializer.h000066400000000000000000000134351414604301300200310ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TimeSerializer.h * * Serialize time data */ #ifndef TIME_SERIAL_H #define TIME_SERIAL_H #include "Io/IoSelector.h" #include "TypeToString.h" #include "Vector.h" #include "StageEnum.h" namespace Dmrg { template class TimeSerializer { typedef typename VectorType::value_type VectorElementType; typedef typename PsimagLite::Real::Type RealType; public: typedef typename PsimagLite::Vector::Type VectorStageEnumType; TimeSerializer(SizeType currentTimeStep, RealType currentTime, SizeType site, const typename PsimagLite::Vector::Type& targetVectors, const VectorStageEnumType& stages, PsimagLite::String name) : currentTimeStep_(currentTimeStep), currentTime_(currentTime), site_(site), targetVectors_(targetVectors), stages_(stages), name_(name) {} TimeSerializer(typename PsimagLite::IoSelector::In& io, PsimagLite::String prefix) { prefix += "/TimeSerializer/"; PsimagLite::String s = prefix + "CurrentTimeStep"; io.read(currentTimeStep_, s); s = prefix + "Time"; io.read(currentTime_, s); s = prefix + "TargetCentralSite"; int xi = 0; io.read(xi, s); if (xi < 0) err("TimeSerializer:: site cannot be negative\n"); site_ = xi; s = prefix + "TNUMBEROFVECTORS"; io.read(xi, s); if (xi <= 0) err("TimeSerializer:: n. of vectors must be positive\n"); targetVectors_.resize(xi); for (SizeType i = 0; i < targetVectors_.size(); ++i) { s = prefix + "targetVector"+ttos(i); targetVectors_[i].read(io, s); } s = prefix + "Stages"; io.read(stages_, s); try { io.read(name_, prefix + "Name"); } catch (...) { // reading an old file, set name to LEGACY name_ = "LEGACY"; } } void write(PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { prefix += "/TimeSerializer"; io.createGroup(prefix); prefix += "/"; io.write(currentTime_, prefix + "Time"); io.write(currentTimeStep_, prefix + "CurrentTimeStep"); io.write(site_, prefix + "TargetCentralSite"); io.write(targetVectors_.size(), prefix + "TNUMBEROFVECTORS"); for (SizeType i=0;i::Type targetVectors_; VectorStageEnumType stages_; PsimagLite::String name_; }; // class TimeSerializer } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/TimeVectorsBase.h000066400000000000000000000114541414604301300201370ustar00rootroot00000000000000/* Copyright (c) 2009-2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TimeVectorsBase.h * * */ #ifndef TIME_VECTORS_BASE #define TIME_VECTORS_BASE #include #include "Vector.h" #include "ProgramGlobals.h" #include "Wft/WftHelper.h" namespace Dmrg { template class TimeVectorsBase { public: typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename TargetParamsType::RealType RealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef std::pair PairType; typedef typename PsimagLite::Vector::Type VectorVectorWithOffsetType; typedef PsimagLite::Vector::Type VectorSizeType; typedef WftHelper WftHelperType; TimeVectorsBase(const ModelType& model, const LeftRightSuperType& lrs, const WaveFunctionTransfType& wft) : wftHelper_(model, lrs, wft) {} struct ExtraData { ExtraData(ProgramGlobals::DirectionEnum dir_, bool allOperatorsApplied_, bool wftAndAdvanceIfNeeded_, VectorSizeType block_, bool isLastCall_, RealType time_) : dir(dir_), allOperatorsApplied(allOperatorsApplied_), wftAndAdvanceIfNeeded(wftAndAdvanceIfNeeded_), block(block_), isLastCall(isLastCall_), time(time_) {} ProgramGlobals::DirectionEnum dir; bool allOperatorsApplied; bool wftAndAdvanceIfNeeded; PsimagLite::Vector::Type block; bool isLastCall; RealType time; }; virtual void calcTimeVectors(const VectorSizeType&, RealType, const VectorWithOffsetType&, const ExtraData&) = 0; virtual ~TimeVectorsBase() {} virtual void timeHasAdvanced(RealType&) {} protected: const WftHelperType& wftHelper() const { return wftHelper_; } private: WftHelperType wftHelper_; }; //class TimeVectorsBase } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/TimeVectorsChebyshev.h000066400000000000000000000412741414604301300212100ustar00rootroot00000000000000/* Copyright (c) 2009-2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TimeVectorsChebyshev.h * * */ #ifndef TIME_VECTORS_CHEBYSHEV #define TIME_VECTORS_CHEBYSHEV #include #include #include "TimeVectorsBase.h" #include "ParallelTriDiag.h" #include "NoPthreadsNg.h" #include "Parallelizer.h" #include "ScaledHamiltonian.h" #include "Sort.h" #include "PredicateAwesome.h" namespace Dmrg { template class TimeVectorsChebyshev : public TimeVectorsBase { typedef TimeVectorsBase BaseType; typedef typename BaseType::PairType PairType; typedef typename TargetParamsType::RealType RealType; typedef typename BaseType::VectorRealType VectorRealType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Matrix MatrixRealType; typedef ParallelTriDiag ParallelTriDiagType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef typename ParallelTriDiagType::MatrixComplexOrRealType MatrixComplexOrRealType; typedef typename ParallelTriDiagType::TargetVectorType TargetVectorType; typedef typename ParallelTriDiagType::VectorMatrixFieldType VectorMatrixFieldType; typedef typename LanczosSolverType::TridiagonalMatrixType TridiagonalMatrixType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename PsimagLite::Vector::Type VectorVectorWithOffsetType; typedef typename PsimagLite::Vector::Type VectorVectorRealType; typedef typename LanczosSolverType::MatrixType MatrixLanczosType; typedef ScaledHamiltonian ScaledMatrixType; typedef PsimagLite::Vector::Type VectorSizeType; typedef PsimagLite::ExpressionCalculator ExpressionCalculatorType; typedef PsimagLite::PrepassData PrepassDataType; typedef PsimagLite::ExpressionPrepass ExpressionPrepassType; typedef PsimagLite::PredicateAwesome<> PredicateAwesomeType; public: TimeVectorsChebyshev(const SizeType& currentTimeStep, const TargetParamsType& tstStruct, const VectorRealType& times, VectorVectorWithOffsetType& targetVectors, const ModelType& model, const WaveFunctionTransfType& wft, const LeftRightSuperType& lrs, InputValidatorType& ioIn) : BaseType(model, lrs, wft), currentTimeStep_(currentTimeStep), tstStruct_(tstStruct), times_(times), targetVectors_(targetVectors), model_(model), wft_(wft), lrs_(lrs), ioIn_(ioIn), timeHasAdvanced_(false), correctVectorsAwesomePred_("0==1") // never correct { try { ioIn_.readline(correctVectorsAwesomePred_, "ChebyshevCorrectVector="); } catch (std::exception&) {} } virtual void calcTimeVectors(const VectorSizeType& indices, RealType Eg, const VectorWithOffsetType& phi, const typename BaseType::ExtraData& extra) { if (extra.wftAndAdvanceIfNeeded) { const SizeType noAdvance = indices[0]; VectorWithOffsetType phiNew; if (targetVectors_[noAdvance].size() > 0) { BaseType::wftHelper().wftOneVector(phiNew, targetVectors_[noAdvance], extra.block[0]); targetVectors_[noAdvance] = phiNew; } } SizeType startOfWft = 1; if (currentTimeStep_ == 0) { SizeType indexOf1 = indices[startOfWft]; assert(indexOf1 < targetVectors_.size()); VectorWithOffsetType& tv1 = const_cast(targetVectors_[indexOf1]); tv1 = phi; startOfWft = 2; } // WFT 1 if !time advanced // WFT 2 if time advanced assert(0 < extra.block.size()); SizeType n = indices.size(); for (SizeType i = startOfWft; i < n; ++i) { SizeType ii = indices[i]; BaseType::wftHelper().wftSome(targetVectors_, extra.block[0], ii, ii + 1); } assert(n > 0); if (currentTimeStep_ == 0 && tstStruct_.noOperator() && tstStruct_.skipTimeZero()) { for (SizeType i = 0; i < n; ++i) { SizeType ii = indices[i]; targetVectors_[ii] = phi; } return; } const VectorWithOffsetType* ptr0 = &(targetVectors_[indices[0]]); const VectorWithOffsetType* ptr1 = φ if (ptr0 != ptr1) targetVectors_[indices[0]] = phi; if (times_.size() == 1 && fabs(times_[0])<1e-10) return; if (timeHasAdvanced_) { for (SizeType i = 0; i < n - 1; ++i) { SizeType ii = indices[i]; SizeType jj = indices[i + 1]; targetVectors_[ii] = targetVectors_[jj]; } } for (SizeType i = 2; i < n; ++i) { SizeType ii = indices[i]; assert(ii < targetVectors_.size()); assert(ii != 1); targetVectors_[ii] = phi; SizeType prev = indices[i - 1]; SizeType prevMinus2 = indices[i - 2]; calcTargetVector(targetVectors_[ii], phi, prev, prevMinus2, Eg, extra.time); } assert(extra.block.size() > 0); const SizeType site = extra.block[0]; const SizeType nsites = model_.superGeometry().numberOfSites(); const SizeType center = nsites/2; PredicateAwesomeType pred(correctVectorsAwesomePred_); const bool flagcorrection = pred.isTrue("%s", site, "%c", center, "%n", nsites); if (flagcorrection) correctVectors(indices, Eg, extra.time); timeHasAdvanced_ = false; } void timeHasAdvanced(RealType& time) { timeHasAdvanced_ = true; time += tstStruct_.tau(); } private: void calcTargetVector(VectorWithOffsetType& v, const VectorWithOffsetType& phi, SizeType prev, SizeType prevMinus2, RealType Eg, RealType currentTime) { for (SizeType ii=0;ii ParallelizerType; ParallelizerType threadedTriDiag(PsimagLite::CodeSectionParams(1)); // VectorMatrixFieldType T(phi.sectors()); VectorSizeType steps(phi.sectors()); ParallelTriDiagType helperTriDiag(phi, T, V, steps, lrs_, fakeTime, model_, ioIn_); threadedTriDiag.loopCreate(helperTriDiag); VectorVectorRealType eigs(phi.sectors()); for (SizeType ii = 0;ii < phi.sectors(); ++ii) PsimagLite::diag(T[ii], eigs[ii], 'V'); VectorRealType& veigs = eigs[0]; lanczosHelper2.scale(veigs); for (SizeType i = 0; i < veigs.size(); ++i) veigs[i] = -fabs(veigs[i]); const MatrixRealType& Vmatrix = V[0]; const MatrixRealType& Tmatrix = T[0]; // contains rotation matrix after diag const SizeType small = Vmatrix.cols(); const SizeType big = Vmatrix.rows(); PsimagLite::Sort sort; permutation.resize(small); sort.sort(veigs, permutation); SizeType counter = 0; for (; counter < small; ++counter) if (veigs[counter] > -1.0) break; if (counter == 0) return; const SizeType nbad = counter; weights.resize(nbad); VectorType sv; phi.extract(sv, i0); for (SizeType alpha = 0; alpha < nbad; ++alpha) { SizeType ind = permutation[alpha]; ComplexOrRealType sum = 0.0; for (SizeType alphap = 0; alphap < small; ++alphap) { for (SizeType j = 0; j < big; ++j) sum += PsimagLite::conj(Vmatrix(j, alphap)*Tmatrix(alphap,ind))*sv[j]; } weights[alpha] = sum; } } void correctVector(VectorType& r, const MatrixRealType& Vmatrix, const MatrixRealType& Tmatrix, const VectorType& weights, const VectorSizeType& permutation) const { const SizeType big = Vmatrix.rows(); const SizeType small = Vmatrix.cols(); const SizeType nbad = weights.size(); ComplexOrRealType sum = 0; ComplexOrRealType sumOld = 0; for (SizeType i = 0; i < big; ++i) { sumOld += r[i]*PsimagLite::conj(r[i]); for (SizeType alpha = 0; alpha < nbad; ++alpha) { SizeType ind = permutation[alpha]; for (SizeType alphap = 0; alphap < small; ++alphap) { r[i] -= weights[alpha] * Vmatrix(i, alphap)*Tmatrix(alphap,ind); } } sum += r[i]*PsimagLite::conj(r[i]); } const RealType factor = sqrt(PsimagLite::real(sumOld))/sqrt(PsimagLite::real(sum)); for (SizeType i = 0; i < big; ++i) r[i] *= factor; } const SizeType& currentTimeStep_; const TargetParamsType& tstStruct_; const VectorRealType& times_; VectorVectorWithOffsetType& targetVectors_; const ModelType& model_; const WaveFunctionTransfType& wft_; const LeftRightSuperType& lrs_; InputValidatorType& ioIn_; bool timeHasAdvanced_; PsimagLite::String correctVectorsAwesomePred_; }; //class TimeVectorsChebyshev } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/TimeVectorsKrylov.h000066400000000000000000000264751414604301300205640ustar00rootroot00000000000000/* Copyright (c) 2009-2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TimeVectorsKrylov.h * * */ #ifndef TIME_VECTORS_KRYLOV #define TIME_VECTORS_KRYLOV #include #include #include "TimeVectorsBase.h" #include "ParallelTriDiag.h" #include "NoPthreadsNg.h" #include "Parallelizer.h" #include "KrylovHelper.h" namespace Dmrg { template class TimeVectorsKrylov : public TimeVectorsBase< TargetParamsType, ModelType, WaveFunctionTransfType, LanczosSolverType, VectorWithOffsetType_> { public: typedef VectorWithOffsetType_ VectorWithOffsetType; typedef TimeVectorsBase BaseType; typedef TimeVectorsKrylov ThisType; typedef typename BaseType::PairType PairType; typedef typename TargetParamsType::RealType RealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef ParallelTriDiag ParallelTriDiagType; typedef typename ParallelTriDiagType::MatrixComplexOrRealType MatrixComplexOrRealType; typedef typename ParallelTriDiagType::TargetVectorType VectorType; typedef typename ParallelTriDiagType::VectorMatrixFieldType VectorMatrixFieldType; typedef typename LanczosSolverType::TridiagonalMatrixType TridiagonalMatrixType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef typename PsimagLite::Vector::Type VectorVectorWithOffsetType; typedef typename PsimagLite::Vector::Type VectorVectorRealType; struct Action { typedef typename ThisType::VectorRealType VectorRealType; }; struct TypeWrapper { typedef typename ThisType::MatrixComplexOrRealType MatrixComplexOrRealType; typedef typename ThisType::VectorWithOffsetType VectorWithOffsetType; typedef typename ModelType::SolverParamsType SolverParamsType; }; typedef KrylovHelper KrylovHelperType; TimeVectorsKrylov(const SizeType& currentTimeStep, const TargetParamsType& tstStruct, const VectorRealType& times, VectorVectorWithOffsetType& targetVectors, const ModelType& model, const WaveFunctionTransfType& wft, const LeftRightSuperType& lrs, InputValidatorType& ioIn) : BaseType(model, lrs, wft), currentTimeStep_(currentTimeStep), tstStruct_(tstStruct), times_(times), targetVectors_(targetVectors), model_(model), wft_(wft), lrs_(lrs), ioIn_(ioIn), timeHasAdvanced_(false), krylovHelper_(model.params(), 0) {} virtual void calcTimeVectors(const PsimagLite::Vector::Type& indices, RealType Eg, const VectorWithOffsetType& phi, const typename BaseType::ExtraData& extra) { if (indices.size() < 2) err("TimeVectorsKrylov: indices.size() must be greater than 1\n"); // Only for RIXS Dynamics wft and (if needed) advance if (extra.wftAndAdvanceIfNeeded) { SizeType advance = (timeHasAdvanced_) ? indices[indices.size() - 1] : indices[0]; VectorWithOffsetType phiNew; if (targetVectors_[advance].size() > 0) { BaseType::wftHelper().wftOneVector(phiNew, targetVectors_[advance], extra.block[0]); targetVectors_[indices[0]] = phiNew; } } const SizeType n = indices.size(); if (currentTimeStep_ == 0 && tstStruct_.noOperator() && tstStruct_.skipTimeZero()) { for (SizeType i = 0; i < n; ++i) { const SizeType ii = indices[i]; targetVectors_[ii] = phi; } } const VectorWithOffsetType* ptr0 = &(targetVectors_[indices[0]]); const VectorWithOffsetType* ptr1 = φ if (ptr0 != ptr1) targetVectors_[indices[0]] = phi; if (times_.size() == 1 && fabs(times_[0])<1e-10) return; VectorMatrixFieldType V(phi.sectors()); VectorMatrixFieldType T(phi.sectors()); typename PsimagLite::Vector::Type steps(phi.sectors()); triDiag(phi, T, V, steps, extra.time); VectorVectorRealType eigs(phi.sectors()); for (SizeType ii=0;ii::Type indices, const VectorWithOffsetType& phi, const VectorMatrixFieldType& T, const VectorMatrixFieldType& V, RealType Eg, const VectorVectorRealType& eigs, typename PsimagLite::Vector::Type steps) { for (SizeType i = 1; i < indices.size(); ++i) { const SizeType ii = indices[i]; assert(ii < targetVectors_.size()); targetVectors_[ii] = phi; // Only time differences here (i.e. times_[i] not times_[i]+currentTime_) calcTargetVector(targetVectors_[ii], phi, T, V, Eg, eigs, steps, i); } } void calcTargetVector(VectorWithOffsetType& v, const VectorWithOffsetType& phi, const VectorMatrixFieldType& T, const VectorMatrixFieldType& V, RealType Eg, const VectorVectorRealType& eigs, typename PsimagLite::Vector::Type steps, SizeType timeIndex) { v = phi; for (SizeType ii = 0;ii < phi.sectors(); ++ii) { const RealType time = times_[timeIndex]; const RealType timeDirection = tstStruct_.timeDirection(); const VectorRealType& eigsii = eigs[ii]; auto action = [eigsii, Eg, time, timeDirection](SizeType k) { RealType tmp = (eigsii[k]-Eg)*time*timeDirection; ComplexOrRealType c = 0.0; PsimagLite::expComplexOrReal(c, -tmp); return c; }; SizeType i0 = phi.sector(ii); VectorType r; calcTargetVector(r, phi, T[ii], V[ii], action, steps[ii], i0); v.setDataInSector(r, i0); } } template void calcTargetVector(VectorType& r, const VectorWithOffsetType& phi, const MatrixComplexOrRealType& T, const MatrixComplexOrRealType& V, const SomeLambdaType& action, SizeType steps, SizeType i0) { SizeType n2 = steps; SizeType n = V.rows(); if (T.cols()!=T.rows()) throw PsimagLite::RuntimeError("T is not square\n"); if (V.cols()!=T.cols()) throw PsimagLite::RuntimeError("V is not nxn2\n"); // for (SizeType j=0;j::Type& steps, RealType currentTime) { typedef PsimagLite::NoPthreadsNg ParallelizerType; ParallelizerType threadedTriDiag(PsimagLite::CodeSectionParams(1)); ParallelTriDiagType helperTriDiag(phi,T,V,steps,lrs_,currentTime,model_,ioIn_); threadedTriDiag.loopCreate(helperTriDiag); } const SizeType& currentTimeStep_; const TargetParamsType& tstStruct_; const VectorRealType& times_; VectorVectorWithOffsetType& targetVectors_; const ModelType& model_; const WaveFunctionTransfType& wft_; const LeftRightSuperType& lrs_; InputValidatorType& ioIn_; bool timeHasAdvanced_; KrylovHelperType krylovHelper_; }; //class TimeVectorsKrylov } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/TimeVectorsRungeKutta.h000066400000000000000000000202301414604301300213460ustar00rootroot00000000000000/* Copyright (c) 2009-2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TimeVectorsRungeKutta.h * * */ #ifndef TIME_VECTORS_RUNGE_KUTTA #define TIME_VECTORS_RUNGE_KUTTA #include #include "RungeKutta.h" #include "TimeVectorsBase.h" namespace Dmrg { template RealType minusOneOrMinusI(RealType) { return -1; } template std::complex minusOneOrMinusI(std::complex) { return std::complex(0.0,-1.0); } template class TimeVectorsRungeKutta : public TimeVectorsBase< TargetParamsType, ModelType, WaveFunctionTransfType, LanczosSolverType, VectorWithOffsetType> { typedef TimeVectorsBase BaseType; typedef typename BaseType::PairType PairType; typedef typename TargetParamsType::RealType RealType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef PsimagLite::Matrix MatrixComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef VectorComplexOrRealType TargetVectorType; typedef PsimagLite::Vector::Type VectorSizeType; public: TimeVectorsRungeKutta(const SizeType& currentTimeStep, const TargetParamsType& tstStruct, const VectorRealType& times, typename PsimagLite::Vector::Type& targetVectors, const ModelType& model, const WaveFunctionTransfType& wft, const LeftRightSuperType& lrs) : BaseType(model, lrs, wft), progress_("TimeVectorsRungeKutta"), currentTimeStep_(currentTimeStep), tstStruct_(tstStruct), times_(times), targetVectors_(targetVectors), model_(model), wft_(wft), lrs_(lrs) {} virtual void calcTimeVectors(const VectorSizeType& indices, RealType Eg, const VectorWithOffsetType& phi, const typename BaseType::ExtraData& extra) { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"using RungeKutta"; RealType norma = norm(phi); if (norma<1e-10) return; msg<<" Norm of phi= "<(0)); ComplexOrRealType tmp2 = timeDirection_*icomplex; TargetVectorType x2; x2 <= tmp2*x; return x2; } private: RealType E0_; RealType timeDirection_; SizeType p_; typename ModelHelperType::Aux aux_; typename ModelType::HamiltonianConnectionType hc_; typename LanczosSolverType::MatrixType lanczosHelper_; }; // FunctionForRungeKutta void calcTimeVectors(const VectorSizeType& indices, RealType Eg, const VectorWithOffsetType& phi, SizeType i0, RealType currentTime) { SizeType total = phi.effectiveSize(i0); TargetVectorType phi0(total); phi.extract(phi0,i0); FunctionForRungeKutta f(Eg,tstStruct_.timeDirection(),lrs_,currentTime,model_,phi,i0); RealType epsForRK = tstStruct_.tau()/(times_.size()-1.0); PsimagLite::RungeKutta rungeKutta(f,epsForRK); typename PsimagLite::Vector::Type result; rungeKutta.solve(result,0.0,times_.size(),phi0); assert(result.size()==times_.size()); const SizeType n = indices.size(); for (SizeType i = 0; i < n; ++i) { const SizeType ii = indices[i]; assert(ii < targetVectors_.size()); targetVectors_[ii].setDataInSector(result[i], i0); } } PsimagLite::ProgressIndicator progress_; const SizeType& currentTimeStep_; const TargetParamsType& tstStruct_; const VectorRealType& times_; typename PsimagLite::Vector::Type& targetVectors_; const ModelType& model_; const WaveFunctionTransfType& wft_; const LeftRightSuperType& lrs_; }; //class TimeVectorsRungeKutta } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/TimeVectorsSuzukiTrotter.h000066400000000000000000000512371414604301300221460ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TimeVectorsSuzukiTrotter.h * * */ #ifndef TIME_VECTORS_SUZUKI_TROTTER #define TIME_VECTORS_SUZUKI_TROTTER #include #include "TimeVectorsBase.h" #include "VectorWithOffsets.h" #include "MatrixOrIdentity.h" #include "Sort.h" #include "Utils.h" namespace Dmrg { template class TimeVectorsSuzukiTrotter : public TimeVectorsBase< TargetParamsType, ModelType, WaveFunctionTransfType, LanczosSolverType, VectorWithOffsetType> { typedef TimeVectorsBase BaseType; typedef typename BaseType::PairType PairType; typedef typename TargetParamsType::RealType RealType; typedef typename TargetParamsType::SparseMatrixType SparseMatrixType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef PsimagLite::PackIndices PackIndicesType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisType::BlockType BlockType; typedef MatrixOrIdentity MatrixOrIdentityType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef PsimagLite::Matrix MatrixComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef VectorComplexOrRealType TargetVectorType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorVectorWithOffsetType; typedef typename ModelType::HilbertBasisType HilbertBasisType; typedef typename ModelType::HilbertBasisType::value_type HilbertStateType; public: TimeVectorsSuzukiTrotter(const SizeType& currentTimeStep, const TargetParamsType& tstStruct, const VectorRealType& times, VectorVectorWithOffsetType& targetVectors, const ModelType& model, const WaveFunctionTransfType& wft, const LeftRightSuperType& lrs) : BaseType(model, lrs, wft), progress_("TimeVectorsSuzukiTrotter"), currentTimeStep_(currentTimeStep), tstStruct_(tstStruct), times_(times), targetVectors_(targetVectors), model_(model), wft_(wft), lrs_(lrs), twoSiteDmrg_(wft_.options().twoSiteDmrg) {} virtual void calcTimeVectors(const VectorSizeType& indices, RealType Eg, const VectorWithOffsetType& phi, const typename BaseType::ExtraData& extraData) { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"EXPERIMENTAL: using SuzukiTrotter"; RealType norma = norm(phi); if (norma<1e-10) return; msg<<" Norm of phi= "<0); lastIndexLeft--; SizeType site = static_cast(lrs_.left().block()[lastIndexLeft]/ sitesPerBlock); bool oddLink = (site & 1); bool b1 = (oddLink && extraData.dir == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM); bool b2 = (!oddLink && extraData.dir == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON); if (b2 && lrs_.left().block().size() == sitesPerBlock) b2=false; wftAll(extraData.block); if (b1 || b2) return; bool areAllLinksSeen = allLinksSeen(); PsimagLite::OstringStream msgg2(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg2 = msgg2(); msg2<<"LINKS SEEN "; for (SizeType i=0;i0); SizeType start = model_.params().sitesPerBlock - 1; for (SizeType i=start;i1e-6); targetVectors_[i]=phiNew; } void calcTargetVector(VectorWithOffsetType& target, RealType Eg, const VectorWithOffsetType& phi, const ProgramGlobals::DirectionEnum systemOrEnviron, const RealType& time, const SparseMatrixType& S, const SparseMatrixType& ST, const SparseMatrixType& E, const SparseMatrixType& ET) { for (SizeType ii=0;ii target.setDataInSector(result,i0); } } void calcTimeVectorsSuzukiTrotter(TargetVectorType& result, RealType, const VectorWithOffsetType& phi, const ProgramGlobals::DirectionEnum systemOrEnviron, SizeType i0, const RealType& time, const SparseMatrixType& transformS, const SparseMatrixType& transformST, const SparseMatrixType& transformE, const SparseMatrixType& transformET) const { SizeType offset = phi.offset(i0); TargetVectorType phi0(result.size()); phi.extract(phi0,i0); // NOTE: result = exp(iHt) |phi0> SizeType ns = lrs_.left().size(); PackIndicesType packSuper(ns); VectorSizeType block; calcBlock(block); MatrixComplexOrRealType m; getMatrix(m,systemOrEnviron,block,time); VectorSizeType iperm; suzukiTrotterPerm(iperm,block); for (SizeType i=0;i= offset+phi0.size()) throw PsimagLite::RuntimeError("j out of bounds\n"); result[j-offset] += tmp*phi0[i]*transformT1.getValue(k)* transform1.getValue(k2); } } } } } void timeVectorEnviron(TargetVectorType& result, const TargetVectorType& phi0, SizeType xp, SizeType yp, const PackIndicesType& packSuper, const BlockType& block, const MatrixComplexOrRealType& m, SizeType i, SizeType offset, const SparseMatrixType& transform, const SparseMatrixType& transformT, const VectorSizeType& iperm) const { const LeftRightSuperType& oldLrs = lrs_; SizeType hilbertSize = model_.hilbertSize(block[0]); SizeType ns = oldLrs.left().permutationInverse().size(); SizeType nx = ns/hilbertSize; PackIndicesType packLeft(nx); PackIndicesType packRight(hilbertSize); if (!twoSiteDmrg_) { assert(transform.cols()==lrs_.left().size()); assert(transform.rows()==oldLrs.left().permutationInverse().size()); } MatrixOrIdentityType transformT1(!twoSiteDmrg_,transformT); MatrixOrIdentityType transform1(!twoSiteDmrg_,transform); for (SizeType k=transformT1.getRowPtr(xp);k= offset+phi0.size()) throw PsimagLite::RuntimeError("j out of bounds (environ)\n"); result[j-offset] += tmp*phi0[i]*transformT1.getValue(k)* transform1.getValue(k2); } } } } } void suzukiTrotterPerm(VectorSizeType&, const VectorSizeType&) const { err("suzukiTrotter no longer supported (sorry!)\n"); } void getMatrix(MatrixComplexOrRealType& m, const ProgramGlobals::DirectionEnum systemOrEnviron, const BlockType& block, const RealType& time) const { SparseMatrixType hmatrix; RealType factorForDiagonals = (systemOrEnviron == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? 1.0 : 0.0; if (systemOrEnviron==ProgramGlobals::DirectionEnum::EXPAND_ENVIRON && block[0] == 0) factorForDiagonals = 1.0; if (fabs(factorForDiagonals)>1e-6) { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"LINKS factors="< sort; VectorSizeType iperm(block.size()); sort.sort(block,iperm); } PsimagLite::ProgressIndicator progress_; const SizeType& currentTimeStep_; const TargetParamsType& tstStruct_; const VectorRealType& times_; VectorVectorWithOffsetType& targetVectors_; const ModelType& model_; const WaveFunctionTransfType& wft_; const LeftRightSuperType& lrs_; bool twoSiteDmrg_; VectorSizeType linksSeen_; }; //class TimeVectorsSuzukiTrotter } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/ToolBox.h000066400000000000000000000175271414604301300164750ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ToolBox.h * * */ #ifndef DMRG_TOOLBOX_H #define DMRG_TOOLBOX_H #include "Vector.h" #include "ProgramGlobals.h" #include #include #include #include "Geometry/Geometry.h" #include "PsimagLite.h" namespace Dmrg { template class ToolBox { typedef std::pair PairSizeStringType; class GrepForLabel { typedef long int LongType; struct InternalName { InternalName(PsimagLite::String label_, bool cooked_) : cooked(cooked_),label(label_) {} bool cooked; PsimagLite::String label; }; // struct InternalName public: typedef InternalName ParametersType; static void hook(std::ifstream& fin, PsimagLite::String, LongType len, const ParametersType& params) { LongType len2 = len; LongType bufferLen = 1; std::stringstream ss; char *buffer = new char[bufferLen]; while (len2 >= bufferLen && !fin.eof()) { fin.read(buffer,bufferLen); ss< 1) len2 -= bufferLen; } delete [] buffer; } private: static void procLine(PsimagLite::String line, const ParametersType& params) { if (line.find(params.label) == PsimagLite::String::npos) return; if (params.cooked) cookThisLine(line); else std::cout< 0); PsimagLite::String g = geometry.label(0); SizeType heaviestTerm = 0; for (SizeType i = 1; i < terms; ++i) { PsimagLite::String tmp = geometry.label(i); if (geometryGreater(tmp, g)) { g = tmp; heaviestTerm = i; } } return PairSizeStringType(heaviestTerm, g); } static bool geometryGreater(PsimagLite::String g1, PsimagLite::String g2) { if (g1 == "longchain") return false; std::cerr< class TridiagRixsStatic { typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Real::Type RealType; typedef typename ModelType::InputValidatorType InputValidatorType; typedef PsimagLite::Concurrency ConcurrencyType; typedef typename SparseMatrixType::value_type SparseElementType; typedef PsimagLite::Matrix MatrixType; typedef typename LanczosSolverType::ParametersSolverType ParametersSolverType; typedef typename BasisWithOperatorsType::EffectiveQuantumNumberType EffectiveQnType; typedef VectorWithOffset VectorWithOffsetType2; typedef ApplyOperatorLocal ApplyOperatorLocalType; typedef typename VectorWithOffsetType2::VectorSizeType VectorSizeType; class MyMatrixVector : public LanczosSolverType::LanczosMatrixType { typedef typename LanczosSolverType::LanczosMatrixType BasisType; public: MyMatrixVector(ModelType const *model, ModelHelperType const *modelHelper, const OperatorType& A, ProgramGlobals::DirectionEnum dir, typename ApplyOperatorLocalType::BorderEnum corner, const VectorSizeType& weights) : BasisType(model, modelHelper), applyOperatorLocal_(modelHelper->leftRightSuper()), A_(A), dir_(dir), corner_(corner), fs_(modelHelper->leftRightSuper().left().electronsVector()), // FIXME CHECK x2_(weights, modelHelper->leftRightSuper().super()), y2_(weights, modelHelper->leftRightSuper().super()) {} template void matrixVectorProduct(SomeVectorType &x,SomeVectorType const &y) const { BasisType::matrixVectorProduct(x, y); MatrixType fullA; crsMatrixToFullMatrix(fullA,A_.data); if(isZero(fullA)) return; // add here x += Ay x2_.setDataInSector(x,0); y2_.setDataInSector(y,0); applyOperatorLocal_(x2_, y2_, A_, fs_, dir_, corner_); x2_.extract(x, 0); } private: ApplyOperatorLocalType applyOperatorLocal_; const OperatorType& A_; ProgramGlobals::DirectionEnum dir_; typename ApplyOperatorLocalType::BorderEnum corner_; FermionSign fs_; mutable VectorWithOffsetType2 x2_; mutable VectorWithOffsetType2 y2_; }; // class MyMatrixVector typedef MyMatrixVector MyMatrixVectorType; typedef PsimagLite::LanczosSolver MyLanczosSolverType; typedef typename MyLanczosSolverType::TridiagonalMatrixType MyTridiagonalMatrixType; public: typedef typename PsimagLite::Vector::Type TargetVectorType; typedef PsimagLite::Matrix MatrixComplexOrRealType; typedef typename PsimagLite::Vector::Type VectorMatrixFieldType; TridiagRixsStatic(const LeftRightSuperType& lrs, const ModelType& model, InputValidatorType& io, SizeType site, ProgramGlobals::DirectionEnum direction) : lrs_(lrs), model_(model), io_(io), A_(io, model, false, "RS:"), direction_(direction) { SizeType numberOfSites = model.geometry().numberOfSites(); int site2 = ProgramGlobals::findBorderSiteFrom(site, direction, numberOfSites); corner_ = (site2 >= 0) ? ApplyOperatorLocalType::BORDER_YES : ApplyOperatorLocalType::BORDER_NO; } void operator()(const VectorWithOffsetType& phi, VectorMatrixFieldType& T, VectorMatrixFieldType& V, VectorSizeType& steps) { for (SizeType ii = 0; ii < phi.sectors(); ++ii) { SizeType i = phi.sector(ii); steps[ii] = triDiag(phi, T[ii], V[ii], i); } } private: SizeType triDiag(const VectorWithOffsetType& phi, MatrixComplexOrRealType& T, MatrixComplexOrRealType& V, SizeType i0) { VectorSizeType weights(lrs_.super().partition(), 0); weights[i0] = phi.effectiveSize(i0); SizeType p = lrs_.super().findPartitionNumber(phi.offset(i0)); SizeType threadNum = 0; SizeType currentTime = 0; typename ModelType::ModelHelperType modelHelper(p,lrs_,currentTime,threadNum); typename MyLanczosSolverType::LanczosMatrixType lanczosHelper(&model_, &modelHelper, A_, direction_, corner_, weights); ParametersSolverType params(io_,"Tridiag"); params.lotaMemory = true; params.threadId = threadNum; MyLanczosSolverType lanczosSolver(lanczosHelper,params,&V); MyTridiagonalMatrixType ab; SizeType total = phi.effectiveSize(i0); TargetVectorType phi2(total); phi.extract(phi2,i0); lanczosSolver.decomposition(phi2,ab); lanczosSolver.buildDenseMatrix(T,ab); return lanczosSolver.steps(); } const LeftRightSuperType& lrs_; const ModelType& model_; InputValidatorType& io_; OperatorType A_; typename ApplyOperatorLocalType::BorderEnum corner_; ProgramGlobals::DirectionEnum direction_; }; // class TridiagRixsStatic } // namespace Dmrg #endif // TRIDIAGRIXSSTATIC_H dmrgpp-6.02/src/Engine/Truncation.h000066400000000000000000000464621414604301300172350ustar00rootroot00000000000000/* Copyright (c) 2009-2014-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file Truncation.h * * Implements the truncation for the DMRG algorithm * */ #ifndef DMRG_TRUNCATION_H #define DMRG_TRUNCATION_H #include "DensityMatrixLocal.h" #include "DensityMatrixSvd.h" #include "Sort.h" #include "Concurrency.h" #include "Io/IoNg.h" #include "Profiling.h" #include "PredicateAwesome.h" #include "OutputFileOrNot.h" namespace Dmrg { template class Truncation { typedef typename TargetingType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisType::BlockType VectorSizeType; typedef typename BasisWithOperatorsType::PairSizeSizeType PairSizeSizeType; typedef typename LeftRightSuperType::ProgressIndicatorType ProgressIndicatorType; typedef typename TargetingType::SparseMatrixType SparseMatrixType; typedef typename TargetingType::RealType RealType; typedef typename TargetingType::WaveFunctionTransfType WaveFunctionTransfType; typedef DensityMatrixLocal DensityMatrixLocalType; typedef DensityMatrixSvd DensityMatrixSvdType; typedef DensityMatrixBase DensityMatrixBaseType; typedef typename DensityMatrixBaseType::BlockDiagonalMatrixType BlockDiagonalMatrixType; typedef typename TargetingType::ModelType ModelType; typedef typename ModelType::SuperGeometryType SuperGeometryType; typedef typename PsimagLite::Vector::Type VectorRealType; public: typedef typename DensityMatrixBaseType::Params ParamsDensityMatrixType; typedef BlockDiagonalMatrixType TransformType; typedef PsimagLite::IoNg::Out IoOutType; struct TruncationCache { BlockDiagonalMatrixType transform; VectorRealType eigs; typename PsimagLite::Vector::Type removedIndices; }; // TruncationCache Truncation(const LeftRightSuperType& lrs, WaveFunctionTransfType& waveFunctionTransformation, const ParametersType& parameters, const SuperGeometryType& geometry, OutputFileOrNot& ioOut) : lrs_(lrs), waveFunctionTransformation_(waveFunctionTransformation), parameters_(parameters), superGeometry_(geometry), ioOut_(ioOut), progress_("Truncation"), error_(0.0) { firstCall_ = true; if (parameters_.truncationControl.first < 0) return; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"has tolerance= "<diag(cache.eigs,'V'); typename PsimagLite::Vector::Type perm(cache.eigs.size()); PsimagLite::Sort sort; sort.sort(cache.eigs, perm); printSumAndCheckEigs(cache.eigs); updateKeptStates(keptStates, cache.eigs); cache.transform = dmS->operator()(); if (parameters_.options.isSet("nodmrgtransform")) { PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"SolverOptions=nodmrgtransform, setting transform to identity"; progress_.printline(msgg, std::cout); cache.transform.setTo(1.0); } rSprime = pBasis; rSprime.changeBasis(cache.removedIndices, perm, keptStates, parameters_); } void truncateBasis(BasisWithOperatorsType& rPrime, const BasisWithOperatorsType& oppoBasis, const DensityMatrixBaseType& dms, ProgramGlobals::DirectionEnum direction) { bool expandSys = (direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM); const BasisWithOperatorsType& basis = (expandSys) ? lrs_.left() : lrs_.right(); size_t mostRecent = superGeometry_.hollowOutRadius( maxOpsPerSiteLeft()); size_t numOfOp = basis.numberOfLocalOperators(); PairSizeSizeType startEnd(0, numOfOp); if (startEnd.second > mostRecent) { if (expandSys) startEnd.first = startEnd.second - mostRecent; else startEnd.second = mostRecent; } PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); TruncationCache& cache = (expandSys) ? leftCache_ : rightCache_; cache.transform.truncate(cache.removedIndices); rPrime.truncateBasis(cache.transform, cache.eigs, cache.removedIndices, startEnd, parameters_.gemmRnb, PsimagLite::Concurrency::codeSectionParams.npthreadsLevelTwo, parameters_.opOnSiteThreshold); LeftRightSuperType* lrs = 0; if (expandSys) lrs = new LeftRightSuperType(rPrime, const_cast(oppoBasis), const_cast(lrs_.super())); else lrs = new LeftRightSuperType(const_cast(oppoBasis), rPrime, const_cast(lrs_.super())); bool twoSiteDmrg = waveFunctionTransformation_.options().twoSiteDmrg; bool wftInPatches = (waveFunctionTransformation_.options().accel == WaveFunctionTransfType::WftOptionsType::ACCEL_PATCHES); const LeftRightSuperType& lrsForWft = (twoSiteDmrg || wftInPatches) ? lrs_ : *lrs; waveFunctionTransformation_.push(cache.transform, direction, lrsForWft, dms.vts(), dms.s(), dms.qns()); msg<<"new size of basis="< 1e-3) err("printSumAndCheckEigs: DM eigs don't amount to one\n"); } void updateKeptStates(SizeType& keptStates, const VectorRealType& eigs) { dumpEigs(eigs); SizeType newKeptStates = computeKeptStates(keptStates, eigs); SizeType statesToRemove = 0; if (eigs.size()>=newKeptStates) statesToRemove = eigs.size() - newKeptStates; RealType discWeight = sumUpTo(eigs, statesToRemove); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); if (newKeptStates != keptStates) { // we report that the "m" value has been changed and... msg<<"Reducing kept states to "< 1) std::cout<<"checkAndSum: Density Matrix eigenvalue "< 0); SizeType index = lrs_.left().block()[last - 1]; PsimagLite::String predicate = parameters_.saveDensityMatrixEigenvalues; const SizeType center = superGeometry_.numberOfSites()/2; PsimagLite::PredicateAwesome<>::replaceAll(predicate, "c", ttos(center)); PsimagLite::PredicateAwesome<> pAwesome(predicate); if (!pAwesome.isTrue("s", index)) return; PsimagLite::String label("DensityMatrixEigenvalues"); if (firstCall_) { ioOut_.createGroup(label); SizeType n = superGeometry_.numberOfSites(); counterVector_.resize(n, 0); ioOut_.write(n, label + "/Size"); for (SizeType i = 0; i < n; ++i) ioOut_.createGroup(label + "/" + ttos(i)); firstCall_ = false; } assert(index < counterVector_.size()); SizeType counter = counterVector_[index]; ioOut_.write(eigs, label + "/" + ttos(index) + "/" + ttos(counter)); ioOut_.write(counter + 1, label + "/" + ttos(index) + "/Size", (counter == 0) ? IoOutType::Serializer::NO_OVERWRITE : IoOutType::Serializer::ALLOW_OVERWRITE); ++counterVector_[index]; } const LeftRightSuperType& lrs_; WaveFunctionTransfType& waveFunctionTransformation_; const ParametersType& parameters_; const SuperGeometryType& superGeometry_; OutputFileOrNot& ioOut_; ProgressIndicatorType progress_; RealType error_; TruncationCache leftCache_; TruncationCache rightCache_; VectorSizeType counterVector_; static bool firstCall_; }; // class Truncation template bool Truncation::firstCall_ = true; } // namespace /*@}*/ #endif // DMRG_TRUNCATION_H dmrgpp-6.02/src/Engine/TwoPointCorrelations.h000066400000000000000000000236131414604301300212500ustar00rootroot00000000000000/* Copyright (c) 2008 , UT-Battelle, LLC All rights reserved [DMRG++, Version 1.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TwoPointCorrelations.h * * A class to perform post-processing calculation of TwoPointCorrelations * * */ #ifndef TWO_POINT_H #define TWO_POINT_H #include "CrsMatrix.h" #include "VectorWithOffsets.h" // for operator* #include "VectorWithOffset.h" // for operator* #include "Parallel2PointCorrelations.h" #include "Concurrency.h" #include "Parallelizer.h" #include "ProgramGlobals.h" #include "GetBraOrKet.h" #include "SdhsReinterpret.h" #include "ManyPointAction.h" namespace Dmrg { template class TwoPointCorrelations { public: typedef typename CorrelationsSkeletonType::ObserverHelperType ObserverHelperType; typedef typename ObserverHelperType::VectorType VectorType; typedef typename ObserverHelperType::VectorWithOffsetType VectorWithOffsetType; typedef typename ObserverHelperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename VectorType::value_type FieldType; typedef typename BasisWithOperatorsType::RealType RealType; typedef TwoPointCorrelations ThisType; typedef typename CorrelationsSkeletonType::BraketType BraketType; typedef typename CorrelationsSkeletonType::SparseMatrixType SparseMatrixType; typedef typename ObserverHelperType::MatrixType MatrixType; typedef Parallel2PointCorrelations Parallel2PointCorrelationsType; typedef typename Parallel2PointCorrelationsType::PairType PairType; typedef SdhsReinterpret SdhsReinterpretType; typedef ManyPointAction ManyPointActionType; TwoPointCorrelations(const CorrelationsSkeletonType& skeleton) : skeleton_(skeleton) {} void operator()(PsimagLite::Matrix& w, const BraketType& braket, ProgramGlobals::FermionOrBosonEnum fermionicSign, const PsimagLite::GetBraOrKet& bra, const PsimagLite::GetBraOrKet& ket, const ManyPointActionType& action) const { SizeType rows = w.n_row(); SizeType cols = w.n_col(); typename PsimagLite::Vector::Type pairs; for (SizeType i=0;ij) continue; if (!action(i, j)) continue; pairs.push_back(PairType(i,j)); } } typedef PsimagLite::Parallelizer ParallelizerType; ParallelizerType threaded2Points(PsimagLite::Concurrency::codeSectionParams); Parallel2PointCorrelationsType helper2Points(w, *this, pairs, braket, fermionicSign, bra, ket); threaded2Points.loopCreate(helper2Points); } // Return the vector: O1 * O2 |psi> // where |psi> is the g.s. // Note1: O1 is applied to site i and O2 is applied to site j // Note2: O1 and O2 operators must commute or anti-commute (set fermionicSign accordingly) FieldType calcCorrelation(SizeType i, SizeType j, const BraketType& braket, ProgramGlobals::FermionOrBosonEnum fermionicSign, const PsimagLite::GetBraOrKet& bra, const PsimagLite::GetBraOrKet& ket) const { FieldType c = 0; SdhsReinterpretType sdhs(braket, {i, j}); if (sdhs.forbidden()) return sdhs.forbiddenValue(); const SparseMatrixType& O1 = sdhs.op(0).getCRS(); const SparseMatrixType& O2 = sdhs.op(1).getCRS(); const RealType fsign = (fermionicSign == ProgramGlobals::FermionOrBosonEnum::BOSON) ? 1 : -1; if (i == j) { SizeType replacementSite = (i == 0) ? 1 : i - 1; SizeType rowsForIdent = braket.model().hilbertSize(replacementSite); c = calcDiagonalCorrelation(i, O1, O2, rowsForIdent, fermionicSign, bra, ket); } else if (i>j) { c = fsign*calcCorrelation_(j, i, O2, O1, fermionicSign, bra, ket); } else { c = calcCorrelation_(i, j, O1, O2, fermionicSign, bra, ket); } return c; } private: FieldType calcDiagonalCorrelation(SizeType i, const SparseMatrixType& O1, const SparseMatrixType& O2, SizeType rowsForIdent, ProgramGlobals::FermionOrBosonEnum, const PsimagLite::GetBraOrKet& bra, const PsimagLite::GetBraOrKet& ket) const { SparseMatrixType ident=identity(rowsForIdent); SparseMatrixType O2new = O1 * O2; if (i==0) return calcCorrelation_(0, 1, O2new, ident, ProgramGlobals::FermionOrBosonEnum::BOSON, bra, ket); return calcCorrelation_(i - 1, i, ident, O2new, ProgramGlobals::FermionOrBosonEnum::BOSON, bra, ket); } FieldType calcCorrelation_(SizeType i, SizeType j, const SparseMatrixType& O1, const SparseMatrixType& O2, ProgramGlobals::FermionOrBosonEnum fermionicSign, const PsimagLite::GetBraOrKet& bra, const PsimagLite::GetBraOrKet& ket) const { if (i >= j) err("Observer::calcCorrelation_(...): i must be smaller than j\n"); const ObserverHelperType& helper = skeleton_.helper(); SparseMatrixType O1m,O2m; skeleton_.createWithModification(O1m,O1,'n'); skeleton_.createWithModification(O2m,O2,'n'); if (j == skeleton_.numberOfSites() - 1) { if (i == j - 1) { const SizeType ptr = j - 2; SizeType ni = helper.leftRightSuper(ptr).left().size()/O1m.rows(); SparseMatrixType O1g; O1g.makeDiagonal(ni,1.0); return skeleton_.bracketRightCorner(O1g, O1m, O2m, fermionicSign, ptr, bra, ket); } SparseMatrixType O1g; skeleton_.growDirectly(O1g, O1m, i, fermionicSign, j - 1, false); // j - 2 below is the pointer return skeleton_.bracketRightCorner(O1g, O2m, fermionicSign, j - 2, bra, ket); } SparseMatrixType O1g,O2g; SizeType ns = j-1; skeleton_.growDirectly(O1g,O1m,i,fermionicSign,ns,true); const SizeType ptr = skeleton_.dmrgMultiply(O2g,O1g,O2m,fermionicSign,ns); return skeleton_.bracket(O2g, ProgramGlobals::FermionOrBosonEnum::BOSON, ptr, bra, ket); } static SparseMatrixType identity(SizeType n) { SparseMatrixType ret(n, n); ret.makeDiagonal(n,1.0); return ret; } const CorrelationsSkeletonType& skeleton_; }; //class TwoPointCorrelations } // namespace Dmrg /*@}*/ #endif // TWO_POINT_H dmrgpp-6.02/src/Engine/Utils.h000066400000000000000000000122701414604301300161750ustar00rootroot00000000000000/* Copyright (c) 2009-2016-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ #ifndef UTILS_HEADER_H #define UTILS_HEADER_H #include "Vector.h" #include "CrsMatrix.h" namespace std { template ostream &operator<<(std::ostream &os,const pair& p) { os< class SomeVectorTemplate, typename SomeAllocator1Type, typename SomeAllocator2Type, typename T> typename PsimagLite::EnableIf >::True,void>::Type reorder(SomeVectorTemplate& v, const SomeVectorTemplate& permutation) { SomeVectorTemplate tmpVector(v.size()); for (SizeType i=0;i void reorder(PsimagLite::Matrix& v, const PsimagLite::Vector::Type& permutation) { PsimagLite::Matrix tmpVector(v.n_row(),v.n_col()); for (SizeType i=0;i void blockUnion(Block &A,Block const &B,Block const &C) { A=B; for (SizeType i=0;i typename PsimagLite::EnableIf::True,void>::Type truncateVector(SomeVectorType& v, const PsimagLite::Vector::Type& removedIndices) { SomeVectorType tmpVector; for (SizeType i=0;i= 0) continue; tmpVector.push_back(v[i]); } v = tmpVector; } template static typename PsimagLite::EnableIf::True,void>::Type fillFermionicSigns(SomeVectorType& fermionicSigns, const PsimagLite::Vector::Type& signs, int f) { typedef typename SomeVectorType::value_type ValueType; fermionicSigns.resize(signs.size()); for (SizeType i=0;i(f) : 1; } SizeType exactDivision(SizeType,SizeType); SizeType bitSizeOfInteger(SizeType); SizeType powUint(SizeType, SizeType); } //namespace utils /*@}*/ #endif dmrgpp-6.02/src/Engine/VectorWithOffset.h000066400000000000000000000274441414604301300203530ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file VectorWithOffset.h * * A class to represent a vector like this 000000 XXXXXXXX 0000000000000 * offset_ is where the first X (non-zero element) is. * data_ contains the nonzero part. * sizE_ is the size of the vector */ #ifndef VECTOR_WITH_OFFSET_H #define VECTOR_WITH_OFFSET_H #include "Vector.h" #include "ProgressIndicator.h" #include namespace Dmrg { template class VectorWithOffset { public: typedef QnType_ QnType; typedef VectorWithOffset ThisType; typedef ComplexOrRealType value_type; typedef typename PsimagLite::Real::Type RealType; typedef typename PsimagLite::Vector::Type VectorType; typedef PsimagLite::Vector::Type VectorSizeType; typedef std::pair PairQnType; typedef typename QnType::PairSizeType PairSizeType; static const ComplexOrRealType zero_; VectorWithOffset() : progress_("VectorWithOffset"), size_(0), offset_(0), mAndq_(PairQnType(0, QnType::zero())) {} template VectorWithOffset(const VectorSizeType& compactedWeights, const VectorSizeType& sectors, const SomeBasisType& someBasis) : progress_("VectorWithOffset"), size_(someBasis.size()), mAndq_(PairQnType(0, QnType::zero())) { if (compactedWeights.size() != sectors.size()) err("VectorWithOffset::ctor(): INTERNAL ERROR\n"); if (compactedWeights.size() == 0) err("VectorWithOffset::ctor(): no sectors!\n"); if (compactedWeights.size() > 1) { PsimagLite::String msg("FATAL: VectorWithOffset::"); msg += " more than one non-zero sector found. "; msg += " Maybe you should be using VectorWithOffsets instead?\n"; throw PsimagLite::RuntimeError(msg); } data_.resize(compactedWeights[0]); const SizeType sector = sectors[0]; offset_ = someBasis.partition(sector); mAndq_ = PairQnType(sector, someBasis.pseudoQn(sector)); } template VectorWithOffset(SizeType weight, SizeType sector, const SomeBasisType& someBasis) : progress_("VectorWithOffset"), size_(someBasis.size()), data_(weight), offset_(someBasis.partition(sector)), mAndq_(PairQnType(sector, someBasis.pseudoQn(sector))) {} void clear() { size_ = 0; data_.clear(); offset_=0; } template void set(VectorType& v, SizeType sector, const SomeBasisType& someBasis) { size_ = someBasis.size(); assert(someBasis.partition() > 0); data_.swap(v); offset_ = someBasis.partition(sector); const QnType& qn = someBasis.pseudoQn(sector); mAndq_ = PairQnType(sector, qn); } template void fromFull(const VectorType& v,const SomeBasisType& someBasis) { size_ = someBasis.size(); try { SizeType m = findPartition(v,someBasis); offset_ = someBasis.partition(m); const QnType& qn = someBasis.pseudoQn(m); mAndq_ = PairQnType(m, qn); SizeType total = someBasis.partition(m + 1) - offset_; data_.resize(total); for (SizeType i=0;i void toSparse(SparseVectorType& sv) const { sv.resize(size_); for (SizeType i=0;i void read(SomeInputType& io, const PsimagLite::String& label, SizeType = 0) { io.read(size_, label + "/size_"); io.read(offset_, label + "/offset_"); io.read(mAndq_, label + "/mAndq_"); if (size_ == 0) return; io.read(data_, label + "/data_"); } template void write(SomeIoOutputType& io, const PsimagLite::String& label) const { io.createGroup(label); io.write(size_, label + "/size_"); io.write(offset_, label + "/offset_"); io.write(mAndq_, label + "/mAndq_"); if (size_ == 0) return; io.write(data_, label + "/data_"); } template void loadOneSector(IoInputter& io, const PsimagLite::String& label, SizeType counter=0) { read(io,label,counter); } template void populateSectors(const SomeBasisType&) { throw PsimagLite::RuntimeError("VectorWithOffset cannot populateSectors\n"); } template void populateFromQns(const VectorWithOffset& v, const SomeBasisType& someBasis) { if (v.size() == 0) return; size_ = someBasis.size(); const QnType& q = v.qn(0); SizeType m = findPartitionWithThisQn(q,someBasis); offset_ = someBasis.partition(m); assert(q == someBasis.pseudoQn(m)); mAndq_ = PairQnType(m, q); SizeType total = someBasis.partition(m+1) - offset_; VectorType tmpV(total,0); data_ = tmpV; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"populateFromQns succeeded"; progress_.printline(msgg, std::cout); } void collapseSectors() {} SizeType size() const { return size_; } SizeType effectiveSize() const { return data_.size(); } SizeType offset() const { return offset_; } ThisType& operator*=(const ComplexOrRealType& value) { data_ *= value; return *this; } ThisType operator+=(const ThisType& v) { if (size_ == 0 && offset_ == 0 && mAndq_.first == 0) { data_ = v.data_; size_ = v.size_; offset_ = v.offset_; mAndq_ = v.mAndq_; return *this; } if (size_ != v.size_ || offset_ != v.offset_ || mAndq_ != v.mAndq_) throw PsimagLite::RuntimeError("VectorWithOffset::operator+=\n"); data_ += v.data_; return *this; } const ComplexOrRealType& slowAccess(SizeType i) const { assert(i>=offset_ && i<(offset_+data_.size())); return data_[i-offset_]; } ComplexOrRealType& slowAccess(SizeType i) { assert(i >= offset_); assert(i-offset_ < data_.size()); return data_[i-offset_]; } const ComplexOrRealType& fastAccess(SizeType,SizeType j) const { assert(j= (offset_+data_.size()))) ? (-1) : (0); } static PsimagLite::String name() { return "vectorwithoffset"; } friend ComplexOrRealType operator*(const VectorWithOffset& v1, const VectorWithOffset& v2) { if (v1.size() == 0 || v2.size() == 0) return 0.0; if (v1.mAndq_ != v2.mAndq_) return 0.0; return (v1.data_ * v2.data_); } friend ThisType operator*(const ComplexOrRealType& value, const VectorWithOffset& v) { VectorWithOffset w = v; w.data_ *= value; return w; } friend RealType norm(const VectorWithOffset& v) { return PsimagLite::norm(v.data_); } friend void normalize(VectorWithOffset& v) { RealType norma = PsimagLite::norm(v.data_); RealType eps = 1e-5; if (fabs(norma-1.0)eps); for (SizeType i=0;i SizeType findPartitionWithThisQn(const QnType& qn, const SomeBasisType& someBasis) const { SizeType np = someBasis.partition()-1; for (SizeType i=0;i SizeType findPartition(const VectorType& v,const SomeBasisType& someBasis) const { bool found = false; SizeType p = 0; for (SizeType i=0;i bool nonZeroPartition(const VectorType& v, const SomeBasisType& someBasis,SizeType i) const { typename VectorType::value_type zero = 0; for (SizeType j=someBasis.partition(i);j const ComplexOrRealType VectorWithOffset::zero_=0; } /*@}*/ #endif dmrgpp-6.02/src/Engine/VectorWithOffsets.h000066400000000000000000000460241414604301300205310ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file VectorWithOffsets.h * * A class to represent a vector like this 000000 XXXXXXXX 0000XXXXXXX000000000.... * offsets_ is where the first X (non-zero element) is in each block of Xs. * data_ contains a vector of vectors for each nonzero part. * size_ is the size of the whole vector */ #ifndef VECTOR_WITH_OFFSETS_H #define VECTOR_WITH_OFFSETS_H #include "Complex.h" #include "ProgressIndicator.h" #include #include "ProgramGlobals.h" #include // FIXME: a more generic solution is needed instead of tying // the non-zero structure to basis namespace Dmrg { template class VectorWithOffsets { typedef VectorWithOffsets ThisType; typedef typename QnType_::VectorSizeType VectorSizeType; typedef typename QnType_::PairSizeType PairSizeType; static ComplexOrRealType const zero_; public: typedef QnType_ QnType; typedef ComplexOrRealType value_type; typedef typename PsimagLite::Real::Type RealType; typedef std::pair PairQnType; typedef typename PsimagLite::Vector::Type VectorType; typedef typename PsimagLite::Vector::Type VectorVectorType; VectorWithOffsets() : progress_("VectorWithOffsets"),size_(0),index2Sector_(0) { } template VectorWithOffsets(const typename PsimagLite::Vector::Type& weights, const SomeBasisType& someBasis) : progress_("VectorWithOffsets"), size_(someBasis.size()), index2Sector_(size_), data_(weights.size()), offsets_(weights.size()+1) { for (SizeType i=0;i0) { QnType qn = someBasis.pseudoQn(i); nzMsAndQns_.push_back(PairQnType(i,qn)); //firstSector_ = i; } } offsets_[weights.size()]=size_; setIndex2Sector(); } template VectorWithOffsets(SizeType, SizeType, const SomeBasisType&) : progress_("VectorWithOffset") { err("VectorWithOffsets::ctor() FATAL: wrong execution path!\n"); } template VectorWithOffsets(const VectorSizeType& compactedWeights, const VectorSizeType& sectors, const SomeBasisType& someBasis) : progress_("VectorWithOffsets"), size_(someBasis.size()), index2Sector_(size_), data_(someBasis.partition() - 1), offsets_(someBasis.partition()) { for (SizeType i = 0; i < offsets_.size(); ++i) offsets_[i] = someBasis.partition(i); assert(data_.size() < offsets_.size()); if (offsets_[data_.size()] != size_) err("VectorWithOffsets::ctor(): FATAL: internal error\n"); for (SizeType sectorIndex = 0; sectorIndex < compactedWeights.size(); ++sectorIndex) { const SizeType sector = sectors[sectorIndex]; data_[sector].resize(compactedWeights[sectorIndex]); QnType qn = someBasis.pseudoQn(sector); nzMsAndQns_.push_back(PairQnType(sector, qn)); } setIndex2Sector(); } void clear() { size_ = 0; index2Sector_.clear(); data_.clear(); offsets_.clear(); nzMsAndQns_.clear(); } template void set(VectorType& v, SizeType sector, const SomeBasisType& someBasis) { size_ = someBasis.size(); nzMsAndQns_.clear(); data_.clear(); assert(someBasis.partition() > 0); SizeType n = someBasis.partition() - 1; data_.resize(n); offsets_.resize(n + 1); for (SizeType i = 0; i < n; ++i) offsets_[i] = someBasis.partition(i); data_[sector].swap(v); QnType qn = someBasis.pseudoQn(sector); nzMsAndQns_.push_back(PairQnType(sector, qn)); offsets_[n] = size_; setIndex2Sector(); } template void populateSectors(const SomeBasisType& someBasis) { SizeType np = someBasis.partition()-1; size_ = someBasis.size(); nzMsAndQns_.clear(); data_.clear(); data_.resize(np); offsets_.resize(np+1); for (SizeType i=0;i void populateFromQns(const VectorWithOffsets& v, const SomeBasisType& someBasis) { SizeType np = someBasis.partition()-1; size_ = someBasis.size(); nzMsAndQns_.clear(); data_.clear(); data_.resize(np); offsets_.resize(np+1); for (SizeType i=0;i= np) err("VectorWithOffsets: populateFromQns\n"); SizeType total = someBasis.partition(ip+1)-offsets_[ip]; VectorType tmpV(total,0); data_[ip] = tmpV; nzMsAndQns_.push_back(PairQnType(ip, v.qn(i))); } setIndex2Sector(); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"populateFromQns "<::Type nzMsAndQns; for (SizeType i = 0; i < np; ++i) { if (isZero(data_[i])) { data_[i].resize(0); } else { assert(i < nzMsAndQns_.size()); nzMsAndQns.push_back(nzMsAndQns_[i]); } } nzMsAndQns_ = nzMsAndQns; setIndex2Sector(); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Collapsed. Non-zero sectors now are "<= data_.size()) err("VectorWithOffsets: setDataInSector\n"); data_[i0] = v; } SizeType sectors() const { return nzMsAndQns_.size(); } SizeType sector(SizeType i) const { assert(i < nzMsAndQns_.size()); return nzMsAndQns_[i].first; } const QnType& qn(SizeType i) const { assert(i < nzMsAndQns_.size()); return nzMsAndQns_[i].second; } template void fromFull(const VectorType& v,const SomeBasisType& someBasis) { size_ = someBasis.size(); offsets_.resize(someBasis.partition()); for (SizeType i=0;i= data_.size()) err("VectorWithOffsets: extract\n"); v=data_[i]; } SizeType size() const { return size_; } SizeType effectiveSize(SizeType i) const { if (i >= data_.size()) err("VectorWithOffsets: effectiveSize\n"); return data_[i].size(); } SizeType offset(SizeType i) const { if (i >= offsets_.size()) err("VectorWithOffsets: offset\n"); return offsets_[i]; } const ComplexOrRealType& fastAccess(SizeType i,SizeType j) const { assert(i < data_.size()); assert(j < data_[i].size()); return data_[i][j]; } ComplexOrRealType& fastAccess(SizeType i,SizeType j) { assert(i < data_.size()); assert(j < data_[i].size()); return data_[i][j]; } const ComplexOrRealType& slowAccess(SizeType i) const { assert(i(j) < data_.size()); assert(i - offsets_[j] < data_[j].size()); return data_[j][i-offsets_[j]]; } template void toSparse(SparseVectorType& sv) const { sv.resize(size_); for (SizeType jj=0;jj void read(SomeInputType& io, PsimagLite::String label) { io.read(size_, label + "/size_"); if (size_ == 0) return; io.read(index2Sector_, label + "/index2Sector_"); SizeType x = 0; io.read(x, label + "/data_/Size"); data_.resize(x); bool flag = false; for (SizeType i = 0; i < x; ++i) { try { io.read(data_[i], label + "/data_/" + ttos(i)); flag = true; std::cerr<<"VectorWithOffsets: non-zero sector index "< void write(SomeIoOutputType& io, const PsimagLite::String& label) const { io.createGroup(label); io.write(size_, label + "/size_"); io.write(index2Sector_, label + "/index2Sector_"); io.write(data_, label + "/data_"); io.write(offsets_, label + "/offsets_"); io.write(nzMsAndQns_, label + "/nzMsAndQns_"); } // We don't have a partitioned basis because we don't // have the superblock basis at this point // Therefore, partitioning is bogus here template void loadOneSector(IoInputter& io, const PsimagLite::String& label, SizeType counter=0) { PsimagLite::String msg("VectorWithOffsets:"); io.advance(label,counter); int x = 0; io.readline(x,"size="); if (x<0) err(msg + ":loadOneSector(...): size<0\n"); size_ = x; io.read(offsets_,"offsets"); data_.clear(); data_.resize(offsets_.size()); io.readline(x,"nonzero="); if (x < 0) err(msg + ":loadOneSector(...): nonzerosectors<0\n"); nzMsAndQns_.resize(x); for (SizeType jj=0;jj(x)>=data_.size()) err(msg + ":loadOneSector(...): sector too big\n"); PsimagLite::String s = "data" + ttos(jj); io.read(data_[x], s); } setIndex2Sector(); } VectorWithOffsets& operator*=(const ComplexOrRealType& value) { for (SizeType ii = 0; ii < nzMsAndQns_.size(); ++ii) { SizeType i = nzMsAndQns_[ii].first; assert(i < data_.size()); data_[i] *= value; } return *this; } VectorWithOffsets operator+=(const VectorWithOffsets& v) { if (nzMsAndQns_.size()==0) { size_ = v.size_; data_ = v.data_; offsets_ = v.offsets_; nzMsAndQns_ = v.nzMsAndQns_; setIndex2Sector(); return *this; } for (SizeType ii=0;iieps); for (SizeType i=0;i= v1.data_.size() || i >= v2.data_.size()) err(s.c_str()); if (v1.data_[i].size()!=v2.data_[i].size()) err(s.c_str()); } VectorWithOffsets w = v1; w += v2; return w; } private: void setIndex2Sector() { if (index2Sector_.size()!=size_) index2Sector_.resize(size_); for (SizeType i = 0; i < size_; ++i) { index2Sector_[i] = -1; for (SizeType jj = 0; jj < nzMsAndQns_.size(); ++jj) { SizeType j = nzMsAndQns_[jj].first; assert(j + 1 < offsets_.size()); if (i < offsets_[j] || i >= offsets_[j+1]) continue; index2Sector_[i] = j; } } } template void findPartitions(typename PsimagLite::Vector::Type& p, const VectorType& v, const SomeBasisType& someBasis) { bool found = false; p.clear(); for (SizeType i=0;i bool nonZeroPartition(const VectorType& v, const SomeBasisType& someBasis,SizeType i) { typename VectorType::value_type zero = 0; for (SizeType j = someBasis.partition(i); j < someBasis.partition(i+1); ++j) { assert(j < v.size()); if (v[j] != zero) return true; } return false; } bool isZero(const VectorType& v) const { RealType eps = 1e-5; for (SizeType i = 0; i < v.size(); ++i) if (fabs(PsimagLite::real(v[i]))>eps || fabs(PsimagLite::imag(v[i]))>eps) return false; return true; } template SizeType findPartitionWithThisQn(const QnType& qn, const SomeBasisType& someBasis) const { SizeType np = someBasis.partition() - 1; for (SizeType i = 0; i < np; ++i) if (someBasis.qnEx(i) == qn) return i; throw PsimagLite::RuntimeError("findPartitionWithThisQn\n"); } PsimagLite::ProgressIndicator progress_; SizeType size_; typename PsimagLite::Vector::Type index2Sector_; VectorVectorType data_; typename PsimagLite::Vector::Type offsets_; typename PsimagLite::Vector::Type nzMsAndQns_; }; // class VectorWithOffset template const ComplexOrRealType VectorWithOffsets::zero_ = 0; } /*@}*/ #endif dmrgpp-6.02/src/Engine/VerySparseMatrix.h000066400000000000000000000366361414604301300204010ustar00rootroot00000000000000/* Copyright (c) 2009-2013, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file VerySparseMatrix.h * * A class to represent a sparse matrix in trivial format * */ #ifndef VERY_SPARSE_MATRIX_HEADER_H #define VERY_SPARSE_MATRIX_HEADER_H #include "Sort.h" // in PsimagLite #include "CrsMatrix.h" namespace Dmrg { // Yet another sparse matrix class template class VerySparseMatrix { typedef std::pair PairType; typedef PsimagLite::Vector::Type VectorPairType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename PsimagLite::Vector::Type VectorComplexOrRealType; public: typedef ComplexOrRealType value_type; explicit VerySparseMatrix(SizeType rows, SizeType cols) : rows_(rows), cols_(cols), sorted_(true) {} explicit VerySparseMatrix(const PsimagLite::CrsMatrix& crs) : rows_(crs.rows()), cols_(crs.cols()), values_(crs.nonZeros()), coordinates_(crs.nonZeros()), sorted_(true) { SizeType counter = 0; for (SizeType i=0;i coordinate coordinates_[counter] = PairType(i,crs.getCol(k)); values_[counter++] = crs.getValue(k); } } sort(); } void makeDiagonal(SizeType n, ComplexOrRealType value) { rows_ = cols_ = n; sorted_ = true; coordinates_.resize(n); values_.resize(n); for (SizeType i = 0; i < n; ++i) { coordinates_[i] = PairType(i, i); values_[i] = value; } } void resize(SizeType rows, SizeType cols) { clear(); rows_ = rows; cols_ = cols; } void resize(SizeType rows, SizeType cols, SizeType nonzeros) { coordinates_.resize(nonzeros); values_.resize(nonzeros); sorted_ = false; rows_ = rows; cols_ = cols; } ComplexOrRealType& operator()(SizeType row, SizeType col) { std::pair coordinate(row,col); int x=PsimagLite::indexOrMinusOne(coordinates_,coordinate); if (x<0) { coordinates_.push_back(coordinate); values_.push_back(0); x=values_.size()-1; sorted_=false; } return values_[x]; } bool operator!=(const VerySparseMatrix& other) const { return !(*this == other); } void clear() { rows_ = cols_ = 0; values_.clear(); coordinates_.clear(); sorted_ = false; } void operator=(const PsimagLite::CrsMatrix& crs) { clear(); rows_ = crs.rows(); cols_ = crs.cols(); sorted_ = true; for (SizeType i=0;i coordinate this->operator()(i,crs.getCol(k))=crs.getValue(k); // crs.getValue(k) --> value } //! same as T& operator() but doesn't check for dupes //! faster than T& operator() but use with care. void push(SizeType row,SizeType col,const ComplexOrRealType& value) { std::pair coordinate(row,col); coordinates_.push_back(coordinate); values_.push_back(value); } void set(SizeType counter, SizeType row, SizeType col, const ComplexOrRealType& value) { assert(values_.size() == coordinates_.size()); assert(counter < coordinates_.size()); coordinates_[counter] = PairType(row, col); values_[counter] = value; } const ComplexOrRealType& operator()(SizeType i) const { return values_[i]; } ComplexOrRealType& operator()(SizeType i) { return values_[i]; } void transposeConjugate() { SizeType n = values_.size(); assert(n == coordinates_.size()); std::swap(rows_ ,cols_); for (SizeType i = 0; i < n; ++i) { values_[i] = PsimagLite::conj(values_[i]); std::swap(coordinates_[i].first, coordinates_[i].second); } } void operator+=(const VerySparseMatrix& other) { if (sorted_ && other.sorted()) plusEqualOrd(other); else throw PsimagLite::RuntimeError("VerySparseMatrix::operator+=(): unsorted\n"); } void sort() { sorted_=true; SizeType n = coordinates_.size(); if (n == 0) return; VectorSizeType perm(n, 0); PsimagLite::Sort sort; sort.sort(coordinates_, perm); VectorComplexOrRealType values(n, 0.0); for (SizeType i = 0; i < n; ++i) values[i] = values_[perm[i]]; // uniqueness PairType prevCoord = coordinates_[0]; PsimagLite::Vector::Type mark(n, false); SizeType ind = 0; ComplexOrRealType val = values[ind]; SizeType newsize = 0; for (SizeType i = 1; i < n; ++i) { if (prevCoord != coordinates_[i]) { prevCoord = coordinates_[i]; values[ind] = val; val = values[i]; ind = i; ++newsize; continue; } mark[i] = true; val += values[i]; } values[ind] = val; ++newsize; VectorPairType coords(newsize); values_.resize(newsize); SizeType j = 0; for (SizeType i = 0; i < n; ++i) { if (mark[i]) continue; coords[j] = coordinates_[i]; values_[j++] = values[i]; } assert(j == newsize); coordinates_.swap(coords); } SizeType rows() const { return rows_; } SizeType cols() const { return cols_; } SizeType getRow(SizeType i) const { assert(i < coordinates_.size()); return coordinates_[i].first; } void getRow(VectorSizeType& cols, SizeType row, SizeType startIndex=0) const { cols.clear(); for (SizeType i=startIndex;i row) break; } } SizeType getColumn(SizeType i) const { assert(i < coordinates_.size()); return coordinates_[i].second; } void getColumn(VectorSizeType& rows, SizeType col) const { rows.clear(); for (SizeType i=0;i& m) { os<>(std::istream& is, VerySparseMatrix& m) { is>>m.rows_; is>>m.cols_; if (m.rows_ == 0 || m.cols_ == 0) return is; PsimagLite::String temp; PairType coordinate; while (true) { is>>temp; if (temp[0] == '#') break; coordinate.first = atoi(temp.c_str()); is>>temp; coordinate.second = atoi(temp.c_str()); m.coordinates_.push_back(coordinate); is>>temp; m.values_.push_back(atof(temp.c_str())); } return is; } template void saveToDisk(IoType& outHandle) { PsimagLite::String s = "rows="+ttos(rows_); outHandle.printline(s); outHandle.printline("cols=" + ttos(cols_)); outHandle.write(coordinates_,"coordinates"); outHandle.write(values_,"values"); s="######\n"; outHandle.printline(s); } template void loadFromDisk(IoType& inHandle,bool check=false) { clear(); inHandle.readline(rows_, "rows="); inHandle.readline(cols_, "cols="); inHandle.read(coordinates_,"coordinates"); if (check) checkCoordinates(); inHandle.read(values_,"values"); sorted_=true; } //! for debuggin only: void checkCoordinates() const { SizeType flag=0; for (SizeType i=0;i= rows_) { std::cerr<<"coordinates["<= cols_) { std::cerr<<"coordinates["<& other) { if (coordinates_.size() == 0) { *this = other; return; } if (other.coordinates_.size() == 0) return; // pre-alloc memory: VectorPairType newcoord(coordinates_.size()); VectorComplexOrRealType newvals(coordinates_.size()); newcoord.reserve(coordinates_.size()+other.coordinates_.size()); newvals.reserve(coordinates_.size()+other.coordinates_.size()); // ---------------------------- // check coordinates are sorted // ---------------------------- SizeType n = coordinates_.size(); if (n > 0) --n; for( SizeType i = 0; i < n; ++i) { assert( coordinates_[i] <= coordinates_[i+1] ); } SizeType m = other.coordinates_.size(); if (m > 0) --m; for( SizeType i = 0; i < m; ++i) { assert( other.coordinates_[i] <= other.coordinates_[i+1] ); }; // --------------------------------------------------------- // initialization to place something reasonable in newcoord // --------------------------------------------------------- // ------------------------------------------------------ // note use "maxrc" as sentinel end marker to simplify coding // ------------------------------------------------------ const unsigned int bigval = 1024*1024*1024; const PairType maxrc(bigval,bigval); SizeType jp = 0; SizeType ip = 0; SizeType counter = 0; PairType irc = (coordinates_.size() > 0) ? coordinates_[ip] : maxrc; PairType jrc = (other.coordinates_.size() > 0) ? other.coordinates_[jp] : maxrc; if (irc < jrc) { newcoord[0] = irc; newvals[0] = values_[0]; ip = 1; } else { newcoord[0] = jrc; newvals[0] = other.values_[0]; jp = 1; }; bool has_work_ip = (ip < coordinates_.size()); bool has_work_jp = (jp < other.coordinates_.size()); bool has_work = has_work_ip || has_work_jp; while (has_work) { has_work_ip = (ip < coordinates_.size()); has_work_jp = (jp < other.coordinates_.size()); has_work = has_work_ip || has_work_jp; if (!has_work) { break; }; // ------------------------------------------------------ // unified treatment of coordinate_ or other.coordinate_ // ------------------------------------------------------ PairType irc = (has_work_ip) ? coordinates_[ip] : maxrc; ComplexOrRealType val_irc = (has_work_ip) ? values_[ip] : 0; PairType jrc = (has_work_jp) ? other.coordinates_[jp] : maxrc; ComplexOrRealType val_jrc = (has_work_jp) ? other.values_[jp] : 0; PairType ijrc = (irc < jrc) ? irc : jrc; ComplexOrRealType val_ijrc = (irc < jrc) ? val_irc : val_jrc; if (irc < jrc) { // ---------------------------- // pick coordinate_, advance ip // ---------------------------- ip++; } else { // ---------------------------------- // pick other.coordinate_, advance jp // ---------------------------------- jp++; }; PairType newrc = newcoord[counter]; if (newrc == ijrc) { // ------------------------ // common entry: just add accumulate value // ------------------------ newvals[counter] += val_ijrc; } else { // ------------------------- // advance to next new entry // ------------------------- counter++; newvals[counter] = val_ijrc; newcoord[counter] = ijrc; }; }; // update vector // TODO: add swap method to just swap pointers SizeType nonzeros = counter+1; coordinates_.resize(nonzeros); values_.resize(nonzeros); for(SizeType i=0; i < nonzeros; i++) { coordinates_[i] = newcoord[i]; values_[i] = newvals[i]; } } bool notEqual(const char *s) const { std::cerr<<"notEqual="< bool isHermitian(const VerySparseMatrix& m) { T eps =1e-6; for (SizeType i=0;ieps) { return false; } } return true; } template void verySparseMatrixToDenseMatrix(PsimagLite::Matrix& m, const VerySparseMatrix& vsm) { m.resize(vsm.rows(), vsm.cols()); m.setTo(0.0); SizeType nonzeroes = vsm.nonZeros(); for (SizeType x = 0; x < nonzeroes; ++x) m(vsm.getRow(x), vsm.getColumn(x)) = vsm.getValue(x); } template void fullMatrixToVerySparseMatrix(VerySparseMatrix& vsm, const PsimagLite::Matrix& m) { vsm.resize(m.rows(), m.cols()); for (SizeType i = 0; i < m.rows(); ++i) { for (SizeType j = 0; j < m.cols(); ++j) { const T& val = m(i,j); if (val == 0.0) continue; vsm.push(i, j, val); } } } } // namespace Dmrg namespace PsimagLite { template struct IsMatrixLike > { enum {True = true}; }; } /*@}*/ #endif dmrgpp-6.02/src/Engine/Wft/000077500000000000000000000000001414604301300154625ustar00rootroot00000000000000dmrgpp-6.02/src/Engine/Wft/BlockDiagWf.h000066400000000000000000000502601414604301300177520ustar00rootroot00000000000000#ifndef BLOCKDIAGMATRIXWF_H #define BLOCKDIAGMATRIXWF_H #include "CrsMatrix.h" #include "BlockDiagonalMatrix.h" #include "LAPACK.h" #include "PackIndices.h" #include "GemmR.h" #include #include namespace Dmrg { template class BlockDiagWf { typedef typename VectorWithOffsetType::VectorType VectorType; typedef typename VectorType::value_type ComplexOrRealType; typedef PsimagLite::CrsMatrix SparseMatrixType; typedef PsimagLite::Matrix MatrixType; typedef BlockDiagonalMatrix BlockDiagonalMatrixType; typedef typename PsimagLite::Real::Type RealType; typedef PsimagLite::Vector::Type VectorSizeType; typedef std::pair PairType; typedef PsimagLite::Vector::Type VectorPairType; typedef PsimagLite::Vector::Type VectorVectorSizeType; typedef typename GenIjPatchType::LeftRightSuperType LeftRightSuperType; typedef typename LeftRightSuperType::BasisType BasisType; typedef PsimagLite::PackIndices PackIndicesType; typedef typename PsimagLite::Vector::Type VectorMatrixType; class ParallelBlockCtor { public: ParallelBlockCtor(const VectorSizeType& patcheLeft, const VectorSizeType& patchesRight, const LeftRightSuperType& lrs, const VectorWithOffsetType& src, SizeType iSrc, VectorPairType& patches, VectorMatrixType& data) : patchesLeft_(patcheLeft), patchesRight_(patchesRight), lrs_(lrs), packSuper_(lrs.left().size()), src_(src), srcIndex_(src.sector(iSrc)), offset_(src.offset(srcIndex_)), patches_(patches), data_(data) {} SizeType tasks() const { return patchesLeft_.size(); } void doTask(SizeType ipatch, SizeType) { SizeType partL = patchesLeft_[ipatch]; SizeType partR = patchesRight_[ipatch]; SizeType offsetL = lrs_.left().partition(partL); SizeType rtotal = lrs_.left().partition(partL + 1) - offsetL; SizeType offsetR = lrs_.right().partition(partR); patches_[ipatch] = PairType(partL, partR); SizeType ctotal = lrs_.right().partition(partR + 1) - offsetR; data_[ipatch] = new MatrixType(rtotal, ctotal); MatrixType& m = *(data_[ipatch]); for (SizeType r = 0; r < rtotal; ++r) { SizeType row = r + offsetL; for (SizeType c = 0; c < ctotal; ++c) { SizeType col = c + offsetR; SizeType ind = packSuper_.pack(row, col, lrs_.super().permutationInverse()); assert(ind >= offset_); m(r, c) = src_.fastAccess(srcIndex_, ind - offset_); //sum += PsimagLite::conj(m(r, c))*m(r, c); } } } private: const VectorSizeType& patchesLeft_; const VectorSizeType& patchesRight_; const LeftRightSuperType& lrs_; const PackIndicesType packSuper_; const VectorWithOffsetType& src_; SizeType srcIndex_; SizeType offset_; VectorPairType& patches_; VectorMatrixType& data_; }; class ParallelBlockTransform { public: ParallelBlockTransform(const BlockDiagonalMatrixType& tLeft, const BlockDiagonalMatrixType& tRight, char charLeft, char charRight, SizeType threads, const VectorPairType& patches, VectorSizeType& offsetRows, VectorSizeType& offsetCols, VectorMatrixType& data, SizeType gemmRnb, SizeType threadsForGemmR) : tLeft_(tLeft), tRight_(tRight), patchConvertLeft_(tLeft.blocks(), 0), patchConvertRight_(tRight.blocks(), 0), charLeft_(charLeft), charRight_(charRight), storage_(threads), patches_(patches), offsetRows_(offsetRows), offsetCols_(offsetCols), data_(data), gemmRnb_(gemmRnb), threadsForGemmR_(threadsForGemmR) { patchConvert(patchConvertLeft_, (charLeft == 'N'), tLeft); patchConvert(patchConvertRight_, (charRight != 'N'), tRight); SizeType npatches = data_.size(); offsetCols_.clear(); offsetRows_.clear(); offsetCols_.resize(npatches, 0); offsetRows_.resize(npatches, 0); } SizeType tasks() const { return data_.size(); } void doTask(SizeType ipatch, SizeType threadNum) { #if 0 const int idebug = 0; #endif MatrixType* mptr = data_[ipatch]; if (mptr == 0) return; MatrixType& m = *mptr; SizeType partL = patchConvertLeft_[patches_[ipatch].first]; SizeType partR = patchConvertRight_[patches_[ipatch].second]; if (partL >= tLeft_.blocks()) { m.clear(); return; } if (partR >= tRight_.blocks()) { m.clear(); return; } offsetRows_[ipatch] = (charLeft_ == 'N') ? tLeft_.offsetsRows(partL) : tLeft_.offsetsCols(partL); offsetCols_[ipatch] = (charRight_ == 'N') ? tRight_.offsetsCols(partR) : tRight_.offsetsRows(partR); const MatrixType& mRight = getRightMatrix(tRight_(partR), charRight_, threadNum); const MatrixType& mLeft = tLeft_(partL); if (mRight.cols() == 0 && mRight.rows() == 0) { m.clear(); return; } if (mLeft.cols() == 0 && mLeft.rows() == 0) { m.clear(); return; } // --------------------------------- // Here W_L = mLeft, W_R = mRight // // Need to evaluate // // Ynew = opL(W_L) * Yold * opR( W_R ) // // but note that // Ynew is over-written by Yold // // where // // opL(W_L) = W_L if charLeft_ == 'N' // opL(W_L) = transpose(W_L) if charLeft_ == 'T' // opL(W_L) = conj(transpose(W_L)) if charLeft_ == 'C' // // opL(W_R) = W_R if charRight_ == 'N' // opL(W_R) = transpose(W_R) if charRight_ == 'T' // opL(W_R) = conj(transpose(W_R)) if charRight_ == 'C' // --------------------------------- // const int nrow_W_L = mLeft.rows(); const int ncol_W_L = mLeft.cols(); const ComplexOrRealType *W_L = &(mLeft(0,0)); const int ldW_L = nrow_W_L; const int nrow_W_R = mRight.rows(); const int ncol_W_R = mRight.cols(); const ComplexOrRealType *W_R = &(mRight(0,0)); const int ldW_R = nrow_W_R; const bool has_work = (nrow_W_L >= 1) && (ncol_W_L >= 1) && (nrow_W_R >= 1) && (ncol_W_R >= 1); if (!has_work) { m.clear(); return; }; const int nrow_Yold = m.rows(); const int ncol_Yold = m.cols(); ComplexOrRealType *Yold = &(m(0,0)); const int ldYold = nrow_Yold; const int nrow_Ynew = (charLeft_ == 'N') ? nrow_W_L : ncol_W_L; const int ncol_Ynew = (charRight_ == 'N') ? ncol_W_R : nrow_W_R; const int ldYnew = nrow_Ynew; // ---------------------------------- // Note: Ynew is over-written by Yold // so delay assign pointer value to Ynew // ---------------------------------- int nrow_Ytemp = 0; int ncol_Ytemp = 0; int ldYtemp = 0; // --------------------------- // Method 1: // (1) Ytemp = opL(W_L) * Yold // (2) Ynew = Ytemp * opR(W_R) // // Method 2: // (1) Ytemp = Yold * opR( W_R ) // (2) Ynew = opL(W_L) * Ytemp // --------------------------- assert( (charLeft_ == 'N') || (charLeft_ == 'T') || (charLeft_ == 'C')); assert( (charRight_ == 'N') || (charRight_ == 'T') || (charRight_ == 'C')); nrow_Ytemp = (charLeft_ == 'N') ? nrow_W_L : ncol_W_L; ncol_Ytemp = ncol_Yold; const RealType flops_method_1 = 2.0 * nrow_W_L * ncol_W_L * ncol_Yold + 2.0 * nrow_Ytemp * ncol_Ytemp * ncol_Ynew; nrow_Ytemp = nrow_Yold; ncol_Ytemp = (charRight_ == 'N') ? ncol_W_R : nrow_W_R; const RealType flops_method_2 = 2.0 * nrow_Yold * ncol_Yold * ncol_Ytemp + 2.0 * nrow_W_L * ncol_W_L * ncol_Ytemp; const bool use_method_1 = (flops_method_1 <= flops_method_2); #if 0 if (idebug >= 1) { const double speedup_ratio = (use_method_1) ? flops_method_2 / flops_method_1 : flops_method_1 / flops_method_2; std::cout << "BlockDiagWf.h:225: " << " use_method_1=" << use_method_1 << std::scientific << " flops_method_1=" << flops_method_1 << " flops_method_2=" << flops_method_2 << " speedup ratio=" << speedup_ratio << std::defaultfloat << "\n"; } #endif const ComplexOrRealType d_one = 1.0; const ComplexOrRealType d_zero = 0.0; static const bool needsPrinting = false; PsimagLite::GemmR gemmR(needsPrinting, gemmRnb_, threadsForGemmR_); if (use_method_1) { // --------------------------- // Method 1: // (1) Ytemp = opL(W_L) * Yold // (2) Ynew = Ytemp * opR(W_R) // --------------------------- nrow_Ytemp = (charLeft_ == 'N') ? nrow_W_L : ncol_W_L; ncol_Ytemp = ncol_Yold; MatrixType tmp(nrow_Ytemp,ncol_Ytemp); ComplexOrRealType *Ytemp = &(tmp(0,0)); ldYtemp = nrow_Ytemp; // --------------------------- // (1) Ytemp = opL(W_L) * Yold // --------------------------- { const char transA = charLeft_; const char transB = 'N'; const int mm = nrow_Ytemp; const int nn = ncol_Ytemp; const int kk = nrow_Yold; const ComplexOrRealType alpha = d_one; const ComplexOrRealType beta = d_zero; gemmR( transA, transB, mm, nn, kk, alpha, W_L, ldW_L, Yold, ldYold, beta, Ytemp, ldYtemp ); } // ------------------------------ // Note Ynew is over-written Yold // ------------------------------ m.clear(); m.resize( nrow_Ynew, ncol_Ynew); ComplexOrRealType *Ynew = &(m(0,0)); // --------------------------- // (2) Ynew = Ytemp * opR(W_R) // --------------------------- { const char transA = 'N'; const char transB = charRight_; const int mm = nrow_Ynew; const int nn = ncol_Ynew; const int kk = ncol_Ytemp; const ComplexOrRealType alpha = d_one; const ComplexOrRealType beta = d_zero; gemmR( transA, transB, mm, nn, kk, alpha, Ytemp, ldYtemp, W_R, ldW_R, beta, Ynew, ldYnew ); } } else { // --------------------------- // Method 2: // (1) Ytemp = Yold * opR( W_R ) // (2) Ynew = opL(W_L) * Ytemp // --------------------------- nrow_Ytemp = nrow_Yold; ncol_Ytemp = (charRight_ == 'N') ? ncol_W_R : nrow_W_R; MatrixType tmp(nrow_Ytemp,ncol_Ytemp); ComplexOrRealType *Ytemp = &(tmp(0,0)); ldYtemp = nrow_Ytemp; // ------------------------------ // (1) Ytemp = Yold * opR( W_R ) // ------------------------------ { const char transA = 'N'; const char transB = charRight_; const int mm = nrow_Ytemp; const int nn = ncol_Ytemp; const int kk = ncol_Yold; const ComplexOrRealType alpha = d_one; const ComplexOrRealType beta = d_zero; gemmR( transA, transB, mm, nn, kk, alpha, Yold, ldYold, W_R, ldW_R, beta, Ytemp, ldYtemp ); } // ------------------------------ // Note Ynew over-written by Yold // ------------------------------ m.clear(); m.resize( nrow_Ynew, ncol_Ynew ); ComplexOrRealType *Ynew = &(m(0,0)); // --------------------------- // (2) Ynew = opL(W_L) * Ytemp // --------------------------- { const char transA = charLeft_; const char transB = 'N'; const int mm = nrow_Ynew; const int nn = ncol_Ynew; const int kk = nrow_Ytemp; const ComplexOrRealType alpha = d_one; const ComplexOrRealType beta = d_zero; gemmR( transA, transB, mm, nn, kk, alpha, W_L, ldW_L, Ytemp, ldYtemp, beta, Ynew, ldYnew ); } }; } private: static void patchConvert(VectorSizeType& v, bool isNeeded, const BlockDiagonalMatrixType& b) { SizeType n = b.blocks(); assert(v.size() == n); SizeType c = 0; for (SizeType i = 0; i < n; ++i) { const MatrixType& m = b(i); if (m.rows() == 0 && isNeeded) { if (m.cols() != 0) err("patchConvert error\n"); continue; } v[c++] = i; } } const MatrixType& getRightMatrix(const MatrixType& m, char c, SizeType threadNum) { if (c != 'N') return m; return getRightMatrixT(m, threadNum); } const MatrixType& getRightMatrixT(const PsimagLite::Matrix >& m, SizeType threadNum) { storage_[threadNum].clear(); SizeType rows = m.rows(); SizeType cols = m.cols(); storage_[threadNum].resize(rows, cols); for (SizeType j = 0; j < cols; ++j) for (SizeType i = 0; i < rows; ++i) storage_[threadNum](i, j) = PsimagLite::conj(m(i, j)); return storage_[threadNum]; } const MatrixType& getRightMatrixT(const PsimagLite::Matrix& m, SizeType) { return m; } const BlockDiagonalMatrixType& tLeft_; const BlockDiagonalMatrixType& tRight_; VectorSizeType patchConvertLeft_; VectorSizeType patchConvertRight_; char charLeft_; char charRight_; typename PsimagLite::Vector::Type storage_; const VectorPairType& patches_; VectorSizeType& offsetRows_; VectorSizeType& offsetCols_; VectorMatrixType& data_; SizeType gemmRnb_; SizeType threadsForGemmR_; }; public: BlockDiagWf(const VectorWithOffsetType& src, SizeType iSrc, const LeftRightSuperType& lrs) : lrs_(lrs), rows_(lrs.left().size()), cols_(lrs.right().size()) { GenIjPatchType genIjPatch(lrs, src.qn(iSrc)); const VectorSizeType& patchesLeft = genIjPatch(GenIjPatchType::LEFT); const VectorSizeType& patchesRight = genIjPatch(GenIjPatchType::RIGHT); SizeType npatches = patchesLeft.size(); assert(npatches == patchesRight.size()); data_.resize(npatches, 0); patches_.resize(npatches); SizeType threads = std::min(npatches, PsimagLite::Concurrency::codeSectionParams.npthreads); typedef PsimagLite::Parallelizer ParallelizerType; PsimagLite::CodeSectionParams codeSectionParams(threads); ParallelizerType threadedCtor(codeSectionParams); ParallelBlockCtor helper(patchesLeft, patchesRight, lrs, src, iSrc, patches_, data_); threadedCtor.loopCreate(helper); } ~BlockDiagWf() { SizeType npatches = data_.size(); for (SizeType ipatch = 0; ipatch < npatches; ++ipatch) { delete data_[ipatch]; data_[ipatch] = 0; } } void transform(char charLeft, char charRight, const BlockDiagonalMatrixType& tLeft, const BlockDiagonalMatrixType& tRight, SizeType gemmRnb, SizeType threadsForGemmR) { SizeType npatches = data_.size(); SizeType threads = std::min(npatches, PsimagLite::Concurrency::codeSectionParams.npthreads); typedef PsimagLite::Parallelizer ParallelizerType; PsimagLite::CodeSectionParams codeSectionParams(threads); ParallelizerType threadedTransform(codeSectionParams); ParallelBlockTransform helper(tLeft, tRight, charLeft, charRight, threads, patches_, offsetRows_, offsetCols_, data_, gemmRnb, threadsForGemmR); threadedTransform.loopCreate(helper); rows_ = (charLeft == 'N') ? tLeft.rows() : tLeft.cols(); cols_ = (charRight == 'N') ? tRight.cols() : tRight.rows(); //std::cout<<"sum transform "< 0); SizeType hilbert = nk[0]; SizeType npatches = data_.size(); SizeType ns = lrs.left().size(); PackIndicesType packSuper(ns); PackIndicesType packLeft(lrs.left().size()/hilbert); PackIndicesType packRight(hilbert); SizeType offset = lrs.super().partition(destIndex); //ComplexOrRealType sum = 0.0; //ComplexOrRealType sumBad = 0.0; for (SizeType ipatch = 0; ipatch < npatches; ++ipatch) { const MatrixType* mptr = data_[ipatch]; if (mptr == 0) continue; const MatrixType& m = *mptr; SizeType offsetL = offsetRows_[ipatch]; SizeType offsetR = offsetCols_[ipatch]; for (SizeType r = 0; r < m.rows(); ++r) { SizeType row = r + offsetL; for (SizeType c = 0; c < m.cols(); ++c) { SizeType col = c + offsetR; SizeType k = 0; SizeType rind = 0; packRight.unpack(k, rind, lrs_.right().permutation(col)); assert(k < hilbert); SizeType lind = packLeft.pack(row, k, lrs.left().permutationInverse()); SizeType ind = packSuper.pack(lind, rind, lrs.super().permutationInverse()); const ComplexOrRealType& value = m(r, c); //sum += PsimagLite::conj(value)*value; //if (ind < offset || ind >= lrs.super().partition(destIndex + 1)) // sumBad += PsimagLite::conj(value)*value; assert(ind >= offset && ind < lrs.super().partition(destIndex + 1)); dest.fastAccess(destIndex, ind - offset) = value; } } } //std::cout<<"sum = "< 0); SizeType hilbert = nk[0]; SizeType npatches = data_.size(); SizeType ns = lrs.left().size(); PackIndicesType packSuper(ns); PackIndicesType packLeft(lrs_.left().permutationInverse().size()/hilbert); PackIndicesType packRight(hilbert); SizeType offset = lrs.super().partition(destIndex); //ComplexOrRealType sum = 0.0; //ComplexOrRealType sumBad = 0.0; for (SizeType ipatch = 0; ipatch < npatches; ++ipatch) { const MatrixType* mptr = data_[ipatch]; if (mptr == 0) continue; const MatrixType& m = *mptr; SizeType offsetL = offsetRows_[ipatch]; SizeType offsetR = offsetCols_[ipatch]; for (SizeType r = 0; r < m.rows(); ++r) { SizeType row = r + offsetL; for (SizeType c = 0; c < m.cols(); ++c) { SizeType col = c + offsetR; SizeType k = 0; SizeType lind = 0; packLeft.unpack(lind, k, lrs_.left().permutation(row)); assert(k < hilbert); SizeType rind = packRight.pack(k, col, lrs.right().permutationInverse()); SizeType ind = packSuper.pack(lind, rind, lrs.super().permutationInverse()); const ComplexOrRealType& value = m(r, c); //sum += PsimagLite::conj(value)*value; //if (ind < offset || ind >= lrs.super().partition(destIndex + 1)) // sumBad += PsimagLite::conj(value)*value; assert(ind >= offset && ind < lrs.super().partition(destIndex + 1)); dest.fastAccess(destIndex, ind - offset) = value; } } } //std::cout<<"sum = "< class ParallelWftMany { typedef PsimagLite::Concurrency ConcurrencyType; typedef typename PsimagLite::Vector::Type VectorVectorWithOffsetType; public: typedef typename VectorWithOffsetType::value_type VectorElementType; typedef typename PsimagLite::Real::Type RealType; ParallelWftMany(VectorVectorWithOffsetType& targetVectors, SizeType nk, const WaveFunctionTransfType& wft, const LeftRightSuperType& lrs) : targetVectors_(targetVectors), nk_(nk), wft_(wft), lrs_(lrs) {} void thread_function_(SizeType threadNum, SizeType blockSize, SizeType total, ConcurrencyType::MutexType*) { SizeType nk = nk_; SizeType mpiRank = PsimagLite::MPI::commRank(PsimagLite::MPI::COMM_WORLD); SizeType npthreads = PsimagLite::Concurrency::npthreads; ConcurrencyType::mpiDisableIfNeeded(mpiRank,blockSize,"ParallelWftMany",total); for (SizeType p=0;p=targetVectors_.size()) break; VectorWithOffsetType phiNew = targetVectors_[0]; wft_.setInitialVector(phiNew,targetVectors_[ix],lrs_,nk); targetVectors_[ix] = phiNew; } } private: VectorVectorWithOffsetType& targetVectors_; SizeType nk_; const WaveFunctionTransfType& wft_; const LeftRightSuperType& lrs_; }; // class ParallelWftMany } // namespace Dmrg /*@}*/ #endif // DMRG_PARALLEL_WFT_MANY_H dmrgpp-6.02/src/Engine/Wft/ParallelWftOne.h000066400000000000000000000222201414604301300205100ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /** \file ParallelWftOne.h */ #ifndef DMRG_PARALLEL_WFT_ONE_H #define DMRG_PARALLEL_WFT_ONE_H #include "Vector.h" #include "Concurrency.h" #include "PackIndices.h" #include "ProgramGlobals.h" namespace Dmrg { template class ParallelWftOne { typedef PsimagLite::PackIndices PackIndicesType; typedef PsimagLite::Concurrency ConcurrencyType; typedef typename PsimagLite::Vector::Type VectorVectorWithOffsetType; typedef typename DmrgWaveStructType::VectorSizeType VectorSizeType; typedef typename DmrgWaveStructType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type SparseElementType; typedef typename DmrgWaveStructType::LeftRightSuperType LeftRightSuperType; public: typedef typename VectorWithOffsetType::value_type VectorElementType; typedef typename PsimagLite::Real::Type RealType; ParallelWftOne(VectorWithOffsetType& psiDest, const VectorWithOffsetType& psiSrc, const LeftRightSuperType& lrs, SizeType i0, const VectorSizeType& nk, const DmrgWaveStructType& dmrgWaveStruct, typename ProgramGlobals::DirectionEnum dir) : psiDest_(psiDest), psiSrc_(psiSrc), lrs_(lrs), i0_(i0), nk_(nk), dmrgWaveStruct_(dmrgWaveStruct), dir_(dir), pack1_(0), pack2_(0) { dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::ENVIRON).toSparse(we_); dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).toSparse(ws_); transposeConjugate(wsT_,ws_); transposeConjugate(weT_,we_); SizeType vOfNk = ProgramGlobals::volumeOf(nk); if (dir_ == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) { assert(dmrgWaveStruct_.lrs().right().permutationInverse().size() == dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::ENVIRON).rows()); assert(lrs_.left().permutationInverse().size()/vOfNk== dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).cols()); pack1_ = new PackIndicesType(lrs.left().permutationInverse().size()); pack2_ = new PackIndicesType(lrs.left().permutationInverse().size()/vOfNk); } else { assert(dmrgWaveStruct_.lrs().left().permutationInverse().size() == dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).rows()); assert(lrs_.right().permutationInverse().size()/vOfNk== dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::ENVIRON).cols()); pack1_ = new PackIndicesType(lrs.super().permutationInverse().size()/ lrs.right().permutationInverse().size()); pack2_ = new PackIndicesType(vOfNk); } } ~ParallelWftOne() { delete pack1_; delete pack2_; } SizeType tasks() const { return psiDest_.effectiveSize(i0_); } void doTask(SizeType taskNumber, SizeType) { SizeType start = psiDest_.offset(i0_); if (dir_ == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) { SizeType ip = 0; SizeType alpha = 0; SizeType kp = 0; SizeType jp = 0; pack1_->unpack(alpha,jp,(SizeType)lrs_.super().permutation(taskNumber+start)); pack2_->unpack(ip,kp,(SizeType)lrs_.left().permutation(alpha)); psiDest_.fastAccess(i0_,taskNumber) = createAux2b(psiSrc_,ip,kp,jp,wsT_,we_,nk_); } else { SizeType ip = 0; SizeType beta = 0; SizeType kp = 0; SizeType jp = 0; pack1_->unpack(ip,beta,(SizeType)lrs_.super().permutation(taskNumber+start)); pack2_->unpack(kp,jp,(SizeType)lrs_.right().permutation(beta)); psiDest_.fastAccess(i0_,taskNumber)=createAux1b(psiSrc_,ip,kp,jp,ws_,weT_,nk_); } } private: // This class has pointers, disallow copy ctor and assignment ParallelWftOne(const ParallelWftOne&); ParallelWftOne& operator=(const ParallelWftOne&); template SparseElementType createAux2b(const SomeVectorType& psiSrc, SizeType ip, SizeType kp, SizeType jp, const SparseMatrixType& wsT, const SparseMatrixType& we, const VectorSizeType& nk) const { SizeType nalpha=dmrgWaveStruct_.lrs().left().permutationInverse().size(); assert(nalpha==wsT.cols()); SparseElementType sum=0; SizeType volumeOfNk = ProgramGlobals::volumeOf(nk); SizeType beta = dmrgWaveStruct_.lrs().right().permutationInverse(kp+jp*volumeOfNk); for (int k=wsT.getRowPtr(ip);k SparseElementType createAux1b(const SomeVectorType& psiSrc, SizeType ip, SizeType kp, SizeType jp, const SparseMatrixType& ws, const SparseMatrixType& weT, const typename PsimagLite::Vector::Type& nk) const { SizeType volumeOfNk = ProgramGlobals::volumeOf(nk); SizeType ni= dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).cols(); SizeType nip = dmrgWaveStruct_.lrs().left().permutationInverse().size()/volumeOfNk; SizeType alpha = dmrgWaveStruct_.lrs().left().permutationInverse(ip+kp*nip); SparseElementType sum=0; for (int k = ws.getRowPtr(alpha);k class ParallelWftSu2 { typedef PsimagLite::PackIndices PackIndicesType; typedef PsimagLite::Concurrency ConcurrencyType; typedef typename PsimagLite::Vector::Type VectorVectorWithOffsetType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename DmrgWaveStructType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type SparseElementType; typedef typename BasisWithOperatorsType::FactorsType FactorsType; public: typedef typename VectorWithOffsetType::value_type VectorElementType; typedef typename PsimagLite::Real::Type RealType; ParallelWftSu2(VectorWithOffsetType& psiDest, const VectorWithOffsetType& psiSrc, const LeftRightSuperType& lrs, SizeType i0, const VectorSizeType& nk, const DmrgWaveStructType& dmrgWaveStruct, ProgramGlobals::DirectionEnum dir) : psiDest_(psiDest), psiSrc_(psiSrc), lrs_(lrs), i0_(i0), nk_(nk), dmrgWaveStruct_(dmrgWaveStruct), dir_(dir), pack1_(0), pack2_(0) { dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::ENVIRON).toSparse(we_); dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).toSparse(ws_); transposeConjugate(wsT_,ws_); transposeConjugate(weT_,we_); if (dir_ == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) { assert(dmrgWaveStruct_.lrs().right().permutationInverse().size() == dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::ENVIRON).rows()); assert(lrs_.left().permutationInverse().size()/volumeOf(nk) == dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).cols()); pack1_ = new PackIndicesType(lrs.left().permutationInverse().size()); pack2_ = new PackIndicesType(lrs.left().permutationInverse().size()/ volumeOf(nk)); } else { assert(dmrgWaveStruct_.lrs().left().permutationInverse().size()== dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).rows()); assert(lrs_.right().permutationInverse().size()/volumeOf(nk)== dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::ENVIRON).cols()); pack1_ = new PackIndicesType(lrs.super().permutationInverse().size()/ lrs.right().permutationInverse().size()); pack2_ = new PackIndicesType(volumeOf(nk)); } const FactorsType* fptrSE = lrs_.super().getFactors(); assert(fptrSE); const FactorsType& factorsSE = *fptrSE; const FactorsType* fptrS = lrs_.left().getFactors(); assert(fptrS); const FactorsType& factorsS = *fptrS; const FactorsType* fptrE = lrs_.right().getFactors(); assert(fptrE); const FactorsType& factorsE = *fptrE; transposeConjugate(factorsInvSE_,factorsSE); transposeConjugate(factorsInvS_,factorsS); transposeConjugate(factorsInvE_,factorsE); } ~ParallelWftSu2() { delete pack1_; delete pack2_; } static SizeType volumeOf(const VectorSizeType& v) { assert(v.size()>0); SizeType ret = v[0]; for (SizeType i=1;iunpack(alpha,jp,static_cast(factorsInvSE_.getCol(kI))); for (int k2I=factorsInvS_.getRowPtr(alpha); k2Iunpack(ip,kp,static_cast(factorsInvS_.getCol(k2I))); psiDest_.fastAccess(i0_,taskNumber) += factorsInvSE_.getValue(kI)* factorsInvS_.getValue(k2I)* createAux2b(psiSrc_,ip,kp,jp,wsT_,we_,nk_); } } } else { SizeType ip = 0; SizeType beta = 0; SizeType kp = 0; SizeType jp = 0; for (int kI=factorsInvSE_.getRowPtr(xx); kIunpack(ip,beta,static_cast(factorsInvSE_.getCol(kI))); for (int k2I = factorsInvE_.getRowPtr(beta); k2I < factorsInvE_.getRowPtr(beta+1); k2I++) { pack2_->unpack(kp,jp,static_cast(factorsInvE_.getCol(k2I))); psiDest_.fastAccess(i0_,taskNumber) += factorsInvSE_.getValue(kI)* factorsInvE_.getValue(k2I)* createAux1b(psiSrc_,ip,kp,jp,ws_,weT_,nk_); } } } } private: // This class has pointers, disallow copy ctor and assignment template ParallelWftSu2(const ParallelWftSu2&); template ParallelWftSu2& operator=(const ParallelWftSu2&); template SparseElementType createAux2b(const SomeVectorType& psiSrc, SizeType ip, SizeType kp, SizeType jp, const SparseMatrixType& wsT, const SparseMatrixType& we, const VectorSizeType& nk) const { SizeType nalpha=dmrgWaveStruct_.lrs().left().permutationInverse().size(); assert(nalpha==wsT.cols()); const FactorsType* fptrE = dmrgWaveStruct_.lrs().right().getFactors(); assert(fptrE); const FactorsType& factorsE = *fptrE; const FactorsType* fptrSE = dmrgWaveStruct_.lrs().super().getFactors(); assert(fptrSE); const FactorsType& factorsSE = *fptrSE; SizeType volumeOfNk = this->volumeOf(nk); SparseElementType sum=0; SizeType kpjp = kp+jp*volumeOfNk; assert(kpjp SparseElementType createAux1b(const SomeVectorType& psiSrc, SizeType ip, SizeType kp, SizeType jp, const SparseMatrixType& ws, const SparseMatrixType& weT, const VectorSizeType& nk) const { SizeType volumeOfNk = volumeOf(nk); SizeType ni=dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).cols(); SizeType nip = dmrgWaveStruct_.lrs().left().permutationInverse().size()/volumeOfNk; const FactorsType* fptrS = dmrgWaveStruct_.lrs().left().getFactors(); assert(fptrS); const FactorsType& factorsS = *fptrS; const FactorsType* fptrSE = dmrgWaveStruct_.lrs().super().getFactors(); assert(fptrSE); const FactorsType& factorsSE = *fptrSE; SparseElementType sum=0; SizeType ipkp=ip+kp*nip; for (int k2I=factorsS.getRowPtr(ipkp);k2I class WaveFunctionTransfBase { public: typedef DmrgWaveStructType_ DmrgWaveStructType; typedef VectorWithOffsetType_ VectorWithOffsetType; typedef PsimagLite::PackIndices PackIndicesType; typedef typename DmrgWaveStructType::LeftRightSuperType LeftRightSuperType; typedef typename DmrgWaveStructType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef PsimagLite::Vector::Type VectorSizeType; typedef WftOptionsWftOptionsType; virtual void transformVector(VectorWithOffsetType& psiDest, const VectorWithOffsetType& psiSrc, const LeftRightSuperType& lrs, const VectorSizeType& nk) const = 0; virtual ~WaveFunctionTransfBase() {} protected: }; // class WaveFunctionTransfBase } // namespace Dmrg /*@}*/ #endif // WFT_BASE_H dmrgpp-6.02/src/Engine/Wft/WaveFunctionTransfFactory.h000066400000000000000000000350651414604301300227620ustar00rootroot00000000000000/* Copyright (c) 2009-2012-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file WaveFunctionTransfFactory.h * * This class implements the wave function transformation factory, * see PRL 77, 3633 (1996) * */ #ifndef WFT_FACTORY_H #define WFT_FACTORY_H #include "Utils.h" #include "ProgressIndicator.h" #include "WaveFunctionTransfLocal.h" #include "WaveStructCombined.h" #include "Io/IoSelector.h" #include "Random48.h" namespace Dmrg { template class WaveFunctionTransfFactory { typedef PsimagLite::IoSelector IoType; public: typedef PsimagLite::Vector::Type VectorSizeType; typedef PsimagLite::Vector::Type VectorStringType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BlockDiagonalMatrixType BlockDiagonalMatrixType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename SparseMatrixType::value_type SparseElementType; typedef typename PsimagLite::Vector::Type VectorType; typedef typename BasisWithOperatorsType::RealType RealType; typedef WaveStructCombined WaveStructCombinedType; typedef typename WaveStructCombinedType::VectorVectorRealType VectorVectorRealType; typedef typename WaveStructCombinedType::VectorMatrixType VectorMatrixType; typedef typename WaveStructCombinedType::VectorQnType VectorQnType; typedef VectorWithOffsetType_ VectorWithOffsetType; typedef WaveFunctionTransfBase WaveFunctionTransfBaseType; typedef WaveFunctionTransfLocal WaveFunctionTransfLocalType; typedef typename WaveFunctionTransfBaseType::WftOptionsType WftOptionsType; typedef typename WaveStructCombinedType::WaveStructSvdType WaveStructSvdType; template WaveFunctionTransfFactory(SomeParametersType& params, SizeType volumeOfSite0) : isEnabled_(!(params.options.isSet("nowft"))), wftOptions_(ProgramGlobals::DirectionEnum::INFINITE, params.options, true, true, params.denseSparseThreshold, params.gemmRnb, params.nthreads2), progress_("WaveFunctionTransf"), filenameIn_(params.checkpoint.filename()), filenameOut_(params.filename), waveStructCombined_(params.options.isSet("wftstacksondisk"), params.filename, params.options.isSet("observe")), wftImpl_(0), rng_(3433117), noLoad_(false), save_(!params.options.isSet("noSaveWft") && !params.options.isSet("minimizeDisk")) { if (!isEnabled_) return; bool b = (params.options.isSet("restart") || params.autoRestart); if (b) { if (params.options.isSet("noloadwft")) noLoad_=true; else read(); } else { if (params.options.isSet("noloadwft")) { PsimagLite::String str("Error: noloadwft needs restart or checkpoint\n"); throw PsimagLite::RuntimeError(str.c_str()); } } wftImpl_=new WaveFunctionTransfLocalType(waveStructCombined_, wftOptions_, volumeOfSite0); } ~WaveFunctionTransfFactory() { if (!isEnabled_) return; if (save_) { IoType::Out ioOut(filenameOut_, IoType::ACC_RDW); write(ioOut); } delete wftImpl_; } void setStage(ProgramGlobals::DirectionEnum stage) { if (stage == wftOptions_.dir) return; wftOptions_.dir = stage; wftOptions_.bounce = true; } void triggerOn() { bool allow = false; switch (wftOptions_.dir) { case ProgramGlobals::DirectionEnum::INFINITE: allow = false; break; case ProgramGlobals::DirectionEnum::EXPAND_SYSTEM: case ProgramGlobals::DirectionEnum::EXPAND_ENVIRON: allow = true; break; } // FIXME: Must check the below change when using SU(2)!! //if (m<0) allow = false; // isEnabled_=false; if (noLoad_) allow = false; if (!isEnabled_ || !allow) return; waveStructCombined_.beforeWft(wftOptions_.dir, wftOptions_.twoSiteDmrg, wftOptions_.bounce); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Window open, ready to transform vectors"; progress_.printline(msgg, std::cout); } // FIXME: change name to transformVector void setInitialVector(VectorWithOffsetType& dest, const VectorWithOffsetType& src, const LeftRightSuperType& lrs, const VectorSizeType& nk) const { bool allow=false; switch (wftOptions_.dir) { case ProgramGlobals::DirectionEnum::INFINITE: allow=false; break; case ProgramGlobals::DirectionEnum::EXPAND_SYSTEM: allow=true; break; case ProgramGlobals::DirectionEnum::EXPAND_ENVIRON: allow=true; break; } // FIXME: Must check the below change when using SU(2)!! //if (m<0) allow = false; // isEnabled_=false; if (noLoad_) allow = false; if (isEnabled_ && allow) { #ifndef NDEBUG RealType eps = 1e-12; RealType x = norm(src); bool b = (x1e-10); atmp = 1.0 / sqrt (atmp); for (SizeType i=0;i &value) const { value = std::complex(rng_() - 0.5, rng_() - 0.5); } void myRandomT(RealType &value) const { value = rng_() - 0.5; } void afterWft(const LeftRightSuperType& lrs) { waveStructCombined_.setLrs(lrs); waveStructCombined_.afterWft(wftOptions_.dir); wftOptions_.firstCall = false; wftOptions_.bounce = false; } void createVector(VectorWithOffsetType& psiDest, const VectorWithOffsetType& psiSrc, const LeftRightSuperType& lrs, const VectorSizeType& nk) const { RealType norm1 = norm(psiSrc); if (norm1 < 1e-5) std::cerr<<"WFT Factory: norm1 = " << norm1 << " < 1e-5\n"; wftImpl_->transformVector(psiDest, psiSrc, lrs, nk); RealType norm2 = norm(psiDest); PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<"Transformation completed "; if (fabs(norm1-norm2)>1e-5) { msg<<"WARNING: orig. norm= "<0); total--; return lrs.left().block()[total]; } return lrs.right().block()[0]; } void updateNoLoad(const LeftRightSuperType& lrs,SizeType center) { sitesSeen_.push_back(center); SizeType numberOfSites = lrs.super().block().size(); if (checkSites(numberOfSites)) { noLoad_=false; PsimagLite::OstringStream msgg(std::cout.precision()); PsimagLite::OstringStream::OstringStreamType& msg = msgg(); msg<<" now available"; progress_.printline(msgg, std::cout); } } bool checkSites(SizeType numberOfSites) const { assert(numberOfSites>0); for (SizeType i=1;i rng_; bool noLoad_; const bool save_; VectorSizeType sitesSeen_; }; // class WaveFunctionTransformation } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Engine/Wft/WaveFunctionTransfLocal.h000066400000000000000000000424701414604301300224030ustar00rootroot00000000000000/* Copyright (c) 2009-2013, 2017, UT-Battelle, LLC All rights reserved [DMRG++, Version 4.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file WaveFunctionTransfLocal.h * * This class implements the wave function transformation, see PRL 77, 3633 (1996) * this is for when NOT using SU(2) */ #ifndef WFT_LOCAL_HEADER_H #define WFT_LOCAL_HEADER_H #include "ProgressIndicator.h" #include "VectorWithOffsets.h" // so that PsimagLite::norm() becomes visible here #include "VectorWithOffset.h" // so that PsimagLite::norm() becomes visible here #include "WaveFunctionTransfBase.h" #include "MatrixOrIdentity.h" #include "ParallelWftOne.h" #include "Parallelizer.h" #include "MatrixVectorKron/KronMatrix.h" #include "WftAccelBlocks.h" #include "WftAccelPatches.h" #include "WftSparseTwoSite.h" #include "WftAccelSvd.h" #include "Profiling.h" namespace Dmrg { template class WaveFunctionTransfLocal : public WaveFunctionTransfBase { typedef WaveFunctionTransfBase BaseType; typedef typename BaseType::VectorSizeType VectorSizeType; typedef typename BaseType::PackIndicesType PackIndicesType; public: typedef typename BaseType::WftOptionsType WftOptionsType; typedef typename DmrgWaveStructType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisType::QnType QnType; typedef typename SparseMatrixType::value_type SparseElementType; typedef typename PsimagLite::Vector::Type VectorType; typedef typename BasisWithOperatorsType::RealType RealType; typedef typename DmrgWaveStructType::LeftRightSuperType LeftRightSuperType; typedef MatrixOrIdentity MatrixOrIdentityType; typedef ParallelWftOne ParallelWftType; typedef PsimagLite::Matrix MatrixType; typedef WftAccelBlocks WftAccelBlocksType; typedef WftAccelPatches WftAccelPatchesType; typedef WftSparseTwoSite WftSparseTwoSiteType; typedef WftAccelSvd WftAccelSvdType; WaveFunctionTransfLocal(const DmrgWaveStructType& dmrgWaveStruct, const WftOptionsType& wftOptions, SizeType volumeOfSite0) : dmrgWaveStruct_(dmrgWaveStruct), wftOptions_(wftOptions), wftAccelBlocks_(dmrgWaveStruct, wftOptions), wftAccelPatches_(dmrgWaveStruct, wftOptions), wftAccelSvd_(dmrgWaveStruct, wftOptions), volumeOfSite0_(volumeOfSite0) {} virtual void transformVector(VectorWithOffsetType& psiDest, const VectorWithOffsetType& psiSrc, const LeftRightSuperType& lrs, const VectorSizeType& nk) const { PsimagLite::Profiling profiling("WFT", std::cout); if (wftOptions_.dir == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON) { if (wftOptions_.firstCall) { transformVector1FromInfinite(psiDest,psiSrc,lrs,nk); } else if (wftOptions_.bounce) { transformVector1bounce(psiDest,psiSrc,lrs,nk); } else { transformVector1(psiDest,psiSrc,lrs,nk); } return; } if (wftOptions_.dir == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) { if (wftOptions_.firstCall) transformVector2FromInfinite(psiDest,psiSrc,lrs,nk); else if (wftOptions_.bounce) transformVector2bounce(psiDest,psiSrc,lrs,nk); else transformVector2(psiDest,psiSrc,lrs,nk); return; } err("WFT Local: Stage is not EXPAND_ENVIRON or EXPAND_SYSTEM\n"); } private: void transformVector1(VectorWithOffsetType& psiDest, const VectorWithOffsetType& psiSrc, const LeftRightSuperType& lrs, const VectorSizeType& nk) const { if (wftOptions_.twoSiteDmrg) return transformVector1FromInfinite(psiDest,psiSrc,lrs,nk); const ProgramGlobals::DirectionEnum dir1 = ProgramGlobals::DirectionEnum::EXPAND_ENVIRON; for (SizeType ii = 0; ii < psiDest.sectors(); ++ii) transformVectorParallel(psiDest, psiSrc, lrs, ii, nk, dir1); } void transformVectorParallel(VectorWithOffsetType& psiDest, const VectorWithOffsetType& psiSrc, const LeftRightSuperType& lrs, SizeType iNew, const VectorSizeType& nk, typename ProgramGlobals::DirectionEnum dir) const { if (wftOptions_.accel == WftOptionsType::ACCEL_PATCHES) { SizeType iOld = findIold(psiSrc, psiDest.qn(iNew)); return wftAccelPatches_(psiDest, iNew, psiSrc, iOld, lrs, nk, dir); } if (wftOptions_.accel == WftOptionsType::ACCEL_SVD) { SizeType iOld = findIold(psiSrc, psiDest.qn(iNew)); return wftAccelSvd_(psiDest, iNew, psiSrc, iOld, lrs, nk, dir); } SizeType i0 = psiDest.sector(iNew); typedef PsimagLite::Parallelizer ParallelizerType; ParallelizerType threadedWft(PsimagLite::Concurrency::codeSectionParams); ParallelWftType helperWft(psiDest, psiSrc, lrs, i0, nk, dmrgWaveStruct_, dir); threadedWft.loopCreate(helperWft); } void transformVector1FromInfinite(VectorWithOffsetType& psiDest, const VectorWithOffsetType& psiSrc, const LeftRightSuperType& lrs, const VectorSizeType& nk) const { for (SizeType ii=0;ii 1) return wftAccelBlocks_.environFromInfinite(psiDest, i0, psiSrc, iOld, lrs, nk); typedef PsimagLite::Parallelizer ParallelizerType; SparseMatrixType ws; dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).toSparse(ws); SparseMatrixType we; dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::ENVIRON).toSparse(we); SparseMatrixType weT; transposeConjugate(weT,we); ParallelizerType threadedWft(PsimagLite::Concurrency::codeSectionParams); WftSparseTwoSiteType helperWft(psiDest, i0, psiSrc, iOld, dmrgWaveStruct_, wftOptions_, lrs, nk, volumeOfSite0_, ws, weT, ProgramGlobals::SysOrEnvEnum::ENVIRON); threadedWft.loopCreate(helperWft); } // -------------------------- void transformVector2(VectorWithOffsetType& psiDest, const VectorWithOffsetType& psiSrc, const LeftRightSuperType& lrs, const VectorSizeType& nk) const { if (wftOptions_.twoSiteDmrg) return transformVector2FromInfinite(psiDest,psiSrc,lrs,nk); const ProgramGlobals::DirectionEnum dir2 = ProgramGlobals::DirectionEnum::EXPAND_SYSTEM; for (SizeType ii=0;ii ParallelizerType; assert(dmrgWaveStruct_.lrs().super().permutationInverse().size() == psiSrc.size()); bool inBlocks = (lrs.right().block().size() > 1 && wftOptions_.accel == WftOptionsType::ACCEL_BLOCKS); SparseMatrixType we; dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::ENVIRON).toSparse(we); SparseMatrixType ws; dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).toSparse(ws); SparseMatrixType wsT; transposeConjugate(wsT,ws); VectorType psiV; for (SizeType srcI = 0; srcI < psiSrc.sectors(); ++srcI) { SizeType srcII = psiSrc.sector(srcI); psiSrc.extract(psiV,srcII); for (SizeType ii=0;ii 0) psiDest.extract(dest,i0); if (inBlocks) { wftAccelBlocks_.systemFromInfinite(psiDest, i0, psiSrc, srcII, lrs, nk); continue; } else { ParallelizerType threadedWft(PsimagLite::Concurrency::codeSectionParams); WftSparseTwoSiteType helperWft(psiDest, i0, psiSrc, srcII, dmrgWaveStruct_, wftOptions_, lrs, nk, volumeOfSite0_, wsT, we, ProgramGlobals::SysOrEnvEnum::SYSTEM); threadedWft.loopCreate(helperWft); } } } } void transformVector1bounce(VectorWithOffsetType& psiDest, const VectorWithOffsetType& psiSrc, const LeftRightSuperType& lrs, const VectorSizeType& nk) const { SparseMatrixType ws; dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).toSparse(ws); MatrixOrIdentityType wsRef(wftOptions_.twoSiteDmrg, ws); for (SizeType ii=0;ii class WaveStructCombined { public: typedef LeftRightSuperType_ LeftRightSuperType; typedef WaveStructSvd WaveStructSvdType; typedef typename WaveStructSvdType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename WaveStructSvdType::BlockDiagonalMatrixType BlockDiagonalMatrixType; typedef typename WaveStructSvdType::VectorVectorRealType VectorVectorRealType; typedef typename WaveStructSvdType::VectorMatrixType VectorMatrixType; typedef typename WaveStructSvdType::VectorQnType VectorQnType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisType::BlockType VectorSizeType; typedef DiskOrMemoryStack WftStackType; WaveStructCombined(bool onDisk, const PsimagLite::String filename, bool isObserveCode) : lrs_("pSE", "pSprime", "pEprime"), wsStack_(onDisk, filename, "Wstacks", "system", isObserveCode), weStack_(onDisk, filename, "Wstacks", "environ", isObserveCode), needsPop_(false) {} void read(PsimagLite::IoNg::In& io, PsimagLite::String prefix) { lrs_.read(io, prefix); io.read(wsStack_, prefix + "/wsStack"); io.read(weStack_, prefix + "/weStack"); } void write(PsimagLite::IoNg::Out& io, PsimagLite::String prefix) const { writePartial(io, prefix); wsStack_.write(prefix + "/wsStack", io.serializer()); weStack_.write(prefix + "/weStack", io.serializer()); } void write(PsimagLite::IoNg::Out& io, PsimagLite::String prefix) { writePartial(io, prefix); wsStack_.write(prefix + "/wsStack", io.serializer()); weStack_.write(prefix + "/weStack", io.serializer()); } void beforeWft(ProgramGlobals::DirectionEnum dir, bool twoSiteDmrg, bool bounce) { WftStackType& stack = (dir == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON) ? wsStack_ : weStack_; const PsimagLite::String label = (dir == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON) ? "system" : "environ"; needsPop_ = false; if (twoSiteDmrg) { if (stack.size() == 0) err("Stack for " + label + " is empty\n"); if (stack.size() > 1) stack.pop(); else needsPop_ = true; return; } assert(!twoSiteDmrg); if (stack.size() > 1 && bounce) stack.pop(); else needsPop_ = true; } void afterWft(ProgramGlobals::DirectionEnum dir) { WftStackType& stack = (dir == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON) ? wsStack_ : weStack_; const PsimagLite::String label = (dir == ProgramGlobals::DirectionEnum::EXPAND_ENVIRON) ? "system" : "environ"; if (!needsPop_) return; assert(needsPop_); if (stack.size() == 0) err("Stack for " + label + " is empty\n"); stack.pop(); needsPop_ = false; } void push(const BlockDiagonalMatrixType& transform, ProgramGlobals::DirectionEnum direction, const VectorMatrixType& vts, const VectorVectorRealType& s, const VectorQnType& qns, ProgramGlobals::DirectionEnum dir) { WaveStructSvdType wave(transform, vts, s, qns); switch (dir) { case ProgramGlobals::DirectionEnum::INFINITE: if (direction == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) { wsStack_.push(wave); } else { weStack_.push(wave); } break; case ProgramGlobals::DirectionEnum::EXPAND_ENVIRON: if (direction != ProgramGlobals::DirectionEnum::EXPAND_ENVIRON) err("EXPAND_ENVIRON but option==0\n"); weStack_.push(wave); break; case ProgramGlobals::DirectionEnum::EXPAND_SYSTEM: if (direction != ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) err("EXPAND_SYSTEM but option==1\n"); wsStack_.push(wave); break; } } void setLrs(const LeftRightSuperType& lrs) { lrs_.dontCopyOperators(lrs); } const WaveStructSvdType& getWave(ProgramGlobals::SysOrEnvEnum sysOrEnv) const { assert(sysOrEnv == ProgramGlobals::SysOrEnvEnum::SYSTEM || weStack_.size() > 0); assert(sysOrEnv != ProgramGlobals::SysOrEnvEnum::SYSTEM || wsStack_.size() > 0); return (sysOrEnv == ProgramGlobals::SysOrEnvEnum::SYSTEM) ? wsStack_.top() : weStack_.top(); } const LeftRightSuperType& lrs() const { return lrs_; } const BlockDiagonalMatrixType& getTransform(ProgramGlobals::SysOrEnvEnum dir) const { return getWave(dir).u(); } SizeType size(ProgramGlobals::SysOrEnvEnum sysOrEnv) const { return (sysOrEnv == ProgramGlobals::SysOrEnvEnum::SYSTEM) ? wsStack_.size() : weStack_.size(); } private: void writePartial(PsimagLite::IoSelector::Out& io, PsimagLite::String prefix) const { io.createGroup(prefix); lrs_.write(io, prefix, BasisWithOperatorsType::SaveEnum::ALL, false); } LeftRightSuperType lrs_; WftStackType wsStack_; WftStackType weStack_; bool needsPop_; }; } #endif // WAVESTRUCTCOMBINED_H dmrgpp-6.02/src/Engine/Wft/WaveStructSvd.h000066400000000000000000000134751414604301300204310ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file WaveStructSvd.h * * DOC NEEDED FIXME (This file should go in Wft/ directory perhaps) */ #ifndef WAVE_STRUCT_SVD_H #define WAVE_STRUCT_SVD_H #include "ProgramGlobals.h" #include "Vector.h" #include "Io/IoNg.h" namespace Dmrg { template struct WaveStructSvd { typedef LeftRightSuperType_ LeftRightSuperType; typedef typename LeftRightSuperType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::BlockDiagonalMatrixType BlockDiagonalMatrixType; typedef typename BasisWithOperatorsType::OperatorType OperatorType; typedef typename OperatorType::StorageType SparseMatrixType; typedef typename SparseMatrixType::value_type SparseElementType; typedef typename BasisWithOperatorsType::BasisType BasisType; typedef typename BasisType::QnType QnType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename BasisWithOperatorsType::RealType RealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename PsimagLite::Vector::Type VectorVectorRealType; typedef typename PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorMatrixType; typedef typename BasisWithOperatorsType::VectorQnType VectorQnType; typedef typename PsimagLite::IoNg::In IoInType; enum class SaveEnum {ALL}; WaveStructSvd() {} WaveStructSvd(IoInType& io, PsimagLite::String label, bool) { read(label, io.serializer()); } WaveStructSvd(const BlockDiagonalMatrixType& u, const VectorMatrixType& vts, const VectorVectorRealType& s, const VectorQnType& qns) : u_(u), vts_(vts), // Not yet used, will be used by WftAccelSvd s_(s), // Not yet used, will be used by WftAccelSvd qns_(qns) {} const BlockDiagonalMatrixType& u() const { return u_; } const VectorMatrixType& vts() const { return vts_; } const VectorVectorRealType& s() const { return s_; } const VectorQnType& qns() const { return qns_; } void read(PsimagLite::IoNg::In& io, PsimagLite::String prefix) { io.read(*this, prefix); } void read(PsimagLite::String prefix, PsimagLite::IoNgSerializer& io) { u_.read(prefix + "/u", io); io.read(vts_, prefix + "/vts"); io.read(s_, prefix + "/s"); QnType::readVector(qns_, prefix + "/qns", io); } void write(PsimagLite::IoNg::Out& io, PsimagLite::String prefix, PsimagLite::IoNgSerializer::WriteMode writeMode, SaveEnum) const { if (writeMode != PsimagLite::IoNgSerializer::ALLOW_OVERWRITE) io.createGroup(prefix); io.write(u_, prefix + "/u", writeMode); io.write(vts_, prefix + "/vts", writeMode); io.write(s_, prefix + "/s", writeMode); io.write(qns_, prefix + "/qns", writeMode); } void write(PsimagLite::String prefix, PsimagLite::IoNgSerializer& io) const { io.createGroup(prefix); u_.write(prefix + "/u", io); io.write(prefix + "/vts", vts_); io.write(prefix + "/s", s_); io.write(prefix + "/qns", qns_); } private: BlockDiagonalMatrixType u_; VectorMatrixType vts_; VectorVectorRealType s_; VectorQnType qns_; }; // struct WaveStructSvd } // namespace Dmrg /*@}*/ #endif // WAVE_STRUCT_SVD_H dmrgpp-6.02/src/Engine/Wft/WftAccelBlocks.h000066400000000000000000000531521414604301300204670ustar00rootroot00000000000000#ifndef WFTACCELBLOCKS_H #define WFTACCELBLOCKS_H #include "Matrix.h" #include "BLAS.h" #include "ProgramGlobals.h" #include #include #include "GemmR.h" namespace Dmrg { template class WftAccelBlocks { typedef typename WaveFunctionTransfBaseType::DmrgWaveStructType DmrgWaveStructType; typedef typename WaveFunctionTransfBaseType::WftOptionsType WftOptionsType; typedef typename WaveFunctionTransfBaseType::VectorWithOffsetType VectorWithOffsetType; typedef typename WaveFunctionTransfBaseType::VectorSizeType VectorSizeType; typedef typename DmrgWaveStructType::LeftRightSuperType LeftRightSuperType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef typename VectorType::value_type ComplexOrRealType; typedef typename PsimagLite::Real::Type RealType; typedef typename DmrgWaveStructType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorMatrixType; typedef typename WaveFunctionTransfBaseType::PackIndicesType PackIndicesType; class ParallelWftInBlocks { public: ParallelWftInBlocks(VectorMatrixType& result, const VectorMatrixType& psi, const MatrixType& ws, const MatrixType& we, SizeType volumeOfNk, const ProgramGlobals::SysOrEnvEnum sysOrEnv, SizeType threads, SizeType gemmRnb, SizeType threadsForGemmR) : result_(result), psi_(psi), ws_(ws), we_(we), volumeOfNk_(volumeOfNk), sysOrEnv_(sysOrEnv), storage_(threads), gemmRnb_(gemmRnb), threadsForGemmR_(threadsForGemmR) {} SizeType tasks() const { return volumeOfNk_; } void doTask(SizeType kp, SizeType threadNum) { if (sysOrEnv_ == ProgramGlobals::SysOrEnvEnum::SYSTEM) return doTaskSystem(kp); doTaskEnviron(kp, threadNum); } private: void doTaskEnviron(SizeType kp, SizeType threadNum) { #if (0) SizeType ipsize = ws_.rows(); SizeType i2psize = ws_.cols(); SizeType jp2size = we_.rows(); SizeType jpsize = we_.cols(); #endif const int nrow_W_S = ws_.rows(); const int ncol_W_S = ws_.cols(); const int nrow_W_E = we_.rows(); const int ncol_W_E = we_.cols(); // // -------------------------------- // Compute Ynew = W_S * Yold * W_E // -------------------------------- const int nrow_Yold = ncol_W_S; const int ncol_Yold = nrow_W_E; const int nrow_Ynew = nrow_W_S; const int ncol_Ynew = ncol_W_E; result_[kp].resize(nrow_Ynew, ncol_Ynew); result_[kp].setTo(0.0); const MatrixType& weModif = getWeModif(we_, threadNum); #if 0 const int idebug = 0; #endif int nrow_Ytemp = 0; int ncol_Ytemp = 0; // --------------------------- // Compute Ynew = W_S * Yold * W_E // as // Method 1 // (1) Ytemp = W_S * Yold // (2) Ynew = Ytemp * W_E // need 2 * nrow_W_S * ncol_W_S * ncol_Yold flops + // 2 * nrow_Ytemp * ncol_Ytemp * ncol_W_E flops // or // Method 2: // (1) Ytemp = Yold * W_E // (2) Ynew = W_S * Ytemp // need 2 * nrow_Yold * ncol_Yold * ncol_W_E flops + // 2 * nrow_W_S * ncol_W_S * ncol_Ytemp flops // --------------------------- const ComplexOrRealType *Yold = &((psi_[kp])(0,0)); const int ldYold = nrow_Yold; const ComplexOrRealType *W_E = &(weModif(0,0)); const int ldW_E = nrow_W_E; const ComplexOrRealType *W_S = &(ws_(0,0)); const int ldW_S = nrow_W_S; ComplexOrRealType *Ynew = &((result_[kp])(0,0)); const int ldYnew = nrow_Ynew; // ---------------------- // Method 1 // (1) Ytemp = W_S * Yold // (2) Ynew = Ytemp * W_E // ---------------------- nrow_Ytemp = nrow_W_S; ncol_Ytemp = ncol_Yold; const RealType flops_method_1 = 2.0 * nrow_W_S * ncol_W_S * ncol_Yold + 2.0 * nrow_Ytemp * ncol_Ytemp * ncol_W_E; // ------------------------ // Method 2: // (1) Ytemp = Yold * W_E // (2) Ynew = W_S * Ytemp // ------------------------ nrow_Ytemp = nrow_Yold; ncol_Ytemp = ncol_W_E; const RealType flops_method_2 = 2.0 * nrow_Yold * ncol_Yold * ncol_W_E + 2.0 * nrow_W_S * ncol_W_S * ncol_Ytemp ; const bool use_method_1 = (flops_method_1 <= flops_method_2); #if 0 if (idebug >= 1) { std::cout << "WftAccelBlocks.h:146: " << " use_method_1=" << use_method_1 << std::scientific << " flops_method_1=" << flops_method_1 << " flops_method_2=" << flops_method_2 << std::defaultfloat << "\n"; } #endif const ComplexOrRealType d_one = 1.0; const ComplexOrRealType d_zero = 0.0; // --------------------------- // Compute Ynew = W_S * (Yold * W_E) // --------------------------- // // Note Y = kron(A,B) * X = B * X * transpose(A) // // Ynew = kron( transpose(W_E), W_S) * Yold // ------------------------------------------ // ----------------------------- // Method 1: Ytemp = W_S * Yold // Method 2: Ytemp = Yold * W_E // ----------------------------- nrow_Ytemp = (use_method_1) ? nrow_W_S : nrow_Yold; ncol_Ytemp = (use_method_1) ? ncol_Yold : ncol_W_E; MatrixType tmp(nrow_Ytemp, ncol_Ytemp); tmp.setTo(0.0); ComplexOrRealType *Ytemp = &(tmp(0,0)); const int ldYtemp = nrow_Ytemp; static const bool needsPrinting = false; PsimagLite::GemmR gemmR(needsPrinting, gemmRnb_, threadsForGemmR_); if (use_method_1) { // ------------------ // Method 1: // Ytemp = W_S * Yold // Ynew = Ytemp * W_E // ------------------ // ------------------ // Ytemp = W_S * Yold // ------------------ { const int mm = nrow_Ytemp; const int nn = ncol_Ytemp; const int kk = nrow_Yold; const ComplexOrRealType alpha = d_one; const ComplexOrRealType beta = d_zero; assert( ncol_W_S == nrow_Yold ); assert( nrow_Ytemp == nrow_W_S ); assert( ncol_Ytemp == ncol_Yold ); gemmR( 'N', 'N', mm, nn, kk, alpha, W_S, ldW_S, Yold, ldYold, beta, Ytemp, ldYtemp ); } // ------------------- // Ynew = Ytemp * W_E // ------------------- { const int mm = nrow_Ynew; const int nn = ncol_Ynew; const int kk = ncol_Ytemp; const ComplexOrRealType alpha = d_one; const ComplexOrRealType beta = d_zero; assert( nrow_Ynew == nrow_Ytemp ); assert( ncol_Ynew == ncol_W_E ); assert( ncol_Ytemp == nrow_W_E ); gemmR( 'N', 'N', mm, nn, kk, alpha, Ytemp, ldYtemp, W_E, ldW_E, beta, Ynew, ldYnew ); } } else { // -------------------- // Method 2: // Ytemp = Yold * W_E // Ynew = W_S * Ytemp // -------------------- // ------------------ // Ytemp = Yold * W_E // ------------------ { const ComplexOrRealType alpha = d_one; const ComplexOrRealType beta = d_zero; const int mm = nrow_Ytemp; const int nn = ncol_Ytemp; const int kk = ncol_Yold; assert( nrow_Ytemp == nrow_Yold ); assert( ncol_Ytemp == ncol_W_E ); assert( ncol_Yold == nrow_W_E ); gemmR('N', 'N', mm, nn, kk, alpha, Yold, ldYold, W_E, ldW_E, beta, Ytemp, ldYtemp ); } // ------------------ // Ynew = W_S * Ytemp // ------------------ { const ComplexOrRealType alpha = d_one; const ComplexOrRealType beta = d_zero; const int mm = nrow_Ynew; const int nn = ncol_Ynew; const int kk = ncol_W_S; assert( nrow_Ynew == nrow_W_S); assert( ncol_Ynew == ncol_Ytemp); assert( ncol_W_S == nrow_Ytemp ); gemmR('N', 'N', mm, nn, kk, alpha, W_S, ldW_S, Ytemp, ldYtemp, beta, Ynew, ldYnew ); } }; } void doTaskSystem(SizeType kp) { #if (0) SizeType ipSize = ws_.rows(); SizeType isSize = ws_.cols(); SizeType jenSize = we_.rows(); SizeType jprSize = we_.cols(); #endif #if 0 const int idebug = 0; #endif const int nrow_W_S = ws_.rows(); const int ncol_W_S = ws_.cols(); const int nrow_W_E = we_.rows(); const int ncol_W_E = we_.cols(); // ------------------------------------------------- // Note Y = kron(A,B) * X = B * X * transpose(A) // // Ynew = kron( W_E, conj(transpose(W_S)) * Yold // ------------------------------------------------- const int nrow_Yold = nrow_W_S; const int ncol_Yold = ncol_W_E; const int nrow_Ynew = ncol_W_S; const int ncol_Ynew = nrow_W_E; int nrow_Ytemp = 0; int ncol_Ytemp = 0; result_[kp].resize(nrow_Ynew, ncol_Ynew); result_[kp].setTo(0.0); const ComplexOrRealType *Yold = &((psi_[kp])(0,0)); const int ldYold = nrow_Yold; const ComplexOrRealType *W_E = &(we_(0,0)); const int ldW_E = nrow_W_E; ComplexOrRealType *Ynew = &((result_[kp])(0,0)); const int ldYnew = nrow_Ynew; const ComplexOrRealType *W_S = &(ws_(0,0)); const int ldW_S = nrow_W_S; const ComplexOrRealType d_one = 1.0; const ComplexOrRealType d_zero = 0.0; // --------------------------------------------------- // Ynew = conj(transpose(W_S)) * Yold * transpose(W_E) // --------------------------------------------------- // // Method 1: // (1) Ytemp = conj( transpose(W_S)) * Yold // (2) Ynew = Ytemp * transpose(W_E) // // need 2.0 * nrow_W_S * ncol_W_S * ncol_Yold + // 2.0 * nrow_Ytemp * ncol_Ytemp * nrow_W_E // Method 2: // (1) Ytemp = Yold * transpose(W_E) // (2) Ynew = conj(transpose(W_S)) * Ytemp // // need 2.0 * nrow_Yold * ncol_Yold * nrow_W_E + // 2.0 * nrow_W_S * ncol_W_S * ncol_Ytemp // --------------------------------------------------- // --------------------------------------- // Method 1: // (1) Ytemp = conj( transpose(W_S)) * Yold // (2) Ynew = Ytemp * transpose(W_E) // --------------------------------------- nrow_Ytemp = ncol_W_S; ncol_Ytemp = ncol_Yold; const RealType flops_method_1 = 2.0 * nrow_W_S * ncol_W_S * ncol_Yold + 2.0 * nrow_Ytemp * ncol_Ytemp * nrow_W_E; // ----------------------- // Method 2: // (1) Ytemp = Yold * transpose(W_E) // (2) Ynew = conj(transpose(W_S)) * Ytemp // ----------------------- nrow_Ytemp = nrow_Yold; ncol_Ytemp = nrow_W_E; const RealType flops_method_2 = 2.0 * nrow_Yold * ncol_Yold * nrow_W_E + 2.0 * nrow_W_S * ncol_W_S * ncol_Ytemp; const bool use_method_1 = (flops_method_1 <= flops_method_2); #if 0 if (idebug >= 1) { std::cout << "WftAccelBlocks.h:360: " << " use_method_1=" << use_method_1 << std::scientific << " flops_method_1=" << flops_method_1 << " flops_method_2=" << flops_method_2 << std::defaultfloat << "\n"; } #endif nrow_Ytemp = (use_method_1) ? ncol_W_S : nrow_Yold; ncol_Ytemp = (use_method_1) ? ncol_Yold : nrow_W_E; MatrixType tmp(nrow_Ytemp, ncol_Ytemp); tmp.setTo(0.0); ComplexOrRealType *Ytemp = &(tmp(0,0)); const int ldYtemp = nrow_Ytemp; static const bool needsPrinting = false; PsimagLite::GemmR gemmR(needsPrinting, gemmRnb_, threadsForGemmR_); if (use_method_1) { // --------------------------- // Method 1: // (1) Ytemp = conj( transpose(W_S)) * Yold // (2) Ynew = Ytemp * transpose(W_E) // --------------------------- // ----------------------------------------- // (1) Ytemp = conj( transpose(W_S)) * Yold // ----------------------------------------- { const ComplexOrRealType alpha = d_one; const ComplexOrRealType beta = d_zero; const int mm = nrow_Ytemp; const int nn = ncol_Ytemp; const int kk = nrow_Yold; gemmR('C', 'N', mm,nn,kk, alpha, W_S, ldW_S, Yold, ldYold, beta, Ytemp, ldYtemp ); } // ---------------------------------- // (2) Ynew = Ytemp * transpose(W_E) // ---------------------------------- { const ComplexOrRealType alpha = d_one; const ComplexOrRealType beta = d_zero; const int mm = nrow_Ynew; const int nn = ncol_Ynew; const int kk = ncol_Ytemp; gemmR('N', 'T', mm,nn,kk, alpha, Ytemp, ldYtemp, W_E, ldW_E, beta, Ynew, ldYnew ); } } else { // -------------------------------------- // Method 2: // (1) Ytemp = Yold * transpose(W_E) // (2) Ynew = conj(transpose(W_S)) * Ytemp // -------------------------------------- // ------------------------------- // Ytemp = Yold * transpose( W_E ) // ------------------------------- { const ComplexOrRealType alpha = d_one; const ComplexOrRealType beta = d_zero; const int mm = nrow_Ytemp; const int nn = ncol_Ytemp; const int kk = ncol_Yold; gemmR('N', 'T', mm, nn, kk, alpha, Yold, ldYold, W_E, ldW_E, beta, Ytemp, ldYtemp ); } // ------------------------------------ // Ynew = conj(transpose(W_S)) * Ytemp // ------------------------------------ { const ComplexOrRealType alpha = d_one; const ComplexOrRealType beta = d_zero; const int mm = nrow_Ynew; const int nn = ncol_Ynew; const int kk = nrow_Ytemp; gemmR('C', 'N', mm, nn, kk, alpha, W_S, ldW_S, Ytemp, ldYtemp, beta, Ynew, ldYnew); } }; } const MatrixType& getWeModif(const PsimagLite::Matrix& m, SizeType) { return m; } const MatrixType& getWeModif(const PsimagLite::Matrix >& m, SizeType threadNum) { storage_[threadNum].clear(); SizeType rows = m.rows(); SizeType cols = m.cols(); storage_[threadNum].resize(rows, cols); for (SizeType j = 0; j < cols; ++j) for (SizeType i = 0; i < rows; ++i) storage_[threadNum](i, j) = PsimagLite::conj(m(i, j)); return storage_[threadNum]; } VectorMatrixType& result_; const VectorMatrixType& psi_; const MatrixType& ws_; const MatrixType& we_; SizeType volumeOfNk_; const ProgramGlobals::SysOrEnvEnum sysOrEnv_; VectorMatrixType storage_; SizeType gemmRnb_; SizeType threadsForGemmR_; }; public: WftAccelBlocks(const DmrgWaveStructType& dmrgWaveStruct, const WftOptionsType& wftOptions) : dmrgWaveStruct_(dmrgWaveStruct), wftOptions_(wftOptions) {} void environFromInfinite(VectorWithOffsetType& psiDest, SizeType i0, const VectorWithOffsetType& psiSrc, SizeType i0src, const LeftRightSuperType& lrs, const VectorSizeType& nk) const { if (lrs.left().block().size() < 2) err("Bounce!?\n"); SizeType volumeOfNk = ProgramGlobals::volumeOf(nk); MatrixType ws; dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).toDense(ws); MatrixType we; dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::ENVIRON).toDense(we); SizeType i2psize = ws.cols(); SizeType jp2size = we.rows(); VectorMatrixType psi(volumeOfNk); for (SizeType kp = 0; kp < volumeOfNk; ++kp) { psi[kp].resize(i2psize, jp2size); psi[kp].setTo(0.0); } environPreparePsi(psi, psiSrc, i0src, volumeOfNk); VectorMatrixType result(volumeOfNk); SizeType threads = std::min(volumeOfNk, PsimagLite::Concurrency::codeSectionParams.npthreads); typedef PsimagLite::Parallelizer ParallelizerType; PsimagLite::CodeSectionParams codeSectionParams(threads); ParallelizerType threadedWft(codeSectionParams); ParallelWftInBlocks helperWft(result, psi, ws, we, volumeOfNk, ProgramGlobals::SysOrEnvEnum::ENVIRON, threads, wftOptions_.gemmRnb, wftOptions_.threadsForGemmR); threadedWft.loopCreate(helperWft); environCopyOut(psiDest, i0, result, lrs, volumeOfNk); } void systemFromInfinite(VectorWithOffsetType& psiDest, SizeType i0, const VectorWithOffsetType& psiSrc, SizeType i0src, const LeftRightSuperType& lrs, const VectorSizeType& nk) const { if (lrs.right().block().size() < 2) err("Bounce!?\n"); SizeType volumeOfNk = ProgramGlobals::volumeOf(nk); MatrixType ws; dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).toDense(ws); MatrixType we; dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::ENVIRON).toDense(we); SizeType ipSize = ws.rows(); SizeType jprSize = we.cols(); VectorMatrixType psi(volumeOfNk); for (SizeType kp = 0; kp < volumeOfNk; ++kp) { psi[kp].resize(ipSize, jprSize); psi[kp].setTo(0.0); } systemPreparePsi(psi, psiSrc, i0src, volumeOfNk); VectorMatrixType result(volumeOfNk); SizeType threads = std::min(volumeOfNk, PsimagLite::Concurrency::codeSectionParams.npthreads); typedef PsimagLite::Parallelizer ParallelizerType; PsimagLite::CodeSectionParams codeSectionParams(threads); ParallelizerType threadedWft(codeSectionParams); ParallelWftInBlocks helperWft(result, psi, ws, we, volumeOfNk, ProgramGlobals::SysOrEnvEnum::SYSTEM, threads, wftOptions_.gemmRnb, wftOptions_.threadsForGemmR); threadedWft.loopCreate(helperWft); systemCopyOut(psiDest, i0, result, lrs, volumeOfNk); } private: void environPreparePsi(VectorMatrixType& psi, const VectorWithOffsetType& psiSrc, SizeType i0src, SizeType volumeOfNk) const { SizeType total = psiSrc.effectiveSize(i0src); SizeType offset = psiSrc.offset(i0src); PackIndicesType packSuper(dmrgWaveStruct_.lrs().left().size()); PackIndicesType packLeft(dmrgWaveStruct_.lrs().left().size()/volumeOfNk); for (SizeType x = 0; x < total; ++x) { SizeType alpha = 0; SizeType jp2 = 0; packSuper.unpack(alpha, jp2, dmrgWaveStruct_.lrs().super().permutation(x + offset)); SizeType ip2 = 0; SizeType kp = 0; packLeft.unpack(ip2, kp, dmrgWaveStruct_.lrs().left().permutation(alpha)); psi[kp](ip2, jp2) += psiSrc.fastAccess(i0src, x); } } void environCopyOut(VectorWithOffsetType& psiDest, SizeType i0, const VectorMatrixType& result, const LeftRightSuperType& lrs, SizeType volumeOfNk) const { SizeType nip = lrs.super().permutationInverse().size()/ lrs.right().permutationInverse().size(); PackIndicesType pack1(nip); PackIndicesType pack2(volumeOfNk); SizeType total = psiDest.effectiveSize(i0); SizeType start = psiDest.offset(i0); for (SizeType x = 0; x < total; ++x) { SizeType ip = 0; SizeType beta = 0; pack1.unpack(ip, beta, lrs.super().permutation(x+start)); SizeType kp = 0; SizeType jp = 0; pack2.unpack(kp, jp, lrs.right().permutation(beta)); psiDest.fastAccess(i0, x) += result[kp](ip, jp); } } void systemPreparePsi(VectorMatrixType& psi, const VectorWithOffsetType& psiSrc, SizeType i0src, SizeType volumeOfNk) const { SizeType total = psiSrc.effectiveSize(i0src); SizeType offset = psiSrc.offset(i0src); PackIndicesType packSuper(dmrgWaveStruct_.lrs().left().size()); PackIndicesType packRight(volumeOfNk); for (SizeType y = 0; y < total; ++y) { SizeType ip = 0; SizeType jp = 0; packSuper.unpack(ip, jp, dmrgWaveStruct_.lrs().super().permutation(y + offset)); SizeType jpl = 0; SizeType jpr = 0; packRight.unpack(jpl, jpr, dmrgWaveStruct_.lrs().right().permutation(jp)); psi[jpl](ip, jpr) = psiSrc.fastAccess(i0src, y); } } void systemCopyOut(VectorWithOffsetType& psiDest, SizeType i0, const VectorMatrixType& result, const LeftRightSuperType& lrs, SizeType volumeOfNk) const { SizeType nip = lrs.left().permutationInverse().size()/volumeOfNk; SizeType nalpha = lrs.left().permutationInverse().size(); PackIndicesType pack1(nalpha); PackIndicesType pack2(nip); SizeType total = psiDest.effectiveSize(i0); SizeType start = psiDest.offset(i0); for (SizeType x = 0; x < total; ++x) { SizeType isn = 0; SizeType jen = 0; pack1.unpack(isn, jen, lrs.super().permutation(x+start)); SizeType is = 0; SizeType jpl = 0; pack2.unpack(is, jpl, lrs.left().permutation(isn)); psiDest.fastAccess(i0, x) += result[jpl](is, jen); } } const DmrgWaveStructType& dmrgWaveStruct_; const WftOptionsType& wftOptions_; }; } #endif // WFTACCELBLOCKS_H dmrgpp-6.02/src/Engine/Wft/WftAccelPatches.h000066400000000000000000000050701414604301300206350ustar00rootroot00000000000000#ifndef WFTACCELPATCHES_H #define WFTACCELPATCHES_H #include "Matrix.h" #include "BLAS.h" #include "ProgramGlobals.h" #include "MatrixVectorKron/GenIjPatch.h" #include "BlockDiagWf.h" namespace Dmrg { template class WftAccelPatches { typedef typename WaveFunctionTransfBaseType::DmrgWaveStructType DmrgWaveStructType; typedef typename WaveFunctionTransfBaseType::WftOptionsType WftOptionsType; typedef typename WaveFunctionTransfBaseType::VectorWithOffsetType VectorWithOffsetType; typedef typename WaveFunctionTransfBaseType::VectorSizeType VectorSizeType; typedef typename DmrgWaveStructType::LeftRightSuperType LeftRightSuperType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef typename VectorType::value_type ComplexOrRealType; typedef typename DmrgWaveStructType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename WaveFunctionTransfBaseType::PackIndicesType PackIndicesType; typedef typename DmrgWaveStructType::BlockDiagonalMatrixType BlockDiagonalMatrixType; typedef typename BlockDiagonalMatrixType::BuildingBlockType MatrixType; typedef GenIjPatch GenIjPatchType; typedef BlockDiagWf BlockDiagWfType; public: WftAccelPatches(const DmrgWaveStructType& dmrgWaveStruct, const WftOptionsType& wftOptions) : dmrgWaveStruct_(dmrgWaveStruct), wftOptions_(wftOptions) {} void operator()(VectorWithOffsetType& psiDest, SizeType iNew, const VectorWithOffsetType& psiSrc, SizeType iOld, const LeftRightSuperType& lrs, const VectorSizeType& nk, typename ProgramGlobals::DirectionEnum dir) const { char charLeft = (dir == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? 'C' : 'N'; char charRight = (dir == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) ? 'T' : 'N'; BlockDiagWfType psi(psiSrc, iOld, dmrgWaveStruct_.lrs()); psi.transform(charLeft, charRight, dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM), dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::ENVIRON), wftOptions_.gemmRnb, wftOptions_.threadsForGemmR); psi.toVectorWithOffsets(psiDest, iNew, lrs, nk, dir); } private: const DmrgWaveStructType& dmrgWaveStruct_; const WftOptionsType& wftOptions_; }; } #endif // WFTACCELPATCHES_H dmrgpp-6.02/src/Engine/Wft/WftAccelSvd.h000066400000000000000000000232101414604301300177760ustar00rootroot00000000000000#ifndef WFT_ACCEL_SVD_H #define WFT_ACCEL_SVD_H #include "Vector.h" #include "BLAS.h" #include #include "ProgramGlobals.h" namespace Dmrg { template class WftAccelSvd { typedef typename WaveFunctionTransfBaseType::DmrgWaveStructType DmrgWaveStructType; typedef typename DmrgWaveStructType::WaveStructSvdType WaveStructSvdType; typedef typename WaveFunctionTransfBaseType::WftOptionsType WftOptionsType; typedef typename WaveFunctionTransfBaseType::VectorWithOffsetType VectorWithOffsetType; typedef typename WaveFunctionTransfBaseType::VectorSizeType VectorSizeType; typedef typename DmrgWaveStructType::LeftRightSuperType LeftRightSuperType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef typename VectorType::value_type ComplexOrRealType; typedef typename DmrgWaveStructType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::VectorQnType VectorQnType; typedef typename BasisWithOperatorsType::QnType QnType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef typename WaveFunctionTransfBaseType::PackIndicesType PackIndicesType; typedef typename DmrgWaveStructType::BlockDiagonalMatrixType BlockDiagonalMatrixType; typedef typename BlockDiagonalMatrixType::BuildingBlockType MatrixType; typedef typename PsimagLite::Vector::Type VectorMatrixType; typedef typename PsimagLite::Vector::Type VectorVectorType; typedef typename PsimagLite::Real::Type RealType; typedef typename PsimagLite::Vector::Type VectorRealType; class LoopOne { public: LoopOne(const MatrixType& u, const MatrixType& vPrime, const VectorQnType& q, const MatrixType& uTildePrime, const MatrixType& vTildePrimePrime, const VectorQnType& qTilde) : u_(u), vPrime_(vPrime), q_(q), uTildePrime_(uTildePrime), vTildePrimePrime_(vTildePrimePrime), qTilde_(qTilde), npatches_(std::max(u_.size(), uTildePrime_.size())), uFinal_(std::min(u_.size(), uTildePrime_.size())) { assert(u.size() == vPrime.size()); assert(u.size() == q.size()); assert(uTildePrime.size() == vTildePrimePrime.size()); asserT(uTildePrime.size() == qTilde.size()); } SizeType tasks() const { return npatches_; } void doTask(SizeType patchBig, SizeType) { const VectorQnType& qSmall = (q_.size() > qTilde_.size()) ? qTilde_ : q_; const VectorQnType& qBig = (q_.size() > qTilde_.size()) ? q_ : qTilde_; const QnType& q1 = qBig[patchBig]; int patchSmall = indexOrMinusOne(qSmall, q1); if (patchSmall < 0) return; SizeType patch = (q_.size() > qTilde_.size()) ? patchBig : patchSmall; SizeType patchTilde = (q_.size() > qTilde_.size()) ? patchSmall : patchBig; uFinal_[patchSmall] = uTildePrime_[patchTilde]*u_[patch]; vPrimeFinal_[patchSmall] = vPrime_[patchTilde]*vTildePrimePrime_[patch]; } const VectorMatrixType& uFinal() const { return uFinal_; } const VectorMatrixType& vPrimeFinal() const { return vPrimeFinal_; } const VectorQnType& qns() const { return (q_.size() > qTilde_.size()) ? qTilde_ : q_; } private: const VectorMatrixType& u_; const VectorMatrixType& vPrime_; const VectorQnType& q_; const VectorMatrixType& uTildePrime_; const VectorMatrixType& vTildePrimePrime_; const VectorQnType& qTilde_; SizeType npatches_; VectorMatrixType uFinal_; VectorMatrixType vPrimeFinal_; }; // class LoopOne class LoopTwo { public: LoopTwo(const MatrixType& ufinal, const MatrixType& vPrimeFinal, const VectorQnType& qnsFinal, const VectorType& d, const VectorQnType& qnsOfD) : uFinal_(ufinal), vPrimeFinal_(vPrimeFinal), qnsFinal_(qnsFinal), d_(d), qnsOfD_(qnsOfD), patches_(std::max(qnsFinal.size(), qnsOfD.size())), result_(std::min(qnsFinal.size(), qnsOfD.size())) { assert(ufinal.size() == vPrimeFinal.size()); assert(ufinal.size() == qnsFinal.size()); assert(d.size() == qnsOfD.size()); } SizeType tasks() const { return patches_; } // U[patch] D V'[patch] *D[patch] void doTask(SizeType patchBig, SizeType) { const VectorQnType& qSmall = (qnsFinal_.size() > qnsOfD_.size()) ? qnsOfD_ : qnsFinal_; const VectorQnType& qBig = (qnsFinal_.size() > qnsOfD_.size()) ? qnsFinal_ : qnsOfD_; const QnType& q1 = qBig[patchBig]; int patchSmall = indexOrMinusOne(qSmall, q1); if (patchSmall < 0) return; SizeType patch = (qnsFinal_.size() > qnsOfD_.size()) ? patchBig : patchSmall; SizeType patchOfD = (qnsFinal_.size() > qnsOfD_.size()) ? patchSmall : patchBig; const MatrixType& u = uFinal_[patch]; const MatrixType& vprime = vPrimeFinal_[patch]; const VectorType& d = d_[patchOfD]; SizeType itotal = u.rows(); SizeType ktotal = u.cols(); assert(ktotal = d.size()); SizeType jtotal = vprime.cols(); assert(vprime.rows() == ktotal); for (SizeType i = 0; i < itotal; ++i) { for (SizeType k = 0; k < ktotal; ++k) { ComplexOrRealType prod = u(i, k)*d[k]; for (SizeType j = 0; j < jtotal; ++j) { result_[patchSmall](i, j) += prod*vprime(k, j); } } } } private: const VectorMatrixType& uFinal_; const VectorMatrixType& vPrimeFinal_; const VectorQnType& qnsFinal_; const VectorVectorType& d_; const VectorQnType& qnsOfD_; SizeType patches_; VectorMatrixType result_; }; // class LoopTwo public: WftAccelSvd(const DmrgWaveStructType& dmrgWaveStruct, const WftOptionsType& wftOptions) : dmrgWaveStruct_(dmrgWaveStruct), wftOptions_(wftOptions) { } void operator()(VectorWithOffsetType& psiDest, SizeType iNew, const VectorWithOffsetType& psiSrc, SizeType iOld, const LeftRightSuperType& lrs, const VectorSizeType& nk, typename ProgramGlobals::DirectionEnum dir) const { // typename ProgramGlobals::SysOrEnvEnum prevPart = (dir == ProgramGlobals::EXPAND_SYSTEM) ? // ProgramGlobals::SYSTEM : ProgramGlobals::ENVIRON; // const WaveStructSvdType& wavePrev = dmrgWaveStruct_.getWave(prevPart); // typename ProgramGlobals::SysOrEnvEnum oppoPart = (dir == ProgramGlobals::EXPAND_SYSTEM) ? // ProgramGlobals::ENVIRON : ProgramGlobals::SYSTEM; // const WaveStructSvdType& waveOld = dmrgWaveStruct_.getWave(oppoPart); // internal(waveOld.u(), // waveOld.vts(), // waveOld.qns(), // wavePrev.u(), // wavePrev.vts(), // wavePrev.qns(), // wavePrev.s()); } private: void internal(const VectorMatrixType& uVeryOld, const VectorMatrixType& vPrimeVeryOld, const VectorQnType& qnsVeryOld, const VectorMatrixType& uPrevious, const VectorMatrixType& vPrimePrevious, const VectorQnType& qnsPrevious, const VectorVectorType& sPrevious) { err("WftAccelSvd: Not ready yet\n"); VectorMatrixType uPreviousPinv; pinv(uPreviousPinv, uPrevious); VectorMatrixType vPrimePreviousPinv; pinv(vPrimePreviousPinv, vPrimePrevious); LoopOne loopOne(uVeryOld, vPrimeVeryOld, qnsVeryOld, uPreviousPinv, vPrimePreviousPinv, qnsPrevious); typedef PsimagLite::Parallelizer ParallelizerOneType; SizeType threads = std::min(std::max(qnsVeryOld.size(), qnsPrevious.size()), PsimagLite::Concurrency::codeSectionParams.npthreads); PsimagLite::CodeSectionParams codeSectionParams(threads); ParallelizerOneType threadOne(codeSectionParams); threadOne.loopCreate(loopOne); typedef PsimagLite::Parallelizer ParallelizerTwoType; LoopTwo loopTwo(loopOne.uFinal(), loopOne.vPrimeFinal(), loopOne.qns(), sPrevious, qnsPrevious); ParallelizerTwoType threadTwo(codeSectionParams); threadTwo.loopCreate(loopTwo); } static void pinv(VectorMatrixType& dest, const VectorMatrixType& src) { SizeType n = src.size(); dest.resize(n); for (SizeType i = 0; i < n; ++i) pinvOne(dest[i], src[i]); } static void pinvOne(MatrixType& dest, const MatrixType& src) { dest = src; VectorRealType s; MatrixType vt; svd('A', dest, s, vt); SizeType rows = dest.rows(); SizeType cols = vt.cols(); RealType epsilon = *std::max_element(s.begin(), s.end())* std::max(rows, cols)*std::numeric_limits::epsilon(); SizeType n = biggerThanEpsilon(s, epsilon); MatrixType uoneTranspose(n, rows); MatrixType voneTimeStoTheMinusOne(cols, n); for (SizeType i = 0; i < n; ++i) { for (SizeType r = 0; r < rows; ++r) uoneTranspose(i, r) = dest(r, i); for (SizeType c = 0; c < cols; ++c) voneTimeStoTheMinusOne(c, i) = vt(i, c)/s[i]; } dest.resize(cols, rows); ComplexOrRealType alpha = 1; ComplexOrRealType beta = 0; psimag::BLAS::GEMM('N', 'N', cols, rows, n, alpha, &(voneTimeStoTheMinusOne(0,0)), cols, &(uoneTranspose(0,0)), n, beta, dest, cols); } static SizeType biggerThanEpsilon(const VectorRealType& v, RealType epsilon) { SizeType n = v.size(); for (SizeType i = 0; i < n; ++i) if (std::abs(v[i]) < epsilon) return i; return n; } const DmrgWaveStructType& dmrgWaveStruct_; const WftOptionsType& wftOptions_; }; // class WftAccelSvd } #endif // WFT_ACCEL_SVD_H dmrgpp-6.02/src/Engine/Wft/WftHelper.h000066400000000000000000000031561414604301300175400ustar00rootroot00000000000000#ifndef WFTHELPER_H #define WFTHELPER_H #include "Vector.h" namespace Dmrg { template class WftHelper { public: typedef typename PsimagLite::Vector::Type VectorVectorWithOffsetType; typedef typename ModelType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::LeftRightSuperType LeftRightSuperType; typedef PsimagLite::Vector::Type VectorSizeType; WftHelper(const ModelType& model, const LeftRightSuperType& lrs, const WaveFunctionTransfType& wft) : model_(model), lrs_(lrs), wft_(wft) {} void wftSome(VectorVectorWithOffsetType& tvs, SizeType site, SizeType begin, SizeType end) const { for (SizeType index = begin; index < end; ++index) { assert(index < tvs.size()); const VectorWithOffsetType& src = tvs[index]; if (src.size() == 0) continue; VectorWithOffsetType phiNew; wftOneVector(phiNew, src, site); tvs[index] = phiNew; } } void wftOneVector(VectorWithOffsetType& phiNew, const VectorWithOffsetType& src, SizeType site) const { phiNew.populateFromQns(src, lrs_.super()); // OK, now that we got the partition number right, let's wft: VectorSizeType nk(1, model_.hilbertSize(site)); wft_.setInitialVector(phiNew, src, lrs_, nk); } private: const ModelType& model_; const LeftRightSuperType& lrs_; const WaveFunctionTransfType& wft_; }; } #endif // WFTHELPER_H dmrgpp-6.02/src/Engine/Wft/WftOptions.h000066400000000000000000000056411414604301300177550ustar00rootroot00000000000000#ifndef WFTOPTIONS_H #define WFTOPTIONS_H #include "Complex.h" namespace Dmrg { template struct WftOptions { typedef typename VectorWithOffsetType_::value_type ComplexOrRealType; typedef typename PsimagLite::Real::Type RealType; enum AccelEnum {ACCEL_NONE, ACCEL_PATCHES, ACCEL_BLOCKS, ACCEL_SVD}; WftOptions(ProgramGlobals::DirectionEnum dir1, const OptionsType& options, bool f, bool b, RealType d, SizeType gemmRnb_, SizeType threadsForGemmR_) : twoSiteDmrg(options.isSet("twositedmrg")), kronLoadBalance(options.isSet("KronLoadBalance")), firstCall(f), bounce(b), dir(dir1), accel((twoSiteDmrg) ? ACCEL_BLOCKS : ACCEL_PATCHES), denseSparseThreshold(d), gemmRnb(gemmRnb_), threadsForGemmR(threadsForGemmR_) { if (options.isSet("wftAccelPatches")) accel = ACCEL_PATCHES; if (options.isSet("wftAccelSvd")) accel = ACCEL_SVD; if (options.isSet("wftNoAccel")) accel = ACCEL_NONE; if (accel == ACCEL_SVD && twoSiteDmrg) err("wftAccelSvd not yet supported with twositedmrg\n"); } void read(PsimagLite::IoSelector::In& io, PsimagLite::String label) { io.read(dir, label + "/dir"); io.read(twoSiteDmrg, label + "/twoSiteDmrg"); io.read(accel, label + "/accel"); io.read(kronLoadBalance, label + "/kronLoadBalance"); io.read(firstCall, label + "/firstCall"); io.read(bounce, label + "/bounce"); io.read(denseSparseThreshold, label + "/denseSparseThreshold"); try { io.read(gemmRnb, label + "/gemmRnb"); io.read(threadsForGemmR, label + "/threadsForGemmR"); } catch (...) { PsimagLite::String msg("WARNING: WFTOptions::read(): "); PsimagLite::String msg2("No gemmRnb or threadsForGemmR\n"); std::cout< class WftSparseTwoSite { typedef typename WaveFunctionTransfBaseType::DmrgWaveStructType DmrgWaveStructType; typedef typename WaveFunctionTransfBaseType::WftOptionsType WftOptionsType; typedef typename WaveFunctionTransfBaseType::VectorWithOffsetType VectorWithOffsetType; typedef typename WaveFunctionTransfBaseType::VectorSizeType VectorSizeType; typedef typename DmrgWaveStructType::LeftRightSuperType LeftRightSuperType; typedef typename VectorWithOffsetType::VectorType VectorType; typedef typename VectorType::value_type ComplexOrRealType; typedef typename DmrgWaveStructType::BasisWithOperatorsType BasisWithOperatorsType; typedef typename BasisWithOperatorsType::SparseMatrixType SparseMatrixType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorMatrixType; typedef typename WaveFunctionTransfBaseType::PackIndicesType PackIndicesType; public: WftSparseTwoSite(VectorWithOffsetType& dest, SizeType i0, const VectorWithOffsetType& src, SizeType iOld, const DmrgWaveStructType& dmrgWaveStruct, const WftOptionsType& wftOptions, const LeftRightSuperType& lrs, const VectorSizeType& nk, SizeType volumeOfSite0, const SparseMatrixType& wsT, const SparseMatrixType& we, const ProgramGlobals::SysOrEnvEnum sysOrEnv) : dest_(dest), i0_(i0), src_(src), iOld_(iOld), dmrgWaveStruct_(dmrgWaveStruct), wftOptions_(wftOptions), lrs_(lrs), wsT_(wsT), we_(we), volumeOfNk_(ProgramGlobals::volumeOf(nk)), pack1_((sysOrEnv == ProgramGlobals::SysOrEnvEnum::SYSTEM) ? lrs.left().permutationInverse().size() : lrs.super().permutationInverse().size()/ lrs.right().permutationInverse().size()), pack2_((sysOrEnv == ProgramGlobals::SysOrEnvEnum::SYSTEM) ? lrs.left().permutationInverse().size()/volumeOfNk_ : volumeOfNk_), sysOrEnv_(sysOrEnv) { assert(sysOrEnv == ProgramGlobals::SysOrEnvEnum::SYSTEM || sysOrEnv == ProgramGlobals::SysOrEnvEnum::ENVIRON); if (sysOrEnv == ProgramGlobals::SysOrEnvEnum::SYSTEM) { assert(lrs.left().permutationInverse().size()/volumeOfNk_ == dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).cols()); } else { assert(lrs.left().permutationInverse().size() == volumeOfSite0 || lrs.left().permutationInverse().size() == dmrgWaveStruct_. getTransform(ProgramGlobals::SysOrEnvEnum::SYSTEM).rows()); assert(lrs.right().permutationInverse().size()/volumeOfNk_ == dmrgWaveStruct_.getTransform(ProgramGlobals::SysOrEnvEnum::ENVIRON).cols()); } } SizeType tasks() const { return dest_.effectiveSize(i0_); } void doTask(SizeType x, SizeType) { SizeType destOffset = dest_.offset(i0_); if (sysOrEnv_ == ProgramGlobals::SysOrEnvEnum::SYSTEM) { SizeType isn = 0; SizeType jen = 0; pack1_.unpack(isn, jen, lrs_.super().permutation(x + destOffset)); SizeType is = 0; SizeType jpl = 0; pack2_.unpack(is, jpl, lrs_.left().permutation(isn)); dest_.fastAccess(i0_, x) += createAux2bFromInfinite(is, jpl, jen); } else { SizeType ip = 0; SizeType beta = 0; pack1_.unpack(ip, beta, lrs_.super().permutation(x + destOffset)); SizeType kp = 0; SizeType jp = 0; pack2_.unpack(kp, jp, lrs_.right().permutation(beta)); dest_.fastAccess(i0_, x) += createAux1bFromInfinite(ip, kp, jp); } } private: ComplexOrRealType createAux2bFromInfinite(SizeType is, SizeType jpl, SizeType jen) const { SizeType offset = src_.offset(iOld_); SizeType offsetPlusOne = dmrgWaveStruct_.lrs().super().partition(iOld_ + 1); SizeType nalpha=dmrgWaveStruct_.lrs().left().permutationInverse().size(); SizeType ni = dmrgWaveStruct_.lrs().right().size()/volumeOfNk_; MatrixOrIdentityType weRef(wftOptions_.twoSiteDmrg && ni>volumeOfNk_,we_); SizeType start = wsT_.getRowPtr(is); SizeType end = wsT_.getRowPtr(is+1); ComplexOrRealType sum=0; for (SizeType k2=weRef.getRowPtr(jen);k2= offsetPlusOne || y < offset) continue; y -= offset; sum2 += wsT_.getValue(k)*src_.fastAccess(iOld_, y)*weRef.getValue(k2); } sum += sum2; } return sum; } ComplexOrRealType createAux1bFromInfinite(SizeType ip, SizeType kp, SizeType jp) const { SizeType offset = src_.offset(iOld_); const SparseMatrixType& ws = wsT_; const SparseMatrixType& weT = we_; SizeType ni= dmrgWaveStruct_.lrs().left().size(); SizeType nip = dmrgWaveStruct_.lrs().left().permutationInverse().size()/volumeOfNk_; MatrixOrIdentityType wsRef2(wftOptions_.twoSiteDmrg && nip>volumeOfNk_, ws); SizeType start = weT.getRowPtr(jp); SizeType end = weT.getRowPtr(jp+1); ComplexOrRealType sum=0; for (SizeType k3=wsRef2.getRowPtr(ip);k3(const char transA, const char transB, const PsimagLite::CrsMatrix& a, const PsimagLite::CrsMatrix& b, const PsimagLite::Vector::Type& yin, SizeType offsetY, PsimagLite::Vector::Type& xout, SizeType offsetX, const RealType); template void csr_kron_mult >(const char transA, const char transB, const PsimagLite::CrsMatrix >&, const PsimagLite::CrsMatrix >&, const PsimagLite::Vector >::Type& yin, SizeType offsetY, PsimagLite::Vector >::Type& xout, SizeType offsetX, const RealType); //----------------------------------------------------------------------------------- template void den_csr_kron_mult(const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::CrsMatrix&, const PsimagLite::Vector::Type& yin, SizeType offsetY, PsimagLite::Vector::Type& xout, SizeType offsetX, const RealType, PsimagLite::GemmR&); template void den_csr_kron_mult >(const char transA, const char transB, const PsimagLite::Matrix >& a_, const PsimagLite::CrsMatrix >&, const PsimagLite::Vector >::Type& yin, SizeType offsetY, PsimagLite::Vector >::Type& xout, SizeType offsetX, const RealType, PsimagLite::GemmR >&); //----------------------------------------------------------------------------------- template void den_kron_mult(const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::Matrix& b_, const PsimagLite::Vector::Type& yin, SizeType offsetY, PsimagLite::Vector::Type& xout, SizeType offsetX, const RealType, PsimagLite::GemmR&); template void den_kron_mult >(const char transA, const char transB, const PsimagLite::Matrix >& a_, const PsimagLite::Matrix >& b_, const PsimagLite::Vector >::Type& yin, SizeType offsetY, PsimagLite::Vector >::Type& xout, SizeType offsetX, const RealType, PsimagLite::GemmR >&); //----------------------------------------------------------------------------------- template void csr_den_kron_mult(const char transA, const char transB, const PsimagLite::CrsMatrix&, const PsimagLite::Matrix& b_, const PsimagLite::Vector::Type& yin, SizeType offsetY, PsimagLite::Vector::Type& xout, SizeType offsetX, const RealType, PsimagLite::GemmR&); template void csr_den_kron_mult >(const char transA, const char transB, const PsimagLite::CrsMatrix >&, const PsimagLite::Matrix >& b_, const PsimagLite::Vector >::Type& yin, SizeType offsetY, PsimagLite::Vector >::Type& xout, SizeType offsetX, const RealType, PsimagLite::GemmR >&); dmrgpp-6.02/src/KronUtil/KronUtil.h000066400000000000000000000055661414604301300172200ustar00rootroot00000000000000#ifndef KRON_UTIL_HEADER_H #define KRON_UTIL_HEADER_H #include #include "Vector.h" #include "Matrix.h" #include "CrsMatrix.h" #include "GemmR.h" template void csr_kron_mult(const char transA, const char transB, const PsimagLite::CrsMatrix& a, const PsimagLite::CrsMatrix& b, const typename PsimagLite::Vector::Type& yin, SizeType offsetY, typename PsimagLite::Vector::Type& xout, SizeType offsetX, const typename PsimagLite::Real::Type); //----------------------------------------------------------------------------------- template void den_csr_kron_mult(const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::CrsMatrix&, const typename PsimagLite::Vector::Type& yin, SizeType offsetY, typename PsimagLite::Vector::Type& xout, SizeType offsetX, const typename PsimagLite::Real::Type, PsimagLite::GemmR&); //----------------------------------------------------------------------------------- template void den_kron_mult(const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::Matrix& b_, const typename PsimagLite::Vector::Type& yin, SizeType offsetY, typename PsimagLite::Vector::Type& xout, SizeType offsetX, const typename PsimagLite::Real::Type, PsimagLite::GemmR&); //----------------------------------------------------------------------------------- template void csr_den_kron_mult( const char transA, const char transB, const PsimagLite::CrsMatrix&, const PsimagLite::Matrix& b_, const typename PsimagLite::Vector::Type& yin, SizeType offsetY, typename PsimagLite::Vector::Type& xout, SizeType offsetX, const typename PsimagLite::Real::Type, PsimagLite::GemmR&); #endif dmrgpp-6.02/src/KronUtil/KronUtilWrapper.h000066400000000000000000000054641414604301300205560ustar00rootroot00000000000000#ifndef KRON_UTIL_WRAPPER_H #define KRON_UTIL_WRAPPER_H #ifndef DO_NOT_USE_KRON_UTIL #include "KronUtil.h" #else #include "ProgramGlobals.h" #include "Matrix.h" template void csr_kron_mult(const char transA, const char transB, const PsimagLite::CrsMatrix&, const PsimagLite::CrsMatrix&, const typename PsimagLite::Vector::Type& yin, SizeType offsetY, typename PsimagLite::Vector::Type& xout, SizeType offsetX) { PsimagLite::String msg("csr_kron_mult: please #undefine DO_NOT_USE_KRON_UTIL"); msg += " and link against libkronutil\n"; throw PsimagLite::RuntimeError(msg); } template void csr_den_kron_mult(const char transA, const char transB, const PsimagLite::CrsMatrix&, const PsimagLite::Matrix& b_, const typename PsimagLite::Vector::Type& yin, SizeType offsetY, typename PsimagLite::Vector::Type& xout, SizeType offsetX) { PsimagLite::String msg("csr_den_kron_mult: please #undefine DO_NOT_USE_KRON_UTIL"); msg += " and link against libkronutil\n"; throw PsimagLite::RuntimeError(msg); } template void den_csr_kron_mult(const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::CrsMatrix&, const typename PsimagLite::Vector::Type& yin, SizeType offsetY, typename PsimagLite::Vector::Type& xout, SizeType offsetX) { PsimagLite::String msg("den_csr_kron_mult: please #undefine DO_NOT_USE_KRON_UTIL"); msg += " and link against libkronutil\n"; throw PsimagLite::RuntimeError(msg); } template void den_kron_mult(const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::Matrix& b_, const typename PsimagLite::Vector::Type& yin, SizeType offsetY, typename PsimagLite::Vector::Type& xout, SizeType offsetX) { PsimagLite::String msg("den_kron_mult: please #undefine DO_NOT_USE_KRON_UTIL"); msg += " and link against libkronutil\n"; throw PsimagLite::RuntimeError(msg); } #endif #endif // KRON_UTIL_WRAPPER_H dmrgpp-6.02/src/KronUtil/MatrixDenseOrSparse.h000066400000000000000000000127441414604301300213470ustar00rootroot00000000000000#ifndef MATRIXDENSEORSPARSE_H #define MATRIXDENSEORSPARSE_H #include "Vector.h" #include "KronUtilWrapper.h" #include "Matrix.h" #include "CrsMatrix.h" namespace Dmrg { template class MatrixDenseOrSparse { public: typedef typename SparseMatrixType::value_type value_type; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Real::Type RealType; typedef typename PsimagLite::Vector::Type VectorType; typedef PsimagLite::Vector::Type VectorIntType; explicit MatrixDenseOrSparse(const SparseMatrixType& sparse, const RealType& threshold) : isDense_(sparse.nonZeros() > static_cast(threshold* sparse.rows()* sparse.cols())), sparseMatrix_(sparse) { sparseMatrix_.checkValidity(); if (isDense_) // A(i,j) at val[ (i) + (j)*nrow ] crsMatrixToFullMatrix(denseMatrix_, sparse); } explicit MatrixDenseOrSparse(const SizeType nrows, const SizeType ncols, bool isDense_in ) : isDense_( isDense_in ), sparseMatrix_(nrows,ncols), denseMatrix_(0,0) { if (isDense_) { denseMatrix_.clear(); denseMatrix_.resize(nrows,ncols ); } else { sparseMatrix_.resize(nrows,ncols); }; } explicit MatrixDenseOrSparse(const SizeType nrows, const SizeType ncols, bool isDense_in, SizeType nonzeros ) : isDense_( isDense_in ), sparseMatrix_(nrows,ncols), denseMatrix_(0,0) { if (isDense_) { denseMatrix_.clear(); denseMatrix_.resize(nrows,ncols ); } else { sparseMatrix_.resize(nrows,ncols); sparseMatrix_.reserve( nonzeros ); }; } void conjugate() { SparseMatrixType& nonconst = const_cast(sparseMatrix_); nonconst.conjugate(); if (isDense_) denseMatrix_.conjugate(); } bool isDense() const { return isDense_; } SizeType rows() const { return sparseMatrix_.rows(); } SizeType cols() const { return sparseMatrix_.cols(); } const PsimagLite::Matrix& dense() const { if (!isDense_) throw PsimagLite::RuntimeError("FATAL: Matrix isn't dense\n"); return denseMatrix_; } const SparseMatrixType& sparse() const { if (isDense_) throw PsimagLite::RuntimeError("FATAL: Matrix isn't sparse\n"); sparseMatrix_.checkValidity(); return sparseMatrix_; } bool isZero() const { return (isDense_) ? PsimagLite::isZero(denseMatrix_) : PsimagLite::isZero(sparseMatrix_); } SparseMatrixType toSparse() const { return (isDense_) ? SparseMatrixType(denseMatrix_) : sparse(); } const PsimagLite::CrsMatrix& getSparse() const { assert( !isDense_ ); return( sparseMatrix_ ); } PsimagLite::CrsMatrix& getSparse() { assert( !isDense_ ); return( sparseMatrix_ ); } const PsimagLite::Matrix& getDense() const { assert( isDense_ ); return( denseMatrix_ ); } PsimagLite::Matrix& getDense() { assert( isDense_ ); return( denseMatrix_ ); } private: bool isDense_; PsimagLite::CrsMatrix sparseMatrix_; PsimagLite::Matrix denseMatrix_; }; // class MatrixDenseOrSparse template void kronMult(typename PsimagLite::Vector::Type& xout, SizeType offsetX, const typename PsimagLite::Vector::Type& yin, SizeType offsetY, char transA, char transB, const MatrixDenseOrSparse& A, const MatrixDenseOrSparse& B, const typename PsimagLite::Real::Type denseFlopDiscount, PsimagLite::GemmR& gemmR) { const bool isDenseA = A.isDense(); const bool isDenseB = B.isDense(); if (isDenseA) { if (isDenseB) { den_kron_mult(transA, transB, A.dense(), B.dense(), yin, offsetY, xout, offsetX, denseFlopDiscount, gemmR); } else { // B is sparse den_csr_kron_mult(transA, transB, A.dense(), B.sparse(), yin, offsetY, xout, offsetX, denseFlopDiscount, gemmR); } } else { // A is sparse if (isDenseB) { csr_den_kron_mult(transA, transB, A.sparse(), B.dense(), yin, offsetY, xout, offsetX, denseFlopDiscount, gemmR); } else { // B is sparse csr_kron_mult(transA, transB, A.sparse(), B.sparse(), yin, offsetY, xout, offsetX, denseFlopDiscount); }; }; } // kron_mult } // namespace Dmrg #endif // MATRIXDENSEORSPARSE_H dmrgpp-6.02/src/KronUtil/README000066400000000000000000000057461414604301300161600ustar00rootroot00000000000000/* * This directory is part of DMRG++ * * Contributed by [by Ed D'Azevedo, Oak Ridge National Laboratory] * * The full software license for DMRG++ * can be found in file LICENSE in the root directory of the code. */ ----------------------------------------------------------------------- DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ----------------------------------------------------------------------- Performance critical routines for kronecker product Note csr_*.c routines assume sparse matrices in Compressed Sparse Row (CSR) format. Note den_*.c routines assume dense matrix in Fortran ordering den2csr: convert dense matrix to compressed sparse storage den_gen_matrix: generate a random matrix based, accept entries based on a threshold den_copymat: copy 2 dense matrices den_zero: zero out a dense matrix den_kron_form: explicit form the large dense kronecker product den_kron_form_general: explicit form the large dense kronecker product with options for transA, transB den_submatrix: extract a submatrix, B = A( rindex(:), cindex(:) ) den_matmul_pre: perform X + op(A) * Y, op(A) can be A or transpose(A) den_nnz: number of nonzeros in matrix den_transpose: form the matrix transpose den_kron_mult: peform X += kron( op(A), op(B)) * Y den_kron_submatrix: extra a submatrix out of kronecker product den_matmul_post: perform X += Y * op(A), op(A) can be A or transpose(A) ----------------- Similar routines for compressed sparse row (CSR) format. For example csr_matmul_kron: perform X += kron( op(A), op(B)) * Y, by A, B are in CSR format csr_matmul_pre: perform X += op(A) * Y, op(A) is A or transpose(A), A in CSR format csr_matmul_post: perform X += Y * op(A), op(A) is A or transpose(A), A in CSR format csr_submatrix: extract a submatrix B = A( rindex(:), cindex(:) ) csr_kron_submatrix: extract a submatrix of kron(A,B) without first forming kron(A,B) csr_nnz: number of nonzeros csr_transpose: form matrix transpose in CSR format dmrgpp-6.02/src/KronUtil/configure.pl000077500000000000000000000043661414604301300176160ustar00rootroot00000000000000#!/usr/bin/perl =pod Copyright (c) 2009-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] ********************************************************* THE SOFTWARE IS SUPPLIED 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. Please see full open source license included in file LICENSE. ********************************************************* =cut use warnings; use strict; use lib "../../../PsimagLite/scripts"; use NewMake; use PsiTag; my ($cfiles, $flavor, $gccdash) = @ARGV; # defined($cfiles) or $cfiles = "../../../dmrgpp/TestSuite/inputs/ConfigBase.psiTag"; defined($cfiles) or $cfiles = "../../dmrgpp/TestSuite/inputs/ConfigBase.psiTag"; defined($flavor) or $flavor = NewMake::noFlavor(); defined($gccdash) or $gccdash = ""; my @names = ("KronUtil", "util", "utilComplex", "csc_nnz"); my @drivers; my $dotos = ""; my $total= scalar(@names); for (my $i = 0; $i < $total; ++$i) { my $name = $names[$i]; my %dmrgDriver = (name => $name, aux => 1); push @drivers,\%dmrgDriver; $dotos .= " $name.o "; } createMakefile($cfiles, $flavor, $gccdash); sub createMakefile { my ($cfiles, $flavor, $gccdash) = @_; NewMake::backupMakefile(); unlink("Makefile.dep"); my $fh; open($fh, ">", "Makefile") or die "Cannot open Makefile for writing: $!\n"; my %args; $args{"code"} = "KronUtil"; $args{"additional3"} = "libkronutil.a test1 test2"; $args{"path"} = "../"; $args{"configFiles"} = getConfigFiles($cfiles); $args{"flavor"} = $flavor; NewMake::main($fh, \%args, \@drivers); local *FH = $fh; print FH< void coord2csr(const int nrow_A, const int ncol_A, const int nnz, const int ilist[], const int jlist[], const ComplexOrRealType alist[], int arowptr[], int acol[], ComplexOrRealType aval[] ) { /* * -------------------------------------- * convert from coordinate storage format * "i j aij" * to compressed sparse row format * * need arowptr[] to have size nrow_A + 1 * need acol[] to have size nnz * need aval[] to have size nnz * -------------------------------------- */ int* nnz_row = new int[nrow_A]; { int ia = 0; for(ia=0; ia < nrow_A; ia++) { nnz_row[ia] = 0; }; } /* * ------------------------ * check ilist(:), jlist(:) * ------------------------ */ #ifndef NDEBUG { int k = 0; for(k = 0; k < nnz; k++) { int ia = ilist[k]; int ja = jlist[k]; int isok_ia = (0 <= ia) && (ia < nrow_A); int isok_ja = (0 <= ja) && (ja < ncol_A); assert( isok_ia ); assert( isok_ja ); }; } #endif /* * ------------------------------------------------- * first pass to compute number of non-zeros per row * ------------------------------------------------- */ { int k = 0; for(k=0; k < nnz; k++) { int ia = ilist[k]; nnz_row[ia] += 1; }; } /* * ------------------------------ * prefix sum to setup row poiner * ------------------------------ */ { int ia = 0; arowptr[0] = 0; for(ia=0; ia < nrow_A; ia++) { arowptr[ia+1] = arowptr[ia] + nnz_row[ia]; }; for(ia=0; ia < nrow_A; ia++) { nnz_row[ia] = 0; }; } /* * ------------------------------------------------------------- * second pass to fill in data into compressed sparse row format * ------------------------------------------------------------- */ { int k = 0; for(k=0; k < nnz; k++) { int ia = ilist[k]; int ja = jlist[k]; ComplexOrRealType aij = alist[k]; int ipos = arowptr[ia] + nnz_row[ia]; acol[ipos] = ja; aval[ipos] = aij; nnz_row[ia] += 1; }; } delete[] nnz_row; } dmrgpp-6.02/src/KronUtil/csc_kron_mult.cpp000066400000000000000000000207601414604301300206370ustar00rootroot00000000000000#include "util.h" template void csc_kron_mult_method(const int imethod, const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const typename PsimagLite::Vector::Type& aval, const int nrow_B, const int ncol_B, const PsimagLite::Vector::Type& bcolptr, const PsimagLite::Vector::Type& brow, const typename PsimagLite::Vector::Type& bval, const PsimagLite::Matrix& yin, PsimagLite::Matrix& xout) { const int nrow_X = nrow_B; const int ncol_X = nrow_A; const int nrow_Y = ncol_B; const int ncol_Y = ncol_A; int nnz_A = csc_nnz( ncol_A, acolptr ); int nnz_B = csc_nnz( ncol_B, bcolptr ); int has_work = (nnz_A >= 1) && (nnz_B >= 1); assert((imethod == 1) || (imethod == 2) || (imethod == 3)); if (!has_work) { return; }; /* * ------------------------------------------------------------- * A and B are in compressed sparse COLUMN format * * X += kron( A, B) * Y * that can be computed as either * imethod == 1 * * X(ib,ia) += (B(ib,jb) * Y(jb,ja) ) * transpose(A(ia,ja) or * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * BY is nrow_B by ncol_A, need 2*nnz(B)*ncolA flops * * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) need 2*nnz(A)*nrowB flops * * imethod == 2 * * X(ib,ia) += B(ib,jb) * (Y(jb,ja) * transpose(A)) or * YAt(jb,ia) = Y(jb,ja) * transpose(A(ia,ja)) * YAt is ncolB by nrowA, need 2*nnz(A) * ncolB flops * * X(ib,ia) += B(ib,jb) * YAt(jb,ia) need nnz(B) * nrowA flops * * imethod == 3 * * X += kron(A,B) * Y by visiting all non-zero entries in A, B * * this is feasible only if A and B are very sparse, need nnz(A)*nnz(B) flops * ------------------------------------------------------------- */ if (imethod == 1) { /* * -------------------------------------------- * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * * X(ib,ia) += BY(ib,ja ) * transpose(A(ia,ja)) * -------------------------------------------- */ /* * --------------- * setup BY(ib,ja) * --------------- */ const int nrow_BY = nrow_B; const int ncol_BY = ncol_A; PsimagLite::Matrix by_(nrow_BY, ncol_BY); { int iby = 0; int jby = 0; // not needed, FIXME for( jby=0; jby < ncol_BY; jby++) { for( iby=0; iby < nrow_BY; iby++) { by_(iby,jby) = 0; }; }; } { /* * ------------------------------ * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * ------------------------------ */ const char trans = 'N'; csc_matmul_pre( trans, nrow_B, ncol_B, bcolptr, brow, bval, nrow_Y, ncol_Y, yin, nrow_BY, ncol_BY, by_); } { /* * ------------------------------------------- * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) * ------------------------------------------- */ const char trans = 'T'; csc_matmul_post( trans, nrow_A, ncol_A, acolptr, arow, aval, nrow_BY, ncol_BY, by_, nrow_X, ncol_X, xout); } } else if (imethod == 2) { /* * --------------------- * YAt(jb,ia) = Y(jb,ja) * tranpose(A(ia,ja)) * X(ib,ia) += B(ib,jb) * YAt(jb,ia) * --------------------- */ /* * ---------------- * setup YAt(jb,ia) * ---------------- */ PsimagLite::Matrix yat_(ncol_B, nrow_A); int nrow_YAt = ncol_B; int ncol_YAt = nrow_A; { int jb = 0; int ia = 0; //not needed, FIXME for(ia=0; ia < ncol_A; ia++) { for(jb=0; jb < ncol_B; jb++) { yat_(jb,ia) = 0; }; }; } { /* * --------------------- * YAt(jb,ia) = Y(jb,ja) * tranpose(A(ia,ja) * --------------------- */ const char transa = 'T'; csc_matmul_post( transa, nrow_A, ncol_A, acolptr, arow, aval, nrow_Y, ncol_Y, yin, nrow_YAt, ncol_YAt, yat_); } { /* * ------------ * X(ib,ia) += B(ib,jb) * YAt(jb,ia) * ------------ */ const char trans = 'N'; csc_matmul_pre( trans, nrow_B, ncol_B, bcolptr, brow, bval, nrow_YAt, ncol_YAt, yat_, nrow_X, ncol_X, xout); } } else if (imethod == 3) { /* * --------------------------------------------- * C = kron(A,B) * C([ib,ia], [jb,ja]) = A(ia,ja)*B(ib,jb) * X([ib,ia]) += C([ib,ia],[jb,ja]) * Y([jb,ja]) * --------------------------------------------- */ int ja = 0; for(ja=0; ja < ncol_A; ja++) { int istarta = acolptr[ja]; int ienda = acolptr[ja+1]-1; int ka = 0; for(ka=istarta; ka <= ienda; ka++) { int ia = arow[ka]; ComplexOrRealType aij = aval[ka]; int jb = 0; for(jb=0; jb < ncol_B; jb++) { int istartb = bcolptr[jb]; int iendb = bcolptr[jb+1]-1; int kb = 0; for(kb=istartb; kb <= iendb; kb++) { int ib = brow[kb]; ComplexOrRealType bij = brow[kb]; ComplexOrRealType cij = aij * bij; xout(ib,ia) += (cij * yin(jb,ja)); }; }; }; }; }; } template void csc_kron_mult( const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const typename PsimagLite::Vector::Type& aval, const int nrow_B, const int ncol_B, const PsimagLite::Vector::Type& bcolptr, const PsimagLite::Vector::Type& brow, const typename PsimagLite::Vector::Type& bval, const PsimagLite::Matrix& yin, PsimagLite::Matrix& xout, const typename PsimagLite::Real::Type denseFlopDiscount) { /* * ------------------------------------------------------------- * A and B are in compressed sparse COLUMN format * * X += kron( A, B) * Y * that can be computed as either * imethod == 1 * * X(ib,ia) += (B(ib,jb) * Y(jb,ja) ) * transpose(A(ia,ja) or * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * BY is nrow_B by ncol_A, need 2*nnz(B)*ncolA flops * * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) need 2*nnz(A)*nrowB flops * * imethod == 2 * * X(ib,ia) += B(ib,jb) * (Y(jb,ja) * transpose(A)) or * YAt(jb,ia) = Y(jb,ja) * transpose(A(ia,ja)) * YAt is ncolB by nrowA, need 2*nnz(A) * ncolB flops * * X(ib,ia) += B(ib,jb) * YAt(jb,ia) need nnz(B) * nrowA flops * * imethod == 3 * * X += kron(A,B) * Y by visiting all non-zero entries in A, B * * this is feasible only if A and B are very sparse, need nnz(A)*nnz(B) flops * ------------------------------------------------------------- */ int nnz_A = csc_nnz( ncol_A, acolptr ); int nnz_B = csc_nnz( ncol_B, bcolptr ); int has_work = (nnz_A >= 1) && (nnz_B >= 1); ComplexOrRealType kron_nnz = 0; ComplexOrRealType kron_flops = 0; int imethod = 1; if (!has_work) { return; }; estimate_kron_cost( nrow_A,ncol_A,nnz_A, nrow_B,ncol_B,nnz_B, &kron_nnz, &kron_flops, &imethod, denseFlopDiscount); csc_kron_mult_method( imethod, nrow_A, ncol_A, acolptr, arow, aval, nrow_B, ncol_B, bcolptr, brow, bval, yin, xout ); } #undef BY #undef YAt #undef X #undef Y dmrgpp-6.02/src/KronUtil/csc_matmul_post.cpp000066400000000000000000000065531414604301300211750ustar00rootroot00000000000000#include "util.h" template void csc_matmul_post(char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const typename PsimagLite::Vector::Type& aval, const int nrow_Y, const int ncol_Y, const PsimagLite::Matrix& yin, const int nrow_X, const int ncol_X, PsimagLite::Matrix& xout) { /* * ------------------------------------------------------- * A in compress sparse COLUMN format * * compute X += Y * op(A) * where op(A) is transpose(A) if trans_A = 'T' or 't' * op(A) is A otherwise * * if need transpose(A) then * X(nrow_X,ncol_X) += Y(nrow_Y,ncol_Y) * tranpose(A(nrow_A,ncol_A)) * requires (nrow_X == nrow_Y) && (ncol_Y == ncol_A) && (ncol_X == nrow_A) * * if need A then * X(nrow_X,ncol_X) += Y(nrow_Y,ncol_Y) * A(nrow_A,ncol_A) * requires (nrow_X == nrow_Y) && ( ncol_Y == nrow_A) && (ncol_X == ncol_A) * ------------------------------------------------------- */ const bool is_complex = PsimagLite::IsComplexNumber::True; int isTranspose = (trans_A == 'T') || (trans_A == 't'); int isConjTranspose = (trans_A == 'C') || (trans_A == 'c'); if (isTranspose || isConjTranspose) { /* * ---------------------------------------------------------- * X(nrow_X,ncol_X) += Y(nrow_Y,ncol_Y) * transpose(A(nrow_A,ncol_A)) * X(ix,jx) += Y(iy,jy) * transpose( A(ia,ja) ) * X(ix,jx) += sum( Y(iy, ja) * At(ja,ia), over ja ) * ---------------------------------------------------------- */ assert((nrow_X == nrow_Y) && (ncol_Y == ncol_A) && (ncol_X == nrow_A)); int ja = 0; for(ja=0; ja < ncol_A; ja++) { int istart = acolptr[ja]; int iend = acolptr[ja+1]-1; int k = 0; for(k=istart; k <= iend; k++) { ComplexOrRealType aij = aval[k]; int ia = arow[k]; assert((0 <= ia) && (ia < nrow_A)); ComplexOrRealType atji = aij; if (is_complex && isConjTranspose) { atji = PsimagLite::conj(atji); }; int iy = 0; for(iy=0; iy < nrow_Y; iy++) { int ix = iy; int jx = ia; xout(ix,jx) += (yin(iy,ja) * atji); }; }; }; } else { /* * --------------------------------------------- * X(nrow_X,ncol_X) += Y(nrow_Y,ncol_Y) * A(nrow_A,ncol_A) * X(ix,jx) += sum( Y(iy,ia) * A(ia,ja), over ia ) * --------------------------------------------- */ assert((nrow_X == nrow_Y) && (ncol_Y == nrow_A) && (ncol_X == ncol_A)); int ja = 0; for(ja=0; ja < ncol_A; ja++) { int istart = acolptr[ja]; int iend = acolptr[ja+1]-1; int k = 0; for(k=istart; k <= iend; k++) { ComplexOrRealType aij = aval[k]; int ia = arow[k]; assert((0 <= ia) && (ia < nrow_A)); int iy = 0; for(iy = 0; iy < nrow_Y; iy++) { int ix = iy; int jx = ja; xout(ix,jx) += (yin(iy,ia) * aij ); }; }; }; } } #undef X #undef Y dmrgpp-6.02/src/KronUtil/csc_matmul_pre.cpp000066400000000000000000000061361414604301300207730ustar00rootroot00000000000000#include "util.h" template void csc_matmul_pre(char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const typename PsimagLite::Vector::Type& aval, const int nrow_Y, const int ncol_Y, const PsimagLite::Matrix& yin, const int nrow_X, const int ncol_X, PsimagLite::Matrix& xout ) { /* * ------------------------------------------------------- * A in compressed sparse COLUMN format * * compute X += op(A) * Y * where op(A) is transpose(A) if trans_A = 'T' or 't' * op(A) is A otherwise * * if need transpose(A) then * X(nrow_X,ncol_X) += tranpose(A(nrow_A,ncol_A))*Y(nrow_Y,ncol_Y) * requires nrow_X == ncol_A, ncol_X == ncol_Y, nrow_A == nrow_Y * * if need A then * X(nrow_X,ncol_X) += A(nrow_A,ncol_A) * Y(nrow_Y,ncol_Y) * requires nrow_X == nrow_A, ncol_A == nrow_Y, ncol_X == ncol_Y * ------------------------------------------------------- */ const bool is_complex = PsimagLite::IsComplexNumber::True; int isTranspose = (trans_A == 'T') || (trans_A == 't'); int isConjTranspose = (trans_A == 'C') || (trans_A == 'c'); if (isTranspose || isConjTranspose) { /* * ---------------------------------------------------------- * X(nrow_X,ncol_X) += tranpose(A(nrow_A,ncol_A))*Y(nrow_Y,ncol_Y) * X(ix,jx) += transpose( A(ia,ja) ) * Y(iy,jy) * X(ja,jy) += sum( At(ja, ia) * Y(ia,jy), over ia) * ---------------------------------------------------------- */ assert((nrow_X == ncol_A) && (nrow_A == nrow_Y) && (ncol_X == ncol_Y)); int ja = 0; for(ja=0; ja < ncol_A; ja++) { int istart = acolptr[ja]; int iend = acolptr[ja+1]-1; int k = 0; for(k=istart; k <= iend; k++) { int ia = arow[k]; assert((0 <= ia) && (ia < nrow_A)); ComplexOrRealType aij = aval[k]; ComplexOrRealType atji = aij; if (is_complex && isConjTranspose) { atji = PsimagLite::conj( atji ); }; int jy = 0; for(jy=0; jy < ncol_Y; jy++) { int ix = ja; int jx = jy; xout(ix,jx) += (atji * yin(ia,jy)); }; }; }; } else { /* * --------------------------------------------- * X(nrow_X,ncol_X) += A(nrow_A,ncol_A) * Y(nrow_Y,ncol_Y) * X(ia,jy) += sum( A(ia,ja)*Y(ja,jy), over ja ) * --------------------------------------------- */ assert((nrow_X == nrow_A) && (ncol_A == nrow_Y) && (ncol_X == ncol_Y)); int ja = 0; for(ja=0; ja < ncol_A; ja++) { int istart = acolptr[ja]; int iend = acolptr[ja+1]-1; int k = 0; for(k=istart; k <= iend; k++) { ComplexOrRealType aij = aval[k]; int ia = arow[k]; assert((0 <= ia) && (ia < nrow_A)); int jy = 0; for(jy=0; jy < ncol_Y; jy++) { int ix = ia; int jx = jy; xout(ix,jx) += (aij * yin(ja,jy)); }; }; }; }; } #undef X #undef Y dmrgpp-6.02/src/KronUtil/csc_nnz.cpp000066400000000000000000000004431414604301300174260ustar00rootroot00000000000000#include "util.h" int csc_nnz( const int ncol_A, const PsimagLite::Vector::Type& acolptr) { /* * --------------------------------- * return the number of nonzeros * matrix in compress COLUMN format * --------------------------------- */ return( acolptr[ncol_A] ); } dmrgpp-6.02/src/KronUtil/csr_den_kron_mult.cpp000066400000000000000000000315701414604301300215050ustar00rootroot00000000000000#include "util.h" template void csr_den_kron_mult_method(const int imethod, const char transA, const char transB, const PsimagLite::CrsMatrix& a_, const PsimagLite::Matrix& b_, const typename PsimagLite::Vector::Type& yin_, SizeType offsetY, typename PsimagLite::Vector::Type& xout_, SizeType offsetX, PsimagLite::GemmR& gemmR) { const bool is_complex = PsimagLite::IsComplexNumber::True; const int isTransA = (transA == 'T') || (transA == 't'); const int isConjTransA = (transA == 'C') || (transA == 'c'); const int isTransB = (transB == 'T') || (transB == 't'); const int isConjTransB = (transB == 'C') || (transB == 'c'); const int nrow_A = a_.rows(); const int ncol_A = a_.cols(); const int nrow_B = b_.rows(); const int ncol_B = b_.cols(); const int nrow_1 = (isTransA || isConjTransA) ? ncol_A : nrow_A; const int ncol_1 = (isTransA || isConjTransA) ? nrow_A : ncol_A; const int nrow_2 = (isTransB || isConjTransB) ? ncol_B : nrow_B; const int ncol_2 = (isTransB || isConjTransB) ? nrow_B : ncol_B; const int nrow_X = nrow_2; const int ncol_X = nrow_1; const int nrow_Y = ncol_2; const int ncol_Y = ncol_1; PsimagLite::MatrixNonOwned yin(nrow_Y, ncol_Y, yin_, offsetY); PsimagLite::MatrixNonOwned xout(nrow_X, ncol_X, xout_, offsetX); assert((imethod == 1) || (imethod == 2) || (imethod == 3)); bool no_work = (csr_is_zeros(a_) || den_is_zeros(b_)); if (no_work) { return; }; /* * ------------------------------------------------------------- * A in compressed sparse ROW format * B in dense format * * X += kron( op(A), op(B)) * Y * X += op(B) * Y * transpose(op(A)) * * nrow_X = nrow_2, ncol_X = nrow_1 * nrow_Y = ncol_2, nrow_Y = nrow_2 * * that can be computed as either * imethod == 1 * * X(ib,ia) += (B(ib,jb) * Y( jb,ja)) * transpose( A(ia,ja)) * * X(ix,jx) += (B2(ib2,jb2) * Y(iy,jy)) * transpose(A1(ia1,ja1)) * * * * X(ib,ia) += (B(ib,jb) * Y(jb,ja) ) * transpose(A(ia,ja) or * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * BY is nrow_B by ncol_A, need 2*nnz(B)*ncolA flops * * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) need 2*nnz(A)*nrowB flops * * imethod == 2 * * X(ib,ia) += B(ib,jb) * (Y(jb,ja) * transpose(A)) or * YAt(jb,ia) = Y(jb,ja) * transpose(A(ia,ja)) * YAt is ncolB by nrowA, need 2*nnz(A) * ncolB flops * * X(ib,ia) += B(ib,jb) * YAt(jb,ia) need nnz(B) * nrowA flops * * imethod == 3 * * X += kron(A,B) * Y by visiting all non-zero entries in A, B * * this is feasible only if A and B are very sparse, need nnz(A)*nnz(B) flops * ------------------------------------------------------------- */ if (imethod == 1) { /* * -------------------------------------------- * BY(ib,ja) = (B(ib,jb))*Y(jb,ja) * * X(ib,ia) += BY(ib,ja ) * transpose(A(ia,ja)) * -------------------------------------------- */ int nrow_BY = nrow_X; int ncol_BY = ncol_Y; PsimagLite::Matrix by_(nrow_BY, ncol_BY); PsimagLite::MatrixNonOwned byConstRef(by_); PsimagLite::MatrixNonOwned byRef(by_); /* * --------------- * setup BY * --------------- */ { int iby = 0; int jby = 0; // not needed FIXME for(jby=0; jby < ncol_BY; jby++) { for(iby=0; iby < nrow_BY; iby++) { by_(iby,jby) = 0; }; }; } { /* * ------------------------------ * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * ------------------------------ */ // const char trans = (isTransB) ? 'T' : 'N'; const char trans = transB; den_matmul_pre(trans, nrow_B, ncol_B, b_, nrow_Y, ncol_Y, yin, nrow_BY, ncol_BY, byRef, gemmR); } { /* * ------------------------------------------- * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) * ------------------------------------------- */ /* * ---------------------------------- * Note trans = 'Z' means use conj(A) * ---------------------------------- */ const char trans = isTransA ? 'N' : (isConjTransA ? 'Z' : 'T'); csr_matmul_post( trans, a_, nrow_BY, ncol_BY, byConstRef, nrow_X, ncol_X, xout); } } else if (imethod == 2) { /* * --------------------- * YAt(jb,ia) = Y(jb,ja) * tranpose(A(ia,ja)) * X(ib,ia) += B(ib,jb) * YAt(jb,ia) * --------------------- */ int nrow_YAt = nrow_Y; int ncol_YAt = ncol_X; PsimagLite::Matrix yat_(nrow_YAt, ncol_YAt ); PsimagLite::MatrixNonOwned yatRef(yat_); PsimagLite::MatrixNonOwned yatConstRef(yat_); /* * ---------------- * setup YAt(jb,ia) * ---------------- */ { int iy = 0; int jy = 0; // not needed, FIXME for(jy=0; jy < ncol_YAt; jy++) { for(iy=0; iy < nrow_YAt; iy++) { yat_(iy,jy) = 0; }; }; } { /* * --------------------- * YAt(jb,ia) = Y(jb,ja) * tranpose(A(ia,ja) * --------------------- */ /* * ------------------------------ * note transa = 'Z' mean conj(A) * ------------------------------ */ const char transa = isTransA ? 'N' : (isConjTransA ? 'Z' : 'T'); csr_matmul_post( transa, a_, nrow_Y, ncol_Y, yin, nrow_YAt, ncol_YAt, yatRef); } { /* * ------------ * X(ib,ia) += B(ib,jb) * YAt(jb,ia) * ------------ */ // const char trans = (isTransB) ? 'T' : 'N'; const char trans = transB; den_matmul_pre( trans, nrow_B, ncol_B, b_, nrow_YAt, ncol_YAt, yatConstRef, nrow_X, ncol_X, xout, gemmR); } } else if (imethod == 3) { /* * --------------------------------------------- * C = kron(A,B) * C([ib,ia], [jb,ja]) = A(ia,ja)*B(ib,jb) * X([ib,ia]) += C([ib,ia],[jb,ja]) * Y([jb,ja]) * --------------------------------------------- */ const bool use_inner_sparse = false; if (use_inner_sparse) { int ib = 0; int jb = 0; for(ib=0; ib < nrow_B; ib++) { for(jb=0; jb < ncol_B; jb++) { ComplexOrRealType bij = b_(ib,jb); if (is_complex && isConjTransB) { bij = PsimagLite::conj(bij); }; int ia = 0; for(ia=0; ia < nrow_A; ia++) { int istarta = a_.getRowPtr(ia); int ienda = a_.getRowPtr(ia+1); int ka = 0; for(ka=istarta; ka < ienda; ka++) { int ja = a_.getCol(ka); ComplexOrRealType aij = a_.getValue(ka); if (is_complex && isConjTransA) { aij = PsimagLite::conj(aij); }; ComplexOrRealType cij = aij * bij; int ix = (isTransB || isConjTransB) ? jb : ib; int jx = (isTransA || isConjTransA) ? ja : ia; int iy = (isTransB || isConjTransB) ? ib : jb; int jy = (isTransA || isConjTransA) ? ia : ja; xout(ix,jx) += (cij * yin(iy,jy)); }; }; }; }; } else { int ia = 0; for(ia=0; ia < nrow_A; ia++) { int istarta = a_.getRowPtr(ia); int ienda = a_.getRowPtr(ia+1); int ka = 0; for(ka=istarta; ka < ienda; ka++) { int ja = a_.getCol(ka); ComplexOrRealType aij = a_.getValue(ka); if (is_complex && isConjTransA) { aij = PsimagLite::conj( aij ); }; int ib = 0; int jb = 0; for(ib=0; ib < nrow_B; ib++) { for(jb=0; jb < ncol_B; jb++) { ComplexOrRealType bij = b_(ib,jb); if (is_complex && isConjTransB) { bij = PsimagLite::conj( bij ); }; ComplexOrRealType cij = aij * bij; int ix = (isTransB || isConjTransB) ? jb : ib; int jx = (isTransA || isConjTransA) ? ja : ia; int iy = (isTransB || isConjTransB) ? ib : jb; int jy = (isTransA || isConjTransA) ? ia : ja; xout(ix,jx) += (cij * yin(iy,jy)); }; }; }; }; }; }; } template void csr_den_kron_mult(const char transA, const char transB, const PsimagLite::CrsMatrix& a_, const PsimagLite::Matrix& b_, const typename PsimagLite::Vector::Type& yin_, SizeType offsetY, typename PsimagLite::Vector::Type& xout_, SizeType offsetX, const typename PsimagLite::Real::Type denseFlopDiscount, PsimagLite::GemmR& gemmR) { const int idebug = 0; /* * ------------------------------------------------------------- * A in compressed sparse ROW format * B in dense matrix format * * X += kron( A, B) * Y * that can be computed as either * imethod == 1 * * X(ib,ia) += (B(ib,jb) * Y(jb,ja) ) * transpose(A(ia,ja) or * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * BY is nrow_B by ncol_A, need 2*nnz(B)*ncolA flops * * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) need 2*nnz(A)*nrowB flops * * imethod == 2 * * X(ib,ia) += B(ib,jb) * (Y(jb,ja) * transpose(A)) or * YAt(jb,ia) = Y(jb,ja) * transpose(A(ia,ja)) * YAt is ncolB by nrowA, need 2*nnz(A) * ncolB flops * * X(ib,ia) += B(ib,jb) * YAt(jb,ia) need nnz(B) * nrowA flops * * imethod == 3 * * X += kron(A,B) * Y by visiting all non-zero entries in A, B * * this is feasible only if A and B are very sparse, need nnz(A)*nnz(B) flops * ------------------------------------------------------------- */ const int nrow_A = a_.rows(); const int ncol_A = a_.cols(); const int nrow_B = b_.rows(); const int ncol_B = b_.cols(); int nnz_A = csr_nnz(a_); int nnz_B = den_nnz(b_); bool no_work = (csr_is_zeros(a_) || den_is_zeros(b_)); if (no_work) { if (idebug >= 1) { printf("csr_den: no_work, nrow_A=%d,ncol_A=%d,nrow_B=%d,ncol_B=%d\n", nrow_A,ncol_A, nrow_B,ncol_B ); }; return; }; ComplexOrRealType kron_nnz = 0; ComplexOrRealType kron_flops = 0; int imethod = 1; const int isTransA = (transA == 'T') || (transA == 't'); const int isConjTransA = (transA == 'C') || (transA == 'c'); const int isTransB = (transB == 'T') || (transB == 't'); const int isConjTransB = (transB == 'C') || (transB == 'c'); /* * ------------------------------------- * check for special case where A is eye * ------------------------------------- */ if (csr_is_eye(a_)) { if (idebug >= 1) { printf("csr_den: A is eye: nrow_A=%d,ncol_A=%d,nrow_B=%d,ncol_B=%d\n", nrow_A,ncol_A, nrow_B, ncol_B ); }; /* ---------------------- X += ( op(B) ) Y * transpose( op(A) ) ---------------------- */ const int nrow_Y = (isTransB || isConjTransB) ? nrow_B : ncol_B; const int ncol_Y = (isTransA || isConjTransA) ? nrow_A : ncol_A; const int nrow_X = (isTransB || isConjTransB) ? ncol_B : nrow_B; const int ncol_X = (isTransA || isConjTransA) ? ncol_A : nrow_A; PsimagLite::MatrixNonOwned yin(nrow_Y, ncol_Y, yin_, offsetY); PsimagLite::MatrixNonOwned xout(nrow_X, ncol_X, xout_, offsetX); // const char trans1 = (isTransB) ? 'T' : 'N'; const char trans1 = transB; den_matmul_pre(trans1, nrow_B, ncol_B, b_, nrow_Y, ncol_Y, yin, nrow_X, ncol_X, xout, gemmR); return; }; const int nrow_1 = (isTransA || isConjTransA) ? ncol_A : nrow_A; const int ncol_1 = (isTransA || isConjTransA) ? nrow_A : ncol_A; const int nrow_2 = (isTransB || isConjTransB) ? ncol_B : nrow_B; const int ncol_2 = (isTransB || isConjTransB) ? nrow_B : ncol_B; estimate_kron_cost( nrow_1,ncol_1,nnz_A, nrow_2,ncol_2,nnz_B, &kron_nnz, &kron_flops, &imethod, denseFlopDiscount); csr_den_kron_mult_method(imethod, transA, transB, a_, b_, yin_, offsetY, xout_, offsetX, gemmR); } #undef B #undef BY #undef YAt #undef X #undef Y dmrgpp-6.02/src/KronUtil/csr_eye.cpp000066400000000000000000000017041414604301300174230ustar00rootroot00000000000000#include "util.h" template void csr_eye(const int nrow_B, const int ncol_B, PsimagLite::CrsMatrix& b) { /* * --------------------------------------------------------------------------- * Out: sparse identity matrix in compressed sparse row format * --------------------------------------------------------------------------- */ const int nnz_B = std::min( nrow_B, ncol_B ); b.resize( nrow_B, ncol_B ); b.reserve( nnz_B ); int ip = 0; for( int irow=0; irow < nrow_B; irow++) { b.setRow(irow, ip); const int jcol = irow; const bool is_valid = (jcol < ncol_B); if (is_valid) { b.pushValue( 1 ); b.pushCol( jcol ); ip++; }; }; b.setRow(nrow_B, ip); b.checkValidity(); } dmrgpp-6.02/src/KronUtil/csr_is_eye.cpp000066400000000000000000000020341414604301300201130ustar00rootroot00000000000000#include "util.h" template bool csr_is_eye(const PsimagLite::CrsMatrix& a) { // ---------------------------------------------------- // check whether a sparse matrix is the identity matrix // ---------------------------------------------------- const int nrow_A = a.rows(); const int ncol_A = a.cols(); bool is_eye = (nrow_A == ncol_A); if (!is_eye) { return( false ); }; if ((nrow_A <= 0) || (ncol_A <= 0)) { return( false ); }; for(int ia=0; ia < nrow_A; ia++) { int istart = a.getRowPtr(ia); int iend = a.getRowPtr(ia + 1); bool has_diagonal = false;; for(int k=istart; k < iend; k++) { int ja = a.getCol(k); ComplexOrRealType aij = a.getValue(k); ComplexOrRealType eij = (ia == ja) ? 1 : 0; if (ia == ja) { has_diagonal = true; }; is_eye = (aij == eij); if (!is_eye) { return( false ); }; }; if (!has_diagonal) { return( false ); }; }; return( true ); } dmrgpp-6.02/src/KronUtil/csr_kron_mult.cpp000066400000000000000000000304401414604301300206520ustar00rootroot00000000000000#include "util.h" template void csr_to_den( const PsimagLite::CrsMatrix& a, PsimagLite::Matrix& a_ ) { int ia = 0; int ja = 0; int nrow_A = a.row(); int ncol_A = a.col(); for(ja=0; ja < ncol_A; ja++) { for(ia=0; ia < nrow_A; ia++) { a_(ia,ja) = 0; }; }; for(ia=0; ia < nrow_A; ia++) { int istarta = a.getRowPtr(ia); int ienda = a.getRowPtr(ia+1); int ka = 0; for(ka=istarta; ka < ienda; ka++) { ComplexOrRealType aij = a.getValue(ka); int ja = a.getCol(ka); a_(ia,ja) = aij; }; }; } template void csr_kron_mult_method(const int imethod, const char transA, const char transB, const PsimagLite::CrsMatrix& a, const PsimagLite::CrsMatrix& b, const PsimagLite::MatrixNonOwned& yin, PsimagLite::MatrixNonOwned& xout) { const bool is_complex = PsimagLite::IsComplexNumber::True; const int isTransA = (transA == 'T') || (transA == 't'); const int isTransB = (transB == 'T') || (transB == 't'); const int isConjTransA = (transA == 'C') || (transA == 'c'); const int isConjTransB = (transB == 'C') || (transB == 'c'); const int nrow_A = a.rows(); const int ncol_A = a.cols(); const int nrow_B = b.rows(); const int ncol_B = b.cols(); const int nrow_1 = (isTransA || isConjTransA) ? ncol_A : nrow_A; const int ncol_1 = (isTransA || isConjTransA) ? nrow_A : ncol_A; const int nrow_2 = (isTransB || isConjTransB) ? ncol_B : nrow_B; const int ncol_2 = (isTransB || isConjTransB) ? nrow_B : ncol_B; const int nrow_X = nrow_2; const int ncol_X = nrow_1; const int nrow_Y = ncol_2; const int ncol_Y = ncol_1; assert((imethod == 1) || (imethod == 2) || (imethod == 3)); bool no_work = (csr_is_zeros(a) || csr_is_zeros(b)); if (no_work) { return; }; /* * ------------------------------------------------------------- * A and B in compressed sparse ROW format * * X += kron( op(A), op(B)) * Y * X += op(B) * Y * transpose(op(A)) * * nrow_X = nrow_2, ncol_X = nrow_1 * nrow_Y = ncol_2, nrow_Y = nrow_2 * * that can be computed as either * imethod == 1 * * X(ib,ia) += (B(ib,jb) * Y( jb,ja)) * transpose( A(ia,ja)) * * X(ix,jx) += (B2(ib2,jb2) * Y(iy,jy)) * transpose(A1(ia1,ja1)) * * * * X(ib,ia) += (B(ib,jb) * Y(jb,ja) ) * transpose(A(ia,ja) or * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * BY is nrow_B by ncol_A, need 2*nnz(B)*ncolA flops * * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) need 2*nnz(A)*nrowB flops * * imethod == 2 * * X(ib,ia) += B(ib,jb) * (Y(jb,ja) * transpose(A)) or * YAt(jb,ia) = Y(jb,ja) * transpose(A(ia,ja)) * YAt is ncolB by nrowA, need 2*nnz(A) * ncolB flops * * X(ib,ia) += B(ib,jb) * YAt(jb,ia) need nnz(B) * nrowA flops * * imethod == 3 * * X += kron(A,B) * Y by visiting all non-zero entries in A, B * * this is feasible only if A and B are very sparse, need nnz(A)*nnz(B) flops * ------------------------------------------------------------- */ if (imethod == 1) { /* * -------------------------------------------- * BY(ib,ja) = (B(ib,jb))*Y(jb,ja) * * X(ib,ia) += BY(ib,ja ) * transpose(A(ia,ja)) * -------------------------------------------- */ int nrow_BY = nrow_X; int ncol_BY = ncol_Y; PsimagLite::Matrix by_(nrow_BY,ncol_BY ); PsimagLite::MatrixNonOwned byRef(by_); PsimagLite::MatrixNonOwned byConstRef(by_); /* * --------------- * setup BY * --------------- */ { int iby = 0; int jby = 0; // not needed FIXME for(jby=0; jby < ncol_BY; jby++) { for(iby=0; iby < nrow_BY; iby++) { by_(iby,jby) = 0; }; }; } { /* * ------------------------------ * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * ------------------------------ */ // const char trans = (isTransB) ? 'T' : 'N'; const char trans = transB; csr_matmul_pre( trans, b, nrow_Y, ncol_Y, yin, nrow_BY, ncol_BY, byRef); } { /* * ------------------------------------------- * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) * ------------------------------------------- */ /* * --------------------------------- * note trans = 'Z' mean use conj(A) * --------------------------------- */ const char trans = isTransA ? 'N' : (isConjTransA ? 'Z' : 'T'); csr_matmul_post( trans, a, nrow_BY, ncol_BY, byConstRef, nrow_X, ncol_X, xout); } } else if (imethod == 2) { /* * --------------------- * YAt(jb,ia) = Y(jb,ja) * tranpose(A(ia,ja)) * X(ib,ia) += B(ib,jb) * YAt(jb,ia) * --------------------- */ int nrow_YAt = nrow_Y; int ncol_YAt = ncol_X; PsimagLite::Matrix yat_(nrow_YAt, ncol_YAt); PsimagLite::MatrixNonOwned yatRef(yat_); PsimagLite::MatrixNonOwned yatConstRef(yat_); /* * ---------------- * setup YAt(jb,ia) * ---------------- */ { int iy = 0; int jy = 0; // not needed FIXME for(jy=0; jy < ncol_YAt; jy++) { for(iy=0; iy < nrow_YAt; iy++) { yat_(iy,jy) = 0; }; }; } { /* * --------------------- * YAt(jb,ia) = Y(jb,ja) * tranpose(A(ia,ja) * --------------------- */ /* * --------------------------------- * note trans = 'Z' mean use conj(A) * --------------------------------- */ const char transa = isTransA ? 'N' : (isConjTransA ? 'Z' : 'T'); csr_matmul_post( transa, a, nrow_Y, ncol_Y, yin, nrow_YAt, ncol_YAt, yatRef); } { /* * ------------ * X(ib,ia) += B(ib,jb) * YAt(jb,ia) * ------------ */ // const char trans = (isTransB) ? 'T' : 'N'; const char trans = transB; csr_matmul_pre( trans, b, nrow_YAt, ncol_YAt, yatConstRef, nrow_X, ncol_X, xout); } } else if (imethod == 3) { /* * --------------------------------------------- * C = kron(A,B) * C([ib,ia], [jb,ja]) = A(ia,ja)*B(ib,jb) * X([ib,ia]) += C([ib,ia],[jb,ja]) * Y([jb,ja]) * --------------------------------------------- */ int ia = 0; int ka = 0; int ib = 0; int kb = 0; for(ia=0; ia < nrow_A; ia++) { int istarta = a.getRowPtr(ia); int ienda = a.getRowPtr(ia + 1); for(ka=istarta; ka < ienda; ka++) { int ja = a.getCol(ka); ComplexOrRealType aij = a.getValue(ka); if (is_complex && isConjTransA) { aij = PsimagLite::conj(aij); }; for(ib=0; ib < nrow_B; ib++) { int istartb = b.getRowPtr(ib); int iendb = b.getRowPtr(ib+1); for(kb=istartb; kb < iendb; kb++) { int jb = b.getCol(kb); ComplexOrRealType bij = b.getValue(kb); if (is_complex && isConjTransB) { bij = PsimagLite::conj(bij); }; ComplexOrRealType cij = aij * bij; int ix = (isTransB || isConjTransB) ? jb : ib; int jx = (isTransA || isConjTransA) ? ja : ia; int iy = (isTransB || isConjTransB) ? ib : jb; int jy = (isTransA || isConjTransA) ? ia : ja; xout(ix,jx) += cij * yin(iy,jy); }; }; }; }; }; } template void csr_kron_mult_method(const int imethod, const char transA, const char transB, const PsimagLite::CrsMatrix& a, const PsimagLite::CrsMatrix& b, const typename PsimagLite::Vector::Type& yin_, SizeType offsetY, typename PsimagLite::Vector::Type& xout_, SizeType offsetX) { const int isTransA = (transA == 'T') || (transA == 't'); const int isTransB = (transB == 'T') || (transB == 't'); const int isConjTransA = (transA == 'C') || (transA == 'c'); const int isConjTransB = (transB == 'C') || (transB == 'c'); const int nrow_A = a.rows(); const int ncol_A = a.cols(); const int nrow_B = b.rows(); const int ncol_B = b.cols(); const int nrow_1 = (isTransA || isConjTransA) ? ncol_A : nrow_A; const int ncol_1 = (isTransA || isConjTransA) ? nrow_A : ncol_A; const int nrow_2 = (isTransB || isConjTransB) ? ncol_B : nrow_B; const int ncol_2 = (isTransB || isConjTransB) ? nrow_B : ncol_B; const int nrow_X = nrow_2; const int ncol_X = nrow_1; const int nrow_Y = ncol_2; const int ncol_Y = ncol_1; PsimagLite::MatrixNonOwned yin(nrow_Y, ncol_Y, yin_, offsetY); PsimagLite::MatrixNonOwned xout(nrow_X, ncol_X, xout_, offsetX); csr_kron_mult_method(imethod, transA, transB, a, b, yin, xout); } template void csr_kron_mult(const char transA, const char transB, const PsimagLite::CrsMatrix& a, const PsimagLite::CrsMatrix& b, const typename PsimagLite::Vector::Type& yin, SizeType offsetY, typename PsimagLite::Vector::Type& xout, SizeType offsetX, const typename PsimagLite::Real::Type denseFlopDiscount) { /* * ------------------------------------------------------------- * A and B in compressed sparse ROW format * * X += kron( A, B) * Y * that can be computed as either * imethod == 1 * * X(ib,ia) += (B(ib,jb) * Y(jb,ja) ) * transpose(A(ia,ja) or * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * BY is nrow_B by ncol_A, need 2*nnz(B)*ncolA flops * * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) need 2*nnz(A)*nrowB flops * * imethod == 2 * * X(ib,ia) += B(ib,jb) * (Y(jb,ja) * transpose(A)) or * YAt(jb,ia) = Y(jb,ja) * transpose(A(ia,ja)) * YAt is ncolB by nrowA, need 2*nnz(A) * ncolB flops * * X(ib,ia) += B(ib,jb) * YAt(jb,ia) need nnz(B) * nrowA flops * * imethod == 3 * * X += kron(A,B) * Y by visiting all non-zero entries in A, B * * this is feasible only if A and B are very sparse, need nnz(A)*nnz(B) flops * ------------------------------------------------------------- */ int nnz_A = csr_nnz(a); int nnz_B = csr_nnz(b); bool no_work = (csr_is_zeros(a) || csr_is_zeros(b)); if (no_work) { return; }; ComplexOrRealType kron_nnz = 0; ComplexOrRealType kron_flops = 0; int imethod = 1; const int isTransA = (transA == 'T') || (transA == 't'); const int isTransB = (transB == 'T') || (transB == 't'); const int isConjTransA = (transA == 'C') || (transA == 'c'); const int isConjTransB = (transB == 'C') || (transB == 'c'); const int nrow_A = a.rows(); const int ncol_A = a.cols(); const int nrow_B = b.rows(); const int ncol_B = b.cols(); // ----------------------------------- // both A and B are considered sparse // ----------------------------------- const int nrow_1 = (isTransA || isConjTransA) ? ncol_A : nrow_A; const int ncol_1 = (isTransA || isConjTransA) ? nrow_A : ncol_A; const int nrow_2 = (isTransB || isConjTransB) ? ncol_B : nrow_B; const int ncol_2 = (isTransB || isConjTransB) ? nrow_B : ncol_B; estimate_kron_cost(nrow_1,ncol_1,nnz_A, nrow_2,ncol_2,nnz_B, &kron_nnz, &kron_flops, &imethod, denseFlopDiscount); csr_kron_mult_method(imethod, transA, transB, a, b, yin, offsetY, xout , offsetX); } dmrgpp-6.02/src/KronUtil/csr_kron_submatrix.cpp000066400000000000000000000065501414604301300217140ustar00rootroot00000000000000#include "util.h" template void csr_kron_submatrix( const PsimagLite::CrsMatrix& a, const PsimagLite::CrsMatrix& b, const int nrindex, const int ncindex, const int max_nnz, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::CrsMatrix& h) { /* * ------------------------------------------------- * extract a submatrix out of kronecker product * equivalent to * C = kron(A,B), then H = C( rindex(:), cindex(:) ) * * assume A, B are in sparse compressed ROW format * ------------------------------------------------- */ const int ncol_A = a.cols(); const int nrow_B = b.rows(); const int ncol_B = b.cols(); const int ncol_C = ncol_A * ncol_B; #ifndef NDEBUG const int nrow_A = a.rows(); const int nrow_C = nrow_A * nrow_B; #endif const int nrow_H = nrindex; const int ncol_H = ncindex; /* * ----------------------------- * split cindex(:) into [jb,ja] * ----------------------------- */ int* ialist = new int[nrindex]; int* iblist = new int[nrindex]; int k = 0; for(k=0; k < nrindex; k++) { int ic = rindex[k]; int ib = (ic % nrow_B); int ia = (ic - ib)/nrow_B; assert((0 <= ia) && (ia < nrow_A)); assert((0 <= ib) && (ib < nrow_B)); assert((0 <= ic) && (ic < nrow_C)); ialist[k] = ia; iblist[k] = ib; }; /* * ------------------------------ * setup mapping for column index * ------------------------------ */ int* cmap = new int[ncol_C]; int jc = 0; for(jc=0; jc < ncol_C; jc++) { cmap[jc] = -1; }; for(k=0; k < ncindex; k++) { int jc = cindex[k]; assert((0 <= jc) && (jc < ncol_C)); cmap[jc] = k; }; const bool use_push = true; int ih = 0; int ifree = 0; // ---------------------------------------------------- // note avoid zeroing out large arrays in sparse matrix // ---------------------------------------------------- if (use_push) { h.resize(nrow_H, ncol_H ); h.reserve( max_nnz ); } else { h.resize(nrow_H, ncol_H, max_nnz ); }; for(ih=0; ih < nrow_H; ih++) { h.setRow(ih,ifree); int ia = ialist[ih]; int ib = iblist[ih]; int istarta = a.getRowPtr(ia); int ienda = a.getRowPtr(ia + 1); int istartb = b.getRowPtr(ib); int iendb = b.getRowPtr(ib + 1); int ka = 0; int kb = 0; for(ka=istarta; ka < ienda; ka++) { int ja = a.getCol(ka); ComplexOrRealType aij = a.getValue(ka); for(kb=istartb; kb < iendb; kb++) { int jb = b.getCol(kb); int jc = jb + ja*ncol_B; int jh = cmap[jc]; int isvalid = (0 <= jh) && (jh < ncol_H); if (isvalid) { ComplexOrRealType bij = b.getValue(kb); ComplexOrRealType cij = aij * bij; assert((ifree < max_nnz)); if (use_push) { h.pushCol( jh ); h.pushValue( cij ); } else { h.setCol(ifree, jh); h.setValues(ifree,cij); }; ifree++; }; }; }; }; h.setRow(nrow_H, ifree); h.checkValidity(); delete[] ialist; delete[] iblist; delete[] cmap; } dmrgpp-6.02/src/KronUtil/csr_matmul_post.cpp000066400000000000000000000061141414604301300212050ustar00rootroot00000000000000#include "util.h" template void csr_matmul_post(char trans_A, const PsimagLite::CrsMatrix& a, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned& xout) { /* * ------------------------------------------------------- * A in compressed sparse ROW format * * compute X += Y * op(A) * where op(A) is transpose(A) if trans_A = 'T' or 't' * op(A) is A otherwise * * if need transpose(A) then * X(nrow_X,ncol_X) += Y(nrow_Y,ncol_Y) * tranpose(A(nrow_A,ncol_A)) * requires (nrow_X == nrow_Y) && (ncol_Y == ncol_A) && (ncol_X == nrow_A) * * if need A then * X(nrow_X,ncol_X) += Y(nrow_Y,ncol_Y) * A(nrow_A,ncol_A) * requires (nrow_X == nrow_Y) && ( ncol_Y == nrow_A) && (ncol_X == ncol_A) * ------------------------------------------------------- */ const bool is_complex = PsimagLite::IsComplexNumber::True; const int nrow_A = a.rows(); int isTranspose = (trans_A == 'T') || (trans_A == 't'); int isConjTranspose = (trans_A == 'C') || (trans_A == 'c'); int isConj = (trans_A == 'Z') || (trans_A == 'z'); if (isTranspose || isConjTranspose) { /* * ---------------------------------------------------------- * X(nrow_X,ncol_X) += Y(nrow_Y,ncol_Y) * transpose(A(nrow_A,ncol_A)) * X(ix,jx) += Y(iy,jy) * transpose( A(ia,ja) ) * X(ix,jx) += sum( Y(iy, ja) * At(ja,ia), over ja ) * ---------------------------------------------------------- */ assert(nrow_X == nrow_Y); assert(static_cast(ncol_Y) == a.cols() && (ncol_X == nrow_A)); int ia = 0; for(ia=0; ia < nrow_A; ia++) { int istart = a.getRowPtr(ia); int iend = a.getRowPtr(ia+1); int k = 0; for(k=istart; k < iend; k++) { int ja = a.getCol(k); ComplexOrRealType aij = a.getValue(k); ComplexOrRealType atji = aij; if (is_complex && isConjTranspose) { atji = PsimagLite::conj( atji ); }; int iy = 0; for(iy=0; iy < nrow_Y; iy++) { int ix = iy; int jx = ia; xout(ix,jx) += (yin(iy,ja) * atji); } } } } else { /* * --------------------------------------------- * X(nrow_X,ncol_X) += Y(nrow_Y,ncol_Y) * A(nrow_A,ncol_A) * X(ix,jx) += sum( Y(iy,ia) * A(ia,ja), over ia ) * --------------------------------------------- */ assert(nrow_X == nrow_Y); assert(ncol_Y == nrow_A && static_cast(ncol_X) == a.cols()); int ia = 0; for(ia=0; ia < nrow_A; ia++) { int istart = a.getRowPtr(ia); int iend = a.getRowPtr(ia+1); int k = 0; for(k=istart; k < iend; k++) { int ja = a.getCol(k); ComplexOrRealType aij = a.getValue(k); if (is_complex && isConj) { aij = PsimagLite::conj( aij ); }; int iy = 0; for(iy = 0; iy < nrow_Y; iy++) { int ix = iy; int jx = ja; xout(ix,jx) += ( yin(iy,ia) * aij ); } } } } } dmrgpp-6.02/src/KronUtil/csr_matmul_pre.cpp000066400000000000000000000060711414604301300210100ustar00rootroot00000000000000#include "util.h" template void csr_matmul_pre( char trans_A, const PsimagLite::CrsMatrix& a, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned& xout) { /* * ------------------------------------------------------- * A in compressed sparse ROW format * * compute X += op(A) * Y * where op(A) is transpose(A) if trans_A = 'T' or 't' * op(A) is A otherwise * * if need transpose(A) then * X(nrow_X,ncol_X) += tranpose(A(nrow_A,ncol_A))*Y(nrow_Y,ncol_Y) * requires nrow_X == ncol_A, ncol_X == ncol_Y, nrow_A == nrow_Y * * if need A then * X(nrow_X,ncol_X) += A(nrow_A,ncol_A) * Y(nrow_Y,ncol_Y) * requires nrow_X == nrow_A, ncol_A == nrow_Y, ncol_X == ncol_Y * ------------------------------------------------------- */ const bool is_complex = PsimagLite::IsComplexNumber::True; const int nrow_A = a.rows(); int isTranspose = (trans_A == 'T') || (trans_A == 't'); int isConjTranspose = (trans_A == 'C') || (trans_A == 'c'); int isConj = (trans_A == 'Z') || (trans_A == 'z'); if (isTranspose || isConjTranspose) { /* * ---------------------------------------------------------- * X(nrow_X,ncol_X) += tranpose(A(nrow_A,ncol_A))*Y(nrow_Y,ncol_Y) * X(ix,jx) += transpose( A(ia,ja) ) * Y(iy,jy) * X(ja,jy) += sum( At(ja, ia) * Y(ia,jy), over ia) * ---------------------------------------------------------- */ assert(static_cast(nrow_X) == a.cols()); assert(nrow_A == nrow_Y && ncol_X == ncol_Y); int ia = 0; for(ia=0; ia < nrow_A; ia++) { int istart = a.getRowPtr(ia); int iend = a.getRowPtr(ia + 1); int k = 0; for(k=istart; k < iend; k++) { int ja = a.getCol(k); ComplexOrRealType aij = a.getValue(k); ComplexOrRealType atji = aij; if (is_complex && isConjTranspose) { atji = PsimagLite::conj( atji ); }; int jy = 0; for(jy=0; jy < ncol_Y; jy++) { int ix = ja; int jx = jy; xout(ix,jx) += (atji * yin(ia,jy)); } } } } else { /* * --------------------------------------------- * X(nrow_X,ncol_X) += A(nrow_A,ncol_A) * Y(nrow_Y,ncol_Y) * X(ia,jy) += sum( A(ia,ja)*Y(ja,jy), over ja ) * --------------------------------------------- */ assert(nrow_X == nrow_A); assert(a.cols() == static_cast(nrow_Y) && (ncol_X == ncol_Y)); int ia = 0; for(ia=0; ia < nrow_A; ia++) { int istart = a.getRowPtr(ia); int iend = a.getRowPtr(ia + 1); int k = 0; for(k=istart; k < iend; k++) { int ja = a.getCol(k); ComplexOrRealType aij = a.getValue(k); if (is_complex && isConj) { aij = PsimagLite::conj( aij ); }; int jy = 0; for(jy=0; jy < ncol_Y; jy++) { int ix = ia; int jx = jy; xout(ix,jx) += (aij * yin(ja,jy)); } } } } } dmrgpp-6.02/src/KronUtil/csr_submatrix.cpp000066400000000000000000000072041414604301300206600ustar00rootroot00000000000000#include "util.h" template void csr_submatrix(const PsimagLite::CrsMatrix& a, const int nrow_B, const int ncol_B, const int max_nnz, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::CrsMatrix& b) { /* * --------------------------------------------------------------------------- * Input: sparse matrix A in compressed sparse row format * * Input: list of row index rindex(0:(nrow_B-1)) and * list of column index cindex(0:(ncol_B-1)) * * Out: extract B = A( rindex(:), cindex(:)) in compress sparse row format * --------------------------------------------------------------------------- */ /* * ---------------------------------------------------- * setup boolean array for fast mapping of column index * ---------------------------------------------------- */ const int ncol_A = a.cols(); int* cmap = new int[ncol_A]; int* nnz = new int[nrow_B]; int ja = 0; int ib = 0; int jb = 0; for(ja = 0; ja < ncol_A; ja++) { cmap[ja] = -1; }; for(jb=0; jb < ncol_B; jb++) { int ja = cindex[jb]; assert((0 <= ja) && (ja < ncol_A)); cmap[ ja ] = jb; }; /* * ------------------------------------------------------- * first pass to calculate number of nonzeros per row in B * ------------------------------------------------------- */ for(ib=0; ib < nrow_B; ib++) { nnz[ib] = 0; }; for(ib=0; ib < nrow_B; ib++) { int ia = rindex[ib]; int istart = a.getRowPtr(ia); int iend = a.getRowPtr(ia + 1); assert((0 <= ia) && (static_cast(ia) < a.rows())); int k = 0; for( k=istart; k < iend; k++) { int ja = a.getCol(k); assert((0 <= ja) && (ja < ncol_A)); int jb = cmap[ ja ]; int isok_jb = (0 <= jb) && (jb < ncol_B); if (isok_jb) { nnz[ib] += 1; }; }; }; /* * ---------------------------- * check for sufficient storage * ---------------------------- */ int total_nnz = 0; for(ib=0; ib < nrow_B; ib++) { total_nnz += nnz[ib]; }; assert( total_nnz <= max_nnz); /* * --------------------------------- * prefix sum to setup row pointers * --------------------------------- */ const bool use_push = true; if (use_push) { b.resize(nrow_B, ncol_B); b.reserve( max_nnz ); } else { b.resize(nrow_B, ncol_B, max_nnz); }; b.setRow(0,0); for(ib=0; ib < nrow_B; ib++) b.setRow(ib+1,b.getRowPtr(ib) + nnz[ib]); /* * ------------------------ * reset array for 2nd pass * ------------------------ */ for(ib=0; ib < nrow_B; ib++) { nnz[ib] = 0; }; /* * -------------------------------------- * second pass to fill in compress sparse row * data structure * -------------------------------------- */ for(ib=0; ib < nrow_B; ib++) { int ia = rindex[ib]; int istart = a.getRowPtr(ia); int iend = a.getRowPtr(ia + 1); int k = 0; for(k=istart; k < iend; k++) { int ja = a.getCol(k); ComplexOrRealType aij = a.getValue(k); jb = cmap[ja]; int isvalid = (0 <= jb) && (jb < ncol_B); if (isvalid) { if (use_push) { b.pushValue( aij ); b.pushCol( jb ); } else { int ipos = b.getRowPtr(ib) + nnz[ib]; b.setValues(ipos,aij); b.setCol(ipos,jb); nnz[ib] += 1; }; }; }; }; b.checkValidity(); delete[] cmap; delete[] nnz; } dmrgpp-6.02/src/KronUtil/csr_transpose.cpp000066400000000000000000000037151414604301300206630ustar00rootroot00000000000000#include "util.h" template void csr_transpose( const int nrow_A, const int ncol_A, const int arowptr[], const int acol[], const ComplexOrRealType aval[], int atrowptr[], int atcol[], ComplexOrRealType atval[] ) { /* * -------------------------------------------------------- * At = tranpose(A) where A in sparse compressed row format * -------------------------------------------------------- */ const int nrow_At = ncol_A; int* nnz_row_At = new int[nrow_At]; { int iat = 0; for(iat=0; iat < nrow_At; iat++) { nnz_row_At[iat] = 0; }; } /* * -------------------------------------- * first pass to count number of nonzeros * per row in At = transpose(A) * -------------------------------------- */ { int ia = 0; for(ia=0; ia < nrow_A; ia++ ) { int istart = arowptr[ia]; int iend = arowptr[ia+1]-1; int k = 0; for(k=istart; k <= iend; k++) { int ja = acol[k]; int iat = ja; nnz_row_At[iat] += 1; }; }; } /* * --------------------------------------- * prefix sum to setup row pointers for At * --------------------------------------- */ { int iat = 0; atrowptr[0] = 0; for(iat=0; iat < nrow_At; iat++) { atrowptr[iat+1] = atrowptr[iat] + nnz_row_At[iat]; }; for(iat=0; iat < nrow_At; iat++) { nnz_row_At[iat] = 0; }; } /* * ---------------------- * second pass to fill At * ---------------------- */ { int ia = 0; for(ia=0; ia < nrow_A; ia++) { int istart = arowptr[ia]; int iend = arowptr[ia+1]-1; int k = 0; for(k=istart; k <= iend; k++) { int ja = acol[k]; ComplexOrRealType aij = aval[k]; int iat = ja; int jat = ia; int ipos = atrowptr[iat] + nnz_row_At[iat]; atcol[ipos] = jat; atval[ipos] = aij; nnz_row_At[iat] += 1; }; }; } delete[] nnz_row_At; } dmrgpp-6.02/src/KronUtil/den_copymat.cpp000066400000000000000000000010341414604301300202700ustar00rootroot00000000000000#include "util.h" void den_copymat( const int nrow, const int ncol, const int asrc_[], int bdest_[] ) { /* * ----------------------------- * copy matrix B(:,:) = A(:,:) * ----------------------------- */ #define Asrc(ia,ja) asrc_[ (ia) + (ja)*nrow ] #define Bdest(ib,jb) bdest_[ (ib) + (jb)*nrow ] int ia = 0; int ja = 0; for(ja=0; ja < ncol; ja++) { for(ia=0; ia < nrow; ia++) { Bdest(ia,ja) = Asrc(ia,ja); }; }; } #undef Asrc #undef Bdest dmrgpp-6.02/src/KronUtil/den_csr_kron_mult.cpp000066400000000000000000000360061414604301300215040ustar00rootroot00000000000000#include "util.h" template void den_csr_kron_mult_method(const int imethod, const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::CrsMatrix& b, const typename PsimagLite::Vector::Type& yin_, SizeType offsetY, typename PsimagLite::Vector::Type& xout_, SizeType offsetX, PsimagLite::GemmR& gemmR) { const bool is_complex = PsimagLite::IsComplexNumber::True; const int isTransA = (transA == 'T') || (transA == 't'); const int isTransB = (transB == 'T') || (transB == 't'); const int isConjTransA = (transA == 'C') || (transA == 'c'); const int isConjTransB = (transB == 'C') || (transB == 'c'); const int nrow_A = a_.rows(); const int ncol_A = a_.cols(); const int nrow_B = b.rows(); const int ncol_B = b.cols(); const int nrow_1 = (isTransA || isConjTransA) ? ncol_A : nrow_A; const int ncol_1 = (isTransA || isConjTransA) ? nrow_A : ncol_A; const int nrow_2 = (isTransB || isConjTransB) ? ncol_B : nrow_B; const int ncol_2 = (isTransB || isConjTransB) ? nrow_B : ncol_B; const int nrow_X = nrow_2; const int ncol_X = nrow_1; const int nrow_Y = ncol_2; const int ncol_Y = ncol_1; PsimagLite::MatrixNonOwned yin(nrow_Y, ncol_Y, yin_, offsetY); PsimagLite::MatrixNonOwned xout(nrow_X, ncol_X, xout_, offsetX); assert((imethod == 1) || (imethod == 2) || (imethod == 3)); bool no_work = (den_is_zeros(a_) || csr_is_zeros(b)); if (no_work) { return; }; /* * ------------------------------------------------------------- * A in dense matrix storage format * B in compressed sparse ROW format * * X += kron( op(A), op(B)) * Y * X += op(B) * Y * transpose(op(A)) * * nrow_X = nrow_2, ncol_X = nrow_1 * nrow_Y = ncol_2, nrow_Y = nrow_2 * * that can be computed as either * imethod == 1 * * X(ib,ia) += (B(ib,jb) * Y( jb,ja)) * transpose( A(ia,ja)) * * X(ix,jx) += (B2(ib2,jb2) * Y(iy,jy)) * transpose(A1(ia1,ja1)) * * * * X(ib,ia) += (B(ib,jb) * Y(jb,ja) ) * transpose(A(ia,ja) or * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * BY is nrow_B by ncol_A, need 2*nnz(B)*ncolA flops * * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) need 2*nnz(A)*nrowB flops * * imethod == 2 * * X(ib,ia) += B(ib,jb) * (Y(jb,ja) * transpose(A)) or * YAt(jb,ia) = Y(jb,ja) * transpose(A(ia,ja)) * YAt is ncolB by nrowA, need 2*nnz(A) * ncolB flops * * X(ib,ia) += B(ib,jb) * YAt(jb,ia) need nnz(B) * nrowA flops * * imethod == 3 * * X += kron(A,B) * Y by visiting all non-zero entries in A, B * * this is feasible only if A and B are very sparse, need nnz(A)*nnz(B) flops * ------------------------------------------------------------- */ if (imethod == 1) { /* * -------------------------------------------- * BY(ib,ja) = (B(ib,jb))*Y(jb,ja) * * X(ib,ia) += BY(ib,ja ) * transpose(A(ia,ja)) * -------------------------------------------- */ int nrow_BY = nrow_X; int ncol_BY = ncol_Y; PsimagLite::Matrix by_(nrow_BY, ncol_BY); PsimagLite::MatrixNonOwned byRef(by_); PsimagLite::MatrixNonOwned byConstRef(by_); /* * --------------- * setup BY(nrow_BY,ncol_BY) * --------------- */ { int iby = 0; int jby = 0; // not needed FIXME for(jby=0; jby < ncol_BY; jby++) { for(iby=0; iby < nrow_BY; iby++) { by_(iby,jby) = 0; }; }; } { /* * ------------------------------ * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * ------------------------------ */ // const char trans = (isTransB) ? 'T' : 'N'; const char trans = transB; csr_matmul_pre( trans, b, nrow_Y, ncol_Y, yin, nrow_BY, ncol_BY, byRef); } { /* * ------------------------------------------- * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) * ------------------------------------------- */ const char trans = (isTransA || isConjTransA) ? 'N' : 'T'; if (is_complex && isConjTransA) { // ----------------------------------------- // transpose( conj(transpose(A) ) is conj(A) // perform conj operation // ----------------------------------------- PsimagLite::Matrix a_conj(nrow_A,ncol_A); for(int ja=0; ja < ncol_A; ja++) { for(int ia=0; ia < nrow_A; ia++) { a_conj(ia,ja) = PsimagLite::conj( a_(ia,ja) ); }; }; den_matmul_post(trans, nrow_A, ncol_A, a_conj, nrow_BY, ncol_BY, byConstRef, nrow_X, ncol_X, xout, gemmR); } else { den_matmul_post(trans, nrow_A, ncol_A, a_, nrow_BY, ncol_BY, byConstRef, nrow_X, ncol_X, xout, gemmR); }; } } else if (imethod == 2) { /* * --------------------- * YAt(jb,ia) = Y(jb,ja) * tranpose(A(ia,ja)) * X(ib,ia) += B(ib,jb) * YAt(jb,ia) * --------------------- */ int nrow_YAt = nrow_Y; int ncol_YAt = ncol_X; PsimagLite::Matrix yat_(nrow_YAt, ncol_YAt); PsimagLite::MatrixNonOwned yatConstRef(yat_); PsimagLite::MatrixNonOwned yatRef(yat_); /* * ---------------- * setup YAt(jb,ia) * ---------------- */ { int iy = 0; int jy = 0; for(jy=0; jy < ncol_YAt; jy++) { for(iy=0; iy < nrow_YAt; iy++) { yat_(iy,jy) = 0; }; }; } { /* * --------------------- * YAt(jb,ia) = Y(jb,ja) * tranpose(A(ia,ja) * --------------------- */ const char transa = (isTransA || isConjTransA) ? 'N' : 'T'; if (is_complex && isConjTransA) { // ----------------------------------------- // transpose( conj(transpose(A) ) is conj(A) // perform in-place conj operation // ----------------------------------------- PsimagLite::Matrix a_conj(nrow_A,ncol_A); for(int ja=0; ja < ncol_A; ja++) { for(int ia=0; ia < nrow_A; ia++) { a_conj(ia,ja) = PsimagLite::conj( a_(ia,ja) ); }; }; den_matmul_post(transa, nrow_A, ncol_A, a_conj, nrow_Y, ncol_Y, yin, nrow_YAt, ncol_YAt, yatRef, gemmR); } else { den_matmul_post(transa, nrow_A, ncol_A, a_, nrow_Y, ncol_Y, yin, nrow_YAt, ncol_YAt, yatRef, gemmR); }; } { /* * ------------ * X(ib,ia) += B(ib,jb) * YAt(jb,ia) * ------------ */ // const char trans = (isTransB) ? 'T' : 'N'; const char trans = transB; csr_matmul_pre( trans, b, nrow_YAt, ncol_YAt, yatConstRef, nrow_X, ncol_X, xout); } } else if (imethod == 3) { /* * --------------------------------------------- * C = kron(A,B) * C([ib,ia], [jb,ja]) = A(ia,ja)*B(ib,jb) * X([ib,ia]) += C([ib,ia],[jb,ja]) * Y([jb,ja]) * --------------------------------------------- */ const bool use_inner_sparse = false; if (use_inner_sparse) { /* * ----------------------------- * sparse matrix B in inner loop * ----------------------------- */ int ia = 0; int ja = 0; for(ia=0; ia < nrow_A; ia++) { for(ja=0; ja < ncol_A; ja++) { ComplexOrRealType aij = a_(ia,ja); if (is_complex && isConjTransA) { aij = PsimagLite::conj( aij ); }; int ib = 0; for(ib=0; ib < nrow_B; ib++) { int istartb = b.getRowPtr(ib); int iendb = b.getRowPtr(ib + 1); int kb = 0; for(kb=istartb; kb < iendb; kb++) { int jb = b.getCol(kb); ComplexOrRealType bij = b.getValue(kb); if (is_complex && isConjTransB) { bij = PsimagLite::conj( bij ); }; ComplexOrRealType cij = aij * bij; int ix = (isTransB || isConjTransB) ? jb : ib; int jx = (isTransA || isConjTransA) ? ja : ia; int iy = (isTransB || isConjTransB) ? ib : jb; int jy = (isTransA || isConjTransA) ? ia : ja; xout(ix,jx) += (cij * yin(iy,jy)); }; }; }; }; } else { /* * ----------------------------- * sparse matrix B in outer loop * ----------------------------- */ int ib = 0; for(ib=0; ib < nrow_B; ib++) { int istartb = b.getRowPtr(ib); int iendb = b.getRowPtr(ib + 1); int kb = 0; for(kb=istartb; kb < iendb; kb++) { int jb = b.getCol(kb); ComplexOrRealType bij = b.getValue(kb); if (is_complex && isConjTransB) { bij = PsimagLite::conj( bij ); }; int ia = 0; int ja = 0; for(ia=0; ia < nrow_A; ia++) { for(ja=0; ja < ncol_A; ja++) { ComplexOrRealType aij = a_(ia,ja); if (is_complex && isConjTransA) { aij = PsimagLite::conj( aij ); }; ComplexOrRealType cij = aij * bij; int ix = (isTransB || isConjTransB) ? jb : ib; int jx = (isTransA || isConjTransA) ? ja : ia; int iy = (isTransB || isConjTransB) ? ib : jb; int jy = (isTransA || isConjTransA) ? ia : ja; xout(ix,jx) += (cij * yin(iy,jy)); }; }; }; }; }; }; } template void den_csr_kron_mult(const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::CrsMatrix& b, const typename PsimagLite::Vector::Type& yin_, SizeType offsetY, typename PsimagLite::Vector::Type& xout_, SizeType offsetX, const typename PsimagLite::Real::Type denseFlopDiscount, PsimagLite::GemmR& gemmR) { const bool is_complex = PsimagLite::IsComplexNumber::True; const int idebug = 0; /* * ------------------------------------------------------------- * A in dense matrix format * B in compressed sparse ROW format * * X += kron( A, B) * Y * that can be computed as either * imethod == 1 * * X(ib,ia) += (B(ib,jb) * Y(jb,ja) ) * transpose(A(ia,ja) or * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * BY is nrow_B by ncol_A, need 2*nnz(B)*ncolA flops * * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) need 2*nnz(A)*nrowB flops * * imethod == 2 * * X(ib,ia) += B(ib,jb) * (Y(jb,ja) * transpose(A)) or * YAt(jb,ia) = Y(jb,ja) * transpose(A(ia,ja)) * YAt is ncolB by nrowA, need 2*nnz(A) * ncolB flops * * X(ib,ia) += B(ib,jb) * YAt(jb,ia) need nnz(B) * nrowA flops * * imethod == 3 * * X += kron(A,B) * Y by visiting all non-zero entries in A, B * * this is feasible only if A and B are very sparse, need nnz(A)*nnz(B) flops * ------------------------------------------------------------- */ const int nrow_A = a_.rows(); const int ncol_A = a_.cols(); const int nrow_B = b.rows(); const int ncol_B = b.cols(); int nnz_A = den_nnz(a_); int nnz_B = csr_nnz(b); int no_work = (den_is_zeros(a_) || csr_is_zeros(b)); if (no_work) { if (idebug >= 1) { printf("den_csr:no_work,nrow_A=%d,nrow_B=%d,nrow_B=%d,ncol_B=%d\n", nrow_A,ncol_A, nrow_B,ncol_B ); }; return; }; const int isTransA = (transA == 'T') || (transA == 't'); const int isTransB = (transB == 'T') || (transB == 't'); const int isConjTransA = (transA == 'C') || (transA == 'c'); const int isConjTransB = (transB == 'C') || (transB == 'c'); /* * -------------------------- * check for special case * that B is identity matrix * -------------------------- */ if (csr_is_eye(b)) { if (idebug >= 1) { printf("den_csr: B is eye: nrow_A=%d,ncol_A=%d,nrow_B=%d,ncol_B=%d\n", nrow_A,ncol_A, nrow_B, ncol_B ); }; /* ---------------------- X += ( op(B) ) Y * transpose( op(A) ) ---------------------- */ const int nrow_Y = (isTransB || isConjTransB) ? nrow_B : ncol_B; const int ncol_Y = (isTransA || isConjTransA) ? nrow_A : ncol_A; const int nrow_X = (isTransB || isConjTransB) ? ncol_B : nrow_B; const int ncol_X = (isTransA || isConjTransA) ? ncol_A : nrow_A; PsimagLite::MatrixNonOwned yin(nrow_Y, ncol_Y, yin_, offsetY); PsimagLite::MatrixNonOwned xout(nrow_X, ncol_X, xout_, offsetX); const char trans1 = (isTransA || isConjTransA) ? 'N' : 'T'; if (is_complex && isConjTransA) { // --------------------------------------- // transpose( conj(transpose(A)) is conj(A) // perform in-place conj operation // --------------------------------------- PsimagLite::Matrix a_conj(nrow_A,ncol_A); for(int ja=0; ja < ncol_A; ja++) { for(int ia=0; ia < nrow_A; ia++) { a_conj(ia,ja) = PsimagLite::conj( a_(ia,ja) ); }; }; den_matmul_post( trans1, nrow_A, ncol_A, a_conj, nrow_Y, ncol_Y, yin, nrow_X, ncol_X, xout, gemmR); } else { den_matmul_post( trans1, nrow_A, ncol_A, a_, nrow_Y, ncol_Y, yin, nrow_X, ncol_X, xout, gemmR); }; return; }; ComplexOrRealType kron_nnz = 0; ComplexOrRealType kron_flops = 0; int imethod = 1; const int nrow_1 = (isTransA || isConjTransA) ? ncol_A : nrow_A; const int ncol_1 = (isTransA || isConjTransA) ? nrow_A : ncol_A; const int nrow_2 = (isTransB || isConjTransB) ? ncol_B : nrow_B; const int ncol_2 = (isTransB || isConjTransB) ? nrow_B : ncol_B; estimate_kron_cost( nrow_1,ncol_1,nnz_A, nrow_2,ncol_2,nnz_B, &kron_nnz, &kron_flops, &imethod, denseFlopDiscount); den_csr_kron_mult_method(imethod, transA, transB, a_, b, yin_, offsetY, xout_, offsetX, gemmR); } #undef A #undef BY #undef YAt #undef X #undef Y dmrgpp-6.02/src/KronUtil/den_eye.cpp000066400000000000000000000006711414604301300174040ustar00rootroot00000000000000#include "util.h" template void den_eye(const int nrow_C, const int ncol_C, PsimagLite::Matrix& c_ ) { /* * ------------------------------------- * form a dense identity matrix * ------------------------------------- */ int ic = 0; int jc = 0; for(jc=0; jc < ncol_C; jc++) { for(ic=0; ic < nrow_C; ic++) { c_(ic,jc) = (ic == jc) ? 1 : 0; }; }; } dmrgpp-6.02/src/KronUtil/den_gen_matrix.cpp000066400000000000000000000016261414604301300207600ustar00rootroot00000000000000#include "util.h" template void den_gen_matrix(const int nrow_A, const int ncol_A, const typename PsimagLite::Real::Type& threshold, PsimagLite::Matrix& a_) { /* * ------------------------------- * generate a random matix in (0,1) * accept only if aij < threshold * full matrix if threshold > 1 * sparse matrix if threshold << 1 * ------------------------------- */ typedef typename PsimagLite::Real::Type RealType; const ComplexOrRealType dzero = 0; int ia = 0; int ja = 0; for(ja=0; ja < ncol_A; ja++) { for(ia=0; ia < nrow_A; ia++) { RealType drand = rand()/static_cast(RAND_MAX); RealType aij = rand()/static_cast(RAND_MAX); int is_accept = (drand <= threshold); a_(ia,ja) = (is_accept) ? aij : dzero; } } } dmrgpp-6.02/src/KronUtil/den_is_eye.cpp000066400000000000000000000014201414604301300200700ustar00rootroot00000000000000#include "util.h" template bool den_is_eye(const PsimagLite::Matrix& a_) { const int nrow_A = a_.n_row(); const int ncol_A = a_.n_col(); /* * ------------------------- * return whether A is the identity matrix * matrix A in dense storage format * ------------------------- */ if (nrow_A != ncol_A) { return( false ); }; int ja = 0; for(ja=0; ja < ncol_A; ja++) { int ia = 0; for(ia=0; ia < nrow_A; ia++) { ComplexOrRealType aij = a_(ia,ja); ComplexOrRealType eij = (ia == ja) ? 1 : 0; bool is_eye = (aij == eij); if (!is_eye) { return( false ); }; }; }; /* * ----------------- * passed all checks * ----------------- */ return( true ); } #undef A dmrgpp-6.02/src/KronUtil/den_is_zeros.cpp000066400000000000000000000012621414604301300204540ustar00rootroot00000000000000#include "util.h" template bool den_is_zeros(const PsimagLite::Matrix& a_) { const int nrow_A = a_.n_row(); const int ncol_A = a_.n_col(); /* * ------------------------- * return whether A is the zero matrix * matrix A in dense storage format * ------------------------- */ const ComplexOrRealType zero = 0; int ja = 0; for(ja=0; ja < ncol_A; ja++) { int ia = 0; for(ia=0; ia < nrow_A; ia++) { ComplexOrRealType aij = a_(ia,ja); if (aij != zero) { return( false ); }; }; }; /* * ----------------- * passed all checks * ----------------- */ return( true ); } #undef A dmrgpp-6.02/src/KronUtil/den_kron_form.cpp000066400000000000000000000016651414604301300206220ustar00rootroot00000000000000#include "util.h" template void den_kron_form( const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_B, const int ncol_B, const PsimagLite::Matrix& b_, PsimagLite::Matrix& c_ ) { /* * --------------------------------------- * form C = kron(A,B), where * nrow_C = nrow_A * nrow_B * ncol_C = ncol_A * ncol_B * C([ib,ia], [jb,ja]) = A(ia,ja)*B(ib,jb) * --------------------------------------- */ int ia = 0; int ja = 0; int ib = 0; int jb = 0; for(ja=0; ja < ncol_A; ja++) { for(jb=0; jb < ncol_B; jb++) { for(ia=0; ia < nrow_A; ia++) { for(ib=0; ib < nrow_B; ib++) { int ic = ib + ia*nrow_B; int jc = jb + ja*ncol_B; c_(ic,jc) = a_(ia,ja) * b_(ib,jb); }; }; }; }; } dmrgpp-6.02/src/KronUtil/den_kron_form_general.cpp000066400000000000000000000056631414604301300223210ustar00rootroot00000000000000#include "util.h" template void den_kron_form_general( const char transA, const char transB, const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_B, const int ncol_B, const PsimagLite::Matrix& b_, PsimagLite::Matrix& c_ ) { /* * --------------------------------------- * form C = kron(A,B), where * nrow_C = nrow_A * nrow_B * ncol_C = ncol_A * ncol_B * C([ib,ia], [jb,ja]) = A(ia,ja)*B(ib,jb) * --------------------------------------- */ const int idebug = 0; const bool is_complex = PsimagLite::IsComplexNumber::True; const bool istransA = (transA == 'T') || (transA == 't'); const bool istransB = (transB == 'T') || (transB == 't'); const bool isConjtransA = (transA == 'C') || (transA == 'c'); const bool isConjtransB = (transB == 'C') || (transB == 'c'); int ia = 0; int ja = 0; int ib = 0; int jb = 0; int nrow_1 = (istransA || isConjtransA) ? ncol_A : nrow_A; int nrow_2 = (istransB || isConjtransB) ? ncol_B : nrow_B; int ncol_1 = (istransA || isConjtransA) ? nrow_A : ncol_A; int ncol_2 = (istransB || isConjtransB) ? nrow_B : ncol_B; int nrow_C = c_.rows(); int ncol_C = c_.cols(); assert( nrow_1 * nrow_2 == nrow_C ); assert( ncol_1 * ncol_2 == ncol_C ); if (idebug >= 1) { printf("den_kron_form_general: transA=%c, transB=%c, nrow_A=%d,ncol_A=%d\n", transA, transB, nrow_A, ncol_A ); printf("nrow_B=%d, ncol_B=%d, nrow_C=%d, ncol_C=%d\n", nrow_B, ncol_B, nrow_C, ncol_C ); printf("(nrow_1,nrow_2) = (%d,%d), (ncol_1,ncol2) = (%d,%d) \n", nrow_1,nrow_2, ncol_1,ncol_2 ); }; for(ja=0; ja < ncol_A; ja++) { for(jb=0; jb < ncol_B; jb++) { for(ia=0; ia < nrow_A; ia++) { for(ib=0; ib < nrow_B; ib++) { ComplexOrRealType aij = a_(ia,ja); ComplexOrRealType bij = b_(ib,jb); if (is_complex && isConjtransA) { aij = PsimagLite::conj( aij ); }; if (is_complex && isConjtransB) { bij = PsimagLite::conj( bij ); }; int iia = (istransA || isConjtransA) ? ja : ia; int jja = (istransA || isConjtransA) ? ia : ja; int iib = (istransB || isConjtransB) ? jb : ib; int jjb = (istransB || isConjtransB) ? ib : jb; // ------------------------------ // note index for B varies faster // ------------------------------ int ic = iib + iia*nrow_2; int jc = jjb + jja*ncol_2; if (idebug >= 2) { printf("(ia,ja)=(%d,%d), (ib,jb)=(%d,%d) ", ia,ja, ib,jb ); printf("(iia,jja)=(%d,%d), (iib,jjb)=(%d,%d) ", iia,jja, iib,jjb); printf("(ic,jc)=(%d,%d) \n", ic,jc ); }; c_(ic,jc) = aij * bij; }; }; }; }; } dmrgpp-6.02/src/KronUtil/den_kron_mult.cpp000066400000000000000000000303001414604301300206240ustar00rootroot00000000000000#include "util.h" template void den_kron_mult_method(const int imethod, const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::Matrix& b_, const typename PsimagLite::Vector::Type& yin_, SizeType offsetY, typename PsimagLite::Vector::Type& xout_, SizeType offsetX, PsimagLite::GemmR& gemmR) { const bool is_complex = PsimagLite::IsComplexNumber::True; const int nrow_A = a_.n_row(); const int ncol_A = a_.n_col(); const int nrow_B = b_.n_row(); const int ncol_B = b_.n_col(); const int isTransA = (transA == 'T') || (transA == 't'); const int isTransB = (transB == 'T') || (transB == 't'); const int isConjTransA = (transA == 'C') || (transA == 'c'); const int isConjTransB = (transB == 'C') || (transB == 'c'); const int nrow_1 = (isTransA || isConjTransA) ? ncol_A : nrow_A; const int ncol_1 = (isTransA || isConjTransA) ? nrow_A : ncol_A; const int nrow_2 = (isTransB || isConjTransB) ? ncol_B : nrow_B; const int ncol_2 = (isTransB || isConjTransB) ? nrow_B : ncol_B; const int nrow_X = nrow_2; const int ncol_X = nrow_1; const int nrow_Y = ncol_2; const int ncol_Y = ncol_1; PsimagLite::MatrixNonOwned xout(nrow_X, ncol_X, xout_, offsetX); PsimagLite::MatrixNonOwned yin(nrow_Y, ncol_Y, yin_, offsetY); assert((imethod == 1) || (imethod == 2) || (imethod == 3)); /* * ------------------------------------------------------------- * A and B in dense matrix format * * X += kron( A, B) * Y * that can be computed as either * imethod == 1 * * X(ib,ia) += (B(ib,jb) * Y(jb,ja) ) * transpose(A(ia,ja) or * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * BY is nrow_B by ncol_A, need 2*nnz(B)*ncolA flops * * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) need 2*nnz(A)*nrowB flops * * imethod == 2 * * X(ib,ia) += B(ib,jb) * (Y(jb,ja) * transpose(A)) or * YAt(jb,ia) = Y(jb,ja) * transpose(A(ia,ja)) * YAt is ncolB by nrowA, need 2*nnz(A) * ncolB flops * * X(ib,ia) += B(ib,jb) * YAt(jb,ia) need nnz(B) * nrowA flops * * imethod == 3 * * X += kron(A,B) * Y by visiting all non-zero entries in A, B * * this is feasible only if A and B are very sparse, need nnz(A)*nnz(B) flops * ------------------------------------------------------------- */ if (imethod == 1) { /* * -------------------------------------------- * BY(iby,jby) = op(B(ib,jb))*Y(iy,jy) * * X(ix,jx) += BY(iby,jby ) * transpose(op(A(ia,ja))) * -------------------------------------------- */ const int nrow_BY = nrow_X; const int ncol_BY = ncol_Y; PsimagLite::Matrix by_(nrow_BY, ncol_BY ); PsimagLite::MatrixNonOwned byRef(by_); PsimagLite::MatrixNonOwned byConstRef(by_); /* * --------------- * setup BY(ib,ja) * --------------- */ { int iby = 0; int jby = 0; // not needed FIXME for(jby=0; jby < ncol_BY; jby++) { for(iby=0; iby < nrow_BY; iby++) { by_(iby,jby) = 0; }; }; } { /* * ------------------------------ * BY(iby,jby) = op(B(ib,jb))*Y(iy,jy) * ------------------------------ */ // const char trans = (isTransB) ? 'T' : 'N'; const char trans = transB; den_matmul_pre(trans, nrow_B, ncol_B, b_, nrow_Y, ncol_Y, yin, nrow_BY, ncol_BY, byRef, gemmR); } { /* * ------------------------------------------- * X(ix,jx) += BY(iby,jby) * transpose(op(A(ia,ja))) * ------------------------------------------- */ const char trans = (isTransA || isConjTransA) ? 'N' : 'T'; if (is_complex && isConjTransA) { // -------------------------------------------- // transpose( conj( transpose(A) ) ) is conj(A) // perform conj operation // -------------------------------------------- PsimagLite::Matrix a_conj(nrow_A,ncol_A); for(int ja=0; ja < ncol_A; ja++) { for(int ia=0; ia < nrow_A; ia++) { a_conj(ia,ja) = PsimagLite::conj( a_(ia,ja) ); }; }; den_matmul_post(trans, nrow_A, ncol_A, a_conj, nrow_BY, ncol_BY, byConstRef, nrow_X, ncol_X, xout, gemmR); } else { den_matmul_post(trans, nrow_A, ncol_A, a_, nrow_BY, ncol_BY, byConstRef, nrow_X, ncol_X, xout, gemmR); }; } } else if (imethod == 2) { /* * --------------------- * YAt(jb,ia) = Y(jb,ja) * tranpose(A(ia,ja)) * X(ib,ia) += B(ib,jb) * YAt(jb,ia) * --------------------- */ const int nrow_YAt = nrow_Y; const int ncol_YAt = ncol_X; PsimagLite::Matrix yat_(nrow_YAt, ncol_YAt); PsimagLite::MatrixNonOwned yatRef(yat_); PsimagLite::MatrixNonOwned yatConstRef(yat_); /* * ---------------- * setup YAt(jb,ia) * ---------------- */ { int iy = 0; int jy = 0; // not needed, FIXME for(jy=0; jy < ncol_YAt; jy++) { for(iy=0; iy < nrow_YAt; iy++) { yat_(iy,jy) = 0; }; }; } { /* * --------------------- * YAt(jb,ia) = Y(jb,ja) * tranpose(op(A(ia,ja))) * --------------------- */ const char trans = (isTransA || isConjTransA) ? 'N' : 'T'; if (is_complex && isConjTransA) { // -------------------------------------------- // transpose( conj( transpose(A) ) ) is conj(A) // perform in-place conj operation // -------------------------------------------- PsimagLite::Matrix a_conj(nrow_A,ncol_A); for(int ja=0; ja < ncol_A; ja++) { for(int ia=0; ia < nrow_A; ia++) { a_conj(ia,ja) = PsimagLite::conj( a_(ia,ja) ); }; }; den_matmul_post(trans, nrow_A, ncol_A, a_conj, nrow_Y, ncol_Y, yin, nrow_YAt, ncol_YAt, yatRef, gemmR); } else { den_matmul_post(trans, nrow_A, ncol_A, a_, nrow_Y, ncol_Y, yin, nrow_YAt, ncol_YAt, yatRef, gemmR); }; } { /* * ------------ * X(ib,ia) += op(B(ib,jb)) * YAt(jb,ia) * ------------ */ // const char trans = (isTransB) ? 'T' : 'N'; const char trans = transB; den_matmul_pre(trans, nrow_B, ncol_B, b_, nrow_YAt, ncol_YAt, yatConstRef, nrow_X, ncol_X, xout, gemmR); } } else if (imethod == 3) { /* * --------------------------------------------- * C = kron(A,B) * C([ib,ia], [jb,ja]) = A(ia,ja)*B(ib,jb) * X([ib,ia]) += C([ib,ia],[jb,ja]) * Y([jb,ja]) * * C = kron(transpose(A),B) * C([ib,ja], [jb,ia]) = At(ja,ia) * B(ib,jb) * X([ib,ja]) = B(ib,jb) * Y(jb,ia) * transpose(At(ja,ia)) * X([ib,ja]) = B(ib,jb) * Y(jb,ia) * A(ia,ja) * = (A(ia,ja)*B(ib,jb)) * Y(jb,ia) * * C = kron(A, transpose(B)) * C([jb,ia],[ib,ja]) = A(ia,ja) * Bt(jb,ib) * X(jb,ia) = (A(ia,ja) * Bt(jb,ib)) * Y(ib,ja) * X(jb,ia) = Bt(jb,ib) * Y(ib,ja) * transpose(A(ia,ja)) * = Bt(jb,ib) * Y(ib,ja) * At(ja,ia) * = B(ib,jb) * Y(ib,ja) * A(ia,ja) * = (A(ia,ja)*B(ib,jb)) * Y(ib,ja) * * * C = kron( transpose(A), transpose(B)) * C([jb,ja], [ib,ia] ) = At(ja,ia) * Bt(jb,ib) * X(jb,ja) = ( At(ja,ia) * Bt(jb,ib) ) * Y(ib,ia) * = Bt(jb,ib) * Y(ib,ia) * transpose(At(ja,ia)) * = B(ib,jb) * Y(ib,ia) * A(ia,ja) * --------------------------------------------- */ int ia = 0; int ja = 0; int ib = 0; int jb = 0; for(ia=0; ia < nrow_A; ia++) { for(ja=0; ja < ncol_A; ja++) { for(ib=0; ib < nrow_B; ib++) { for(jb=0; jb < ncol_B; jb++) { ComplexOrRealType aij = a_(ia,ja); if (is_complex && isConjTransA) { aij = PsimagLite::conj( aij ); }; ComplexOrRealType bij = b_(ib,jb); if (is_complex && isConjTransB) { bij = PsimagLite::conj( bij ); }; ComplexOrRealType cij = aij * bij; int ix = (isTransB || isConjTransB) ? jb : ib; int jx = (isTransA || isConjTransA) ? ja : ia; int iy = (isTransB || isConjTransB) ? ib : jb; int jy = (isTransA || isConjTransA) ? ia : ja; ComplexOrRealType yij = yin(iy,jy); xout(ix,jx) += (cij * yij); }; }; }; }; }; } template void den_kron_mult(const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::Matrix& b_, const typename PsimagLite::Vector::Type& yin, SizeType offsetY, typename PsimagLite::Vector::Type& xout, SizeType offsetX, const typename PsimagLite::Real::Type denseFlopDiscount, PsimagLite::GemmR& gemmR) { /* * ------------------------------------------------------------- * A and B in dense matrix format * * X += kron( A, B) * Y * that can be computed as either * imethod == 1 * * X(ib,ia) += (B(ib,jb) * Y(jb,ja) ) * transpose(A(ia,ja) or * BY(ib,ja) = B(ib,jb)*Y(jb,ja) * BY is nrow_B by ncol_A, need 2*nnz(B)*ncolA flops * * X(ib,ia) += BY(ib,ja) * transpose(A(ia,ja)) need 2*nnz(A)*nrowB flops * * imethod == 2 * * X(ib,ia) += B(ib,jb) * (Y(jb,ja) * transpose(A)) or * YAt(jb,ia) = Y(jb,ja) * transpose(A(ia,ja)) * YAt is ncolB by nrowA, need 2*nnz(A) * ncolB flops * * X(ib,ia) += B(ib,jb) * YAt(jb,ia) need nnz(B) * nrowA flops * * imethod == 3 * * X += kron(A,B) * Y by visiting all non-zero entries in A, B * * this is feasible only if A and B are very sparse, need nnz(A)*nnz(B) flops * ------------------------------------------------------------- */ const int nrow_A = a_.n_row(); const int ncol_A = a_.n_col(); const int nrow_B = b_.n_row(); const int ncol_B = b_.n_col(); int nnz_A = nrow_A * ncol_A; int nnz_B = nrow_B * ncol_B; ComplexOrRealType kron_nnz = 0; ComplexOrRealType kron_flops = 0; int imethod = 1; const int isTransA = (transA == 'T') || (transA == 't'); const int isTransB = (transB == 'T') || (transB == 't'); const int isConjTransA = (transA == 'C') || (transA == 'c'); const int isConjTransB = (transB == 'C') || (transB == 'c'); int nrow_1 = (isTransA || isConjTransA) ? ncol_A : nrow_A; int ncol_1 = (isTransA || isConjTransA) ? nrow_A : ncol_A; int nrow_2 = (isTransB || isConjTransB) ? ncol_B : nrow_B; int ncol_2 = (isTransB || isConjTransB) ? nrow_B : ncol_B; estimate_kron_cost( nrow_1,ncol_1,nnz_A, nrow_2,ncol_2,nnz_B, &kron_nnz, &kron_flops, &imethod, denseFlopDiscount); den_kron_mult_method(imethod, transA, transB, a_, b_, yin, offsetY, xout, offsetX, gemmR); } #undef BY #undef YAt #undef X #undef Y #undef A #undef B #undef X2 dmrgpp-6.02/src/KronUtil/den_kron_submatrix.cpp000066400000000000000000000044311414604301300216670ustar00rootroot00000000000000#include "util.h" template void den_kron_submatrix(const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_B, const int ncol_B, const PsimagLite::Matrix& b_, const int nrindex, const int ncindex, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::Matrix& e_ ) { /* * ------------------------------------------------- * extract a submatrix out of kronecker product * equivalent to * C = kron(A,B), then E = C( rindex(:), cindex(:) ) * * assume A, B are in dense matrix format * ------------------------------------------------- */ const int nrow_E = nrindex; const int ncol_E = ncindex; int ie = 0; int je = 0; /* * ------------------------ * check rindex[], cindex[] * ------------------------ */ #ifndef NDEBUG const int nrow_C = nrow_A * nrow_B; const int ncol_C = ncol_A * ncol_B; for(ie=0; ie < nrindex; ie++) { int ic = rindex[ie]; int isok = (0 <= ic) && (ic < nrow_C); assert( isok ); }; for(je=0; je < ncindex; je++) { int jc = cindex[je]; int isok = (0 <= jc) && (jc < ncol_C); assert( isok ); }; #endif /* * -------------------------------- * fill entries in E(ie,je) matrix * -------------------------------- */ for(je=0; je < ncol_E; je++) { for(ie=0; ie < nrow_E; ie++) { int ic = rindex[ie]; int jc = cindex[je]; /* * -------------------------- * ic = [ib,ia] or * ic = ib + ia * nrow_B * * jc = [jb,ja] or * jc = jb + ja * ncol_B * -------------------------- */ int ib = (ic % nrow_B); int ia = (ic - ib)/nrow_B; int jb = (jc % ncol_B); int ja = (jc - jb)/ncol_B; assert((0 <= ia) && (ia < nrow_A) && (0 <= ib) && (ib < nrow_B) && ((ib + ia*nrow_B) == ic )); assert((0 <= ja) && (ja < ncol_A) && (0 <= jb) && (jb < ncol_B) && ((jb + ja*ncol_B) == jc)); ComplexOrRealType cij = a_(ia,ja)*b_(ib,jb); e_(ie,je) = cij; }; }; } #undef A #undef B #undef E dmrgpp-6.02/src/KronUtil/den_matmul_post.cpp000066400000000000000000000102751414604301300211670ustar00rootroot00000000000000#include "util.h" template void den_matmul_post(const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned& xout, PsimagLite::GemmR& gemmR) { const bool is_complex = PsimagLite::IsComplexNumber::True; /* * ------------------------------------------------------- * A in dense matrix format * * compute X += Y * op(A) * where op(A) is transpose(A) if trans_A = 'T' or 't' * op(A) is conj(transpose(A)) if trans_A = 'C' or 'c' * op(A) is A otherwise * * if need transpose(A) then * X(nrow_X,ncol_X) += Y(nrow_Y,ncol_Y) * tranpose(A(nrow_A,ncol_A)) * requires (nrow_X == nrow_Y) && (ncol_Y == ncol_A) && (ncol_X == nrow_A) * * if need A then * X(nrow_X,ncol_X) += Y(nrow_Y,ncol_Y) * A(nrow_A,ncol_A) * requires (nrow_X == nrow_Y) && ( ncol_Y == nrow_A) && (ncol_X == ncol_A) * ------------------------------------------------------- */ int isTranspose = (trans_A == 'T') || (trans_A == 't'); int isConjTranspose = (trans_A == 'C') || (trans_A == 'c'); const bool use_blas = true; if (isTranspose || isConjTranspose) { /* * ---------------------------------------------------------- * X(nrow_X,ncol_X) += Y(nrow_Y,ncol_Y) * transpose(A(nrow_A,ncol_A)) * X(ix,jx) += Y(iy,jy) * transpose( A(ia,ja) ) * X(ix,jx) += sum( Y(iy, ja) * At(ja,ia), over ja ) * ---------------------------------------------------------- */ assert((nrow_X == nrow_Y) && (ncol_Y == ncol_A) && (ncol_X == nrow_A)); if (use_blas) { /* * ------------------------ * X = Y * transpose(A) + X * X(ix,jx) += sum( Y(ix,ja) * A(ia,ja), over ja) * ------------------------ */ char trans1 = 'N'; char trans2 = trans_A; int mm = nrow_X; int nn = ncol_X; int kk = ncol_Y; ComplexOrRealType alpha = 1; ComplexOrRealType beta = 1; int ld1 = nrow_Y; int ld2 = nrow_A; int ld3 = nrow_X; gemmR(trans1, trans2, mm, nn, kk, alpha, &(yin(0,0)), ld1, &(a_(0,0)), ld2, beta, &(xout(0,0)), ld3); } else { int jx = 0; for(jx=0; jx < ncol_X; jx++) { int ix = 0; for(ix=0; ix < nrow_X; ix++) { ComplexOrRealType dsum = 0; int iy = ix; int ja = 0; for(ja=0; ja < ncol_A; ja++) { int jy = ja; int ia = jx; ComplexOrRealType aij = a_(ia,ja); ComplexOrRealType atji = aij; if (is_complex && isConjTranspose) { atji = PsimagLite::conj( atji ); }; dsum += (yin(iy,jy) * atji); }; xout(ix,jx) += dsum; }; }; }; } else { /* * --------------------------------------------- * X(nrow_X,ncol_X) += Y(nrow_Y,ncol_Y) * A(nrow_A,ncol_A) * X(ix,jx) += sum( Y(iy,ia) * A(ia,ja), over ia ) * --------------------------------------------- */ assert((nrow_X == nrow_Y) && (ncol_Y == nrow_A) && (ncol_X == ncol_A)); if (use_blas) { /* * ------------- * X = Y * A + X * ------------- */ char trans1 = 'N'; char trans2 = 'N'; int mm = nrow_X; int nn = ncol_X; int kk = ncol_Y; ComplexOrRealType alpha = 1; ComplexOrRealType beta = 1; int ld1 = nrow_Y; int ld2 = nrow_A; int ld3 = nrow_X; gemmR(trans1, trans2, mm, nn, kk, alpha, &(yin(0,0)), ld1, &(a_(0,0)), ld2, beta, &(xout(0,0)), ld3); } else { int jx = 0; for(jx=0; jx < ncol_X; jx++) { int ix = 0; for(ix=0; ix < ncol_X; ix++) { ComplexOrRealType dsum = 0; int ia = 0; for(ia=0; ia < nrow_A; ia++) { int ja = jx; int iy = ix; int jy = ia; ComplexOrRealType aij = a_(ia,ja); dsum += (aij * yin(iy,jy)); }; xout(ix,jx) += dsum; }; }; }; } } #undef X #undef Y #undef A dmrgpp-6.02/src/KronUtil/den_matmul_pre.cpp000066400000000000000000000102541414604301300207650ustar00rootroot00000000000000#include "util.h" template void den_matmul_pre( const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned& xout, PsimagLite::GemmR& gemmR) { /* * ------------------------------------------------------- * A in dense matrix format * * compute X += op(A) * Y * where op(A) is transpose(A) if trans_A = 'T' or 't' * op(A) is A otherwise * * if need transpose(A) then * X(nrow_X,ncol_X) += tranpose(A(nrow_A,ncol_A))*Y(nrow_Y,ncol_Y) * requires nrow_X == ncol_A, ncol_X == ncol_Y, nrow_A == nrow_Y * * if need A then * X(nrow_X,ncol_X) += A(nrow_A,ncol_A) * Y(nrow_Y,ncol_Y) * requires nrow_X == nrow_A, ncol_A == nrow_Y, ncol_X == ncol_Y * ------------------------------------------------------- */ const bool is_complex = PsimagLite::IsComplexNumber::True; bool use_blas = true; int isTranspose = (trans_A == 'T') || (trans_A == 't'); int isConjTranspose = (trans_A == 'C') || (trans_A == 'c'); if (isTranspose || isConjTranspose) { /* * ---------------------------------------------------------- * X(nrow_X,ncol_X) += tranpose(A(nrow_A,ncol_A))*Y(nrow_Y,ncol_Y) * X(ix,jx) += transpose( A(ia,ja) ) * Y(iy,jy) * X(ja,jy) += sum( At(ja, ia) * Y(ia,jy), over ia) * ---------------------------------------------------------- */ assert((nrow_X == ncol_A) && (nrow_A == nrow_Y) && (ncol_X == ncol_Y)); if (use_blas) { /* * --------------------- * X = transpose(A)*Y + X * --------------------- */ // char trans1 = 'T'; char trans1 = trans_A; char trans2 = 'N'; int mm = nrow_X; int nn = ncol_X; int kk = nrow_Y; ComplexOrRealType alpha = 1.0; ComplexOrRealType beta = 1.0; int ld1 = nrow_A; int ld2 = nrow_Y; int ld3 = nrow_X; gemmR(trans1, trans2, mm, nn, kk, alpha, &(a_(0,0)), ld1, &(yin(0,0)), ld2, beta, &(xout(0,0)), ld3 ); } else { int jx = 0; for(jx=0; jx < ncol_X; jx++) { int ix = 0; for(ix=0; ix < nrow_X; ix++) { int ja = ix; int jy = jx; ComplexOrRealType dsum = 0; int ia = 0; for(ia=0; ia < nrow_A; ia++) { int iy = ia; ComplexOrRealType aij = a_(ia,ja); ComplexOrRealType atji = aij; if (is_complex && isConjTranspose) { atji = PsimagLite::conj( atji ); }; dsum += (atji * yin(iy,jy)); }; xout(ix,jx) += dsum; }; }; }; } else { /* * --------------------------------------------- * X(nrow_X,ncol_X) += A(nrow_A,ncol_A) * Y(nrow_Y,ncol_Y) * X(ia,jy) += sum( A(ia,ja)*Y(ja,jy), over ja ) * --------------------------------------------- */ assert((nrow_X == nrow_A) && (ncol_A == nrow_Y) && (ncol_X == ncol_Y)); if (use_blas) { /* * -------------- * X = A * Y + X * -------------- */ char trans1 = 'N'; char trans2 = 'N'; int mm = nrow_X; int nn = ncol_X; int kk = nrow_Y; ComplexOrRealType alpha = 1; ComplexOrRealType beta = 1; int ld1 = nrow_A; int ld2 = nrow_Y; int ld3 = nrow_X; gemmR(trans1, trans2, mm, nn, kk, alpha, &(a_(0,0)), ld1, &(yin(0,0)), ld2, beta, &(xout(0,0)), ld3); } else { /* * ---------------------------------------------- * X(ix,jx) += sum( A(ia,ja) * Y(ja,jy), over ja) * ---------------------------------------------- */ int jx = 0; for(jx=0; jx < ncol_X; jx++) { int ix = 0; for(ix=0; ix < nrow_X; ix++) { int ia = ix; int jy = jx; ComplexOrRealType dsum = 0; int ja = 0; for(ja=0; ja < ncol_A; ja++) { int iy = ja; ComplexOrRealType aij = a_(ia,ja); dsum += (aij * yin(iy,jy)); }; xout(ix,jx) += dsum; }; }; }; }; } #undef X #undef Y #undef A dmrgpp-6.02/src/KronUtil/den_nnz.cpp000066400000000000000000000015001414604301300174170ustar00rootroot00000000000000#include "util.h" template int den_nnz(const PsimagLite::Matrix& a_) { const int nrow_A = a_.n_row(); const int ncol_A = a_.n_col(); /* * ------------------------- * return number of nonzeros * matrix A in dense storage format * ------------------------- */ const bool use_estimate = true; if (use_estimate) { return( nrow_A * ncol_A ); }; const ComplexOrRealType dzero = 0; int nnz_A = 0; int ja = 0; /* * ----------------------------- * Note that nnz_A is a reduction variable * ----------------------------- */ for(ja=0; ja < ncol_A; ja++) { int ia = 0; for(ia=0; ia < nrow_A; ia++) { int is_zero = (a_(ia,ja) == dzero); nnz_A = (is_zero)? nnz_A : (nnz_A+1); }; }; return( nnz_A ); } #undef A dmrgpp-6.02/src/KronUtil/den_submatrix.cpp000066400000000000000000000022531414604301300206360ustar00rootroot00000000000000#include "util.h" template void den_submatrix(const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrindex, const int ncindex, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::Matrix& c_ ) { /* * ------------------------------------- * extract submatrix from a dense matrix * ------------------------------------- */ const int nrow_C = nrindex; const int ncol_C = ncindex; int ic = 0; int jc = 0; /* * ------------------------ * check rindex[], cindex[] * ------------------------ */ #ifndef NDEBUG for(ic=0; ic < nrindex; ic++) { int ia = rindex[ic]; int isok = (0 <= ia) && (ia < nrow_A); assert( isok ); }; for(jc=0; jc < ncindex; jc++) { int ja = cindex[jc]; int isok = (0 <= ja) && (ja < ncol_A); assert( isok ); }; #endif for(jc=0; jc < ncol_C; jc++) { for(ic=0; ic < nrow_C; ic++) { int ia = rindex[ic]; int ja = cindex[jc]; c_(ic,jc) = a_(ia,ja); }; }; } dmrgpp-6.02/src/KronUtil/den_transpose.cpp000066400000000000000000000011501414604301300206310ustar00rootroot00000000000000#include "util.h" template void den_transpose(const int nrow_A, const int ncol_A, const ComplexOrRealType a_[], ComplexOrRealType at_[] ) { /* * --------------------------- * perform transpose operation * for dense matrix A * --------------------------- */ #define A(ia,ja) a_[ (ia) + (ja)*nrow_A ] #define At(ia,ja) at_[ (ia) + (ja)*nrow_At ] const int nrow_At = ncol_A; int ia = 0; int ja = 0; for(ja=0; ja < ncol_A; ja++) { for(ia=0; ia < nrow_A; ia++) { At(ja,ia) = A(ia,ja); }; }; } #undef A #undef At dmrgpp-6.02/src/KronUtil/den_zeros.cpp000066400000000000000000000004311414604301300177560ustar00rootroot00000000000000#include "util.h" template void den_zeros(const int, const int, PsimagLite::Matrix& a_) { /* * ---------------------- * set array to all zeros * ---------------------- */ a_.setTo(0.0); } #undef A dmrgpp-6.02/src/KronUtil/estimate_kron_cost.cpp000066400000000000000000000064031414604301300216670ustar00rootroot00000000000000#include "util.h" template void estimate_kron_cost(const int nrow_A, const int ncol_A, const int nnz_A_in, const int nrow_B, const int ncol_B, const int nnz_B_in, ComplexOrRealType *p_kron_nnz, ComplexOrRealType *p_kron_flops, int *p_imethod, const typename PsimagLite::Real::Type denseFlopDiscount) { typedef typename PsimagLite::Real::Type RealType; int imethod = 1; assert( p_kron_nnz != 0 ); assert( p_kron_flops != 0 ); assert( p_imethod != 0 ); RealType nnz_A = static_cast(nnz_A_in); RealType nnz_B = static_cast(nnz_B_in); bool is_dense_A = (nnz_A_in == nrow_A * ncol_A); bool is_dense_B = (nnz_B_in == nrow_B * ncol_B); /* * ------------------------------------ * assume dense matrix operations are * faster than sparse matrix operations * ------------------------------------ */ RealType discount = 1; /* % ------------------------ % method 1: % % BY(ib,ja) = B(ib,jb)*Y( jb,ja ), % % BY has size nrow_B by ncol_A % % X(ib,ia) = BY(ib,ja)*At(ja,ia) % ------------------------ */ discount = (is_dense_B) ? denseFlopDiscount : 1; RealType flops_BY = discount * 2.0*nnz_B*ncol_A; discount = (is_dense_A) ? denseFlopDiscount : 1; RealType flops_BYAt = discount * 2.0*nnz_A*nrow_B; RealType flops_method1 = flops_BY + flops_BYAt; RealType nnz_method1 = nrow_B * ncol_A; /* % ------------------------ % method 2: % % YAt(jb,ia) = Y(jb,ja) * At(ja,ia) % % YAt has size ncol_B by nrow_A % % X(ib,ia) = B(ib,jb)*YAt(jb,ia) % ------------------------ */ discount = (is_dense_A) ? denseFlopDiscount : 1; RealType flops_YAt = discount * 2.0*nnz_A*ncol_B; discount = (is_dense_B) ? denseFlopDiscount : 1; flops_BYAt = discount * 2.0*nnz_B*nrow_A; RealType flops_method2 = flops_YAt + flops_BYAt; RealType nnz_method2 = ncol_B * nrow_A; /* % ------------------ % method 3: % X = kron(A,B) * Y % % evaluate all nonzeros in A and nonzeros in B % need A and B to be very sparse % ------------------ */ RealType flops_method3 = 2.0*nnz_A*nnz_B; RealType nnz_method3 = nnz_A*nnz_B; RealType kron_flops = std::min( flops_method1, std::min( flops_method2, flops_method3)); RealType kron_nnz = std::min( nnz_method1, std::min( nnz_method2, nnz_method3)); const bool minimize_flops = true; if (minimize_flops) { /* * ---------------------------- * minimize the number of flops * ---------------------------- */ imethod = 3; if (kron_flops == flops_method1) { imethod = 1; }; if (kron_flops == flops_method2) { imethod = 2; }; } else { /* * ------------------------------------ * minimize amount of temporary storage * ------------------------------------ */ imethod = 3; if (kron_nnz == nnz_method1) { imethod = 1; }; if (kron_nnz == nnz_method2) { imethod = 2; }; } *p_kron_nnz = kron_nnz; *p_kron_flops = kron_flops; *p_imethod = imethod; } #undef MIN #undef TRUE #undef FALSE dmrgpp-6.02/src/KronUtil/test1.cpp000066400000000000000000000452161414604301300170400ustar00rootroot00000000000000#include "util.h" #include "KronUtil.h" #ifndef USE_FLOAT typedef double RealType; #else typedef float RealType; #endif int main() { const RealType denseFlopDiscount = 0.2; const int idebug = 0; int nerrors = 0; RealType thresholdA = 0; RealType thresholdB = 0; int nrow_A = 0; int ncol_A = 0; int nrow_B = 0; int ncol_B = 0; int itransA = 0; int itransB = 0; static const bool needsPrinting = false; const SizeType gemmRnb = 100; const SizeType threadsForGemmR = 1; PsimagLite::GemmR gemmR(needsPrinting, gemmRnb, threadsForGemmR); for(thresholdB=0; thresholdB <= 1.1; thresholdB += 0.1) { for(thresholdA=0; thresholdA <= 1.1; thresholdA += 0.1) { for(ncol_A=1; ncol_A <= 10; ncol_A += 3 ) { for(nrow_A=1; nrow_A <= 10; nrow_A += 3 ) { for(ncol_B=1; ncol_B <= 10; ncol_B += 3 ) { for(nrow_B=1; nrow_B <= 10; nrow_B += 3 ) { for(itransA=0; itransA <= 2; itransA++) { for(itransB=0; itransB <= 2; itransB++) { char transA = (itransA == 1) ? 'T' : ((itransA == 2) ? 'C' : 'N'); char transB = (itransB == 1) ? 'T' : ((itransB == 2) ? 'C' : 'N'); int imethod = 0; int isTransA = (transA == 'T'); int isTransB = (transB == 'T'); int isConjTransA = (transA == 'C'); int isConjTransB = (transB == 'C'); int nrow_1 = (isTransA || isConjTransA) ? ncol_A : nrow_A; int ncol_1 = (isTransA || isConjTransA) ? nrow_A : ncol_A; int nrow_2 = (isTransB || isConjTransB) ? ncol_B : nrow_B; int ncol_2 = (isTransB || isConjTransB) ? nrow_B : ncol_B; int nrow_C = nrow_1 * nrow_2; int ncol_C = ncol_1 * ncol_2; int nrow_X = nrow_2; int ncol_X = nrow_1; int nrow_Y = ncol_2; int ncol_Y = ncol_1; PsimagLite::Matrix a_(nrow_A, ncol_A); PsimagLite::Matrix b_(nrow_B, ncol_B); PsimagLite::Matrix y_(nrow_Y, ncol_Y); PsimagLite::MatrixNonOwned yRef(y_); PsimagLite::Matrix x1_(nrow_X, ncol_X); PsimagLite::MatrixNonOwned x1Ref(x1_); PsimagLite::Matrix x2_(nrow_X, ncol_X); PsimagLite::MatrixNonOwned x2Ref(x2_); PsimagLite::Matrix x3_(nrow_X, ncol_X); PsimagLite::MatrixNonOwned x3Ref(x3_); PsimagLite::Matrix x4_(nrow_X, ncol_X); PsimagLite::MatrixNonOwned x4Ref(x4_); PsimagLite::Matrix sx1_(nrow_X, ncol_X); PsimagLite::MatrixNonOwned sx1Ref(sx1_); PsimagLite::Matrix sx2_(nrow_X, ncol_X); PsimagLite::MatrixNonOwned sx2Ref(sx2_); PsimagLite::Matrix sx3_(nrow_X, ncol_X); PsimagLite::MatrixNonOwned sx3Ref(sx3_); PsimagLite::Matrix sx4_(nrow_X, ncol_X); PsimagLite::MatrixNonOwned sx4Ref(sx4_); if (thresholdA == 0) { if (nrow_A == ncol_A) { /* * ------------------------------------ * special case to test identity matrix * ------------------------------------ */ if (idebug >= 1) { printf("nrow_A=%d, identity \n",nrow_A); } den_eye( nrow_A, ncol_A, a_ ); assert( den_is_eye(a_) ); PsimagLite::CrsMatrix a(a_); assert( csr_is_eye(a) ); } else { if (idebug >= 1) { printf("nrow_A=%d,ncol_A=%d, zeros\n",nrow_A,ncol_A); } den_zeros(nrow_A,ncol_A,a_); assert( den_is_zeros(a_) ); PsimagLite::CrsMatrix a(a_); assert( csr_is_zeros(a) ); } } else { den_gen_matrix( nrow_A, ncol_A, thresholdA, a_); PsimagLite::CrsMatrix a(a_); assert( den_is_eye(a_) == csr_is_eye(a) ); assert( den_is_zeros(a_) == csr_is_zeros(a) ); } if ((thresholdB == 0) && (nrow_B == ncol_B)) { /* * ------------------------------------ * special case to test identity matrix * ------------------------------------ */ if (idebug >= 1) { printf("nrow_B=%d, identity \n",nrow_B); } den_eye( nrow_B, ncol_B, b_ ); assert( den_is_eye(b_)); PsimagLite::CrsMatrix b(b_); assert( csr_is_eye(b) ); } else { den_gen_matrix( nrow_B, ncol_B, thresholdB, b_); PsimagLite::CrsMatrix b(b_); assert( den_is_eye(b_) == csr_is_eye(b) ); assert( den_is_zeros(b_) == csr_is_zeros(b) ); } den_gen_matrix( nrow_Y, ncol_Y, 1.0, y_); den_zeros( nrow_X, ncol_X, x1_); den_zeros( nrow_X, ncol_X, x2_); den_zeros( nrow_X, ncol_X, x3_); den_zeros( nrow_X, ncol_X, sx1_); den_zeros( nrow_X, ncol_X, sx2_); den_zeros( nrow_X, ncol_X, sx3_); imethod =1; den_kron_mult_method( imethod, transA, transB, a_, b_, yRef.getVector(), 0, x1Ref.getVector(), 0, gemmR); imethod = 2; den_kron_mult_method( imethod, transA, transB, a_, b_, yRef.getVector(), 0, x2Ref.getVector(), 0, gemmR); imethod = 3; den_kron_mult_method( imethod, transA, transB, a_, b_, yRef.getVector(), 0, x3Ref.getVector(), 0, gemmR); // ------------------ // form C = kron(A,B) // ------------------ PsimagLite::Matrix c_(nrow_C, ncol_C); den_kron_form_general( transA, transB, nrow_A, ncol_A, a_, nrow_B, ncol_B, b_, c_ ); // ----------------------- // perform matrix-multiply // ----------------------- { const char trans1 = 'N'; const char trans2 = 'N'; const RealType alpha = 1.0; const RealType beta = 0.0; // ------------------------------ // reshape X, Y as column vectors // ------------------------------ const int mm = nrow_X*ncol_X; const int nn = 1; const int kk = ncol_C; const int ld1 = nrow_C; const int ld2 = nrow_Y*ncol_Y; const int ld3 = nrow_X*ncol_X; const RealType * const pA = &(c_(0,0)); const RealType * const pB = &(yRef.getVector()[0]); RealType *pC = &(x4Ref.getVector()[0]); psimag::BLAS::GEMM( trans1, trans2, mm,nn,kk, alpha, pA, ld1, pB, ld2, beta, pC, ld3 ); } int ix = 0; int jx = 0; for(jx=0; jx < ncol_X; jx++) { for(ix=0; ix < nrow_X; ix++) { RealType diff12 = std::abs( x1_(ix,jx) - x2_(ix,jx) ); RealType diff23 = std::abs( x2_(ix,jx) - x3_(ix,jx) ); RealType diff31 = std::abs( x3_(ix,jx) - x1_(ix,jx) ); RealType diff41 = std::abs( x4_(ix,jx) - x1_(ix,jx) ); RealType diffmax = std::max( diff41, std::max( diff12, std::max( diff23, diff31) ) ); const RealType tol = 1.0/(1000.0*1000.0*1000.0); int isok = (diffmax <= tol); if (!isok) { nerrors += 1; printf("den: transA=%c, itransA %d transB=%c, itransB %d nrow_A %d ncol_A %d nrow_B %d ncol_B %d \n", transA,itransA, transB,itransB, nrow_A,ncol_A, nrow_B, ncol_B ); printf("ix %d, jx %d, diff12 %f, diff23 %f, diff31 %f diff41 %f \n", ix, jx, diff12, diff23, diff31, diff41 ); } } } /* * ------------------ * test sparse matrix * ------------------ */ PsimagLite::CrsMatrix a(a_); assert( den_is_eye(a_) == csr_is_eye(a) ); assert( den_is_zeros(a_) == csr_is_zeros(a) ); PsimagLite::CrsMatrix b(b_); assert( den_is_eye(b_) == csr_is_eye(b) ); assert( den_is_zeros(b_) == csr_is_zeros(b) ); imethod =1; csr_kron_mult_method( imethod, transA, transB, a, b, yRef, sx1Ref); imethod =2; csr_kron_mult_method( imethod, transA, transB, a, b, yRef, sx2Ref); imethod =3; csr_kron_mult_method( imethod, transA, transB, a, b, yRef, sx3Ref); for(jx=0; jx < ncol_X; jx++) { for(ix=0; ix < nrow_X; ix++) { RealType diff1 = std::abs( x1_(ix,jx) - sx1_(ix,jx)); RealType diff2 = std::abs( x2_(ix,jx) - sx2_(ix,jx)); RealType diff3 = std::abs( x3_(ix,jx) - sx3_(ix,jx)); RealType diffmax = std::max( diff1, std::max( diff2, diff3) ); const RealType tol = 1.0/(1000.0*1000.0*1000.0); int isok = (diffmax <= tol ); if (!isok) { nerrors += 1; printf("csr: itransA %d itransB %d nrow_A %d ncol_A %d nrow_B %d ncol_B %d \n", itransA, itransB, nrow_A,ncol_A, nrow_B, ncol_B ); printf("ix %d, jx %d, diff1 %f, diff2 %f, diff3 %f \n", ix,jx, diff1, diff2, diff3 ); } } } /* * --------------------- * test generic interface * --------------------- */ den_zeros(nrow_X,ncol_X, x1_ ); den_zeros(nrow_X,ncol_X, sx1_ ); den_kron_mult_method(imethod, transA, transB, a_, b_, yRef.getVector(), 0, x1Ref.getVector(), 0, gemmR); csr_kron_mult(transA, transB, a, b, yRef.getVector(), 0, sx1Ref.getVector(), 0, denseFlopDiscount); for(jx=0; jx < ncol_X; jx++) { for(ix=0; ix < nrow_X; ix++) { RealType diff = std::abs( x1_(ix,jx) - sx1_(ix,jx) ); const RealType tol = 1.0/(1000.0 * 1000.0 * 1000.0); int isok = (diff <= tol); if (!isok) { nerrors += 1; printf("nrow_A %d ncol_A %d nrow_B %d ncol_B %d \n", nrow_A,ncol_A, nrow_B, ncol_B ); printf("ix %d, jx %d, diff %f \n", ix,jx,diff ); } } } /* * ----------------------- * test mixed matrix types dense and CSR * ----------------------- */ den_zeros( nrow_X, ncol_X, sx1_ ); den_csr_kron_mult( transA, transB, a_, b, yRef.getVector(), 0, sx1Ref.getVector(), 0, denseFlopDiscount, gemmR); for(jx=0; jx < ncol_X; jx++) { for(ix=0; ix < nrow_X; ix++) { RealType diff1 = std::abs( x1_(ix,jx) - sx1_(ix,jx)); RealType diff2 = 0; RealType diff3 = 0; RealType diffmax = std::max( diff1, std::max( diff2, diff3) ); const RealType tol = 1.0/(1000.0*1000.0*1000.0); int isok = (diffmax <= tol ); if (!isok) { nerrors += 1; printf("den_csr: itransA %d itransB %d nrow_A %d ncol_A %d nrow_B %d ncol_B %d \n", itransA, itransB, nrow_A,ncol_A, nrow_B, ncol_B ); printf("ix %d, jx %d, diff1 %f, diff2 %f, diff3 %f \n", ix,jx, diff1, diff2, diff3 ); } } } den_zeros( nrow_X, ncol_X, sx1_ ); den_zeros( nrow_X, ncol_X, sx2_ ); den_zeros( nrow_X, ncol_X, sx3_ ); imethod =1; den_csr_kron_mult_method( imethod, transA, transB, a_, b, yRef.getVector(), 0, sx1Ref.getVector(), 0, gemmR); imethod =2; den_csr_kron_mult_method( imethod, transA, transB, a_, b, yRef.getVector(), 0, sx2Ref.getVector(), 0, gemmR); imethod =3; den_csr_kron_mult_method(imethod, transA, transB, a_, b, yRef.getVector(), 0, sx3Ref.getVector(), 0, gemmR); for(jx=0; jx < ncol_X; jx++) { for(ix=0; ix < nrow_X; ix++) { RealType diff1 = std::abs( x1_(ix,jx) - sx1_(ix,jx)); RealType diff2 = std::abs( x2_(ix,jx) - sx2_(ix,jx)); RealType diff3 = std::abs( x3_(ix,jx) - sx3_(ix,jx)); RealType diffmax = std::max( diff1, std::max( diff2, diff3) ); const RealType tol = 1.0/(1000.0*1000.0*1000.0); int isok = (diffmax <= tol ); if (!isok) { nerrors += 1; printf("den_csr: itransA %d itransB %d nrow_A %d ncol_A %d nrow_B %d ncol_B %d \n", itransA, itransB, nrow_A,ncol_A, nrow_B, ncol_B ); printf("ix %d, jx %d, diff1 %f, diff2 %f, diff3 %f \n", ix,jx, diff1, diff2, diff3 ); } } } /* * ----------------------- * test mixed matrix types CSR and dense * ----------------------- */ den_zeros( nrow_X, ncol_X, sx1_ ); csr_den_kron_mult(transA, transB, a, b_, yRef.getVector(), 0, sx1Ref.getVector(), 0, denseFlopDiscount, gemmR); for(jx=0; jx < ncol_X; jx++) { for(ix=0; ix < nrow_X; ix++) { RealType diff1 = std::abs( x1_(ix,jx) - sx1_(ix,jx)); RealType diff2 = 0; RealType diff3 = 0; RealType diffmax = std::max( diff1, std::max( diff2, diff3) ); const RealType tol = 1.0/(1000.0*1000.0*1000.0); int isok = (diffmax <= tol ); if (!isok) { nerrors += 1; printf("den_csr: itransA %d itransB %d nrow_A %d ncol_A %d nrow_B %d ncol_B %d \n", itransA, itransB, nrow_A,ncol_A, nrow_B, ncol_B ); printf("ix %d, jx %d, diff1 %f, diff2 %f, diff3 %f \n", ix,jx, diff1, diff2, diff3 ); } } } den_zeros( nrow_X, ncol_X, sx1_ ); den_zeros( nrow_X, ncol_X, sx2_ ); den_zeros( nrow_X, ncol_X, sx3_ ); imethod =1; const SizeType izero = 0; csr_den_kron_mult_method(imethod, transA, transB, a, b_, yRef.getVector(), izero, sx1Ref.getVector(), izero, gemmR); imethod =2; csr_den_kron_mult_method(imethod, transA, transB, a, b_, yRef.getVector(), izero, sx2Ref.getVector(), izero, gemmR); imethod =3; csr_den_kron_mult_method(imethod, transA, transB, a, b_, yRef.getVector(), izero, sx3Ref.getVector(), izero, gemmR); for(jx=0; jx < ncol_X; jx++) { for(ix=0; ix < nrow_X; ix++) { RealType diff1 = std::abs( x1_(ix,jx) - sx1_(ix,jx)); RealType diff2 = std::abs( x2_(ix,jx) - sx2_(ix,jx)); RealType diff3 = std::abs( x3_(ix,jx) - sx3_(ix,jx)); RealType diffmax = std::max( diff1, std::max( diff2, diff3) ); const RealType tol = 1.0/(1000.0*1000.0*1000.0); int isok = (diffmax <= tol ); if (!isok) { nerrors += 1; printf("den_csr: itransA %d itransB %d nrow_A %d ncol_A %d nrow_B %d ncol_B %d \n", itransA, itransB, nrow_A,ncol_A, nrow_B, ncol_B ); printf("ix %d, jx %d, diff1 %f, diff2 %f, diff3 %f \n", ix,jx, diff1, diff2, diff3 ); } } } } } } } } } } } if (nerrors == 0) { printf("pass all tests\n"); } return(0); } #undef X1 #undef X2 #undef X3 #undef SX1 #undef SX2 #undef SX3 #undef A #undef B #undef Y dmrgpp-6.02/src/KronUtil/test2.cpp000066400000000000000000000172521414604301300170400ustar00rootroot00000000000000#include "util.h" #include "KronUtil.h" #ifndef USE_FLOAT typedef double RealType; #else typedef float RealType; #endif int main() { typedef RealType RealType; typedef std::complex ComplexOrRealType; int nerrors = 0; RealType thresholdA = 0; RealType thresholdB = 0; int nrow_A = 0; int ncol_A = 0; int nrow_B = 0; int ncol_B = 0; for(thresholdB=0; thresholdB <= 1.1; thresholdB += 0.1) { for(thresholdA=0; thresholdA <= 1.1; thresholdA += 0.1) { for(ncol_A=1; ncol_A <= 10; ncol_A += 3 ) { for(nrow_A=1; nrow_A <= 10; nrow_A += 3 ) { for(ncol_B=1; ncol_B <= 10; ncol_B += 3 ) { for(nrow_B=1; nrow_B <= 10; nrow_B += 3 ) { PsimagLite::Matrix a_(nrow_A, ncol_A); PsimagLite::Matrix b_(nrow_B, ncol_B); if ((thresholdA == 0) && (nrow_A == ncol_A)) { /* * ------------------------------------ * special case to test identity matrix * ------------------------------------ */ den_eye( nrow_A, ncol_A, a_ ); assert( den_is_eye(a_) ); PsimagLite::CrsMatrix a(a_); assert( csr_is_eye(a) ); } else { den_gen_matrix( nrow_A, ncol_A, thresholdA, a_); PsimagLite::CrsMatrix a(a_); assert( den_is_eye(a_) == csr_is_eye(a) ); assert( den_is_zeros(a_) == csr_is_zeros(a) ); }; if ((thresholdB == 0) && (nrow_B == ncol_B)) { den_eye( nrow_B, ncol_B, b_ ); assert( den_is_eye(b_)); PsimagLite::CrsMatrix b(b_); assert( csr_is_eye(b) ); } else { den_gen_matrix( nrow_B, ncol_B, thresholdB, b_); PsimagLite::CrsMatrix b(b_); assert( den_is_eye(b_) == csr_is_eye(b) ); assert( den_is_zeros(b_) == csr_is_zeros(b) ); }; /* * ----------------------------------- * generate compressed row format from * dense matrices A, B * ----------------------------------- */ PsimagLite::CrsMatrix a(a_); assert( den_is_eye(a_) == csr_is_eye(a) ); PsimagLite::CrsMatrix b(b_); assert( den_is_eye(b_) == csr_is_eye(b) ); /* * ----------------------------- * explicitly form C = kron(A,B) * ----------------------------- */ const int nrow_C = nrow_A * nrow_B; const int ncol_C = ncol_A * ncol_B; if (ncol_C < 2) continue; PsimagLite::Matrix c_(nrow_C, ncol_C); den_kron_form( nrow_A, ncol_A, a_, nrow_B, ncol_B, b_, c_); /* * --------------------------------------- * generate compressed sparse version of C * --------------------------------------- */ PsimagLite::CrsMatrix c(c_); PsimagLite::Vector::Type rindex(nrow_C); PsimagLite::Vector::Type cindex(ncol_C); int nrindex = 0; int ncindex = 0; /* * -------------------- * extract even rows * extract odd columns * -------------------- */ int ic = 0; int jc = 0; nrindex = 0; for(ic=0; ic < nrow_C; ic +=2 ) { rindex[nrindex] = ic; nrindex++; }; ncindex = 0; for(jc=1; jc < ncol_C; jc += 2) { cindex[ncindex] = jc; ncindex++; }; /* * ------------------------------- * extract submatrix from C into D * ------------------------------- */ int nrow_D = nrindex; int ncol_D = ncindex; PsimagLite::Matrix d_(nrow_D, ncol_D); den_submatrix( nrow_C, ncol_C, c_, nrindex, ncindex, rindex, cindex, d_); /* * ------------------------------------- * generate submatrix from sparse version C * ------------------------------------- */ const int max_nnz_D = 1 + den_nnz(d_); PsimagLite::CrsMatrix sd(d_.n_row(),d_.n_col()); csr_submatrix( c, nrindex, ncindex, max_nnz_D, rindex, cindex, sd ); /* * ----------------------- * convert to dense matrix * ----------------------- */ PsimagLite::Matrix dd_(nrow_D, ncol_D); crsMatrixToFullMatrix(dd_, sd); /* * -------------------------------------- * check both matrices should be the same * -------------------------------------- */ { int id = 0; int jd = 0; for(jd=0; jd < ncol_D; jd++) { for(id=0; id < nrow_D; id++) { RealType diff = std::abs(dd_(id,jd) - d_(id,jd) ); const RealType tol = 1.0/(1000.0 * 1000.0); bool isok = (diff <= tol ); if (!isok) { nerrors += 1; std::cout<<"nrow_D "< e_(nrow_E, ncol_E ); den_kron_submatrix( nrow_A,ncol_A, a_, nrow_B,ncol_B, b_, nrindex, ncindex, rindex, cindex, e_); /* * -------------------------- * check E and D are the same * -------------------------- */ int ie = 0; int je = 0; for(je=0; je < ncol_E; je++) { for(ie=0; ie < nrow_E; ie++) { ComplexOrRealType eij = e_(ie,je); ComplexOrRealType dij = d_(ie,je); int isok = (eij == dij); if (!isok) { nerrors += 1; std::cout<<"nrow_A "< e(nrow_E, ncol_E); const int max_nnz_E = 1 + den_nnz(e_); csr_kron_submatrix( a, b, nrindex,ncindex, max_nnz_E, rindex, cindex, e); /* * --------------------------------- * convert from sparse back to dense * --------------------------------- */ PsimagLite::Matrix se_(nrow_E, ncol_E); crsMatrixToFullMatrix(se_, e); /* * ----------------------------------------- * check E(ie,je) and SE(ie,je) are the same * ----------------------------------------- */ { int ie = 0; int je = 0; for(je=0; je < ncol_E; je++) { for(ie=0; ie < nrow_E; ie++) { RealType diff = std::abs( e_(ie,je) - se_(ie,je) ); const RealType tol = 1.0/(1000.0 * 1000.0); bool isok = (diff <= tol); if (!isok) { nerrors += 1; std::cout<<"nrow_E "<(const int nrow_A, const int ncol_A, const int nnz_A, const int nrow_B, const int ncol_B, const int nnz_B, RealType *p_kron_nnz, RealType *p_kron_flops, int *p_imethod, const RealType dense_flop_discount); template void csr_den_kron_mult_method(const int imethod, const char transA, const char transB, const PsimagLite::CrsMatrix& a_, const PsimagLite::Matrix& b_, const PsimagLite::Vector::Type& yin_, SizeType offsetY , PsimagLite::Vector::Type& xout_, SizeType offsetX, PsimagLite::GemmR&); template bool csr_is_eye(const PsimagLite::CrsMatrix&); template void csr_transpose(const int nrow_A, const int ncol_A, const int arowptr[], const int acol[], const RealType aval[], int atrowptr[], int atcol[], RealType atval[] ); template void csr_kron_mult_method(const int imethod, const char transA, const char transB, const PsimagLite::CrsMatrix& a, const PsimagLite::CrsMatrix& b, const PsimagLite::MatrixNonOwned& yin, PsimagLite::MatrixNonOwned& xout); template void csr_matmul_post(const char trans_A, const PsimagLite::CrsMatrix&, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned& xout); template void csr_matmul_pre(const char trans_A, const PsimagLite::CrsMatrix&, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned& xout); template void csr_submatrix(const PsimagLite::CrsMatrix& a, const int nrow_B, const int ncol_B, const int max_nnz, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::CrsMatrix& b); template void csr_eye(const int nrow_B, const int ncol_B, PsimagLite::CrsMatrix& b); template void csr_kron_submatrix(const PsimagLite::CrsMatrix& a, const PsimagLite::CrsMatrix& b, const int nrindex, const int ncindex, const int max_nnz, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::CrsMatrix& h); template void csc_matmul_pre(const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const PsimagLite::Vector::Type& aval, const int nrow_Y, const int ncol_Y, const PsimagLite::Matrix& yin, const int nrow_X, const int ncol_X, PsimagLite::Matrix& xout ); template void csc_matmul_post(const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const PsimagLite::Vector::Type& aval, const int nrow_Y, const int ncol_Y, const PsimagLite::Matrix& yin, const int nrow_X, const int ncol_X, PsimagLite::Matrix& xout); template void csc_kron_mult_method(const int imethod, const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const PsimagLite::Vector::Type& aval, const int nrow_B, const int ncol_B, const PsimagLite::Vector::Type& bcolptr, const PsimagLite::Vector::Type& brow, const PsimagLite::Vector::Type& bval, const PsimagLite::Matrix& yin, PsimagLite::Matrix& xout ); template void csc_kron_mult(const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const PsimagLite::Vector::Type& aval, const int nrow_B, const int ncol_B, const PsimagLite::Vector::Type& bcolptr, const PsimagLite::Vector::Type& brow, const PsimagLite::Vector::Type& bval, const PsimagLite::Matrix& yin, PsimagLite::Matrix& xout, const RealType); template void coord2csr(const int nrow_A, const int ncol_A, const int nnz, const int ilist[], const int jlist[], const RealType alist[], int arowptr[], int acol[], RealType aval[] ); template void den_csr_kron_mult_method(const int imethod, const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::CrsMatrix& b, const PsimagLite::Vector::Type& yin, SizeType offsetY, PsimagLite::Vector::Type& xout_, SizeType offsetX, PsimagLite::GemmR&); template void den_zeros(const int nrow_A, const int ncol_A, PsimagLite::Matrix& a_); template void den_transpose(const int nrow_A, const int ncol_A, const RealType a_[], RealType at_[] ); template void den_gen_matrix(const int nrow_A, const int ncol_A, const RealType& threshold, PsimagLite::Matrix& a_); template void den_matmul_pre(const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned& xout, PsimagLite::GemmR&); template void den_matmul_post(const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned& xout, PsimagLite::GemmR&); template void den_kron_submatrix(const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_B, const int ncol_B, const PsimagLite::Matrix& b_, const int nrindex, const int ncindex, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::Matrix& c_ ); template void den_kron_mult_method(const int imethod, const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::Matrix& b_, const PsimagLite::Vector::Type& yin, SizeType offsetY , PsimagLite::Vector::Type& xout, SizeType offsetX, PsimagLite::GemmR&); template int den_nnz(const PsimagLite::Matrix&); template bool den_is_eye(const PsimagLite::Matrix&); template bool den_is_zeros(const PsimagLite::Matrix&); template void den_kron_form(const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_B, const int ncol_B, const PsimagLite::Matrix& b_, PsimagLite::Matrix& c_); template void den_kron_form_general( const char transA, const char transB, const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_B, const int ncol_B, const PsimagLite::Matrix& b_, PsimagLite::Matrix& c_); template void den_submatrix(const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrindex, const int ncindex, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::Matrix& c_); template void den_eye(const int nrow_A, const int ncol_A, PsimagLite::Matrix& c_); dmrgpp-6.02/src/KronUtil/util.h000066400000000000000000000331441414604301300164170ustar00rootroot00000000000000#ifndef UTIL_H #define UTIL_H #include #include #include #include "Complex.h" #include "KronUtil.h" #include "MatrixNonOwned.h" #include "GemmR.h" template void estimate_kron_cost( const int nrow_A, const int ncol_A, const int nnz_A, const int nrow_B, const int ncol_B, const int nnz_B, ComplexOrRealType *p_kron_nnz, ComplexOrRealType *p_kron_flops, int *p_imethod, const typename PsimagLite::Real::Type); template void csr_den_kron_mult_method(const int imethod, const char transA, const char transB, const PsimagLite::CrsMatrix& a_, const PsimagLite::Matrix& b_, const typename PsimagLite::Vector::Type& yin_, SizeType offsetY , typename PsimagLite::Vector::Type& xout_, SizeType offsetX, PsimagLite::GemmR&); template bool csr_is_eye(const PsimagLite::CrsMatrix&); template void csr_transpose(const int nrow_A, const int ncol_A, const int arowptr[], const int acol[], const ComplexOrRealType aval[], int atrowptr[], int atcol[], ComplexOrRealType atval[] ); template void csr_kron_mult_method(const int imethod, const char transA, const char transB, const PsimagLite::CrsMatrix& a, const PsimagLite::CrsMatrix& b, const PsimagLite::MatrixNonOwned& yin, PsimagLite::MatrixNonOwned& xout); template void csr_matmul_post(const char trans_A, const PsimagLite::CrsMatrix&, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned& xout); template void csr_matmul_pre( const char trans_A, const PsimagLite::CrsMatrix&, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned& xout); template void csr_submatrix(const PsimagLite::CrsMatrix& a, const int nrow_B, const int ncol_B, const int max_nnz, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::CrsMatrix& b); template void csr_eye(const int nrow_B, const int ncol_B, PsimagLite::CrsMatrix& b); template void csr_kron_submatrix(const PsimagLite::CrsMatrix& a, const PsimagLite::CrsMatrix& b, const int nrindex, const int ncindex, const int max_nnz, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::CrsMatrix& h); int csc_nnz(const int ncol_A, const PsimagLite::Vector::Type& acolptr ); template void csc_matmul_pre( const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const typename PsimagLite::Vector::Type& aval, const int nrow_Y, const int ncol_Y, const PsimagLite::Matrix& yin, const int nrow_X, const int ncol_X, PsimagLite::Matrix& xout ); template void csc_matmul_post(const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const typename PsimagLite::Vector::Type& aval, const int nrow_Y, const int ncol_Y, const PsimagLite::Matrix& yin, const int nrow_X, const int ncol_X, PsimagLite::Matrix& xout); template void csc_kron_mult_method(const int imethod, const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const typename PsimagLite::Vector::Type& aval, const int nrow_B, const int ncol_B, const PsimagLite::Vector::Type& bcolptr, const PsimagLite::Vector::Type& brow, const typename PsimagLite::Vector::Type& bval, const PsimagLite::Matrix& yin, PsimagLite::Matrix& xout ); template void csc_kron_mult(const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const typename PsimagLite::Vector::Type& aval, const int nrow_B, const int ncol_B, const PsimagLite::Vector::Type& bcolptr, const PsimagLite::Vector::Type& brow, const typename PsimagLite::Vector::Type& bval, const PsimagLite::Matrix& yin, PsimagLite::Matrix& xout, const typename PsimagLite::Vector::Type); template void coord2csr(const int nrow_A, const int ncol_A, const int nnz, const int ilist[], const int jlist[], const ComplexOrRealType alist[], int arowptr[], int acol[], ComplexOrRealType aval[] ); template void den_csr_kron_mult_method(const int imethod, const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::CrsMatrix& b, const typename PsimagLite::Vector::Type& yin, SizeType offsetY, typename PsimagLite::Vector::Type& xout_, SizeType offsetX, PsimagLite::GemmR&); void den_copymat( const int nrow, const int ncol, const int asrc_[], int bdest_[] ); template void den_zeros( const int nrow_A, const int ncol_A, PsimagLite::Matrix& a_); template void den_transpose( const int nrow_A, const int ncol_A, const ComplexOrRealType a_[], ComplexOrRealType at_[] ); template void den_gen_matrix( const int nrow_A, const int ncol_A, const typename PsimagLite::Real::Type& threshold, PsimagLite::Matrix& a_); template void den_matmul_pre(const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned& xout, PsimagLite::GemmR&); template void den_matmul_post(const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned& xout, PsimagLite::GemmR&); template void den_kron_submatrix( const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_B, const int ncol_B, const PsimagLite::Matrix& b_, const int nrindex, const int ncindex, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::Matrix& c_ ); template void den_kron_mult_method(const int imethod, const char transA, const char transB, const PsimagLite::Matrix& a_, const PsimagLite::Matrix& b_, const typename PsimagLite::Vector::Type& yin, SizeType offsetY , typename PsimagLite::Vector::Type& xout, SizeType offsetX, PsimagLite::GemmR&); template int den_nnz(const PsimagLite::Matrix&); template bool den_is_eye(const PsimagLite::Matrix&); template bool den_is_zeros(const PsimagLite::Matrix&); template void den_kron_form( const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_B, const int ncol_B, const PsimagLite::Matrix& b_, PsimagLite::Matrix& c_); template void den_kron_form_general( const char transA, const char transB, const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrow_B, const int ncol_B, const PsimagLite::Matrix& b_, PsimagLite::Matrix& c_); template void den_submatrix( const int nrow_A, const int ncol_A, const PsimagLite::Matrix& a_, const int nrindex, const int ncindex, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::Matrix& c_); template void den_eye(const int nrow_A, const int ncol_A, PsimagLite::Matrix& c_); template bool csr_is_zeros(const PsimagLite::CrsMatrix& a) { // ---------------------------------------------------- // check whether a sparse matrix is the zero matrix // ---------------------------------------------------- return isZero(a, 0.0); } template int csr_nnz(const PsimagLite::CrsMatrix& a) { return a.nonZeros(); } #endif dmrgpp-6.02/src/KronUtil/utilComplex.cpp000066400000000000000000000336361414604301300203100ustar00rootroot00000000000000#include #include "estimate_kron_cost.cpp" #include "csr_den_kron_mult.cpp" #include "csr_kron_mult.cpp" #include "csr_eye.cpp" #include "csr_is_eye.cpp" #include "csr_transpose.cpp" #include "csr_matmul_post.cpp" #include "csr_matmul_pre.cpp" #include "csr_submatrix.cpp" #include "csr_kron_submatrix.cpp" #include "csc_matmul_pre.cpp" #include "csc_matmul_post.cpp" #include "csc_kron_mult.cpp" #include "coord2csr.cpp" #include "den_csr_kron_mult.cpp" #include "den_zeros.cpp" #include "den_transpose.cpp" #include "den_gen_matrix.cpp" #include "den_matmul_pre.cpp" #include "den_matmul_post.cpp" #include "den_kron_submatrix.cpp" #include "den_submatrix.cpp" #include "den_kron_mult.cpp" #include "den_nnz.cpp" #include "den_eye.cpp" #include "den_is_eye.cpp" #include "den_is_zeros.cpp" #include "den_kron_form.cpp" #include "den_kron_form_general.cpp" #ifndef USE_FLOAT typedef double RealType; #else typedef float RealType; #endif template void estimate_kron_cost >(const int nrow_A, const int ncol_A, const int nnz_A, const int nrow_B, const int ncol_B, const int nnz_B, std::complex *p_kron_nnz, std::complex *p_kron_flops, int *p_imethod, const RealType dense_flop_discount); template void csr_den_kron_mult_method >(const int imethod, const char transA, const char transB, const PsimagLite::CrsMatrix >& a_, const PsimagLite::Matrix >& b_, const PsimagLite::Vector >::Type& yin_, SizeType offsetY , PsimagLite::Vector >::Type& xout_, SizeType offsetX, PsimagLite::GemmR >&); template bool csr_is_eye >(const PsimagLite::CrsMatrix >&); template void csr_transpose >(const int nrow_A, const int ncol_A, const int arowptr[], const int acol[], const std::complex aval[], int atrowptr[], int atcol[], std::complex atval[] ); template void csr_kron_mult_method >(const int imethod, const char transA, const char transB, const PsimagLite::CrsMatrix >& a, const PsimagLite::CrsMatrix >& b, const PsimagLite::MatrixNonOwned >& yin, PsimagLite::MatrixNonOwned >& xout); template void csr_matmul_post >(const char trans_A, const PsimagLite::CrsMatrix >&, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned >& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned >& xout); template void csr_matmul_pre >(const char trans_A, const PsimagLite::CrsMatrix >&, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned >& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned >& xout); template void csr_submatrix >(const PsimagLite::CrsMatrix >& a, const int nrow_B, const int ncol_B, const int max_nnz, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::CrsMatrix >& b); template void csr_eye >(const int nrow_B, const int ncol_B, PsimagLite::CrsMatrix >& b); template void csr_kron_submatrix >(const PsimagLite::CrsMatrix >& a, const PsimagLite::CrsMatrix >& b, const int nrindex, const int ncindex, const int max_nnz, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::CrsMatrix >& h); template void csc_matmul_pre >(const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const PsimagLite::Vector >::Type& aval, const int nrow_Y, const int ncol_Y, const PsimagLite::Matrix >& yin, const int nrow_X, const int ncol_X, PsimagLite::Matrix >& xout ); template void csc_matmul_post >(const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const PsimagLite::Vector >::Type& aval, const int nrow_Y, const int ncol_Y, const PsimagLite::Matrix >& yin, const int nrow_X, const int ncol_X, PsimagLite::Matrix >& xout); template void csc_kron_mult_method >(const int imethod, const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const PsimagLite::Vector >::Type& aval, const int nrow_B, const int ncol_B, const PsimagLite::Vector::Type& bcolptr, const PsimagLite::Vector::Type& brow, const PsimagLite::Vector >::Type& bval, const PsimagLite::Matrix >& yin, PsimagLite::Matrix >& xout ); template void csc_kron_mult >(const int nrow_A, const int ncol_A, const PsimagLite::Vector::Type& acolptr, const PsimagLite::Vector::Type& arow, const PsimagLite::Vector >::Type&, const int nrow_B, const int ncol_B, const PsimagLite::Vector::Type& bcolptr, const PsimagLite::Vector::Type& brow, const PsimagLite::Vector >::Type&, const PsimagLite::Matrix >& yin, PsimagLite::Matrix >& xout, const RealType); template void coord2csr >(const int nrow_A, const int ncol_A, const int nnz, const int ilist[], const int jlist[], const std::complex alist[], int arowptr[], int acol[], std::complex aval[] ); template void den_csr_kron_mult_method >(const int imethod, const char transA, const char transB, const PsimagLite::Matrix >& a_, const PsimagLite::CrsMatrix >& b, const PsimagLite::Vector >::Type& yin, SizeType offsetY, PsimagLite::Vector >::Type& xout_, SizeType offsetX, PsimagLite::GemmR >&); template void den_zeros >(const int nrow_A, const int ncol_A, PsimagLite::Matrix >& a_); template void den_transpose >(const int nrow_A, const int ncol_A, const std::complex a_[], std::complex at_[] ); template void den_gen_matrix >(const int nrow_A, const int ncol_A, const RealType& threshold, PsimagLite::Matrix >& a_); template void den_matmul_pre >(const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Matrix >& a_, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned >& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned >& xout, PsimagLite::GemmR >&); template void den_matmul_post >(const char trans_A, const int nrow_A, const int ncol_A, const PsimagLite::Matrix >& a_, const int nrow_Y, const int ncol_Y, const PsimagLite::MatrixNonOwned >& yin, const int nrow_X, const int ncol_X, PsimagLite::MatrixNonOwned >& xout, PsimagLite::GemmR >&); template void den_kron_submatrix >(const int nrow_A, const int ncol_A, const PsimagLite::Matrix >& a_, const int nrow_B, const int ncol_B, const PsimagLite::Matrix >& b_, const int nrindex, const int ncindex, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::Matrix >& c_ ); template void den_kron_mult_method >(const int imethod, const char transA, const char transB, const PsimagLite::Matrix >& a_, const PsimagLite::Matrix >& b_, const PsimagLite::Vector >::Type& yin, SizeType offsetY , PsimagLite::Vector >::Type& xout, SizeType offsetX, PsimagLite::GemmR >&); template int den_nnz >(const PsimagLite::Matrix >&); template bool den_is_eye >(const PsimagLite::Matrix >&); template bool den_is_zeros >(const PsimagLite::Matrix >&); template void den_kron_form >(const int nrow_A, const int ncol_A, const PsimagLite::Matrix >& a_, const int nrow_B, const int ncol_B, const PsimagLite::Matrix >& b_, PsimagLite::Matrix >& c_); template void den_kron_form_general >( const char transA, const char transB, const int nrow_A, const int ncol_A, const PsimagLite::Matrix >& a_, const int nrow_B, const int ncol_B, const PsimagLite::Matrix >& b_, PsimagLite::Matrix >& c_); template void den_submatrix >(const int nrow_A, const int ncol_A, const PsimagLite::Matrix >& a_, const int nrindex, const int ncindex, const PsimagLite::Vector::Type& rindex, const PsimagLite::Vector::Type& cindex, PsimagLite::Matrix >& c_); template void den_eye >(const int nrow_A, const int ncol_A, PsimagLite::Matrix >& c_); dmrgpp-6.02/src/LICENSE000066400000000000000000000051021414604301300145200ustar00rootroot00000000000000Copyright (c) 2009 , UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* dmrgpp-6.02/src/Models/000077500000000000000000000000001414604301300147405ustar00rootroot00000000000000dmrgpp-6.02/src/Models/ExtendedHubbard1Orb/000077500000000000000000000000001414604301300205145ustar00rootroot00000000000000dmrgpp-6.02/src/Models/ExtendedHubbard1Orb/ExtendedHubbard1Orb.h000066400000000000000000000154611414604301300244500ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ExtendedHubbard1Orb.h * FIXME: Merge into Hubbard * Hubbard + V_{ij} n_i n_j * */ #ifndef EXTENDED_HUBBARD_1ORB_H #define EXTENDED_HUBBARD_1ORB_H #include "../Models/HubbardOneBand/ModelHubbard.h" namespace Dmrg { //! Extended Hubbard for DMRG solver, uses ModelHubbard by containment template class ExtendedHubbard1Orb : public ModelBaseType { public: typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef ModelHubbard ModelHubbardType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::MyBasis MyBasis; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelHubbardType::HilbertBasisType HilbertBasisType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelHubbardType::HilbertSpaceHubbardType HilbertSpaceHubbardType; typedef typename HilbertSpaceHubbardType::HilbertState HilbertState; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename ModelBaseType::VectorOperatorType VectorOperatorType; typedef typename PsimagLite::Vector::Type VectorHilbertStateType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; ExtendedHubbard1Orb(const SolverParamsType& solverParams, InputValidatorType& io, SuperGeometryType const &geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), superGeometry_(geometry), modelHubbard_(solverParams, io, geometry, "") {} void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); modelHubbard_.write(label, io); } virtual void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType time) const { modelHubbard_.addDiagonalsInNaturalBasis(hmatrix, block, time); } void fillLabeledOperators(VectorQnType& qns) { modelHubbard_.fillLabeledOperators(qns); this->makeTrackable("n"); } void fillModelLinks() { modelHubbard_.fillModelLinks(); ModelTermType& ninj = ModelBaseType::createTerm("ninj"); OpForLinkType n("n"); ninj.push(n, 'N', n, 'N'); } private: //! Find n_i in the natural basis natBasis SparseMatrixType findOperatorMatrices(int i, const VectorHilbertStateType& natBasis) const { SizeType n = natBasis.size(); PsimagLite::Matrix cm(n,n); for (SizeType ii=0;ii modelParameters_; const SuperGeometryType& superGeometry_; ModelHubbardType modelHubbard_; }; //class ExtendedHubbard1Orb } // namespace Dmrg /*@}*/ #endif // EXTENDED_HUBBARD_1ORB_H dmrgpp-6.02/src/Models/FeAsBasedScExtended/000077500000000000000000000000001414604301300204645ustar00rootroot00000000000000dmrgpp-6.02/src/Models/FeAsBasedScExtended/FeAsBasedScExtended.h000066400000000000000000000255471414604301300243760ustar00rootroot00000000000000/* Copyright (c) 2009, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file FeBasedScExtedned.h * * An implementation of a Hubbard model for Fe-based superconductors * to use with the DmrgSolver * This extends the FeAsBasedSc model to include JNN and JNNN couplings * FIXME: Merge into FeAsBasedSc * */ #ifndef FEAS_BASED_SC_EX #define FEAS_BASED_SC_EX #include "../Models/FeAsModel/ModelFeBasedSc.h" namespace Dmrg { template class FeAsBasedScExtended : public ModelBaseType { public: typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef ModelFeBasedSc ModelFeAsType; typedef typename ModelFeAsType::HilbertState HilbertState; typedef typename ModelFeAsType::HilbertBasisType HilbertBasisType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename OperatorType::Su2RelatedType Su2RelatedType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename BasisType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; static const SizeType SPIN_UP = ModelFeAsType::SPIN_UP; static const SizeType SPIN_DOWN = ModelFeAsType::SPIN_DOWN; FeAsBasedScExtended(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), modelFeAs_(solverParams,io,geometry), orbitals_(modelParameters_.orbitals) {} void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); modelFeAs_.write(label, io); io.write(label + "/orbitals_", orbitals_); } virtual void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType time) const { modelFeAs_.addDiagonalsInNaturalBasis(hmatrix, block, time); } protected: void fillLabeledOperators(VectorQnType& qns) { modelFeAs_.fillLabeledOperators(qns); SizeType site = 0; BlockType block(1, site); typename PsimagLite::Vector::Type creationMatrix; setOperatorMatricesInternal(creationMatrix, qns, block); OpsLabelType& splus = this->createOpsLabel("naturalSplus"); SizeType x = 2*orbitals_; assert(x < creationMatrix.size()); splus.push(creationMatrix[x]); OpsLabelType& sminus = this->createOpsLabel("naturalSminus"); x = 2*orbitals_; assert(x < creationMatrix.size()); creationMatrix[x].dagger(); sminus.push(creationMatrix[x]); creationMatrix[x].dagger(); OpsLabelType& sz = this->createOpsLabel("naturalSz"); x = 2*orbitals_ + 1; assert(x < creationMatrix.size()); sz.push(creationMatrix[x]); this->makeTrackable("naturalSplus"); this->makeTrackable("naturalSz"); } void fillModelLinks() { modelFeAs_.fillModelLinks(); bool isSu2 = BasisType::useSu2Symmetry(); ModelTermType& spsm = ModelBaseType::createTerm("SplusSminus"); OpForLinkType splus("naturalSplus"); auto valueModiferTerm0 = [isSu2](ComplexOrRealType& value) { value *= (isSu2) ? -0.5 : 0.5;}; spsm.push(splus, 'N', splus, 'C', valueModiferTerm0, typename ModelTermType::Su2Properties(2, -1, 2)); ModelTermType& szsz = ModelBaseType::createTerm("szsz"); if (!isSu2) { OpForLinkType sz("naturalSz"); szsz.push(sz, 'N', sz, 'N', typename ModelTermType::Su2Properties(2, 0.5)); } else { auto valueModifierTermOther = [isSu2](ComplexOrRealType& value) { if (isSu2) value = -value;}; spsm.push(splus, 'N', splus, 'C', valueModifierTermOther, typename ModelTermType::Su2Properties(2, -1, 2)); } } private: //! set creation matrices for sites in block void setOperatorMatricesInternal(VectorOperatorType& creationMatrix, VectorQnType& qns, const BlockType& block) const { blockIsSize1OrThrow(block); modelFeAs_.setQns(qns); modelFeAs_.setOperatorMatricesInternal(creationMatrix, block); // add S^+_i to creationMatrix setSplus(creationMatrix,block); // add S^z_i to creationMatrix setSz(creationMatrix,block); } // add S^+_i to creationMatrix void setSplus(typename PsimagLite::Vector ::Type&creationMatrix, const BlockType& block) const { SparseMatrixType m; cDaggerC(m,creationMatrix,block,1.0,SPIN_UP,SPIN_DOWN); Su2RelatedType su2related; SizeType offset = 2*orbitals_; su2related.source.push_back(offset); su2related.source.push_back(offset+1); su2related.source.push_back(offset); su2related.transpose.push_back(-1); su2related.transpose.push_back(-1); su2related.transpose.push_back(1); su2related.offset = 1; OperatorType sPlus(m, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(2, 2), -1, su2related); creationMatrix.push_back(sPlus); } // add S^z_i to creationMatrix void setSz(typename PsimagLite::Vector ::Type&creationMatrix, const BlockType& block) const { SparseMatrixType m1,m2; cDaggerC(m1,creationMatrix,block,0.5,SPIN_UP,SPIN_UP); cDaggerC(m2,creationMatrix,block,-0.5,SPIN_DOWN,SPIN_DOWN); Su2RelatedType su2related2; SparseMatrixType m = m1; m += m2; OperatorType sz(m, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(2 ,1), 1.0/sqrt(2.0), su2related2); creationMatrix.push_back(sz); } // add S^+_i to creationMatrix void cDaggerC(SparseMatrixType& sum, const typename PsimagLite::Vector ::Type&creationMatrix, const BlockType&, RealType value, SizeType spin1, SizeType spin2) const { SparseMatrixType tmpMatrix,tmpMatrix2; for (SizeType orbital=0;orbital ::Type&, const BlockType&) const { // nothing if block.size == 1 } // add J_{ij} S^z_i S^z_j to Hamiltonian void addSzSz(SparseMatrixType&, const typename PsimagLite::Vector ::Type&, const BlockType&) const { // nothing if block.size == 1 } void blockIsSize1OrThrow(const BlockType& block) const { if (block.size()==1) return; throw PsimagLite::RuntimeError("FeAsBasedExtended:: blocks must be of size 1\n"); } ParametersModelFeAs modelParameters_; ModelFeAsType modelFeAs_; SizeType orbitals_; }; //class FeAsBasedScExtended } // namespace Dmrg /*@}*/ #endif // FEAS_BASED_SC_EX dmrgpp-6.02/src/Models/FeAsModel/000077500000000000000000000000001414604301300165375ustar00rootroot00000000000000dmrgpp-6.02/src/Models/FeAsModel/FeAsJzSymmetry.h000066400000000000000000000374211414604301300216130ustar00rootroot00000000000000#ifndef FEASJZSYMMETRY_H #define FEASJZSYMMETRY_H #include "Vector.h" #include "CrsMatrix.h" #include "Operator.h" #include "ModelBase.h" #include "HilbertSpaceFeAs.h" #include "Matrix.h" #include "ProgramGlobals.h" namespace Dmrg { template class FeAsJzSymmetry { public: typedef typename VectorOperatorType::value_type OperatorType; typedef typename OperatorType::StorageType OperatorStorageType; typedef typename OperatorStorageType::value_type ComplexOrRealType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Real::Type RealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef PsimagLite::Vector::Type VectorSizeType; FeAsJzSymmetry(bool) {} void init(HilbertBasisType&, VectorOperatorType&) {} void setElectronsAndJz(SizeType& electrons, SizeType& electronsUp, SizeType ind) const {} bool isEnabled() const { return false; } bool isSet() const { return false; } void write(PsimagLite::String, PsimagLite::IoNg::Out::Serializer&) const {} }; template class FeAsJzSymmetry { public: typedef typename VectorOperatorType::value_type OperatorType; typedef typename OperatorType::StorageType OperatorStorageType; typedef typename OperatorStorageType::value_type ComplexOrRealType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Real::Type RealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef PsimagLite::Vector::Type VectorSizeType; typedef typename HilbertBasisType::value_type WordType; typedef HilbertSpaceFeAs HilbertSpaceFeAsType; static const int SPIN_UP=HilbertSpaceFeAsType::SPIN_UP; static const int SPIN_DOWN=HilbertSpaceFeAsType::SPIN_DOWN; FeAsJzSymmetry(bool isEnabled) : isEnabled_(isEnabled), isSet_(false) { if (!isEnabled_) return; ProgramGlobals::oldChangeOfBasis = true; } void init(const HilbertBasisType& natBasis, VectorOperatorType& creationMatrix) { assert(!isSet_); // write operator Jz in first basis MatrixType Jz_opr = Jz_opr_original_basis(creationMatrix); // reorder Jz so that it is block diagonal in n and find P, // and determine the electrons_ and save it --> permutation VectorRealType blockOffsets; MatrixType P(natBasis.size(),natBasis.size()); MatrixType P_dagg(natBasis.size(),natBasis.size()); Get_P_and_Blocks_and_electrons(natBasis,blockOffsets,P); transposeConjugate(P_dagg,P); //Rotate(P,Jz_opr); // diagonalize each block --> U, jzEigs VectorRealType jzEigs; jzEigs.resize(natBasis.size()); DiagonalizeBlocks_GetU(Jz_opr, blockOffsets, jzEigs); convertJzEigs(jzModifiedEigs_,jzEigs); MatrixType UP(natBasis.size(),natBasis.size()); UP=P_dagg*u_; //rotate all operators Rotate_all(u_,creationMatrix); isSet_ = true; } void setElectronsAndJz(SizeType& electrons, SizeType& electronsUp, SizeType ind) const { if (!isEnabled_) return; assert(isSet_); assert(ind < electrons_.size()); electrons = electrons_[ind]; assert(ind < jzModifiedEigs_.size()); electronsUp = jzModifiedEigs_[ind]; } bool isEnabled() const { return isEnabled_; } bool isSet() const { return isSet_; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/FeAsJzSymmetry"; io.createGroup(label); io.write(label + "/isEnabled_", isEnabled_); if (!isEnabled_) return; io.write(label + "/isSet_", isSet_); if (!isSet_) return; u_.write(label + "/u_", io); utranspose_.write(label + "/utranspose_", io); Hamil_onsite_.write(label + "/Hamil_onsite_", io); io.write(label + "/jzModifiedEigs_", jzModifiedEigs_); io.write(label + "/electrons_", electrons_); } private: MatrixType Jz_opr_original_basis(VectorOperatorType& creationMatrix) { SizeType nrow = creationMatrix[0].getStorage().rows(); MatrixType tmp(nrow,nrow); //Works only for 3 orbital model //xy=0,zx=1,yz=2 //nxy_up-nxy_dn tmp += 0.5*(multiplyTc(creationMatrix[0].getStorage(),creationMatrix[0].getStorage())); tmp += -0.5*(multiplyTc(creationMatrix[3].getStorage(),creationMatrix[3].getStorage())); // //nzx_up-nzx_dn tmp += -0.5*(multiplyTc(creationMatrix[4].getStorage(),creationMatrix[4].getStorage())); tmp += 0.5*(multiplyTc(creationMatrix[1].getStorage(),creationMatrix[1].getStorage())) ; // //nyz_up-nyz_dn tmp += -0.5*(multiplyTc(creationMatrix[5].getStorage(),creationMatrix[5].getStorage())) ; tmp += 0.5*(multiplyTc(creationMatrix[2].getStorage(),creationMatrix[2].getStorage())) ; //i(czx_dn_dagg*cyz_dn) + hc (first with i, sec with -i, ComplexOrRealType sqrtMinus1(0,1); tmp += +sqrtMinus1*(multiplyTc(creationMatrix[4].getStorage(),creationMatrix[5].getStorage())); tmp += -sqrtMinus1*(multiplyTc(creationMatrix[5].getStorage(),creationMatrix[4].getStorage())); //i(czx_up_dagg*cyz_up) + hc tmp += +sqrtMinus1*(multiplyTc(creationMatrix[1].getStorage(),creationMatrix[2].getStorage())); tmp += -sqrtMinus1*(multiplyTc(creationMatrix[2].getStorage(),creationMatrix[1].getStorage()) ) ; return tmp; } MatrixType Calculate_onsite_Hamiltonian(VectorOperatorType& creationMatrix){ SizeType nrow = creationMatrix[0].getStorage().row(); MatrixType tmp(nrow,nrow); MatrixType tmp2(nrow,nrow),tmp3(nrow,nrow),tmp4(nrow,nrow); RealType _U,_J,_Up; ComplexOrRealType sqrtMinus1(0,1); // tmp += -0.5*sqrtMinus1*(multiplyTc(creationMatrix[1].getStorage(),creationMatrix[2].getStorage())); // tmp += 0.5*sqrtMinus1*(multiplyTc(creationMatrix[1].getStorage(),creationMatrix[3].getStorage())); // tmp += 0.5*sqrtMinus1*(multiplyTc(creationMatrix[2].getStorage(),creationMatrix[1].getStorage())); // tmp += -0.5*(multiplyTc(creationMatrix[2].getStorage(),creationMatrix[3].getStorage())); // tmp += -0.5*sqrtMinus1*(multiplyTc(creationMatrix[0].getStorage(),creationMatrix[4].getStorage())); // tmp += 0.5*(multiplyTc(creationMatrix[0].getStorage(),creationMatrix[5].getStorage())); // tmp += 0.5*sqrtMinus1*(multiplyTc(creationMatrix[4].getStorage(),creationMatrix[0].getStorage())); // tmp += 0.5*sqrtMinus1*(multiplyTc(creationMatrix[4].getStorage(),creationMatrix[5].getStorage())); // tmp += 0.5*(multiplyTc(creationMatrix[5].getStorage(),creationMatrix[0].getStorage())); // tmp += -0.5*sqrtMinus1*(multiplyTc(creationMatrix[5].getStorage(),creationMatrix[4].getStorage())); // tmp += -0.5*sqrtMinus1*(multiplyTc(creationMatrix[3].getStorage(),creationMatrix[1].getStorage())); // tmp += -0.5*(multiplyTc(creationMatrix[3].getStorage(),creationMatrix[2].getStorage())); //U=1.0, J=0.25 ,Up=U-2J _U=2.0;_J=0.5;_Up=_U-2*_J; //U terms if(true){ //n_up_xy*n_dn_xy tmp2 = ( (multiplyTc(creationMatrix[0].getStorage(),creationMatrix[0].getStorage())) * ( multiplyTc(creationMatrix[3].getStorage(),creationMatrix[3].getStorage())) ); tmp += _U*tmp2; //n_up_xz*n_dn_xz tmp2 = ( (multiplyTc(creationMatrix[1].getStorage(),creationMatrix[1].getStorage())) * ( multiplyTc(creationMatrix[4].getStorage(),creationMatrix[4].getStorage())) ); tmp += _U*tmp2; //n_up_yz*n_dn_yz tmp2 = ( (multiplyTc(creationMatrix[2].getStorage(),creationMatrix[2].getStorage())) * ( multiplyTc(creationMatrix[5].getStorage(),creationMatrix[5].getStorage())) ); tmp += _U*tmp2; } //Up-J/2 terms if(true){ //nxy*nxz tmp2 = (multiplyTc(creationMatrix[0].getStorage(),creationMatrix[0].getStorage())); tmp2 += (multiplyTc(creationMatrix[3].getStorage(),creationMatrix[3].getStorage())); tmp3 = (multiplyTc(creationMatrix[1].getStorage(),creationMatrix[1].getStorage())); tmp3 += ( multiplyTc(creationMatrix[4].getStorage(),creationMatrix[4].getStorage())); tmp4 = tmp2*tmp3; tmp += (_Up - _J*(0.5))*tmp4; //nxy*nyz tmp2 = (multiplyTc(creationMatrix[0].getStorage(),creationMatrix[0].getStorage())); tmp2 += (multiplyTc(creationMatrix[3].getStorage(),creationMatrix[3].getStorage())); tmp3 = (multiplyTc(creationMatrix[2].getStorage(),creationMatrix[2].getStorage())); tmp3 += ( multiplyTc(creationMatrix[5].getStorage(),creationMatrix[5].getStorage())); tmp4 = tmp2*tmp3; tmp += (_Up - _J*(0.5))*tmp4; //nxz*nyz tmp2 = (multiplyTc(creationMatrix[1].getStorage(),creationMatrix[1].getStorage())); tmp2 += (multiplyTc(creationMatrix[4].getStorage(),creationMatrix[4].getStorage())); tmp3 = (multiplyTc(creationMatrix[2].getStorage(),creationMatrix[2].getStorage())); tmp3 += ( multiplyTc(creationMatrix[5].getStorage(),creationMatrix[5].getStorage())); tmp4 = tmp2*tmp3; tmp += (_Up - _J*(0.5))*tmp4; } //SzSz Hunds term if (true){ //Sz_xy*Sz_xz tmp2 = (multiplyTc(creationMatrix[0].getStorage(),creationMatrix[0].getStorage())); tmp2 += (-1.0)*(multiplyTc(creationMatrix[3].getStorage(),creationMatrix[3].getStorage())); tmp3 = (multiplyTc(creationMatrix[1].getStorage(),creationMatrix[1].getStorage())); tmp3 += (-1.0)*( multiplyTc(creationMatrix[4].getStorage(),creationMatrix[4].getStorage())); tmp4 = tmp2*tmp3; tmp += (0.25)*(-2*_J)*tmp4; //Sz_xy*Sz_yz tmp2 = (multiplyTc(creationMatrix[0].getStorage(),creationMatrix[0].getStorage())); tmp2 += (-1.0)*(multiplyTc(creationMatrix[3].getStorage(),creationMatrix[3].getStorage())); tmp3 = (multiplyTc(creationMatrix[2].getStorage(),creationMatrix[2].getStorage())); tmp3 += (-1.0)*( multiplyTc(creationMatrix[5].getStorage(),creationMatrix[5].getStorage())); tmp4 = tmp2*tmp3; tmp += (0.25)*(-2*_J)*tmp4; //Sz_xz*Sz_yz tmp2 = (multiplyTc(creationMatrix[1].getStorage(),creationMatrix[1].getStorage())); tmp2 += (-1.0)*(multiplyTc(creationMatrix[4].getStorage(),creationMatrix[4].getStorage())); tmp3 = (multiplyTc(creationMatrix[2].getStorage(),creationMatrix[2].getStorage())); tmp3 += (-1.0)*( multiplyTc(creationMatrix[5].getStorage(),creationMatrix[5].getStorage())); tmp4 = tmp2*tmp3; tmp += (0.25)*(-2*_J)*tmp4; } //S+S- + S-S+ term if(true){ //Sp_xy*Sm_xz + Sp_xz*Sm_xy tmp2 = multiplyTc(creationMatrix[0].getStorage(),creationMatrix[3].getStorage()); tmp3 = multiplyTc(creationMatrix[4].getStorage(),creationMatrix[1].getStorage()); tmp4 = tmp2*tmp3; tmp += (-_J)*tmp4; tmp2 = multiplyTc(creationMatrix[1].getStorage(),creationMatrix[4].getStorage()); tmp3 = multiplyTc(creationMatrix[3].getStorage(),creationMatrix[0].getStorage()); tmp4 = tmp2*tmp3; tmp += (-_J)*tmp4; //Sp_xy*Sm_yz + Sp_yz*Sm_xy tmp2 = multiplyTc(creationMatrix[0].getStorage(),creationMatrix[3].getStorage()); tmp3 = multiplyTc(creationMatrix[5].getStorage(),creationMatrix[2].getStorage()); tmp4 = tmp2*tmp3; tmp += (-_J)*tmp4; tmp2 = multiplyTc(creationMatrix[2].getStorage(),creationMatrix[5].getStorage()); tmp3 = multiplyTc(creationMatrix[3].getStorage(),creationMatrix[0].getStorage()); tmp4 = tmp2*tmp3; tmp += (-_J)*tmp4; //Sp_yz*Sm_xz + Sp_xz*Sm_yz tmp2 = multiplyTc(creationMatrix[2].getStorage(),creationMatrix[5].getStorage()); tmp3 = multiplyTc(creationMatrix[4].getStorage(),creationMatrix[1].getStorage()); tmp4 = tmp2*tmp3; tmp += (-_J)*tmp4; tmp2 = multiplyTc(creationMatrix[1].getStorage(),creationMatrix[4].getStorage()); tmp3 = multiplyTc(creationMatrix[5].getStorage(),creationMatrix[2].getStorage()); tmp4 = tmp2*tmp3; tmp += (-_J)*tmp4; } //Pair hopping term if (true){ //P_xy_dagg P_xz + P_xz_dagg P_xy , gamma=xy,gamma_p=xz tmp2= (multiplyTc(creationMatrix[0].getStorage(),creationMatrix[4].getStorage())); tmp3= (multiplyTc(creationMatrix[1].getStorage(),creationMatrix[3].getStorage())); tmp4 = tmp2*transposeConjugate(tmp3); tmp += (-1.0)*(_J)*tmp4; tmp4 = tmp3*transposeConjugate(tmp2); tmp += (-1.0)*(_J)*tmp4; //gamma=xy,gamma_p=yz tmp2= (multiplyTc(creationMatrix[0].getStorage(),creationMatrix[5].getStorage())); tmp3= (multiplyTc(creationMatrix[2].getStorage(),creationMatrix[3].getStorage())); tmp4 = tmp2*transposeConjugate(tmp3); tmp += (-1.0)*(_J)*tmp4; tmp4 = tmp3*transposeConjugate(tmp2); tmp += (-1.0)*(_J)*tmp4; //gamma=xz,gamma_p=yz tmp2= (multiplyTc(creationMatrix[1].getStorage(),creationMatrix[5].getStorage())); tmp3= (multiplyTc(creationMatrix[2].getStorage(),creationMatrix[4].getStorage())); tmp4 = tmp2*transposeConjugate(tmp3); tmp += (-1.0)*(_J)*tmp4; tmp4 = tmp3*transposeConjugate(tmp2); tmp += (-1.0)*(_J)*tmp4; } return tmp; } void Get_P_and_Blocks_and_electrons(const HilbertBasisType& natBasis, VectorRealType& blockOffsets, MatrixType& P) { //HilbertBasisType newBasis; electrons_.resize(natBasis.size()); //Works only for 3 orbital model SizeType j=0; for (SizeType ne=0;ne<7;ne++){ for (SizeType i=0;i0 && i<7) { tmp_doub += 3; } //Ne=2 if(i>6 && i<22 ){ tmp_doub += 6; } //Ne=3 if(i>21 && i<42){ tmp_doub += 9; } //Ne=4 if(i>41 && i<57) { tmp_doub += 12; } //Ne=5 if(i>56 && i<63){ tmp_doub += 15; } //Ne=6 else if(i==63){ tmp_doub += 18; } tmp_doub=tmp_doub*0.5; tmp_Sztype= (SizeType) (tmp_doub +0.5); //rounding off (like 0.999 to 1) before converting to SizeType electronselectronsUp[i]=tmp_Sztype;} } bool isEnabled_; bool isSet_; MatrixType u_; MatrixType utranspose_; MatrixType Hamil_onsite_; VectorSizeType jzModifiedEigs_; VectorSizeType electrons_; }; // class FeAsJzSymmetry } // namespace Dmrg #endif // FEASJZSYMMETRY_H dmrgpp-6.02/src/Models/FeAsModel/HilbertSpaceFeAs.h000066400000000000000000000145251414604301300220230ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file HilbertSpaceFeAs.h * * This class represents the Hilbert space for the FeAs Model * States are represented with binary numbers. N bits per site * Bits meaning: * 0.....0 empty state * 0..1..0 a 1 at location x means state "x" * 0..010..010..0, a 1 at location x and a 1 at location y means * 2 electrons on the site with states x and y respectively * ... * 1111...111111 all ones means N electrons each with a different state * * Note: this is a static class * */ #ifndef HILBERTSPACEFEAS_HEADER_H #define HILBERTSPACEFEAS_HEADER_H namespace Dmrg { //! A class to operate on n-ary numbers (base n) template class HilbertSpaceFeAs { static SizeType orbitals_; public: typedef Word HilbertState; enum {SPIN_UP=0,SPIN_DOWN=1}; static void setOrbitals(SizeType orbitals) { orbitals_=orbitals; } // Get electronic state on site "j" in binary number "a" static Word get(Word const &a,SizeType j) { SizeType dofs = 2*orbitals_; SizeType k=dofs*j; SizeType ones = (1<<(dofs))-1; Word mask=(ones<>= k; return mask; } // Create electron with internal dof "sigma" on site "j" in binary number "a" static void create(Word &a,SizeType j,SizeType sigma) { SizeType dofs = 2*orbitals_; SizeType k=dofs*j; Word mask=(1<<(k+sigma)); a |= mask; } // Destroy electron with internal dof "sigma" on site "j" in binary number "a" static void destroy(Word &a,SizeType j,SizeType sigma) { SizeType dofs = 2*orbitals_; SizeType k=dofs*j; Word mask=(1<<(k+sigma)); a &= (~mask); } // Is there an electron with internal dof "sigma" on site "i" in binary number "ket"? static bool isNonZero(Word const &ket,SizeType i,SizeType sigma) { Word tmp=get(ket,i); if (tmp & (1<>=dofs); return ret; } //! Number of electrons with spin spin (sums over bands and sites) static int electronsWithGivenSpin(Word const &data,SizeType spin) { SizeType sum=0; Word data2 = data; SizeType digit = 0; while (data2 > 0) { SizeType sigma = digit % (2*orbitals_); SizeType spin2 = static_cast(sigma/orbitals_); Word thisbit = (data2 & 1); data2 >>= 1; digit++; if (spin == spin2) sum += thisbit; } return sum; } //! Number of electrons in binary number "data" (sum over all bands) static SizeType electrons(const Word& data) { SizeType sum=0; SizeType dofs = 2*orbitals_; for (SizeType sector=0;sector=j) return 0; Word m=0; for (SizeType k=dofs*ii;k 0) { SizeType sector2 = digit % dofs; SizeType thisbit = (ket2 & 1); if (sector == sector2) sum += thisbit; digit++; ket2 >>= 1; } return sum; } }; // class HilbertSpaceFeAs template SizeType HilbertSpaceFeAs::orbitals_ = 2; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/FeAsModel/ModelFeBasedSc.h000066400000000000000000001337721414604301300214650ustar00rootroot00000000000000/* Copyright (c) 2009-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ModelFeBasedSc.h * * An implementation of a FeBasedSc model for Fe-based superconductors to use with * the DmrgSolver * */ #ifndef MODEL_FEAS_DMRG #define MODEL_FEAS_DMRG #include "ModelBase.h" #include "ParametersModelFeAs.h" #include "HilbertSpaceFeAs.h" #include "CrsMatrix.h" #include "SpinSquaredHelper.h" #include "SpinSquared.h" #include "VerySparseMatrix.h" #include "ProgramGlobals.h" #include "Geometry/GeometryDca.h" #include "FeAsJzSymmetry.h" #include namespace Dmrg { template class ModelFeBasedSc : public ModelBaseType { public: typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::HilbertBasisType HilbertBasisType; typedef typename HilbertBasisType::value_type HilbertState; typedef HilbertSpaceFeAs HilbertSpaceFeAsType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::MyBasis MyBasis; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename SuperGeometryType::GeometryDcaType GeometryDcaType; typedef PsimagLite::Matrix MatrixType; typedef ParametersModelFeAs ParamsModelFeAsType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef FeAsJzSymmetry::True> FeAsJzSymmetryType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; static const int FERMION_SIGN = -1; static const int SPIN_UP=HilbertSpaceFeAsType::SPIN_UP; static const int SPIN_DOWN=HilbertSpaceFeAsType::SPIN_DOWN; ModelFeBasedSc(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& superGeometry) : ModelBaseType(solverParams, superGeometry, io), reinterpretX_(6), reinterpretY_(9), modelParameters_(io), superGeometry_(superGeometry), geometryDca_(superGeometry.createDcaObject(modelParameters_.orbitals)), spinSquared_(spinSquaredHelper_, modelParameters_.orbitals, 2*modelParameters_.orbitals), reinterpret_(!modelParameters_.jzSymmetry), feAsJzSymmetry_(modelParameters_.jzSymmetry) { ProgramGlobals::init(modelParameters_.orbitals*superGeometry_.numberOfSites() + 1); PsimagLite::String tspAlgo = ""; try { io.readline(tspAlgo,"TSPAlgorithm="); } catch (std::exception&) {} if (tspAlgo == "SuzukiTrotter") reinterpret_ = false; SizeType v1 = 2*modelParameters_.orbitals*superGeometry.numberOfSites(); SizeType v2 = v1*modelParameters_.orbitals; if (modelParameters_.potentialV.size() != v1 && modelParameters_.potentialV.size() != v2) { PsimagLite::String str(__FILE__); str += " " + ttos(__LINE__) + "\n"; str += "potentialV length must be 2*orbitals times the number of sites or"; str += " 2*orbitals*orbitals times the number of sites\n"; err(str.c_str()); } HilbertSpaceFeAsType::setOrbitals(modelParameters_.orbitals); statesPerSite_ = (1 << (modelParameters_.orbitals*2)); VectorSizeType block(1,0); int sitesTimesDof = 2*modelParameters_.orbitals; HilbertState total = (1<(0)); SizeType n = basis_.size(); if (sum != n*(n-1)/2) err("ModelFeBasedSc: basis set up wrong\n"); setOperatorMatricesInternal(creationMatrix_, block); if (feAsJzSymmetry_.isEnabled() && !feAsJzSymmetry_.isSet()) feAsJzSymmetry_.init(basis_, creationMatrix_); setSymmetryRelatedInternal(qq_,basis_,1); if (feAsJzSymmetry_.isEnabled()) { basis_[9] = 9; basis_[10] = 10; basis_[11] = 48; basis_[17] = 3; basis_[18] = 34; basis_[19] = 36; basis_[41] = 27; basis_[42] = 29; basis_[43] = 60; basis_[52] = 15; basis_[53] = 53; basis_[54] = 54; } } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); io.write(label + "/reinterpretX_", reinterpretX_); io.write(label + "/reinterpretY_", reinterpretY_); modelParameters_.write(label, io); geometryDca_.write(label, io); spinSquaredHelper_.write(label, io); spinSquared_.write(label, io); io.write(label + "/reinterpret_", reinterpret_); io.write(label + "/statesPerSite_", statesPerSite_); io.write(label + "/basis_", basis_); io.write(label + "/qq_", qq_); io.write(label + "/creationMatrix_", creationMatrix_); feAsJzSymmetry_.write(label, io); } void addDiagonalsInNaturalBasis(SparseMatrixType& hmatrix, const BlockType& block, RealType time) const { SizeType n=block.size(); for (SizeType i = 0; i < n; ++i) { addInteraction(hmatrix, i, block); addMagneticField(hmatrix, i, block); addSpinOrbit(hmatrix); addAnisotropyD(hmatrix); if (modelParameters_.potentialT.size()==0 || time==0) { addPotentialV(hmatrix, i, block, modelParameters_.potentialV); } else { addPotentialV(hmatrix, i, block, modelParameters_.potentialT); } } } void fillLabeledOperators(VectorQnType& qns) { qns = qq_; assert(creationMatrix_.size()>0); SizeType nrow = creationMatrix_[0].getCRS().rows(); OpsLabelType& splus = this->createOpsLabel("splus"); OpsLabelType& sminus = this->createOpsLabel("sminus"); for (SizeType dof = 0; dof < modelParameters_.orbitals; ++dof) { MatrixType tmp(nrow,nrow); tmp += multiplyTc(creationMatrix_[dof].getCRS(), creationMatrix_[dof + modelParameters_.orbitals].getCRS()); SparseMatrixType tmp2(tmp); typename OperatorType::Su2RelatedType su2Related; splus.push(OperatorType(tmp2, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); SparseMatrixType tmp3; transposeConjugate(tmp3, tmp2); sminus.push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } OpsLabelType& sz = this->createOpsLabel("sz"); for (SizeType dof = 0; dof < modelParameters_.orbitals; ++dof) { MatrixType tmp(nrow,nrow); MatrixType tmp2(nrow,nrow); tmp += multiplyTc(creationMatrix_[dof].getCRS(),creationMatrix_[dof].getCRS()); tmp2 += multiplyTc(creationMatrix_[dof+modelParameters_.orbitals].getCRS(), creationMatrix_[dof+modelParameters_.orbitals].getCRS()); tmp = 0.5*(tmp-tmp2); SparseMatrixType tmp3(tmp); typename OperatorType::Su2RelatedType su2Related; sz.push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } OpsLabelType& nop = this->createOpsLabel("n"); for (SizeType dof = 0; dof < 2*modelParameters_.orbitals; ++dof) { MatrixType tmp = multiplyTc(creationMatrix_[dof].getCRS(),creationMatrix_[dof].getCRS()); SparseMatrixType tmp2(tmp); typename OperatorType::Su2RelatedType su2Related; nop.push(OperatorType(tmp2, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } OpsLabelType& c = this->createOpsLabel("c"); OpsLabelType& cc = this->createOpsLabel("C"); for (SizeType dof = 0; dof < 2*modelParameters_.orbitals; ++dof) { VectorOperatorType cm = creationMatrix_; cc.push(creationMatrix_[dof]); cm[dof].dagger(); c.push(cm[dof]); } OpsLabelType& d = this->createOpsLabel("d"); for (SizeType dof = 0; dof < modelParameters_.orbitals; ++dof) { SizeType orbital = dof % modelParameters_.orbitals; SparseMatrixType atmp; multiply(atmp, creationMatrix_[orbital + modelParameters_.orbitals].getCRS(), creationMatrix_[orbital].getCRS()); typename OperatorType::Su2RelatedType su2Related; d.push(OperatorType(atmp, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } this->makeTrackable("C"); } /* PSIDOC FeAs::fillModelLinks Here we have as many connections as 2*orbitals*orbitals: a up a up, a up b up, b up a up, b up, b up, etc and similarly for spin down. We'll do all of this in one single term, named ``hopping'' and put it in a C++ variable called \verb!hop!. So we'll do 2*orbitals*orbitals pushes into that \verb!hop!. Each push does the pair c1 with normal 'N', and c2 with transpose conjugate 'C'. (We shall not discuss the SU(2) related numbers.) We observe that c1 is a ``C'' trackable operator with degree of freedom orb1 + spin*orbitals; likewise c2 is a ``C'' trackable operator with orb2 + spin*orbitals. The orbitals are different but the spin is the same, as expected. In addition, lines (B) and (C) have a 3rd number for each operator. This 3rd number indicates the connector dependence, which is not on spin but only on orbital. That is why the 3rd number in (B) is orb1 and not orb1 + spin*orbitals, because the hoppings in the input file do not depend on spin. This is very important to note and could be a cause of confusion. By default this 3rd number (which can be omitted) is 0, and indicates no dependence of the connector on things other than site. The site dependence is handled by the geometry and must not be specified here. PSIDOCCOPY $FirstFunctionBelow In formulas, we can explain the distinction between the 2nd number and the 3rd number by writing \[ t(orb1, orb2)\,\, c^\dagger_{orb1, spin1} (site1)\,\, c_{orb2, spin2} (site2) \] The first operator has label $orb1, spin1$ that gets packed into $orb1 + spin1*orbitals$ and must be given as the 2nd argument for the first operator, and similarly for the second operator. In contrast, the indices orb1 and orb2 are in the connector dependence $t(orb1, orb2)$, and must be as 3rd number of each operator, respectively. */ void fillModelLinks() { const SizeType orbitals = modelParameters_.orbitals; ModelTermType& hop = ModelBaseType::createTerm("hopping");//(A) for (SizeType spin = 0; spin < 2; ++spin) { for (SizeType orb1 = 0; orb1 < orbitals; ++orb1) { OpForLinkType c1("C", orb1 + spin*orbitals, orb1); // (B) for (SizeType orb2 = 0; orb2 < orbitals; ++orb2) { OpForLinkType c2("C", orb2 + spin*orbitals, orb2); // (C) hop.push(c1, 'N', c2, 'C', typename ModelTermType::Su2Properties(1, (spin == 1) ? -1 : 1, spin)); } } } } void setQns(VectorQnType& qns) const { qns = qq_; } void setOperatorMatricesInternal(VectorOperatorType& creationMatrix, const BlockType& block) const { const HilbertBasisType& natBasis = basis_; SparseMatrixType tmpMatrix; //! Set the operators c^\daggger_{i\gamma\sigma} in the natural basis creationMatrix.clear(); SizeType dofs = 2*modelParameters_.orbitals; for (SizeType i=0;imodelParameters_.orbitals-1) { m=1; asign= -1; } typename OperatorType::Su2RelatedType su2related; if (sigma 0) value += HilbertSpaceFeAsType::electrons(ket); //order for sign is: a up, b up, a down, b down, etc unsigned int x = HilbertSpaceFeAsType::get(ket,i); int spin = sigma/modelParameters_.orbitals; SizeType orb = sigma % modelParameters_.orbitals; for (SizeType j=0;j PairType; qns.resize(basis.size(), QnType::zero()); VectorSizeType other(2, 0); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair(0,0); if (n == 1) jmpair = calcJmvalue(basis[i]); SizeType na = HilbertSpaceFeAsType::calcNofElectrons(basis[i],0) + HilbertSpaceFeAsType::calcNofElectrons(basis[i],0+2); SizeType nb = HilbertSpaceFeAsType::calcNofElectrons(basis[i],1) + HilbertSpaceFeAsType::calcNofElectrons(basis[i],1+2); SizeType flavor = na + 3*nb; // nup SizeType electronsUp = HilbertSpaceFeAsType::electronsWithGivenSpin(basis[i], SPIN_UP); // ndown SizeType electronsDown = HilbertSpaceFeAsType::electronsWithGivenSpin(basis[i], SPIN_DOWN); SizeType electrons = electronsDown + electronsUp; if (modelParameters_.spinOrbit.rows() > 0 && !modelParameters_.jzSymmetry) electronsUp = 0; feAsJzSymmetry_.setElectronsAndJz(electrons, electronsUp, i); other[0] = electrons; other[1] = electronsUp; bool sign = electrons & 1; qns[i] = QnType(sign, other, jmpair, flavor); } } // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType // Reinterprets 6 and 9 template PairType calcJmvalue(const HilbertState& ket) const { PairType jm(0,0); if (modelParameters_.orbitals!=2) return jm; SizeType x=reinterpretX_,y=reinterpretY_; // these states need reinterpretation if (ket==x) { jm=std::pair(2,1); } else if (ket==y) { jm=std::pair(0,0); } else jm=calcJmValueAux(ket); return jm; } // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType // does not work for 6 or 9 template PairType calcJmValueAux(const HilbertState& ket) const { SizeType site0=0; SizeType site1=0; spinSquared_.doOnePairOfSitesA(ket,site0,site1); spinSquared_.doOnePairOfSitesB(ket,site0,site1); spinSquared_.doDiagonal(ket,site0,site1); RealType sz = spinSquared_.spinZ(ket,site0); PairType jm= spinSquaredHelper_.getJmPair(sz); return jm; } //! SU(2) symmetry related block //! Let |9> = |up a down b> and //! Let |6> = |up b down a> then void reinterpret(MatrixType& cm, const HilbertBasisType& basis) const { if (!reinterpret_ || modelParameters_.orbitals!=2) return; int n = cm.rows(); if (n!=16) throw PsimagLite::RuntimeError("blocks.size must be 1, and basis.size 16\n"); MatrixType cmCopy(n,n); int i,j; int x=PsimagLite::indexOrMinusOne(basis,reinterpretX_); int y=PsimagLite::indexOrMinusOne(basis,reinterpretY_); RealType factor = 0.7071067811865475244; for (i=0;i(0.5)* modelParameters_.spinOrbit(spin1*2+spin2, orb1*orbitals + orb2)* multiplyTc(c1,c2); } } } } fullMatrixToCrsMatrix(tmpMatrix,tmp); hmatrix += tmpMatrix; } void addMagneticField(SparseMatrixType& hmatrix, SizeType indexOfSite, const VectorSizeType& block) const { if (modelParameters_.magneticField.rows()<3) return; for (SizeType orb=0;orb::Type& V) const { SizeType v1 = 2*modelParameters_.orbitals*superGeometry_.numberOfSites(); SizeType v2 = v1*modelParameters_.orbitals; if (V.size() != v1 && V.size() != v2) { PsimagLite::String str(__FILE__); str += " " + ttos(__LINE__) + "\n"; str += "potentialV[T] length must be 2*orbitals times the number of sites or"; str += " 2*orbitals*orbitals times the number of sites\n"; throw PsimagLite::RuntimeError(str.c_str()); } if (V.size() == v1) { for (SizeType orb=0;orb::Type& V) const { const VectorOperatorType& cm = creationMatrix_; int dof=2*modelParameters_.orbitals; SizeType iOfSite = 0; SizeType site = block[iOfSite]; SparseMatrixType nup = n(cm[orbital+SPIN_UP*modelParameters_.orbitals+ iOfSite*dof].getCRS()); SparseMatrixType ndown = n(cm[orbital+SPIN_DOWN*modelParameters_.orbitals+ iOfSite*dof].getCRS()); SizeType linSize = superGeometry_.numberOfSites(); SizeType iUp = site + (orbital + 0*modelParameters_.orbitals)*linSize; hmatrix += V[iUp] * nup; SizeType iDown = site + (orbital + 1*modelParameters_.orbitals)*linSize; hmatrix += V[iDown] * ndown; } void addPotentialV(SparseMatrixType& hmatrix, SizeType, const VectorSizeType& block, SizeType orb, SizeType orb2, const typename PsimagLite::Vector::Type& V) const { const VectorOperatorType& cm = creationMatrix_; int dof=2*modelParameters_.orbitals; SizeType orbitalsSquared = modelParameters_.orbitals*modelParameters_.orbitals; SizeType iOfSite = 0; SizeType site = block[iOfSite]; SparseMatrixType nup = nEx(cm[orb+SPIN_UP*modelParameters_.orbitals+iOfSite*dof].getCRS(), cm[orb2+SPIN_UP*modelParameters_.orbitals+iOfSite*dof].getCRS()); SparseMatrixType ndown = nEx(cm[orb+SPIN_DOWN*modelParameters_.orbitals+iOfSite*dof].getCRS(), cm[orb2+SPIN_DOWN*modelParameters_.orbitals+iOfSite*dof].getCRS()); SizeType linSize = superGeometry_.numberOfSites(); SizeType iUp = site + (orb + orb2*modelParameters_.orbitals + 0*orbitalsSquared)*linSize; hmatrix += V[iUp] * nup; SizeType iDown = site + (orb + orb2*modelParameters_.orbitals + 1*orbitalsSquared)*linSize; hmatrix += V[iDown] * ndown; } SparseMatrixType nEx(const SparseMatrixType& c1, const SparseMatrixType& c2) const { SparseMatrixType tmpMatrix; SparseMatrixType cdagger; transposeConjugate(cdagger,c2); multiply(tmpMatrix,c1,cdagger); return tmpMatrix; } SparseMatrixType n(const SparseMatrixType& c) const { SparseMatrixType tmpMatrix; SparseMatrixType cdagger; transposeConjugate(cdagger,c); multiply(tmpMatrix,c,cdagger); return tmpMatrix; } SparseMatrixType nBar(SizeType orb1, SizeType orb2, SizeType spin) const { const VectorOperatorType& cm = creationMatrix_; SizeType dofs = 2 * modelParameters_.orbitals; SparseMatrixType tmpMatrix; SizeType iOfSite = 0; SparseMatrixType cdagger=cm[orb1+spin*modelParameters_.orbitals+iOfSite*dofs].getCRS(); SparseMatrixType cbar; transposeConjugate(cbar,cm[orb2+(1-spin)*modelParameters_.orbitals+iOfSite*dofs].getCRS()); multiply(tmpMatrix,cdagger,cbar); return tmpMatrix; } SparseMatrixType nSummedOverSpin(SizeType orbital) const { SizeType iOfSite = 0; const VectorOperatorType& cm = creationMatrix_; SizeType dofs = 2 * modelParameters_.orbitals; SparseMatrixType tmpMatrix = n(cm[orbital+SPIN_UP*modelParameters_.orbitals+ iOfSite*dofs].getCRS()); tmpMatrix += n(cm[orbital+SPIN_DOWN*modelParameters_.orbitals+iOfSite*dofs].getCRS()); return tmpMatrix; } SparseMatrixType spinOperator(SizeType orbital, SizeType component) const { switch (component) { case 0: // S^+ return spinOperatorAux(orbital,SPIN_UP,SPIN_DOWN); case 1: // S^- return spinOperatorAux(orbital,SPIN_DOWN,SPIN_UP); } SparseMatrixType tmpMatrix=spinOperatorAux(orbital,SPIN_UP,SPIN_UP); SparseMatrixType tmpMatrix2=spinOperatorAux(orbital,SPIN_DOWN,SPIN_DOWN); const RealType f1 = (-1.0); tmpMatrix += f1*tmpMatrix2; return tmpMatrix; } SparseMatrixType spinOperatorAux(SizeType orbital, SizeType spin1, SizeType spin2) const { SizeType iOfSite = 0; const VectorOperatorType& cm = creationMatrix_; SizeType dofs = 2 * modelParameters_.orbitals; SparseMatrixType result,temp; transposeConjugate(temp,cm[orbital+spin2*modelParameters_.orbitals+iOfSite*dofs].getCRS()); multiply(result, // = cm[orbital+spin1*modelParameters_.orbitals+iOfSite*dofs].getCRS(), // times temp); return result; } //! only for feAsMode == 2 void addInteractionUmatrix(SparseMatrixType& hmatrix) const { const VectorOperatorType& cm = creationMatrix_; const typename PsimagLite::Vector::Type& U = modelParameters_.hubbardU; SizeType orbitals = modelParameters_.orbitals; SizeType dofs = orbitals * 2; SizeType iOfSite = 0; for (SizeType interaction = 0; interaction < 2; ++interaction) { for (SizeType orb1=0;orb1 iOfSite); if (block[0] > 0) return; const VectorOperatorType& cm = creationMatrix_; SizeType orbs = modelParameters_.orbitals; SizeType dofs = orbs * 2; assert(modelParameters_.hubbardU.size() > 0); for (SizeType orb1=0;orb1 iOfSite); if (block[iOfSite] > 0) return; addInteractionU1(hmatrix); addInteractionImp2(hmatrix); addInteractionImp3(hmatrix); addInteractionImp4(hmatrix); } void addInteractionImp2(SparseMatrixType& hmatrix) const { SizeType iOfSite = 0; const VectorOperatorType& cm = creationMatrix_; const typename PsimagLite::Vector::Type& U = modelParameters_.hubbardU; SizeType orbitals = modelParameters_.orbitals; SizeType dofs = orbitals * 2; for (SizeType orb1=0;orb1::Type& U = modelParameters_.hubbardU; SizeType orbitals = modelParameters_.orbitals; SizeType dofs = orbitals * 2; for (SizeType orb1=0;orb1::Type& U = modelParameters_.hubbardU; SizeType orbitals = modelParameters_.orbitals; SizeType dofs = orbitals * 2; for (SizeType type =0; type < 2; type++) { for (SizeType orb1=0;orb1 iOfSite); SizeType site = block[iOfSite]; const VectorOperatorType& cm = creationMatrix_; int dof=2*modelParameters_.orbitals; SparseMatrixType tmpMatrix; SizeType alpha = 0; // real sites, no ancilla SparseMatrixType m1=cm[alpha+SPIN_UP*modelParameters_.orbitals+iOfSite*dof].getCRS(); SparseMatrixType m2=cm[alpha+SPIN_DOWN*modelParameters_.orbitals+iOfSite*dof].getCRS(); multiply(tmpMatrix,n(m1),n(m2)); assert(site < modelParameters_.hubbardU.size()); hmatrix += modelParameters_.hubbardU[site]*tmpMatrix; } void addAnisotropyD(SparseMatrixType& hmatrix) const { if (modelParameters_.anisotropyD == 0) return; SparseMatrixType tmpMatrix = this->naturalOperator("sz", 0, 0).getCRS(); SparseMatrixType szB = this->naturalOperator("sz", 0, 1).getCRS(); tmpMatrix += szB; hmatrix += modelParameters_.anisotropyD*tmpMatrix*tmpMatrix; } void diagTest(const SparseMatrixType& fullm,const PsimagLite::String& str) const { if (fullm.rank()!=256) return; MatrixType fullm2; crsMatrixToFullMatrix(fullm2,fullm); typename PsimagLite::Vector::Type eigs(fullm2.rows()); PsimagLite::diag(fullm2,eigs,'V'); std::cout< spinSquaredHelper_; //serializr normal spinSquared_ SpinSquared > spinSquared_; bool reinterpret_; //serializr normal statesPerSite_ SizeType statesPerSite_; HilbertBasisType basis_; VectorQnType qq_; VectorOperatorType creationMatrix_; FeAsJzSymmetryType feAsJzSymmetry_; }; //class ModelFeBasedSc } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/FeAsModel/ParametersModelFeAs.h000066400000000000000000000262551414604301300225450ustar00rootroot00000000000000/* Copyright (c) 2009-2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersModelFeAs.h * * Contains the parameters for the FeAs model and function to read them from a JSON file * */ #ifndef PARAMETERSMODELFEAS_H #define PARAMETERSMODELFEAS_H #include #include #include "Matrix.h" #include "ParametersModelBase.h" namespace Dmrg { //! FeAs Model Parameters template struct ParametersModelFeAs : public ParametersModelBase { // no connections here please!! // connections are handled by the geometry typedef typename PsimagLite::Real::Type RealType; typedef ParametersModelBase BaseType; enum IntEnum {INT_PAPER33, INT_V, INT_CODE2, INT_IMPURITY, INT_KSPACE, INT_ORBITAL0}; static PsimagLite::String modeString(IntEnum x) { switch (x) { case INT_PAPER33: return "INT_PAPER33"; case INT_V: return "INT_V"; case INT_CODE2: return "INT_CODE2"; case INT_IMPURITY: return "INT_IMPURITY"; case INT_KSPACE: return "INT_KSPACE"; case INT_ORBITAL0: return "INT_ORBITAL0"; } return "UNKNOWN"; } static IntEnum convertToEnum(PsimagLite::String x) { if (x == "INT_PAPER33") return INT_PAPER33; if (x == "INT_V") return INT_V; if (x == "INT_CODE2") return INT_CODE2; if (x == "INT_IMPURITY") return INT_IMPURITY; if (x == "INT_KSPACE") return INT_KSPACE; if (x == "INT_ORBITAL0") return INT_ORBITAL0; PsimagLite::String all = "INT_PAPER33 INT_V INT_CODE2 INT_IMPURITY"; all += PsimagLite::String(" INT_KSPACE") + " INT_ORBITAL0"; throw PsimagLite::RuntimeError("FeAsMode= can only be one of " + all + "\n"); } template ParametersModelFeAs(IoInputType& io) : BaseType(io, false), potentialT(0), feAsMode(INT_PAPER33), coulombV(0), anisotropyD(0), magneticField(0, 0), jzSymmetry(false), orbDependence(false) { io.readline(orbitals,"Orbitals="); io.read(hubbardU,"hubbardU"); io.read(potentialV,"potentialV"); bool decayInInputFile = false; try { PsimagLite::String tmp; io.readline(tmp,"Decay="); feAsMode = convertToEnum(tmp); decayInInputFile = true; } catch (std::exception&) {} if (decayInInputFile) { PsimagLite::String str("Please use FeAsMode= instead of Decay="); str += " in input file\n"; throw PsimagLite::RuntimeError(str); } PsimagLite::String tmp; io.readline(tmp,"FeAsMode="); feAsMode = convertToEnum(tmp); if (feAsMode == INT_V || feAsMode == INT_CODE2) { SizeType tmp = orbitals * orbitals; if (feAsMode == INT_CODE2) tmp *= 2; if (hubbardU.size() != tmp) { PsimagLite::String str("FeAsMode: expecting "); str += ttos(tmp) + " U values\n"; throw PsimagLite::RuntimeError(str); } } if (feAsMode == INT_V) { if (orbitals != 3) throw PsimagLite::RuntimeError("FeAsMode: expecting 3 orbitals\n"); io.readline(coulombV,"CoulombV="); } try { io.readline(orbDependence,"OrbDependence="); } catch (std::exception&) {} if (feAsMode == INT_PAPER33 || feAsMode == INT_IMPURITY) { if (!orbDependence){ if (hubbardU.size() != 4 && hubbardU.size() != 5) { PsimagLite::String str("FeAsMode: expecting"); str += " 4 or 5 U values\n"; throw PsimagLite::RuntimeError(str); } } else { if (orbitals==2 && hubbardU.size() != 5) { PsimagLite::String str("FeAsMode: expecting"); str += " 5 U values with OrbDependence and 2 orbitals\n"; throw PsimagLite::RuntimeError(str); } if (orbitals==3 && hubbardU.size() != 12) { PsimagLite::String str("FeAsMode: expecting"); str += " 12 U values with OrbDependence and 3 orbitals\n"; throw PsimagLite::RuntimeError(str); } } if (hubbardU.size() == 4) { hubbardU.resize(5); hubbardU[4] = hubbardU[2]; } if (!orbDependence){ std::cout<<"U[0]="< 0) err("jzSymmetry > 0 needs SpinOrbit matrix in input file\n"); if (hasSpinOrbitMatrix && jzSymmetry == 0) err("SpinOrbit matrix found in input but jzSymmetry set to 0\n"); std::cout<<"JzSymmetry="<0) { os<<"magneticField\n"; os<0) { os<<"SpinOrbit\n"; os<0) { os<<"using jzSymmetry, works only for 3 orbitals \n"; os<0) { os<<"using OrbDependence with Orbitals="<::INT_V) os<<"CoulombV="<0) { os<<"potentialT\n"; os<::Type hubbardU; typename PsimagLite::Vector::Type potentialV; typename PsimagLite::Vector::Type potentialT; IntEnum feAsMode; RealType coulombV; RealType anisotropyD; PsimagLite::Matrix magneticField; PsimagLite::Matrix spinOrbit; SizeType jzSymmetry; SizeType orbDependence; }; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/FermionSpinless/000077500000000000000000000000001414604301300200605ustar00rootroot00000000000000dmrgpp-6.02/src/Models/FermionSpinless/FermionSpinless.h000066400000000000000000000312631414604301300233560ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file FermionSpinless.h * * TBW * */ #ifndef DMRG_FERMION_SPINLESS #define DMRG_FERMION_SPINLESS #include #include "Sort.h" // in PsimagLite #include "ParametersFermionSpinless.h" #include "HilbertSpaceFermionSpinless.h" #include "CrsMatrix.h" #include "SpinSquaredHelper.h" #include "SpinSquared.h" #include "VerySparseMatrix.h" #include "ProgramGlobals.h" namespace Dmrg { //! Model Hubbard for DMRG solver, inherits from ModelBase and implements its interface: template class FermionSpinless : public ModelBaseType { static const int FERMION_SIGN = -1; static const int DEGREES_OF_FREEDOM=1; static const int NUMBER_OF_ORBITALS=1; public: typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelBaseType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef unsigned int long WordType; typedef HilbertSpaceFermionSpinless HilbertSpaceType; typedef typename ModelBaseType::VectorOperatorType VectorOperatorType; typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename HilbertSpaceType::HilbertState HilbertState; typedef typename PsimagLite::Vector::Type VectorHilbertStateType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename PsimagLite::Vector::Type HilbertBasisType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; FermionSpinless(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry, PsimagLite::String extra) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), offset_(DEGREES_OF_FREEDOM), spinSquared_(spinSquaredHelper_,NUMBER_OF_ORBITALS,DEGREES_OF_FREEDOM), hasDelta_(extra == "WithDelta") { if (extra != "" && extra != "WithDelta") err("FermionSpinLess can only be followed by WithDelta and not " + extra + "\n"); const SizeType n = geometry.numberOfSites(); if (geometry.numberOfSites() != modelParameters_.potentialV.size()) err("potentialV must have exactly " + ttos(n) + " entries.\n"); } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); io.write(label + "/offset_", offset_); spinSquaredHelper_.write(label, io); spinSquared_.write(label, io); } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType time) const { SizeType n = block.size(); if (n != 1) err("addDiagonalsInNaturalBasis: block.size() != 1\n"); const SizeType site = block[0]; const OperatorType& niupop = ModelBaseType::naturalOperator("n", site, 0); const SparseMatrixType& niup = niupop.getCRS(); // V_iup term RealType tmp = modelParameters_.potentialV[site]; hmatrix += tmp*niup; } protected: void fillLabeledOperators(VectorQnType& qns) { SizeType site = 0; BlockType block(1, site); HilbertBasisType natBasis; SparseMatrixType tmpMatrix; setBasis(natBasis, block); setSymmetryRelated(qns, natBasis); //! Set the operators c^\daggger_{i\sigma} in the natural basis for (SizeType i=0;i0) asign= 1; typename OperatorType::Su2RelatedType su2related; if (sigma==0) { su2related.source.push_back(i*offset_); su2related.source.push_back(i*offset_+1); su2related.transpose.push_back(-1); su2related.transpose.push_back(-1); su2related.offset = NUMBER_OF_ORBITALS; } OperatorType myOp(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::FERMION, typename OperatorType::PairType(1,1-sigma), asign, su2related); this->createOpsLabel("c").push(myOp); } tmpMatrix = findOperatorMatrices(i,natBasis); RealType angularFactor= 1; typename OperatorType::Su2RelatedType su2related; su2related.offset = 1; //check FIXME OperatorType myOp(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), angularFactor, su2related); this->createOpsLabel("n").push(myOp); } this->makeTrackable("c"); this->makeTrackable("n"); } void fillModelLinks() { ModelTermType& hop = ModelBaseType::createTerm("hopping"); ModelTermType& ninj = ModelBaseType::createTerm("ninj"); OpForLinkType cup("c"); hop.push(cup, 'N', cup, 'C', typename ModelTermType::Su2Properties(1, 1, 0)); OpForLinkType n("n"); ninj.push(n, 'N', n, 'N'); if (hasDelta_) { ModelTermType& cicj = ModelBaseType::createTerm("delta"); cicj.push(cup, 'N', cup, 'N'); } } void setBasis(HilbertBasisType& basis, const VectorSizeType& block) const { int sitesTimesDof=DEGREES_OF_FREEDOM*block.size(); HilbertState total = (1<0 && tmp1>0) value++; return (value%2==0) ? 1.0 : FERMION_SIGN; } //! Find c^\dagger_isigma in the natural basis natBasis SparseMatrixType findOperatorMatrices(int i, int sigma, const HilbertBasisType& natBasis) const { typename HilbertSpaceType::HilbertState bra,ket; int n = natBasis.size(); PsimagLite::Matrix cm(n,n); for (SizeType ii=0;ii= 0); cm(ii,jj) =sign(ket,i,sigma); } } SparseMatrixType creationMatrix(cm); return creationMatrix; } void setSymmetryRelated(VectorQnType& qns, const HilbertBasisType& basis) const { const SizeType localSymms = ModelBaseType::targetQuantum().sizeOfOther(); if (localSymms == 0) { if (hasDelta_) { PsimagLite::String msg(__FILE__); msg += ": You should be using one local symmetry, not zero\n"; std::cerr< PairType; qns.resize(basis.size(), QnType::zero()); VectorSizeType other; if (isCanonical) other.resize(1); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair = calcJmValue(basis[i]); SizeType electrons = HilbertSpaceType::getNofDigits(basis[i],0); SizeType flavor = electrons; bool sign = electrons & 1; if (other.size() == 1) other[0] = electrons; qns[i] = QnType(sign, other, jmpair, flavor); } } //! Find n_i in the natural basis natBasis SparseMatrixType findOperatorMatrices(int i, const VectorHilbertStateType& natBasis) const { SizeType n = natBasis.size(); PsimagLite::Matrix cm(n,n); for (SizeType ii=0;ii PairType calcJmValue(const HilbertState& ket) const { SizeType site0=0; SizeType site1=0; spinSquared_.doOnePairOfSitesA(ket,site0,site1); spinSquared_.doOnePairOfSitesB(ket,site0,site1); spinSquared_.doDiagonal(ket,site0,site1); RealType sz = spinSquared_.spinZ(ket,site0); PairType jm= spinSquaredHelper_.getJmPair(sz); return jm; } ParametersFermionSpinless modelParameters_; SizeType offset_; SpinSquaredHelper spinSquaredHelper_; SpinSquared > spinSquared_; const bool hasDelta_; }; //class FermionSpinless } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/FermionSpinless/HilbertSpaceFermionSpinless.h000066400000000000000000000123541414604301300256440ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file HilbertSpaceFermionSpinless.h * * This class represents the Hilbert space for the FermionSpinless Model * States are represented with binary numbers. One bit per site * * Note: this is a static class * */ #ifndef DMRG_HILBERTSPACE_FERMIONSPINLESS_H #define DMRG_HILBERTSPACE_FERMIONSPINLESS_H namespace Dmrg { template class HilbertSpaceFermionSpinless { public: typedef Word HilbertState; //! For state "a" set electron on site "j" to value "value" static void set(Word &a,int j,int value) { Word mask; switch (value) { case 0: mask = (1<>= j; assert(mask <= 1); return mask; } // Destroy electron with internal dof "sigma" on site "j" in binary number "a" static void destroy(Word &a,int j,int sigma) { assert(sigma == 0); Word mask; switch (sigma) { case 0: mask = (1<>=1); return ret; } // Number of electrons with dof sector between i and // j excluding i and j in binary number "ket" // intended for when i=j) return 0; Word m=0; SizeType end = j; for (SizeType k=ii;k struct ParametersFermionSpinless : public ParametersModelBase { typedef ParametersModelBase BaseType; typedef typename PsimagLite::Vector::Type VectorRealType; template ParametersFermionSpinless(IoInputType& io) : BaseType(io, false) { SizeType numberOfSites = 0; io.readline(numberOfSites, "TotalNumberOfSites="); potentialV.resize(numberOfSites); io.read(potentialV,"potentialV"); } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersFermionSpinless"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/potentialV", potentialV); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersFermionSpinless& parameters) { os< #include "ParametersGaugeSpin.h" #include "CrsMatrix.h" #include "VerySparseMatrix.h" #include "ProgramGlobals.h" #include "Utils.h" #include "SuperOpHelperPlaquette.h" namespace Dmrg { template class GaugeSpin : public ModelBaseType { public: typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::BasisType BasisType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::QnType QnType; typedef typename ModelBaseType::VectorQnType VectorQnType; typedef typename ModelBaseType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef unsigned int long WordType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename ModelBaseType::VectorRealType VectorRealType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef typename PsimagLite::Vector::Type HilbertBasisType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::PairType PairType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelBaseType::MyBasis MyBasis; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::SuperOpHelperBaseType SuperOpHelperBaseType; typedef SuperOpHelperPlaquette SuperOpHelperPlaquetteType; static const SizeType TWICE_THE_SPIN = 2; GaugeSpin(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), superOpHelperPlaquette_(nullptr) {} void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType) const { SizeType linSize = ModelBaseType::superGeometry().numberOfSites(); assert(block.size() == 1); SizeType site = block[0]; const OperatorType& sz = ModelBaseType::naturalOperator("sz", site, 0); if (modelParameters_.magneticFieldV.size() == linSize) { RealType tmp = modelParameters_.magneticFieldV[site]; hmatrix += tmp*sz.getCRS(); } } protected: void fillLabeledOperators(VectorQnType& qns) { const SizeType total = TWICE_THE_SPIN + 1; HilbertBasisType natBasis(total); for (SizeType i = 0; i < total; ++i) natBasis[i] = i; setSymmetryRelated(qns, natBasis); // Set the operators S^+_i in the natural basis SparseMatrixType tmpMatrix = findSplusMatrices(0, natBasis); typename OperatorType::Su2RelatedType su2related; OperatorType myOp(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 2), -1, su2related); this->createOpsLabel("splus").push(myOp); // this->makeTrackable("splus"); myOp.dagger(); this->createOpsLabel("sminus").push(myOp); // Set the operators S^z_i in the natural basis tmpMatrix = findSzMatrices(0, natBasis); typename OperatorType::Su2RelatedType su2related2; OperatorType myOp2(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 1), 1.0/sqrt(2.0), su2related2); this->createOpsLabel("sz").push(myOp2); // this->makeTrackable("sz"); // Set the operators S^x_i in the natural basis tmpMatrix = findSxMatrices(0, natBasis); typename OperatorType::Su2RelatedType su2related3; OperatorType myOp3(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 1), 1.0/sqrt(2.0), su2related3); this->createOpsLabel("sx").push(myOp3); this->makeTrackable("sx"); } void fillModelLinks() { if (BasisType::useSu2Symmetry()) err("SU(2): no longer supported\n"); //auto lambda = [] ModelTermType& plaquetteX = ModelBaseType::createTerm("PlaquetteX"); OpForLinkType sx("sx"); plaquetteX.push4(sx, 'N', sx, 'N', sx, 'N', sx, 'N'); } virtual SuperOpHelperBaseType* setSuperOpHelper() { if (!superOpHelperPlaquette_) superOpHelperPlaquette_ = new SuperOpHelperPlaquetteType(ModelBaseType::superGeometry()); return superOpHelperPlaquette_; } private: //! Find S^+_site in the natural basis natBasis SparseMatrixType findSplusMatrices(SizeType site, const HilbertBasisType& natBasis) const { SizeType total = natBasis.size(); MatrixType cm(total,total); RealType j = 0.5*TWICE_THE_SPIN; SizeType bitsForOneSite = utils::bitSizeOfInteger(TWICE_THE_SPIN); SizeType bits = 1 + ProgramGlobals::logBase2(TWICE_THE_SPIN); SizeType mask = 1; mask <<= bits; // mask = 2^bits assert(mask > 0); mask--; mask <<= (site*bitsForOneSite); for (SizeType ii=0;ii>= (site*bitsForOneSite); assert(ketsite == ket); SizeType brasite = ketsite + 1; if (brasite >= TWICE_THE_SPIN+1) continue; SizeType bra = ket & (~mask); assert(bra == 0); brasite <<= (site*bitsForOneSite); bra |= brasite; assert(bra == brasite); RealType m = ketsite - j; RealType x = j*(j+1)-m*(m+1); assert(x>=0); cm(ket,bra) = sqrt(x); } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } //! Find S^z_i in the natural basis natBasis SparseMatrixType findSzMatrices(SizeType site, const HilbertBasisType& natBasis) const { SizeType total = natBasis.size(); MatrixType cm(total,total); RealType j = 0.5*TWICE_THE_SPIN; SizeType bitsForOneSite = utils::bitSizeOfInteger(TWICE_THE_SPIN); SizeType bits = ProgramGlobals::logBase2(TWICE_THE_SPIN) + 1; SizeType mask = 1; mask <<= bits; // mask = 2^bits assert(mask > 0); mask--; mask <<= (site*bitsForOneSite); for (SizeType ii=0;ii>= (site*bitsForOneSite); assert(ketsite == ket); RealType m = ketsite - j; cm(ket,ket) = m; } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } SparseMatrixType findSxMatrices(SizeType site, const HilbertBasisType& natBasis) const { SparseMatrixType Splus_temp=findSplusMatrices(site,natBasis); SparseMatrixType Sminus_temp,Sx; transposeConjugate(Sminus_temp,Splus_temp); RealType tmp=0.5; Sx = tmp*Splus_temp; Sx += tmp*Sminus_temp; return Sx; } void setSymmetryRelated(VectorQnType& qns, const HilbertBasisType& basis) const { // find j,m and flavors (do it by hand since we assume n==1) // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType typedef std::pair PairType; VectorSizeType other; QnType::ifPresentOther0IsElectrons = false; qns.resize(basis.size(), QnType::zero()); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair(0, 0); SizeType flavor = 1; qns[i] = QnType(false, other, jmpair, flavor); } } GaugeSpin(const GaugeSpin&) = delete; GaugeSpin& operator=(const GaugeSpin&) = delete; ParametersGaugeSpin modelParameters_; SuperOpHelperPlaquetteType* superOpHelperPlaquette_; }; // class GaugeSpin } // namespace Dmrg /*@}*/ #endif //DMRG_MODEL_GAUGESPIN_H dmrgpp-6.02/src/Models/GaugeSpin/ParametersGaugeSpin.h000066400000000000000000000102231414604301300226770ustar00rootroot00000000000000/* Copyright (c) 2009-2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersGaugeSpin.h * * Contains the parameters for the Heisenberg model and function * to read them from a file * */ #ifndef DMRG_PARAMS_MODEL_GAUGESPIN_H #define DMRG_PARAMS_MODEL_GAUGESPIN_H #include "Vector.h" #include "ParametersModelBase.h" namespace Dmrg { //! Heisenberg Model Parameters template struct ParametersGaugeSpin : public ParametersModelBase { typedef ParametersModelBase BaseType; typedef typename PsimagLite::Vector::Type VectorRealType; // no connectors here, connectors are handled by the geometry template ParametersGaugeSpin(IoInputType& io) : BaseType(io, false) { SizeType nsites = 0; io.readline(nsites, "TotalNumberOfSites="); try { magneticFieldV.resize(nsites); io.read(magneticFieldV, "MagneticField"); } catch (std::exception&) {} } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersGaugeSpin"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/magneticFieldV", magneticFieldV); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersGaugeSpin& parameters) { os<<"MagneticField="< class SuperOpHelperPlaquette : public SuperOpHelperBase { public: typedef SuperOpHelperBase BaseType; typedef typename BaseType::VectorSizeType VectorSizeType; typedef typename BaseType::PairBoolSizeType PairBoolSizeType; SuperOpHelperPlaquette(const SuperGeometryType& superGeometry) : BaseType(superGeometry), smaxOrEmin_(0), newSite_(0) {} void setToProduct(SizeType smaxOrEmin, SizeType newSite, ProgramGlobals::DirectionEnum dir) { smaxOrEmin_ = smaxOrEmin; newSite_ = newSite; BaseType::setToProduct(smaxOrEmin, newSite, dir); isTriangle_ = (newSite & 1); if (dir == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) isTriangle_ = !isTriangle_; } // This below is for a plaquette, and will have to be // written somewhere else // testing devel FIXME TODO SizeType size() const { return 1; } PairBoolSizeType leftOperatorIndex(SizeType) const { if (isTriangle_) { if (BaseType::dir() == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) { return PairBoolSizeType(true, 0); } else { return PairBoolSizeType(false, 0); } } return PairBoolSizeType(false, 0); } PairBoolSizeType rightOperatorIndex(SizeType) const { if (isTriangle_) { if (BaseType::dir() == ProgramGlobals::DirectionEnum::EXPAND_SYSTEM) { return PairBoolSizeType(false, 0); } else { return PairBoolSizeType(false, 0); } } return PairBoolSizeType(false, 0); } SizeType leftIndex(VectorSizeType& sysSites, SizeType) const { SizeType last = sysSites.size(); assert(last > 0); --last; throw PsimagLite::RuntimeError("SuperOpHelperBase::leftIndex\n"); } SizeType rightIndex(VectorSizeType&, SizeType) const { throw PsimagLite::RuntimeError("SuperOpHelperBase::rightIndex\n"); } private: SizeType smaxOrEmin_; SizeType newSite_; bool isTriangle_; }; } #endif // SuperOpHelperPlaquette_H dmrgpp-6.02/src/Models/Graphene/000077500000000000000000000000001414604301300164715ustar00rootroot00000000000000dmrgpp-6.02/src/Models/Graphene/Graphene.h000066400000000000000000000470261414604301300204040ustar00rootroot00000000000000/* Copyright (c) 2009-2018-2019, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file Graphene.h * * An implementation of a FeBasedSc model for Fe-based superconductors to use with * the DmrgSolver * */ #ifndef DMRGPP_GRAPHENE_H #define DMRGPP_GRAPHENE_H #include "ModelBase.h" #include "ParametersGraphene.h" #include "../FeAsModel/HilbertSpaceFeAs.h" //#include "CrsMatrix.h" #include "VerySparseMatrix.h" #include "ProgramGlobals.h" #include #include "../../../PsimagLite/src/Vector.h" namespace Dmrg { template class Graphene : public ModelBaseType { public: typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::HilbertBasisType HilbertBasisType; typedef typename HilbertBasisType::value_type HilbertState; typedef HilbertSpaceFeAs HilbertSpaceFeAsType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::MyBasis MyBasis; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef ParametersGraphene ParametersGrapheneType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; static const int FERMION_SIGN = -1; static const int SPIN_UP=HilbertSpaceFeAsType::SPIN_UP; static const int SPIN_DOWN=HilbertSpaceFeAsType::SPIN_DOWN; Graphene(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io) { ProgramGlobals::init(modelParameters_.orbitals*geometry.numberOfSites() + 1); HilbertSpaceFeAsType::setOrbitals(modelParameters_.orbitals); statesPerSite_ = (1 << (modelParameters_.orbitals*2)); VectorSizeType block(1,0); int sitesTimesDof = 2*modelParameters_.orbitals; HilbertState total = (1<params().model; io.createGroup(label); modelParameters_.write(label, io); io.write(label + "/statesPerSite_", statesPerSite_); io.write(label + "/basis_", basis_); io.write(label + "/qq_", qq_); io.write(label + "/creationMatrix_", creationMatrix_); } void addDiagonalsInNaturalBasis(SparseMatrixType& hmatrix, const BlockType& block, RealType time) const { SizeType n = block.size(); assert(n == 1); for (SizeType i = 0; i < n; ++i) { addNiSquared(hmatrix); addPairHopping(hmatrix); } } void fillLabeledOperators(VectorQnType& qns) { qns = qq_; assert(creationMatrix_.size()>0); SizeType nrow = creationMatrix_[0].getCRS().rows(); OpsLabelType& c = this->createOpsLabel("c"); OpsLabelType& cc = this->createOpsLabel("C"); for (SizeType dof = 0; dof < 2*modelParameters_.orbitals; ++dof) { VectorOperatorType cm = creationMatrix_; cc.push(creationMatrix_[dof]); cm[dof].dagger(); c.push(cm[dof]); } this->makeTrackable("C"); OpsLabelType& yop = this->createOpsLabel("yop"); for (SizeType spin1 = 0; spin1 < 2; ++spin1) { for (SizeType spin2 = 0; spin2 < 2; ++spin2) { MatrixType tmp = multiplyTc(creationMatrix_[0+spin1*modelParameters_.orbitals].getCRS(), creationMatrix_[1+spin2*modelParameters_.orbitals].getCRS()); SparseMatrixType tmp2(tmp); typename OperatorType::Su2RelatedType su2Related; yop.push(OperatorType(tmp2, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } } this->makeTrackable("yop"); OpsLabelType& nop = this->createOpsLabel("n"); OpsLabelType& nn = this->createOpsLabel("nn"); OpsLabelType& ntotal = this->createOpsLabel("ntotal"); SparseMatrixType ntotalcrs; for (SizeType dof = 0; dof < 2*modelParameters_.orbitals; ++dof) { MatrixType tmp = multiplyTc(creationMatrix_[dof].getCRS(),creationMatrix_[dof].getCRS()); SparseMatrixType tmp2(tmp); ntotalcrs += tmp2; typename OperatorType::Su2RelatedType su2Related; nop.push(OperatorType(tmp2, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); if (dof == 0 || dof == 2) // naup nadown nn.push(OperatorType(tmp2, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } this->makeTrackable("nn"); typename OperatorType::Su2RelatedType su2Related; ntotal.push(OperatorType(ntotalcrs, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); this->makeTrackable("ntotal"); OpsLabelType& splus = this->createOpsLabel("splus"); OpsLabelType& sminus = this->createOpsLabel("sminus"); OpsLabelType& splus2 = this->createOpsLabel("splus2"); for (SizeType dof = 0; dof < modelParameters_.orbitals; ++dof) { MatrixType tmp(nrow,nrow); tmp += multiplyTc(creationMatrix_[dof].getCRS(), creationMatrix_[dof + modelParameters_.orbitals].getCRS()); SparseMatrixType tmp2(tmp); typename OperatorType::Su2RelatedType su2Related; splus.push(OperatorType(tmp2, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); SparseMatrixType tmp3; transposeConjugate(tmp3, tmp2); sminus.push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); // s+ a if (dof == 0) splus2.push(OperatorType(tmp2, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } this->makeTrackable("splus2"); OpsLabelType& sz = this->createOpsLabel("sz"); for (SizeType dof = 0; dof < modelParameters_.orbitals; ++dof) { MatrixType tmp(nrow,nrow); MatrixType tmp2(nrow,nrow); tmp += multiplyTc(creationMatrix_[dof].getCRS(),creationMatrix_[dof].getCRS()); tmp2 += multiplyTc(creationMatrix_[dof+modelParameters_.orbitals].getCRS(), creationMatrix_[dof+modelParameters_.orbitals].getCRS()); tmp = 0.5*(tmp-tmp2); SparseMatrixType tmp3(tmp); typename OperatorType::Su2RelatedType su2Related; sz.push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } } /* PSIDOC Graphene::fillModelLinks Write DOC here TBW FIXME TODO */ void fillModelLinks() { const SizeType orbitals = modelParameters_.orbitals; ModelTermType& hopA = ModelBaseType::createTerm("hoppingA"); for (SizeType spin = 0; spin < 2; ++spin) { OpForLinkType c1("C", 0 + spin*orbitals); OpForLinkType c2("C", 0 + spin*orbitals); typename ModelTermType::Su2Properties su2properties(1, (spin == 1) ? -1 : 1, spin); hopA.push(c1, 'N', c2, 'C', su2properties); } ModelTermType& hopB = ModelBaseType::createTerm("hoppingB"); for (SizeType spin = 0; spin < 2; ++spin) { OpForLinkType c1("C", 1 + spin*orbitals); OpForLinkType c2("C", 1 + spin*orbitals); typename ModelTermType::Su2Properties su2properties(1, (spin == 1) ? -1 : 1, spin); hopB.push(c1, 'N', c2, 'C', su2properties); } ModelTermType& ninj = ModelBaseType::createTerm("ninj"); OpForLinkType ni("ntotal"); ninj.push(ni, 'N', ni, 'N'); ModelTermType& nana = ModelBaseType::createTerm("nana"); for (SizeType spin = 0; spin < 2; ++spin) { OpForLinkType ni("nn", spin); nana.push(ni, 'N', ni, 'N'); } ModelTermType& spasma = ModelBaseType::createTerm("spasma"); OpForLinkType sp("splus2"); spasma.push(sp, 'N', sp, 'C'); ModelTermType& yoyo = ModelBaseType::createTerm("yoyo"); for (SizeType spin1 = 0; spin1 < 2; ++spin1) { for (SizeType spin2 = 0; spin2 < 2; ++spin2) { OpForLinkType yi("yop", spin1 + spin2*2); OpForLinkType yj("yop", spin2 + spin1*2); yoyo.push(yi, 'N', yj, 'C'); } } } void setQns(VectorQnType& qns) const { qns = qq_; } void setOperatorMatricesInternal(VectorOperatorType& creationMatrix, const BlockType& block) const { const HilbertBasisType& natBasis = basis_; SparseMatrixType tmpMatrix; //! Set the operators c^\daggger_{i\gamma\sigma} in the natural basis creationMatrix.clear(); SizeType dofs = 2*modelParameters_.orbitals; for (SizeType i=0;imodelParameters_.orbitals-1) { m=1; asign= -1; } typename OperatorType::Su2RelatedType su2related; if (sigma 0) value += HilbertSpaceFeAsType::electrons(ket); //order for sign is: a up, b up, a down, b down, etc unsigned int x = HilbertSpaceFeAsType::get(ket,i); int spin = sigma/modelParameters_.orbitals; SizeType orb = sigma % modelParameters_.orbitals; for (SizeType j=0;j PairType; qns.resize(basis.size(), QnType::zero()); VectorSizeType other(2, 0); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair(0,0); SizeType na = HilbertSpaceFeAsType::calcNofElectrons(basis[i],0) + HilbertSpaceFeAsType::calcNofElectrons(basis[i],0+2); SizeType nb = HilbertSpaceFeAsType::calcNofElectrons(basis[i],1) + HilbertSpaceFeAsType::calcNofElectrons(basis[i],1+2); SizeType flavor = na + 3*nb; // nup SizeType electronsUp = HilbertSpaceFeAsType::electronsWithGivenSpin(basis[i], SPIN_UP); // ndown SizeType electronsDown = HilbertSpaceFeAsType::electronsWithGivenSpin(basis[i], SPIN_DOWN); SizeType electrons = electronsDown + electronsUp; other[0] = electrons; other[1] = electronsUp; bool sign = electrons & 1; qns[i] = QnType(sign, other, jmpair, flavor); } } //! Term is U*\sum_{\alpha}n_i^2 void addNiSquared(SparseMatrixType& hmatrix) const { SizeType dofs = 2*modelParameters_.orbitals; SparseMatrixType nmatrix; const VectorOperatorType& cm = creationMatrix_; for (SizeType alpha = 0; alpha < dofs; ++alpha) nmatrix += n(cm[alpha].getCRS()); SparseMatrixType nmatrixSquared = nmatrix*nmatrix; hmatrix += modelParameters_.hubbardU*nmatrixSquared; } // Term is P*\sum_i(0.25*ni_a ni_b + // 0.5*si_a^\dagger si_b + 0.5*si_b^\dagger si_a + // si_a^z si_b^z void addPairHopping(SparseMatrixType& hmatrix) const { SizeType orbitals = modelParameters_.orbitals; SparseMatrixType nmatrixA; SparseMatrixType nmatrixB; const VectorOperatorType& cm = creationMatrix_; for (SizeType spin = 0; spin < 2; ++spin) { nmatrixA += n(cm[0 + spin*orbitals].getCRS()); // orbital a nmatrixB += n(cm[1 + spin*orbitals].getCRS()); // orbital b } SparseMatrixType nmatrixAB = nmatrixA*nmatrixB; hmatrix += static_cast(0.25)*modelParameters_.pairHopping*nmatrixAB; const SparseMatrixType splusA = ModelBaseType::naturalOperator("splus", 0, 0).getCRS(); // splus_a const SparseMatrixType splusB = ModelBaseType::naturalOperator("splus", 0, 1).getCRS(); // splus_b const SparseMatrixType sminusA = ModelBaseType::naturalOperator("sminus", 0, 0).getCRS(); // sminus_a const SparseMatrixType sminusB = ModelBaseType::naturalOperator("sminus", 0, 1).getCRS(); // sminus_b SparseMatrixType tmp = splusA*sminusB; tmp += splusB*sminusA; hmatrix += static_cast(0.5)*modelParameters_.pairHopping*tmp; const SparseMatrixType szA = ModelBaseType::naturalOperator("sz", 0, 0).getCRS(); // sz_a const SparseMatrixType szB = ModelBaseType::naturalOperator("sz", 0, 1).getCRS(); // sz_b tmp = szA*szB; hmatrix += modelParameters_.pairHopping*tmp; } static SparseMatrixType n(const SparseMatrixType& c) { SparseMatrixType tmpMatrix; SparseMatrixType cdagger; transposeConjugate(cdagger, c); multiply(tmpMatrix, c, cdagger); return tmpMatrix; } ParametersGrapheneType modelParameters_; SizeType statesPerSite_; HilbertBasisType basis_; VectorQnType qq_; VectorOperatorType creationMatrix_; }; //class Graphene } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/Graphene/ParametersGraphene.h000066400000000000000000000101701414604301300224160ustar00rootroot00000000000000/* Copyright (c) 2009-2012-2019, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersGraphene.h * * Contains the parameters for the FeAs model and function to read them from a JSON file * */ #ifndef DMRGPP_PARAMETERS_GRAPHENE_H #define DMRGPP_PARAMETERS_GRAPHENE_H #include #include #include "Matrix.h" #include "ParametersModelBase.h" namespace Dmrg { //! FeAs Model Parameters template struct ParametersGraphene : public ParametersModelBase { // no connections here please!! // connections are handled by the geometry typedef typename PsimagLite::Real::Type RealType; typedef ParametersModelBase BaseType; template ParametersGraphene(IoInputType& io) : BaseType(io, false) { io.readline(orbitals,"Orbitals="); io.readline(hubbardU,"HubbardU="); io.readline(pairHopping, "PairHopping="); } template SizeType memResolv(SomeMemResolvType&, SizeType, PsimagLite::String = "") const { return 0; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersGraphene"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/orbitals", orbitals); io.write(label + "/hubbardU", hubbardU); io.write(label + "/pairHopping", pairHopping); } SizeType orbitals; RealType hubbardU; RealType pairHopping; }; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/Heisenberg/000077500000000000000000000000001414604301300170135ustar00rootroot00000000000000dmrgpp-6.02/src/Models/Heisenberg/Aklt.h000066400000000000000000000072371414604301300200700ustar00rootroot00000000000000#ifndef AKLT_H #define AKLT_H #include "Vector.h" #include "../../Engine/ProgramGlobals.h" namespace Dmrg { template class Aklt { public: typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::PairType PairType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef typename ModelHelperType::RealType RealType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef std::pair PairSizeCharType; Aklt(ModelBaseType& modelBase, PsimagLite::String additional) : modelBase_(modelBase), enabled_(additional == "Aklt") {} void fillLabeledOperators(SizeType site, const SparseMatrixType& splus, const SparseMatrixType& sz) { if (!enabled_) return; assert(site == 0); OpsLabelType& aklt = modelBase_.createOpsLabel("aklt"); modelBase_.makeTrackable("aklt"); SparseMatrixType sminus; transposeConjugate(sminus, splus); SparseMatrixType tmpMatrix = splus*splus; pushOneOperator(aklt, tmpMatrix); tmpMatrix = splus*sminus; pushOneOperator(aklt, tmpMatrix); tmpMatrix = splus*sz; pushOneOperator(aklt, tmpMatrix); tmpMatrix = sminus*splus; pushOneOperator(aklt, tmpMatrix); tmpMatrix = sminus*sminus; pushOneOperator(aklt, tmpMatrix); tmpMatrix = sminus*sz; pushOneOperator(aklt, tmpMatrix); // tmpMatrix = sz*splus; == transpose conjugate of aklt5 // tmpMatrix = sz*sminus; == transpose conjugate of aklt2 tmpMatrix = sz*sz; pushOneOperator(aklt, tmpMatrix); } void fillModelLinks() { if (!enabled_) return; ModelTermType& aklt = ModelBaseType::createTerm("Aklt", false); const auto su2prop = typename ModelTermType::Su2Properties(1, 0); for (SizeType mu = 0; mu < 3; ++mu) { // mu = 0 is S+, mu = 1 is S-, mu=2 is Sz for (SizeType mup = 0; mup < 3; ++mup) { const RealType factor = findFactor(mu)*findFactor(mup)/3.0; auto valueModifier = [factor](ComplexOrRealType& value) { value *= factor;}; SizeType index1 = indexFor(mu, mup); SizeType index2 = indexFor(barOf(mu), barOf(mup)); PairSizeCharType pair1 = operatorForIndex(index1); PairSizeCharType pair2 = operatorForIndex(index2); OpForLinkType a("aklt", pair1.first); OpForLinkType b("aklt", pair2.first); aklt.push(a, pair1.second, b, pair2.second, valueModifier, su2prop); } } } private: static RealType findFactor(SizeType mu) { assert(mu < 3); return (mu == 2) ? 1 : 0.5; } static SizeType indexFor(SizeType mu1, SizeType mu2) { return mu1*3 + mu2; } static SizeType barOf(SizeType mu) { assert(mu < 3); if (mu == 2) return mu; return 1 - mu; } static PairSizeCharType operatorForIndex(SizeType index) { assert(index < 9); if (index < 6) return PairSizeCharType(index, 'N'); if (index == 8) return PairSizeCharType(6, 'N'); if (index == 6) return PairSizeCharType(5, 'C'); assert(index == 7); return PairSizeCharType(2, 'C'); } void pushOneOperator(OpsLabelType& aklt, const SparseMatrixType& matrix) { typename OperatorType::Su2RelatedType su2related; OperatorType myOp(matrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1.0, su2related); aklt.push(myOp); } ModelBaseType& modelBase_; bool enabled_; }; } #endif // AKLT_H dmrgpp-6.02/src/Models/Heisenberg/HeisenbergMix.h000066400000000000000000000434351414604301300217260ustar00rootroot00000000000000/* Copyright (c) 2009, 2017-2019, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file HeisenbergMix.h * * An implementation of the Quantum Heisenberg Model * with spin 1 and with spin 1/2 on the border sites * (to be used with DmrgSolver) * */ #ifndef DMRG_HEISENBERG_MIX_H #define DMRG_HEISENBERG_MIX_H #include #include "ParametersModelHeisenberg.h" #include "CrsMatrix.h" #include "../../Engine/VerySparseMatrix.h" #include "../../Engine/ProgramGlobals.h" #include "../../Engine/Utils.h" namespace Dmrg { template class HeisenbergMix : public ModelBaseType { static const int NUMBER_OF_ORBITALS=1; static const int DEGREES_OF_FREEDOM=2; // spin up and down public: enum class SiteType {SITE_MIDDLE, SITE_BORDER}; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::BasisType BasisType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::QnType QnType; typedef typename ModelBaseType::VectorQnType VectorQnType; typedef typename ModelBaseType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef unsigned int long WordType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename ModelBaseType::VectorRealType VectorRealType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef typename PsimagLite::Vector::Type HilbertBasisType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::PairType PairType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelBaseType::MyBasis MyBasis; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelLinksType ModelLinksType; typedef Aklt AkltType; typedef typename ModelLinksType::AtomKindBase AtomKindBaseType; class AtomKind : public AtomKindBaseType { public: AtomKind(SizeType n) : n_(n) {} virtual SizeType siteToAtomKind(SizeType site) const { return (site == 0 || site == n_ - 1) ? 1 : 0; } virtual SizeType kindsOfAtoms() const { return 2; } private: SizeType n_; }; HeisenbergMix(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), superGeometry_(geometry), atomKind_(nullptr) { SizeType n = superGeometry_.numberOfSites(); SizeType m = modelParameters_.magneticFieldV.size(); SizeType md = modelParameters_.anisotropyD.size(); SizeType me = modelParameters_.anisotropyE.size(); if (m > 0 && m != n) { PsimagLite::String msg("HeisenbergMix: If provided, "); msg += " MagneticField must be a vector of " + ttos(n) + " entries.\n"; err(msg); } if (md > 0 && md != n) { PsimagLite::String msg("HeisenbergMix: If provided, "); msg += " AnisotropyD must be a vector of " + ttos(n) + " entries.\n"; throw PsimagLite::RuntimeError(msg); } if (me > 0 && me != n) { PsimagLite::String msg("HeisenbergMix: If provided, "); msg += " AnisotropyE must be a vector of " + ttos(n) + " entries.\n"; throw PsimagLite::RuntimeError(msg); } if (BasisType::useSu2Symmetry()) { PsimagLite::String msg("HeisenbergMix: SU(2) symmetry "); msg += "is not implemented yet.\n"; throw PsimagLite::RuntimeError(msg); } } ~HeisenbergMix() { delete atomKind_; atomKind_ = nullptr; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); } /* PSIDOC HeisenbergMix::addDiagonalsInNaturalBasis We describe only the addition of a Zeeman term to the Heisenberg model here; note that this function is more complicated. Please look carefully at the following C++ lines: PSIDOCCOPY $FirstFunctionBelow::MagneticField */ void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType) const { SizeType linSize = superGeometry_.numberOfSites(); SizeType n = block.size(); for (SizeType i = 0; i < n; ++i) { // PSIDOCMARK_BEGIN MagneticField SizeType site = block[i]; const OperatorType& sz = ModelBaseType::naturalOperator("sz", site, 0); const OperatorType& splus = ModelBaseType::naturalOperator("splus", site, 0); if (modelParameters_.magneticFieldV.size() == linSize) { RealType tmp = modelParameters_.magneticFieldV[site]; const OperatorType& sminus = ModelBaseType::naturalOperator("sminus", site, 0); if (modelParameters_.magneticFieldDirection == "z") { hmatrix += tmp*sz.getCRS(); } else if (modelParameters_.magneticFieldDirection == "x") { static const RealType zeroPointFive = 0.5; hmatrix += zeroPointFive*tmp*splus.getCRS(); hmatrix += zeroPointFive*tmp*sminus.getCRS(); } } // PSIDOCMARK_END // anisotropyD if (modelParameters_.anisotropyD.size() == linSize) { SparseMatrixType Szsquare; RealType tmp = modelParameters_.anisotropyD[site]; multiply(Szsquare, sz.getCRS(), sz.getCRS()); hmatrix += tmp*Szsquare; } // anisotropyE if (modelParameters_.anisotropyE.size() == linSize) { SparseMatrixType splusSquared; RealType tmp = 0.5*modelParameters_.anisotropyE[site]; multiply(splusSquared, splus.getCRS(), splus.getCRS()); hmatrix += tmp*splusSquared; SparseMatrixType sminusSquared; transposeConjugate(sminusSquared, splusSquared); hmatrix += tmp*sminusSquared; } } } protected: virtual const AtomKindBaseType& getAtomKind() { if (!atomKind_) atomKind_ = new AtomKind(superGeometry_.numberOfSites()); return *atomKind_; } void fillLabeledOperators(VectorQnType& qns) { qns.clear(); SizeType offset = fillLabeledOperators(qns, 0, SiteType::SITE_MIDDLE); fillLabeledOperators(qns, offset, SiteType::SITE_BORDER); } // this function can be private SizeType fillLabeledOperators(VectorQnType& qns, SizeType offset, SiteType typeOfSite) { SizeType site = (typeOfSite == SiteType::SITE_MIDDLE) ? 1 : 0; SizeType indOfKindOfSite = (typeOfSite == SiteType::SITE_MIDDLE) ? 0 : 1; HilbertBasisType natBasis; setBasis(natBasis, site); setSymmetryRelated(qns, natBasis, offset, typeOfSite); // Set the operators S^+_i in the natural basis SparseMatrixType tmpMatrix = findSplusMatrices(site, natBasis); typename OperatorType::Su2RelatedType su2related; PsimagLite::String border = (typeOfSite == SiteType::SITE_BORDER) ? "B" : ""; OperatorType myOp(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 2), -1, su2related); this->createOpsLabel("splus" + border, indOfKindOfSite).push(myOp); this->makeTrackable("splus" + border); myOp.dagger(); this->createOpsLabel("sminus" + border, indOfKindOfSite).push(myOp); // Set the operators S^z_i in the natural basis tmpMatrix = findSzMatrices(site, natBasis); typename OperatorType::Su2RelatedType su2related2; OperatorType myOp2(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 1), 1.0/sqrt(2.0), su2related2); this->createOpsLabel("sz" + border, indOfKindOfSite).push(myOp2); this->makeTrackable("sz" + border); // Set the operators S^x_i in the natural basis tmpMatrix = findSxMatrices(site, natBasis); typename OperatorType::Su2RelatedType su2related3; OperatorType myOp3(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 1), 1.0/sqrt(2.0), su2related3); this->createOpsLabel("sx" + border, indOfKindOfSite).push(myOp3); tmpMatrix = findMaximal(site, natBasis); OperatorType myOp4(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 1), 1.0/sqrt(2.0), su2related3); this->createOpsLabel("maximal" + border, indOfKindOfSite).push(myOp4); return natBasis.size(); } void fillModelLinks() { if (BasisType::useSu2Symmetry()) err("SU(2) not supported\n"); ModelTermType& spsm = ModelBaseType::createTerm("SplusSminus"); OpForLinkType splus("splus"); auto valueModiferTerm0 = [](ComplexOrRealType& value) { value *= 0.5;}; typename ModelTermType::Su2Properties su2properties(2, -1, 2); spsm.push(splus, 'N', splus, 'C', valueModiferTerm0, su2properties); ModelTermType& szsz = ModelBaseType::createTerm("szsz"); OpForLinkType sz("sz"); szsz.push(sz, 'N', sz, 'N', typename ModelTermType::Su2Properties(2, 0.5)); OpForLinkType splusB("splusB"); const bool wantsHermit = true; ModelTermType& spsmB1 = ModelBaseType::createTerm("SplusSminusB1", wantsHermit, "SplusSminus"); spsmB1.push(splusB, 'N', splus, 'C', valueModiferTerm0, su2properties); ModelTermType& spsmB2 = ModelBaseType::createTerm("SplusSminusB2", wantsHermit, "SplusSminus"); spsmB2.push(splus, 'N', splusB, 'C', valueModiferTerm0, su2properties); OpForLinkType szB("szB"); ModelTermType& szszB1 = ModelBaseType::createTerm("szszB1", wantsHermit, "szsz"); szszB1.push(szB, 'N', sz, 'N', typename ModelTermType::Su2Properties(2, 0.5)); ModelTermType& szszB2 = ModelBaseType::createTerm("szszB2", wantsHermit, "szsz"); szszB2.push(sz, 'N', szB, 'N', typename ModelTermType::Su2Properties(2, 0.5)); } private: // atomKind_ is not setup here yet, so do not call it SizeType getSpin(SizeType site) const { const SizeType n = superGeometry_.numberOfSites(); return (site == 0 || site == n - 1) ? modelParameters_.twiceTheSpinBorder : modelParameters_.twiceTheSpin; } void setBasis(HilbertBasisType& natBasis, SizeType site) const { const SizeType twiceTheSpin = getSpin(site); const SizeType total = twiceTheSpin + 1; natBasis.resize(total); for (SizeType i = 0; i < total; ++i) natBasis[i] = i; } //! Find S^+_site in the natural basis natBasis SparseMatrixType findSplusMatrices(SizeType site, const HilbertBasisType& natBasis) const { SizeType total = natBasis.size(); MatrixType cm(total,total); const SizeType twiceTheSpin = getSpin(site); RealType j = 0.5*twiceTheSpin; SizeType bits = 1 + ProgramGlobals::logBase2(twiceTheSpin); SizeType mask = 1; mask <<= bits; // mask = 2^bits assert(mask > 0); mask--; for (SizeType ii=0;ii= twiceTheSpin + 1) continue; SizeType bra = ket & (~mask); assert(bra == 0); bra |= brasite; assert(bra == brasite); RealType m = ketsite - j; RealType x = j*(j+1)-m*(m+1); assert(x>=0); cm(ket,bra) = sqrt(x); } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } //! Find S^z_i in the natural basis natBasis SparseMatrixType findSzMatrices(SizeType site, const HilbertBasisType& natBasis) const { SizeType total = natBasis.size(); MatrixType cm(total,total); const SizeType twiceTheSpin = getSpin(site); RealType j = 0.5*twiceTheSpin; SizeType bits = ProgramGlobals::logBase2(twiceTheSpin) + 1; SizeType mask = 1; mask <<= bits; // mask = 2^bits assert(mask > 0); mask--; for (SizeType ii=0;ii 0); mask--; for (SizeType ii=0;ii PairType; bool isCanonical = (ModelBaseType::targetQuantum().sizeOfOther() == 1); if (isCanonical && modelParameters_.magneticFieldDirection == "x") err(PsimagLite::String(__FILE__) + ": magneticFieldDirection == x CANNOT be canonical. Please " + "delete the TargetSzPlusConst= from the input file\n"); VectorSizeType other; if (isCanonical) other.resize(1, 0); QnType::ifPresentOther0IsElectrons = false; qns.resize(basis.size() + offset, QnType::zero()); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair(0, 0); if (isCanonical) other[0] = basis[i]; SizeType flavor = 1; qns[i + offset] = QnType(false, other, jmpair, flavor); } } ParametersModelHeisenberg modelParameters_; const SuperGeometryType& superGeometry_; const AtomKind* atomKind_; }; // class HeisenbergMix } // namespace Dmrg /*@}*/ #endif //DMRG_HEISENBERG_MIX_H dmrgpp-6.02/src/Models/Heisenberg/ModelHeisenberg.h000066400000000000000000000431011414604301300222170ustar00rootroot00000000000000/* Copyright (c) 2009, 2017-2019, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ModelHeisenberg.h * * An implementation of the Quantum Heisenberg Model to use with DmrgSolver * */ #ifndef DMRG_MODEL_HEISENBERG_HEADER_H #define DMRG_MODEL_HEISENBERG_HEADER_H #include "Aklt.h" #include #include "ParametersModelHeisenberg.h" #include "CrsMatrix.h" #include "../../Engine/VerySparseMatrix.h" #include "../../Engine/SpinSquaredHelper.h" #include "../../Engine/SpinSquared.h" #include "../../Engine/ProgramGlobals.h" #include "../../Engine/Utils.h" namespace Dmrg { template class ModelHeisenberg : public ModelBaseType { static const int NUMBER_OF_ORBITALS=1; static const int DEGREES_OF_FREEDOM=2; // spin up and down public: typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::BasisType BasisType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::QnType QnType; typedef typename ModelBaseType::VectorQnType VectorQnType; typedef typename ModelBaseType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef unsigned int long WordType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename ModelBaseType::VectorRealType VectorRealType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef typename PsimagLite::Vector::Type HilbertBasisType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::PairType PairType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelBaseType::MyBasis MyBasis; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef Aklt AkltType; ModelHeisenberg(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry, PsimagLite::String additional) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), superGeometry_(geometry), additional_(additional), spinSquared_(spinSquaredHelper_,NUMBER_OF_ORBITALS,DEGREES_OF_FREEDOM), aklt_(*this, additional) { SizeType n = superGeometry_.numberOfSites(); SizeType m = modelParameters_.magneticFieldV.size(); SizeType md = modelParameters_.anisotropyD.size(); SizeType me = modelParameters_.anisotropyE.size(); if (m > 0 && m != n) { PsimagLite::String msg("ModelHeisenberg: If provided, "); msg += " MagneticField must be a vector of " + ttos(n) + " entries.\n"; err(msg); } if (md > 0 && md != n) { PsimagLite::String msg("ModelHeisenberg: If provided, "); msg += " AnisotropyD must be a vector of " + ttos(n) + " entries.\n"; throw PsimagLite::RuntimeError(msg); } if (me > 0 && me != n) { PsimagLite::String msg("ModelHeisenberg: If provided, "); msg += " AnisotropyE must be a vector of " + ttos(n) + " entries.\n"; throw PsimagLite::RuntimeError(msg); } if (BasisType::useSu2Symmetry() && modelParameters_.twiceTheSpin != 1) { PsimagLite::String msg("ModelHeisenberg: SU(2) symmetry, "); msg += " for spin different than 1/2 is not implemented yet.\n"; throw PsimagLite::RuntimeError(msg); } } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); spinSquaredHelper_.write(label, io); spinSquared_.write(label, io); } /* PSIDOC Heisenberg::addDiagonalsInNaturalBasis We describe only the addition of a Zeeman term to the Heisenberg model here; note that this function is more complicated. Please look carefully at the following C++ lines: PSIDOCCOPY $FirstFunctionBelow::MagneticField */ void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType) const { SizeType linSize = superGeometry_.numberOfSites(); SizeType n = block.size(); for (SizeType i = 0; i < n; ++i) { // PSIDOCMARK_BEGIN MagneticField SizeType site = block[i]; const OperatorType& sz = ModelBaseType::naturalOperator("sz", site, 0); const OperatorType& splus = ModelBaseType::naturalOperator("splus", site, 0); if (modelParameters_.magneticFieldV.size() == linSize) { RealType tmp = modelParameters_.magneticFieldV[site]; const OperatorType& sminus = ModelBaseType::naturalOperator("sminus", site, 0); if (modelParameters_.magneticFieldDirection == "z") { hmatrix += tmp*sz.getCRS(); } else if (modelParameters_.magneticFieldDirection == "x") { static const RealType zeroPointFive = 0.5; hmatrix += zeroPointFive*tmp*splus.getCRS(); hmatrix += zeroPointFive*tmp*sminus.getCRS(); } } // PSIDOCMARK_END // anisotropyD if (modelParameters_.anisotropyD.size() == linSize) { SparseMatrixType Szsquare; RealType tmp = modelParameters_.anisotropyD[site]; multiply(Szsquare, sz.getCRS(), sz.getCRS()); hmatrix += tmp*Szsquare; } // anisotropyE if (modelParameters_.anisotropyE.size() == linSize) { SparseMatrixType splusSquared; RealType tmp = 0.5*modelParameters_.anisotropyE[site]; multiply(splusSquared, splus.getCRS(), splus.getCRS()); hmatrix += tmp*splusSquared; SparseMatrixType sminusSquared; transposeConjugate(sminusSquared, splusSquared); hmatrix += tmp*sminusSquared; } } } protected: void fillLabeledOperators(VectorQnType& qns) { SizeType site = 0; BlockType block(1, site); SizeType total = utils::powUint(modelParameters_.twiceTheSpin + 1, block.size()); HilbertBasisType natBasis(total); for (SizeType i = 0; i < total; ++i) natBasis[i] = i; setSymmetryRelated(qns, natBasis, block.size()); for (SizeType i=0;icreateOpsLabel("splus").push(myOp); this->makeTrackable("splus"); myOp.dagger(); this->createOpsLabel("sminus").push(myOp); // Set the operators S^z_i in the natural basis tmpMatrix = findSzMatrices(i,natBasis); typename OperatorType::Su2RelatedType su2related2; OperatorType myOp2(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 1), 1.0/sqrt(2.0), su2related2); this->createOpsLabel("sz").push(myOp2); this->makeTrackable("sz"); // Set the operators S^x_i in the natural basis tmpMatrix = findSxMatrices(i,natBasis); typename OperatorType::Su2RelatedType su2related3; OperatorType myOp3(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 1), 1.0/sqrt(2.0), su2related3); this->createOpsLabel("sx").push(myOp3); if (additional_ == "Anisotropic") this->makeTrackable("sx"); aklt_.fillLabeledOperators(i, myOp.getCRS(), myOp2.getCRS()); tmpMatrix = findMaximal(i, natBasis); OperatorType myOp4(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 1), 1.0/sqrt(2.0), su2related3); this->createOpsLabel("maximal").push(myOp4); } } void fillModelLinks() { bool isSu2 = BasisType::useSu2Symmetry(); ModelTermType& spsm = ModelBaseType::createTerm("SplusSminus"); OpForLinkType splus("splus"); auto valueModiferTerm0 = [isSu2](ComplexOrRealType& value) { value *= (isSu2) ? -0.5 : 0.5;}; typename ModelTermType::Su2Properties su2properties(2, -1, 2); spsm.push(splus, 'N', splus, 'C', valueModiferTerm0, su2properties); ModelTermType& szsz = ModelBaseType::createTerm("szsz"); if (!isSu2) { OpForLinkType sz("sz"); szsz.push(sz, 'N', sz, 'N', typename ModelTermType::Su2Properties(2, 0.5)); } else { auto valueModifierTermOther = [isSu2](ComplexOrRealType& value) { if (isSu2) value = -value;}; typename ModelTermType::Su2Properties su2properties(2, -1, 2); spsm.push(splus, 'N', splus, 'C', valueModifierTermOther, su2properties); } if (additional_ == "Anisotropic") { ModelTermType& sxsx = ModelBaseType::createTerm("sxsx"); OpForLinkType sx("sx"); sxsx.push(sx, 'N', sx, 'N', typename ModelTermType::Su2Properties(2, 1, 0)); } aklt_.fillModelLinks(); } private: //! Find S^+_site in the natural basis natBasis SparseMatrixType findSplusMatrices(SizeType site, const HilbertBasisType& natBasis) const { SizeType total = natBasis.size(); MatrixType cm(total,total); RealType j = 0.5*modelParameters_.twiceTheSpin; SizeType bitsForOneSite = utils::bitSizeOfInteger(modelParameters_.twiceTheSpin); SizeType bits = 1 + ProgramGlobals::logBase2(modelParameters_.twiceTheSpin); SizeType mask = 1; mask <<= bits; // mask = 2^bits assert(mask > 0); mask--; mask <<= (site*bitsForOneSite); for (SizeType ii=0;ii>= (site*bitsForOneSite); assert(ketsite == ket); SizeType brasite = ketsite + 1; if (brasite >= modelParameters_.twiceTheSpin+1) continue; SizeType bra = ket & (~mask); assert(bra == 0); brasite <<= (site*bitsForOneSite); bra |= brasite; assert(bra == brasite); RealType m = ketsite - j; RealType x = j*(j+1)-m*(m+1); assert(x>=0); cm(ket,bra) = sqrt(x); } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } //! Find S^z_i in the natural basis natBasis SparseMatrixType findSzMatrices(SizeType site, const HilbertBasisType& natBasis) const { SizeType total = natBasis.size(); MatrixType cm(total,total); RealType j = 0.5*modelParameters_.twiceTheSpin; SizeType bitsForOneSite = utils::bitSizeOfInteger(modelParameters_.twiceTheSpin); SizeType bits = ProgramGlobals::logBase2(modelParameters_.twiceTheSpin) + 1; SizeType mask = 1; mask <<= bits; // mask = 2^bits assert(mask > 0); mask--; mask <<= (site*bitsForOneSite); for (SizeType ii=0;ii>= (site*bitsForOneSite); assert(ketsite == ket); RealType m = ketsite - j; cm(ket,ket) = m; } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } //! Find Maximal_i in the natural basis natBasis SparseMatrixType findMaximal(SizeType site, const HilbertBasisType& natBasis) const { SizeType total = natBasis.size(); MatrixType cm(total,total); SizeType bitsForOneSite = utils::bitSizeOfInteger(modelParameters_.twiceTheSpin); SizeType bits = ProgramGlobals::logBase2(modelParameters_.twiceTheSpin) + 1; SizeType mask = 1; mask <<= bits; // mask = 2^bits assert(mask > 0); mask--; mask <<= (site*bitsForOneSite); for (SizeType ii=0;ii>= (site*bitsForOneSite); assert(ketsite == ket); if (ketsite != modelParameters_.twiceTheSpin) continue; cm(ket, ket) = 1; } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } SparseMatrixType findSxMatrices(SizeType site, const HilbertBasisType& natBasis) const { SparseMatrixType Splus_temp=findSplusMatrices(site,natBasis); SparseMatrixType Sminus_temp,Sx; transposeConjugate(Sminus_temp,Splus_temp); RealType tmp=0.5; Sx = tmp*Splus_temp; Sx += tmp*Sminus_temp; return Sx; } void setSymmetryRelated(VectorQnType& qns, const HilbertBasisType& basis, int n) const { // find j,m and flavors (do it by hand since we assume n==1) // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType typedef std::pair PairType; bool isCanonical = (ModelBaseType::targetQuantum().sizeOfOther() == 1); if (isCanonical && additional_ == "Anisotropic") err(PsimagLite::String(__FILE__) + ": Anisotropic sub-model CANNOT be canonical. Please " + "delete the TargetSzPlusConst= from the input file\n"); if (isCanonical && modelParameters_.magneticFieldDirection == "x") err(PsimagLite::String(__FILE__) + ": magneticFieldDirection == x CANNOT be canonical. Please " + "delete the TargetSzPlusConst= from the input file\n"); VectorSizeType other; if (isCanonical) other.resize(1, 0); QnType::ifPresentOther0IsElectrons = false; qns.resize(basis.size(), QnType::zero()); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair(modelParameters_.twiceTheSpin, basis[i]); if (isCanonical) other[0] = getSzPlusConst(basis[i], n); SizeType flavor = 1; qns[i] = QnType(false, other, jmpair, flavor); } } SizeType getSzPlusConst(SizeType ket, SizeType n) const { if (n == 1) return ket; SizeType bitsForOneSite = utils::bitSizeOfInteger(modelParameters_.twiceTheSpin); SizeType sum = 0; for (SizeType site = 0; site < n; ++site) { SizeType mask = modelParameters_.twiceTheSpin; mask <<= (site*bitsForOneSite); SizeType ketsite = ket & mask; ketsite >>= (site*bitsForOneSite); sum += ketsite; } return sum; } ParametersModelHeisenberg modelParameters_; const SuperGeometryType& superGeometry_; SpinSquaredHelper spinSquaredHelper_; PsimagLite::String additional_; SpinSquared > spinSquared_; AkltType aklt_; }; // class ModelHeisenberg } // namespace Dmrg /*@}*/ #endif //DMRG_MODEL_HEISENBERG_HEADER_H dmrgpp-6.02/src/Models/Heisenberg/ParametersModelHeisenberg.h000066400000000000000000000133151414604301300242470ustar00rootroot00000000000000/* Copyright (c) 2009-2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersModelHeisenberg.h * * Contains the parameters for the Heisenberg model and function * to read them from a file * */ #ifndef PARAMETERSMODELHEISENBERG_H #define PARAMETERSMODELHEISENBERG_H #include "Vector.h" #include "../../Engine/ParametersModelBase.h" namespace Dmrg { //! Heisenberg Model Parameters template struct ParametersModelHeisenberg : public ParametersModelBase { typedef ParametersModelBase BaseType; typedef typename PsimagLite::Vector::Type VectorRealType; // no connectors here, connectors are handled by the geometry template ParametersModelHeisenberg(IoInputType& io) : BaseType(io, false), twiceTheSpinBorder(0) { PsimagLite::String model; io.readline(model, "Model="); io.readline(twiceTheSpin, "HeisenbergTwiceS="); if (model == "HeisenbergMix") io.readline(twiceTheSpinBorder, "HeisenbergTwiceSborder="); SizeType nsites = 0; io.readline(nsites, "TotalNumberOfSites="); bool hasField = false; try { magneticFieldV.resize(nsites); io.read(magneticFieldV, "MagneticField"); hasField = true; } catch (std::exception&) {} if (hasField) { magneticFieldDirection = "z"; try { io.readline(magneticFieldDirection, "MagneticFieldDirection="); } catch (std::exception&) { std::cerr<<"WARNING: MagneticFieldDirection= not given, assuming z\n"; } if (magneticFieldDirection != "x" && magneticFieldDirection != "z") err("magneticFieldDirection must be in {x, z}\n"); } else { magneticFieldV.clear(); } try { io.read(anisotropyD,"AnisotropyD"); } catch (std::exception&) {} try { io.read(anisotropyE,"AnisotropyE"); } catch (std::exception&) {} } template SizeType memResolv(SomeMemResolvType&, SizeType, PsimagLite::String = "") const { return 0; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersModelHeisenberg"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/twiceTheSpin", twiceTheSpin); io.write(label + "/magneticFieldV", magneticFieldV); io.write(label + "/magneticFieldDirection", magneticFieldDirection); io.write(label + "/anisotropyD", anisotropyD); io.write(label + "/anisotropyE", anisotropyE); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersModelHeisenberg& parameters) { os<<"MagneticField="< #include "ModelBase.h" #include "ParametersHeisenbergAncillaC.h" #include "CrsMatrix.h" #include "VerySparseMatrix.h" #include "SpinSquaredHelper.h" #include "SpinSquared.h" #include "ProgramGlobals.h" namespace Dmrg { /* Order of the basis For S=1/2 and NUMBER_OF_ORBITALS=2 it is down A, down B; down A, up B; up A, down B; up A, up B; */ template class HeisenbergAncillaC : public ModelBaseType { static const int NUMBER_OF_ORBITALS=2; public: typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::BasisType BasisType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::VectorType VectorType; typedef typename std::pair PairSizeType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelBaseType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type SparseElementType; typedef unsigned int long WordType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename ModelBaseType::VectorRealType VectorRealType; typedef typename PsimagLite::Vector::Type HilbertBasisType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::PairType PairType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelBaseType::MyBasis MyBasis; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; HeisenbergAncillaC(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), hot_(geometry.orbitals(0,0) > 1) { SizeType n = geometry.numberOfSites(); SizeType m = modelParameters_.magneticField.size(); if (m > 0 && m != n) { PsimagLite::String msg("HeisenbergAncillaC: If provided, "); msg += " MagneticField must be a vector of " + ttos(n) + " entries.\n"; throw PsimagLite::RuntimeError(msg); } if (BasisType::useSu2Symmetry()) { PsimagLite::String msg("HeisenbergAncillaC: SU(2) symmetry"); msg += " is not implemented yet.\n"; throw PsimagLite::RuntimeError(msg); } if (modelParameters_.twiceTheSpin != 1) { PsimagLite::String msg("HeisenbergAncillaC: spin > 1/2"); msg += " HIGHLY EXPERIMENTAL!\n"; std::cout<params().model; io.createGroup(label); modelParameters_.write(label, io); io.write(label + "/hot_", hot_); } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType) const { if (modelParameters_.magneticField.size() != ModelBaseType::superGeometry().numberOfSites()) return; SizeType n = block.size(); for (SizeType i = 0; i < n; ++i) { SizeType site = block[i]; const OperatorType& sz = ModelBaseType::naturalOperator("sz", site, 0); // magnetic field RealType tmp = modelParameters_.magneticField[site]; hmatrix += tmp * sz.getCRS(); } } virtual PsimagLite::String oracle() const { const RealType nup = ModelBaseType::targetQuantum().qn(0).other[0]; const RealType n = ModelBaseType::superGeometry().numberOfSites(); RealType energy = -nup*(n - nup); return ModelBaseType::oracle(energy, "-Nup*Ndown"); } protected: void fillLabeledOperators(VectorQnType& qns) { if (modelParameters_.twiceTheSpin > 2) err("Spin > 1 not supported by this model yet\n"); const SizeType numberOfDs = (modelParameters_.twiceTheSpin == 1) ? 1 : 11; SizeType site = 0; BlockType block(1, site); HilbertBasisType natBasis; SparseMatrixType tmpMatrix; setBasis(natBasis, block); setSymmetryRelated(qns, natBasis, block.size()); OpsLabelType& splus = this->createOpsLabel("splus"); OpsLabelType& sminus = this->createOpsLabel("sminus"); OpsLabelType& sz = this->createOpsLabel("sz"); OpsLabelType& d = this->createOpsLabel("d"); this->makeTrackable("splus"); this->makeTrackable("sz"); this->makeTrackable("d"); for (SizeType i=0;i 1 not supported by this model yet\n"); auto modifierTermDoff = [isSu2](SparseElementType& value) {if (isSu2) value = -value;}; OpForLinkType N0("d", 0); OpForLinkType N1("d", 1); OpForLinkType N2("d", 2); OpForLinkType M0("d", 3); OpForLinkType M1("d", 4); OpForLinkType M2("d", 5); OpForLinkType T0("d", 6); OpForLinkType W0("d", 7); OpForLinkType T1("d", 8); OpForLinkType W1("d", 9); OpForLinkType T2("d", 10); ancilla.push(N0, 'N', M0, 'C', modifierTermDoff, typename ModelTermType::Su2Properties(2, 1, 0)); ancilla.push(N1, 'N', M1, 'C', modifierTermDoff, typename ModelTermType::Su2Properties(2, 1, 0)); ancilla.push(N2, 'N', M2, 'C', modifierTermDoff, typename ModelTermType::Su2Properties(2, 1, 0)); ancilla.push(T0, 'N', W0, 'C', modifierTermDoff, typename ModelTermType::Su2Properties(2, 1, 0)); ancilla.push(T1, 'N', W1, 'C', modifierTermDoff, typename ModelTermType::Su2Properties(2, 1, 0)); ancilla.push(T2, 'N', T2, 'C', modifierTermDoff, typename ModelTermType::Su2Properties(2, 1, 0)); } private: //! find all states in the natural basis for a block of n sites void setBasis(HilbertBasisType& basis, const VectorSizeType& block) const { assert(block.size()==1); SizeType total = pow(modelParameters_.twiceTheSpin + 1, NUMBER_OF_ORBITALS); basis.resize(total); for (SizeType i = 0; i < total; ++i) basis[i] = i; } //! Find S^+_i a in the natural basis natBasis SparseMatrixType findSplusMatrices(int, SizeType orbital, const HilbertBasisType& natBasis) const { SizeType total = natBasis.size(); MatrixType cm(total,total); RealType j = 0.5*modelParameters_.twiceTheSpin; SizeType total1 = modelParameters_.twiceTheSpin + 1; for (SizeType ii=0;ii= total1) continue; PairSizeType bra = (orbital == 0) ? PairSizeType(bra1,ket2) : PairSizeType(ket2,bra1); SizeType jj = getFullIndex(bra); RealType m = ket1 - j; RealType x = j*(j+1)-m*(m+1); assert(x>=0); cm(ii,jj) = sqrt(x); } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } //! Find S^z_i in the natural basis natBasis MatrixType findSzDense(SizeType orbital, const HilbertBasisType& natBasis) const { SizeType total = natBasis.size(); MatrixType cm(total,total); RealType j = 0.5*modelParameters_.twiceTheSpin; for (SizeType ii=0;ii 2) err("Ntilde cannot be>2\n"); assert(which 2) err("Mtilde cannot be>2\n"); assert(which 2) err("Spin > 1 not supported by this model yet\n"); if (pp > 10) err("findDeltaMatrix: pp > 10\n"); if (pp > 0 && modelParameters_.twiceTheSpin == 1) err("findDeltaMatrix: pp > 0 for spin = 1/2\n"); SizeType step = 1; SizeType total = natBasis.size(); MatrixType cm(total,total); if (pp==10) step = 2; if (modelParameters_.twiceTheSpin==1 && pp==0) { for (SizeType ii=0;ii modelParameters_.twiceTheSpin || bra2 < step) continue; bra2 -= step; PairSizeType bra(bra1, bra2); SizeType jj = getFullIndex(bra); cm(ii, jj) = 1; } } if (modelParameters_.twiceTheSpin==2) { if (pp<=2) cm = findNtildeDense(0, pp, natBasis); if (pp>2 && pp<=5) cm = findMtildeDense(0, pp-3, natBasis); if (pp>=6) { for (SizeType ii=0;ii modelParameters_.twiceTheSpin || bra2 < step) continue; bra2 -= step; PairSizeType bra(bra1, bra2); SizeType jj = getFullIndex(bra); switch (pp) { case 6: if (ket.first==0) cm(ii,jj) = 1.0/2.0; if (ket.first==1) cm(ii,jj) = 1.0/3.0; break; case 7: if (ket.first==0) cm(ii,jj) = 1; break; case 8: if (ket.first==0) cm(ii,jj) = 1.0/3.0; if (ket.first==1) cm(ii,jj) = 1.0/2.0; break; case 9: if (ket.first==1) cm(ii,jj) = 1; break; case 10: if (ket.first==0) cm(ii,jj) = sqrt(1.0/3.0); break; } } } } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } void setSymmetryRelated(VectorQnType& qns, const HilbertBasisType& basis, int n) const { if (n!=1) PsimagLite::RuntimeError("HeisenbergAncillaC::setSymmetryRelated n=1 only\n"); // find j,m and flavors (do it by hand since we assume n==1) // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType typedef std::pair PairType; VectorSizeType other(2, 0); qns.resize(basis.size(), QnType::zero()); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair; jmpair.first = modelParameters_.twiceTheSpin; jmpair.second = basis[i]; PairSizeType ket = getOneOrbital(basis[i]); other[1] = ket.first + ket.second; other[0] = ket.first; SizeType flavor = 1; bool sign = other[0] & 1; qns[i] = QnType(sign, other, jmpair, flavor); } } PairSizeType getOneOrbital(SizeType state) const { SizeType total1 = modelParameters_.twiceTheSpin + 1; assert(NUMBER_OF_ORBITALS == 2); SizeType first = static_cast(state/total1); SizeType second = state % total1; return PairSizeType(first, second); } SizeType getFullIndex(PairSizeType p) const { return p.first*(modelParameters_.twiceTheSpin + 1) + p.second; } ParametersHeisenbergAncillaC modelParameters_; bool hot_; }; // class HeisenbergAncillaC } // namespace Dmrg /*@}*/ #endif //DMRG_HEISENBERG_ANCILLAC_H dmrgpp-6.02/src/Models/HeisenbergAncillaC/ParametersHeisenbergAncillaC.h000066400000000000000000000106071414604301300262450ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersHeisenbergAncillaC.h * * Contains the parameters for the Heisenberg model and function * to read them from a file * */ #ifndef DMRG_PARAMS_HEISENBERG_ANCILLAC_H #define DMRG_PARAMS_HEISENBERG_ANCILLAC_H #include "Vector.h" #include "ParametersModelBase.h" namespace Dmrg { //! Heisenberg Model Parameters template struct ParametersHeisenbergAncillaC : public ParametersModelBase { typedef ParametersModelBase BaseType; typedef typename PsimagLite::Vector::Type VectorRealType; // no connectors here, connectors are handled by the geometry template ParametersHeisenbergAncillaC(IoInputType& io) : BaseType(io,false) { io.readline(twiceTheSpin,"HeisenbergTwiceS="); try { io.read(magneticField,"MagneticField"); } catch (std::exception&) {} } template SizeType memResolv(SomeMemResolvType&, SizeType, PsimagLite::String = "") const { return 0; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersHeisenbergAncillaC"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/twiceTheSpin", twiceTheSpin); io.write(label + "/magneticField", magneticField); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersHeisenbergAncillaC& parameters) { os<<"MagneticField="< #include namespace Dmrg { template class HolsteinThin : public ModelBaseType { public: enum class SiteType {SITE_BOSON, SITE_FERMION}; typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::HilbertBasisType HilbertBasisType; typedef typename HilbertBasisType::value_type HilbertState; typedef unsigned int long WordType; typedef HilbertSpaceHubbard HilbertSpaceHubbardType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef ParametersHubbardHolstein ParametersHolsteinThinType; typedef std::pair PairType; typedef typename PsimagLite::Vector::Type VectorPairType; typedef typename PsimagLite::Vector::Type VectorSparseMatrixType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef typename ModelBaseType::ModelLinksType ModelLinksType; typedef typename ModelLinksType::AtomKindBase AtomKindBaseType; class AtomKind : public AtomKindBaseType { public: virtual SizeType siteToAtomKind(SizeType site) const { return (site & 1); } virtual SizeType kindsOfAtoms() const { return 2; } }; static const int FERMION_SIGN = -1; static const int SPIN_UP = HilbertSpaceHubbardType::SPIN_UP; static const int SPIN_DOWN = HilbertSpaceHubbardType::SPIN_DOWN; HolsteinThin(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry, PsimagLite::String additional) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), isSsh_(additional == "SSH"), atomKind_(0) { if (isSsh_) err("SSH not supported in thin version yet!\n"); } ~HolsteinThin() { delete atomKind_; atomKind_ = nullptr; } void print(std::ostream& os) const { operator<<(os,modelParameters_); } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType) const { assert(block.size() == 1); const SizeType actualSite = block[0]; SiteType kindOfSite = determineKindOfSiteFromSite(actualSite); if (kindOfSite == SiteType::SITE_FERMION) { HilbertBasisType fermionicBasis; setBasis(fermionicBasis, SiteType::SITE_FERMION); VectorSparseMatrixType cm; findAllFermionicMatrices(cm, fermionicBasis); addInteractionFU(hmatrix, cm, actualSite); addPotentialFV(hmatrix, cm, actualSite); } else { assert(kindOfSite == SiteType::SITE_BOSON); HilbertBasisType bosonicBasis; setBasis(bosonicBasis, SiteType::SITE_BOSON); SparseMatrixType tmpMatrix = findPhononadaggerMatrix(bosonicBasis); addPotentialPhononV(hmatrix, tmpMatrix, actualSite); } } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); } protected: virtual const AtomKindBaseType& getAtomKind() { if (!atomKind_) atomKind_ = new AtomKind(); return *atomKind_; } void fillLabeledOperators(VectorQnType& qns) { OpsLabelType& c = this->createOpsLabel("c", 1); // 1 == fermionic site OpsLabelType& a = this->createOpsLabel("a", 0); // 0 == bosonic site this->makeTrackable("c"); if (modelParameters_.numberphonons > 0) this->makeTrackable("a"); // qns for bosons are all the same HilbertBasisType bosonicBasis; setBasis(bosonicBasis, SiteType::SITE_BOSON); qns.clear(); setSymmetryRelated(qns, bosonicBasis, 0, SiteType::SITE_BOSON); HilbertBasisType fermionicBasis; setBasis(fermionicBasis, SiteType::SITE_FERMION); setSymmetryRelated(qns, fermionicBasis, bosonicBasis.size(), SiteType::SITE_FERMION); //! Set the operators c^\daggger_{i\gamma\sigma} in the natural basis SparseMatrixType tmpMatrix; SparseMatrixType nmatrix; for (SizeType sigma = 0; sigma < 2; ++sigma) { tmpMatrix = findOperatorMatrices(sigma, fermionicBasis); int asign = 1; if (sigma > 0) asign= 1; typename OperatorType::Su2RelatedType su2related; if (sigma==0) { su2related.source.push_back(0); su2related.source.push_back(1); su2related.transpose.push_back(-1); su2related.transpose.push_back(-1); su2related.offset = 1; } OperatorType myOp(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::FERMION, typename OperatorType::PairType(1 ,1 - sigma), asign, su2related); c.push(myOp); if (sigma == 0) nmatrix = n(tmpMatrix); else nmatrix += n(tmpMatrix); } OpsLabelType& n = this->createOpsLabel("n", 1); // 1 == fermionic site typename OperatorType::Su2RelatedType su2related; OperatorType myOp(nmatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0, 0), 1, su2related); n.push(myOp); if (modelParameters_.numberphonons == 0) return; this->makeTrackable("n"); tmpMatrix = findPhononadaggerMatrix(bosonicBasis); typename OperatorType::Su2RelatedType su2related2; su2related2.source.push_back(0*2); su2related2.source.push_back(0*2+1); su2related2.source.push_back(0*2); su2related2.transpose.push_back(-1); su2related2.transpose.push_back(-1); su2related2.transpose.push_back(1); su2related2.offset = 1; OperatorType myOp2(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 2), -1, su2related2); a.push(myOp2); } void fillModelLinks() { ModelTermType& hopf = ModelBaseType::createTerm("HoppingFermionic"); OpForLinkType cup("c", 0); typename ModelTermType::Su2Properties su2properties(1, 1, 0); hopf.push(cup, 'C', cup, 'N', su2properties); typename ModelTermType::Su2Properties su2properties2(1, -1, 1); OpForLinkType cdown("c", 1); hopf.push(cdown, 'C', cdown, 'N', su2properties2); if (modelParameters_.numberphonons > 0) { ModelTermType& hopb = ModelBaseType::createTerm("HoppingBosonic"); OpForLinkType a("a"); hopb.push(a, 'C', a, 'N'); const bool wantsHerm = false; ModelTermType& phononFermion = ModelBaseType::createTerm("PhononFermion", wantsHerm); OpForLinkType n("n"); phononFermion.push(a, 'N', n, 'N'); ModelTermType& fermionPhonon = ModelBaseType::createTerm("FermionPhonon", wantsHerm); fermionPhonon.push(a, 'C', n, 'N'); } } private: //! find all states in the natural basis for a block of n sites //! N.B.: HAS BEEN CHANGED TO ACCOMODATE FOR MULTIPLE BANDS void setBasis(HilbertBasisType& basis, SiteType kindOfSite) const { const HilbertState total = (kindOfSite == SiteType::SITE_BOSON) ? (modelParameters_.numberphonons + 1) : 4; basis.resize(total); for (SizeType i = 0; i < total; ++i) basis[i] = i; } //! Calculate fermionic sign when applying operator c^\dagger_{i\sigma} to basis state ket RealType sign(typename HilbertSpaceHubbardType::HilbertState const &ket, int i, int sigma) const { int value=0; value += HilbertSpaceHubbardType::calcNofElectrons(ket,0,i,0); value += HilbertSpaceHubbardType::calcNofElectrons(ket,0,i,1); int tmp1 = HilbertSpaceHubbardType::get(ket,0) &1; int tmp2 = HilbertSpaceHubbardType::get(ket,0) &2; if (i>0 && tmp1>0) value++; if (i>0 && tmp2>0) value++; if (sigma==1) { // spin down if ((HilbertSpaceHubbardType::get(ket,i) &1)) value++; } if (value%2==0) return 1.0; return FERMION_SIGN; } void findAllFermionicMatrices(VectorSparseMatrixType& cm, const HilbertBasisType& natBasis) const { cm.resize(2); cm[0] = findOperatorMatrices(SPIN_UP, natBasis); cm[1] = findOperatorMatrices(SPIN_DOWN, natBasis); } //! Find c^\dagger_isigma in the natural basis natBasis SparseMatrixType findOperatorMatrices(SizeType sigma, const HilbertBasisType& natBasis) const { typename HilbertSpaceHubbardType::HilbertState bra,ket; int n = natBasis.size(); PsimagLite::Matrix cm(n,n); for (SizeType ii=0;ii PairType; qns.resize(basis.size() + offset, QnType::zero()); static const bool isCanonical = true; VectorSizeType other((isCanonical) ? 2 : 1, 0); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair(0,0); bool sign = false; if (typeOfSite == SiteType::SITE_FERMION) { // nup SizeType electronsUp = HilbertSpaceHubbardType::getNofDigits(basis[i], 0); // ndown SizeType electronsDown = HilbertSpaceHubbardType::getNofDigits(basis[i], 1); other[0] = electronsUp + electronsDown; if (isCanonical) other[1] = electronsUp; sign = other[0] & 1; } qns[i + offset] = QnType(sign, other, jmpair, other[0]); } } //! Term is U \sum_{\alpha}n_{i\alpha UP} n_{i\alpha DOWN} void addInteractionFU(SparseMatrixType& hmatrix, const VectorSparseMatrixType& cm, SizeType actualSite) const { SparseMatrixType tmpMatrix; SparseMatrixType m1=cm[SPIN_UP]; SparseMatrixType m2=cm[SPIN_DOWN]; multiply(tmpMatrix,n(m1),n(m2)); assert(actualSite < modelParameters_.hubbardFU.size()); hmatrix += modelParameters_.hubbardFU[actualSite]*tmpMatrix; } void addPotentialFV(SparseMatrixType &hmatrix, const VectorSparseMatrixType& cm, SizeType actualIndexOfSite) const { SparseMatrixType nup = n(cm[SPIN_UP]); SparseMatrixType ndown = n(cm[SPIN_DOWN]); SizeType linSize = ModelBaseType::superGeometry().numberOfSites(); SizeType iUp = actualIndexOfSite; assert(iUp < modelParameters_.potentialFV.size()); hmatrix += modelParameters_.potentialFV[iUp] * nup; SizeType iDown = actualIndexOfSite + linSize; assert(iDown < modelParameters_.potentialFV.size()); hmatrix += modelParameters_.potentialFV[iDown] * ndown; } void addPotentialPhononV(SparseMatrixType& hmatrix, const SparseMatrixType& amatrix, SizeType actualIndexOfSite) const { if (modelParameters_.numberphonons == 0) return; SparseMatrixType nphon = n(amatrix); SizeType iUp = actualIndexOfSite; assert(iUp < modelParameters_.potentialPV.size()); hmatrix += modelParameters_.potentialPV[iUp] * nphon; } SparseMatrixType n(const SparseMatrixType& c) const { SparseMatrixType tmpMatrix; SparseMatrixType cdagger; transposeConjugate(cdagger,c); multiply(tmpMatrix, cdagger, c); return tmpMatrix; } //! Find a^+_site in the natural basis natBasis SparseMatrixType findPhononadaggerMatrix(const HilbertBasisType& natBasis) const { SizeType total = natBasis.size(); MatrixType cm(total, total); for (SizeType ii = 0; ii < total; ++ii) { const WordType ket = natBasis[ii]; const SizeType nphon = ket; if (nphon >= modelParameters_.numberphonons) continue; // too many phonons, cannot create const WordType bra = ket + 1; const RealType x = bra; cm(ii, bra) = sqrt(x); } // print cm matrix // std::cerr< class HelperHubbardAncilla { public: typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::HilbertBasisType HilbertBasisType; typedef typename HilbertBasisType::value_type HilbertState; typedef HilbertSpaceFeAs HilbertSpaceFeAsType; typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename PsimagLite::Real::Type RealType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorSparseMatrixType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef std::pair PairType; typedef typename ModelHelperType::BlockType BlockType; static const SizeType ORBITALS = 2; static const int SPIN_UP=HilbertSpaceFeAsType::SPIN_UP; static const int SPIN_DOWN=HilbertSpaceFeAsType::SPIN_DOWN; static const int FERMION_SIGN = -1; HelperHubbardAncilla(const SuperGeometryType& geometry, const ModelParametersType& modelParams) : superGeometry_(geometry), modelParameters_(modelParams), hot_(superGeometry_.orbitals(0,0) > 1) { if (!hot_) return; PsimagLite::String msg("HubbardAncilla[Extended]: Hot ancilla mode is on"); msg += " (EXPERIMENTAL feature)\n"; std::cout<0) value += HilbertSpaceFeAsType::electrons(ket); //order for sign is: a up, a down, b up, b down, etc unsigned int x = HilbertSpaceFeAsType::get(ket,i); int spin = sigma/ORBITALS; SizeType orb = sigma % ORBITALS; for (SizeType j=0;j #include "HelperHubbardAncilla.h" namespace Dmrg { template class HubbardAncilla : public ModelBaseType { public: typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::HilbertBasisType HilbertBasisType; typedef typename HilbertBasisType::value_type HilbertState; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef ParametersHubbardAncilla ParametersHubbardAncillaType; typedef std::pair PairType; typedef typename PsimagLite::Vector::Type VectorPairType; typedef typename PsimagLite::Vector::Type VectorSparseMatrixType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef HelperHubbardAncilla HelperHubbardAncillaType; typedef typename HelperHubbardAncillaType::HilbertSpaceFeAsType HilbertSpaceFeAsType; static const int SPIN_UP=HilbertSpaceFeAsType::SPIN_UP; static const int SPIN_DOWN=HilbertSpaceFeAsType::SPIN_DOWN; static SizeType const ORBITALS = 2; HubbardAncilla(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), superGeometry_(geometry), helperHubbardAncilla_(superGeometry_, modelParameters_) {} void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { helperHubbardAncilla_.write(label1, io, this->params().model); } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType t) const { helperHubbardAncilla_.addDiagonalsInNaturalBasis(hmatrix, block, t); } virtual PsimagLite::String oracle() const { const RealType ne = ModelBaseType::targetQuantum().qn(0).other[0]; const RealType nup = ModelBaseType::targetQuantum().qn(0).other[1]; const RealType ndown = ne - nup; const RealType n = ModelBaseType::superGeometry().numberOfSites(); RealType energy = -nup*(n - nup) - ndown*(n - ndown); return ModelBaseType::oracle(energy, " -Nup*(L-Nup) -Ndown*(L-Ndown)"); } protected: void fillLabeledOperators(VectorQnType& qns) { SizeType site = 0; // FIXME for Immm SDHS BlockType block(1, site); HilbertBasisType natBasis; HelperHubbardAncillaType::setBasis(natBasis, block); HelperHubbardAncillaType::setSymmetryRelated(qns, natBasis); //! Set the operators c^\daggger_{i\gamma\sigma} in the natural basis OpsLabelType& c = this->createOpsLabel("c"); OpsLabelType& ll = this->createOpsLabel("l"); OpsLabelType& na = this->createOpsLabel("na"); this->makeTrackable("c"); this->makeTrackable("l"); const bool hot = helperHubbardAncilla_.isHot(); SizeType dofs = 2*ORBITALS; for (SizeType i=0;iORBITALS-1) { m=1; asign= -1; } typename OperatorType::Su2RelatedType su2related; if (sigma struct ParametersHubbardAncilla : ParametersModelFeAs { typedef ParametersModelFeAs BaseType; template ParametersHubbardAncilla(IoInputType& io) : BaseType(io) {} template SizeType memResolv(SomeMemResolvType&, SizeType, PsimagLite::String = "") const { return 0; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersHubbardAncilla"; io.createGroup(label); BaseType::write(label, io); } }; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/HubbardAncillaExtended/000077500000000000000000000000001414604301300212545ustar00rootroot00000000000000dmrgpp-6.02/src/Models/HubbardAncillaExtended/HubbardAncillaExtended.h000066400000000000000000000330041414604301300257410ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file HubbardAncillaExtended.h * * An implementation of a FeBasedSc model for Fe-based superconductors to use with * the DmrgSolver * */ #ifndef DMRG_HUBBARD_ANCILLA_EXTENDED_H #define DMRG_HUBBARD_ANCILLA_EXTENDED_H #include "ModelBase.h" #include "ParametersHubbardAncillaExtended.h" #include "CrsMatrix.h" #include "SpinSquaredHelper.h" #include "SpinSquared.h" #include "VerySparseMatrix.h" #include "ProgramGlobals.h" #include "Geometry/GeometryDca.h" #include #include "../HubbardAncilla/HelperHubbardAncilla.h" namespace Dmrg { template class HubbardAncillaExtended : public ModelBaseType { public: typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelBaseType::HilbertBasisType HilbertBasisType; typedef typename HilbertBasisType::value_type HilbertState; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef ParametersHubbardAncillaExtended ParametersHubbardAncillaType; typedef std::pair PairType; typedef typename PsimagLite::Vector::Type VectorPairType; typedef typename PsimagLite::Vector::Type VectorSparseMatrixType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef HelperHubbardAncilla HelperHubbardAncillaType; typedef typename HelperHubbardAncillaType::HilbertSpaceFeAsType HilbertSpaceFeAsType; static const int FERMION_SIGN = -1; static const int SPIN_UP=HilbertSpaceFeAsType::SPIN_UP; static const int SPIN_DOWN=HilbertSpaceFeAsType::SPIN_DOWN; static SizeType const ORBITALS = 2; HubbardAncillaExtended(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), helperHubbardAncilla_(geometry, modelParameters_) {} void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { helperHubbardAncilla_.write(label1, io, this->params().model); } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType t) const { helperHubbardAncilla_.addDiagonalsInNaturalBasis(hmatrix, block, t); } protected: void fillLabeledOperators(VectorQnType& qns) { SizeType site = 0; BlockType block(1, site); HilbertBasisType natBasis; HelperHubbardAncillaType::setBasis(natBasis, block); helperHubbardAncilla_.setSymmetryRelated(qns, natBasis); //! Set the operators c^\dagger_{i\gamma\sigma} in the natural basis SizeType dofs = 2*ORBITALS; OpsLabelType& c = this->createOpsLabel("c"); OpsLabelType& d = this->createOpsLabel("d"); OpsLabelType& splus = this->createOpsLabel("splus"); OpsLabelType& sminus = this->createOpsLabel("sminus"); OpsLabelType& sz = this->createOpsLabel("sz"); OpsLabelType& p = this->createOpsLabel("p"); OpsLabelType& nop = this->createOpsLabel("n"); this->makeTrackable("c"); this->makeTrackable("d"); this->makeTrackable("splus"); this->makeTrackable("sz"); this->makeTrackable("p"); this->makeTrackable("n"); const bool hot = helperHubbardAncilla_.isHot(); for (SizeType i=0;iORBITALS-1) { m=1; asign= -1; } typename OperatorType::Su2RelatedType su2related; if (sigma (0.5)*(dn1(i,i) - dn2(i,i)); OperatorType sz(SparseMatrixType(szmatrix), ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1, su2related); szop.push(sz); } void setPair(OpsLabelType& p, SizeType, SizeType orbital, const VectorSparseMatrixType& vm) const { typename OperatorType::Su2RelatedType su2related; SparseMatrixType pair; multiply(pair,vm[0+orbital],vm[2+orbital]); OperatorType myOp(pair, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1, su2related); p.push(myOp); } void setN(OpsLabelType& nopop, SizeType, SizeType orbital, const VectorSparseMatrixType& vm) const { typename OperatorType::Su2RelatedType su2related; SparseMatrixType cm1(vm[0+orbital]); SparseMatrixType cm2(vm[2+orbital]); SparseMatrixType n1 = HelperHubbardAncillaType::n(cm1); SparseMatrixType n2 = HelperHubbardAncillaType::n(cm2); MatrixType dn1; MatrixType dn2; crsMatrixToFullMatrix(dn1,n1); crsMatrixToFullMatrix(dn2,n2); SizeType n = dn1.rows(); MatrixType nmatrix(n,n); for (SizeType i = 0; i < n; ++i) { nmatrix(i,i) = 1.0*(dn1(i,i) + dn2(i,i)); } OperatorType nop(SparseMatrixType(nmatrix), ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1, su2related); nopop.push(nop); } ParametersHubbardAncillaType modelParameters_; HelperHubbardAncillaType helperHubbardAncilla_; }; //class HubbardAncilla } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/HubbardAncillaExtended/ParametersHubbardAncillaExtended.h000066400000000000000000000071231414604301300277700ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersHubbardAncillaExtended.h * * */ #ifndef ParametersHubbardAncillaExtended_H #define ParametersHubbardAncillaExtended_H #include "ParametersModelBase.h" #include "../FeAsModel/ParametersModelFeAs.h" namespace Dmrg { //! Hubbard Model Parameters template struct ParametersHubbardAncillaExtended : ParametersModelFeAs { typedef ParametersModelFeAs BaseType; template ParametersHubbardAncillaExtended(IoInputType& io) : BaseType(io) {} template SizeType memResolv(SomeMemResolvType&, SizeType, PsimagLite::String = "") const { return 0; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersHubbardAncillaExtended"; io.createGroup(label); BaseType::write(label, io); } }; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/HubbardHolstein/000077500000000000000000000000001414604301300200155ustar00rootroot00000000000000dmrgpp-6.02/src/Models/HubbardHolstein/HilbertSpaceHubbardHolstein.h000066400000000000000000000103261414604301300255330ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file HilbertSpaceHubbardHolstein.h * * This class represents the Hilbert space for the Hubbard Holstein Model * States are represented with binary numbers. N bits per site * (2 for the fermions, N-2 for the phonons) * Bits meaning: * 0....00 empty state * 0..1.00 a 1 at location x>2 means state with N-2 maxphonons and zero fermions * 1111111 all ones means 2 electrons * * Note: this is a static class * */ #ifndef HILBERTSPACE_HUBBARD_HOLSTEIN_HEADER_H #define HILBERTSPACE_HUBBARD_HOLSTEIN_HEADER_H #include "Utils.h" namespace Dmrg { //! A class to operate on n-ary numbers (base n) template class HilbertSpaceHubbardHolstein { public: typedef Word HilbertState; enum class SpinEnum {SPIN_UP, SPIN_DOWN}; // Get electronic state from combined electron and phonon ket a static Word getF(Word a) { return (a & 3); } // Get phononic state from combined electron and phonon ket a static Word getP(Word a) { return (a >> 2); } // Create electron with internal dof "sigma" in binary number "a" static void createF(Word& a, SizeType sigma) { Word mask = (1<> 1); } }; // class HilbertSpaceHubbardHolstein } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/HubbardHolstein/HubbardHolstein.h000066400000000000000000000707011414604301300232500ustar00rootroot00000000000000/* Copyright (c) 2009-2015-2020, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file HubbardHolstein.h * * An implementation of a Hubbard Holstein model to use with the DmrgSolver * */ #ifndef DMRG_HUBBARD_HOLSTEIN_H #define DMRG_HUBBARD_HOLSTEIN_H #include "ModelBase.h" #include "ParametersHubbardHolstein.h" #include "HilbertSpaceHubbardHolstein.h" #include "CrsMatrix.h" #include "SpinSquaredHelper.h" #include "SpinSquared.h" #include "VerySparseMatrix.h" #include "ProgramGlobals.h" #include "Geometry/GeometryDca.h" #include #include #include "PsimagLite.h" namespace Dmrg { template class HubbardHolstein : public ModelBaseType { public: typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseElementType SparseElementType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::HilbertBasisType HilbertBasisType; typedef typename HilbertBasisType::value_type HilbertState; typedef unsigned int long WordType; typedef HilbertSpaceHubbardHolstein HilbertSpaceHubbardHolsteinWordType; typedef HilbertSpaceHubbardHolstein HilbertSpaceHubbardHolsteinType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef ParametersHubbardHolstein ParametersHubbardHolsteinType; typedef std::pair PairType; typedef typename PsimagLite::Vector::Type VectorPairType; typedef typename PsimagLite::Vector::Type VectorSparseMatrixType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; static const int FERMION_SIGN = -1; static SizeType const ORBITALS = 2; HubbardHolstein(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry, PsimagLite::String additional, PsimagLite::String hdf5fileIfAny) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), isSsh_(additional == "SSH"), isLrh_(additional == "LRH"), oStruncActive_(false), wantsOneSiteTruncation_(0) { if (isSsh_) { PsimagLite::String warning("HubbardHolstein: "); warning += "SSH term in use.\n"; std::cout< 0) ? modelParameters_.oStruncPhonons : modelParameters_.numberphonons; if (phonons == 0) err("addDiagonalsInNaturalBasis fatal error when OSTRUNC active\n"); SizeType n=block.size(); HilbertBasisType natBasis; setBasis(natBasis, block, phonons); VectorSparseMatrixType cm; findAllMatrices(cm, natBasis, phonons); for (SizeType i = 0; i < n; ++i) { addInteractionFU(hmatrix, cm, block[i]); addInteractionFPhonon(hmatrix, cm, block[i], phonons); addPotentialFV(hmatrix, cm, block[i]); addPotentialPhononV(hmatrix, cm, block[i], phonons); } } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); if (U_.rows() > 0) { U_.write("OneSiteTruncationU", io); io.write("OsTruncPhonons", modelParameters_.oStruncPhonons); } } protected: void fillLabeledOperators(VectorQnType& qns) { SizeType site = 0; BlockType block(1, site); OpsLabelType& c = this->createOpsLabel("c"); OpsLabelType& a = this->createOpsLabel("a"); OpsLabelType& cx = this->createOpsLabel("cx"); this->makeTrackable("c"); const SizeType phonons = (U_.rows() > 0) ? modelParameters_.oStruncPhonons : modelParameters_.numberphonons; if (phonons > 0) { this->makeTrackable("a"); if (isSsh_) this->makeTrackable("cx"); } HilbertBasisType natBasis; setBasis(natBasis, block, phonons); setSymmetryRelated(qns, natBasis); //! Set the operators c^\daggger_{i\gamma\sigma} in the natural basis SparseMatrixType nmatrix; SparseMatrixType tmpMatrix; for (SizeType sigma = 0; sigma < 2; ++sigma) { tmpMatrix = findOperatorMatrices(sigma, natBasis); if (sigma == 0) nmatrix = n(tmpMatrix); else nmatrix += n(tmpMatrix); int asign = 1; if (sigma > 0) asign = 1; typename OperatorType::Su2RelatedType su2related; if (sigma == 0) { su2related.source.push_back(site); su2related.source.push_back(site + 1); su2related.transpose.push_back(-1); su2related.transpose.push_back(-1); su2related.offset = 1; } transformByU(tmpMatrix); OperatorType myOp(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::FERMION, typename OperatorType::PairType(1,1-sigma), asign, su2related); c.push(myOp); } OpsLabelType& n = this->createOpsLabel("n"); typename OperatorType::Su2RelatedType su2relatedA; transformByU(nmatrix); OperatorType myOp(nmatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1, su2relatedA); n.push(myOp); SizeType iup = 0; SizeType idown = 1; { OpsLabelType& splus = this->createOpsLabel("splus"); OpsLabelType& sminus = this->createOpsLabel("sminus"); SparseMatrixType t1MatrixUp = findOperatorMatrices(iup, natBasis); SparseMatrixType t1MatrixDown = findOperatorMatrices(idown, natBasis); SparseMatrixType tmp1; multiply(tmp1, t1MatrixUp, t1MatrixDown); typename OperatorType::Su2RelatedType su2Related; splus.push(OperatorType(tmp1, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); SparseMatrixType tmp2; transposeConjugate(tmp2, tmp1); sminus.push(OperatorType(tmp2, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } { OpsLabelType& sz = this->createOpsLabel("sz"); SparseMatrixType t1MatrixUp = findOperatorMatrices(iup, natBasis); SparseMatrixType t1MatrixDown = findOperatorMatrices(idown, natBasis); PsimagLite::Matrix t1 = multiplyTc(t1MatrixUp,t1MatrixUp); PsimagLite::Matrix t2 = multiplyTc(t1MatrixDown,t1MatrixDown); t1 = 0.5*(t1 - t2); SparseMatrixType szmatrix(t1); typename OperatorType::Su2RelatedType su2Related; sz.push(OperatorType(szmatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } { OpsLabelType& doubleOcc = this->createOpsLabel("doubleM"); SparseMatrixType t1MatrixUp = findOperatorMatrices(iup, natBasis); SparseMatrixType t1MatrixDown = findOperatorMatrices(idown, natBasis); PsimagLite::Matrix t1 = multiplyTc(t1MatrixUp,t1MatrixUp); PsimagLite::Matrix t2 = multiplyTc(t1MatrixDown,t1MatrixDown); SparseMatrixType nMatrixUp(t1); t1 = t1+t2; SparseMatrixType nMatrixDown(t2); PsimagLite::Matrix t3 = multiplyTc(nMatrixDown,nMatrixUp); t1 = t1+(-2.0)*t3; SparseMatrixType tmp4(t1); typename OperatorType::Su2RelatedType su2Related; doubleOcc.push(OperatorType(tmp4, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } if (phonons == 0) return; //<<--- EARLY EXIT tmpMatrix = findPhononadaggerMatrix(natBasis, phonons); typename OperatorType::Su2RelatedType su2related2; su2related2.source.push_back(site*2); su2related2.source.push_back(site*2+1); su2related2.source.push_back(site*2); su2related2.transpose.push_back(-1); su2related2.transpose.push_back(-1); su2related2.transpose.push_back(1); su2related2.offset = 1; transformByU(tmpMatrix); OperatorType myOp2(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 2), -1, su2related2); a.push(myOp2); { OpsLabelType& disp = this->createOpsLabel("disp"); SparseMatrixType tmp1 = findPhononadaggerMatrix(natBasis, phonons); SparseMatrixType tmp2; transposeConjugate(tmp2, tmp1); tmp2 += tmp1; typename OperatorType::Su2RelatedType su2Related2; disp.push(OperatorType(tmp2, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related2)); } if (!isSsh_ && !isLrh_) return; //<<--- EARLY EXIT if (isSsh_) { // Set the operators c_(i,sigma} * x_i in the natural basis for (SizeType sigma = 0; sigma < 2; ++sigma) { tmpMatrix = findSSHMatrices(sigma, natBasis, phonons); int asign = 1; if (sigma > 0) asign = 1; typename OperatorType::Su2RelatedType su2related3; if (sigma == 0) { su2related3.source.push_back(site); su2related3.source.push_back(site + 1); su2related3.transpose.push_back(-1); su2related3.transpose.push_back(-1); su2related3.offset = 1; } transformByU(tmpMatrix); OperatorType myOp3(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::FERMION, typename OperatorType::PairType(1,1-sigma), asign, su2related3); cx.push(myOp3); } } else if (isLrh_) { this->makeTrackable("disp"); } } void fillModelLinks() { ModelTermType& hopf = ModelBaseType::createTerm("HoppingFermionic"); OpForLinkType cup("c", 0); hopf.push(cup, 'C', cup, 'N'); OpForLinkType cdown("c", 1); hopf.push(cdown, 'C', cdown, 'N'); const SizeType phonons = modelParameters_.numberphonons; if (phonons > 0) { ModelTermType& hopb = ModelBaseType::createTerm("HoppingBosonic"); OpForLinkType a("a"); hopb.push(a, 'C', a, 'N'); } if (isSsh_) { ModelTermType& hopSsh = ModelBaseType::createTerm("HoppingSSH"); OpForLinkType cx0("cx", 0); OpForLinkType cx1("cx", 1); auto modifier = [](ComplexOrRealType& value) { value *= (-1.0);}; hopSsh.push(cup, 'C', cx0, 'N'); hopSsh.push(cx0, 'C', cup, 'N', modifier); hopSsh.push(cdown, 'C', cx1, 'N'); hopSsh.push(cx1, 'C', cdown, 'N', modifier); } else if (isLrh_) { ModelTermType& hopLrh = ModelBaseType::createTerm("LongRangeH"); OpForLinkType x("disp"); OpForLinkType n("n"); hopLrh.push(x, 'N', n, 'N'); } else { return; } } void announce(PsimagLite::String str) const { const PsimagLite::String msg("finite loop"); const SizeType l = msg.length(); if (str.substr(0, l) != msg) return; PsimagLite::Vector::Type tokens; PsimagLite::split(tokens, str, ";"); if (tokens.size() != 2) err("Model::announce()\n"); wantsOneSiteTruncation_ = PsimagLite::atoi(tokens[1]); } void oneSiteTruncationUpdate(OutputFileOrNot& ioOut, const MatrixType& U, SizeType start) { bool firstCall = (U_.rows() == 0); notReallySortU(U, start); ModelBaseType::oneSiteTruncationUpdate(ioOut, U, start); static const bool verbose = true; if (verbose) { std::cout<<"U UPDATED\n"; std::cout< 0) asign = 1; typename OperatorType::Su2RelatedType su2related; if (sigma==0) { su2related.source.push_back(ind); su2related.source.push_back(ind + 1); su2related.transpose.push_back(-1); su2related.transpose.push_back(-1); su2related.offset = 1; } OperatorType myOp(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::FERMION, typename OperatorType::PairType(1,1-sigma), asign, su2related); ops.push_back(myOp); } // operator n should NOT be pushed because it isn't tracked if (modelParameters_.oStruncPhonons == 0) return oneSiteTruncSize; SparseMatrixType tmpMatrix = findPhononadaggerMatrix(natBasis, modelParameters_.oStruncPhonons); typename OperatorType::Su2RelatedType su2related2; su2related2.source.push_back(ind*2); su2related2.source.push_back(ind*2 + 1); su2related2.source.push_back(ind*2); su2related2.transpose.push_back(-1); su2related2.transpose.push_back(-1); su2related2.transpose.push_back(1); su2related2.offset = 1; OperatorType myOp2(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 2), -1, su2related2); ops.push_back(myOp2); if (!isSsh_ && !isLrh_) return oneSiteTruncSize; //<<--- EARLY EXIT // Set the operators c_(i,sigma} * x_i in the natural basis for (SizeType sigma = 0; sigma < 2; ++sigma) { tmpMatrix = findSSHMatrices(sigma, natBasis, modelParameters_.oStruncPhonons); int asign = 1; if (sigma > 0) asign = 1; typename OperatorType::Su2RelatedType su2related3; if (sigma == 0) { su2related3.source.push_back(ind); su2related3.source.push_back(ind + 1); su2related3.transpose.push_back(-1); su2related3.transpose.push_back(-1); su2related3.offset = 1; } transformByU(tmpMatrix); OperatorType myOp3(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::FERMION, typename OperatorType::PairType(1,1-sigma), asign, su2related3); ops.push_back(myOp3); } return oneSiteTruncSize; } private: //! find all states in the natural basis for a block of n sites //! N.B.: HAS BEEN CHANGED TO ACCOMODATE FOR MULTIPLE BANDS static void setBasis(HilbertBasisType& basis, const VectorSizeType& block, SizeType phonons) { SizeType n = block.size(); HilbertState total = 4*(phonons + 1); total = pow(total,n); basis.resize(total); SizeType counter = 0; SizeType npPlusOne = phonons + 1; for (SizeType i = 0; i < 4; ++i) { for (SizeType b = 0; b < npPlusOne; ++b) { basis[counter++] = b*4 + i; } } assert(counter == total); SizeType sum = std::accumulate(basis.begin(), basis.end(), static_cast(0)); if (sum != total*(total-1)/2) err("Could not set up basis\n"); } //! Find a^+ in the natural basis natBasis SparseMatrixType findPhononadaggerMatrix(const HilbertBasisType& natBasis, SizeType phonons) const { const SizeType total = natBasis.size(); MatrixType cm(total, total); for (SizeType ii = 0;ii < total; ++ii) { typename HilbertSpaceHubbardHolsteinType::HilbertState ket = natBasis[ii]; SizeType nphon = SizeType(HilbertSpaceHubbardHolsteinType::getP(ket)); assert(nphon <= phonons); if (nphon == phonons) continue; typename HilbertSpaceHubbardHolsteinType::HilbertState bra = ket; HilbertSpaceHubbardHolsteinType::createP(bra); const int jj = PsimagLite::indexOrMinusOne(natBasis, bra); if (jj < 0) err("findOperatorMatrices\n"); const RealType x = HilbertSpaceHubbardHolsteinType::getP(bra); assert(x >= 0); cm(ii, jj) = sqrt(x); } SparseMatrixType operatorMatrix(cm); SparseMatrixType temp; fullMatrixToCrsMatrix(temp,cm); transposeConjugate(operatorMatrix,temp); return operatorMatrix; } //! Calculate fermionic sign when applying operator c^\dagger_{i\sigma} to basis state ket RealType sign(typename HilbertSpaceHubbardHolsteinType::HilbertState ket) const { const SizeType ndown = HilbertSpaceHubbardHolsteinType::electronsWithGivenSpin (ket, HilbertSpaceHubbardHolsteinType::SpinEnum::SPIN_DOWN); return (ndown%2 == 0) ? 1 : FERMION_SIGN; } //! Find c^\dagger_isigma in the natural basis natBasis SparseMatrixType findOperatorMatrices(SizeType sigma, const HilbertBasisType& natBasis) const { const SizeType n = natBasis.size(); PsimagLite::Matrix cm(n, n); for (SizeType ii = 0; ii < n; ++ii) { typename HilbertSpaceHubbardHolsteinType::HilbertState ket = natBasis[ii]; const typename HilbertSpaceHubbardHolsteinType::SpinEnum spin = (sigma == 0) ? HilbertSpaceHubbardHolsteinType::SpinEnum::SPIN_UP : HilbertSpaceHubbardHolsteinType::SpinEnum::SPIN_DOWN; SizeType neSpin = HilbertSpaceHubbardHolsteinType::electronsWithGivenSpin(ket, spin); if (neSpin == 0) { typename HilbertSpaceHubbardHolsteinType::HilbertState bra = ket; HilbertSpaceHubbardHolsteinType::createF(bra, sigma); const int jj = PsimagLite::indexOrMinusOne(natBasis,bra); if (jj < 0) err("findOperatorMatrices\n"); cm(ii, jj) = sign(ket); } } SparseMatrixType creationMatrix(cm); SparseMatrixType temp; fullMatrixToCrsMatrix(temp,cm); transposeConjugate(creationMatrix,temp); return creationMatrix; } SparseMatrixType findSSHMatrices(SizeType sigma, const HilbertBasisType& natBasis, SizeType phonons) const { SparseMatrixType csigma_temp = findOperatorMatrices(sigma, natBasis); SparseMatrixType a_temp = findPhononadaggerMatrix(natBasis, phonons); SparseMatrixType x_temp = displacementOp(a_temp); SparseMatrixType csigma_a; multiply(csigma_a,csigma_temp,x_temp); return csigma_a; } void findAllMatrices(VectorSparseMatrixType& vm, const HilbertBasisType& natBasis, SizeType phonons) const { for (SizeType sigma = 0; sigma < 2; ++sigma) { SparseMatrixType m = findOperatorMatrices(sigma, natBasis); transformByU(m); vm.push_back(m); } if (phonons == 0) return; SparseMatrixType m = findPhononadaggerMatrix(natBasis, phonons); transformByU(m); vm.push_back(m); } void setSymmetryRelated(VectorQnType& qns, const HilbertBasisType& basis) const { // find j,m and flavors (do it by hand since we assume n==1) // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType typedef std::pair PairType; VectorSizeType other(2, 0); qns.resize(basis.size(), QnType::zero()); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair = PairType(0,0); // nup SizeType electronsUp = HilbertSpaceHubbardHolsteinType::electronsWithGivenSpin (basis[i], HilbertSpaceHubbardHolsteinType::SpinEnum::SPIN_UP); // ndown SizeType electronsDown = HilbertSpaceHubbardHolsteinType::electronsWithGivenSpin (basis[i], HilbertSpaceHubbardHolsteinType::SpinEnum::SPIN_DOWN); SizeType electrons = electronsUp + electronsDown; other[0] = electrons; other[1] = electronsUp; bool sign = electrons & 1; qns[i] = QnType(sign, other, jmpair, electrons); } } void addPotentialFV(SparseMatrixType &hmatrix, const VectorSparseMatrixType& cm, SizeType actualIndexOfSite) const { SparseMatrixType nup = n(cm[0]); // spin up SparseMatrixType ndown = n(cm[1]); // spin down SizeType linSize = ModelBaseType::superGeometry().numberOfSites(); SizeType iUp = actualIndexOfSite; assert(iUp < modelParameters_.potentialFV.size()); hmatrix += modelParameters_.potentialFV[iUp] * nup; SizeType iDown = actualIndexOfSite + linSize; assert(iDown < modelParameters_.potentialFV.size()); hmatrix += modelParameters_.potentialFV[iDown] * ndown; } void addPotentialPhononV(SparseMatrixType &hmatrix, const VectorSparseMatrixType& cm, SizeType actualIndexOfSite, SizeType phonons) const { if (phonons == 0) return; assert(2 < cm.size()); SparseMatrixType nphon = n(cm[2]); SizeType iUp = actualIndexOfSite; assert(iUp < modelParameters_.potentialPV.size()); hmatrix += modelParameters_.potentialPV[iUp] * nphon; } SparseMatrixType n(const SparseMatrixType& c) const { SparseMatrixType tmpMatrix; SparseMatrixType cdagger; transposeConjugate(cdagger,c); multiply(tmpMatrix, c, cdagger); return tmpMatrix; } SparseMatrixType displacementOp(const SparseMatrixType& c) const { SparseMatrixType tmpMatrix = c; SparseMatrixType cdagger; transposeConjugate(cdagger,c); tmpMatrix+=cdagger; return tmpMatrix; } //! Term is U \sum_{\alpha}n_{i\alpha UP} n_{i\alpha DOWN} void addInteractionFU(SparseMatrixType &hmatrix, const VectorSparseMatrixType& cm, SizeType actualSite) const { SparseMatrixType tmpMatrix; SparseMatrixType m1=cm[0]; // spin up SparseMatrixType m2=cm[1]; // spin down multiply(tmpMatrix,n(m1),n(m2)); assert(actualSite < modelParameters_.hubbardFU.size()); hmatrix += modelParameters_.hubbardFU[actualSite]*tmpMatrix; } //! Term is lambda\sum_{\alpha} (n_{i\alpha} -1) x_{i} void addInteractionFPhonon(SparseMatrixType &hmatrix, const VectorSparseMatrixType& cm, SizeType actualSite, SizeType phonons) const { if (phonons == 0) return; SparseMatrixType tmpMatrix; SparseMatrixType m = n(cm[0]); // spin up SparseMatrixType m2 = n(cm[1]); // spin down m += m2; assert(2 < cm.size()); SparseMatrixType x = displacementOp(cm[2]); multiply(tmpMatrix,m,x); tmpMatrix.checkValidity(); assert(actualSite < modelParameters_.lambdaFP.size()); hmatrix += modelParameters_.lambdaFP[actualSite]*tmpMatrix; } void transformByU(SparseMatrixType& m) const { if (U_.rows() == 0) return; if (U_.rows() != m.rows()) err("HubbardHolstein::transformByU(): wrong sizes\n"); MatrixType mdense; crsMatrixToFullMatrix(mdense, m); rotate(mdense, U_); fullMatrixToCrsMatrix(m, mdense); } void notReallySortU(const MatrixType& U, SizeType start) { const SizeType site = 0; BlockType block(1, site); HilbertBasisType natBasis; const SizeType phonons = modelParameters_.oStruncPhonons; setBasis(natBasis, block, phonons); VectorQnType qns; setSymmetryRelated(qns, natBasis); BasisType::notReallySortU(U_, U, qns, start); } void restartHook(PsimagLite::String restartFilename) { if (restartFilename == "") return; PsimagLite::IoSelector::In io(restartFilename); try { io.read(U_, "OneSiteTruncationU"); std::cout<<"OneSiteTruncationU = "< 0) { io.read(modelParameters_.oStruncPhonons, "OsTruncPhonons"); std::cout<<"OsTruncPhonons set to "< #include #include "Matrix.h" #include "ParametersModelBase.h" namespace Dmrg { //! FeAs Model Parameters template struct ParametersHubbardHolstein : public ParametersModelBase { // no connections here please!! // connections are handled by the geometry typedef typename PsimagLite::Real::Type RealType; typedef ParametersModelBase BaseType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename PsimagLite::Vector >::Type VectorType; template ParametersHubbardHolstein(IoInputType& io) : BaseType(io, false), oStruncPhonons(0), oStruncSite(0) { SizeType nsites = 0; io.readline(nsites, "TotalNumberOfSites="); PsimagLite::String model; io.readline(model, "Model="); hubbardFU.resize(nsites, 0.0); potentialFV.resize(2*nsites, 0.0); potentialPV.resize(nsites, 0.0); io.readline(numberphonons,"NumberPhonons="); io.read(hubbardFU,"hubbardFU"); io.read(potentialFV,"potentialFV"); io.read(potentialPV,"potentialPV"); lambdaFP.resize(nsites, 0.0); bool hasLambdaFP = false; try { io.read(lambdaFP,"lambdaFP"); hasLambdaFP = true; } catch (...) { lambdaFP.clear(); } try { io.readline(oStruncPhonons, "OneSiteTruncationPhononsMax="); io.readline(oStruncSite, "OneSiteTruncationSite="); } catch (...) {} if (oStruncPhonons > 0 && oStruncSite == 0) err("OneSiteTruncationSite cannot be zero\n"); if (model == "HubbardHolstein" || model == "HubbardHolsteinSSH") { if (!hasLambdaFP) err("HubbardHolstein: must have lambdaFP vector in input file\n"); } else { if (hasLambdaFP) err("HolsteinThin: lambdaFP should be given as a connection\n"); } } template SizeType memResolv(SomeMemResolvType&, SizeType, PsimagLite::String = "") const { return 0; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersHubbardHolstein"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/numberphonons", numberphonons); io.write(label + "/hubbardFU", hubbardFU); io.write(label + "/lambdaFP", lambdaFP); io.write(label + "/potentialFV", potentialFV); io.write(label + "/potentialPV", potentialPV); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersHubbardHolstein& parameters) { os<<"NumberPhonons="< class ModelHubbardMultiBand : public ModelBaseType { public: typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::HilbertBasisType HilbertBasisType; typedef typename HilbertBasisType::value_type HilbertState; typedef HilbertSpaceFeAs HilbertSpaceFeAsType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef ParametersHubbardMultiBand ParamsModelType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; static const int FERMION_SIGN = -1; static const int SPIN_UP=HilbertSpaceFeAsType::SPIN_UP; static const int SPIN_DOWN=HilbertSpaceFeAsType::SPIN_DOWN; ModelHubbardMultiBand(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), superGeometry_(geometry), spinSquared_(spinSquaredHelper_, modelParameters_.orbitals, 2*modelParameters_.orbitals) { ProgramGlobals::init(modelParameters_.orbitals*superGeometry_.numberOfSites() + 1); SizeType v1 = 2*modelParameters_.orbitals*geometry.numberOfSites(); SizeType v2 = v1*modelParameters_.orbitals; if (modelParameters_.potentialV.size() != v1 && modelParameters_.potentialV.size() != v2) { PsimagLite::String str(__FILE__); str += " " + ttos(__LINE__) + "\n"; str += "potentialV length must be 2*orbitals times the number of sites or"; str += " 2*orbitals*orbitals times the number of sites\n"; throw PsimagLite::RuntimeError(str.c_str()); } HilbertSpaceFeAsType::setOrbitals(modelParameters_.orbitals); VectorSizeType block(1,0); int sitesTimesDof=2*modelParameters_.orbitals; HilbertState total = (1<params().model; io.createGroup(label); modelParameters_.write(label, io); spinSquaredHelper_.write(label, io); spinSquared_.write(label, io); io.write(label + "/basis_", basis_); io.write(label + "/qq_", qq_); io.write(label + "/creationMatrix_", creationMatrix_); qx_.write(label + "/qx_", io); } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType) const { SizeType n = block.size(); for (SizeType i = 0; i < n; ++i) { SizeType site = block[i]; addHoppingOnSite(hmatrix, i, block[i]); assert(site < modelParameters_.hubbardU.size()); hmatrix += modelParameters_.hubbardU[site]*qx_; addPotentialV(hmatrix, i, block[i], modelParameters_.potentialV); } } protected: void fillLabeledOperators(VectorQnType& qns) { qns = qq_; assert(creationMatrix_.size()>0); SizeType nrow = creationMatrix_[0].getCRS().rows(); OpsLabelType& splus = this->createOpsLabel("splus"); OpsLabelType& sminus = this->createOpsLabel("sminus"); OpsLabelType& sz = this->createOpsLabel("sz"); OpsLabelType& d = this->createOpsLabel("d"); for (SizeType orbital = 0; orbital < modelParameters_.orbitals; ++orbital) { { MatrixType tmp(nrow,nrow); tmp += multiplyTc(creationMatrix_[orbital].getCRS(), creationMatrix_[orbital + modelParameters_.orbitals].getCRS()); SparseMatrixType tmp2(tmp); typename OperatorType::Su2RelatedType su2Related; splus.push(OperatorType(tmp2, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); SparseMatrixType tmp3; transposeConjugate(tmp3, tmp2); sminus.push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } { // S^z MatrixType tmp(nrow,nrow); MatrixType tmp2(nrow,nrow); tmp += multiplyTc(creationMatrix_[orbital].getCRS(), creationMatrix_[orbital].getCRS()); tmp2 += multiplyTc(creationMatrix_[orbital + modelParameters_.orbitals].getCRS(), creationMatrix_[orbital + modelParameters_.orbitals].getCRS()); tmp = 0.5*(tmp-tmp2); SparseMatrixType tmp3(tmp); typename OperatorType::Su2RelatedType su2Related; sz.push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } { // delta = c^\dagger * c^dagger SparseMatrixType atmp; multiply(atmp, creationMatrix_[orbital + modelParameters_.orbitals].getCRS(), creationMatrix_[orbital].getCRS()); typename OperatorType::Su2RelatedType su2Related; d.push(OperatorType(atmp, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } } OpsLabelType& nop = this->createOpsLabel("n"); OpsLabelType& c = this->createOpsLabel("c"); this->makeTrackable("c"); SizeType dofs = 2*modelParameters_.orbitals; for (SizeType dof = 0; dof < dofs; ++dof) { { MatrixType tmp = multiplyTc(creationMatrix_[dof].getCRS(),creationMatrix_[dof].getCRS()); SparseMatrixType tmp2(tmp); typename OperatorType::Su2RelatedType su2Related; nop.push(OperatorType(tmp2, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } { c.push(creationMatrix_[dof]); } } } void fillModelLinks() { //! There are orbitals*orbitals different orbitals //! and 2 spins. Spin is diagonal so we end up with 2*orbitals*orbitals possiblities //! a up a up, a up b up, b up a up, b up, b up, etc //! and similarly for spin down. const SizeType orbitals = modelParameters_.orbitals; ModelTermType& hop = ModelBaseType::createTerm("hopping"); for (SizeType spin = 0; spin < 2; ++spin) { typename ModelTermType::Su2Properties su2properties(1, (spin == 1) ? -1 : 1, spin); for (SizeType orb1 = 0; orb1 < orbitals; ++orb1) { OpForLinkType c1("c", orb1 + spin*orbitals, orb1); for (SizeType orb2 = 0; orb2 < orbitals; ++orb2) { OpForLinkType c2("c", orb2 + spin*orbitals, orb2); hop.push(c1, 'N', c2, 'C', su2properties); } } } } private: void setOperatorMatricesInternal(VectorOperatorType& creationMatrix, const BlockType& block) const { HilbertBasisType natBasis = basis_; SparseMatrixType tmpMatrix; //! Set the operators c^\daggger_{i\gamma\sigma} in the natural basis creationMatrix.clear(); SizeType dofs = 2*modelParameters_.orbitals; for (SizeType i=0;imodelParameters_.orbitals-1) { m=1; asign= -1; } typename OperatorType::Su2RelatedType su2related; if (sigma 0) value += HilbertSpaceFeAsType::electrons(ket); //order for sign is: a up, b up, a down, b down, etc unsigned int x = HilbertSpaceFeAsType::get(ket,i); int spin = sigma/modelParameters_.orbitals; SizeType orb = sigma % modelParameters_.orbitals; for (SizeType j=0;j PairType; qns.resize(basis.size(), QnType::zero()); SizeType mode = ModelBaseType::targetQuantum().sizeOfOther(); assert(mode == 2 || mode == 3); // either Sz or Sz and k-symmetry VectorSizeType other(mode, 0); QnType::modalStruct.resize(mode); if (mode == 3) { QnType::modalStruct[2].modalEnum = QnType::MODAL_MODULO; QnType::modalStruct[2].extra = modelParameters_.orbitals; } for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair(0,0); // nup SizeType electronsUp = HilbertSpaceFeAsType::electronsWithGivenSpin(basis[i], SPIN_UP); // ndown SizeType electronsDown = HilbertSpaceFeAsType::electronsWithGivenSpin(basis[i], SPIN_DOWN); SizeType electrons = electronsDown + electronsUp; other[0] = electrons; other[1] = electronsUp; if (mode == 2) other[2] = findMvalue(basis[i]); bool sign = electrons & 1; qns[i] = QnType(sign, other, jmpair, 0); } } SizeType findMvalue(SizeType ket) const { SizeType dofs = 2*modelParameters_.orbitals; SizeType sum = 0; for (SizeType sigma = 0; sigma < dofs; ++sigma) { if (!HilbertSpaceFeAsType::isNonZero(ket, 0, sigma)) continue; SizeType orbital = sigma % modelParameters_.orbitals; sum += orbital; } return sum % modelParameters_.orbitals; } // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType // does not work for 6 or 9 template PairType calcJmvalue(const HilbertState& ket) const { SizeType site0=0; SizeType site1=0; spinSquared_.doOnePairOfSitesA(ket,site0,site1); spinSquared_.doOnePairOfSitesB(ket,site0,site1); spinSquared_.doDiagonal(ket,site0,site1); RealType sz = spinSquared_.spinZ(ket,site0); PairType jm= spinSquaredHelper_.getJmPair(sz); return jm; } void addHoppingOnSite(SparseMatrixType& hmatrix, SizeType i, SizeType actualSite) const { const RealType zero = 0.0; SizeType orbitals = modelParameters_.orbitals; SizeType dof = 2*orbitals; SparseMatrixType tmpMatrix; SparseMatrixType tmp; const VectorOperatorType& cm = creationMatrix_; for (SizeType orb1 = 0; orb1 < orbitals; ++orb1) { const SparseMatrixType& m1up = cm[orb1 + SPIN_UP*orbitals + i*dof].getCRS(); const SparseMatrixType& m1down = cm[orb1 + SPIN_DOWN*orbitals + i*dof].getCRS(); for (SizeType orb2 = 0; orb2 < orbitals; ++orb2) { ComplexOrRealType val = getOnSiteHopping(actualSite, orb1, orb2); if (val == zero) continue; const SparseMatrixType& m2up = cm[orb2 + SPIN_UP*orbitals + i*dof].getCRS(); SparseMatrixType m2t; transposeConjugate(m2t, m2up); multiply(tmpMatrix, m1up, m2t); tmp += val*tmpMatrix; const SparseMatrixType& m2down = cm[orb2 + SPIN_DOWN*orbitals + i*dof].getCRS(); transposeConjugate(m2t, m2down); multiply(tmpMatrix, m1down, m2t); tmp += val*tmpMatrix; } } hmatrix += tmp; } ComplexOrRealType getOnSiteHopping(SizeType actualSite, SizeType orb1, SizeType orb2) const { const typename PsimagLite::Vector >::Type& v = modelParameters_.hopOnSite; if (v.size() == 0) err("getOnSiteHopping"); if (v.size() > 1 && actualSite >= v.size()) err("getOnSiteHopping too small\n"); const SizeType ind = (v.size() == 1) ? 0 : actualSite; return v[ind](orb1, orb2); } void addPotentialV(SparseMatrixType& hmatrix, SizeType i, SizeType actualIndexOfSite, const typename PsimagLite::Vector::Type& V) const { SizeType v1 = 2*modelParameters_.orbitals*superGeometry_.numberOfSites(); SizeType v2 = v1*modelParameters_.orbitals; if (V.size() != v1 && V.size() != v2) { PsimagLite::String str(__FILE__); str += " " + ttos(__LINE__) + "\n"; str += "potentialV[T] length must be 2*orbitals times the number of sites or"; str += " 2*orbitals*orbitals times the number of sites\n"; throw PsimagLite::RuntimeError(str.c_str()); } if (V.size() == v1) { for (SizeType orb=0;orb::Type& V) const { int dof = 2*modelParameters_.orbitals; const VectorOperatorType& cm = creationMatrix_; SparseMatrixType nup = n(cm[orbital+SPIN_UP*modelParameters_.orbitals+i*dof].getCRS()); SparseMatrixType ndown = n(cm[orbital+SPIN_DOWN*modelParameters_.orbitals+i*dof].getCRS()); SizeType linSize = superGeometry_.numberOfSites(); SizeType iUp = actualIndexOfSite + (orbital + 0*modelParameters_.orbitals)*linSize; hmatrix += V[iUp] * nup; SizeType iDown = actualIndexOfSite + (orbital + 1*modelParameters_.orbitals)*linSize; hmatrix += V[iDown] * ndown; } void addPotentialV(SparseMatrixType &hmatrix, SizeType i, SizeType actualIndexOfSite, SizeType orb, SizeType orb2, const typename PsimagLite::Vector::Type& V) const { int dof=2*modelParameters_.orbitals; const VectorOperatorType& cm = creationMatrix_; SizeType orbitalsSquared = modelParameters_.orbitals*modelParameters_.orbitals; SparseMatrixType nup = nEx(cm[orb+SPIN_UP*modelParameters_.orbitals+i*dof].getCRS(), cm[orb2+SPIN_UP*modelParameters_.orbitals+i*dof].getCRS()); SparseMatrixType ndown = nEx(cm[orb+SPIN_DOWN*modelParameters_.orbitals+i*dof].getCRS(), cm[orb2+SPIN_DOWN*modelParameters_.orbitals+i*dof].getCRS()); SizeType linSize = superGeometry_.numberOfSites(); SizeType iUp = actualIndexOfSite + (orb + orb2*modelParameters_.orbitals + 0*orbitalsSquared)*linSize; hmatrix += V[iUp] * nup; SizeType iDown = actualIndexOfSite + (orb + orb2*modelParameters_.orbitals + 1*orbitalsSquared)*linSize; hmatrix += V[iDown] * ndown; } SparseMatrixType n(const SparseMatrixType& c) const { SparseMatrixType tmpMatrix; SparseMatrixType cdagger; transposeConjugate(cdagger,c); multiply(tmpMatrix,c,cdagger); return tmpMatrix; } SparseMatrixType nEx(const SparseMatrixType& c1, const SparseMatrixType& c2) const { SparseMatrixType tmpMatrix; SparseMatrixType cdagger; transposeConjugate(cdagger,c2); multiply(tmpMatrix,c1,cdagger); return tmpMatrix; } void cacheInteractionOp() { VectorSizeType block(1, 0); VectorOperatorType cm; setOperatorMatricesInternal(cm, block); MatrixType m0m1; MatrixType m2m3; MatrixType m2m3t; MatrixType term; MatrixType qxDense; const RealType zeroPointFive = 0.5; SizeType orbitals = modelParameters_.orbitals; for (SizeType k0 = 0; k0 < orbitals; ++k0) { const MatrixType& m0 = cm[k0 + SPIN_DOWN*orbitals].getCRS().toDense(); for (SizeType k1 = 0; k1 < orbitals; ++k1) { const MatrixType& m1 = cm[k1 + SPIN_UP*orbitals].getCRS().toDense(); m0m1 = m0*m1; for (SizeType k2 = 0; k2 < orbitals; ++k2) { const MatrixType& m2 = cm[k2 + SPIN_UP*orbitals].getCRS().toDense(); SizeType k3 = (k0 + k1 + k2) % orbitals; const MatrixType& m3 = cm[k3 + SPIN_DOWN*orbitals].getCRS().toDense(); m2m3 = m3*m2; transposeConjugate(m2m3t, m2m3); term = m2m3t * m0m1; qxDense += zeroPointFive*term; } } } fullMatrixToCrsMatrix(qx_, qxDense); } ParamsModelType modelParameters_; const SuperGeometryType& superGeometry_; SpinSquaredHelper spinSquaredHelper_; SpinSquared > spinSquared_; HilbertBasisType basis_; VectorQnType qq_; VectorOperatorType creationMatrix_; SparseMatrixType qx_; }; //class ModelHubbardMultiBand } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/HubbardMultiBand/ParametersHubbardMultiBand.h000066400000000000000000000121671414604301300254620ustar00rootroot00000000000000/* Copyright (c) 2009-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersHubbardMultiBand.h * * Contains the parameters for the HubbardMultiBand model * */ #ifndef PARAMS_HUBBARD_MULTI_BAND_H #define PARAMS_HUBBARD_MULTI_BAND_H #include #include #include "Matrix.h" #include "ParametersModelBase.h" namespace Dmrg { //! FeAs Model Parameters template struct ParametersHubbardMultiBand : public ParametersModelBase { // no connections here please!! // connections are handled by the geometry typedef ParametersModelBase BaseType; typedef typename PsimagLite::Real::Type RealType; typedef typename PsimagLite::Vector::Type VectorRealType; typedef typename PsimagLite::Vector >::Type VectorType; template ParametersHubbardMultiBand(IoInputType& io) : BaseType(io, false) { io.readline(orbitals,"Orbitals="); io.read(hubbardU,"hubbardU"); io.read(potentialV,"potentialV"); SizeType h = 1; try { io.readline(h, "NumberOfHoppingOrbitalMatrices="); } catch (std::exception&) {} SizeType sites = 0; io.readline(sites, "TotalNumberOfSites="); if (h != 1 && h != sites) err("NumberOfHoppingOrbitalMatrices=1 or =numberOfSites\n"); for (SizeType i = 0; i < h; ++i) { PsimagLite::Matrix m; io.read(m, "hopOnSite"); hopOnSite.push_back(m); } } template SizeType memResolv(SomeMemResolvType&, SizeType, PsimagLite::String = "") const { return 0; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersHubbardMultiBand"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/orbitals", orbitals); io.write(label + "/hubbardU", hubbardU); io.write(label + "/potentialV", potentialV); io.write(label + "/hopOnSite", hopOnSite); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersHubbardMultiBand& parameters) { os<<"Orbitals="< class HilbertSpaceHubbard { public: typedef Word HilbertState; static int const SPIN_UP=0; static int const SPIN_DOWN=1; //! For state "a" set electron on site "j" to value "value" static void set(Word &a,int j,int value) { Word mask; switch (value) { case 0: mask = (1<<(2*j)) | (1<<(2*j+1)); a &= (~mask); return; case 1: mask = (1<<(2*j)); a |= mask; mask = (1<<(2*j+1)); a &= (~mask); return; case 2: mask = (1<<(2*j+1)); a |= mask; mask = (1<<(2*j)); a &= (~mask); return; case 3: mask = (1<<(2*j)) | (1<<(2*j+1)); a |= (mask); return; default: std::cerr<<"value="<>= (2*j); if (mask>3) { std::cerr<<"Error: mask="<>=1); return ret; } // Number of electrons with dof sector between i and j // excluding i and j in binary number "ket" // intended for when i=j) return 0; Word m=0; SizeType end = 2 * j; for (SizeType k=2*ii;k #include "Sort.h" // in PsimagLite #include "ParametersModelHubbard.h" #include "HilbertSpaceHubbard.h" #include "CrsMatrix.h" #include "SpinSquaredHelper.h" #include "SpinSquared.h" #include "VerySparseMatrix.h" #include "ProgramGlobals.h" #include "MemResolv.h" namespace Dmrg { template class ExtendedHubbard1Orb; //! Model Hubbard for DMRG solver, inherits from ModelBase and implements its interface: template class ModelHubbard : public ModelBaseType { typedef typename ModelBaseType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; static const int FERMION_SIGN = -1; static const int DEGREES_OF_FREEDOM=2; static const int NUMBER_OF_ORBITALS=1; public: typedef unsigned int long WordType; typedef HilbertSpaceHubbard HilbertSpaceHubbardType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::SparseMatrixType SparseMatrixType; typedef typename ModelHelperType::SparseElementType SparseElementType; typedef typename ModelBaseType::VectorOperatorType VectorOperatorType; typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename HilbertSpaceHubbardType::HilbertState HilbertState; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename ModelBaseType::MyBasis MyBasis; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename PsimagLite::Vector::Type HilbertBasisType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; enum {SPIN_UP = HilbertSpaceHubbardType::SPIN_UP, SPIN_DOWN = HilbertSpaceHubbardType::SPIN_DOWN}; ModelHubbard(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry, PsimagLite::String extension) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), spinSquared_(spinSquaredHelper_,NUMBER_OF_ORBITALS,DEGREES_OF_FREEDOM), extension_(extension) { SizeType usize = modelParameters_.hubbardU.size(); SizeType vsize = modelParameters_.potentialV.size(); SizeType totalSites = geometry.numberOfSites(); if (usize != totalSites) { PsimagLite::String msg("ModelHubbard: hubbardU expecting "); msg += ttos(totalSites) + " entries, got " + ttos(usize) + "\n"; throw PsimagLite::RuntimeError(msg); } if (vsize != 2*totalSites) { PsimagLite::String msg("ModelHubbard: potentialV expecting "); msg += ttos(2*totalSites) + " entries, got " + ttos(vsize) + "\n"; throw PsimagLite::RuntimeError(msg); } if (modelParameters_.magneticX.size()>0 && ModelBaseType::targetQuantum().sizeOfOther() == 2) { PsimagLite::String msg("ModelHubbard: Sz not conserved: You should remove "); msg += "TargeteElectronsDown or TargetSzPlusConst from the input file.\n"; msg += "TargeteElectronsUp is then interpreted as total number of electrons\n"; throw PsimagLite::RuntimeError(msg); } } protected: void fillLabeledOperators(VectorQnType& qns) { SizeType site = 0; BlockType block(1, site); HilbertBasisType natBasis; SparseMatrixType tmpMatrix; setBasis(natBasis, block); setSymmetryRelated(qns, natBasis, block.size()); OpsLabelType& c = this->createOpsLabel("c"); this->makeTrackable("c"); VectorOperatorType creationMatrix(DEGREES_OF_FREEDOM); //! Set the operators c^\daggger_{i\sigma} in the natural basis SizeType ind = 0; for (int sigma=0;sigma0) asign= 1; typename OperatorType::Su2RelatedType su2related; if (sigma==0) { su2related.source.push_back(ind*DEGREES_OF_FREEDOM); su2related.source.push_back(ind*DEGREES_OF_FREEDOM+1); su2related.transpose.push_back(-1); su2related.transpose.push_back(-1); su2related.offset = NUMBER_OF_ORBITALS; } OperatorType myOp(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::FERMION, typename OperatorType::PairType(1,1-sigma), asign, su2related); c.push(myOp, (sigma == 0) ? "up" : "down"); creationMatrix[sigma] = myOp; } SizeType iup = SPIN_UP; SizeType idown = SPIN_DOWN; { OpsLabelType& splus = this->createOpsLabel("splus"); OpsLabelType& sminus = this->createOpsLabel("sminus"); PsimagLite::Matrix tmp = multiplyTc(creationMatrix[iup].getCRS(),creationMatrix[idown].getCRS()); SparseMatrixType tmp2(tmp); typename OperatorType::Su2RelatedType su2Related; splus.push(OperatorType(tmp2, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); SparseMatrixType tmp3; transposeConjugate(tmp3, tmp2); sminus.push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } { OpsLabelType& sz = this->createOpsLabel("sz"); PsimagLite::Matrix tmp = multiplyTc(creationMatrix[iup].getCRS(),creationMatrix[iup].getCRS()); PsimagLite::Matrix tmp2 = multiplyTc(creationMatrix[idown].getCRS(),creationMatrix[idown].getCRS()); tmp = 0.5*(tmp - tmp2); SparseMatrixType tmp3(tmp); typename OperatorType::Su2RelatedType su2Related; sz.push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } PsimagLite::Matrix dense1; { OpsLabelType& nupop = this->createOpsLabel("nup"); OperatorType cup = creationMatrix[SPIN_UP]; cup.dagger(); SparseMatrixType tmp3(multiplyTc(cup.getCRS(),cup.getCRS())); typename OperatorType::Su2RelatedType su2Related; nupop.push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); crsMatrixToFullMatrix(dense1, tmp3); } PsimagLite::Matrix dense2; { OpsLabelType& ndownop = this->createOpsLabel("ndown"); OperatorType cdown = creationMatrix[SPIN_DOWN]; cdown.dagger(); SparseMatrixType tmp3(multiplyTc(cdown.getCRS(),cdown.getCRS())); typename OperatorType::Su2RelatedType su2Related; ndownop.push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); crsMatrixToFullMatrix(dense2, tmp3); } { OpsLabelType& nop = this->createOpsLabel("n"); dense1 += dense2; SparseMatrixType tmp(dense1); typename OperatorType::Su2RelatedType su2Related; nop.push(OperatorType(tmp, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } { OpsLabelType& d = this->createOpsLabel("d"); PsimagLite::Matrix cup; crsMatrixToFullMatrix(cup,creationMatrix[SPIN_UP].getCRS()); PsimagLite::Matrix cdown; crsMatrixToFullMatrix(cdown,creationMatrix[SPIN_DOWN].getCRS()); cup = (cup*cdown); SparseMatrixType tmp3(cup); typename OperatorType::Su2RelatedType su2Related; d.push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } } /* PSIDOC Hubbard::fillModelLinks The Hubbard model has one one term, the hopping, and within this term it has two connections: up-up and down-down. First, define the term, and name it whatever you like; see line (A) below. In this case the variable is called \verb!hop! and the name is ``hopping''. Create then a special type of opaque object, an OpForLinkType, to represent the operators you need to connect. In this case, we need to connect $c^\dagger_\uparrow$ with $c_\uparrow$. Because $c_\uparrow$ is not tracked in this model, we must use $c^\dagger_\uparrow$ only, and transpose conjugate it as needed. In line (B) below, we create a C++ variable \verb!cup! and the label name is ``c'' with degree of freedom 0 indicating spin up. Note that (``c'', 0) must be a trackable operator; see \verb!fillLabeledOperators! above. We now push to the variable \verb!hop! the connection as seen in (C) below. Here we must supply \emph{two} operators: in this case they are cup with 'N' and cup with 'C' to indicate that we want $c^\dagger c$. The last three numbers are SU(2) related; just use \verb!1, 1, 0! if unsure. Note that the operators are the same, but the second one is transpose conjugated. Likewise, we create cdown in (D) and add the connection to \verb!hop! in (E) PSIDOCCOPY $FirstFunctionBelow */ void fillModelLinks() { ModelTermType& hop = ModelBaseType::createTerm("hopping");//(A) OpForLinkType cup("c", 0); // (B) hop.push(cup, 'N', cup, 'C', typename ModelTermType::Su2Properties(1, 1, 0)); // (C) OpForLinkType cdown("c", 1); // (D) hop.push(cdown, 'N', cdown, 'C', typename ModelTermType::Su2Properties(1, -1, 1)); // (E) if (extension_ != "RashbaSOC") return; assert(extension_ == "RashbaSOC"); ModelTermType& rashbaSOC = ModelBaseType::createTerm("RashbaSOC"); // up-down rashbaSOC.push(cup, 'N', cdown, 'C'); // down-up auto valueModifer = [](SparseElementType& value) { value = -PsimagLite::conj(value);}; rashbaSOC.push(cdown, 'N', cup, 'C', valueModifer, typename ModelTermType::Su2Properties(1, 0, 0)); } /* PSIDOC Hubbard::write We are passed a label in \verb!label1! (the first argument), and something like a file handle in \verb!io! (the second argument). We must interpret the label as a directory within the file. We then first create a top directory if it doesn't exist in lines (A) and (B) below. Oh, and then create another directory with this model's name in (C). Hmmm, maybe this two-step process ought to be simplified\ldots. Anyway, we go ahead and start writing things into directory \verb!label! being \verb!label1/model!, where label1 is the label passed as first argument to this function, and model is this model's name. What things \emph{need to} be written here? Probably nothing needs to be written (yeah, big FIXME TODO on the ``Probably'', sorry). Typically though, you'd like to write all data members for this class. For most models, it's the model parameters like in (D) below, and that's that. Here we write also some SU(2) auxiliary members in the last two lines. PSIDOCCOPY $FirstFunctionBelow */ void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) // (A) io.createGroup(label1); // (B) PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); // (C) modelParameters_.write(label, io); // (D) spinSquaredHelper_.write(label, io); spinSquared_.write(label, io); } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType time) const { SizeType n=block.size(); SparseMatrixType tmpMatrix,niup,nidown,Szsquare,Szi,Splusi,Sminusi; SizeType linSize = ModelBaseType::superGeometry().numberOfSites(); for (SizeType i = 0; i < n; ++i) { SizeType site = block[i]; // onsite U hubbard //n_i up const OperatorType& cup = ModelBaseType::naturalOperator("c", site, 0); transposeConjugate(tmpMatrix, cup.getCRS()); multiply(niup,tmpMatrix, cup.getCRS()); //n_i down const OperatorType& cdown = ModelBaseType::naturalOperator("c", site, 1); transposeConjugate(tmpMatrix, cdown.getCRS()); multiply(Sminusi, tmpMatrix, cup.getCRS()); transposeConjugate(Splusi, Sminusi); multiply(nidown,tmpMatrix, cdown.getCRS()); multiply(tmpMatrix, niup, nidown); RealType tmp = modelParameters_.hubbardU[block[i]]; hmatrix += tmp*tmpMatrix; // V_iup term tmp = modelParameters_.potentialV[site + 0*linSize]; hmatrix += tmp*niup; // V_idown term tmp = modelParameters_.potentialV[site + 1*linSize]; hmatrix += tmp*nidown; // anisotropy if (modelParameters_.anisotropy.size() == linSize) { RealType mult1 = 1.0; RealType mult2 = -1.0; operatorPlus(Szi,niup,mult1,nidown,mult2); multiply(Szsquare,Szi,Szi); assert(i*2 < block.size()); assert(block[i*2] < modelParameters_.anisotropy.size()); RealType tmp = modelParameters_.anisotropy[block[i*2]]*0.25; hmatrix += tmp*Szsquare; } // magneticX if (modelParameters_.magneticX.size() == linSize) { RealType tmp = modelParameters_.magneticX[block[i]]*0.5; hmatrix += tmp*Sminusi; hmatrix += tmp*Splusi; } if (modelParameters_.potentialT.size()==0) continue; RealType cosarg = cos(time*modelParameters_.omega + modelParameters_.phase); // VT_iup term tmp = modelParameters_.potentialT[block[i]]; tmp *= cosarg; hmatrix += tmp*niup; // VT_idown term tmp = modelParameters_.potentialT[block[i]]; tmp *= cosarg; hmatrix += tmp*nidown; } } friend class ExtendedHubbard1Orb; private: void setBasis(HilbertBasisType& basis, const VectorSizeType& block) const { int sitesTimesDof = DEGREES_OF_FREEDOM*block.size(); HilbertState total = (1<0 && tmp1>0) value++; if (i>0 && tmp2>0) value++; if (sigma==1) { // spin down if ((HilbertSpaceHubbardType::get(ket,i) &1)) value++; } if (value%2==0) return 1.0; return FERMION_SIGN; } //! Find c^\dagger_isigma in the natural basis natBasis SparseMatrixType findOperatorMatrices(int i, int sigma, const HilbertBasisType& natBasis) const { typename HilbertSpaceHubbardType::HilbertState bra,ket; int n = natBasis.size(); PsimagLite::Matrix cm(n,n); for (SizeType ii=0;ii PairType; const bool isCanonical = (ModelBaseType::targetQuantum().sizeOfOther() == 2); if (isCanonical && extension_ == "RashbaSOC") err(PsimagLite::String(__FILE__) + ": RashbaSOC sub-model must be canonical. Please " + "delete the TargetSzPlusConst= from the input file\n"); qns.resize(basis.size(), QnType::zero()); VectorSizeType other((isCanonical) ? 2 : 1, 0); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair = calcJmValue(basis[i]); // nup SizeType electronsUp = HilbertSpaceHubbardType::getNofDigits(basis[i],SPIN_UP); // ndown SizeType electronsDown = HilbertSpaceHubbardType::getNofDigits(basis[i],SPIN_DOWN); other[0] = electronsUp + electronsDown; if (isCanonical) other[1] = electronsUp; bool sign = other[0] & 1; qns[i] = QnType(sign, other, jmpair, other[0]); } } // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType // does not work for 6 or 9 template PairType calcJmValue(const HilbertState& ket) const { if (!MyBasis::useSu2Symmetry()) return PairType(0,0); SizeType site0=0; SizeType site1=0; spinSquared_.doOnePairOfSitesA(ket,site0,site1); spinSquared_.doOnePairOfSitesB(ket,site0,site1); spinSquared_.doDiagonal(ket,site0,site1); RealType sz = spinSquared_.spinZ(ket,site0); PairType jm= spinSquaredHelper_.getJmPair(sz); return jm; } ParametersModelHubbard modelParameters_; SpinSquaredHelper spinSquaredHelper_; SpinSquared > spinSquared_; PsimagLite::String extension_; }; //class ModelHubbard } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/HubbardOneBand/ParametersModelHubbard.h000066400000000000000000000134551414604301300242730ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersModelHubbard.h * * Contains the parameters for the Hubbard model and function to read them from a file * */ #ifndef PARAMETERSMODELHUBBARD_H #define PARAMETERSMODELHUBBARD_H #include "ParametersModelBase.h" namespace Dmrg { //! Hubbard Model Parameters template struct ParametersModelHubbard : public ParametersModelBase { typedef ParametersModelBase BaseType; template ParametersModelHubbard(IoInputType& io) : BaseType(io, false) { SizeType nsites = 0; io.readline(nsites, "TotalNumberOfSites="); hubbardU.resize(nsites, 0.0); potentialV.resize(2*nsites, 0.0); io.read(hubbardU,"hubbardU"); io.read(potentialV,"potentialV"); try { anisotropy.resize(nsites, 0.0); io.read(anisotropy,"AnisotropyD"); std::cerr<<"Has AnisotropyD\n"; } catch (std::exception&) { anisotropy.clear(); } try { magneticX.resize(nsites, 0.0); io.read(magneticX,"MagneticFieldX"); std::cerr<<"Has MagneticFieldX\n"; } catch (std::exception&) { magneticX.clear(); } try { io.read(potentialT,"PotentialT"); std::cerr<<"Has PotentialT\n"; } catch (std::exception&) {} bool hasT = (potentialT.size() > 0); omega=0; try { io.readline(omega,"omega="); if (!hasT) { std::cerr<<"ParametersModelHubbard: "; std::cerr<<"omega will be ignored as no PotentialT present\n"; } } catch (std::exception&) {} phase=0; try { io.readline(phase,"phase="); if (!hasT) { std::cerr<<"ParametersModelHubbard: "; std::cerr<<"phase will be ignored as no PotentialT present\n"; } } catch (std::exception&) {} } template SizeType memResolv(SomeMemResolvType&, SizeType, PsimagLite::String = "") const { return 0; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersModelHubbard"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/hubbardU", hubbardU); io.write(label + "/potentialV", potentialV); io.write(label + "/anisotropy", anisotropy); io.write(label + "/magneticX", magneticX); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersModelHubbard& parameters) { os<0) os<::Type hubbardU; typename PsimagLite::Vector::Type potentialV; typename PsimagLite::Vector::Type anisotropy; typename PsimagLite::Vector::Type magneticX; // for time-dependent H: typename PsimagLite::Vector::Type potentialT; RealType omega; RealType phase; }; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/Immm/000077500000000000000000000000001414604301300156375ustar00rootroot00000000000000dmrgpp-6.02/src/Models/Immm/HilbertSpaceImmm.h000066400000000000000000000155311414604301300212020ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file HilbertSpaceImmm.h * * This class represents the Hilbert space for the Immm Model * States are represented with binary numbers. N(site) bits per site * Bits meaning: * 0.....0 empty state * 0..1..0 a 1 at location x means state "x" * 0..010..010..0, a 1 at location x and a 1 at location y means 2 * electrons on the site with states x and y respectively * ... * 1111...111111 all ones means N electrons each with a different state * * Note: this is a class * Note: Length of state depends on site * */ #ifndef HILBERTSPACE_IMMM_H #define HILBERTSPACE_IMMM_H #include #include namespace Dmrg { //! A class to operate on n-ary numbers (base n) template class HilbertSpaceImmm { public: typedef Word HilbertState; static const SizeType NUMBER_OF_SPINS = 2; enum {SPIN_UP=0,SPIN_DOWN=1}; HilbertSpaceImmm(SizeType maxOrbitals) : maxOrbitals_(maxOrbitals) {} template SizeType memResolv(SomeMemResolvType& mres, SizeType, PsimagLite::String msg = "") const { PsimagLite::String str = msg; str += "HilbertSpaceImmm"; mres.memResolv(&maxOrbitals_, sizeof(*this), str + " maxOrbitals"); return sizeof(*this); } SizeType dOf() const { return 2*maxOrbitals_; } // Get electronic state on site "j" in binary number "a" Word get(Word const &a,SizeType j) const { SizeType k=degreesOfFreedomUpTo(j); SizeType ones = (1<<(dOf()))-1; Word mask=(ones<>= k; return mask; } // Create electron with internal dof "sigma" on site "j" in binary number "a" void create(Word &a,SizeType j,SizeType sigma) const { SizeType k=degreesOfFreedomUpTo(j); Word mask=(1<<(k+sigma)); a |= mask; } // Is there an electron with internal dof "sigma" on site "i" in binary number "ket"? bool isNonZero(Word const &ket,SizeType i,SizeType sigma) const { Word tmp=get(ket,i); if (tmp & (1<>=dof); return ret; } //! Number of electrons with spin spin (sums over bands) int electronsWithGivenSpin(Word const &data,SizeType,SizeType spin) const { SizeType norb = dOf()/NUMBER_OF_SPINS; SizeType beginX=spin*norb; SizeType endX=beginX + norb; SizeType sum=0; for (SizeType x=beginX;x=j) return 0; Word m=0; for (SizeType site = ii;site namespace Dmrg { template class Immm : public ModelBaseType { typedef unsigned int long WordType; typedef typename ModelBaseType::VectorSizeType VectorSizeType; public: typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type SparseElementType; typedef PsimagLite::Matrix MatrixType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef HilbertSpaceImmm HilbertSpaceImmmType; typedef typename HilbertSpaceImmmType::HilbertState HilbertState; typedef typename PsimagLite::Vector::Type HilbertBasisType; typedef typename ModelBaseType::MyBasis MyBasis; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; static const int FERMION_SIGN = -1; static const int SPIN_UP=HilbertSpaceImmmType::SPIN_UP; static const int SPIN_DOWN=HilbertSpaceImmmType::SPIN_DOWN; static const SizeType NUMBER_OF_SPINS=HilbertSpaceImmmType::NUMBER_OF_SPINS; enum AtomEnum {ATOM_COPPER, ATOM_OXYGEN}; enum {ORBITALS_COPPER = 1, ORBITALS_OXYGEN = 2}; Immm(const SolverParamsType& solverParams, InputValidatorType& io, SuperGeometryType const &geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), superGeometry_(geometry), copperEach_(4), hilbertSpace_(ORBITALS_OXYGEN) { statesCopper_ = (1<params().model; io.createGroup(label); modelParameters_.write(label, io); io.write(label + "/copperEach_", copperEach_); hilbertSpace_.write(label, io); io.write(label + "/statesCopper_", statesCopper_); io.write(label + "/statesOxygen_", statesOxygen_); } virtual SizeType maxElectronsOneSpin() const { return NUMBER_OF_SPINS * ORBITALS_OXYGEN * superGeometry_.numberOfSites() + 1; } SizeType differentTypesOfAtoms() const { return 2; } protected: void fillLabeledOperators(VectorQnType& qns) { for (SizeType site = 0; site < differentTypesOfAtoms(); ++site) { OpsLabelType& c = this->createOpsLabel("c", site); OpsLabelType& nop = this->createOpsLabel("nop", site); OpsLabelType& splus = this->createOpsLabel("splus", site); OpsLabelType& sminus = this->createOpsLabel("sminus", site); OpsLabelType& sz = this->createOpsLabel("sz", site); OpsLabelType& o = this->createOpsLabel("o", site); OpsLabelType& nup = this->createOpsLabel("nup", site); OpsLabelType& ndown = this->createOpsLabel("ndown", site); this->makeTrackable("c"); this->makeTrackable("nop"); BlockType block(1, site); typename PsimagLite::Vector::Type creationMatrix; setOperatorMatricesInternal(creationMatrix, qns, block); // SizeType orbitals = orbitalsAtSite(site); // SizeType orbital = dof % orbitals; // SizeType spin = dof / orbitals; SizeType total = creationMatrix.size(); splus.push(cDaggerCi(block,SPIN_UP,SPIN_DOWN)); sminus.push(cDaggerCi(block,SPIN_DOWN,SPIN_UP)); { // S^z MatrixType tmp1; crsMatrixToFullMatrix(tmp1,nUpOrDown(block,SPIN_UP).getCRS()); MatrixType tmp2; crsMatrixToFullMatrix(tmp2,nUpOrDown(block,SPIN_DOWN).getCRS()); tmp1 -= tmp2; SparseMatrixType tmp(tmp1); typename OperatorType::Su2RelatedType su2Related; typename OperatorType::PairType pairZero(0, 0); sz.push(OperatorType(tmp, ProgramGlobals::FermionOrBosonEnum::BOSON, pairZero, 1.0, su2Related)); } for (SizeType dof = 0; dof < total; ++dof) c.push(creationMatrix[dof]); assert(creationMatrix.size() > 0); nop.push(creationMatrix[creationMatrix.size()-1]); nup.push(nUpOrDown(block,SPIN_UP)); ndown.push(nUpOrDown(block,SPIN_DOWN)); for (SizeType dof = 0; dof < total; ++dof) { SparseMatrixType tmp2; transposeConjugate(tmp2,creationMatrix[dof].getCRS()); SparseMatrixType tmp3 = creationMatrix[dof].getCRS() * tmp2; typename OperatorType::Su2RelatedType su2Related; o.push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } } } void fillModelLinks() { err("Immm is broken\n"); } private: //! set creation matrices for sites in block void setOperatorMatricesInternal(VectorOperatorType& creationMatrix, VectorQnType& qns, const BlockType& block) const { assert(block.size()==1); HilbertBasisType natBasis; SparseMatrixType tmpMatrix; setBasis(natBasis, block); setSymmetryRelated(qns, natBasis, block[0]); //! Set the operators c^\daggger_{i\gamma\sigma} in the natural basis creationMatrix.clear(); MatrixType nmatrix(natBasis.size(),natBasis.size()); SizeType total = NUMBER_OF_SPINS * orbitalsAtSite(0); for (SizeType sigma=0;sigma0) value += hilbertSpace_.electrons(ket); //order for sign is: up a (sigma==0), down a (sigma==2), up b (sigma==1), down b(sigma==3) unsigned int x = hilbertSpace_.get(ket,site); switch (sigma) { case 0: break; case 1: if (x & 1) value++; if (x & 4) value++; break; case 2: if (x&1) value++; break; case 3: if (x&1) value++; if (x&4) value++; if (x&2) value++; break; } if (value==0 || value%2==0) return 1.0; return FERMION_SIGN; } //! Find c^\dagger_i\gamma\sigma in the natural basis natBasis //! N.B.: HAS BEEN CHANGED TO ACCOMODATE FOR MULTIPLE BANDS void findOperatorMatrices(SparseMatrixType& creationMatrix, SizeType, SizeType sigma, const HilbertBasisType& natBasis) const { HilbertState bra,ket; SizeType n = natBasis.size(); MatrixType cm(n,n); for (SizeType ii=0;ii=0); assert(ii!=SizeType(jj)); cm(ii,jj) =sign(ket,0,sigma); } } // here reinterpret for SU(2) if needed SparseMatrixType temp; fullMatrixToCrsMatrix(temp,cm); transposeConjugate(creationMatrix,temp); } void setSymmetryRelated(VectorQnType& qns, const HilbertBasisType& basis, SizeType site) const { // find j,m and flavors (do it by hand since we assume n==1) // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType typedef std::pair PairType; VectorSizeType other(2, 0); qns.resize(basis.size(), QnType::zero()); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair = calcJmvalue(basis[i]); SizeType flavor = 0; // na + 3*nb; // nup other[1] = hilbertSpace_.electronsWithGivenSpin(basis[i],site,SPIN_UP); // ndown SizeType electronsDown = hilbertSpace_.electronsWithGivenSpin(basis[i],site,SPIN_DOWN); other[0] = electronsDown + other[1]; bool sign = other[0] & 1; qns[i] = QnType(sign, other, jmpair, flavor); } } //! Not implemented, su(2) symmetry won't work template PairType calcJmvalue(const HilbertState&) const { PairType jm(0,0); return jm; } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType) const { // on-site potential: SizeType site = block[0]; SizeType linSize = superGeometry_.numberOfSites(); SizeType siteCorrected = 0; for (SizeType i=0;i::Type eigs(fullm2.n_row()); PsimagLite::diag(fullm2,eigs,'V'); std::cout<::Type& block, SizeType spin1, SizeType spin2) const { assert(block.size()==1); SizeType site = block[0]; SizeType norb = orbitalsAtSite(site); typename PsimagLite::Vector::Type creationMatrix; VectorQnType qns; setOperatorMatricesInternal(creationMatrix, qns, block); assert(creationMatrix.size()>0); SizeType rank = creationMatrix[0].getCRS().rows(); MatrixType tmp(rank,rank); assert(norb*2-1::Type& block, SizeType spin) const { return cDaggerCi(block,spin,spin); } bool isAllowedThisDof(SizeType alpha,SizeType site) const { if (modelParameters_.minOxygenElectrons > 0) return isAllowedThisDofRestricted(alpha,site); else return isAllowedThisDofFull(alpha,site); } bool isAllowedThisDofFull(SizeType alpha,SizeType site) const { SizeType norb1 = orbitalsAtSite(site); if (norb1 == ORBITALS_OXYGEN) return true; return ((alpha & 10) == 0); } bool isAllowedThisDofRestricted(SizeType alpha,SizeType site) const { SizeType norb = orbitalsAtSite(site); if (norb == ORBITALS_COPPER) return ((alpha & 10) == 0); bool b1 = (alpha == 7 || alpha == 11 || alpha >= 13); bool b2 = (alpha == 3 || alpha == 5 || alpha == 9 || alpha == 6 || alpha == 10 || alpha == 12); switch (modelParameters_.minOxygenElectrons) { case 1: return (alpha > 0); case 2: return (b1 | b2); case 3: return b1; case 4: return (alpha == 15); } throw PsimagLite::RuntimeError("Immm: isAllowedThisDofRestricted\n"); } AtomEnum atomAtSite(SizeType site) const { SizeType tmp = (site + 1) % copperEach_; return (tmp == 0) ? ATOM_COPPER : ATOM_OXYGEN; } SizeType orbitalsAtSite(SizeType site) const { return (atomAtSite(site) == ATOM_COPPER) ? ORBITALS_COPPER : ORBITALS_OXYGEN; } ParametersImmm modelParameters_; const SuperGeometryType& superGeometry_; SizeType copperEach_; HilbertSpaceImmmType hilbertSpace_; SizeType statesCopper_; SizeType statesOxygen_; }; //class Immm } // namespace Dmrg /*@}*/ #endif // IMMM_HEADER_H dmrgpp-6.02/src/Models/Immm/ParametersImmm.h000066400000000000000000000116451414604301300207420ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersImmm.h * * Contains the parameters for the Immm model and function to read them * */ #ifndef PARAMETERS_IMMM_H #define PARAMETERS_IMMM_H #include "ParametersModelBase.h" namespace Dmrg { template struct ParametersImmm : public ParametersModelBase { // no connections here please!! // connections are handled by the geometry typedef ParametersModelBase BaseType; template ParametersImmm(IoInputType& io) : BaseType(io, false) { io.read(hubbardU,"hubbardU"); io.read(potentialV,"potentialV"); io.readline(minOxygenElectrons,"MinOxygenElectrons="); } template SizeType memResolv(SomeMemResolvType& mres, SizeType, PsimagLite::String msg = "") const { PsimagLite::String str = msg; str += "ParametersImmm"; const char* start = reinterpret_cast(this); const char* end = reinterpret_cast(&potentialV); SizeType total = mres.memResolv(&hubbardU, end-start, str + " hubbardU"); start = end; end = reinterpret_cast(&minOxygenElectrons); total += mres.memResolv(&potentialV, end-start, str + " potentialV"); total += mres.memResolv(&minOxygenElectrons, sizeof(*this) - total, str + " minOxygenElectrons"); return total; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersImmm"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/hubbardU", hubbardU); io.write(label + "/potentialV", potentialV); io.write(label + "/minOxygenElectrons", minOxygenElectrons); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersImmm& parameters) { os<<"hubbardU\n"; os<::Type hubbardU; typename PsimagLite::Vector::Type potentialV; SizeType minOxygenElectrons; }; } // namespace Dmrg /*@}*/ #endif // PARAMETERS_IMMM_H dmrgpp-6.02/src/Models/Kitaev/000077500000000000000000000000001414604301300161635ustar00rootroot00000000000000dmrgpp-6.02/src/Models/Kitaev/Kitaev.h000066400000000000000000000440071414604301300175640ustar00rootroot00000000000000/* Copyright (c) 2009-2017-2018 UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file Kitaev.h * * An implementation of the Kitaev model (started March 2018) * */ #ifndef DMRG_KITAEV_H #define DMRG_KITAEV_H #include #include "ModelBase.h" #include "ParametersKitaev.h" #include "CrsMatrix.h" #include "VerySparseMatrix.h" #include "SpinSquaredHelper.h" #include "SpinSquared.h" #include "ProgramGlobals.h" #include "Utils.h" #include "Complex.h" namespace Dmrg { template class AddSy { public: typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; AddSy(ModelBaseType*) {} void operator()(SparseMatrixType) {} }; template class AddSy { public: typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::PairType PairType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; AddSy(ModelBaseType* base) : base_(base) {} void operator()(SparseMatrixType tmpMatrix) { typename OperatorType::Su2RelatedType su2related; ComplexOrRealType sqrtOfMinusOne(0, -1); tmpMatrix *= sqrtOfMinusOne; OperatorType myOp2(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1.0, su2related); OpsLabelType& sy = base_->createOpsLabel("sy"); sy.push(myOp2); // Sy = -iSybar } private: ModelBaseType* base_; }; template class Kitaev : public ModelBaseType { static const int TWICE_THE_SPIN = 1; enum class InternalDir {DIR_X, DIR_Y, DIR_Z, DIR_PLUS, DIR_MINUS}; public: typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::BasisType BasisType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef unsigned int long WordType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename ModelBaseType::VectorRealType VectorRealType; typedef typename PsimagLite::Vector::Type HilbertBasisType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::PairType PairType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef PsimagLite::Vector::Type VectorStringType; Kitaev(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry, PsimagLite::String additional) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), extended_(additional.length() > 7 && additional.substr(0, 8) == "Extended"), withGammas_(additional.length() > 9 && additional.substr(0, 10) == "WithGammas"), withCharge_(additional.length() > 9 && (additional.substr(8, 10) == "WithCharge" || additional.substr(10, 10) == "WithCharge" || additional.substr(0, 10) == "WithCharge")) { if (withCharge_ and TWICE_THE_SPIN != 1) err("Kitaev: Charged model only for s=1/2\n"); SizeType n = geometry.numberOfSites(); SizeType mx = modelParameters_.magneticFieldX.size(); SizeType my = modelParameters_.magneticFieldY.size(); SizeType mz = modelParameters_.magneticFieldZ.size(); if (mx > 0 && mx != n) { PsimagLite::String msg("Kitaev: If provided, "); msg += " MagneticFieldX must be a vector of " + ttos(n) + " entries.\n"; throw PsimagLite::RuntimeError(msg); } if (mz > 0 && mz != n) { PsimagLite::String msg("Kitaev: If provided, "); msg += " MagneticFieldZ must be a vector of " + ttos(n) + " entries.\n"; throw PsimagLite::RuntimeError(msg); } if (my > 0 && my != n) { PsimagLite::String msg("Kitaev: If provided, "); msg += " MagneticFieldY must be a vector of " + ttos(n) + " entries.\n"; throw PsimagLite::RuntimeError(msg); } if (BasisType::useSu2Symmetry()) err("Kitaev does not have SU(2) symmetry\n"); } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType) const { SizeType linSize = ModelBaseType::superGeometry().numberOfSites(); bool hasX = (modelParameters_.magneticFieldX.size() == linSize); bool hasY = (modelParameters_.magneticFieldY.size() == linSize); bool hasZ = (modelParameters_.magneticFieldZ.size() == linSize); SizeType n=block.size(); for (SizeType i = 0; i < n; ++i) { SizeType site = block[i]; if (hasX) { // magnetic field x const OperatorType& sx = ModelBaseType::naturalOperator("sx", site, 0); RealType tmp = modelParameters_.magneticFieldX[block[0]]; hmatrix += tmp*sx.getCRS(); } if (hasY) { // magnetic field y const OperatorType& sy = ModelBaseType::naturalOperator("sy", site, 0); RealType tmp = modelParameters_.magneticFieldY[block[0]]; hmatrix += tmp*sy.getCRS(); } if (hasZ) { // magnetic field z const OperatorType& sz = ModelBaseType::naturalOperator("sz", site, 0); RealType tmp = modelParameters_.magneticFieldZ[block[0]]; hmatrix += tmp*sz.getCRS(); } } } protected: void fillLabeledOperators(VectorQnType& qns) { SizeType site = 0; BlockType block(1, site); HilbertBasisType natBasis; SparseMatrixType tmpMatrix; setBasis(natBasis, block); setSymmetryRelated(qns, natBasis, block.size()); OpsLabelType& sx = this->createOpsLabel("sx"); OpsLabelType& sybar = this->createOpsLabel("sybar"); OpsLabelType& sz = this->createOpsLabel("sz"); OpsLabelType& splus = this->createOpsLabel("splus"); OpsLabelType& sminus = this->createOpsLabel("sminus"); this->makeTrackable("sx"); this->makeTrackable("sybar"); // Sybar = iSy this->makeTrackable("sz"); for (SizeType i=0;i::True> addSy(this); addSy(tmpMatrix); // Set the operators S^z_i in the natural basis tmpMatrix = findSdirMatrices(i, natBasis, InternalDir::DIR_Z); OperatorType myOp3(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1.0, su2related); sz.push(myOp3); tmpMatrix = findSdirMatrices(i, natBasis, InternalDir::DIR_PLUS); OperatorType myOp4(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1.0, su2related); splus.push(myOp4); OperatorType myOp5 = myOp4; myOp5.conjugate(); sminus.push(myOp5); } if (!withCharge_) return; // <<=== EARLY EXIT HERE OpsLabelType& destructionC = this->createOpsLabel("c"); this->makeTrackable("c"); for (SizeType spin = 0; spin < 2; ++spin) { typename OperatorType::Su2RelatedType su2related; tmpMatrix = findDestructionC(natBasis, spin); OperatorType myOpC(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::FERMION, PairType(0, 0), 1.0, su2related); destructionC.push(myOpC); } } void fillModelLinks() { if (withCharge_) { ModelTermType& hop = ModelBaseType::createTerm("hopping");//(A) OpForLinkType cup("c", 0); // (B) hop.push(cup, 'N', cup, 'C', typename ModelTermType::Su2Properties(1, 1, 0)); // (C) OpForLinkType cdown("c", 1); // (D) hop.push(cdown, 'N', cdown, 'C', typename ModelTermType::Su2Properties(1, -1, 1)); } VectorStringType labels = {"sx", "sybar", "sz"}; for (SizeType i = 0; i < labels.size(); ++i) { OpForLinkType smu(labels[i]); auto modif = [i] (ComplexOrRealType& value) { ComplexOrRealType x = (i == 1) ? -1 : 1; // sybar * sybar = -sy*sy value *= x; }; ModelBaseType::createTerm(labels[i] + labels[i], false).push(smu, 'N', smu, 'N', modif); } OpForLinkType sx("sx"); OpForLinkType sybar("sybar"); const bool wantsHermit = true; typename MatrixType::value_type dummy = 0.0; if (extended_) { createTermSxSy(sx, sybar, wantsHermit, dummy); return; // <<---- EARLY EXIT HERE } if (!withGammas_) return; // <<---- EARLY EXIT HERE OpForLinkType sz("sz"); createTermSySz(sybar, sz, wantsHermit, dummy); ModelBaseType::createTerm("sxsz").push(sx, 'N', sz, 'N'); ModelTermType& szsx = ModelBaseType::createTerm("szsx", wantsHermit, "sxsz"); szsx.push(sz, 'N', sx, 'N'); createTermSxSy(sx, sybar, wantsHermit, dummy); } private: void createTermSySz(const OpForLinkType&, const OpForLinkType&, bool, RealType) { PsimagLite::String str = "needs useComplex in SolverOptions in the input\n"; err("FATAL: createTermSySz(): This Kitaev variant needs useComplex " + str); } void createTermSySz(const OpForLinkType& sybar, const OpForLinkType& sz, bool wantsHermit, std::complex) { auto modifMinusSqrtMinusOne = [](ComplexOrRealType& value) { value *= std::complex(0, -1); }; ModelBaseType::createTerm("sysz").push(sybar, 'N', sz, 'N', modifMinusSqrtMinusOne); ModelTermType& szsy = ModelBaseType::createTerm("szsy", wantsHermit, "sysz"); szsy.push(sz, 'N', sybar, 'N', modifMinusSqrtMinusOne); } void createTermSxSy(const OpForLinkType&, const OpForLinkType&, bool, RealType) const { PsimagLite::String str = "needs useComplex in SolverOptions in the input\n"; err("createTermSxSy(): This Kitaev variant " + str); } void createTermSxSy(const OpForLinkType& sx, const OpForLinkType& sybar, bool wantsHermit, std::complex) const { auto modifMinusSqrtMinusOne = [](ComplexOrRealType& value) { value *= std::complex(0, -1); }; ModelBaseType::createTerm("sxsy").push(sx, 'N', sybar, 'N', modifMinusSqrtMinusOne); ModelTermType& sysx = ModelBaseType::createTerm("sysx", wantsHermit, "sxsy"); sysx.push(sybar, 'N', sx, 'N', modifMinusSqrtMinusOne); SizeType site = 0; BlockType block(1, site); HilbertBasisType natBasis; setBasis(natBasis, block); } //! find all states in the natural basis for a block of n sites void setBasis(HilbertBasisType& basis, const VectorSizeType& block) const { const SizeType total1 = (withCharge_) ? 3 : TWICE_THE_SPIN + 1; SizeType total = utils::powUint(total1, block.size()); basis.resize(total); for (SizeType i = 0; i < total; ++i) basis[i] = i; } SizeType logBase2(SizeType x) const { SizeType counter = 0; while (x > 0) { x >>= 1; counter++; } return (counter == 0) ? counter : counter - 1; } SparseMatrixType findSdirMatrices(SizeType,// site, const HilbertBasisType& natBasis, InternalDir dir) const { SizeType total = natBasis.size(); MatrixType cm(total, total); SizeType offset = (withCharge_) ? 1 : 0; if (withCharge_) { if (total != 3) err("findSdirMatrices: with charge Hilbert space should be 3\n"); } else { if (total != TWICE_THE_SPIN + 1 || TWICE_THE_SPIN != 1) err("findSdirMatrices: only for spin 1/2 AND block of one site\n"); } if (dir == InternalDir::DIR_X) { cm(0 + offset, 1 + offset) = cm(1 + offset, 0 + offset) = 0.5; } else if (dir == InternalDir::DIR_Y) { cm(0 + offset, 1 + offset) = 0.5; cm(1 + offset, 0 + offset) = -0.5; } else if (dir == InternalDir::DIR_Z) { cm(0 + offset, 0 + offset) = 0.5; cm(1 + offset, 1 + offset) = -0.5; } else if (dir == InternalDir::DIR_PLUS) { cm(0 + offset, 1 + offset) = 1.0; } else if (dir == InternalDir::DIR_MINUS) { cm(1 + offset, 0 + offset) = 1.0; } else { assert(false); } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } // destruction SparseMatrixType findDestructionC(const HilbertBasisType&, SizeType spin) const { assert(withCharge_); assert(spin == 0 || spin == 1); MatrixType m(3, 3); if (spin == 0) m(0, 1) = 1; else m(0, 2) = 1; SparseMatrixType operatorMatrix(m); return operatorMatrix; } void setSymmetryRelated(VectorQnType& qns, const HilbertBasisType& basis, int n) const { assert(n == 1); SizeType nbasis = basis.size(); qns.resize(nbasis, QnType::zero()); if (!withCharge_) return; // <<---- EARLY EXIT HERE setSymmetryRelatedWithCharge(qns, basis); } void setSymmetryRelatedWithCharge(VectorQnType& qns, const HilbertBasisType& basis) const { typedef std::pair PairType; VectorSizeType other(1); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair(0, 0); assert(basis[i] == 0 || basis[i] == 1 || basis[i] == 2); other[0] = (basis[i] == 0) ? 0 : 1; bool sign = other[0] & 1; qns[i] = QnType(sign, other, jmpair, other[0]); } } ParametersKitaev modelParameters_; const bool extended_; const bool withGammas_; const bool withCharge_; }; // class Kitaev } // namespace Dmrg /*@}*/ #endif //DMRG_KITAEV_H dmrgpp-6.02/src/Models/Kitaev/ParametersKitaev.h000066400000000000000000000120061414604301300216020ustar00rootroot00000000000000/* Copyright (c) 2009-2012-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersKitaev.h * * Contains the parameters for the Kitaev model and function * to read them from a file (started March 2018) * */ #ifndef PARAMETERS_KITAEV_H #define PARAMETERS_KITAEV_H #include "Vector.h" #include "ParametersModelBase.h" namespace Dmrg { //! Kitaev Model Parameters // no connectors here, connectors are handled by the geometry template struct ParametersKitaev : public ParametersModelBase { typedef ParametersModelBase BaseType; typedef typename PsimagLite::Vector::Type VectorRealType; template ParametersKitaev(IoInputType& io) : BaseType(io,false) { SizeType nsites = 0; io.readline(nsites, "TotalNumberOfSites="); try { magneticFieldX.resize(nsites, 0.0); io.read(magneticFieldX,"MagneticFieldX"); std::cerr<<"Has MagneticFieldX \n"; } catch (std::exception&) { magneticFieldX.clear(); } try { magneticFieldY.resize(nsites, 0.0); io.read(magneticFieldY,"MagneticFieldY"); std::cerr<<"Has MagneticFieldY \n"; } catch (std::exception&) { magneticFieldY.clear(); } try { magneticFieldZ.resize(nsites, 0.0); io.read(magneticFieldZ,"MagneticFieldZ"); std::cerr<<"Has MagneticFieldZ \n"; } catch (std::exception&) { magneticFieldZ.clear(); } } template SizeType memResolv(SomeMemResolvType&, SizeType, PsimagLite::String = "") const { return 0; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersKitaev"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/magneticFieldX", magneticFieldX); io.write(label + "/magneticFieldY", magneticFieldY); io.write(label + "/magneticFieldZ", magneticFieldZ); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersKitaev& parameters) { os<<"MagneticFieldX="< class Kondo : public ModelBaseType { typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename ModelBaseType::VectorOperatorType VectorOperatorType; typedef typename ModelBaseType::VectorQnType VectorQnType; typedef typename ModelBaseType::BlockType VectorSizeType; typedef typename ModelBaseType::RealType RealType; typedef typename ModelBaseType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::QnType QnType; typedef typename ModelHelperType::BasisType BasisType; typedef ParametersKondo ParametersKondoType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef std::pair PairSizeType; public: Kondo(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry, PsimagLite::String option) : ModelBaseType(solverParams, geometry, io), solverParams_(solverParams), modelParams_(io, option) { SizeType nsym = this->targetQuantum().sizeOfOther(); if (nsym == 0) { std::cout<<"Kondo: Nothing conserved\n"; } else if (nsym == 1) { std::cout<<"Kondo: Only Fermionic Sz + Bosonic Sz conserved\n"; std::cerr<<"Kondo: Only Fermionic Sz + Bosonic Sz conserved\n"; if (modelParams_.electronHx != 0 || modelParams_.kondoHx != 0) err("Kondo: To use this symmetry electronHx and kondoHx must both be zero\n"); } else if (nsym == 2) { std::cout<<"Kondo: Fermionic + Bosonic Sz, and TotalElectrons conserved\n"; if (modelParams_.extended != ParametersKondoType::ExtEnum::NONE) err("Kondo: Extended cannot be used with these symmetries\n"); } SizeType sitesTimesDof = 2 + modelParams_.twiceTheSpin; SizeType total = (1<params().model; io.createGroup(label); modelParams_.write(label, io); io.write(label + "/basis_", basis_); io.write(label + "/ops_", ops_); } // Fill SparseMatrixType with the on-site Hamiltonian terms in the on-site basis // Give SparseMatrixType in the order you chose to give the // operators in setOperatorMatrices // The RealType contain the physical time in case your onsite terms // depend on it void addDiagonalsInNaturalBasis(SparseMatrixType& hmatrix, const VectorSizeType& block, RealType) const { SizeType n = block.size(); assert(n == 1); SizeType linSize = ModelBaseType::superGeometry().numberOfSites(); SparseMatrixType tmpMatrix; SparseMatrixType niup; SparseMatrixType nidown; for (SizeType i = 0; i < n; ++i) { SizeType ind = block[i]; const OperatorType& cup = ModelBaseType::naturalOperator("c", ind, 0); const OperatorType& cdown = ModelBaseType::naturalOperator("c", ind, 1); assert(ops_.size() > 1 + i*4); // onsite U hubbard //n_i up transposeConjugate(tmpMatrix, cup.getCRS()); multiply(niup, tmpMatrix, cup.getCRS()); //n_i down transposeConjugate(tmpMatrix, cdown.getCRS()); multiply(nidown, tmpMatrix, cdown.getCRS()); multiply(tmpMatrix,niup,nidown); assert(ind < modelParams_.hubbardU.size()); RealType tmp = modelParams_.hubbardU[ind]; hmatrix += tmp*tmpMatrix; // V_iup term assert(ind + 1*linSize < modelParams_.potentialV.size()); tmp = modelParams_.potentialV[ind + 0*linSize]; hmatrix += tmp*niup; // V_idown term tmp = modelParams_.potentialV[ind + 1*linSize]; hmatrix += tmp*nidown; // Kondo term assert(ind < modelParams_.kondoJ.size()); hmatrix += modelParams_.kondoJ[ind] * kondoOnSite(ind, niup, nidown); // EARLY CONTINUE HERE if (modelParams_.extended == ParametersKondoType::ExtEnum::NONE) continue; const OperatorType& Splus = ModelBaseType::naturalOperator("Splus", 0, 0); hmatrix += modelParams_.kondoHx*Splus.getCRS(); transposeConjugate(tmpMatrix, Splus.getCRS()); hmatrix += modelParams_.kondoHx*tmpMatrix; transposeConjugate(tmpMatrix, cup.getCRS()); multiply(niup, tmpMatrix, cdown.getCRS()); hmatrix += modelParams_.electronHx*niup; transposeConjugate(tmpMatrix, cdown.getCRS()); multiply(nidown, tmpMatrix, cup.getCRS()); hmatrix += modelParams_.electronHx*nidown; multiply(niup, cup.getCRS(), cdown.getCRS()); hmatrix += modelParams_.pairingField*niup; transposeConjugate(nidown, niup); hmatrix += modelParams_.pairingField*nidown; } } protected: void fillLabeledOperators(VectorQnType& qns) { qns = qn_; assert(ops_.size() >= 5); OpsLabelType& c = this->createOpsLabel("c"); for (SizeType sigma = 0; sigma < 2; ++sigma) c.push(ops_[sigma]); this->createOpsLabel("Splus").push(ops_[2]); this->createOpsLabel("Sz").push(ops_[3]); this->createOpsLabel("n").push(ops_[4]); this->makeTrackable("c"); this->makeTrackable("Splus"); this->makeTrackable("Sz"); this->makeTrackable("n"); { SparseMatrixType mup = ops_[0].getCRS(); SparseMatrixType mupT; transposeConjugate(mupT, mup); SparseMatrixType mdown = ops_[1].getCRS(); SparseMatrixType mdownT; transposeConjugate(mdownT, mdown); SparseMatrixType szMatrix = mdownT*mdown; szMatrix *= (-1.0); szMatrix += mupT*mup; szMatrix *= 0.5; PairSizeType zeroPair(0, 0); typename OperatorType::Su2RelatedType su2Related; this->createOpsLabel("sz").push(OperatorType(szMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, zeroPair, 1, su2Related)); } } void fillModelLinks() { const bool isSu2 = BasisType::useSu2Symmetry(); ModelTermType& hop = ModelBaseType::createTerm("hopping"); ModelTermType& spsm = ModelBaseType::createTerm("SplusSminus"); ModelTermType& szsz = ModelBaseType::createTerm("SzSz"); ModelTermType& ninj = ModelBaseType::createTerm("ninj"); for (SizeType spin = 0; spin < 2; ++spin) { OpForLinkType c("c", spin); typename ModelTermType::Su2Properties su2properties(1, (spin == 1) ? -1 : 1, spin); hop.push(c, 'N', c, 'C', su2properties); } auto valueModiferTerm0 = [isSu2](ComplexOrRealType& value) { value *= (isSu2) ? -0.5 : 0.5;}; auto valueModifierTermOther = [isSu2](ComplexOrRealType& value) { if (isSu2) value = -value;}; OpForLinkType splus("Splus"); OpForLinkType sz("Sz"); OpForLinkType n("n"); typename ModelTermType::Su2Properties su2properties(2, -1, 2); spsm.push(splus, 'N', splus, 'C', valueModiferTerm0, su2properties); if (!isSu2) { typename ModelTermType::Su2Properties su2properties(2, 0.5); szsz.push(sz, 'N', sz, 'N', su2properties); } else { typename ModelTermType::Su2Properties su2properties(2, -1, 2); spsm.push(splus, 'N', splus, 'C', valueModifierTermOther, su2properties); } ninj.push(n, 'N', n, 'N'); // pairing terms added on January 18th, 2021 // EARLY EXIT HERE if (modelParams_.extended != ParametersKondoType::ExtEnum::EXTENDED2) return; OpForLinkType cup("c", 0); OpForLinkType cdown("c", 1); ModelTermType& pud = ModelBaseType::createTerm("pairingud"); pud.push(cup, 'C', cdown, 'C'); ModelTermType& pdu = ModelBaseType::createTerm("pairingdu"); pdu.push(cdown, 'C', cup, 'C'); ModelTermType& puu = ModelBaseType::createTerm("pairinguu"); puu.push(cup, 'C', cup, 'C'); ModelTermType& pdd = ModelBaseType::createTerm("pairingdd"); pdd.push(cdown, 'C', cdown, 'C'); } private: void setSymmetryRelatedInternal(VectorQnType& qns, const VectorSizeType& basis) const { qns.resize(basis.size(), QnType::zero()); SizeType nsym = this->targetQuantum().sizeOfOther(); VectorSizeType other(nsym); if (nsym == 1) QnType::ifPresentOther0IsElectrons = false; // bit 0 <--- up electron // bit 1 <--- down electron // bit 2 <--- localized spin down for (SizeType i = 0; i < basis.size(); ++i) { PairSizeType jmpair(0,0); // nup SizeType electronsUp = (basis[i] & 1) ? 1 : 0; // ndown SizeType electronsDown = (basis[i] & 2) ? 1 : 0; SizeType electrons = electronsDown + electronsUp; SizeType bosonicSz = basis[i]; bosonicSz >>= 2; // delete electronic part if (other.size() == 1) other[0] = electronsUp + bosonicSz; if (other.size() == 2) { other[0] = electrons; other[1] = electronsUp + bosonicSz; } bool sign = electrons & 1; qns[i] = QnType(sign, other, jmpair, 0); } } void setOperatorMatricesInternal() { typename OperatorType::Su2RelatedType su2related; for (SizeType sigma = 0; sigma < 2; ++sigma) { SparseMatrixType tmpMatrix = findCmatrix(sigma, basis_); OperatorType myOp(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::FERMION, typename OperatorType::PairType(0, 0), 1, su2related); ops_.push_back(myOp); } // now the S+ and Sz for local spins SparseMatrixType m = findSplusMatrix(basis_); OperatorType sp(m, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0, 0), 1, su2related); ops_.push_back(sp); m = findSzMatrix(basis_); OperatorType sz(m, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0, 0), 1, su2related); ops_.push_back(sz); m = findNmatrix(basis_); OperatorType nm(m, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0, 0), 1, su2related); ops_.push_back(nm); } //! Find c^\dagger_isigma in the natural basis natBasis SparseMatrixType findCmatrix(SizeType sigma, const VectorSizeType& basis) const { SizeType n = basis.size(); const ComplexOrRealType zero = 0.0; MatrixType cm(n, n, zero); SizeType mask = (1 << sigma); for (SizeType i = 0; i < n; ++i) { SizeType ket = basis[i]; SizeType bra = ket; if (ket & mask) { } else { bra ^= mask; int j = PsimagLite::indexOrMinusOne(basis, bra); if (j < 0) err("findCmatrix\n"); cm(i, j) = sign(ket, sigma); } } SparseMatrixType creationMatrix(cm); return creationMatrix; } //! Calculate fermionic sign when applying operator c^\dagger_{i\sigma} to basis state ket RealType sign(const SizeType& ket, SizeType sigma) const { return (sigma == 1 && (ket & 1)) ? -1 : 1; } //! Find S^+ in the natural basis natBasis SparseMatrixType findSplusMatrix(const VectorSizeType& basis) const { SizeType site = 0; SizeType total = basis.size(); MatrixType cm(total, total, 0); RealType j = 0.5*modelParams_.twiceTheSpin; SizeType bitsForOneSite = utils::bitSizeOfInteger(modelParams_.twiceTheSpin); SizeType bits = 1 + ProgramGlobals::logBase2(modelParams_.twiceTheSpin); SizeType mask = 1; mask <<= bits; // mask = 2^bits assert(mask > 0); mask--; for (SizeType i = 0; i < total; ++i) { SizeType ket = basis[i]; // save and discard electronic part SizeType electronic = ket & 3; ket >>= 2; SizeType ketsite = ket & mask; ketsite >>= (site*bitsForOneSite); assert(ketsite == ket); SizeType brasite = ketsite + 1; if (brasite >= modelParams_.twiceTheSpin + 1) continue; SizeType bra = ket & (~mask); assert(bra == 0); brasite <<= (site*bitsForOneSite); bra |= brasite; assert(bra == brasite); RealType m = ketsite - j; RealType x = j*(j+1)-m*(m+1); assert(x>=0); // restore electronic part to bra bra <<= 2; bra |= electronic; int j = PsimagLite::indexOrMinusOne(basis, bra); if (j < 0) err("findCmatrix\n"); cm(i, j) = sqrt(x); } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } //! Find S^z_i in the natural basis natBasis SparseMatrixType findSzMatrix(const VectorSizeType& basis) const { SizeType site = 0; SizeType total = basis.size(); MatrixType cm(total, total, 0); RealType j = 0.5*modelParams_.twiceTheSpin; SizeType bitsForOneSite = utils::bitSizeOfInteger(modelParams_.twiceTheSpin); SizeType bits = ProgramGlobals::logBase2(modelParams_.twiceTheSpin) + 1; SizeType mask = 1; mask <<= bits; // mask = 2^bits assert(mask > 0); mask--; mask <<= (site*bitsForOneSite); for (SizeType i = 0; i < total; ++i) { SizeType ket = basis[i]; // discard electronic part ket >>= 2; SizeType ketsite = ket & mask; ketsite >>= (site*bitsForOneSite); assert(ketsite == ket); RealType m = ketsite - j; cm(i, i) = m; } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } //! Find n in the natural basis natBasis SparseMatrixType findNmatrix(const VectorSizeType& basis) const { const ComplexOrRealType zero = 0.0; SizeType n = basis.size(); MatrixType cm(n, n, zero); VectorSizeType mask(2, 0); mask[0] = 1; mask[1] = 2; for (SizeType i = 0; i < n; ++i) { SizeType ket = basis[i]; for (SizeType sigma = 0; sigma < 2; ++sigma) { if (ket & mask[sigma]) cm(i, i) += 1.0; } } SparseMatrixType creationMatrix(cm); return creationMatrix; } SparseMatrixType kondoOnSite(SizeType, const SparseMatrixType& niup, const SparseMatrixType& nidown) const { // cdu[d] is actually cu[d] not cu[d] dagger. const SparseMatrixType& cdu = ops_[0].getCRS(); const SparseMatrixType& cdd = ops_[1].getCRS(); const SparseMatrixType& Sp = ops_[2].getCRS(); const SparseMatrixType& Sz = ops_[3].getCRS(); SparseMatrixType Sm; transposeConjugate(Sm, Sp); SparseMatrixType sz = niup; const RealType minusOne = -1.0; const RealType zeroPointFive = 0.5; sz += minusOne*nidown; sz *= zeroPointFive; SparseMatrixType cu; transposeConjugate(cu, cdu); SparseMatrixType cd; transposeConjugate(cd, cdd); SparseMatrixType sp; multiply(sp, cdu, cd); SparseMatrixType sm; transposeConjugate(sm, sp); #ifndef NDEBUG SparseMatrixType smtest; multiply(smtest, cdd, cu); assert(smtest == sm); #endif SparseMatrixType m = sp*Sm; m += sm*Sp; m *= zeroPointFive; m += sz*Sz; return m; } const SolverParamsType& solverParams_; ParametersKondoType modelParams_; VectorSizeType basis_; VectorQnType qn_; VectorOperatorType ops_; }; } #endif dmrgpp-6.02/src/Models/Kondo/ParametersKondo.h000066400000000000000000000046541414604301300212720ustar00rootroot00000000000000#ifndef PARAMETERSKONDO_H #define PARAMETERSKONDO_H #include "ParametersModelBase.h" namespace Dmrg { template struct ParametersKondo : public ParametersModelBase { typedef ParametersModelBase BaseType; typedef typename PsimagLite::Vector::Type VectorRealType; enum class ExtEnum {NONE, EXTENDED, EXTENDED2}; template ParametersKondo(IoInputType& io, PsimagLite::String option) : BaseType(io, false), extended(ExtEnum::NONE) { if (option == "Ex") { extended = ExtEnum::EXTENDED; std::cout<<"Ex detected\n"; } else if (option == "Ex2") { extended = ExtEnum::EXTENDED2; std::cout<<"Ex2 detected\n"; } else if (option != "") { err("ParametersKondo: Invalid option " + option + "\n"); } SizeType nsites = 0; io.readline(nsites, "TotalNumberOfSites="); io.readline(twiceTheSpin,"HeisenbergTwiceS="); if (twiceTheSpin != 1) err("ParametersKondo accepts only HeisenbergTwiceS=1 for now\n"); io.read(potentialV, "potentialV"); checkVector(potentialV, "potentialV", 2*nsites); io.read(hubbardU, "hubbardU"); checkVector(hubbardU, "hubbardU", nsites); io.read(kondoJ, "kondoJ"); checkVector(kondoJ, "kondoJ", nsites); if (extended == ExtEnum::NONE) return; io.readline(kondoHx, "KondoHx="); io.readline(electronHx, "ElectronHx="); io.readline(pairingField, "PairingField="); } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersKondo"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/twiceTheSpin", twiceTheSpin); io.write(label + "/potentialV", potentialV); io.write(label + "/hubbardU", hubbardU); io.write(label + "/kondoJ", kondoJ); io.write(label + "/extended", extended); if (extended == ExtEnum::NONE) return; io.write(label + "/kondoHx", kondoHx); io.write(label + "/electronHx", electronHx); io.write(label + "/pairingField", pairingField); } SizeType twiceTheSpin; VectorRealType potentialV; VectorRealType hubbardU; VectorRealType kondoJ; ExtEnum extended; RealType kondoHx; RealType electronHx; RealType pairingField; private: void checkVector(const VectorRealType& v, PsimagLite::String str, SizeType n) { if (v.size() == n) return; err("Vector " + str + " should be of size " + ttos(n) + "\n"); } }; } #endif // PARAMETERSKONDO_H dmrgpp-6.02/src/Models/SpinOrbital/000077500000000000000000000000001414604301300171665ustar00rootroot00000000000000dmrgpp-6.02/src/Models/SpinOrbital/ParametersSpinOrbital.h000066400000000000000000000105541414604301300236160ustar00rootroot00000000000000/* Copyright (c) 2009-2021, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersSpinOrbital.h * * Contains the parameters for the Heisenberg model and function * to read them from a file * */ #ifndef DMRG_PARAMS_SPIN_ORBITAL_H #define DMRG_PARAMS_SPIN_ORBITAL_H #include "Vector.h" #include "../../Engine/ParametersModelBase.h" namespace Dmrg { template struct ParametersSpinOrbital : public ParametersModelBase { typedef ParametersModelBase BaseType; typedef typename PsimagLite::Vector::Type VectorRealType; // no connectors here, connectors are handled by the geometry template ParametersSpinOrbital(IoInputType& io) : BaseType(io, false) { io.readline(twiceS, "SpinTwiceS="); io.readline(twiceL, "OrbitalTwiceS="); io.readline(lambda1, "LambdaOne="); io.readline(lambda2, "LambdaTwo="); } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersSpinOrbital"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/SpinTwiceS", twiceS); io.write(label + "/OrbitalTwiceS", twiceL); io.write(label + "/LambdaOne", lambda1); io.write(label + "/LambdaTwo", lambda2); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersSpinOrbital& parameters) { os<<"SpinTwiceS="< #include "CrsMatrix.h" #include "../../Engine/VerySparseMatrix.h" #include "../../Engine/ProgramGlobals.h" #include "../../Engine/Utils.h" #include "ParametersSpinOrbital.h" #include "Sort.h" namespace Dmrg { template class SpinOrbitalModel : public ModelBaseType { public: typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::BasisType BasisType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::QnType QnType; typedef typename ModelBaseType::VectorQnType VectorQnType; typedef typename ModelBaseType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef unsigned int long WordType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename ModelBaseType::VectorRealType VectorRealType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef typename PsimagLite::Vector::Type HilbertBasisType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::PairType PairType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelBaseType::MyBasis MyBasis; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelLinksType ModelLinksType; typedef ParametersSpinOrbital ParametersSpinOrbitalType; SpinOrbitalModel(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry, PsimagLite::String option) : ModelBaseType(solverParams, geometry, io), modelParams_(io), superGeometry_(geometry), hasLastTerm_(true) { HilbertBasisType natBasis; setBasis(natBasis); MatrixType splus = findSplusMatrices(natBasis, 0); MatrixType lplus = findSplusMatrices(natBasis, 1); MatrixType lminus; transposeConjugate(lminus, lplus); MatrixType tmp = splus*lminus; MatrixType tmp2; transposeConjugate(tmp2, tmp); MatrixType tmp3 = tmp; tmp3 += tmp2; tmp3 *= 0.5; MatrixType sz = findSzMatrices(natBasis, 0); MatrixType lz = findSzMatrices(natBasis, 1); tmp = sz*lz; sDotL_ = tmp3 + tmp; if (option == "NoLastTerm") hasLastTerm_ = false; else if (option != "") err(PsimagLite::String("SpinOrbitalModel or SpinOrbitalModelNoLastTerm ") + "but not " + option + "\n"); } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParams_.write(label, io); } void addDiagonalsInNaturalBasis(SparseMatrixType& hmatrix, const BlockType& block, RealType) const { assert(block.size() == 1); // SizeType site = block[0]; // lambda1 and lambda2 have no site depedence MatrixType tmp = sDotL_; tmp *= modelParams_.lambda1; MatrixType sdotlSquared = modelParams_.lambda2*sDotL_*sDotL_; tmp += sdotlSquared; SparseMatrixType tmp3(tmp); hmatrix += tmp3; } protected: // Trackable Operators are // 0 S+ // 1 Sz // 2 L+ // 3 Lz // 4 L+2 // 5 L+L- // 6 L-L+ // 7 L+Lz // 8 Lz2 // 9 S+L+ // 10 S+L- // 11 S+Lz // 12 L+Sz // 13 SzLz // more will be needed for J3L term // // // Basis is (S, L) // 0 -s -l // 1 -s -l + 1 // ... // (2s + 1)(2l + 1) s l // void fillLabeledOperators(VectorQnType& qns) { HilbertBasisType natBasis; setBasis(natBasis); setSymmetryRelated(qns, natBasis); // this creates trackables 0 to 3 for (SizeType orbital = 0; orbital < 2; ++orbital) { PsimagLite::String sOrL = (orbital == 0) ? "s" : "l"; // Set the operators S^+_i in the natural basis MatrixType tmpMatrix = findSplusMatrices(natBasis, orbital); typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(tmpMatrix), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel(sOrL + "plus").push(myOp); this->makeTrackable(sOrL + "plus"); myOp.dagger(); this->createOpsLabel(sOrL + "minus").push(myOp); // Set the operators S^z_i in the natural basis tmpMatrix = findSzMatrices(natBasis, orbital); typename OperatorType::Su2RelatedType su2related2; OperatorType myOp2(SparseMatrixType(tmpMatrix), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related2); this->createOpsLabel(sOrL + "z").push(myOp2); this->makeTrackable(sOrL + "z"); } MatrixType lplus = findSplusMatrices(natBasis, 1); //lplus MatrixType lminus; transposeConjugate(lminus, lplus); MatrixType lpluslminus = lplus*lminus; MatrixType lminuslplus = lminus*lplus; MatrixType lplusSquared = lplus*lplus; MatrixType lz = findSzMatrices(natBasis, 1); // lz MatrixType lplusLz = lplus*lz; MatrixType lzSquared = lz*lz; { typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(lplusSquared), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("lplusSquared").push(myOp); this->makeTrackable("lplusSquared"); } { typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(lpluslminus), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("lpluslminus").push(myOp); this->makeTrackable("lpluslminus"); } { typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(lminuslplus), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("lminuslplus").push(myOp); this->makeTrackable("lminuslplus"); } { typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(lplusLz), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("lplusLz").push(myOp); this->makeTrackable("lplusLz"); } { typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(lzSquared), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("lzSquared").push(myOp); this->makeTrackable("lzSquared"); } MatrixType splus = findSplusMatrices(natBasis, 0); //splus MatrixType sz = findSzMatrices(natBasis, 0); // sz MatrixType spluslplus = splus*lplus; MatrixType spluslminus = splus*lminus; MatrixType splusLz = splus*lz; MatrixType lplusSz = lplus*sz; MatrixType szlz = sz*lz; { typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(spluslplus), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("spluslplus").push(myOp); this->makeTrackable("spluslplus"); } { typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(spluslminus), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("spluslminus").push(myOp); this->makeTrackable("spluslminus"); } { typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(splusLz), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("splusLz").push(myOp); this->makeTrackable("splusLz"); } { typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(lplusSz), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("lplusSz").push(myOp); this->makeTrackable("lplusSz"); } { typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(szlz), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("szlz").push(myOp); this->makeTrackable("szlz"); } if (!hasLastTerm_) return; // <--- EARLY EXIT HERE { MatrixType tmp = splus*lplusSquared; typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(tmp), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("d0").push(myOp); this->makeTrackable("d0"); } { MatrixType tmp = spluslminus*lminus; typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(tmp), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("d1").push(myOp); this->makeTrackable("d1"); } { MatrixType tmp = splus*lplusLz; typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(tmp), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("d2").push(myOp); this->makeTrackable("d2"); } { MatrixType tmp = splusLz*lminus; typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(tmp), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("d3").push(myOp); this->makeTrackable("d3"); } { MatrixType tmp = splus*lpluslminus; typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(tmp), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("f0").push(myOp); this->makeTrackable("f0"); } { MatrixType tmp = splus*lminuslplus; typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(tmp), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("f1").push(myOp); this->makeTrackable("f1"); } { MatrixType tmp = splus*lzSquared; typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(tmp), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("g0").push(myOp); this->makeTrackable("g0"); } { MatrixType tmp = sz*lplusSquared; typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(tmp), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("g1").push(myOp); this->makeTrackable("g1"); } { MatrixType tmp = sz*lplusLz; typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(tmp), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("wprime").push(myOp); this->makeTrackable("wprime"); } { MatrixType tmp = sz*lpluslminus; typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(tmp), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("vprime").push(myOp); this->makeTrackable("vprime"); } { MatrixType tmp = sz*lminuslplus; typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(tmp), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("xprime").push(myOp); this->makeTrackable("xprime"); } { MatrixType tmp = sz*lzSquared; typename OperatorType::Su2RelatedType su2related; OperatorType myOp(SparseMatrixType(tmp), ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("z").push(myOp); this->makeTrackable("z"); } } // Connectors and Factors (if factor is missing, 1 is assumed) // HC means Hermitian conjugate // Class is a letter starting with a // // a S+ S+ N C .5 // a Sz Sz N N // // b L+ L+ N C .5 // b Lz Lz N N // // c L+2 L+2 N C .25 // c L+L- L+L- N N .25 // c L-L+ L-L+ N N .25 // c L+Lz L+Lz N C // c L+Lz L+ N C 0.5 // c (HC) of the above 0.5 // c L+ L+Lz N C 0.5 // c (HC) of the above 0.5 // c Lz2 Lz2 N N // // d S+L+ S+L+ N C .25 // d (HC) of the above // d S+L- S+L- N C .25 // d (HC) of the above // d S+Lz S+Lz N C .5 // d (HC) of the above // d L+Sz L+Sz N C .5 // d (HC) of the above // d SzLz SzLz N N // // more will be needed for J3L term void fillModelLinks() { auto valueModiferTerm0 = [](ComplexOrRealType& value) { value *= 0.5;}; auto valueModiferTerm1 = [](ComplexOrRealType& value) { value *= 0.25;}; // this creates connections a and b for (SizeType orbital = 0; orbital < 2; ++orbital) { PsimagLite::String sOrL = (orbital == 0) ? "s" : "l"; ModelTermType& sdotS = ModelBaseType::createTerm(sOrL + "Dot" + sOrL); OpForLinkType splus(sOrL + "plus"); sdotS.push(splus, 'N', splus, 'C', valueModiferTerm0); OpForLinkType sz(sOrL + "z"); sdotS.push(sz, 'N', sz, 'N'); } // this creates connections in c listed above ModelTermType& ldotLSquared = ModelBaseType::createTerm("ldotLSquared", false); OpForLinkType lplusSquared("lplusSquared"); ldotLSquared.push(lplusSquared, 'N', lplusSquared, 'C', valueModiferTerm1); ldotLSquared.push(lplusSquared, 'C', lplusSquared, 'N', valueModiferTerm1); OpForLinkType lpluslminus("lpluslminus"); OpForLinkType lminuslplus("lminuslplus"); ldotLSquared.push(lpluslminus, 'N', lminuslplus, 'N', valueModiferTerm1); ldotLSquared.push(lminuslplus, 'N', lpluslminus, 'N', valueModiferTerm1); OpForLinkType lplusLz("lplusLz"); ldotLSquared.push(lplusLz, 'N', lplusLz, 'C'); ldotLSquared.push(lplusLz, 'C', lplusLz, 'N'); OpForLinkType lplus("lplus"); ldotLSquared.push(lplusLz, 'N', lplus, 'C', valueModiferTerm0); ldotLSquared.push(lplus, 'N', lplusLz, 'C', valueModiferTerm0); ldotLSquared.push(lplusLz, 'C', lplus, 'N', valueModiferTerm0); ldotLSquared.push(lplus, 'C', lplusLz, 'N', valueModiferTerm0); OpForLinkType lzSquared("lzSquared"); ldotLSquared.push(lzSquared, 'N', lzSquared, 'N'); // this creates connections in d listed above ModelTermType& ldotLsDotS = ModelBaseType::createTerm("ldotLsDotS"); OpForLinkType spluslplus("spluslplus"); ldotLsDotS.push(spluslplus, 'N', spluslplus, 'C', valueModiferTerm1); OpForLinkType spluslminus("spluslminus"); ldotLsDotS.push(spluslminus, 'N', spluslminus, 'C', valueModiferTerm1); OpForLinkType splusLz("splusLz"); ldotLsDotS.push(splusLz, 'N', splusLz, 'C', valueModiferTerm0); OpForLinkType lplusSz("lplusSz"); ldotLsDotS.push(lplusSz, 'N', lplusSz, 'C', valueModiferTerm0); OpForLinkType szlz("szlz"); ldotLsDotS.push(szlz, 'N', szlz, 'N'); // this creates connections in e listed above if (!hasLastTerm_) return; // <--- EARLY EXIT HERE auto valueModiferTerm2 = [](ComplexOrRealType& value) { value *= 0.125;}; ModelTermType& sdotSlDotLSquared = ModelBaseType::createTerm("sdotSlDotLSquared"); OpForLinkType d0("d0"); sdotSlDotLSquared.push(d0, 'N', d0, 'C', valueModiferTerm2); OpForLinkType d1("d1"); sdotSlDotLSquared.push(d1, 'N', d1, 'C', valueModiferTerm2); OpForLinkType d2("d2"); sdotSlDotLSquared.push(d2, 'N', d2, 'C', valueModiferTerm0); OpForLinkType d3("d3"); sdotSlDotLSquared.push(d3, 'N', d3, 'C', valueModiferTerm0); OpForLinkType f0("f0"); OpForLinkType f1("f1"); sdotSlDotLSquared.push(f0, 'N', f1, 'C', valueModiferTerm2); sdotSlDotLSquared.push(f1, 'N', f0, 'C', valueModiferTerm2); sdotSlDotLSquared.push(d2, 'N', spluslplus, 'C', valueModiferTerm1); sdotSlDotLSquared.push(d3, 'N', spluslminus, 'C', valueModiferTerm1); sdotSlDotLSquared.push(spluslplus, 'N', d2, 'C', valueModiferTerm1); sdotSlDotLSquared.push(spluslminus, 'N', d3, 'C', valueModiferTerm1); OpForLinkType g0("g0"); sdotSlDotLSquared.push(g0, 'N', g0, 'C', valueModiferTerm0); OpForLinkType g1("g1"); sdotSlDotLSquared.push(g1, 'N', g1, 'C', valueModiferTerm1); OpForLinkType vprime("vprime"); OpForLinkType xprime("xprime"); sdotSlDotLSquared.push(vprime, 'N', xprime, 'N', valueModiferTerm1); sdotSlDotLSquared.push(xprime, 'N', vprime, 'N', valueModiferTerm1); OpForLinkType wprime("wprime"); sdotSlDotLSquared.push(wprime, 'N', wprime, 'C'); sdotSlDotLSquared.push(wprime, 'N', lplusSz, 'C', valueModiferTerm0); sdotSlDotLSquared.push(lplusSz, 'N', wprime, 'C', valueModiferTerm0); OpForLinkType z("z"); sdotSlDotLSquared.push(z, 'N', z, 'N'); } private: void setBasis(HilbertBasisType& natBasis) const { const SizeType total1 = modelParams_.twiceS + 1; const SizeType total2 = modelParams_.twiceL + 1; const SizeType total = total1*total2; natBasis.resize(total); for (SizeType i = 0; i < total; ++i) natBasis[i] = i; orderOneSiteBasis(natBasis); } //! Find S^+_site in the natural basis natBasis MatrixType findSplusMatrices(const HilbertBasisType& natBasis, SizeType orbital) const { SizeType total = natBasis.size(); MatrixType cm(total, total); const SizeType twiceTheSpin = (orbital == 0) ? modelParams_.twiceS : modelParams_.twiceL; RealType j = 0.5*twiceTheSpin; for (SizeType ii = 0; ii < total; ++ii) { const SizeType ket = natBasis[ii]; if (mPlusJ(ket, orbital) >= twiceTheSpin) continue; const SizeType mPlusj0 = mPlusJ(ket, 0); const SizeType mPlusj1 = mPlusJ(ket, 1); SizeType bra = (orbital == 0) ? packM(mPlusj0 + 1, mPlusj1) : packM(mPlusj0, mPlusj1 + 1); RealType mPlusj = mPlusJ(ket, orbital); RealType m = mPlusj - j; RealType x = j*(j + 1) - m*(m + 1); assert(x >= 0); // bra = natBasis[jj]; typename HilbertBasisType::const_iterator it = std::find(natBasis.begin(), natBasis.end(), bra); assert(it != natBasis.end()); const SizeType jj = it - natBasis.begin(); cm(jj, ii) = sqrt(x); } return cm; } //! Find S^z_i in the natural basis natBasis MatrixType findSzMatrices(const HilbertBasisType& natBasis, SizeType orbital) const { SizeType total = natBasis.size(); MatrixType cm(total, total); const SizeType twiceTheSpin = (orbital == 0) ? modelParams_.twiceS : modelParams_.twiceL; RealType j = 0.5*twiceTheSpin; for (SizeType ii = 0; ii < total; ++ii) { SizeType ket = natBasis[ii]; RealType mPlusj = mPlusJ(ket, orbital); RealType m = mPlusj - j; cm(ii, ii) = m; } return cm; } // ket = sz' + lz'*(2s + 1) SizeType mPlusJ(SizeType ket, SizeType orbital) const { div_t q = div(static_cast(ket), static_cast(modelParams_.twiceS + 1)); assert(static_cast(q.rem) <= modelParams_.twiceS); assert(static_cast(q.quot) <= modelParams_.twiceL); return (orbital == 0) ? q.rem : q.quot; } SizeType packM(SizeType szp, SizeType lzp) const { assert(szp <= modelParams_.twiceS); assert(lzp <= modelParams_.twiceL); return szp + lzp*(modelParams_.twiceS + 1); } // Here the conserved quantity is (sz + s) + (lz + l) // Note that sz + s is always an integer, even if s is half integer // Note that lz + l is always an integer, even if l is half integer void setSymmetryRelated(VectorQnType& qns, const HilbertBasisType& basis) const { // find j,m and flavors (do it by hand since we assume n==1) // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType typedef std::pair PairType; const SizeType nsymms = ModelBaseType::targetQuantum().sizeOfOther(); if (nsymms > 2) err(PsimagLite::String(__FILE__) + ": must have 0, 1, or 2 symmetries " + "not " + ttos(nsymms) + " symmetries.\n"); if (nsymms == 2) { if (modelParams_.lambda1 != 0 || modelParams_.lambda2 != 0) err(PsimagLite::String(__FILE__) + ": SpinOrbit present; cannot conserve " + "S and L separately\n"); } VectorSizeType other; if (nsymms > 0) other.resize(nsymms); QnType::ifPresentOther0IsElectrons = false; qns.resize(basis.size(), QnType::zero()); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair(0, 0); SizeType mOfSpinPlusJ = mPlusJ(basis[i], 0); SizeType mOfOrbitalPlusJ = mPlusJ(basis[i], 1); if (nsymms == 1) { other[0] = mOfSpinPlusJ + mOfOrbitalPlusJ; } else if (nsymms == 2) { other[0] = mOfSpinPlusJ; other[1] = mOfOrbitalPlusJ; } else { assert(nsymms == 0); } SizeType flavor = 0; qns[i] = QnType(false, other, jmpair, flavor); } } void orderOneSiteBasis(HilbertBasisType& basis) const { const SizeType n = basis.size(); VectorSizeType symm(n); for (SizeType i = 0; i < n; ++i) { SizeType mOfSpinPlusJ = mPlusJ(basis[i], 0); SizeType mOfOrbitalPlusJ = mPlusJ(basis[i], 1); symm[i] = mOfSpinPlusJ + mOfOrbitalPlusJ; } PsimagLite::Sort sort; VectorSizeType iperm(n); sort.sort(symm, iperm); HilbertBasisType basisSorted(n); for (SizeType i = 0; i < n; ++i) basisSorted[i] = basis[iperm[i]]; basisSorted.swap(basis); } ParametersSpinOrbitalType modelParams_; const SuperGeometryType& superGeometry_; MatrixType sDotL_; bool hasLastTerm_; }; // class SpinOrbitalModel } // namespace Dmrg /*@}*/ #endif //DMRG_SPIN_ORBITAL_MODEL_H dmrgpp-6.02/src/Models/Su3/000077500000000000000000000000001414604301300154125ustar00rootroot00000000000000dmrgpp-6.02/src/Models/Su3/ParametersSu3.h000066400000000000000000000072751414604301300202740ustar00rootroot00000000000000/* Copyright (c) 2009-2012-2021, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersSu3.h * * Contains the parameters for the Heisenberg model and function * to read them from a file * */ #ifndef DMRG_PARAMS_SU3_H #define DMRG_PARAMS_SU3_H #include "Vector.h" #include "../../Engine/ParametersModelBase.h" namespace Dmrg { template struct ParametersSu3 : public ParametersModelBase { typedef ParametersModelBase BaseType; typedef typename PsimagLite::Vector::Type VectorRealType; // no connectors here, connectors are handled by the geometry template ParametersSu3(IoInputType& io) : BaseType(io, false) { io.readline(mass, "Mass="); io.readline(p, "Su3RepresentationP="); } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersSu3"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/mass", mass); io.write(label + "/Su3RepresentationP", p); } RealType mass; SizeType p; }; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/Su3/Su3Model.h000066400000000000000000000254001414604301300172170ustar00rootroot00000000000000/* Copyright (c) 2009-2021, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file Su3Model.h * * An implementation of the Quantum Heisenberg Model to use with DmrgSolver * */ #ifndef DMRG_SU3_MODEL_H #define DMRG_SU3_MODEL_H #include #include "ParametersSu3.h" #include "CrsMatrix.h" #include "../../Engine/VerySparseMatrix.h" #include "../../Engine/ProgramGlobals.h" #include "../../Engine/Utils.h" #include "Su3RepresentationP1.h" namespace Dmrg { template class Su3Model : public ModelBaseType { public: typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::BasisType BasisType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::QnType QnType; typedef typename ModelBaseType::VectorQnType VectorQnType; typedef typename ModelBaseType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef unsigned int long WordType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename ModelBaseType::VectorRealType VectorRealType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef typename PsimagLite::Vector::Type HilbertBasisType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename OperatorType::PairType PairType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelBaseType::MyBasis MyBasis; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef ParametersSu3 ParametersSu3Type; typedef Su3RepresentationBase Su3RepresentationBaseType; typedef Su3RepresentationP1::True> Su3RepresentationP1Type; static const bool IS_REAL = !PsimagLite::IsComplexNumber::True; Su3Model(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), superGeometry_(geometry), modelParameters_(io), su3Rep_(nullptr) { if (modelParameters_.p == 1) { su3Rep_ = new Su3RepresentationP1Type(); } else { err("Implementation for p = " + ttos(modelParameters_.p) + " has not been implemented\n"); } } ~Su3Model() { delete su3Rep_; su3Rep_ = nullptr; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); } // m*T3(i)*T3(i) + m*T8(i)*T8(i) void addDiagonalsInNaturalBasis(SparseMatrixType& hmatrix, const BlockType& block, RealType) const { assert(block.size() == 1); MatrixType m3; su3Rep_->getMatrix(m3, (IS_REAL) ? 3 : 2); MatrixType m8; su3Rep_->getMatrix(m8, (IS_REAL) ? 4 : 7); MatrixType m = m3*m3; if (IS_REAL) { MatrixType mtemp = m8*m8; m += mtemp; } m *= modelParameters_.mass; SparseMatrixType mSparse(m); hmatrix += mSparse; } protected: void fillLabeledOperators(VectorQnType& qns) { if (IS_REAL) fillLabeledOperatorsReal(qns); else fillLabeledOperatorsComplex(qns); } void fillLabeledOperatorsComplex(VectorQnType& qns) { SizeType site = 0; BlockType block(1, site); SizeType total = su3Rep_->size(); HilbertBasisType natBasis(total); for (SizeType i = 0; i < total; ++i) natBasis[i] = i; setSymmetryRelated(qns, natBasis, block.size()); for (SizeType a = 0; a < 8; ++a) { MatrixType m; su3Rep_->getMatrix(m, a); SparseMatrixType sparseMatrix(m); typename OperatorType::Su2RelatedType su2related; OperatorType myOp(sparseMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("T" + ttos(a + 1)).push(myOp); this->makeTrackable("T" + ttos(a + 1)); } } void fillLabeledOperatorsReal(VectorQnType& qns) { SizeType site = 0; BlockType block(1, site); SizeType total = su3Rep_->size(); HilbertBasisType natBasis(total); for (SizeType i = 0; i < total; ++i) natBasis[i] = i; setSymmetryRelated(qns, natBasis, block.size()); for (SizeType a = 0; a < 3; ++a) { MatrixType m; su3Rep_->getMatrix(m, a); SparseMatrixType sparseMatrix(m); typename OperatorType::Su2RelatedType su2related; OperatorType myOp(sparseMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); this->createOpsLabel("Tplus" + ttos(a + 1)).push(myOp); this->makeTrackable("Tplus" + ttos(a + 1)); myOp.dagger(); this->createOpsLabel("Tminus" + ttos(a + 1)).push(myOp); } for (SizeType a = 3; a < 5; ++a) { MatrixType m; su3Rep_->getMatrix(m, a); SparseMatrixType sparseMatrix(m); typename OperatorType::Su2RelatedType su2related; OperatorType myOp(sparseMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), 1, su2related); if (a==4) { this->createOpsLabel("T8").push(myOp); this->makeTrackable("T8"); } else { this->createOpsLabel("T" + ttos(a)).push(myOp); this->makeTrackable("T" + ttos(a)); } } } void fillModelLinks() { if (IS_REAL) fillModelLinksReal(); else fillModelLinksComplex(); } void fillModelLinksComplex() { ModelTermType& jOne = ModelBaseType::createTerm("jOne"); for (SizeType a = 0; a < 8; ++a) { OpForLinkType aOpForLink("T" + ttos(a + 1)); jOne.push(aOpForLink, 'N', aOpForLink, 'C'); } ModelTermType& jTwo = ModelBaseType::createTerm("jTwo"); for (SizeType a = 0; a < 8; ++a) { OpForLinkType aOpForLink("T" + ttos(a + 1)); jTwo.push(aOpForLink, 'N', aOpForLink, 'C'); } } void fillModelLinksReal() { ModelTermType& jOnepm = ModelBaseType::createTerm("jOne_pm"); auto multiplyByZeroPointFive = [](ComplexOrRealType& value) { value *= 0.5;}; for (SizeType a = 0; a < 3; ++a) { OpForLinkType aOpForLink("Tplus" + ttos(a + 1)); jOnepm.push(aOpForLink, 'N', aOpForLink, 'C', multiplyByZeroPointFive); } ModelTermType& jOne33 = ModelBaseType::createTerm("jOne_33"); OpForLinkType aOpForLink3("T3"); jOne33.push(aOpForLink3, 'N', aOpForLink3, 'C'); ModelTermType& jOne88 = ModelBaseType::createTerm("jOne_88"); OpForLinkType aOpForLink8("T8"); jOne88.push(aOpForLink8, 'N', aOpForLink8, 'C'); } private: // \sum_i T3(i) and \sum_i T8(i) are conserved separately // We delegate to the representation the actual values and computation void setSymmetryRelated(VectorQnType& qns, const HilbertBasisType& basis, int n) const { typedef std::pair PairType; VectorSizeType other(2); QnType::ifPresentOther0IsElectrons = false; qns.resize(basis.size(), QnType::zero()); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair(0, 0); other[0] = su3Rep_->t3OfState(i); other[1] = su3Rep_->t8OfState(i); SizeType flavor = 1; qns[i] = QnType(false, other, jmpair, flavor); } } const SuperGeometryType& superGeometry_; ParametersSu3Type modelParameters_; Su3RepresentationBaseType* su3Rep_; }; // class Su3Model } // namespace Dmrg /*@}*/ #endif //DMRG_SU3_MODEL_H dmrgpp-6.02/src/Models/Su3/Su3RepresentationBase.h000066400000000000000000000010101414604301300217430ustar00rootroot00000000000000#ifndef Su3REPRESENTATION_BASE_H #define Su3REPRESENTATION_BASE_H #include "PsimagLite.h" #include "Matrix.h" template class Su3RepresentationBase { public: typedef PsimagLite::Matrix MatrixType; virtual ~Su3RepresentationBase() {} virtual void getMatrix(MatrixType&, SizeType) const = 0; virtual SizeType t3OfState(SizeType) const = 0; virtual SizeType t8OfState(SizeType) const = 0; virtual SizeType size() const = 0; }; #endif // Su3REPRESENTATION_BASE_H dmrgpp-6.02/src/Models/Su3/Su3RepresentationP1.h000066400000000000000000000050051414604301300213610ustar00rootroot00000000000000#ifndef SU3REPRESENTATIONP1_H #define SU3REPRESENTATIONP1_H #include "PsimagLite.h" #include "Matrix.h" #include "Su3RepresentationBase.h" template class Su3RepresentationP1 : public Su3RepresentationBase { public: typedef PsimagLite::Matrix MatrixType; void getMatrix(MatrixType& m, SizeType n) const { m.resize(3, 3); // Tplus1 if (n == 0) { m(0, 1) = 0.5; return; } // Tplus2 if (n == 1) { m(0, 2) = 0.5; return; } // Tplus3 if (n == 2) { m(1, 2) = 0.5; return; } // T3 if (n == 3) { m(0, 0) = 0.5; m(1, 1) = -0.5; return; } // T8 assert(n == 4); static const ComplexOrRealType oneOverSqrt3 = 1.0/sqrt(3.0); m(0, 0) = m(1, 1) = 0.5*oneOverSqrt3; m(2, 2) = -oneOverSqrt3; } // diagonal 1 -1 0 ==> 2 0 1 SizeType t3OfState(SizeType ind) const { if (ind == 0) return 2; if (ind == 1) return 0; assert(ind == 2); return 1; } // diagonal 1 1 -2 ==> 3 3 0 SizeType t8OfState(SizeType ind) const { assert(ind < 3); return (ind < 2) ? 3 : 0; } SizeType size() const { return 3; } }; template class Su3RepresentationP1 : public Su3RepresentationBase { public: typedef typename PsimagLite::Real::Type RealType; typedef PsimagLite::Matrix MatrixType; void getMatrix(MatrixType& m, SizeType n) const { m.resize(3, 3); if (n == 0) { m(0, 1) = m(1, 0) = 0.5; return; } if (n == 1) { m(0, 1) = std::complex(0, -0.5); m(1, 0) = -m(0, 1); return; } if (n == 2) { m(0, 0) = 0.5; m(1, 1) = -0.5; return; } if (n == 3) { m(0, 2) = m(2, 0) = 0.5; return; } if (n == 4) { m(0, 2) = std::complex(0, -0.5); m(2, 0) = -m(0, 2); return; } if (n == 5) { m(1, 2) = m(2, 1) = 0.5; return; } if (n == 6) { m(1, 2) = std::complex(0, -0.5); m(2, 1) = -m(1, 2); return; } assert(n == 7); static const RealType oneOverSqrt3 = 1.0/sqrt(3.0); m(0, 0) = m(1, 1) = 0.5*oneOverSqrt3; m(2, 2) = -oneOverSqrt3; } // diagonal 1 -1 0 ==> 2 0 1 SizeType t3OfState(SizeType ind) const { if (ind == 0) return 2; if (ind == 1) return 0; assert(ind == 2); return 1; } // diagonal 1 1 -2 ==> 3 3 0 SizeType t8OfState(SizeType ind) const { assert(ind < 3); return (ind < 2) ? 3 : 0; } SizeType size() const { return 3; } }; #endif // SU3REPRESENTATIONP1_H dmrgpp-6.02/src/Models/SuperExtendedHubbard1Orb/000077500000000000000000000000001414604301300215335ustar00rootroot00000000000000dmrgpp-6.02/src/Models/SuperExtendedHubbard1Orb/SuperExtendedHubbard1Orb.h000066400000000000000000000233741414604301300265100ustar00rootroot00000000000000/* Copyright (c) 2009-2014, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file SuperExtendedHubbard1Orb.h * * Hubbard + V^n_{ij} n_i n_j + V^S_{ij} S_i S_j + V^P_{ij} P^dag_i P_j * */ #ifndef EXTENDED_SUPER_HUBBARD_1ORB_H #define EXTENDED_SUPER_HUBBARD_1ORB_H #include "../Models/ExtendedHubbard1Orb/ExtendedHubbard1Orb.h" namespace Dmrg { //! Super Extended Hubbard for DMRG solver, uses ModelHubbard by containment template class ExtendedSuperHubbard1Orb : public ModelBaseType { public: typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef ExtendedHubbard1Orb ExtendedHubbard1OrbType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type SparseElementType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ExtendedHubbard1OrbType::HilbertBasisType HilbertBasisType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef PsimagLite::Matrix MatrixType; typedef typename ExtendedHubbard1OrbType::HilbertSpaceHubbardType HilbertSpaceHubbardType; typedef typename HilbertSpaceHubbardType::HilbertState HilbertState; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename ModelBaseType::VectorOperatorType VectorOperatorType; typedef typename PsimagLite::Vector::Type VectorHilbertStateType; typedef typename PsimagLite::Vector::Type VectorSparseMatrixType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; ExtendedSuperHubbard1Orb(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& superGeometry) : ModelBaseType(solverParams, superGeometry, io), modelParameters_(io), superGeometry_(superGeometry), extendedHubbard_(solverParams, io, superGeometry) {} void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); extendedHubbard_.write(label, io); } virtual void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType time) const { extendedHubbard_.addDiagonalsInNaturalBasis(hmatrix, block, time); } protected: void fillLabeledOperators(VectorQnType& qns) { const SizeType site = 0; BlockType block(1, site); extendedHubbard_.fillLabeledOperators(qns); VectorOperatorType cm(3); for (SizeType dof = 0; dof < 2; ++dof) cm[dof] = this->naturalOperator("c", site, dof); cm[2] = this->naturalOperator("n", site, 0); // BEGIN define ph operator MatrixType tmp1 = multiplyTc(cm[1].getCRS(), cm[1].getCRS()); MatrixType tmp2 = multiplyTc(cm[0].getCRS(), cm[0].getCRS()); MatrixType tmp3 = tmp1*tmp2; SparseMatrixType tmp3crs; fullMatrixToCrsMatrix(tmp3crs, tmp3); OpsLabelType& ph = this->createOpsLabel("ph"); typename OperatorType::Su2RelatedType su2related; OperatorType phOp(tmp3crs, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1, su2related); ph.push(phOp); // END define ph operator OpsLabelType& p = this->createOpsLabel("pair"); for (SizeType i = 0; i < block.size(); ++i) setPairi(p, cm, i); this->makeTrackable("splus"); this->makeTrackable("sz"); this->makeTrackable("pair"); } void fillModelLinks() { extendedHubbard_.fillModelLinks(); const bool spinOrbit = (superGeometry_.orbitals(0, 0) == 2); if (spinOrbit) { ModelTermType& so = ModelBaseType::createTerm("SpinOrbit"); // spin dependence of the hopping parameter (spin orbit) OpForLinkType cup("c", 0, 0); OpForLinkType cdown("c", 1, 1); // spin1 = 1 spin2 = 0 so.push(cdown, 'N', cup, 'C', typename ModelTermType::Su2Properties(1, -1, 1)); // spin1 = 0 spin2 = 1 so.push(cup, 'N', cdown, 'C', typename ModelTermType::Su2Properties(1, 1, 0)); } const bool isSu2 = BasisType::useSu2Symmetry(); ModelTermType& spsm = ModelBaseType::createTerm("SplusSminus"); OpForLinkType splus("splus"); spsm.push(splus, 'N', splus, 'C', [isSu2](SparseElementType& value) { value *= (isSu2) ? -0.5 : 0.5;}, typename ModelTermType::Su2Properties(2, -1, 2)); ModelTermType& szsz = ModelBaseType::createTerm("szsz"); OpForLinkType sz("sz"); szsz.push(sz, 'N', sz, 'N', [isSu2](SparseElementType& value) { if (isSu2) value = -value; }, typename ModelTermType::Su2Properties(2, 0.5, 1)); ModelTermType& pp = ModelBaseType::createTerm("PairPair"); OpForLinkType pair("pair"); pp.push(pair, 'N', pair, 'C', typename ModelTermType::Su2Properties(2, 1, 2)); } private: void setPairi(OpsLabelType& p, const VectorOperatorType& cm, SizeType) const { typename OperatorType::Su2RelatedType su2related; SparseMatrixType pair; multiply(pair,cm[0].getCRS(),cm[1].getCRS()); OperatorType myOp(pair, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1, su2related); p.push(myOp); } //! Calculate fermionic sign when applying operator c^\dagger_{i\sigma} to basis state ket RealType sign(typename HilbertSpaceHubbardType::HilbertState const &ket, int i, int sigma) const { int value=0; value += HilbertSpaceHubbardType::calcNofElectrons(ket,0,i,0); value += HilbertSpaceHubbardType::calcNofElectrons(ket,0,i,1); int tmp1 = HilbertSpaceHubbardType::get(ket,0) &1; int tmp2 = HilbertSpaceHubbardType::get(ket,0) &2; if (i>0 && tmp1>0) value++; if (i>0 && tmp2>0) value++; if (sigma==1) { // spin down if ((HilbertSpaceHubbardType::get(ket,i) &1)) value++; } if (value%2==0) return 1.0; return -1; } ParametersModelHubbard modelParameters_; const SuperGeometryType& superGeometry_; ExtendedHubbard1OrbType extendedHubbard_; }; //class ExtendedSuperHubbard1Orb } // namespace Dmrg /*@}*/ #endif // EXTENDED_SUPER_HUBBARD_1ORB_H dmrgpp-6.02/src/Models/SuperHubbardExtended/000077500000000000000000000000001414604301300210075ustar00rootroot00000000000000dmrgpp-6.02/src/Models/SuperHubbardExtended/SuperHubbardExtended.h000066400000000000000000000163451414604301300252400ustar00rootroot00000000000000/* Copyright (c) 2009-2013, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file SuperHubbardExtended.h * * Hubbard + V_{ij} n_i n_j * */ #ifndef SUPER_HUBBARD_EXTENDED_H #define SUPER_HUBBARD_EXTENDED_H #include "../Models/ExtendedHubbard1Orb/ExtendedHubbard1Orb.h" namespace Dmrg { //! Extended Hubbard for DMRG solver, uses ExtendedHubbard1Orb by containment template class SuperHubbardExtended : public ModelBaseType { public: typedef typename ModelBaseType::VectorSizeType VectorSizeType; typedef ExtendedHubbard1Orb ModelHubbardType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelHubbardType::HilbertBasisType HilbertBasisType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelHubbardType::HilbertSpaceHubbardType HilbertSpaceHubbardType; typedef typename HilbertSpaceHubbardType::HilbertState HilbertState; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename ModelBaseType::VectorOperatorType VectorOperatorType; typedef typename ModelBaseType::ModelTermType ModelTermType; typedef typename PsimagLite::Vector::Type VectorHilbertStateType; typedef PsimagLite::Vector::Type VectorSizeTypeType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; SuperHubbardExtended(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), extendedHubbard_(solverParams,io,geometry) {} void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); extendedHubbard_.write(label, io); } virtual void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType time) const { extendedHubbard_.addDiagonalsInNaturalBasis(hmatrix, block, time); } protected: void fillLabeledOperators(VectorQnType& qns) { extendedHubbard_.fillLabeledOperators(qns); this->makeTrackable("splus"); this->makeTrackable("sz"); } void fillModelLinks() { extendedHubbard_.fillModelLinks(); const bool isSu2 = BasisType::useSu2Symmetry(); ModelTermType& spsm = ModelBaseType::createTerm("SplusSminus"); OpForLinkType splus("splus"); auto valueModiferTerm0 = [isSu2](ComplexOrRealType& value) { value *= (isSu2) ? -0.5 : 0.5;}; spsm.push(splus, 'N', splus, 'C', valueModiferTerm0, typename ModelTermType::Su2Properties(2, -1, 2)); ModelTermType& szsz = ModelBaseType::createTerm("szsz"); if (!isSu2) { OpForLinkType sz("sz"); szsz.push(sz, 'N', sz, 'N', typename ModelTermType::Su2Properties(2, 0.5)); } else { auto valueModifierTermOther = [isSu2](ComplexOrRealType& value) { if (isSu2) value = -value;}; spsm.push(splus, 'N', splus, 'C', valueModifierTermOther, typename ModelTermType::Su2Properties(2, -1, 2)); } } private: //! Full hamiltonian from creation matrices cm void addSiSj(SparseMatrixType &, const VectorOperatorType&, const BlockType& block) const { // Assume block.size()==1 and then problem solved!! // there are no connection if there's only one site ;-) assert(block.size()==1); } ParametersModelHubbard modelParameters_; ModelHubbardType extendedHubbard_; }; //class SuperHubbardExtended } // namespace Dmrg /*@}*/ #endif // SUPER_HUBBARD_EXTENDED_H dmrgpp-6.02/src/Models/TjAncillaC/000077500000000000000000000000001414604301300167045ustar00rootroot00000000000000dmrgpp-6.02/src/Models/TjAncillaC/ParametersTjAncillaC.h000066400000000000000000000101101414604301300230360ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersTjAncillaC.h * * Contains the parameters for the Hubbard model and function to * read them from a file * */ #ifndef DMRG_PARAMS_TJ_ANCILLAC_H #define DMRG_PARAMS_TJ_ANCILLAC_H #include "ParametersModelBase.h" namespace Dmrg { //! TjAncillaC Model Parameters // no connectors here, connectors are handled by the geometry template struct ParametersTjAncillaC : public ParametersModelBase{ typedef ParametersModelBase BaseType; template ParametersTjAncillaC(IoInputType& io) : BaseType(io, false) { io.read(potentialV,"potentialV"); } template SizeType memResolv(SomeMemResolvType&, SizeType, PsimagLite::String = "") const { return 0; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersTjAncillaC"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/potentialV", potentialV); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersTjAncillaC& parameters) { os<<"potentialV\n"; os<::Type potentialV; }; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/TjAncillaC/TjAncillaC.h000066400000000000000000000511621414604301300210260ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TjAncillaC.h * * Hubbard + Heisenberg * */ #ifndef DMRG_TJ_ANCILLAC_H #define DMRG_TJ_ANCILLAC_H #include "../Models/FeAsModel/ModelFeBasedSc.h" #include "../Models/TjAncillaC/ParametersTjAncillaC.h" namespace Dmrg { //! t-J model for DMRG solver, uses ModelHubbard and ModelHeisenberg by containment template class TjAncillaC : public ModelBaseType { public: typedef typename ModelBaseType::VectorRealType VectorRealType; typedef ModelFeBasedSc ModelFeAsType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelFeAsType::HilbertState HilbertStateType; typedef typename ModelFeAsType::HilbertBasisType HilbertBasisType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelFeAsType::HilbertSpaceFeAsType HilbertSpaceType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename OperatorType::PairType PairType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorHilbertStateType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; static const int NUMBER_OF_ORBITALS = 2; static const int FERMION_SIGN = -1; enum {SPIN_UP, SPIN_DOWN}; TjAncillaC(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), superGeometry_(geometry) { if (PsimagLite::Concurrency::codeSectionParams.npthreads != 1) err("TjAncillaC:: cannot be run with Threads > 1 sorry\n"); } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); } virtual PsimagLite::String oracle() const { const RealType ne = ModelBaseType::targetQuantum().qn(0).other[0]; const RealType n = ModelBaseType::superGeometry().numberOfSites(); RealType energy = -ne*(n - ne); return ModelBaseType::oracle(energy, "-Ne*(L-Ne)"); } protected: void fillLabeledOperators(VectorQnType& qns) { SizeType site = 0; BlockType block(1, site); VectorHilbertStateType natBasis; SparseMatrixType tmpMatrix; setSymmetryRelated(qns, natBasis, block); OpsLabelType& c = this->createOpsLabel("c"); OpsLabelType& splus = this->createOpsLabel("splus"); OpsLabelType& sz = this->createOpsLabel("sz"); OpsLabelType& nop = this->createOpsLabel("n"); OpsLabelType& d = this->createOpsLabel("d"); OpsLabelType& sminus = this->createOpsLabel("sminus"); this->makeTrackable("c"); this->makeTrackable("splus"); this->makeTrackable("sz"); this->makeTrackable("n"); this->makeTrackable("d"); // Set the operators c^\daggger_{i\sigma} in the natural basis for (SizeType i=0;inaturalOperator("c", site, 0); tmp.dagger(); SparseMatrixType c = tmp.getCRS(); SparseMatrixType tmp3(multiplyTc(c,c)); typename OperatorType::Su2RelatedType su2Related; this->createOpsLabel("nup").push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } { OperatorType tmp = this->naturalOperator("c", site, 1); tmp.dagger(); SparseMatrixType c = tmp.getCRS(); SparseMatrixType tmp3(multiplyTc(c,c)); typename OperatorType::Su2RelatedType su2Related; this->createOpsLabel("ndown").push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } } void fillModelLinks() { //! There are orbitals*orbitals different orbitals //! and 2 spins. Spin is diagonal so we end up with 2*orbitals*orbitals possiblities //! a up a up, a up b up, b up a up, b up, b up, etc //! and similarly for spin down. const SizeType orbitals = 1; // like C2 but without hot const bool isSu2 = BasisType::useSu2Symmetry(); ModelTermType& hop = ModelBaseType::createTerm("hopping"); ModelTermType& spsm = ModelBaseType::createTerm("SplusSminus"); ModelTermType& szsz = ModelBaseType::createTerm("szsz"); ModelTermType& ninj = ModelBaseType::createTerm("ninj"); ModelTermType& dd = ModelBaseType::createTerm("didj"); for (SizeType spin = 0; spin < 2; ++spin) { for (SizeType orb1 = 0; orb1 < orbitals; ++orb1) { OpForLinkType c1("c", orb1 + spin*orbitals, orb1); for (SizeType orb2 = 0; orb2 < orbitals; ++orb2) { OpForLinkType c2("c", orb2 + spin*orbitals, orb2); hop.push(c1, 'N', c2, 'C', typename ModelTermType::Su2Properties(1, (spin == 1) ? -1 : 1, spin)); } } } auto valueModiferTerm0 = [isSu2](ComplexOrRealType& value) { value *= (isSu2) ? -0.5 : 0.5;}; auto valueModifierTermOther = [isSu2](ComplexOrRealType& value) { if (isSu2) value = -value;}; for (SizeType orb1 = 0; orb1 < orbitals; ++orb1) { OpForLinkType splus1("splus", orb1, orb1); OpForLinkType sz1("sz", orb1, orb1); OpForLinkType n1("n", orb1, orb1); for (SizeType orb2 = 0; orb2 < orbitals; ++orb2) { OpForLinkType splus2("splus", orb2, orb2); OpForLinkType sz2("sz", orb2, orb2); OpForLinkType n2("n", orb2, orb2); spsm.push(splus1, 'N', splus2, 'C', valueModiferTerm0, typename ModelTermType::Su2Properties(2, -1, 2)); if (!isSu2) szsz.push(sz1, 'N', sz2, 'N', typename ModelTermType::Su2Properties(2, 0.5)); else spsm.push(splus1, 'N', splus2, 'C', valueModifierTermOther, typename ModelTermType::Su2Properties(2, -1, 2)); ninj.push(n1, 'N', n2, 'N'); } } OpForLinkType d("d"); dd.push(d, 'N', d, 'C'); } private: //! find all states in the natural basis for a block of n sites // WARNING: Don't use directly as this isn't NotReallySorted! // Use with setSymmetryRelated void setBasis(HilbertBasisType& basis, const VectorSizeType& block) const { assert(block.size()==1); int sitesTimesDof = 2*NUMBER_OF_ORBITALS; HilbertStateType total = (1<>= NUMBER_OF_ORBITALS; return ((a1 & a2) == 0); } //! Calculate fermionic sign when applying operator c^\dagger_{i\sigma} to //! basis state ket //! N.B.: HAS BEEN CHANGED TO ACCOMODATE FOR MULTIPLE BANDS RealType sign(const HilbertStateType& ket, int i,SizeType sigma) const { int value=0; SizeType dofs=2*NUMBER_OF_ORBITALS; for (SizeType alpha=0;alpha0) value += HilbertSpaceType::electrons(ket); //order for sign is: a up, a down, b up, b down, etc unsigned int x = HilbertSpaceType::get(ket,i); int spin = sigma/NUMBER_OF_ORBITALS; SizeType orb = sigma % NUMBER_OF_ORBITALS; for (SizeType j=0;j cm(n,n); findCreationDense(cm,i,sigma,natBasis); SparseMatrixType temp; fullMatrixToCrsMatrix(temp,cm); transposeConjugate(creationMatrix,temp); } //! Find c^\dagger_i\gamma\sigma in the natural basis natBasis //! N.B.: HAS BEEN CHANGED TO ACCOMODATE FOR MULTIPLE BANDS void findCreationDense(PsimagLite::Matrix& cm, int i, int sigma, const HilbertBasisType& natBasis) const { HilbertStateType bra,ket; for (SizeType ii=0;ii=0); cm(ii,jj)=1.0; } } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } //! Find S^z_i in the natural basis natBasis SparseMatrixType findSzMatrices(int i, SizeType orb, const VectorHilbertStateType& natBasis) const { HilbertStateType ket; int n = natBasis.size(); MatrixType cm(n,n); for (SizeType ii=0;ii cm(n,n); for (SizeType ii=0;ii cru(n,n); findCreationDense(cru,i,SPIN_UP*NUMBER_OF_ORBITALS,natBasis); PsimagLite::Matrix cad(n,n); findCreationDense(cad,i,1 + SPIN_DOWN*NUMBER_OF_ORBITALS,natBasis); PsimagLite::Matrix crd(n,n); findCreationDense(crd,i,SPIN_DOWN*NUMBER_OF_ORBITALS,natBasis); PsimagLite::Matrix cau(n,n); findCreationDense(cau,i,1 + SPIN_UP*NUMBER_OF_ORBITALS,natBasis); PsimagLite::Matrix part1 = cru*cad; const RealType f1 = (-1.0); PsimagLite::Matrix part2 = f1*crd*cau; RealType oneOverSqrt2 = 1.0/sqrt(2.0); PsimagLite::Matrix final = oneOverSqrt2*(part1 + part2); SparseMatrixType temp; fullMatrixToCrsMatrix(temp,final); return temp; } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType) const { SizeType n=block.size(); SizeType linSize = superGeometry_.numberOfSites(); for (SizeType i=0;inaturalOperator("nup",i,orb).getCRS()); SparseMatrixType ndown(this->naturalOperator("ndown",i,orb).getCRS()); SparseMatrixType m = nup; SizeType index = block[i]+orb*linSize; assert(index PairType; SizeType basisSize = basis.size(); VectorSizeType other(3, 0); qns.resize(basisSize, QnType::zero()); for (SizeType i = 0; i < basisSize; ++i) { PairType jmpair = calcJmvalue(basis[i]); // nup other[1] = HilbertSpaceType::electronsWithGivenSpin(basis[i],SPIN_UP); // ndown SizeType ndown = HilbertSpaceType::electronsWithGivenSpin(basis[i],SPIN_DOWN); other[2] = HilbertSpaceType::calcNofElectrons(basis[i], 0); other[2] += HilbertSpaceType::calcNofElectrons(basis[i],NUMBER_OF_ORBITALS); other[0] = other[1] + ndown; bool sign = other[0] & 1; qns[i] = QnType(sign, other, jmpair, other[0]); } ModelBaseType::notReallySort(basis, qns); } // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType // Reinterprets 6 and 9 template PairType calcJmvalue(const HilbertStateType&) const { return PairType(0,0); } ParametersTjAncillaC modelParameters_; const SuperGeometryType& superGeometry_; }; //class TjAncillaC } // namespace Dmrg /*@}*/ #endif // DMRG_TJ_ANCILLAC_H dmrgpp-6.02/src/Models/TjAncillaC2/000077500000000000000000000000001414604301300167665ustar00rootroot00000000000000dmrgpp-6.02/src/Models/TjAncillaC2/TjAncillaC2.h000066400000000000000000000513001414604301300211640ustar00rootroot00000000000000/* Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TjAncillaC2.h * * Hubbard + Heisenberg * */ #ifndef DMRG_TJ_ANCILLAC2_H #define DMRG_TJ_ANCILLAC2_H #include "../Models/FeAsModel/ModelFeBasedSc.h" #include "../Models/TjAncillaC/ParametersTjAncillaC.h" namespace Dmrg { //! t-J model for DMRG solver, uses ModelHubbard and ModelHeisenberg by containment template class TjAncillaC2 : public ModelBaseType { public: typedef typename ModelBaseType::VectorRealType VectorRealType; typedef ModelFeBasedSc ModelFeAsType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelFeAsType::HilbertState HilbertStateType; typedef typename ModelFeAsType::HilbertBasisType HilbertBasisType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelFeAsType::HilbertSpaceFeAsType HilbertSpaceType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename OperatorType::PairType PairType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorHilbertStateType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; static const int NUMBER_OF_ORBITALS = 2; static const int FERMION_SIGN = -1; enum {SPIN_UP, SPIN_DOWN}; TjAncillaC2(const SolverParamsType& solverParams, InputValidatorType& io, SuperGeometryType const &geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), superGeometry_(geometry), hot_(superGeometry_.orbitals(0,0) > 1) {} void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); io.write(label + "/hot_", hot_); } virtual PsimagLite::String oracle() const { const RealType ne = ModelBaseType::targetQuantum().qn(0).other[0]; const RealType n = ModelBaseType::superGeometry().numberOfSites(); RealType energy = -ne*(n - ne); return ModelBaseType::oracle(energy, "-Ne*(L-Ne)"); } protected: void fillLabeledOperators(VectorQnType& qns) { SizeType site = 0; BlockType block(1, site); SizeType orbitals = (hot_) ? 2 : 1; VectorHilbertStateType natBasis; SparseMatrixType tmpMatrix; setBasis(natBasis, block); setSymmetryRelated(qns, natBasis, block.size()); OpsLabelType& c = this->createOpsLabel("c"); OpsLabelType& splus = this->createOpsLabel("splus"); OpsLabelType& sminus = this->createOpsLabel("sminus"); OpsLabelType& sz = this->createOpsLabel("sz"); OpsLabelType& nop = this->createOpsLabel("n"); OpsLabelType& d = this->createOpsLabel("d"); this->makeTrackable("c"); this->makeTrackable("splus"); this->makeTrackable("sz"); this->makeTrackable("n"); this->makeTrackable("d"); // Set the operators c^\daggger_{i\sigma} in the natural basis for (SizeType i=0;inaturalOperator("c", site, 0); tmp.dagger(); SparseMatrixType c = tmp.getCRS(); SparseMatrixType tmp3(multiplyTc(c,c)); typename OperatorType::Su2RelatedType su2Related; this->createOpsLabel("nup").push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } { OperatorType tmp = this->naturalOperator("c", site, 1); tmp.dagger(); SparseMatrixType c = tmp.getCRS(); SparseMatrixType tmp3(multiplyTc(c,c)); typename OperatorType::Su2RelatedType su2Related; this->createOpsLabel("ndown").push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } } void fillModelLinks() { //! There are orbitals*orbitals different orbitals //! and 2 spins. Spin is diagonal so we end up with 2*orbitals*orbitals possiblities //! a up a up, a up b up, b up a up, b up, b up, etc //! and similarly for spin down. const SizeType orbitals = (hot_) ? 2 : 1; const bool isSu2 = BasisType::useSu2Symmetry(); ModelTermType& hop = ModelBaseType::createTerm("hopping"); ModelTermType& spsm = ModelBaseType::createTerm("SplusSminus"); ModelTermType& szsz = ModelBaseType::createTerm("szsz"); ModelTermType& ninj = ModelBaseType::createTerm("ninj"); ModelTermType& dd = ModelBaseType::createTerm("didj"); for (SizeType spin = 0; spin < 2; ++spin) { for (SizeType orb1 = 0; orb1 < orbitals; ++orb1) { OpForLinkType c1("c", orb1 + spin*orbitals, orb1); for (SizeType orb2 = 0; orb2 < orbitals; ++orb2) { OpForLinkType c2("c", orb2 + spin*orbitals, orb2); hop.push(c1, 'N', c2, 'C', typename ModelTermType::Su2Properties(1, (spin == 1) ? -1 : 1, spin)); } } OpForLinkType d("d", spin); dd.push(d, 'N', d, 'C'); } auto valueModiferTerm0 = [isSu2](ComplexOrRealType& value) { value *= (isSu2) ? -0.5 : 0.5;}; auto valueModifierTermOther = [isSu2](ComplexOrRealType& value) { if (isSu2) value = -value;}; for (SizeType orb1 = 0; orb1 < orbitals; ++orb1) { OpForLinkType splus1("splus", orb1, orb1); OpForLinkType sz1("sz", orb1, orb1); OpForLinkType n1("n", orb1, orb1); for (SizeType orb2 = 0; orb2 < orbitals; ++orb2) { OpForLinkType splus2("splus", orb2, orb2); OpForLinkType sz2("sz", orb2, orb2); OpForLinkType n2("n", orb2, orb2); spsm.push(splus1, 'N', splus2, 'C', valueModiferTerm0, typename ModelTermType::Su2Properties(2, -1, 2)); if (!isSu2) szsz.push(sz1, 'N', sz2, 'N', typename ModelTermType::Su2Properties(2, 0.5)); else spsm.push(splus1, 'N', splus2, 'C', valueModifierTermOther, typename ModelTermType::Su2Properties(2, -1, 2)); ninj.push(n1, 'N', n2, 'N'); } } } private: //! find all states in the natural basis for a block of n sites void setBasis(HilbertBasisType& basis, const VectorSizeType& block) const { assert(block.size()==1); int sitesTimesDof = 2*NUMBER_OF_ORBITALS; HilbertStateType total = (1<>= NUMBER_OF_ORBITALS; return ((a1 & a2) == 0); } //! Calculate fermionic sign when applying operator c^\dagger_{i\sigma} to //! basis state ket //! N.B.: HAS BEEN CHANGED TO ACCOMODATE FOR MULTIPLE BANDS RealType sign(const HilbertStateType& ket, int i,SizeType sigma) const { int value=0; SizeType dofs=2*NUMBER_OF_ORBITALS; for (SizeType alpha=0;alpha0) value += HilbertSpaceType::electrons(ket); //order for sign is: a up, a down, b up, b down, etc unsigned int x = HilbertSpaceType::get(ket,i); int spin = sigma/NUMBER_OF_ORBITALS; SizeType orb = sigma % NUMBER_OF_ORBITALS; for (SizeType j=0;j cm(n,n); findCreationDense(cm,i,sigma,natBasis); SparseMatrixType temp; fullMatrixToCrsMatrix(temp,cm); transposeConjugate(creationMatrix,temp); } //! Find c^\dagger_i\gamma\sigma in the natural basis natBasis //! N.B.: HAS BEEN CHANGED TO ACCOMODATE FOR MULTIPLE BANDS void findCreationDense(PsimagLite::Matrix& cm, int i, int sigma, const HilbertBasisType& natBasis) const { HilbertStateType bra,ket; for (SizeType ii=0;ii=0); cm(ii,jj)=1.0; } } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } //! Find S^z_i in the natural basis natBasis SparseMatrixType findSzMatrices(int i, SizeType orb, const VectorHilbertStateType& natBasis) const { HilbertStateType ket; int n = natBasis.size(); MatrixType cm(n,n); for (SizeType ii=0;ii cm(n,n); for (SizeType ii=0;ii cr(n,n); findCreationDense(cr,i,sigma*NUMBER_OF_ORBITALS,natBasis); PsimagLite::Matrix ca(n,n); SizeType sigmaBar = 1 - sigma; findCreationDense(ca,i,1 + sigmaBar*NUMBER_OF_ORBITALS,natBasis); PsimagLite::Matrix part1 = cr*ca; SparseMatrixType temp; fullMatrixToCrsMatrix(temp,part1); return temp; } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType) const { SizeType n=block.size(); SizeType linSize = superGeometry_.numberOfSites(); for (SizeType i=0;inaturalOperator("nup",i,orb).getCRS()); SparseMatrixType ndown(this->naturalOperator("ndown",i,orb).getCRS()); SparseMatrixType m = nup; SizeType index = block[i]+orb*linSize; assert(index PairType; SizeType basisSize = basis.size(); VectorSizeType other(4, 0); qns.resize(basisSize, QnType::zero()); for (SizeType i = 0; i < basisSize; ++i) { PairType jmpair = calcJmvalue(basis[i]); // nup other[1] = HilbertSpaceType::electronsWithGivenSpin(basis[i],SPIN_UP); // ndown SizeType ndown = HilbertSpaceType::electronsWithGivenSpin(basis[i],SPIN_DOWN); other[2] = HilbertSpaceType::calcNofElectrons(basis[i], 0); other[3] = HilbertSpaceType::calcNofElectrons(basis[i], NUMBER_OF_ORBITALS); other[0] = other[1] + ndown; bool sign = other[0] & 1; qns[i] = QnType(sign, other, jmpair, other[0]); } } // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType // Reinterprets 6 and 9 template PairType calcJmvalue(const HilbertStateType&) const { return PairType(0,0); } ParametersTjAncillaC modelParameters_; const SuperGeometryType& superGeometry_; bool hot_; }; //class TjAncillaC2 } // namespace Dmrg /*@}*/ #endif // DMRG_TJ_ANCILLAC2_H dmrgpp-6.02/src/Models/TjAncillaG/000077500000000000000000000000001414604301300167105ustar00rootroot00000000000000dmrgpp-6.02/src/Models/TjAncillaG/TjAncillaG.h000066400000000000000000000375361414604301300210470ustar00rootroot00000000000000/* Copyright (c) 2009-2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TjAncillaG.h * * Hubbard + Heisenberg * */ #ifndef DMRG_TJ_ANCILLAG_H #define DMRG_TJ_ANCILLAG_H #include "../Models/HubbardOneBand/ModelHubbard.h" #include "../Models/TjMultiOrb/TjMultiOrb.h" #include "../Models/TjMultiOrb/ParametersModelTjMultiOrb.h" namespace Dmrg { //! t-J model for DMRG solver, uses ModelHubbard and ModelHeisenberg by containment template class TjAncillaG : public ModelBaseType { public: typedef typename ModelBaseType::VectorRealType VectorRealType; typedef ModelHubbard ModelHubbardType; typedef TjMultiOrb TjMultiOrbType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelHubbardType::HilbertState HilbertStateType; typedef typename ModelHubbardType::HilbertBasisType HilbertBasisType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelHubbardType::HilbertSpaceHubbardType HilbertSpaceHubbardType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename OperatorType::PairType PairType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorHilbertStateType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; static const int DEGREES_OF_FREEDOM=2; static const int NUMBER_OF_ORBITALS = 1; static const int FERMION_SIGN = -1; enum {SPIN_UP, SPIN_DOWN}; TjAncillaG(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), superGeometry_(geometry), TjMultiOrb_(solverParams,io,geometry), offset_(DEGREES_OF_FREEDOM+3), // c^\dagger_up, c^\dagger_down, S+, Sz, n spinSquared_(spinSquaredHelper_,NUMBER_OF_ORBITALS,DEGREES_OF_FREEDOM) { if (BasisType::useSu2Symmetry()) err("TjAncillaG: SU(2) not supported\n"); } void addDiagonalsInNaturalBasis(SparseMatrixType& hmatrix, const BlockType& block, RealType) const { SizeType n=block.size(); SizeType linSize = superGeometry_.numberOfSites(); for (SizeType i=0;inaturalOperator("nup",i,0).getCRS(); SparseMatrixType ndown = this->naturalOperator("ndown",i,0).getCRS(); SparseMatrixType m = nup; assert(block[i]+linSizeparams().model; io.createGroup(label); modelParameters_.write(label, io); TjMultiOrb_.write(label, io); io.write(label + "/offset_", offset_); spinSquaredHelper_.write(label, io); spinSquared_.write(label, io); } protected: void fillLabeledOperators(VectorQnType& qns) { SizeType site = 0; BlockType block(1, site); VectorHilbertStateType natBasis; SparseMatrixType tmpMatrix; setBasis(natBasis, block); setSymmetryRelated(qns, natBasis, block.size()); OpsLabelType& c = this->createOpsLabel("c"); OpsLabelType& splus = this->createOpsLabel("splus"); OpsLabelType& sz = this->createOpsLabel("sz"); OpsLabelType& nop = this->createOpsLabel("n"); OpsLabelType& sminus = this->createOpsLabel("sminus"); this->makeTrackable("c"); this->makeTrackable("splus"); this->makeTrackable("sz"); this->makeTrackable("n"); // Set the operators c^\daggger_{i\sigma} in the natural basis for (SizeType i=0;i0) asign= 1; typename OperatorType::Su2RelatedType su2related; if (sigma==0) { su2related.source.push_back(i*offset_); su2related.source.push_back(i*offset_+1); su2related.transpose.push_back(-1); su2related.transpose.push_back(-1); su2related.offset = NUMBER_OF_ORBITALS; } OperatorType myOp(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::FERMION, PairType(1, 1 - sigma), asign, su2related); c.push(myOp); } // Set the operators S^+_i in the natural basis tmpMatrix=findSplusMatrices(i,natBasis); typename OperatorType::Su2RelatedType su2related; su2related.source.push_back(i*DEGREES_OF_FREEDOM); su2related.source.push_back(i*DEGREES_OF_FREEDOM+NUMBER_OF_ORBITALS); su2related.source.push_back(i*DEGREES_OF_FREEDOM); su2related.transpose.push_back(-1); su2related.transpose.push_back(-1); su2related.transpose.push_back(1); su2related.offset = NUMBER_OF_ORBITALS; OperatorType myOp(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 2), -1, su2related); splus.push(myOp); myOp.dagger(); sminus.push(myOp); // Set the operators S^z_i in the natural basis tmpMatrix = findSzMatrices(i,natBasis); typename OperatorType::Su2RelatedType su2related2; OperatorType myOp2(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(2, 1), 1.0/sqrt(2.0), su2related2); sz.push(myOp2); // Set ni matrices: SparseMatrixType tmpMatrix = findNiMatrices(0,natBasis); RealType angularFactor= 1; typename OperatorType::Su2RelatedType su2related3; su2related3.offset = 1; //check FIXME OperatorType myOp3(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::BOSON, PairType(0, 0), angularFactor, su2related3); nop.push(myOp3); } { OpsLabelType& nupop = this->createOpsLabel("nup"); OperatorType tmp = this->naturalOperator("c", site, 0); tmp.dagger(); SparseMatrixType c = tmp.getCRS(); SparseMatrixType tmp3(multiplyTc(c,c)); typename OperatorType::Su2RelatedType su2Related; nupop.push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } { OperatorType tmp = this->naturalOperator("c", site, 1); tmp.dagger(); SparseMatrixType c = tmp.getCRS(); SparseMatrixType tmp3(multiplyTc(c,c)); typename OperatorType::Su2RelatedType su2Related; this->createOpsLabel("ndown").push(OperatorType(tmp3, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } } void fillModelLinks() { const bool isSu2 = BasisType::useSu2Symmetry(); ModelTermType& spsm = ModelBaseType::createTerm("SplusSminus"); OpForLinkType splus0("splus"); auto modifierTerm0 = [isSu2](ComplexOrRealType& value) { value *= (isSu2) ? -0.5 : 0.5;}; spsm.push(splus0, 'N', splus0, 'C', modifierTerm0, typename ModelTermType::Su2Properties(2, -1, 2)); auto modifierTerm1 = [isSu2](ComplexOrRealType& value) {if (isSu2) value = -value;}; ModelTermType& szsz = ModelBaseType::createTerm("szsz"); OpForLinkType sz0("sz"); szsz.push(sz0, 'N', sz0, 'C', modifierTerm1, typename ModelTermType::Su2Properties(2, 0.5, 1)); ModelTermType& ancilla = ModelBaseType::createTerm("ancilla"); OpForLinkType d("d"); ancilla.push(d, 'N', d, 'C', typename ModelTermType::Su2Properties(2, 1, 0)); } private: //! find all states in the natural basis for a block of n sites void setBasis(HilbertBasisType& basis, const VectorSizeType& block) const { assert(block.size() == 1); int sitesTimesDof = DEGREES_OF_FREEDOM; HilbertStateType total = (1< 0 && (ket & masklm) == 0) { bra = ket ^ (masklp | masklm); int jj = PsimagLite::indexOrMinusOne(natBasis,bra); assert(jj>=0); cm(ii,jj) = 1.0; } } } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } SparseMatrixType findSzMatrices(int i, const VectorHilbertStateType& natBasis) const { assert(i == 0); int n = natBasis.size(); MatrixType cm(n,n); SizeType orbitals = modelParameters_.orbitals; for (SizeType ii=0;ii cm(n,n); SizeType dofs = 2*modelParameters_.orbitals; for (SizeType ii=0;ii PairType; qns.resize(basis.size(), QnType::zero()); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair = calcJmvalue(basis[i]); SizeType szPlusConst = (basis[i] == 2) ? 0 : basis[i] + 1; qns[i] = QnType(false, VectorSizeType(1, szPlusConst), jmpair, 0); } } // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType // Reinterprets 6 and 9 template PairType calcJmvalue(const HilbertStateType& ket) const { return calcJmValueAux(ket); } // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType // does not work for 6 or 9 template PairType calcJmValueAux(const HilbertStateType& ket) const { SizeType site0=0; SizeType site1=0; spinSquared_.doOnePairOfSitesA(ket,site0,site1); spinSquared_.doOnePairOfSitesB(ket,site0,site1); spinSquared_.doDiagonal(ket,site0,site1); RealType sz = spinSquared_.spinZ(ket,site0); PairType jm= spinSquaredHelper_.getJmPair(sz); return jm; } ParametersModelTjMultiOrb modelParameters_; const SuperGeometryType& superGeometry_; TjMultiOrbType TjMultiOrb_; SizeType offset_; SpinSquaredHelper spinSquaredHelper_; SpinSquared > spinSquared_; }; //class TjAncillaG } // namespace Dmrg /*@}*/ #endif // DMRG_TJ_ANCILLAG_H dmrgpp-6.02/src/Models/TjAnisotropic/000077500000000000000000000000001414604301300175305ustar00rootroot00000000000000dmrgpp-6.02/src/Models/TjAnisotropic/ParametersModelTjAnisotropic.h000066400000000000000000000141021414604301300254740ustar00rootroot00000000000000/* Copyright (c) 2009-2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersModelTjAnisotropic.h * * Contains the parameters for the Hubbard model and function to * read them from a file * */ #ifndef DMRG_PARAMS_TJAnisotropic_H #define DMRG_PARAMS_TJAnisotropic_H #include "ParametersModelBase.h" namespace Dmrg { //! ModelTjAnisotropic Parameters template struct ParametersModelTjAnisotropic : public ParametersModelBase { typedef ParametersModelBase BaseType; typedef typename PsimagLite::Vector::Type VectorRealType; template ParametersModelTjAnisotropic(IoInputType& io) : BaseType(io, false),reinterpretAndTruncate(0) { SizeType nsites = 0; io.readline(nsites, "TotalNumberOfSites="); io.readline(orbitals,"Orbitals="); potentialV.resize(nsites*2, 0.0); magneticFieldX.resize(nsites, 0.0); magneticFieldY.resize(nsites, 0.0); magneticFieldZ.resize(nsites, 0.0); try { io.read(potentialV,"potentialV"); std::cerr<<"Has potentialV \n"; } catch (std::exception&) { } try { io.read(magneticFieldX,"MagneticFieldX"); std::cerr<<"Has MagneticFieldX \n"; } catch (std::exception&) { } try { io.read(magneticFieldY,"MagneticFieldY"); std::cerr<<"Has MagneticFieldY \n"; } catch (std::exception&) { } try { io.read(magneticFieldZ,"MagneticFieldZ"); std::cerr<<"Has MagneticFieldZ \n"; } catch (std::exception&) { } try { io.readline(reinterpretAndTruncate,"JHundInfinity="); } catch (std::exception&) {} if (orbitals != 2 && reinterpretAndTruncate > 0) throw PsimagLite::RuntimeError("JHundInfinity>0 only possible for orbitals==2\n"); if (reinterpretAndTruncate > 3) throw PsimagLite::RuntimeError("JHundInfinity must be less or equal to 3\n"); } template SizeType memResolv(SomeMemResolvType&, SizeType, PsimagLite::String = "") const { return 0; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersModelTjAnisotropic"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/potentialV", potentialV); io.write(label + "/orbitals", orbitals); io.write(label + "/reinterpretAndTruncate", reinterpretAndTruncate); io.write(label + "/magneticFieldX", magneticFieldX); io.write(label + "/magneticFieldY", magneticFieldY); io.write(label + "/magneticFieldZ", magneticFieldZ); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersModelTjAnisotropic& parameters) { os<<"potentialV\n"; os< class TjAnisotropic : public ModelBaseType { enum InternalDir {DIR_X, DIR_Y, DIR_Z, DIR_NUP, DIR_NDOWN, DIR_N}; public: typedef typename ModelBaseType::VectorRealType VectorRealType; typedef ModelHubbard ModelHubbardType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::HilbertBasisType HilbertBasisFeAsType; typedef typename HilbertBasisFeAsType::value_type HilbertStateFeAs; typedef HilbertSpaceFeAs HilbertSpaceFeAsType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelHubbardType::HilbertState HilbertStateType; typedef typename ModelHubbardType::HilbertBasisType HilbertBasisType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename OperatorType::PairType PairType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorHilbertStateType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; static const int FERMION_SIGN = -1; enum {REINTERPRET_6 = 6, REINTERPRET_9 = 9}; enum {STATE_EMPTY = 0, STATE_UP_A = 1, STATE_DOWN_A = 4}; enum {SPIN_UP, SPIN_DOWN}; TjAnisotropic(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), superGeometry_(geometry), offset_(5*modelParameters_.orbitals), // c^\dagger_up, c^\dagger_down, S+, Sz, n spinSquared_(spinSquaredHelper_,modelParameters_.orbitals,2*modelParameters_.orbitals) { if (modelParameters_.orbitals != 1) throw PsimagLite::RuntimeError("TjAnisotropic: must use Orbital=1 \n"); SizeType n = superGeometry_.numberOfSites(); SizeType mx = modelParameters_.magneticFieldX.size(); SizeType my = modelParameters_.magneticFieldY.size(); SizeType mz = modelParameters_.magneticFieldZ.size(); SizeType m = mz; if (modelParameters_.potentialV.size() != 2*n) throw PsimagLite::RuntimeError("potentialV must be of size 2*sites\n"); if (mx != my || my != mz || mz != mx ) { PsimagLite::String msg("tJKitaev: If provided, "); msg += " MagneticField must be a vector of " + ttos(n) + " entries.\n"; msg += " MagneticFieldX, MagneticFieldY, MagneticFieldZ must be "; msg += "provided in all 3 (x,y,z) directions.\n"; throw PsimagLite::RuntimeError(msg); } if (m > 0 && m != n) { PsimagLite::String msg("Kitaev: If provided, "); msg += " MagneticField must be a vector of " + ttos(n) + " entries.\n"; throw PsimagLite::RuntimeError(msg); } if (BasisType::useSu2Symmetry()) err("Kitaev does not have SU(2) symmetry\n"); // fill caches ProgramGlobals::init(modelParameters_.orbitals*superGeometry_.numberOfSites() + 1); BlockType block(1,0); setNaturalBasis(basis_, block, true); } //! Find c^\dagger_isigma in the natural basis natBasis SparseMatrixType findCreationMatrices(int, SizeType sigma, const VectorHilbertStateType&) const { assert(sigma < creationMatrix_.size()); return creationMatrix_[sigma].getCRS(); } SizeType maxElectronsOneSpin() const { return modelParameters_.orbitals*superGeometry_.numberOfSites() + 1; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); io.write(label + "/offset_", offset_); spinSquaredHelper_.write(label, io); spinSquared_.write(label, io); io.write(label + "/basis_", basis_); io.write(label + "/qq_", qq_); io.write(label + "/creationMatrix_", creationMatrix_); } protected: void fillLabeledOperators(VectorQnType& qns) { SizeType site = 0; VectorSizeType block(1, site); VectorHilbertStateType natBasis; SparseMatrixType tmpMatrix; typename MatrixType::value_type dummy = 0.0; setNaturalBasis(natBasis, block, false); setSymmetryRelated(qns, natBasis, block.size()); SizeType dof = 2*modelParameters_.orbitals; OpsLabelType& c = this->createOpsLabel("c"); OpsLabelType& sx = this->createOpsLabel("sx"); OpsLabelType& sy = this->createOpsLabel("sy"); OpsLabelType& sz = this->createOpsLabel("sz"); OpsLabelType& nop = this->createOpsLabel("n"); OpsLabelType& nupop = this->createOpsLabel("nup"); OpsLabelType& ndownpop = this->createOpsLabel("ndown"); this->makeTrackable("c"); this->makeTrackable("sx"); this->makeTrackable("sy"); this->makeTrackable("sz"); this->makeTrackable("nup"); this->makeTrackable("ndown"); this->makeTrackable("n"); // Set the operators c^\daggger_{i\sigma} in the natural basis SizeType n = natBasis.size(); MatrixType rotation(n,n); MatrixType rotationR(n,n); computeRotation(rotation,rotationR,natBasis); for (SizeType i=0;i0) asign= 1; typename OperatorType::Su2RelatedType su2related; if (sigma==0) { su2related.source.push_back(i*offset_); su2related.source.push_back(i*offset_+1); su2related.transpose.push_back(-1); su2related.transpose.push_back(-1); su2related.offset = modelParameters_.orbitals; } OperatorType myOp(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::FERMION, PairType(1, 1 - sigma), asign, su2related); c.push(myOp); } } // Set local spin and charge matrices for (SizeType i=0;i) const { SizeType total = natBasis.size(); MatrixType cm(total,total); cm.setTo(0.0); assert(total == 3); // basis labels --> empty, down, up if (dir == DIR_X) { cm(1,2) = cm(2,1) = 0.5; } else if (dir == DIR_Y) { cm(1, 2) = std::complex(0.0, 0.5); cm(2, 1) = std::complex(0.0, -0.5); } else if (dir == DIR_Z) { cm(1, 1) = -0.5; cm(2, 2) = 0.5; } else if (dir == DIR_NUP) { cm(2, 2) = 1.0; } else if (dir == DIR_NDOWN) { cm(1, 1) = 1.0; } else if (dir == DIR_N) { cm(1, 1) = 1.0; cm(2, 2) = 1.0; } else { assert(false); } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } void correctLambda(MatrixType& cm2, const VectorHilbertStateType& natBasis) const { SizeType n = natBasis.size(); PsimagLite::Matrix dens(n,n); SizeType dofs = 2*modelParameters_.orbitals; for (SizeType ii=0;ii 0); SizeType n = cm.rows(); assert(n == cm.cols()); assert(n > target.size()); n -= target.size(); MatrixType cm2(n,n); SizeType ii = 0; for (SizeType i = 0; i < cm.rows(); ++i) { VectorSizeType::const_iterator it = std::find(target.begin(), target.end(), i); if (it != target.end()) continue; SizeType jj = 0; for (SizeType j = 0; j < cm.cols(); ++j) { VectorSizeType::const_iterator it = std::find(target.begin(), target.end(), j); if (it != target.end()) continue; cm2(ii,jj) = cm(i,j); jj++; } ii++; } cm = cm2; } //! Calculate fermionic sign when applying operator c^\dagger_{i\sigma} //! to basis state ket RealType sign(HilbertStateType const &ket, int i, int sigma) const { SizeType orbitals = modelParameters_.orbitals; if (orbitals == 1) return 1; int value=0; SizeType dofs=2*modelParameters_.orbitals; for (SizeType alpha=0;alpha0) value += HilbertSpaceFeAsType::electrons(ket); unsigned int x = HilbertSpaceFeAsType::get(ket,i); int spin = sigma/modelParameters_.orbitals; SizeType orb = sigma % modelParameters_.orbitals; for (SizeType j=0;j 1) target.push_back(STATE_EMPTY); if (modelParameters_.reinterpretAndTruncate > 2) { target.push_back(STATE_UP_A); target.push_back(STATE_DOWN_A); } for (SizeType i = 0; i < natBasis.size(); ++i) { typename VectorHilbertStateType::const_iterator it = std::find(target.begin(), target.end(), natBasis[i]); if (it == target.end()) continue; indices.push_back(i); } } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType) const { SizeType n=block.size(); SizeType orbitals = modelParameters_.orbitals; SizeType linSize = superGeometry_.numberOfSites(); for (SizeType i=0;inaturalOperator("nup",i,orb).getCRS()); SparseMatrixType ndown(this->naturalOperator("ndown",i,orb).getCRS()); SparseMatrixType m = nup; assert(block[i]+linSize*orb+linSize*orbitals 0 && ket == REINTERPRET_6) continue; if (truncated && modelParameters_.reinterpretAndTruncate > 1 && ket == STATE_EMPTY) continue; bool b = (ket == STATE_UP_A || ket == STATE_DOWN_A); if (truncated && modelParameters_.reinterpretAndTruncate > 2 && b) continue; SizeType orb = 0; while (ket > 0) { if (ket & 1) electrons[orb]++; orb++; if (orb >= orbitals) orb = 0; ket >>= 1; } bool addIt = true; for (SizeType orb = 0; orb < electrons.size(); ++orb) { if (electrons[orb] > 1) addIt = false; electrons[orb] = 0; } if (addIt) basisTmp.push_back(basis[i]); } basis = basisTmp; } void setSymmetryRelated(VectorQnType& qns, const HilbertBasisType& basis, int n) const { assert(n==1); // find j,m and flavors (do it by hand since we assume n==1) // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType typedef std::pair PairType; SizeType orbitals = modelParameters_.orbitals; VectorSizeType other(1, 0); // <----- conserve only 1 number, not two qns.resize(basis.size(), QnType::zero()); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair(0,0); if(orbitals==1) jmpair = calcJmvalue(basis[i]); // nup SizeType electronsUp = 0; SizeType electronsDown = 0; for (SizeType dof = 0; dof < orbitals; ++dof) { HilbertStateType mask = (1< PairType calcJmvalue(const HilbertStateType& ket) const { return calcJmValueAux(ket); } // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType // does not work for 6 or 9 template PairType calcJmValueAux(const HilbertStateType& ket) const { SizeType site0=0; SizeType site1=0; spinSquared_.doOnePairOfSitesA(ket,site0,site1); spinSquared_.doOnePairOfSitesB(ket,site0,site1); spinSquared_.doDiagonal(ket,site0,site1); RealType sz = spinSquared_.spinZ(ket,site0); PairType jm= spinSquaredHelper_.getJmPair(sz); return jm; } ParametersModelTjAnisotropic modelParameters_; const SuperGeometryType& superGeometry_; SizeType offset_; SpinSquaredHelper spinSquaredHelper_; SpinSquared > spinSquared_; HilbertBasisType basis_; VectorQnType qq_; VectorOperatorType creationMatrix_; }; //class TjAnisotropic } // namespace Dmrg /*@}*/ #endif // DMRG_TJ_Anisotropic_H dmrgpp-6.02/src/Models/TjMultiOrb/000077500000000000000000000000001414604301300167735ustar00rootroot00000000000000dmrgpp-6.02/src/Models/TjMultiOrb/ParametersModelTjMultiOrb.h000066400000000000000000000113311414604301300242030ustar00rootroot00000000000000/* Copyright (c) 2009-2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersModelTjMultiOrb.h * * Contains the parameters for the Hubbard model and function to * read them from a file * */ #ifndef DMRG_PARAMS_TJMULTIORB_H #define DMRG_PARAMS_TJMULTIORB_H #include "ParametersModelBase.h" namespace Dmrg { //! ModelTjMultiOrb Parameters template struct ParametersModelTjMultiOrb : public ParametersModelBase { typedef ParametersModelBase BaseType; template ParametersModelTjMultiOrb(IoInputType& io) : BaseType(io, false),reinterpretAndTruncate(0) { io.read(potentialV,"potentialV"); io.readline(orbitals,"Orbitals="); try { io.readline(reinterpretAndTruncate,"JHundInfinity="); } catch (std::exception&) {} if (orbitals != 2 && reinterpretAndTruncate > 0) throw PsimagLite::RuntimeError("JHundInfinity>0 only possible for orbitals==2\n"); if (reinterpretAndTruncate > 3) throw PsimagLite::RuntimeError("JHundInfinity must be less or equal to 3\n"); } template SizeType memResolv(SomeMemResolvType&, SizeType, PsimagLite::String = "") const { return 0; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersModelTjMultiOrb"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/potentialV", potentialV); io.write(label + "/orbitals", orbitals); io.write(label + "/reinterpretAndTruncate", reinterpretAndTruncate); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersModelTjMultiOrb& parameters) { os<<"potentialV\n"; os<::Type potentialV; SizeType orbitals; SizeType reinterpretAndTruncate; }; } // namespace Dmrg /*@}*/ #endif dmrgpp-6.02/src/Models/TjMultiOrb/TjMultiOrb.h000066400000000000000000000714201414604301300212030ustar00rootroot00000000000000/* Copyright (c) 2009-2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file TjMultiOrb.h * * Hubbard + Heisenberg * */ #ifndef DMRG_TJ_MULTIORB_H #define DMRG_TJ_MULTIORB_H #include "../Models/HubbardOneBand/ModelHubbard.h" #include "../Models/TjMultiOrb/ParametersModelTjMultiOrb.h" #include "../Models/FeAsModel/HilbertSpaceFeAs.h" #include "ProgramGlobals.h" namespace Dmrg { //! t-J model for DMRG solver, uses ModelHubbard and ModelHeisenberg by containment template class TjMultiOrb : public ModelBaseType { public: typedef typename ModelBaseType::VectorRealType VectorRealType; typedef ModelHubbard ModelHubbardType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::HilbertBasisType HilbertBasisFeAsType; typedef typename HilbertBasisFeAsType::value_type HilbertStateFeAs; typedef HilbertSpaceFeAs HilbertSpaceFeAsType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelHubbardType::HilbertState HilbertStateType; typedef typename ModelHubbardType::HilbertBasisType HilbertBasisType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename OperatorType::PairType PairType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorHilbertStateType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; static const int FERMION_SIGN = -1; enum {REINTERPRET_6 = 6, REINTERPRET_9 = 9}; enum {STATE_EMPTY = 0, STATE_UP_A = 1, STATE_DOWN_A = 4}; enum {SPIN_UP, SPIN_DOWN}; TjMultiOrb(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), superGeometry_(geometry), offset_(5*modelParameters_.orbitals), // c^\dagger_up, c^\dagger_down, S+, Sz, n spinSquared_(spinSquaredHelper_,modelParameters_.orbitals,2*modelParameters_.orbitals) { if (modelParameters_.orbitals > 1) { PsimagLite::String str("TjMultiOrb with more than 1 orbital is EXPERIMENTAL\n"); std::cerr<params().model; io.createGroup(label); modelParameters_.write(label, io); io.write(label + "/offset_", offset_); spinSquaredHelper_.write(label, io); spinSquared_.write(label, io); io.write(label + "/basis_", basis_); io.write(label + "/qq_", qq_); io.write(label + "/creationMatrix_", creationMatrix_); } protected: void fillLabeledOperators(VectorQnType& qns) { SizeType site = 0; VectorSizeType block(1, site); VectorHilbertStateType natBasis; SparseMatrixType tmpMatrix; setNaturalBasis(natBasis, block, false); setSymmetryRelated(qns, natBasis, block.size()); SizeType dof = 2*modelParameters_.orbitals; OpsLabelType& c = this->createOpsLabel("c"); OpsLabelType& splus = this->createOpsLabel("splus"); OpsLabelType& sz = this->createOpsLabel("sz"); OpsLabelType& nop = this->createOpsLabel("n"); OpsLabelType& sminus = this->createOpsLabel("sminus"); this->makeTrackable("c"); this->makeTrackable("splus"); this->makeTrackable("sz"); this->makeTrackable("n"); // Set the operators c^\daggger_{i\sigma} in the natural basis SizeType n = natBasis.size(); MatrixType rotation(n,n); MatrixType rotationR(n,n); computeRotation(rotation,rotationR,natBasis); for (SizeType i=0;i0) asign= 1; typename OperatorType::Su2RelatedType su2related; if (sigma==0) { su2related.source.push_back(i*offset_); su2related.source.push_back(i*offset_+1); su2related.transpose.push_back(-1); su2related.transpose.push_back(-1); su2related.offset = modelParameters_.orbitals; } OperatorType myOp(tmpMatrix, ProgramGlobals::FermionOrBosonEnum::FERMION, PairType(1, 1 - sigma), asign, su2related); c.push(myOp); } // Set the operators S^+_i in the natural basis for (SizeType i=0;icreateOpsLabel("nup"); for (SizeType dof = 0; dof < modelParameters_.orbitals; ++dof) { SizeType x = dof + SPIN_UP*modelParameters_.orbitals; OperatorType cup = this->naturalOperator("c", site, x); cup.dagger(); SparseMatrixType nup(multiplyTc(cup.getCRS(),cup.getCRS())); if (modelParameters_.orbitals > 1) nup = findNMatrices(dof + SPIN_UP*modelParameters_.orbitals); typename OperatorType::Su2RelatedType su2Related; nupop.push(OperatorType(nup, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } OpsLabelType& ndownpop = this->createOpsLabel("ndown"); for (SizeType dof = 0; dof < modelParameters_.orbitals; ++dof) { SizeType x = dof + SPIN_DOWN*modelParameters_.orbitals; OperatorType cdown = this->naturalOperator("c", site, x); cdown.dagger(); SparseMatrixType ndown(multiplyTc(cdown.getCRS(),cdown.getCRS())); if (modelParameters_.orbitals > 1) ndown = findNMatrices(dof + SPIN_DOWN*modelParameters_.orbitals); typename OperatorType::Su2RelatedType su2Related; ndownpop.push(OperatorType(ndown, ProgramGlobals::FermionOrBosonEnum::BOSON, typename OperatorType::PairType(0,0), 1.0, su2Related)); } } void fillModelLinks() { //! There are orbitals*orbitals different orbitals //! and 2 spins. Spin is diagonal so we end up with 2*orbitals*orbitals possiblities //! a up a up, a up b up, b up a up, b up, b up, etc //! and similarly for spin down. const SizeType orbitals = modelParameters_.orbitals; ModelTermType& hop = ModelBaseType::createTerm("hopping"); bool isSu2 = BasisType::useSu2Symmetry(); ModelTermType& spsm = ModelBaseType::createTerm("SplusSminus"); ModelTermType& szsz = ModelBaseType::createTerm("szsz"); ModelTermType& ninj = ModelBaseType::createTerm("ninj"); for (SizeType spin = 0; spin < 2; ++spin) { for (SizeType orb1 = 0; orb1 < orbitals; ++orb1) { OpForLinkType c1("c", orb1 + spin*orbitals, orb1); for (SizeType orb2 = 0; orb2 < orbitals; ++orb2) { OpForLinkType c2("c", orb2 + spin*orbitals, orb2); hop.push(c1, 'N', c2, 'C', typename ModelTermType::Su2Properties(1, (spin == 1) ? -1 : 1, spin)); } } } auto valueModiferTerm0 = [isSu2](ComplexOrRealType& value) { value *= (isSu2) ? -0.5 : 0.5;}; auto valueModifierTermOther = [isSu2](ComplexOrRealType& value) { if (isSu2) value = -value;}; for (SizeType orb1 = 0; orb1 < orbitals; ++orb1) { OpForLinkType splus1("splus", orb1, orb1); OpForLinkType sz1("sz", orb1, orb1); OpForLinkType n1("n", orb1, orb1); for (SizeType orb2 = 0; orb2 < orbitals; ++orb2) { OpForLinkType splus2("splus", orb2, orb2); OpForLinkType sz2("sz", orb2, orb2); OpForLinkType n2("n", orb2, orb2); spsm.push(splus1, 'N', splus2, 'C', valueModiferTerm0, typename ModelTermType::Su2Properties(2, -1, 2)); if (!isSu2) szsz.push(sz1, 'N', sz2, 'N', typename ModelTermType::Su2Properties(2, 0.5)); else spsm.push(splus1, 'N', splus2, 'C', valueModifierTermOther, typename ModelTermType::Su2Properties(2, -1, 2)); ninj.push(n1, 'N', n2, 'N'); } } } private: //! Find c^\dagger_isigma in the natural basis natBasis SparseMatrixType findCreationMatrices(int i, int sigma, const VectorHilbertStateType& natBasis, const MatrixType* rot, const MatrixType* rotT) const { assert(i == 0); HilbertStateType bra,ket; int n = natBasis.size(); MatrixType cm(n,n); SizeType orbitals = modelParameters_.orbitals; for (SizeType ii=0;ii cm(n,n); SizeType dofs = 2*modelParameters_.orbitals; for (SizeType ii=0;ii 1) correctLambda(cm,natBasis); truncateMatrix(cm,rot,rotT,natBasis); SparseMatrixType creationMatrix(cm); return creationMatrix; } SparseMatrixType findNMatrices(SizeType sigma) const { assert(sigma<2*modelParameters_.orbitals); VectorHilbertStateType natBasis; BlockType block(1,0); setNaturalBasis(natBasis, block, false); SizeType n = natBasis.size(); MatrixType cm(n,n); for (SizeType ii=0;ii 0 && (ket & masklm) == 0) { bra = ket ^ (masklp | masklm); int jj = PsimagLite::indexOrMinusOne(natBasis,bra); assert(jj>=0); cm(ii,jj) = 1.0; } } if (orbitals > 1) correctLambda(cm,natBasis); truncateMatrix(cm,rot,rotT,natBasis); SparseMatrixType operatorMatrix(cm); return operatorMatrix; } //! Find S^z_i in the natural basis natBasis SparseMatrixType findSzMatrices(int i, SizeType orb, const VectorHilbertStateType& natBasis, const MatrixType* rot, const MatrixType* rotT) const { assert(i == 0); int n = natBasis.size(); MatrixType cm(n,n); SizeType orbitals = modelParameters_.orbitals; for (SizeType ii=0;ii 1) correctLambda(cm,natBasis); truncateMatrix(cm,rot,rotT,natBasis); SparseMatrixType operatorMatrix(cm); return operatorMatrix; } void correctLambda(MatrixType& cm2, const VectorHilbertStateType& natBasis) const { SizeType n = natBasis.size(); PsimagLite::Matrix dens(n,n); SizeType dofs = 2*modelParameters_.orbitals; for (SizeType ii=0;ii 0); SizeType n = cm.rows(); assert(n == cm.cols()); assert(n > target.size()); n -= target.size(); MatrixType cm2(n,n); SizeType ii = 0; for (SizeType i = 0; i < cm.rows(); ++i) { VectorSizeType::const_iterator it = std::find(target.begin(), target.end(), i); if (it != target.end()) continue; SizeType jj = 0; for (SizeType j = 0; j < cm.cols(); ++j) { VectorSizeType::const_iterator it = std::find(target.begin(), target.end(), j); if (it != target.end()) continue; cm2(ii,jj) = cm(i,j); jj++; } ii++; } cm = cm2; } //! Calculate fermionic sign when applying operator c^\dagger_{i\sigma} //! to basis state ket RealType sign(HilbertStateType const &ket, int i, int sigma) const { SizeType orbitals = modelParameters_.orbitals; if (orbitals == 1) return 1; int value=0; SizeType dofs=2*modelParameters_.orbitals; for (SizeType alpha=0;alpha0) value += HilbertSpaceFeAsType::electrons(ket); unsigned int x = HilbertSpaceFeAsType::get(ket,i); int spin = sigma/modelParameters_.orbitals; SizeType orb = sigma % modelParameters_.orbitals; for (SizeType j=0;j 1) target.push_back(STATE_EMPTY); if (modelParameters_.reinterpretAndTruncate > 2) { target.push_back(STATE_UP_A); target.push_back(STATE_DOWN_A); } for (SizeType i = 0; i < natBasis.size(); ++i) { typename VectorHilbertStateType::const_iterator it = std::find(target.begin(), target.end(), natBasis[i]); if (it == target.end()) continue; indices.push_back(i); } } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType) const { SizeType n=block.size(); SizeType orbitals = modelParameters_.orbitals; SizeType linSize = superGeometry_.numberOfSites(); for (SizeType i=0;inaturalOperator("nup",i,orb).getCRS()); SparseMatrixType ndown(this->naturalOperator("ndown",i,orb).getCRS()); SparseMatrixType m = nup; assert(block[i]+linSize*orb+linSize*orbitals 0 && ket == REINTERPRET_6) continue; if (truncated && modelParameters_.reinterpretAndTruncate > 1 && ket == STATE_EMPTY) continue; bool b = (ket == STATE_UP_A || ket == STATE_DOWN_A); if (truncated && modelParameters_.reinterpretAndTruncate > 2 && b) continue; SizeType orb = 0; while (ket > 0) { if (ket & 1) electrons[orb]++; orb++; if (orb >= orbitals) orb = 0; ket >>= 1; } bool addIt = true; for (SizeType orb = 0; orb < electrons.size(); ++orb) { if (electrons[orb] > 1) addIt = false; electrons[orb] = 0; } if (addIt) basisTmp.push_back(basis[i]); } basis = basisTmp; } void setSymmetryRelated(VectorQnType& qns, const HilbertBasisType& basis, int n) const { assert(n==1); // find j,m and flavors (do it by hand since we assume n==1) // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType typedef std::pair PairType; SizeType orbitals = modelParameters_.orbitals; VectorSizeType other(2, 0); qns.resize(basis.size(), QnType::zero()); for (SizeType i = 0; i < basis.size(); ++i) { PairType jmpair(0,0); if(orbitals==1) jmpair = calcJmvalue(basis[i]); // nup SizeType electronsUp = 0; SizeType electronsDown = 0; for (SizeType dof = 0; dof < orbitals; ++dof) { HilbertStateType mask = (1< PairType calcJmvalue(const HilbertStateType& ket) const { return calcJmValueAux(ket); } // note: we use 2j instead of j // note: we use m+j instead of m // This assures us that both j and m are SizeType // does not work for 6 or 9 template PairType calcJmValueAux(const HilbertStateType& ket) const { SizeType site0=0; SizeType site1=0; spinSquared_.doOnePairOfSitesA(ket,site0,site1); spinSquared_.doOnePairOfSitesB(ket,site0,site1); spinSquared_.doDiagonal(ket,site0,site1); RealType sz = spinSquared_.spinZ(ket,site0); PairType jm= spinSquaredHelper_.getJmPair(sz); return jm; } ParametersModelTjMultiOrb modelParameters_; const SuperGeometryType& superGeometry_; SizeType offset_; SpinSquaredHelper spinSquaredHelper_; SpinSquared > spinSquared_; HilbertBasisType basis_; VectorQnType qq_; VectorOperatorType creationMatrix_; }; //class TjMultiOrb } // namespace Dmrg /*@}*/ #endif // DMRG_TJ_MULTIORB_H dmrgpp-6.02/src/Models/UlsOsu/000077500000000000000000000000001414604301300161725ustar00rootroot00000000000000dmrgpp-6.02/src/Models/UlsOsu/ParametersModelUlsOsu.h000066400000000000000000000122711414604301300226050ustar00rootroot00000000000000/* Copyright (c) 2009-2012, UT-Battelle, LLC All rights reserved [DMRG++, Version 2.0.0] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /** \ingroup DMRG */ /*@{*/ /*! \file ParametersModelUlsOsu.h * * Contains the parameters for the Hubbard model and function to * read them from a file * */ #ifndef DMRG_PARAMS_UlsOsu_H #define DMRG_PARAMS_UlsOsu_H #include "ParametersModelBase.h" namespace Dmrg { //! ModelUlsOsu Parameters template struct ParametersModelUlsOsu : public ParametersModelBase { typedef ParametersModelBase BaseType; typedef typename PsimagLite::Vector::Type VectorRealType; template ParametersModelUlsOsu(IoInputType& io) : BaseType(io, false) { SizeType nsites = 0; io.readline(nsites, "TotalNumberOfSites="); io.readline(orbitals,"Orbitals="); magneticFieldX.resize(nsites, 0.0); magneticFieldY.resize(nsites, 0.0); magneticFieldZ.resize(nsites, 0.0); try { io.read(magneticFieldX,"MagneticFieldX"); std::cerr<<"Has MagneticFieldX \n"; } catch (std::exception&) { } try { io.read(magneticFieldY,"MagneticFieldY"); std::cerr<<"Has MagneticFieldY \n"; } catch (std::exception&) { } try { io.read(magneticFieldZ,"MagneticFieldZ"); std::cerr<<"Has MagneticFieldZ \n"; } catch (std::exception&) { } } template SizeType memResolv(SomeMemResolvType&, SizeType, PsimagLite::String = "") const { return 0; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { PsimagLite::String label = label1 + "/ParametersModelUlsOsu"; io.createGroup(label); BaseType::write(label, io); io.write(label + "/magneticFieldX", magneticFieldX); io.write(label + "/magneticFieldY", magneticFieldY); io.write(label + "/magneticFieldZ", magneticFieldZ); } //! Function that prints model parameters to stream os friend std::ostream& operator<<(std::ostream &os, const ParametersModelUlsOsu& parameters) { os<<"MagneticFieldX="< class UlsOsu : public ModelBaseType { enum InternalDir {DIR_SX, DIR_SY, DIR_SZ, DIR_LX, DIR_LY, DIR_LZ}; public: typedef typename ModelBaseType::VectorRealType VectorRealType; typedef ModelHubbard ModelHubbardType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelBaseType::SuperGeometryType SuperGeometryType; typedef typename ModelBaseType::LeftRightSuperType LeftRightSuperType; typedef typename ModelBaseType::LinkType LinkType; typedef typename ModelHelperType::OperatorsType OperatorsType; typedef typename OperatorsType::OperatorType OperatorType; typedef typename PsimagLite::Vector::Type VectorOperatorType; typedef typename ModelHelperType::RealType RealType; typedef typename ModelBaseType::QnType QnType; typedef typename QnType::VectorQnType VectorQnType; typedef typename ModelHelperType::SparseMatrixType SparseMatrixType; typedef typename SparseMatrixType::value_type ComplexOrRealType; typedef typename ModelBaseType::HilbertBasisType HilbertBasisFeAsType; typedef typename HilbertBasisFeAsType::value_type HilbertStateFeAs; typedef HilbertSpaceFeAs HilbertSpaceFeAsType; typedef typename ModelBaseType::MyBasis BasisType; typedef typename ModelBaseType::BasisWithOperatorsType MyBasisWithOperators; typedef typename ModelHubbardType::HilbertState HilbertStateType; typedef typename ModelHubbardType::HilbertBasisType HilbertBasisType; typedef typename ModelHelperType::BlockType BlockType; typedef typename ModelBaseType::SolverParamsType SolverParamsType; typedef typename ModelBaseType::VectorType VectorType; typedef typename ModelBaseType::InputValidatorType InputValidatorType; typedef typename OperatorType::PairType PairType; typedef PsimagLite::Matrix MatrixType; typedef typename PsimagLite::Vector::Type VectorHilbertStateType; typedef typename PsimagLite::Vector::Type VectorSizeType; typedef typename ModelBaseType::OpsLabelType OpsLabelType; typedef typename ModelBaseType::OpForLinkType OpForLinkType; typedef typename ModelBaseType::ModelTermType ModelTermType; static const int FERMION_SIGN = -1; enum {STATE_EMPTY = 0, STATE_UP_A = 1, STATE_DOWN_A = 4}; enum {SPIN_UP, SPIN_DOWN}; UlsOsu(const SolverParamsType& solverParams, InputValidatorType& io, const SuperGeometryType& geometry) : ModelBaseType(solverParams, geometry, io), modelParameters_(io), superGeometry_(geometry), offset_(6), // Sx, Sy, Sz, Lx, Ly, Lz spinSquared_(spinSquaredHelper_,modelParameters_.orbitals,2*modelParameters_.orbitals) { if (modelParameters_.orbitals != 1) throw PsimagLite::RuntimeError("UlsOsu: must use Orbital=1 \n"); SizeType n = superGeometry_.numberOfSites(); SizeType mx = modelParameters_.magneticFieldX.size(); SizeType my = modelParameters_.magneticFieldY.size(); SizeType mz = modelParameters_.magneticFieldZ.size(); SizeType m = mz; if (mx != my || my != mz || mz != mx ) { PsimagLite::String msg("tJKitaev: If provided, "); msg += " MagneticField must be a vector of " + ttos(n) + " entries.\n"; msg += " MagneticFieldX, MagneticFieldY, MagneticFieldZ must be "; msg += "provided in all 3 (x,y,z) directions.\n"; throw PsimagLite::RuntimeError(msg); } if (m > 0 && m != n) { PsimagLite::String msg("Kitaev: If provided, "); msg += " MagneticField must be a vector of " + ttos(n) + " entries.\n"; throw PsimagLite::RuntimeError(msg); } if (BasisType::useSu2Symmetry()) err("UlsOsu does not have SU(2) implimentation \n"); // fill caches ProgramGlobals::init(superGeometry_.numberOfSites() + 1); BlockType block(1,0); setNaturalBasis(basis_, block, true); } //! Find c^\dagger_isigma in the natural basis natBasis SparseMatrixType findCreationMatrices(int, SizeType sigma, const VectorHilbertStateType&) const { assert(sigma < creationMatrix_.size()); return creationMatrix_[sigma].getCRS(); } SizeType maxElectronsOneSpin() const { return 1*superGeometry_.numberOfSites() + 1; } void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const { if (!io.doesGroupExist(label1)) io.createGroup(label1); PsimagLite::String label = label1 + "/" + this->params().model; io.createGroup(label); modelParameters_.write(label, io); io.write(label + "/offset_", offset_); spinSquaredHelper_.write(label, io); spinSquared_.write(label, io); io.write(label + "/basis_", basis_); io.write(label + "/qq_", qq_); io.write(label + "/creationMatrix_", creationMatrix_); } protected: void fillLabeledOperators(VectorQnType& qns) { SizeType site = 0; VectorSizeType block(1, site); VectorHilbertStateType natBasis; SparseMatrixType tmpMatrix; typename MatrixType::value_type dummy = 0.0; setNaturalBasis(natBasis, block, false); OpsLabelType& sx = this->createOpsLabel("sx"); OpsLabelType& sy = this->createOpsLabel("sy"); OpsLabelType& sz = this->createOpsLabel("sz"); OpsLabelType& lx = this->createOpsLabel("lx"); OpsLabelType& ly = this->createOpsLabel("ly"); OpsLabelType& lz = this->createOpsLabel("lz"); this->makeTrackable("sx"); this->makeTrackable("sy"); this->makeTrackable("sz"); this->makeTrackable("lx"); this->makeTrackable("ly"); this->makeTrackable("lz"); // Set local spin and charge matrices for (SizeType i=0;i) const { SizeType total = natBasis.size(); double val = sqrt(2.0); MatrixType Ax(3,3), Ay(3,3), Az(3,3), Iden(3,3); Ax.setTo(0.0); Ay.setTo(0.0); Az.setTo(0.0); Iden.setTo(0.0); // -- Spin-1 matricies -- Ax(0,1) = 1.0/val; Ax(1,0)= 1.0/val; Ax(1,2) = 1.0/val; Ax(2,1) = 1.0/val; Ay(0,1) = 1.0/val * std::complex(0.0, -1.0); Ay(1,2) = 1.0/val * std::complex(0.0, -1.0); Ay(1,0) = 1.0/val * std::complex(0.0, 1.0); Ay(2,1) = 1.0/val * std::complex(0.0, 1.0); Az(0,0) = 1.0; Az(2,2) = -1.0; Iden(0,0) = 1.0; Iden(1,1) = 1.0; Iden(2,2) = 1.0; // -- Spin-1 matricies -- MatrixType cm(total,total); cm.setTo(0.0); assert(total == 9); if (dir == DIR_SX) { outerProduct(cm,Ax,Iden); } else if (dir == DIR_SY) { outerProduct(cm,Ay,Iden); } else if (dir == DIR_SZ) { outerProduct(cm,Az,Iden); } else if (dir == DIR_LX) { outerProduct(cm,Iden,Ax); } else if (dir == DIR_LY) { outerProduct(cm,Iden,Ay); } else if (dir == DIR_LZ) { outerProduct(cm,Iden,Az); } else { assert(false); } SparseMatrixType operatorMatrix(cm); return operatorMatrix; } void addDiagonalsInNaturalBasis(SparseMatrixType &hmatrix, const BlockType& block, RealType) const { SizeType n=block.size(); SizeType linSize = superGeometry_.numberOfSites(); if (modelParameters_.magneticFieldX.size() != linSize) return; // <<---- PLEASE NOTE EARLY EXIT HERE if (modelParameters_.magneticFieldY.size() != linSize) return; // <<---- PLEASE NOTE EARLY EXIT HERE if (modelParameters_.magneticFieldZ.size() != linSize) return; // <<---- PLEASE NOTE EARLY EXIT HERE for (SizeType i = 0; i < n; ++i) { SizeType site = block[i]; // magnetic field x const OperatorType& sx = ModelBaseType::naturalOperator("sx", site, 0); RealType tmp = modelParameters_.magneticFieldX[block[0]]; hmatrix += tmp*sx.getCRS(); // magnetic field y const OperatorType& sy = ModelBaseType::naturalOperator("sy", site, 0); tmp = modelParameters_.magneticFieldY[block[0]]; hmatrix += tmp*sy.getCRS(); // magnetic field z const OperatorType& sz = ModelBaseType::naturalOperator("sz", site, 0); tmp = modelParameters_.magneticFieldZ[block[0]]; hmatrix += tmp*sz.getCRS(); } } void setNaturalBasis(HilbertBasisType& basis, const VectorSizeType& block, bool truncated) const { assert(block.size()==1); assert(modelParameters_.orbitals == 1); HilbertStateType total = 9; basis.resize(total); //for (SizeType a = 0; a< total; ++a) basis[a] = a; if (modelParameters_.orbitals == 1 && basis.size() == 9) { basis[0] = 0; // e - e basis[1] = 1; // e - u basis[2] = 2; // e - d basis[3] = 3; // u - e basis[4] = 4; // u - u basis[5] = 5; // u - d basis[6] = 6; // d - e basis[7] = 7; // d - u basis[8] = 8; // d - d } } ParametersModelUlsOsu modelParameters_; const SuperGeometryType& superGeometry_; SizeType offset_; SpinSquaredHelper spinSquaredHelper_; SpinSquared > spinSquared_; HilbertBasisType basis_; VectorQnType qq_; VectorOperatorType creationMatrix_; }; //class UlsOsu } // namespace Dmrg /*@}*/ #endif // DMRG_TJ_Anisotropic_H dmrgpp-6.02/src/ObserveDriver.h000066400000000000000000000030601414604301300164460ustar00rootroot00000000000000#ifndef OBSERVEDRIVER_H #define OBSERVEDRIVER_H #include #define USE_PTHREADS_OR_NOT_NG #include "Observer.h" #include "ObservableLibrary.h" #include "Io/IoSelector.h" #include "Operators.h" #include "Geometry/Geometry.h" #include "CrsMatrix.h" #include "ModelHelperLocal.h" #include "VectorWithOffset.h" #include "VectorWithOffsets.h" #include "DmrgSolver.h" // only used for types #include "TargetingGroundState.h" #include "TargetingTimeStep.h" #include "TargetingDynamic.h" #include "TargetingCorrection.h" #include "TargetingCorrectionVector.h" #include "TargetingMetts.h" #include "BasisWithOperators.h" #include "LeftRightSuper.h" #include "InputNg.h" #include "Provenance.h" #include "InputCheck.h" #include "ModelSelector.h" #include "ModelBase.h" #include "InputFromDataOrNot.h" #include "SuperGeometry.h" namespace Dmrg { typedef PsimagLite::IoSelector::In IoInputType; #ifndef USE_FLOAT typedef double RealType; #else typedef float RealType; #endif typedef std::complex ComplexType; typedef PsimagLite::CrsMatrix MySparseMatrixComplex; typedef PsimagLite::CrsMatrix MySparseMatrixReal; typedef PsimagLite::InputNg InputNgType; typedef ParametersDmrgSolver ParametersDmrgSolverType; template bool observeOneFullSweep(IoInputType& io, const ModelType& model, const PsimagLite::String& list, SizeType orbitals); } #endif // OBSERVEDRIVER_H dmrgpp-6.02/src/ObserveDriver0.cpp000066400000000000000000000036521414604301300170700ustar00rootroot00000000000000#include "ObserveDriver1.h" namespace Dmrg { typedef Qn QnType; typedef VectorWithOffset VectorWithOffset1Type; typedef VectorWithOffset VectorWithOffset2Type; typedef VectorWithOffsets VectorWithOffset3Type; typedef VectorWithOffsets VectorWithOffset4Type; typedef Dmrg::SuperGeometry Geometry1Type; typedef Dmrg::SuperGeometry Geometry2Type; typedef Basis Basis1Type; typedef BasisWithOperators BasisWithOperators1Type; typedef LeftRightSuper LeftRightSuper1Type; typedef Basis Basis2Type; typedef BasisWithOperators BasisWithOperators2Type; typedef LeftRightSuper LeftRightSuper2Type; typedef ModelHelperLocal ModelHelper1Type; typedef ModelHelperLocal ModelHelper2Type; typedef ModelBase ModelBase1Type; typedef ModelBase ModelBase2Type; template bool observeOneFullSweep(IoInputType& io, const ModelBase1Type& model, const PsimagLite::String& list, SizeType orbitals); template bool observeOneFullSweep(IoInputType& io, const ModelBase2Type& model, const PsimagLite::String& list, SizeType orbitals); template bool observeOneFullSweep(IoInputType& io, const ModelBase1Type& model, const PsimagLite::String& list, SizeType orbitals); template bool observeOneFullSweep(IoInputType& io, const ModelBase2Type& model, const PsimagLite::String& list, SizeType orbitals); } dmrgpp-6.02/src/ObserveDriver1.cpp000066400000000000000000000016231414604301300170650ustar00rootroot00000000000000#include "ObserveDriver1.h" namespace Dmrg { typedef Qn QnType; typedef VectorWithOffset VectorWithOffset1Type; typedef VectorWithOffset VectorWithOffset2Type; typedef VectorWithOffsets VectorWithOffset3Type; typedef VectorWithOffsets VectorWithOffset4Type; typedef Dmrg::SuperGeometry Geometry1Type; typedef Dmrg::SuperGeometry Geometry2Type; typedef Basis Basis1Type; typedef BasisWithOperators BasisWithOperators1Type; typedef LeftRightSuper LeftRightSuper1Type; typedef Basis Basis2Type; typedef BasisWithOperators BasisWithOperators2Type; typedef LeftRightSuper LeftRightSuper2Type; } dmrgpp-6.02/src/ObserveDriver1.h000066400000000000000000000074011414604301300165320ustar00rootroot00000000000000#ifndef OBSERVEDRIVER1_H #define OBSERVEDRIVER1_H #include "ObserveDriver.h" namespace Dmrg { template bool observeOneFullSweep(IoInputType& io, const ModelType& model, const PsimagLite::String& list, SizeType orbitals) { typedef typename ModelType::SuperGeometryType SuperGeometryType; typedef Observer ObserverType; typedef ObservableLibrary ObservableLibraryType; typedef typename ObservableLibraryType::ManyPointActionType ManyPointActionType; typedef typename PsimagLite::OneOperatorSpec::SiteSplit SiteSplitType; static SizeType start = 0; const SuperGeometryType& superGeometry = model.superGeometry(); SizeType n = superGeometry.numberOfSites(); SizeType rows = n; // could be n/2 if there's enough symmetry SizeType cols = n; SizeType nf = n - 2; SizeType trail = 0; SizeType end = start + nf; PsimagLite::Vector::Type vecOptions; PsimagLite::split(vecOptions, list, ","); bool hasTrail = false; for (SizeType i = 0; i < vecOptions.size(); ++i) { PsimagLite::String item = vecOptions[i]; PsimagLite::String label = "%nf="; std::size_t labelIndex = item.find(label); if (labelIndex == 0) { nf = atoi(item.substr(label.length()).c_str()); rows = nf; cols = nf; std::cerr<<"observe: Found "< 0 && item[0] != '<') observerLib.measure(item, rows, cols, *manyPointAction, orbitals); else observerLib.interpret(item, rows, cols, *manyPointAction); } start = end; delete manyPointAction; manyPointAction = 0; return observerLib.endOfData(); } } #endif // OBSERVEDRIVER1_H dmrgpp-6.02/src/ObserveDriver2.cpp000066400000000000000000000017741414604301300170750ustar00rootroot00000000000000#include "ObserveDriver1.h" namespace Dmrg { typedef Qn QnType; typedef VectorWithOffset VectorWithOffset2Type; typedef VectorWithOffsets VectorWithOffset4Type; typedef Dmrg::SuperGeometry Geometry1Type; typedef Basis Basis2Type; typedef BasisWithOperators BasisWithOperators2Type; typedef LeftRightSuper LeftRightSuper2Type; typedef ModelHelperLocal ModelHelper2Type; typedef ModelBase ModelBase5Type; template bool observeOneFullSweep(IoInputType& io, const ModelBase5Type& model, const PsimagLite::String& list, SizeType orbitals); template bool observeOneFullSweep(IoInputType& io, const ModelBase5Type& model, const PsimagLite::String& list, SizeType orbitals); } dmrgpp-6.02/src/ProgramGlobals.cpp000066400000000000000000000070711414604301300171410ustar00rootroot00000000000000/* Copyright (c) 2009-2016-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] [by G.A., Oak Ridge National Laboratory] UT Battelle Open Source Software License 11242008 OPEN SOURCE LICENSE Subject to the conditions of this License, each contributor to this software hereby grants, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Software. 1. Redistributions of Software must retain the above copyright and license notices, this list of conditions, and the following disclaimer. Changes or modifications to, or derivative works of, the Software should be noted with comments and the contributor and organization's name. 2. Neither the names of UT-Battelle, LLC or the Department of Energy nor the names of the Software contributors may be used to endorse or promote products derived from this software without specific prior written permission of UT-Battelle. 3. The software and the end-user documentation included with the redistribution, with or without modification, must include the following acknowledgment: "This product includes software produced by UT-Battelle, LLC under Contract No. DE-AC05-00OR22725 with the Department of Energy." ********************************************************* DISCLAIMER THE SOFTWARE IS SUPPLIED 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 OWNER, CONTRIBUTORS, UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY 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. NEITHER THE UNITED STATES GOVERNMENT, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE COPYRIGHT OWNER, NOR ANY OF THEIR EMPLOYEES, REPRESENTS THAT THE USE OF ANY INFORMATION, DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ********************************************************* */ /*! \file ProgramGlobals.cpp * * * */ #include "ProgramGlobals.h" namespace Dmrg { SizeType ProgramGlobals::maxElectronsOneSpin = 0; bool ProgramGlobals::oldChangeOfBasis = false; const PsimagLite::String ProgramGlobals::license= "Copyright (c) 2009-2016-2018, UT-Battelle, LLC\n" "All rights reserved\n" "\n" "[DMRG++, Version " + ttos(DMRGPP_VERSION) + "]\n" "\n" "---------------------------------------------------------\n" "THE SOFTWARE IS SUPPLIED BY THE COPYRIGHT HOLDERS AND\n" "CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n" "WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n" "WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n" "PARTICULAR PURPOSE ARE DISCLAIMED.\n" "\n" "Please see full open source license included in file LICENSE.\n" "---------------------------------------------------------\n" "\n"; PsimagLite::String ProgramGlobals::SYSTEM_STACK_STRING = "SystemStack"; PsimagLite::String ProgramGlobals::ENVIRON_STACK_STRING = "EnvironStack"; } // namespace Dmrg dmrgpp-6.02/src/Provenance.cpp000066400000000000000000000003721414604301300163230ustar00rootroot00000000000000#include "Provenance.h" std::ostream& operator<<(std::ostream& os, const Provenance&) { os<<"DMRG++ version "<>(std::istream& is,Su2Related& x) { is>>x.offset; return is; } std::ostream& operator<<(std::ostream& os,const Su2Related& x) { os< 2 && pathname[0] == '.' && pathname[1] == '.') { addDotDot = true; path1 = pathname.substr(2,pathname.length()); } if (pathname.length() > 1 && pathname[0] == '/') path1 = pathname; if (path1 == "") return pre + pathname; size_t index = path1.find_last_of("/"); index++; PsimagLite::String ret = path1.substr(0,index) + pre + path1.substr(index,path1.length()); return (addDotDot) ? ".." + ret : ret; } SizeType exactDivision(SizeType a, SizeType b) { SizeType c = static_cast(a/b); if (c * b != a) throw PsimagLite::RuntimeError("exactDivision expected\n"); return c; } SizeType bitSizeOfInteger(SizeType x) { SizeType counter = 0; while (x) { counter++; x >>= 1; } return counter; } SizeType powUint(SizeType x, SizeType n) { if (n == 0) return 1; if (n == 1) return x; SizeType ret = x; for (SizeType i = 1; i < n; ++i) ret *= x; return ret; } } //namespace utils dmrgpp-6.02/src/Version.h000066400000000000000000000000751414604301300153150ustar00rootroot00000000000000#ifndef DMRGPP_VERSION #define DMRGPP_VERSION "6.02" #endif dmrgpp-6.02/src/configure.pl000077500000000000000000000105431414604301300160410ustar00rootroot00000000000000#!/usr/bin/perl =pod Copyright (c) 2009-2018, UT-Battelle, LLC All rights reserved [DMRG++, Version 5.] ********************************************************* THE SOFTWARE IS SUPPLIED 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. Please see full open source license included in file LICENSE. ********************************************************* =cut use warnings; use strict; use Getopt::Long qw(:config no_ignore_case); use lib "../../PsimagLite/scripts"; use NewMake; use lib "."; use DmrgDriver; use PsiTag; my ($flavor, $generateSources, $su2enabled, $lto) = (NewMake::noFlavor() , 0, 0, 0); my $usage = "USAGE: $0 [-f flavor] [-s] [-su2] [-lto] [-c config]\n"; my $config; GetOptions('f=s' => \$flavor, 's' => \$generateSources, 'su2' => \$su2enabled, 'lto' => \$lto, 'c=s' => \$config) or die "$usage\n"; my $gccdash = ""; if ($lto == 1) { $gccdash = "gcc-"; $lto = "-flto"; } else { $lto = ""; } my $basicConfig = "../../dmrgpp/TestSuite/inputs/ConfigBase.psiTag"; my @configFiles = NewMake::configFilesList($basicConfig, $config); system("cd KronUtil; perl configure.pl \"@configFiles\" $flavor $gccdash"); my %provenanceDriver = (name => 'Provenance', aux => 1); my %progGlobalsDriver = (name => 'ProgramGlobals', aux => 1); my %utilsDriver = (name => 'Utils', aux => 1); my %qnDriver = (name => 'Qn', aux => 1); my %su2RelatedDriver = (name => 'Su2Related', aux => 1); my %toolboxDriver = (name => 'toolboxdmrg', dotos => 'toolboxdmrg.o ProgramGlobals.o Provenance.o Utils.o Qn.o'); my $dotos = "observe.o ProgramGlobals.o Provenance.o Utils.o Su2Related.o Qn.o "; $dotos .= " ObserveDriver0.o ObserveDriver1.o ObserveDriver2.o "; my %observeDriver = (name => 'observe', dotos => $dotos); my %observeDriver0 = (name => 'ObserveDriver0', aux => 1); my %observeDriver1 = (name => 'ObserveDriver1', aux => 1); my %observeDriver2 = (name => 'ObserveDriver2', aux => 1); my $libs = "libdmrgpp.a KronUtil/libkronutil.a"; my %manyOmegas = (name => 'manyOmegas', dotos => "manyOmegas.o $libs"); my %procOmegas = (name => 'procOmegas', dotos => "procOmegas.o $libs"); my @drivers = (\%provenanceDriver,\%su2RelatedDriver, \%progGlobalsDriver,\%utilsDriver, \%qnDriver, \%observeDriver,\%toolboxDriver, \%observeDriver0,\%observeDriver1,\%observeDriver2, \%manyOmegas, \%procOmegas); $dotos = "dmrg.o Provenance.o Utils.o Qn.o "; $dotos .= " ProgramGlobals.o Su2Related.o"; my $libUnits = "Provenance.o ProgramGlobals.o Qn.o Utils.o"; my @su2files = DmrgDriver::createTemplates($generateSources); my $templates = scalar(@su2files); for (my $i = 0; $i < $templates; ++$i) { next if (!$su2enabled && $su2files[$i]); my $name = "DmrgDriver$i"; my %dmrgDriver = (name => $name, aux => 1); push @drivers,\%dmrgDriver; $dotos .= " $name.o "; } my %dmrgMain = (name => 'dmrg', dotos => "$dotos KronUtil/libkronutil.a"); push @drivers,\%dmrgMain; my $su2flags = ($su2enabled) ? " -DENABLE_SU2 " : ""; my %args; $args{"CPPFLAGS"} = $lto.$su2flags; $args{"LDFLAGS"} = $lto; $args{"flavor"} = $flavor; $args{"code"} = "DMRG++"; $args{"configFiles"} = \@configFiles; $args{"additional3"} = "GitRevision.h"; $args{"additional4"} = $args{"additional3"}; system("./createGitRevision.pl GitRevision.h"); createMakefile(\@drivers, \%args); sub createMakefile { my ($drivers, $args) = @_; unlink("Makefile.dep"); NewMake::backupMakefile(); $args->{"additional3"} = "operator"; my $fh; open($fh, ">", "Makefile") or die "Cannot open Makefile for writing: $!\n"; NewMake::main($fh, $args, $drivers); local *FH = $fh; print FH<", $file) or exit(2); print FOUT "// DO NOT EDIT. It will be overwritten\n"; print FOUT "// Created by $0\n"; print FOUT "#ifndef GIT_REVISION_H\n"; print FOUT "#define PSIMAGLITE_GIT_REV \"$hashPsimagLite\"\n"; print FOUT "#define DMRGPP_GIT_REV \"$hashDmrgpp\"\n"; print FOUT "#define MICRO_ARCH \"$microArch\"\n"; print FOUT "#endif\n"; close(FOUT); sub getGitHash { my ($dir) = @_; my $file = "$dir/.git/HEAD"; open(FILE, "<", $file) or return "E0"; my $value = ; close(FILE); ($value) or return "E1"; chomp($value); if ($value =~ /^ref\: (.+$)/) { $file = "$dir/.git/$1"; } else { return "E2"; } open(FILE, "<", $file) or return "E3"; $value = ; close(FILE); ($value) or return "E4"; chomp($value); my $code = system("cd $dir; git diff --quiet"); ($code) or $code = 0; $code >>= 8; $value .= " +M" if ($code != 0); return $value; } sub getMicroArch { my $file = "/proc/cpuinfo"; open(FILE, "<", $file) or return "E0"; my $vendorId; while () { next unless (/vendor_id/); chomp; $vendorId = $_; } close(FILE); ($vendorId) or return "E1"; return "Intel" if ($vendorId =~ /intel/i); return "AMD" if ($vendorId =~ /AMD/); $vendorId =~ s/vendor_id[ \t] *:[ \t]*//; return $vendorId; } dmrgpp-6.02/src/dmrg.cpp000066400000000000000000000330751414604301300151620ustar00rootroot00000000000000#include "BlockDiagonalMatrix.h" #include "Concurrency.h" #include "Provenance.h" #include "RegisterSignals.h" #include "DmrgDriver.h" #include "Io/IoNg.h" #include "RunFinished.h" typedef PsimagLite::Vector::Type VectorStringType; //typedef PsimagLite::CrsMatrix > MySparseMatrixComplex; //typedef PsimagLite::CrsMatrix MySparseMatrixReal; using namespace Dmrg; std::streambuf *GlobalCoutBuffer = 0; std::ofstream GlobalCoutStream; typedef PsimagLite::Concurrency ConcurrencyType; void printLicense(const PsimagLite::PsiApp& app, const OperatorOptions& options) { if (!ConcurrencyType::root() || options.enabled) return; std::cout< void mainLoop3(typename MatrixVectorType::ModelType::SuperGeometryType& geometry, const ParametersDmrgSolverType& dmrgSolverParams, InputNgType::Readable& io, const OperatorOptions& opOptions) { typedef PsimagLite::ParametersForSolver ParametersForSolverType; if (dmrgSolverParams.options.isSet("ChebyshevSolver")) { typedef PsimagLite::ChebyshevSolver SolverType; mainLoop4(geometry, dmrgSolverParams, io, opOptions); } else { typedef PsimagLite::LanczosSolver SolverType; mainLoop4(geometry, dmrgSolverParams, io, opOptions); } } template void mainLoop2(InputNgType::Readable& io, const ParametersDmrgSolverType& dmrgSolverParams, const OperatorOptions& opOptions) { typedef typename MatrixVectorType::ModelType ModelBaseType; typedef typename ModelBaseType::QnType QnType; typedef typename ModelBaseType::ModelHelperType ModelHelperType; typedef typename ModelHelperType::SparseElementType SparseElementType; typedef SuperGeometry SuperGeometryType; SuperGeometryType geometry(io); if (dmrgSolverParams.options.isSet("printgeometry")) std::cout< VectorWithOffsetType; mainLoop3(geometry, dmrgSolverParams, io, opOptions); } else { typedef VectorWithOffset VectorWithOffsetType; mainLoop3(geometry, dmrgSolverParams, io, opOptions); } } template void mainLoop1(InputNgType::Readable& io, const ParametersDmrgSolverType& dmrgSolverParams, const OperatorOptions& opOptions) { typedef SuperGeometry SuperGeometryType; typedef PsimagLite::CrsMatrix MySparseMatrix; typedef Basis BasisType; typedef BasisWithOperators BasisWithOperatorsType; typedef LeftRightSuper LeftRightSuperType; typedef ModelHelperLocal ModelHelperType; typedef ModelBase ModelBaseType; if (dmrgSolverParams.options.isSet("MatrixVectorStored")) { mainLoop2 >(io, dmrgSolverParams, opOptions); } else if (dmrgSolverParams.options.isSet("MatrixVectorOnTheFly")) { mainLoop2 >(io, dmrgSolverParams, opOptions); } else { mainLoop2 >(io, dmrgSolverParams, opOptions); } } template class MixedRealComplex { public: static void run(InputNgType::Readable& io, const ParametersDmrgSolverType& dmrgSolverParams, const OperatorOptions& opOptions) { err("Mixed real/complex\n"); } }; template class MixedRealComplex { public: static void run(InputNgType::Readable& io, const ParametersDmrgSolverType& dmrgSolverParams, const OperatorOptions& opOptions) { mainLoop1(io, dmrgSolverParams, opOptions); } }; template void mainLoop0(InputNgType::Readable& io, const ParametersDmrgSolverType& dmrgSolverParams, const OperatorOptions& opOptions) { static const bool isComplex = PsimagLite::IsComplexNumber::True; typedef typename PsimagLite::Real::Type RealType; if (dmrgSolverParams.options.isSet("targetComplex")) { if (isComplex) err("No need to set targetComplex, because the whole calculation is complex\n"); MixedRealComplex::run(io, dmrgSolverParams, opOptions); } else { MixedRealComplex::run(io, dmrgSolverParams, opOptions); } } int main(int argc, char **argv) { PsimagLite::PsiApp application("DMRG++",&argc,&argv,1); InputCheck inputCheck; PsimagLite::String filename=""; int opt = 0; OperatorOptions options; PsimagLite::String strUsage(application.name()); if (utils::basename(argv[0]) == "operator") options.enabled = true; strUsage += " -f filename [-k] [-p precision] [-o solverOptions] [-V] [whatToMeasure]"; PsimagLite::String sOptions(""); int precision = 0; bool unbuffered = false; SizeType threadsInCmd = 0; bool versionOnly = false; /* PSIDOC DmrgDriver There is a single input file that is passed as the argument to \verb!-f!, like so \begin{lstlisting} ./dmrg -f input.inp whatToMeasure \end{lstlisting} where \verb!whatToMeasure! is optional. The command line arguments to the main dmrg driver are the following. \begin{itemize} \item[-f] {[}Mandatory, String{]} Input to use. \item[-o] {[}Optional, String{]} Extra options for SolverOptions \item[-p] [Optional, Integer] Digits of precision for printing. \item[whatToMeasure] {[}Optional, String{]} What to measure in-situ. This is a comma-separated list of braket specifications. Braket specifications can be bare or dressed, and are explained elsewhere. \item[-l] {[}Optional, String{]} Without this option std::cout is redirected to a file. This option with the string ``?'' prints name of such log file. This option with the string ``-'' writes std::cout to terminal. In other cases, string is the name of the file to redirect std::cout to. \item[-k] [Optional] Keep untar files \item[-U] [Optional] Make cout output unbuffered \item[-S] [Optional, number] Ignore the Threads= line if present in the input, and run with Threads=number \item[-V] [Optional] Print version and exit \end{itemize} */ /* PSIDOC OperatorDriver The arguments to the \verb!operator! executable are as follows. \begin{itemize} \item[-f] [Mandatory, String] Input to use. The Model= line is very important in input.inp. \item[-e] [Mandatory unless -l, String] OperatorExpression; see manual \item[-s] [Optional, Integer] \emph{Deprecated. Use -e.} Site for operator. Meaningful only for Models where the Hilbert space depends on the site (different kinds of atoms). Defaults to 0. \item[-l] [Mandatory unless -e, String] \emph{Deprecated. Use -e.} The label or name for this operator. This is model dependent. For example to obtain $c_{\uparrow}$ for the Hubbard model, say \begin{verbatim} ./operator -l c -f input.inp\end{verbatim} See the function naturalOperator for each Model. \item[-B] [Optional] Prints the basis and all operators for the model \item[-H] [Optional] Prints the Hamiltonian terms for the model \item[-d] [Optional, Integer] \emph{Deprecated. Use -e.} Degree of freedom (spin, orbital or combination of both) to use. This is model dependent. For example to obtain $c_\downarrow$ for the Hubbard model, say \begin{verbatim}./operator -l c -d 1 -f input.inp\end{verbatim} See the function naturalOperator for each Model. Defaults to 0. \item[-t] [Optional, Void] \emph{Note: When using -e, it transposes the whole expression.} Transpose the operator. For example to obtain $c^\dagger_\uparrow$ for a Hubbard model, say \begin{verbatim}./operator -l c -t -f input.inp\end{verbatim} \end{itemize} */ while ((opt = getopt(argc, argv,"f:s:l:d:p:e:o:S:tkBHUV")) != -1) { switch (opt) { case 'f': filename = optarg; break; case 's': options.site = atoi(optarg); break; case 'l': options.label = optarg; break; case 'd': options.dof = atoi(optarg); break; case 't': options.transpose = true; break; case 'p': precision = atoi(optarg); std::cout.precision(precision); std::cerr.precision(precision); break; case 'e': options.hasOperatorExpression = true; options.opexpr = optarg; break; case 'o': sOptions += optarg; break; case 'S': threadsInCmd = atoi(optarg); break; case 'B': options.label = "B"; break; case 'H': options.label = "H"; case 'U': unbuffered = true; break; case 'V': versionOnly = true; options.label = "-"; break; default: inputCheck.usageMain(strUsage); return 1; } } // sanity checks here if (filename=="" && !versionOnly) { inputCheck.usageMain(strUsage); return 1; } PsimagLite::String insitu = (optind < argc) ? argv[optind] : ""; if (!options.enabled && options.label != "-") { bool queryOnly = (options.label == "?"); if (options.label == "" || options.label == "?") { options.label = ProgramGlobals::coutName(filename); if (queryOnly) { std::cout< 0) dmrgSolverParams.nthreads = threadsInCmd; if (precision > 0) dmrgSolverParams.precision = precision; bool echoInput = false; if (!options.enabled && options.label != "-") { RunFinished runFinished(dmrgSolverParams.options.isSet("noClobber")); if (runFinished.OK(options.label.c_str())) { runFinished.printTermination(options.label.c_str()); return 1; } GlobalCoutStream.open(options.label.c_str(), (dmrgSolverParams.autoRestart) ? std::ofstream::app : std::ofstream::out); if (!GlobalCoutStream || GlobalCoutStream.bad() || !GlobalCoutStream.good()) { PsimagLite::String str(application.name()); str += ": Could not redirect std::cout to " + options.label + "\n"; err(str); } echoInput = true; std::cerr< >(io, dmrgSolverParams, options); } else { mainLoop0(io, dmrgSolverParams, options); } } dmrgpp-6.02/src/manyOmegas.cpp000066400000000000000000000051601414604301300163230ustar00rootroot00000000000000#include #include "PsimagLite.h" #include "Provenance.h" #include "InputCheck.h" #include "ManyOmegas.h" #include "../../dmrgpp/src/Engine/ProgramGlobals.h" void usage(const PsimagLite::String& name) { std::cerr<<"USAGE is "< InputNgType; typedef #ifndef USE_FLOAT double #else float #endif RealType; typedef Dmrg::OmegaParams OmegaParamsType; typedef Dmrg::ManyOmegas ManyOmegasType; PsimagLite::String data; ManyOmegasType::InputNgType::Writeable::readFile(data, inputfile); OmegaParamsType omegaParams(data); ManyOmegasType manyOmegas(data, precision, omegaParams, application); const PsimagLite::String obs = omegaParams.observable(); const PsimagLite::String insitu = ",,"; manyOmegas.run(dryrun, rootname, insitu); } dmrgpp-6.02/src/observe.cpp000066400000000000000000000160131414604301300156670ustar00rootroot00000000000000#include "ObserveDriver.h" using namespace Dmrg; bool atLeastOneLoopWithBit0Set(const PsimagLite::Vector::Type& fl) { const SizeType n = fl.size(); for (SizeType i = 0; i < n; ++i) if (fl[i].wantsSave()) return true; return false; } template void mainLoop(GeometryType& geometry, InputNgType::Readable& io, const ParametersDmrgSolverType& params, const PsimagLite::String& list) { typedef typename VectorWithOffsetType::value_type ComplexOrRealType; typedef ModelBase ModelBaseType; SizeType orbitals = 1.0; try { io.readline(orbitals,"Orbitals="); } catch (std::exception&) {} ModelSelector modelSelector(params.model); const ModelBaseType& model = modelSelector(params,io,geometry); const PsimagLite::String& datafile = params.filename; IoInputType dataIo(datafile); bool iscomplex = false; dataIo.read(iscomplex, "IsComplex"); if (iscomplex != PsimagLite::IsComplexNumber::True) err("Previous run was complex and this one is not (or viceversa)\n"); while (!observeOneFullSweep (dataIo, model, list, orbitals)); } template class ModelHelperTemplate, typename MySparseMatrix> void mainLoop1(GeometryType& geometry, InputNgType::Readable& io, const ParametersDmrgSolverType& params, const PsimagLite::String& list) { typedef Basis BasisType; typedef BasisWithOperators BasisWithOperatorsType; typedef LeftRightSuper LeftRightSuperType; typedef ModelHelperTemplate ModelHelperType; typedef typename MySparseMatrix::value_type ComplexOrRealType; typedef Qn QnType; if (params.options.isSet("vectorwithoffsets")) { typedef VectorWithOffsets VectorWithOffsetType; mainLoop (geometry, io, params, list); } else { typedef VectorWithOffset VectorWithOffsetType; mainLoop (geometry, io, params, list); } } template void mainLoop0(InputNgType::Readable& io, ParametersDmrgSolverType& dmrgSolverParams, InputCheck& inputCheck, const PsimagLite::String& list) { typedef typename MySparseMatrix::value_type ComplexOrRealType; typedef Dmrg::SuperGeometry SuperGeometryType; SuperGeometryType superGeometry(io); int tmp = 0; try { io.readline(tmp,"UseSu2Symmetry="); } catch (std::exception&) {} bool su2 = (tmp > 0); if (su2) { err("SU(2) no longer supported\n"); } else { mainLoop1 (superGeometry, io, dmrgSolverParams, list); } } void usage(const PsimagLite::String& name) { std::cerr<<"USAGE is "< inputFromDataOrNot(filename, inputCheck, false); InputNgType::Readable io(inputFromDataOrNot.ioWriteable()); ParametersDmrgSolverType dmrgSolverParams(io, sOptions, false, true); if (dmrgSolverParams.options.isSet("hd5DontPrint")) PsimagLite::IoNg::dontPrintDebug(); if (threadsInCmd > 0) dmrgSolverParams.nthreads = threadsInCmd; if (precision > 0) dmrgSolverParams.precision = precision; bool setAffinities = (dmrgSolverParams.options.isSet("setAffinities")); SizeType threadsStackSize = 0; try { io.readline(threadsStackSize, "ThreadsStackSize="); } catch (std::exception&) {} PsimagLite::CodeSectionParams codeSectionParams(dmrgSolverParams.nthreads, dmrgSolverParams.nthreads2, setAffinities, threadsStackSize); ConcurrencyType::setOptions(codeSectionParams); if (!atLeastOneLoopWithBit0Set(dmrgSolverParams.finiteLoop)) err("FATAL: At least one loop must have bit 0 set for observe to work\n"); bool isComplex = (dmrgSolverParams.options.isSet("useComplex") || dmrgSolverParams.options.isSet("TimeStepTargeting")); if (isComplex) { mainLoop0(io,dmrgSolverParams,inputCheck, list); } else { mainLoop0(io,dmrgSolverParams,inputCheck, list); } } // main dmrgpp-6.02/src/procOmegas.cpp000066400000000000000000000062231414604301300163230ustar00rootroot00000000000000#include #include "PsimagLite.h" #include "Provenance.h" #include "InputCheck.h" #include "ProcOmegas.h" #include "../../dmrgpp/src/Engine/ProgramGlobals.h" void usage(const PsimagLite::String& name) { std::cerr<<"USAGE is "< InputNgType; typedef Dmrg::OmegaParams OmegaParamsType; typedef Dmrg::ProcOmegas ProcOmegasType; Dmrg::InputCheck inputCheck; InputNgType::Writeable ioW(inputfile, inputCheck); InputNgType::Readable io(ioW); OmegaParamsType omegaParams(io); ProcOmegasType procOmegas(io, precision, skipFourier, rootIname, rootOname, omegaParams); procOmegas.run(); procOmegas.printPgfplots(rootOname + ".pgfplots"); } dmrgpp-6.02/src/run_drivers.pl000077500000000000000000000034141414604301300164210ustar00rootroot00000000000000#!/usr/bin/perl =pod Copyright (c) 2009-2015, UT-Battelle, LLC All rights reserved [DMRG++, Version 3.0] ********************************************************* THE SOFTWARE IS SUPPLIED 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. Please see full open source license included in file LICENSE. ********************************************************* =cut use warnings; use strict; use lib "../../PsimagLite/scripts"; use DmrgDriver; my ($arg) = @ARGV; my %provenanceDriver = (name => 'Provenance', aux => 1); my %progGlobalsDriver = (name => 'ProgramGlobals', aux => 1); my %restartDriver = (name => 'RestartStruct', aux => 1); my %finiteLoopDriver = (name => 'FiniteLoop', aux => 1); my %utilsDriver = (name => 'Utils', aux => 1); my %su2RelatedDriver = (name => 'Su2Related', aux => 1); my %toolboxDriver = (name => 'toolboxdmrg', dotos => 'toolboxdmrg.o ProgramGlobals.o Provenance.o Utils.o'); my $dotos = "observe.o ProgramGlobals.o Provenance.o Utils.o Su2Related.o"; my %observeDriver = (name => 'observe', dotos => $dotos); my @drivers = (\%provenanceDriver,\%su2RelatedDriver, \%progGlobalsDriver,\%restartDriver,\%finiteLoopDriver,\%utilsDriver, \%observeDriver,\%toolboxDriver); $dotos = "dmrg.o Provenance.o RestartStruct.o FiniteLoop.o Utils.o "; $dotos .= " ProgramGlobals.o Su2Related.o"; my $templates = DmrgDriver::createTemplates(); for (my $i = 0; $i < $templates; ++$i) { my $name = "DmrgDriver$i"; my %dmrgDriver = (name => $name, aux => 1); push @drivers,\%dmrgDriver; $dotos .= " $name.o "; } my %dmrgMain = (name => 'dmrg', dotos => $dotos); push @drivers,\%dmrgMain; dmrgpp-6.02/src/testQn.cpp000066400000000000000000000026551414604301300155070ustar00rootroot00000000000000#define USE_PTHREADS_OR_NOT_NG #include "NotReallySort.h" #include #include "ProgramGlobals.h" #include typedef Dmrg::Qn QnType; typedef QnType::VectorQnType VectorQnType; typedef QnType::VectorSizeType VectorSizeType; typedef QnType::PairSizeType PairSizeType; void randomSzPlusConst(VectorSizeType& szPlusConst) { SizeType nup = static_cast(20*drand48()); SizeType ndown = static_cast(20*drand48()); assert(szPlusConst.size() == 2); szPlusConst[0] = nup + ndown; szPlusConst[1] = nup; } void randomQn(VectorQnType& qn, VectorSizeType& szPlusConst) { SizeType n = qn.size(); for (SizeType i = 0; i < n; ++i) { randomSzPlusConst(szPlusConst); bool odd = szPlusConst[0] & 1; qn[i] = QnType(odd, szPlusConst, PairSizeType(0,0), 0); } } int main(int argc, char **argv) { if (argc < 2) { std::cerr<<"Needs number of qns\n"; return 1; } if (argc == 3) PsimagLite::Concurrency::codeSectionParams.npthreads = atoi(argv[2]); SizeType n = atoi(argv[1]); VectorSizeType szPlusConst(2, 0); VectorQnType qns(n, QnType(false, szPlusConst, PairSizeType(0,0), 0)); randomQn(qns, szPlusConst); VectorSizeType outNumber; VectorQnType outQns; VectorSizeType offset; VectorSizeType inNumbers(n, 0); for (SizeType i = 0; i < n; ++i) inNumbers[i] = i; Dmrg::NotReallySort notReallySort; notReallySort(outNumber, outQns, offset, inNumbers, qns, false, Dmrg::ProgramGlobals::VERBOSE_YES); } dmrgpp-6.02/src/toolboxdmrg.cpp000066400000000000000000000117441414604301300165700ustar00rootroot00000000000000#include "ProgramGlobals.h" #include #include "InputNg.h" #include "InputCheck.h" #include "ParametersDmrgSolver.h" #include "ToolBox.h" #include "PsimagLite.h" #include "Qn.h" #include "InputFromDataOrNot.h" #ifndef USE_FLOAT typedef double RealType; #else typedef float RealType; #endif typedef PsimagLite::InputNg InputNgType; typedef Dmrg::ParametersDmrgSolver ParametersDmrgSolverType; typedef PsimagLite::Concurrency ConcurrencyType; void usage(const PsimagLite::String& name) { std::cerr<<"USAGE is "< void main1(InputNgType::Readable& io, PsimagLite::PsiApp application, const ParametersDmrgSolverType& dmrgSolverParams, const ToolOptions& toolOptions) { typedef PsimagLite::Geometry GeometryType; GeometryType geometry(io); typedef Dmrg::ToolBox ToolBoxType; ConcurrencyType::codeSectionParams.npthreads = dmrgSolverParams.nthreads; typename ToolBoxType::ParametersForGrepType params(toolOptions.extraOptions, toolOptions.shortoption); typename ToolBoxType::ActionEnum act = ToolBoxType::actionCanonical(toolOptions.action); if (act == ToolBoxType::ACTION_GREP) { ToolBoxType::printGrep(toolOptions.filename, params); } else if (act == ToolBoxType::ACTION_INPUT) { std::cout< inputFromDataOrNot(toolOptions.filename, inputCheck, filenameIsCout); InputNgType::Readable io(inputFromDataOrNot.ioWriteable()); //! Read the parameters for this run bool earlyExit = true; ParametersDmrgSolverType dmrgSolverParams(io, sOptions, earlyExit); if (precision > 0) dmrgSolverParams.precision = precision; if (dmrgSolverParams.options.isSet("useComplex")) main1 >(io, application, dmrgSolverParams, toolOptions); else main1(io, application, dmrgSolverParams, toolOptions); } // main