  GPUs have climbed up to the top of supercomputer systems making life harder
to many legacy scientific codes. Nowadays, many recipes are being used in such
code's portability, without any clarity of which is the best option. We present
a comparative analysis of the two most common approaches, CUDA and OpenACC,
into the multi-physics CFD code Alya. Our focus is the combustion problems
which are one of the most computing demanding CFD simulations. The most
computing-intensive parts of the code were analyzed in detail. New data
structures for the matrix assembly step have been created to facilitate a SIMD
execution that benefits vectorization in the CPU and stream processing in the
GPU. As a result, the CPU code has improved its performance by up to 25%. In
GPU execution, CUDA has proven to be up to 2 times faster than OpenACC for the
assembly of the matrix. On the contrary, similar performance has been obtained
in the kernels related to vector operations used in the linear solver, where
there is minimal memory reuse.
