[petsc-dev] TSComputeRHSJacobian

Barry Smith bsmith at mcs.anl.gov
Thu Sep 7 16:02:45 CDT 2017


  Example that demonstrates the current code is problematic in some cases?

> On Aug 28, 2017, at 11:59 AM, Stefano Zampini <stefano.zampini at gmail.com> wrote:
> 
> 
> I was wondering if the following code in TSComputeRHSJacobian is correct when the user pass the reuse flag via TSRHSJacobianReuse
> 
>   if (ts->rhsjacobian.time == t && (ts->problem_type == TS_LINEAR || (ts->rhsjacobian.Xid == Uid && ts->rhsjacobian.Xstate == Ustate)) && (rhsfunction != TSComputeRHSFunctionLinear)) {
>     PetscFunctionReturn(0);
>   }
> 
> Should the above code be replaced by the following?
> 
>   if (ts->rhsjacobian.time == t && (ts->problem_type == TS_LINEAR || (ts->rhsjacobian.Xid == Uid && ts->rhsjacobian.Xstate == Ustate)) && (rhsfunction != TSComputeRHSFunctionLinear)) {
>     if (ts->rhsjacobian.reuse) {
>       ierr = MatShift(A,-ts->rhsjacobian.shift);CHKERRQ(ierr);
>       ierr = MatScale(A,1./ts->rhsjacobian.scale);CHKERRQ(ierr);
>       if (B && A != B) {
>         ierr = MatShift(B,-ts->rhsjacobian.shift);CHKERRQ(ierr);
>         ierr = MatScale(B,1./ts->rhsjacobian.scale);CHKERRQ(ierr);
>       }
>       ts->rhsjacobian.shift = 0;
>       ts->rhsjacobian.scale = 1.;
>     }
>     PetscFunctionReturn(0);
>   }
> 
> 
> -- 
> Stefano



More information about the petsc-dev mailing list