def constructSolns(circrad,eps,zh,halfzpts,regfunc):
    #spatial parameters
    origin = (-0.05,-0.05) #millimeters
    N = 100
    M = 100
    h = 1.e-3
    X = mygrids.makeGridCenter(N,M,h,origin)
    X = np.reshape(X,(N*M,2))
    #get exact solution
    time = [0]
    freq=10 #Hz
    vh=1.0 #mm/s
    vinf=0.0
    mu=1.85e-8 #kg/(mm s)
    nu=15.7 #mm^2/s
    print('Calculating exact solution...')
    uexact,vexact = ES.circularCylinder2DOscillating(X[:,0],X[:,1],circrad,nu,mu,freq,vh,vinf,time)
    Vexact = np.column_stack([uexact,vexact])
    print('Calculating reg velocity...')
    #get regularized solution
    nodes = np.zeros((2*halfzpts+1,3))
    nodes[:,2] = np.arange(-halfzpts*zh,(halfzpts+1)*zh,zh)
    alph = np.sqrt(1j*2*np.pi*freq/nu)
    rb, f = regfunc(nodes,eps,mu,alph,circrad,vh)
#    print("forces")
#    print(f)
    X = np.column_stack([X,np.zeros(X[:,0].shape)])
    Vreg = rb.calcVel(X,nodes,f)
    zline = np.arange(-halfzpts*zh,(halfzpts+1/10)*zh,zh/10)
    zlinearr = np.zeros((zline.shape[0],3))
    zlinearr[:,2] = zline
    zlinearr[:,0] = circrad
    Vzline = rb.calcVel(zlinearr,nodes,f)
    return X, Vexact, Vreg, Vzline, zline
Пример #2
0
def constructSolns(circrad,eps,zh,halfzpts,regfunc):
    #spatial parameters
    origin = (-0.05,-0.05) #millimeters
    size = (100,100)
    h = 1.e-3
    X = makeGridCenter(size,h,origin)
    #get exact solution
    time = [0]
    freq=10 #Hz
    vh=1.0 #mm/s
    vinf=0.0
    mu=1.85e-8 #kg/(mm s)
    nu=15.7 #mm^2/s
    print('Calculating exact solution...')
    uexact,vexact = ES.circularCylinder2DOscillating(X[:,0],X[:,1],circrad,nu,mu,freq,vh,vinf,time)
    Vexact = np.column_stack([uexact,vexact])
    print('Calculating reg velocity...')
    #get regularized solution
    nodes = np.zeros((2*halfzpts+1,3))
    nodes[:,2] = np.arange(-halfzpts*zh,(halfzpts+1)*zh,zh)
    alph = np.sqrt(1j*2*np.pi*freq/nu)
    rb, f = regfunc(nodes,eps,mu,alph,circrad,vh)
#    print("forces")
#    print(f)
    X = np.column_stack([X,np.zeros(X[:,0].shape)])
    Vreg = rb.calcVel(X,nodes,f)
    zline = np.arange(-halfzpts*zh,(halfzpts+1/10)*zh,zh/10)
    zlinearr = np.zeros((zline.shape[0],3))
    zlinearr[:,2] = zline
    zlinearr[:,0] = circrad
    Vzline = rb.calcVel(zlinearr,nodes,f)
    return X, Vexact, Vreg, Vzline, zline
def varyFreqEps_zVel(pdict,freqlist,epslist):
    u_exact = []
    v_exact = []
    u_negex = [[] for j in range(len(freqlist))]
    v_negex = [[] for j in range(len(freqlist))]
    w_negex = [[] for j in range(len(freqlist))]
    uz_negex= [[] for j in range(len(freqlist))]
    vz_negex= [[] for j in range(len(freqlist))]
    wz_negex= [[] for j in range(len(freqlist))]
    u_gauss = [[] for j in range(len(freqlist))]
    v_gauss = [[] for j in range(len(freqlist))]
    w_gauss = [[] for j in range(len(freqlist))]
    uz_gauss= [[] for j in range(len(freqlist))]
    vz_gauss= [[] for j in range(len(freqlist))]
    wz_gauss= [[] for j in range(len(freqlist))]
    for j in range(len(freqlist)):
        freq = freqlist[j]
        print("Freq=%d" % freq)
        alph=np.sqrt(1j*2*np.pi*freq/pdict['nu'])
        u,v,p=lES.circularCylinder2DOscillating(pdict['obspts'][:,0],pdict['obspts'][:,1],pdict['circrad'],pdict['nu'],pdict['mu'],freq,pdict['vh'],0)
        u_exact.append(u)
        v_exact.append(v)
        for k in range(len(epslist)):
            eps = epslist[k]
            print("Eps=%f" % eps)
            rb, f =   CRE.regSolnNegExpStokesletsOnly(pdict['nodes'],eps,pdict['mu'],alph,pdict['circrad'],pdict['vh'])
            uaxis,udom = regVel(pdict,rb,f)
            u_negex[j].append(udom[:,0])
            v_negex[j].append(udom[:,1])
            w_negex[j].append(udom[:,2])
            uz_negex[j].append(uaxis[:,0])
            vz_negex[j].append(uaxis[:,1])
            wz_negex[j].append(uaxis[:,2])
            rb, f = CRE.regSolnGaussianStokesletsOnly(pdict['nodes'],eps,pdict['mu'],alph,pdict['circrad'],pdict['vh'])
            uaxis,udom = regVel(pdict,rb,f)
            u_gauss[j].append(udom[:,0])
            v_gauss[j].append(udom[:,1])
            w_gauss[j].append(udom[:,2])
            uz_gauss[j].append(uaxis[:,0])
            vz_gauss[j].append(uaxis[:,1])
            wz_gauss[j].append(uaxis[:,2])
    return u_exact, v_exact, u_negex, v_negex, w_negex, uz_negex, vz_negex, wz_negex, u_gauss, v_gauss, w_gauss, uz_gauss, vz_gauss, wz_gauss