anchor.diff:                     VTK_VAR_VECT_I4, & ! integer(I4P) vectorial
                      VTK_VAR_TEXT_R8, & ! real(R8P)    vectorial (texture)
                      VTK_VAR_TEXT_R4    ! real(R4P)    vectorial (texture)
  +endinterface
  +interface VTK_GEO_XML_READ
  +  !< Procedure for reading mesh with different topologies in VTK-XML standard.
  +  !<
  +  !< VTK_GEO_XML_READ is an interface to 15 different functions; there are 2 functions for each of 3 topologies supported and a function
  +  !< for closing XML pieces: one function for mesh coordinates with R8P (Ok!) precision and one for mesh coordinates with R4P (Not implemented!) precision.
  +  !< 1D/3D-rank arrays and packed API for any kinds
  +  !<
  +  !<- For StructuredGrid there are 4 functions for each real kinds:
  +  !<    - inputs are 1D-rank arrays: X[1:NN],Y[1:NN],Z[1:NN]; (Not implemented!)
  +  !<    - inputs are 3D-rank arrays: X[nx1:nx2,ny1:ny2,nz1:nz2],Y[nx1:nx2,ny1:ny2,nz1:nz2],Z[nx1:nx2,ny1:ny2,nz1:nz2]; (Not implemented!)
  +  !<    - input is 1D-rank array (packed API): XYZ[1:3,1:NN]; (Not implemented!)
  +  !<    - input is 3D-rank array (packed API): XYZ[1:3,nx1:nx2,ny1:ny2,nz1:nz2]. (Not implemented!)
  +  !<- For UnStructuredGrid there are 2 functions for each real kinds:
  +  !<    - inputs are 1D arrays: X[1:NN],Y[1:NN],Z[1:NN]; (Ok!)
  +  !<    - input is 1D array (packed API): XYZ[1:3,1:NN]. (Not implemented!)
  +  !<
  +  !< VTK_GEO_XML_READ must be called after VTK_INI_XML_READ. It reads the mesh geometry. The inputs that must be passed
  +  !< change depending on the topologies chosen. Not all VTK topologies have been implemented (*polydata* topologies are absent).
  +  !<
  +  !< @note The XML standard is more powerful than legacy. XML file can contain more than 1 mesh with its
  +  !< associated variables. Thus there is the necessity to close each *pieces* that compose the data-set saved in the
  +  !< XML file. The VTK_GEO_XML_READ uses the *close piece* format is used just to close the
  +  !< current piece before saving another piece or closing the file.
  +  !<
  +  !<### Examples of usage
  +
  +  module procedure &
  +  !                 VTK_GEO_XML_STRG_1DA_R8, VTK_GEO_XML_STRG_3DA_R8,  & ! real(R8P) StructuredGrid, 1D/3D Arrays
  +  !                 VTK_GEO_XML_STRG_1DAP_R8,VTK_GEO_XML_STRG_3DAP_R8, & ! real(R8P) StructuredGrid, 1D/3D Arrays packed API
  +  !                 VTK_GEO_XML_STRG_1DA_R4, VTK_GEO_XML_STRG_3DA_R4,  & ! real(R4P) StructuredGrid, 1D/3D Arrays
  +  !                 VTK_GEO_XML_STRG_1DAP_R4,VTK_GEO_XML_STRG_3DAP_R4, & ! real(R4P) StructuredGrid, 1D/3D Arrays packed API
  +  !                 VTK_GEO_XML_RECT_R8,                               & ! real(R8P) RectilinearGrid
  +  !                 VTK_GEO_XML_RECT_R4,                               & ! real(R4P) RectilinearGrid
  +  !                 VTK_GEO_XML_UNST_R8_READ,VTK_GEO_XML_UNST_PACK_R4,      & ! real(R8P) UnstructuredGrid, standard and packed API
  +                   VTK_GEO_XML_UNST_R4_READ!,VTK_GEO_XML_UNST_PACK_R8,      & ! real(R4P) UnstructuredGrid, standard and packed API
  +  !                 VTK_GEO_XML_CLOSEP                                   ! closing tag "Piece" function
   endinterface
   !-----------------------------------------------------------------------------------------------------------------------------------
   
  
positive.code: 
    function read_record(buffer, from, cf) result(E_IO)
    !---------------------------------------------------------------------------------------------------------------------------------
    !< read_record: read characters in the unit 'Unit_VTK' from position 'from' to read string 'buffer'
    !< The read action stops when finding a EOR character (char(10))
    !---------------------------------------------------------------------------------------------------------------------------------
    character(len=:), allocatable, intent(OUT) :: buffer   !< String 
    integer(I4P), intent(IN), optional :: from       !< Offset
    integer(I4P), intent(IN), optional :: cf         !< Current file index (for concurrent files IO).
    integer(I4P)                       :: rf       !< Real file index.
    integer(i4P)                       :: E_IO
    character                          :: c
    integer                            :: n, p
    !---------------------------------------------------------------------------------------------------------------------------------
  
    !---------------------------------------------------------------------------------------------------------------------------------
  
negative.code:   !---------------------------------------------------------------------------------------------------------------------------------
    !< get_int: get in buffer, the value of attribute 'attrib'
    !---------------------------------------------------------------------------------------------------------------------------------
    character(len=*),           intent(IN)  :: buffer  !< String where to search the attrib
    character(len=*),           intent(IN)  :: attrib  !< XML attribute id
    integer(I4P),               intent(OUT) :: val     !< Returned integer value
    integer(I4P),     optional, intent(OUT) :: E_IO    
    character(len=*), optional, intent(IN)  :: case
    integer :: pos, po2, ios
    !---------------------------------------------------------------------------------------------------------------------------------
  
    !---------------------------------------------------------------------------------------------------------------------------------
    if(present(E_IO)) E_IO = -1_I4P
    if(present(case)) then
      if(trim(case)=='lower') then
        pos = index(buffer, trim(adjustlt(attrib))//'="')+len_trim(adjustlt(attrib))+2
  