Program: 11484
Project: 11484
Buggy source:
public Point lph2xyz(final double azTime,final double rgTime,final double height,final Point approxXYZCentre) throws Exception {
  logger.setLevel(Level.OFF);
  Point satellitePosition;
  Point satelliteVelocity;
  Point ellipsoidPosition;
  double[] equationSet=new double[3];
  double[][] partialsXYZ=new double[3][3];
  satellitePosition=getXYZ(azTime);
  satelliteVelocity=getXYZDot(azTime);
  ellipsoidPosition=approxXYZCentre;
  for (int iter=0; iter <= MAXITER; iter++) {
    Point dsat_P=ellipsoidPosition.min(satellitePosition);
    equationSet[0]=-eq1_Doppler(satelliteVelocity,dsat_P);
    equationSet[1]=-eq2_Range(dsat_P,rgTime);
    equationSet[2]=-eq3_Ellipsoid(ellipsoidPosition,height);
    partialsXYZ[0][0]=satelliteVelocity.x;
    partialsXYZ[0][1]=satelliteVelocity.y;
    partialsXYZ[0][2]=satelliteVelocity.z;
    partialsXYZ[1][0]=2 * dsat_P.x;
    partialsXYZ[1][1]=2 * dsat_P.y;
    partialsXYZ[1][2]=2 * dsat_P.z;
    partialsXYZ[2][0]=(2 * ellipsoidPosition.x) / (FastMath.pow(ell_a + height,2));
    partialsXYZ[2][1]=(2 * ellipsoidPosition.y) / (FastMath.pow(ell_a + height,2));
    partialsXYZ[2][2]=(2 * ellipsoidPosition.z) / (FastMath.pow(ell_b + height,2));
    double[] ellipsoidPositionSolution=LinearAlgebraUtils.solve33(partialsXYZ,equationSet);
    ellipsoidPosition.x+=ellipsoidPositionSolution[0];
    ellipsoidPosition.y+=ellipsoidPositionSolution[1];
    ellipsoidPosition.z+=ellipsoidPositionSolution[2];
    logger.fine("String_Node_Str" + ellipsoidPosition.x);
    logger.fine("String_Node_Str" + ellipsoidPosition.y);
    logger.fine("String_Node_Str" + ellipsoidPosition.z);
    if (Math.abs(ellipsoidPositionSolution[0]) < CRITERPOS && Math.abs(ellipsoidPositionSolution[1]) < CRITERPOS && Math.abs(ellipsoidPositionSolution[2]) < CRITERPOS) {
      logger.info("String_Node_Str" + ellipsoidPosition + "String_Node_Str");
      break;
    }
 else     if (iter >= MAXITER) {
      logger.warning("String_Node_Str" + MAXITER + "String_Node_Str");
      logger.warning("String_Node_Str" + CRITERPOS + "String_Node_Str"+ ArrayUtils.toString(ellipsoidPositionSolution)+ "String_Node_Str");
      if (MAXITER > 10) {
        logger.severe("String_Node_Str");
        throw new Exception("String_Node_Str");
      }
    }
  }
  return new Point(ellipsoidPosition);
}

Fixed version (ground truth):
public Point lph2xyz(final double azTime,final double rgTime,final double height,final Point approxXYZCentre) throws Exception {
  logger.setLevel(Level.OFF);
  Point satellitePosition;
  Point satelliteVelocity;
  Point ellipsoidPosition=new Point(approxXYZCentre);
  double[] equationSet=new double[3];
  double[][] partialsXYZ=new double[3][3];
  satellitePosition=getXYZ(azTime);
  satelliteVelocity=getXYZDot(azTime);
  for (int iter=0; iter <= MAXITER; iter++) {
    Point dsat_P=ellipsoidPosition.min(satellitePosition);
    equationSet[0]=-eq1_Doppler(satelliteVelocity,dsat_P);
    equationSet[1]=-eq2_Range(dsat_P,rgTime);
    equationSet[2]=-eq3_Ellipsoid(ellipsoidPosition,height);
    partialsXYZ[0][0]=satelliteVelocity.x;
    partialsXYZ[0][1]=satelliteVelocity.y;
    partialsXYZ[0][2]=satelliteVelocity.z;
    partialsXYZ[1][0]=2 * dsat_P.x;
    partialsXYZ[1][1]=2 * dsat_P.y;
    partialsXYZ[1][2]=2 * dsat_P.z;
    partialsXYZ[2][0]=(2 * ellipsoidPosition.x) / (FastMath.pow(ell_a + height,2));
    partialsXYZ[2][1]=(2 * ellipsoidPosition.y) / (FastMath.pow(ell_a + height,2));
    partialsXYZ[2][2]=(2 * ellipsoidPosition.z) / (FastMath.pow(ell_b + height,2));
    double[] ellipsoidPositionSolution=LinearAlgebraUtils.solve33(partialsXYZ,equationSet);
    ellipsoidPosition.x+=ellipsoidPositionSolution[0];
    ellipsoidPosition.y+=ellipsoidPositionSolution[1];
    ellipsoidPosition.z+=ellipsoidPositionSolution[2];
    logger.fine("String_Node_Str" + ellipsoidPosition.x);
    logger.fine("String_Node_Str" + ellipsoidPosition.y);
    logger.fine("String_Node_Str" + ellipsoidPosition.z);
    if (Math.abs(ellipsoidPositionSolution[0]) < CRITERPOS && Math.abs(ellipsoidPositionSolution[1]) < CRITERPOS && Math.abs(ellipsoidPositionSolution[2]) < CRITERPOS) {
      logger.info("String_Node_Str" + ellipsoidPosition + "String_Node_Str");
      break;
    }
 else     if (iter >= MAXITER) {
      logger.warning("String_Node_Str" + MAXITER + "String_Node_Str");
      logger.warning("String_Node_Str" + CRITERPOS + "String_Node_Str"+ ArrayUtils.toString(ellipsoidPositionSolution)+ "String_Node_Str");
      if (MAXITER > 10) {
        logger.severe("String_Node_Str");
        throw new Exception("String_Node_Str");
      }
    }
  }
  return ellipsoidPosition;
}