JExpression inner;
    private void addInitialization(JMethodDeclaration init, LinearFilterRepresentation linearRep) {	JBlock block = init.getBody();	FilterMatrix A = linearRep.getA();	int rows = A.getRows();	int cols = A.getCols();	// first build length, index arrays.  note that this	// allocation of index is the full size of A for the sake of	// simplicity here, but when we generate code we will cut its	// dimension to the bounding box of the irregular indices	int[] length = new int[cols];	int[][] index = new int[cols][rows];	// keep track of max length	int maxLength = 0;	// for each column of the matrix...	for (int j=0; j<cols; j++) {	    // length will count the number of non-zero elements	    for (int i=0; i<rows; i++) {		if (!A.getElement(i, j).equals(ComplexNumber.ZERO)) {		    // store the peek index here		    index[j][length[j]] = rows - i - 1;		    length[j]++;		}	    }	    if (length[j] > maxLength) {		maxLength = length[j];	    }	}	// allocate sparseA	JExpression[] dims = { new JIntLiteral(maxLength), new JIntLiteral(cols) };	block.addStatement(makeAssignmentStatement(new JFieldAccessExpression(null, new JThisExpression(null), NAME_A),						   new JNewArrayExpression(null, sparseABaseType, dims, null)));	// allocate index	block.addStatement(makeAssignmentStatement(new JFieldAccessExpression(null, new JThisExpression(null), NAME_INDEX),						   new JNewArrayExpression(null, CStdType.Integer, dims, null)));	// allocate b	JExpression[] dims2 = { new JIntLiteral(cols) };	block.addStatement(makeAssignmentStatement(new JFieldAccessExpression(null, new JThisExpression(null), NAME_B),						   new JNewArrayExpression(null, bBaseType, dims2, null)));	// allocate length	block.addStatement(makeAssignmentStatement(new JFieldAccessExpression(null, new JThisExpression(null), NAME_LENGTH),						   new JNewArrayExpression(null, CStdType.Integer, dims2, null)));	// initialize the entries.  Note that here we are substituting	// "cols-j-1" for "cols" in the LHS of each assignment that is	// being generated.  This is because we want to push the	// high-numbered columns first when we loop through in	// increasing order in the work function.	for (int j=0; j<cols; j++) {	    JExpression rhs;	    for (int i=0; i<length[j]; i++) {		JExpression inner;		// "sparseA"[i][j] = A.getElement(i, index[j][i])		rhs = ( sparseAField.getVariable().getType()==CStdType.Integer ? 			(JExpression)new JIntLiteral((int)A.getElement(rows - index[j][i] - 1, j).getReal()) :			(JExpression)new JFloatLiteral((float)A.getElement(rows - index[j][i] - 1, j).getReal()) );		block.addStatement(makeAssignmentStatement(new JArrayAccessExpression(null,										      makeArrayFieldAccessExpr(sparseAField.getVariable(), i),										      new JIntLiteral(cols-j-1)),							   rhs));		// "index"[i][j] = index[i][j]		block.addStatement(makeAssignmentStatement(new JArrayAccessExpression(null,										      makeArrayFieldAccessExpr(indexField.getVariable(), i),										      new JIntLiteral(cols-j-1)),							   new JIntLiteral(index[j][i])));	    }	    // "b"[j] = b.getElement(j)	    rhs = ( bField.getVariable().getType()==CStdType.Integer ?		    (JExpression)new JIntLiteral((int)linearRep.getb().getElement(j).getReal()) :		    (JExpression)new JFloatLiteral((float)linearRep.getb().getElement(j).getReal()) );	    block.addStatement(makeAssignmentStatement(makeArrayFieldAccessExpr(bField.getVariable(), cols-j-1), rhs));	    // "length"[j] = length[j]	    block.addStatement(makeAssignmentStatement(makeArrayFieldAccessExpr(lengthField.getVariable(), cols-j-1), new JIntLiteral(length[j])));	}    }