Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Change_internal_structure #43

Merged
merged 5 commits into from
Sep 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ BinPackArguments: false
IndentPPDirectives: AfterHash
AlwaysBreakTemplateDeclarations: true
BreakBeforeBinaryOperators: NonAssignment
AlignConsecutiveAssignments: true
ColumnLimit: 0
AlignConsecutiveAssignments: Consecutive
ColumnLimit: 0
133 changes: 87 additions & 46 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@ name: CI
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
branches: [main, develop]

pull_request:
branches: [main, develop]
branches: [main]

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
Expand All @@ -31,21 +30,21 @@ jobs:
CXX_COMPILER: g++
container: "ubuntu_gcc_openmpi"
MPIEXEC_PREFLAGS: "--allow-run-as-root --oversubscribe"
USE_SANITIZER: Address""
ASAN_OPTIONS: "ASAN_OPTIONS=detect_leaks=0" # issue probably with openmpi
CMAKE_BUILD_TYPE: Release
DOCKER_OPTIONS: " "
USE_SANITIZER: ""
# ASAN_OPTIONS: "ASAN_OPTIONS=detect_leaks=0" # issue probably with openmpi
CMAKE_BUILD_TYPE: Debug
CODE_COVERAGE: "OFF"
DOCKER_OPTIONS: "--cap-add SYS_PTRACE"

- name: "Ubuntu OpenMPI clang++"
CC_COMPILER: clang
CXX_COMPILER: clang++
container: "ubuntu_clang_openmpi"
MPIEXEC_PREFLAGS: "--allow-run-as-root --oversubscribe"
USE_SANITIZER: ""
CMAKE_BUILD_TYPE: Release
DOCKER_OPTIONS: " "
CMAKE_BUILD_TYPE: Debug
CODE_COVERAGE: "OFF"
DOCKER_OPTIONS: "--cap-add SYS_PTRACE"

- name: "Ubuntu MPICH g++"
CC_COMPILER: gcc
Expand All @@ -70,27 +69,26 @@ jobs:
CODE_COVERAGE: "OFF"

# Hangs up on github
# - name: "Debian OpenMPI g++"
# CC_COMPILER: gcc
# CXX_COMPILER: g++
# container: "debian_openmpi"
# MPIEXEC_PREFLAGS: "--allow-run-as-root --oversubscribe"
# USE_SANITIZER: "Address"
# ASAN_OPTIONS: "ASAN_OPTIONS=detect_leaks=0" # issue probably with openmpi
# CMAKE_BUILD_TYPE: Debug
# DOCKER_OPTIONS: " "
# CODE_COVERAGE: "OFF"
# # DOCKER_OPTIONS: "--cap-add SYS_PTRACE"
# - name: "Debian OpenMPI clang++"
# CC_COMPILER: clang
# CXX_COMPILER: clang++
# container: "debian_openmpi"
# MPIEXEC_PREFLAGS: "--allow-run-as-root --oversubscribe"
# USE_SANITIZER: ""
# CMAKE_BUILD_TYPE: Debug
# DOCKER_OPTIONS: " "
# CODE_COVERAGE: "OFF"
# DOCKER_OPTIONS: "--cap-add SYS_PTRACE"
- name: "Debian OpenMPI g++"
CC_COMPILER: gcc
CXX_COMPILER: g++
container: "debian_gcc_openmpi"
MPIEXEC_PREFLAGS: "--allow-run-as-root --oversubscribe"
USE_SANITIZER: ""
# ASAN_OPTIONS: "ASAN_OPTIONS=detect_leaks=0" # issue probably with openmpi
CMAKE_BUILD_TYPE: Debug
CODE_COVERAGE: "OFF"
DOCKER_OPTIONS: "--cap-add SYS_PTRACE"

- name: "Debian OpenMPI clang++"
CC_COMPILER: clang
CXX_COMPILER: clang++
container: "debian_clang_openmpi"
MPIEXEC_PREFLAGS: "--allow-run-as-root --oversubscribe"
USE_SANITIZER: ""
CMAKE_BUILD_TYPE: Debug
CODE_COVERAGE: "OFF"
DOCKER_OPTIONS: "--cap-add SYS_PTRACE"

- name: "Debian MPICH g++"
CC_COMPILER: gcc
Expand Down Expand Up @@ -126,46 +124,63 @@ jobs:
name: CI (${{ matrix.name }})

