{ Air dryer A thin wet coating is applied to a glass substrate. It then moves under a box or hood where (warm) air blows, generally, co- or counter-current to the movement of the substrate. We ultimately want to estimate the drying rate, and the time-temperature-solvent vapor exposure of the coating. Is the substrate motion significant? What are the effects of dryer design & operating parameters? Simulation nuts & bolts This simulation is based on the example 3D_FLOWBOX.PDE. We convert to the specific geometry of the lab scale box. If necessary we can bevel the corners of inlets & outlet holes to avoid discontinuities in the flow, as in the example, but for now they are square. The solution uses a "penalty pressure", in which the pressure variable is used to guarantee mass conservation. Starting with version 2 this is cast as a time-dependent problem which does not allow STAGED commands. The steady state problem was having a hard time starting with v=0 initial condition, and the Reynolds number is probably too high for a stable steady-state solution. Ultimately we should turn on grid refinement although this slows execution significantly. To accommodate the round inlet holes, and the limitations of FlexPDE in 3D problems (extrusion), we use the following axis assignment: z = direction of flow and substrate travel; x = width, with x=0 as the centerline of the box and positive x moving toward the "back" of box; y = height, y=0 at the glass or coating surface and positive moving from bottom to top. I moved the exit slot to the end of the box rather than the top, this probably makes little difference in real life. This is apparently required to accommodate extrusion in 3D. We could simulate half the box width due to symmetry, but defining the gas entry holes gets more complicated. Maybe later. Units are cgs (L=cm, t=sec, visc=Poise, pressure=dyne/cm2, surf tens=dyne/cm, diffusivity=cm2/s, T=deg K) v1 - steady state version, Re probably too high for this approach (see viscous.pde, Re should be < 40) v2 - time dependent, specify Pin - but we don't know Pin in practice v2a - specify velocity at inlet plane as average based on flow rate & inlet hole geometry. allows specifying an overall gas flow rate into the system; density dens is constant for now, which may be OK } title 'Dryer box' coordinates cartesian3 variables v(0.1) = vector(vx,vy,vz) ! The velocities, cm/s, treated as a vector to keep the EQUATIONS section below compact p(100) ! Pressure, dyne/cm2 ! Later we can add solvent vapor concentration & temperature select regrid=off ! Reduce computational time at expense of smoothness & accuracy definitions { Geometry - the x-y plane is the plane of the substrate extent; z is normal (height above substrate); x is the direction of substrate travel, x=0 where the gas enters the drying zone (i.e. x<0 upstream of the box; y=0 is the centerline of the simulation; } long = 16.4 ! cm long in direction of flow & substrate motion, z direction wide = 10.8 ! cm wide, x direction (x=0 is the centerline of the box, accounted below) high = 4.5 ! cm high inside box, y direction wall = 0.6 ! thickness of box walls, cm b = 0.05 ! dimension for beveling inlet & outlet holes, cm (probably use this later) xoutL = 8.4 youtL = 0.8 ! dimensions of gas exit slot on outside of box, cm rc = 0.3 ! radius of inlet holes on outside of box, cm nholes = 26 ! Specify the coordinates for the centers of the holes: xc = array(-4.8, -3.6, -2.4, -1.2, 0, 1.2, 2.4, 3.6, 4.8, -4.2, -3, -1.8, -0.6, 0.6, 1.8, 3, 4.2, -4.8, -3.6, -2.4, -1.2, 0, 1.2, 2.4, 3.6, 4.8) yc = array(0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 3,3,3,3,3,3,3,3,3) { Specify physical & process parameters for the simulation } vsub = 0 ! substrate speed in x direction, cm/s TK = 298.15 ! temperature. deg K R = 8.3145e7 ! gas constant in erg/degK-mol Pave=1013250 dens = 29*Pave/R/TK ! air density, g/cm3 visc = -4e-10*TK^2+7e-07*TK+7e-6 ! air viscosity, Poise Qcfm = swage(t-0.1, 0, 2, 0.01) ! overall flow into the box v_ave_in = (Qcfm*(12*2.54)^3/60)/nholes/(pi*rc^2) Pout = 1013250 ! absolute pressure, dyne/cm2, assumes density is constant ! Pin = swage(t-0.01, Pout, Pout+(2/14.7)*1013250, 0.001) { Some shortcuts for use in the math & plotting... } vm=magnitude(v) div_v = dx(vx) + dy(vy) + dz(vz) pfactor = 1e6 PENALTY = pfactor*visc/long^2 ! specify penalty factor for pressure calcs Pin = val(P, 0,1.8, -wall) ! extract the value of the pressure on the supply side of the inlet baffle, at the center of an inlet hole initial values v = vector(0,0,0) ! start with zero velocity everywhere p= Pout ! ambient pressure everywhere at start equations v: dt(v)*dens+dens*dot(v,grad(v)) + grad(p) - visc*div(grad(v)) = 0 p: div(grad(p)) = PENALTY*div_v extrusion ! specifying z planes at the outside & inside of the inlet baffle, and the inside & outside of the exit baffle surface "in_baffle" z = -wall ! upstream surface of the inlet baffle surface "in" z = 0 ! downstream surface of the inlet baffle surface "out" z = long ! upstream surface of the outlet baffle, outlet port moved to a short side to accomodae extrusion surface "baffle_out" z = long+wall ! downstream surface of the outlet baffle boundaries region 1 { everything } surface "in" value(v) = vector(0,0,0) natural(p)=0 ! zero velocity, no pressure gradient at wall, except as defined below surface "out" value(v) = vector(0,0,0) natural(p)=0 ! ditto layer 1 void ! no domain (mesh) within the in baffle except in the inlet holes as defined below (limited region) layer 3 void ! ditto for the exit baffle start(-wide/2,0) ! define BCs & walk xy perimeter of wall on inlet side, define inlet holes later value(v) = vector(0,0,vsub) natural(p)=0 ! BCs on the glass surface line to (wide/2,0) value(v) = vector(0,0,0) natural(p)=0 line to (wide/2,high) to (-wide/2,high) to close { This set of BC statements, from "start" to "close" is extruded the entire length of the box, and defines the velocity & pressure gradient on the 4 long walls. The first statement allows for a non-zero value of vsub, the substrate speed. } limited region "holes" { input holes } layer 1 ! The holes only exist in layer 1, the inlet baffle wall surface "in_baffle" value(v) = vector(0,0,v_ave_in) natural(p)=0 { inlet openings: average velocity, no change in P } { Set BC that will be extruded through the depth of each hole, causing drag from the wall } repeat i = 1 to nholes start(xc[i],yc[i]+rc) layer 1 value(v) = vector(0,0,0) natural(p)=0 { duct sidewall drag } surface "in" mesh_spacing=rc/2 arc(center=xc[i],yc[i]) angle=360 endrepeat limited region "outlet" { exit hole, outside of box } layer 3 surface "baffle_out" natural(v) = vector(0,0,0) value(p)=Pout { output duct opening } start(-xoutL/2,high-wall-youtL) layer 3 value(v) = vector(0,0,0) natural(p)=0 { duct sidewall drag } surface "out" mesh_spacing=youtL/4 line to (xoutL/2,high-wall-youtL) to (xoutL/2,high-wall) to (-xoutL/2,high-wall) to close limited feature ! require mesh nodes on the inlet & outlet holes surface "in" repeat i = 1 to nholes start(xc[i],yc[i]+rc) arc(center=xc[i],yc[i]) angle=360 endrepeat limited feature surface "out" start(-xoutL/2,high-wall-youtL) line to (xoutL/2,high-wall-youtL) to (xoutL/2,high-wall) to (-xoutL/2,high-wall) to close feature "centerline" start(0,0,-wall) line to (0,high,-wall) time 0 to 10 by 1e-3 monitors for cycle=2 ! grid(x,z) on y=0 ! grid(z,y) on x=0 ! grid(x,y) on z=0 contour(P) on x=0 report dens report pin report visc report Qcfm contour(vx) on y=high/2 report dens report pin report visc report Qcfm contour(vy) on x=0 report dens report pin report visc report Qcfm contour(vz) on x=0 report dens report pin report visc report Qcfm contour(vz) on z=0 report dens report pin report visc report Qcfm contour(vz) on "baffle_out" report dens report pin report visc report Qcfm contour(vz) on x=0 report dens report pin report visc report Qcfm vector(vx,vz) on y=high/2 report dens report pin report visc report Qcfm vector(vy,vz) on x=1.2 vector(vz) on x=1.2 vector(vz) on x=0.6 vector(vy,vz) on x=0.6 vector(vx,vz) on y=0.1 report dens report pin report visc report Qcfm vector(vx,vy)on z=0 report dens report pin report visc report Qcfm ! contour(p) on y=0 report dens report pin contour(div_v) on y=0 report dens report pin report visc report Qcfm plots for t=0,0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1, 3, 10 grid(x,z) on y=0 grid(z,y) on x=0 grid(x,y) on z=0 contour(vx) on y=high/2 report dens report pin report visc report Qcfm contour(vy) on x=0 report dens report pin report visc report Qcfm contour(vz) on x=0 report dens report pin report visc report Qcfm contour(vz) on z=0 report dens report pin report visc report Qcfm contour(vz) on "baffle_out" report dens report pin report visc report Qcfm contour(vz) on x=0 report dens report pin report visc report Qcfm vector(vx,vz) on y=high/2 report dens report pin report visc report Qcfm vector(vy,vz) on x=1.2 vector(vy,vz) on x=0.6 vector(vx,vz) on y=0.1 report dens report pin report visc report Qcfm vector(vx,vy)on z=0 report dens report pin report visc report Qcfm { contour(vx) on z=0 report dens report pin contour(vy) on z=0 report dens report pin contour(vz) on z=0 report dens report pin contour(p) on y=0 report dens report pin contour(div_v) on y=0 report dens report pin } summary report(sintegral(vz,"in")) as "Inflow, cm3/sec" report(sintegral(vz,"out")) as "Outflow, cm3/sec" report(sintegral(vz,"in")/sintegral(vz,"out")) as "Ratio" report Qcfm as "Global inlet flow rate, cfm" end