Electrostatic Contact Verification (Three Block Test)

This document describes the three block 1-D verification test for the ElectrostaticContactCondition object. Below is a summary of the test, along with a derivation of the analytic solution used for comparison and the relevant test input file for review.

Summary

A visual summary of the three block verification test domain, as well as relevant boundary and interface conditions is shown below (click to zoom):

Figure 1: Visual summary of the three block verification test with boundary and interface conditions.

It is important to note that in Figure 1:

  • is the electrical conductivity of material ,

  • is the electrical contact conductance at the interface, and

  • is the electrostatic potential of material .

See the ElectrostaticContactCondition documentation for more information about the particular definition of . As the ElectrostaticContactCondition object is intended for electrostatic field solves, the PDE being solved within each domain is Poisson's Equation for electrostatic potential. In this case, we are assuming a zero total charge density, which leads to

(1)

Material properties being used in this case are constants in each block, and they are summarized below in Table 1. All material properties were evaluated at a temperature of ~300 K.

Table 1: Material properties for the three block electrostatic contact verification case.

Property (unit)ValueSource
Stainless Steel (304) Electrical Conductivity (S / m)(Cincotti et al., 2007)
Stainless Steel (304) Hardness (Pa)(Cincotti et al., 2007)
Graphite (AT 101) Electrical Conductivity (S / m)(Cincotti et al., 2007)
Graphite (AT 101) Hardness (Pa)(Cincotti et al., 2007)

The hardness values shown in Table 1 are used in the ElectrostaticContactCondition object as a harmonic mean of the two values. For reference, the harmonic mean calculation for two values, and , is given by

In the input file, the harmonic mean of hardness for stainless steel and graphite was calculated and set to be Pa.

Analytic Solution Derivation

In 1-D, Eq. (1) becomes

since is constant in all domains. This equation means a reasonable guess for a generic solution function for would be

where and are to-be-determined constant coefficients.

Apply boundary conditions

Using the boundary conditions in Figure 1, we can determine for both of the outer stainless steel regions:

Stainless Steel (left)

Stainless Steel (right)

Apply interface conditions

Now, the interface conditions can be applied from Figure 1. To begin, let's focus on the current density () equivalence condition on the left interface (at ):

Taking into account our initial guess for the solution function, this becomes

(2)

Next, we can apply the conductance condition from Figure 1, which is

Taking into account our initial guess for the solution function and the constant coefficient solved for above, this becomes

Grouping terms, we have

(3)

Next, let's focus on the current density () equivalence condition on the right interface (at ):

Taking into account our initial guess for the solution function, this becomes

(4)

Next, we can apply the conductance condition from Figure 1, which is

Taking into account our initial guess for the solution function and the constant coefficient solved for above, this becomes

Grouping terms, we have

(5)

Find the remaining coefficients

Using the Elimination Method and some algebra, we can combine Eq. (2), Eq. (3), Eq. (4), and Eq. (5) in order to solve for each remaining unknown coefficient. To begin, let's focus on Eq. (2) and Eq. (3). Multiplying Eq. (2) through by and Eq. (3) through by yields

(6)

and

(7)

Combining Eq. (6) and Eq. (7) together via addition yields

which can then be solved for :

(8)

Next, we focus on Eq. (4) and Eq. (5). Multiplying Eq. (4) through by and Eq. (5) through by yields

(9)

and

(10)

Combining Eq. (9) and Eq. (10) together via addition yields

which can then be solved for :

(11)

Note that Eq. (8) and Eq. (11) still depend on finding the coefficient . We can now solve for by using Eq. (2), which yields

and finally

(12)

Returning to Eq. (11), we can now fully solve for :

Simplifying yields:

(13)

Returning to Eq. (8), we can now fully solve for :

Simplifying yields:

(14)

Returning to Eq. (4), we can now fully solve for :

(15)

Summarize

Now our determined coefficients can be combined to form the complete solutions for both stainless steel and graphite. To summarize, the derived analytical solutions for each domain given the boundary and interface conditions described in Figure 1 is:

  • For stainless steel from to :

  • For graphite from to :

  • For stainless steel from to :

This is implemented in source code as ElectricalContactTestFunc.C and is located within the test source code directory located at modules/electromagnetics/test/src.

Input File

# Regression test for ElectrostaticContactCondition with analytic solution with
# three blocks
#
# dim = 1D
# X = [0,3]
# Interfaces at X = 1 and X = 2
#
#   stainless_steel        graphite        stainless_steel
# +------------------+------------------+------------------+
#
# Left BC: Potential = 1
# Right BC: Potential = 0
# Left Interface: ElectrostaticContactCondition (primary = stainless_steel)
# Right Interface: ElectrostaticContactCondition (primary = graphite)
#

