I am studying Godunov's method and I am unclear on a few details, it seems there are not many resources available regarding this method (at least to my knowledge).
Suppose we have: $$v_t + [f(v)]_x = 0$$ which we are solving on some grid. We denote the solution on this grid as $u_j^n$, which represents the solution at $j\Delta x$ and at time $n\Delta t$.
Before even getting into Godunov's method, I am confused on implementing the grid suggested by most texts, which claim it is more natural to instead consider $$U_j^n = \frac{1}{\Delta x}\int_{x_{j-1/2}}^{x_{j+1/2}} u_j^n$$ but how is this implemented in practice? If are grid is $x_j$ for $j = 0, 1, 2, \ldots, n$, how do we deal with these half points exactly?
Now, for Godunov's method, it is my understanding that we suppose we have a solution at time $n$ which we call $\tilde{u}^n(x, t_n)$. This solution is piecewise constant at time $n$ as it simply the value of our numerical solution over each particular cell $[x_{j-1/2}, x_{j+1/2})$. To obtain the solution at time $n+1$ we use $\tilde{u}(x, t_n)$ as initial data and solve the resulting sequence of Riemann problems.
Assuming the above is correct, I have two questions that follow. First, how do we solve these Riemann problems exactly? The texts I have seen claim that this is trivial since the resulting fluxes contain integrals of constants. Second, at each cell edge we have two solutions, one to the right and one to the left. Which do we use when solving these Riemann problems?
I cannot wrap my head around a "general" way to do this, so to speak. It seems like any code using the Godunov method will be heavily dependent on the flux function $f$.