# GfsElectroHydro

Revision as of 14:49, 23 November 2011; view current revision

GfsElectroHydro solves the 2D/3D electrohydrodynamics equations. Aside from the standard fluid variables defined by GfsSimulation, the default variables are:

`Phi`
electric potential
`Ex`
x-component of the electric field
`Ey`
y-component of the electric field
`Ez`
z-component of the electric field

The syntax in parameter files is

```[ GfsSimulation ] {
perm = [ GfsFunction ]
charge = [ GfsFunction ]
GfsElectricProjectionParams {
...
}
}
```

where `perm` defines the electric permittivity of the fluid(s), `charge` defines optionally the volume electric charge density and `GfsElectricProjectionParams` optionally controls the accuracy of the numerical solution of the Poisson equation for the electric potential `Phi`.

Electric volumetric forces can be added to the momentum equation using

```GfsSourceElectric
```

and the electric conduction term can be taken into account using

```GfsSourceDiffusionExplicit Rhoe K Phi
```

where `K` stands for the conductivity. The electric conduction term can be also computed implicitly using

```GfsSourceDiffusion Rhoe K Phi

```

although it is only available if the `charge` function is a direct injection of a pure variable (i.e charge = Rhoe). Additionally, the implicit scheme for the conduction term is incompatible with other implicit schemes applied on the same variable (i.e. GfsSourceDiffusion Rhoe Diffusion).

`electrohydro` module

### Examples

• Dielectric-dieletric planar balance
• ```1 0 GfsElectroHydro GfsBox GfsGEdge {} {
VariableTracerVOF T
InitFraction T (-y)
Init {} { Phi = (y < 0. ? (y/2.+1/4.) : 3.*y/2.+1./4.) }
Refine 5

Time { iend = 1 dtmax = 1 }
ProjectionParams { tolerance = 1e-7 }
ApproxProjectionParams { tolerance = 1e-7 }
SourceElectric

OutputTime { istep = 1 } stderr
OutputSimulation { start = end } result.txt { format = text }
OutputScalarStats { start = end } p { v = P }
OutputScalarStats { start = end } ey { v = Ey }
OutputScalarNorm { start = end } v { v = V }
EventScript { start = end } {
if awk '{
deltap = (\$11 - \$5) - 0.75
if (deltap < 0.)
deltap = - deltap;
if (deltap > 5e-8) {
print "deltap:", deltap > "/dev/stderr";
exit (1);
}
}' < p &&
awk '{
deltap = (\$11 - \$5) - 1.
if (deltap < 0.)
deltap = - deltap;
if (deltap > 0.) {
print "deltaey:", deltap > "/dev/stderr";
exit (1);
}
}' < ey &&
awk '{
if (\$9 > 3.) {
print "vmax:", \$9 > "/dev/stderr";
exit (1);
}
}' < v; then
exit 0;
else
exit \$GFS_STOP;
fi
}
} {
# Electric parameters
perm = 1./(T/3.+(1-T))
ElectricProjectionParams { tolerance = 1e-7 }
}
```

• Balance with solid boundaries
• ```1 0 GfsElectroHydro GfsBox GfsGEdge {} {
VariableTracerVOF T
InitFraction T (-y)
Refine 5
Solid (-y + 0.3)
Solid ( y + 0.2)
SurfaceBc Phi Dirichlet (y > 0)

Time { iend = 1 dtmax = 1 }
ProjectionParams { tolerance = 1e-7 }
ApproxProjectionParams { tolerance = 1e-7 }
SourceElectric

OutputTime { istep = 1 } stderr
OutputSimulation { start = end } result.txt { format = text }
OutputScalarStats { start = end } p { v = P }
OutputScalarStats { start = end } ey { v = Ey }
OutputScalarNorm { start = end } v { v = V }
EventScript { start = end } {
if awk '{
deltap = (\$11 - \$5) - 3./(1.1*1.1)
if (deltap < 0.)
deltap = - deltap;
if (deltap > 4e-4) {
print "deltap:", deltap > "/dev/stderr";
exit (1);
}
}' < p &&
awk '{
deltap = (\$11 - \$5) - 2./1.1
if (deltap < 0.)
deltap = - deltap;
if (deltap > 3e-4) {
print "deltaey:", deltap > "/dev/stderr";
exit (1);
}
}' < ey &&
awk '{
if (\$9 > 10.) {
print "vmax:", \$9 > "/dev/stderr";
exit (1);
}
}' < v; then
exit 0;
else
exit \$GFS_STOP;
fi
}
} {
# Electric parameters
perm = 1./(T/3.+(1-T))
ElectricProjectionParams { tolerance = 1e-7 }
}
```