[Mesh]
  [line]
    type = GeneratedMeshGenerator
    dim = 1
    nx = 6
    xmax = 3
  []
  [break_center]
    type = SubdomainBoundingBoxGenerator
    input = line
    block_id = 1
    block_name = 'graphite'
    bottom_left = '1 0 0'
    top_right = '2 0 0'
  []
  [break_right]
    type = SubdomainBoundingBoxGenerator
    input = break_center
    block_id = 2
    bottom_left = '2 0 0'
    top_right = '3 0 0'
  []
  [ssg_interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = break_right
    primary_block = 0
    paired_block = 1
    new_boundary = 'ssg_interface'
  []
  [gss_interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = ssg_interface
    primary_block = 1
    paired_block = 2
    new_boundary = 'gss_interface'
  []
  [block_rename]
    type = RenameBlockGenerator
    input = gss_interface
    old_block = '0 2'
    new_block = 'stainless_steel_left stainless_steel_right'
  []
[]

[Variables]
  [potential_graphite]
    block = graphite
  []
  [potential_stainless_steel_left]
    block = stainless_steel_left
  []
  [potential_stainless_steel_right]
    block = stainless_steel_right
  []
[]

[AuxVariables]
  [analytic_potential_stainless_steel_left]
    block = stainless_steel_left
  []
  [analytic_potential_stainless_steel_right]
    block = stainless_steel_right
  []
  [analytic_potential_graphite]
    block = graphite
  []
[]

[Kernels]
  [electric_graphite]
    type = ADMatDiffusion
    variable = potential_graphite
    diffusivity = electrical_conductivity
    block = graphite
  []
  [electric_stainless_steel_left]
    type = ADMatDiffusion
    variable = potential_stainless_steel_left
    diffusivity = electrical_conductivity
    block = stainless_steel_left
  []
  [electric_stainless_steel_right]
    type = ADMatDiffusion
    variable = potential_stainless_steel_right
    diffusivity = electrical_conductivity
    block = stainless_steel_right
  []
[]

[AuxKernels]
  [analytic_function_aux_stainless_steel_left]
    type = FunctionAux
    function = potential_fxn_stainless_steel_left
    variable = analytic_potential_stainless_steel_left
    block = stainless_steel_left
  []
  [analytic_function_aux_stainless_steel_right]
    type = FunctionAux
    function = potential_fxn_stainless_steel_right
    variable = analytic_potential_stainless_steel_right
    block = stainless_steel_right
  []
  [analytic_function_aux_graphite]
    type = FunctionAux
    function = potential_fxn_graphite
    variable = analytic_potential_graphite
    block = graphite
  []
[]

[BCs]
  [elec_left]
    type = ADDirichletBC
    variable = potential_stainless_steel_left
    boundary = left
    value = 1
  []
  [elec_right]
    type = ADDirichletBC
    variable = potential_stainless_steel_right
    boundary = right
    value = 0
  []
[]

[InterfaceKernels]
  [electric_contact_conductance_ssg]
    type = ElectrostaticContactCondition
    variable = potential_stainless_steel_left
    neighbor_var = potential_graphite
    boundary = ssg_interface
    mean_hardness = mean_hardness
    mechanical_pressure = 3000
  []
  [electric_contact_conductance_gss]
    type = ElectrostaticContactCondition
    variable = potential_graphite
    neighbor_var = potential_stainless_steel_right
    boundary = gss_interface
    mean_hardness = mean_hardness
    mechanical_pressure = 3000
  []
[]

[Materials]
  #graphite (at 300 K)
  [sigma_graphite]
    type = ADGenericConstantMaterial
    prop_names = electrical_conductivity
    prop_values = 73069.2
    block = graphite
  []

  #stainless_steel (at 300 K)
  [sigma_stainless_steel_left]
    type = ADGenericConstantMaterial
    prop_names = electrical_conductivity
    prop_values = 1.41867e6
    block = stainless_steel_left
  []
  [sigma_stainless_steel_right]
    type = ADGenericConstantMaterial
    prop_names = electrical_conductivity
    prop_values = 1.41867e6
    block = stainless_steel_right
  []

  # harmonic mean of graphite and stainless steel hardness
  [mean_hardness]
    type = ADGenericConstantMaterial
    prop_names = mean_hardness
    prop_values = 2.4797e9
  []
[]

[Functions]
  [potential_fxn_stainless_steel_left]
    type = ElectricalContactTestFunc
    domain = stainless_steel
    three_block = true
    three_block_side = left
  []
  [potential_fxn_stainless_steel_right]
    type = ElectricalContactTestFunc
    domain = stainless_steel
    three_block = true
    three_block_side = right
  []
  [potential_fxn_graphite]
    type = ElectricalContactTestFunc
    domain = graphite
    three_block = true
  []
[]

[Postprocessors]
  [error_stainless_steel_left]
    type = ElementL2Error
    variable = potential_stainless_steel_left
    function = potential_fxn_stainless_steel_left
    block = stainless_steel_left
  []
  [error_graphite]
    type = ElementL2Error
    variable = potential_graphite
    function = potential_fxn_graphite
    block = graphite
  []
  [error_stainless_steel_right]
    type = ElementL2Error
    variable = potential_stainless_steel_right
    function = potential_fxn_stainless_steel_right
    block = stainless_steel_right
  []
[]

[Preconditioning]
  [SMP]
    type = SMP
    full = true
  []
[]

[Executioner]
  type = Steady
  solve_type = NEWTON
  automatic_scaling = true
[]

[Outputs]
  csv = true
  perf_graph = true
[]
(modules/electromagnetics/test/tests/interfacekernels/electrostatic_contact/analytic_solution_test_three_block.i)

Results

Results from the input file shown above (with Mesh/line/nx=60 and Outputs/exodus=true) compared to the analytic function are shown below in Figure 2. Note that the number of points shown in the plot has been down-sampled compared to the solved number of elements for readability.

Figure 2: Results of electrostatic contact three block validation case.

References

  1. A. Cincotti, A. M. Locci, R. OrrĂ¹, and G. Cao. Modeling of SPS apparatus: temperature, current and strain distribution with no powders. AIChE Journal, 53(3):703–719, 2007. doi:10.1002/aic.11102.[BibTeX]