anchor.diff:  
     INTEGER            :: ppser_intlength, ppser_reallength
     CHARACTER (LEN=6)  :: ppser_realtype
  +  REAL               :: zrperturb
   
     ! 0 corresponds to "read"
     ! 1 corresponds to "write"
  
positive.code: 
  !============================================================================
  
  SUBROUTINE ppser_initialize(directory, prefix, mode, prefix_ref, mpi_rank)
    CHARACTER(LEN=*), INTENT(IN)     :: directory, prefix
    INTEGER, OPTIONAL, INTENT(IN)    :: mode
    CHARACTER(LEN=*), OPTIONAL, INTENT(IN)     :: prefix_ref
    REAL                             :: realvalue
    INTEGER                          :: intvalue
    INTEGER, OPTIONAL, INTENT(IN)    :: mpi_rank
    CHARACTER(LEN=1), DIMENSION(128) :: buffer
    CHARACTER(LEN=15)                :: suffix
  
  
negative.code:   ! Get name of real
    ppser_realtype = 'double'
  
    IF ( PRESENT(rprecision) .AND. PRESENT(rperturb) ) THEN
      ! generate epsilon
      IF (rperturb > 0.0) THEN
        ! relative perturbation with a specified magnitude
        ! Example: if rperturb = 1.0e-5 then perturbation will be ...
        !    field = field * (1 + 1.0e-5 * R) in double precision
        !    field = field * (1 + 1.0e-5 * R) in single precision
        !  ... where R is a random number from -1.0 to 1.0
        zrperturb = rperturb
      ELSE
        ! relative perturbation with a magnitude relative to precision
        ! Example: if rperturb = -10.0 then perturbation will be ...
        !    field = field * (1 + 10.0 * 1e-16 * R) in double precision
        !    field = field * (1 + 10.0 * 1e-7 * R) in single precision
        !  ... where R is a random number from -1.0 to 1.0
        zrperturb = - rperturb * rprecision
      ENDIF
    ENDIF
  
  END SUBROUTINE ppser_initialize
  
  
  