python module integration_c
interface
  subroutine implicit_1Dx(phi, xx, nu, gamma, h, beta, dt, L, use_delj_trick)
    intent(c) implicit_1Dx
    intent(c)
    double precision intent(in, out), dimension(L) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in) :: nu
    double precision intent(in) :: gamma
    double precision intent(in) :: h
    double precision intent(in) :: beta 
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = len(phi)
    integer intent(in) :: use_delj_trick
  end subroutine implicit_1Dx
  subroutine implicit_2Dx(phi, xx, yy, nu1, m12, gamma1, h1, dt, L, M, use_delj_trick, Mstart, Mend)
    intent(c) implicit_2Dx
    intent(c)
    double precision intent(in, out), dimension(L,M) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in) :: nu1
    double precision intent(in) :: m12
    double precision intent(in) :: gamma1
    double precision intent(in) :: h1
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(in) :: use_delj_trick
    integer intent(optional) :: Mstart = 0
    integer intent(optional) :: Mend = shape(phi,1) 
  end subroutine implicit_2Dx
  subroutine implicit_2Dy(phi, xx, yy, nu2, m21, gamma2, h2, dt, L, M, use_delj_trick, Lstart, Lend)
    intent(c) implicit_2Dy
    intent(c)
    double precision intent(in, out), dimension(L,M) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in) :: nu2
    double precision intent(in) :: m21
    double precision intent(in) :: gamma2
    double precision intent(in) :: h2
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(in) :: use_delj_trick
    integer intent(optional) :: Lstart = 0
    integer intent(optional) :: Lend = shape(phi,0) 
  end subroutine implicit_2Dy
  subroutine implicit_precalc_2Dx(phi, ax, bx, cx, dt, L, M, Mstart, Mend)
    intent(c) implicit_precalc_2Dx
    intent(c)
    double precision intent(in, out), dimension(L,M) :: phi
    double precision intent(in), dimension(L,M) :: ax
    double precision intent(in), dimension(L,M) :: bx
    double precision intent(in), dimension(L,M) :: cx
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(optional) :: Mstart = 0
    integer intent(optional) :: Mend = shape(phi,1) 
  end subroutine implicit_precalc_2Dx
  subroutine implicit_precalc_2Dy(phi, ay, by, cy, dt, L, M, Lstart, Lend)
    intent(c) implicit_precalc_2Dy
    intent(c)
    double precision intent(in, out), dimension(L,M) :: phi
    double precision intent(in), dimension(L,M) :: ay
    double precision intent(in), dimension(L,M) :: by
    double precision intent(in), dimension(L,M) :: cy
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(optional) :: Lstart = 0
    integer intent(optional) :: Lend = shape(phi,0) 
  end subroutine implicit_precalc_2Dy
  subroutine implicit_3Dx(phi, xx, yy, zz, nu1, m12, m13, gamma1, h1, dt, L, M, N, use_delj_trick, Mstart, Mend)
    intent(c) implicit_3Dx
    intent(c)
    double precision intent(in,out), dimension(L,M,N) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in), dimension(N) :: zz
    double precision intent(in) :: nu1
    double precision intent(in) :: m12
    double precision intent(in) :: m13
    double precision intent(in) :: gamma1
    double precision intent(in) :: h1
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(in) :: use_delj_trick
    integer intent(optional) :: Mstart = 0
    integer intent(optional) :: Mend = shape(phi,0) 
  end subroutine implicit_3Dx
  subroutine implicit_3Dy(phi, xx, yy, zz, nu2, m21, m23, gamma2, h2, dt, L, M, N, use_delj_trick, Lstart, Lend)
    intent(c) implicit_3Dy
    intent(c)
    double precision intent(in,out), dimension(L,M,N) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in), dimension(N) :: zz
    double precision intent(in) :: nu2
    double precision intent(in) :: m21
    double precision intent(in) :: m23
    double precision intent(in) :: gamma2
    double precision intent(in) :: h2
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(in) :: use_delj_trick
    integer intent(optional) :: Lstart = 0
    integer intent(optional) :: Lend = shape(phi,0) 
  end subroutine implicit_3Dy
  subroutine implicit_3Dz(phi, xx, yy, zz, nu3, m31, m32, gamma3, h3, dt, L, M, N, use_delj_trick, Lstart, Lend)
    intent(c) implicit_3Dz
    intent(c)
    double precision intent(in,out), dimension(L,M,N) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in), dimension(N) :: zz
    double precision intent(in) :: nu3
    double precision intent(in) :: m31
    double precision intent(in) :: m32
    double precision intent(in) :: gamma3
    double precision intent(in) :: h3
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(in) :: use_delj_trick
    integer intent(optional) :: Lstart = 0
    integer intent(optional) :: Lend = shape(phi,0) 
  end subroutine implicit_3Dz
  subroutine implicit_precalc_3Dx(phi, ax, bx, cx, dt, L, M, N, Mstart, Mend)
    intent(c) implicit_precalc_3Dx
    intent(c)
    double precision intent(in, out), dimension(L,M,N) :: phi
    double precision intent(in), dimension(L,M,N) :: ax
    double precision intent(in), dimension(L,M,N) :: bx
    double precision intent(in), dimension(L,M,N) :: cx
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(optional) :: Mstart = 0
    integer intent(optional) :: Mend = shape(phi,0) 
  end subroutine implicit_precalc_3Dx
  subroutine implicit_precalc_3Dy(phi, ay, by, cy, dt, L, M, N, Lstart, Lend)
    intent(c) implicit_precalc_3Dy
    intent(c)
    double precision intent(in, out), dimension(L,M,N) :: phi
    double precision intent(in), dimension(L,M,N) :: ay
    double precision intent(in), dimension(L,M,N) :: by
    double precision intent(in), dimension(L,M,N) :: cy
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(optional) :: Lstart = 0
    integer intent(optional) :: Lend = shape(phi,0) 
  end subroutine implicit_precalc_3Dy
  subroutine implicit_precalc_3Dz(phi, az, bz, cz, dt, L, M, N, Lstart, Lend)
    intent(c) implicit_precalc_3Dz
    intent(c)
    double precision intent(in, out), dimension(L,M,N) :: phi
    double precision intent(in), dimension(L,M,N) :: az
    double precision intent(in), dimension(L,M,N) :: bz
    double precision intent(in), dimension(L,M,N) :: cz
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(optional) :: Lstart = 0
    integer intent(optional) :: Lend = shape(phi,0) 
  end subroutine implicit_precalc_3Dz
  subroutine implicit_4Dx(phi, xx,yy,zz,aa, nu1, m12, m13, m14, gamma1, h1, dt, L, M, N, O, use_delj_trick)
    intent(c) implicit_4Dx
    intent(c)
    double precision intent(in,out), dimension(L,M,N,O) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in), dimension(N) :: zz
    double precision intent(in), dimension(O) :: aa
    double precision intent(in) :: nu1
    double precision intent(in) :: m12
    double precision intent(in) :: m13
    double precision intent(in) :: m14
    double precision intent(in) :: gamma1
    double precision intent(in) :: h1
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(hide), depend(phi) :: O = shape(phi, 3)
    integer intent(in) :: use_delj_trick
  end subroutine implicit_4Dx
  subroutine implicit_4Dy(phi, xx,yy,zz,aa, nu2, m21, m23, m24, gamma2, h2, dt, L, M, N, O, use_delj_trick)
    intent(c) implicit_4Dy
    intent(c)
    double precision intent(in,out), dimension(L,M,N,O) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in), dimension(N) :: zz
    double precision intent(in), dimension(O) :: aa
    double precision intent(in) :: nu2
    double precision intent(in) :: m21
    double precision intent(in) :: m23
    double precision intent(in) :: m24
    double precision intent(in) :: gamma2
    double precision intent(in) :: h2
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(hide), depend(phi) :: O = shape(phi, 3)
    integer intent(in) :: use_delj_trick
  end subroutine implicit_4Dy
  subroutine implicit_4Dz(phi, xx,yy,zz,aa, nu3, m31, m32, m34, gamma3, h3, dt, L, M, N, O, use_delj_trick)
    intent(c) implicit_4Dz
    intent(c)
    double precision intent(in,out), dimension(L,M,N,O) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in), dimension(N) :: zz
    double precision intent(in), dimension(O) :: aa
    double precision intent(in) :: nu3
    double precision intent(in) :: m31
    double precision intent(in) :: m32
    double precision intent(in) :: m34
    double precision intent(in) :: gamma3
    double precision intent(in) :: h3
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(hide), depend(phi) :: O = shape(phi, 3)
    integer intent(in) :: use_delj_trick
  end subroutine implicit_4Dz
  subroutine implicit_4Da(phi, xx,yy,zz,aa, nu4, m41, m42, m43, gamma4, h4, dt, L, M, N, O, use_delj_trick)
    intent(c) implicit_4Da
    intent(c)
    double precision intent(in,out), dimension(L,M,N,O) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in), dimension(N) :: zz
    double precision intent(in), dimension(O) :: aa
    double precision intent(in) :: nu4
    double precision intent(in) :: m41
    double precision intent(in) :: m42
    double precision intent(in) :: m43
    double precision intent(in) :: gamma4
    double precision intent(in) :: h4
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(hide), depend(phi) :: O = shape(phi, 3)
    integer intent(in) :: use_delj_trick
  end subroutine implicit_4Da
  subroutine implicit_5Dx(phi, xx,yy,zz,aa,bb, nu1, m12, m13, m14,m15, gamma1, h1, dt, L,M,N,O,P, use_delj_trick)
    intent(c) implicit_5Dx
    intent(c)
    double precision intent(in,out), dimension(L,M,N,O,P) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in), dimension(N) :: zz
    double precision intent(in), dimension(O) :: aa
    double precision intent(in), dimension(P) :: bb
    double precision intent(in) :: nu1
    double precision intent(in) :: m12
    double precision intent(in) :: m13
    double precision intent(in) :: m14
    double precision intent(in) :: m15
    double precision intent(in) :: gamma1
    double precision intent(in) :: h1
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(hide), depend(phi) :: O = shape(phi, 3)
    integer intent(hide), depend(phi) :: P = shape(phi, 4)
    integer intent(in) :: use_delj_trick
  end subroutine implicit_5Dx
  subroutine implicit_5Dy(phi, xx,yy,zz,aa,bb, nu2, m21, m23, m24, m25, gamma2, h2, dt, L,M,N,O,P, use_delj_trick)
    intent(c) implicit_5Dy
    intent(c)
    double precision intent(in,out), dimension(L,M,N,O,P) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in), dimension(N) :: zz
    double precision intent(in), dimension(O) :: aa
    double precision intent(in), dimension(P) :: bb
    double precision intent(in) :: nu2
    double precision intent(in) :: m21
    double precision intent(in) :: m23
    double precision intent(in) :: m24
    double precision intent(in) :: m25
    double precision intent(in) :: gamma2
    double precision intent(in) :: h2
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(hide), depend(phi) :: O = shape(phi, 3)
    integer intent(hide), depend(phi) :: P = shape(phi, 4)
    integer intent(in) :: use_delj_trick
  end subroutine implicit_5Dy
  subroutine implicit_5Dz(phi, xx,yy,zz,aa,bb, nu3, m31, m32, m34, m35, gamma3, h3, dt, L, M, N, O, P, use_delj_trick)
    intent(c) implicit_5Dz
    intent(c)
    double precision intent(in,out), dimension(L,M,N,O,P) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in), dimension(N) :: zz
    double precision intent(in), dimension(O) :: aa
    double precision intent(in), dimension(P) :: bb
    double precision intent(in) :: nu3
    double precision intent(in) :: m31
    double precision intent(in) :: m32
    double precision intent(in) :: m34
    double precision intent(in) :: m35
    double precision intent(in) :: gamma3
    double precision intent(in) :: h3
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(hide), depend(phi) :: O = shape(phi, 3)
    integer intent(hide), depend(phi) :: P = shape(phi, 4)
    integer intent(in) :: use_delj_trick
  end subroutine implicit_5Dz
  subroutine implicit_5Da(phi, xx,yy,zz,aa,bb, nu4, m41, m42, m43, m45, gamma4, h4, dt, L, M, N, O, P, use_delj_trick)
    intent(c) implicit_5Da
    intent(c)
    double precision intent(in,out), dimension(L,M,N,O,P) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in), dimension(N) :: zz
    double precision intent(in), dimension(O) :: aa
    double precision intent(in), dimension(P) :: bb
    double precision intent(in) :: nu4
    double precision intent(in) :: m41
    double precision intent(in) :: m42
    double precision intent(in) :: m43
    double precision intent(in) :: m45
    double precision intent(in) :: gamma4
    double precision intent(in) :: h4
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(hide), depend(phi) :: O = shape(phi, 3)
    integer intent(hide), depend(phi) :: P = shape(phi, 4)
    integer intent(in) :: use_delj_trick
  end subroutine implicit_5Da
  subroutine implicit_5Db(phi, xx,yy,zz,aa,bb, nu5, m51, m52, m53, m54, gamma5, h5, dt, L, M, N, O, P, use_delj_trick)
    intent(c) implicit_5Db
    intent(c)
    double precision intent(in,out), dimension(L,M,N,O,P) :: phi
    double precision intent(in), dimension(L) :: xx
    double precision intent(in), dimension(M) :: yy
    double precision intent(in), dimension(N) :: zz
    double precision intent(in), dimension(O) :: aa
    double precision intent(in), dimension(P) :: bb
    double precision intent(in) :: nu5
    double precision intent(in) :: m51
    double precision intent(in) :: m52
    double precision intent(in) :: m53
    double precision intent(in) :: m54
    double precision intent(in) :: gamma5
    double precision intent(in) :: h5
    double precision intent(in) :: dt
    integer intent(hide), depend(phi) :: L = shape(phi, 0)
    integer intent(hide), depend(phi) :: M = shape(phi, 1)
    integer intent(hide), depend(phi) :: N = shape(phi, 2)
    integer intent(hide), depend(phi) :: O = shape(phi, 3)
    integer intent(hide), depend(phi) :: P = shape(phi, 4)
    integer intent(in) :: use_delj_trick
  end subroutine implicit_5Db
end interface
end python module integration_c