> On 27 Oct 2025, at 10:49 AM, SCOTTO Alexandre via petsc-users 
> <[email protected]> wrote:
> 
> In if this is a bug, I think the fix you proposed should also be applied to 
> the destroy() method, as it does not clear the database either.

Yes, it was under my radar, see 
https://urldefense.us/v3/__https://gitlab.com/petsc/petsc/-/merge_requests/8812/diffs__;!!G_uCfscf7eWS!bpR5xoqEEZODT3ldlupKuT0SLPS13FfAmILqjeIji7MVoNK9BGluc0PWAB3HllK1KvjANwLcl90jUg0rveJhRw$
 
There is still one check of self.opt == NULL that I’m not sure whether it 
should be there, but it’s orthogonal to the issue at end.

Thanks,
Pierre

> Regards,
> Alexandre.
>  
> De : Pierre Jolivet <[email protected]>
> Envoyé : lundi 27 octobre 2025 10:36
> À : SCOTTO Alexandre <[email protected]>
> Cc : [email protected]
> Objet : Re: [petsc-users] Options database in petsc4py
>  
> I would say this is a bug in petsc4py, the following diff should fix this.
> I’m not sure why this if is there, as it’s perfectly valid to call 
> PetscOptionsClear(NULL).
>  
> Thanks,
> Pierre
>  
> diff --git a/src/binding/petsc4py/src/petsc4py/PETSc/Options.pyx 
> b/src/binding/petsc4py/src/petsc4py/PETSc/Options.pyx
> index 4db3c52f022..8a923a6dd8e 100644
> --- a/src/binding/petsc4py/src/petsc4py/PETSc/Options.pyx
> +++ b/src/binding/petsc4py/src/petsc4py/PETSc/Options.pyx
> @@ -90,7 +90,6 @@ cdef class Options:
>  
>      def clear(self) -> Self:
>          """Clear an options database."""
> -        if self.opt == NULL: return
>          CHKERR(PetscOptionsClear(self.opt))
>          return self
> 
> 
> On 27 Oct 2025, at 10:23 AM, SCOTTO Alexandre via petsc-users 
> <[email protected] <mailto:[email protected]>> wrote:
>  
> Dear PETSc Community,
>  
> In my developments, I am managing possibly several KSP solvers with options 
> handled by the Options database. During my tests, I encountered the following 
> behavior:
>  
> Code:
> options = PETSc.Options("ksp_")
> options.setValue("atol", 7e-8)
> options.view()
>  
> options.clear()
> options.view()
>  
> Output:
> #PETSc Option Table entries:
> -ksp_atol 7e-08 # (source: code)
> #End of PETSc Option Table entries
>  
> #PETSc Option Table entries:
> -ksp_atol 7e-08 # (source: code)
> #End of PETSc Option Table entries
>  
> It seems that the clear() method does not really clear the Option database. 
> To ensure that the several KSP I deal with are set with their own options 
> (without getting options from a KSP previously set), the only way I found was 
> to explicitly call the delValue() method for all the option keys passed:
>  
> 1.       Iterate over a dictionary of options and use setValue(name, value)
> 2.       Set the KSP with option database: KSP.setFromOptions()
> 3.       Iterate over a the keys of the dictionary and use delValue(name) to 
> effectively clear the option database.
>  
> Does it seem normal to you, is there something I am missing out?
>  
> Regards,
> Alexandre Scotto.

Reply via email to