visit-dav / visit

VisIt - Visualization and Data Analysis for Mesh-based Scientific Data
https://visit.llnl.gov
BSD 3-Clause "New" or "Revised" License
438 stars 116 forks source link

Hohlraum flux query #12294

Closed brugger1 closed 3 years ago

brugger1 commented 3 years ago

To whom it may concern:

Is there any information about VisIt’s “Hohlraum Flux” query? I can’t seem to find any documentation. I was able to setup opacity values for the query from a hohlraum simulation using the HYDRA rad-hydro code and results of some sort were spat out, but I have no idea what physical units of inputs and outputs of the query are supposed to be. The name of the query suggests that it might be useful for hohlraum simulations, so it would be worthwhile to know how it works.

Thank you, Jay Salmonson

We're trying to combine visit-users email list with GitHub issues. When replying on visit-users, please reply only to emails with a Subject line that includes [visit-dav/live-customer-response].


brugger1 commented 3 years ago

Hi Jay!

That was implemented in 2006-2007 by someone who is no longer in the group. I had a minor role, but cannot recall all of the details.

Here is some documentation in the code: // This query calculates flux from a hohlraum capsule by integrating // random rays, accumulating radiation bin by bin. It may be extended // to be applied to one or more response functions, to match detectors // installed in NIF.

It uses the "LineScanQuery" module as a base class. I know that query will intersect a volume with a set of lines (either random lines or lines following some pattern). The output of the intersection is the same set of lines, but now with field values on it. And then some analysis occurs by analyzing the field values.

If that interests you, then we will need to make a plan on how to get you the info you need. (I can help some, but am slammed this week.)

Best, Hank

brugger1 commented 3 years ago

The Hohlraum flux query integrates uniformly distributed rays in a cylinder. The query takes 2 variables, the absorbtivity and the emissivity. These are “array” variables, where there can be multiple values per zone for each corresponding to energy bins.

The arguments for the query are as follows.

Number of Lines – The number of rays to place in the cylinder. Divide Emis by Absorb – This effects the integration and I’ll describe that a bit later. Ray Center – The center of the cylinder. Radius – The radius of the cylinder. Theta, Phi – The orientation of the cylinder.

Here is the C++ code that does the integration. Note that there are 2, one for Divide Emis by Absorb on and one for off.

if (divideEmisByAbsorb) { for (ii = 0 ; ii < numBins ; ii++) { double tmp = exp(-a[ii]segLen); tmpBins[ii] = tmpBins[ii] tmp + (e[ii] / a[ii]) (1.0 - tmp); } } else { for (ii = 0 ; ii < numBins ; ii++) { double tmp = exp(-a[ii]segLen); tmpBins[ii] = tmpBins[ii] tmp + e[ii] (1.0 - tmp); } }

Here I will try to explain the camera model with a couple of examples and some images. The images are from the XRayImage query, which uses the same theta and phi angles. I am assuming that you will be performing the query on a 2d data set.

Here I have a 2d R-Z mesh.

hohlraum1

In 3D the object would get rotated about Z axis. Here is a volume plot with the revolve operator applied. We are looking down the Z axis from the right to the left. It hard to tell from the triad, but the Z axis is coming out of the screen.

hohlraum2

Here is the result of the XRayImage query with theta = 0. and phi = 0., which corresponds to the image above.

hohlraum3

Here is the volume plot again looking at it from the side down the X axis.

hohlraum4

Here is the result of the XRayImage query with theta = 90. and phi = 0., which corresponds to the image above. X is coming out of the screen.

hohlraum5

Hope that helps.

I will work on finding out what the units are on the variables and what the output is.

Eric

brugger1 commented 3 years ago

Here is a link to our test suite for the Hohlraum flux query that shows how to use it from Python.

https://visit-dav.github.io/dashboard/2021-01-10-22:00/pascal_trunk_serial/queries_hohlraum_py.html

brugger1 commented 3 years ago

I found this comment in the code regarding units:

Flux values in Eu / (ms cm2 keV).

Eric

brugger1 commented 3 years ago

From Dan Laney:

The units are derived from the emissivity units, whatever those are. I don’t have the notes from the scripts I front of me so I can’t verify exactly, but you can derive them from the 1-D transport equation:

I_1 = I_0 e ^ (-length * opacity)

So whatever units the code spits out for emission should be the correct ones. The caveat: a multi group emission may or may not be weighted by the width of the energy bin. I think I do that weighting if the code does not do it (some do not). However, this might be something that I did in Python before sending them to HFQ, so it might be that visit just pushes the values through but I do not remember for sure!

I hope this helps, sorry it’s not more helpful!

Dan