Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
a85fd34
Started reworking PatchSolvers
JordiManyer Jul 8, 2025
a302860
Moved PatchTransferOperators to the new framework
JordiManyer Jul 9, 2025
3b13671
working also in distributed
JordiManyer Jul 9, 2025
7496247
Minor
JordiManyer Jul 10, 2025
2cd45b4
Minor
JordiManyer Jul 10, 2025
9e55bb6
Minor
JordiManyer Jul 10, 2025
29ff974
Minor
JordiManyer Jul 10, 2025
83a671a
Added TriangulationHierarchies
JordiManyer Jul 11, 2025
0917878
Updated tests
JordiManyer Jul 13, 2025
b475004
Reintroduced patch restrictions
JordiManyer Jul 15, 2025
549143c
De-activated most of the PatchBased old code
JordiManyer Jul 16, 2025
a81d87e
Minor bugfixes
JordiManyer Jul 16, 2025
ba2f142
Removed old code
JordiManyer Jul 20, 2025
1e9a43f
Merge branch 'main' of github.com:gridap/GridapSolvers.jl into develop
JordiManyer Jul 27, 2025
91b2aec
Added new types of GMG cycles
JordiManyer Jul 30, 2025
2fc5521
Bugfixes in PatchProlongationOperators
JordiManyer Jul 30, 2025
0594817
Minor
JordiManyer Jul 30, 2025
485264e
Distributed Vanka solver
JordiManyer Aug 6, 2025
2191c0e
VankaSolvers -> BlockJacobiSolvers
JordiManyer Aug 6, 2025
d265b29
Generised CoarsePatchDecomposition for any root dimension
JordiManyer Aug 6, 2025
a322dcf
Better fetch_ghost_rows
JordiManyer Aug 6, 2025
f7928cb
Minor bugfix in fetch_ghost_rows for non-symmetric communication patt…
JordiManyer Aug 13, 2025
14fa85a
Added numerical_setup! for BlockJacobiSolvers
JordiManyer Aug 13, 2025
bf665f5
Started implementing BlockJacobiTransferOperators
JordiManyer Aug 13, 2025
c59ccb6
unsafe_getindex is now imported from Base
JordiManyer Aug 13, 2025
8e45a4a
Started shifting to new redistribution code
JordiManyer Aug 24, 2025
4c28b90
Now PatchTransferOperators use interior patches, which should allow f…
JordiManyer Aug 24, 2025
a5b3118
BlockJacobiTransferOperators
JordiManyer Sep 1, 2025
46244e1
Minor
JordiManyer Sep 16, 2025
d062ec8
Minor
JordiManyer Sep 17, 2025
72e6cbf
Better GaussSeidel smoothers
JordiManyer Oct 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 21 additions & 7 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.7.0] - 2025-08-30

### Breaking