# Steps represent a sequence of tasks that will be executed as part of the job
if: "!contains(github.event.head_commit.message, '[ci skip]')"
steps:
- name: Checkout htool
uses: actions/checkout@v3
with:
path: "htool"
# ref: 14d013835eceb940b9b51dd90462fe67834db777
fetch-depth: 0 # to get tags
- name: Checkout hpddm
uses: actions/checkout@v3
with:
repository: hpddm/hpddm
ref: d19056d0e3010b905fca5b73f5c48a766b8a042d
path: "hpddm"
run: |
git clone https://github.com/hpddm/hpddm.git hpddm
cd hpddm && git checkout 5890d5addf3962d539dc25c441ec3ff4af93b3ab
# uses: actions/checkout@v3
# with:
# path: "hpddm"
# repository: hpddm/hpddm
# ref: afb9562c9c6673d9ff760985b104ef8d4caa3621

- name: Activate virtualenv
run: |
. /usr/local/share/venv/bin/activate
echo PATH=$PATH >> $GITHUB_ENV

- name: Build tests
run: |
cd htool && mkdir build && cd build
cmake -DHTOOL_WITH_EXAMPLES=1 -DMPIEXEC_PREFLAGS="${{ matrix.MPIEXEC_PREFLAGS }}" -DUSE_SANITIZER=${{ matrix.USE_SANITIZER }} -DCMAKE_BUILD_TYPE=${{ matrix.CMAKE_BUILD_TYPE }} -DCODE_COVERAGE=${{ matrix.CODE_COVERAGE }} ../
make -j2 build-tests
cmake -DHTOOL_WITH_EXAMPLES=ON -DHTOOL_WITH_DOC=ON -DHTOOL_WITH_STRICT_TESTS=ON -DMPIEXEC_PREFLAGS="${{ matrix.MPIEXEC_PREFLAGS }}" -DUSE_SANITIZER=${{ matrix.USE_SANITIZER }} -DCMAKE_BUILD_TYPE=${{ matrix.CMAKE_BUILD_TYPE }} -DCODE_COVERAGE=${{ matrix.CODE_COVERAGE }} ../
make -j 4 build-tests

- name: Run tests
run: |
cd htool/build
export OMP_NUM_THREADS=2
${{ matrix.ASAN_OPTIONS }} ctest --output-on-failure
${{ matrix.ASAN_OPTIONS }} ctest -j 4 --output-on-failure

- name: Build examples
run: |
cd htool/build
make -j2 build-examples
make -j 4 build-examples

- name: Build documentation
run: |
cd htool/build
make doc

- name: Check format
- name: Check c++ format
uses: DoozyX/[email protected]
with:
source: 'htool/include htool/tests'
# exclude: './third_party ./external'
extensions: 'hpp,cpp'
clangFormatVersion: 16
style: file

- name: Check cmake format
run: |
. /usr/local/share/venv/bin/activate
cd htool/build
make format
make cmake-format
git diff --exit-code

Expand All @@ -174,10 +189,36 @@ jobs:
run: |
cd htool/
lcov --capture --base-directory ./ --directory build/ --output-file coverage.info
lcov --remove coverage.info '/usr/*' '*/hpddm/*' --output-file coverage.info
lcov --remove coverage.info '/usr/*' '*/hpddm/*' --output-file ../coverage.info

- name: Upload coverage to Codecov
- uses: actions/upload-artifact@v4
with:
path: coverage.info
if-no-files-found: error
if: matrix.CODE_COVERAGE == 'ON'
uses: codecov/codecov-action@v2

# - name: Upload coverage to Codecov
# if: matrix.CODE_COVERAGE == 'ON'
# uses: codecov/[email protected]
# with:
# fail_ci_if_error: true
# files: htool/coverage.info
# token: ${{ secrets.CODECOV_TOKEN }}
# verbose: true

coverage:
runs-on: ubuntu-latest
if: ${{ success() }}
needs: [ linux ]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/download-artifact@v4
- name: Upload coverage report
uses: codecov/codecov-action@v4
with:
file: htool/coverage.info
fail_ci_if_error: true
file: ./coverage.info
token: ${{ secrets.CODECOV_TOKEN }}
verbose: true
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
# Dotfiles
.*
!.gitignore
!.clang-format
!.clang-tidy
!.devcontainer
!.github

