def mySwimmer_TeranFauciShelley(): #################################### #set fixed parameter values first #################################### mu = 1.0 xorigin = 0.0 xextent = 1.3 yorigin = 0.05 yextent = 0.9 origin = (xorigin,yorigin) #set time parameters, save data every time step #note that I do not control the time step in the solver!! # my time step only tells me where I will save data t0 = 0; totalTime = 10.0; dt = 5.e-2; initTime=1.0 #need this to be a full swimmer cycle -- see curvature forces in code #make swimmer a = 0.16 w = -2*np.pi #swimmer period is 1 lam = 2.5*np.pi L = 0.6 myForces = forces_Viscoelasticity.calcForcesSwimmerTFS forcedocstring = 'Swimmer curvature forces according to Teran, Fauci, and Shelley: forces_Viscoelasticity.calcForcesSwimmerTFS' forcedict = dict(a=a, w=w, t=0, lam=lam, L=L) # solver options for viscoelastic flow stressflag=1 regridding=1 regriddict = dict(timecrit=0.4,edgecrit=None,detcrit=None,scalefactor=2,addpts=0) vfname = 'visco_PtinC_changingNp_fixedregrid004_scalefactor2_addpts0_' #################################### #Set up dictionaries for parameters... #################################### pdict = dict( mu=mu, forcedocstring=forcedocstring) wdict = dict(pdict=pdict,myForces=myForces) pdict = None #to avoid heisenbugs during refactor #################################### #choose a directory for saving files #################################### basedir = os.path.expanduser('~/VEsims/SwimmerRefactored/TFS_FinalParams/') if not os.path.exists(basedir): basedir = '/Volumes/LCD/VEsims/SwimmerRefactored/TFS_FinalParams/' if not os.path.exists(basedir): basedir = '/scratch03/bcummins/mydata/ve/SwimmerRefactored/TFS_FinalParams/' if not os.path.exists(basedir): print('Choose a different directory for saving files') raise(SystemExit) #################################### #loop over parameters #################################### Wilist = [1.0]#[0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75]#, 2.0, 2.5, 3.0]#[0.1,0.08,0.06,0.04,0.02] Nlist = [54,108, 216]#[20,40,80,160] Nplist = [26]#[26, 50, 98] Np = Nplist[0] h = L/(Np-1) Kcurvlist = [0.2]#[0.2, 0.2/3, 0.2/4] Kcurv = Kcurvlist[0] Klist = [40.] #[40.,20.,10.] K = Klist[0] xr = np.array([h]) forcedict['h'] = h forcedict['xr'] = xr forcedict['Np'] = Np forcedict['Kcurv'] = Kcurv forcedict['K'] = K eps_obj = 1.5*h wdict['pdict']['forcedict'] = forcedict wdict['pdict']['eps_obj'] = eps_obj #################################### #Stokes flow reference run... #################################### #Set up initial conditions for flat swimmer y00 = 0.5*np.ones((2*Np,)) v = np.arange(0.3,0.3+L+h/2,h) y00[:-1:2] = v #Initialize flat swimmer in Stokes flow (ramp up to emergent swimming shape) print('Initialize swimmer in Stokes flow...') StateSave = eVE.mySolver(eVE.stokesFlowUpdater,y00,t0,dt,initTime,wdict) inits = np.asarray(StateSave['fpts'])[-1,:] #run the ode solver for Stokes flow print('Swimmer in Stokes flow...') StateSave = eVE.mySolver(eVE.stokesFlowUpdater,inits,initTime,dt,totalTime+initTime,wdict) #save the output StateSave['pdict']=wdict['pdict'] F = open( basedir+'stokes_Kcurv%03d_K%03d_epsobj%03d_Time%02d.pickle' % (int(round(forcedict['Kcurv']*100)),int(round(forcedict['K'])),int(round(eps_obj*1000)),int(totalTime+initTime)), 'w' ) Pickler(F).dump(StateSave) F.close() for k in range(len(Nlist)): print(h,xextent/Nlist[k]) #################################### #Oldroyd-B flow reference run... #################################### #assign and record parameters N = Nlist[k] gridspc = xextent/N eps_grid = eps_obj#2*gridspc M = int(np.ceil(yextent/gridspc)) wdict['pdict']['N'] = N wdict['pdict']['M'] = M wdict['pdict']['gridspc'] = gridspc wdict['pdict']['origin'] = origin wdict['pdict']['eps_grid'] = eps_grid #make the initial grid l0 = mygrids.makeGridCenter(N,M,gridspc,origin) P0 = np.zeros((N,M,2,2)) P0[:,:,0,0] = 1.0 P0[:,:,1,1] = 1.0 # set initial conditions for VE simulations y0 = np.append(np.append(inits, l0.flatten()),P0.flatten()) for Wi in Wilist: #assign and record params beta = 1./(2*Wi) wdict['pdict']['Wi'] = Wi wdict['pdict']['beta'] = beta #Viscoelastic run print('Swimmer in VE flow, N = %02d, Wi = %f' % (N,Wi)) StateSave = eVE.mySolver(eVE.viscoElasticUpdater_force,y0,initTime,dt,totalTime+initTime,wdict,stressflag,regridding,regriddict) #save the output StateSave['pdict']=wdict['pdict'] StateSave['regriddict']=regriddict F = open(basedir+vfname+'Kcurv%03d_K%03d_epsobj%03d_epsgrid%03d_N%03d_Wi%04d_Time%02d.pickle' % (int(round(forcedict['Kcurv']*100)),int(round(forcedict['K'])),int(round(eps_obj*1000)),int(round(eps_grid*1000)),N,int(round(Wi*100)),int(totalTime+initTime)), 'w' ) Pickler(F).dump(StateSave) F.close()
def myExtension_initygrad(): #################################### #set fixed parameter values first #################################### mu = 1.0 Wi = 1.2 beta = 1. / (2*Wi) xorigin = -1.0 xextent = 2.0 yorigin = -4.0 yextent = 8.0 origin = (xorigin,yorigin) U = 2.0/Wi #set time parameters, save data every numskip time steps (default is every time step) #note that I do not control the time step in the solver!! # my time step only determines the maximum time step allowed t0 = 0; totalTime = 3.0; dt = 5.e-2 myVelocity = bgvels_Viscoelasticity.Extension veldocstring = 'Purely extensional flow near hyperbolic stagnation point: bgvels_Viscoelasticity.Extension' # solver options for viscoelastic flow stressflag=1 regridding=0 #################################### #choose a directory for saving files #################################### basedir = os.path.expanduser('~/VEsims/ExactExtensionalFlow/') if not os.path.exists(basedir): basedir = '/Volumes/LCD/VEsims/ExactExtensionalFlow/' if not os.path.exists(basedir): basedir = '/scratch03/bcummins/mydata/ve/ExactExtensionalFlow/' if not os.path.exists(basedir): print('Choose a different directory for saving files') raise(SystemExit) for rtol in [1.e-3,1.e-4,1.e-5,1.e-6]: fnamestart = 'ext_initygrad_PtinC_noregrid_rtol%02d' % int(np.abs(np.log10(rtol))) Nlist = [20]#,40,80] for N in Nlist: gridspc = xextent/N eps_grid = 2*gridspc M = int(np.ceil(yextent/gridspc)) #################################### #Put parameters into dictionaries... #################################### pdict = dict( N = N, M = M, U=U, gridspc = gridspc, origin = origin, mu = mu, Wi = Wi, beta=beta, eps_grid=eps_grid, veldocstring=veldocstring) wdict = dict(pdict=pdict,myVelocity=myVelocity) pdict = None #to avoid heisenbugs during refactor #make the grid l0 = mygrids.makeGridCenter(N,M,gridspc,origin) P0 = np.zeros((N,M,2,2)) P0[:,:,0,0] = (1.0 +l0[:,:,1]**2)**(1.0/(2*Wi*U) - 1.0) + 1.0/(1.0-2*Wi*U) P0[:,:,1,1] = 1.0 print(P0.shape) y0 = np.append(l0.flatten(),P0.flatten()) #Viscoelastic run print('Extensional flow, initial y gradient, N = %02d' % N) StateSave = eVE.mySolver(eVE.viscoElasticUpdater_bgvel,y0,t0,dt,totalTime,wdict,stressflag,regridding,rtol=rtol) #save the output StateSave['pdict']=wdict['pdict'] StateSave['dt']=dt fname = basedir + fnamestart F = open( fname+'_eps%03d_N%03d_Wi%02d_Time%02d.pickle' % (int(round(eps_grid*1000)),N,int(round(Wi)),int(round(totalTime))), 'w' ) Pickler(F).dump(StateSave) F.close()
def mySwimmer_sine(): #################################### #set fixed parameter values first #################################### mu = 1.0 xorigin = 0.0 xextent = 1.6 yorigin = 0.1 yextent = 0.8 origin = (xorigin,yorigin) #set time parameters, save data every time step #note that I do not control the time step in the solver!! # my time step only tells me where I will save data t0 = 0; totalTime = 5.0; dt = 5.e-2; initTime=1.0 #need this to be a full swimmer cycle -- see curvature forces in code #make swimmer a = 0.16 w = 2*np.pi #swimmer period is 1 lam = 2.5*np.pi Np = 20 L = 0.78 h = L/(Np-1) K =40.0 xr = np.array([h]) forcedict = dict(a=a, w=w, t=0, Kcurv=0.01, lam=lam, Np=Np, h=h, L=L, K=K, xr=xr) eps_obj = 2*h myForces = forces_Viscoelasticity.calcForcesSwimmer forcedocstring = 'Swimmer curvature forces according to linearly increasing sine wave: forces_Viscoelasticity.calcForcesSwimmer' # solver options for viscoelastic flow stressflag=1 regridding=1 regriddict = dict(timecrit=1.0,edgecrit=None,detcrit=None,scalefactor=2,addpts=0) vfname = 'visco_PtinC_fixedregrid010_scalefactor2_addpts0_' #################################### #Put parameters into dictionaries... #################################### pdict = dict( mu=mu, forcedict=forcedict, eps_obj=eps_obj, forcedocstring=forcedocstring) wdict = dict(pdict=pdict,myForces=myForces) pdict = None #to avoid heisenbugs during refactor #################################### #choose a directory for saving files #################################### basedir = os.path.expanduser('~/VEsims/SwimmerRefactored/SineWave/') if not os.path.exists(basedir): basedir = '/Volumes/LCD/VEsims/SwimmerRefactored/SineWave/' if not os.path.exists(basedir): basedir = '/scratch03/bcummins/mydata/ve/SwimmerRefactored/SineWave/' if not os.path.exists(basedir): print('Choose a different directory for saving files') raise(SystemExit) #################################### #Stokes flow reference run... #################################### #Set up initial conditions for flat swimmer y00 = 0.5*np.ones((2*Np,)) v = np.arange(0.3,0.3+L+h/2,h) y00[:-1:2] = v #Initialize flat swimmer in Stokes flow (ramp up to emergent swimming shape) print('Initialize swimmer in Stokes flow...') StateSave = eVE.mySolver(eVE.stokesFlowUpdater,y00,t0,dt,initTime,wdict) inits = np.asarray(StateSave['fpts'])[-1,:] #run the ode solver for Stokes flow print('Swimmer in Stokes flow...') StateSave = eVE.mySolver(eVE.stokesFlowUpdater,inits,initTime,dt,totalTime+initTime,wdict) #save the output StateSave['pdict']=wdict['pdict'] F = open( basedir+'stokes_epsobj%03d_Time%02d.pickle' % (int(round(eps_obj*1000)),int(totalTime+initTime)), 'w' ) Pickler(F).dump(StateSave) F.close() #################################### #now for viscoelastic simulations.... #################################### Wilist = [0.25]#, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75]#, 2.0, 2.5, 3.0]#[0.1,0.08,0.06,0.04,0.02] Nlist = [41] #[20,40,80,160] for N in Nlist: gridspc = xextent/N eps_grid = eps_obj#2*gridspc M = int(np.ceil(yextent/gridspc)) #make the grid l0 = mygrids.makeGridCenter(N,M,gridspc,origin) P0 = np.zeros((N,M,2,2)) P0[:,:,0,0] = 1.0 P0[:,:,1,1] = 1.0 # set initial conditions for VE simulations y0 = np.append(np.append(inits, l0.flatten()),P0.flatten()) for Wi in Wilist: #assign and record VE params beta = 1./(2*Wi) wdict['pdict']['N'] = N wdict['pdict']['M'] = M wdict['pdict']['gridspc'] = gridspc wdict['pdict']['origin'] = origin wdict['pdict']['Wi'] = Wi wdict['pdict']['beta'] = beta wdict['pdict']['eps_grid'] = eps_grid #Viscoelastic run print('Swimmer in VE flow, N = %02d, Wi = %f' % (N,Wi)) StateSave = eVE.mySolver(eVE.viscoElasticUpdater_force,y0,initTime,dt,totalTime+initTime,wdict,stressflag,regridding,regriddict) #save the output StateSave['pdict']=wdict['pdict'] StateSave['regriddict']=regriddict F = open(basedir+vfname+'epsobj%03d_epsgrid%03d_N%03d_Wi%04d_Time%02d.pickle' % (int(round(eps_obj*1000)),int(round(eps_grid*1000)),N,int(round(Wi*100)),int(totalTime+initTime)), 'w' ) Pickler(F).dump(StateSave) F.close()