}
private ComplexNumber[] backwardsSweep(final ComplexNumber[] w, final double t) {
final double oneOverOmega2 = 1 / _omega / _omega;
final ComplexNumber[] wBar = new ComplexNumber[19];
wBar[18] = new ComplexNumber(1.0); //formal start
wBar[17] = new ComplexNumber(_vol0); //Suppressing the multiple by wBar18
wBar[16] = wBar[18];
wBar[15] = multiply(oneOverOmega2, w[8], wBar[17]);
wBar[14] = multiply(-2, w[0], wBar[16]);
wBar[13] = divide(wBar[14], w[13]);
ComplexNumber temp1 = subtract(1.0, w[10]);
ComplexNumber temp2 = subtract(w[10], w[12]);
ComplexNumber temp3 = square(temp2);
wBar[12] = add(multiply(wBar[15], divide(temp1, temp3)), divide(wBar[13], temp1));
wBar[11] = multiply(w[0], wBar[16]);
wBar[10] = add(multiply(divide(subtract(w[12], 1), temp3), wBar[15]), multiply(divide(subtract(w[12], 1), square(temp1)), wBar[13]));
wBar[9] = subtract(multiply(t, wBar[11]), multiply(divide(w[8], square(w[9])), wBar[10]));
wBar[8] = add(multiply(oneOverOmega2, w[15], wBar[17]), divide(wBar[10], w[9]));