def test_animate_multiple_solutions(): # Must delete all archives so we really recompute them # and get their names from the pulse function for filename in glob.glob('.*.npz') + glob.glob('tmp_*.png'): os.remove(filename) archives = [] umin = umax = 0 from wave1D_dn_vc import pulse for spatial_resolution in [20, 45, 100]: archive_name, u_min, u_max = pulse( Nx=spatial_resolution, pulse_tp='gaussian') archives.append(archive_name) if u_min < umin: umin = u_min if u_max > umax: umax = u_max print archives details = animate_multiple_solutions( archives, umin, umax, show=False) # Round data: for i in range(len(details)): for j in range(len(details[i])): if details[i][j] == 'coarsest': continue details[i][j][0] = round(details[i][j][0], 4) if isinstance(details[i][j][2], float): details[i][j][2] = round(details[i][j][2], 4) expected = [['coarsest', [0.05, 2, 0.25], [0.05, 5, None]], ['coarsest', [0.1, 4, 0.5], [0.1, 10, None]], ['coarsest', [0.15, 6, 0.75], [0.15, 15, None]], ['coarsest', [0.2, 9, None], [0.2, 20, None]], ['coarsest', [0.25, 11, 0.25], [0.25, 25, None]], ['coarsest', [0.3, 13, 0.5], [0.3, 30, None]], ['coarsest', [0.35, 15, 0.75], [0.35, 35, None]], ['coarsest', [0.4, 18, None], [0.4, 40, None]], ['coarsest', [0.45, 20, 0.25], [0.45, 45, None]], ['coarsest', [0.5, 22, 0.5], [0.5, 50, None]], ['coarsest', [0.55, 24, 0.75], [0.55, 55, None]], ['coarsest', [0.6, 27, None], [0.6, 60, None]], ['coarsest', [0.65, 29, 0.25], [0.65, 65, None]], ['coarsest', [0.7, 31, 0.5], [0.7, 70, None]], ['coarsest', [0.75, 33, 0.75], [0.75, 75, None]], ['coarsest', [0.8, 36, None], [0.8, 80, None]], ['coarsest', [0.85, 38, 0.25], [0.85, 85, None]], ['coarsest', [0.9, 40, 0.5], [0.9, 90, None]], ['coarsest', [0.95, 42, 0.75], [0.95, 95, None]], ['coarsest', [1.0, 45, None], [1.0, 100, None]], ['coarsest', [1.05, 47, 0.25], [1.05, 105, None]], ['coarsest', [1.1, 49, 0.5], [1.1, 110, None]], ['coarsest', [1.15, 51, 0.75], [1.15, 115, None]], ['coarsest', [1.2, 54, None], [1.2, 120, None]], ['coarsest', [1.25, 56, 0.25], [1.25, 125, None]], ['coarsest', [1.3, 58, 0.5], [1.3, 130, None]], ['coarsest', [1.35, 60, 0.75], [1.35, 135, None]], ['coarsest', [1.4, 63, None], [1.4, 140, None]], ['coarsest', [1.45, 65, 0.25], [1.45, 145, None]], ['coarsest', [1.5, 67, 0.5], [1.5, 150, None]], ['coarsest', [1.55, 69, 0.75], [1.55, 155, None]], ['coarsest', [1.6, 72, None], [1.6, 160, None]], ['coarsest', [1.65, 74, 0.25], [1.65, 165, None]], ['coarsest', [1.7, 76, 0.5], [1.7, 170, None]], ['coarsest', [1.75, 78, 0.75], [1.75, 175, None]], ['coarsest', [1.8, 81, None], [1.8, 180, None]], ['coarsest', [1.85, 83, 0.25], [1.85, 185, None]], ['coarsest', [1.9, 85, 0.5], [1.9, 190, None]], ['coarsest', [1.95, 87, 0.75], [1.95, 195, None]], ['coarsest', [2.0, 90, None], [2.0, 200, None]]] assert details == expected
def demo_animate_multiple_solutions(): '''First run all simulations. Then animate all from archives.''' # Must delete all archives so we really recompute them # and get their names from the pulse function for filename in glob.glob('.*.npz') + glob.glob('tmp_*.png'): os.remove(filename) archives = [] umin = umax = 0 from wave1D_dn_vc import pulse for spatial_resolution in [20, 55, 200]: archive_name, u_min, u_max = pulse( Nx=spatial_resolution, pulse_tp='gaussian') archives.append(archive_name) if u_min < umin: umin = u_min if u_max > umax: umax = u_max print archives animate_multiple_solutions(archives, umin, umax, show=True) cmd = 'ffmpeg -i tmp_%04d.png -r 25 -vcodec libtheora movie.ogg' os.system(cmd)
def test_animate_multiple_solutions(): # Must delete all archives so we really recompute them # and get their names from the pulse function for filename in glob.glob('.*.npz') + glob.glob('tmp_*.png'): os.remove(filename) archives = [] umin = umax = 0 from wave1D_dn_vc import pulse for spatial_resolution in [20, 45, 100]: archive_name, u_min, u_max = pulse( Nx=spatial_resolution, pulse_tp='gaussian') archives.append(archive_name) if u_min < umin: umin = u_min if u_max > umax: umax = u_max print archives details = animate_multiple_solutions( archives, umin, umax, show=False) # Round data: for i in range(len(details)): for j in range(len(details[i])): if details[i][j] == 'coarsest': continue details[i][j][0] = round(details[i][j][0], 4) if isinstance(details[i][j][2], float): details[i][j][2] = round(details[i][j][2], 4) expected = [ ['coarsest', [0.05, 2, 0.25], [0.05, 5, None]], ['coarsest', [0.1, 4, 0.5], [0.1, 10, None]], ['coarsest', [0.15, 6, 0.75], [0.15, 15, None]], ['coarsest', [0.2, 9, None], [0.2, 20, None]], ['coarsest', [0.25, 11, 0.25], [0.25, 25, None]], ['coarsest', [0.3, 13, 0.5], [0.3, 30, None]], ['coarsest', [0.35, 15, 0.75], [0.35, 35, None]], ['coarsest', [0.4, 18, None], [0.4, 40, None]], ['coarsest', [0.45, 20, 0.25], [0.45, 45, None]], ['coarsest', [0.5, 22, 0.5], [0.5, 50, None]], ['coarsest', [0.55, 24, 0.75], [0.55, 55, None]], ['coarsest', [0.6, 27, None], [0.6, 60, None]], ['coarsest', [0.65, 29, 0.25], [0.65, 65, None]], ['coarsest', [0.7, 31, 0.5], [0.7, 70, None]], ['coarsest', [0.75, 33, 0.75], [0.75, 75, None]], ['coarsest', [0.8, 36, None], [0.8, 80, None]], ['coarsest', [0.85, 38, 0.25], [0.85, 85, None]], ['coarsest', [0.9, 40, 0.5], [0.9, 90, None]], ['coarsest', [0.95, 42, 0.75], [0.95, 95, None]], ['coarsest', [1.0, 45, None], [1.0, 100, None]], ['coarsest', [1.05, 47, 0.25], [1.05, 105, None]], ['coarsest', [1.1, 49, 0.5], [1.1, 110, None]], ['coarsest', [1.15, 51, 0.75], [1.15, 115, None]], ['coarsest', [1.2, 54, None], [1.2, 120, None]], ['coarsest', [1.25, 56, 0.25], [1.25, 125, None]], ['coarsest', [1.3, 58, 0.5], [1.3, 130, None]], ['coarsest', [1.35, 60, 0.75], [1.35, 135, None]], ['coarsest', [1.4, 63, None], [1.4, 140, None]], ['coarsest', [1.45, 65, 0.25], [1.45, 145, None]], ['coarsest', [1.5, 67, 0.5], [1.5, 150, None]], ['coarsest', [1.55, 69, 0.75], [1.55, 155, None]], ['coarsest', [1.6, 72, None], [1.6, 160, None]], ['coarsest', [1.65, 74, 0.25], [1.65, 165, None]], ['coarsest', [1.7, 76, 0.5], [1.7, 170, None]], ['coarsest', [1.75, 78, 0.75], [1.75, 175, None]], ['coarsest', [1.8, 81, None], [1.8, 180, None]], ['coarsest', [1.85, 83, 0.25], [1.85, 185, None]], ['coarsest', [1.9, 85, 0.5], [1.9, 190, None]], ['coarsest', [1.95, 87, 0.75], [1.95, 195, None]], ['coarsest', [2.0, 90, None], [2.0, 200, None]], ] assert details == expected
import wave1D_dn_vc as wave import os, sys, shutil, glob for pulse_tp in 'gaussian', 'cosinehat', 'half-cosinehat', 'plug': for Nx in 40, 80, 160: for sf in 2, 4: if sf == 1 and Nx > 40: continue # homogeneous medium with C=1: Nx=40 enough print 'wave1D.pulse:', pulse_tp, Nx, sf wave.pulse(C=1, Nx=Nx, animate=False, # just hardcopies version='vectorized', T=2, loc='left', pulse_tp=pulse_tp, slowness_factor=sf, medium=[0.7, 0.9], skip_frame = 1, sigma=0.05)
import sys, os, glob path = os.path.join(os.pardir, os.pardir, os.pardir, os.pardir, 'wave', 'src-wave', 'wave1D') #print path, glob.glob(path + '/w*') sys.path.insert(0, path) from wave1D_dn_vc import pulse pulse_tp = sys.argv[1] C = float(sys.argv[2]) pulse(pulse_tp=pulse_tp, C=C, Nx=100, animate=False, slowness_factor=4)