Index: ../trunk-jpl/src/c/toolkits/objects/Vector.h =================================================================== --- ../trunk-jpl/src/c/toolkits/objects/Vector.h (revision 19976) +++ ../trunk-jpl/src/c/toolkits/objects/Vector.h (revision 19977) @@ -280,6 +280,16 @@ } /*}}}*/ + void Shift(doubletype shift){_assert_(this);/*{{{*/ + + if(type==PetscVecType){ + #ifdef _HAVE_PETSC_ + this->pvector->Shift(shift); + #endif + } + else this->ivector->Shift(shift); + } + /*}}}*/ void Copy(Vector* to){_assert_(this);/*{{{*/ if(type==PetscVecType){ Index: ../trunk-jpl/src/c/toolkits/issm/IssmAbsVec.h =================================================================== --- ../trunk-jpl/src/c/toolkits/issm/IssmAbsVec.h (revision 19976) +++ ../trunk-jpl/src/c/toolkits/issm/IssmAbsVec.h (revision 19977) @@ -41,6 +41,7 @@ virtual void AXPY(IssmAbsVec* X, doubletype a)=0; virtual void AYPX(IssmAbsVec* X, doubletype a)=0; virtual doubletype* ToMPISerial(void)=0; + virtual void Shift(doubletype shift)=0; virtual void Copy(IssmAbsVec* to)=0; virtual doubletype Norm(NormMode mode)=0; virtual void Scale(doubletype scale_factor)=0; Index: ../trunk-jpl/src/c/toolkits/issm/IssmVec.h =================================================================== --- ../trunk-jpl/src/c/toolkits/issm/IssmVec.h (revision 19976) +++ ../trunk-jpl/src/c/toolkits/issm/IssmVec.h (revision 19977) @@ -179,6 +179,10 @@ return vector->ToMPISerial(); } /*}}}*/ + void Shift(doubletype shift){/*{{{*/ + vector->Shift(shift); + } + /*}}}*/ void Copy(IssmVec* to){/*{{{*/ vector->Copy(to->vector); } Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h =================================================================== --- ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h (revision 19976) +++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h (revision 19977) @@ -395,6 +395,10 @@ } /*}}}*/ + void Shift(doubletype shift){/*{{{*/ + for(int i=0;im;i++)this->vector[i]+=shift; + } + /*}}}*/ void Copy(IssmAbsVec* toin){/*{{{*/ int i; Index: ../trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h =================================================================== --- ../trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h (revision 19976) +++ ../trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h (revision 19977) @@ -198,6 +198,12 @@ } /*}}}*/ + void Shift(doubletype shift){/*{{{*/ + + for(int i=0;iM;i++)this->vector[i]+=shift; + + } + /*}}}*/ void Copy(IssmAbsVec* toin){/*{{{*/ int i; Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.h =================================================================== --- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.h (revision 19976) +++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.h (revision 19977) @@ -49,6 +49,7 @@ void AXPY(PetscVec* X, IssmDouble a); void AYPX(PetscVec* X, IssmDouble a); IssmDouble* ToMPISerial(void); + void Shift(IssmDouble shift); void Copy(PetscVec* to); IssmDouble Norm(NormMode norm_type); IssmDouble Max(void); Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp =================================================================== --- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp (revision 19976) +++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp (revision 19977) @@ -162,6 +162,12 @@ } /*}}}*/ +void PetscVec::Shift(IssmDouble shift){/*{{{*/ + + if(this->vector) VecShift(this->vector,shift); + +} +/*}}}*/ void PetscVec::Copy(PetscVec* to){/*{{{*/ if(this->vector) VecCopy(this->vector,to->vector);