I've got a function that takes a matrix of velocities for a bunch of particles and tries to calculate the total kinetic energy of the particles.
It doesn't give me the right value. In order to debug, I added a few printf("value: %e \n", energy) in the function.
And now, the return value depends on how many of these printfs I leave uncommented.
double GetKineticEnergy(int dim, int nParticles, double vel[nParticles][dim], double mass)
{
  int i,j;
  double sum;
  double energy = 0;
  for(i=0;i<nParticles;i++) {
    sum = 0;
    for(j=0;j<dim;j++) {
      sum += vel[i][j]*vel[i][j];
    }
    energy += sum*mass/2;
    // printf("energy: %e \n", energy);
  }
  // printf("total: %e \n", energy);
  return(energy);
}
and right after returning to the caller I print the returned value. I get 18.0, 19.0, 21.0, or 24.0, depending on which combination of the printfs I uncomment.
What am I doing wrong?
Update:
In trying to troubleshoot this, I've commented out pretty much everything. The function is reduced to
{
  double energy = 123;
  return(energy);
}
and the main program is
int main() {
  double a;
  double vel[5][5];
  a = GetKineticEnergy(1, 1, vel, 1);
  printf("value: %e \n", a);
}
and I get
value: 0.000000e+00
as output.
Update:
The problem goes away if I hardcode the second dimension of the 2D array double vel[][3]. For the time being, this seems like a useful fix, but I cringe at that type of hardcoding.
 
     
    