In [1]:
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on 20181217

@author: zhangji
"""

%pylab inline
pylab.rcParams['figure.figsize'] = (25, 11)
fontsize = 40

import os
import glob
import numpy as np
import scipy as sp
import scipy.misc
import pandas as pd
import re
from scanf import scanf
from matplotlib import pyplot as plt
import matplotlib.ticker as mtick
import matplotlib
from mpl_toolkits.axes_grid1.inset_locator import inset_axes, zoomed_inset_axes
from mpl_toolkits.mplot3d import Axes3D, axes3d
from sympy import symbols, simplify, series, exp
from sympy.matrices import Matrix
from sympy.solvers import solve
from scipy.optimize import leastsq, curve_fit
from scipy.interpolate import interp1d
from scipy.io import loadmat, savemat
from IPython.display import display, HTML
from scipy import interpolate
# import support_fun as spf
from matplotlib import animation, rc
from IPython.display import HTML
rc('animation', html='html5')
from tqdm import tqdm_notebook as tqdm
import natsort 
from shutil import copyfile

PWD = os.getcwd()
font = {'size': 20}
matplotlib.rc('font', **font)
np.set_printoptions(linewidth=90, precision=5)


Populating the interactive namespace from numpy and matplotlib

In [2]:
def set_axes_equal(ax):
    '''Make axes of 3D plot have equal scale so that spheres appear as spheres,
    cubes as cubes, etc..  This is one possible solution to Matplotlib's
    ax.set_aspect('equal') and ax.axis('equal') not working for 3D.

    Input
      ax: a matplotlib axis, e.g., as output from plt.gca().
    '''

    limits = np.array([
        ax.get_xlim3d(),
        ax.get_ylim3d(),
        ax.get_zlim3d(),
    ])

    origin = np.mean(limits, axis=1)
    radius = 0.5 * np.max(np.abs(limits[:, 1] - limits[:, 0]))
    ax.set_xlim3d([origin[0] - radius, origin[0] + radius])
    ax.set_ylim3d([origin[1] - radius, origin[1] + radius])
    ax.set_zlim3d([origin[2] - radius, origin[2] + radius])
    
def update_lines(num, ecoli_nodes_list, line_list):
    for line in line_list:
        line.set_data([], [])
        line.set_3d_properties([])
    line = line_list[num]
    ecoli_nodes = ecoli_nodes_list[num]
    line.set_data(ecoli_nodes[:, 0:2].T)
    line.set_3d_properties(ecoli_nodes[:, 2])
    return line

In [6]:
# dir_name = 'ecoli_shear1e2'
# eval_dt_list = [0.5, 2, 4, 8]
# update_order_list = [1, 2, 3, 4, 5]

# dir_name = 'ecoli_shear1c2'
# eval_dt_list = [0.1, 0.05, 0.01,]
# update_order_list = [1, 2, 3, 4, 5]

dir_name = 'ecoli_shear1d2'
eval_dt_list = [1, 10, 100]
update_order_list = [1, 2, 3, 4, 5]

file_name_list = []
for eval_dt_i in eval_dt_list:
    for update_order_i in update_order_list:
        job_name = 'eq_dt%0.3f_O%1d' % (eval_dt_i, update_order_i)
        file_name_list.append(job_name)
        
for file_handle in file_name_list:
    print(file_handle)
    t_dir = os.path.join(PWD, dir_name, file_handle)
    mat_names = glob.glob('%s/%s_*.mat' % (t_dir, file_handle))

    # fig = plt.figure(figsize=(15, 10))
    fig = plt.figure(figsize=(20, 15))
    fig.patch.set_facecolor('white')
    ax = axes3d.Axes3D(fig)
    Writer = animation.writers['ffmpeg']
    writer = Writer(fps=25, bitrate=1800, metadata=dict(artist='ZhangJi', title=file_handle, copyright='MIT'))

    line_list = []
    ecoli_nodes_list = []
    for mati in natsort.natsorted(mat_names):
        mat_contents = loadmat(mati)
        ecoli_U = mat_contents['ecoli_U']
        ecoli_norm = mat_contents['ecoli_norm']
        ecoli_center = mat_contents['ecoli_center']
        ecoli_nodes = mat_contents['ecoli_nodes']
        ecoli_u = mat_contents['ecoli_u']
        ecoli_f = mat_contents['ecoli_f']
    #     ax.quiver(ecoli_nodes[:, 0], ecoli_nodes[:, 1], ecoli_nodes[:, 2], ecoli_f[:, 0], ecoli_f[:, 1], ecoli_f[:, 2])
        tmp_line = ax.plot(ecoli_nodes[:, 0], ecoli_nodes[:, 1], ecoli_nodes[:, 2], '-b')
        line_list.append(tmp_line[0])
        ecoli_nodes_list.append(ecoli_nodes)
    #     set_axes_equal(ax)

    ax.set_xlim3d([-5, 5])
    ax.set_xlabel('X')
    ax.set_ylim3d([-5, 5])
    ax.set_ylabel('Y')
    ax.set_zlim3d([-5, 5])
    ax.set_zlabel('Z')
    ax.set_title(file_handle)

    line_ani = animation.FuncAnimation(fig, update_lines, len(line_list), fargs=(ecoli_nodes_list, line_list, ),
                                       interval=200, blit=False)
    line_ani.save(os.path.join(PWD, dir_name, file_handle + '.mp4'), writer=writer)
    copyfile(os.path.join(PWD, dir_name, file_handle, file_handle + '.mat'), os.path.join(PWD, dir_name, file_handle + '.mat'))
    copyfile(os.path.join(PWD, dir_name, file_handle, file_handle + '.txt'), os.path.join(PWD, dir_name, file_handle + '.txt'))
    line_ani


eq_dt1.000_O1
eq_dt1.000_O2
eq_dt1.000_O3
eq_dt1.000_O4
eq_dt1.000_O5
eq_dt10.000_O1
eq_dt10.000_O2
eq_dt10.000_O3
eq_dt10.000_O4
eq_dt10.000_O5
eq_dt100.000_O1
eq_dt100.000_O2
eq_dt100.000_O3
eq_dt100.000_O4
eq_dt100.000_O5

In [18]:
from shutil import copyfile