Commit 5c02b279 authored by Robert Smith's avatar Robert Smith
Browse files

Merge remote-tracking branch 'origin/next' into

UnifiedVizRefactor_NoReactor

Conflicts:
	org.eclipse.ice.client.widgets.test/META-INF/MANIFEST.MF
	org.eclipse.ice.client.widgets/src/org/eclipse/ice/client/widgets/ICEFormEditor.java
	org.eclipse.ice.repository/ice.macosx_product.launch
	org.eclipse.ice.repository/ice.product_linux.launch
	org.eclipse.ice.viz.service.geometry/META-INF/MANIFEST.MF
parents 60aebfa2 9f97c316
# Copyright (c) 2012, 2014 UT-Battelle, LLC.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
# Initial API and implementation and/or initial documentation - Jay Jay Billings,
# Jordan H. Deyton, Dasha Gorin, Alexander J. McCaskey, Taylor Patterson,
# Claire Saunders, Matthew Wang, Anna Wojtowicz
#Set the minimum required version of cmake for this project.
cmake_minimum_required(VERSION 2.8)
#Set a name for this project.
project(native)
# ICE requires C++11 to use shared pointers
list( APPEND CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}")
#Find boost
FIND_PACKAGE(Boost 1.35 REQUIRED)
#Find HDF5
FIND_PACKAGE(HDF5 COMPONENTS CXX REQUIRED)
#Enable testing.
enable_testing()
#Add the I/O, data structures and reactor directories
add_subdirectory(src/native/org.eclipse.ice.io.native)
add_subdirectory(src/native/org.eclipse.ice.datastructures.native)
add_subdirectory(src/native/org.eclipse.ice.reactor.native)
add_subdirectory(src/native/org.eclipse.ice.reactor.sfr.native)
#Add the test directories
add_subdirectory(tests/native/org.eclipse.ice.io.native.test)
add_subdirectory(tests/native/org.eclipse.ice.reactor.native.test)
add_subdirectory(tests/native/org.eclipse.ice.reactor.sfr.native.test)
add_subdirectory(examples)
# The Doxyfile.in and UseDoxygen.cmake files are not in the git repo. --jdeyton 20150129
#Create the documentation directory and set up the doc target.
#set(DOC_DIR "${CMAKE_BINARY_DIR}/documentation")
#if(NOT EXISTS ${DOC_DIR})
# execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${DOC_DIR}")
#endif(NOT EXISTS ${DOC_DIR})
#set(DOXYFILE_OUTPUT_DIR "${DOC_DIR}")
#set(DOXYFILE_LATEX "ON")
#set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}")
#include(UseDoxygen REQUIRED)
......@@ -17,5 +17,6 @@
<mapAttribute key="org.eclipse.debug.core.environmentVariables">
<mapEntry key="LD_LIBRARY_PATH" value="/home/bkj/Programs/hdf-java-2.10/HDF-JAVA-2.10.0-Linux/usr/lib/"/>
</mapAttribute>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:/ice}"/>
</launchConfiguration>
# Copyright (c) 2013, 2014 UT-Battelle, LLC.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
# Initial API and implementation and/or initial documentation - Jay Jay Billings,
# Jordan H. Deyton, Dasha Gorin, Alexander J. McCaskey, Taylor Patterson,
# Claire Saunders, Matthew Wang, Anna Wojtowicz
#Set the package name
SET(PACKAGE_NAME "org.eclipse.ice.reactor.examples")
#Set the description
SET(PACKAGE_DESCRIPTION "Native tests of the ICE Reactor Packages")
#include directories from the source
include_directories(${Boost_BINARY_DIRS})
include_directories(${HDF5_INCLUDE_DIRS})
include_directories(${PROJECT_SOURCE_DIR}/src/native/org.eclipse.ice.datastructures.native/)
include_directories(${PROJECT_SOURCE_DIR}/src/native/org.eclipse.ice.io.native/hdf/)
include_directories(${PROJECT_SOURCE_DIR}/src/native/org.eclipse.ice.reactor.native/)
include_directories(${Boost_INCLUDE_DIRS})
#link the directories
#link_directories(${Boost_LIBRARY_DIRS})
link_directories(${HDF5_LIBRARY_DIRS})
link_directories(${native_BINARY_DIR}/src/native/org.eclipse.ice.reactor.native/)
link_directories(${native_BINARY_DIR}/src/native/org.eclipse.ice.datastructures.native/)
link_directories(${native_BINARY_DIR}/src/native/org.eclipse.ice.io.native/hdf/)
file(GLOB tests *.cpp)
#If boost was found, create tests
if(Boost_FOUND)
#loop over each of the tester files and add them as tests
foreach(test ${tests})
#Get the file name component without the end tag
get_filename_component(testName ${test} NAME_WE)
#add executable
add_executable(${testName} ${test})
#Link libraries
target_link_libraries(${testName} ICEReactor ICEIO ${HDF5_LIBRARIES})
#add the test
#add_test(${testName} ${testName})
endforeach()
endif()
#Set cpack variables
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PACKAGE_NAME})
set(CPACK_PACKAGE_NAME ${PACKAGE_DESCRIPTION})
set(CPACK_PACKAGE_VERSION "2.0.0")
SET(CPACK_PACKAGE_VERSION_MAJOR "2")
SET(CPACK_PACKAGE_VERSION_MINOR "0")
SET(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_VENDOR "Oak Ridge National Laboratory")
set(CPACK_PACKAGE_CONTACT "billingsjj@ornl.gov")
#set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
#Set package generators
set(CPACK_GENERATOR "DEB;RPM;TGZ;ZIP")
#These include statements are required for CPack
include(InstallRequiredSystemLibraries)
include(CPack)
/*******************************************************************************
* Copyright (c) 2012, 2014 UT-Battelle, LLC.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Initial API and implementation and/or initial documentation - Jay Jay Billings,
* Jordan H. Deyton, Dasha Gorin, Alexander J. McCaskey, Taylor Patterson,
* Claire Saunders, Matthew Wang, Anna Wojtowicz
*******************************************************************************/
#include <pwr/PressurizedWaterReactor.h>
#include <pwr/FuelAssembly.h>
#include <vector>
#include <memory>
#include <string>
#include <IData.h>
#include <LWRRod.h>
#include <LWRComponentWriter.h>
#include <LWRComponentReader.h>
#include <sys/stat.h>
#include <sstream>
#include <iostream>
using namespace ICE_Reactor;
/**
* Sets up the workspace directory.
*/
void beforeClass() {
//Create folder testPath in local directory - relative!
std::string testFolder = "ICEIOTestsDir/";
mkdir(testFolder.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
//Delete file
std::string testFile = testFolder + "test.h5";
remove(testFile.c_str());
}
/**
* Deletes the workspace once finished.
*/
void afterClass() {
//relative!
std::string testFolder = "ICEIOTestsDir/";
std::string testFile = testFolder + "test.h5";
//Delete file
//remove(testFile.c_str());
//Delete folder
remove(testFolder.c_str());
}
/**
* This class is a sample code used to demonstrate a break down on how to utilize the PressurizedWaterReactor and its reading/writing capabilities.
* More examples and explanations of the code can be found in our testing package.
*/
int main () {
//Setup the workspace
beforeClass();
//Create a basic PressurizedWaterReactor. It will be 15x15 in shape.
int reactorSize = 15;
int assemblySize = 17;
std::shared_ptr<PressurizedWaterReactor> reactor( new PressurizedWaterReactor(reactorSize));
std::string fuelAssemblyBetaName = "FuelAssembly Beta";
//Create a 17x17 FuelAssembly. This will contain rods (LWRrods) and be contained in the reactor
//Notice how we use shared_ptrs to allocate. This is important because adding components to the reactor can only be achieved with the use of shared pointers.
//This is useful because it cuts down on alot of memory leaks and management.
std::shared_ptr<FuelAssembly> fuelAssemblyAlpha( new FuelAssembly(assemblySize));
//All pieces that implement LWRComponent will allow you to set names and descriptions
fuelAssemblyAlpha.get()->setName("FuelAssembly Alpha");
//You can also create a FuelAssembly by using the more detailed overloaded operations.
std::shared_ptr<FuelAssembly> fuelAssemblyBeta( new FuelAssembly(fuelAssemblyBetaName, assemblySize));
//Lets add some rods to the Alpha assembly. We can start out by adding all rods (LWRRods) to the 17x17 grid.
//Add 3 rods
for(int i = 0; i < 3; i++) {
//Name of the LWRRod
std::stringstream ss1;
ss1 << i;
//Add an integer value to the end of the rod. Rods should always be uniquely name within each assembly.
std::string rodName = "LWRRodAlpha " +ss1.str();
//Create a LWRRod. This will name the rod, add a custom material, add pressure, and create a new stack. Please use the parameterized constructors when possible in order to increase coding productivity
std::shared_ptr<MaterialBlock> mBlock (new MaterialBlock());
std::shared_ptr< std::vector < std::shared_ptr < MaterialBlock > > > blocks ( new std::vector < std::shared_ptr< MaterialBlock> >());
blocks.get()->push_back(mBlock);
std::shared_ptr<LWRRod> rod (new LWRRod(rodName, std::shared_ptr<Material> (new Material("LWRRod's Material")), ((double) (i * .1)), blocks));
//Add the rod. Notice it will return a value to confirm if it was added correctly.
bool retVal = fuelAssemblyAlpha.get()->addLWRRod(rod);
}
//If you need to place statepoint data on each individual rod, then do it this way
for(int i = 0; i < assemblySize; i++) {
for(int j = 0; j < assemblySize; j++) {
std::stringstream ss1, ss2;
ss1 << i;
ss2 << j;
std::string featureName1 = "Axial Pin Power";
std::string featureName2 = "Average Pin Power";
//set the location for rod 1
fuelAssemblyAlpha.get()->setLWRRodLocation("LWRRodAlpha 1", i, j);
std::shared_ptr<LWRData> data1 ( new LWRData(featureName1));
data1.get()->setValue(i*j * .1);
std::shared_ptr<LWRData> data2 ( new LWRData(featureName2));
data2.get()->setValue(i*j * .1);
//Add data at timestep for multiple areas of data.
for(int k = 0; k < 49; k++) {
fuelAssemblyAlpha.get()->getLWRRodDataProviderAtLocation(i, j).get()->addData(data1, 0.0);
if(k == 48) {
fuelAssemblyAlpha.get()->getLWRRodDataProviderAtLocation(i, j).get()->addData(data2, 0.0);
}
}
}
}
//Now we have two fuelAssemblies. One has rods and the other does not. Lets add them to the PressurizedWaterReactor
reactor.get()->addAssembly(Fuel, fuelAssemblyAlpha);
reactor.get()->addAssembly(Fuel, fuelAssemblyBeta);
//We can now set their locations on the grid keyed on their name. This is important to designate locations within the grid
//Set Alpha locations
reactor.get()->setAssemblyLocation(Fuel, fuelAssemblyAlpha.get()->getName(), 5, 5);
reactor.get()->setAssemblyLocation(Fuel, fuelAssemblyAlpha.get()->getName(), 6, 6);
reactor.get()->setAssemblyLocation(Fuel, fuelAssemblyAlpha.get()->getName(), 7, 7);
reactor.get()->setAssemblyLocation(Fuel, fuelAssemblyAlpha.get()->getName(), 8, 8);
//Set Beta Locations
reactor.get()->setAssemblyLocation(Fuel, fuelAssemblyBeta.get()->getName(), 1, 1);
reactor.get()->setAssemblyLocation(Fuel, fuelAssemblyBeta.get()->getName(), 2, 2);
reactor.get()->setAssemblyLocation(Fuel, fuelAssemblyBeta.get()->getName(), 3, 3);
reactor.get()->setAssemblyLocation(Fuel, fuelAssemblyBeta.get()->getName(), 4, 4);
//If you want to create another FuelAssembly, this can be achieved by using the copying constructor.
std::shared_ptr<ICE_DS::Identifiable> identityFuelAssembly = fuelAssemblyAlpha.get()->clone();
//The cloned object is a DEEP COPIED object. If it is not, please contact us ASAP!!!
//You will have to cast it out of it's interface and "up" cast to the more defined structure
std::shared_ptr<FuelAssembly>thetaFuelAssembly = std::dynamic_pointer_cast<FuelAssembly>(identityFuelAssembly);
//Now we can set it's name and add it. Keep in mind that names should always be unique, otherwise it will not work properly.
thetaFuelAssembly.get()->setName("Fuel Assembly Theta");
reactor.get()->addAssembly(Fuel, thetaFuelAssembly);
//Add the theta Fuel Assembly to the list
reactor.get()->addAssembly(Fuel, thetaFuelAssembly);
//Populate reactor with thetaFuelAssembly
reactor.get()->setAssemblyLocation(Fuel, thetaFuelAssembly.get()->getName(), 7, 8);
reactor.get()->setAssemblyLocation(Fuel, thetaFuelAssembly.get()->getName(), 8, 9);
reactor.get()->setAssemblyLocation(Fuel, thetaFuelAssembly.get()->getName(), 9, 10);
//Now you have a Reactor with 3 FuelAssemblies. Some have rods, others have none.
//This is a way to persist it to h5. Please keep in mind that the path is a string and is operating system dependent!
//Get the file Path
std::string testFileName = "test.h5";
std::string testFolder = "ICEIOTestsDir/";
std::string dataFile = testFolder + testFileName +"";
//Create a writer
LWRComponentWriter lWRComponentWriter;
//Cast it up to the iHdfWriteable
// write the reactor. Note this is FLEXIBLE to write just FuelAssemblies or even rods!
//Also, this will overwrite any files with that name. So be careful!
lWRComponentWriter.write(reactor, dataFile);
//Create a new read
LWRComponentReader lWRComponentReader;
//Read from the URI
std::shared_ptr<ICE_IO::IHdfReadable> iHdfReadable = lWRComponentReader.read(dataFile);
//Cast to a PressurizedWaterReactor
std::shared_ptr<PressurizedWaterReactor> castedReactor = std::dynamic_pointer_cast<PressurizedWaterReactor>(iHdfReadable);
//You still have a completed reactor! Yay!
//You can print out some of the values
std::cout << "Are the two reactors equal? " << castedReactor.get()->operator==(*reactor.get()) << std::endl;
//Print out some values
std::cout << "Name of the Reactor: " << castedReactor.get()->getName() << std::endl;
//Get the fuel Assembly and print out its rods
std::shared_ptr<FuelAssembly> fuelAssembly = std::dynamic_pointer_cast<FuelAssembly> (castedReactor.get()->getAssemblyByName(Fuel, fuelAssemblyAlpha.get()->getName()));
std::cout <<"Found FuelAssembly " << fuelAssembly.get()->getName() << std::endl;
//If you need more thorough examples of the structures within this package, please view the tester pieces in the iceproject directory
}
/*******************************************************************************
* Copyright (c) 2012, 2014 UT-Battelle, LLC.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Initial API and implementation and/or initial documentation - Jay Jay Billings,
* Jordan H. Deyton, Dasha Gorin, Alexander J. McCaskey, Taylor Patterson,
* Claire Saunders, Matthew Wang, Anna Wojtowicz
*******************************************************************************/
#include <pwr/PressurizedWaterReactor.h>
#include <pwr/FuelAssembly.h>
#include <vector>
#include <memory>
#include <string>
#include <IData.h>
#include <LWRRod.h>
#include <LWRComponentWriter.h>
#include <LWRComponentReader.h>
#include <sys/stat.h>
#include <sstream>
#include <iostream>
#include <time.h>
#include "TestDriver.h"
using namespace ICE_Reactor;
//This file represents a tester driver for running scalability between revisions of code.
//This code will create the following:
//A PressurizedWaterReactor that contains a number of fuel assemblies (specified by user)
//Each FuelAssembly will have the following parameters to be adjusted by the input arguments
/**
* 1.) The number of Features
* 2.) The number of state point datas at each feature
* 3.) The number of time steps
*/
int main(int argc, char **argv) {
//begin-user-code
//Local declarations
int numOfAssemblies;
int numOfFeatures;
int numOfDatas;
int numOfTimesteps;
int testType; //0 for new method, 1 for deprecated method for storing features
//Default reactor and assembly size
int assemblySize = 17;
int reactorSize = 15;
//If there are not 5 arguments passed, throw usage error and return
if(argc != 6) {
std::cout << "Usage: testDriver numOfAssemblies numOfFeatures numOfDatas numOfTimesteps testType(0/1)" << std::endl;
return 0;
}
//Convert the data
try {
//Parse data
numOfAssemblies = atoi(argv[1]);
numOfFeatures = atoi(argv[2]);
numOfDatas = atoi(argv[3]);
numOfTimesteps = atoi(argv[4]);
testType = atoi(argv[5]);
} catch (...) {
std::cout << "Args not numerical" << std::endl;
return 0;
}
if(numOfAssemblies < 1 || numOfFeatures < 1 || numOfDatas < 1 || numOfTimesteps < 1 || testType < 0 || testType > 1) {
std::cout << "Args not within legal bounds. Exiting";
return 0;
}
//Start the tests
TestDriver driver;
//Prep the reactor
std::shared_ptr<PressurizedWaterReactor> reactor;
//Time and clock variables
clock_t startClock, beforeWriteClock, afterWriteClock, afterReadClock;
time_t startTime, beforeWriteTime, afterWriteTime, afterReadTime;
//Start the clock
startClock = clock();
startTime = time(0);
//Setup data
if(testType == 0) reactor = driver.newMethodSetupData(numOfAssemblies, numOfFeatures, numOfDatas, numOfTimesteps, reactorSize, assemblySize);
if(testType == 1) reactor = driver.oldMethodSetupData(numOfAssemblies, numOfFeatures, numOfDatas, numOfTimesteps, reactorSize, assemblySize);
beforeWriteClock = clock();
beforeWriteTime = time(0);
//Create the data file
//Get the file Path
std::string testFileName = "test.h5";
std::string dataFile = testFileName +"";
//Create a writer
LWRComponentWriter lWRComponentWriter;
// write the reactor. Note this is FLEXIBLE to write just FuelAssemblies or even rods!
//Also, this will overwrite any files with that name. So be careful!
lWRComponentWriter.write(reactor, dataFile);
afterWriteClock = clock();
afterWriteTime = time(0);
//Create a new read
LWRComponentReader lWRComponentReader;
//Read from the URI
std::shared_ptr<ICE_IO::IHdfReadable> iHdfReadable = lWRComponentReader.read(dataFile);
//Cast to a PressurizedWaterReactor
std::shared_ptr<PressurizedWaterReactor> castedReactor = std::dynamic_pointer_cast<PressurizedWaterReactor>(iHdfReadable);
afterReadClock = clock();
afterReadTime = time(0);
//Calculate clock cpu time
float writeClock((float) afterWriteClock - (float) beforeWriteClock);
float readClock((float)afterReadClock - (float) afterWriteClock);
float setupClock((float) beforeWriteClock - (float)startClock);
//Calculate time
double setupTime = difftime(beforeWriteTime, startTime);
double writeTime = difftime(afterWriteTime, beforeWriteTime);
double readTime = difftime(afterReadTime, afterWriteTime);
std::cout << "Outcome of test" << std::endl;
std::cout << "Number of Fuel Assembles: " << numOfAssemblies << std::endl;
std::cout << "Number of Time steps: " << numOfTimesteps << std::endl;
std::cout << "Number of Features per time step: " << numOfFeatures << std::endl;
std::cout << "Number of LWRData per Feature: " << numOfDatas << std::endl;
std::cout << "Size of reactor: " << reactorSize << std::endl;
std::cout << "Size of each Fuel Assembly: " << assemblySize << std::endl;
std::cout << "TestType : ";
//Test type
if(testType == 0) std::cout << "new" << std::endl;
if(testType == 1) std::cout << "old" << std::endl;
//Print time
std::cout << std::endl;
std::cout << "Time" << std::endl;
std::cout << "Total time (seconds): " << (writeTime + readTime + setupTime) << std::endl;
std::cout << "Total Read and Write time (seconds): " << (writeTime + readTime) << std::endl;
std::cout << "Setup data time (seconds): " << setupTime << std::endl;
std::cout << "Read time (seconds): " << readTime << std::endl;
std::cout << "Write time (seconds): " << writeTime << std::endl;
//Print clock time
std::cout << std::endl;
std::cout << "Clock cycle time" << std::endl;
std::cout << "Total clock (seconds): " << (writeClock + readClock + setupTime) / CLOCKS_PER_SEC << std::endl;
std::cout << "Total Read and Write clock (seconds): " << (readClock + writeClock)/CLOCKS_PER_SEC << std::endl;
std::cout << "Setup clock (clock): " << setupTime / CLOCKS_PER_SEC << std::endl;
std::cout << "Read clock (seconds): " << readClock / CLOCKS_PER_SEC << std::endl;
std::cout << "Write clock (seconds): " << writeClock / CLOCKS_PER_SEC << std::endl;
std::cout << std::endl;
std::cout << std::endl;
std::cout << std::endl;
//end-user-code
}
std::shared_ptr<PressurizedWaterReactor> TestDriver::newMethodSetupData(int numOfAssemblies, int numOfFeatures, int numOfDatas, int numOfTimesteps, int reactorSize, int assemblySize) {
//begin-user-code
std::shared_ptr<PressurizedWaterReactor> reactor (new PressurizedWaterReactor(reactorSize));
//Make an assembly
std::shared_ptr<FuelAssembly> assembly(new FuelAssembly(assemblySize));
//Create rods. There should only be 3 added
for(int j = 0; j < 3; j++) {
//Name of the LWRRod
std::stringstream ss1;
ss1 << j;
//Add an integer value to the end of the rod. Rods should always be uniquely name within each assembly.
std::string rodName = "LWRRodAlpha " +ss1.str();
//Create a LWRRod. This will name the rod, add a custom material, add pressure, and create a new stack. Please use the parameterized constructors when possible in order to increase coding productivity
std::shared_ptr<MaterialBlock> mBlock (new MaterialBlock());
std::shared_ptr< std::vector < std::shared_ptr < MaterialBlock > > > blocks ( new std::vector < std::shared_ptr< MaterialBlock> >());
blocks.get()->push_back(mBlock);
std::shared_ptr<LWRRod> rod (new LWRRod(rodName, std::shared_ptr<Material> (new Material("LWRRod's Material")), ((double) (j * .1)), blocks));
//Add rod
assembly.get()->addLWRRod(rod);
}
//Setup Feature and LWRData for each position in the assembly for each time step
for(int t = 0; t < numOfTimesteps; t++) {
for(int j = 0; j < assemblySize; j++) {
for(int k = 0; k < assemblySize; k++) {
//Get the indexes iterated into strings for later
std::stringstream ss1, ss2, ss3, ss4;
ss1 << j;
ss2 << k;
if(t == 0) {
//set the location for rod 1
assembly.get()->setLWRRodLocation("LWRRodAlpha 1", j, k);
}
//Iterate over the numOfFeatures
for(int l = 0; l < numOfFeatures; l++) {
ss3 << l;
//Iterate over the numOfDatas
for(int m = 0; m < numOfDatas; m++) {
//Create the featureName
std::string featureName = "Feature " + ss3.str();
//Create LWRData at featureName
std::shared_ptr<LWRData> data (new LWRData(featureName));
data.get()->setValue(j*.1+l*(m+1) * .1);
//Set the position at timestep for the data
assembly.get()->getLWRRodDataProviderAtLocation(j, k).get()->addData(data, t);
}
}