@@ -414,6 +414,21 @@ function FESpaces.TrialFESpace!(f::DistributedSingleFieldFESpace,fun)
414414 DistributedSingleFieldFESpace (spaces,f. gids,f. trian,f. vector_type,f. metadata)
415415end
416416
417+ function FESpaces. TrialFESpace (f:: DistributedSingleFieldFESpace ,cf:: DistributedCellField )
418+ spaces = map (local_views (f),local_views (cf)) do s, field
419+ TrialFESpace (s,field)
420+ end
421+ DistributedSingleFieldFESpace (spaces,f. gids,f. trian,f. vector_type,f. metadata)
422+ end
423+
424+ function FESpaces. TrialFESpace (cf:: DistributedCellField ,f:: DistributedSingleFieldFESpace )
425+ spaces = map (local_views (f),local_views (cf)) do s, field
426+ TrialFESpace (s,field)
427+ end
428+ DistributedSingleFieldFESpace (spaces,f. gids,f. trian,f. vector_type,f. metadata)
429+ end
430+
431+
417432function FESpaces. HomogeneousTrialFESpace (f:: DistributedSingleFieldFESpace )
418433 spaces = map (f. spaces) do s
419434 HomogeneousTrialFESpace (s)
@@ -441,67 +456,83 @@ function generate_gids(
441456 generate_gids (cell_gids,cell_to_ldofs,nldofs)
442457end
443458
444- function FESpaces. interpolate (u,f:: DistributedSingleFieldFESpace )
459+ function FESpaces. interpolate (u,f:: DistributedSingleFieldFESpace , isconsistent = false )
445460 free_values = zero_free_values (f)
446- interpolate! (u,free_values,f)
461+ interpolate! (u,free_values,f,isconsistent )
447462end
448463
449464function FESpaces. interpolate! (
450- u,free_values:: AbstractVector ,f:: DistributedSingleFieldFESpace )
465+ u,
466+ free_values:: AbstractVector ,
467+ f:: DistributedSingleFieldFESpace ,
468+ isconsistent= false )
451469 map (f. spaces,local_views (free_values)) do V,vec
452470 interpolate! (u,vec,V)
453471 end
454- FEFunction (f,free_values)
472+ FEFunction (f,free_values,isconsistent )
455473end
456474
457475function FESpaces. interpolate! (
458- u:: DistributedCellField ,free_values:: AbstractVector ,f:: DistributedSingleFieldFESpace )
459- map (local_views (u),f. spaces,local_views (free_values)) do ui,V,vec
460- 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)
461482 end
462- FEFunction (f,free_values)
483+ FEFunction (f,free_values,isconsistent )
463484end
464485
465- function FESpaces. interpolate_dirichlet (u, f:: DistributedSingleFieldFESpace )
486+ function FESpaces. interpolate_dirichlet (u, f:: DistributedSingleFieldFESpace , isconsistent = false )
466487 free_values = zero_free_values (f)
467488 dirichlet_values = get_dirichlet_dof_values (f)
468- interpolate_dirichlet! (u,free_values,dirichlet_values,f)
489+ interpolate_dirichlet! (u,free_values,dirichlet_values,f,isconsistent )
469490end
470491
471492function FESpaces. interpolate_dirichlet! (
472493 u, free_values:: AbstractVector ,
473494 dirichlet_values:: AbstractArray{<:AbstractVector} ,
474- f:: DistributedSingleFieldFESpace )
495+ f:: DistributedSingleFieldFESpace , isconsistent = false )
475496 map (f. spaces,local_views (free_values),dirichlet_values) do V,fvec,dvec
476497 interpolate_dirichlet! (u,fvec,dvec,V)
477498 end
478- FEFunction (f,free_values,dirichlet_values)
499+ FEFunction (f,free_values,dirichlet_values,isconsistent)
500+ end
501+
502+ function FESpaces. interpolate_dirichlet! (
503+ u:: DistributedCellField , free_values:: AbstractVector ,
504+ dirichlet_values:: AbstractArray{<:AbstractVector} ,
505+ f:: DistributedSingleFieldFESpace , isconsistent= false )
506+ map (local_views (u), f. spaces,local_views (free_values),dirichlet_values) do u,V,fvec,dvec
507+ interpolate_dirichlet! (u,fvec,dvec,V)
508+ end
509+ FEFunction (f,free_values,dirichlet_values,isconsistent)
479510end
480511
481- function FESpaces. interpolate_everywhere (u, f:: DistributedSingleFieldFESpace )
512+ function FESpaces. interpolate_everywhere (u, f:: DistributedSingleFieldFESpace , isconsistent = false )
482513 free_values = zero_free_values (f)
483514 dirichlet_values = get_dirichlet_dof_values (f)
484- interpolate_everywhere! (u,free_values,dirichlet_values,f)
515+ interpolate_everywhere! (u,free_values,dirichlet_values,f,isconsistent )
485516end
486517
487518function FESpaces. interpolate_everywhere! (
488519 u, free_values:: AbstractVector ,
489520 dirichlet_values:: AbstractArray{<:AbstractVector} ,
490- f:: DistributedSingleFieldFESpace )
521+ f:: DistributedSingleFieldFESpace , isconsistent = false )
491522 map (f. spaces,local_views (free_values),dirichlet_values) do V,fvec,dvec
492523 interpolate_everywhere! (u,fvec,dvec,V)
493524 end
494- FEFunction (f,free_values,dirichlet_values)
525+ FEFunction (f,free_values,dirichlet_values,isconsistent )
495526end
496527
497528function FESpaces. interpolate_everywhere! (
498529 u:: DistributedCellField , free_values:: AbstractVector ,
499530 dirichlet_values:: AbstractArray{<:AbstractVector} ,
500- f:: DistributedSingleFieldFESpace )
531+ f:: DistributedSingleFieldFESpace , isconsistent = false )
501532 map (local_views (u),f. spaces,local_views (free_values),dirichlet_values) do ui,V,fvec,dvec
502533 interpolate_everywhere! (ui,fvec,dvec,V)
503534 end
504- FEFunction (f,free_values,dirichlet_values)
535+ FEFunction (f,free_values,dirichlet_values,isconsistent )
505536end
506537
507538# Factories
@@ -852,13 +883,15 @@ end
852883# which does not properly interpolate the function provided.
853884# With this change, we are interpolating in the unconstrained space and then
854885# substracting the mean.
855- function FESpaces. interpolate! (u,free_values:: AbstractVector ,f:: DistributedZeroMeanFESpace )
886+ function FESpaces. interpolate! (u,free_values:: AbstractVector ,
887+ f:: DistributedZeroMeanFESpace , isconsistent= false )
856888 dirichlet_values = get_dirichlet_dof_values (f)
857- interpolate_everywhere! (u,free_values,dirichlet_values,f)
889+ interpolate_everywhere! (u,free_values,dirichlet_values,f,isconsistent )
858890end
859- function FESpaces. interpolate! (u:: DistributedCellField ,free_values:: AbstractVector ,f:: DistributedZeroMeanFESpace )
891+ function FESpaces. interpolate! (u:: DistributedCellField ,free_values:: AbstractVector ,
892+ f:: DistributedZeroMeanFESpace , isconsistent= false )
860893 dirichlet_values = get_dirichlet_dof_values (f)
861- interpolate_everywhere! (u,free_values,dirichlet_values,f)
894+ interpolate_everywhere! (u,free_values,dirichlet_values,f,isconsistent )
862895end
863896
864897function _compute_new_distributed_fixedval (
0 commit comments