Skip to content

Commit

Permalink
Removing the structure section to the website.
Browse files Browse the repository at this point in the history
  • Loading branch information
aziziph committed Aug 18, 2023
1 parent cbe219e commit 291c91c
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 47 deletions.
46 changes: 0 additions & 46 deletions JOSS/paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,52 +160,6 @@ with $\mathbb{I}$ being the identity matrix. Inputs and outputs are in atomic un
|$\{\lambda_{kj}\}_{k,j=1}^n$ | Fourier weights | ls \textit{GW} | on-the-fly L2 opt
| $\Delta_\text{CT}$ | duality error cosine transforms | ls \textit{GW} | on-the-fly |
: Output returned by the GX-TimeFrequency component of GreenX. We abbreviate low-scaling as ls, and least-squares optimization as L2 opt.\label{tab:output}

# Structure of the library

The GreenX library [@GitHub;@azizi_minimax] will eventually provide a variety of tools for advanced electronic structure calculations. In this work, we focus on the GX-common and GX-TimeFrequency components. GX-common provides functionality for all library components, such as error handling and unit conversion utilities. GX-TimeFrequency provides an API directory for the time-frequency transformations, a source directory, and a test directory with scripts for verifying the implementation. The relevant directory tree section is:

```plaintext
|- CMakeLists.txt
|- developers.md
|- Doxyfile
|- GX-common
| |- CMakeLists.txt
| |- src
| | |- constants.f90
| | |- error_handling.f90
| | |- kinds.f90
| | |- lapack_interfaces.f90
| | |- unit_conversion.f90
|- GX-TimeFrequency
| |- api
| | |- api_utilities.f90
| | |- gx_minimax.f90
| |- CITATION.cff
| |- CMakeLists.txt
| |- LICENSE.txt
| |- README.md
| |- src
| | |- gx_common.h
| | |- minimax_grids.F90
| | |- minimax_omega.F90
| | |- minimax_tau.F90
| | |- minimax_utils.F90
| |- test
| | |- conftest.py
| | |- test_gx_minimax_grid.f90
| | |- test_gx_minimax_grid.py
| | |- test_gx_tabulate_minimax.py
| |- utilities
| | |- gx_tabulate_minimax.F90
|- LICENSE.txt
|- README.md
```

GreenX is written in Fortran 2008. Functionality needed for testing and error handling is written in C and Python. We utilize modern Fortran features such as object-oriented programming and intrinsic procedures that are available in Fortran 2008. We have developed a clear interface between the module code (our library) and the client code (MBPT code), promoting better modularity and reusability. Additionally, we use allocatable arrays and automatic deallocation to simplify the code and avoid memory-related issues, such as leaks and dangling pointers. The implementation is robust and reliable, as we use error handling techniques to highlight and recover from exceptions.

The time and frequency grids $\{\tau_k(R)\}_{k=1}^n$, $\{\omega_j(R)\}_{j=1}^n$ and the integration weights $\{\gamma_k(R)\}_{k=1}^n$, $\{\sigma_j(R)\}_{j=1}^n$ are tabulated (hard coded) in the module 'minimax\_tau.f90' and 'minimax\_omega.f90' for various ranges $R$ of interest for solids and molecules. The module 'minimax\_grids.f90' calculates the weights $\{\delta_{kj}\}_{k,j=1}^n$, $\{\eta_{jk}\}_{k,j=1}^n$, $\{\lambda_{kj}\}_{k,j=1}^n$ of cosine and sine transforms during the runtime of the program. 'minimax\_grids.f90' also provides the duality error $\Delta_{\text{CT}}$. 'minimax\_utils.f90' contains auxiliary procedures and data structures for the main minimax routines.

To ensure the reproducibility of our results, we have implemented regression tests using the pytest infrastructure, combined with CMake and CTest. The regression tests rigorously verify the accuracy of the frequency grids and integration weights and the forward-backward cosine error. Further details on the library structure, contents, build system, and testing are available in the various README.md files at the top level of the [@GitHub] repository and the individual component directories. Further benchmarks will be provided elsewhere [@azizi_minimax].

# Acknowledgements
Expand Down
2 changes: 1 addition & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ description: Library for Many-body Greens Functions on HPC
A new open-source library that supports exascale implementations of Green-function-based methodologies. Its layered design will separate higher-level functionalities (distinguishing between code-independent and code-family-specific parts) from architecture-dependent numerical routines, common to all code families.

# Components

- [Structure of the library](structure.md)
- [Minimax Time-Frequency](gx_time_frequency.md)
- [Analytic Continuation](gx_ac.md)
51 changes: 51 additions & 0 deletions docs/structure.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
layout: default
title: Structure of the library
tagline: Structure
description: Structure of the library
---

# Structure of the library

The GreenX library [@GitHub;@azizi_minimax] will eventually provide a variety of tools for advanced electronic structure calculations. In this work, we focus on the GX-common and GX-TimeFrequency components. GX-common provides functionality for all library components, such as error handling and unit conversion utilities. GX-TimeFrequency provides an API directory for the time-frequency transformations, a source directory, and a test directory with scripts for verifying the implementation. The relevant directory tree section is:

```plaintext
|- CMakeLists.txt
|- developers.md
|- Doxyfile
|- GX-common
| |- CMakeLists.txt
| |- src
| | |- constants.f90
| | |- error_handling.f90
| | |- kinds.f90
| | |- lapack_interfaces.f90
| | |- unit_conversion.f90
|- GX-TimeFrequency
| |- api
| | |- api_utilities.f90
| | |- gx_minimax.f90
| |- CITATION.cff
| |- CMakeLists.txt
| |- LICENSE.txt
| |- README.md
| |- src
| | |- gx_common.h
| | |- minimax_grids.F90
| | |- minimax_omega.F90
| | |- minimax_tau.F90
| | |- minimax_utils.F90
| |- test
| | |- conftest.py
| | |- test_gx_minimax_grid.f90
| | |- test_gx_minimax_grid.py
| | |- test_gx_tabulate_minimax.py
| |- utilities
| | |- gx_tabulate_minimax.F90
|- LICENSE.txt
|- README.md
```

GreenX is written in Fortran 2008. Functionality needed for testing and error handling is written in C and Python. We utilize modern Fortran features such as object-oriented programming and intrinsic procedures that are available in Fortran 2008. We have developed a clear interface between the module code (our library) and the client code (MBPT code), promoting better modularity and reusability. Additionally, we use allocatable arrays and automatic deallocation to simplify the code and avoid memory-related issues, such as leaks and dangling pointers. The implementation is robust and reliable, as we use error handling techniques to highlight and recover from exceptions.

The time and frequency grids $\{\tau_k(R)\}_{k=1}^n$, $\{\omega_j(R)\}_{j=1}^n$ and the integration weights $\{\gamma_k(R)\}_{k=1}^n$, $\{\sigma_j(R)\}_{j=1}^n$ are tabulated (hard coded) in the module 'minimax\_tau.f90' and 'minimax\_omega.f90' for various ranges $R$ of interest for solids and molecules. The module 'minimax\_grids.f90' calculates the weights $\{\delta_{kj}\}_{k,j=1}^n$, $\{\eta_{jk}\}_{k,j=1}^n$, $\{\lambda_{kj}\}_{k,j=1}^n$ of cosine and sine transforms during the runtime of the program. 'minimax\_grids.f90' also provides the duality error $\Delta_{\text{CT}}$. 'minimax\_utils.f90' contains auxiliary procedures and data structures for the main minimax routines.

0 comments on commit 291c91c

Please sign in to comment.