diff --git a/__pycache__/main.cpython-39.pyc b/__pycache__/main.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c7c327ec7c3d31eb016f60d8852e45ceb1cff18 Binary files /dev/null and b/__pycache__/main.cpython-39.pyc differ diff --git a/main.py b/main.py index 659d363686b912a0c23da6c6e04a462284c90478..8681d78ee9bc4082e1bbe6063f68d66b12e0b114 100644 --- a/main.py +++ b/main.py @@ -11,10 +11,8 @@ xy, dx = linspace(0, 1, nn, retstep=True) c = 2 * random.rand(nn, nn) - 1 -def cahn_hilliard_fdiff(it): - """Cahn-Hilliard integration for it iterations using finite differences mehtod.""" - - global c +def cahn_hilliard_fdiff(it, c): + """Cahn-Hilliard integration for it iterations using finite differences method.""" cp = zeros((nn + 2, nn + 2)) f = zeros((nn + 2, nn + 2)) @@ -31,32 +29,40 @@ def cahn_hilliard_fdiff(it): cp[1:-1, 1:-1] = cp[1:-1, 1:-1] + (dt / dx**2) * (f[0:-2, 1:-1] + f[2:, 1:-1] + f[1:-1, 0:-2] + f[1:-1, 2:] - 4 * f[1:-1, 1:-1]) c = cp[1:-1, 1:-1] - -def cahn_hilliard_spectral(it): - """Cahn-Hilliard integration for it iterations using fft spectral mehtod.""" + return c + - global c +def cahn_hilliard_spectral(it, c): + """Cahn-Hilliard integration for it iterations using fft spectral method.""" # wavenumbers - k = power(2 * pi * fft.fftfreq(nn, d=dx), 2) - kk = array([k,]*nn) + array([k,]*nn).transpose() + kr = power(2 * pi * fft.rfftfreq(nn, d=dx), 2) + kc = power(2 * pi * fft.fftfreq(nn, d=dx), 2) + kk = array([kr,]*nn) + array([kc,]*int((nn/2)+1)) .transpose() for _ in range(it): - c = c + dt * fft.ifft2(-kk * fft.fft2( c**3 - c - a**2 * fft.ifft2(-kk * fft.fft2(c)).real)).real + c = c + dt * fft.irfft2(-kk * fft.rfft2( c**3 - c - a**2 * fft.irfft2(-kk * fft.rfft2(c)).real)).real + + return c if __name__ == "__main__": tic = time.time() - # cahn_hilliard_fdiff(it) - cahn_hilliard_spectral(it) + c1 = cahn_hilliard_fdiff(it, c) + c2 = cahn_hilliard_spectral(it, c) toc = time.time() - tic print(f"Elapsed time is {toc} seconds.") - - plt.contourf(xy, xy, c, cmap="jet") + + fig, (ax1, ax2) = plt.subplots(1, 2) + fig.suptitle(f"Cahn-Hilliard integration for {it} iterations ") + ax1.contourf(xy, xy, c1, cmap="jet") + ax1.set_title("Finite differences method") + ax2.contourf(xy, xy, c2 , cmap="jet") + ax2.set_title("Spectral method") plt.show()