Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,28 @@ namespace Iocatalyst {
return catPipes[id];
}

bool CatalystManager::setupConduitNodeForCatalystExecute(conduit_cpp::Node &n, CatalystProps &p,
int state, double time,
conduit_cpp::Node &data)
{
if (p.enableCatalystMultiInputPipeline) {
setMultiInputWaitState(p.catalystPipelineID, state, time, data);
if (canExecuteMultiInputScript(p.catalystPipelineID)) {
for (auto &cp : catPipes) {
addExecuteData(n, cp.second.catalystInputName, cp.second.state, cp.second.time,
cp.second.data);
}
}
else {
return true;
}
}
else {
addExecuteData(n, p.catalystInputName, state, time, data);
}
return false;
}

void CatalystManager::execute(CatalystManager::CatalystPipelineID id, int state, double time,
conduit_cpp::Node &data)
{
Expand All @@ -165,20 +187,11 @@ namespace Iocatalyst {
conduit_cpp::Node n;
addExecuteProps(n, p, state, time);

if (p.enableCatalystMultiInputPipeline) {
setMultiInputWaitState(p.catalystPipelineID, state, time, data);
if (canExecuteMultiInputScript(p.catalystPipelineID)) {
for (auto cp : catPipes) {
addExecuteData(n, cp.second.catalystInputName, cp.second.state, cp.second.time,
cp.second.data);
}
}
else {
return;
}
}
else {
addExecuteData(n, p.catalystInputName, state, time, data);
bool returnDueToMultiPipeNotReady = false;

returnDueToMultiPipeNotReady = setupConduitNodeForCatalystExecute(n, p, state, time, data);
if (returnDueToMultiPipeNotReady) {
return;
}

catalyst_execute(conduit_cpp::c_node(&n));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,8 @@ namespace Iocatalyst {

CatalystPipelineID initialize(const Ioss::PropertyManager &props,
const Ioss::ParallelUtils &putils);
bool setupConduitNodeForCatalystExecute(conduit_cpp::Node &n, CatalystProps &p, int state,
double time, conduit_cpp::Node &data);
void execute(CatalystPipelineID id, int state, double time, conduit_cpp::Node &data);
void finalize(CatalystPipelineID id);
void addScriptProps(conduit_cpp::Node &n, const CatalystProps &p);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -565,3 +565,58 @@ TEST_F(ManagerTest, ManagerAddExecuteDataThreeInputs)
checkExecuteData(n, m1Channel, state + 1, time + 1, m1);
checkExecuteData(n, m2Channel, state + 2, time + 2, m2);
}

TEST_F(ManagerTest, ManagerCallExecuteWithTwoInputsOneScript)
{
reset();

conduit_cpp::Node m1;
std::string m1Channel = "m1";
m1["m1/data"] = 100;

conduit_cpp::Node m2;
std::string m2Channel = "m2";
m2["m2/data"] = 500;

std::string name = "multi";
int state = 2;
double time = 8.9;
props.add(Ioss::Property(CatalystManager::CATALYST_MULTI_INPUT_PIPELINE_NAME, name));
props.add(Ioss::Property(CatalystManager::CATALYST_INPUT_NAME, "inputx"));
initialize();
// CatalystManager::getInstance().setMultiInputWaitState(id, state, time, n);
conduit_cpp::Node m;

Ioss::PropertyManager propsTwo;
propsTwo.add(Ioss::Property(CatalystManager::CATALYST_MULTI_INPUT_PIPELINE_NAME, name));
propsTwo.add(Ioss::Property(CatalystManager::CATALYST_INPUT_NAME, "inputy"));
auto idTwo = CatalystManager::getInstance().initialize(propsTwo, putils);

CatalystManager &catMgr = CatalystManager::getInstance();
auto pppa = catMgr.getCatalystProps(id);
conduit_cpp::Node nnna;
catMgr.addExecuteProps(nnna, pppa, state, time);
auto pppb = CatalystManager::getInstance().getCatalystProps(idTwo);
conduit_cpp::Node nnnb;
catMgr.addExecuteProps(nnnb, pppb, state, time);
bool returnDueToMultiPipeNotReady = false;
returnDueToMultiPipeNotReady = catMgr.setupConduitNodeForCatalystExecute(nnna, pppa, 2, 10.2, m1);
EXPECT_TRUE(returnDueToMultiPipeNotReady);
returnDueToMultiPipeNotReady = catMgr.setupConduitNodeForCatalystExecute(nnnb, pppb, 2, 10.2, m2);
EXPECT_FALSE(returnDueToMultiPipeNotReady);
std::string datapatha = "catalyst/channels/inputx/data/m1/data";
std::string datapathb = "catalyst/channels/inputy/data/m2/data";
EXPECT_TRUE(nnnb.has_path(datapatha));
EXPECT_TRUE(nnnb.has_path(datapathb));
if (nnnb.has_path(datapatha) && nnnb.has_path(datapathb)) {
std::string resa = nnnb[datapatha].to_json();
std::string resb = nnnb[datapathb].to_json();
if ((resa != "100") || (resb != "500")) {
std::cerr << "ManagerCallExecuteWithTwoInputsOneScript test failing, "
"printing bad conduit node:\n";
std::cerr << nnnb.to_json() << "\n";
}
EXPECT_TRUE(resa == "100");
EXPECT_TRUE(resb == "500");
}
}
Loading