anchor.diff:  
   !============================================================================
   
  -SUBROUTINE ppser_initialize(directory, prefix, mode, prefix_ref, mpi_rank)
  +SUBROUTINE ppser_initialize(directory, prefix, mode, prefix_ref, mpi_rank, rprecision, rperturb)
     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
  +  REAL, OPTIONAL, INTENT(IN)       :: rprecision, rperturb
     CHARACTER(LEN=1), DIMENSION(128) :: buffer
     CHARACTER(LEN=15)                :: suffix
   
  
positive.code: 
    INTEGER            :: ppser_intlength, ppser_reallength
    CHARACTER (LEN=6)  :: ppser_realtype
  
    ! 0 corresponds to "read"
    ! 1 corresponds to "write"
  
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
  
  
  