GfsElectroHydro

From Gerris

Revision as of 08:30, 9 November 2010; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

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
  • 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)
    }
    

Personal tools
communication