# GfsElectroHydro

(Difference between revisions)
 Revision as of 05:52, 30 May 2010Popinet (Talk | contribs)← Previous diff Current revisionPopinet (Talk | contribs) Line 3: Line 3: ;Phi: electric potential ;Phi: electric potential - ;Rhoe: volumetric charge density ;Ex: x-component of the electric field ;Ex: x-component of the electric field ;Ey: y-component of the electric field ;Ey: y-component of the electric field Line 12: Line 11: [ [[GfsSimulation]] ] { [ [[GfsSimulation]] ] { perm = [ [[GfsFunction]] ] perm = [ [[GfsFunction]] ] + charge = [ [[GfsFunction]] ] [[GfsProjectionParams|GfsElectricProjectionParams]] { [[GfsProjectionParams|GfsElectricProjectionParams]] { ... ... Line 17: Line 17: } } - where perm defines the electric permittivity of the fluid(s) and GfsElectricProjectionParams optionally controls the accuracy of the numerical solution of the Poisson equation for the electric potential Phi. + 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 Electric volumetric forces can be added to the momentum equation using Line 25: Line 25: and the electric conduction term can be taken into account using and the electric conduction term can be taken into account using - [[GfsSourceCharge]] K + [[GfsSourceDiffusionExplicit]] Rhoe K Phi - where K stands for the conductivity. + 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). == See also == == See also == - [[Object_hierarchy#electrohydro|electrohydro]] module + [[Object_hierarchy#Electrohydro|electrohydro]] module

## 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)
}
```