// Path: lfGenNPred/src/lfgen/algo/impl/LoadFlowGenerator.java
// public class LoadFlowGenerator extends AlgoObject implements ILoadFlowGenerator {
// 
// 	public static final String NAME = "LoadFlowGenerator";
// 	public static final String NAME_IN_SHORT = "LFG";
// 	public static final String PARA_NEEDED = "NONE";
// 	
// 	private int noBus = 0;
// 	private Complex[][] yc = null;
// 	
// 	public LoadFlowGenerator(RefInfo refInfo) {
// 		super(refInfo);
// 		long startTime = System.currentTimeMillis();
// 		this.methodName = NAME;
// 		System.out.print("[REPORT] new "+methodName+"...");
// 		
// 		this.noBus = ref.getNoBus();
// 		this.yc = new Complex[noBus][noBus];
// 		
// 		Complex[][] y = ref.getY();
// 		for (int i=0; i<noBus; ++i)
// 			for (int j=0; j<noBus; ++j) 
// 				this.yc[i][j] = new Complex(y[i][j].getReal(), 0 - y[i][j].getImaginary());//È¡¹²éî
// 		
// 		AclfCase.init(this);
// 		//report
// 		System.out.println(" ...ready. Need to input parameter: "+PARA_NEEDED);
// 		addInitTime(startTime);
// 	}
// 	
// 	/**
// 	 * Éú³É³±Á÷µÄºËÐÄ·½·¨,¸´ÔÓ¶ÈÎªn^2
// 	 * @param onGoNet
// 	 * @return net£¨Ö±½ÓÉú³ÉºóÐÞ¸Äµ½ÍøÂç£©
// 	 */
// 	public Complex[] genFlow(Complex[] voltage) {
// 		long startTime = System.currentTimeMillis();
// 		addCallTimes();
// 		
// 		Complex[] power = new Complex[noBus];
// 		
// 		for (int i=0; i<noBus; ++i) {
// 			power[i] = new Complex(0, 0);
// 			for (int j=0; j<noBus; ++j) {//Y*V*
// 				power[i] = power[i].add(this.yc[i][j].multiply(voltage[j].conjugate()));
// 			}
// 			power[i] = voltage[i].multiply(power[i]);//VY*V*
// 		}
// 		
// 		addTimeUse(startTime);
// 		return power;
// 	}
// 
// 	public int getNoBus() {
// 		return noBus;
// 	}
// 
// 	public Complex[][] getYc() {
// 		return yc;
// 	}
// 
// 	@Override
// 	public String keyMsg() {
// 		return NAME_IN_SHORT;
// 	}
// 
// }


import org.apache.commons.math3.complex.Complex;
import lfgen.algo.impl.LoadFlowGenerator;

	public Complex[] getPower() {
		if (!this.coincide) {
			power = lfg.genFlow(voltage);
			coincide = true;
		}
		return power;
	}
	
	@Override
	public String toString() {
		String str = new String("");
		String[] busCode = lfg.getRefInfo().getBusCode();
		for (int i=0; i<voltage.length; ++i) {
			str += "Bus "+i+"\t"+busCode[i]+"\t";
			if (busCode[i].equals("Swing")) {
				str += getVoltage()[i];
			}else if (busCode[i].equals("GenPV")) {
				str += getPower()[i].getReal()+"\t"+getVoltage()[i].abs();
			}else if (busCode[i].equals("GenPQ")) {
				str += getPower()[i];
			}
			str += "\n";
		}
		return str;
	}
	
	/**
	 * ÔÚ³ÌÐò³õÊ¼»¯½×¶Î¸øÕâ¸ö¸³Öµ£¬Ö®ºó²»ÓÃÏÔÊ½µ÷ÓÃlfg
	 * @param lfg
	 */

// Path: lfGenNPred/src/lfgen/algo/impl/LoadFlowGenerator.java
// public class LoadFlowGenerator extends AlgoObject implements ILoadFlowGenerator {
// 
// 	public static final String NAME = "LoadFlowGenerator";
// 	public static final String NAME_IN_SHORT = "LFG";
// 	public static final String PARA_NEEDED = "NONE";
// 	
// 	private int noBus = 0;
// 	private Complex[][] yc = null;
// 	
// 	public LoadFlowGenerator(RefInfo refInfo) {
// 		super(refInfo);
// 		long startTime = System.currentTimeMillis();
// 		this.methodName = NAME;
// 		System.out.print("[REPORT] new "+methodName+"...");
// 		
// 		this.noBus = ref.getNoBus();
// 		this.yc = new Complex[noBus][noBus];
// 		
// 		Complex[][] y = ref.getY();
// 		for (int i=0; i<noBus; ++i)
// 			for (int j=0; j<noBus; ++j) 
// 				this.yc[i][j] = new Complex(y[i][j].getReal(), 0 - y[i][j].getImaginary());//È¡¹²éî
// 		
// 		AclfCase.init(this);
// 		//report
// 		System.out.println(" ...ready. Need to input parameter: "+PARA_NEEDED);
// 		addInitTime(startTime);
// 	}
// 	
// 	/**
// 	 * Éú³É³±Á÷µÄºËÐÄ·½·¨,¸´ÔÓ¶ÈÎªn^2
// 	 * @param onGoNet
// 	 * @return net£¨Ö±½ÓÉú³ÉºóÐÞ¸Äµ½ÍøÂç£©
// 	 */
// 	public Complex[] genFlow(Complex[] voltage) {
// 		long startTime = System.currentTimeMillis();
// 		addCallTimes();
// 		
// 		Complex[] power = new Complex[noBus];
// 		
// 		for (int i=0; i<noBus; ++i) {
// 			power[i] = new Complex(0, 0);
// 			for (int j=0; j<noBus; ++j) {//Y*V*
// 				power[i] = power[i].add(this.yc[i][j].multiply(voltage[j].conjugate()));
// 			}
// 			power[i] = voltage[i].multiply(power[i]);//VY*V*
// 		}
// 		
// 		addTimeUse(startTime);
// 		return power;
// 	}
// 
// 	public int getNoBus() {
// 		return noBus;
// 	}
// 
// 	public Complex[][] getYc() {
// 		return yc;
// 	}
// 
// 	@Override
// 	public String keyMsg() {
// 		return NAME_IN_SHORT;
// 	}
// 
// }


// Path: lfGenNPred/src/lfgen/datatype/AclfCase.java
import org.apache.commons.math3.complex.Complex;
import lfgen.algo.impl.LoadFlowGenerator;

	public Complex[] getPower() {
		if (!this.coincide) {
			power = lfg.genFlow(voltage);
			coincide = true;
		}
		return power;
	}
	
	@Override
	public String toString() {
		String str = new String("");
		String[] busCode = lfg.getRefInfo().getBusCode();
		for (int i=0; i<voltage.length; ++i) {
			str += "Bus "+i+"\t"+busCode[i]+"\t";
			if (busCode[i].equals("Swing")) {
				str += getVoltage()[i];
			}else if (busCode[i].equals("GenPV")) {
				str += getPower()[i].getReal()+"\t"+getVoltage()[i].abs();
			}else if (busCode[i].equals("GenPQ")) {
				str += getPower()[i];
			}
			str += "\n";
		}
		return str;
	}
	
	/**
	 * ÔÚ³ÌÐò³õÊ¼»¯½×¶Î¸øÕâ¸ö¸³Öµ£¬Ö®ºó²»ÓÃÏÔÊ½µ÷ÓÃlfg
	 * @param lfg
	 */

	public static void init(LoadFlowGenerator lfg) {
