anchor.diff:  
     end subroutine h5md_close_obs
     
  +  subroutine h5md_close_ID(ID)
  +    type(h5md_t), intent(inout) :: ID
  +
  +    call h5dclose_f(ID% d_id, h5_error)
  +    call h5dclose_f(ID% s_id, h5_error)
  +    call h5dclose_f(ID% t_id, h5_error)
  +
  +  end subroutine h5md_close_ID
  +
   end module h5md
  
positive.code: 
    ! takes a single value and appends it to the appropriate buffer.
    ! if the buffer size is reached, the buffer is dumped to the file.
    subroutine h5md_append_obs_value_d(d_id, s_id, t_id, value, present_step, time)
      integer(HID_T), intent(inout) :: d_id, s_id, t_id
      double precision, intent(in) :: value
      integer, intent(in) :: present_step
      double precision, intent(in) :: time
  
negative.code:   ! data is the actual data of dim (D,N)
    ! step is the integer step of simulation. if the linked 'step' dataset's latest value
    ! is present_step, 'step' and 'time' are not updated. Else, they are.
    subroutine h5md_write_trajectory_data_d(ID, data, present_step, time)
      type(h5md_t), intent(inout) :: ID
      double precision, intent(in) :: data(:,:)
      integer, intent(in) :: present_step
      double precision, intent(in) :: time
  