Skip to content

Commit 19056c6

Browse files
Merge pull request #190 from gridap/adding_isconsistent_to_interpolate_functions
Adding the isconsistent optional argument to interpolate functions
2 parents d0b4d9a + 5fed5d0 commit 19056c6

2 files changed

Lines changed: 33 additions & 24 deletions

File tree

NEWS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
- New overloads for the `TrialFESpace` constructor where the data to be imposed is passed as a `DistributedCellField`. Since PR[#185](https://github.com/gridap/GridapDistributed.jl/pull/185).
1313
- Added missing `FESpace` constructors for distributed triangulations specialized for the RT FEs case. Since PR[#188](https://github.com/gridap/GridapDistributed.jl/pull/188)
14+
- Added optional argument `isconsistent` to interpolate functions. Since PR[#190](https://github.com/gridap/GridapDistributed.jl/pull/190).
1415

1516
## [0.4.10] - 2025-09-29
1617

src/FESpaces.jl

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -456,77 +456,83 @@ function generate_gids(
456456
generate_gids(cell_gids,cell_to_ldofs,nldofs)
457457
end
458458

459-
function FESpaces.interpolate(u,f::DistributedSingleFieldFESpace)
459+
function FESpaces.interpolate(u,f::DistributedSingleFieldFESpace, isconsistent=false)
460460
free_values = zero_free_values(f)
461-
interpolate!(u,free_values,f)
461+
interpolate!(u,free_values,f,isconsistent)
462462
end
463463

464464
function FESpaces.interpolate!(
465-
u,free_values::AbstractVector,f::DistributedSingleFieldFESpace)
465+
u,
466+
free_values::AbstractVector,
467+
f::DistributedSingleFieldFESpace,
468+
isconsistent=false)
466469
map(f.spaces,local_views(free_values)) do V,vec
467470
interpolate!(u,vec,V)
468471
end
469-
FEFunction(f,free_values)
472+
FEFunction(f,free_values,isconsistent)
470473
end
471474

472475
function FESpaces.interpolate!(
473-
u::DistributedCellField,free_values::AbstractVector,f::DistributedSingleFieldFESpace)
474-
map(local_views(u),f.spaces,local_views(free_values)) do ui,V,vec
475-
interpolate!(ui,vec,V)
476+
u::DistributedCellField,
477+
free_values::AbstractVector,
478+
f::DistributedSingleFieldFESpace,
479+
isconsistent=false)
480+
map(local_views(u),f.spaces,local_views(free_values)) do u, V,vec
481+
interpolate!(u,vec,V)
476482
end
477-
FEFunction(f,free_values)
483+
FEFunction(f,free_values,isconsistent)
478484
end
479485

480-
function FESpaces.interpolate_dirichlet(u, f::DistributedSingleFieldFESpace)
486+
function FESpaces.interpolate_dirichlet(u, f::DistributedSingleFieldFESpace, isconsistent=false)
481487
free_values = zero_free_values(f)
482488
dirichlet_values = get_dirichlet_dof_values(f)
483-
interpolate_dirichlet!(u,free_values,dirichlet_values,f)
489+
interpolate_dirichlet!(u,free_values,dirichlet_values,f,isconsistent)
484490
end
485491

486492
function FESpaces.interpolate_dirichlet!(
487493
u, free_values::AbstractVector,
488494
dirichlet_values::AbstractArray{<:AbstractVector},
489-
f::DistributedSingleFieldFESpace)
495+
f::DistributedSingleFieldFESpace, isconsistent=false)
490496
map(f.spaces,local_views(free_values),dirichlet_values) do V,fvec,dvec
491497
interpolate_dirichlet!(u,fvec,dvec,V)
492498
end
493-
FEFunction(f,free_values,dirichlet_values)
499+
FEFunction(f,free_values,dirichlet_values,isconsistent)
494500
end
495501

496502
function FESpaces.interpolate_dirichlet!(
497503
u::DistributedCellField, free_values::AbstractVector,
498504
dirichlet_values::AbstractArray{<:AbstractVector},
499-
f::DistributedSingleFieldFESpace)
505+
f::DistributedSingleFieldFESpace, isconsistent=false)
500506
map(local_views(u), f.spaces,local_views(free_values),dirichlet_values) do u,V,fvec,dvec
501507
interpolate_dirichlet!(u,fvec,dvec,V)
502508
end
503-
FEFunction(f,free_values,dirichlet_values)
509+
FEFunction(f,free_values,dirichlet_values,isconsistent)
504510
end
505511

506-
function FESpaces.interpolate_everywhere(u, f::DistributedSingleFieldFESpace)
512+
function FESpaces.interpolate_everywhere(u, f::DistributedSingleFieldFESpace, isconsistent=false)
507513
free_values = zero_free_values(f)
508514
dirichlet_values = get_dirichlet_dof_values(f)
509-
interpolate_everywhere!(u,free_values,dirichlet_values,f)
515+
interpolate_everywhere!(u,free_values,dirichlet_values,f,isconsistent)
510516
end
511517

512518
function FESpaces.interpolate_everywhere!(
513519
u, free_values::AbstractVector,
514520
dirichlet_values::AbstractArray{<:AbstractVector},
515-
f::DistributedSingleFieldFESpace)
521+
f::DistributedSingleFieldFESpace, isconsistent=false)
516522
map(f.spaces,local_views(free_values),dirichlet_values) do V,fvec,dvec
517523
interpolate_everywhere!(u,fvec,dvec,V)
518524
end
519-
FEFunction(f,free_values,dirichlet_values)
525+
FEFunction(f,free_values,dirichlet_values,isconsistent)
520526
end
521527

522528
function FESpaces.interpolate_everywhere!(
523529
u::DistributedCellField, free_values::AbstractVector,
524530
dirichlet_values::AbstractArray{<:AbstractVector},
525-
f::DistributedSingleFieldFESpace)
531+
f::DistributedSingleFieldFESpace, isconsistent=false)
526532
map(local_views(u),f.spaces,local_views(free_values),dirichlet_values) do ui,V,fvec,dvec
527533
interpolate_everywhere!(ui,fvec,dvec,V)
528534
end
529-
FEFunction(f,free_values,dirichlet_values)
535+
FEFunction(f,free_values,dirichlet_values,isconsistent)
530536
end
531537

532538
# Factories
@@ -877,13 +883,15 @@ end
877883
# which does not properly interpolate the function provided.
878884
# With this change, we are interpolating in the unconstrained space and then
879885
# substracting the mean.
880-
function FESpaces.interpolate!(u,free_values::AbstractVector,f::DistributedZeroMeanFESpace)
886+
function FESpaces.interpolate!(u,free_values::AbstractVector,
887+
f::DistributedZeroMeanFESpace, isconsistent=false)
881888
dirichlet_values = get_dirichlet_dof_values(f)
882-
interpolate_everywhere!(u,free_values,dirichlet_values,f)
889+
interpolate_everywhere!(u,free_values,dirichlet_values,f,isconsistent)
883890
end
884-
function FESpaces.interpolate!(u::DistributedCellField,free_values::AbstractVector,f::DistributedZeroMeanFESpace)
891+
function FESpaces.interpolate!(u::DistributedCellField,free_values::AbstractVector,
892+
f::DistributedZeroMeanFESpace, isconsistent=false)
885893
dirichlet_values = get_dirichlet_dof_values(f)
886-
interpolate_everywhere!(u,free_values,dirichlet_values,f)
894+
interpolate_everywhere!(u,free_values,dirichlet_values,f,isconsistent)
887895
end
888896

889897
function _compute_new_distributed_fixedval(

0 commit comments

Comments
 (0)