GfsElectroHydro
From Gerris
| Revision as of 05:54, 30 May 2010 Popinet (Talk | contribs) ← Previous diff |
Revision as of 08:30, 9 November 2010 Popinet (Talk | contribs) (SourceCharge is obsolete) Next diff → |
||
| 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 <code>K</code> stands for the conductivity. | where <code>K</code> stands for the conductivity. | ||
Revision as of 08:30, 9 November 2010
GfsElectroHydro solves the 2D/3D electrohydrodynamics equations. Aside from the standard fluid variables defined by GfsSimulation, the default variables are:
Phi- electric potential
Rhoe- volumetric charge density
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 ] GfsElectricProjectionParams { ... } }
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.
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.
See also
electrohydro module
Examples
- Dielectric-dieletric planar balance
- Balance with solid boundaries
- Relaxation of a charge bump
- Charge relaxation in a planar cross-section
- Gouy-Chapman Debye layer
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 }
}
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 }
}
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 }
}
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 }
}
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)
}