- Complete rework of patch-based smoothers. Since PR[#94](https://github.com/gridap/GridapSolvers.jl/pull/94/files). List of breaking changes:
- All the patch machinery has been removed (`PatchDecomposition`, `PatchFESpace`, `PatchTriangulation`, etc...) in favour of the new Gridap patch machinery (since Gridap v0.19).
- The old `PatchBasedLinearSolver` has been renamed to `PatchSolver` and now uses the new patch machinery. The constructors are similar but should be simpler and more flexible/robust. This still integrates the blocks on demand.
- The old `VankaSolver` has been renamed to `BlockJacobiSolver` and has been extended to distributed. It it now an alternative to `PatchSolver` where the local problems are extracted directly from the matrix instead of re-computing the local problems (and are equivalent if the patched weakform coincides with the original problem).
- `PatchProlongationOperator` now uses the new `PatchSolver` machinery. A new operator `BlockJacobiProlongationOperator` has been added, which is equivalent but uses the `BlockJacobiSolver` machinery.

### Added

- `GMGLinearSolver` now supports F- and W-cycles on top of the existing V-cycle. The iteration type can be now chosen through the `cycle_type` kwarg. Since PR[#94](https://github.com/gridap/GridapSolvers.jl/pull/94/files).

## [0.6.1] - 2025-07-25

### Added
Expand All @@ -13,16 +27,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [0.6.0] - 2025-06-13

### Breaking

- Removed the `ModelHierarchy` from the `GMGLinearSolver` constructors. This should allow more flexibility for the GMG solver (for instance, to create a P-GMG). Since PR[#92](https://github.com/gridap/GridapSolvers.jl/pull/92).

### Added

- Added support for Gridap v0.19. Since PR[#92](https://github.com/gridap/GridapSolvers.jl/pull/92).
- Added a new extension for `Pardiso.jl`. Since PR[#92](https://github.com/gridap/GridapSolvers.jl/pull/92).

### Changed
## [0.5.0] - 2025-04-29

- **BREAKING:** Removed the `ModelHierarchy` from the `GMGLinearSolver` constructors. This should allow more flexibility for the GMG solver (for instance, to create a P-GMG). Since PR[#92](https://github.com/gridap/GridapSolvers.jl/pull/92).
### Breaking

## [0.5.0] - 2025-04-29
- Moved dependencies for GridapP4est, GridapPETSc and IterativeSolvers into extensions (i.e weak dependencies). Since PR[#76](https://github.com/gridap/GridapSolvers.jl/pull/76).

### Added

Expand All @@ -32,10 +50,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added `RichardsonLinearSolver`. Since PR[#87](https://github.com/gridap/GridapSolvers.jl/pull/87).
- Added `NullspaceSolver` for serial. Since PR[#88](https://github.com/gridap/GridapSolvers.jl/pull/88).

### Changed

- **BREAKING:** Moved GridapP4est, GridapPETSc and IterativeSolvers into extensions (i.e weak dependencies). Since PR[#76](https://github.com/gridap/GridapSolvers.jl/pull/76).

## Previous versions

A changelog is not maintained for older versions than 0.4.0.
3 changes: 2 additions & 1 deletion docs/.gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
Manifest.toml
build/
site/
src/Examples/
src/Examples/
src/changelog.md
21 changes: 15 additions & 6 deletions docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,20 @@ using Documenter
using GridapSolvers
using GridapPETSc, GridapP4est, IterativeSolvers, Pardiso

# Examples
include("examples.jl")

# Changelog
cp(string(@__DIR__,"/../NEWS.md"), string(@__DIR__,"/src/changelog.md"))

# Extensions
extensions = map(
ext -> Base.get_extension(GridapSolvers,ext),
(:GridapP4estExt,:GridapPETScExt,:IterativeSolversExt,:PardisoExt)
)
println(" >>> Extensions found: ", extensions)

# Make Docs
DocMeta.setdocmeta!(GridapSolvers, :DocTestSetup, :(using GridapSolvers); recursive=true)

makedocs(;
Expand All @@ -26,12 +32,14 @@ makedocs(;
),
pages = [
"Home" => "index.md",
"SolverInterfaces" => "SolverInterfaces.md",
"MultilevelTools" => "MultilevelTools.md",
"LinearSolvers" => "LinearSolvers.md",
"NonlinearSolvers" => "NonlinearSolvers.md",
"BlockSolvers" => "BlockSolvers.md",
"PatchBasedSmoothers" => "PatchBasedSmoothers.md",
"Modules" => [
"SolverInterfaces" => "SolverInterfaces.md",
"MultilevelTools" => "MultilevelTools.md",
"LinearSolvers" => "LinearSolvers.md",
"NonlinearSolvers" => "NonlinearSolvers.md",
"BlockSolvers" => "BlockSolvers.md",
"PatchBasedSmoothers" => "PatchBasedSmoothers.md",
],
"Extensions" => [
"GridapP4est.jl" => "Extensions/GridapP4est.md",
"GridapPETSc.jl" => "Extensions/GridapPETSc.md",
Expand All @@ -45,6 +53,7 @@ makedocs(;
"Navier-Stokes (GMG)" => "Examples/NavierStokesGMG.md",
"Darcy (GMG)" => "Examples/DarcyGMG.md",
],
"Changelog" => "changelog.md",
],
warnonly = [:doctest,:example_block,:eval_block],
clean = true,
Expand Down
26 changes: 0 additions & 26 deletions src/BlockSolvers/BlockFEOperators.jl
Original file line number Diff line number Diff line change
Expand Up @@ -89,32 +89,6 @@ function BlockArrays.blocks(a::MultiField.BlockSparseMatrixAssembler)
return a.block_assemblers
end

function BlockArrays.blocks(f::MultiFieldFESpace{<:BlockMultiFieldStyle{NB,SB,P}}) where {NB,SB,P}
block_ranges = MultiField.get_block_ranges(NB,SB,P)
block_spaces = map(block_ranges) do range
(length(range) == 1) ? f[range[1]] : MultiFieldFESpace(f.spaces[range])
end
return block_spaces
end

function BlockArrays.blocks(f::GridapDistributed.DistributedMultiFieldFESpace{<:BlockMultiFieldStyle{NB,SB,P}}) where {NB,SB,P}
block_gids = blocks(get_free_dof_ids(f))
block_ranges = MultiField.get_block_ranges(NB,SB,P)
block_spaces = map(block_ranges,block_gids) do range, gids
if (length(range) == 1)
space = f[range[1]]
else
global_sf_spaces = f.field_fe_space[range]
local_sf_spaces = to_parray_of_arrays(map(local_views,global_sf_spaces))
local_mf_spaces = map(MultiFieldFESpace,local_sf_spaces)
vector_type = GridapDistributed._find_vector_type(local_mf_spaces,gids)
space = DistributedMultiFieldFESpace(global_sf_spaces,local_mf_spaces,gids,vector_type)
end
space
end
return block_spaces
end

function liform_from_blocks(ids, ranges, liforms)
function biform(v)
c = DomainContribution()
Expand Down
2 changes: 1 addition & 1 deletion src/BlockSolvers/StaggeredFEOperators.jl
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ function MultiField.get_block_ranges(::StaggeredFEOperator{NB,SB}) where {NB,SB}
end

# TODO: This is type piracy -> move to GridapDistributed
MultiField.num_fields(space::DistributedFESpace) = 1
# MultiField.num_fields(space::DistributedFESpace) = 1
MultiField.split_fespace(space::DistributedMultiFieldFESpace) = [space...]

function get_solution(op::StaggeredFEOperator{NB,SB}, xh::MultiFieldFEFunction, k) where {NB,SB}
Expand Down
Loading
Loading