implicit interface which can be used to create interpolation routines for ghost and halo cells within the solvers and to pass them as an arguement to the interpolation subroutine interpolate.
Type  Intent  Optional  Attributes  Name  

real,  intent(inout),  allocatable  ::  target_cell_data(:) 
The data of the cell you want to reconstruct. The subroutine implementing this interface does not allocate memory, so the calling subroutine has to allocate memory for this subroutine. The length of this array is the number of degrees of freedom (in case of PNPM or FD) or number of links (in case of LBM) you want to reconstruct. 

integer,  intent(in)  ::  target_cell_variables 
the number of variables you want to interpolate for the target cell. In case of PNPM it is the number of degrees of freedom (e.g. see ATELES: scheme_type%nDoFs ). In case of LBM it is the number of links (e.g. in case of D3Q19 it is 19). 

integer,  intent(in)  ::  target_cell_level 
the level of the cell you want to reconstruct inside the octree. Since we do a downwards interpolation (from the higher refinement level to the lower one) we implicitly assume that the source cell levels are all equal to target_cell_level  1. 

real,  intent(in),  allocatable  ::  source_cell_data(:,:) 
Data of the source cells, which are necessary to interpolate the target cell on a lower level. Since we are working on an octree structure we assume to get everytime the data of all 8 children. So the dimensions of this array are: First dimension is 8, second dimension is source_cell_variables. If one source cell is a solid cell put a negative integer number into source_child_numbers at the right position to indicate that this child is not valid. 

integer,  intent(in)  ::  source_cell_variables 
the number of variables of the source cell. In case of PNPM it is the number of degrees of freedom (e.g. see ATELES: scheme_type%nDoFs ) of the source cells. In case of LBM it is the number of links (e.g. in case of D3Q19 it is 19). 

integer,  intent(in),  allocatable  ::  source_child_numbers(:) 
array of integer numbers of length 8 indicating the position of the children within the space filling curve. If one child is a solid cell and therefore not part of the interpolation, put a negative integer inside this array. This tells the subroutine, that this child will not be part of the interpolation step. 