[petsc-dev] State restriction of snes solutions without rscale
Lawrence Mitchell
lawrence.mitchell at imperial.ac.uk
Tue Feb 24 09:54:54 CST 2015
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi all,
I provide both the state restriction matrix (DMCreateInjection) along
with residual transfer (DMCreateInterpolation), and therefore don't
provide the (optional) scaling vector in DMCreateInterpolation.
However, DMRestrictHook_SNESVecSol, called indirectly during
SNESSolve_FAS just does:
ierr = MatRestrict(Restrict,Xfine,Xcoarse);CHKERRQ(ierr);
ierr = VecPointwiseMult(Xcoarse,Xcoarse,Rscale);CHKERRQ(ierr);
Which fails if Rscale hasn't been provided.
How about using the Inject matrix first if the user has provided it?
Something like:
diff --git a/src/snes/interface/snes.c b/src/snes/interface/snes.c
index cc9cc30..d037650 100644
- --- a/src/snes/interface/snes.c
+++ b/src/snes/interface/snes.c
@@ -481,8 +481,12 @@ static PetscErrorCode
DMRestrictHook_SNESVecSol(DM dmfine,Mat Restrict,Vec Rscal
Xfine = Xfine_named;
}
ierr =
DMGetNamedGlobalVector(dmcoarse,"SNESVecSol",&Xcoarse);CHKERRQ(ierr);
- - ierr = MatRestrict(Restrict,Xfine,Xcoarse);CHKERRQ(ierr);
- - ierr = VecPointwiseMult(Xcoarse,Xcoarse,Rscale);CHKERRQ(ierr);
+ if (Inject) {
+ ierr = MatRestrict(Inject,Xfine,Xcoarse);CHKERRQ(ierr);
+ } else {
+ ierr = MatRestrict(Restrict,Xfine,Xcoarse);CHKERRQ(ierr);
+ ierr = VecPointwiseMult(Xcoarse,Xcoarse,Rscale);CHKERRQ(ierr);
+ }
ierr =
DMRestoreNamedGlobalVector(dmcoarse,"SNESVecSol",&Xcoarse);CHKERRQ(ierr);
if (Xfine_named) {ierr =
DMRestoreNamedGlobalVector(dmfine,"SNESVecSol",&Xfine_named);CHKERRQ(ierr);}
PetscFunctionReturn(0);
Cheers,
Lawrence
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEcBAEBAgAGBQJU7J7KAAoJECOc1kQ8PEYvcVUIAMo30Dxz1FfwwNA2UK2UOl4c
hoUunk3JY5N3B/K6rWRtj2UOQ7u8/pOx+p2xqX7G4r25Raa55FqxVGjvOX5gTcgC
Qe2BSGNzgaUlK02NCMdNhJxZ5WUpmId+d3QcCWG23So35J4FWW6CkI3UEPq5k+Wq
Qeznojk3gStymPZv8I+XRM8pINBLAFZR6j0XhaR9RUuW/TTOcb0aVoZNTwOFqx7l
pxwEH69DcQ4taYgyo0arIB8e20dizUn6yptWucw9aSEAT+2NcFlF0d3RIdqwfz6E
sqd6Xj+ZcsWgCeXAf65DiqJTvoSLNOmQhvv17ZB/zzLeGMom2oSp65v2IznVDk0=
=iKrZ
-----END PGP SIGNATURE-----
More information about the petsc-dev
mailing list