From 3250edd01841acfc27d1a6cef099a7109f1795d7 Mon Sep 17 00:00:00 2001 From: Simon Collignon <scllgnn@gmail.com> Date: Tue, 20 Apr 2021 13:20:11 +0200 Subject: [PATCH] using the hermitian symmetry of the spectrum with rfft --- __pycache__/main.cpython-39.pyc | Bin 0 -> 1903 bytes main.py | 36 +++++++++++++++++++------------- 2 files changed, 21 insertions(+), 15 deletions(-) create mode 100644 __pycache__/main.cpython-39.pyc diff --git a/__pycache__/main.cpython-39.pyc b/__pycache__/main.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c7c327ec7c3d31eb016f60d8852e45ceb1cff18 GIT binary patch literal 1903 zcmbVM%Woq!7`Hu-OwuHMB-@9!hY{iuB&yYNL)8Lm7xqwk+2vwo6^5}VopxTe9d;X9 zgw)+*B~C~zLQ0NY0CC{7{|C}s0CCEdBM0E~OhOaN348q6-(&3G_prT2qlTdU{N<+~ z?%N3crkVK$GW0eK`6Cd97>*FtGl}q{k|(i2O^ld9EoM@iS+v4z>hLO9Rk+0*R=qO2 zgx2U1tMU4%!7Xl$NgK4A$ZN7CR)2=*GHb9V%qx7AEuRqa14kn?Ms$rYbNdowRPuan z6VVoLvlZU@3bEC%jY4N0-{Li1Q%$zUT33LEo1^tH0#x`R>a-_-9UXRXj$fO62Fvi5 z9fbOyw7-4t*Wt6b`VYQ)`QrDVhW92IbdNfiRs>g4@oYjs;A`ounXstB*n=UrL9LL& z3~x+nKrZnG{tp>Z<Qy}?jOV1J0og^$I7gRwAAOD=zq~L&Z!(Kn&q+YG5O5I6lH1iB znQ?{Am~n-!uw&-*zml`{3GiRZ&GsxgW2#%gvjquhl_$-i+(Mg3naa8ip)9mEGp~Ip zu)rDfl8x&<3R{h8PF7f#GUgP1Eu7Yd^Yl2M#_2j*H*J-zERE{6w*EIR!fxW4?KzKY zCR@ZclNJ%uXiHpkeoQsH=yd-kG7qu^g;yOO?0HAY>kq;x3O&KxFj2fOJQb#i8>GSw z6@0uDNOvH^r0)h{0y39{LBIu1d@kLXtD}_d2n(uC=n|a#1#R*tkVB!%b7E+sHJu8z zhFqjFCrOfHKevRJ^m&fGoUo@bRL9Ios3`HX90xh>eS<^`e*EL%-kaSIBp0$P!#GX4 z`>8*Od7@-@kc1zD98h%+-oL;1&fPce-0Au$<6R%T>m5zK>&?7NMK|`sWG6ezTZ<Nf z_Nob|$#o#eYGdf6Nw#s($@lmL5w}2d<I=5wu()(zz(PSWD%?hj92>eg8M)H$3BDw7 z`RsGt$I5KO)tX<ADq|?a3!<Fz(mg)7FjQ656d5g@lO@<|R997Iw2-Po$v1RiE$YT_ z;us${btzo0H;`97-Df7G+Zw+6Khhm2S7zK-!iyFXt)D9<9B}urvrMfleZmDLSxAi_ zP_zOh5d2i==UeEIQp*#<JEK+DDUn$UsjO?=k|xWA0R&&&rKYB$0g~Jl+>1J<(9zBD z2_+{dVolrYiYQ52tJW9OIK%rY=%hx7>}~9lIuTpi+UfOl{(HUQ%Kga8BxkM)WA291 z9ade*{WM{6hZ@IR!DDOsv6po=a#Pz-D;dPu8C{J%l|`wF!jGVg^orWk*~lVQdaY3x zew6MxQ3!r}KBwgASs4-=Lc!9QntCoHp{wg3n28tjUXL0o^ns*sTQUJvOdWuz(t!x5 yDUZ@8bKxigQ^dsCjZ-#=_&t3A<tsoO?BF^vanT7>w&AQhO@}}?>STqi;lBYsP{&^Y literal 0 HcmV?d00001 diff --git a/main.py b/main.py index 659d363..8681d78 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() -- GitLab