GfsElectroHydroAxi
From Gerris
GfsElectroHydroAxi is the axisymmetric version of the electrohydrodynamics solver GfsElectroHydro. It also descends from the GfsAxi axisymmetric Navier-Stokes solver.
The syntax in parameter files is
[ GfsElectroHydro ]
See also
electrohydro module
Examples
- Charge relaxation in an axisymmetric insulated conducting column
- Equilibrium of a droplet suspended in an electric field
1 0 GfsElectroHydroAxi GfsBox GfsGEdge {} {
Global {
#define R0 0.1
#define rhoinic 0.5
#define K 3
#define E1 3
#define E2 1
}
Time { end = 15 dtmax = 1.0 }
VariableTracerVOF T
VariableTracer Rhoe
VariableVOFConcentration C T
InitFraction T (R0 - y)
AdaptGradient { istep = 1 } { cmax = 1e-4 minlevel = 5 maxlevel = LEVEL } T
Init {} {
Rhoe = rhoinic*T
C = rhoinic*T
}
EventStop { istep = 10 } Ex 0.001
SourceDiffusionExplicit Rhoe K*T Phi
SourceDiffusionExplicit C K*T/(T+1.e9*(1.-T)) Phi
# OutputTime { istep = 1 } stderr
OutputScalarSum { step = 1 } {
awk 'BEGIN { R0 = 0.1 ; rhoinic = 0.5 ; L =1.0 ; Q = 0.5*R0*R0*L*rhoinic }
{ print $3,$5,100*sqrt((1.0 - $5/Q)*(1.0 - $5/Q)) }' > rhoe-LEVEL
} { v = Rhoe }
OutputScalarSum { step = 1 } {
awk 'BEGIN { R0 = 0.1 ; rhoinic = 0.5 ; L =1.0 ; Q = 0.5*R0*R0*L*rhoinic }
{ print $3,$5,100*sqrt((1.0 - $5/Q)*(1.0 - $5/Q)) }' > C-LEVEL
} { v = C }
OutputSimulation { start = end } {
awk '{ if ($1 != "#") print $2,sqrt($4*$4+$5*$5); }' > prof-LEVEL
} {
format = text
variables = Ex,Ey
}
OutputErrorNorm { start = end } norms-LEVEL { v = Ey } {
s = (y < R0 ? 0 : 0.5*R0*R0*rhoinic/y)
}
OutputSimulation { start = end } result-LEVEL.gfs
} {
# Electric parameters
perm = E1*T+E2*(1.-T)
charge = Rhoe
# charge = C
ElectricProjectionParams { tolerance = 1e-7 }
}
1 0 GfsElectroHydroAxi GfsBox GfsGEdge {} {
Global {
#define R0 0.1
#define R 5.1
#define Q 10
#define Ef 1.34
#define Cmu 0.10
#define F 50.
}
PhysicalParams { L = 2 }
Time { end = 1 }
VariableTracer Rhoe
VariableTracerVOF T
VariableCurvature K T
SourceTension T 1 K
SourceViscosity Cmu
InitFraction T (R0*R0 - (x*x + y*y))
AdaptGradient { istep = 1 } { cmax = 1e-4 minlevel = 4 maxlevel = 7 } T
AdaptError { istep = 1 } { cmax = 2e-4 maxlevel = 7 } U
AdaptError { istep = 1 } { cmax = 2e-4 maxlevel = 7 } V
SourceElectric
SourceDiffusionExplicit Rhoe F*((1. - T)+ R*T) Phi
Init {} { Phi = Ef*x }
EventStop { istep = 10 } Rhoe 0.001 { relative = 1 }
# OutputTime { istep = 10 } stderr
# OutputProjectionStats { istep = 10 } stderr
# OutputDiffusionStats { istep = 10 } stderr
# OutputSimulation { istep = 10 } stdout
# OutputTiming { istep = 100 } stderr
OutputScalarSum { istep = 10 } rhoe { v = Rhoe }
OutputLocation { start = end } {
awk '
BEGIN {
R0 = 0.1
Ef = 1.34
mu = 0.1
ep2 = 1.
R = 5.1
Q = 10.
lambda = 1.
factor = R0*Ef*Ef*ep2/mu
theta = 3.14159265358979/4.
A=-9./10.*(R-Q)/(R+2.)**2/(1.+lambda)
st = sr = 0.
sn = 0.
}
function radius(x,y)
{
return sqrt(x*x+y*y)/R0
}
function vr(x,y,vx,vy)
{
return (vx*x+vy*y)/(factor*sqrt(x*x+y*y))
}
function vt(x,y,vx,vy)
{
return (vx*y-vy*x)/(factor*sqrt(x*x+y*y))
}
# Theoretical velocity profile
function vtr(x)
{
if (x < 1.)
return A*x*(1.-x**2)*(3.*sin(theta)**2-1.);
else
return A*x**(-2)*(x**(-2)-1.)*(3.*sin(theta)**2-1.);
}
function vtt(x)
{
if (x < 1.)
return 3.*A/2.*x*(1.-5./3.*x**2)*sin(2.*theta);
else
return -A*x**(-4)*sin(2.*theta);
}
{
if ($1 != "#") {
r = radius($2,$3)
tvr = vtr(r)
tvt = vtt(r)
print r,vr($2,$3,$7,$8),vt($2,$3,$7,$8),tvr,tvt
sr += (vr($2,$3,$7,$8) - tvr)**2
st += (vt($2,$3,$7,$8) - tvt)**2
sn += 1.
}
}
END {
print sqrt(sr/sn),sqrt(st/sn) > "/dev/stderr"
}' > fprof
} thetapi4
OutputSimulation { start = end } result.gfs
} {
# Electric parameters
perm = (Q*T + (1. - T))
charge = Rhoe
ElectricProjectionParams { tolerance = 1e-4 }
}