Each particle hitting a surface can be recorded within an energy or angular histogram vector. This functionality is applicable for “walls” as well as for “membranes”.
All histograms are taken per physical surface. Important: For membranes, the histogram is only taken for particles hitting the side, where the normal vector points out. This is useful if e. g. multiple histograms shall be taken for a large physical surface at different areas: In this case it is possible to use several transparent membranes placed close to the surface at the desired locations. Since particles hitting the surface can be diffusely reflected, it would be misleading if the reflected particles are also sampled by the membranes.
The involved commands for generating histograms must be written within the wall description blocks (see wall reaction model) and are listed in the following.
add_energy_histogram("species", E0, E1, nE);
add_angular_histogram("species", nTheta, nPhi, vx, vy, vz);
Since energy and angular distribution are generally correlated, it is also possible to generate a combined energy and angular distribution:
add_histogram("species", nTheta, nPhi, E0, E1, nE, vx, vy, vz);
The parameters have the same meaning as in the single functions described above. In fact, this function is always internally called (also by
add_angular_histogram with a reduced parameter set). For a combined histogram please take care of the total number of histogram points (nTheta*nPhi*nE): If that number is very large, a very long time averaging interval will be needed to obtain useful statistics.
The resulting files in the output directory have the filenames histogram_<number>_<Surface>_<Species>_<Timestamp>.txt, e. g. histogram_1_Substrate_Ti_60.00ms.txt2).
The output format is just four columns with numbers:
When making polar contour plots of the angular distribution, remember to adjust the intensity:
Intensity / sin(θ*π/180)
The reason for this is the integration in spherical coordinates, where the differential element is: sin(θ)dθdϕ.
It is possible to divide a physical surface into an array of histograms. This only works for single plane surfaces by using the following command:
add_histogram_array("species", nTheta, nPhi, E0, E1, nE, nX, nY, x1, y1, z1, x2, y2, z2, x3, y3, z3);
The point coordinates should be given in mesh units. In the resulting file instead of a single intensity column, there are columns with the order . If are the indices of the X and Y partition and is the column number, the conversion rules are
Warning: Please take care not to use too many histogram slots / histogram segments as this could easily lead to memory overflow. If a simulation run with large histogram arrays is crashing on startup, please check the memory consumption on the compute nodes and consider using a fewer number of slots / histogram segments.
Besides the general function, there are also an energy (
add_energy_histogram_array) and angular (
add_angular_histogram_array) only function. Their parameters are a subsection of the more general command above, the syntax is as follows:
add_energy_histogram_array(species, E0, E1, nE, nx, ny, x1, y1, z1, x2, y2, z2, x3, y3, z3); add_angular_histogram_array(species, nTheta, nPhi, nx, ny, x1, y1, z1, x2, y2, z2, x3, y3, z3);