This repository contains my contributions to the LDA+Gutzwiller method with Newton's optimization, published in:
Zhang, J., Tian, M. F., Jin, G. X., Xu, Y. F., & Dai, X. (2017)
Implementation of LDA+Gutzwiller with Newton's method.
Chinese Physics B, 26(1), 017103.
DOI: 10.1088/1674-1056/26/1/017103
This project showcases my specific contributions to the Gutzwiller variational method implementation. The work builds upon established theoretical frameworks and existing computational infrastructure, with my focus on numerical optimization and algorithmic improvements.FT Method Implementation
This repository contains the implementation of the LDA+Gutzwiller method with Newton's optimization, published in:
Zhang, J., Tian, M. F., Jin, G. X., Xu, Y. F., & Dai, X. (2017)
Implementation of LDA+Gutzwiller with Newton's method.
Chinese Physics B, 26(1), 017103.
DOI: 10.1088/1674-1056/26/1/017103
This project implements the Gutzwiller variational approach for treating strong electronic correlations in quantum many-body systems. The method combines Density Functional Theory (DFT) with the Gutzwiller variational ansatz to capture both itinerant and localized electronic behavior in strongly correlated materials.
- Newton Method Implementation: Developed the analytical Jacobian matrix computation for faster convergence
- Numerical Optimization: Improved the self-consistent iteration algorithms
- Code Modernization: Cleaned and refactored legacy Fortran code with modern programming practices
- Algorithm Enhancement: Contributed to the optimization techniques that achieved 6× speed improvement
- Documentation: Created comprehensive documentation and examples for the method
This implementation builds upon:
- Established Gutzwiller Theory: Based on decades of theoretical development in many-body physics
- Existing Computational Framework: Utilizes proven DFT integration and MPI infrastructure
- Collaborative Research: Part of multi-author effort with theoretical and computational contributions
- Literature Methods: Implements well-documented algorithms from the quantum many-body community
- Transition metal oxides (TMOs)
- Heavy fermion systems
- Iron-based superconductors
- Strongly correlated electron materials
- Metal-insulator transitions
- Fermi Solver: Numerical solution of fermionic Hamiltonians with correlation effects
- Boson Solver: Treatment of bosonic degrees of freedom in the variational approach
- Self-Consistent Loop: Iterative solution of coupled DFT+Gutzwiller equations
- Matrix Optimization: Efficient handling of large-scale matrix operations
- Newton-Raphson method for non-linear equation systems
- Jacobian matrix calculations for fast convergence
- Adaptive mixing algorithms for stability
- Eigenvalue solvers for large hermitian matrices
- Fortran Compiler: Intel Fortran or gfortran
- MPI Library: OpenMPI or Intel MPI
- Linear Algebra: Intel MKL or LAPACK/BLAS
- CMake: Version 3.10 or higher (optional)
mkdir build && cd build
cmake ..
make -j4cd src
make -f Makefile.intel # for Intel compiler
# or
make -f Makefile.gnu # for GNU compiler# Copy example input
cp examples/SrVO3/control.ini .
# Run calculation
mpirun -np 4 ./ddgw.exe
# Check convergence
tail -f iter.logThe main input file control.ini contains several namelists:
&control: General control parameters&fermi_prec: Fermi solver precision settings&boson_prec: Boson solver precision settings&lda: System-specific parameters&udc: Double-counting correction parameters
See docs/input_reference.md for detailed parameter descriptions.
├── src/
│ ├── core/ # Main program and interfaces
│ ├── fermi/ # Fermionic Hamiltonian solver
│ ├── utils/ # Mathematical utilities and I/O
│ └── legacy/ # Earlier versions for reference
├── docs/
│ ├── theory.md # Theoretical background
│ ├── api.md # API documentation
│ └── examples.md # Usage examples
├── examples/
│ ├── SrVO3/ # Strontium vanadate example
│ └── benchmark/ # Performance benchmarks
├── tests/ # Unit tests
└── build/ # Build system files
- fermi_solver.f90: Main fermionic Hamiltonian solver
- double_counting.f90: Double-counting correction implementations
- fermi_utilities.f90: Helper functions for fermi calculations
- main_interface.f90: Primary calculation interface
- self_consistent.f90: Self-consistency loop implementation
- mpi_wrapper.f90: MPI communication routines
- linear_algebra.f90: Matrix operations and eigensolvers
- numerical_methods.f90: Newton method and optimization
- io_routines.f90: Input/output handling
- SrVO₃ (1331 k-points): ~30 minutes on 16 cores
- Scaling: Near-linear up to 64 MPI processes
- Memory: ~2GB per process for typical systems
- Use Intel MKL for optimal linear algebra performance
- Enable OpenMP threading in MKL
- Adjust k-point parallelization for your system size
The Gutzwiller wave function takes the form:
|Ψ_G⟩ = P_G |Ψ_0⟩
where P_G is the Gutzwiller projector and |Ψ_0⟩ is the uncorrelated ground state.
The method iteratively solves:
- DFT step: Calculate band structure from effective Hamiltonian
- Gutzwiller step: Optimize variational parameters
- Mixing: Update charge density and potentials
See docs/theory.md for detailed mathematical formulation.
- Follow Fortran 2008/2015 standards
- Use consistent indentation (2 spaces)
- Include comprehensive comments for new algorithms
- Add unit tests for new functionality
- Variable names: descriptive and lowercase with underscores
- Module names: descriptive with
mod_prefix - Subroutine names: verb_noun format
If you use this code in your research, please cite:
@article{zhang2017implementation,
title={Implementation of LDA+Gutzwiller with Newton's method},
author={Zhang, Jian and Tian, Ming-Feng and Jin, Guang-Xi and Xu, Yuan-Feng and Dai, Xi},
journal={Chinese Physics B},
volume={26},
number={1},
pages={017103},
year={2017},
publisher={IOP Publishing},
doi={10.1088/1674-1056/26/1/017103}
}This project is licensed under the MIT License - see the LICENSE file for details.
- Jian Zhang (张健) - Numerical optimization algorithms, Newton method implementation, code modernization
- Institute of Physics, Chinese Academy of Sciences - Research environment and support
- Gutzwiller Method Community - Theoretical foundations and established computational techniques
- Open Source Libraries - LAPACK, BLAS, MPI, and other numerical libraries
For questions or collaborations:
- Primary Developer: Jian Zhang (hellothomaszhang@gmail.com)
- Scientific Supervisor: Xi Dai (daix721@iphy.ac.cn)
- Added MPI parallelization
- Implemented Newton method solver
- Enhanced double-counting schemes
- Improved numerical stability
- Initial implementation
- Basic Gutzwiller variational method
- Serial execution only
Note: This implementation represents research-grade scientific software. While extensively tested, users should validate results for their specific applications.