Abstract box class

  type, abstract :: box_t
    integer, public :: dim                          !< dimensions of the space the box lives in
    logical :: inside_out = .false.                 !< if the box is inside out or not
    FLOAT, allocatable, public :: bounding_box_l(:) !< Half lengths of the bounding box that contains the
    !!                                                 box. Note that this box always contains the origin
    !!                                                 and is symmetrical with respect to it.
    procedure(box_contains_points),  deferred :: contains_points
    procedure(box_bounds),           deferred :: bounds
    procedure(box_write_info),       deferred :: write_info
    procedure(box_short_info),       deferred :: short_info
    procedure, non_overridable :: contains_point => box_contains_point
    procedure, non_overridable :: is_inside_out => box_is_inside_out
    procedure, non_overridable :: turn_inside_out => box_turn_inside_out
  end type box_t