numg = 8 * nx * ny * nz # number of Gauss points packNo = range(0, numg, 8) prob = MultiScale(domain=mydomain, ng=numg, useMPI=True, rtol=1e-2) # mpi is activated disp = Vector(0., Solution(mydomain)) t = 0 stress = prob.getCurrentStress() proj = Projector(mydomain) sig = proj(stress) sig_bounda = interpolate(sig, FunctionOnBoundary(mydomain)) traction = matrix_mult(sig_bounda, mydomain.getNormal()) # traction on boundary x = mydomain.getX() bx = FunctionOnBoundary(mydomain).getX() topSurf = whereZero(bx[2] - lz) tractTop = traction * topSurf # traction on top surface forceTop = integrate(tractTop, where=FunctionOnBoundary(mydomain)) # force on top areaTop = integrate(topSurf, where=FunctionOnBoundary(mydomain)) fout = file('./result/resultant.dat', 'w') fout.write('0 ' + str(forceTop[2]) + ' ' + str(areaTop) + '\n') # Dirichlet BC, rough loading ends Dbc = whereZero(x[2]) * [1, 1, 1] + whereZero(x[2] - lz) * [1, 1, 1] Vbc = whereZero(x[2]) * [0, 0, 0] + whereZero(x[2] - lz) * [0, 0, vel] # Neumann BC, constant lateral confining Nbc = whereZero(bx[0]) * [-confining, 0, 0] + whereZero(bx[0] - sup(bx[0])) * [
nx = 8; ny = 8; nz = 16; # discretization mydomain = Brick(l0=lx,l1=ly,l2=lz,n0=nx,n1=ny,n2=nz,order=2,integrationOrder=2) # 20-noded,8-Gauss hexahedral element dim = 3; k = kronecker(mydomain) numg = 8*nx*ny*nz; # number of Gauss points packNo=list(range(0,numg,8)) prob = MultiScale(domain=mydomain,ng=numg,useMPI=True,rtol=1e-2) # mpi is activated disp = Vector(0.,Solution(mydomain)) t=0 stress = prob.getCurrentStress() proj = Projector(mydomain) sig = proj(stress) sig_bounda = interpolate(sig,FunctionOnBoundary(mydomain)) traction = matrix_mult(sig_bounda,mydomain.getNormal()) # traction on boundary x = mydomain.getX() bx = FunctionOnBoundary(mydomain).getX() topSurf = whereZero(bx[2]-lz) tractTop = traction*topSurf # traction on top surface forceTop = integrate(tractTop,where=FunctionOnBoundary(mydomain)) # force on top areaTop = integrate(topSurf,where=FunctionOnBoundary(mydomain)) fout=file('./result/resultant.dat','w') fout.write('0 '+str(forceTop[2])+' '+str(areaTop)+'\n') # Dirichlet BC, rough loading ends Dbc = whereZero(x[2])*[1,1,1]+whereZero(x[2]-lz)*[1,1,1] Vbc = whereZero(x[2])*[0,0,0]+whereZero(x[2]-lz)*[0,0,vel] # Neumann BC, constant lateral confining Nbc = whereZero(bx[0])*[-confining,0,0]+whereZero(bx[0]-sup(bx[0]))*[confining,0,0]+whereZero(bx[1])*[0,-confining,0]+whereZero(bx[1]-sup(bx[1]))*[0,confining,0]