From 375b28a48adc0177c349d9b87335bcc52cebacb3 Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Fri, 1 Sep 2023 11:25:01 +1000 Subject: [PATCH 01/14] Missing tests added --- test/NonConformingOctreeDistributedDiscreteModelsTests.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/NonConformingOctreeDistributedDiscreteModelsTests.jl b/test/NonConformingOctreeDistributedDiscreteModelsTests.jl index e01c1ff..fa9f622 100644 --- a/test/NonConformingOctreeDistributedDiscreteModelsTests.jl +++ b/test/NonConformingOctreeDistributedDiscreteModelsTests.jl @@ -354,7 +354,7 @@ module NonConformingOctreeDistributedDiscreteModelsTests # global_logger(debug_logger); # Enable the debug logger globally ranks = distribute(LinearIndices((MPI.Comm_size(MPI.COMM_WORLD),))) - for Dc=3:3, perm=2:2, order=1:1 + for Dc=2:3, perm=1:4, order=1:4 test(ranks,Val{Dc},perm,order) end for order=1:2 From 3843da53ae03691261b8d45cd282574c68f3cc03 Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Wed, 6 Sep 2023 13:37:29 +1000 Subject: [PATCH 02/14] * Misc renaming * Starting to generalize calculation of constraints in ref space --- README.md | 2 +- src/FESpaces.jl | 48 ++++++++++++++++--- ... PoissonNonConformingOctreeModelsTests.jl} | 0 ...issonUniformlyRefinedOctreeModelsTests.jl} | 2 +- ...finedForestOfOctreesDiscreteModelsTests.jl | 4 +- test/runtests.jl | 4 +- 6 files changed, 47 insertions(+), 13 deletions(-) rename test/{NonConformingOctreeDistributedDiscreteModelsTests.jl => PoissonNonConformingOctreeModelsTests.jl} (100%) rename test/{UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl => PoissonUniformlyRefinedOctreeModelsTests.jl} (97%) diff --git a/README.md b/README.md index ecedf9a..dab97de 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ ## Purpose -The purpose of this package is to provide a `DistributedDiscreteModel` implementation (a parallel mesh data structure, see `GridapDistributed.jl` for more details) able to handle forests of quadtrees/octrees of the computational domain. To this end, it leverages the [`p4est` software library](https://p4est.github.io/) meshing engine under the hood (click [here](https://github.com/gridap/GridapP4est.jl/blob/main/test/UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl) for an example). +The purpose of this package is to provide a `DistributedDiscreteModel` implementation (a parallel mesh data structure, see `GridapDistributed.jl` for more details) able to handle forests of quadtrees/octrees of the computational domain. To this end, it leverages the [`p4est` software library](https://p4est.github.io/) meshing engine under the hood (click [here](https://github.com/gridap/GridapP4est.jl/blob/main/test/PoissonUniformlyRefinedOctreeModelsTests.jl) for an example). ## Build diff --git a/src/FESpaces.jl b/src/FESpaces.jl index d8da386..337150c 100644 --- a/src/FESpaces.jl +++ b/src/FESpaces.jl @@ -14,6 +14,42 @@ function _build_constraint_coefficients_matrix_in_ref_space(Dc, reffe::Tuple{<:L ref_constraints = evaluate(dof_basis_h_refined, coarse_shape_funs) end +function _generate_face_subface_ldof_to_cell_ldof(Df,Dc,reffe::Tuple{<:Lagrangian,Any,Any}) + cell_polytope = (Dc == 2) ? QUAD : HEX + rr = Gridap.Adaptivity.RedRefinementRule(cell_polytope) + order=reffe[2][2] + Gridap.Adaptivity.get_face_subface_ldof_to_cell_ldof(rr, Tuple(fill(order,Dc)), Df) +end + +function _build_constraint_coefficients_matrix_in_ref_space(Dc, reffe::Tuple{<:RaviartThomas,Any,Any}) + cell_polytope = Dc == 2 ? QUAD : HEX + basis, reffe_args, reffe_kwargs = reffe + cell_reffe = ReferenceFE(cell_polytope, basis, reffe_args...; reffe_kwargs...) + + # TO-DO: How can modelH be created such that it is tailored to cell_polytope? + modelH=CartesianDiscreteModel((0,1,0,1),(1,1)) + modelh=refine(modelH,2) + + VH=TestFESpace(modelH,cell_reffe) + Vh=TestFESpace(modelh,cell_reffe) + + uH=get_fe_basis(VH) + uHh=change_domain(uH,get_triangulation(modelh),ReferenceDomain()) + σRTh=Gridap.FESpaces.get_fe_dof_basis(Vh) + ref_constraints_contribs=σRTh(uHh) + + ref_constraints = Matrix{Float64}(undef,num_free_dofs(Vh),num_free_dofs(VH)) + cell_dof_ids = get_cell_dof_ids(Vh) + cache_cell_dof_ids = array_cache(cell_dof_ids) + cache_ref_constraints_contribs = array_cache(ref_constraints_contribs) + for cell=1:length(cell_dof_ids) + current_cell_dof_ids=getindex!(cache_cell_dof_ids,cell_dof_ids,i) + current_ref_constraints_contribs=getindex!(cache_ref_constraints_contribs,ref_constraints_contribs,i) + ref_constraints[current_cell_dof_ids,:]=current_ref_constraints_contribs + end +end + + # To-think: might this info go to the glue? # If it is required in different scenarios, I would say it may make sense function _generate_hanging_faces_to_cell_and_lface(num_regular_faces, @@ -624,20 +660,18 @@ end function Gridap.FESpaces.FESpace(model::OctreeDistributedDiscreteModel{Dc}, reffe::Tuple{Gridap.ReferenceFEs.ReferenceFEName,Any,Any}; kwargs...) where {Dc} - order = reffe[2][2] spaces_wo_constraints = map(local_views(model)) do m FESpace(m, reffe; kwargs...) end ref_constraints = _build_constraint_coefficients_matrix_in_ref_space(Dc, reffe) - cell_polytope = (Dc == 2) ? QUAD : HEX - rr = Gridap.Adaptivity.RedRefinementRule(cell_polytope) + face_subface_ldof_to_cell_ldof = Vector{Vector{Vector{Vector{Int32}}}}(undef, Dc-1) - face_subface_ldof_to_cell_ldof[Dc-1] = - Gridap.Adaptivity.get_face_subface_ldof_to_cell_ldof(rr, Tuple(fill(order,Dc)), Dc-1) + face_subface_ldof_to_cell_ldof[Dc-1] = _generate_face_subface_ldof_to_cell_ldof(Dc-1, Dc, reffe) if (Dc == 3) - face_subface_ldof_to_cell_ldof[1] = - Gridap.Adaptivity.get_face_subface_ldof_to_cell_ldof(rr, Tuple(fill(order,Dc)), 1) + face_subface_ldof_to_cell_ldof[1] = + _generate_face_subface_ldof_to_cell_ldof(1, Dc, reffe) end + sDOF_to_dof, sDOF_to_dofs, sDOF_to_coeffs = generate_constraints(model, spaces_wo_constraints, reffe, ref_constraints, face_subface_ldof_to_cell_ldof) diff --git a/test/NonConformingOctreeDistributedDiscreteModelsTests.jl b/test/PoissonNonConformingOctreeModelsTests.jl similarity index 100% rename from test/NonConformingOctreeDistributedDiscreteModelsTests.jl rename to test/PoissonNonConformingOctreeModelsTests.jl diff --git a/test/UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl b/test/PoissonUniformlyRefinedOctreeModelsTests.jl similarity index 97% rename from test/UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl rename to test/PoissonUniformlyRefinedOctreeModelsTests.jl index 3bb4099..6010449 100644 --- a/test/UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl +++ b/test/PoissonUniformlyRefinedOctreeModelsTests.jl @@ -1,4 +1,4 @@ -module UniformlyRefinedForestOfOctreesDiscreteModelsTests +module PoissonUniformlyRefinedOctreeModelsTests using MPI using Gridap using Gridap.Algebra diff --git a/test/mpi/UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl b/test/mpi/UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl index 17bab82..74b1cd5 100644 --- a/test/mpi/UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl +++ b/test/mpi/UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl @@ -2,8 +2,8 @@ using MPI using PartitionedArrays -include("../UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl") -import .UniformlyRefinedForestOfOctreesDiscreteModelsTests as TestModule +include("../PoissonUniformlyRefinedOctreeModelsTests.jl") +import .PoissonUniformlyRefinedOctreeModelsTests as TestModule if !MPI.Initialized() MPI.Init() diff --git a/test/runtests.jl b/test/runtests.jl index 6701911..dcf32c5 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -33,14 +33,14 @@ function run_tests(testdir) testfiles = sort(filter(istest, readdir(testdir))) @time @testset "$f" for f in testfiles MPI.mpiexec() do cmd - if f in ["UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl"] + if f in ["PoissonUniformlyRefinedOctreeModelsTests.jl"] np = [4] extra_args = "-s 2 2 -r 2" elseif f in ["OctreeDistributedDiscreteModelsTests.jl", "OctreeDistributedDiscreteModelsNoEnvTests.jl"] np = [4] extra_args = "" - elseif f in ["NonConformingOctreeDistributedDiscreteModelsTests.jl"] + elseif f in ["PoissonNonConformingOctreeModelsTests.jl"] np = [1,2,4] extra_args = "" else From a02c6c0534521e21d14e332f184ffedd837667b1 Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Wed, 6 Sep 2023 13:40:44 +1000 Subject: [PATCH 03/14] More renamings --- ...eteModelsTests.jl => PoissonNonConformingOctreeModelsTests.jl} | 0 ...ModelsTests.jl => PoissonUniformlyRefinedOctreeModelsTests.jl} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename test/mpi/{NonConformingOctreeDistributedDiscreteModelsTests.jl => PoissonNonConformingOctreeModelsTests.jl} (100%) rename test/mpi/{UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl => PoissonUniformlyRefinedOctreeModelsTests.jl} (100%) diff --git a/test/mpi/NonConformingOctreeDistributedDiscreteModelsTests.jl b/test/mpi/PoissonNonConformingOctreeModelsTests.jl similarity index 100% rename from test/mpi/NonConformingOctreeDistributedDiscreteModelsTests.jl rename to test/mpi/PoissonNonConformingOctreeModelsTests.jl diff --git a/test/mpi/UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl b/test/mpi/PoissonUniformlyRefinedOctreeModelsTests.jl similarity index 100% rename from test/mpi/UniformlyRefinedForestOfOctreesDiscreteModelsTests.jl rename to test/mpi/PoissonUniformlyRefinedOctreeModelsTests.jl From 8a1b7dc8c254fcbbc22748ffc263310f39a0d971 Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Wed, 6 Sep 2023 14:06:22 +1000 Subject: [PATCH 04/14] More fixes --- test/CoarseDiscreteModelsTools.jl | 120 +++++++++++++++++ test/PoissonNonConformingOctreeModelsTests.jl | 124 +----------------- .../PoissonNonConformingOctreeModelsTests.jl | 4 +- 3 files changed, 124 insertions(+), 124 deletions(-) create mode 100644 test/CoarseDiscreteModelsTools.jl diff --git a/test/CoarseDiscreteModelsTools.jl b/test/CoarseDiscreteModelsTools.jl new file mode 100644 index 0000000..c5a636f --- /dev/null +++ b/test/CoarseDiscreteModelsTools.jl @@ -0,0 +1,120 @@ + function setup_model(::Type{Val{3}}, perm) + # 5 +--------+ 7 + # / /| + # / / | + # 6 +--------+ | + # | | | + # | 1 | + 3 + # | | / + # | |/ + # 2 +--------+ 4 + + # 6 +--------+ 8 + # / /| + # / / | + # 11 +--------+ | + # | | | + # | 2 | + 4 + # | | / + # | |/ + # 9 +--------+ 10 + ptr = [ 1, 9, 17 ] + if (perm==1) + data = [ 1,2,3,4,5,6,7,8, 2,9,4,10,6,11,8,12 ] + elseif (perm==2) + data = [ 1,2,3,4,5,6,7,8, 10,12,4,8,9,11,2,6 ] + elseif (perm==3) + data = [ 1,2,3,4,5,6,7,8, 12,11,8,6,10,9,4,2 ] + elseif (perm==4) + data = [ 1,2,3,4,5,6,7,8, 11,9,6,2,12,10,8,4 ] + end + cell_vertex_lids = Gridap.Arrays.Table(data,ptr) + node_coordinates = Vector{Point{3,Float64}}(undef,12) + node_coordinates[1]=Point{3,Float64}(0.0,0.0,0.0) + node_coordinates[2]=Point{3,Float64}(1.0,0.0,0.0) + node_coordinates[3]=Point{3,Float64}(0.0,1.0,0.0) + node_coordinates[4]=Point{3,Float64}(1.0,1.0,0.0) + node_coordinates[5]=Point{3,Float64}(0.0,0.0,1.0) + node_coordinates[6]=Point{3,Float64}(1.0,0.0,1.0) + node_coordinates[7]=Point{3,Float64}(0.0,1.0,1.0) + node_coordinates[8]=Point{3,Float64}(1.0,1.0,1.0) + node_coordinates[9]=Point{3,Float64}(2.0,0.0,0.0) + node_coordinates[10]=Point{3,Float64}(2.0,1.0,0.0) + node_coordinates[11]=Point{3,Float64}(2.0,0.0,1.0) + node_coordinates[12]=Point{3,Float64}(2.0,1.0,1.0) + + polytope=HEX + scalar_reffe=Gridap.ReferenceFEs.ReferenceFE(polytope,Gridap.ReferenceFEs.lagrangian,Float64,1) + cell_types=collect(Fill(1,length(cell_vertex_lids))) + cell_reffes=[scalar_reffe] + grid = Gridap.Geometry.UnstructuredGrid(node_coordinates, + cell_vertex_lids, + cell_reffes, + cell_types, + Gridap.Geometry.NonOriented()) + m=Gridap.Geometry.UnstructuredDiscreteModel(grid) + labels = get_face_labeling(m) + labels.d_to_dface_to_entity[1].=2 + if (perm==1 || perm==2) + labels.d_to_dface_to_entity[2].=2 + labels.d_to_dface_to_entity[3].=[2,2,2,2,2,1,2,2,2,2,2] + elseif (perm==3 || perm==4) + labels.d_to_dface_to_entity[2].=2 + labels.d_to_dface_to_entity[3].=[2,2,2,2,2,1,2,2,2,2,2] + end + labels.d_to_dface_to_entity[4].=1 + add_tag!(labels,"boundary",[2]) + add_tag!(labels,"interior",[1]) + m + end + + function setup_model(::Type{Val{2}}, perm) + @assert perm ∈ (1,2,3,4) + # + # 3-------4-------6 + # | | | + # | | | + # | | | + # 1-------2-------5 + # + ptr = [ 1, 5, 9 ] + if (perm==1) + data = [ 1,2,3,4, 2,5,4,6 ] + elseif (perm==2) + data = [ 1,2,3,4, 6,4,5,2 ] + elseif (perm==3) + data = [ 4,3,2,1, 2,5,4,6 ] + elseif (perm==4) + data = [ 4,3,2,1, 6,4,5,2 ] + end + cell_vertex_lids = Gridap.Arrays.Table(data,ptr) + node_coordinates = Vector{Point{2,Float64}}(undef,6) + node_coordinates[1]=Point{2,Float64}(0.0,0.0) + node_coordinates[2]=Point{2,Float64}(1.0,0.0) + node_coordinates[3]=Point{2,Float64}(0.0,1.0) + node_coordinates[4]=Point{2,Float64}(1.0,1.0) + node_coordinates[5]=Point{2,Float64}(2.0,0.0) + node_coordinates[6]=Point{2,Float64}(2.0,1.0) + + polytope=QUAD + scalar_reffe=Gridap.ReferenceFEs.ReferenceFE(polytope,Gridap.ReferenceFEs.lagrangian,Float64,1) + cell_types=collect(Fill(1,length(cell_vertex_lids))) + cell_reffes=[scalar_reffe] + grid = Gridap.Geometry.UnstructuredGrid(node_coordinates, + cell_vertex_lids, + cell_reffes, + cell_types, + Gridap.Geometry.NonOriented()) + m=Gridap.Geometry.UnstructuredDiscreteModel(grid) + labels = get_face_labeling(m) + labels.d_to_dface_to_entity[1].=2 + if (perm==1 || perm==2) + labels.d_to_dface_to_entity[2].=[2,2,2,1,2,2,2] + elseif (perm==3 || perm==4) + labels.d_to_dface_to_entity[2].=[2,2,1,2,2,2,2] + end + labels.d_to_dface_to_entity[3].=1 + add_tag!(labels,"boundary",[2]) + add_tag!(labels,"interior",[1]) + m + end \ No newline at end of file diff --git a/test/PoissonNonConformingOctreeModelsTests.jl b/test/PoissonNonConformingOctreeModelsTests.jl index db7dd1f..9c7a9eb 100644 --- a/test/PoissonNonConformingOctreeModelsTests.jl +++ b/test/PoissonNonConformingOctreeModelsTests.jl @@ -1,4 +1,4 @@ -module NonConformingOctreeDistributedDiscreteModelsTests +module PoissonNonConformingOctreeModelsTests using P4est_wrapper using GridapP4est using Gridap @@ -9,127 +9,7 @@ module NonConformingOctreeDistributedDiscreteModelsTests using FillArrays using Logging - function setup_model(::Type{Val{3}}, perm) - # 5 +--------+ 7 - # / /| - # / / | - # 6 +--------+ | - # | | | - # | 1 | + 3 - # | | / - # | |/ - # 2 +--------+ 4 - - # 6 +--------+ 8 - # / /| - # / / | - # 11 +--------+ | - # | | | - # | 2 | + 4 - # | | / - # | |/ - # 9 +--------+ 10 - ptr = [ 1, 9, 17 ] - if (perm==1) - data = [ 1,2,3,4,5,6,7,8, 2,9,4,10,6,11,8,12 ] - elseif (perm==2) - data = [ 1,2,3,4,5,6,7,8, 10,12,4,8,9,11,2,6 ] - elseif (perm==3) - data = [ 1,2,3,4,5,6,7,8, 12,11,8,6,10,9,4,2 ] - elseif (perm==4) - data = [ 1,2,3,4,5,6,7,8, 11,9,6,2,12,10,8,4 ] - end - cell_vertex_lids = Gridap.Arrays.Table(data,ptr) - node_coordinates = Vector{Point{3,Float64}}(undef,12) - node_coordinates[1]=Point{3,Float64}(0.0,0.0,0.0) - node_coordinates[2]=Point{3,Float64}(1.0,0.0,0.0) - node_coordinates[3]=Point{3,Float64}(0.0,1.0,0.0) - node_coordinates[4]=Point{3,Float64}(1.0,1.0,0.0) - node_coordinates[5]=Point{3,Float64}(0.0,0.0,1.0) - node_coordinates[6]=Point{3,Float64}(1.0,0.0,1.0) - node_coordinates[7]=Point{3,Float64}(0.0,1.0,1.0) - node_coordinates[8]=Point{3,Float64}(1.0,1.0,1.0) - node_coordinates[9]=Point{3,Float64}(2.0,0.0,0.0) - node_coordinates[10]=Point{3,Float64}(2.0,1.0,0.0) - node_coordinates[11]=Point{3,Float64}(2.0,0.0,1.0) - node_coordinates[12]=Point{3,Float64}(2.0,1.0,1.0) - - polytope=HEX - scalar_reffe=Gridap.ReferenceFEs.ReferenceFE(polytope,Gridap.ReferenceFEs.lagrangian,Float64,1) - cell_types=collect(Fill(1,length(cell_vertex_lids))) - cell_reffes=[scalar_reffe] - grid = Gridap.Geometry.UnstructuredGrid(node_coordinates, - cell_vertex_lids, - cell_reffes, - cell_types, - Gridap.Geometry.NonOriented()) - m=Gridap.Geometry.UnstructuredDiscreteModel(grid) - labels = get_face_labeling(m) - labels.d_to_dface_to_entity[1].=2 - if (perm==1 || perm==2) - labels.d_to_dface_to_entity[2].=2 - labels.d_to_dface_to_entity[3].=[2,2,2,2,2,1,2,2,2,2,2] - elseif (perm==3 || perm==4) - labels.d_to_dface_to_entity[2].=2 - labels.d_to_dface_to_entity[3].=[2,2,2,2,2,1,2,2,2,2,2] - end - labels.d_to_dface_to_entity[4].=1 - add_tag!(labels,"boundary",[2]) - add_tag!(labels,"interior",[1]) - m - end - - function setup_model(::Type{Val{2}}, perm) - @assert perm ∈ (1,2,3,4) - # - # 3-------4-------6 - # | | | - # | | | - # | | | - # 1-------2-------5 - # - ptr = [ 1, 5, 9 ] - if (perm==1) - data = [ 1,2,3,4, 2,5,4,6 ] - elseif (perm==2) - data = [ 1,2,3,4, 6,4,5,2 ] - elseif (perm==3) - data = [ 4,3,2,1, 2,5,4,6 ] - elseif (perm==4) - data = [ 4,3,2,1, 6,4,5,2 ] - end - cell_vertex_lids = Gridap.Arrays.Table(data,ptr) - node_coordinates = Vector{Point{2,Float64}}(undef,6) - node_coordinates[1]=Point{2,Float64}(0.0,0.0) - node_coordinates[2]=Point{2,Float64}(1.0,0.0) - node_coordinates[3]=Point{2,Float64}(0.0,1.0) - node_coordinates[4]=Point{2,Float64}(1.0,1.0) - node_coordinates[5]=Point{2,Float64}(2.0,0.0) - node_coordinates[6]=Point{2,Float64}(2.0,1.0) - - polytope=QUAD - scalar_reffe=Gridap.ReferenceFEs.ReferenceFE(polytope,Gridap.ReferenceFEs.lagrangian,Float64,1) - cell_types=collect(Fill(1,length(cell_vertex_lids))) - cell_reffes=[scalar_reffe] - grid = Gridap.Geometry.UnstructuredGrid(node_coordinates, - cell_vertex_lids, - cell_reffes, - cell_types, - Gridap.Geometry.NonOriented()) - m=Gridap.Geometry.UnstructuredDiscreteModel(grid) - labels = get_face_labeling(m) - labels.d_to_dface_to_entity[1].=2 - if (perm==1 || perm==2) - labels.d_to_dface_to_entity[2].=[2,2,2,1,2,2,2] - elseif (perm==3 || perm==4) - labels.d_to_dface_to_entity[2].=[2,2,1,2,2,2,2] - end - labels.d_to_dface_to_entity[3].=1 - add_tag!(labels,"boundary",[2]) - add_tag!(labels,"interior",[1]) - m - end - + include("CoarseDiscreteModelsTools.jl") function test_transfer_ops_and_redistribute(ranks,dmodel,order) # Define manufactured functions diff --git a/test/mpi/PoissonNonConformingOctreeModelsTests.jl b/test/mpi/PoissonNonConformingOctreeModelsTests.jl index f420dbf..7332a89 100644 --- a/test/mpi/PoissonNonConformingOctreeModelsTests.jl +++ b/test/mpi/PoissonNonConformingOctreeModelsTests.jl @@ -2,8 +2,8 @@ using MPI using PartitionedArrays -include("../NonConformingOctreeDistributedDiscreteModelsTests.jl") -import .NonConformingOctreeDistributedDiscreteModelsTests as TestModule +include("../PoissonNonConformingOctreeModelsTests.jl") +import .PoissonNonConformingOctreeModelsTests as TestModule if !MPI.Initialized() MPI.Init() From 7ddac0e8987a6c7a97a2ac4af6df095870d689ad Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Fri, 8 Sep 2023 19:23:06 +1000 Subject: [PATCH 05/14] RT + h-adaptive meshes working in 2D ... In 3d fails ... to investigate --- src/FESpaces.jl | 284 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 202 insertions(+), 82 deletions(-) diff --git a/src/FESpaces.jl b/src/FESpaces.jl index 337150c..ce47cdf 100644 --- a/src/FESpaces.jl +++ b/src/FESpaces.jl @@ -21,13 +21,66 @@ function _generate_face_subface_ldof_to_cell_ldof(Df,Dc,reffe::Tuple{<:Lagrangia Gridap.Adaptivity.get_face_subface_ldof_to_cell_ldof(rr, Tuple(fill(order,Dc)), Df) end +const _coarse_faces_to_child_ids_2D=[1 2; 3 4; 1 3; 2 4] +const _coarse_faces_to_child_ids_3D=[1 2 3 4; 5 6 7 8; 1 3 5 7; 2 4 6 8; 1 2 5 6; 3 4 7 8] + +function _generate_unit_hypercube_model(Dc) + @assert Dc==2 || Dc==3 + if (Dc==2) + modelH=CartesianDiscreteModel((0,1,0,1),(1,1)) + else + modelH=CartesianDiscreteModel((0,1,0,1,0,1),(1,1,1)) + end + modelH +end + +function _generate_face_subface_ldof_to_cell_ldof(Df,Dc,reffe::Tuple{<:RaviartThomas,Any,Any}) + cell_polytope = (Dc == 2) ? QUAD : HEX + coarse_faces_to_child_ids = (Dc == 2) ? _coarse_faces_to_child_ids_2D : + _coarse_faces_to_child_ids_3D + basis, reffe_args, reffe_kwargs = reffe + cell_reffe = ReferenceFE(cell_polytope, basis, reffe_args...; reffe_kwargs...) + + # TO-DO: How can modelH be created such that it is tailored to cell_polytope? + modelH= _generate_unit_hypercube_model(Dc) + modelh=refine(modelH,2) + RTh=TestFESpace(modelh,reffe) + + num_faces = 2*Dc + num_subfaces = 2^(Dc-1) + first_face = get_offset(get_polytope(cell_reffe),Df) + + face_own_dofs=get_face_own_dofs(cell_reffe) + num_dofs_x_face = length(face_own_dofs[first_face+1]) + face_subface_ldof_to_cell_ldof = Vector{Vector{Vector{Int}}}(undef,num_faces) + for face=1:num_faces + face_subface_ldof_to_cell_ldof[face]=Vector{Vector{Int}}(undef,num_subfaces) + for subface=1:num_subfaces + face_subface_ldof_to_cell_ldof[face][subface]=Vector{Int}(undef,num_dofs_x_face) + end + end + + RTh_cell_dof_ids=get_cell_dof_ids(RTh) + for coarse_face_id=1:num_faces + for (subface,child_id) in enumerate(coarse_faces_to_child_ids[coarse_face_id,:]) + @debug "coarse_face_id: $(coarse_face_id), subface: $(subface), child_id: $(child_id)" + cell_dof_ids=RTh_cell_dof_ids[child_id] + for (i,dof) in enumerate(cell_dof_ids[face_own_dofs[first_face+coarse_face_id]]) + @debug "i: $(i), dof: $(dof)" + face_subface_ldof_to_cell_ldof[coarse_face_id][subface][i]=dof + end + end + end + face_subface_ldof_to_cell_ldof +end + function _build_constraint_coefficients_matrix_in_ref_space(Dc, reffe::Tuple{<:RaviartThomas,Any,Any}) cell_polytope = Dc == 2 ? QUAD : HEX basis, reffe_args, reffe_kwargs = reffe cell_reffe = ReferenceFE(cell_polytope, basis, reffe_args...; reffe_kwargs...) # TO-DO: How can modelH be created such that it is tailored to cell_polytope? - modelH=CartesianDiscreteModel((0,1,0,1),(1,1)) + modelH= _generate_unit_hypercube_model(Dc) modelh=refine(modelH,2) VH=TestFESpace(modelH,cell_reffe) @@ -43,10 +96,19 @@ function _build_constraint_coefficients_matrix_in_ref_space(Dc, reffe::Tuple{<:R cache_cell_dof_ids = array_cache(cell_dof_ids) cache_ref_constraints_contribs = array_cache(ref_constraints_contribs) for cell=1:length(cell_dof_ids) - current_cell_dof_ids=getindex!(cache_cell_dof_ids,cell_dof_ids,i) - current_ref_constraints_contribs=getindex!(cache_ref_constraints_contribs,ref_constraints_contribs,i) + current_cell_dof_ids=getindex!(cache_cell_dof_ids,cell_dof_ids,cell) + current_ref_constraints_contribs=getindex!(cache_ref_constraints_contribs,ref_constraints_contribs,cell) ref_constraints[current_cell_dof_ids,:]=current_ref_constraints_contribs end + # We change the sign of the constraints coefficients here so that + # the unit normal to hanging faces matches the unit normal + # of the owner face. This way, we properly glue the global DoFs at + # both sides of the interface of cells at different refinement level. + # We could have done this instead by adjusting the sign_flips for hanging + # faces in the FESpace constructor, although we decide it to do it here + # because it is way simpler. + @. ref_constraints = -ref_constraints + ref_constraints end @@ -144,6 +206,34 @@ function face_lid_within_dim(::Type{Val{Dc}}, face_lid) where {Dc} end end +function _restrict_face_dofs_to_face_dim(cell_reffe,Df) + polytope = get_polytope(cell_reffe) + first_face = Gridap.ReferenceFEs.get_offset(polytope,Df)+1 + face_own_dofs=get_face_own_dofs(cell_reffe) + first_face_faces = Gridap.ReferenceFEs.get_faces(polytope)[first_face] + face_dofs_to_face_dim = face_own_dofs[first_face_faces] + touched=Dict{Int,Int}() + current=1 + for (i,face_dofs) in enumerate(face_dofs_to_face_dim) + for (j,dof) in enumerate(face_dofs) + if haskey(touched,dof) + face_dofs[j]=touched[dof] + else + touched[dof]=current + face_dofs[j]=touched[dof] + current=current+1 + end + end + end + face_dofs_to_face_dim +end +function _num_face_own_dofs(cell_reffe,Df) + polytope = get_polytope(cell_reffe) + first_face = Gridap.ReferenceFEs.get_offset(polytope,Df)+1 + face_own_dofs=get_face_own_dofs(cell_reffe) + length(face_own_dofs[first_face]) +end + function _generate_constraints!(Df, Dc, cell_faces, @@ -546,40 +636,68 @@ function generate_constraints(dmodel::OctreeDistributedDiscreteModel{Dc}, end subface_own_dofs = Vector{Vector{Vector{Int}}}(undef, Dc - 1) - subface_own_dofs[Dc-1] = Gridap.ReferenceFEs.get_face_own_dofs(face_reffe) + subface_own_dofs[Dc-1] = _restrict_face_dofs_to_face_dim(cell_reffe,Dc-1) + #Gridap.ReferenceFEs.get_face_own_dofs(face_reffe) if (Dc == 3) - subface_own_dofs[1] = Gridap.ReferenceFEs.get_face_own_dofs(edge_reffe) + subface_own_dofs[1] = _restrict_face_dofs_to_face_dim(cell_reffe,1) + #Gridap.ReferenceFEs.get_face_own_dofs(edge_reffe) + end + if (_num_face_own_dofs(cell_reffe,0)>0) + _generate_constraints!(0, + Dc, + [gridap_cell_faces[i] for i = 1:Dc], + num_hanging_faces[1], + hanging_faces_to_cell[1], + hanging_faces_to_lface[1], + hanging_faces_owner_face_dofs[1], + hanging_faces_glue[1], + face_subface_ldof_to_cell_ldof, + face_dofs, + face_own_dofs, + subface_own_dofs, + cell_dof_ids, + node_permutations, + owner_faces_pindex, + owner_faces_lids, + ref_constraints, + sDOF_to_dof, + sDOF_to_dofs, + sDOF_to_coeffs) end - _generate_constraints!(0, - Dc, - [gridap_cell_faces[i] for i = 1:Dc], - num_hanging_faces[1], - hanging_faces_to_cell[1], - hanging_faces_to_lface[1], - hanging_faces_owner_face_dofs[1], - hanging_faces_glue[1], - face_subface_ldof_to_cell_ldof, - face_dofs, - face_own_dofs, - subface_own_dofs, - cell_dof_ids, - node_permutations, - owner_faces_pindex, - owner_faces_lids, - ref_constraints, - sDOF_to_dof, - sDOF_to_dofs, - sDOF_to_coeffs) if (Dc == 3) - _generate_constraints!(1, + if (_num_face_own_dofs(cell_reffe,1)>0) + _generate_constraints!(1, + Dc, + [gridap_cell_faces[i] for i = 1:Dc], + num_hanging_faces[2], + hanging_faces_to_cell[2], + hanging_faces_to_lface[2], + hanging_faces_owner_face_dofs[2], + hanging_faces_glue[2], + face_subface_ldof_to_cell_ldof, + face_dofs, + face_own_dofs, + subface_own_dofs, + cell_dof_ids, + node_permutations, + owner_faces_pindex, + owner_faces_lids, + ref_constraints, + sDOF_to_dof, + sDOF_to_dofs, + sDOF_to_coeffs) + end + end + if (_num_face_own_dofs(cell_reffe,Dc-1)>0) + _generate_constraints!(Dc - 1, Dc, [gridap_cell_faces[i] for i = 1:Dc], - num_hanging_faces[2], - hanging_faces_to_cell[2], - hanging_faces_to_lface[2], - hanging_faces_owner_face_dofs[2], - hanging_faces_glue[2], + num_hanging_faces[Dc], + hanging_faces_to_cell[Dc], + hanging_faces_to_lface[Dc], + hanging_faces_owner_face_dofs[Dc], + hanging_faces_glue[Dc], face_subface_ldof_to_cell_ldof, face_dofs, face_own_dofs, @@ -593,26 +711,6 @@ function generate_constraints(dmodel::OctreeDistributedDiscreteModel{Dc}, sDOF_to_dofs, sDOF_to_coeffs) end - _generate_constraints!(Dc - 1, - Dc, - [gridap_cell_faces[i] for i = 1:Dc], - num_hanging_faces[Dc], - hanging_faces_to_cell[Dc], - hanging_faces_to_lface[Dc], - hanging_faces_owner_face_dofs[Dc], - hanging_faces_glue[Dc], - face_subface_ldof_to_cell_ldof, - face_dofs, - face_own_dofs, - subface_own_dofs, - cell_dof_ids, - node_permutations, - owner_faces_pindex, - owner_faces_lids, - ref_constraints, - sDOF_to_dof, - sDOF_to_dofs, - sDOF_to_coeffs) sDOF_to_dof, Gridap.Arrays.Table(sDOF_to_dofs), Gridap.Arrays.Table(sDOF_to_coeffs) end |> tuple_of_arrays end @@ -655,38 +753,37 @@ function fe_space_with_linear_constraints_cell_dof_ids(Uc::FESpaceWithLinearCons Gridap.Arrays.Table(Uc_cell_dof_ids_data, U_cell_dof_ids.ptrs) end -# Generates a new DistributedSingleFieldFESpace composed -# by local FE spaces with linear multipoint constraints added -function Gridap.FESpaces.FESpace(model::OctreeDistributedDiscreteModel{Dc}, - reffe::Tuple{Gridap.ReferenceFEs.ReferenceFEName,Any,Any}; - kwargs...) where {Dc} - spaces_wo_constraints = map(local_views(model)) do m - FESpace(m, reffe; kwargs...) - end - ref_constraints = _build_constraint_coefficients_matrix_in_ref_space(Dc, reffe) - - face_subface_ldof_to_cell_ldof = Vector{Vector{Vector{Vector{Int32}}}}(undef, Dc-1) - face_subface_ldof_to_cell_ldof[Dc-1] = _generate_face_subface_ldof_to_cell_ldof(Dc-1, Dc, reffe) - if (Dc == 3) +function _add_constraints(model::GridapDistributed.DistributedDiscreteModel{Dc}, + reffe, + spaces_wo_constraints; + conformity=nothing, + kwargs...) where {Dc} + if (conformity!=nothing && conformity!=:L2) + ref_constraints = _build_constraint_coefficients_matrix_in_ref_space(Dc, reffe) + + face_subface_ldof_to_cell_ldof = Vector{Vector{Vector{Vector{Int32}}}}(undef, Dc-1) + face_subface_ldof_to_cell_ldof[Dc-1] = _generate_face_subface_ldof_to_cell_ldof(Dc-1, Dc, reffe) + if (Dc == 3) face_subface_ldof_to_cell_ldof[1] = - _generate_face_subface_ldof_to_cell_ldof(1, Dc, reffe) - end - - sDOF_to_dof, sDOF_to_dofs, sDOF_to_coeffs = - generate_constraints(model, spaces_wo_constraints, reffe, ref_constraints, face_subface_ldof_to_cell_ldof) - - spaces_w_constraints = map(spaces_wo_constraints, - sDOF_to_dof, - sDOF_to_dofs, - sDOF_to_coeffs) do V, sDOF_to_dof, sDOF_to_dofs, sDOF_to_coeffs - @debug "fe_space_wo_constraints_cell_dof_ids=$(get_cell_dof_ids(V))" - Vc = FESpaceWithLinearConstraints(sDOF_to_dof, sDOF_to_dofs, sDOF_to_coeffs, V) - end - - local_cell_dof_ids = map(spaces_w_constraints,sDOF_to_dof) do Vc,sDOF_to_dof + _generate_face_subface_ldof_to_cell_ldof(1, Dc, reffe) + end + sDOF_to_dof, sDOF_to_dofs, sDOF_to_coeffs = + generate_constraints(model, spaces_wo_constraints, reffe, ref_constraints, face_subface_ldof_to_cell_ldof) + spaces_w_constraints = map(spaces_wo_constraints, + sDOF_to_dof, + sDOF_to_dofs, + sDOF_to_coeffs) do V, sDOF_to_dof, sDOF_to_dofs, sDOF_to_coeffs + @debug "fe_space_wo_constraints_cell_dof_ids=$(get_cell_dof_ids(V))" + Vc = FESpaceWithLinearConstraints(sDOF_to_dof, sDOF_to_dofs, sDOF_to_coeffs, V) + end + local_cell_dof_ids = map(spaces_w_constraints,sDOF_to_dof) do Vc,sDOF_to_dof result = fe_space_with_linear_constraints_cell_dof_ids(Vc,sDOF_to_dof) @debug "fe_space_with_linear_constraints_cell_dof_ids=$(result)" result + end + else + spaces_w_constraints=spaces_wo_constraints + local_cell_dof_ids=map(get_cell_dof_ids,spaces_w_constraints) end nldofs = map(num_free_dofs,spaces_w_constraints) cell_gids = get_cell_gids(model) @@ -699,8 +796,31 @@ function Gridap.FESpaces.FESpace(model::OctreeDistributedDiscreteModel{Dc}, GridapDistributed.DistributedSingleFieldFESpace(spaces_w_constraints,gids,vector_type) end -function Gridap.FESpaces.FESpace(model::OctreeDistributedDiscreteModel, + +# Generates a new DistributedSingleFieldFESpace composed +# by local FE spaces with linear multipoint constraints added +function Gridap.FESpaces.FESpace(model::OctreeDistributedDiscreteModel{Dc}, + reffe::Tuple{Gridap.ReferenceFEs.Lagrangian,Any,Any}; + kwargs...) where {Dc} + spaces_wo_constraints = map(local_views(model)) do m + FESpace(m, reffe; kwargs...) + end + _add_constraints(model,reffe,spaces_wo_constraints;kwargs...) +end + +function Gridap.FESpaces.FESpace(model::OctreeDistributedDiscreteModel{Dc}, reffe::Tuple{Gridap.ReferenceFEs.RaviartThomas,Any,Any}; - kwargs...) - FESpace(model.dmodel,reffe; kwargs...) + conformity=nothing,kwargs...) where {Dc} + + cell_reffes = map(local_views(model.dmodel)) do m + basis,reffe_args,reffe_kwargs = reffe + cell_reffe = ReferenceFE(m,basis,reffe_args...;reffe_kwargs...) + end + sign_flips=GridapDistributed._generate_sign_flips(model.dmodel,cell_reffes) + spaces_wo_constraints = map(local_views(model.dmodel),sign_flips,cell_reffes) do m,sign_flip,cell_reffe + conf = Conformity(Gridap.Fields.testitem(cell_reffe),conformity) + cell_fe = CellFE(m,cell_reffe,conf,sign_flip) + FESpace(m, cell_fe; kwargs...) + end + _add_constraints(model,reffe,spaces_wo_constraints;conformity=conformity,kwargs...) end From 77aa6e50fb8643fdc258f5f0c185e3cca183754a Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Sat, 9 Sep 2023 10:33:55 +1000 Subject: [PATCH 06/14] Adding DarcyNonConformingTests Working in 2D and 3D with order=1/2 In 3D, only working with order=0 --- src/FESpaces.jl | 2 +- test/DarcyNonConformingOctreeModelsTests.jl | 366 ++++++++++++++++++ .../DarcyNonConformingOctreeModelsTests.jl | 17 + 3 files changed, 384 insertions(+), 1 deletion(-) create mode 100644 test/DarcyNonConformingOctreeModelsTests.jl create mode 100644 test/mpi/DarcyNonConformingOctreeModelsTests.jl diff --git a/src/FESpaces.jl b/src/FESpaces.jl index ce47cdf..1cedfd3 100644 --- a/src/FESpaces.jl +++ b/src/FESpaces.jl @@ -22,7 +22,7 @@ function _generate_face_subface_ldof_to_cell_ldof(Df,Dc,reffe::Tuple{<:Lagrangia end const _coarse_faces_to_child_ids_2D=[1 2; 3 4; 1 3; 2 4] -const _coarse_faces_to_child_ids_3D=[1 2 3 4; 5 6 7 8; 1 3 5 7; 2 4 6 8; 1 2 5 6; 3 4 7 8] +const _coarse_faces_to_child_ids_3D=[1 3 2 4; 5 7 6 8; 1 2 5 6; 3 4 7 8; 1 3 5 7; 2 4 6 8] function _generate_unit_hypercube_model(Dc) @assert Dc==2 || Dc==3 diff --git a/test/DarcyNonConformingOctreeModelsTests.jl b/test/DarcyNonConformingOctreeModelsTests.jl new file mode 100644 index 0000000..eaf07c0 --- /dev/null +++ b/test/DarcyNonConformingOctreeModelsTests.jl @@ -0,0 +1,366 @@ +module DarcyNonConformingOctreeModelsTests + using P4est_wrapper + using GridapP4est + using Gridap + using PartitionedArrays + using GridapDistributed + using MPI + using Gridap.FESpaces + using FillArrays + using Logging + using Test + +# function test_transfer_ops_and_redistribute(ranks,dmodel,order) +# # Define manufactured functions +# u(x) = x[1]+x[2]^order +# f(x) = -Δ(u)(x) +# degree = 2*order+1 +# reffe=ReferenceFE(lagrangian,Float64,order) +# VH=FESpace(dmodel,reffe,conformity=:H1;dirichlet_tags="boundary") +# UH=TrialFESpace(VH,u) +# ref_coarse_flags=map(ranks,partition(get_cell_gids(dmodel.dmodel))) do rank,indices +# flags=zeros(Cint,length(indices)) +# flags.=nothing_flag + +# flags[1]=refine_flag +# flags[own_length(indices)]=refine_flag + +# # To create some unbalance +# if (rank%2==0 && own_length(indices)>1) +# flags[div(own_length(indices),2)]=refine_flag +# end +# flags +# end +# fmodel,glue=adapt(dmodel,ref_coarse_flags); +# # map(ranks,glue) do rank, glue +# # if rank==2 +# # print(glue.n2o_faces_map[end]); print("\n") +# # end +# # end +# Vh=FESpace(fmodel,reffe,conformity=:H1;dirichlet_tags="boundary") +# Uh=TrialFESpace(Vh,u) + +# ΩH = Triangulation(dmodel) +# dΩH = Measure(ΩH,degree) + +# aH(u,v) = ∫( ∇(v)⊙∇(u) )*dΩH +# bH(v) = ∫(v*f)*dΩH + +# op = AffineFEOperator(aH,bH,UH,VH) +# uH = solve(op) +# e = u - uH + +# # # Compute errors +# el2 = sqrt(sum( ∫( e*e )*dΩH )) +# eh1 = sqrt(sum( ∫( e*e + ∇(e)⋅∇(e) )*dΩH )) + +# tol=1e-6 +# println("[SOLVE COARSE] el2 < tol: $(el2) < $(tol)") +# println("[SOLVE COARSE] eh1 < tol: $(eh1) < $(tol)") +# @assert el2 < tol +# @assert eh1 < tol + + +# Ωh = Triangulation(fmodel) +# dΩh = Measure(Ωh,degree) + +# ah(u,v) = ∫( ∇(v)⊙∇(u) )*dΩh +# bh(v) = ∫(v*f)*dΩh + +# op = AffineFEOperator(ah,bh,Uh,Vh) +# uh = solve(op) +# e = u - uh + +# writevtk(ΩH, "ctrian", cellfields=["uH"=>uH]) +# writevtk(Ωh, "ftrian", cellfields=["uh"=>uh]) + +# # # Compute errors + +# el2 = sqrt(sum( ∫( e*e )*dΩh )) +# eh1 = sqrt(sum( ∫( e*e + ∇(e)⋅∇(e) )*dΩh )) + +# println("[SOLVE FINE] el2 < tol: $(el2) < $(tol)") +# println("[SOLVE FINE] eh1 < tol: $(eh1) < $(tol)") +# @assert el2 < tol +# @assert eh1 < tol + +# # prolongation via interpolation +# uHh=interpolate(uH,Uh) +# e = uh - uHh +# el2 = sqrt(sum( ∫( e*e )*dΩh )) +# tol=1e-6 +# println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") +# @assert el2 < tol + +# # prolongation via L2-projection +# # Coarse FEFunction -> Fine FEFunction, by projection +# ahp(u,v) = ∫(v⋅u)*dΩh +# lhp(v) = ∫(v⋅uH)*dΩh +# oph = AffineFEOperator(ahp,lhp,Uh,Vh) +# uHh = solve(oph) +# e = uh - uHh +# el2 = sqrt(sum( ∫( e*e )*dΩh )) +# println("[L2 PROJECTION] el2 < tol: $(el2) < $(tol)") +# @assert el2 < tol + +# # restriction via interpolation +# uhH=interpolate(uh,UH) +# e = uH - uhH +# el2 = sqrt(sum( ∫( e*e )*dΩh )) +# println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") +# @assert el2 < tol + +# # restriction via L2-projection +# dΩhH = Measure(ΩH,Ωh,2*order) +# aHp(u,v) = ∫(v⋅u)*dΩH +# lHp(v) = ∫(v⋅uh)*dΩhH +# oph = AffineFEOperator(aHp,lHp,UH,VH) +# uhH = solve(oph) +# e = uH - uhH +# el2 = sqrt(sum( ∫( e*e )*dΩH )) + +# fmodel_red, red_glue=GridapDistributed.redistribute(fmodel); +# Vhred=FESpace(fmodel_red,reffe,conformity=:H1;dirichlet_tags="boundary") +# Uhred=TrialFESpace(Vhred,u) + +# Ωhred = Triangulation(fmodel_red) +# dΩhred = Measure(Ωhred,degree) + +# ahred(u,v) = ∫( ∇(v)⊙∇(u) )*dΩhred +# bhred(v) = ∫(v*f)*dΩhred + +# op = AffineFEOperator(ahred,bhred,Uhred,Vhred) +# uhred = solve(op) +# e = u - uhred +# el2 = sqrt(sum( ∫( e*e )*dΩhred )) +# println("[SOLVE FINE REDISTRIBUTED] el2 < tol: $(el2) < $(tol)") +# @assert el2 < tol + + +# uhred2 = GridapDistributed.redistribute_fe_function(uh,Vhred,fmodel_red,red_glue) +# e = u - uhred2 +# el2 = sqrt(sum( ∫( e*e )*dΩhred )) +# println("[REDISTRIBUTE SOLUTION] el2 < tol: $(el2) < $(tol)") +# @assert el2 < tol + +# fmodel_red +# end + +# function test_refine_and_coarsen_at_once(ranks, +# dmodel::OctreeDistributedDiscreteModel{Dc}, +# order) where Dc +# u(x) = x[1]+x[2]^order +# f(x) = -Δ(u)(x) +# degree = 2*order+1 +# ref_coarse_flags=map(ranks,partition(get_cell_gids(dmodel.dmodel))) do rank,indices +# flags=zeros(Cint,length(indices)) +# flags.=nothing_flag +# if (rank==1) +# flags[1:2^Dc].=coarsen_flag +# else +# flags[own_length(indices)]=refine_flag +# end +# flags +# end +# fmodel,glue=adapt(dmodel,ref_coarse_flags); + +# reffe=ReferenceFE(lagrangian,Float64,order) +# VH=FESpace(dmodel,reffe,conformity=:H1;dirichlet_tags="boundary") +# UH=TrialFESpace(VH,u) + +# Vh=FESpace(fmodel,reffe,conformity=:H1;dirichlet_tags="boundary") +# Uh=TrialFESpace(Vh,u) +# ΩH = Triangulation(dmodel) +# dΩH = Measure(ΩH,degree) + +# aH(u,v) = ∫( ∇(v)⊙∇(u) )*dΩH +# bH(v) = ∫(v*f)*dΩH + +# op = AffineFEOperator(aH,bH,UH,VH) +# uH = solve(op) +# e = u - uH + +# # # Compute errors +# el2 = sqrt(sum( ∫( e*e )*dΩH )) +# eh1 = sqrt(sum( ∫( e*e + ∇(e)⋅∇(e) )*dΩH )) + +# tol=1e-7 +# @assert el2 < tol +# @assert eh1 < tol + +# Ωh = Triangulation(fmodel) +# dΩh = Measure(Ωh,degree) + +# ah(u,v) = ∫( ∇(v)⊙∇(u) )*dΩh +# bh(v) = ∫(v*f)*dΩh + +# op = AffineFEOperator(ah,bh,Uh,Vh) +# uh = solve(op) +# e = u - uh + +# # # Compute errors +# el2 = sqrt(sum( ∫( e*e )*dΩh )) +# eh1 = sqrt(sum( ∫( e*e + ∇(e)⋅∇(e) )*dΩh )) + +# tol=1e-7 +# @assert el2 < tol +# @assert eh1 < tol + +# # prolongation via interpolation +# uHh=interpolate(uH,Uh) +# e = uh - uHh +# el2 = sqrt(sum( ∫( e*e )*dΩh )) +# tol=1e-7 +# @assert el2 < tol +# end + + function test_2d(ranks,order) + coarse_model=CartesianDiscreteModel((0,1,0,1),(1,1)) + dmodel=OctreeDistributedDiscreteModel(ranks,coarse_model,2) + test_refine_and_coarsen_at_once(ranks,dmodel,order) + rdmodel=dmodel + for i=1:5 + rdmodel=test_transfer_ops_and_redistribute(ranks,rdmodel,order) + end + end + +# function test_3d(ranks,order) +# coarse_model=CartesianDiscreteModel((0,1,0,1,0,1),(1,1,1)) +# dmodel=OctreeDistributedDiscreteModel(ranks,coarse_model,2) +# test_refine_and_coarsen_at_once(ranks,dmodel,order) +# rdmodel=dmodel +# for i=1:5 +# rdmodel=test_transfer_ops_and_redistribute(ranks,rdmodel,order) +# end +# end + +# function test(ranks,TVDc::Type{Val{Dc}}, perm, order) where Dc +# coarse_model = setup_model(TVDc,perm) +# model = OctreeDistributedDiscreteModel(ranks, coarse_model, 1) +# test_transfer_ops_and_redistribute(ranks,model,order) +# end + + u_ex_2D(x) = VectorValue(2*x[1],x[1]+x[2]) + p_ex_2D(x) = x[1]-x[2] + f_ex_2D(x) = u_ex_2D(x) + ∇(p_ex_2D)(x) + u_ex_3D(x) = VectorValue(2*x[1],x[1]+x[2],4*x[3]) + p_ex_3D(x) = x[1]-x[2]+2x[3] + f_ex_3D(x) = u_ex_3D(x) + ∇(p_ex_3D)(x) + + function get_analytical_functions(Dc) + if Dc==2 + return u_ex_2D, p_ex_2D, f_ex_2D + else + @assert Dc==3 + return u_ex_3D, p_ex_3D, f_ex_3D + end + end + + include("CoarseDiscreteModelsTools.jl") + + function GridapDistributed.remove_ghost_cells( + trian::Gridap.Adaptivity.AdaptedTriangulation{Dc,Dp,<:Union{SkeletonTriangulation,BoundaryTriangulation}},gids) where {Dc,Dp} + GridapDistributed.remove_ghost_cells(trian.trian,gids) + end + + function solve_darcy(model::GridapDistributed.DistributedDiscreteModel{Dc},order) where {Dc} + if (Dc==2) + dirichlet_tags=[5,6] + neumanntags = [7,8] + else + @assert Dc==3 + dirichlet_tags=[21,22,23] + neumanntags = [24,25,26] + end + + u_ex, p_ex, f_ex=get_analytical_functions(Dc) + + V = FESpace(model, + ReferenceFE(raviart_thomas,Float64,order), + conformity=:Hdiv, + dirichlet_tags=dirichlet_tags) + + Q = FESpace(model, + ReferenceFE(lagrangian,Float64,order); + conformity=:L2) + + U = TrialFESpace(V,u_ex) + P = TrialFESpace(Q) + + Y = MultiFieldFESpace([V, Q]) + X = MultiFieldFESpace([U, P]) + + trian = Triangulation(model) + degree = 2*(order+1) + dΩ = Measure(trian,degree) + + + btrian = Boundary(model,tags=neumanntags) + degree = 2*(order+1) + dΓ = Measure(btrian,degree) + nb = get_normal_vector(btrian) + + a((u, p),(v, q)) = ∫(u⋅v)dΩ +∫(q*(∇⋅u))dΩ-∫((∇⋅v)*p)dΩ + b(( v, q)) = ∫( v⋅f_ex + q*(∇⋅u_ex))dΩ - ∫((v⋅nb)*p_ex )dΓ + + op = AffineFEOperator(a,b,X,Y) + xh = solve(op) + end + + function check_error_darcy(model::GridapDistributed.DistributedDiscreteModel{Dc},order,xh) where {Dc} + trian = Triangulation(model) + degree = 2*(order+1) + dΩ = Measure(trian,degree) + + uh = xh[1] + uh, ph = xh + + u_ex, p_ex, f_ex = get_analytical_functions(Dc) + + eu = u_ex - uh + ep = p_ex - ph + + l2(v) = sqrt(sum(∫(v⋅v)*dΩ)) + h1(v) = sqrt(sum(∫(v*v + ∇(v)⋅∇(v))*dΩ)) + + eu_l2 = l2(eu) + ep_l2 = l2(ep) + ep_h1 = h1(ep) + + tol = 1.0e-9 + @test eu_l2 < tol + @test ep_l2 < tol + @test ep_h1 < tol + end + + function driver(ranks,coarse_model,order) + model=OctreeDistributedDiscreteModel(ranks,coarse_model,1) + ref_coarse_flags=map(ranks,partition(get_cell_gids(model.dmodel))) do rank,indices + flags=zeros(Cint,length(indices)) + flags.=nothing_flag + #flags[1:2^2].=coarsen_flag + flags[own_length(indices)]=refine_flag + flags + end + fmodel,glue=adapt(model,ref_coarse_flags) + xh = solve_darcy(fmodel,order) + check_error_darcy(fmodel,order,xh) + end + + function run(distribute) + # debug_logger = ConsoleLogger(stderr, Logging.Debug) + # global_logger(debug_logger); # Enable the debug logger globally + np = MPI.Comm_size(MPI.COMM_WORLD) + ranks = distribute(LinearIndices((np,))) + + # domain = (0,1,0,1) + # order = 1 + # coarse_model=CartesianDiscreteModel(domain,(1,1)) + # driver(ranks,coarse_model,order) + + domain = (0,1,0,1,0,1) + order = 1 + coarse_model=CartesianDiscreteModel(domain,(1,1,1)) + driver(ranks,coarse_model,order) + end +end \ No newline at end of file diff --git a/test/mpi/DarcyNonConformingOctreeModelsTests.jl b/test/mpi/DarcyNonConformingOctreeModelsTests.jl new file mode 100644 index 0000000..5df77c2 --- /dev/null +++ b/test/mpi/DarcyNonConformingOctreeModelsTests.jl @@ -0,0 +1,17 @@ + +using MPI +using PartitionedArrays + +include("../DarcyNonConformingOctreeModelsTests.jl") +import .DarcyNonConformingOctreeModelsTests as TestModule + +if !MPI.Initialized() + MPI.Init() +end + +with_mpi() do distribute + TestModule.run(distribute) +end + +MPI.Finalize() + From c383e51102fd54e99727d3a2cefd07b3eec3d30d Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Sat, 9 Sep 2023 10:47:01 +1000 Subject: [PATCH 07/14] Working in 3D for order=0 for order=1, 3D, it only works with constant pressures! --- test/DarcyNonConformingOctreeModelsTests.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/DarcyNonConformingOctreeModelsTests.jl b/test/DarcyNonConformingOctreeModelsTests.jl index eaf07c0..acbb69c 100644 --- a/test/DarcyNonConformingOctreeModelsTests.jl +++ b/test/DarcyNonConformingOctreeModelsTests.jl @@ -243,8 +243,8 @@ module DarcyNonConformingOctreeModelsTests u_ex_2D(x) = VectorValue(2*x[1],x[1]+x[2]) p_ex_2D(x) = x[1]-x[2] f_ex_2D(x) = u_ex_2D(x) + ∇(p_ex_2D)(x) - u_ex_3D(x) = VectorValue(2*x[1],x[1]+x[2],4*x[3]) - p_ex_3D(x) = x[1]-x[2]+2x[3] + u_ex_3D(x) = VectorValue(x[1],x[1]+x[2],2*x[3]) + p_ex_3D(x) = 3.14 f_ex_3D(x) = u_ex_3D(x) + ∇(p_ex_3D)(x) function get_analytical_functions(Dc) @@ -359,7 +359,7 @@ module DarcyNonConformingOctreeModelsTests # driver(ranks,coarse_model,order) domain = (0,1,0,1,0,1) - order = 1 + order = 1 coarse_model=CartesianDiscreteModel(domain,(1,1,1)) driver(ranks,coarse_model,order) end From 0131bd64bb728f751e1bb4c891d29cf999bdea5e Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Sun, 10 Sep 2023 19:59:45 +1000 Subject: [PATCH 08/14] Using again the expected _coarse_faces_to_child_ids_3D[:] --- src/FESpaces.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FESpaces.jl b/src/FESpaces.jl index 1cedfd3..ce47cdf 100644 --- a/src/FESpaces.jl +++ b/src/FESpaces.jl @@ -22,7 +22,7 @@ function _generate_face_subface_ldof_to_cell_ldof(Df,Dc,reffe::Tuple{<:Lagrangia end const _coarse_faces_to_child_ids_2D=[1 2; 3 4; 1 3; 2 4] -const _coarse_faces_to_child_ids_3D=[1 3 2 4; 5 7 6 8; 1 2 5 6; 3 4 7 8; 1 3 5 7; 2 4 6 8] +const _coarse_faces_to_child_ids_3D=[1 2 3 4; 5 6 7 8; 1 3 5 7; 2 4 6 8; 1 2 5 6; 3 4 7 8] function _generate_unit_hypercube_model(Dc) @assert Dc==2 || Dc==3 From 9e8ba7f2e1887118e037a2b8f731a680b4f88fb1 Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Sun, 10 Sep 2023 20:47:50 +1000 Subject: [PATCH 09/14] More work into DarcyNonConformingTests --- test/DarcyNonConformingOctreeModelsTests.jl | 347 +++++++++----------- 1 file changed, 148 insertions(+), 199 deletions(-) diff --git a/test/DarcyNonConformingOctreeModelsTests.jl b/test/DarcyNonConformingOctreeModelsTests.jl index acbb69c..e70de86 100644 --- a/test/DarcyNonConformingOctreeModelsTests.jl +++ b/test/DarcyNonConformingOctreeModelsTests.jl @@ -10,209 +10,141 @@ module DarcyNonConformingOctreeModelsTests using Logging using Test -# function test_transfer_ops_and_redistribute(ranks,dmodel,order) -# # Define manufactured functions -# u(x) = x[1]+x[2]^order -# f(x) = -Δ(u)(x) -# degree = 2*order+1 -# reffe=ReferenceFE(lagrangian,Float64,order) -# VH=FESpace(dmodel,reffe,conformity=:H1;dirichlet_tags="boundary") -# UH=TrialFESpace(VH,u) -# ref_coarse_flags=map(ranks,partition(get_cell_gids(dmodel.dmodel))) do rank,indices -# flags=zeros(Cint,length(indices)) -# flags.=nothing_flag + function test_transfer_ops_and_redistribute(ranks, + dmodel::GridapDistributed.DistributedDiscreteModel{Dc}, + order) where Dc + ref_coarse_flags=map(ranks,partition(get_cell_gids(dmodel.dmodel))) do rank,indices + flags=zeros(Cint,length(indices)) + flags.=nothing_flag -# flags[1]=refine_flag -# flags[own_length(indices)]=refine_flag - -# # To create some unbalance -# if (rank%2==0 && own_length(indices)>1) -# flags[div(own_length(indices),2)]=refine_flag -# end -# flags -# end -# fmodel,glue=adapt(dmodel,ref_coarse_flags); -# # map(ranks,glue) do rank, glue -# # if rank==2 -# # print(glue.n2o_faces_map[end]); print("\n") -# # end -# # end -# Vh=FESpace(fmodel,reffe,conformity=:H1;dirichlet_tags="boundary") -# Uh=TrialFESpace(Vh,u) - -# ΩH = Triangulation(dmodel) -# dΩH = Measure(ΩH,degree) - -# aH(u,v) = ∫( ∇(v)⊙∇(u) )*dΩH -# bH(v) = ∫(v*f)*dΩH - -# op = AffineFEOperator(aH,bH,UH,VH) -# uH = solve(op) -# e = u - uH - -# # # Compute errors -# el2 = sqrt(sum( ∫( e*e )*dΩH )) -# eh1 = sqrt(sum( ∫( e*e + ∇(e)⋅∇(e) )*dΩH )) - -# tol=1e-6 -# println("[SOLVE COARSE] el2 < tol: $(el2) < $(tol)") -# println("[SOLVE COARSE] eh1 < tol: $(eh1) < $(tol)") -# @assert el2 < tol -# @assert eh1 < tol - - -# Ωh = Triangulation(fmodel) -# dΩh = Measure(Ωh,degree) - -# ah(u,v) = ∫( ∇(v)⊙∇(u) )*dΩh -# bh(v) = ∫(v*f)*dΩh - -# op = AffineFEOperator(ah,bh,Uh,Vh) -# uh = solve(op) -# e = u - uh - -# writevtk(ΩH, "ctrian", cellfields=["uH"=>uH]) -# writevtk(Ωh, "ftrian", cellfields=["uh"=>uh]) - -# # # Compute errors - -# el2 = sqrt(sum( ∫( e*e )*dΩh )) -# eh1 = sqrt(sum( ∫( e*e + ∇(e)⋅∇(e) )*dΩh )) - -# println("[SOLVE FINE] el2 < tol: $(el2) < $(tol)") -# println("[SOLVE FINE] eh1 < tol: $(eh1) < $(tol)") -# @assert el2 < tol -# @assert eh1 < tol - -# # prolongation via interpolation -# uHh=interpolate(uH,Uh) -# e = uh - uHh -# el2 = sqrt(sum( ∫( e*e )*dΩh )) -# tol=1e-6 -# println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") -# @assert el2 < tol - -# # prolongation via L2-projection -# # Coarse FEFunction -> Fine FEFunction, by projection -# ahp(u,v) = ∫(v⋅u)*dΩh -# lhp(v) = ∫(v⋅uH)*dΩh -# oph = AffineFEOperator(ahp,lhp,Uh,Vh) -# uHh = solve(oph) -# e = uh - uHh -# el2 = sqrt(sum( ∫( e*e )*dΩh )) -# println("[L2 PROJECTION] el2 < tol: $(el2) < $(tol)") -# @assert el2 < tol - -# # restriction via interpolation -# uhH=interpolate(uh,UH) -# e = uH - uhH -# el2 = sqrt(sum( ∫( e*e )*dΩh )) -# println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") -# @assert el2 < tol - -# # restriction via L2-projection -# dΩhH = Measure(ΩH,Ωh,2*order) -# aHp(u,v) = ∫(v⋅u)*dΩH -# lHp(v) = ∫(v⋅uh)*dΩhH -# oph = AffineFEOperator(aHp,lHp,UH,VH) -# uhH = solve(oph) -# e = uH - uhH -# el2 = sqrt(sum( ∫( e*e )*dΩH )) - -# fmodel_red, red_glue=GridapDistributed.redistribute(fmodel); -# Vhred=FESpace(fmodel_red,reffe,conformity=:H1;dirichlet_tags="boundary") -# Uhred=TrialFESpace(Vhred,u) - -# Ωhred = Triangulation(fmodel_red) -# dΩhred = Measure(Ωhred,degree) - -# ahred(u,v) = ∫( ∇(v)⊙∇(u) )*dΩhred -# bhred(v) = ∫(v*f)*dΩhred - -# op = AffineFEOperator(ahred,bhred,Uhred,Vhred) -# uhred = solve(op) -# e = u - uhred -# el2 = sqrt(sum( ∫( e*e )*dΩhred )) -# println("[SOLVE FINE REDISTRIBUTED] el2 < tol: $(el2) < $(tol)") -# @assert el2 < tol - - -# uhred2 = GridapDistributed.redistribute_fe_function(uh,Vhred,fmodel_red,red_glue) -# e = u - uhred2 -# el2 = sqrt(sum( ∫( e*e )*dΩhred )) -# println("[REDISTRIBUTE SOLUTION] el2 < tol: $(el2) < $(tol)") -# @assert el2 < tol - -# fmodel_red -# end - -# function test_refine_and_coarsen_at_once(ranks, -# dmodel::OctreeDistributedDiscreteModel{Dc}, -# order) where Dc -# u(x) = x[1]+x[2]^order -# f(x) = -Δ(u)(x) -# degree = 2*order+1 -# ref_coarse_flags=map(ranks,partition(get_cell_gids(dmodel.dmodel))) do rank,indices -# flags=zeros(Cint,length(indices)) -# flags.=nothing_flag -# if (rank==1) -# flags[1:2^Dc].=coarsen_flag -# else -# flags[own_length(indices)]=refine_flag -# end -# flags -# end -# fmodel,glue=adapt(dmodel,ref_coarse_flags); + flags[1]=refine_flag + flags[own_length(indices)]=refine_flag -# reffe=ReferenceFE(lagrangian,Float64,order) -# VH=FESpace(dmodel,reffe,conformity=:H1;dirichlet_tags="boundary") -# UH=TrialFESpace(VH,u) + # To create some unbalance + if (rank%2==0 && own_length(indices)>1) + flags[div(own_length(indices),2)]=refine_flag + end + flags + end + fmodel,glue=adapt(dmodel,ref_coarse_flags); + + # Solve coarse + xH,XH=solve_darcy(dmodel,order) + check_error_darcy(dmodel,order,xH) + uH,pH=xH + UH,PH=XH + + # Solve fine + xh,Xh=solve_darcy(fmodel,order) + check_error_darcy(fmodel,order,xh) + uh,ph=xh + Uh,Ph=Xh -# Vh=FESpace(fmodel,reffe,conformity=:H1;dirichlet_tags="boundary") -# Uh=TrialFESpace(Vh,u) -# ΩH = Triangulation(dmodel) -# dΩH = Measure(ΩH,degree) + Ωh = Triangulation(fmodel) + degree = 2*(order+1) + dΩh = Measure(Ωh,degree) + + # prolongation via interpolation + uHh=interpolate(uH,Uh) + e = uh - uHh + el2 = sqrt(sum( ∫( e⋅e )*dΩh )) + tol=1e-6 + println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") + @assert el2 < tol + + # prolongation via L2-projection + # Coarse FEFunction -> Fine FEFunction, by projection + ahp(u,v) = ∫(v⋅u)*dΩh + lhp(v) = ∫(v⋅uH)*dΩh + oph = AffineFEOperator(ahp,lhp,Uh,Uh) + uHh = solve(oph) + e = uh - uHh + el2 = sqrt(sum( ∫( e⋅e )*dΩh )) + println("[L2 PROJECTION] el2 < tol: $(el2) < $(tol)") + @assert el2 < tol + + # restriction via interpolation + uhH=interpolate(uh,UH) + e = uH - uhH + el2 = sqrt(sum( ∫( e⋅e )*dΩh )) + println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") + @assert el2 < tol + + # restriction via L2-projection + ΩH = Triangulation(dmodel) + degree = 2*(order+1) + dΩH = Measure(ΩH,degree) + + dΩhH = Measure(ΩH,Ωh,2*order) + aHp(u,v) = ∫(v⋅u)*dΩH + lHp(v) = ∫(v⋅uh)*dΩhH + oph = AffineFEOperator(aHp,lHp,UH,UH) + uhH = solve(oph) + e = uH - uhH + el2 = sqrt(sum( ∫( e⋅e )*dΩH )) + + fmodel_red, red_glue=GridapDistributed.redistribute(fmodel); + xh_red,Xh_red=solve_darcy(fmodel_red,order) + check_error_darcy(fmodel_red,order,xh_red) + uhred,phred=xh_red + Uh_red,Ph_red=Xh_red + + + trian = Triangulation(fmodel_red) + degree = 2*(order+1) + dΩhred = Measure(trian,degree) -# aH(u,v) = ∫( ∇(v)⊙∇(u) )*dΩH -# bH(v) = ∫(v*f)*dΩH + u_ex, p_ex, f_ex=get_analytical_functions(Dc) -# op = AffineFEOperator(aH,bH,UH,VH) -# uH = solve(op) -# e = u - uH -# # # Compute errors -# el2 = sqrt(sum( ∫( e*e )*dΩH )) -# eh1 = sqrt(sum( ∫( e*e + ∇(e)⋅∇(e) )*dΩH )) + uhred2 = GridapDistributed.redistribute_fe_function(uhred,Uh_red,fmodel_red,red_glue) + e = u_ex - uhred2 + el2 = sqrt(sum( ∫( e⋅e )*dΩhred )) + println("[REDISTRIBUTE SOLUTION] el2 < tol: $(el2) < $(tol)") + @assert el2 < tol -# tol=1e-7 -# @assert el2 < tol -# @assert eh1 < tol + fmodel_red + end -# Ωh = Triangulation(fmodel) -# dΩh = Measure(Ωh,degree) + function test_refine_and_coarsen_at_once(ranks, + dmodel::OctreeDistributedDiscreteModel{Dc}, + order) where Dc + degree = 2*order+1 + ref_coarse_flags=map(ranks,partition(get_cell_gids(dmodel.dmodel))) do rank,indices + flags=zeros(Cint,length(indices)) + flags.=nothing_flag + if (rank==1) + flags[1:2^Dc].=coarsen_flag + else + flags[own_length(indices)]=refine_flag + end + flags + end + fmodel,glue=adapt(dmodel,ref_coarse_flags); -# ah(u,v) = ∫( ∇(v)⊙∇(u) )*dΩh -# bh(v) = ∫(v*f)*dΩh + # Solve coarse + xH,XH=solve_darcy(dmodel,order) + check_error_darcy(dmodel,order,xH) + uH,pH=xH -# op = AffineFEOperator(ah,bh,Uh,Vh) -# uh = solve(op) -# e = u - uh + # Solve fine + xh,Xh=solve_darcy(fmodel,order) + check_error_darcy(fmodel,order,xh) + uh,ph=xh -# # # Compute errors -# el2 = sqrt(sum( ∫( e*e )*dΩh )) -# eh1 = sqrt(sum( ∫( e*e + ∇(e)⋅∇(e) )*dΩh )) + # prolongation via interpolation + Uh,Ph=Xh + uHh=interpolate(uH,Uh) + e = uh - uHh -# tol=1e-7 -# @assert el2 < tol -# @assert eh1 < tol + trian = Triangulation(fmodel) + degree = 2*(order+1) + dΩh = Measure(trian,degree) -# # prolongation via interpolation -# uHh=interpolate(uH,Uh) -# e = uh - uHh -# el2 = sqrt(sum( ∫( e*e )*dΩh )) -# tol=1e-7 -# @assert el2 < tol -# end + el2 = sqrt(sum( ∫( e⋅e )*dΩh )) + tol=1e-7 + @assert el2 < tol + end function test_2d(ranks,order) coarse_model=CartesianDiscreteModel((0,1,0,1),(1,1)) @@ -243,8 +175,8 @@ module DarcyNonConformingOctreeModelsTests u_ex_2D(x) = VectorValue(2*x[1],x[1]+x[2]) p_ex_2D(x) = x[1]-x[2] f_ex_2D(x) = u_ex_2D(x) + ∇(p_ex_2D)(x) - u_ex_3D(x) = VectorValue(x[1],x[1]+x[2],2*x[3]) - p_ex_3D(x) = 3.14 + u_ex_3D(x) = VectorValue(x[1],x[2],x[3]) + p_ex_3D(x) = x[2] f_ex_3D(x) = u_ex_3D(x) + ∇(p_ex_3D)(x) function get_analytical_functions(Dc) @@ -270,7 +202,7 @@ module DarcyNonConformingOctreeModelsTests else @assert Dc==3 dirichlet_tags=[21,22,23] - neumanntags = [24,25,26] + neumanntags=[24,25,26] end u_ex, p_ex, f_ex=get_analytical_functions(Dc) @@ -302,9 +234,24 @@ module DarcyNonConformingOctreeModelsTests a((u, p),(v, q)) = ∫(u⋅v)dΩ +∫(q*(∇⋅u))dΩ-∫((∇⋅v)*p)dΩ b(( v, q)) = ∫( v⋅f_ex + q*(∇⋅u_ex))dΩ - ∫((v⋅nb)*p_ex )dΓ - + + # xh=get_trial_fe_basis(X) + # yh=get_fe_basis(Y) + # vh, qh = yh + # uh, ph = xh + + # res=assemble_vector(a((u_ex,p_ex),(vh,qh))-b((vh,qh)),Y) + # println("res: $(norm(res))") + + # axv=assemble_vector(a((u_ex,p_ex),(vh,qh)),Y) + # bv=assemble_vector(b((vh,qh)),Y) + # map(axv.vector_partition,bv.vector_partition) do axv_vp, bv_vp + # println(axv_vp-bv_vp) + # end + op = AffineFEOperator(a,b,X,Y) xh = solve(op) + xh,X end function check_error_darcy(model::GridapDistributed.DistributedDiscreteModel{Dc},order,xh) where {Dc} @@ -312,7 +259,6 @@ module DarcyNonConformingOctreeModelsTests degree = 2*(order+1) dΩ = Measure(trian,degree) - uh = xh[1] uh, ph = xh u_ex, p_ex, f_ex = get_analytical_functions(Dc) @@ -352,15 +298,18 @@ module DarcyNonConformingOctreeModelsTests # global_logger(debug_logger); # Enable the debug logger globally np = MPI.Comm_size(MPI.COMM_WORLD) ranks = distribute(LinearIndices((np,))) + + order=1 + test_2d(ranks,order) # domain = (0,1,0,1) # order = 1 # coarse_model=CartesianDiscreteModel(domain,(1,1)) # driver(ranks,coarse_model,order) - domain = (0,1,0,1,0,1) - order = 1 - coarse_model=CartesianDiscreteModel(domain,(1,1,1)) - driver(ranks,coarse_model,order) + # domain = (0,1,0,1,0,1) + # order = 2 + # coarse_model=CartesianDiscreteModel(domain,(1,1,1)) + # driver(ranks,coarse_model,order) end end \ No newline at end of file From 6bc7b2c33146ef8958ddda801b80ef6eb1a93737 Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Wed, 27 Sep 2023 23:11:20 +1000 Subject: [PATCH 10/14] Bug-fixed RT FEs in 3D --- src/FESpaces.jl | 2 +- test/DarcyNonConformingOctreeModelsTests.jl | 53 ++++++++++++--------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/FESpaces.jl b/src/FESpaces.jl index ce47cdf..6c9dee4 100644 --- a/src/FESpaces.jl +++ b/src/FESpaces.jl @@ -22,7 +22,7 @@ function _generate_face_subface_ldof_to_cell_ldof(Df,Dc,reffe::Tuple{<:Lagrangia end const _coarse_faces_to_child_ids_2D=[1 2; 3 4; 1 3; 2 4] -const _coarse_faces_to_child_ids_3D=[1 2 3 4; 5 6 7 8; 1 3 5 7; 2 4 6 8; 1 2 5 6; 3 4 7 8] +const _coarse_faces_to_child_ids_3D=[1 2 3 4; 5 6 7 8; 1 2 5 6; 3 4 7 8; 1 3 5 7; 2 4 6 8; ] function _generate_unit_hypercube_model(Dc) @assert Dc==2 || Dc==3 diff --git a/test/DarcyNonConformingOctreeModelsTests.jl b/test/DarcyNonConformingOctreeModelsTests.jl index e70de86..506a90f 100644 --- a/test/DarcyNonConformingOctreeModelsTests.jl +++ b/test/DarcyNonConformingOctreeModelsTests.jl @@ -156,15 +156,15 @@ module DarcyNonConformingOctreeModelsTests end end -# function test_3d(ranks,order) -# coarse_model=CartesianDiscreteModel((0,1,0,1,0,1),(1,1,1)) -# dmodel=OctreeDistributedDiscreteModel(ranks,coarse_model,2) -# test_refine_and_coarsen_at_once(ranks,dmodel,order) -# rdmodel=dmodel -# for i=1:5 -# rdmodel=test_transfer_ops_and_redistribute(ranks,rdmodel,order) -# end -# end + function test_3d(ranks,order) + coarse_model=CartesianDiscreteModel((0,1,0,1,0,1),(1,1,1)) + dmodel=OctreeDistributedDiscreteModel(ranks,coarse_model,2) + test_refine_and_coarsen_at_once(ranks,dmodel,order) + rdmodel=dmodel + for i=1:5 + rdmodel=test_transfer_ops_and_redistribute(ranks,rdmodel,order) + end + end # function test(ranks,TVDc::Type{Val{Dc}}, perm, order) where Dc # coarse_model = setup_model(TVDc,perm) @@ -226,7 +226,6 @@ module DarcyNonConformingOctreeModelsTests degree = 2*(order+1) dΩ = Measure(trian,degree) - btrian = Boundary(model,tags=neumanntags) degree = 2*(order+1) dΓ = Measure(btrian,degree) @@ -238,7 +237,24 @@ module DarcyNonConformingOctreeModelsTests # xh=get_trial_fe_basis(X) # yh=get_fe_basis(Y) # vh, qh = yh - # uh, ph = xh + # uh, ph = xh + # xh=interpolate_everywhere([u_ex,p_ex],X) + # uh, ph = xh + # eu = u_ex - uh + # ep = p_ex - ph + # writevtk(trian,"error",cellfields=["eu"=>eu,"ep"=>ep]) + + # l2(v) = sqrt(sum(∫(v⋅v)*dΩ)) + # h1(v) = sqrt(sum(∫(v*v + ∇(v)⋅∇(v))*dΩ)) + + # eu_l2 = l2(eu) + # ep_l2 = l2(ep) + # ep_h1 = h1(ep) + + # tol = 1.0e-9 + # @test eu_l2 < tol + # @test ep_l2 < tol + # @test ep_h1 < tol # res=assemble_vector(a((u_ex,p_ex),(vh,qh))-b((vh,qh)),Y) # println("res: $(norm(res))") @@ -289,7 +305,7 @@ module DarcyNonConformingOctreeModelsTests flags end fmodel,glue=adapt(model,ref_coarse_flags) - xh = solve_darcy(fmodel,order) + xh,Xh = solve_darcy(fmodel,order) check_error_darcy(fmodel,order,xh) end @@ -301,15 +317,8 @@ module DarcyNonConformingOctreeModelsTests order=1 test_2d(ranks,order) - - # domain = (0,1,0,1) - # order = 1 - # coarse_model=CartesianDiscreteModel(domain,(1,1)) - # driver(ranks,coarse_model,order) - - # domain = (0,1,0,1,0,1) - # order = 2 - # coarse_model=CartesianDiscreteModel(domain,(1,1,1)) - # driver(ranks,coarse_model,order) + + order=1 + test_3d(ranks,order) end end \ No newline at end of file From 6da0337a4ec2976f616ba7f3a641a84e716ca6c7 Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Sun, 1 Oct 2023 17:12:36 +1100 Subject: [PATCH 11/14] Bug-fixing redistribute for TrialFESpaces --- src/FESpaces.jl | 81 ++++++----- test/DarcyNonConformingOctreeModelsTests.jl | 147 +++++++++----------- 2 files changed, 116 insertions(+), 112 deletions(-) diff --git a/src/FESpaces.jl b/src/FESpaces.jl index 6c9dee4..f605120 100644 --- a/src/FESpaces.jl +++ b/src/FESpaces.jl @@ -34,24 +34,7 @@ function _generate_unit_hypercube_model(Dc) modelH end -function _generate_face_subface_ldof_to_cell_ldof(Df,Dc,reffe::Tuple{<:RaviartThomas,Any,Any}) - cell_polytope = (Dc == 2) ? QUAD : HEX - coarse_faces_to_child_ids = (Dc == 2) ? _coarse_faces_to_child_ids_2D : - _coarse_faces_to_child_ids_3D - basis, reffe_args, reffe_kwargs = reffe - cell_reffe = ReferenceFE(cell_polytope, basis, reffe_args...; reffe_kwargs...) - - # TO-DO: How can modelH be created such that it is tailored to cell_polytope? - modelH= _generate_unit_hypercube_model(Dc) - modelh=refine(modelH,2) - RTh=TestFESpace(modelh,reffe) - - num_faces = 2*Dc - num_subfaces = 2^(Dc-1) - first_face = get_offset(get_polytope(cell_reffe),Df) - - face_own_dofs=get_face_own_dofs(cell_reffe) - num_dofs_x_face = length(face_own_dofs[first_face+1]) +function _allocate_face_subface_ldof_to_cell_ldof(num_faces, num_subfaces, num_dofs_x_face) face_subface_ldof_to_cell_ldof = Vector{Vector{Vector{Int}}}(undef,num_faces) for face=1:num_faces face_subface_ldof_to_cell_ldof[face]=Vector{Vector{Int}}(undef,num_subfaces) @@ -59,18 +42,52 @@ function _generate_face_subface_ldof_to_cell_ldof(Df,Dc,reffe::Tuple{<:RaviartTh face_subface_ldof_to_cell_ldof[face][subface]=Vector{Int}(undef,num_dofs_x_face) end end + face_subface_ldof_to_cell_ldof +end - RTh_cell_dof_ids=get_cell_dof_ids(RTh) - for coarse_face_id=1:num_faces - for (subface,child_id) in enumerate(coarse_faces_to_child_ids[coarse_face_id,:]) - @debug "coarse_face_id: $(coarse_face_id), subface: $(subface), child_id: $(child_id)" - cell_dof_ids=RTh_cell_dof_ids[child_id] - for (i,dof) in enumerate(cell_dof_ids[face_own_dofs[first_face+coarse_face_id]]) - @debug "i: $(i), dof: $(dof)" - face_subface_ldof_to_cell_ldof[coarse_face_id][subface][i]=dof - end - end - end +function _generate_face_subface_ldof_to_cell_ldof(Df,Dc,reffe::Tuple{<:RaviartThomas,Any,Any}) + cell_polytope = (Dc == 2) ? QUAD : HEX + coarse_faces_to_child_ids = (Dc == 2) ? _coarse_faces_to_child_ids_2D : + _coarse_faces_to_child_ids_3D + + if (Df==Dc-1) # Facets + basis, reffe_args, reffe_kwargs = reffe + cell_reffe = ReferenceFE(cell_polytope, basis, reffe_args...; reffe_kwargs...) + + # TO-DO: How can modelH be created such that it is tailored to cell_polytope? + modelH= _generate_unit_hypercube_model(Dc) + modelh=refine(modelH,2) + RTh=TestFESpace(modelh,reffe) + + num_faces = 2*Dc + num_subfaces = 2^(Dc-1) + first_face = get_offset(get_polytope(cell_reffe),Df) + + face_own_dofs=get_face_own_dofs(cell_reffe) + num_dofs_x_face = length(face_own_dofs[first_face+1]) + + face_subface_ldof_to_cell_ldof=_allocate_face_subface_ldof_to_cell_ldof(num_faces,num_subfaces,num_dofs_x_face) + + RTh_cell_dof_ids=get_cell_dof_ids(RTh) + for coarse_face_id=1:num_faces + for (subface,child_id) in enumerate(coarse_faces_to_child_ids[coarse_face_id,:]) + @debug "coarse_face_id: $(coarse_face_id), subface: $(subface), child_id: $(child_id)" + cell_dof_ids=RTh_cell_dof_ids[child_id] + for (i,dof) in enumerate(cell_dof_ids[face_own_dofs[first_face+coarse_face_id]]) + @debug "i: $(i), dof: $(dof)" + face_subface_ldof_to_cell_ldof[coarse_face_id][subface][i]=dof + end + end + end + else + @assert Df==1 && Dc==3 # Edges in 3D + num_edges=12 + num_subedges=2 + num_dofs_x_edge=0 + face_subface_ldof_to_cell_ldof=_allocate_face_subface_ldof_to_cell_ldof(num_edges, + num_subedges, + num_dofs_x_edge) + end face_subface_ldof_to_cell_ldof end @@ -773,12 +790,12 @@ function _add_constraints(model::GridapDistributed.DistributedDiscreteModel{Dc}, sDOF_to_dof, sDOF_to_dofs, sDOF_to_coeffs) do V, sDOF_to_dof, sDOF_to_dofs, sDOF_to_coeffs - @debug "fe_space_wo_constraints_cell_dof_ids=$(get_cell_dof_ids(V))" + @debug "[$(MPI.Comm_rank(MPI.COMM_WORLD))]: fe_space_wo_constraints_cell_dof_ids=$(get_cell_dof_ids(V))" Vc = FESpaceWithLinearConstraints(sDOF_to_dof, sDOF_to_dofs, sDOF_to_coeffs, V) end local_cell_dof_ids = map(spaces_w_constraints,sDOF_to_dof) do Vc,sDOF_to_dof result = fe_space_with_linear_constraints_cell_dof_ids(Vc,sDOF_to_dof) - @debug "fe_space_with_linear_constraints_cell_dof_ids=$(result)" + @debug "[$(MPI.Comm_rank(MPI.COMM_WORLD))]: fe_space_with_linear_constraints_cell_dof_ids=$(result)" result end else @@ -790,7 +807,7 @@ function _add_constraints(model::GridapDistributed.DistributedDiscreteModel{Dc}, gids = GridapDistributed.generate_gids(cell_gids,local_cell_dof_ids,nldofs) map(partition(gids)) do indices @debug "[$(part_id(indices))]: l2g_cell_gids=$(local_to_global(indices))" - @debug "[$(part_id(indices))]: l2o_cell_gids=$(local_to_owner(indices))" + @debug "[$(part_id(indices))]: l2o_owner=$(local_to_owner(indices))" end vector_type = GridapDistributed._find_vector_type(spaces_w_constraints,gids) GridapDistributed.DistributedSingleFieldFESpace(spaces_w_constraints,gids,vector_type) diff --git a/test/DarcyNonConformingOctreeModelsTests.jl b/test/DarcyNonConformingOctreeModelsTests.jl index 506a90f..f63ccf8 100644 --- a/test/DarcyNonConformingOctreeModelsTests.jl +++ b/test/DarcyNonConformingOctreeModelsTests.jl @@ -40,48 +40,48 @@ module DarcyNonConformingOctreeModelsTests uh,ph=xh Uh,Ph=Xh - Ωh = Triangulation(fmodel) - degree = 2*(order+1) - dΩh = Measure(Ωh,degree) - - # prolongation via interpolation - uHh=interpolate(uH,Uh) - e = uh - uHh - el2 = sqrt(sum( ∫( e⋅e )*dΩh )) + # Ωh = Triangulation(fmodel) + # degree = 2*(order+1) + # dΩh = Measure(Ωh,degree) + + # # prolongation via interpolation + # uHh=interpolate(uH,Uh) + # e = uh - uHh + # el2 = sqrt(sum( ∫( e⋅e )*dΩh )) tol=1e-6 - println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") - @assert el2 < tol - - # prolongation via L2-projection - # Coarse FEFunction -> Fine FEFunction, by projection - ahp(u,v) = ∫(v⋅u)*dΩh - lhp(v) = ∫(v⋅uH)*dΩh - oph = AffineFEOperator(ahp,lhp,Uh,Uh) - uHh = solve(oph) - e = uh - uHh - el2 = sqrt(sum( ∫( e⋅e )*dΩh )) - println("[L2 PROJECTION] el2 < tol: $(el2) < $(tol)") - @assert el2 < tol - - # restriction via interpolation - uhH=interpolate(uh,UH) - e = uH - uhH - el2 = sqrt(sum( ∫( e⋅e )*dΩh )) - println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") - @assert el2 < tol - - # restriction via L2-projection - ΩH = Triangulation(dmodel) - degree = 2*(order+1) - dΩH = Measure(ΩH,degree) + # println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") + # @assert el2 < tol + + # # prolongation via L2-projection + # # Coarse FEFunction -> Fine FEFunction, by projection + # ahp(u,v) = ∫(v⋅u)*dΩh + # lhp(v) = ∫(v⋅uH)*dΩh + # oph = AffineFEOperator(ahp,lhp,Uh,Uh) + # uHh = solve(oph) + # e = uh - uHh + # el2 = sqrt(sum( ∫( e⋅e )*dΩh )) + # println("[L2 PROJECTION] el2 < tol: $(el2) < $(tol)") + # @assert el2 < tol + + # # restriction via interpolation + # uhH=interpolate(uh,UH) + # e = uH - uhH + # el2 = sqrt(sum( ∫( e⋅e )*dΩh )) + # println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") + # @assert el2 < tol + + # # restriction via L2-projection + # ΩH = Triangulation(dmodel) + # degree = 2*(order+1) + # dΩH = Measure(ΩH,degree) - dΩhH = Measure(ΩH,Ωh,2*order) - aHp(u,v) = ∫(v⋅u)*dΩH - lHp(v) = ∫(v⋅uh)*dΩhH - oph = AffineFEOperator(aHp,lHp,UH,UH) - uhH = solve(oph) - e = uH - uhH - el2 = sqrt(sum( ∫( e⋅e )*dΩH )) + # dΩhH = Measure(ΩH,Ωh,2*order) + # aHp(u,v) = ∫(v⋅u)*dΩH + # lHp(v) = ∫(v⋅uh)*dΩhH + # oph = AffineFEOperator(aHp,lHp,UH,UH) + # uhH = solve(oph) + # e = uH - uhH + # el2 = sqrt(sum( ∫( e⋅e )*dΩH )) fmodel_red, red_glue=GridapDistributed.redistribute(fmodel); xh_red,Xh_red=solve_darcy(fmodel_red,order) @@ -96,8 +96,8 @@ module DarcyNonConformingOctreeModelsTests u_ex, p_ex, f_ex=get_analytical_functions(Dc) - - uhred2 = GridapDistributed.redistribute_fe_function(uhred,Uh_red,fmodel_red,red_glue) + uhred2 = GridapDistributed.redistribute_fe_function(uh,Uh_red,fmodel_red,red_glue) + e = u_ex - uhred2 el2 = sqrt(sum( ∫( e⋅e )*dΩhred )) println("[REDISTRIBUTE SOLUTION] el2 < tol: $(el2) < $(tol)") @@ -164,13 +164,7 @@ module DarcyNonConformingOctreeModelsTests for i=1:5 rdmodel=test_transfer_ops_and_redistribute(ranks,rdmodel,order) end - end - -# function test(ranks,TVDc::Type{Val{Dc}}, perm, order) where Dc -# coarse_model = setup_model(TVDc,perm) -# model = OctreeDistributedDiscreteModel(ranks, coarse_model, 1) -# test_transfer_ops_and_redistribute(ranks,model,order) -# end + end u_ex_2D(x) = VectorValue(2*x[1],x[1]+x[2]) p_ex_2D(x) = x[1]-x[2] @@ -195,6 +189,30 @@ module DarcyNonConformingOctreeModelsTests GridapDistributed.remove_ghost_cells(trian.trian,gids) end + # Required to transfer fine-grid VECTOR-VALUED fields into coarse-grid + function Gridap.Adaptivity.FineToCoarseField(fine_fields::AbstractArray{<:Gridap.Fields.Field}, + rrule::Gridap.Adaptivity.RefinementRule, + child_ids::AbstractArray{<:Integer}) + + grid=Gridap.Adaptivity.get_ref_grid(rrule) + D=num_cell_dims(grid) + x=zero(Point{D,Float64}) + ffx=lazy_map(evaluate,fine_fields,Fill([x],length(fine_fields))) + ffx=ffx[1] + fields = Vector{Gridap.Fields.Field}(undef,Gridap.Adaptivity.num_subcells(rrule)) + fields = fill!(fields,Gridap.Fields.ConstantField(zero(eltype(ffx)))) + for (k,id) in enumerate(child_ids) + fields[id] = fine_fields[k] + end + return Gridap.Adaptivity.FineToCoarseField(fields,rrule) + end + + # Required in order to avoid returning the results of get_cell_dof_ids(space) + # in the case of a FESpaceWithLinearConstraints wrapped around a TrialFESpace + function GridapDistributed._get_cell_dof_ids_inner_space(s::TrialFESpace) + GridapDistributed._get_cell_dof_ids_inner_space(s.space) + end + function solve_darcy(model::GridapDistributed.DistributedDiscreteModel{Dc},order) where {Dc} if (Dc==2) dirichlet_tags=[5,6] @@ -234,37 +252,6 @@ module DarcyNonConformingOctreeModelsTests a((u, p),(v, q)) = ∫(u⋅v)dΩ +∫(q*(∇⋅u))dΩ-∫((∇⋅v)*p)dΩ b(( v, q)) = ∫( v⋅f_ex + q*(∇⋅u_ex))dΩ - ∫((v⋅nb)*p_ex )dΓ - # xh=get_trial_fe_basis(X) - # yh=get_fe_basis(Y) - # vh, qh = yh - # uh, ph = xh - # xh=interpolate_everywhere([u_ex,p_ex],X) - # uh, ph = xh - # eu = u_ex - uh - # ep = p_ex - ph - # writevtk(trian,"error",cellfields=["eu"=>eu,"ep"=>ep]) - - # l2(v) = sqrt(sum(∫(v⋅v)*dΩ)) - # h1(v) = sqrt(sum(∫(v*v + ∇(v)⋅∇(v))*dΩ)) - - # eu_l2 = l2(eu) - # ep_l2 = l2(ep) - # ep_h1 = h1(ep) - - # tol = 1.0e-9 - # @test eu_l2 < tol - # @test ep_l2 < tol - # @test ep_h1 < tol - - # res=assemble_vector(a((u_ex,p_ex),(vh,qh))-b((vh,qh)),Y) - # println("res: $(norm(res))") - - # axv=assemble_vector(a((u_ex,p_ex),(vh,qh)),Y) - # bv=assemble_vector(b((vh,qh)),Y) - # map(axv.vector_partition,bv.vector_partition) do axv_vp, bv_vp - # println(axv_vp-bv_vp) - # end - op = AffineFEOperator(a,b,X,Y) xh = solve(op) xh,X From a3cb839f3e04eb812a405fc30ee8729644ff9d2f Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Sun, 1 Oct 2023 18:15:26 +1100 Subject: [PATCH 12/14] Adding MAnifest temporaririly --- Manifest.toml | 755 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 755 insertions(+) create mode 100644 Manifest.toml diff --git a/Manifest.toml b/Manifest.toml new file mode 100644 index 0000000..44a6f19 --- /dev/null +++ b/Manifest.toml @@ -0,0 +1,755 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.9.1" +manifest_format = "2.0" +project_hash = "f92357079fc681dbaf8a895b0534f2f3dacb3fe1" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + + [deps.AbstractFFTs.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.AbstractTrees]] +git-tree-sha1 = "faa260e4cb5aba097a73fab382dd4b5819d8ec8c" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.4.4" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "3.6.2" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" + +[[deps.ArgCheck]] +git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.3.0" + +[[deps.ArgParse]] +deps = ["Logging", "TextWrap"] +git-tree-sha1 = "3102bce13da501c9104df33549f511cd25264d7d" +uuid = "c7e460c6-2fb9-53a9-8c5b-16f535851c63" +version = "1.1.4" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.ArrayInterface]] +deps = ["Adapt", "LinearAlgebra", "Requires", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.4.11" + + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" + ArrayInterfaceTrackerExt = "Tracker" + + [deps.ArrayInterface.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.ArrayLayouts]] +deps = ["FillArrays", "LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "56c347caf09ad8acb3e261fe75f8e09652b7b05b" +uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" +version = "0.7.10" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.AutoHashEquals]] +deps = ["Pkg"] +git-tree-sha1 = "16d2cc66d4de2b4cac1b0942671e07edbfb922c5" +uuid = "15f4f7f2-30c1-5605-9d31-71845cf9641f" +version = "2.0.0" + +[[deps.BSON]] +git-tree-sha1 = "2208958832d6e1b59e49f53697483a84ca8d664e" +uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" +version = "0.3.7" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.BlockArrays]] +deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra"] +git-tree-sha1 = "21490270d1fcf2efa9ddb2126d6958e9b72a4db0" +uuid = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" +version = "0.16.11" + +[[deps.CEnum]] +git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.4.2" + +[[deps.CircularArrays]] +deps = ["OffsetArrays"] +git-tree-sha1 = "61bc114e595167090b4cbcb7305ddeacd4274f16" +uuid = "7a955b69-7140-5f4e-a0ed-f168c5e2e749" +version = "1.3.2" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "02aa26a4cf76381be7f66e020a3eddeb27b0a092" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.2" + +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + +[[deps.Compat]] +deps = ["UUIDs"] +git-tree-sha1 = "8a62af3e248a8c4bad6b32cbbe663ae02275e32c" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.10.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.0.2+0" + +[[deps.ConstructionBase]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "c53fc348ca4d40d7b371e71fd52251839080cbc9" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.4" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "3dbd312d370723b6bb43ba9d02fc36abade4518d" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.15" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.Distances]] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "b6def76ffad15143924a2199f72a5cd883a2e8a9" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.9" +weakdeps = ["SparseArrays"] + + [deps.Distances.extensions] + DistancesSparseArraysExt = "SparseArrays" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.FFTW]] +deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] +git-tree-sha1 = "b4fbdd20c889804969571cc589900803edda16b7" +uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" +version = "1.7.1" + +[[deps.FFTW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea" +uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" +version = "3.3.10+0" + +[[deps.FastGaussQuadrature]] +deps = ["LinearAlgebra", "SpecialFunctions", "StaticArrays"] +git-tree-sha1 = "58d83dd5a78a36205bdfddb82b1bb67682e64487" +uuid = "442a2c76-b920-505d-bb47-c5924d526838" +version = "0.4.9" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "299dc33549f68299137e51e6d49a13b5b1da9673" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.1" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"] +git-tree-sha1 = "deed294cde3de20ae0b2e0355a6c4e1c6a5ceffc" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "0.12.8" + +[[deps.FiniteDiff]] +deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays"] +git-tree-sha1 = "c6e4a1fbe73b31a3dea94b1da449503b8830c306" +uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" +version = "2.21.1" + + [deps.FiniteDiff.extensions] + FiniteDiffBandedMatricesExt = "BandedMatrices" + FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" + FiniteDiffStaticArraysExt = "StaticArrays" + + [deps.FiniteDiff.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.36" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.Gridap]] +deps = ["AbstractTrees", "BSON", "BlockArrays", "Combinatorics", "DataStructures", "DocStringExtensions", "FastGaussQuadrature", "FileIO", "FillArrays", "ForwardDiff", "JLD2", "JSON", "LineSearches", "LinearAlgebra", "NLsolve", "NearestNeighbors", "PolynomialBases", "QuadGK", "Random", "SparseArrays", "SparseMatricesCSR", "StaticArrays", "Test", "WriteVTK"] +git-tree-sha1 = "df58e0d727deb49a3a7d501324b66fbc73abb433" +repo-rev = "master" +repo-url = "https://github.com/gridap/Gridap.jl" +uuid = "56d4f2e9-7ea1-5844-9cf6-b9c51ca7ce8e" +version = "0.17.19" + +[[deps.GridapDistributed]] +deps = ["FillArrays", "Gridap", "LinearAlgebra", "MPI", "PartitionedArrays", "SparseArrays", "SparseMatricesCSR", "WriteVTK"] +git-tree-sha1 = "60a10345053f4f0478a5ac30f5da04eaa8087447" +uuid = "f9701e48-63b3-45aa-9a63-9bc6c271f355" +version = "0.3.0" + +[[deps.IntelOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ad37c091f7d7daf900963171600d7c1c5c3ede32" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2023.2.0+0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.IterativeSolvers]] +deps = ["LinearAlgebra", "Printf", "Random", "RecipesBase", "SparseArrays"] +git-tree-sha1 = "1169632f425f79429f245113b775a0e3d121457c" +uuid = "42fd0dbc-a981-5370-80f2-aaf504508153" +version = "0.9.2" + +[[deps.JLD2]] +deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "Printf", "Reexport", "Requires", "TranscodingStreams", "UUIDs"] +git-tree-sha1 = "c11d691a0dc8e90acfa4740d293ade57f68bfdbb" +uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" +version = "0.4.35" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.5.0" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.3" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "7.84.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.10.2+0" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.17.0+0" + +[[deps.LightXML]] +deps = ["Libdl", "XML2_jll"] +git-tree-sha1 = "e129d9391168c677cd4800f5c0abb1ed8cb3794f" +uuid = "9c8b4983-aa76-5018-a973-4c85ecc9e179" +version = "0.9.0" + +[[deps.LineSearches]] +deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] +git-tree-sha1 = "7bbea35cec17305fc70a0e5b4641477dc0789d9d" +uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" +version = "7.2.0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "7d6dd4e9212aebaeed356de34ccf262a3cd415aa" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.26" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.MKL_jll]] +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] +git-tree-sha1 = "eb006abbd7041c28e0d16260e50a24f8f9104913" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2023.2.0+0" + +[[deps.MPI]] +deps = ["Distributed", "DocStringExtensions", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "PkgVersion", "PrecompileTools", "Requires", "Serialization", "Sockets"] +git-tree-sha1 = "df53d0e1e0dbebf2315f4cd35e13e52ad43416c2" +uuid = "da04e1cc-30fd-572f-bb4f-1f8673147195" +version = "0.20.15" + + [deps.MPI.extensions] + AMDGPUExt = "AMDGPU" + CUDAExt = "CUDA" + + [deps.MPI.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + +[[deps.MPICH_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "8a5b4d2220377d1ece13f49438d71ad20cf1ba83" +uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" +version = "4.1.2+0" + +[[deps.MPIPreferences]] +deps = ["Libdl", "Preferences"] +git-tree-sha1 = "781916a2ebf2841467cda03b6f1af43e23839d85" +uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" +version = "0.1.9" + +[[deps.MPItrampoline_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "6979eccb6a9edbbb62681e158443e79ecc0d056a" +uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" +version = "5.3.1+0" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "9ee1618cbf5240e6d4e0371d6f24065083f60c48" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.11" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+0" + +[[deps.MicrosoftMPI_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "a8027af3d1743b3bfae34e54872359fdebb31422" +uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" +version = "10.1.3+4" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2022.10.11" + +[[deps.NLSolversBase]] +deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"] +git-tree-sha1 = "a0b464d183da839699f4c79e7606d9d186ec172c" +uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" +version = "7.8.3" + +[[deps.NLsolve]] +deps = ["Distances", "LineSearches", "LinearAlgebra", "NLSolversBase", "Printf", "Reexport"] +git-tree-sha1 = "019f12e9a1a7880459d0173c182e6a99365d7ac1" +uuid = "2774e3e8-f4cf-5e23-947b-6d7e65073b56" +version = "4.5.1" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NearestNeighbors]] +deps = ["Distances", "StaticArrays"] +git-tree-sha1 = "2c3726ceb3388917602169bed973dbc97f1b51a8" +uuid = "b8a86587-4115-5ab1-83bc-aa920d37bbce" +version = "0.4.13" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.OffsetArrays]] +deps = ["Adapt"] +git-tree-sha1 = "2ac17d29c523ce1cd38e27785a7d23024853a4bb" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.12.10" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.21+4" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+0" + +[[deps.OpenMPI_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "f3080f4212a8ba2ceb10a34b938601b862094314" +uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" +version = "4.1.5+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "2e73fe17cac3c62ad1aebe70d44c963c3cfdc3e3" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.2" + +[[deps.P4est_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "Pkg", "TOML", "Zlib_jll"] +git-tree-sha1 = "70c2d9a33b8810198314a5722ee3e9520110b28d" +uuid = "6b5a15aa-cf52-5330-8376-5e5d90283449" +version = "2.8.1+2" + +[[deps.P4est_wrapper]] +deps = ["CEnum", "Libdl", "MPI", "P4est_jll"] +git-tree-sha1 = "c182e067e6bac213c6e75e4139d01ebfb7ea0a58" +uuid = "3743d7c0-8adf-11ea-380b-7d33b0ecc1da" +version = "0.2.0" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "716e24b21538abc91f6205fd1d8363f39b442851" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.7.2" + +[[deps.PartitionedArrays]] +deps = ["CircularArrays", "Distances", "FillArrays", "IterativeSolvers", "LinearAlgebra", "MPI", "Printf", "Random", "SparseArrays", "SparseMatricesCSR"] +git-tree-sha1 = "149d2287770c6a533507d74beaa73d76c0727922" +uuid = "5a9dfac6-5c52-46f7-8278-5e2210713be9" +version = "0.3.4" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.9.0" + +[[deps.PkgVersion]] +deps = ["Pkg"] +git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da" +uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688" +version = "0.3.3" + +[[deps.PolynomialBases]] +deps = ["ArgCheck", "AutoHashEquals", "FFTW", "FastGaussQuadrature", "LinearAlgebra", "Requires", "SimpleUnPack", "SpecialFunctions"] +git-tree-sha1 = "f83125eeab135df4d101492cd570f2f30690b294" +uuid = "c74db56a-226d-5e98-8bb0-a6049094aeea" +version = "0.4.20" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "03b4c25b43cb84cee5c90aa9b5ea0a78fd848d2f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.0" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "00805cd429dcb4870060ff49ef443486c262e38e" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.1" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9ebcd48c498668c7fa0e97a9cae873fbee7bfee1" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.9.1" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA", "Serialization"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.1" + +[[deps.SimpleUnPack]] +git-tree-sha1 = "58e6353e72cde29b90a69527e56df1b5c3d8c437" +uuid = "ce78b400-467f-4804-87d8-8f486da07d0a" +version = "1.1.0" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.SparseMatricesCSR]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "38677ca58e80b5cad2382e5a1848f93b054ad28d" +uuid = "a0a7dd2c-ebf4-11e9-1f05-cf50bc540ca1" +version = "0.6.7" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "e2cfc4012a19088254b3950b85c3c1d8882d864d" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.3.1" + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + + [deps.SpecialFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "Random", "StaticArraysCore"] +git-tree-sha1 = "d5fb407ec3179063214bc6277712928ba78459e2" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.6.4" +weakdeps = ["Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.2" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.9.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "5.10.1+6" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.TextWrap]] +git-tree-sha1 = "9250ef9b01b66667380cf3275b3f7488d0e25faf" +uuid = "b718987f-49a8-5099-9789-dcd902bef87d" +version = "1.0.1" + +[[deps.TranscodingStreams]] +deps = ["Random", "Test"] +git-tree-sha1 = "9a6ae7ed916312b41236fcef7e0af564ef934769" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.9.13" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.WriteVTK]] +deps = ["Base64", "CodecZlib", "FillArrays", "LightXML", "TranscodingStreams"] +git-tree-sha1 = "f50c47d715199601a54afdd5267f24c8174842ae" +uuid = "64499a7a-5c06-52f2-abe2-ccb03c286192" +version = "1.16.0" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "04a51d15436a572301b5abbb9d099713327e9fc4" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.10.4+0" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.8.0+0" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.48.0+0" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+0" From 701d787764015412d6a17a586b2be26d3d9990a8 Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Sun, 1 Oct 2023 20:57:15 +1100 Subject: [PATCH 13/14] Rm Manifest.toml --- Manifest.toml | 755 -------------------------------------------------- 1 file changed, 755 deletions(-) delete mode 100644 Manifest.toml diff --git a/Manifest.toml b/Manifest.toml deleted file mode 100644 index 44a6f19..0000000 --- a/Manifest.toml +++ /dev/null @@ -1,755 +0,0 @@ -# This file is machine-generated - editing it directly is not advised - -julia_version = "1.9.1" -manifest_format = "2.0" -project_hash = "f92357079fc681dbaf8a895b0534f2f3dacb3fe1" - -[[deps.AbstractFFTs]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" -uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" -version = "1.5.0" - - [deps.AbstractFFTs.extensions] - AbstractFFTsChainRulesCoreExt = "ChainRulesCore" - AbstractFFTsTestExt = "Test" - - [deps.AbstractFFTs.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[deps.AbstractTrees]] -git-tree-sha1 = "faa260e4cb5aba097a73fab382dd4b5819d8ec8c" -uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" -version = "0.4.4" - -[[deps.Adapt]] -deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" -uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "3.6.2" -weakdeps = ["StaticArrays"] - - [deps.Adapt.extensions] - AdaptStaticArraysExt = "StaticArrays" - -[[deps.ArgCheck]] -git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" -uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" -version = "2.3.0" - -[[deps.ArgParse]] -deps = ["Logging", "TextWrap"] -git-tree-sha1 = "3102bce13da501c9104df33549f511cd25264d7d" -uuid = "c7e460c6-2fb9-53a9-8c5b-16f535851c63" -version = "1.1.4" - -[[deps.ArgTools]] -uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.1" - -[[deps.ArrayInterface]] -deps = ["Adapt", "LinearAlgebra", "Requires", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31" -uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.4.11" - - [deps.ArrayInterface.extensions] - ArrayInterfaceBandedMatricesExt = "BandedMatrices" - ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" - ArrayInterfaceCUDAExt = "CUDA" - ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" - ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" - ArrayInterfaceTrackerExt = "Tracker" - - [deps.ArrayInterface.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" - GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" - StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" - Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" - -[[deps.ArrayLayouts]] -deps = ["FillArrays", "LinearAlgebra", "SparseArrays"] -git-tree-sha1 = "56c347caf09ad8acb3e261fe75f8e09652b7b05b" -uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" -version = "0.7.10" - -[[deps.Artifacts]] -uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" - -[[deps.AutoHashEquals]] -deps = ["Pkg"] -git-tree-sha1 = "16d2cc66d4de2b4cac1b0942671e07edbfb922c5" -uuid = "15f4f7f2-30c1-5605-9d31-71845cf9641f" -version = "2.0.0" - -[[deps.BSON]] -git-tree-sha1 = "2208958832d6e1b59e49f53697483a84ca8d664e" -uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" -version = "0.3.7" - -[[deps.Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" - -[[deps.BlockArrays]] -deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra"] -git-tree-sha1 = "21490270d1fcf2efa9ddb2126d6958e9b72a4db0" -uuid = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" -version = "0.16.11" - -[[deps.CEnum]] -git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" -uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" -version = "0.4.2" - -[[deps.CircularArrays]] -deps = ["OffsetArrays"] -git-tree-sha1 = "61bc114e595167090b4cbcb7305ddeacd4274f16" -uuid = "7a955b69-7140-5f4e-a0ed-f168c5e2e749" -version = "1.3.2" - -[[deps.CodecZlib]] -deps = ["TranscodingStreams", "Zlib_jll"] -git-tree-sha1 = "02aa26a4cf76381be7f66e020a3eddeb27b0a092" -uuid = "944b1d66-785c-5afd-91f1-9de20f533193" -version = "0.7.2" - -[[deps.Combinatorics]] -git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" -uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" -version = "1.0.2" - -[[deps.CommonSubexpressions]] -deps = ["MacroTools", "Test"] -git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" -uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" -version = "0.3.0" - -[[deps.Compat]] -deps = ["UUIDs"] -git-tree-sha1 = "8a62af3e248a8c4bad6b32cbbe663ae02275e32c" -uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.10.0" -weakdeps = ["Dates", "LinearAlgebra"] - - [deps.Compat.extensions] - CompatLinearAlgebraExt = "LinearAlgebra" - -[[deps.CompilerSupportLibraries_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.0.2+0" - -[[deps.ConstructionBase]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "c53fc348ca4d40d7b371e71fd52251839080cbc9" -uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.5.4" - - [deps.ConstructionBase.extensions] - ConstructionBaseIntervalSetsExt = "IntervalSets" - ConstructionBaseStaticArraysExt = "StaticArrays" - - [deps.ConstructionBase.weakdeps] - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.DataStructures]] -deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "3dbd312d370723b6bb43ba9d02fc36abade4518d" -uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.15" - -[[deps.Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" - -[[deps.DiffResults]] -deps = ["StaticArraysCore"] -git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" -uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" -version = "1.1.0" - -[[deps.DiffRules]] -deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] -git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" -uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" -version = "1.15.1" - -[[deps.Distances]] -deps = ["LinearAlgebra", "Statistics", "StatsAPI"] -git-tree-sha1 = "b6def76ffad15143924a2199f72a5cd883a2e8a9" -uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" -version = "0.10.9" -weakdeps = ["SparseArrays"] - - [deps.Distances.extensions] - DistancesSparseArraysExt = "SparseArrays" - -[[deps.Distributed]] -deps = ["Random", "Serialization", "Sockets"] -uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" - -[[deps.DocStringExtensions]] -deps = ["LibGit2"] -git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" -uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.9.3" - -[[deps.Downloads]] -deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] -uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.0" - -[[deps.FFTW]] -deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] -git-tree-sha1 = "b4fbdd20c889804969571cc589900803edda16b7" -uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" -version = "1.7.1" - -[[deps.FFTW_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea" -uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" -version = "3.3.10+0" - -[[deps.FastGaussQuadrature]] -deps = ["LinearAlgebra", "SpecialFunctions", "StaticArrays"] -git-tree-sha1 = "58d83dd5a78a36205bdfddb82b1bb67682e64487" -uuid = "442a2c76-b920-505d-bb47-c5924d526838" -version = "0.4.9" - -[[deps.FileIO]] -deps = ["Pkg", "Requires", "UUIDs"] -git-tree-sha1 = "299dc33549f68299137e51e6d49a13b5b1da9673" -uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -version = "1.16.1" - -[[deps.FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" - -[[deps.FillArrays]] -deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"] -git-tree-sha1 = "deed294cde3de20ae0b2e0355a6c4e1c6a5ceffc" -uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "0.12.8" - -[[deps.FiniteDiff]] -deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays"] -git-tree-sha1 = "c6e4a1fbe73b31a3dea94b1da449503b8830c306" -uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" -version = "2.21.1" - - [deps.FiniteDiff.extensions] - FiniteDiffBandedMatricesExt = "BandedMatrices" - FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" - FiniteDiffStaticArraysExt = "StaticArrays" - - [deps.FiniteDiff.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.ForwardDiff]] -deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" -uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "0.10.36" -weakdeps = ["StaticArrays"] - - [deps.ForwardDiff.extensions] - ForwardDiffStaticArraysExt = "StaticArrays" - -[[deps.Future]] -deps = ["Random"] -uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" - -[[deps.Gridap]] -deps = ["AbstractTrees", "BSON", "BlockArrays", "Combinatorics", "DataStructures", "DocStringExtensions", "FastGaussQuadrature", "FileIO", "FillArrays", "ForwardDiff", "JLD2", "JSON", "LineSearches", "LinearAlgebra", "NLsolve", "NearestNeighbors", "PolynomialBases", "QuadGK", "Random", "SparseArrays", "SparseMatricesCSR", "StaticArrays", "Test", "WriteVTK"] -git-tree-sha1 = "df58e0d727deb49a3a7d501324b66fbc73abb433" -repo-rev = "master" -repo-url = "https://github.com/gridap/Gridap.jl" -uuid = "56d4f2e9-7ea1-5844-9cf6-b9c51ca7ce8e" -version = "0.17.19" - -[[deps.GridapDistributed]] -deps = ["FillArrays", "Gridap", "LinearAlgebra", "MPI", "PartitionedArrays", "SparseArrays", "SparseMatricesCSR", "WriteVTK"] -git-tree-sha1 = "60a10345053f4f0478a5ac30f5da04eaa8087447" -uuid = "f9701e48-63b3-45aa-9a63-9bc6c271f355" -version = "0.3.0" - -[[deps.IntelOpenMP_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "ad37c091f7d7daf900963171600d7c1c5c3ede32" -uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" -version = "2023.2.0+0" - -[[deps.InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" - -[[deps.IrrationalConstants]] -git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" -uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.2.2" - -[[deps.IterativeSolvers]] -deps = ["LinearAlgebra", "Printf", "Random", "RecipesBase", "SparseArrays"] -git-tree-sha1 = "1169632f425f79429f245113b775a0e3d121457c" -uuid = "42fd0dbc-a981-5370-80f2-aaf504508153" -version = "0.9.2" - -[[deps.JLD2]] -deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "Printf", "Reexport", "Requires", "TranscodingStreams", "UUIDs"] -git-tree-sha1 = "c11d691a0dc8e90acfa4740d293ade57f68bfdbb" -uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" -version = "0.4.35" - -[[deps.JLLWrappers]] -deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" -uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.5.0" - -[[deps.JSON]] -deps = ["Dates", "Mmap", "Parsers", "Unicode"] -git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" -uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "0.21.4" - -[[deps.LazyArtifacts]] -deps = ["Artifacts", "Pkg"] -uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" - -[[deps.LibCURL]] -deps = ["LibCURL_jll", "MozillaCACerts_jll"] -uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" -version = "0.6.3" - -[[deps.LibCURL_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] -uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "7.84.0+0" - -[[deps.LibGit2]] -deps = ["Base64", "NetworkOptions", "Printf", "SHA"] -uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" - -[[deps.LibSSH2_jll]] -deps = ["Artifacts", "Libdl", "MbedTLS_jll"] -uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.10.2+0" - -[[deps.Libdl]] -uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" - -[[deps.Libiconv_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" -uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" -version = "1.17.0+0" - -[[deps.LightXML]] -deps = ["Libdl", "XML2_jll"] -git-tree-sha1 = "e129d9391168c677cd4800f5c0abb1ed8cb3794f" -uuid = "9c8b4983-aa76-5018-a973-4c85ecc9e179" -version = "0.9.0" - -[[deps.LineSearches]] -deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] -git-tree-sha1 = "7bbea35cec17305fc70a0e5b4641477dc0789d9d" -uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" -version = "7.2.0" - -[[deps.LinearAlgebra]] -deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - -[[deps.LogExpFunctions]] -deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "7d6dd4e9212aebaeed356de34ccf262a3cd415aa" -uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.26" - - [deps.LogExpFunctions.extensions] - LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" - LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" - LogExpFunctionsInverseFunctionsExt = "InverseFunctions" - - [deps.LogExpFunctions.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" - InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" - -[[deps.Logging]] -uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" - -[[deps.MKL_jll]] -deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] -git-tree-sha1 = "eb006abbd7041c28e0d16260e50a24f8f9104913" -uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2023.2.0+0" - -[[deps.MPI]] -deps = ["Distributed", "DocStringExtensions", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "PkgVersion", "PrecompileTools", "Requires", "Serialization", "Sockets"] -git-tree-sha1 = "df53d0e1e0dbebf2315f4cd35e13e52ad43416c2" -uuid = "da04e1cc-30fd-572f-bb4f-1f8673147195" -version = "0.20.15" - - [deps.MPI.extensions] - AMDGPUExt = "AMDGPU" - CUDAExt = "CUDA" - - [deps.MPI.weakdeps] - AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" - -[[deps.MPICH_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "8a5b4d2220377d1ece13f49438d71ad20cf1ba83" -uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.1.2+0" - -[[deps.MPIPreferences]] -deps = ["Libdl", "Preferences"] -git-tree-sha1 = "781916a2ebf2841467cda03b6f1af43e23839d85" -uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" -version = "0.1.9" - -[[deps.MPItrampoline_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "6979eccb6a9edbbb62681e158443e79ecc0d056a" -uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" -version = "5.3.1+0" - -[[deps.MacroTools]] -deps = ["Markdown", "Random"] -git-tree-sha1 = "9ee1618cbf5240e6d4e0371d6f24065083f60c48" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.11" - -[[deps.Markdown]] -deps = ["Base64"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" - -[[deps.MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.2+0" - -[[deps.MicrosoftMPI_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "a8027af3d1743b3bfae34e54872359fdebb31422" -uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" -version = "10.1.3+4" - -[[deps.Mmap]] -uuid = "a63ad114-7e13-5084-954f-fe012c677804" - -[[deps.MozillaCACerts_jll]] -uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.10.11" - -[[deps.NLSolversBase]] -deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"] -git-tree-sha1 = "a0b464d183da839699f4c79e7606d9d186ec172c" -uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" -version = "7.8.3" - -[[deps.NLsolve]] -deps = ["Distances", "LineSearches", "LinearAlgebra", "NLSolversBase", "Printf", "Reexport"] -git-tree-sha1 = "019f12e9a1a7880459d0173c182e6a99365d7ac1" -uuid = "2774e3e8-f4cf-5e23-947b-6d7e65073b56" -version = "4.5.1" - -[[deps.NaNMath]] -deps = ["OpenLibm_jll"] -git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" -uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "1.0.2" - -[[deps.NearestNeighbors]] -deps = ["Distances", "StaticArrays"] -git-tree-sha1 = "2c3726ceb3388917602169bed973dbc97f1b51a8" -uuid = "b8a86587-4115-5ab1-83bc-aa920d37bbce" -version = "0.4.13" - -[[deps.NetworkOptions]] -uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" - -[[deps.OffsetArrays]] -deps = ["Adapt"] -git-tree-sha1 = "2ac17d29c523ce1cd38e27785a7d23024853a4bb" -uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" -version = "1.12.10" - -[[deps.OpenBLAS_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.21+4" - -[[deps.OpenLibm_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.1+0" - -[[deps.OpenMPI_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "f3080f4212a8ba2ceb10a34b938601b862094314" -uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "4.1.5+0" - -[[deps.OpenSpecFun_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" -uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" -version = "0.5.5+0" - -[[deps.OrderedCollections]] -git-tree-sha1 = "2e73fe17cac3c62ad1aebe70d44c963c3cfdc3e3" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.6.2" - -[[deps.P4est_jll]] -deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "Pkg", "TOML", "Zlib_jll"] -git-tree-sha1 = "70c2d9a33b8810198314a5722ee3e9520110b28d" -uuid = "6b5a15aa-cf52-5330-8376-5e5d90283449" -version = "2.8.1+2" - -[[deps.P4est_wrapper]] -deps = ["CEnum", "Libdl", "MPI", "P4est_jll"] -git-tree-sha1 = "c182e067e6bac213c6e75e4139d01ebfb7ea0a58" -uuid = "3743d7c0-8adf-11ea-380b-7d33b0ecc1da" -version = "0.2.0" - -[[deps.Parameters]] -deps = ["OrderedCollections", "UnPack"] -git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" -uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" -version = "0.12.3" - -[[deps.Parsers]] -deps = ["Dates", "PrecompileTools", "UUIDs"] -git-tree-sha1 = "716e24b21538abc91f6205fd1d8363f39b442851" -uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.7.2" - -[[deps.PartitionedArrays]] -deps = ["CircularArrays", "Distances", "FillArrays", "IterativeSolvers", "LinearAlgebra", "MPI", "Printf", "Random", "SparseArrays", "SparseMatricesCSR"] -git-tree-sha1 = "149d2287770c6a533507d74beaa73d76c0727922" -uuid = "5a9dfac6-5c52-46f7-8278-5e2210713be9" -version = "0.3.4" - -[[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] -uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.9.0" - -[[deps.PkgVersion]] -deps = ["Pkg"] -git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da" -uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688" -version = "0.3.3" - -[[deps.PolynomialBases]] -deps = ["ArgCheck", "AutoHashEquals", "FFTW", "FastGaussQuadrature", "LinearAlgebra", "Requires", "SimpleUnPack", "SpecialFunctions"] -git-tree-sha1 = "f83125eeab135df4d101492cd570f2f30690b294" -uuid = "c74db56a-226d-5e98-8bb0-a6049094aeea" -version = "0.4.20" - -[[deps.PrecompileTools]] -deps = ["Preferences"] -git-tree-sha1 = "03b4c25b43cb84cee5c90aa9b5ea0a78fd848d2f" -uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.2.0" - -[[deps.Preferences]] -deps = ["TOML"] -git-tree-sha1 = "00805cd429dcb4870060ff49ef443486c262e38e" -uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.4.1" - -[[deps.Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" - -[[deps.QuadGK]] -deps = ["DataStructures", "LinearAlgebra"] -git-tree-sha1 = "9ebcd48c498668c7fa0e97a9cae873fbee7bfee1" -uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" -version = "2.9.1" - -[[deps.REPL]] -deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] -uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" - -[[deps.Random]] -deps = ["SHA", "Serialization"] -uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" - -[[deps.RecipesBase]] -deps = ["PrecompileTools"] -git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" -uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" -version = "1.3.4" - -[[deps.Reexport]] -git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" -uuid = "189a3867-3050-52da-a836-e630ba90ab69" -version = "1.2.2" - -[[deps.Requires]] -deps = ["UUIDs"] -git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" -uuid = "ae029012-a4dd-5104-9daa-d747884805df" -version = "1.3.0" - -[[deps.SHA]] -uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" -version = "0.7.0" - -[[deps.Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" - -[[deps.Setfield]] -deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] -git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" -uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" -version = "1.1.1" - -[[deps.SimpleUnPack]] -git-tree-sha1 = "58e6353e72cde29b90a69527e56df1b5c3d8c437" -uuid = "ce78b400-467f-4804-87d8-8f486da07d0a" -version = "1.1.0" - -[[deps.Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" - -[[deps.SparseArrays]] -deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] -uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - -[[deps.SparseMatricesCSR]] -deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "38677ca58e80b5cad2382e5a1848f93b054ad28d" -uuid = "a0a7dd2c-ebf4-11e9-1f05-cf50bc540ca1" -version = "0.6.7" - -[[deps.SpecialFunctions]] -deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "e2cfc4012a19088254b3950b85c3c1d8882d864d" -uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.3.1" - - [deps.SpecialFunctions.extensions] - SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" - - [deps.SpecialFunctions.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - -[[deps.StaticArrays]] -deps = ["LinearAlgebra", "Random", "StaticArraysCore"] -git-tree-sha1 = "d5fb407ec3179063214bc6277712928ba78459e2" -uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.6.4" -weakdeps = ["Statistics"] - - [deps.StaticArrays.extensions] - StaticArraysStatisticsExt = "Statistics" - -[[deps.StaticArraysCore]] -git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" -uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.4.2" - -[[deps.Statistics]] -deps = ["LinearAlgebra", "SparseArrays"] -uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -version = "1.9.0" - -[[deps.StatsAPI]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" -uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" -version = "1.7.0" - -[[deps.SuiteSparse]] -deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] -uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" - -[[deps.SuiteSparse_jll]] -deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] -uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "5.10.1+6" - -[[deps.TOML]] -deps = ["Dates"] -uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.3" - -[[deps.Tar]] -deps = ["ArgTools", "SHA"] -uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.0" - -[[deps.Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[deps.TextWrap]] -git-tree-sha1 = "9250ef9b01b66667380cf3275b3f7488d0e25faf" -uuid = "b718987f-49a8-5099-9789-dcd902bef87d" -version = "1.0.1" - -[[deps.TranscodingStreams]] -deps = ["Random", "Test"] -git-tree-sha1 = "9a6ae7ed916312b41236fcef7e0af564ef934769" -uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.9.13" - -[[deps.UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" - -[[deps.UnPack]] -git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" -uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" -version = "1.0.2" - -[[deps.Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" - -[[deps.WriteVTK]] -deps = ["Base64", "CodecZlib", "FillArrays", "LightXML", "TranscodingStreams"] -git-tree-sha1 = "f50c47d715199601a54afdd5267f24c8174842ae" -uuid = "64499a7a-5c06-52f2-abe2-ccb03c286192" -version = "1.16.0" - -[[deps.XML2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "04a51d15436a572301b5abbb9d099713327e9fc4" -uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.10.4+0" - -[[deps.Zlib_jll]] -deps = ["Libdl"] -uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.13+0" - -[[deps.libblastrampoline_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.8.0+0" - -[[deps.nghttp2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.48.0+0" - -[[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+0" From dd270100695839def7d0f50dfe213889cec02b5d Mon Sep 17 00:00:00 2001 From: "Alberto F. Martin" Date: Sun, 1 Oct 2023 23:42:45 +1100 Subject: [PATCH 14/14] * Using the latest versions of Gridap/GridapDistributed * Temporarily moved Adaptivity module fix to GridapFixes.jl * Activated the full suite of tests for DarcyNonConforming --- Project.toml | 6 +- src/GridapFixes.jl | 18 ++++ test/DarcyNonConformingOctreeModelsTests.jl | 109 +++++++------------- 3 files changed, 61 insertions(+), 72 deletions(-) diff --git a/Project.toml b/Project.toml index 416292f..b59f2ff 100644 --- a/Project.toml +++ b/Project.toml @@ -16,9 +16,9 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [compat] ArgParse = "1" -FillArrays = "0.8.4, 0.9, 0.10, 0.11, 0.12" -Gridap = "0.17.18" -GridapDistributed = "0.3" +FillArrays = "0.8.4, 0.9, 0.10, 0.11, 0.12, 1" +Gridap = "0.17.20" +GridapDistributed = "0.3.1" MPI = "0.20" P4est_wrapper = "0.2.0" PartitionedArrays = "0.3.3" diff --git a/src/GridapFixes.jl b/src/GridapFixes.jl index 10d49b8..41dc1fb 100644 --- a/src/GridapFixes.jl +++ b/src/GridapFixes.jl @@ -4,4 +4,22 @@ function Base.map(::typeof(Gridap.Arrays.testitem), a1=Vector{eltype(eltype(a[1]))}(undef,size(a2,1)) a1.=zero(Gridap.Arrays.testitem(a1)) (a1,a2) +end + +# Required to transfer fine-grid VECTOR-VALUED fields into coarse-grid +function Gridap.Adaptivity.FineToCoarseField(fine_fields::AbstractArray{<:Gridap.Fields.Field}, + rrule::Gridap.Adaptivity.RefinementRule, + child_ids::AbstractArray{<:Integer}) + + grid=Gridap.Adaptivity.get_ref_grid(rrule) + D=num_cell_dims(grid) + x=zero(Point{D,Float64}) + ffx=lazy_map(evaluate,fine_fields,Fill([x],length(fine_fields))) + ffx=ffx[1] + fields = Vector{Gridap.Fields.Field}(undef,Gridap.Adaptivity.num_subcells(rrule)) + fields = fill!(fields,Gridap.Fields.ConstantField(zero(eltype(ffx)))) + for (k,id) in enumerate(child_ids) + fields[id] = fine_fields[k] + end + return Gridap.Adaptivity.FineToCoarseField(fields,rrule) end \ No newline at end of file diff --git a/test/DarcyNonConformingOctreeModelsTests.jl b/test/DarcyNonConformingOctreeModelsTests.jl index f63ccf8..bfe0c94 100644 --- a/test/DarcyNonConformingOctreeModelsTests.jl +++ b/test/DarcyNonConformingOctreeModelsTests.jl @@ -40,48 +40,48 @@ module DarcyNonConformingOctreeModelsTests uh,ph=xh Uh,Ph=Xh - # Ωh = Triangulation(fmodel) - # degree = 2*(order+1) - # dΩh = Measure(Ωh,degree) - - # # prolongation via interpolation - # uHh=interpolate(uH,Uh) - # e = uh - uHh - # el2 = sqrt(sum( ∫( e⋅e )*dΩh )) + Ωh = Triangulation(fmodel) + degree = 2*(order+1) + dΩh = Measure(Ωh,degree) + + # prolongation via interpolation + uHh=interpolate(uH,Uh) + e = uh - uHh + el2 = sqrt(sum( ∫( e⋅e )*dΩh )) tol=1e-6 - # println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") - # @assert el2 < tol - - # # prolongation via L2-projection - # # Coarse FEFunction -> Fine FEFunction, by projection - # ahp(u,v) = ∫(v⋅u)*dΩh - # lhp(v) = ∫(v⋅uH)*dΩh - # oph = AffineFEOperator(ahp,lhp,Uh,Uh) - # uHh = solve(oph) - # e = uh - uHh - # el2 = sqrt(sum( ∫( e⋅e )*dΩh )) - # println("[L2 PROJECTION] el2 < tol: $(el2) < $(tol)") - # @assert el2 < tol - - # # restriction via interpolation - # uhH=interpolate(uh,UH) - # e = uH - uhH - # el2 = sqrt(sum( ∫( e⋅e )*dΩh )) - # println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") - # @assert el2 < tol - - # # restriction via L2-projection - # ΩH = Triangulation(dmodel) - # degree = 2*(order+1) - # dΩH = Measure(ΩH,degree) + println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") + @assert el2 < tol + + # prolongation via L2-projection + # Coarse FEFunction -> Fine FEFunction, by projection + ahp(u,v) = ∫(v⋅u)*dΩh + lhp(v) = ∫(v⋅uH)*dΩh + oph = AffineFEOperator(ahp,lhp,Uh,Uh) + uHh = solve(oph) + e = uh - uHh + el2 = sqrt(sum( ∫( e⋅e )*dΩh )) + println("[L2 PROJECTION] el2 < tol: $(el2) < $(tol)") + @assert el2 < tol + + # restriction via interpolation + uhH=interpolate(uh,UH) + e = uH - uhH + el2 = sqrt(sum( ∫( e⋅e )*dΩh )) + println("[INTERPOLATION] el2 < tol: $(el2) < $(tol)") + @assert el2 < tol + + # restriction via L2-projection + ΩH = Triangulation(dmodel) + degree = 2*(order+1) + dΩH = Measure(ΩH,degree) - # dΩhH = Measure(ΩH,Ωh,2*order) - # aHp(u,v) = ∫(v⋅u)*dΩH - # lHp(v) = ∫(v⋅uh)*dΩhH - # oph = AffineFEOperator(aHp,lHp,UH,UH) - # uhH = solve(oph) - # e = uH - uhH - # el2 = sqrt(sum( ∫( e⋅e )*dΩH )) + dΩhH = Measure(ΩH,Ωh,2*order) + aHp(u,v) = ∫(v⋅u)*dΩH + lHp(v) = ∫(v⋅uh)*dΩhH + oph = AffineFEOperator(aHp,lHp,UH,UH) + uhH = solve(oph) + e = uH - uhH + el2 = sqrt(sum( ∫( e⋅e )*dΩH )) fmodel_red, red_glue=GridapDistributed.redistribute(fmodel); xh_red,Xh_red=solve_darcy(fmodel_red,order) @@ -184,35 +184,6 @@ module DarcyNonConformingOctreeModelsTests include("CoarseDiscreteModelsTools.jl") - function GridapDistributed.remove_ghost_cells( - trian::Gridap.Adaptivity.AdaptedTriangulation{Dc,Dp,<:Union{SkeletonTriangulation,BoundaryTriangulation}},gids) where {Dc,Dp} - GridapDistributed.remove_ghost_cells(trian.trian,gids) - end - - # Required to transfer fine-grid VECTOR-VALUED fields into coarse-grid - function Gridap.Adaptivity.FineToCoarseField(fine_fields::AbstractArray{<:Gridap.Fields.Field}, - rrule::Gridap.Adaptivity.RefinementRule, - child_ids::AbstractArray{<:Integer}) - - grid=Gridap.Adaptivity.get_ref_grid(rrule) - D=num_cell_dims(grid) - x=zero(Point{D,Float64}) - ffx=lazy_map(evaluate,fine_fields,Fill([x],length(fine_fields))) - ffx=ffx[1] - fields = Vector{Gridap.Fields.Field}(undef,Gridap.Adaptivity.num_subcells(rrule)) - fields = fill!(fields,Gridap.Fields.ConstantField(zero(eltype(ffx)))) - for (k,id) in enumerate(child_ids) - fields[id] = fine_fields[k] - end - return Gridap.Adaptivity.FineToCoarseField(fields,rrule) - end - - # Required in order to avoid returning the results of get_cell_dof_ids(space) - # in the case of a FESpaceWithLinearConstraints wrapped around a TrialFESpace - function GridapDistributed._get_cell_dof_ids_inner_space(s::TrialFESpace) - GridapDistributed._get_cell_dof_ids_inner_space(s.space) - end - function solve_darcy(model::GridapDistributed.DistributedDiscreteModel{Dc},order) where {Dc} if (Dc==2) dirichlet_tags=[5,6]