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
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