OPTIMIZATION: setting and storing each density distribution of each boundary is performed with an specific kernel for that boundary to avoid branching in OpenCL kernels