# [File generated by the OpenScop Library 0.8.0]

<OpenScop>

# =============================================== Global
# Language
C

# Context
CONTEXT
1 3 0 0 0 1
# e/i|  N |  1  
   1    1   -1    ## N-1 >= 0

# Parameters are provided
1
<strings>
N
</strings>

# Number of statements
2

# =============================================== Statement 1
# Number of relations describing the statement:
3

# ----------------------------------------------  1.1 Domain
DOMAIN
4 5 2 0 0 1
# e/i|  i    j |  N |  1  
   1    1    0    0    0    ## i >= 0
   1   -1    0    1   -1    ## -i+N-1 >= 0
   1    0    1    0    0    ## j >= 0
   1    0   -1    1   -1    ## -j+N-1 >= 0

# ----------------------------------------------  1.2 Scattering
SCATTERING
5 10 5 2 0 1
# e/i| c1   c2   c3   c4   c5 |  i    j |  N |  1  
   0   -1    0    0    0    0    0    0    0    0    ## c1 == 0
   0    0   -1    0    0    0    1    0    0    0    ## c2 == i
   0    0    0   -1    0    0    0    0    0    0    ## c3 == 0
   0    0    0    0   -1    0    0    1    0    0    ## c4 == j
   0    0    0    0    0   -1    0    0    0    0    ## c5 == 0

# ----------------------------------------------  1.3 Access
WRITE
3 8 3 2 0 1
# e/i| A1   [1]  [2]|  i    j |  N |  1  
   0   -1    0    0    0    0    0    1    ## A1
   0    0   -1    0    1    0    0    0    ## [1] == i
   0    0    0   -1    0    1    0    0    ## [2] == j

# ----------------------------------------------  1.4 Body
# Statement body is provided
1
<body>
# Number of original iterators
2
# Original iterators
i j
# Body expression
C[i][j] = 0.0;
</body>


# =============================================== Statement 2
# Number of relations describing the statement:
6

# ----------------------------------------------  2.1 Domain
DOMAIN
6 6 3 0 0 1
# e/i|  i    j    k |  N |  1  
   1    1    0    0    0    0    ## i >= 0
   1   -1    0    0    1   -1    ## -i+N-1 >= 0
   1    0    1    0    0    0    ## j >= 0
   1    0   -1    0    1   -1    ## -j+N-1 >= 0
   1    0    0    1    0    0    ## k >= 0
   1    0    0   -1    1   -1    ## -k+N-1 >= 0

# ----------------------------------------------  2.2 Scattering
SCATTERING
7 13 7 3 0 1
# e/i| c1   c2   c3   c4   c5   c6   c7 |  i    j    k |  N |  1  
   0   -1    0    0    0    0    0    0    0    0    0    0    0    ## c1 == 0
   0    0   -1    0    0    0    0    0    1    0    0    0    0    ## c2 == i
   0    0    0   -1    0    0    0    0    0    0    0    0    0    ## c3 == 0
   0    0    0    0   -1    0    0    0    0    1    0    0    0    ## c4 == j
   0    0    0    0    0   -1    0    0    0    0    0    0    1    ## c5 == 1
   0    0    0    0    0    0   -1    0    0    0    1    0    0    ## c6 == k
   0    0    0    0    0    0    0   -1    0    0    0    0    0    ## c7 == 0

# ----------------------------------------------  2.3 Access
WRITE
3 9 3 3 0 1
# e/i| A1   [1]  [2]|  i    j    k |  N |  1  
   0   -1    0    0    0    0    0    0    1    ## A1
   0    0   -1    0    1    0    0    0    0    ## [1] == i
   0    0    0   -1    0    1    0    0    0    ## [2] == j

READ
3 9 3 3 0 1
# e/i| A1   [1]  [2]|  i    j    k |  N |  1  
   0   -1    0    0    0    0    0    0    1    ## A1
   0    0   -1    0    1    0    0    0    0    ## [1] == i
   0    0    0   -1    0    1    0    0    0    ## [2] == j

READ
3 9 3 3 0 1
# e/i| A2   [1]  [2]|  i    j    k |  N |  1  
   0   -1    0    0    0    0    0    0    2    ## A2
   0    0   -1    0    1    0    0    0    0    ## [1] == i
   0    0    0   -1    0    0    1    0    0    ## [2] == k

READ
3 9 3 3 0 1
# e/i| A3   [1]  [2]|  i    j    k |  N |  1  
   0   -1    0    0    0    0    0    0    3    ## A3
   0    0   -1    0    0    0    1    0    0    ## [1] == k
   0    0    0   -1    0    1    0    0    0    ## [2] == j

# ----------------------------------------------  2.4 Body
# Statement body is provided
1
<body>
# Number of original iterators
3
# Original iterators
i j k
# Body expression
C[i][j] = C[i][j] + A[i][k] * B[k][j];
</body>


# =============================================== Extensions

</OpenScop>

