Improved visualization of discontinuous fields

The visualization of the results obtained from MagnetoDynamicsCalcFields, and other discontinuous fields, have been somewhat suboptimal until recently. Particularly with the adoption of quadratic edge elements the old options were no longer satisfactory. This mail summarizes the recent changes related to the optimal visualization. I hope that with these new features the excellent 2nd order edge elements can show their full potential, but also the 1st order edge elements will benefit from these. The text is related to the current devel version.

The CalcFields solver can basically compute nodal quantities and elemental quantities. For fields known to be continuous the nodal quantities are good as such. However, for quantities having potential jumps between element interfaces (such as current density) the elemental fields are much more suitable. The elemental fields are actually standard nodal fields with the degrees of freedom being independent in each element (as in the Discontinuous Galerkin method). This makes the amount of data potentially quite huge. One may choose between three different ways to save the results in VTU output:

  • Constant (averaged Cell data) within each element (default)
  • “Discontinuous Galerkin” data where all nodes are different in each elements
  • “Discontinuous Bodies” data where nodes are made different only at the interfaces.

The preferred method of choice for visualization is usually the 3rd one. It also automatically averages the different shared instances of the DG fields to one single value. Unfortunately for quadratic elements there seems to be a problem. It seems that the rendering in Paraview cannot handle discontinuities well in conjunction with quadratic elements. To overcome that problem there is a possibility to save the result in linear basis even though having quadratic mesh. Actually this may make sense since the derived fields are still often just linear in accuracy.

Below is an example of a sif file that seems to provide nice visualizations for a number of cases both in serial and parallel

Solver 3
  Exec Solver = after timestep
  Equation = "ResultOutput"
  Procedure = "ResultOutputSolve" "ResultOutputSolver"
  Output File Name = f
  Vtu format = True
  Discontinuous Bodies = True
  ! bloated alternative for the above maintaining all discontinuities
  ! Discontinuous Galerkin = True 
  Save Geometry Ids = True
  ! use this only in conjunction with quadratic mesh   
  Save Linear Elements = True  
  ! Save Bulk Only = True 
  ! Save Boundaries Only = True 
End

Unfortunately there is some loss of information when performing these
operations and line plotting in Paraview is not optimal. The alternative
is to save the data directly using SaveLine. Previously this routine had
problems with discontinuous fields also since it only saves data at the
intersection of faces, and assumes value in between to be linear. If the
face values are not unique this does not work. Now there is a remedy to
give number of divisions for each line. When using the “Polyline
Divisions” to specify the points also the DG fields are considered
correctly, for example

Solver 4
  Exec Solver = after timestep
  Equation = SaveLine
  Procedure = "SaveData" "SaveLine"
  Filename = g.dat
  Polyline Coordinates(8,3) =  0   -0.05  -0.07  0    -0.05 0.115  \
                               0.0  0.05  -0.07  0.0   0.05 0.115 \
                              -0.05 0.0   -0.07 -0.05  0.0  0.115 \
                               0.05 0.0   -0.07  0.05  0.0  0.115 
  Polyline Divisions(4) = 100 100 100 100 
End

Note that if one chooses “Discontinuous Bodies” in the VTU output it
averages the data. Hence if you want the original discontinuous (linear or
quadratic) data give this solver a smaller Id number than for the
ResultOutputSolver.

Finally there is a possibility to also use SaveGridData solver would you
want to save the data in a uniform grid. This also now works with DG
fields and can therefore capture the true results from CalcFields. This is
probably not that useful, but an example is provided here for
completeness.

Solver 5
  Equation = SaveGridData
  Procedure = "SaveGridData" "SaveGridData"
  Grid dx = Real 0.05
  Grid dy = Real 0.05
  Grid dz = Real 0.00005

! Reduce the box where the points are saved in 
  Min Coordinate 1 = Real -0.07
  Max Coordinate 1 = Real 0.07
  Min Coordinate 2 = Real -0.07
  Max Coordinate 2 = Real 0.07

! If nodes are exactly at the interface eliminate redundant ones
  Check For Duplicates = Logical True
  Binary Output = Logical True
  Single Precision = Logical True

  Filename Prefix = h

! save in vtu format in paraview (use glyphs)
  Vtu Format = Logical True

! save in ascii format for Matlab etc. 
  Table Format = Logical True
End

I hope people using the great MagnetodDynamics solver will find these instructions useful.