Good idea. I'd much rather write
do concurrent (i = 1:n) y(i) = y(i) + a*x(i) enddo
std::transform(par, x, x+n, y, y, [=](float x, float y){ return y + a*x; } );