• Relaxation of a charge bump
• ```1 0 GfsElectroHydro GfsBox GfsGEdge {} {
Global {
#define a 0.05
#define perm 2.0
#define K 1.0
double gaussbell (double x, double y, double t) {
double alpha = (x*x + y*y)/2./a/a;
double beta = a*sqrt(2.*M_PI);
double te = perm/K;
return exp(-alpha)/beta*exp(-t/te);
}
}
VariableTracer Rhoe
Refine 7*(1. - 4.*(x*x + y*y))
Time { end = 6 dtmax = 1e-2 }
Init {} { Rhoe = gaussbell(x,y,0) }

#    OutputTime { istep = 5 } stderr
#    OutputScalarNorm { istep = 5 } stderr { v = Rhoe }
SourceDiffusionExplicit Rhoe 1 Phi
#    SourceDiffusion Rhoe 1 { beta = 0.5 } Phi

OutputSimulation { start = 0 } {
awk '{ if (\$1 != "#") print sqrt(\$1*\$1+\$2*\$2),\$11 > "t_0-SCHEME"; }'
} { format = text }
OutputSimulation { start = 2 } {
awk '{ if (\$1 != "#") print sqrt(\$1*\$1+\$2*\$2),\$11 > "t_2-SCHEME"; }'
} { format = text }
OutputSimulation { start = 4 } {
awk '{ if (\$1 != "#") print sqrt(\$1*\$1+\$2*\$2),\$11 > "t_4-SCHEME"; }'
} { format = text }
OutputSimulation { start = 6 } {
awk '{ if (\$1 != "#") print sqrt(\$1*\$1+\$2*\$2),\$11 > "t_6-SCHEME"; }'
} { format = text }

OutputErrorNorm { istep = 10 } norms-SCHEME { v = Rhoe } { s = gaussbell(x,y,t) }
OutputLocation { istep = 10 } {
awk '
BEGIN {
a = 0.05
perm = 2.
K = 1.
rhoinic = 1./a/sqrt(2.*3.14159265358979)
}
{
if (\$1 != "#")
print \$1, rhoinic*exp(-\$1*K/perm), \$12;
}' > timevol-SCHEME
} { 0. 0. 0. }
} {
# Electric parameters
perm = 2
charge = Rhoe
GfsElectricProjectionParams { tolerance = 1e-7 }
}
```

• Charge relaxation in a planar cross-section
• ```1 0 GfsElectroHydro GfsBox GfsGEdge {} {
Global {
#define R0 0.1
#define rhoinic 0.5
#define K 3
#define E1 3
#define E2 1
}
Time { end = 35 dtmax=1.0 }

VariableTracerVOF T
GfsVariableTracer Rhoe
InitFraction T (R0*R0 - y*y - x*x)
AdaptGradient { istep = 1 } { cmax = 1e-4 minlevel = 5 maxlevel = LEVEL + 1 } T
PhysicalParams { L = 2 }
Init {} { Rhoe = rhoinic*T }

EventStop { istep = 10 } Ex 0.001

SourceDiffusionExplicit Rhoe K*T Phi

#    OutputTime { istep = 1 } stderr
OutputScalarSum { istep = 1 } {
awk 'BEGIN { rhoinic = 0.5 ; R0 = 0.1 ; Q = rhoinic*R0*R0*3.141592654 }
{ print \$3,\$5,100*sqrt((1.-\$5/Q)*(1.-\$5/Q)); fflush(stdout); }' > rhoe-LEVEL
} { v = Rhoe}
OutputSimulation { start = end } {
awk '{ if (\$1 != "#")
print sqrt(\$2*\$2+\$1*\$1),sqrt(\$4*\$4+\$5*\$5); }' > prof-LEVEL
} {
format = text
variables = Ex,Ey
}
OutputErrorNorm { start = end } norms-LEVEL { v = sqrt(Ex*Ex + Ey*Ey) } {
s = {
double r = sqrt (x*x + y*y);
return (r < R0 ? 0 : 0.5*R0*R0*rhoinic/r);
}
}
OutputSimulation { start = end } result-LEVEL.gfs
} {
# Electric parameters
perm = E1*T+E2*(1.-T)
charge = Rhoe
GfsElectricProjectionParams { tolerance = 1e-7 }
}
```

• Gouy-Chapman Debye layer
• ```5 4 GfsElectroHydro GfsBox GfsGEdge { x = 0.5 } {

Global {
#define Volt 1.0
}
VariableTracer Cpos { scheme = none }
VariableTracer Cneg { scheme = none }
AdaptGradient { istep = 5 } { cmax = 0.02 minlevel = 3 maxlevel = 5 } Cneg

Init {} {
Phi = Volt*(1.-x/5.)
Cpos =  1.
Cneg =  1.
}
Time { end = 3.5 dtmax = 0.01 }

SourceDiffusion Cpos 1.0
SourceDiffusionExplicit Cpos Cpos Phi

SourceDiffusion Cneg 1.0
SourceDiffusionExplicit  Cneg -Cneg Phi

EventStop { istep = 10 } Phi 1e-4 DPhi

#    OutputSimulation { istep = 5 } stdout
OutputLocation { start = end } {
awk '{ if (\$1 != "#") print \$2, \$9, \$12, \$13; }' > profile
} points
} {
# Electric parameters
perm = 1.0
charge = (Cpos - Cneg)
}
```