Exemple #1
0
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
    eps_grid = 0.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
    rtol = 1.e-3
    fnamestart = 'ext_initygrad_PtinC_noregrid_rtol%02d' % int(
        np.abs(np.log10(rtol)))

    ####################################
    #choose a directory for saving files
    ####################################
    basedir = os.path.expanduser('~/VEsims/ExactExtensionalFlow/')
    if not os.path.exists(basedir):
        basedir = '/Volumes/ExtMacBree/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)

    Nlist = [20]  #,40,80]
    for N in Nlist:
        gridspc = xextent / N
        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()
Exemple #2
0
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/ExtMacBree/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()
Exemple #3
0
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()