[Paraview] CoProcessing needed fields
Tim Gallagher
tim.gallagher at gatech.edu
Thu Nov 8 18:41:13 EST 2012
Andy,
Thanks for the answer.
What I'm doing doesn't use any writers -- I just want the CoProcessor to output images only. So I don't attach a writer, I just export the state and tell it to "Output Rendering Components". My pipeline looks like:
Load file -> CellDataToPointData -> Slice
This results in a RequestDataDescription:
def RequestDataDescription(datadescription):
"Callback to populate the request for current timestep"
if datadescription.GetForceOutput() == True:
for i in range(datadescription.GetNumberOfInputDescriptions()):
datadescription.GetInputDescription(i).AllFieldsOn()
datadescription.GetInputDescription(i).GenerateMeshOn()
return
for input_name in simulation_input_map.values():
LoadRequestedData(datadescription, input_name)
This means in my case, there are no fields defined inside the datadescription. So when I try to do the IsFieldNeeded() call in my adaptor, it's always false. If I print the number of fields from GetNumberOfFields(), I get 0.
So my images when they pop out have no data -- the fields don't exist for them to plot. It's just the slice using the default color for the surface.
I got it to work by making a new variable just under simulation_input_map:
simulation_cell_fields_needed = {simulation_input_map['rest_00000.xmf']: ["Temperature [K]", "Density [kg/m^3]"]}
simulation_point_fields_needed = {simulation_input_map['rest_00000.xmf']: []}
and putting in RequestDataDescription before the loop that calls LoadRequestedData:
for input_name in simulation_input_map.values():
idd = datadescription.GetInputDescriptionByName(input_name)
for cell_fields in simulation_cell_fields_needed[input_name]:
idd.AddCellField(cell_fields)
for point_fields in simulation_point_fields_needed[input_name]:
idd.AddPointField(point_fields)
When I do that, it all works.
Now, I guess my question is this... Where in the exported state script does it say what fields there are in the data? If I do a trace, when I load a file, I get something like:
REST_00207_xmf.CellArrays = ['APD_mass_fraction', 'APD_reaction_rate', 'AP_mass_fraction', 'AP_reaction_rate', 'BND_mass_fraction', 'BND\
_reaction_rate', 'Density [kg/m^3]', 'HybridSwitch', 'N2_mass_fraction', 'PRD_mass_fraction', 'PRD_reaction_rate', 'Pressure [Pa]', 'Subgrid\
kinetic energy [m^2/s^2]', 'Temperature [K]', 'Velocity [m/s]', 'iblanks']
and I expected something similar in the exported state script. But I don't see anything like that.
Following the Fortran API, I call the ClearFieldDataFromGrid which may get rid of the fields that Paraview told it the pipeline needs.
I could be misunderstanding something, I've never used VTK before this little project attempt. I can certainly send my adaptor code and python script if it helps clarify.
Thanks again,
Tim
----- Original Message -----
From: "Andy Bauer" <andy.bauer at kitware.com>
To: "tim gallagher" <tim.gallagher at gatech.edu>
Cc: "ParaView list" <paraview at paraview.org>
Sent: Thursday, November 8, 2012 6:20:01 PM
Subject: Re: [Paraview] CoProcessing needed fields
Hi Tim,
This should get set in the RequestDataDescription method in the generated Python script. When I first did it I thought we'd easily be able to figure out which fields were needed in order to update all of the required pipelines and/or views. Unfortunately this isn't trivial in VTK so basically what happens is that if a writer or view should output it specifies that all fields should be made available. This is the "datadescription.GetInputDescription(i).AllFieldsOn()" part of the generated python script.
Answering your final question, this is something that is done automatically in the generated script.
Andy
On Wed, Nov 7, 2012 at 2:57 PM, Tim Gallagher < tim.gallagher at gatech.edu > wrote:
Hi,
I see in the example code for ParaView/CoProcessing/Adaptors/FortranAdaptors/PhastaAdaptor/PhastaAdaptor.cxx calls like:
vtkCPInputDataDescription* idd =
ParaViewCoProcessing::GetCoProcessorData()->GetInputDescriptionByName("input");
...
if(idd->IsFieldNeeded("velocity"))
{
...
The only way IsFieldNeeded returns true is if that name field was added with AddCellField or AddPointField.
Where does that happen? My intuition says that the python or C++ processing script (generated by exporting state) would have those calls in it for the datasets that are actually used. In other words, if I set up my view in the GUI and I load my data and put a Slice through it and color by "Velocity", I expected the script from Export State to contain a call to AddCellField("Velocity"). At the very least I expected to see calls to add the fields I chose to load when I loaded my sample file to set up the view.
So is that something that I need to put in the script on my own after it's exported or did I miss something? If I have to put it there myself, is RequestDataDescription the correct place to put that?
Thanks,
Tim
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView
Follow this link to subscribe/unsubscribe:
http://www.paraview.org/mailman/listinfo/paraview
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.paraview.org/pipermail/paraview/attachments/20121108/4aa954c3/attachment-0001.htm>
More information about the ParaView
mailing list