code: def matrc(
      nz,
      np,
      iz,
      dz,
      k0,
      rhob,
      alpw,
      alpb,
      ksq,
      ksqw,
      ksqb,
      f1,
      f2,
      f3,
      r1,
      r2,
      r3,
      s1,
      s2,
      s3,
      pd1,
      pd2,
      izsrf,
  ):
      a1 = k0 * k0 / 6.0
      a2 = 2.0 * k0 * k0 / 3.0
      a3 = k0 * k0 / 6.0
      cfact = 0.5 / (dz * dz)
      dfact = 1.0 / 12.0
      for i in range(0, iz):
          f1[i] = 1.0 / alpw[i]
          f2[i] = 1.0
          f3[i] = alpw[i]
          ksq[i] = ksqw[i]
      ii = 0
      for i in range(iz, nz + 2):
          f1[i] = rhob[ii] / alpb[ii]
          f2[i] = 1.0 / rhob[ii]
          f3[i] = alpb[ii]
          ksq[i] = ksqb[ii]
          ii += 1
      for i in range(1, nz + 1):
          #     Discretization by Galerkin's method.
          c1 = cfact * f1[i] * (f2[i - 1] + f2[i]) * f3[i - 1]
          c2 = (
              -cfact
              * f1[i]
              * (f2[i - 1] + 2.0 * f2[i] + f2[i + 1])
              * f3[i]
          )
          c3 = cfact * f1[i] * (f2[i] + f2[i + 1]) * f3[i + 1]
          d1 = c1 + dfact * (ksq[i - 1] + ksq[i])
          d2 = c2 + dfact * (
              ksq[i - 1] + complex(6.0, 0) * ksq[i] + ksq[i + 1]
          )
          d3 = c3 + dfact * (ksq[i] + ksq[i + 1])
          for j in range(0, np):
              r1[j][i] = a1 + pd2[j] * d1
              r2[j][i] = a2 + pd2[j] * d2
              r3[j][i] = a3 + pd2[j] * d3
              s1[j][i] = a1 + pd1[j] * d1
              s2[j][i] = a2 + pd1[j] * d2
              s3[j][i] = a3 + pd1[j] * d3
      #     The entries above the surface.
      for j in range(0, np):
          for i in range(0, izsrf):
              r1[j][i] = 0.0
              r2[j][i] = 1.0
              r3[j][i] = 0.0
              s1[j][i] = 0.0
              s2[j][i] = 0.0
              s3[j][i] = 0.0
      #     The matrix decomposition.
      for j in range(0, np):
          for i in range(1, nz + 1):
              rfact = complex(1.0, 0) / (
                  r2[j][i] - r1[j][i] * r3[j][i - 1]
              )
              r1[j][i] = r1[j][i] * rfact
              r3[j][i] = r3[j][i] * rfact
              s1[j][i] = s1[j][i] * rfact
              s2[j][i] = s2[j][i] * rfact
              s3[j][i] = s3[j][i] * rfact
  
file_path: pythran/pythran/tests/cases/ramsurf.py
imports: import cmath
label_desc: Use image node_id 7 for calling a global function with example usage: matrc(nz, np, iz, dz, k0, rhob, alpw, alpb, ksq, ksqw, ksqb, f1, f2, f3, r1, r2, r3, s1, s2, s3, pd1, pd2, izsrf) without return types