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
26 changes: 24 additions & 2 deletions src/Launcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,26 @@ bool isAdaptedJson(const std::string& filename)
return hasSuffix(filename, ".tulip.adapted.json");
}

std::string ensureTrailingSlash(const std::string& folder)
{
if (folder.empty() || folder.back() == '/') {
return folder;
}
return folder + "/";
}

std::string extractCaseName(const std::string& inputFile)
{
const auto filename = std::filesystem::path(inputFile).filename().string();
if (hasSuffix(filename, ".tulip.input.json")) {
return filename.substr(0, filename.size() - std::string(".tulip.input.json").size());
}
if (hasSuffix(filename, ".tulip.adapted.json")) {
return filename.substr(0, filename.size() - std::string(".tulip.adapted.json").size());
}
return std::filesystem::path(filename).stem().string();
}

} // namespace

Launcher::Launcher(const std::string& inputFile, const std::string& exportFolder)
Expand All @@ -43,10 +63,12 @@ Launcher::Launcher(const std::string& inputFile, const std::string& exportFolder
void Launcher::run()
{
std::cout << "Loading input file: " << inputFile_ << std::endl;
const std::string outputPrefix = extractCaseName(inputFile_) + ".";
const std::string driverExportFolder = ensureTrailingSlash(exportFolder_) + outputPrefix;

if (isAdaptedJson(inputFile_)) {
auto driver = Driver::loadFromAdaptedFile(inputFile_);
driver.setExportFolder(exportFolder_);
driver.setExportFolder(driverExportFolder);
std::cout << "Running Tulip analysis..." << std::endl;
driver.run();
}
Expand All @@ -60,7 +82,7 @@ void Launcher::run()
Adapter adapter(inputFile_);
AdaptedInputParser parser(inputFile_, adapter.getAdaptedInputJSON());
Driver driver(parser.readModel(), parser.readDriverOptions());
driver.setExportFolder(exportFolder_);
driver.setExportFolder(driverExportFolder);
std::cout << "Running Tulip analysis..." << std::endl;
driver.run();
}
Expand Down
2 changes: 1 addition & 1 deletion src/driver/Results.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,7 @@ nlohmann::json MultiwireParametersByDomain::toFDTDJSON() const
}
else if (auto* inCell = dynamic_cast<InCellPotentials*>(params.get())) {
mat["type"] = "unshieldedMultiwire";
mat["inCellParameters"]["multipolarExpansion"] = inCell->toJSON();
mat["multipolarExpansion"] = inCell->toJSON();
}

materials.push_back(mat);
Expand Down
9 changes: 4 additions & 5 deletions test/driver/DriverTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1048,11 +1048,10 @@ TEST_F(DriverTest, two_wires_open_fdtd_json)
// Should have 1 material of type unshieldedMultiwire.
ASSERT_EQ(1, fdtdJSON["materials"].size());
EXPECT_EQ("unshieldedMultiwire", fdtdJSON["materials"][0]["type"]);
ASSERT_TRUE(fdtdJSON["materials"][0].contains("inCellParameters"));
ASSERT_TRUE(
fdtdJSON["materials"][0]["inCellParameters"].contains("multipolarExpansion"));
fdtdJSON["materials"][0].contains("multipolarExpansion"));

auto& mp = fdtdJSON["materials"][0]["inCellParameters"]["multipolarExpansion"];
auto& mp = fdtdJSON["materials"][0]["multipolarExpansion"];
ASSERT_TRUE(mp.contains("innerRegionBox"));
ASSERT_TRUE(mp.contains("electric"));
ASSERT_TRUE(mp.contains("magnetic"));
Expand Down Expand Up @@ -1100,8 +1099,8 @@ TEST_F(DriverTest, coax_and_bare_wire_fdtd_json)
ASSERT_EQ(1, (*shielded)["capacitancePerMeter"].size());

// Check unshielded multiwire (open domain).
ASSERT_TRUE(unshielded->contains("inCellParameters"));
auto& mp = (*unshielded)["inCellParameters"]["multipolarExpansion"];
ASSERT_TRUE(unshielded->contains("multipolarExpansion"));
auto& mp = (*unshielded)["multipolarExpansion"];
EXPECT_EQ(2, mp["electric"].size());
EXPECT_EQ(2, mp["magnetic"].size());

Expand Down
15 changes: 10 additions & 5 deletions test/driver/LauncherTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@ namespace {

void expectFDTDOutput(
const std::string& outputFolder,
const std::string& caseName,
std::size_t expectedMaterials,
std::size_t expectedAssociations)
{
const auto outputFile = outputFolder + "tulip.out.json";
const auto outputFile = outputFolder + caseName + ".tulip.out.json";
ASSERT_TRUE(std::filesystem::exists(outputFile));

const auto outJSON = readJSON(outputFile);
Expand All @@ -33,6 +34,7 @@ class LauncherTest : public ::testing::Test {};
TEST_F(LauncherTest, empty_coax_from_adapted)
{
// Create Launcher instance with empty_coax adapted JSON file
const std::string caseName = "empty_coax";
const std::string inputFile = inputCase("empty_coax");
const std::string outputFolder = outFolder() + "LauncherTest.empty_coax/";

Expand All @@ -41,7 +43,7 @@ TEST_F(LauncherTest, empty_coax_from_adapted)

// This should complete without throwing an exception
EXPECT_NO_THROW(tulip.run());
expectFDTDOutput(outputFolder, 1, 1);
expectFDTDOutput(outputFolder, caseName, 1, 1);
}

TEST_F(LauncherTest, empty_coax_from_input_json)
Expand All @@ -54,19 +56,20 @@ TEST_F(LauncherTest, empty_coax_from_input_json)

Launcher tulip(inputFile, outputFolder);
EXPECT_NO_THROW(tulip.run());
expectFDTDOutput(outputFolder, 1, 1);
expectFDTDOutput(outputFolder, caseName, 1, 1);
}

TEST_F(LauncherTest, coax_and_bare_wire_from_adapted)
{
const std::string caseName = "coax_and_bare_wire";
const std::string inputFile = inputCase("coax_and_bare_wire");
const std::string outputFolder =
outFolder() + "LauncherTest.coax_and_bare_wire/";

Launcher tulip(inputFile, outputFolder);
EXPECT_NO_THROW(tulip.run());

expectFDTDOutput(outputFolder, 2, 2);
expectFDTDOutput(outputFolder, caseName, 2, 2);
}

TEST_F(LauncherTest, nested_shield_resistance_and_transfer_impedance_written_to_output_json)
Expand Down Expand Up @@ -104,11 +107,13 @@ TEST_F(LauncherTest, nested_shield_resistance_and_transfer_impedance_written_to_

const std::string outputFolder =
outFolder() + "LauncherTest.coax_and_bare_wire_with_shield_transfer/";
const std::string outputCaseName =
"LauncherTest.coax_and_bare_wire_with_shield_transfer";

Launcher tulip(tempInputFile, outputFolder);
EXPECT_NO_THROW(tulip.run());

const auto outJson = readJSON(outputFolder + "tulip.out.json");
const auto outJson = readJSON(outputFolder + outputCaseName + ".tulip.out.json");

std::cout << outJson.dump(4) << std::endl;

Expand Down
Loading