/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package borrame;

/**
 *
 * @author felix
 */
public class fusion {
    static public void main(String args[]) {
        int Nrest = 58, i;
        
        double y[] = new double[Nrest];
        double l[] = new double[Nrest];
        double z[] = new double[Nrest];
        double p[][] = {{0.5, 0.5, 0.5},{0.5, 0.5, 0.5},{0.5, 0.5, 0.5},
            {0.5, 0.5, 0.5}};

        double eps = 0.1;
        for(i=0; i<Nrest; i++) 
           l[i] =0.5;

        
        llena(z, p, l, y, eps);
        prueba(4, 3);
    }
    
    static public void llena(double z[], double p[][], double l[], double y[], 
            double eps){
        int i, j, k, Nrest, nr, nc, n, m;
        double M[][] = new double [12][12];
        

        Nrest = l.length;
        nr = p.length;
        nc = p[0].length;
        
        k=0;
        for(i=0; i<nr; i++){
            for(j=0; j<nc; j++) {       
                System.out.println(i + ", " + j);
                // -p_i,j > -1
                y[k] = 1 - p[i][j];
                z[k] = l[k]/y[k];
                n = i*nc+j;
                M[n][n] += z[k];
                System.out.printf("% 8.4f % 8.4f \n", y[k], z[k]);
                k++;
                
                // p_i,j > 0
                y[k] = p[i][j];
                z[k] = l[k]/y[k];
                n = i*nc+j;
                M[n][n] += z[k];
                System.out.printf("% 8.4f % 8.4f \n", y[k], z[k]);
                k++;
                
                if(i > 0) {
                    // p_i,j - p_i-1, j > - e
                    y[k] = eps + p[i][j] - p[i-1][j];
                    z[k] = l[k]/y[k];
                    n = i*nc+j;
                    m = (i-1)*nc+j;
                    M[n][n] += z[k];
                    M[m][m] += z[k];
                    M[n][m] -= z[k];
                    M[m][n] -= z[k];
                    System.out.printf("% 8.4f % 8.4f \n", y[k], z[k]);
                    k++;

                    // -p_i,j + p_i-1, j > - e
                    y[k] = eps - p[i][j] + p[i-1][j];
                    z[k] = l[k]/y[k];
                    n = i*nc+j;
                    m = (i-1)*nc+j;
                    M[n][n] += z[k];
                    M[m][m] += z[k];
                    M[n][m] -= z[k];
                    M[m][n] -= z[k];
                    System.out.printf("% 8.4f % 8.4f \n", y[k], z[k]);
                    k++;
                }

                if(j > 0) {
                    // p_i,j - p_i, j-1 > - e
                    y[k] = eps + p[i][j] - p[i][j-1];
                    z[k] = l[k]/y[k];
                    n = i*nc+j;
                    m = i*nc+j-1;
                    M[n][n] += z[k];
                    M[m][m] += z[k];
                    M[n][m] -= z[k];
                    M[m][n] -= z[k];
                    System.out.printf("% 8.4f % 8.4f \n", y[k], z[k]);
                    k++;

                    // -p_i,j + p_i, j-1 > - e
                    y[k] = eps - p[i][j] + p[i][j-1];
                    z[k] = l[k]/y[k];
                    n = i*nc+j;
                    m = i*nc+j-1;
                    M[n][n] += z[k];
                    M[m][m] += z[k];
                    M[n][m] -= z[k];
                    M[m][n] -= z[k];
                    System.out.printf("% 8.4f % 8.4f \n", y[k], z[k]);
                    k++;
                }
            }
            System.out.println("***************************************");
        }
        
        for(i=0; i<12; i++){
            for(j=0; j<12; j++)
                System.out.printf("% 10.4f ", M[i][j]);
            System.out.println("");
        }
    }
    
    static public void prueba(int nr, int nc) {
        int i, j, k, n, m;
        String M[][] = new String[12][12];
        k=1;
        
        for(i=0; i<12; i++)
            for(j=0; j<12; j++)
                M[i][j] = "";
        
        for(i=0; i<nr; i++)
            for(j=0; j<nc; j++) {
                
                n = i*nc+j;
                M[n][n] += "+ z_"+k + " ";
                System.out.println(k++ + " -p(" + i + "," + j + ") > -1 " + "Rest " + (n+1) );
                
                n = i*nc+j;
                M[n][n] += "+ z_"+k + " ";
                System.out.println(k++ + "  p(" + i + "," + j + ") >  0 " + "Rest " + (n+1));

                if(i>0){
                    n = i*nc+j;
                    m = (i-1)*nc+j;
                    M[n][n] += "+ z_"+k + " ";
                    M[m][m] += "+ z_"+k + " ";
                    M[n][m] += "- z_"+k + " ";
                    M[m][n] += "- z_"+k + " ";
                    System.out.println(k++ + " p(" + i + "," + j + ") - p(" + (i-1) + "," + j + ") >  -e " + "Rest "+ (n+1) + " " + (m+1)) ;
                    n = i*nc+j;
                    m = (i-1)*nc+j;
                    M[n][n] += "+ z_"+k + " ";
                    M[m][m] += "+ z_"+k + " ";
                    M[n][m] += "- z_"+k + " ";
                    M[m][n] += "- z_"+k + " ";
                    System.out.println(k++ + "  -p(" + i + "," + j + ") + p(" + (i-1) + "," + j + ") >  -e " + "Rest "+ (n+1) + " " + (m+1) );
                }

                if(j>0){
                    n = i*nc+j;
                    m = i*nc+j-1;
                    M[n][n] += "+ z_"+k + " ";
                    M[m][m] += "+ z_"+k + " ";
                    M[n][m] += "- z_"+k + " ";
                    M[m][n] += "- z_"+k + " ";
                    System.out.println(k++ + " p(" + i + "," + j + ") - p(" + i + "," + (j-1) + ") >  -e " + "Rest "+ (n+1) + " " + (m+1));
                    n = i*nc+j;
                    m = i*nc+j-1;
                    M[n][n] += "+ z_"+k + " ";
                    M[m][m] += "+ z_"+k + " ";
                    M[n][m] += "- z_"+k + " ";
                    M[m][n] += "- z_"+k + " ";
                    System.out.println(k++ + "  -p(" + i + "," + j + ") + p(" + i + "," + (j-1) + ") >  -e " + "Rest "+ (n+1) + " " + (m+1));
                }

                System.out.println("************************************");
            }
        
        for(i=0; i<12; i++){
            for(j=0; j<12; j++)
                System.out.print("(" + M[i][j] + ") ");
            System.out.println("");
        }
    }
}