# Compiled Object files
*.slo
*.lo
Expand Down
41 changes: 33 additions & 8 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,41 @@ All notable changes to this project will be documented in this file.

## Unreleased

## [0.9.0] - 2024-09-19

### Added

- `set_delay_dense_computation` to `HMatrix`
- The old implementation of `HMatrix` was mixing the distributed operations and compression via hierarchical matrices. This is fixed by replacing `HMatrix` by:
- `DistributedOperator` which contains a list of local operators and implements all the distributed operations,
- `VirtualLocalOperator` which is the interface local operators must satisfy,
- `LocalDenseMatrix` is an example of local operator consisting of a dense matrix `Matrix`,
- and `LocalHMatrix` is an example of local operator consisting of a hierarchical matrix based on `HMatrix` (different from the previous `HMatrix`, see below).
- Utility classes that help build `DistributedOperator` and `DDM` objects are available, for example: `DefaultApproximationBuilder` and `DDMSolverBuilder`. They do all the wiring between the inner interfaces between Htool-DDM's objects, see `include/htool/istributed_operator/utility.hpp` and `include/htool/solvers/utility.hpp`.
- Formatter has been added, see `.clang_format`.
- A logger has been added with `Logger`. Its output can be customizerd via `IObjectWriter`.

### Changed

### Fixed
- `HMatrix` is now a class representing a hierarchical matrix without distributed-memory parallelism (note that it can still use shared-memory parallelism):
- It inherits from `TreeNode`, and it provides the algebra related to hierarchical matrices via free functions:
- product with vector and matrix (threaded with OpenMP),
- and with this new version, LU and Cholesky factorization (not threaded yet, WIP).
- The algorithms for building the block cluster tree is contained in `HMatrixTreeBuilder`. Users can provide their own "factory".
- `VirtualCluster` is removed and the clustering part of the library has been rewritten:
- `Cluster` now derives from `TreeNode`, whose template parameter corresponds to the precision of cluster nodes' radius and centre (previously only `double`).
- Standards recursive build algorithms are provided via `ClusterTreeBuilder`. Users can provide their own "factory".
- `ClusterTreeBuilder` is a class template and uses the policy pattern (a policy for computing direction, and another for splitting along the direction).
- `DDM` has been modified, one-level and two-level preconditioners can be customized now via `VirtualLocalSolver`, `VirtualCoarseSpaceBuilder` and `VirtualCoarseOperatorBuilder`.
- Three one-level preconditioners are provided by Htool-DDM via `DDMSolverBuilder`:
- block-jacobi with a local HMatrix
- a DDM preconditioner where the local subdomain with overlap uses one HMatrix
- a DDM preconditioner where the local subdomain with overlap uses one HMatrix for the local subdomain without overlap, and dense matrices for the overlap and its interaction with the subdomain without overlap.
- A second-level (GenEO coarse space) is provided with `GeneoCoarseSpaceDenseBuilder` and `GeneoCoarseOperatorBuilder`.

### Removed

- `multilrmat` and `multihmatrix` are removed.

- Fix const-correctness for g++ 4.8.5
-
## [0.8.1] - 2023-05-26

### Added
Expand All @@ -60,8 +85,8 @@ All notable changes to this project will be documented in this file.
### Added

- doxygen documentation
- mvprod_transp_global_to_global and mvprod_transp_local_to_local added to VirtualHMatrix
- getters for clusters in VirtualHMatrix
- mvprod_transp_global_to_global and mvprod_transp_local_to_local added to `VirtualHMatrix`
- getters for clusters in `VirtualHMatrix`
- custom gmv in ddm

### Changed
Expand All @@ -80,12 +105,12 @@ All notable changes to this project will be documented in this file.
- Test for warnings coming from `include/htool/*`
- Coverage added
- Methods in ddm interface to get local numbering
- VirtualLowRankGenerator and VirtualAdmissibilityCondition added for better modularity
- `VirtualLowRankGenerator` and `VirtualAdmissibilityCondition` added for better modularity

### Changed

- Remove unnecessary arguments in HMatrix and cluster interfaces
- MutliHMatrix deprecated for the moment (everything related to this in `htool/multi`)
- `MultiHMatrix` deprecated for the moment (everything related to this in `htool/multi`)

### Fixed

Expand Down
Loading
Loading