diff --git a/EVENTS/HydroEventSelection.cpp b/EVENTS/HydroEventSelection.cpp index f3aa4e56..d6ffa3b3 100644 --- a/EVENTS/HydroEventSelection.cpp +++ b/EVENTS/HydroEventSelection.cpp @@ -76,11 +76,11 @@ UPDATES, ENHANCEMENTS, OR MODIFICATIONS. //********************************************************************************* enum class Event_b : bool { - GeoClawOpenFOAM_b = false, - WaveDigitalFlume_b = false, + GeoClawOpenFOAM_b = true, + WaveDigitalFlume_b = true, CoupledDigitalTwin_b = true, ClaymoreUW_b = true, - BasicClaymoreUW_b = true, + BasicClaymoreUW_b = false, TaichiEvent_b = true, CelerisTaichiEvent_b = true, StochasticWaves_b = true, diff --git a/EVENTS/MPM/AlgorithmMPM.cpp b/EVENTS/MPM/AlgorithmMPM.cpp index 4c33647e..6dcb3569 100644 --- a/EVENTS/MPM/AlgorithmMPM.cpp +++ b/EVENTS/MPM/AlgorithmMPM.cpp @@ -255,16 +255,20 @@ AlgorithmMPM::~AlgorithmMPM() void AlgorithmMPM::clear(void) { - // theOpenSeesPyScript->clear(); - // theSurfaceFile->clear(); + numericalMethod->setCurrentIndex(0); + particlesPerCell->clear(); + useASFLIP->setChecked(true); + useFBAR->setChecked(true); + ASFLIP_alpha->clear(); + ASFLIP_betaMin->clear(); + ASFLIP_betaMax->clear(); + FBAR_psi->clear(); + useFBAR_fusedG2P2G->setChecked(true); } bool AlgorithmMPM::outputToJSON(QJsonObject &jsonObject) { - // theOpenSeesPyScript->outputToJSON(jsonObject); - // theSurfaceFile->outputToJSON(jsonObject); - // Note: ClaymoreUW will also need these defined in the JSON model/body object, not just the nested JSON partition/device object // Future schema QJsonObject algorithmObject; @@ -278,60 +282,47 @@ AlgorithmMPM::outputToJSON(QJsonObject &jsonObject) algorithmObject["ASFLIP_beta_max"] = ASFLIP_betaMax->text().toDouble(); algorithmObject["FBAR_psi"] = FBAR_psi->text().toDouble(); jsonObject["algorithm"] = algorithmObject; - - // ClaymoreUW artifacts, Global algorithm settings. TODO: Deprecate - // jsonObject["type"] = numericalMethod->currentText(); - // jsonObject["ppc"] = particlesPerCell->text().toDouble(); - // jsonObject["use_ASFLIP"] = useASFLIP->isChecked(); - // jsonObject["use_FBAR"] = useFBAR->isChecked(); - // jsonObject["FBAR_fused_kernel"] = useFBAR_fusedG2P2G->isChecked(); // TODO: Rename - // jsonObject["alpha"] = ASFLIP_alpha->text().toDouble(); // TODO: Rename - // jsonObject["beta_min"] = ASFLIP_betaMin->text().toDouble(); // TODO: Rename - // jsonObject["beta_max"] = ASFLIP_betaMax->text().toDouble(); // TODO: Rename - // jsonObject["FBAR_ratio"] = FBAR_psi->text().toDouble(); // TODO: Rename? - return true; } bool AlgorithmMPM::inputFromJSON(QJsonObject &jsonObject) { + + this->clear(); // Clear all bodies - if (jsonObject.contains("algorithm")) { - QJsonObject algorithmObject = jsonObject["algorithm"].toObject(); - if (algorithmObject.contains("type")) { - QString type = algorithmObject["type"].toString(); - int index = numericalMethod->findText(type); - if (index != -1) { - numericalMethod->setCurrentIndex(index); - } - } - if (algorithmObject.contains("ppc")) { - particlesPerCell->setText(QString::number(algorithmObject["ppc"].toDouble())); - } - if (algorithmObject.contains("use_ASFLIP")) { - useASFLIP->setChecked(algorithmObject["use_ASFLIP"].toBool()); - } - if (algorithmObject.contains("use_FBAR")) { - useFBAR->setChecked(algorithmObject["use_FBAR"].toBool()); - } - if (algorithmObject.contains("FBAR_fused_kernel")) { - useFBAR_fusedG2P2G->setChecked(algorithmObject["FBAR_fused_kernel"].toBool()); - } - if (algorithmObject.contains("ASFLIP_alpha")) { - ASFLIP_alpha->setText(QString::number(algorithmObject["ASFLIP_alpha"].toDouble())); - } - if (algorithmObject.contains("ASFLIP_beta_min")) { - ASFLIP_betaMin->setText(QString::number(algorithmObject["ASFLIP_beta_min"].toDouble())); - } - if (algorithmObject.contains("ASFLIP_beta_max")) { - ASFLIP_betaMax->setText(QString::number(algorithmObject["ASFLIP_beta_max"].toDouble())); - } - if (algorithmObject.contains("FBAR_psi")) { - FBAR_psi->setText(QString::number(algorithmObject["FBAR_psi"].toDouble())); + if (jsonObject.contains("type")) { + QString type = jsonObject["type"].toString(); + int index = numericalMethod->findText(type); + if (index != -1) { + numericalMethod->setCurrentIndex(index); } } + if (jsonObject.contains("ppc")) { + particlesPerCell->setText(QString::number(jsonObject["ppc"].toDouble())); + } + if (jsonObject.contains("use_ASFLIP")) { + useASFLIP->setChecked(jsonObject["use_ASFLIP"].toBool()); + } + if (jsonObject.contains("use_FBAR")) { + useFBAR->setChecked(jsonObject["use_FBAR"].toBool()); + } + if (jsonObject.contains("FBAR_fused_kernel")) { + useFBAR_fusedG2P2G->setChecked(jsonObject["FBAR_fused_kernel"].toBool()); + } + if (jsonObject.contains("ASFLIP_alpha")) { + ASFLIP_alpha->setText(QString::number(jsonObject["ASFLIP_alpha"].toDouble())); + } + if (jsonObject.contains("ASFLIP_beta_min")) { + ASFLIP_betaMin->setText(QString::number(jsonObject["ASFLIP_beta_min"].toDouble())); + } + if (jsonObject.contains("ASFLIP_beta_max")) { + ASFLIP_betaMax->setText(QString::number(jsonObject["ASFLIP_beta_max"].toDouble())); + } + if (jsonObject.contains("FBAR_psi")) { + FBAR_psi->setText(QString::number(jsonObject["FBAR_psi"].toDouble())); + } return true; } @@ -339,9 +330,7 @@ AlgorithmMPM::inputFromJSON(QJsonObject &jsonObject) bool AlgorithmMPM::copyFiles(QString &destDir) { - // if (theOpenSeesPyScript->copyFile(destDir) != true) - // return false; - // return theSurfaceFile->copyFile(destDir); + Q_UNUSED(destDir); return true; } diff --git a/EVENTS/MPM/BodiesMPM.cpp b/EVENTS/MPM/BodiesMPM.cpp index b0c0ab16..0a769b42 100644 --- a/EVENTS/MPM/BodiesMPM.cpp +++ b/EVENTS/MPM/BodiesMPM.cpp @@ -393,24 +393,24 @@ BodiesMPM::~BodiesMPM() void BodiesMPM::clear(void) { // Clear all bodies - fluidGeometries->clear(); - fluidMaterial->clear(); - fluidAlgorithm->clear(); - fluidPartitions->clear(); - debrisGeometries->clear(); - debrisMaterial->clear(); - debrisAlgorithm->clear(); - debrisPartitions->clear(); - structureGeometries->clear(); - structureMaterial->clear(); - structureAlgorithm->clear(); - structurePartitions->clear(); - for (int i=0; iclear(); - addedMaterial[i]->clear(); - addedAlgorithm[i]->clear(); - addedPartitions[i]->clear(); - } + // fluidGeometries->clear(); + // fluidMaterial->clear(); + // fluidAlgorithm->clear(); + // fluidPartitions->clear(); + // debrisGeometries->clear(); + // debrisMaterial->clear(); + // debrisAlgorithm->clear(); + // debrisPartitions->clear(); + // structureGeometries->clear(); + // structureMaterial->clear(); + // structureAlgorithm->clear(); + // structurePartitions->clear(); + // for (int i=0; iclear(); + // addedMaterial[i]->clear(); + // addedAlgorithm[i]->clear(); + // addedPartitions[i]->clear(); + // } } bool @@ -457,7 +457,7 @@ BodiesMPM::outputToJSON(QJsonObject &jsonObject) } bodyObject["track_particle_id"] = trackParticleIdsArray; // global bodyObject["type"] = QJsonValue(QString("particles")); // global - + bodyObject["name"] = QJsonValue(QString("fluid")); // global bodiesArray.append(bodyObject); } @@ -500,7 +500,8 @@ BodiesMPM::outputToJSON(QJsonObject &jsonObject) } bodyObject["track_particle_id"] = trackParticleIdsArray; // global bodyObject["type"] = QJsonValue(QString("particles")); // global - + bodyObject["name"] = QJsonValue(QString("debris")); // global + // Place the new body JSON object into the main bodies array bodiesArray.append(bodyObject); } @@ -546,7 +547,7 @@ BodiesMPM::outputToJSON(QJsonObject &jsonObject) } bodyObject["track_particle_id"] = trackParticleIdsArray; // global bodyObject["type"] = QJsonValue(QString("particles")); // global - + bodyObject["name"] = QJsonValue(QString("structure")); // global bodiesArray.append(bodyObject); } @@ -599,6 +600,7 @@ BodiesMPM::outputToJSON(QJsonObject &jsonObject) } bodyObject["track_particle_id"] = trackParticleIdsArray; // global bodyObject["type"] = QJsonValue(QString("particles")); // global + bodyObject["name"] = QJsonValue(QString("custom_") + QString::number(i+1)); // global QJsonArray bodyVelocityArray; // Need to find a spot for a bodies global initial conditions in the schema bodyVelocityArray.append(QJsonValue(0.0).toDouble()); @@ -620,14 +622,39 @@ BodiesMPM::outputToJSON(QJsonObject &jsonObject) bool BodiesMPM::inputFromJSON(QJsonObject &jsonObject) { - // TODO: Implement inputFromJSON for all bodies - // theOpenSeesPyScript->inputFromJSON(jsonObject); - // theSurfaceFile->inputFromJSON(jsonObject); - // fluidGeometries->inputFromJSON(jsonObject); - // fluidMaterial->inputFromJSON(jsonObject); - // fluidAlgorithm->inputFromJSON(jsonObject); - // fluidPartitions->inputFromJSON(jsonObject); - // fluidOutputs->inputFromJSON(jsonObject); + this->clear(); // Clear all bodies + + // Input all bodies + QJsonArray bodiesArray = jsonObject["bodies"].toArray(); + for (int i=0; iinputFromJSON(bodyObject); + fluidMaterial->inputFromJSON(materialObject); + fluidAlgorithm->inputFromJSON(algorithmObject); + fluidPartitions->inputFromJSON(bodyObject); + } else if (bodyObject["name"].toString() == "debris") { + debrisGeometries->inputFromJSON(bodyObject); + debrisMaterial->inputFromJSON(materialObject); + debrisAlgorithm->inputFromJSON(algorithmObject); + debrisPartitions->inputFromJSON(bodyObject); + } else if (bodyObject["name"].toString() == "structure") { + structureGeometries->inputFromJSON(bodyObject); + structureMaterial->inputFromJSON(materialObject); + structureAlgorithm->inputFromJSON(algorithmObject); + structurePartitions->inputFromJSON(bodyObject); + } else if (bodyObject["name"].toString().startsWith("custom_")) { + int customIdx = bodyObject["name"].toString().split("_")[1].toInt(); + if (customIdx >= numReserveTabs) break; + addedGeometries[customIdx]->inputFromJSON(bodyObject); + addedMaterial[customIdx]->inputFromJSON(materialObject); + addedAlgorithm[customIdx]->inputFromJSON(algorithmObject); + addedPartitions[customIdx]->inputFromJSON(bodyObject); + } + } + // toggleFluid->setChecked(true); // Enable body by default if it exists in the JSON // toggleDebris->setChecked(true); // Enable body by default if it exists in the JSON // toggleStructure->setChecked(true); // Enable body by default if it exists in the JSON @@ -637,9 +664,27 @@ BodiesMPM::inputFromJSON(QJsonObject &jsonObject) bool BodiesMPM::copyFiles(QString &destDir) { - // if (theOpenSeesPyScript->copyFile(destDir) != true) - // return false; - // return theSurfaceFile->copyFile(destDir); + fluidGeometries->copyFiles(destDir); + fluidMaterial->copyFiles(destDir); + fluidAlgorithm->copyFiles(destDir); + fluidPartitions->copyFiles(destDir); + + debrisGeometries->copyFiles(destDir); + debrisMaterial->copyFiles(destDir); + debrisAlgorithm->copyFiles(destDir); + debrisPartitions->copyFiles(destDir); + + structureGeometries->copyFiles(destDir); + structureMaterial->copyFiles(destDir); + structureAlgorithm->copyFiles(destDir); + structurePartitions->copyFiles(destDir); + + for (int i=0; icopyFiles(destDir); + addedMaterial[i]->copyFiles(destDir); + addedAlgorithm[i]->copyFiles(destDir); + addedPartitions[i]->copyFiles(destDir); + } return true; } diff --git a/EVENTS/MPM/BoundariesMPM.cpp b/EVENTS/MPM/BoundariesMPM.cpp index d63600b9..5dfa8f73 100644 --- a/EVENTS/MPM/BoundariesMPM.cpp +++ b/EVENTS/MPM/BoundariesMPM.cpp @@ -227,10 +227,10 @@ BoundariesMPM::~BoundariesMPM() void BoundariesMPM::clear(void) { - for (int i=0; i= numReserveTabs) break; - addedBoundary[i]->clear(); - } + // for (int i=0; i= numReserveTabs) break; + // addedBoundary[i]->clear(); + // } } // void BoundariesMPM::structDimensionsChangedSlot(void) @@ -419,11 +419,9 @@ SC_DoubleLineEdit* BoundariesMPM::getSpacingZWidget(BoundaryMPM* theBoundary) } - // bool BoundariesMPM::addBoundary(BoundaryMPM* theBoundary) - // bool // BoundariesMPM::setBoundaryType(int typeIdx) // { diff --git a/EVENTS/MPM/BoundaryMPM.cpp b/EVENTS/MPM/BoundaryMPM.cpp index 555db70e..3e179799 100644 --- a/EVENTS/MPM/BoundaryMPM.cpp +++ b/EVENTS/MPM/BoundaryMPM.cpp @@ -147,7 +147,7 @@ BoundaryMPM::BoundaryMPM(QWidget *parent) // bathBox->setLayout(bathBoxLayout); // QStringList bathXZHeadings; bathXZHeadings << "Position in Flume (X)" << "Elevation (Y)"; // QStringList dataBathXZ; dataBathXZ << "35" << "0" << "42" << "1.75" << "56" << "2.5" << "105" << "2.5"; - // bathXZData = new SC_TableEdit("bathXZData",bathXZHeadings, 4, dataBathXZ); + // bathXZData = new SC_TableEdit("bathymetry",bathXZHeadings, 4, dataBathXZ); // bathBoxLayout->addWidget(new QLabel("Bathymetry Segments"),numRow++,0,1,4); // bathBoxLayout->addWidget(bathXZData,numRow++,0,1,4); @@ -162,7 +162,7 @@ BoundaryMPM::BoundaryMPM(QWidget *parent) QStringList dataBathXZ; dataBathXZ << "0" << "0" << "16.275" << "0.226" << "19.933" << "0.226" << "30.906" << "1.140" << "45.536" << "1.750" << "82.106" << "1.750" << "89.46" << "2.363"; // wmn = 2 or 1.91 something for OSU LWF int bathXZPairs = 7; - bathXZData = new SC_TableEdit("bathXZData",bathXZHeadings, bathXZPairs, dataBathXZ); + bathXZData = new SC_TableEdit("bathymetry",bathXZHeadings, bathXZPairs, dataBathXZ); bathSTL = new SC_FileEdit("bathSTL"); QString bathFilename = QString("Examples/hdro-0001/src/flumeFloor.stl"); bathSTL->setFilename(bathFilename); @@ -225,7 +225,7 @@ BoundaryMPM::BoundaryMPM(QWidget *parent) << "82.106" << "1.750" << "89.46" << "2.363"; delete bathXZData; - bathXZData = new SC_TableEdit("bathXZData",bathXZHeadings, 7, newDataBathXZ); + bathXZData = new SC_TableEdit("bathymetry",bathXZHeadings, 7, newDataBathXZ); ptLayout->addWidget(bathXZData, 0, 0); } else if (val == "Hinsdale Directional Wave Basin (OSU DWB)") { flumeLength->setText("48.8"); @@ -238,7 +238,7 @@ BoundaryMPM::BoundaryMPM(QWidget *parent) << "45.0" << "0.0" << "48.8" << "0.0"; delete bathXZData; - bathXZData = new SC_TableEdit("bathXZData",bathXZHeadings, 6, newDataBathXZ); + bathXZData = new SC_TableEdit("bathymetry",bathXZHeadings, 6, newDataBathXZ); ptLayout->addWidget(bathXZData, 0, 0); } else if (val == "Wind-Air-Sea Interaction Facility (UW WASIRF)") { flumeLength->setText("12.19"); @@ -247,7 +247,7 @@ BoundaryMPM::BoundaryMPM(QWidget *parent) QStringList newDataBathXZ; newDataBathXZ << "0.00" << "0.0" << "12.0" << "0.0"; delete bathXZData; - bathXZData = new SC_TableEdit("bathXZData",bathXZHeadings, 2, newDataBathXZ); + bathXZData = new SC_TableEdit("bathymetry",bathXZHeadings, 2, newDataBathXZ); ptLayout->addWidget(bathXZData, 0, 0); } else if (val == "Waseda University's Tsunami Wave Basin (WU TWB)") { flumeLength->setText("9.0"); @@ -258,7 +258,7 @@ BoundaryMPM::BoundaryMPM(QWidget *parent) << "4.45" << "0.255" << "9.00" << "0.255"; delete bathXZData; - bathXZData = new SC_TableEdit("bathXZData",bathXZHeadings, 4, newDataBathXZ); + bathXZData = new SC_TableEdit("bathymetry",bathXZHeadings, 4, newDataBathXZ); ptLayout->addWidget(bathXZData, 0, 0); } else if (val == "U.S. Geo. Survey's Debris Flow Flume (USGS DFF)") { flumeLength->setText("90.0"); @@ -271,7 +271,7 @@ BoundaryMPM::BoundaryMPM(QWidget *parent) << "82.00" << "0.540" // 20 deg, 1:0.364 << "100.0" << "10.926"; // 30deg, 1:0.577 delete bathXZData; - bathXZData = new SC_TableEdit("bathXZData",bathXZHeadings, 6, newDataBathXZ); + bathXZData = new SC_TableEdit("bathymetry",bathXZHeadings, 6, newDataBathXZ); ptLayout->addWidget(bathXZData, 0, 0); } }); @@ -284,7 +284,7 @@ BoundaryMPM::BoundaryMPM(QWidget *parent) // wave generator numRow = 0; - QStringList listWaveGeneration; listWaveGeneration << "Preset Paddle - OSU LWF" << "Periodic Waves" << "Preset Paddle - OSU DWB" ; + QStringList listWaveGeneration; listWaveGeneration << "Preset Paddle - OSU LWF" << "Preset Paddle - OSU DWB"; // "Periodic Waves" generationMethod = new SC_ComboBox("generationMethod",listWaveGeneration); generationMethod->setEnabled(false); @@ -740,42 +740,42 @@ BoundaryMPM::BoundaryMPM(QWidget *parent) numRow += numFrictionRow; // Inlet/Outlet - applyInletOutlet = new SC_CheckBox("applyInletOutlet"); - applyInletOutlet->setChecked(false); - applyInletOutlet->setEnabled(false); // TODO: Wall inlet/outlet not implemented yet - wallsLayout->addWidget(new QLabel("Apply Inlet/Outlet?"),numRow, 0); - wallsLayout->itemAt(wallsLayout->count()-1)->setAlignment(Qt::AlignRight); - wallsLayout->addWidget(applyInletOutlet,numRow++, 1); - - - QGroupBox *inletOutletBox = new QGroupBox(""); - QGridLayout *inletOutletBoxLayout = new QGridLayout(); - inletOutletBox->setLayout(inletOutletBoxLayout); - int numInOutRow = 0; - QStringList inletOutletList; inletOutletList << "None" - << "Inlet - Steady" << "Inlet - OpenFOAM" << "Inlet - GeoClaw" << "Inlet - SWE File" - << "Outlet - Steady" << "Outlet - OpenFOAM" << "Outlet - GeoClaw" << "Outlet - SWE File"; - inletOutletTypeSubX = new SC_ComboBox("inletOutletTypeSubX",inletOutletList); - inletOutletTypeSubY = new SC_ComboBox("inletOutletTypeSubY",inletOutletList); - inletOutletTypeSubZ = new SC_ComboBox("inletOutletTypeSubZ",inletOutletList); - inletOutletTypePlusX = new SC_ComboBox("inletOutletTypePlusX",inletOutletList); - inletOutletTypePlusY = new SC_ComboBox("inletOutletTypePlusY",inletOutletList); - inletOutletTypePlusZ = new SC_ComboBox("inletOutletTypePlusZ",inletOutletList); - inletOutletBoxLayout->addWidget(new QLabel("Inlet-Outlet at (X-,Y-,Z-) Walls"),numInOutRow, 0); - inletOutletBoxLayout->itemAt(inletOutletBoxLayout->count()-1)->setAlignment(Qt::AlignRight); - inletOutletBoxLayout->addWidget(inletOutletTypeSubX,numInOutRow,1); - inletOutletBoxLayout->addWidget(inletOutletTypeSubY,numInOutRow,2); - inletOutletBoxLayout->addWidget(inletOutletTypeSubZ,numInOutRow++,3); - inletOutletBoxLayout->addWidget(new QLabel("Inlet-Outlet at (X+,Y+,Z+) Walls"),numInOutRow, 0); - inletOutletBoxLayout->itemAt(inletOutletBoxLayout->count()-1)->setAlignment(Qt::AlignRight); - inletOutletBoxLayout->addWidget(inletOutletTypePlusX,numInOutRow,1); - inletOutletBoxLayout->addWidget(inletOutletTypePlusY,numInOutRow,2); - inletOutletBoxLayout->addWidget(inletOutletTypePlusZ,numInOutRow++,3); - inletOutletBoxLayout->setRowStretch(numInOutRow,1); - inletOutletBox->setVisible(false); // TODO: Wall inlet/outlet not implemented yet - // numRow = numRow+1; - wallsLayout->addWidget(inletOutletBox, numRow+numInOutRow, 0, 2, 4); - numRow += numInOutRow; + // applyInletOutlet = new SC_CheckBox("applyInletOutlet"); + // applyInletOutlet->setChecked(false); + // applyInletOutlet->setEnabled(false); // TODO: Wall inlet/outlet not implemented yet + // wallsLayout->addWidget(new QLabel("Apply Inlet/Outlet?"),numRow, 0); + // wallsLayout->itemAt(wallsLayout->count()-1)->setAlignment(Qt::AlignRight); + // wallsLayout->addWidget(applyInletOutlet,numRow++, 1); + + + // QGroupBox *inletOutletBox = new QGroupBox(""); + // QGridLayout *inletOutletBoxLayout = new QGridLayout(); + // inletOutletBox->setLayout(inletOutletBoxLayout); + // int numInOutRow = 0; + // QStringList inletOutletList; inletOutletList << "None" + // << "Inlet - Steady" << "Inlet - OpenFOAM" << "Inlet - GeoClaw" << "Inlet - SWE File" + // << "Outlet - Steady" << "Outlet - OpenFOAM" << "Outlet - GeoClaw" << "Outlet - SWE File"; + // inletOutletTypeSubX = new SC_ComboBox("inletOutletTypeSubX",inletOutletList); + // inletOutletTypeSubY = new SC_ComboBox("inletOutletTypeSubY",inletOutletList); + // inletOutletTypeSubZ = new SC_ComboBox("inletOutletTypeSubZ",inletOutletList); + // inletOutletTypePlusX = new SC_ComboBox("inletOutletTypePlusX",inletOutletList); + // inletOutletTypePlusY = new SC_ComboBox("inletOutletTypePlusY",inletOutletList); + // inletOutletTypePlusZ = new SC_ComboBox("inletOutletTypePlusZ",inletOutletList); + // inletOutletBoxLayout->addWidget(new QLabel("Inlet-Outlet at (X-,Y-,Z-) Walls"),numInOutRow, 0); + // inletOutletBoxLayout->itemAt(inletOutletBoxLayout->count()-1)->setAlignment(Qt::AlignRight); + // inletOutletBoxLayout->addWidget(inletOutletTypeSubX,numInOutRow,1); + // inletOutletBoxLayout->addWidget(inletOutletTypeSubY,numInOutRow,2); + // inletOutletBoxLayout->addWidget(inletOutletTypeSubZ,numInOutRow++,3); + // inletOutletBoxLayout->addWidget(new QLabel("Inlet-Outlet at (X+,Y+,Z+) Walls"),numInOutRow, 0); + // inletOutletBoxLayout->itemAt(inletOutletBoxLayout->count()-1)->setAlignment(Qt::AlignRight); + // inletOutletBoxLayout->addWidget(inletOutletTypePlusX,numInOutRow,1); + // inletOutletBoxLayout->addWidget(inletOutletTypePlusY,numInOutRow,2); + // inletOutletBoxLayout->addWidget(inletOutletTypePlusZ,numInOutRow++,3); + // inletOutletBoxLayout->setRowStretch(numInOutRow,1); + // inletOutletBox->setVisible(false); // TODO: Wall inlet/outlet not implemented yet + // // numRow = numRow+1; + // wallsLayout->addWidget(inletOutletBox, numRow+numInOutRow, 0, 2, 4); + // numRow += numInOutRow; // numRow += 4; wallsLayout->setRowStretch(numRow+2, 1); @@ -812,37 +812,37 @@ BoundaryMPM::BoundaryMPM(QWidget *parent) }); - connect(applyInletOutlet, &QCheckBox::stateChanged, [=](int state) { - if (state == Qt::Checked) { - inletOutletTypeSubX->setEnabled(true); - inletOutletTypeSubY->setEnabled(true); - inletOutletTypeSubZ->setEnabled(true); - inletOutletTypePlusX->setEnabled(true); - inletOutletTypePlusY->setEnabled(true); - inletOutletTypePlusZ->setEnabled(true); - inletOutletTypeSubX->setVisible(true); - inletOutletTypeSubY->setVisible(true); - inletOutletTypeSubZ->setVisible(true); - inletOutletTypePlusX->setVisible(true); - inletOutletTypePlusY->setVisible(true); - inletOutletTypePlusZ->setVisible(true); - inletOutletBox->setVisible(true); - } else { - inletOutletTypeSubX->setEnabled(false); - inletOutletTypeSubY->setEnabled(false); - inletOutletTypeSubZ->setEnabled(false); - inletOutletTypePlusX->setEnabled(false); - inletOutletTypePlusY->setEnabled(false); - inletOutletTypePlusZ->setEnabled(false); - inletOutletTypeSubX->setVisible(false); - inletOutletTypeSubY->setVisible(false); - inletOutletTypeSubZ->setVisible(false); - inletOutletTypePlusX->setVisible(false); - inletOutletTypePlusY->setVisible(false); - inletOutletTypePlusZ->setVisible(false); - inletOutletBox->setVisible(false); - } - }); + // connect(applyInletOutlet, &QCheckBox::stateChanged, [=](int state) { + // if (state == Qt::Checked) { + // inletOutletTypeSubX->setEnabled(true); + // inletOutletTypeSubY->setEnabled(true); + // inletOutletTypeSubZ->setEnabled(true); + // inletOutletTypePlusX->setEnabled(true); + // inletOutletTypePlusY->setEnabled(true); + // inletOutletTypePlusZ->setEnabled(true); + // inletOutletTypeSubX->setVisible(true); + // inletOutletTypeSubY->setVisible(true); + // inletOutletTypeSubZ->setVisible(true); + // inletOutletTypePlusX->setVisible(true); + // inletOutletTypePlusY->setVisible(true); + // inletOutletTypePlusZ->setVisible(true); + // inletOutletBox->setVisible(true); + // } else { + // inletOutletTypeSubX->setEnabled(false); + // inletOutletTypeSubY->setEnabled(false); + // inletOutletTypeSubZ->setEnabled(false); + // inletOutletTypePlusX->setEnabled(false); + // inletOutletTypePlusY->setEnabled(false); + // inletOutletTypePlusZ->setEnabled(false); + // inletOutletTypeSubX->setVisible(false); + // inletOutletTypeSubY->setVisible(false); + // inletOutletTypeSubZ->setVisible(false); + // inletOutletTypePlusX->setVisible(false); + // inletOutletTypePlusY->setVisible(false); + // inletOutletTypePlusZ->setVisible(false); + // inletOutletBox->setVisible(false); + // } + // }); } @@ -854,12 +854,7 @@ BoundaryMPM::~BoundaryMPM() void BoundaryMPM::clear(void) { - // clear all widgets - // theCustom->clear(); - // theWaveFlume->clear(); - // theWaveGeneration->clear(); - // theStructures->clear(); - // theWalls->clear(); + // TODO: clear all widgets } bool @@ -1498,105 +1493,108 @@ BoundaryMPM::outputToJSON(QJsonObject &jsonObject) bool BoundaryMPM::inputFromJSON(QJsonObject &jsonObject) { + this->clear(); + bathSTL->inputFromJSON(jsonObject); paddleDisplacementFile->inputFromJSON(jsonObject); - // - // for all entries, make sure i exists and if it does get it, otherwise return error - // + // + // for all entries, make sure i exists and if it does get it, otherwise return error + // + + if (jsonObject.contains("object")) { + inpty=jsonObject["object"].toString(); + } else { + inpty = "Parameters"; + } - if (jsonObject.contains("object")) { - inpty=jsonObject["object"].toString(); + if (inpty==QString("Periodic Waves")) { + if (jsonObject.contains("wave_height")) { + double theAlphaValue = jsonObject["wave_height"].toDouble(); + alpha->setText(QString::number(theAlphaValue)); } else { - inpty = "Parameters"; + this->errorMessage("ERROR: Periodic Waves - no \"alpha\" entry"); + return false; + } + if (jsonObject.contains("wave_celerity")) { + double theBetaValue = jsonObject["wave_celerity"].toDouble(); + beta->setText(QString::number(theBetaValue)); + } else { + this->errorMessage("ERROR: Periodic Waves - no \"beta\" entry"); + return false; + } + if (jsonObject.contains("wave_period")) { + double theAValue = jsonObject["wave_period"].toDouble(); + a->setText(QString::number(theAValue)); + } else { + this->errorMessage("ERROR: Periodic Waves - no \"a\" entry"); + return false; + } + if (jsonObject.contains("wave_duration")) { + double theBValue = jsonObject["wave_duration"].toDouble(); + b->setText(QString::number(theBValue)); + } else { + this->errorMessage("ERROR: Periodic Waves - no \"b\" entry"); + return false; } - if (inpty==QString("Periodic Waves")) { - if (jsonObject.contains("wave_height")) { - double theAlphaValue = jsonObject["wave_height"].toDouble(); - alpha->setText(QString::number(theAlphaValue)); - } else { - this->errorMessage("ERROR: Periodic Waves - no \"alpha\" entry"); - return false; - } - if (jsonObject.contains("wave_celerity")) { - double theBetaValue = jsonObject["wave_celerity"].toDouble(); - beta->setText(QString::number(theBetaValue)); - } else { - this->errorMessage("ERROR: Periodic Waves - no \"beta\" entry"); - return false; - } - if (jsonObject.contains("wave_period")) { - double theAValue = jsonObject["wave_period"].toDouble(); - a->setText(QString::number(theAValue)); - } else { - this->errorMessage("ERROR: Periodic Waves - no \"a\" entry"); - return false; - } - if (jsonObject.contains("wave_duration")) { - double theBValue = jsonObject["wave_duration"].toDouble(); - b->setText(QString::number(theBValue)); - } else { - this->errorMessage("ERROR: Periodic Waves - no \"b\" entry"); - return false; - } - - } else if (inpty==QString("Preset Paddle - OSU LWF")) { - if (jsonObject.contains("time")) { - QJsonArray theTimeArray = jsonObject["time"].toArray(); - a->setText(QString::number(theTimeArray[0].toDouble())); - b->setText(QString::number(theTimeArray[1].toDouble())); - } else { - this->errorMessage("ERROR: Paddle Motion - no \"time\" entry"); - return false; - } - if (jsonObject.contains("file")) { - QString theDataDir = jsonObject["file"].toString(); - dataDir->setText(theDataDir); - } else { - this->errorMessage("ERROR: Paddle Motion - no \"file\" entry"); - return false; - } - } else if (inpty==QString("Preset Paddle - OSU DWB")) { - if (jsonObject.contains("time")) { - QJsonArray theTimeArray = jsonObject["time"].toArray(); - a->setText(QString::number(theTimeArray[0].toDouble())); - b->setText(QString::number(theTimeArray[1].toDouble())); - } else { - this->errorMessage("ERROR: Paddle Motion - no \"time\" entry"); - return false; - } - if (jsonObject.contains("file")) { - QString theDataDir = jsonObject["file"].toString(); - dataDir->setText(theDataDir); - } else { - this->errorMessage("ERROR: Paddle Motion - no \"file\" entry"); - return false; - } + } else if (inpty==QString("Preset Paddle - OSU LWF")) { + if (jsonObject.contains("time")) { + QJsonArray theTimeArray = jsonObject["time"].toArray(); + a->setText(QString::number(theTimeArray[0].toDouble())); + b->setText(QString::number(theTimeArray[1].toDouble())); + } else { + this->errorMessage("ERROR: Paddle Motion - no \"time\" entry"); + return false; } - - //this->updateDistributionPlot(); - return true; + if (jsonObject.contains("file")) { + QString theDataDir = jsonObject["file"].toString(); + dataDir->setText(theDataDir); + } else { + this->errorMessage("ERROR: Paddle Motion - no \"file\" entry"); + return false; + } + } else if (inpty==QString("Preset Paddle - OSU DWB")) { + if (jsonObject.contains("time")) { + QJsonArray theTimeArray = jsonObject["time"].toArray(); + a->setText(QString::number(theTimeArray[0].toDouble())); + b->setText(QString::number(theTimeArray[1].toDouble())); + } else { + this->errorMessage("ERROR: Paddle Motion - no \"time\" entry"); + return false; + } + if (jsonObject.contains("file")) { + QString theDataDir = jsonObject["file"].toString(); + dataDir->setText(theDataDir); + } else { + this->errorMessage("ERROR: Paddle Motion - no \"file\" entry"); + return false; + } + } + + //this->updateDistributionPlot(); + return true; } bool BoundaryMPM::copyFiles(QString &destDir) { - if (inpty==QString("Preset Paddle - OSU LWF") || inpty==QString("Preset Paddle - OSU DWB") || inpty==QString("Paddle")) { - return QFile::copy(dataDir->text(), destDir); - } else { - return true; - } - if (bathSTL) { - if (!bathSTL->copyFile(destDir)) - qDebug() << "Error copying bathymetry file: " << bathSTL->getFilename(); + if (inpty==QString("Preset Paddle - OSU LWF") || inpty==QString("Preset Paddle - OSU DWB") || inpty==QString("Paddle")) { + return QFile::copy(dataDir->text(), destDir); + } else { + return true; } + if (paddleDisplacementFile) { if (!paddleDisplacementFile->copyFile(destDir)) qDebug() << "Error copying paddle displacement file: " << paddleDisplacementFile->getFilename(); } + if (bathSTL) { + if (!bathSTL->copyFile(destDir)) + qDebug() << "Error copying bathymetry file: " << bathSTL->getFilename(); + } return true; } @@ -1909,8 +1907,8 @@ BoundaryMPM::setDigitalTwin(int twinIdx) // Make sure the walls fit the wave flume's dimensions applyCoulombFriction->setChecked(false); applyCoulombFriction->setEnabled(false); - applyInletOutlet->setChecked(false); - applyInletOutlet->setEnabled(false); + // applyInletOutlet->setChecked(false); + // applyInletOutlet->setEnabled(false); if (twinIdx == 0) { // OSU LWF wallsContactType->setCurrentIndex(0); // Separable wallsLength->setText(QString::number(90.0)); diff --git a/EVENTS/MPM/BoundaryMPM.h b/EVENTS/MPM/BoundaryMPM.h index 6f8bc522..163281b9 100644 --- a/EVENTS/MPM/BoundaryMPM.h +++ b/EVENTS/MPM/BoundaryMPM.h @@ -233,19 +233,19 @@ public slots: SC_DoubleLineEdit *dynamicFrictionWallY; SC_DoubleLineEdit *dynamicFrictionWallZ; - SC_CheckBox *applyInletOutlet; - SC_ComboBox *inletOutletTypeSubX; - SC_ComboBox *inletOutletTypeSubY; - SC_ComboBox *inletOutletTypeSubZ; - SC_ComboBox *inletOutletTypePlusX; - SC_ComboBox *inletOutletTypePlusY; - SC_ComboBox *inletOutletTypePlusZ; - SC_FileEdit *inletOutletFileSubX; - SC_FileEdit *inletOutletFileSubY; - SC_FileEdit *inletOutletFileSubZ; - SC_FileEdit *inletOutletFilePlusX; - SC_FileEdit *inletOutletFilePlusY; - SC_FileEdit *inletOutletFilePlusZ; +// SC_CheckBox *applyInletOutlet; +// SC_ComboBox *inletOutletTypeSubX; +// SC_ComboBox *inletOutletTypeSubY; +// SC_ComboBox *inletOutletTypeSubZ; +// SC_ComboBox *inletOutletTypePlusX; +// SC_ComboBox *inletOutletTypePlusY; +// SC_ComboBox *inletOutletTypePlusZ; +// SC_FileEdit *inletOutletFileSubX; +// SC_FileEdit *inletOutletFileSubY; +// SC_FileEdit *inletOutletFileSubZ; +// SC_FileEdit *inletOutletFilePlusX; +// SC_FileEdit *inletOutletFilePlusY; +// SC_FileEdit *inletOutletFilePlusZ; QWidget *theCustom; QWidget *theWaveFlume; QWidget *theWaveGeneration; diff --git a/EVENTS/MPM/GeometriesMPM.cpp b/EVENTS/MPM/GeometriesMPM.cpp index e1b69b97..be61d884 100644 --- a/EVENTS/MPM/GeometriesMPM.cpp +++ b/EVENTS/MPM/GeometriesMPM.cpp @@ -171,7 +171,6 @@ GeometriesMPM::~GeometriesMPM() void GeometriesMPM::clear(void) { - // Clear all geometries for (int i=0; iclear(); } @@ -206,12 +205,34 @@ GeometriesMPM::outputToJSON(QJsonObject &jsonObject) bool GeometriesMPM::inputFromJSON(QJsonObject &jsonObject) { + + // Clear all geometries + this->clear(); + + // Input all geometries (held in JSON array) + if (jsonObject.contains("geometry") == false) { + qDebug() << "GeometriesMPM::inputFromJSON geometry not found in JSON"; + return false; + } + QJsonArray geometryArray = jsonObject["geometry"].toArray(); + for (int i=0; i= numReserveTabs) { + qDebug() << "GeometriesMPM::inputFromJSON too many geometries in JSON"; + break; + } + QJsonObject geometryObject = geometryArray[i].toObject(); + addedGeometry[i]->inputFromJSON(geometryObject); + } + return true; } bool GeometriesMPM::copyFiles(QString &destDir) { + for (int i=0; icopyFiles(destDir); + } return true; } diff --git a/EVENTS/MPM/GeometryAI.cpp b/EVENTS/MPM/GeometryAI.cpp index 735ef3cb..a911c916 100644 --- a/EVENTS/MPM/GeometryAI.cpp +++ b/EVENTS/MPM/GeometryAI.cpp @@ -550,15 +550,12 @@ GeometryAI::simulationCompleted() return true; } -// bool GeometryAI::copyFiles(QString &dirName) -// { -// return true; -// } +bool GeometryAI::copyFiles(QString &dirName) +{ + Q_UNUSED(dirName); + return true; +} -// void GeometryAI::clear(void) -// { -// return; -// } // void GeometryAI::onExecuteScriptClicked(void) // { diff --git a/EVENTS/MPM/GeometryAI.h b/EVENTS/MPM/GeometryAI.h index efad9911..68a8cbb3 100644 --- a/EVENTS/MPM/GeometryAI.h +++ b/EVENTS/MPM/GeometryAI.h @@ -80,12 +80,13 @@ class GeometryAI: public SimCenterWidget explicit GeometryAI(QWidget *parent = 0); virtual ~GeometryAI(); // override // virtual + void clear(void); // override bool inputFromJSON(QJsonObject &jsonObject); // override bool outputToJSON(QJsonObject &jsonObject); // override - void clear(void); // override + bool copyFiles(QString &dirName); // override + bool executeTextPromptsScripts(QString &dirName); - bool executeImagePromptsScripts(QString &dirName); - // void clear(void); + bool executeImagePromptsScripts(QString &dirName); bool showImage (QString &fileName); signals: diff --git a/EVENTS/MPM/GeometryMPM.cpp b/EVENTS/MPM/GeometryMPM.cpp index b0cc379a..d142fb66 100644 --- a/EVENTS/MPM/GeometryMPM.cpp +++ b/EVENTS/MPM/GeometryMPM.cpp @@ -844,6 +844,40 @@ GeometryMPM::~GeometryMPM() void GeometryMPM::clear(void) { + bodyPreset->setCurrentIndex(0); + objectType->setCurrentIndex(0); + operationType->setCurrentIndex(0); + facility->setCurrentIndex(0); + facilityLength->setText("0.0"); + facilityHeight->setText("0.0"); + facilityWidth->setText("0.0"); + standingWaterLevel->setText("0.0"); + fillFlumeUptoSWL->setChecked(false); + bathymetryComboBox->setCurrentIndex(0); + // bathXZData->reset(); + QString dummyFilename = ""; + bathSTL->setFilename(dummyFilename); + geometryFile->setFilename(dummyFilename); + checkpointBGEO->setFilename(dummyFilename); + length->setText("1.0"); + height->setText("1.0"); + width->setText("1.0"); + radius->setText("0.5"); + longAxis->setCurrentIndex(0); + originX->setText("0.0"); + originY->setText("0.0"); + originZ->setText("0.0"); + applyArray->setChecked(false); + arrayX->setText("1"); + arrayY->setText("1"); + arrayZ->setText("1"); + applyRotation->setChecked(false); + rotateFulcrumX->setText("0.0"); + rotateFulcrumY->setText("0.0"); + rotateFulcrumZ->setText("0.0"); + // trackerTable->reset(); + // theGenAI->clear(); + } bool @@ -970,6 +1004,29 @@ GeometryMPM::outputToJSON(QJsonObject &jsonObject) if (0) geometryObject["origin"] = originArray; // Future schema else geometryObject["offset"] = originArray; // ClayoreUW artifact, to be deprecated } + + + if (geometryObject["object"].toString() == "Cylinder" || geometryObject["object"].toString() == "Cone" || geometryObject["object"].toString() == "Ring") { + geometryObject["long_axis"] = longAxis->currentText(); + geometryObject["radius"] = radius->text().toDouble(); + } + + if (geometryObject["object"].toString() == "Sphere") { + geometryObject["radius"] = radius->text().toDouble(); + } + + if (geometryObject["object"].toString() == "File") { + if (geometryFile->getFilename().isEmpty() == false) { + geometryObject["file"] = geometryFile->getFilename(); + } + if (checkpointBGEO->getFilename().isEmpty() == false) { + geometryObject["file"] = checkpointBGEO->getFilename(); + } + if (geometryObject["file"].toString().isEmpty()) { + // QDebug() << "Error: No geometry or checkpoint file selected for bodies object type: File"; + } + } + geometryObject["apply_array"] = applyArray->isChecked(); if (applyArray->isChecked()) { @@ -1039,17 +1096,139 @@ GeometryMPM::outputToJSON(QJsonObject &jsonObject) bool GeometryMPM::inputFromJSON(QJsonObject &jsonObject) { - // theOpenSeesPyScript->inputFromJSON(jsonObject); - // theSurfaceFile->inputFromJSON(jsonObject); + this->clear(); + + if (jsonObject.contains("body_preset")) { + bodyPreset->setCurrentText(jsonObject["body_preset"].toString()); + } + if (jsonObject.contains("object")) { + objectType->setCurrentText(jsonObject["object"].toString()); + } + if (jsonObject.contains("operation")) { + if (jsonObject["operation"].toString() == "add") { + operationType->setCurrentText("Add (OR)"); + } else if (jsonObject["operation"].toString() == "subtract") { + operationType->setCurrentText("Subtract (NOT)"); + } else if (jsonObject["operation"].toString() == "intersect") { + operationType->setCurrentText("Intersect (AND)"); + } else if (jsonObject["operation"].toString() == "difference") { + operationType->setCurrentText("Difference (XOR)"); + } else { + operationType->setCurrentText("Add (OR)"); + } + } + if (jsonObject.contains("facility")) { + facility->setCurrentText(jsonObject["facility"].toString()); + } + if (jsonObject.contains("facility_dimensions")) { + QJsonArray facilityDims = jsonObject["facility_dimensions"].toArray(); + facilityLength->setText(QString::number(facilityDims[0].toDouble())); + facilityHeight->setText(QString::number(facilityDims[1].toDouble())); + facilityWidth->setText(QString::number(facilityDims[2].toDouble())); + } + if (jsonObject.contains("standing_water_level")) { + standingWaterLevel->setText(QString::number(jsonObject["standing_water_level"].toDouble())); + } + if (jsonObject.contains("fill_flume_upto_SWL")) { + fillFlumeUptoSWL->setChecked(jsonObject["fill_flume_upto_SWL"].toBool()); + } + if (jsonObject.contains("span")) { + QJsonArray spanArray = jsonObject["span"].toArray(); + length->setText(QString::number(spanArray[0].toDouble())); + height->setText(QString::number(spanArray[1].toDouble())); + width->setText(QString::number(spanArray[2].toDouble())); + } + if (jsonObject.contains("offset")) { + QJsonArray originArray = jsonObject["offset"].toArray(); + originX->setText(QString::number(originArray[0].toDouble())); + originY->setText(QString::number(originArray[1].toDouble())); + originZ->setText(QString::number(originArray[2].toDouble())); + } + + if (jsonObject.contains("bathymetryXZ")) { + QJsonArray bathXZArray = jsonObject["bathymetryXZ"].toArray(); + QJsonObject bathXZObject; + bathXZObject["bathXZData"] = bathXZArray; + bathXZData->inputFromJSON(bathXZObject); + } + + if (jsonObject.contains("radius")) { + radius->setText(QString::number(jsonObject["radius"].toDouble())); + } + + if (jsonObject.contains("long_axis")) { + longAxis->setCurrentText(jsonObject["long_axis"].toString()); + } + + if (jsonObject.contains("apply_array")) { + applyArray->setChecked(jsonObject["apply_array"].toBool()); + } + if (jsonObject.contains("array")) { + QJsonArray arrayDims = jsonObject["array"].toArray(); + arrayX->setText(QString::number(arrayDims[0].toInt())); + arrayY->setText(QString::number(arrayDims[1].toInt())); + arrayZ->setText(QString::number(arrayDims[2].toInt())); + } + if (jsonObject.contains("spacing")) { + QJsonArray spacingArray = jsonObject["spacing"].toArray(); + spacingX->setText(QString::number(spacingArray[0].toDouble())); + spacingY->setText(QString::number(spacingArray[1].toDouble())); + spacingZ->setText(QString::number(spacingArray[2].toDouble())); + } + if (jsonObject.contains("apply_rotation")) { + applyRotation->setChecked(jsonObject["apply_rotation"].toBool()); + } + if (jsonObject.contains("rotate")) { + QJsonArray rotateAngles = jsonObject["rotate"].toArray(); + rotateAngleX->setText(QString::number(rotateAngles[0].toDouble())); + rotateAngleY->setText(QString::number(rotateAngles[1].toDouble())); + rotateAngleZ->setText(QString::number(rotateAngles[2].toDouble())); + } + if (jsonObject.contains("fulcrum")) { + QJsonArray rotateFulcrum = jsonObject["fulcrum"].toArray(); + rotateFulcrumX->setText(QString::number(rotateFulcrum[0].toDouble())); + rotateFulcrumY->setText(QString::number(rotateFulcrum[1].toDouble())); + rotateFulcrumZ->setText(QString::number(rotateFulcrum[2].toDouble())); + } + if (jsonObject.contains("track_particle_id")) { + QJsonArray trackerArray = jsonObject["track_particle_id"].toArray(); + // trackerTable->reset(); + QJsonObject trackerObject; + trackerObject["trackerTable"] = trackerArray; + trackerTable->inputFromJSON(trackerObject); + } + + theGenAI->inputFromJSON(jsonObject); // text-prompt and image-prompt + return true; } bool GeometryMPM::copyFiles(QString &destDir) { - // if (theOpenSeesPyScript->copyFile(destDir) != true) - // return false; - // return theSurfaceFile->copyFile(destDir); + + // Copy the bathymetry file to the destination directory + if (bathSTL->getFilename().isEmpty() == false) { + if (bathSTL->copyFile(destDir) == false) { + // QDebug() << "Error: Failed to copy bathymetry file"; + // return false; + } + } + + if (geometryFile->getFilename().isEmpty() == false) { + if (geometryFile->copyFile(destDir) == false) { + // QDebug() << "Error: Failed to copy geometry file"; + // return false; + } + } + + if (checkpointBGEO->getFilename().isEmpty() == false) { + if (checkpointBGEO->copyFile(destDir) == false) { + // QDebug() << "Error: Failed to copy checkpoint BGEO file"; + // return false; + } + } + return true; } diff --git a/EVENTS/MPM/MPM.cpp b/EVENTS/MPM/MPM.cpp index c0e9c141..c7528c18 100644 --- a/EVENTS/MPM/MPM.cpp +++ b/EVENTS/MPM/MPM.cpp @@ -1311,7 +1311,7 @@ bool MPM::initialize() caseInitialized = true; // ==================== Results-View Set-Up ==================== - if constexpr (1) { + if constexpr (0) { QWidget* resultsWidget = new QWidget(); QVBoxLayout* resultsLayout = new QVBoxLayout(); resultsWidget->setLayout(resultsLayout); @@ -1475,6 +1475,9 @@ bool MPM::outputCitation(QJsonObject &jsonObject) bool MPM::inputFromJSON(QJsonObject &jsonObject) { + return true; + // Exiting early to debug + this->clear(); QString newCaseDirectoryPath(jsonObject["caseDirectoryPath"].toString()); @@ -1509,7 +1512,7 @@ bool MPM::inputFromJSON(QJsonObject &jsonObject) if (mpmOutputs) mpmOutputs->inputFromJSON(jsonObject); if (mpmResults) - mpmResults->inputFromJSON(jsonObject); + // mpmResults->inputFromJSON(jsonObject); this->showVisualization(); return true; @@ -1816,36 +1819,35 @@ bool MPM::copyFiles(QString &destDir) { // Copy files from all the major sub-widgets // - if (mpmSettings->copyFiles(destDir) == false) - { - qDebug() << "MPM - failed to copy mpmSettings files"; - // return false; - } - if (mpmBodies->copyFiles(destDir) == false) - { - qDebug() << "MPM - failed to copy mpmBodies files"; - // return false; - } + // if (mpmSettings->copyFiles(destDir) == false) + // { + // qDebug() << "MPM - failed to copy mpmSettings files"; + // // return false; + // } + // if (mpmBodies->copyFiles(destDir) == false) + // { + // qDebug() << "MPM - failed to copy mpmBodies files"; + // // return false; + // } if (mpmBoundaries->copyFiles(destDir) == false) { - qDebug() << "MPM - failed to copy boundaries files"; - // return false; - } - if (mpmSensors->copyFiles(destDir) == false) - { - qDebug() << "MPM - failed to copy mpmSensors files"; + qDebug() << "MPM - failed to copy mpmBoundaries files"; // return false; } + // if (mpmSensors->copyFiles(destDir) == false) + // { + // qDebug() << "MPM - failed to copy mpmSensors files"; + // // return false; + // } // if (mpmOutputs->copyFiles(destDir) == false) // { // qDebug() << "MPM - failed to copy mpmOutputs files"; - // return false; + // // return false; // } // if (mpmResults->copyFiles(destDir) == false) // { - // qDebug() << "MPM - failed to copy results files"; - // qDebug() << "MPM - skipping mpmResults copy files"; - // return false; + // qDebug() << "MPM - failed to copy mpmResults files"; + // // return false; // } return true; @@ -2014,34 +2016,34 @@ QString MPM::simulationType() return QString("MPM"); } -SC_ResultsWidget* MPM::getResultsWidget(QWidget *parent) -{ - // theTabWidget.setCurrentIndex(theTabWidget.indexOf("Results")); - // Set theTabWidget to show the "Results" tab using its text - if (mpmResults) - { - theTabWidget->setCurrentIndex(theTabWidget->count() - 1); - } - else - { - if constexpr (1) { - QWidget* resultsWidget = new QWidget(); - QVBoxLayout* resultsLayout = new QVBoxLayout(); - resultsWidget->setLayout(resultsLayout); - mpmResults = new ResultsMPM(this); // this +// SC_ResultsWidget* MPM::getResultsWidget(QWidget *parent) +// { +// // theTabWidget.setCurrentIndex(theTabWidget.indexOf("Results")); +// // Set theTabWidget to show the "Results" tab using its text +// if (mpmResults) +// { +// theTabWidget->setCurrentIndex(theTabWidget->count() - 1); +// } +// else +// { +// if constexpr (0) { +// QWidget* resultsWidget = new QWidget(); +// QVBoxLayout* resultsLayout = new QVBoxLayout(); +// resultsWidget->setLayout(resultsLayout); +// mpmResults = new ResultsMPM(this); // this - resultsLayout->addWidget(mpmResults); - resultsLayout->addStretch(); - theTabWidget->addTab(resultsWidget, QIcon(QString(":/icons/flag-black.svg")), "Results"); - theTabWidget->setCurrentIndex(theTabWidget->count() - 1); - } +// resultsLayout->addWidget(mpmResults); +// resultsLayout->addStretch(); +// theTabWidget->addTab(resultsWidget, QIcon(QString(":/icons/flag-black.svg")), "Results"); +// theTabWidget->setCurrentIndex(theTabWidget->count() - 1); +// } - } +// } - statusMessage("HydroUQ EVENTS MPM - Get results widget for the EVT to allow us to post-process the downloaded results (or locally saved results) for visualization."); - return mpmResults; -} +// statusMessage("HydroUQ EVENTS MPM - Get results widget for the EVT to allow us to post-process the downloaded results (or locally saved results) for visualization."); +// return mpmResults; +// } void MPM::importMainDomainJsonFile(QJsonObject &jsonObject) { diff --git a/EVENTS/MPM/MPM.h b/EVENTS/MPM/MPM.h index c68a1f2f..8d401079 100644 --- a/EVENTS/MPM/MPM.h +++ b/EVENTS/MPM/MPM.h @@ -81,7 +81,7 @@ namespace Qt3DExtras { class MPM : public SimCenterAppWidget { - friend class ResultsMPM; // Allow ResultsMPM to access private members. TODO: use a better vis architecture + // friend class ResultsMPM; // Allow ResultsMPM to access private members. TODO: use a better vis architecture Q_OBJECT @@ -118,7 +118,7 @@ class MPM : public SimCenterAppWidget QString simulationType(); // QString foamDictsPath(); // For OpenFOAM from WE-UQ, not MPM - SC_ResultsWidget* getResultsWidget(QWidget *parent); // For vis of output data results + // SC_ResultsWidget* getResultsWidget(QWidget *parent); // For vis of output data results void hideVisualization(void); void showVisualization(void); diff --git a/EVENTS/MPM/MaterialMPM.cpp b/EVENTS/MPM/MaterialMPM.cpp index 6e3192ee..02dea77d 100644 --- a/EVENTS/MPM/MaterialMPM.cpp +++ b/EVENTS/MPM/MaterialMPM.cpp @@ -571,24 +571,24 @@ MaterialMPM::~MaterialMPM() void MaterialMPM::clear(void) { - // materialPreset->setCurrentIndex(0); - // constitutive->setCurrentIndex(0); - // CFL->clear(); - // density->clear(); - // bulkModulus->clear(); - // viscosity->clear(); - // bulkModulusDerivative->clear(); - // youngsModulus->clear(); - // poissonsRatio->clear(); - // cohesion->clear(); - // frictionAngle->clear(); - // dilationAngle->clear(); - // beta->clear(); - // useVolumeCorrection->setChecked(false); - // useHardening->setChecked(false); - // xi->clear(); - // logJp->clear(); - // Mohr->clear(); + materialPreset->setCurrentIndex(0); + constitutive->setCurrentIndex(0); + CFL->clear(); + density->clear(); + bulkModulus->clear(); + viscosity->clear(); + bulkModulusDerivative->clear(); + youngsModulus->clear(); + poissonsRatio->clear(); + cohesion->clear(); + frictionAngle->clear(); + dilationAngle->clear(); + beta->clear(); + useVolumeCorrection->setChecked(false); + useHardening->setChecked(false); + xi->clear(); + logJp->clear(); + Mohr->clear(); } bool @@ -605,7 +605,6 @@ MaterialMPM::setMaterialPreset(int index) bool MaterialMPM::outputToJSON(QJsonObject &jsonObject) { - // Future schema QJsonObject materialObject; materialObject["material_preset"] = QJsonValue(materialPreset->currentText()).toString(); materialObject["constitutive"] = QJsonValue(constitutive->currentText()).toString(); @@ -636,53 +635,107 @@ MaterialMPM::outputToJSON(QJsonObject &jsonObject) materialObject["friction_angle"] = frictionAngle->text().toDouble(); // Needed ? materialObject["hardeningOn"] = useHardening->isChecked() ? QJsonValue(true).toBool() : QJsonValue(false).toBool(); materialObject["logJp0"] = logJp->text().toDouble(); - // + materialObject["xi"] = xi->text().toDouble(); materialObject["beta"] = beta->text().toDouble(); + // WARN: Mohr is squared in the constitutive model in ClaymoreUW for now materialObject["Mohr"] = (Mohr->text().toDouble() * Mohr->text().toDouble()); - // + materialObject["hardening_ratio"] = xi->text().toDouble(); materialObject["cohesion_ratio"] = beta->text().toDouble(); materialObject["mohr_friction"] = Mohr->text().toDouble(); } jsonObject["material"] = materialObject; - // ClaymoreUW artifacts, global material values. TODO: Deprecate - // jsonObject["material_preset"] = QJsonValue(materialPreset->currentText()).toString(); - // jsonObject["constitutive"] = QJsonValue(constitutive->currentText()).toString(); - // jsonObject["CFL"] = CFL->text().toDouble(); // TODO: Rename? "cfl"? Might be reserved in other contexts - // jsonObject["rho"] = density->text().toDouble(); - // jsonObject["bulk_modulus"] = bulkModulus->text().toDouble(); - // jsonObject["youngs_modulus"] = youngsModulus->text().toDouble(); - // jsonObject["poisson_ratio"] = poissonsRatio->text().toDouble(); - // jsonObject["viscosity"] = viscosity->text().toDouble(); - // // TODO: Equation of state options (Murnaghan-Tait, Cole, Birch, etc. or JFluid, PA-JB Fluid, etc.) - // jsonObject["gamma"] = bulkModulusDerivative->text().toDouble(); // TODO: Rename - // // jsonObject["surface_tension"] = surfaceTension->text().toDouble(); // TODO: Implement - // jsonObject["logJp0"] = logJp->text().toDouble(); - // jsonObject["SandVolCorrection"] = useVolumeCorrection->isChecked() ? QJsonValue(true).toBool() : QJsonValue(false).toBool(); - // jsonObject["cohesion"] = cohesion->text().toDouble(); // TODO: Specify units, I believe this is log(strain) currently hence small values - // jsonObject["friction_angle"] = frictionAngle->text().toDouble(); - // jsonObject["dilation_angle"] = dilationAngle->text().toDouble(); // TODO: Check if this is used - // jsonObject["hardeningOn"] = useHardening->isChecked() ? QJsonValue(true).toBool() : QJsonValue(false).toBool(); - // jsonObject["xi"] = xi->text().toDouble(); // TODO: Rename - // jsonObject["beta"] = beta->text().toDouble(); // TODO: Rename - // jsonObject["Mohr"] = (Mohr->text().toDouble() * Mohr->text().toDouble()); // TODO: Rename return true; } bool MaterialMPM::inputFromJSON(QJsonObject &jsonObject) { + + this->clear(); + + if (jsonObject.contains("material_preset")) { + QString material_preset = jsonObject["material_preset"].toString(); + int index = materialPreset->findText(material_preset); + if (index != -1) { + materialPreset->setCurrentIndex(index); + } + } + if (jsonObject.contains("constitutive")) { + QString constitutive_law = jsonObject["constitutive"].toString(); + int index = constitutive->findText(constitutive_law); + if (index != -1) { + constitutive->setCurrentIndex(index); + } + } + if (jsonObject.contains("CFL")) { + CFL->setText(QString::number(jsonObject["CFL"].toDouble())); + } + if (jsonObject.contains("rho")) { + density->setText(QString::number(jsonObject["rho"].toDouble())); + } + if (jsonObject.contains("bulk_modulus")) { + bulkModulus->setText(QString::number(jsonObject["bulk_modulus"].toDouble())); + } + if (jsonObject.contains("youngs_modulus")) { + youngsModulus->setText(QString::number(jsonObject["youngs_modulus"].toDouble())); + } + if (jsonObject.contains("poisson_ratio")) { + poissonsRatio->setText(QString::number(jsonObject["poisson_ratio"].toDouble())); + } + if (jsonObject.contains("viscosity")) { + viscosity->setText(QString::number(jsonObject["viscosity"].toDouble())); + } + if (jsonObject.contains("gamma")) { + bulkModulusDerivative->setText(QString::number(jsonObject["gamma"].toDouble())); + } + if (jsonObject.contains("cohesion")) { + cohesion->setText(QString::number(jsonObject["cohesion"].toDouble())); + } + if (jsonObject.contains("friction_angle")) { + frictionAngle->setText(QString::number(jsonObject["friction_angle"].toDouble())); + } + if (jsonObject.contains("dilation_angle")) { + dilationAngle->setText(QString::number(jsonObject["dilation_angle"].toDouble())); + } + if (jsonObject.contains("beta")) { + beta->setText(QString::number(jsonObject["beta"].toDouble())); + } + if (jsonObject.contains("SandVolCorrection")) { + useVolumeCorrection->setChecked(jsonObject["SandVolCorrection"].toBool()); + } + if (jsonObject.contains("hardeningOn")) { + useHardening->setChecked(jsonObject["hardeningOn"].toBool()); + } + if (jsonObject.contains("xi")) { + xi->setText(QString::number(jsonObject["xi"].toDouble())); + } + if (jsonObject.contains("logJp0")) { + logJp->setText(QString::number(jsonObject["logJp0"].toDouble())); + } + // WARN: Mohr is squared in the constitutive model in ClaymoreUW for now (but we dont adjust here) + if (jsonObject.contains("Mohr")) { + Mohr->setText(QString::number(jsonObject["Mohr"].toDouble())); + } + if (jsonObject.contains("hardening_ratio")) { + xi->setText(QString::number(jsonObject["hardening_ratio"].toDouble())); + } + if (jsonObject.contains("cohesion_ratio")) { + beta->setText(QString::number(jsonObject["cohesion_ratio"].toDouble())); + } + if (jsonObject.contains("mohr_friction")) { + Mohr->setText(QString::number(jsonObject["mohr_friction"].toDouble())); + } + return true; } bool MaterialMPM::copyFiles(QString &destDir) { - // if (theOpenSeesPyScript->copyFile(destDir) != true) - // return false; - // return theSurfaceFile->copyFile(destDir); + Q_UNUSED(destDir); return true; } diff --git a/EVENTS/MPM/OutputsMPM.cpp b/EVENTS/MPM/OutputsMPM.cpp index 8197f8c7..0361e897 100644 --- a/EVENTS/MPM/OutputsMPM.cpp +++ b/EVENTS/MPM/OutputsMPM.cpp @@ -216,23 +216,24 @@ OutputsMPM::~OutputsMPM() void OutputsMPM::clear(void) { - // vtkBodies_Output->clear(); - // vtkCheckpoints_Output->clear(); - // vtkBoundaries_Output->clear(); - // vtkSensors_Output->clear(); - // vtkEnergies_Output->clear(); + + // vtkBodies_Output->setCurrentIndex(vtkBodies_Output->findText("BGEO")); + // vtkCheckpoints_Output->setCurrentIndex(vtkCheckpoints_Output->findText("BGEO")); + // vtkBoundaries_Output->setCurrentIndex(vtkBoundaries_Output->findText("OBJ")); + // vtkSensors_Output->setCurrentIndex(vtkSensors_Output->findText("CSV")); + // vtkEnergies_Output->setCurrentIndex(vtkEnergies_Output->findText("CSV")); // outputBodies_Dt->clear(); // outputCheckpoints_Dt->clear(); // outputBoundaries_Dt->clear(); // outputEnergies_Dt->clear(); - // useKineticEnergy->clear(); - // usePotentialEnergy->clear(); - // useStrainEnergy->clear(); + // useKineticEnergy->setChecked(false); + // usePotentialEnergy->setChecked(false); + // useStrainEnergy->setChecked(false); + + // bodies_OutputExteriorOnly->setChecked(false); - // bodies_OutputExteriorOnly->clear(); - // bodiesAttribsTable->clear(); } bool @@ -289,22 +290,42 @@ bool OutputsMPM::inputFromJSON(QJsonObject &jsonObject) { - // vtkBodies_Output->inputFromJSON(jsonObject); - // vtkSensors_Output->inputFromJSON(jsonObject); - // outputBodies_Dt->inputFromJSON(jsonObject); - // outputSensors_Dt->inputFromJSON(jsonObject); - // outputSensors_FM->inputFromJSON(jsonObject); - // outputSensors_FSP->inputFromJSON(jsonObject); - // outputSensors_FP->inputFromJSON(jsonObject); - // outputSensors_SC->inputFromJSON(jsonObject); - // freeSurfaceProbes->inputFromJSON(jsonObject); - // fieldProbes->inputFromJSON(jsonObject); - // sectionCuts->inputFromJSON(jsonObject); + this->clear(); + + QJsonObject outputsObject = jsonObject["outputs"].toObject(); + vtkBodies_Output->setCurrentIndex(vtkBodies_Output->findText(outputsObject["bodies_save_suffix"].toString())); + vtkCheckpoints_Output->setCurrentIndex(vtkCheckpoints_Output->findText(outputsObject["checkpoints_save_suffix"].toString())); + vtkBoundaries_Output->setCurrentIndex(vtkBoundaries_Output->findText(outputsObject["boundaries_save_suffix"].toString())); + vtkSensors_Output->setCurrentIndex(vtkSensors_Output->findText(outputsObject["sensors_save_suffix"].toString())); + vtkEnergies_Output->setCurrentIndex(vtkEnergies_Output->findText(outputsObject["energies_save_suffix"].toString())); + + outputBodies_Dt->inputFromJSON(outputsObject); + outputCheckpoints_Dt->inputFromJSON(outputsObject); + outputBoundaries_Dt->inputFromJSON(outputsObject); + outputEnergies_Dt->inputFromJSON(outputsObject); + + useKineticEnergy->setChecked(outputsObject["useKineticEnergy"].toBool()); + usePotentialEnergy->setChecked(outputsObject["usePotentialEnergy"].toBool()); + useStrainEnergy->setChecked(outputsObject["useStrainEnergy"].toBool()); + + // Each row of table becomes an array of strings, all arrays occupy a single array called "output_attribs" + // In-post, sort each array element (i.e. row of table) into the appropiate JSON body object based on the row order + // I.e., row 1 of table is added to the first JSON body object (should correspond to tab order I think) + QJsonObject bodiesAttribsObject; + bodiesAttribsObject["bodiesAttribsTable"] = outputsObject["output_attribs"].toArray(); + bodiesAttribsTable->inputFromJSON(bodiesAttribsObject); + + // TODO: Deprecate ClaymoreUW artifacts (save_suffix, fps, particles_output_exterior_only in "simulation" object, handled in MPM.cpp) + QJsonObject simulationObject = jsonObject["simulation"].toObject(); + outputBodies_Dt->setText(QString::number(simulationObject["fps"].toDouble())); + vtkBodies_Output->setCurrentIndex(vtkBodies_Output->findText(simulationObject["save_suffix"].toString())); + bodies_OutputExteriorOnly->setChecked(simulationObject["particles_output_exterior_only"].toBool()); return true; } bool OutputsMPM::copyFiles(QString &dirName) { + Q_UNUSED(dirName); return true; } diff --git a/EVENTS/MPM/PartitionMPM.cpp b/EVENTS/MPM/PartitionMPM.cpp index 866276a4..37179612 100644 --- a/EVENTS/MPM/PartitionMPM.cpp +++ b/EVENTS/MPM/PartitionMPM.cpp @@ -285,12 +285,46 @@ PartitionMPM::outputToJSON(QJsonObject &jsonObject) bool PartitionMPM::inputFromJSON(QJsonObject &jsonObject) { + this->clear(); + + constexpr bool useUpdatedSchema = false; // TODO: Update to new schema + if (useUpdatedSchema) { + if (jsonObject.contains("device")) { + deviceNumber->setText(QString::number(jsonObject["device"].toInt())); + } + if (jsonObject.contains("body")) { + bodyNumber->setText(QString::number(jsonObject["body"].toInt())); + } + } else { + if (jsonObject.contains("gpu")) { + deviceNumber->setText(QString::number(jsonObject["gpu"].toInt())); + } + if (jsonObject.contains("model")) { + bodyNumber->setText(QString::number(jsonObject["model"].toInt())); + } + } + + if (jsonObject.contains("partition_start")) { + QJsonArray partition_start = jsonObject["partition_start"].toArray(); + partitionOrigin_X->setText(QString::number(partition_start[0].toDouble())); + partitionOrigin_Y->setText(QString::number(partition_start[1].toDouble())); + partitionOrigin_Z->setText(QString::number(partition_start[2].toDouble())); + } + + if (jsonObject.contains("partition_end")) { + QJsonArray partition_end = jsonObject["partition_end"].toArray(); + partitionDimensions_X->setText(QString::number(partition_end[0].toDouble() - partitionOrigin_X->text().toDouble())); + partitionDimensions_Y->setText(QString::number(partition_end[1].toDouble() - partitionOrigin_Y->text().toDouble())); + partitionDimensions_Z->setText(QString::number(partition_end[2].toDouble() - partitionOrigin_Z->text().toDouble())); + } + return true; } bool PartitionMPM::copyFiles(QString &destDir) { + Q_UNUSED(destDir); return true; } diff --git a/EVENTS/MPM/PartitionsMPM.cpp b/EVENTS/MPM/PartitionsMPM.cpp index 9c22f579..14721159 100644 --- a/EVENTS/MPM/PartitionsMPM.cpp +++ b/EVENTS/MPM/PartitionsMPM.cpp @@ -165,12 +165,10 @@ PartitionsMPM::~PartitionsMPM() void PartitionsMPM::clear(void) { // Clear all partitions - // for (int i = 0; i < numAddedTabs; i++) { + // for (int i=0; i= numReserveTabs) break; // addedPartition[i]->clear(); // } - // // Clear the tab widget - // tabWidget->clear(); - // numAddedTabs = 0; } void @@ -412,127 +410,17 @@ bool PartitionsMPM::inputFromJSON(QJsonObject &jsonObject) { const bool useUpdatedSchema = false; // TODO: Update to new schema - QJsonArray partition_start; - QJsonArray partition_end; QJsonArray partitions; - - // lambda - auto lambdaInputFromJSON = [&](QJsonObject jsonRef) { - QJsonObject jsonThing = jsonRef; - // Following call of this lambda, the updated jsonThing is passed to inputFromJson() for an appropriate partition. Note we captured it as a reference - jsonThing["valid"] = true; // Mark the partition as valid - const int absMaxNumGPUs = 256; // Based on the NVIDIA H100 NV-Switch - NVLink topology, 256 values representable by one byte during multi-gpu communications - const int absMaxNumModels = 8; // Based on fact that few GPUs have enough memory to allow more than 8 bodies to a device - - if (jsonThing.contains("partition") || jsonThing.contains("partitions")) { - qDebug() << "ERROR: PartitionsMPM - Partition object or array found double-nested in input JSON partition or partitions. Not valid schema! Ignoring double-nested partitions..."; - // return false; // Not a big deal, should just ignore and move on to check for actual schema reqs - } - // TODO: full schema migration for these keys, must be handled on external simulation application side as well or we will need to output all keys values for both schemas - // TODO: QVariant for handling int, double, long, etc. types for numerical input along with string input (i.e. char) of '1', or 'one' - if (useUpdatedSchema) { - if (jsonThing.contains("device") && jsonThing["device"].isDouble()) { - defaultGPUID = jsonThing["device"].toInt(); - defaultGPUID = (defaultGPUID < absMaxNumGPUs) ? defaultGPUID : absMaxNumGPUs - 1; // We may set the maxNumGPUs after inputJSON, so use an upper-bound check only here - defaultGPUID = (defaultGPUID >= 0) ? defaultGPUID : 0; - } - if (jsonThing.contains("body") && jsonThing["body"].isDouble()) { - defaultModelID = jsonThing["body"].toInt(); - defaultModelID = (defaultModelID < absMaxNumModels) ? defaultModelID : absMaxNumModels - 1; - } - } else { - if (jsonThing.contains("gpu") && jsonThing["gpu"].isDouble()) { - defaultGPUID = jsonThing["gpu"].toInt(); - defaultGPUID = (defaultGPUID < absMaxNumGPUs) ? defaultGPUID : absMaxNumGPUs - 1; - defaultGPUID = (defaultGPUID >= 0) ? defaultGPUID : 0; - } else { - defaultGPUID = (defaultModelID < absMaxNumGPUs) ? defaultModelID : absMaxNumGPUs - 1; - defaultGPUID = (defaultGPUID >= 0) ? defaultGPUID : 0; - } - - if (jsonThing.contains("model") && jsonThing["model"].isDouble()) { - defaultModelID = jsonThing["model"].toInt(); - defaultModelID = (defaultModelID < absMaxNumModels) ? defaultModelID : absMaxNumModels - 1; - defaultModelID = (defaultModelID >= 0) ? defaultModelID : 0; - } else { - defaultModelID = (defaultGPUID < absMaxNumModels) ? defaultGPUID : absMaxNumModels - 1; - defaultModelID = (defaultModelID >= 0) ? defaultModelID : 0; - } - } - // Must have both partition_start and partition_end, and they must be arrays, or we will just assume a default domain partition to be safe - if (jsonThing.contains("partition_start") && jsonThing.contains("partition_end") && jsonThing["partition_start"].isArray() && jsonThing["partition_end"].isArray()) { - partition_start = jsonThing["partition_start"].toArray(); - partition_end = jsonThing["partition_end"].toArray(); - // Check invalid partition start and end values - const int reqDims = 3; - if (partition_start.size() < reqDims) { - // Append 0.0 to the end of the array until it has 3 elements - while (partition_start.size() < reqDims) { - partition_start.append(0.0); - } - } else if (partition_start.size() > reqDims) { - for (int i = partition_start.size() - 1; i > reqDims-1; i--) { - partition_start.removeLast(); - } - } - if (partition_end.size() < reqDims) { - // Append associated partition_start element + 1 to the end of the array until it has 3 elements - const double bufferVal = 1.0; // Ensure non-inverted partition start and end values when appending synth. values - while (partition_end.size() < reqDims) { - partition_end.append(partition_start[partition_end.size()].toDouble() + bufferVal); // Ideally have bufferVal be the grid-cell size or particle spacing - } - } else if (partition_end.size() > reqDims) { - for (int i = partition_end.size() - 1; i > reqDims-1; i--) { - partition_end.removeLast(); - } - } - - for (int i = 0; i < 3; i++) { - // Check inverted partition start and end values - if (partition_start[i].toDouble() > partition_end[i].toDouble()) { - // Swap the values - double temp = partition_start[i].toDouble(); - partition_start[i] = partition_end[i].toDouble(); - partition_end[i] = temp; - } - } - } else { - // OSU LWF default values - qDebug() << "WARNING: PartitionsMPM - Pair of valid partition start and end values not found in input JSON partition. Using default partition start and end values for full domain..."; - partition_start = {0.0, 0.0, 0.0}; - partition_end = {90.0, 4.5, 3.65}; - } - // --- - // Set the values in the jsonObject that is passed to inputFromJson() for each partition - // TODO: Only use device:body or gpu:model, etc., not both as schemas are updating - jsonThing["device"] = defaultGPUID % maxNumGPUs; - jsonThing["body"] = defaultModelID % maxNumModels; - jsonThing["gpu"] = defaultGPUID % maxNumGPUs; - jsonThing["model"] = defaultModelID % maxNumModels; - jsonThing["partition_start"] = partition_start; - jsonThing["partition_end"] = partition_end; - jsonThing["valid"] = true; // Mark the partition as valid - jsonRef = jsonThing; // Update the reference to the updated jsonThing - // return jsonRef; - }; // End lambda // Figure out if we are taking an array of partitions, a single one, none (i.e. default init), and check various boudnds - + if (jsonObject.contains("partitions")) { + jsonObject["partition"] = jsonObject["partitions"]; + } if (jsonObject.contains("partition")) { - jsonObject["partitions"] = jsonObject["partition"]; - if (jsonObject["partitions"].isArray()) { - partitions = jsonObject["partitions"].toArray(); - } else if (jsonObject["partitions"].isObject()) { - partitions.append(jsonObject["partitions"].toObject()); - } else { - qDebug() << "ERROR: PartitionsMPM - No partition array or object found in input JSON object. It is non valid type: " << jsonObject["partitions"].type(); - return false; // Incorrect type in input JSON-- something went wrong, return a false as error marker - } - } else if (jsonObject.contains("partitions")) { - if (jsonObject["partitions"].isArray()) { - partitions = jsonObject["partitions"].toArray(); - } else if (jsonObject["partitions"].isObject()) { - partitions.append(jsonObject["partitions"].toObject()); + if (jsonObject["partition"].isArray()) { + partitions = jsonObject["partition"].toArray(); + } else if (jsonObject["partition"].isObject()) { + partitions.append(jsonObject["partition"].toObject()); } else { qDebug() << "ERROR: PartitionsMPM - No partition array or object found in input JSON object. It is non valid type: " << jsonObject["partitions"].type(); return false; // Incorrect type in input JSON-- something went wrong, return a false as error marker @@ -542,7 +430,7 @@ PartitionsMPM::inputFromJSON(QJsonObject &jsonObject) // Not bad, assume no partition means default domain size and GPU/Device 0, Model/Body 0 } - + // Check if the partitions array is empty, if so, add a default partition if (!partitions.size()) { qDebug() << "WARNING: PartitionsMPM - No entries within partitions of JSON file. Use default partition on Device 0 : Body 0 over simulation domain"; QJsonObject tmpPartition = QJsonObject(); @@ -553,12 +441,17 @@ PartitionsMPM::inputFromJSON(QJsonObject &jsonObject) tmpPartition["gpu"] = 0; tmpPartition["model"] = 0; } + QJsonArray partition_start; + QJsonArray partition_end; + partition_start = {0.0, 0.0, 0.0}; // Default partition start + partition_end = {90.0, 4.5, 3.6}; // Default partition end (OSU LWF example) tmpPartition["partition_start"] = partition_start; tmpPartition["partition_end"] = partition_end; partitions.append(tmpPartition); // Not bad, assume no partition means default domain size and GPU/Device 0, Model/Body 0 } + // Make sure the number of tabs matches the number of partitions in the JSON file if (numAddedTabs > partitions.size()) { for (int i = numAddedTabs; i > partitions.size(); i--) { tabWidget->removeTab(i); // Remove the exterior tab from the tabWidget @@ -569,33 +462,151 @@ PartitionsMPM::inputFromJSON(QJsonObject &jsonObject) addPartition(defaultGPUID, defaultModelID); // Add the partition to the body } } - bool result = true; + + // Fill in each partition tab with the data from the JSON file for (int i = 0; i < partitions.size(); i++) { - result &= partitions[i].isObject() ? true : false; - if (!result) { - qDebug() << "ERROR: PartitionsMPM - Partition " << i << " out of [0, " << partitions.size() << ") entries within JSON partitions array for this body is not an object. Type: " << partitions[i].type(); - return result; - } - // cast away - lambdaInputFromJSON(partitions[i].toObject()); - result &= partitions[i].toObject()["valid"].toBool(); - if (!result) { - qDebug() << "ERROR: PartitionsMPM - Failed to load using lambdaInputFromJSON for partition" << i << " out of [0, " << partitions.size() << ") entries within JSON partitions array for this body."; - return result; - } - QJsonObject uniquePartitionObject = partitions[i].toObject(); - result &= addedPartition[i]->inputFromJSON(uniquePartitionObject); - if (!result) { - qDebug() << "ERROR: PartitionsMPM - Failed to load partition with data from JSON file via inputFromJSON(), error at partition " << i << " out of [0, " << partitions.size() << ") entries within JSON partitions array for this body."; - return result; + QJsonObject partitionObject = partitions[i].toObject(); + addedPartition[i]->inputFromJSON(partitionObject); + } + + + // Some fancier bounds checking stuff I'll probably deprecated + constexpr bool useBoundsCheck = false; + if constexpr (useBoundsCheck) { + QJsonArray partition_start; + QJsonArray partition_end; + partition_start = {0.0, 0.0, 0.0}; // Default partition start + partition_end = {90.0, 4.5, 3.6}; // Default partition end (OSU LWF example) + auto lambdaInputFromJSON = [&](QJsonObject jsonRef) { + QJsonObject jsonThing = jsonRef; + // Following call of this lambda, the updated jsonThing is passed to inputFromJson() for an appropriate partition. Note we captured it as a reference + jsonThing["valid"] = true; // Mark the partition as valid + const int absMaxNumGPUs = 256; // Based on the NVIDIA H100 NV-Switch - NVLink topology, 256 values representable by one byte during multi-gpu communications + const int absMaxNumModels = 8; // Based on fact that few GPUs have enough memory to allow more than 8 bodies to a device + + if (jsonThing.contains("partition") || jsonThing.contains("partitions")) { + qDebug() << "ERROR: PartitionsMPM - Partition object or array found double-nested in input JSON partition or partitions. Not valid schema! Ignoring double-nested partitions..."; + // return false; // Not a big deal, should just ignore and move on to check for actual schema reqs + } + // TODO: full schema migration for these keys, must be handled on external simulation application side as well or we will need to output all keys values for both schemas + // TODO: QVariant for handling int, double, long, etc. types for numerical input along with string input (i.e. char) of '1', or 'one' + if (useUpdatedSchema) { + if (jsonThing.contains("device") && jsonThing["device"].isDouble()) { + defaultGPUID = jsonThing["device"].toInt(); + defaultGPUID = (defaultGPUID < absMaxNumGPUs) ? defaultGPUID : absMaxNumGPUs - 1; // We may set the maxNumGPUs after inputJSON, so use an upper-bound check only here + defaultGPUID = (defaultGPUID >= 0) ? defaultGPUID : 0; + } + if (jsonThing.contains("body") && jsonThing["body"].isDouble()) { + defaultModelID = jsonThing["body"].toInt(); + defaultModelID = (defaultModelID < absMaxNumModels) ? defaultModelID : absMaxNumModels - 1; + } + } else { + if (jsonThing.contains("gpu") && jsonThing["gpu"].isDouble()) { + defaultGPUID = jsonThing["gpu"].toInt(); + defaultGPUID = (defaultGPUID < absMaxNumGPUs) ? defaultGPUID : absMaxNumGPUs - 1; + defaultGPUID = (defaultGPUID >= 0) ? defaultGPUID : 0; + } else { + defaultGPUID = (defaultModelID < absMaxNumGPUs) ? defaultModelID : absMaxNumGPUs - 1; + defaultGPUID = (defaultGPUID >= 0) ? defaultGPUID : 0; + } + + if (jsonThing.contains("model") && jsonThing["model"].isDouble()) { + defaultModelID = jsonThing["model"].toInt(); + defaultModelID = (defaultModelID < absMaxNumModels) ? defaultModelID : absMaxNumModels - 1; + defaultModelID = (defaultModelID >= 0) ? defaultModelID : 0; + } else { + defaultModelID = (defaultGPUID < absMaxNumModels) ? defaultGPUID : absMaxNumModels - 1; + defaultModelID = (defaultModelID >= 0) ? defaultModelID : 0; + } + } + // Must have both partition_start and partition_end, and they must be arrays, or we will just assume a default domain partition to be safe + if (jsonThing.contains("partition_start") && jsonThing.contains("partition_end") && jsonThing["partition_start"].isArray() && jsonThing["partition_end"].isArray()) { + partition_start = jsonThing["partition_start"].toArray(); + partition_end = jsonThing["partition_end"].toArray(); + // Check invalid partition start and end values + const int reqDims = 3; + if (partition_start.size() < reqDims) { + // Append 0.0 to the end of the array until it has 3 elements + while (partition_start.size() < reqDims) { + partition_start.append(0.0); + } + } else if (partition_start.size() > reqDims) { + for (int i = partition_start.size() - 1; i > reqDims-1; i--) { + partition_start.removeLast(); + } + } + if (partition_end.size() < reqDims) { + // Append associated partition_start element + 1 to the end of the array until it has 3 elements + const double bufferVal = 1.0; // Ensure non-inverted partition start and end values when appending synth. values + while (partition_end.size() < reqDims) { + partition_end.append(partition_start[partition_end.size()].toDouble() + bufferVal); // Ideally have bufferVal be the grid-cell size or particle spacing + } + } else if (partition_end.size() > reqDims) { + for (int i = partition_end.size() - 1; i > reqDims-1; i--) { + partition_end.removeLast(); + } + } + + for (int i = 0; i < 3; i++) { + // Check inverted partition start and end values + if (partition_start[i].toDouble() > partition_end[i].toDouble()) { + // Swap the values + double temp = partition_start[i].toDouble(); + partition_start[i] = partition_end[i].toDouble(); + partition_end[i] = temp; + } + } + } else { + // OSU LWF default values + qDebug() << "WARNING: PartitionsMPM - Pair of valid partition start and end values not found in input JSON partition. Using default partition start and end values for full domain..."; + partition_start = {0.0, 0.0, 0.0}; + partition_end = {90.0, 4.5, 3.65}; + } + // --- + // Set the values in the jsonObject that is passed to inputFromJson() for each partition + // TODO: Only use device:body or gpu:model, etc., not both as schemas are updating + jsonThing["device"] = defaultGPUID % maxNumGPUs; + jsonThing["body"] = defaultModelID % maxNumModels; + jsonThing["gpu"] = defaultGPUID % maxNumGPUs; + jsonThing["model"] = defaultModelID % maxNumModels; + jsonThing["partition_start"] = partition_start; + jsonThing["partition_end"] = partition_end; + jsonThing["valid"] = true; // Mark the partition as valid + jsonRef = jsonThing; // Update the reference to the updated jsonThing + // return jsonRef; + }; // End lambda + + bool result = true; + for (int i = 0; i < partitions.size(); i++) { + result &= partitions[i].isObject() ? true : false; + if (!result) { + qDebug() << "ERROR: PartitionsMPM - Partition " << i << " out of [0, " << partitions.size() << ") entries within JSON partitions array for this body is not an object. Type: " << partitions[i].type(); + return result; + } + lambdaInputFromJSON(partitions[i].toObject()); + result &= partitions[i].toObject()["valid"].toBool(); + if (!result) { + qDebug() << "ERROR: PartitionsMPM - Failed to load using lambdaInputFromJSON for partition" << i << " out of [0, " << partitions.size() << ") entries within JSON partitions array for this body."; + return result; + } + QJsonObject uniquePartitionObject = partitions[i].toObject(); + result &= addedPartition[i]->inputFromJSON(uniquePartitionObject); + if (!result) { + qDebug() << "ERROR: PartitionsMPM - Failed to load partition with data from JSON file via inputFromJSON(), error at partition " << i << " out of [0, " << partitions.size() << ") entries within JSON partitions array for this body."; + return result; + } } } - return result; + + return true; } bool PartitionsMPM::copyFiles(QString &destDir) { + for (int i=0; icopyFiles(destDir); + } return true; } diff --git a/EVENTS/MPM/ResultsMPM.cpp b/EVENTS/MPM/ResultsMPM.cpp index 723476af..c9cb7225 100644 --- a/EVENTS/MPM/ResultsMPM.cpp +++ b/EVENTS/MPM/ResultsMPM.cpp @@ -321,7 +321,7 @@ ResultsMPM::~ResultsMPM() void ResultsMPM::clear(void) { - + } bool diff --git a/EVENTS/MPM/SensorMPM.cpp b/EVENTS/MPM/SensorMPM.cpp index c0777eb6..c19eab88 100644 --- a/EVENTS/MPM/SensorMPM.cpp +++ b/EVENTS/MPM/SensorMPM.cpp @@ -802,12 +802,10 @@ SensorMPM::inputFromJSON(QJsonObject &jsonObject) return true; } -// bool -// SensorMPM::copyFiles(QString &destDir) -// { -// // if (theOpenSeesPyScript->copyFile(destDir) != true) -// // return false; -// // return theSurfaceFile->copyFile(destDir); -// return false; -// } +bool +SensorMPM::copyFiles(QString &destDir) +{ + Q_UNUSED(destDir); + return true; +} diff --git a/EVENTS/MPM/SensorMPM.h b/EVENTS/MPM/SensorMPM.h index 3e91285e..54c944e1 100644 --- a/EVENTS/MPM/SensorMPM.h +++ b/EVENTS/MPM/SensorMPM.h @@ -68,10 +68,10 @@ class SensorMPM : public SimCenterWidget public: SensorMPM(QWidget *parent = 0); virtual ~SensorMPM(); + void clear(void); bool outputToJSON(QJsonObject &jsonObject); bool inputFromJSON(QJsonObject &jsonObject); - void clear(void); - // bool copyFiles(QString &dirName); + bool copyFiles(QString &dirName); bool setSensorType(int type); diff --git a/EVENTS/MPM/SensorsMPM.cpp b/EVENTS/MPM/SensorsMPM.cpp index 29d5079a..c26f7e8f 100644 --- a/EVENTS/MPM/SensorsMPM.cpp +++ b/EVENTS/MPM/SensorsMPM.cpp @@ -291,8 +291,10 @@ SensorsMPM::inputFromJSON(QJsonObject &jsonObject) bool SensorsMPM::copyFiles(QString &destDir) { - // if (theOpenSeesPyScript->copyFile(destDir) != true) - // return false; + for (int i=0; i= numReserveTabs) break; + addedSensor[i]->copyFiles(destDir); + } return true; } diff --git a/EVENTS/MPM/SettingsMPM.cpp b/EVENTS/MPM/SettingsMPM.cpp index f34dd76a..eb8df0e0 100644 --- a/EVENTS/MPM/SettingsMPM.cpp +++ b/EVENTS/MPM/SettingsMPM.cpp @@ -108,7 +108,7 @@ SettingsMPM::SettingsMPM(QWidget *parent) QGridLayout *dimensionsBoxLayout = new QGridLayout(); dimensionsBox->setLayout(dimensionsBoxLayout); - gridCellSize = new SC_DoubleLineEdit("defaultDx", 0.10); + gridCellSize = new SC_DoubleLineEdit("default_dx", 0.10); dimensionsBoxLayout->addWidget(new QLabel("Grid Cell Size (dx)"), numRow, 0, 1, 1, Qt::AlignRight); dimensionsBoxLayout->addWidget(gridCellSize, numRow, 1, 1, 3); dimensionsBoxLayout->itemAt(dimensionsBoxLayout->count()-1)->widget()->setMaximumWidth(maxWidth); @@ -151,7 +151,7 @@ SettingsMPM::SettingsMPM(QWidget *parent) numRow = 0; - timeStep = new SC_DoubleLineEdit("defaultDt", 1e-4); + timeStep = new SC_DoubleLineEdit("default_dt", 1e-4); timeBoxLayout->addWidget(new QLabel("Max Time Step (dt)"), numRow, 0, 1, 1, Qt::AlignRight); timeBoxLayout->addWidget(timeStep, numRow, 1, 1, 3); timeBoxLayout->setColumnStretch(1, 1); // Add this line to make the middle column expand @@ -167,7 +167,7 @@ SettingsMPM::SettingsMPM(QWidget *parent) timeBoxLayout->addWidget(new QLabel(""), numRow++, 4, 1, 1); - initialTime = new SC_DoubleLineEdit("initialTime", 0.0); + initialTime = new SC_DoubleLineEdit("initial_time", 0.0); timeBoxLayout->addWidget(new QLabel("Initial Time (t0)"), numRow, 0, 1, 1, Qt::AlignRight); timeBoxLayout->addWidget(initialTime, numRow, 1, 1, 3); timeBoxLayout->itemAt(timeBoxLayout->count()-1)->widget()->setMaximumWidth(maxWidth); @@ -196,27 +196,27 @@ SettingsMPM::SettingsMPM(QWidget *parent) scalingSettingsLayout->setColumnStretch(1, 1); // Add this line to make the middle column expand scalingSettingsLayout->itemAt(scalingSettingsLayout->count()-1)->widget()->setMaximumWidth(maxWidth); - froudeScaling = new SC_CheckBox("froudeScaling",false); + froudeScaling = new SC_CheckBox("use_froude_scaling",false); scalingSettingsLayout->addWidget(new QLabel("Apply Froude?"), numRow, 0, 1, 1, Qt::AlignRight); scalingSettingsLayout->addWidget(froudeScaling, numRow++, 1, 1, 1); - froudeLengthRatio = new SC_DoubleLineEdit("lengthRatio",1.0); + froudeLengthRatio = new SC_DoubleLineEdit("froude_scaling",1.0); // froude_length_ratio scalingSettingsLayout->addWidget(new QLabel("Length Ratio"), numRow, 0, 1, 1, Qt::AlignRight); scalingSettingsLayout->addWidget(froudeLengthRatio, numRow, 1, 1, 3); scalingSettingsLayout->itemAt(scalingSettingsLayout->count()-1)->widget()->setMaximumWidth(maxWidth); scalingSettingsLayout->addWidget(new QLabel("m/m"), numRow++, 4, 1, 1); - froudeTimeRatio = new SC_DoubleLineEdit("timeRatio",1.0); + froudeTimeRatio = new SC_DoubleLineEdit("froude_time_ratio",1.0); scalingSettingsLayout->addWidget(new QLabel("Time Ratio"), numRow, 0, 1, 1, Qt::AlignRight); scalingSettingsLayout->addWidget(froudeTimeRatio, numRow, 1, 1, 3); scalingSettingsLayout->itemAt(scalingSettingsLayout->count()-1)->widget()->setMaximumWidth(maxWidth); scalingSettingsLayout->addWidget(new QLabel("s/s"), numRow++, 4, 1, 1); - cauchyScaling = new SC_CheckBox("cauchyScaling",false); + cauchyScaling = new SC_CheckBox("use_cauchy_scaling",false); scalingSettingsLayout->addWidget(new QLabel("Apply Cauchy?"), numRow, 0, 1, 1, Qt::AlignRight); scalingSettingsLayout->addWidget(cauchyScaling, numRow++, 1, 1, 1); - cauchyBulkRatio = new SC_DoubleLineEdit("bulkRatio",1.0); + cauchyBulkRatio = new SC_DoubleLineEdit("cauchy_bulk_ratio",1.0); scalingSettingsLayout->addWidget(new QLabel("Elasticity Ratio"), numRow, 0, 1, 1, Qt::AlignRight); scalingSettingsLayout->addWidget(cauchyBulkRatio, numRow, 1, 1, 3); scalingSettingsLayout->itemAt(scalingSettingsLayout->count()-1)->widget()->setMaximumWidth(maxWidth); @@ -305,39 +305,39 @@ SettingsMPM::SettingsMPM(QWidget *parent) gpuSettingsLayout->itemAt(gpuSettingsLayout->count()-1)->widget()->setMaximumWidth(maxWidth); - numGPUs = new SC_IntLineEdit("numGPUs", 3); + numGPUs = new SC_IntLineEdit("num_gpus", 3); gpuSettingsLayout->addWidget(new QLabel("Max Number of GPUs"), numRow, 0, 1, 1, Qt::AlignRight); gpuSettingsLayout->addWidget(numGPUs, numRow++, 1, 1, 3); gpuSettingsLayout->itemAt(gpuSettingsLayout->count()-1)->widget()->setMaximumWidth(maxWidth); - modelsPerGPU = new SC_IntLineEdit("modelsPerGPU", 3); + modelsPerGPU = new SC_IntLineEdit("models_per_gpu", 3); gpuSettingsLayout->addWidget(new QLabel("Max Bodies Per GPU"), numRow, 0, 1, 1, Qt::AlignRight); gpuSettingsLayout->addWidget(modelsPerGPU, numRow++, 1, 1, 3); gpuSettingsLayout->itemAt(gpuSettingsLayout->count()-1)->widget()->setMaximumWidth(maxWidth); - hpcCardBrand = new SC_StringLineEdit("hpcCardBrand", "NVIDIA"); + hpcCardBrand = new SC_StringLineEdit("hpc_card_brand", "NVIDIA"); gpuSettingsLayout->addWidget(new QLabel("GPU Brand"), numRow, 0, 1, 1, Qt::AlignRight); gpuSettingsLayout->addWidget(hpcCardBrand, numRow, 1, 1, 3); gpuSettingsLayout->itemAt(gpuSettingsLayout->count()-1)->widget()->setMaximumWidth(maxWidth); gpuSettingsLayout->addWidget(new QLabel(""), numRow++, 4, 1, 1); - hpcCardName = new SC_StringLineEdit("hpcCardName","A100"); + hpcCardName = new SC_StringLineEdit("hpc_card_name","A100"); gpuSettingsLayout->addWidget(new QLabel("GPU Name"), numRow, 0, 1, 1, Qt::AlignRight); gpuSettingsLayout->addWidget(hpcCardName, numRow++, 1, 1, 3); gpuSettingsLayout->itemAt(gpuSettingsLayout->count()-1)->widget()->setMaximumWidth(maxWidth); - hpcCardArchitecture = new SC_StringLineEdit("hpcCardArchitecture", "Ampere"); + hpcCardArchitecture = new SC_StringLineEdit("hpc_card_architecture", "Ampere"); gpuSettingsLayout->addWidget(new QLabel("GPU Architecture"), numRow, 0, 1, 1, Qt::AlignRight); gpuSettingsLayout->addWidget(hpcCardArchitecture, numRow++, 1, 1, 3); gpuSettingsLayout->itemAt(gpuSettingsLayout->count()-1)->widget()->setMaximumWidth(maxWidth); - hpcCardGlobalMemory = new SC_IntLineEdit("hpcCardGlobalMemory", 40); + hpcCardGlobalMemory = new SC_IntLineEdit("hpc_card_global_memory", 40); gpuSettingsLayout->addWidget(new QLabel("GPU Global Memory"), numRow, 0, 1, 1, Qt::AlignRight); gpuSettingsLayout->addWidget(hpcCardGlobalMemory, numRow, 1, 1, 3); gpuSettingsLayout->itemAt(gpuSettingsLayout->count()-1)->widget()->setMaximumWidth(maxWidth); gpuSettingsLayout->addWidget(new QLabel("GB"), numRow++, 4, 1, 1); - hpcCardComputeCapability = new SC_IntLineEdit("hpcCardComputeCapability", 80); + hpcCardComputeCapability = new SC_IntLineEdit("hpc_card_compute_capability", 80); gpuSettingsLayout->addWidget(new QLabel("GPU Compute Capability"), numRow, 0, 1, 1, Qt::AlignRight); gpuSettingsLayout->addWidget(hpcCardComputeCapability, numRow, 1, 1, 3); gpuSettingsLayout->itemAt(gpuSettingsLayout->count()-1)->widget()->setMaximumWidth(maxWidth); @@ -431,6 +431,17 @@ SettingsMPM::SettingsMPM(QWidget *parent) layout->setRowStretch(3,1); hpc->setCurrentIndex(1); // Start with "TACC - UT Austin - Lonestar6", as it is more powerful than Frontera in double-precision hpc->setCurrentIndex(0); // For now, Default to "TACC - UT Austin - Frontera" for now, as Tapis apps are already made for Frontera over Lonestar6 + + // So user doesn't change HPC specs + numGPUs->setEnabled(false); + modelsPerGPU->setEnabled(false); + hpcQueue->setEnabled(false); + hpcCardName->setEnabled(false); + hpcCardBrand->setEnabled(false); + hpcCardArchitecture->setEnabled(false); + hpcCardComputeCapability->setEnabled(false); + hpcCardGlobalMemory->setEnabled(false); + } SettingsMPM::~SettingsMPM() @@ -461,6 +472,7 @@ void SettingsMPM::clear(void) { cauchyBulkRatio->clear(); numGPUs->clear(); modelsPerGPU->clear(); + hpcQueue->clear(); hpcCardName->clear(); hpcCardArchitecture->clear(); hpcCardGlobalMemory->clear(); @@ -520,100 +532,79 @@ SettingsMPM::outputToJSON(QJsonObject &jsonObject) scalingObject["froude_time_ratio"] = froudeTimeRatio->text().toDouble(); scalingObject["use_cauchy_scaling"] = cauchyScaling->isChecked() ? QJsonValue(true).toBool() : QJsonValue(false).toBool(); scalingObject["cauchy_bulk_ratio"] = cauchyBulkRatio->text().toDouble(); - jsonObject["scaling"] = scalingObject; // // For future use, not in ClaymoreUW yet as a separate "computer" object QJsonObject computerObject; computerObject["num_gpus"] = numGPUs->text().toInt(); computerObject["models_per_gpu"] = modelsPerGPU->text().toInt(); + computerObject["hpc_queue"] = hpcQueue->text(); computerObject["hpc_card_name"] = hpcCardName->text(); computerObject["hpc_card_architecture"] = hpcCardArchitecture->text(); computerObject["hpc_card_global_memory"] = hpcCardGlobalMemory->text().toInt(); computerObject["hpc_card_compute_capability"] = hpcCardComputeCapability->text().toInt(); computerObject["hpc_card_brand"] = hpcCardBrand->text(); computerObject["hpc"] = QJsonValue(hpc->currentText()).toString(); - jsonObject["computer"] = computerObject; jsonObject["simulation"] = settingsObject; + jsonObject["scaling"] = scalingObject; + jsonObject["computer"] = computerObject; - - - // domainSizeX->outputToJSON(jsonObject); - // domainSizeY->outputToJSON(jsonObject); - // domainSizeZ->outputToJSON(jsonObject); - // gridCellSize->outputToJSON(jsonObject); - // mirrorDomainX->outputToJSON(jsonObject); - // mirrorDomainY->outputToJSON(jsonObject); - // mirrorDomainZ->outputToJSON(jsonObject); - - // timeStep->outputToJSON(jsonObject); - // timeIntegration->outputToJSON(jsonObject); - // initialTime->outputToJSON(jsonObject); - // duration->outputToJSON(jsonObject); - - // cflNumber->outputToJSON(jsonObject); - // gravityX->outputToJSON(jsonObject); - // gravityY->outputToJSON(jsonObject); - // gravityZ->outputToJSON(jsonObject); - - // froudeScaling->outputToJSON(jsonObject); - // froudeLengthRatio->outputToJSON(jsonObject); - // froudeTimeRatio->outputToJSON(jsonObject); - // cauchyScaling->outputToJSON(jsonObject); - // cauchyBulkRatio->outputToJSON(jsonObject); - - // numGPUs->outputToJSON(jsonObject); - // modelsPerGPU->outputToJSON(jsonObject); - // hpcCardName->outputToJSON(jsonObject); - // hpcCardArchitecture->outputToJSON(jsonObject); - // hpcCardGlobalMemory->outputToJSON(jsonObject); - // hpcCardComputeCapability->outputToJSON(jsonObject); - // hpcCardBrand->outputToJSON(jsonObject); - // hpc->outputToJSON(jsonObject); return true; } bool SettingsMPM::inputFromJSON(QJsonObject &jsonObject) { - domainSizeX->inputFromJSON(jsonObject); - domainSizeY->inputFromJSON(jsonObject); - domainSizeZ->inputFromJSON(jsonObject); - gridCellSize->inputFromJSON(jsonObject); - mirrorDomainX->inputFromJSON(jsonObject); - mirrorDomainY->inputFromJSON(jsonObject); - mirrorDomainZ->inputFromJSON(jsonObject); - - timeStep->inputFromJSON(jsonObject); - timeIntegration->inputFromJSON(jsonObject); - initialTime->inputFromJSON(jsonObject); - duration->inputFromJSON(jsonObject); - - cflNumber->inputFromJSON(jsonObject); - gravityX->inputFromJSON(jsonObject); - gravityY->inputFromJSON(jsonObject); - gravityZ->inputFromJSON(jsonObject); - - froudeScaling->inputFromJSON(jsonObject); - froudeLengthRatio->inputFromJSON(jsonObject); - froudeTimeRatio->inputFromJSON(jsonObject); - cauchyScaling->inputFromJSON(jsonObject); - cauchyBulkRatio->inputFromJSON(jsonObject); - - numGPUs->inputFromJSON(jsonObject); - modelsPerGPU->inputFromJSON(jsonObject); - hpcCardName->inputFromJSON(jsonObject); - hpcCardArchitecture->inputFromJSON(jsonObject); - hpcCardGlobalMemory->inputFromJSON(jsonObject); - hpcCardComputeCapability->inputFromJSON(jsonObject); - hpcCardBrand->inputFromJSON(jsonObject); - hpc->inputFromJSON(jsonObject); + QJsonObject settingsObject = jsonObject["simulation"].toObject(); + QJsonObject scalingObject = jsonObject["scaling"].toObject(); + QJsonObject computerObject = jsonObject["computer"].toObject(); + + QJsonArray domainArray = settingsObject["domain"].toArray(); + domainSizeX->setText(QString::number(domainArray[0].toDouble())); + domainSizeY->setText(QString::number(domainArray[1].toDouble())); + domainSizeZ->setText(QString::number(domainArray[2].toDouble())); + + QJsonArray mirrorArray = settingsObject["mirror_domain"].toArray(); + mirrorDomainX->setChecked(mirrorArray[0].toBool()); + mirrorDomainY->setChecked(mirrorArray[1].toBool()); + mirrorDomainZ->setChecked(mirrorArray[2].toBool()); + + gridCellSize->inputFromJSON(settingsObject); + + initialTime->inputFromJSON(settingsObject); + duration->inputFromJSON(settingsObject); + timeStep->inputFromJSON(settingsObject); + framesPerSecond->inputFromJSON(settingsObject); + cflNumber->inputFromJSON(settingsObject); + timeIntegration->inputFromJSON(settingsObject); + + QJsonArray gravityArray = settingsObject["gravity"].toArray(); + gravityX->setText(QString::number(gravityArray[0].toDouble())); + gravityY->setText(QString::number(gravityArray[1].toDouble())); + gravityZ->setText(QString::number(gravityArray[2].toDouble())); + + froudeScaling->inputFromJSON(scalingObject); + cauchyScaling->inputFromJSON(scalingObject); + froudeLengthRatio->inputFromJSON(scalingObject); + froudeTimeRatio->inputFromJSON(scalingObject); + cauchyBulkRatio->inputFromJSON(scalingObject); + + hpc->inputFromJSON(computerObject); + hpcQueue->inputFromJSON(computerObject); + hpcCardBrand->inputFromJSON(computerObject); + hpcCardName->inputFromJSON(computerObject); + hpcCardArchitecture->inputFromJSON(computerObject); + hpcCardGlobalMemory->inputFromJSON(computerObject); + hpcCardComputeCapability->inputFromJSON(computerObject); + numGPUs->inputFromJSON(computerObject); + modelsPerGPU->inputFromJSON(computerObject); return true; } bool SettingsMPM::copyFiles(QString& destDir) { + Q_UNUSED(destDir); return true; } diff --git a/EVENTS/StochasticWaveModel/include/Jonswap.h b/EVENTS/StochasticWaveModel/include/Jonswap.h index 04e6c271..322ee5fa 100644 --- a/EVENTS/StochasticWaveModel/include/Jonswap.h +++ b/EVENTS/StochasticWaveModel/include/Jonswap.h @@ -139,7 +139,11 @@ class Jonswap : public SimCenterAppWidget { int minL=100, int maxL=100); + public slots: + void computeSpectra(void); + + void updateJSON(void); void clear(void); @@ -176,8 +180,10 @@ class Jonswap : public SimCenterAppWidget { // SC_FileEdit *spectraFile; /**< file containing wave spectra */ // SC_FileEdit *kinematicsFile; /**< file containing bathymetry data */ SimCenterGraphPlot *thePlot; - QPushButton *theDomainImageButton; + SimCenterGraphPlot *thePlotTimeSeries; + // QPushButton *theDomainImageButton; QLineEdit *dataDir; + QLineEdit *timeSeriesDir; QString inpty; // QLineEdit *mean; diff --git a/EVENTS/StochasticWaveModel/src/Jonswap.cpp b/EVENTS/StochasticWaveModel/src/Jonswap.cpp index 1b3a0fcc..17c8c4c7 100644 --- a/EVENTS/StochasticWaveModel/src/Jonswap.cpp +++ b/EVENTS/StochasticWaveModel/src/Jonswap.cpp @@ -40,7 +40,6 @@ UPDATES, ENHANCEMENTS, OR MODIFICATIONS. #include #include #include -// #include #include #include #include @@ -64,6 +63,10 @@ UPDATES, ENHANCEMENTS, OR MODIFICATIONS. #include #include #include +#include +#include +#include +// #include #include #include @@ -85,8 +88,11 @@ Jonswap::Jonswap(RandomVariablesContainer* randomVariables, { QPushButton *showPlotButton = NULL; - theDomainImageButton = NULL; + QPushButton *showPlotButtonTimeSeries = NULL; + + // theDomainImageButton = NULL; thePlot = NULL; + thePlotTimeSeries = NULL; modelDescription = new QLabel(tr(" Sample JONSWAP spectras (empirical sea-state) for stochastic loads on monopile-like structures. " "\n The welib Python package provides validated JONSWAP distributions and Wheeler-corrected Morison wave loads on simple monopile structures. " @@ -121,13 +127,22 @@ Jonswap::Jonswap(RandomVariablesContainer* randomVariables, peakPeriod->setText("12.0"); timeStep = new LineEditRV(randomVariables); - timeStep->setText("0.1"); + timeStep->setText("1.0"); timeDuration = new LineEditRV(randomVariables); - timeDuration->setText("3600.0"); + timeDuration->setText("300.0"); recorderOriginX = new LineEditRV(randomVariables); recorderOriginX->setText("0.0"); + // Base off of stories in GI recorderCountZ = new SC_IntLineEdit("recorderCountZ", 2); + recorderCountZ->setToolTip("Number of load recorders on the structure, should be equal to the number of floors in the building (i.e., stories + 1)."); + // GeneralInformationWidget *theGI = GeneralInformationWidget::getInstance(); + // theGI->getNumberOfFloors(); + + // connect(theGI, &GeneralInformationWidget::floorsChanged, [=](int floors){ + // recorderCountZ->setText(QString::number(floors)); + // }); + dragCoefficient = new LineEditRV(randomVariables); dragCoefficient->setText("2.1"); @@ -141,21 +156,21 @@ Jonswap::Jonswap(RandomVariablesContainer* randomVariables, exposureCategory->addItem("NATO 2"); exposureCategory->addItem("NATO 1"); -// exposureCategory = new QComboBox(); -// exposureCategory->addItem("JONSWAP"); + // exposureCategory = new QComboBox(); + // exposureCategory->addItem("JONSWAP"); -// seed = new QSpinBox(); -// seed->setMinimum(1); -// seed->setMaximum(2147483647); -// seed->setValue(500); -// seed->setEnabled(false); -// useSeed = new QRadioButton("Provide seed value"); -// useSeed->setChecked(false); + // seed = new QSpinBox(); + // seed->setMinimum(1); + // seed->setMaximum(2147483647); + // seed->setValue(500); + // seed->setEnabled(false); + // useSeed = new QRadioButton("Provide seed value"); + // useSeed->setChecked(false); -// exposureCategory = new QComboBox(); -// exposureCategory->addItem("JONSWAP"); -// // exposureCategory->addItem("Pierson-Moskowitz"); + // exposureCategory = new QComboBox(); + // exposureCategory->addItem("JONSWAP"); + // // exposureCategory->addItem("Pierson-Moskowitz"); QFormLayout *parameters = new QFormLayout(); parameters->addRow(new QLabel(tr("Median Sea Level [ft]")), waterDepth); @@ -163,22 +178,17 @@ Jonswap::Jonswap(RandomVariablesContainer* randomVariables, parameters->addRow(new QLabel(tr("Storm-Surge Sea Level Rise [ft]")), stormSurgeSLR); parameters->addRow(new QLabel(tr("Climate Change Sea Level Rise [ft]")), climateChangeSLR); - - // exposureCategory->setCurrentIndex(5); - - - parameters->addRow(new QLabel(tr("Significant Wave Height [ft]")), significantWaveHeight); parameters->addRow(new QLabel(tr("Peak Wave Period [s]")), peakPeriod); parameters->addRow(new QLabel(tr("Time Step [s]")), timeStep); parameters->addRow(new QLabel(tr("Time Duration [s]")), timeDuration); - // parameters->addRow(new QLabel(tr("Drag Coefficient")), dragCoefficient); + parameters->addRow(new QLabel(tr("Sea State Category")), exposureCategory); parameters->addRow(new QLabel(tr("")), new QLabel(tr(""))); parameters->addRow(new QLabel(tr("")), new QLabel(tr(""))); parameters->addRow(new QLabel(tr("Load Recorder Origin [ft]")), recorderOriginX); parameters->addRow(new QLabel(tr("Load Recorder Count [#]")), recorderCountZ); - // parameters->addRow(new QLabel(tr("Wave Spectrum")), exposureCategory); + parameters->addRow(new QLabel(tr("Drag Coefficient")), dragCoefficient); parameters->addRow(new QLabel(tr("Drag Area [ft^2]")), dragArea); parameters->addRow(new QLabel(tr("")), new QLabel(tr(""))); @@ -202,9 +212,9 @@ Jonswap::Jonswap(RandomVariablesContainer* randomVariables, //model_description_->setStyleSheet("QLabel { color : gray; }"); - // Construct required layouts QVBoxLayout* layout = new QVBoxLayout(); + // QVBoxLayout* graphLayout = new QVBoxLayout(); QHBoxLayout* seedLayout = new QHBoxLayout(); QHBoxLayout* parametersLayout = new QHBoxLayout(); @@ -215,6 +225,8 @@ Jonswap::Jonswap(RandomVariablesContainer* randomVariables, seedLayout->addStretch(); parametersLayout->addLayout(parameters); + + // mainLayout->setColumnStretch(4,1); // parametersWidget = new QWidget(); @@ -223,45 +235,78 @@ Jonswap::Jonswap(RandomVariablesContainer* randomVariables, // QWidget *plotWidget = new QWidget(); // plotWidget->setLayout(plotLayout); - thePlot = new SimCenterGraphPlot(QString("Time [s]"),QString("Power Spectral Density [m^2 / Hz]"), 700, 350); - // Maintain aspect ratio but allow resizing - thePlot->setMinimumSize(650,400); + thePlot = new SimCenterGraphPlot(QString("Frequency [Hz]"),QString("Power Spectral Density [ft^2 / Hz]"), 700, 350); + thePlot->setMinimumSize(400,250); thePlot->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - QHBoxLayout* fileFormLayout = new QHBoxLayout(); + thePlotTimeSeries = new SimCenterGraphPlot(QString("Time [s]"),QString("Surface Displacement [ft]"), 700, 350); + thePlotTimeSeries->setMinimumSize(400,250); + thePlotTimeSeries->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + QHBoxLayout* fileFormLayout = new QHBoxLayout(); dataDir = this->createTextEntry(tr("Wave Spectra (*.csv)"), fileFormLayout, 400, 100); dataDir->setMinimumWidth(200); - // dataDir->setMaximumWidth(700); - // plotLayout->addWidget(dataDir, 0); + + QHBoxLayout* fileFormLayoutTimeSeries = new QHBoxLayout(); + timeSeriesDir = this->createTextEntry(tr("Wave Time Series (*.csv)"), fileFormLayoutTimeSeries, 400, 100); + timeSeriesDir->setMinimumWidth(200); + QPushButton *chooseFileButton = new QPushButton("Choose"); chooseFileButton->setMinimumWidth(100); chooseFileButton->setMaximumWidth(100); + + QPushButton *chooseTimeSeriesFileButton = new QPushButton("Choose"); + chooseTimeSeriesFileButton->setMinimumWidth(100); + chooseTimeSeriesFileButton->setMaximumWidth(100); + + fileFormLayout->addWidget(chooseFileButton, 1); - // a = this->createTextEntry(tr("Min"), plotLayout, 100, 100); - // b = this->createTextEntry(tr("Max"), plotLayout, 100, 100); showPlotButton = new QPushButton("Sample Wave Spectra"); showPlotButton->setMinimumWidth(200); showPlotButton->setMaximumWidth(200); + fileFormLayout->addWidget(showPlotButton, 2); - QPushButton* thePileImageButton = new QPushButton("Plot Loads"); - thePileImageButton->setMinimumWidth(150); - thePileImageButton->setMaximumWidth(150); + fileFormLayoutTimeSeries->addWidget(chooseTimeSeriesFileButton, 1); + showPlotButtonTimeSeries = new QPushButton("Sample Time Series"); + showPlotButtonTimeSeries->setMinimumWidth(200); + showPlotButtonTimeSeries->setMaximumWidth(200); + fileFormLayoutTimeSeries->addWidget(showPlotButtonTimeSeries, 2); + + // // For plotting the monopile loads image + // QPushButton* thePileImageButton = new QPushButton("Plot Loads"); + // thePileImageButton->setMinimumWidth(150); + // thePileImageButton->setMaximumWidth(150); QWidget* fileFormWidget = new QWidget(); fileFormWidget->setLayout(fileFormLayout); - fileFormLayout->addWidget(showPlotButton, 2); + QWidget* fileFormWidgetTimeSeries = new QWidget(); + fileFormWidgetTimeSeries->setLayout(fileFormLayoutTimeSeries); + QVBoxLayout *spectraLayout = new QVBoxLayout(); + spectraLayout->addWidget(fileFormWidget); + spectraLayout->addWidget(thePlot); - // fileFormLayout->addWidget(thePileImageButton,3 ); + QVBoxLayout *timeLayout = new QVBoxLayout(); + timeLayout->addWidget(fileFormWidgetTimeSeries); + timeLayout->addWidget(thePlotTimeSeries); + // fileSelectLayout->addWidget(fileFormWidgetTimeSeries); + // fileSelectLayout->addWidget(fileFormWidget); + + + parametersLayout->addLayout(spectraLayout); + parametersLayout->addLayout(timeLayout); - // add empty - QPixmap pixmapPile(":/icons/forces.png"); - QPushButton* thePileFigure = new QPushButton(); - thePileFigure->setIcon(pixmapPile); - thePileFigure->setIconSize(pixmapPile.rect().size()*1.0); - thePileFigure->setFixedSize(pixmapPile.rect().size()*1.0); + // parametersLayout->addWidget(fileFormWidget); + // parametersLayout->addWidget(fileFormWidgetTimeSeries); + // fileFormLayout->addWidget(thePileImageButton,3 ); + + // // Show forces, etc. on monopile structure + // QPixmap pixmapPile(":/icons/forces.png"); + // QPushButton* thePileFigure = new QPushButton(); + // thePileFigure->setIcon(pixmapPile); + // thePileFigure->setIconSize(pixmapPile.rect().size()*1.0); + // thePileFigure->setFixedSize(pixmapPile.rect().size()*1.0); // QHBoxLayout *pileFigureLayout = new QHBoxLayout(); // pileFigureLayout->addWidget(thePileFigure); @@ -275,30 +320,32 @@ Jonswap::Jonswap(RandomVariablesContainer* randomVariables, // plotLayout->setStretch(5,1); - // int plotNumRow = 12; // layout->addWidget(plotWidget, plotNumRow++, 0, 1, 5); + /* theDomainImageButton = new QPushButton(); QPixmap pixmapDomain(":/icons/HydroLoadPile.png"); - pixmapDomain.scaled(800, 400, Qt::KeepAspectRatio,Qt::SmoothTransformation); + pixmapDomain.scaled(500, 250, Qt::KeepAspectRatio,Qt::SmoothTransformation); theDomainImageButton->setIcon(pixmapDomain); theDomainImageButton->setIconSize(pixmapDomain.rect().size()*1.00); theDomainImageButton->setFixedSize(pixmapDomain.rect().size()*1.00); - parametersLayout->addWidget(theDomainImageButton); + */ - - - - thePlot->hide(); - thePlot->clear(); // thePileFigure->hide(); // theDomainImageButton->hide(); // parametersLayout->addWidget(plotWidget); - parametersLayout->addWidget(thePlot); + // parametersLayout->addWidget(thePlot); + // parametersLayout->addWidget(thePlotTimeSeries); + + + + parametersLayout->addLayout(spectraLayout); + parametersLayout->addLayout(timeLayout); + connect(chooseFileButton, &QPushButton::clicked, this, [=](){ QString fileName = QFileDialog::getOpenFileName(this,tr("Open File"),"", "CSV Files (*.csv)"); if (!fileName.isEmpty()) { @@ -306,38 +353,66 @@ Jonswap::Jonswap(RandomVariablesContainer* randomVariables, } }); + connect(chooseTimeSeriesFileButton, &QPushButton::clicked, this, [=](){ + QString fileName = QFileDialog::getOpenFileName(this,tr("Open File"),"", "CSV Files (*.csv)"); + if (!fileName.isEmpty()) { + timeSeriesDir->setText(fileName); + } + }); + // QString spectraFileString = "Examples/hdro-0005/data/WaveSpectra.csv"; dataDir->setText("Examples/hdro-0005/data/WaveSpectra.csv"); + timeSeriesDir->setText("Examples/hdro-0005/data/WaveTimeSeries.csv"); - updateDistributionPlot(); - // parametersLayout->addWidget(plotWidget); // parametersLayout->addWidget(theDomainImageButton); + parametersLayout->addStretch(); - this->updateDistributionPlot(); // show the plot when the widget is created // layout->addWidget(modelDescription); layout->addWidget(scrollArea); layout->addLayout(parametersLayout); layout->addLayout(seedLayout); - layout->addWidget(fileFormWidget); - layout->addWidget(thePileFigure); + // layout->addWidget(fileFormWidget); + // layout->addWidget(fileFormWidgetTimeSeries); + // layout->addWidget(theDomainImageButton); + // layout->addWidget(thePileFigure); layout->addStretch(); this->setLayout(layout); + thePlot->hide(); + thePlot->clear(); + thePlotTimeSeries->hide(); + thePlotTimeSeries->clear(); + // updateDistributionPlot(); + this->updateDistributionPlot(); // show the plot when the widget is created thePlot->show(); - theDomainImageButton->show(); - thePileFigure->show(); + thePlotTimeSeries->show(); + // theDomainImageButton->show(); + // thePileFigure->show(); + // Place the plot in the layout - connect(dataDir,SIGNAL(textEdited(QString)), this, SLOT(updateDistributionPlot())); - // connect(dataDir, - + connect(dataDir,SIGNAL(textEdited(QString)), this, SLOT(updateDistributionPlot())); + connect(timeSeriesDir,SIGNAL(textEdited(QString)), this, SLOT(updateDistributionPlot())); // connect(a,SIGNAL(textEdited(QString)), this, SLOT(updateDistributionPlot())); // connect(b,SIGNAL(textEdited(QString)), this, SLOT(updateDistributionPlot())); + + connect(showPlotButton, &QPushButton::clicked, this, [=](){ + thePlot->hide(); + this->computeSpectra(); + thePlot->show(); + }); + + connect(showPlotButtonTimeSeries, &QPushButton::clicked, this, [=](){ + thePlotTimeSeries->hide(); + this->computeSpectra(); + thePlotTimeSeries->show(); + }); connect(showPlotButton, &QPushButton::clicked, this, [=](){ thePlot->hide(); this->updateDistributionPlot(); thePlot->show();}); + connect(showPlotButtonTimeSeries, &QPushButton::clicked, this, [=](){ thePlotTimeSeries->hide(); this->updateDistributionPlot(); thePlotTimeSeries->show();}); // connect (spectraFile, &SC_FileEdit::fileChanged, this, [=](){ // QString fileName = spectraFile->getFilename(); // dataDir->setText(fileName); @@ -350,12 +425,231 @@ Jonswap::Jonswap(RandomVariablesContainer* randomVariables, thePlot->show(); }); + connect(timeSeriesDir, &QLineEdit::editingFinished, this, [=](){ + thePlotTimeSeries->hide(); + this->updateDistributionPlot(); + thePlotTimeSeries->show(); + }); + + + + // Connect slots connect(useSeed, &QRadioButton::toggled, this, &Jonswap::provideSeed); } +void Jonswap::updateJSON() +{ + // Write most recent EVT state to JSON becase it is needed for pre-processing steps / mesh generation before the final simulation is run. + // In future only one JSON file in temp.SimCenter directory might be enough + QString inputFileName = "Jonswap.json"; + auto prefs = SimCenterPreferences::getInstance(); + QString localWorkDirectoryString = prefs->getLocalWorkDir(); + QDir localWorkDir(localWorkDirectoryString); + if (!localWorkDir.exists()) { + localWorkDir.mkpath("."); + } + + QString tmpDirName = "tmp.SimCenter"; + localWorkDir.mkdir(tmpDirName); + QDir tmpDir = QDir(localWorkDir.absoluteFilePath(tmpDirName)); + if (!tmpDir.exists()) { + tmpDir.mkpath("."); + } + + QString subDirName = "stochasticWave"; // "tmp.SimCenter"; "templatedir"; + localWorkDir.mkdir(subDirName); + QDir workingDir = QDir(localWorkDir.absoluteFilePath(subDirName)); + if (!workingDir.exists()) { + workingDir.mkpath("."); + } + QString workingDirPath = localWorkDir.absoluteFilePath(subDirName); + qDebug() << "workingDirPath: " << workingDirPath; + // QDir workingDir = QDir(localWorkDir.absoluteFilePath(subDirName)); + // workingDirPath = localWorkDir.absoluteFilePath(subDirName); + + QString inputFilePath = localWorkDir.absoluteFilePath(tmpDirName) + QDir::separator() + inputFileName; + QString outputFilePath = localWorkDir.absoluteFilePath(tmpDirName) + QDir::separator() + inputFileName; + + qDebug() << "inputFilePath: " << inputFilePath; + qDebug() << "outputFilePath: " << outputFilePath; + + + QFile jsonFile(inputFilePath); + // if it exists, remove it + if (jsonFile.exists()) { + jsonFile.remove(); + } + + if (!jsonFile.open(QFile::WriteOnly | QFile::Text)) + { + qDebug() << "Cannot find the path: " << inputFilePath; + } + + + + QJsonObject eventObject; + this->outputToJSON(eventObject); + + + QJsonArray eventsArray; + eventsArray.append(eventObject); + QJsonObject pseudoObject; + pseudoObject["Events"] = eventsArray; + + QJsonDocument jsonDoc(pseudoObject); + jsonFile.write(jsonDoc.toJson()); + jsonFile.close(); + + // while open(jsonFile, 'w') as f: + // json.dump(pseudoObject, f, indent=4) + + // QJsonDocument jsonDoc(pseudoObject); + // jsonFile.write(jsonDoc.toJson()); + // jsonFile.close(); + return; +} +// Function that runs a python script to generate the wave spectra and time series +// Saves the wave spectra and time series to csv files. +// Plots the wave spectra and time series +void Jonswap::computeSpectra() { + // Get the input parameters + this->updateJSON(); + + + auto prefs = SimCenterPreferences::getInstance(); + + // + // Update JSON input file and then pass arguments to a python script. Runs script to prepare case directory. + // Python scripts hosted remotely by SimCenterBackendApplications/modules/createEVENT/* + // + + + QString inputFileName = "Jonswap.json"; + QString localWorkDirectoryString = prefs->getLocalWorkDir(); + QDir localWorkDir(localWorkDirectoryString); + if (!localWorkDir.exists()) { + localWorkDir.mkpath("."); + } + + QString tmpDirName = "tmp.SimCenter"; + // localWorkDir.mkdir(tmpDirName); + // QDir tmpDir = QDir(localWorkDir.absoluteFilePath(tmpDirName)); + // if (!tmpDir.exists()) { + // tmpDir.mkpath("."); + // } + + QString subDirName = "stochasticWave"; // "tmp.SimCenter"; "templatedir"; + // localWorkDir.mkdir(subDirName); + // QDir workingDir = QDir(localWorkDir.absoluteFilePath(subDirName)); + // if (!workingDir.exists()) { + // workingDir.mkpath("."); + // } + // QString workingDirPath = localWorkDir.absoluteFilePath(subDirName); + // workingDirPath = localWorkDir.absoluteFilePath(subDirName); + // qDebug() << "workingDirPath: " << workingDirPath; + QString inputFilePath = localWorkDir.absoluteFilePath(tmpDirName) + QDir::separator() + inputFileName; + + // QString outputFilePath = caseDir() + QDir::separator() + inputFileName; + + // QFile jsonFile(inputFilePath); + // if (!jsonFile.open(QFile::WriteOnly | QFile::Text)) + // { + // qDebug() << "Cannot find the path: " << inputFilePath; + // } + // QString inputFilePath = caseDir() + QDir::separator() + "inputData" + QDir::separator() + inputFileName; + + // updateJSON(); + QString scriptName = "Jonswap.py"; // "setup_case.py"; + QString scriptPath = SimCenterPreferences::getInstance()->getAppDir() + QDir::separator() + + QString("applications") + QDir::separator() + QString("createEVENT") + QDir::separator() + + QString("stochasticWave") + QDir::separator() + scriptName; + + + QString outputPath = localWorkDir.absoluteFilePath(tmpDirName); + + qDebug() << "scriptPath: " << scriptPath; + qDebug() << "inputFilePath: " << inputFilePath; + + // QString outputPath = caseDir(); + if (QFileInfo(scriptPath).exists() ) + { + qDebug() << "Running the script: " << scriptPath << " with input file: " << inputFilePath << " and output path: " << outputPath; + QString program = SimCenterPreferences::getInstance()->getPython(); + + + + QStringList arguments; arguments << scriptPath << inputFilePath << outputPath; + QProcess *process = new QProcess(); + + // process->setWorkingDirectory(workingDirPath); + process->start(program, arguments); + + process->waitForFinished(-1); + process->close(); + // process->deleteLater(); + + } + else + { + qDebug() << "Cannot find the script path: " << scriptPath; + return; + } + + + // Plot the wave spectra + thePlot->hide(); + thePlotTimeSeries->hide(); + + dataDir->setText(outputPath + QDir::separator() + "WaveSpectraGenerated.csv"); + timeSeriesDir->setText(outputPath + QDir::separator() + "WaveTimeSeries.csv"); + + this->updateDistributionPlot(); + + thePlot->show(); + thePlotTimeSeries->show(); + + + // QString + + // // Run the python script + // QString command = "python3 -m StochasticWaveModel.generate_wave_spectra "; + // command += waterDepthString + " "; + // command += tidalSLRString + " "; + // command += stormSurgeSLRString + " "; + // command += climateChangeSLRString + " "; + // command += significantWaveHeightString + " "; + // command += peakPeriodString + " "; + // command += recorderOriginXString + " "; + // command += recorderCountZString + " "; + // command += timeStepString + " "; + // command += timeDurationString + " "; + // command += dragCoefficientString + " "; + // command += dragAreaString + " "; + // command += exposureCategoryString + " "; + // command += seedString + " "; + // command += dataDirString + " "; + // command += timeSeriesDirString; + + // // Run the command + // system(command.toStdString().c_str()); + + // // Plot the wave spectra + // thePlot->clear(); + // thePlot->addGraph(); + // thePlot->setAxisLabels("Time [s]", "Power Spectral Density [m^2 / Hz]"); + // thePlot->plotFile(dataDirString); + + // // Plot the time series + // thePlotTimeSeries->clear(); + // thePlotTimeSeries->addGraph(); + // thePlotTimeSeries->setAxisLabels("Time [s]", " + // Displacement [m]"); + // thePlotTimeSeries->plotFile(timeSeriesDirString); +} + QLineEdit * Jonswap::createTextEntry(QString text, @@ -364,7 +658,6 @@ Jonswap::createTextEntry(QString text, int maxL) { QVBoxLayout *entryLayout = new QVBoxLayout(); - //QHBoxLayout *entryLayout = new QHBoxLayout(); QLabel *entryLabel = new QLabel(text); QLineEdit *res = new QLineEdit(); @@ -376,7 +669,6 @@ Jonswap::createTextEntry(QString text, entryLayout->addWidget(res); entryLayout->setSpacing(0); - // entryLayout->setMargin(0); theLayout->addLayout(entryLayout); @@ -426,14 +718,24 @@ Jonswap::copyFiles(QString &destDir) QFile::copy(dataDir->text(), destDir); - QString timeSeriesFileName = dataDir->text(); - timeSeriesFileName.replace("WaveSpectra.csv", "WaveSpectraGenerated.csv"); // temp fix assuming spectra file name - if (dataDir->text().isEmpty()) { - dataDir->setText(":Examples/hdro-0005/data/WaveSpectraGenerated.csv"); - this->errorMessage("WARNING: StochasticWave - spectra generated filename had not been set when trying to call copyFiles(), using default file: " + dataDir->text()); - QFile::copy(dataDir->text(), destDir); + // QString spectraFileName = dataDir->text(); + // QString timeSeriesFileName = timeSeriesDir->text(); + // timeSeriesFileName.replace("WaveSpectra.csv", "WaveSpectraGenerated.csv"); // temp fix assuming spectra file name + // if (dataDir->text().isEmpty()) { + // dataDir->setText(":Examples/hdro-0005/data/WaveTimeSeries.csv"); + // this->errorMessage("WARNING: StochasticWave - spectra generated filename had not been set when trying to call copyFiles(), using default file: " + dataDir->text()); + // QFile::copy(dataDir->text(), destDir); + // return true; + // } + + if (timeSeriesDir->text().isEmpty()) { + timeSeriesDir->setText(":Examples/hdro-0005/data/WaveTimeSeries.csv"); + this->errorMessage("WARNING: StochasticWave - time series filename had not been set when trying to call copyFiles(), using default file: " + timeSeriesDir->text()); + QFile::copy(timeSeriesDir->text(), destDir); return true; } + else + QFile::copy(timeSeriesDir->text(), destDir); // if (spectraFile->getFilename() != nullptr) { // if (!spectraFile->copyFile(destDir)) @@ -505,6 +807,7 @@ bool readCSVRowSpectra (QTextStream &in, QStringList *row) { void Jonswap::clear() { thePlot->hide(); + thePlotTimeSeries->hide(); // theDomainImageButton->hide(); waterDepth->clear(); tidalSLR->clear(); @@ -519,11 +822,14 @@ void Jonswap::clear() { dragCoefficient->clear(); dragArea->clear(); + // seed->setEnabled(false); seed->setValue(500); useSeed->setChecked(false); dataDir->setText(""); + timeSeriesDir->setText(""); thePlot->clear(); + thePlotTimeSeries->clear(); // exposureCategory->setCurrentIndex(0); } @@ -533,19 +839,35 @@ Jonswap::updateDistributionPlot() { int numStepsTimeSeries = 100; if (dataDir->text().isEmpty()) { dataDir->setText(":Examples/hdro-0005/data/WaveSpectra.csv"); // hardcoded for quick fix - this->errorMessage("ERROR: StochasticWave - data has not been set, using default"); + this->errorMessage("ERROR: StochasticWave - wave-spectra data has not been set, using default"); // return; } + if (timeSeriesDir->text().isEmpty()) { + timeSeriesDir->setText(":Examples/hdro-0005/data/WaveTimeSeries.csv"); // hardcoded for quick fix + this->errorMessage("ERROR: StochasticWave - time-series data has not been set, using default"); + // return; + } + QString csvFileName = dataDir->text(); QFile csv(csvFileName); csv.open(QFile::ReadOnly | QFile::Text); - QTextStream in(&csv); + + QString csvFileNameTimeSeries = timeSeriesDir->text(); + QFile csvTimeSeries(csvFileNameTimeSeries); + csvTimeSeries.open(QFile::ReadOnly | QFile::Text); + QTextStream inTimeSeries(&csvTimeSeries); + QStringList row; QStringList firstColumn; QStringList secondColumn; + QStringList rowTimeSeries; + QStringList firstColumnTimeSeries; + QStringList secondColumnTimeSeries; + numSteps = 0; // reset + numStepsTimeSeries = 0; // reset // Assume no header lines while (readCSVRowSpectra(in, &row)) { @@ -553,9 +875,16 @@ Jonswap::updateDistributionPlot() { secondColumn.append(row[1]); numSteps++; } - csv.close(); + while (readCSVRowSpectra(inTimeSeries, &rowTimeSeries)) { + firstColumnTimeSeries.append(rowTimeSeries[0]); + secondColumnTimeSeries.append(rowTimeSeries[1]); + numStepsTimeSeries++; + } + csvTimeSeries.close(); + + QVector x(numSteps); // time QVector y(numSteps); // displacement for (int i=0; i xG(numStepsTimeSeries); // time + QVector yG(numStepsTimeSeries); // displacement + for (int i=0; iclear(); + thePlot->drawPDF(x,y); + thePlot->show(); - numStepsTimeSeries = 0; // reset - - // Assume no header lines + // look for the file WaveTimeSeries.csv adjacent to the WaveSpectra.csv + // QString spectraFileName = csvFileName; + // QString timeSeriesFileName = csvTimeSeries;//.fileName(); - while (readCSVRowSpectra(inTimeSeries, &rowTimeSeries)) { - firstColumnTimeSeries.append(rowTimeSeries[0]); - secondColumnTimeSeries.append(rowTimeSeries[1]); - numStepsTimeSeries++; - } + // spectraFileName.replace("WaveSpectra.csv", "WaveSpectraGenerated.csv"); + // QFile spectraFile(spectraFileName); + // spectraFile.open(QFile::ReadOnly | QFile::Text); - timeSeriesFile.close(); + // QFile timeSeriesFile(timeSeriesFileName); + // timeSeriesFile.open(QFile::ReadOnly | QFile::Text); - QVector xG(numStepsTimeSeries); // time - QVector yG(numStepsTimeSeries); // displacement - for (int i=0; iclear(); - thePlot->drawPDF(x,y); // thePlot->addLine(xG,yG, 1, 65, 74, 82); - thePlot->drawPDF(xG,yG); - thePlot->show(); + thePlotTimeSeries->clear(); + thePlotTimeSeries->drawPDF(xG,yG); + thePlotTimeSeries->show(); return; @@ -686,7 +1007,7 @@ bool Jonswap::inputFromJSON(QJsonObject& jsonObject) { // theDomainImageButton->hide(); thePlot->hide(); - + thePlotTimeSeries->hide(); waterDepth->inputFromJSON(jsonObject, QString("waterDepth")); @@ -733,11 +1054,13 @@ bool Jonswap::inputFromJSON(QJsonObject& jsonObject) { seed->setValue(jsonObject.value("seed").toInt()); } } - theDomainImageButton->show(); + // theDomainImageButton->show(); thePlot->clear(); + thePlotTimeSeries->clear(); updateDistributionPlot(); thePlot->show(); + thePlotTimeSeries->show(); return result; diff --git a/EVENTS/coupledDigitalTwin/CoupledDigitalTwin.cpp b/EVENTS/coupledDigitalTwin/CoupledDigitalTwin.cpp index 7f7ae1ca..9bb5d566 100644 --- a/EVENTS/coupledDigitalTwin/CoupledDigitalTwin.cpp +++ b/EVENTS/coupledDigitalTwin/CoupledDigitalTwin.cpp @@ -108,7 +108,11 @@ CoupledDigitalTwin::~CoupledDigitalTwin() void CoupledDigitalTwin::clear(void) { - + inputSettings->clear(); + inputOpenSees->clear(); + inputOpenFOAM->clear(); + inputOutputs->clear(); + inputVisualize->clear(); } @@ -181,9 +185,15 @@ bool CoupledDigitalTwin::inputAppDataFromJSON(QJsonObject &jsonObject) { bool CoupledDigitalTwin::copyFiles(QString &destDir) { - if (inputOpenFOAM->copyFiles(destDir) == false) - return false; - return inputOpenSees->copyFiles(destDir); + if (inputOpenFOAM->copyFiles(destDir) == false) { + qDebug() << "CoupledDigitalTwin - failed to copy inputOpenFOAM files"; + // return false; + } + if (inputOpenSees->copyFiles(destDir) == false) { + qDebug() << "CoupledDigitalTwin - failed to copy inputOpenSees files"; + // return false; + } + return true; } bool CoupledDigitalTwin::outputCitation(QJsonObject &jsonObject) { diff --git a/EVENTS/coupledDigitalTwin/CoupledDigitalTwin.h b/EVENTS/coupledDigitalTwin/CoupledDigitalTwin.h index fc0c9b1e..4cb6a974 100644 --- a/EVENTS/coupledDigitalTwin/CoupledDigitalTwin.h +++ b/EVENTS/coupledDigitalTwin/CoupledDigitalTwin.h @@ -49,7 +49,7 @@ class SettingsDigitalTwin; class CoupledDigitalTwin : public SimCenterAppWidget { - Q_OBJECT + // Q_OBJECT public: CoupledDigitalTwin(QWidget *parent = 0); ~CoupledDigitalTwin(); diff --git a/EVENTS/coupledDigitalTwin/OpenFOAM_DigitalTwin.cpp b/EVENTS/coupledDigitalTwin/OpenFOAM_DigitalTwin.cpp index 8c9fb6a3..904898cc 100644 --- a/EVENTS/coupledDigitalTwin/OpenFOAM_DigitalTwin.cpp +++ b/EVENTS/coupledDigitalTwin/OpenFOAM_DigitalTwin.cpp @@ -42,6 +42,8 @@ UPDATES, ENHANCEMENTS, OR MODIFICATIONS. #include #include #include +#include +#include #include #include @@ -280,6 +282,40 @@ OpenFOAM_DigitalTwin::~OpenFOAM_DigitalTwin() } +void +OpenFOAM_DigitalTwin::clear(void) +{ + QString dummyFilename = ""; + facility->clear(); + flumeLength->clear(); + flumeHeight->clear(); + flumeWidth->clear(); + cellSize->clear(); + + // init Conditions + stillWaterLevel->clear(); + initVel->clear(); + velFile->setFilename(dummyFilename); + refPressure->clear(); + + // turbilence settings + referenceLength->clear(); + turbulanceIntensity->clear(); + referenceVel->clear(); + + // bathymetry + bathymetryComboBox->clear(); + // bathXZData->clear(); + bathSTL->setFilename(dummyFilename); + + // wave generation + waveGenComboBox->clear(); + paddleDisplacementFile->setFilename(dummyFilename); + waveMag->clear(); + waveCelerity->clear(); + waveRepeatSpeed->clear(); +} + bool OpenFOAM_DigitalTwin::outputToJSON(QJsonObject &jsonObject) { @@ -318,6 +354,8 @@ OpenFOAM_DigitalTwin::outputToJSON(QJsonObject &jsonObject) bool OpenFOAM_DigitalTwin::inputFromJSON(QJsonObject &jsonObject) { + this->clear(); + facility->inputFromJSON(jsonObject); flumeLength->inputFromJSON(jsonObject); flumeHeight->inputFromJSON(jsonObject); diff --git a/EVENTS/coupledDigitalTwin/OpenFOAM_DigitalTwin.h b/EVENTS/coupledDigitalTwin/OpenFOAM_DigitalTwin.h index 989410f1..713b1c83 100644 --- a/EVENTS/coupledDigitalTwin/OpenFOAM_DigitalTwin.h +++ b/EVENTS/coupledDigitalTwin/OpenFOAM_DigitalTwin.h @@ -57,14 +57,14 @@ class SC_FileEdit; class OpenFOAM_DigitalTwin : public SimCenterWidget { - Q_OBJECT + // Q_OBJECT public: OpenFOAM_DigitalTwin(QWidget *parent = 0); virtual ~OpenFOAM_DigitalTwin(); bool outputToJSON(QJsonObject &jsonObject); bool inputFromJSON(QJsonObject &jsonObject); bool copyFiles(QString &dirName); - + void clear(void); signals: private: diff --git a/EVENTS/coupledDigitalTwin/OpenSeesDigitalTwin.cpp b/EVENTS/coupledDigitalTwin/OpenSeesDigitalTwin.cpp index 59bd2a89..19c3c608 100644 --- a/EVENTS/coupledDigitalTwin/OpenSeesDigitalTwin.cpp +++ b/EVENTS/coupledDigitalTwin/OpenSeesDigitalTwin.cpp @@ -37,6 +37,10 @@ UPDATES, ENHANCEMENTS, OR MODIFICATIONS. #include #include #include +#include +#include +#include + #include @@ -45,13 +49,13 @@ OpenSeesDigitalTwin::OpenSeesDigitalTwin(QWidget *parent) { theOpenSeesPyScript = new SC_FileEdit("openSeesPyScript"); - QString theOpenSeesPyScriptFilename = ":/Examples/hdro-0001/src/OpenSeesModel.py"; + QString theOpenSeesPyScriptFilename = "Examples/hdro-0001/src/OpenSeesModel.py"; theOpenSeesPyScript->setFilename(theOpenSeesPyScriptFilename); // WASIRF column opensees // theOpenSeesPyScript->setFilter("Python Files (*.py)"); // Ask nikki if we can use regular opensees scripts in tcl format // theOpenSeesPyScript->setDialogCaption("Select OpenSeesPy Script"); theSurfaceFile = new SC_FileEdit("interfaceSurface"); - QString theSurfaceFilename = ":/Examples/hdro-0001/src/interface.stl"; + QString theSurfaceFilename = "Examples/hdro-0001/src/interface.stl"; theSurfaceFile->setFilename(theSurfaceFilename); //WASIRF column coupling interface // theSurfaceFile->setFilter("Surface Files (*.stl, *.obj)");//Double check which types Nikki allows for now, make conv script if needed // theSurfaceFile->setDialogCaption("Select Surface File"); @@ -72,6 +76,14 @@ OpenSeesDigitalTwin::~OpenSeesDigitalTwin() } +void +OpenSeesDigitalTwin::clear(void) +{ + QString dummyFilename = ""; + theOpenSeesPyScript->setFilename(dummyFilename); + theSurfaceFile->setFilename(dummyFilename); +} + bool OpenSeesDigitalTwin::outputToJSON(QJsonObject &jsonObject) { @@ -83,6 +95,7 @@ OpenSeesDigitalTwin::outputToJSON(QJsonObject &jsonObject) bool OpenSeesDigitalTwin::inputFromJSON(QJsonObject &jsonObject) { + this->clear(); theOpenSeesPyScript->inputFromJSON(jsonObject); theSurfaceFile->inputFromJSON(jsonObject); return true; @@ -92,12 +105,12 @@ bool OpenSeesDigitalTwin::copyFiles(QString &destDir) { if (theOpenSeesPyScript->copyFile(destDir) != true) { - // qDebug() << "OpenSeesDigitalTwin::copyFiles: could not copy OpenSeesPyScript"; - return false; + qDebug() << "OpenSeesDigitalTwin::copyFiles: could not copy OpenSeesPyScript"; + // return false; } if (theSurfaceFile->copyFile(destDir) != true) { - // qDebug() << "OpenSeesDigitalTwin::copyFiles: could not copy SurfaceFile"; - return false; + qDebug() << "OpenSeesDigitalTwin::copyFiles: could not copy SurfaceFile"; + // return false; } return true; } diff --git a/EVENTS/coupledDigitalTwin/OpenSeesDigitalTwin.h b/EVENTS/coupledDigitalTwin/OpenSeesDigitalTwin.h index ce9d4927..d6d9cd01 100644 --- a/EVENTS/coupledDigitalTwin/OpenSeesDigitalTwin.h +++ b/EVENTS/coupledDigitalTwin/OpenSeesDigitalTwin.h @@ -54,14 +54,14 @@ class SC_FileEdit; class OpenSeesDigitalTwin : public SimCenterWidget { - Q_OBJECT + // Q_OBJECT public: OpenSeesDigitalTwin(QWidget *parent = 0); virtual ~OpenSeesDigitalTwin(); bool outputToJSON(QJsonObject &jsonObject); bool inputFromJSON(QJsonObject &jsonObject); bool copyFiles(QString &dirName); - + void clear(void); signals: private: diff --git a/EVENTS/coupledDigitalTwin/OutputsDigitalTwin.cpp b/EVENTS/coupledDigitalTwin/OutputsDigitalTwin.cpp index 72c364ad..c9aa8618 100644 --- a/EVENTS/coupledDigitalTwin/OutputsDigitalTwin.cpp +++ b/EVENTS/coupledDigitalTwin/OutputsDigitalTwin.cpp @@ -43,6 +43,10 @@ UPDATES, ENHANCEMENTS, OR MODIFICATIONS. #include #include #include +#include + +#include +#include #include #include @@ -55,7 +59,7 @@ OutputsDigitalTwin::OutputsDigitalTwin(QWidget *parent) { // - // create all litlle widgets + // create all widgets // QStringList yesNo; yesNo << "Yes" << "No"; @@ -89,7 +93,7 @@ OutputsDigitalTwin::OutputsDigitalTwin(QWidget *parent) sectionCuts = new SC_TableEdit("cutSurfaceLocsDirsFields", listSC, 1, dataSC); // - // now add the widgets to Grpup Boxes + // now add the widgets to Group Boxes // QGroupBox *openseesBox = new QGroupBox("OpenSees Outputs"); @@ -170,6 +174,22 @@ OutputsDigitalTwin::~OutputsDigitalTwin() } +void +OutputsDigitalTwin::clear(void) +{ + vtkOS_Output->clear(); + vtkOF_Output->clear(); + outputOS_Dt->clear(); + outputOF_Dt->clear(); + outputOF_FM->clear(); + outputOF_FSP->clear(); + outputOF_FP->clear(); + outputOF_SC->clear(); + // freeSurfaceProbes->clear(); + // fieldProbes->clear(); + // sectionCuts->clear(); +} + bool OutputsDigitalTwin::outputToJSON(QJsonObject &jsonObject) { @@ -191,6 +211,7 @@ OutputsDigitalTwin::outputToJSON(QJsonObject &jsonObject) bool OutputsDigitalTwin::inputFromJSON(QJsonObject &jsonObject) { + this->clear(); vtkOS_Output->inputFromJSON(jsonObject); vtkOF_Output->inputFromJSON(jsonObject); diff --git a/EVENTS/coupledDigitalTwin/OutputsDigitalTwin.h b/EVENTS/coupledDigitalTwin/OutputsDigitalTwin.h index fd8fc889..f45ed8c5 100644 --- a/EVENTS/coupledDigitalTwin/OutputsDigitalTwin.h +++ b/EVENTS/coupledDigitalTwin/OutputsDigitalTwin.h @@ -56,14 +56,14 @@ class SC_DoubleLineEdit; class OutputsDigitalTwin : public SimCenterWidget { - Q_OBJECT + // Q_OBJECT public: OutputsDigitalTwin(QWidget *parent = 0); virtual ~OutputsDigitalTwin(); bool outputToJSON(QJsonObject &jsonObject); bool inputFromJSON(QJsonObject &jsonObject); - + void clear(void); signals: private: diff --git a/EVENTS/coupledDigitalTwin/SettingsDigitalTwin.cpp b/EVENTS/coupledDigitalTwin/SettingsDigitalTwin.cpp index 9d48ca04..70f4e799 100644 --- a/EVENTS/coupledDigitalTwin/SettingsDigitalTwin.cpp +++ b/EVENTS/coupledDigitalTwin/SettingsDigitalTwin.cpp @@ -39,6 +39,10 @@ UPDATES, ENHANCEMENTS, OR MODIFICATIONS. #include #include #include +#include +#include +#include + #include #include #include @@ -111,7 +115,7 @@ SettingsDigitalTwin::SettingsDigitalTwin(QWidget *parent) QStringList couplingList; couplingList << "Implicit" << "Explicit"; couplingScheme = new SC_ComboBox("CouplingScheme", couplingList); - QStringList couplingMethod; couplingMethod << "Constant" << "Aitken" << "IQN-ILS" << "IQN-IMVJ" << "Broyden"; + QStringList couplingMethod; couplingMethod << "IQN-IMVJ" << "Constant" << "Aitken" << "IQN-ILS" << "Broyden"; couplingDataMethod = new SC_ComboBox("couplingDataAccelerationMethod", couplingMethod); initialRelaxationFactor = new SC_DoubleLineEdit("initialRelaxationFactor", 0.6); @@ -143,6 +147,29 @@ SettingsDigitalTwin::~SettingsDigitalTwin() } +void +SettingsDigitalTwin::clear(void) +{ + timeStep->clear(); + simulationLength->clear(); + preloadStructure->clear(); + runPreliminaryAnalysis->clear(); + + adjustTimestep->clear(); + turbulance->clear(); + + gravZ->clear(); + + couplingScheme->clear(); + couplingDataMethod->clear(); + initialRelaxationFactor->clear(); + maxCouplingIterations->clear(); + maxCouplingIterationConvergence->clear(); + dataMappingScheme->clear(); + outputDataFromCoupling->clear(); + maxCouplingIterationDataFrequency->clear(); +} + bool SettingsDigitalTwin::outputToJSON(QJsonObject &jsonObject) { @@ -173,6 +200,8 @@ SettingsDigitalTwin::outputToJSON(QJsonObject &jsonObject) bool SettingsDigitalTwin::inputFromJSON(QJsonObject &jsonObject) { + this->clear(); + numProcessors->inputFromJSON(jsonObject); startEvent->inputFromJSON(jsonObject); timeStep->inputFromJSON(jsonObject); diff --git a/EVENTS/coupledDigitalTwin/SettingsDigitalTwin.h b/EVENTS/coupledDigitalTwin/SettingsDigitalTwin.h index d68c4ed7..8cf0245f 100644 --- a/EVENTS/coupledDigitalTwin/SettingsDigitalTwin.h +++ b/EVENTS/coupledDigitalTwin/SettingsDigitalTwin.h @@ -56,13 +56,13 @@ class SC_ComboBox; class SettingsDigitalTwin : public SimCenterWidget { - Q_OBJECT + // Q_OBJECT public: SettingsDigitalTwin(QWidget *parent = 0); virtual ~SettingsDigitalTwin(); bool outputToJSON(QJsonObject &jsonObject); bool inputFromJSON(QJsonObject &jsonObject); - + void clear(void); signals: private: diff --git a/EVENTS/coupledDigitalTwin/VisualizeDigitalTwin.cpp b/EVENTS/coupledDigitalTwin/VisualizeDigitalTwin.cpp index 16747718..962d45ab 100644 --- a/EVENTS/coupledDigitalTwin/VisualizeDigitalTwin.cpp +++ b/EVENTS/coupledDigitalTwin/VisualizeDigitalTwin.cpp @@ -35,6 +35,8 @@ UPDATES, ENHANCEMENTS, OR MODIFICATIONS. *************************************************************************** */ #include +#include +#include VisualizeDigitalTwin::VisualizeDigitalTwin(QWidget *parent) :SimCenterWidget(parent) @@ -47,6 +49,12 @@ VisualizeDigitalTwin::~VisualizeDigitalTwin() } +void +VisualizeDigitalTwin::clear(void) +{ + +} + bool VisualizeDigitalTwin::outputToJSON(QJsonObject &jsonObject) { @@ -56,6 +64,9 @@ VisualizeDigitalTwin::outputToJSON(QJsonObject &jsonObject) bool VisualizeDigitalTwin::inputFromJSON(QJsonObject &jsonObject) { + this->clear(); + return true; } + diff --git a/EVENTS/coupledDigitalTwin/VisualizeDigitalTwin.h b/EVENTS/coupledDigitalTwin/VisualizeDigitalTwin.h index 16f161f4..ba094dff 100644 --- a/EVENTS/coupledDigitalTwin/VisualizeDigitalTwin.h +++ b/EVENTS/coupledDigitalTwin/VisualizeDigitalTwin.h @@ -54,13 +54,13 @@ class QLineEdit; class VisualizeDigitalTwin : public SimCenterWidget { - Q_OBJECT + // Q_OBJECT public: VisualizeDigitalTwin(QWidget *parent = 0); virtual ~VisualizeDigitalTwin(); bool outputToJSON(QJsonObject &jsonObject); bool inputFromJSON(QJsonObject &jsonObject); - + void clear(void); signals: private: diff --git a/Examples/hdro-0001/src/input.json b/Examples/hdro-0001/src/input.json index 687e665b..f0af831f 100644 --- a/Examples/hdro-0001/src/input.json +++ b/Examples/hdro-0001/src/input.json @@ -334,7 +334,7 @@ "latitude": 37.8715, "longitude": -122.273 }, - "name": "", + "name": "Multi-Story Building", "planArea": 129600, "stories": 4, "units": { @@ -429,8 +429,8 @@ "parallelExecution": true, "samplingMethodData": { "method": "LHS", - "samples": 500, - "seed": 700 + "samples": 3, + "seed": 1 }, "saveWorkDir": true, "uqType": "Forward Propagation" diff --git a/Examples/hdro-0002/src/input.json b/Examples/hdro-0002/src/input.json index 893bfb2d..6694157b 100644 --- a/Examples/hdro-0002/src/input.json +++ b/Examples/hdro-0002/src/input.json @@ -1,1050 +1,1015 @@ -{ - "Applications": { - "EDP": { - "Application": "StandardEDP", - "ApplicationData": { - } - }, - "Events": [ - { - "Application": "MPM", - "ApplicationData": { - "programFile": "fbar", - "maxRunTime": "1440" - }, - "EventClassification": "Hydro" - } - ], - "Modeling": { - "Application": "MDOF_BuildingModel", - "ApplicationData": { - } - }, - "Simulation": { - "Application": "OpenSees-Simulation", - "ApplicationData": { - } - }, - "UQ": { - "Application": "Dakota-UQ", - "ApplicationData": { - } - } - }, - "DefaultValues": { - "driverFile": "driver", - "edpFiles": [ - "EDP.json" - ], - "filenameAIM": "AIM.json", - "filenameDL": "BIM.json", - "filenameEDP": "EDP.json", - "filenameEVENT": "EVENT.json", - "filenameSAM": "SAM.json", - "filenameSIM": "SIM.json", - "rvFiles": [ - "AIM.json", - "SAM.json", - "EVENT.json", - "SIM.json" - ], - "workflowInput": "scInput.json", - "workflowOutput": "EDP.json" - }, - "EDP": { - "type": "StandardEDP" - }, - "Events": [ - { - "Application": "MPM", - "EventClassification": "Hydro", - "bodies": [ - { - "algorithm": { - "ASFLIP_alpha": 0, - "ASFLIP_beta_max": 0, - "ASFLIP_beta_min": 0, - "FBAR_fused_kernel": true, - "FBAR_psi": 0.9, - "ppc": 8, - "type": "particles", - "use_ASFLIP": true, - "use_FBAR": true - }, - "geometry": [ - { - "apply_array": false, - "apply_rotation": false, - "bathymetryXZ": [ - [ - 0, - 0 - ], - [ - 16.275, - 0.226 - ], - [ - 19.933, - 0.226 - ], - [ - 30.906, - 1.14 - ], - [ - 45.536, - 1.75 - ], - [ - 82.106, - 1.75 - ], - [ - 89.46, - 2.363 - ] - ], - "body_preset": "Fluid", - "facility": "Hinsdale Large Wave Flume (OSU LWF)", - "facility_dimensions": [ - 104, - 4.6, - 3.658 - ], - "fill_flume_upto_SWL": true, - "object": "OSU LWF", - "offset": [ - 1.9, - 0, - 0 - ], - "operation": "add", - "span": [ - 84, - 2, - 3.65 - ], - "standing_water_level": 2, - "track_particle_id": [ - 0 - ] - } - ], - "gpu": 0, - "material": { - "CFL": 0.425, - "bulk_modulus": 210000000, - "constitutive": "JFluid", - "gamma": 7.125, - "material_preset": "Water (Fresh)", - "rho": 1000, - "viscosity": 0.001 - }, - "model": 0, - "output_attribs": [ - "ID", - "Pressure", - "Velocity_X", - "Velocity_Y", - "Velocity_Z" - ], - "partition": [ - { - "gpu": 0, - "model": 0, - "partition_end": [ - 23.9, - 2.9, - 3.6 - ], - "partition_start": [ - 1.9, - 0, - 0 - ] - }, - { - "gpu": 1, - "model": 0, - "partition_end": [ - 51.9, - 2.9, - 3.6 - ], - "partition_start": [ - 23.9, - 0, - 0 - ] - }, - { - "gpu": 2, - "model": 0, - "partition_end": [ - 91.9, - 2.9, - 3.6 - ], - "partition_start": [ - 51.9, - 0, - 0 - ] - } - ], - "partition_end": [ - 23.9, - 2.9, - 3.6 - ], - "partition_start": [ - 1.9, - 0, - 0 - ], - "target_attribs": [ - "Position_Y" - ], - "track_attribs": [ - "Position_Y", - "Position_Z", - "Velocity_X", - "Velocity_Y" - ], - "track_particle_id": [ - 0 - ], - "type": "particles", - "velocity": [ - 0, - 0, - 0 - ] - }, - { - "algorithm": { - "ASFLIP_alpha": 0, - "ASFLIP_beta_max": 0, - "ASFLIP_beta_min": 0, - "FBAR_fused_kernel": false, - "FBAR_psi": 0, - "ppc": 8, - "type": "particles", - "use_ASFLIP": true, - "use_FBAR": true - }, - "geometry": [ - { - "apply_array": true, - "apply_rotation": false, - "array": [ - 1, - 1, - 2 - ], - "body_preset": "Debris", - "facility": "Hinsdale Large Wave Flume (OSU LWF)", - "facility_dimensions": [ - 84, - 4.6, - 3.65 - ], - "fulcrum": [ - 0, - 0, - 0 - ], - "object": "Box", - "offset": [ - 42.5, - 2, - 1.575 - ], - "operation": "add", - "rotate": [ - 0, - 0, - 0 - ], - "spacing": [ - 0.80, - 0.35, - 0.40 - ], - "span": [ - 0.5, - 0.05, - 0.1 - ], - "track_particle_id": [ - 0 - ] - } - ], - "gpu": 0, - "material": { - "CFL": 0.425, - "constitutive": "FixedCorotated", - "material_preset": "Plastic", - "poisson_ratio": 0.3, - "rho": 981, - "youngs_modulus": 80000000 - }, - "model": 1, - "output_attribs": [ - "ID", - "Pressure", - "Velocity_X", - "Velocity_Y", - "Velocity_Z" - ], - "partition": [ - { - "gpu": 0, - "model": 1, - "partition_end": [ - 91.9, - 2.9, - 3.6 - ], - "partition_start": [ - 1.9, - 0, - 0 - ] - } - ], - "partition_end": [ - 91.9, - 2.9, - 3.6 - ], - "partition_start": [ - 1.9, - 0, - 0 - ], - "target_attribs": [ - "Position_Y" - ], - "track_attribs": [ - "Position_X", - "Position_Y", - "Position_Z", - "Velocity_X", - "Velocity_Y", - "Velocity_Z" - ], - "track_particle_id": [ - 0 - ], - "type": "particles", - "velocity": [ - 0, - 0, - 0 - ] - }, - { - "algorithm": { - "ASFLIP_alpha": 0, - "ASFLIP_beta_max": 0, - "ASFLIP_beta_min": 0, - "FBAR_fused_kernel": true, - "FBAR_psi": 0.9, - "ppc": 8, - "type": "particles", - "use_ASFLIP": true, - "use_FBAR": true - }, - "geometry": [ - { - "apply_array": false, - "apply_rotation": false, - "bathymetryXZ": [ - [ - 0, - 0 - ], - [ - 16.275, - 0.226 - ], - [ - 19.933, - 0.226 - ], - [ - 30.906, - 1.14 - ], - [ - 45.536, - 1.75 - ], - [ - 82.106, - 1.75 - ], - [ - 89.46, - 2.363 - ] - ], - "body_preset": "Fluid", - "facility": "Hinsdale Large Wave Flume (OSU LWF)", - "facility_dimensions": [ - 104, - 4.6, - 3.658 - ], - "fill_flume_upto_SWL": true, - "object": "OSU LWF", - "offset": [ - 1.9, - 0, - 0 - ], - "operation": "add", - "span": [ - 84, - 2, - 3.65 - ], - "standing_water_level": 2.0, - "track_particle_id": [ - 0 - ] - } - ], - "gpu": 1, - "material": { - "CFL": 0.425, - "bulk_modulus": 210000000, - "constitutive": "JFluid", - "gamma": 7.125, - "material_preset": "Water (Fresh)", - "rho": 1000, - "viscosity": 0.001 - }, - "model": 0, - "output_attribs": [ - "ID", - "Pressure", - "Velocity_X", - "Velocity_Y", - "Velocity_Z" - ], - "partition": [ - { - "gpu": 0, - "model": 0, - "partition_end": [ - 23.9, - 2.9, - 3.6 - ], - "partition_start": [ - 1.9, - 0, - 0 - ] - }, - { - "gpu": 1, - "model": 0, - "partition_end": [ - 51.9, - 2.9, - 3.6 - ], - "partition_start": [ - 23.9, - 0, - 0 - ] - }, - { - "gpu": 2, - "model": 0, - "partition_end": [ - 91.9, - 2.9, - 3.6 - ], - "partition_start": [ - 51.9, - 0, - 0 - ] - } - ], - "partition_end": [ - 51.9, - 2.9, - 3.6 - ], - "partition_start": [ - 23.9, - 0, - 0 - ], - "target_attribs": [ - "Position_Y" - ], - "track_attribs": [ - "Position_X", - "Position_Y", - "Velocity_X", - "Velocity_Y" - ], - "track_particle_id": [ - 0 - ], - "type": "particles", - "velocity": [ - 0, - 0, - 0 - ] - }, - { - "algorithm": { - "ASFLIP_alpha": 0, - "ASFLIP_beta_max": 0, - "ASFLIP_beta_min": 0, - "FBAR_fused_kernel": true, - "FBAR_psi": 0.9, - "ppc": 8, - "type": "particles", - "use_ASFLIP": true, - "use_FBAR": true - }, - "geometry": [ - { - "apply_array": false, - "apply_rotation": false, - "bathymetryXZ": [ - [ - 0, - 0 - ], - [ - 16.275, - 0.226 - ], - [ - 19.933, - 0.226 - ], - [ - 30.906, - 1.14 - ], - [ - 45.536, - 1.75 - ], - [ - 82.106, - 1.75 - ], - [ - 89.46, - 2.363 - ] - ], - "body_preset": "Fluid", - "facility": "Hinsdale Large Wave Flume (OSU LWF)", - "facility_dimensions": [ - 104, - 4.6, - 3.658 - ], - "fill_flume_upto_SWL": true, - "object": "OSU LWF", - "offset": [ - 1.9, - 0, - 0 - ], - "operation": "add", - "span": [ - 84, - 2, - 3.65 - ], - "standing_water_level": 2, - "track_particle_id": [ - 0 - ] - } - ], - "gpu": 2, - "material": { - "CFL": 0.425, - "bulk_modulus": 210000000, - "constitutive": "JFluid", - "gamma": 7.125, - "material_preset": "Water (Fresh)", - "rho": 1000, - "viscosity": 0.001 - }, - "model": 0, - "output_attribs": [ - "ID", - "Pressure", - "Velocity_X", - "Velocity_Y", - "Velocity_Z" - ], - "partition": [ - { - "gpu": 0, - "model": 0, - "partition_end": [ - 23.9, - 2.9, - 3.6 - ], - "partition_start": [ - 1.9, - 0, - 0 - ] - }, - { - "gpu": 1, - "model": 0, - "partition_end": [ - 51.9, - 2.9, - 3.6 - ], - "partition_start": [ - 23.9, - 0, - 0 - ] - }, - { - "gpu": 2, - "model": 0, - "partition_end": [ - 91.9, - 2.9, - 3.6 - ], - "partition_start": [ - 51.9, - 0, - 0 - ] - } - ], - "partition_end": [ - 91.9, - 2.9, - 3.6 - ], - "partition_start": [ - 51.9, - 0, - 0 - ], - "target_attribs": [ - "Position_Y" - ], - "track_attribs": [ - "Position_X", - "Position_Y", - "Velocity_X", - "Velocity_Y" - ], - "track_particle_id": [ - 0 - ], - "type": "particles", - "velocity": [ - 0, - 0, - 0 - ] - } - ], - "boundaries": [ - { - "contact": "Separable", - "domain_end": [ - 104, - 4.6, - 3.658 - ], - "domain_start": [ - 0, - 0, - 0 - ], - "object": "OSU LWF" - }, - { - "array": [ - 1, - 1, - 1 - ], - "contact": "Separable", - "domain_end": [ - 46.815999999999995, - 2.725, - 2.325 - ], - "domain_start": [ - 45.8, - 2.10, - 1.325 - ], - "object": "Box", - "spacing": [ - 0, - 0, - 0 - ] - }, - { - "contact": "Separable", - "domain_end": [ - 90, - 2.9, - 3.6 - ], - "domain_start": [ - 0, - 0, - 0 - ], - "object": "Walls" - } - ], - "computer": { - "hpc": "TACC - UT Austin - Lonestar6", - "hpc_card_architecture": "Ampere", - "hpc_card_brand": "NVIDIA", - "hpc_card_compute_capability": 80, - "hpc_card_global_memory": 40, - "hpc_card_name": "A100", - "models_per_gpu": 3, - "num_gpus": 3 - }, - "grid-sensors": [ - { - "attribute": "Velocity", - "direction": "X+", - "domain_end": [ - 16.05, - 2.75, - 0.45 - ], - "domain_start": [ - 16, - 1.5, - 0.4 - ], - "name": "VelocityMeter1", - "operation": "Average", - "output_frequency": 30, - "toggle": true, - "type": "grid" - }, - { - "attribute": "Velocity", - "direction": "X+", - "domain_end": [ - 43.849999999999994, - 2.75, - 0.45 - ], - "domain_start": [ - 43.8, - 1.75, - 0.4 - ], - "name": "VelocityMeter2", - "operation": "Average", - "output_frequency": 30, - "toggle": true, - "type": "grid" - }, - { - "attribute": "Force", - "direction": "X+", - "domain_end": [ - 45.824, - 2.675, - 2.3 - ], - "domain_start": [ - 45.799, - 2.149, - 1.35 - ], - "name": "LoadCell1", - "operation": "Sum", - "output_frequency": 120, - "toggle": true, - "type": "grid" - } - ], - "outputs": { - "bodies_output_freq": 10, - "bodies_save_suffix": "BGEO", - "boundaries_output_freq": 30, - "boundaries_save_suffix": "OBJ", - "checkpoints_output_freq": 1, - "checkpoints_save_suffix": "BGEO", - "energies_output_freq": 30, - "energies_save_suffix": "CSV", - "output_attribs": [ - [ - "ID", - "Pressure" - ], - [ - "ID", - "Pressure", - "Velocity_X", - "Velocity_Y", - "Velocity_Z" - ], - [ - "ID", - "Pressure", - "VonMisesStress", - "DefGrad_Invariant2", - "DefGrad_Invariant3" - ] - ], - "particles_output_exterior_only": false, - "sensors_save_suffix": "CSV", - "useKineticEnergy": false, - "usePotentialEnergy": false, - "useStrainEnergy": false - }, - "particle-sensors": [ - { - "attribute": "Elevation", - "direction": "N/A", - "domain_end": [ - 16.075, - 2.75, - 0.45 - ], - "domain_start": [ - 16, - 1.75, - 0.4 - ], - "name": "WaveGauge1", - "operation": "Max", - "output_frequency": 30, - "toggle": true, - "type": "particles" - }, - { - "attribute": "Elevation", - "direction": "N/A", - "domain_end": [ - 26.075, - 2.75, - 0.45 - ], - "domain_start": [ - 26, - 1.75, - 0.4 - ], - "name": "WaveGauge2", - "operation": "Max", - "output_frequency": 30, - "toggle": true, - "type": "particles" - }, - { - "attribute": "Elevation", - "direction": "N/A", - "domain_end": [ - 38.075, - 2.75, - 0.45 - ], - "domain_start": [ - 38, - 1.75, - 0.4 - ], - "name": "WaveGauge3", - "operation": "Max", - "output_frequency": 30, - "toggle": true, - "type": "particles" - } - ], - "scaling": { - "cauchy_bulk_ratio": 1, - "froude_length_ratio": 1, - "froude_time_ratio": 1, - "use_cauchy_scaling": false, - "use_froude_scaling": false - }, - "simulation": { - "cauchy_bulk_ratio": 1, - "cfl": 0.5, - "default_dt": 0.0001, - "default_dx": 0.1, - "domain": [ - 90, - 2.9, - 3.6 - ], - "duration": 2, - "fps": 60, - "frames": 30, - "froude_scaling": 1, - "froude_time_ratio": 1, - "gravity": [ - 0, - -9.80665, - 0 - ], - "initial_time": 0, - "mirror_domain": [ - false, - false, - false - ], - "particles_output_exterior_only": false, - "save_suffix": ".bgeo", - "time": 0, - "time_integration": "Explicit", - "use_cauchy_scaling": false, - "use_froude_scaling": false - }, - "subtype": "MPM", - "type": "MPM" - } - ], - "GeneralInformation": { - "NumberOfStories": 3, - "PlanArea": 129600, - "StructureType": "RM1", - "YearBuilt": 1990, - "depth": 360, - "height": 0.3, - "location": { - "latitude": 37.8715, - "longitude": -122.273 - }, - "name": "", - "planArea": 129600, - "stories": 3, - "units": { - "force": "N", - "length": "m", - "temperature": "C", - "time": "sec" - }, - "width": 360 - }, - "Modeling": { - "Bx": 0.1, - "By": 0.1, - "Fyx": 1000000, - "Fyy": 1000000, - "Krz": 10000000000, - "Kx": 100, - "Ky": 100, - "ModelData": [ - { - "Fyx": 1000000, - "Fyy": 1000000, - "Ktheta": 10000000000, - "bx": 0.1, - "by": 0.1, - "height": 0.1, - "kx": 100, - "ky": 100, - "weight": 144 - }, - { - "Fyx": 1000000, - "Fyy": 1000000, - "Ktheta": 10000000000, - "bx": 0.1, - "by": 0.1, - "height": 0.1, - "kx": 100, - "ky": 100, - "weight": 144 - }, - { - "Fyx": 1000000, - "Fyy": 1000000, - "Ktheta": 10000000000, - "bx": 0.1, - "by": 0.1, - "height": 0.1, - "kx": 100, - "ky": 100, - "weight": 144 - } - ], - "dampingRatio": 0.02, - "height": 0.1, - "massX": 0, - "massY": 0, - "numStories": 3, - "randomVar": [ - ], - "responseX": 0, - "responseY": 0, - "type": "MDOF_BuildingModel", - "weight": 144 - }, - "Simulation": { - "Application": "OpenSees-Simulation", - "algorithm": "Newton", - "analysis": "Transient -numSubLevels 2 -numSubSteps 10", - "convergenceTest": "NormUnbalance 1.0e-2 10", - "dampingModel": "Rayleigh Damping", - "firstMode": 1, - "integration": "Newmark 0.5 0.25", - "modalRayleighTangentRatio": 0, - "numModesModal": -1, - "rayleighTangent": "Initial", - "secondMode": -1, - "solver": "Umfpack" - }, - "UQ": { - "parallelExecution": true, - "samplingMethodData": { - "method": "LHS", - "samples": 5, - "seed": 1 - }, - "saveWorkDir": true, - "uqType": "Forward Propagation" - }, - "localAppDir": "C:/Users/nsaoirse/Desktop/HydroUQ_Windows_Download", - "nodeCount": 1, - "numP": 1, - "processorsOnEachNode": 1, - "randomVariables": [ - ], - "remoteAppDir": "/work2/00477/tg457427/frontera/SimCenterBackendApplications/v4.2.0", - "resultType": "SimCenterUQResultsSampling", - "runType": "runningRemote", - "summary": [ - ], - "workingDir": "C:/Users/nsaoirse/Documents/HydroUQ/RemoteWorkDir" -} +{ + "Applications": { + "EDP": { + "Application": "StandardEDP", + "ApplicationData": { + } + }, + "Events": [ + { + "Application": "MPM", + "ApplicationData": { + }, + "EventClassification": "Hydro", + "defaultMaxRunTime": "1440", + "driverFile": "sc_driver", + "inputFile": "scInput.json", + "maxRunTime": "120", + "programFile": "osu_lwf", + "publicDirectory": "./" + } + ], + "Modeling": { + "Application": "MDOF_BuildingModel", + "ApplicationData": { + } + }, + "Simulation": { + "Application": "OpenSees-Simulation", + "ApplicationData": { + } + }, + "UQ": { + "Application": "Dakota-UQ", + "ApplicationData": { + } + } + }, + "DefaultValues": { + "driverFile": "driver", + "edpFiles": [ + "EDP.json" + ], + "filenameAIM": "AIM.json", + "filenameDL": "BIM.json", + "filenameEDP": "EDP.json", + "filenameEVENT": "EVENT.json", + "filenameSAM": "SAM.json", + "filenameSIM": "SIM.json", + "rvFiles": [ + "AIM.json", + "SAM.json", + "EVENT.json", + "SIM.json" + ], + "workflowInput": "scInput.json", + "workflowOutput": "EDP.json" + }, + "EDP": { + "type": "StandardEDP" + }, + "Events": [ + { + "Application": "MPM", + "EventClassification": "Hydro", + "bodies": [ + { + "algorithm": { + "ASFLIP_alpha": 0, + "ASFLIP_beta_max": 0, + "ASFLIP_beta_min": 0, + "FBAR_fused_kernel": true, + "FBAR_psi": 0.95, + "ppc": 8, + "type": "particles", + "use_ASFLIP": false, + "use_FBAR": true + }, + "geometry": [ + { + "apply_array": false, + "apply_rotation": false, + "bathymetryXZ": [ + [ + 0, + 0 + ], + [ + 16.275, + 0.226 + ], + [ + 19.933, + 0.226 + ], + [ + 30.906, + 1.14 + ], + [ + 45.536, + 1.75 + ], + [ + 82.106, + 1.75 + ], + [ + 89.46, + 2.363 + ] + ], + "body_preset": "Fluid", + "facility": "Hinsdale Large Wave Flume (OSU LWF)", + "facility_dimensions": [ + 104, + 4.6, + 3.6 + ], + "fill_flume_upto_SWL": true, + "object": "OSU LWF", + "offset": [ + 1.9, + 0, + 0 + ], + "operation": "add", + "span": [ + 84, + 2, + 3.6 + ], + "standing_water_level": 2, + "track_particle_id": [ + 0 + ] + } + ], + "gpu": 0, + "material": { + "CFL": 0.5, + "bulk_modulus": 210000000, + "constitutive": "JFluid", + "gamma": 7.15, + "material_preset": "Water (Fresh)", + "rho": 1000, + "viscosity": 0.001 + }, + "model": 0, + "name": "fluid", + "output_attribs": [ + "ID", + "Pressure" + ], + "partition": [ + { + "gpu": 0, + "model": 0, + "partition_end": [ + 31.9, + 2.9, + 3.6 + ], + "partition_start": [ + 1.9, + 0, + 0 + ] + }, + { + "gpu": 1, + "model": 0, + "partition_end": [ + 61.9, + 2.9, + 3.6 + ], + "partition_start": [ + 31.9, + 0, + 0 + ] + }, + { + "gpu": 2, + "model": 0, + "partition_end": [ + 91.9, + 2.9, + 3.6 + ], + "partition_start": [ + 61.9, + 0, + 0 + ] + } + ], + "partition_end": [ + 31.9, + 2.9, + 3.6 + ], + "partition_start": [ + 1.9, + 0, + 0 + ], + "target_attribs": [ + "Position_Y" + ], + "track_attribs": [ + "Position_X", + "Position_Z", + "Pressure" + ], + "track_particle_id": [ + 0 + ], + "type": "particles", + "velocity": [ + 0, + 0, + 0 + ] + }, + { + "algorithm": { + "ASFLIP_alpha": 0, + "ASFLIP_beta_max": 0, + "ASFLIP_beta_min": 0, + "FBAR_fused_kernel": true, + "FBAR_psi": 0, + "ppc": 8, + "type": "particles", + "use_ASFLIP": true, + "use_FBAR": false + }, + "geometry": [ + { + "apply_array": true, + "apply_rotation": true, + "array": [ + 4, + 1, + 4 + ], + "body_preset": "Debris", + "facility": "Hinsdale Large Wave Flume (OSU LWF)", + "facility_dimensions": [ + 84, + 4.6, + 3.6 + ], + "fulcrum": [ + 0, + 0, + 0 + ], + "object": "Box", + "offset": [ + 40.3, + 2, + 0.325 + ], + "operation": "add", + "rotate": [ + 0, + 0, + 0 + ], + "spacing": [ + 1, + 1, + 1 + ], + "span": [ + 0.5, + 0.05, + 0.1 + ], + "track_particle_id": [ + 0 + ] + } + ], + "gpu": 0, + "material": { + "CFL": 0.5, + "constitutive": "FixedCorotated", + "material_preset": "Plastic", + "poisson_ratio": 0.3, + "rho": 981, + "youngs_modulus": 100000000 + }, + "model": 1, + "name": "debris", + "output_attribs": [ + "ID", + "Pressure", + "Velocity_X", + "Velocity_Y", + "Velocity_Z" + ], + "partition": [ + { + "gpu": 0, + "model": 1, + "partition_end": [ + 91.9, + 2.9, + 3.6 + ], + "partition_start": [ + 1.9, + 0, + 0 + ] + } + ], + "partition_end": [ + 91.9, + 2.9, + 3.6 + ], + "partition_start": [ + 1.9, + 0, + 0 + ], + "target_attribs": [ + "Position_Y" + ], + "track_attribs": [ + "Position_X", + "Position_Z", + "Pressure" + ], + "track_particle_id": [ + 0 + ], + "type": "particles", + "velocity": [ + 0, + 0, + 0 + ] + }, + { + "algorithm": { + "ASFLIP_alpha": 0, + "ASFLIP_beta_max": 0, + "ASFLIP_beta_min": 0, + "FBAR_fused_kernel": true, + "FBAR_psi": 0.95, + "ppc": 8, + "type": "particles", + "use_ASFLIP": false, + "use_FBAR": true + }, + "geometry": [ + { + "apply_array": false, + "apply_rotation": false, + "bathymetryXZ": [ + [ + 0, + 0 + ], + [ + 16.275, + 0.226 + ], + [ + 19.933, + 0.226 + ], + [ + 30.906, + 1.14 + ], + [ + 45.536, + 1.75 + ], + [ + 82.106, + 1.75 + ], + [ + 89.46, + 2.363 + ] + ], + "body_preset": "Fluid", + "facility": "Hinsdale Large Wave Flume (OSU LWF)", + "facility_dimensions": [ + 104, + 4.6, + 3.6 + ], + "fill_flume_upto_SWL": true, + "object": "OSU LWF", + "offset": [ + 1.9, + 0, + 0 + ], + "operation": "add", + "span": [ + 84, + 2, + 3.6 + ], + "standing_water_level": 2, + "track_particle_id": [ + 0 + ] + } + ], + "gpu": 1, + "material": { + "CFL": 0.5, + "bulk_modulus": 210000000, + "constitutive": "JFluid", + "gamma": 7.15, + "material_preset": "Water (Fresh)", + "rho": 1000, + "viscosity": 0.001 + }, + "model": 0, + "name": "fluid", + "output_attribs": [ + "ID", + "Pressure" + ], + "partition": [ + { + "gpu": 0, + "model": 0, + "partition_end": [ + 31.9, + 2.9, + 3.6 + ], + "partition_start": [ + 1.9, + 0, + 0 + ] + }, + { + "gpu": 1, + "model": 0, + "partition_end": [ + 61.9, + 2.9, + 3.6 + ], + "partition_start": [ + 31.9, + 0, + 0 + ] + }, + { + "gpu": 2, + "model": 0, + "partition_end": [ + 91.9, + 2.9, + 3.6 + ], + "partition_start": [ + 61.9, + 0, + 0 + ] + } + ], + "partition_end": [ + 61.9, + 2.9, + 3.6 + ], + "partition_start": [ + 31.9, + 0, + 0 + ], + "target_attribs": [ + "Position_Y" + ], + "track_attribs": [ + "Position_X", + "Position_Z", + "Pressure" + ], + "track_particle_id": [ + 0 + ], + "type": "particles", + "velocity": [ + 0, + 0, + 0 + ] + }, + { + "algorithm": { + "ASFLIP_alpha": 0, + "ASFLIP_beta_max": 0, + "ASFLIP_beta_min": 0, + "FBAR_fused_kernel": true, + "FBAR_psi": 0.95, + "ppc": 8, + "type": "particles", + "use_ASFLIP": false, + "use_FBAR": true + }, + "geometry": [ + { + "apply_array": false, + "apply_rotation": false, + "bathymetryXZ": [ + [ + 0, + 0 + ], + [ + 16.275, + 0.226 + ], + [ + 19.933, + 0.226 + ], + [ + 30.906, + 1.14 + ], + [ + 45.536, + 1.75 + ], + [ + 82.106, + 1.75 + ], + [ + 89.46, + 2.363 + ] + ], + "body_preset": "Fluid", + "facility": "Hinsdale Large Wave Flume (OSU LWF)", + "facility_dimensions": [ + 104, + 4.6, + 3.6 + ], + "fill_flume_upto_SWL": true, + "object": "OSU LWF", + "offset": [ + 1.9, + 0, + 0 + ], + "operation": "add", + "span": [ + 84, + 2, + 3.6 + ], + "standing_water_level": 2, + "track_particle_id": [ + 0 + ] + } + ], + "gpu": 2, + "material": { + "CFL": 0.5, + "bulk_modulus": 210000000, + "constitutive": "JFluid", + "gamma": 7.15, + "material_preset": "Water (Fresh)", + "rho": 1000, + "viscosity": 0.001 + }, + "model": 0, + "name": "fluid", + "output_attribs": [ + "ID", + "Pressure" + ], + "partition": [ + { + "gpu": 0, + "model": 0, + "partition_end": [ + 31.9, + 2.9, + 3.6 + ], + "partition_start": [ + 1.9, + 0, + 0 + ] + }, + { + "gpu": 1, + "model": 0, + "partition_end": [ + 61.9, + 2.9, + 3.6 + ], + "partition_start": [ + 31.9, + 0, + 0 + ] + }, + { + "gpu": 2, + "model": 0, + "partition_end": [ + 91.9, + 2.9, + 3.6 + ], + "partition_start": [ + 61.9, + 0, + 0 + ] + } + ], + "partition_end": [ + 91.9, + 2.9, + 3.6 + ], + "partition_start": [ + 61.9, + 0, + 0 + ], + "target_attribs": [ + "Position_Y" + ], + "track_attribs": [ + "Position_X", + "Position_Z", + "Pressure" + ], + "track_particle_id": [ + 0 + ], + "type": "particles", + "velocity": [ + 0, + 0, + 0 + ] + } + ], + "boundaries": [ + { + "contact": "Separable", + "domain_end": [ + 90, + 4.6, + 3.6 + ], + "domain_start": [ + 0, + 0, + 0 + ], + "friction_dynamic": 0, + "friction_static": 0, + "object": "OSU LWF" + }, + { + "contact": "Separable", + "domain_end": [ + 1.9, + 4.7, + 3.75 + ], + "domain_start": [ + 1.7, + -0.1, + -0.1 + ], + "file": "..//wmdisp_LWF_Unbroken_Amp4_SF500_twm10sec_1200hz_14032023.csv", + "friction_dynamic": 0, + "friction_static": 0, + "object": "OSU Paddle", + "output_frequency": 1200 + }, + { + "array": [ + 1, + 1, + 1 + ], + "contact": "Separable", + "domain_end": [ + 46.8, + 2.625, + 2.325 + ], + "domain_start": [ + 45.8, + 2, + 1.325 + ], + "friction_dynamic": 0, + "friction_static": 0, + "object": "Box", + "spacing": [ + 0, + 0, + 0 + ] + }, + { + "contact": "Separable", + "domain_end": [ + 90, + 4.5, + 3.6 + ], + "domain_start": [ + 0, + 0, + 0 + ], + "friction_dynamic": 0, + "friction_static": 0, + "object": "Walls" + } + ], + "computer": { + "hpc": "TACC - UT Austin - Lonestar6", + "hpc_card_architecture": "Ampere", + "hpc_card_brand": "NVIDIA", + "hpc_card_compute_capability": 80, + "hpc_card_global_memory": 40, + "hpc_card_name": "A100", + "hpc_queue": "gpu-a100", + "models_per_gpu": 3, + "num_gpus": 3 + }, + "grid-sensors": [ + { + "attribute": "Force", + "direction": "X+", + "domain_end": [ + 45.824, + 2.6500000000000004, + 2.3 + ], + "domain_start": [ + 45.799, + 2.075, + 1.35 + ], + "name": "LoadCell1", + "operation": "Sum", + "output_frequency": 120, + "toggle": true, + "type": "grid" + } + ], + "outputs": { + "bodies_output_freq": 10, + "bodies_save_suffix": "BGEO", + "boundaries_output_freq": 30, + "boundaries_save_suffix": "OBJ", + "checkpoints_output_freq": 1, + "checkpoints_save_suffix": "BGEO", + "energies_output_freq": 30, + "energies_save_suffix": "CSV", + "output_attribs": [ + [ + "ID", + "Pressure" + ], + [ + "ID", + "Pressure", + "Velocity_X", + "Velocity_Y", + "Velocity_Z" + ], + [ + "ID", + "Pressure", + "VonMisesStress", + "DefGrad_Invariant2", + "DefGrad_Invariant3" + ] + ], + "particles_output_exterior_only": false, + "sensors_save_suffix": "CSV", + "useKineticEnergy": false, + "usePotentialEnergy": false, + "useStrainEnergy": false + }, + "particle-sensors": [ + { + "attribute": "Elevation", + "direction": "N/A", + "domain_end": [ + 16.05, + 2.75, + 0.45 + ], + "domain_start": [ + 16, + 1.75, + 0.4 + ], + "name": "WaveGauge1", + "operation": "Max", + "output_frequency": 30, + "toggle": true, + "type": "particles" + }, + { + "attribute": "Elevation", + "direction": "N/A", + "domain_end": [ + 26.05, + 2.75, + 0.45 + ], + "domain_start": [ + 26, + 1.75, + 0.4 + ], + "name": "WaveGauge2", + "operation": "Max", + "output_frequency": 30, + "toggle": true, + "type": "particles" + }, + { + "attribute": "Elevation", + "direction": "N/A", + "domain_end": [ + 38.05, + 2.75, + 0.45 + ], + "domain_start": [ + 38, + 1.75, + 0.4 + ], + "name": "WaveGauge3", + "operation": "Max", + "output_frequency": 30, + "toggle": true, + "type": "particles" + } + ], + "scaling": { + "cauchy_bulk_ratio": 1, + "froude_length_ratio": 1, + "froude_time_ratio": 1, + "use_cauchy_scaling": false, + "use_froude_scaling": false + }, + "simulation": { + "cauchy_bulk_ratio": 1, + "cfl": 0.5, + "default_dt": 0.0001, + "default_dx": 0.1, + "domain": [ + 90, + 4.5, + 3.6 + ], + "duration": 5, + "fps": 10, + "frames": 50, + "froude_scaling": 1, + "froude_time_ratio": 1, + "gravity": [ + 0, + -9.80665, + 0 + ], + "initial_time": 0, + "mirror_domain": [ + false, + false, + false + ], + "particles_output_exterior_only": false, + "save_suffix": ".bgeo", + "time": 0, + "time_integration": "Explicit", + "use_cauchy_scaling": false, + "use_froude_scaling": false + }, + "subtype": "MPM", + "type": "MPM" + } + ], + "GeneralInformation": { + "NumberOfStories": 1, + "PlanArea": 129600, + "StructureType": "RM1", + "YearBuilt": 1990, + "depth": 360, + "height": 144, + "location": { + "latitude": 37.8715, + "longitude": -122.273 + }, + "name": "The Orange Box", + "planArea": 129600, + "stories": 1, + "units": { + "force": "kips", + "length": "in", + "temperature": "C", + "time": "sec" + }, + "width": 360 + }, + "Modeling": { + "Bx": 0.1, + "By": 0.1, + "Fyx": 1000000, + "Fyy": 1000000, + "Krz": 10000000000, + "Kx": 100, + "Ky": 100, + "ModelData": [ + { + "Fyx": 1000000, + "Fyy": 1000000, + "Ktheta": 10000000000, + "bx": 0.1, + "by": 0.1, + "height": 144, + "kx": 100, + "ky": 100, + "weight": 100 + } + ], + "dampingRatio": 0.02, + "height": 144, + "massX": 0, + "massY": 0, + "numStories": 1, + "randomVar": [ + ], + "responseX": 0, + "responseY": 0, + "type": "MDOF_BuildingModel", + "weight": 100 + }, + "Simulation": { + "Application": "OpenSees-Simulation", + "algorithm": "Newton", + "analysis": "Transient -numSubLevels 2 -numSubSteps 10", + "convergenceTest": "NormUnbalance 1.0e-2 10", + "dampingModel": "Rayleigh Damping", + "firstMode": 1, + "integration": "Newmark 0.5 0.25", + "modalRayleighTangentRatio": 0, + "numModesModal": -1, + "rayleighTangent": "Initial", + "secondMode": -1, + "solver": "Umfpack" + }, + "UQ": { + "parallelExecution": true, + "samplingMethodData": { + "method": "LHS", + "samples": 2, + "seed": 1 + }, + "saveWorkDir": true, + "uqType": "Forward Propagation" + }, + "localAppDir": "/home/justinbonus/SimCenter/HydroUQ/build", + "randomVariables": [ + { + "distribution": "Normal", + "inputType": "Parameters", + "mean": 0, + "name": "dummy", + "refCount": 0, + "stdDev": 1, + "value": "RV.dummy", + "variableClass": "Uncertain" + } + ], + "remoteAppDir": "/home/justinbonus/SimCenter/HydroUQ/build", + "resultType": "SimCenterUQResultsSampling", + "runType": "runningLocal", + "summary": [ + ], + "workingDir": "/home/justinbonus/Documents/HydroUQ/LocalWorkDir" +} diff --git a/Examples/hdro-0003/src/input.json b/Examples/hdro-0003/src/input.json index 63adfae1..a16e9156 100644 --- a/Examples/hdro-0003/src/input.json +++ b/Examples/hdro-0003/src/input.json @@ -1,328 +1,346 @@ -{ - "Applications": { - "EDP": { - "Application": "StandardEDP", - "ApplicationData": { - } - }, - "Events": [ - { - "Application": "CoupledDigitalTwin", - "ApplicationData": { - }, - "EventClassification": "Hydro" - } - ], - "Modeling": { - "Application": "MDOF_BuildingModel", - "ApplicationData": { - } - }, - "Simulation": { - "Application": "OpenSees-Simulation", - "ApplicationData": { - } - }, - "UQ": { - "Application": "Dakota-UQ", - "ApplicationData": { - } - } - }, - "DefaultValues": { - "driverFile": "driver", - "edpFiles": [ - "EDP.json" - ], - "filenameAIM": "AIM.json", - "filenameDL": "BIM.json", - "filenameEDP": "EDP.json", - "filenameEVENT": "EVENT.json", - "filenameSAM": "SAM.json", - "filenameSIM": "SIM.json", - "rvFiles": [ - "AIM.json", - "SAM.json", - "EVENT.json", - "SIM.json" - ], - "workflowInput": "scInput.json", - "workflowOutput": "EDP.json" - }, - "EDP": { - "type": "StandardEDP" - }, - "Events": [ - { - "AdjustTimeStep": "No", - "Application": "CoupledDigitalTwin", - "ApplyGravity": "No", - "CouplingScheme": "Implicit", - "EventClassification": "Hydro", - "SeesVTKOUT": "Yes", - "SeesVTKOUTRate": 0.1, - "SimDuration": 10, - "SolutionDT": 0.005, - "Turbulence": "Yes", - "bathSTL": ".", - "bathSTLPath": ".", - "bathType": "Point List", - "bathXZData": [ - [ - 100, - 0 - ], - [ - 105, - 0 - ] - ], - "cellSize": 0.025, - "couplingConvergenceTol": 0.005, - "couplingDataAccelerationMethod": "IQN-IMVJ", - "couplingIterationOutputDataFrequency": 100, - "cutSurfaceLocsDirsFields": [ - [ - 0, - 0, - 0.25, - 0, - 1, - 0, - "XSec1", - "p,U,alpha.water" - ] - ], - "cutSurfaceOutput": "Yes", - "domainSubType": "INLETOUTLET", - "fieldProbeLocs": [ - [ - 1.4485, - 0, - 0.01, - "PressureProbe1", - "p" - ], - [ - 1.4485, - 0, - 0.1, - "PressureProbe2", - "p" - ], - [ - 1.4485, - 0, - 0.2, - "PressureProbe3", - "p" - ], - [ - 1.4485, - 0, - 0.3, - "PressureProbe4", - "p" - ], - [ - 0.05, - 0, - 0.1, - "VelocityProbe1", - "u" - ] - ], - "fieldProbes": "Yes", - "flumeHeight": 1, - "flumeLength": 4, - "flumeWidth": 1, - "freeSurfOut": "Yes", - "freeSurfProbeLocs": [ - [ - 0.05, - 0, - 0.5, - "WaveGauge1" - ], - [ - 0.9, - 0, - 0.5, - "WaveGauge2" - ], - [ - 1.1, - 0, - 0.5, - "WaveGauge3" - ], - [ - 1.4485, - 0, - 0.5, - "WaveGauge4front" - ], - [ - 1.5515, - 0, - 0.5, - "WaveGauge5back" - ], - [ - 1.5, - -0.0515, - 0.5, - "WaveGauge6left" - ], - [ - 1.5, - 0.0515, - 0.5, - "WaveGauge7right" - ] - ], - "freeSurfProbes": "Yes", - "g": -9.81, - "initVelocity": 0, - "initialRelaxationFactor": 0.9, - "interfaceSurface": "interface.stl", - "interfaceSurfaceOutput": "Yes", - "interfaceSurfacePath": "{Current_Dir}/.", - "mapType": "Nearest Neighbor", - "maximumCouplingIterations": 100, - "numProcessors": 56, - "openSeesPyScript": "OpenSeesModel.py", - "openSeesPyScriptPath": "{Current_Dir}/.", - "outputDataFromCouplingIterations": "No", - "paddleDispFile": ".", - "paddleDispFilePath": ".", - "periodicWaveCelerity": 1, - "periodicWaveMagnitude": 1, - "periodicWaveRepeatPeriod": 1, - "refPressure": 0, - "runPrelim": "No", - "start": 0, - "stillWaterLevel": 0.25, - "turbIntensity": 0.25, - "turbRefLength": 0.1, - "turbReferenceVel": 1, - "velocityFile": "velTime.csv", - "velocityFilePath": "{Current_Dir}/.", - "waveType": "No Waves", - "writeDT": 0.1 - } - ], - "GeneralInformation": { - "NumberOfStories": 3, - "PlanArea": 129600, - "StructureType": "RM1", - "YearBuilt": 1990, - "depth": 360, - "height": 0.3, - "location": { - "latitude": 37.8715, - "longitude": -122.273 - }, - "name": "", - "planArea": 129600, - "stories": 3, - "units": { - "force": "kips", - "length": "in", - "temperature": "C", - "time": "sec" - }, - "width": 360 - }, - "Modeling": { - "Bx": 0.1, - "By": 0.1, - "Fyx": 1000000, - "Fyy": 1000000, - "Krz": 10000000000, - "Kx": 100, - "Ky": 100, - "ModelData": [ - { - "Fyx": 1000000, - "Fyy": 1000000, - "Ktheta": 10000000000, - "bx": 0.1, - "by": 0.1, - "height": 0.1, - "kx": 100, - "ky": 100, - "weight": 144 - }, - { - "Fyx": 1000000, - "Fyy": 1000000, - "Ktheta": 10000000000, - "bx": 0.1, - "by": 0.1, - "height": 0.1, - "kx": 100, - "ky": 100, - "weight": 144 - }, - { - "Fyx": 1000000, - "Fyy": 1000000, - "Ktheta": 10000000000, - "bx": 0.1, - "by": 0.1, - "height": 0.1, - "kx": 100, - "ky": 100, - "weight": 144 - } - ], - "dampingRatio": 0.02, - "height": 0.1, - "massX": 0, - "massY": 0, - "numStories": 3, - "randomVar": [ - ], - "responseX": 0, - "responseY": 0, - "type": "MDOF_BuildingModel", - "weight": 144 - }, - "Simulation": { - "Application": "OpenSees-Simulation", - "algorithm": "Newton", - "analysis": "Transient -numSubLevels 2 -numSubSteps 10", - "convergenceTest": "NormUnbalance 1.0e-2 10", - "dampingModel": "Rayleigh Damping", - "firstMode": 1, - "integration": "Newmark 0.5 0.25", - "modalRayleighTangentRatio": 0, - "numModesModal": -1, - "rayleighTangent": "Initial", - "secondMode": -1, - "solver": "Umfpack" - }, - "UQ": { - "parallelExecution": true, - "samplingMethodData": { - "method": "LHS", - "samples": 500, - "seed": 547 - }, - "saveWorkDir": true, - "uqType": "Forward Propagation" - }, - "localAppDir": "C:/Users/nsaoirse/Desktop/HydroUQ_Windows_Download", - "nodeCount": 1, - "numP": 56, - "processorsOnEachNode": 56, - "randomVariables": [ - ], - "remoteAppDir": "/work2/00477/tg457427/frontera/SimCenterBackendApplications/v4.2.0", - "resultType": "SimCenterUQResultsSampling", - "runType": "runningRemote", - "summary": [ - ], - "workingDir": "C:/Users/nsaoirse/Documents/HydroUQ/RemoteWorkDir" -} +{ + "Applications": { + "EDP": { + "Application": "StandardEDP", + "ApplicationData": { + } + }, + "Events": [ + { + "Application": "CoupledDigitalTwin", + "ApplicationData": { + }, + "EventClassification": "Hydro", + "type": "CoupledDigitalTwin" + } + ], + "Modeling": { + "Application": "MDOF_BuildingModel", + "ApplicationData": { + } + }, + "Simulation": { + "Application": "OpenSees-Simulation", + "ApplicationData": { + } + }, + "UQ": { + "Application": "Dakota-UQ", + "ApplicationData": { + } + } + }, + "DefaultValues": { + "driverFile": "driver", + "edpFiles": [ + "EDP.json" + ], + "filenameAIM": "AIM.json", + "filenameDL": "BIM.json", + "filenameEDP": "EDP.json", + "filenameEVENT": "EVENT.json", + "filenameSAM": "SAM.json", + "filenameSIM": "SIM.json", + "rvFiles": [ + "AIM.json", + "SAM.json", + "EVENT.json", + "SIM.json" + ], + "workflowInput": "scInput.json", + "workflowOutput": "EDP.json" + }, + "EDP": { + "type": "StandardEDP" + }, + "Events": [ + { + "AdjustTimeStep": "No", + "Application": "CoupledDigitalTwin", + "ApplyGravity": "No", + "CouplingScheme": "Implicit", + "EventClassification": "Hydro", + "SeesVTKOUT": "Yes", + "SeesVTKOUTRate": 0.1, + "SimDuration": 0.2, + "SolutionDT": 5e-05, + "Turbulence": "Yes", + "bathSTL": "flumeFloor.stl", + "bathSTLPath": "Examples/hdro-0001/src", + "bathType": "Point List", + "bathXZData": [ + [ + 1, + 0 + ], + [ + 1.5, + 0 + ], + [ + 4, + 0 + ] + ], + "cellSize": 0.025, + "couplingConvergenceTol": 0.005, + "couplingDataAccelerationMethod": "IQN-IMVJ", + "couplingIterationOutputDataFrequency": 100, + "cutSurfaceLocsDirsFields": [ + [ + 0, + 0, + 0.25, + 0, + 1, + 0, + "XSec1", + "p,U,alpha.water" + ] + ], + "cutSurfaceOutput": "Yes", + "domainSubType": "INLETOUTLET", + "fieldProbeLocs": [ + [ + 1.4485, + 0, + 0.01, + "PressureProbe1", + "p" + ], + [ + 1.4485, + 0, + 0.1, + "PressureProbe2", + "p" + ], + [ + 1.4485, + 0, + 0.2, + "PressureProbe3", + "p" + ], + [ + 1.4485, + 0, + 0.3, + "PressureProbe4", + "p" + ], + [ + 0.05, + 0, + 0.1, + "VelocityProbe1", + "u" + ] + ], + "fieldProbes": "Yes", + "flumeHeight": 1, + "flumeLength": 4, + "flumeWidth": 1, + "freeSurfOut": "Yes", + "freeSurfProbeLocs": [ + [ + 0.05, + 0, + 0.5, + "WaveGauge1" + ], + [ + 0.9, + 0, + 0.5, + "WaveGauge2" + ], + [ + 1.1, + 0, + 0.5, + "WaveGauge3" + ], + [ + 1.4485, + 0, + 0.5, + "WaveGauge4front" + ], + [ + 1.5515, + 0, + 0.5, + "WaveGauge5back" + ], + [ + 1.5, + -0.0515, + 0.5, + "WaveGauge6left" + ], + [ + 1.5, + 0.0515, + 0.5, + "WaveGauge7right" + ] + ], + "freeSurfProbes": "Yes", + "g": -9.81, + "initVelocity": 0, + "initialRelaxationFactor": 0.9, + "interfaceSurface": "interface.stl", + "interfaceSurfaceOutput": "Yes", + "interfaceSurfacePath": "{Current_Dir}/.", + "mapType": "Nearest Neighbor", + "maximumCouplingIterations": 100, + "numProcessors": 16, + "openSeesPyScript": "OpenSeesModel.py", + "openSeesPyScriptPath": "{Current_Dir}/.", + "outputDataFromCouplingIterations": "Yes", + "paddleDispFile": "", + "paddleDispFilePath": "", + "periodicWaveCelerity": 1, + "periodicWaveMagnitude": 1, + "periodicWaveRepeatPeriod": 1, + "refPressure": 0, + "runPrelim": "No", + "start": 0, + "stillWaterLevel": 0.25, + "turbIntensity": 0.25, + "turbRefLength": 0.1, + "turbReferenceVel": 1, + "velocityFile": "velTime.csv", + "velocityFilePath": "{Current_Dir}/.", + "waveType": "No Waves", + "writeDT": 0.1 + } + ], + "GeneralInformation": { + "NumberOfStories": 3, + "PlanArea": 129600, + "StructureType": "RM1", + "YearBuilt": 1990, + "depth": 360, + "height": 0.3, + "location": { + "latitude": 37.8715, + "longitude": -122.273 + }, + "name": "Cylinder", + "planArea": 129600, + "stories": 3, + "units": { + "force": "kips", + "length": "in", + "temperature": "C", + "time": "sec" + }, + "width": 360 + }, + "Modeling": { + "Bx": 0.1, + "By": 0.1, + "Fyx": 1000000, + "Fyy": 1000000, + "Krz": 10000000000, + "Kx": 100, + "Ky": 100, + "ModelData": [ + { + "Fyx": 1000000, + "Fyy": 1000000, + "Ktheta": 10000000000, + "bx": 0.1, + "by": 0.1, + "height": 0.1, + "kx": "RV.k", + "ky": 100, + "weight": 144 + }, + { + "Fyx": 1000000, + "Fyy": 1000000, + "Ktheta": 10000000000, + "bx": 0.1, + "by": 0.1, + "height": 0.1, + "kx": "RV.k", + "ky": 100, + "weight": 144 + }, + { + "Fyx": 1000000, + "Fyy": 1000000, + "Ktheta": 10000000000, + "bx": 0.1, + "by": 0.1, + "height": 0.1, + "kx": "RV.k", + "ky": 100, + "weight": 144 + } + ], + "dampingRatio": 0.02, + "height": 0.1, + "massX": 0, + "massY": 0, + "numStories": 3, + "randomVar": [ + ], + "responseX": 0, + "responseY": 0, + "type": "MDOF_BuildingModel", + "weight": 144 + }, + "Simulation": { + "Application": "OpenSees-Simulation", + "algorithm": "Newton", + "analysis": "Transient -numSubLevels 2 -numSubSteps 10", + "convergenceTest": "NormUnbalance 1.0e-2 10", + "dampingModel": "Rayleigh Damping", + "firstMode": 1, + "integration": "Newmark 0.5 0.25", + "modalRayleighTangentRatio": 0, + "numModesModal": -1, + "rayleighTangent": "Initial", + "secondMode": -1, + "solver": "Umfpack" + }, + "UQ": { + "parallelExecution": true, + "samplingMethodData": { + "method": "LHS", + "samples": 2, + "seed": 1 + }, + "saveWorkDir": true, + "uqType": "Forward Propagation" + }, + "coresPerNode": 16, + "execSystemId": "frontera", + "execSystemLogicalQueue": "rtx", + "localAppDir": "/home/justinbonus/SimCenter/HydroUQ/build", + "maxMinutes": 90, + "memoryMB": 128000, + "nodeCount": 2, + "randomVariables": [ + { + "distribution": "Normal", + "inputType": "Parameters", + "mean": 100, + "name": "k", + "refCount": 1, + "stdDev": 10, + "value": "RV.k", + "variableClass": "Uncertain" + } + ], + "remoteAppDir": "/work2/00477/tg457427/frontera/SimCenterBackendApplications/v4.2.0", + "resultType": "SimCenterUQResultsSampling", + "runType": "runningRemote", + "summary": [ + ], + "workingDir": "/home/justinbonus/Documents/HydroUQ/RemoteWorkDir" +} diff --git a/Examples/hdro-0020_input.json b/Examples/hdro-0020_input.json new file mode 100644 index 00000000..7352bec6 --- /dev/null +++ b/Examples/hdro-0020_input.json @@ -0,0 +1,11112 @@ +{ + "Applications": { + "EDP": { + "Application": "StandardEDP", + "ApplicationData": { + } + }, + "Events": [ + { + "Application": "MPM", + "ApplicationData": { + }, + "EventClassification": "Hydro", + "defaultMaxRunTime": "1440", + "driverFile": "sc_driver", + "inputFile": "scInput.json", + "maxRunTime": "120", + "programFile": "osu_lwf", + "publicDirectory": "./" + } + ], + "Modeling": { + "Application": "MDOF_BuildingModel", + "ApplicationData": { + } + }, + "Simulation": { + "Application": "OpenSees-Simulation", + "ApplicationData": { + } + }, + "UQ": { + "Application": "Dakota-UQ", + "ApplicationData": { + } + } + }, + "DefaultValues": { + "driverFile": "driver", + "edpFiles": [ + "EDP.json" + ], + "filenameAIM": "AIM.json", + "filenameDL": "BIM.json", + "filenameEDP": "EDP.json", + "filenameEVENT": "EVENT.json", + "filenameSAM": "SAM.json", + "filenameSIM": "SIM.json", + "rvFiles": [ + "AIM.json", + "SAM.json", + "EVENT.json", + "SIM.json" + ], + "workflowInput": "scInput.json", + "workflowOutput": "EDP.json" + }, + "EDP": { + "type": "StandardEDP" + }, + "Events": [ + { + "Application": "MPM", + "EventClassification": "Hydro", + "bodies": [ + { + "algorithm": { + "ASFLIP_alpha": 0, + "ASFLIP_beta_max": 0, + "ASFLIP_beta_min": 0, + "FBAR_fused_kernel": true, + "FBAR_psi": 0.95, + "ppc": 8, + "type": "particles", + "use_ASFLIP": false, + "use_FBAR": true + }, + "geometry": [ + { + "apply_array": false, + "apply_rotation": false, + "bathymetryXZ": [ + [ + 0, + 0 + ], + [ + 16.275, + 0.226 + ], + [ + 19.933, + 0.226 + ], + [ + 30.906, + 1.14 + ], + [ + 45.536, + 1.75 + ], + [ + 82.106, + 1.75 + ], + [ + 89.46, + 2.363 + ] + ], + "body_preset": "Fluid", + "facility": "Hinsdale Large Wave Flume (OSU LWF)", + "facility_dimensions": [ + 104, + 4.6, + 3.6 + ], + "fill_flume_upto_SWL": true, + "object": "OSU LWF", + "offset": [ + 1.9, + 0, + 0 + ], + "operation": "add", + "span": [ + 84, + 2, + 3.6 + ], + "standing_water_level": 2, + "track_particle_id": [ + "0" + ] + } + ], + "gpu": 0, + "material": { + "CFL": 0.5, + "bulk_modulus": 210000000, + "constitutive": "JFluid", + "gamma": 7.15, + "material_preset": "Water (Fresh)", + "rho": 1000, + "viscosity": 0.001 + }, + "model": 0, + "name": "fluid", + "output_attribs": [ + "ID", + "Pressure" + ], + "partition": [ + { + "gpu": 0, + "model": 0, + "partition_end": [ + 31.9, + 2.9, + 3.6 + ], + "partition_start": [ + 1.9, + 0, + 0 + ] + }, + { + "gpu": 1, + "model": 0, + "partition_end": [ + 91.9, + 2.9, + 3.6 + ], + "partition_start": [ + 31.9, + 0, + 0 + ] + }, + { + "gpu": 2, + "model": 0, + "partition_end": [ + 121.9, + 2.9, + 3.6 + ], + "partition_start": [ + 91.9, + 0, + 0 + ] + } + ], + "partition_end": [ + 31.9, + 2.9, + 3.6 + ], + "partition_start": [ + 1.9, + 0, + 0 + ], + "target_attribs": [ + "Position_Y" + ], + "track_attribs": [ + "Position_X", + "Position_Z", + "Pressure" + ], + "track_particle_id": [ + 0 + ], + "type": "particles", + "velocity": [ + 0, + 0, + 0 + ] + }, + { + "algorithm": { + "ASFLIP_alpha": 0, + "ASFLIP_beta_max": 0, + "ASFLIP_beta_min": 0, + "FBAR_fused_kernel": true, + "FBAR_psi": 0, + "ppc": 8, + "type": "particles", + "use_ASFLIP": true, + "use_FBAR": false + }, + "geometry": [ + { + "apply_array": true, + "apply_rotation": true, + "array": [ + 4, + 1, + 4 + ], + "body_preset": "Debris", + "facility": "Hinsdale Large Wave Flume (OSU LWF)", + "facility_dimensions": [ + 84, + 4.6, + 3.6 + ], + "fulcrum": [ + 0, + 0, + 0 + ], + "object": "Box", + "offset": [ + 40.3, + 2, + 0.325 + ], + "operation": "add", + "rotate": [ + 0, + 0, + 0 + ], + "spacing": [ + 1, + 1, + 1 + ], + "span": [ + 0.5, + 0.05, + 0.1 + ], + "track_particle_id": [ + "0" + ] + } + ], + "gpu": 0, + "material": { + "CFL": 0.5, + "constitutive": "FixedCorotated", + "material_preset": "Plastic", + "poisson_ratio": 0.3, + "rho": 981, + "youngs_modulus": 100000000 + }, + "model": 1, + "name": "debris", + "output_attribs": [ + "ID", + "Pressure", + "Velocity_X", + "Velocity_Y", + "Velocity_Z" + ], + "partition": [ + { + "gpu": 0, + "model": 1, + "partition_end": [ + 91.9, + 2.9, + 3.6 + ], + "partition_start": [ + 1.9, + 0, + 0 + ] + } + ], + "partition_end": [ + 91.9, + 2.9, + 3.6 + ], + "partition_start": [ + 1.9, + 0, + 0 + ], + "target_attribs": [ + "Position_Y" + ], + "track_attribs": [ + "Position_X", + "Position_Z", + "Pressure" + ], + "track_particle_id": [ + 0 + ], + "type": "particles", + "velocity": [ + 0, + 0, + 0 + ] + }, + { + "algorithm": { + "ASFLIP_alpha": 0, + "ASFLIP_beta_max": 0, + "ASFLIP_beta_min": 0, + "FBAR_fused_kernel": true, + "FBAR_psi": 0.95, + "ppc": 8, + "type": "particles", + "use_ASFLIP": false, + "use_FBAR": true + }, + "geometry": [ + { + "apply_array": false, + "apply_rotation": false, + "bathymetryXZ": [ + [ + 0, + 0 + ], + [ + 16.275, + 0.226 + ], + [ + 19.933, + 0.226 + ], + [ + 30.906, + 1.14 + ], + [ + 45.536, + 1.75 + ], + [ + 82.106, + 1.75 + ], + [ + 89.46, + 2.363 + ] + ], + "body_preset": "Fluid", + "facility": "Hinsdale Large Wave Flume (OSU LWF)", + "facility_dimensions": [ + 104, + 4.6, + 3.6 + ], + "fill_flume_upto_SWL": true, + "object": "OSU LWF", + "offset": [ + 1.9, + 0, + 0 + ], + "operation": "add", + "span": [ + 84, + 2, + 3.6 + ], + "standing_water_level": 2, + "track_particle_id": [ + "0" + ] + } + ], + "gpu": 1, + "material": { + "CFL": 0.5, + "bulk_modulus": 210000000, + "constitutive": "JFluid", + "gamma": 7.15, + "material_preset": "Water (Fresh)", + "rho": 1000, + "viscosity": 0.001 + }, + "model": 0, + "name": "fluid", + "output_attribs": [ + "ID", + "Pressure" + ], + "partition": [ + { + "gpu": 0, + "model": 0, + "partition_end": [ + 31.9, + 2.9, + 3.6 + ], + "partition_start": [ + 1.9, + 0, + 0 + ] + }, + { + "gpu": 1, + "model": 0, + "partition_end": [ + 91.9, + 2.9, + 3.6 + ], + "partition_start": [ + 31.9, + 0, + 0 + ] + }, + { + "gpu": 2, + "model": 0, + "partition_end": [ + 121.9, + 2.9, + 3.6 + ], + "partition_start": [ + 91.9, + 0, + 0 + ] + } + ], + "partition_end": [ + 91.9, + 2.9, + 3.6 + ], + "partition_start": [ + 31.9, + 0, + 0 + ], + "target_attribs": [ + "Position_Y" + ], + "track_attribs": [ + "Position_X", + "Position_Z", + "Pressure" + ], + "track_particle_id": [ + 0 + ], + "type": "particles", + "velocity": [ + 0, + 0, + 0 + ] + }, + { + "algorithm": { + "ASFLIP_alpha": 0, + "ASFLIP_beta_max": 0, + "ASFLIP_beta_min": 0, + "FBAR_fused_kernel": true, + "FBAR_psi": 0.95, + "ppc": 8, + "type": "particles", + "use_ASFLIP": false, + "use_FBAR": true + }, + "geometry": [ + { + "apply_array": false, + "apply_rotation": false, + "bathymetryXZ": [ + [ + 0, + 0 + ], + [ + 16.275, + 0.226 + ], + [ + 19.933, + 0.226 + ], + [ + 30.906, + 1.14 + ], + [ + 45.536, + 1.75 + ], + [ + 82.106, + 1.75 + ], + [ + 89.46, + 2.363 + ] + ], + "body_preset": "Fluid", + "facility": "Hinsdale Large Wave Flume (OSU LWF)", + "facility_dimensions": [ + 104, + 4.6, + 3.6 + ], + "fill_flume_upto_SWL": true, + "object": "OSU LWF", + "offset": [ + 1.9, + 0, + 0 + ], + "operation": "add", + "span": [ + 84, + 2, + 3.6 + ], + "standing_water_level": 2, + "track_particle_id": [ + "0" + ] + } + ], + "gpu": 2, + "material": { + "CFL": 0.5, + "bulk_modulus": 210000000, + "constitutive": "JFluid", + "gamma": 7.15, + "material_preset": "Water (Fresh)", + "rho": 1000, + "viscosity": 0.001 + }, + "model": 0, + "name": "fluid", + "output_attribs": [ + "ID", + "Pressure" + ], + "partition": [ + { + "gpu": 0, + "model": 0, + "partition_end": [ + 31.9, + 2.9, + 3.6 + ], + "partition_start": [ + 1.9, + 0, + 0 + ] + }, + { + "gpu": 1, + "model": 0, + "partition_end": [ + 91.9, + 2.9, + 3.6 + ], + "partition_start": [ + 31.9, + 0, + 0 + ] + }, + { + "gpu": 2, + "model": 0, + "partition_end": [ + 121.9, + 2.9, + 3.6 + ], + "partition_start": [ + 91.9, + 0, + 0 + ] + } + ], + "partition_end": [ + 121.9, + 2.9, + 3.6 + ], + "partition_start": [ + 91.9, + 0, + 0 + ], + "target_attribs": [ + "Position_Y" + ], + "track_attribs": [ + "Position_X", + "Position_Z", + "Pressure" + ], + "track_particle_id": [ + 0 + ], + "type": "particles", + "velocity": [ + 0, + 0, + 0 + ] + } + ], + "boundaries": [ + { + "contact": "Separable", + "domain_end": [ + 90, + 4.6, + 3.6 + ], + "domain_start": [ + 0, + 0, + 0 + ], + "friction_dynamic": 0, + "friction_static": 0, + "object": "OSU LWF" + }, + { + "contact": "Separable", + "domain_end": [ + 1.9, + 4.7, + 3.75 + ], + "domain_start": [ + 1.7, + -0.1, + -0.1 + ], + "file": "..//wmdisp_hydro2sec_1200hz_smooth_14032023.csv", + "friction_dynamic": 0, + "friction_static": 0, + "object": "OSU Paddle", + "output_frequency": 1200 + }, + { + "array": [ + 1, + 1, + 1 + ], + "contact": "Separable", + "domain_end": [ + 46.8, + 2.625, + 2.325 + ], + "domain_start": [ + 45.8, + 2, + 1.325 + ], + "friction_dynamic": 0, + "friction_static": 0, + "object": "Box", + "spacing": [ + 0, + 0, + 0 + ] + }, + { + "contact": "Separable", + "domain_end": [ + 90, + 4.5, + 3.6 + ], + "domain_start": [ + 0, + 0, + 0 + ], + "friction_dynamic": 0, + "friction_static": 0, + "object": "Walls" + } + ], + "computer": { + "hpc": "TACC - UT Austin - Lonestar6", + "hpc_card_architecture": "Ampere", + "hpc_card_brand": "NVIDIA", + "hpc_card_compute_capability": 80, + "hpc_card_global_memory": 40, + "hpc_card_name": "A100", + "hpc_queue": "gpu-a100", + "models_per_gpu": 3, + "num_gpus": 3 + }, + "grid-sensors": [ + { + "attribute": "Force", + "direction": "X+", + "domain_end": [ + 45.824, + 2.3, + 2.3 + ], + "domain_start": [ + 45.799, + 1.75, + 1.3 + ], + "name": "LoadCell1", + "operation": "Sum", + "output_frequency": 120, + "toggle": true, + "type": "grid" + }, + { + "attribute": "Force", + "direction": "X+", + "domain_end": [ + 45.824, + 2.5999999999999996, + 2.3 + ], + "domain_start": [ + 45.799, + 2.3, + 1.3 + ], + "name": "LoadCell2", + "operation": "Sum", + "output_frequency": 120, + "toggle": true, + "type": "grid" + } + ], + "outputs": { + "bodies_output_freq": 2, + "bodies_save_suffix": "BGEO", + "boundaries_output_freq": 30, + "boundaries_save_suffix": "OBJ", + "checkpoints_output_freq": 1, + "checkpoints_save_suffix": "BGEO", + "energies_output_freq": 30, + "energies_save_suffix": "CSV", + "output_attribs": [ + [ + "ID", + "Pressure" + ], + [ + "ID", + "Pressure", + "Velocity_X", + "Velocity_Y", + "Velocity_Z" + ], + [ + "ID", + "Pressure", + "VonMisesStress", + "DefGrad_Invariant2", + "DefGrad_Invariant3" + ] + ], + "particles_output_exterior_only": false, + "sensors_save_suffix": "CSV", + "useKineticEnergy": false, + "usePotentialEnergy": false, + "useStrainEnergy": false + }, + "particle-sensors": [ + { + "attribute": "Elevation", + "direction": "N/A", + "domain_end": [ + 16.05, + 2.75, + 0.45 + ], + "domain_start": [ + 16, + 1.75, + 0.4 + ], + "name": "WaveGauge1", + "operation": "Max", + "output_frequency": 30, + "toggle": true, + "type": "particles" + }, + { + "attribute": "Elevation", + "direction": "N/A", + "domain_end": [ + 26.05, + 2.75, + 0.45 + ], + "domain_start": [ + 26, + 1.75, + 0.4 + ], + "name": "WaveGauge2", + "operation": "Max", + "output_frequency": 30, + "toggle": true, + "type": "particles" + }, + { + "attribute": "Elevation", + "direction": "N/A", + "domain_end": [ + 38.05, + 2.75, + 0.45 + ], + "domain_start": [ + 38, + 1.75, + 0.4 + ], + "name": "WaveGauge3", + "operation": "Max", + "output_frequency": 30, + "toggle": true, + "type": "particles" + } + ], + "scaling": { + "cauchy_bulk_ratio": 1, + "froude_length_ratio": 1, + "froude_time_ratio": 1, + "use_cauchy_scaling": false, + "use_froude_scaling": false + }, + "simulation": { + "cauchy_bulk_ratio": 1, + "cfl": 0.5, + "default_dt": 0.001, + "default_dx": 0.1, + "domain": [ + 90, + 4.5, + 3.6 + ], + "duration": 1, + "fps": 2, + "frames": 2, + "froude_scaling": 1, + "froude_time_ratio": 1, + "gravity": [ + 0, + -9.80665, + 0 + ], + "initial_time": 0, + "mirror_domain": [ + false, + false, + false + ], + "particles_output_exterior_only": false, + "save_suffix": ".bgeo", + "time": 0, + "time_integration": "Explicit", + "use_cauchy_scaling": false, + "use_froude_scaling": false + }, + "subtype": "MPM", + "type": "MPM" + } + ], + "GeneralInformation": { + "NumberOfStories": 1, + "PlanArea": 129600, + "StructureType": "RM1", + "YearBuilt": 2022, + "depth": 360, + "height": 144, + "location": { + "latitude": 37.8715, + "longitude": -122.273 + }, + "name": "OSU LWF - Raised Orange Box", + "planArea": 129600, + "stories": 1, + "units": { + "force": "kips", + "length": "in", + "temperature": "C", + "time": "sec" + }, + "width": 360 + }, + "Modeling": { + "Bx": 0.1, + "By": 0.1, + "Fyx": 1000000, + "Fyy": 1000000, + "Krz": 10000000000, + "Kx": 100, + "Ky": 100, + "ModelData": [ + { + "Fyx": 1000000, + "Fyy": 1000000, + "Ktheta": 10000000000, + "bx": 0.1, + "by": 0.1, + "height": 144, + "kx": 100, + "ky": 100, + "weight": "RV.w" + } + ], + "dampingRatio": 0.02, + "height": 144, + "massX": 0, + "massY": 0, + "numStories": 1, + "randomVar": [ + ], + "responseX": 0, + "responseY": 0, + "type": "MDOF_BuildingModel", + "weight": "RV.w" + }, + "Simulation": { + "Application": "OpenSees-Simulation", + "algorithm": "Newton", + "analysis": "Transient -numSubLevels 2 -numSubSteps 10", + "convergenceTest": "NormUnbalance 1.0e-2 10", + "dampingModel": "Rayleigh Damping", + "firstMode": 1, + "integration": "Newmark 0.5 0.25", + "modalRayleighTangentRatio": 0, + "numModesModal": -1, + "rayleighTangent": "Initial", + "secondMode": -1, + "solver": "Umfpack" + }, + "UQ": { + "parallelExecution": true, + "samplingMethodData": { + "method": "Gaussian Process Regression", + "samplingMethod": "LHS", + "samplingSamples": 1000, + "samplingSeed": 776, + "surrogateSurfaceMethod": "gaussian_process surfpack", + "trainingMethod": "LHS", + "trainingSamples": 20, + "trainingSeed": 776 + }, + "saveWorkDir": true, + "uqType": "Forward Propagation" + }, + "correlationMatrix": [ + 1 + ], + "localAppDir": "/home/justinbonus/SimCenter/HydroUQ/build", + "randomVariables": [ + { + "distribution": "Normal", + "inputType": "Parameters", + "mean": 100, + "name": "w", + "refCount": 1, + "stdDev": 10, + "value": "RV.w", + "variableClass": "Uncertain" + } + ], + "remoteAppDir": "/home/justinbonus/SimCenter/HydroUQ/build", + "resultType": "SimCenterUQResultsSampling", + "runType": "runningLocal", + "spreadsheet": { + "data": [ + 1, + 104.9315175, + 1.968519206, + 0, + 0.4563617775, + 0, + 0.006884442381, + 0, + 4.780864287e-05, + 0, + 2, + 108.6737764, + 1.758603765, + 0, + 0.4494671005, + 0, + 0.006939267937, + 0, + 4.818934143e-05, + 0, + 3, + 111.5900966, + 1.616586751, + 0, + 0.4424447349, + 0, + 0.006980295445, + 0, + 4.847427291e-05, + 0, + 4, + 97.73704997, + 2.344678686, + 0, + 0.47438016, + 0, + 0.006771280117, + 0, + 4.702279231e-05, + 0, + 5, + 120.2006089, + 1.224203409, + 0, + 0.4217722255, + 0, + 0.007093549334, + 0, + 4.926045043e-05, + 0, + 6, + 95.23811437, + 2.454940938, + 0, + 0.4830802733, + 0, + 0.006729359048, + 0, + 4.673167373e-05, + 0, + 7, + 122.5549904, + 1.130271373, + 0, + 0.4164384733, + 0, + 0.00712257894, + 0, + 4.94620031e-05, + 0, + 8, + 89.35044249, + 2.656792036, + 0, + 0.5055846815, + 0, + 0.006624749231, + 0, + 4.600522326e-05, + 0, + 9, + 96.0794501, + 2.403317787, + 0, + 0.486895187, + 0, + 0.006743630058, + 0, + 4.683077555e-05, + 0, + 10, + 99.67887733, + 2.246727198, + 0, + 0.4740974947, + 0, + 0.006802899332, + 0, + 4.724238157e-05, + 0, + 11, + 107.0772479, + 1.85338222, + 0, + 0.4527103161, + 0, + 0.006916189281, + 0, + 4.802908279e-05, + 0, + 12, + 92.54768838, + 2.554541137, + 0, + 0.5076436095, + 0, + 0.006682619333, + 0, + 4.640710766e-05, + 0, + 13, + 109.4930095, + 1.716495245, + 0, + 0.4477288598, + 0, + 0.006950937801, + 0, + 4.827038268e-05, + 0, + 14, + 114.7271151, + 1.446994266, + 0, + 0.4331649019, + 0, + 0.007022879249, + 0, + 4.87700096e-05, + 0, + 15, + 100.7608102, + 2.196459926, + 0, + 0.4666754626, + 0, + 0.006820162902, + 0, + 4.73622735e-05, + 0, + 16, + 95.54261359, + 2.435436925, + 0, + 0.4835304585, + 0, + 0.006734542682, + 0, + 4.676767005e-05, + 0, + 17, + 103.8660896, + 2.030063793, + 0, + 0.4608413349, + 0, + 0.006868354059, + 0, + 4.769692904e-05, + 0, + 18, + 107.9271348, + 1.80282243, + 0, + 0.4511004331, + 0, + 0.006928530912, + 0, + 4.811478175e-05, + 0, + 19, + 106.6428373, + 1.877169813, + 0, + 0.4527338219, + 0, + 0.00690983079, + 0, + 4.798493112e-05, + 0, + 20, + 107.5894388, + 1.823346109, + 0, + 0.4518693343, + 0, + 0.006923642489, + 0, + 4.808083669e-05, + 0, + 21, + 111.1272284, + 1.641570529, + 0, + 0.4438386691, + 0, + 0.006973878278, + 0, + 4.84297039e-05, + 0, + 22, + 104.4353425, + 1.997689714, + 0, + 0.4588744781, + 0, + 0.006876977457, + 0, + 4.775680848e-05, + 0, + 23, + 96.85378885, + 2.371497581, + 0, + 0.4914475396, + 0, + 0.006756623101, + 0, + 4.692100498e-05, + 0, + 24, + 92.58616115, + 2.553165175, + 0, + 0.5067241186, + 0, + 0.006683299881, + 0, + 4.641183351e-05, + 0, + 25, + 96.57710555, + 2.380825182, + 0, + 0.491227064, + 0, + 0.00675199596, + 0, + 4.688887182e-05, + 0, + 26, + 98.76713483, + 2.294647869, + 0, + 0.4742170354, + 0, + 0.006788155748, + 0, + 4.71399897e-05, + 0, + 27, + 92.13651546, + 2.57015708, + 0, + 0.5130962195, + 0, + 0.006675323349, + 0, + 4.635644266e-05, + 0, + 28, + 97.99116608, + 2.334541202, + 0, + 0.4702141235, + 0, + 0.006775464926, + 0, + 4.705185463e-05, + 0, + 29, + 115.5286508, + 1.422984291, + 0, + 0.4323069636, + 0, + 0.007033511573, + 0, + 4.884383062e-05, + 0, + 30, + 98.05681535, + 2.331641146, + 0, + 0.4696442227, + 0, + 0.006776543729, + 0, + 4.705934664e-05, + 0, + 31, + 105.0352818, + 1.962515258, + 0, + 0.4557844121, + 0, + 0.006885997517, + 0, + 4.781944124e-05, + 0, + 32, + 91.22976812, + 2.604234152, + 0, + 0.4897573595, + 0, + 0.00665908469, + 0, + 4.624367518e-05, + 0, + 33, + 75.91040308, + 2.805215609, + 0, + 0.5365844087, + 0, + 0.006350072652, + 0, + 4.409467757e-05, + 0, + 34, + 91.41475142, + 2.597832596, + 0, + 0.4959742666, + 0, + 0.00666241437, + 0, + 4.626679808e-05, + 0, + 35, + 108.4784603, + 1.769775286, + 0, + 0.449879832, + 0, + 0.006936468608, + 0, + 4.816990212e-05, + 0, + 36, + 91.78599315, + 2.583941439, + 0, + 0.5083217944, + 0, + 0.006669070481, + 0, + 4.63130208e-05, + 0, + 37, + 86.68238204, + 2.701890917, + 0, + 0.5116948308, + 0, + 0.006574312455, + 0, + 4.56549425e-05, + 0, + 38, + 89.00579749, + 2.666570621, + 0, + 0.5082671868, + 0, + 0.006618348957, + 0, + 4.59607732e-05, + 0, + 39, + 87.15735995, + 2.701388846, + 0, + 0.5117813012, + 0, + 0.006583444216, + 0, + 4.57183597e-05, + 0, + 40, + 104.3032217, + 2.005409915, + 0, + 0.4594230005, + 0, + 0.006874981661, + 0, + 4.77429501e-05, + 0, + 41, + 95.51313699, + 2.437328246, + 0, + 0.483446866, + 0, + 0.006734041814, + 0, + 4.67641919e-05, + 0, + 42, + 92.40386282, + 2.559838586, + 0, + 0.5106169462, + 0, + 0.006680071979, + 0, + 4.638941831e-05, + 0, + 43, + 96.47442699, + 2.384807632, + 0, + 0.4905510688, + 0, + 0.006750274435, + 0, + 4.687691677e-05, + 0, + 44, + 104.2628058, + 2.007753413, + 0, + 0.4595792887, + 0, + 0.006874370465, + 0, + 4.773870608e-05, + 0, + 45, + 104.2106089, + 2.010764432, + 0, + 0.4597732238, + 0, + 0.006873580635, + 0, + 4.773322165e-05, + 0, + 46, + 111.4568413, + 1.624044935, + 0, + 0.4428642334, + 0, + 0.006978451596, + 0, + 4.846146683e-05, + 0, + 47, + 98.92065651, + 2.286049005, + 0, + 0.4757707661, + 0, + 0.006790650953, + 0, + 4.715731848e-05, + 0, + 48, + 101.8861359, + 2.132405809, + 0, + 0.465082112, + 0, + 0.006837856114, + 0, + 4.748514581e-05, + 0, + 49, + 99.42940002, + 2.258858568, + 0, + 0.4762559442, + 0, + 0.006798882989, + 0, + 4.721448869e-05, + 0, + 50, + 103.2508288, + 2.061646378, + 0, + 0.4620609389, + 0, + 0.006858961711, + 0, + 4.763170875e-05, + 0, + 51, + 96.97996034, + 2.367739305, + 0, + 0.4905101934, + 0, + 0.006758727454, + 0, + 4.693561874e-05, + 0, + 52, + 115.2630994, + 1.430308698, + 0, + 0.4325457634, + 0, + 0.007030000049, + 0, + 4.881945116e-05, + 0, + 53, + 97.68311571, + 2.346614069, + 0, + 0.4755883261, + 0, + 0.006770390087, + 0, + 4.701661132e-05, + 0, + 54, + 104.7666672, + 1.978165466, + 0, + 0.4572601006, + 0, + 0.00688196749, + 0, + 4.779145797e-05, + 0, + 55, + 91.69078549, + 2.587611981, + 0, + 0.5055845896, + 0, + 0.006667366789, + 0, + 4.630118973e-05, + 0, + 56, + 93.33522048, + 2.530493929, + 0, + 0.4894259011, + 0, + 0.006696478468, + 0, + 4.650334737e-05, + 0, + 57, + 87.07719595, + 2.701698853, + 0, + 0.5118688924, + 0, + 0.006581907774, + 0, + 4.570768945e-05, + 0, + 58, + 94.69874787, + 2.485932333, + 0, + 0.4835516479, + 0, + 0.006720124901, + 0, + 4.666755032e-05, + 0, + 59, + 91.44014373, + 2.596923812, + 0, + 0.4968879466, + 0, + 0.006662870749, + 0, + 4.626996737e-05, + 0, + 60, + 90.43288823, + 2.62773443, + 0, + 0.4855212042, + 0, + 0.00664463997, + 0, + 4.614336204e-05, + 0, + 61, + 83.44152474, + 2.693043513, + 0, + 0.5159269728, + 0, + 0.006510147216, + 0, + 4.520942412e-05, + 0, + 62, + 104.8348729, + 1.974161468, + 0, + 0.456893326, + 0, + 0.006882992093, + 0, + 4.779857252e-05, + 0, + 63, + 106.2493403, + 1.897613163, + 0, + 0.4524055511, + 0, + 0.006904041387, + 0, + 4.794473141e-05, + 0, + 64, + 105.6642086, + 1.927809425, + 0, + 0.4529089964, + 0, + 0.006895379499, + 0, + 4.788458642e-05, + 0, + 65, + 100.8398891, + 2.192375389, + 0, + 0.4665823576, + 0, + 0.006821414931, + 0, + 4.737096848e-05, + 0, + 66, + 120.5003768, + 1.209201484, + 0, + 0.4210499502, + 0, + 0.007097290979, + 0, + 4.928641252e-05, + 0, + 67, + 103.8131666, + 2.032924975, + 0, + 0.460975449, + 0, + 0.006867549112, + 0, + 4.769133957e-05, + 0, + 68, + 90.75058252, + 2.619026548, + 0, + 0.4823778167, + 0, + 0.006650418497, + 0, + 4.618349214e-05, + 0, + 69, + 101.7192656, + 2.14218433, + 0, + 0.465493127, + 0, + 0.006835249159, + 0, + 4.746704185e-05, + 0, + 70, + 100.2810173, + 2.219431992, + 0, + 0.468392848, + 0, + 0.006812538063, + 0, + 4.730932083e-05, + 0, + 71, + 120.6455179, + 1.202217674, + 0, + 0.4207005236, + 0, + 0.007099097853, + 0, + 4.929895079e-05, + 0, + 72, + 106.416758, + 1.888999941, + 0, + 0.4525431848, + 0, + 0.006906508033, + 0, + 4.796185895e-05, + 0, + 73, + 113.2769883, + 1.514164486, + 0, + 0.4374708296, + 0, + 0.007003388754, + 0, + 4.86346608e-05, + 0, + 74, + 105.5858913, + 1.931965902, + 0, + 0.4531526857, + 0, + 0.006894215283, + 0, + 4.787650253e-05, + 0, + 75, + 101.5587664, + 2.151679895, + 0, + 0.4658304832, + 0, + 0.00683273628, + 0, + 4.744959109e-05, + 0, + 76, + 104.6490711, + 1.985095073, + 0, + 0.4578686098, + 0, + 0.006880198824, + 0, + 4.777917685e-05, + 0, + 77, + 101.7855108, + 2.138284512, + 0, + 0.4653359525, + 0, + 0.006836284776, + 0, + 4.74742337e-05, + 0, + 78, + 93.40670292, + 2.528673582, + 0, + 0.4884199393, + 0, + 0.006697729037, + 0, + 4.651203143e-05, + 0, + 79, + 96.49802981, + 2.38386356, + 0, + 0.4907263968, + 0, + 0.006750670373, + 0, + 4.687966634e-05, + 0, + 80, + 92.71679022, + 2.548640758, + 0, + 0.5033771347, + 0, + 0.006685607893, + 0, + 4.642786074e-05, + 0, + 81, + 102.3366617, + 2.107216015, + 0, + 0.4638731308, + 0, + 0.006844865773, + 0, + 4.753382371e-05, + 0, + 82, + 94.68841076, + 2.486447449, + 0, + 0.4835648693, + 0, + 0.00671994727, + 0, + 4.666631683e-05, + 0, + 83, + 99.37841722, + 2.261440441, + 0, + 0.4765491536, + 0, + 0.00679806056, + 0, + 4.720877705e-05, + 0, + 84, + 80.71203961, + 2.655883411, + 0, + 0.5206339381, + 0, + 0.006453619437, + 0, + 4.481695313e-05, + 0, + 85, + 97.40841144, + 2.355494068, + 0, + 0.4824444724, + 0, + 0.006765846882, + 0, + 4.698506029e-05, + 0, + 86, + 81.82347888, + 2.677646616, + 0, + 0.520217608, + 0, + 0.006476897631, + 0, + 4.497860051e-05, + 0, + 87, + 97.54936191, + 2.351122299, + 0, + 0.4788627749, + 0, + 0.006768180085, + 0, + 4.700126357e-05, + 0, + 88, + 94.10466957, + 2.509973232, + 0, + 0.4842664789, + 0, + 0.006709876042, + 0, + 4.659638121e-05, + 0, + 89, + 94.07815565, + 2.510807903, + 0, + 0.4843114849, + 0, + 0.006709416709, + 0, + 4.659319157e-05, + 0, + 90, + 103.6546191, + 2.041319713, + 0, + 0.461336565, + 0, + 0.00686513432, + 0, + 4.767457141e-05, + 0, + 91, + 87.58978638, + 2.69787109, + 0, + 0.5107095617, + 0, + 0.006591699155, + 0, + 4.577568923e-05, + 0, + 92, + 103.145994, + 2.066755115, + 0, + 0.4622284787, + 0, + 0.006857353801, + 0, + 4.762054329e-05, + 0, + 93, + 118.4206413, + 1.318491187, + 0, + 0.4260762181, + 0, + 0.007071059578, + 0, + 4.910442046e-05, + 0, + 94, + 94.60331961, + 2.490554894, + 0, + 0.4836713696, + 0, + 0.006718484139, + 0, + 4.665615667e-05, + 0, + 95, + 101.3832951, + 2.162027951, + 0, + 0.4661140402, + 0, + 0.006829982842, + 0, + 4.743046964e-05, + 0, + 96, + 93.21918535, + 2.53353325, + 0, + 0.4913692362, + 0, + 0.006694445858, + 0, + 4.648923272e-05, + 0, + 97, + 99.50637598, + 2.255028404, + 0, + 0.475701246, + 0, + 0.006800123661, + 0, + 4.722310496e-05, + 0, + 98, + 100.6209166, + 2.203458023, + 0, + 0.4669339876, + 0, + 0.006817944773, + 0, + 4.734686918e-05, + 0, + 99, + 111.5353072, + 1.619678417, + 0, + 0.442618839, + 0, + 0.006979537677, + 0, + 4.846900998e-05, + 0, + 100, + 91.35918606, + 2.59979651, + 0, + 0.4940064801, + 0, + 0.006661415117, + 0, + 4.62598588e-05, + 0, + 101, + 110.1111096, + 1.688765904, + 0, + 0.4463741672, + 0, + 0.006959666945, + 0, + 4.833100482e-05, + 0, + 102, + 105.7408736, + 1.923779396, + 0, + 0.4527134131, + 0, + 0.006896518035, + 0, + 4.789249199e-05, + 0, + 103, + 106.2189307, + 1.899170301, + 0, + 0.4523869588, + 0, + 0.006903592792, + 0, + 4.794161653e-05, + 0, + 104, + 99.11648375, + 2.275249734, + 0, + 0.476892899, + 0, + 0.006793826307, + 0, + 4.717937081e-05, + 0, + 105, + 94.1881012, + 2.5072338, + 0, + 0.4841448958, + 0, + 0.006711320352, + 0, + 4.660641062e-05, + 0, + 106, + 104.8123823, + 1.975480072, + 0, + 0.4570152023, + 0, + 0.006882654333, + 0, + 4.779622721e-05, + 0, + 107, + 114.0164728, + 1.47551514, + 0, + 0.4350989082, + 0, + 0.007013369101, + 0, + 4.870397103e-05, + 0, + 108, + 81.46619704, + 2.670428373, + 0, + 0.520911943, + 0, + 0.00646945191, + 0, + 4.492690401e-05, + 0, + 109, + 102.7038898, + 2.088323524, + 0, + 0.4630138827, + 0, + 0.006850548612, + 0, + 4.757328695e-05, + 0, + 110, + 90.27310952, + 2.631945777, + 0, + 0.4885894434, + 0, + 0.006641723709, + 0, + 4.612310931e-05, + 0, + 111, + 97.06931949, + 2.365182285, + 0, + 0.4894083975, + 0, + 0.006760215681, + 0, + 4.694595382e-05, + 0, + 112, + 111.8346789, + 1.602386404, + 0, + 0.441646396, + 0, + 0.006983672192, + 0, + 4.849772548e-05, + 0, + 113, + 112.9209459, + 1.535355958, + 0, + 0.4383971905, + 0, + 0.006998552579, + 0, + 4.860107348e-05, + 0, + 114, + 108.5167938, + 1.767553046, + 0, + 0.4497984367, + 0, + 0.006937018539, + 0, + 4.817372097e-05, + 0, + 115, + 99.98939455, + 2.232523492, + 0, + 0.4708227759, + 0, + 0.006807879633, + 0, + 4.727696892e-05, + 0, + 116, + 109.005323, + 1.740611001, + 0, + 0.4487684749, + 0, + 0.00694400465, + 0, + 4.822223498e-05, + 0, + 117, + 105.6367596, + 1.929261429, + 0, + 0.4529894424, + 0, + 0.00689497159, + 0, + 4.788175405e-05, + 0, + 118, + 109.8882862, + 1.698563256, + 0, + 0.4468709996, + 0, + 0.00695652754, + 0, + 4.830920203e-05, + 0, + 119, + 101.2991886, + 2.166932579, + 0, + 0.4662165796, + 0, + 0.006828660786, + 0, + 4.742128849e-05, + 0, + 120, + 109.6173902, + 1.710734871, + 0, + 0.4474610517, + 0, + 0.006952699561, + 0, + 4.828261756e-05, + 0, + 121, + 86.76945305, + 2.702020582, + 0, + 0.5118075835, + 0, + 0.00657599155, + 0, + 4.566660313e-05, + 0, + 122, + 114.2424771, + 1.4655189, + 0, + 0.4343532414, + 0, + 0.00701640216, + 0, + 4.87250334e-05, + 0, + 123, + 105.4939355, + 1.936902641, + 0, + 0.4534922812, + 0, + 0.006892846852, + 0, + 4.786700065e-05, + 0, + 124, + 115.9859632, + 1.410824205, + 0, + 0.4317031556, + 0, + 0.007039533451, + 0, + 4.888563535e-05, + 0, + 125, + 79.15091416, + 2.6661944, + 0, + 0.5214360054, + 0, + 0.006420392463, + 0, + 4.458599173e-05, + 0, + 126, + 104.0070256, + 2.022303153, + 0, + 0.4604470488, + 0, + 0.006870494969, + 0, + 4.771179527e-05, + 0, + 127, + 98.91613955, + 2.286301125, + 0, + 0.4757321855, + 0, + 0.006790577612, + 0, + 4.715680914e-05, + 0, + 128, + 97.59594622, + 2.349596525, + 0, + 0.4776903732, + 0, + 0.006768950243, + 0, + 4.700661207e-05, + 0, + 129, + 91.55349221, + 2.592785122, + 0, + 0.5009693994, + 0, + 0.006664905975, + 0, + 4.628410086e-05, + 0, + 130, + 101.4392427, + 2.158741183, + 0, + 0.4660339585, + 0, + 0.006830861452, + 0, + 4.743657122e-05, + 0, + 131, + 115.20439, + 1.43199124, + 0, + 0.432596014, + 0, + 0.007029222236, + 0, + 4.881405086e-05, + 0, + 132, + 99.93481255, + 2.234975751, + 0, + 0.4713776545, + 0, + 0.006807005708, + 0, + 4.727089967e-05, + 0, + 133, + 95.95679752, + 2.410079952, + 0, + 0.4858311632, + 0, + 0.006741559603, + 0, + 4.68163976e-05, + 0, + 134, + 82.46736064, + 2.687638471, + 0, + 0.5185667418, + 0, + 0.00649022287, + 0, + 4.50711093e-05, + 0, + 135, + 88.32644646, + 2.684580212, + 0, + 0.5092934382, + 0, + 0.006605635265, + 0, + 4.587247577e-05, + 0, + 136, + 104.4930157, + 1.99429874, + 0, + 0.4586170857, + 0, + 0.006877847594, + 0, + 4.77628505e-05, + 0, + 137, + 94.03518826, + 2.512126542, + 0, + 0.4843929174, + 0, + 0.006708671984, + 0, + 4.658802013e-05, + 0, + 138, + 100.4660715, + 2.210891139, + 0, + 0.4674260061, + 0, + 0.006815484732, + 0, + 4.732978479e-05, + 0, + 139, + 100.9348336, + 2.187347291, + 0, + 0.4665010575, + 0, + 0.006822916408, + 0, + 4.738139579e-05, + 0, + 140, + 114.6705233, + 1.448966274, + 0, + 0.4332672164, + 0, + 0.007022124799, + 0, + 4.876477096e-05, + 0, + 141, + 103.0105118, + 2.073322572, + 0, + 0.4624489812, + 0, + 0.006855272559, + 0, + 4.76060909e-05, + 0, + 142, + 114.5849355, + 1.452039604, + 0, + 0.4334405404, + 0, + 0.007020982844, + 0, + 4.875684154e-05, + 0, + 143, + 98.26203542, + 2.321872691, + 0, + 0.4692854831, + 0, + 0.006779909956, + 0, + 4.708272429e-05, + 0, + 144, + 93.29381391, + 2.531564778, + 0, + 0.4900749606, + 0, + 0.006695753511, + 0, + 4.64983132e-05, + 0, + 145, + 88.56493491, + 2.678657662, + 0, + 0.5092311169, + 0, + 0.006610113372, + 0, + 4.590357654e-05, + 0, + 146, + 93.06596871, + 2.537768296, + 0, + 0.4945131254, + 0, + 0.006691756981, + 0, + 4.647056086e-05, + 0, + 147, + 106.542789, + 1.882441412, + 0, + 0.4526570252, + 0, + 0.006908361505, + 0, + 4.797472886e-05, + 0, + 148, + 98.99479937, + 2.281926324, + 0, + 0.4763273511, + 0, + 0.006791854167, + 0, + 4.71656746e-05, + 0, + 149, + 92.91032335, + 2.542392096, + 0, + 0.4982772532, + 0, + 0.006689019689, + 0, + 4.645155276e-05, + 0, + 150, + 85.03007087, + 2.693540893, + 0, + 0.5117213178, + 0, + 0.006542007491, + 0, + 4.543061786e-05, + 0, + 151, + 108.0326297, + 1.796398451, + 0, + 0.4508586839, + 0, + 0.006930053901, + 0, + 4.812535745e-05, + 0, + 152, + 85.43929031, + 2.695328244, + 0, + 0.5109041155, + 0, + 0.006550087115, + 0, + 4.548671847e-05, + 0, + 153, + 115.0834316, + 1.43555329, + 0, + 0.4327055308, + 0, + 0.007027618036, + 0, + 4.88029128e-05, + 0, + 154, + 90.65455959, + 2.62172566, + 0, + 0.482763536, + 0, + 0.006648674731, + 0, + 4.617138228e-05, + 0, + 155, + 102.9034813, + 2.078517458, + 0, + 0.4626328828, + 0, + 0.006853625764, + 0, + 4.75946553e-05, + 0, + 156, + 79.98795891, + 2.65112753, + 0, + 0.5185017219, + 0, + 0.006438279212, + 0, + 4.47103699e-05, + 0, + 157, + 124.0376988, + 1.068101361, + 0, + 0.4163783239, + 0, + 0.007140432196, + 0, + 4.958625945e-05, + 0, + 158, + 105.3227355, + 1.946269684, + 0, + 0.4542567631, + 0, + 0.0068902949, + 0, + 4.78492808e-05, + 0, + 159, + 101.6280171, + 2.147579139, + 0, + 0.4656932599, + 0, + 0.006833821171, + 0, + 4.745712516e-05, + 0, + 160, + 80.26238438, + 2.651267281, + 0, + 0.519204181, + 0, + 0.006444108425, + 0, + 4.475087861e-05, + 0, + 161, + 94.40578934, + 2.499168002, + 0, + 0.483897016, + 0, + 0.006715081149, + 0, + 4.663252595e-05, + 0, + 162, + 86.30657594, + 2.700497524, + 0, + 0.5110267706, + 0, + 0.006567038864, + 0, + 4.560443143e-05, + 0, + 163, + 96.04888074, + 2.404961668, + 0, + 0.4866175547, + 0, + 0.006743114346, + 0, + 4.682719426e-05, + 0, + 164, + 96.00004045, + 2.407646086, + 0, + 0.4861902829, + 0, + 0.00674228996, + 0, + 4.682146944e-05, + 0, + 165, + 99.82492496, + 2.239957903, + 0, + 0.4725440761, + 0, + 0.006805244332, + 0, + 4.725866721e-05, + 0, + 166, + 104.7224665, + 1.980767248, + 0, + 0.4574927445, + 0, + 0.006881303017, + 0, + 4.778684406e-05, + 0, + 167, + 103.6979845, + 2.039049752, + 0, + 0.4612434526, + 0, + 0.0068657953, + 0, + 4.767916123e-05, + 0, + 168, + 114.9837763, + 1.438598668, + 0, + 0.4328080498, + 0, + 0.007026294666, + 0, + 4.879372436e-05, + 0, + 169, + 107.9086637, + 1.803948579, + 0, + 0.4511430151, + 0, + 0.00692826405, + 0, + 4.811292865e-05, + 0, + 170, + 95.06256951, + 2.465778484, + 0, + 0.4831357625, + 0, + 0.006726361012, + 0, + 4.67108548e-05, + 0, + 171, + 98.49477493, + 2.309720792, + 0, + 0.4710080129, + 0, + 0.006783716389, + 0, + 4.710915917e-05, + 0, + 172, + 114.1789559, + 1.468238202, + 0, + 0.4345549864, + 0, + 0.007015550491, + 0, + 4.871911925e-05, + 0, + 173, + 111.2075147, + 1.637424274, + 0, + 0.4436098659, + 0, + 0.006974993876, + 0, + 4.843745201e-05, + 0, + 174, + 110.6246176, + 1.665887044, + 0, + 0.4451625033, + 0, + 0.006966870232, + 0, + 4.838103178e-05, + 0, + 175, + 115.6246513, + 1.420415389, + 0, + 0.4322053019, + 0, + 0.007034778365, + 0, + 4.885262523e-05, + 0, + 176, + 103.0952868, + 2.069215216, + 0, + 0.4623099688, + 0, + 0.006856575284, + 0, + 4.761513719e-05, + 0, + 177, + 92.85693559, + 2.544059938, + 0, + 0.4996612021, + 0, + 0.006688079423, + 0, + 4.644502343e-05, + 0, + 178, + 92.10566808, + 2.571370953, + 0, + 0.5130552147, + 0, + 0.006674774299, + 0, + 4.635262991e-05, + 0, + 179, + 110.6426141, + 1.665058747, + 0, + 0.4451178498, + 0, + 0.006967121884, + 0, + 4.838277953e-05, + 0, + 180, + 87.33565788, + 2.700326284, + 0, + 0.5114385799, + 0, + 0.006586854626, + 0, + 4.574204442e-05, + 0, + 181, + 89.52252946, + 2.651975273, + 0, + 0.503401095, + 0, + 0.006627932701, + 0, + 4.60273324e-05, + 0, + 182, + 96.93529699, + 2.3690453, + 0, + 0.4909245859, + 0, + 0.006757982943, + 0, + 4.693044845e-05, + 0, + 183, + 106.4960474, + 1.884883372, + 0, + 0.4526159108, + 0, + 0.006907674441, + 0, + 4.796995811e-05, + 0, + 184, + 86.94747077, + 2.70199435, + 0, + 0.5119167463, + 0, + 0.006579417343, + 0, + 4.569039408e-05, + 0, + 185, + 89.26577448, + 2.65918686, + 0, + 0.5064458917, + 0, + 0.006623179946, + 0, + 4.599432457e-05, + 0, + 186, + 76.77102458, + 2.776870935, + 0, + 0.5341950615, + 0, + 0.006368856432, + 0, + 4.422644891e-05, + 0, + 187, + 108.8139347, + 1.750839391, + 0, + 0.4491722305, + 0, + 0.006941272654, + 0, + 4.820326287e-05, + 0, + 188, + 94.61268313, + 2.490114588, + 0, + 0.4836598988, + 0, + 0.006718645226, + 0, + 4.665727528e-05, + 0, + 189, + 90.01944861, + 2.638584061, + 0, + 0.4941230747, + 0, + 0.006637079971, + 0, + 4.609085939e-05, + 0, + 190, + 102.0962372, + 2.120392272, + 0, + 0.4645180916, + 0, + 0.006841130252, + 0, + 4.750788286e-05, + 0, + 191, + 117.8487891, + 1.345953968, + 0, + 0.427464371, + 0, + 0.007063734744, + 0, + 4.905359792e-05, + 0, + 192, + 98.05864389, + 2.331558741, + 0, + 0.4696315758, + 0, + 0.006776573763, + 0, + 4.705955522e-05, + 0, + 193, + 103.3538665, + 2.056576091, + 0, + 0.4618930613, + 0, + 0.006860539911, + 0, + 4.764266785e-05, + 0, + 194, + 93.92372851, + 2.515371637, + 0, + 0.484668414, + 0, + 0.006706738101, + 0, + 4.65745911e-05, + 0, + 195, + 91.1981592, + 2.605288358, + 0, + 0.4888237652, + 0, + 0.006658514858, + 0, + 4.623971797e-05, + 0, + 196, + 75.97725916, + 2.803438383, + 0, + 0.5363989619, + 0, + 0.006351532951, + 0, + 4.410494103e-05, + 0, + 197, + 92.0487018, + 2.573617746, + 0, + 0.5127835382, + 0, + 0.006673759741, + 0, + 4.634558453e-05, + 0, + 198, + 94.21396544, + 2.506347571, + 0, + 0.4841118784, + 0, + 0.006711767764, + 0, + 4.660951749e-05, + 0, + 199, + 105.8869785, + 1.916187656, + 0, + 0.4524599446, + 0, + 0.006898684758, + 0, + 4.790753692e-05, + 0, + 200, + 95.6846495, + 2.426423316, + 0, + 0.4840773014, + 0, + 0.006736953387, + 0, + 4.678441062e-05, + 0, + 201, + 95.60138137, + 2.43168317, + 0, + 0.4837270525, + 0, + 0.006735540676, + 0, + 4.677460037e-05, + 0, + 202, + 117.0229639, + 1.379346942, + 0, + 0.4294660449, + 0, + 0.007053070505, + 0, + 4.89795948e-05, + 0, + 203, + 107.7803221, + 1.811771569, + 0, + 0.4514392327, + 0, + 0.006926408163, + 0, + 4.810004138e-05, + 0, + 204, + 99.73900129, + 2.24391572, + 0, + 0.473467137, + 0, + 0.006803865263, + 0, + 4.72490898e-05, + 0, + 205, + 102.1359578, + 2.118170238, + 0, + 0.4644097398, + 0, + 0.006841748219, + 0, + 4.751217427e-05, + 0, + 206, + 98.24913069, + 2.322516148, + 0, + 0.4692482798, + 0, + 0.006779698552, + 0, + 4.708125614e-05, + 0, + 207, + 97.49111552, + 2.35297009, + 0, + 0.4803487728, + 0, + 0.006767216447, + 0, + 4.699457143e-05, + 0, + 208, + 110.5704671, + 1.668364247, + 0, + 0.445295836, + 0, + 0.006966112701, + 0, + 4.837577066e-05, + 0, + 209, + 104.4634053, + 1.996040907, + 0, + 0.4587505806, + 0, + 0.006877400932, + 0, + 4.775974899e-05, + 0, + 210, + 104.1112718, + 2.016438915, + 0, + 0.4601181056, + 0, + 0.006872076021, + 0, + 4.772277386e-05, + 0, + 211, + 86.39205238, + 2.700912103, + 0, + 0.5111807502, + 0, + 0.006568697017, + 0, + 4.561594624e-05, + 0, + 212, + 91.84771051, + 2.581534673, + 0, + 0.5098139603, + 0, + 0.006670173666, + 0, + 4.63206817e-05, + 0, + 213, + 88.61905912, + 2.677237335, + 0, + 0.5092012333, + 0, + 0.006611127405, + 0, + 4.591061907e-05, + 0, + 214, + 99.87591147, + 2.237637051, + 0, + 0.4719972982, + 0, + 0.006806061912, + 0, + 4.726434516e-05, + 0, + 215, + 108.0155032, + 1.797439987, + 0, + 0.4508977192, + 0, + 0.006929806786, + 0, + 4.812364147e-05, + 0, + 216, + 101.9443804, + 2.129035681, + 0, + 0.4649289417, + 0, + 0.006838764687, + 0, + 4.749145536e-05, + 0, + 217, + 110.2984489, + 1.680535675, + 0, + 0.4459446265, + 0, + 0.006962299965, + 0, + 4.834929104e-05, + 0, + 218, + 116.7178783, + 1.389635466, + 0, + 0.430189463, + 0, + 0.00704910484, + 0, + 4.895207195e-05, + 0, + 219, + 99.71891806, + 2.24485066, + 0, + 0.4736799831, + 0, + 0.006803542699, + 0, + 4.724684965e-05, + 0, + 220, + 119.1557073, + 1.279881019, + 0, + 0.4242956682, + 0, + 0.007080403733, + 0, + 4.916924831e-05, + 0, + 221, + 78.12294953, + 2.711418431, + 0, + 0.5294662947, + 0, + 0.006398234496, + 0, + 4.443167755e-05, + 0, + 222, + 85.74692532, + 2.69713457, + 0, + 0.5105972401, + 0, + 0.006556126711, + 0, + 4.55286561e-05, + 0, + 223, + 95.45181636, + 2.441272613, + 0, + 0.4833033778, + 0, + 0.006732999216, + 0, + 4.675695184e-05, + 0, + 224, + 98.68106787, + 2.299463241, + 0, + 0.4731973534, + 0, + 0.006786754643, + 0, + 4.713025927e-05, + 0, + 225, + 92.93761363, + 2.54155597, + 0, + 0.4975845251, + 0, + 0.006689500059, + 0, + 4.645488851e-05, + 0, + 226, + 104.0304926, + 2.020991795, + 0, + 0.4603758607, + 0, + 0.006870851068, + 0, + 4.771426797e-05, + 0, + 227, + 87.92469414, + 2.692909528, + 0, + 0.5097679843, + 0, + 0.006598054528, + 0, + 4.58198272e-05, + 0, + 228, + 88.21160336, + 2.687196614, + 0, + 0.5093518176, + 0, + 0.006603473033, + 0, + 4.585745894e-05, + 0, + 229, + 112.3135748, + 1.573141259, + 0, + 0.4400864735, + 0, + 0.006990255828, + 0, + 4.854345085e-05, + 0, + 230, + 87.87048155, + 2.693842997, + 0, + 0.5098947884, + 0, + 0.006597027993, + 0, + 4.581269789e-05, + 0, + 231, + 97.08992362, + 2.36459989, + 0, + 0.4891037975, + 0, + 0.006760558578, + 0, + 4.69483351e-05, + 0, + 232, + 94.32400113, + 2.502365022, + 0, + 0.4839852841, + 0, + 0.006713669468, + 0, + 4.662272309e-05, + 0, + 233, + 111.8509657, + 1.601419471, + 0, + 0.4415924356, + 0, + 0.006983896705, + 0, + 4.849928479e-05, + 0, + 234, + 85.92394978, + 2.698250405, + 0, + 0.5105941988, + 0, + 0.00655958881, + 0, + 4.555269684e-05, + 0, + 235, + 92.44360186, + 2.558352494, + 0, + 0.5098828252, + 0, + 0.006680776321, + 0, + 4.639430941e-05, + 0, + 236, + 116.3465101, + 1.400874135, + 0, + 0.4310181238, + 0, + 0.007044258574, + 0, + 4.891843469e-05, + 0, + 237, + 103.5224609, + 2.048121974, + 0, + 0.4615977672, + 0, + 0.006863117643, + 0, + 4.766056766e-05, + 0, + 238, + 94.90710472, + 2.474840497, + 0, + 0.4832888268, + 0, + 0.006723699994, + 0, + 4.669237626e-05, + 0, + 239, + 107.5360567, + 1.826557827, + 0, + 0.4519838422, + 0, + 0.006922867886, + 0, + 4.807545792e-05, + 0, + 240, + 105.339267, + 1.945354901, + 0, + 0.4541765589, + 0, + 0.006890541565, + 0, + 4.785099356e-05, + 0, + 241, + 96.01541267, + 2.406793643, + 0, + 0.4863224261, + 0, + 0.00674254949, + 0, + 4.68232717e-05, + 0, + 242, + 113.7590019, + 1.487984641, + 0, + 0.4359858266, + 0, + 0.007009903973, + 0, + 4.867990749e-05, + 0, + 243, + 112.4153531, + 1.566785442, + 0, + 0.439776308, + 0, + 0.006991650258, + 0, + 4.855313554e-05, + 0, + 244, + 111.603038, + 1.61585148, + 0, + 0.4424033041, + 0, + 0.006980474359, + 0, + 4.847551553e-05, + 0, + 245, + 90.16268071, + 2.634833597, + 0, + 0.4909662183, + 0, + 0.006639704215, + 0, + 4.610908432e-05, + 0, + 246, + 78.47264383, + 2.693904571, + 0, + 0.5272055637, + 0, + 0.006405793193, + 0, + 4.448435473e-05, + 0, + 247, + 108.4505323, + 1.771402692, + 0, + 0.449939313, + 0, + 0.006936067794, + 0, + 4.816711877e-05, + 0, + 248, + 107.967562, + 1.800358655, + 0, + 0.4510074548, + 0, + 0.006929114775, + 0, + 4.811883611e-05, + 0, + 249, + 92.45224838, + 2.558031281, + 0, + 0.5097133029, + 0, + 0.006680929522, + 0, + 4.639537327e-05, + 0, + 250, + 96.31006641, + 2.39188215, + 0, + 0.4891106587, + 0, + 0.006747513803, + 0, + 4.685774576e-05, + 0, + 251, + 106.6830455, + 1.875032148, + 0, + 0.4527584874, + 0, + 0.006910420762, + 0, + 4.798902771e-05, + 0, + 252, + 96.88840401, + 2.370443896, + 0, + 0.4912618459, + 0, + 0.006757200785, + 0, + 4.692501672e-05, + 0, + 253, + 97.79149222, + 2.342650828, + 0, + 0.4732564274, + 0, + 0.006772177878, + 0, + 4.702902699e-05, + 0, + 254, + 80.76833212, + 2.656761984, + 0, + 0.5207653671, + 0, + 0.006454806477, + 0, + 4.482519822e-05, + 0, + 255, + 91.28581759, + 2.602336081, + 0, + 0.4915236286, + 0, + 0.006660094498, + 0, + 4.625068778e-05, + 0, + 256, + 95.24036024, + 2.454799213, + 0, + 0.4830807249, + 0, + 0.006729397359, + 0, + 4.673193976e-05, + 0, + 257, + 103.390888, + 2.054738344, + 0, + 0.4618309413, + 0, + 0.006861106439, + 0, + 4.764660184e-05, + 0, + 258, + 105.6157322, + 1.930377182, + 0, + 0.4530547155, + 0, + 0.006894659015, + 0, + 4.787958365e-05, + 0, + 259, + 100.7241576, + 2.198321201, + 0, + 0.4667298682, + 0, + 0.006819582146, + 0, + 4.73582403e-05, + 0, + 260, + 104.1789502, + 2.012581268, + 0, + 0.4598865502, + 0, + 0.006873101325, + 0, + 4.77298934e-05, + 0, + 261, + 112.2096939, + 1.57959722, + 0, + 0.4404138331, + 0, + 0.006988830869, + 0, + 4.85335541e-05, + 0, + 262, + 93.53851395, + 2.525373814, + 0, + 0.4869269527, + 0, + 0.006700031843, + 0, + 4.652802232e-05, + 0, + 263, + 109.7741355, + 1.7036415, + 0, + 0.4471210727, + 0, + 0.006954916011, + 0, + 4.829801026e-05, + 0, + 264, + 93.95654885, + 2.514440274, + 0, + 0.4845760257, + 0, + 0.006707307854, + 0, + 4.657854751e-05, + 0, + 265, + 86.23157304, + 2.700098981, + 0, + 0.510903193, + 0, + 0.006565582042, + 0, + 4.559431482e-05, + 0, + 266, + 93.11311964, + 2.536434065, + 0, + 0.4934790419, + 0, + 0.006692585058, + 0, + 4.647631113e-05, + 0, + 267, + 100.5203606, + 2.208319375, + 0, + 0.4672241234, + 0, + 0.006816347809, + 0, + 4.733577866e-05, + 0, + 268, + 107.2406391, + 1.844015155, + 0, + 0.4525204343, + 0, + 0.006918572002, + 0, + 4.804562792e-05, + 0, + 269, + 95.01744943, + 2.468468643, + 0, + 0.4831729557, + 0, + 0.006725589286, + 0, + 4.670549581e-05, + 0, + 270, + 108.3415653, + 1.777814682, + 0, + 0.4501732351, + 0, + 0.006934502632, + 0, + 4.815624997e-05, + 0, + 271, + 95.19317646, + 2.457762875, + 0, + 0.4830781713, + 0, + 0.006728592252, + 0, + 4.672634894e-05, + 0, + 272, + 97.3558106, + 2.357048819, + 0, + 0.4837364084, + 0, + 0.006764975031, + 0, + 4.697900561e-05, + 0, + 273, + 100.6697213, + 2.20104888, + 0, + 0.4668271754, + 0, + 0.006818719084, + 0, + 4.735224657e-05, + 0, + 274, + 108.104726, + 1.792022901, + 0, + 0.4506954732, + 0, + 0.006931093599, + 0, + 4.813257719e-05, + 0, + 275, + 90.79369518, + 2.617790625, + 0, + 0.4823969825, + 0, + 0.006651200636, + 0, + 4.618892381e-05, + 0, + 276, + 88.18488312, + 2.687780178, + 0, + 0.5093727663, + 0, + 0.006602969407, + 0, + 4.585396122e-05, + 0, + 277, + 100.6468953, + 2.202179845, + 0, + 0.4668746481, + 0, + 0.006818357, + 0, + 4.734973199e-05, + 0, + 278, + 111.7808438, + 1.605564712, + 0, + 0.4418243144, + 0, + 0.006982929769, + 0, + 4.849256912e-05, + 0, + 279, + 89.92098219, + 2.641180583, + 0, + 0.496238104, + 0, + 0.006635272714, + 0, + 4.607830823e-05, + 0, + 280, + 106.7233302, + 1.872878515, + 0, + 0.4527787318, + 0, + 0.00691101156, + 0, + 4.799313003e-05, + 0, + 281, + 89.70627339, + 2.646932842, + 0, + 0.5004348798, + 0, + 0.006631322862, + 0, + 4.605087689e-05, + 0, + 282, + 103.796315, + 2.033829811, + 0, + 0.4610166513, + 0, + 0.006867292687, + 0, + 4.768955897e-05, + 0, + 283, + 108.2301358, + 1.784460578, + 0, + 0.450416304, + 0, + 0.006932899955, + 0, + 4.814512073e-05, + 0, + 284, + 104.3912723, + 2.000273491, + 0, + 0.4590638451, + 0, + 0.006876312118, + 0, + 4.775218851e-05, + 0, + 285, + 66.5875734, + 2.878384674, + 0, + 0.5628005435, + 0, + 0.006154394858, + 0, + 4.26472549e-05, + 0, + 286, + 116.4515417, + 1.397819393, + 0, + 0.430792865, + 0, + 0.007045631334, + 0, + 4.892796313e-05, + 0, + 287, + 97.12258161, + 2.363679885, + 0, + 0.4885836181, + 0, + 0.006761101884, + 0, + 4.695210813e-05, + 0, + 288, + 108.2922393, + 1.780746623, + 0, + 0.4502802938, + 0, + 0.00693379345, + 0, + 4.81513253e-05, + 0, + 289, + 94.29177313, + 2.503568217, + 0, + 0.4840207742, + 0, + 0.006713112777, + 0, + 4.661885738e-05, + 0, + 290, + 100.7276808, + 2.19814316, + 0, + 0.4667242771, + 0, + 0.006819637982, + 0, + 4.735862807e-05, + 0, + 291, + 73.42193608, + 2.842731617, + 0, + 0.5435123802, + 0, + 0.0062958249, + 0, + 4.371023363e-05, + 0, + 292, + 98.96808249, + 2.283408116, + 0, + 0.4761440409, + 0, + 0.006791420735, + 0, + 4.716266449e-05, + 0, + 293, + 96.95210656, + 2.368551063, + 0, + 0.4907793389, + 0, + 0.006758263201, + 0, + 4.693239471e-05, + 0, + 294, + 82.02654035, + 2.681318809, + 0, + 0.519725307, + 0, + 0.00648111312, + 0, + 4.500786706e-05, + 0, + 295, + 92.00553627, + 2.575322222, + 0, + 0.5124070886, + 0, + 0.006672990433, + 0, + 4.634024223e-05, + 0, + 296, + 91.14493775, + 2.607036967, + 0, + 0.4873694176, + 0, + 0.006657554826, + 0, + 4.623305101e-05, + 0, + 297, + 119.9916048, + 1.235039159, + 0, + 0.4222762541, + 0, + 0.007090932768, + 0, + 4.924229612e-05, + 0, + 298, + 91.59544922, + 2.591221384, + 0, + 0.5024394933, + 0, + 0.006665658508, + 0, + 4.628932676e-05, + 0, + 299, + 94.73094978, + 2.484305582, + 0, + 0.4835102321, + 0, + 0.006720678094, + 0, + 4.667139176e-05, + 0, + 300, + 93.4810243, + 2.526807708, + 0, + 0.4875227255, + 0, + 0.006699027979, + 0, + 4.65210514e-05, + 0, + 301, + 104.1998426, + 2.011383121, + 0, + 0.459812125, + 0, + 0.006873417657, + 0, + 4.773208996e-05, + 0, + 302, + 110.9657027, + 1.649679636, + 0, + 0.4442832482, + 0, + 0.006971630626, + 0, + 4.841409346e-05, + 0, + 303, + 108.6166558, + 1.761830685, + 0, + 0.4495874012, + 0, + 0.006938449953, + 0, + 4.81836611e-05, + 0, + 304, + 107.113152, + 1.851343483, + 0, + 0.4526767018, + 0, + 0.006916713281, + 0, + 4.803272133e-05, + 0, + 305, + 97.51632923, + 2.352177972, + 0, + 0.479704377, + 0, + 0.006767633679, + 0, + 4.699746897e-05, + 0, + 306, + 82.97313629, + 2.691763677, + 0, + 0.5171977928, + 0, + 0.006500603455, + 0, + 4.51431713e-05, + 0, + 307, + 113.6580409, + 1.493178038, + 0, + 0.4363232266, + 0, + 0.007008542357, + 0, + 4.867045157e-05, + 0, + 308, + 99.07993127, + 2.277241168, + 0, + 0.4767710985, + 0, + 0.006793234238, + 0, + 4.717525898e-05, + 0, + 309, + 114.7810818, + 1.445156514, + 0, + 0.4330760336, + 0, + 0.007023598239, + 0, + 4.877500196e-05, + 0, + 310, + 95.88402863, + 2.41428858, + 0, + 0.4852729989, + 0, + 0.006740329607, + 0, + 4.68078561e-05, + 0, + 311, + 106.3001983, + 1.895005128, + 0, + 0.4524422445, + 0, + 0.00690479125, + 0, + 4.79499382e-05, + 0, + 312, + 102.1487351, + 2.117459135, + 0, + 0.464374934, + 0, + 0.006841946937, + 0, + 4.751355424e-05, + 0, + 313, + 105.3669167, + 1.943829818, + 0, + 0.4540451564, + 0, + 0.006890954008, + 0, + 4.785385742e-05, + 0, + 314, + 99.2979572, + 2.265588026, + 0, + 0.4768730293, + 0, + 0.006796761476, + 0, + 4.719975511e-05, + 0, + 315, + 93.75100929, + 2.520012608, + 0, + 0.4853672957, + 0, + 0.00670373555, + 0, + 4.655374115e-05, + 0, + 316, + 86.1317893, + 2.699528895, + 0, + 0.5107636549, + 0, + 0.00656364121, + 0, + 4.558083722e-05, + 0, + 317, + 103.1921611, + 2.064510038, + 0, + 0.4621547495, + 0, + 0.006858062165, + 0, + 4.762546223e-05, + 0, + 318, + 97.14777427, + 2.362971667, + 0, + 0.4881519723, + 0, + 0.006761520833, + 0, + 4.695501755e-05, + 0, + 319, + 91.98659885, + 2.576069952, + 0, + 0.5121956708, + 0, + 0.006672652779, + 0, + 4.633789746e-05, + 0, + 320, + 83.7262885, + 2.693061453, + 0, + 0.5151551387, + 0, + 0.006515916408, + 0, + 4.52494747e-05, + 0, + 321, + 100.1317197, + 2.226154406, + 0, + 0.4695075315, + 0, + 0.006810155431, + 0, + 4.729277392e-05, + 0, + 322, + 90.09165918, + 2.636690777, + 0, + 0.492533749, + 0, + 0.006638403672, + 0, + 4.610005228e-05, + 0, + 323, + 87.71258591, + 2.696277655, + 0, + 0.5103311984, + 0, + 0.006594033281, + 0, + 4.579189964e-05, + 0, + 324, + 89.13308348, + 2.662956726, + 0, + 0.507523558, + 0, + 0.006620716582, + 0, + 4.597721645e-05, + 0, + 325, + 94.93358798, + 2.47333992, + 0, + 0.4832584751, + 0, + 0.006724153689, + 0, + 4.669552679e-05, + 0, + 326, + 125.6521029, + 0.9376089906, + 0, + 0.4094128139, + 0, + 0.007159471105, + 0, + 4.971931045e-05, + 0, + 327, + 95.35929682, + 2.447222355, + 0, + 0.4831584479, + 0, + 0.006731424535, + 0, + 4.67460169e-05, + 0, + 328, + 84.4605147, + 2.692605432, + 0, + 0.5131755186, + 0, + 0.006530675027, + 0, + 4.535193621e-05, + 0, + 329, + 110.7958363, + 1.657893302, + 0, + 0.4447302573, + 0, + 0.00696926227, + 0, + 4.83976448e-05, + 0, + 330, + 97.80227332, + 2.342240157, + 0, + 0.4730468948, + 0, + 0.006772355582, + 0, + 4.703026109e-05, + 0, + 331, + 83.05580143, + 2.692141798, + 0, + 0.5169734596, + 0, + 0.006502292707, + 0, + 4.515489803e-05, + 0, + 332, + 95.83627856, + 2.417120956, + 0, + 0.4849408861, + 0, + 0.006739521845, + 0, + 4.680224675e-05, + 0, + 333, + 93.85037563, + 2.517390433, + 0, + 0.4849169412, + 0, + 0.006705463795, + 0, + 4.656574222e-05, + 0, + 334, + 99.34662975, + 2.263068444, + 0, + 0.4766983877, + 0, + 0.006797547497, + 0, + 4.72052139e-05, + 0, + 335, + 110.5356397, + 1.669946231, + 0, + 0.4453808024, + 0, + 0.006965625231, + 0, + 4.837238514e-05, + 0, + 336, + 105.8119682, + 1.920072335, + 0, + 0.452570716, + 0, + 0.006897572861, + 0, + 4.789981632e-05, + 0, + 337, + 106.2662075, + 1.896748806, + 0, + 0.452417011, + 0, + 0.006904290133, + 0, + 4.794645862e-05, + 0, + 338, + 110.4516996, + 1.673726828, + 0, + 0.4455831848, + 0, + 0.006964449515, + 0, + 4.836421971e-05, + 0, + 339, + 90.49369074, + 2.626110911, + 0, + 0.484550051, + 0, + 0.006645747956, + 0, + 4.615105671e-05, + 0, + 340, + 109.7181528, + 1.706156602, + 0, + 0.4472428874, + 0, + 0.006954124866, + 0, + 4.829251594e-05, + 0, + 341, + 102.6802595, + 2.089500955, + 0, + 0.46306292, + 0, + 0.006850183763, + 0, + 4.757075335e-05, + 0, + 342, + 110.34606, + 1.678430845, + 0, + 0.4458333842, + 0, + 0.006962968195, + 0, + 4.83539319e-05, + 0, + 343, + 105.3974559, + 1.942152537, + 0, + 0.453904285, + 0, + 0.006891409384, + 0, + 4.785701939e-05, + 0, + 344, + 102.0558847, + 2.122666873, + 0, + 0.4646281315, + 0, + 0.006840502121, + 0, + 4.750352086e-05, + 0, + 345, + 86.06012141, + 2.69909825, + 0, + 0.510685187, + 0, + 0.006562245353, + 0, + 4.557114414e-05, + 0, + 346, + 79.43066111, + 2.658512142, + 0, + 0.5195091328, + 0, + 0.006426387395, + 0, + 4.462769359e-05, + 0, + 347, + 102.9654359, + 2.075507734, + 0, + 0.4625250571, + 0, + 0.006854579294, + 0, + 4.760127677e-05, + 0, + 348, + 88.44534547, + 2.68170218, + 0, + 0.5092652889, + 0, + 0.006607869869, + 0, + 4.588799525e-05, + 0, + 349, + 84.12235766, + 2.692738697, + 0, + 0.5140837878, + 0, + 0.006523898675, + 0, + 4.530489045e-05, + 0, + 350, + 88.76138504, + 2.673399438, + 0, + 0.509036713, + 0, + 0.006613789958, + 0, + 4.592911068e-05, + 0, + 351, + 91.16222368, + 2.606472657, + 0, + 0.4878246545, + 0, + 0.006657866717, + 0, + 4.623521694e-05, + 0, + 352, + 96.99940704, + 2.367177324, + 0, + 0.4903012317, + 0, + 0.00675905148, + 0, + 4.693786896e-05, + 0, + 353, + 98.84176673, + 2.290462807, + 0, + 0.4750291277, + 0, + 0.006789369391, + 0, + 4.714841824e-05, + 0, + 354, + 103.464706, + 2.051043803, + 0, + 0.4617028593, + 0, + 0.006862235235, + 0, + 4.765444022e-05, + 0, + 355, + 105.1521788, + 1.955834313, + 0, + 0.4551410671, + 0, + 0.006887747006, + 0, + 4.783158911e-05, + 0, + 356, + 93.13649972, + 2.535783103, + 0, + 0.4929875727, + 0, + 0.006692995467, + 0, + 4.647916105e-05, + 0, + 357, + 111.4547785, + 1.624158737, + 0, + 0.4428706184, + 0, + 0.006978423031, + 0, + 4.846126843e-05, + 0, + 358, + 99.49504587, + 2.255587079, + 0, + 0.4757905336, + 0, + 0.006799941126, + 0, + 4.722183729e-05, + 0, + 359, + 103.7481767, + 2.036398004, + 0, + 0.4611305145, + 0, + 0.006866559872, + 0, + 4.768447036e-05, + 0, + 360, + 106.1473946, + 1.902829517, + 0, + 0.4523558235, + 0, + 0.006902536834, + 0, + 4.793428433e-05, + 0, + 361, + 89.77876633, + 2.644974654, + 0, + 0.4990965192, + 0, + 0.006632657861, + 0, + 4.606014836e-05, + 0, + 362, + 109.1293365, + 1.734220166, + 0, + 0.4485055792, + 0, + 0.006945771532, + 0, + 4.823450507e-05, + 0, + 363, + 84.65237657, + 2.692725179, + 0, + 0.5126682934, + 0, + 0.006534503847, + 0, + 4.537851919e-05, + 0, + 364, + 106.956978, + 1.860128882, + 0, + 0.4527870615, + 0, + 0.006914432314, + 0, + 4.801688282e-05, + 0, + 365, + 109.8148836, + 1.701821755, + 0, + 0.4470320853, + 0, + 0.006955491526, + 0, + 4.83020071e-05, + 0, + 366, + 107.4793454, + 1.829953488, + 0, + 0.4521010706, + 0, + 0.006922044416, + 0, + 4.806973984e-05, + 0, + 367, + 113.2244477, + 1.517209945, + 0, + 0.4376132915, + 0, + 0.007002676356, + 0, + 4.862971324e-05, + 0, + 368, + 113.4858314, + 1.502405888, + 0, + 0.4368683553, + 0, + 0.007006216129, + 0, + 4.865429653e-05, + 0, + 369, + 98.02221562, + 2.333183837, + 0, + 0.4699165429, + 0, + 0.006775975276, + 0, + 4.705539888e-05, + 0, + 370, + 108.0935269, + 1.792701483, + 0, + 0.4507207006, + 0, + 0.006930932157, + 0, + 4.813145613e-05, + 0, + 371, + 94.23493559, + 2.505615507, + 0, + 0.4840862808, + 0, + 0.006712130402, + 0, + 4.661203568e-05, + 0, + 372, + 116.9424946, + 1.38216354, + 0, + 0.429658804, + 0, + 0.007052025887, + 0, + 4.897234506e-05, + 0, + 373, + 91.67371189, + 2.588263694, + 0, + 0.5050465624, + 0, + 0.006667061025, + 0, + 4.629906639e-05, + 0, + 374, + 100.0949064, + 2.227801631, + 0, + 0.4698263679, + 0, + 0.006809567198, + 0, + 4.728868876e-05, + 0, + 375, + 97.75455837, + 2.34403482, + 0, + 0.4740073753, + 0, + 0.006771568905, + 0, + 4.702479785e-05, + 0, + 376, + 96.21875988, + 2.396200483, + 0, + 0.4882260066, + 0, + 0.006745977571, + 0, + 4.684707756e-05, + 0, + 377, + 109.8487116, + 1.700317193, + 0, + 0.4469579808, + 0, + 0.006955969092, + 0, + 4.830532371e-05, + 0, + 378, + 115.3413385, + 1.42810698, + 0, + 0.4324790617, + 0, + 0.007031035774, + 0, + 4.882664203e-05, + 0, + 379, + 86.97002306, + 2.70196057, + 0, + 0.511916655, + 0, + 0.00657985066, + 0, + 4.569340334e-05, + 0, + 380, + 101.0429321, + 2.181463287, + 0, + 0.4664272636, + 0, + 0.006824623591, + 0, + 4.739325162e-05, + 0, + 381, + 79.01613818, + 2.670771838, + 0, + 0.5225742475, + 0, + 0.006417498504, + 0, + 4.456585439e-05, + 0, + 382, + 131.3061887, + 0.4776997051, + 0, + 0.395505284, + 0, + 0.007222136785, + 0, + 5.016690871e-05, + 0, + 383, + 109.2544897, + 1.727956092, + 0, + 0.4482392206, + 0, + 0.006947551982, + 0, + 4.824686947e-05, + 0, + 384, + 110.093788, + 1.689525169, + 0, + 0.4464132854, + 0, + 0.006959423197, + 0, + 4.832931201e-05, + 0, + 385, + 96.43223914, + 2.386539157, + 0, + 0.4902135003, + 0, + 0.00674956642, + 0, + 4.6872e-05, + 0, + 386, + 92.7768136, + 2.546643126, + 0, + 0.5017824505, + 0, + 0.006686667018, + 0, + 4.643521547e-05, + 0, + 387, + 97.2507534, + 2.360069551, + 0, + 0.4861357123, + 0, + 0.006763231884, + 0, + 4.696690011e-05, + 0, + 388, + 102.6550147, + 2.090763685, + 0, + 0.4631162899, + 0, + 0.006849793859, + 0, + 4.756804576e-05, + 0, + 389, + 91.04856926, + 2.61011982, + 0, + 0.4851644479, + 0, + 0.006655814634, + 0, + 4.622096617e-05, + 0, + 390, + 111.4022969, + 1.627036838, + 0, + 0.4430318838, + 0, + 0.006977696031, + 0, + 4.845621921e-05, + 0, + 391, + 92.24662322, + 2.565853314, + 0, + 0.5126571807, + 0, + 0.006677281223, + 0, + 4.637003865e-05, + 0, + 392, + 90.65274285, + 2.621776071, + 0, + 0.4827761999, + 0, + 0.006648641716, + 0, + 4.6171153e-05, + 0, + 393, + 100.1748157, + 2.224222775, + 0, + 0.4691555923, + 0, + 0.006810843688, + 0, + 4.729755373e-05, + 0, + 394, + 115.6428164, + 1.419932038, + 0, + 0.4321847213, + 0, + 0.007035017908, + 0, + 4.885428822e-05, + 0, + 395, + 107.4428102, + 1.832131123, + 0, + 0.4521736972, + 0, + 0.006921513608, + 0, + 4.806605397e-05, + 0, + 396, + 92.66111148, + 2.550540358, + 0, + 0.5048351538, + 0, + 0.006684624645, + 0, + 4.642103291e-05, + 0, + 397, + 118.0622688, + 1.336059314, + 0, + 0.4269458833, + 0, + 0.007066474894, + 0, + 4.907261074e-05, + 0, + 398, + 106.6063651, + 1.879099088, + 0, + 0.4527080759, + 0, + 0.006909295381, + 0, + 4.79812134e-05, + 0, + 399, + 102.8543661, + 2.080911916, + 0, + 0.4627215222, + 0, + 0.006852869293, + 0, + 4.758940223e-05, + 0, + 400, + 122.6917987, + 1.125874176, + 0, + 0.4162646533, + 0, + 0.007124240385, + 0, + 4.947355263e-05, + 0, + 401, + 88.78536657, + 2.67274041, + 0, + 0.5089924404, + 0, + 0.006614238026, + 0, + 4.593222255e-05, + 0, + 402, + 95.96008103, + 2.409893328, + 0, + 0.4858577489, + 0, + 0.006741615075, + 0, + 4.681678281e-05, + 0, + 403, + 109.3382521, + 1.723863306, + 0, + 0.4480604055, + 0, + 0.006948742104, + 0, + 4.825513437e-05, + 0, + 404, + 91.50396324, + 2.594609564, + 0, + 0.4991954283, + 0, + 0.006664017059, + 0, + 4.627792786e-05, + 0, + 405, + 111.3484326, + 1.629955925, + 0, + 0.4431949818, + 0, + 0.006976949411, + 0, + 4.845103372e-05, + 0, + 406, + 108.7225371, + 1.75587726, + 0, + 0.449364512, + 0, + 0.006939965758, + 0, + 4.819418732e-05, + 0, + 407, + 118.5852682, + 1.310085633, + 0, + 0.4256770591, + 0, + 0.007073159265, + 0, + 4.911898806e-05, + 0, + 408, + 98.18875891, + 2.325476774, + 0, + 0.4691754912, + 0, + 0.006778709064, + 0, + 4.707438437e-05, + 0, + 409, + 101.4851533, + 2.156033608, + 0, + 0.4659609798, + 0, + 0.00683158195, + 0, + 4.744157477e-05, + 0, + 410, + 95.64641526, + 2.428828175, + 0, + 0.4839057851, + 0, + 0.006736304908, + 0, + 4.677990741e-05, + 0, + 411, + 87.51425911, + 2.698719043, + 0, + 0.5109425357, + 0, + 0.006590261353, + 0, + 4.576570379e-05, + 0, + 412, + 87.73755612, + 2.695921275, + 0, + 0.5102570035, + 0, + 0.006594507363, + 0, + 4.579519213e-05, + 0, + 413, + 80.47567359, + 2.652864145, + 0, + 0.5199284602, + 0, + 0.006448626254, + 0, + 4.478226747e-05, + 0, + 414, + 110.7470658, + 1.660197253, + 0, + 0.4448551246, + 0, + 0.006968581409, + 0, + 4.839291612e-05, + 0, + 415, + 114.3162567, + 1.462448256, + 0, + 0.434129679, + 0, + 0.007017390576, + 0, + 4.873189707e-05, + 0, + 416, + 89.06238508, + 2.664965992, + 0, + 0.5079696626, + 0, + 0.006619402092, + 0, + 4.596808726e-05, + 0, + 417, + 117.1846384, + 1.373454828, + 0, + 0.4290763619, + 0, + 0.007055166342, + 0, + 4.89941397e-05, + 0, + 418, + 112.9664022, + 1.532586767, + 0, + 0.43828155, + 0, + 0.006999171143, + 0, + 4.860536946e-05, + 0, + 419, + 119.0328027, + 1.286487171, + 0, + 0.424593072, + 0, + 0.007078846933, + 0, + 4.915844778e-05, + 0, + 420, + 106.4917481, + 1.885107381, + 0, + 0.4526120276, + 0, + 0.006907611225, + 0, + 4.796951916e-05, + 0, + 421, + 108.3642103, + 1.776474484, + 0, + 0.4501243484, + 0, + 0.006934828067, + 0, + 4.815850986e-05, + 0, + 422, + 95.72441652, + 2.423944232, + 0, + 0.4842753386, + 0, + 0.00673762751, + 0, + 4.678909192e-05, + 0, + 423, + 90.36958022, + 2.629410712, + 0, + 0.4866619112, + 0, + 0.006643485289, + 0, + 4.613534307e-05, + 0, + 424, + 109.6547233, + 1.709030224, + 0, + 0.4473803665, + 0, + 0.006953227845, + 0, + 4.828628635e-05, + 0, + 425, + 91.38835317, + 2.598769906, + 0, + 0.4950326206, + 0, + 0.006661939738, + 0, + 4.626350202e-05, + 0, + 426, + 99.13607158, + 2.274188221, + 0, + 0.476940733, + 0, + 0.006794143466, + 0, + 4.718157343e-05, + 0, + 427, + 103.2707114, + 2.060672476, + 0, + 0.4620289592, + 0, + 0.006859266414, + 0, + 4.763382462e-05, + 0, + 428, + 104.0471424, + 2.020058233, + 0, + 0.4603243566, + 0, + 0.006871103654, + 0, + 4.77160219e-05, + 0, + 429, + 99.7646568, + 2.242727095, + 0, + 0.4731929326, + 0, + 0.006804277198, + 0, + 4.725195063e-05, + 0, + 430, + 99.80080788, + 2.241062378, + 0, + 0.4728039967, + 0, + 0.006804857415, + 0, + 4.725598013e-05, + 0, + 431, + 100.4939441, + 2.209575111, + 0, + 0.4673180936, + 0, + 0.006815927923, + 0, + 4.733286265e-05, + 0, + 432, + 108.5611288, + 1.765000269, + 0, + 0.4497045947, + 0, + 0.006937654247, + 0, + 4.81781355e-05, + 0, + 433, + 100.5777599, + 2.205560777, + 0, + 0.4670461122, + 0, + 0.00681725965, + 0, + 4.734211117e-05, + 0, + 434, + 115.8856797, + 1.413496949, + 0, + 0.4318625875, + 0, + 0.007038215663, + 0, + 4.887648746e-05, + 0, + 435, + 112.6507501, + 1.55206356, + 0, + 0.4391041759, + 0, + 0.006994868978, + 0, + 4.85754903e-05, + 0, + 436, + 98.6627367, + 2.30048493, + 0, + 0.4729746123, + 0, + 0.006786456017, + 0, + 4.712818537e-05, + 0, + 437, + 82.82766151, + 2.690908423, + 0, + 0.5175924691, + 0, + 0.00649762564, + 0, + 4.512249943e-05, + 0, + 438, + 102.9980953, + 2.073924255, + 0, + 0.4624697608, + 0, + 0.006855081635, + 0, + 4.760476509e-05, + 0, + 439, + 92.63638804, + 2.551397796, + 0, + 0.5054699044, + 0, + 0.006684187805, + 0, + 4.641799941e-05, + 0, + 440, + 90.81099416, + 2.61729016, + 0, + 0.4824400199, + 0, + 0.006651514333, + 0, + 4.619110233e-05, + 0, + 441, + 96.80409698, + 2.373046665, + 0, + 0.4916229554, + 0, + 0.006755793338, + 0, + 4.691524267e-05, + 0, + 442, + 87.5336426, + 2.698511024, + 0, + 0.5108833724, + 0, + 0.006590630515, + 0, + 4.576826759e-05, + 0, + 443, + 107.1463141, + 1.849450502, + 0, + 0.4526414602, + 0, + 0.006917197055, + 0, + 4.803608056e-05, + 0, + 444, + 101.8959083, + 2.131838509, + 0, + 0.4650566791, + 0, + 0.006838008605, + 0, + 4.748620479e-05, + 0, + 445, + 101.3393724, + 2.164595526, + 0, + 0.4661701917, + 0, + 0.006829292614, + 0, + 4.742567628e-05, + 0, + 446, + 85.67625165, + 2.696697744, + 0, + 0.5106360792, + 0, + 0.006554741822, + 0, + 4.55190396e-05, + 0, + 447, + 105.9942135, + 1.910670263, + 0, + 0.4523685933, + 0, + 0.006900272508, + 0, + 4.791856167e-05, + 0, + 448, + 105.8373367, + 1.918755747, + 0, + 0.4525287461, + 0, + 0.006897949023, + 0, + 4.790242824e-05, + 0, + 449, + 108.2666877, + 1.782271809, + 0, + 0.450336082, + 0, + 0.006933425916, + 0, + 4.814877308e-05, + 0, + 450, + 86.01549148, + 2.698823619, + 0, + 0.5106466684, + 0, + 0.006561375308, + 0, + 4.556510243e-05, + 0, + 451, + 94.57149391, + 2.492029723, + 0, + 0.4837098205, + 0, + 0.006717936469, + 0, + 4.665235359e-05, + 0, + 452, + 109.3609489, + 1.722767434, + 0, + 0.4480118786, + 0, + 0.006949064381, + 0, + 4.825737246e-05, + 0, + 453, + 84.89137851, + 2.693145764, + 0, + 0.5120569025, + 0, + 0.006539257279, + 0, + 4.541152253e-05, + 0, + 454, + 91.01463912, + 2.611180235, + 0, + 0.4845323615, + 0, + 0.006655201365, + 0, + 4.621670728e-05, + 0, + 455, + 108.9373098, + 1.744195169, + 0, + 0.4489122061, + 0, + 0.006943034509, + 0, + 4.82154979e-05, + 0, + 456, + 96.26168718, + 2.39413551, + 0, + 0.4886443231, + 0, + 0.006746700057, + 0, + 4.685209478e-05, + 0, + 457, + 80.89390063, + 2.658900853, + 0, + 0.5209939262, + 0, + 0.006457451341, + 0, + 4.484356823e-05, + 0, + 458, + 95.29074117, + 2.451605055, + 0, + 0.4831002484, + 0, + 0.006730256456, + 0, + 4.673790551e-05, + 0, + 459, + 101.0144522, + 2.183029343, + 0, + 0.4664460217, + 0, + 0.006824174051, + 0, + 4.739012971e-05, + 0, + 460, + 96.5421662, + 2.382144477, + 0, + 0.4910237402, + 0, + 0.006751410427, + 0, + 4.688480561e-05, + 0, + 461, + 87.18558775, + 2.701255465, + 0, + 0.5117401005, + 0, + 0.006583984778, + 0, + 4.57221138e-05, + 0, + 462, + 92.77270415, + 2.546778201, + 0, + 0.5018918504, + 0, + 0.006686594534, + 0, + 4.643471213e-05, + 0, + 463, + 99.24604561, + 2.268310168, + 0, + 0.4769831405, + 0, + 0.006795922582, + 0, + 4.719392912e-05, + 0, + 464, + 103.3983315, + 2.054367684, + 0, + 0.4618182978, + 0, + 0.006861220312, + 0, + 4.764739258e-05, + 0, + 465, + 103.03221, + 2.072271359, + 0, + 0.4624129576, + 0, + 0.00685560613, + 0, + 4.760840726e-05, + 0, + 466, + 101.1664736, + 2.174549022, + 0, + 0.4663400711, + 0, + 0.006826571649, + 0, + 4.740678021e-05, + 0, + 467, + 85.32662401, + 2.694751473, + 0, + 0.5110935391, + 0, + 0.006547867845, + 0, + 4.547130875e-05, + 0, + 468, + 103.4844776, + 2.050046799, + 0, + 0.4616674161, + 0, + 0.00686253739, + 0, + 4.765653839e-05, + 0, + 469, + 105.1875606, + 1.953831558, + 0, + 0.4549507064, + 0, + 0.006888276019, + 0, + 4.78352624e-05, + 0, + 470, + 75.05251745, + 2.823053556, + 0, + 0.5389670778, + 0, + 0.006331332779, + 0, + 4.396262736e-05, + 0, + 471, + 84.75337536, + 2.692863748, + 0, + 0.512406176, + 0, + 0.006536514761, + 0, + 4.539248095e-05, + 0, + 472, + 85.14395464, + 2.693948787, + 0, + 0.5114625703, + 0, + 0.006544261261, + 0, + 4.544626654e-05, + 0, + 473, + 99.97289333, + 2.233263762, + 0, + 0.4709881403, + 0, + 0.006807615496, + 0, + 4.727513454e-05, + 0, + 474, + 83.53835818, + 2.693094188, + 0, + 0.5156644212, + 0, + 0.00651211184, + 0, + 4.522306273e-05, + 0, + 475, + 117.5448198, + 1.359187976, + 0, + 0.428202886, + 0, + 0.007059821353, + 0, + 4.902644303e-05, + 0, + 476, + 89.23730618, + 2.659994524, + 0, + 0.5067045825, + 0, + 0.006622651853, + 0, + 4.599065695e-05, + 0, + 477, + 112.1219269, + 1.585014589, + 0, + 0.4406972749, + 0, + 0.006987625593, + 0, + 4.852518309e-05, + 0, + 478, + 107.5608366, + 1.825068686, + 0, + 0.4519311351, + 0, + 0.006923227519, + 0, + 4.807795518e-05, + 0, + 479, + 98.1618303, + 2.326769921, + 0, + 0.4691993359, + 0, + 0.006778267448, + 0, + 4.707131745e-05, + 0, + 480, + 116.7961996, + 1.38709337, + 0, + 0.4300059961, + 0, + 0.007050124243, + 0, + 4.89591471e-05, + 0, + 481, + 114.8540401, + 1.442735574, + 0, + 0.4329684746, + 0, + 0.007024569531, + 0, + 4.878174612e-05, + 0, + 482, + 93.03658065, + 2.538614971, + 0, + 0.4951851844, + 0, + 0.006691240589, + 0, + 4.646697497e-05, + 0, + 483, + 91.09424167, + 2.608672003, + 0, + 0.4861364284, + 0, + 0.00665663967, + 0, + 4.622669567e-05, + 0, + 484, + 102.3708785, + 2.105395119, + 0, + 0.4637850841, + 0, + 0.006845396442, + 0, + 4.753750884e-05, + 0, + 485, + 106.3760759, + 1.891101286, + 0, + 0.4525062582, + 0, + 0.006905909119, + 0, + 4.79577003e-05, + 0, + 486, + 95.65795644, + 2.428100246, + 0, + 0.4839556246, + 0, + 0.006736500689, + 0, + 4.678126697e-05, + 0, + 487, + 100.1097068, + 2.227139579, + 0, + 0.4696962321, + 0, + 0.006809803726, + 0, + 4.729033139e-05, + 0, + 488, + 102.0898719, + 2.120749934, + 0, + 0.4645354609, + 0, + 0.006841031192, + 0, + 4.750719494e-05, + 0, + 489, + 95.32971799, + 2.449117423, + 0, + 0.48312858, + 0, + 0.006730920691, + 0, + 4.674251809e-05, + 0, + 490, + 105.4248292, + 1.940655509, + 0, + 0.4537820882, + 0, + 0.006891817404, + 0, + 4.785985253e-05, + 0, + 491, + 102.5544906, + 2.095846844, + 0, + 0.4633389277, + 0, + 0.006848239987, + 0, + 4.755725527e-05, + 0, + 492, + 109.6719776, + 1.708245815, + 0, + 0.4473430206, + 0, + 0.006953471923, + 0, + 4.828798142e-05, + 0, + 493, + 108.7558476, + 1.754030027, + 0, + 0.4492944457, + 0, + 0.006940442233, + 0, + 4.819749612e-05, + 0, + 494, + 98.54940798, + 2.306747338, + 0, + 0.4716165286, + 0, + 0.006784608187, + 0, + 4.711535254e-05, + 0, + 495, + 96.63535524, + 2.378703682, + 0, + 0.4914930177, + 0, + 0.006752971531, + 0, + 4.689564664e-05, + 0, + 496, + 99.00724792, + 2.281237582, + 0, + 0.4764057911, + 0, + 0.006792056068, + 0, + 4.716707678e-05, + 0, + 497, + 97.86457709, + 2.339806713, + 0, + 0.4719298106, + 0, + 0.006773382029, + 0, + 4.703738947e-05, + 0, + 498, + 84.97880815, + 2.693381727, + 0, + 0.5118431221, + 0, + 0.006540991673, + 0, + 4.542356477e-05, + 0, + 499, + 106.5622523, + 1.88142085, + 0, + 0.4526733617, + 0, + 0.006908647482, + 0, + 4.79767146e-05, + 0, + 500, + 107.8339661, + 1.808503127, + 0, + 0.4513155162, + 0, + 0.006927184238, + 0, + 4.810543044e-05, + 0, + 501, + 94.95838574, + 2.471917947, + 0, + 0.4832313375, + 0, + 0.006724578363, + 0, + 4.669847579e-05, + 0, + 502, + 113.6836373, + 1.491845748, + 0, + 0.4362387519, + 0, + 0.007008887716, + 0, + 4.867284997e-05, + 0, + 503, + 121.5518934, + 1.163778708, + 0, + 0.4185286565, + 0, + 0.007110311173, + 0, + 4.937678328e-05, + 0, + 504, + 101.994491, + 2.126159077, + 0, + 0.4647946532, + 0, + 0.006839545816, + 0, + 4.749687987e-05, + 0, + 505, + 110.016156, + 1.692930293, + 0, + 0.4465875094, + 0, + 0.006958330144, + 0, + 4.832172087e-05, + 0, + 506, + 119.3221419, + 1.270896116, + 0, + 0.4238931282, + 0, + 0.007082508363, + 0, + 4.918384944e-05, + 0, + 507, + 106.0500256, + 1.907810206, + 0, + 0.4523494568, + 0, + 0.006901098028, + 0, + 4.792429378e-05, + 0, + 508, + 98.42268494, + 2.313583596, + 0, + 0.4702957526, + 0, + 0.006782538634, + 0, + 4.71009799e-05, + 0, + 509, + 82.91833454, + 2.691470803, + 0, + 0.5173464963, + 0, + 0.006499482439, + 0, + 4.513538925e-05, + 0, + 510, + 97.96490418, + 2.335669114, + 0, + 0.4705046822, + 0, + 0.006775033103, + 0, + 4.704885573e-05, + 0, + 511, + 74.32931604, + 2.833162614, + 0, + 0.5409803371, + 0, + 0.006315554183, + 0, + 4.385087398e-05, + 0, + 512, + 100.5285109, + 2.207930225, + 0, + 0.4671967089, + 0, + 0.006816477326, + 0, + 4.733667813e-05, + 0, + 513, + 101.0627365, + 2.180367859, + 0, + 0.4664141629, + 0, + 0.006824936092, + 0, + 4.739542184e-05, + 0, + 514, + 102.2191962, + 2.113570759, + 0, + 0.4641840355, + 0, + 0.006843042174, + 0, + 4.752115998e-05, + 0, + 515, + 112.5309964, + 1.559548621, + 0, + 0.4394381715, + 0, + 0.006993232627, + 0, + 4.856412549e-05, + 0, + 516, + 90.31305802, + 2.630898179, + 0, + 0.4877685449, + 0, + 0.006642453479, + 0, + 4.612817739e-05, + 0, + 517, + 81.53602806, + 2.671886459, + 0, + 0.5208017135, + 0, + 0.006470910023, + 0, + 4.493702829e-05, + 0, + 518, + 106.1271029, + 1.9038671, + 0, + 0.4523507509, + 0, + 0.006902237133, + 0, + 4.793220331e-05, + 0, + 519, + 111.9798529, + 1.593685744, + 0, + 0.4411648075, + 0, + 0.006985671895, + 0, + 4.851161406e-05, + 0, + 520, + 100.3667537, + 2.215513033, + 0, + 0.4678887644, + 0, + 0.006813904175, + 0, + 4.731880818e-05, + 0, + 521, + 95.39263334, + 2.445081171, + 0, + 0.4832013457, + 0, + 0.006731992147, + 0, + 4.674995853e-05, + 0, + 522, + 110.8926802, + 1.653248064, + 0, + 0.444477819, + 0, + 0.006970613097, + 0, + 4.840702652e-05, + 0, + 523, + 86.85230041, + 2.702059721, + 0, + 0.5118812651, + 0, + 0.006577587065, + 0, + 4.567768339e-05, + 0, + 524, + 103.2157033, + 2.063362549, + 0, + 0.4621171673, + 0, + 0.006858423219, + 0, + 4.762796942e-05, + 0, + 525, + 107.5182265, + 1.827627356, + 0, + 0.4520212372, + 0, + 0.006922609046, + 0, + 4.807366056e-05, + 0, + 526, + 102.6130961, + 2.092872233, + 0, + 0.4632071663, + 0, + 0.006849146144, + 0, + 4.756354787e-05, + 0, + 527, + 98.77760281, + 2.294060946, + 0, + 0.4743360465, + 0, + 0.006788326049, + 0, + 4.714117241e-05, + 0, + 528, + 111.0987711, + 1.643021465, + 0, + 0.4439184874, + 0, + 0.006973482602, + 0, + 4.842695584e-05, + 0, + 529, + 112.71124, + 1.548295112, + 0, + 0.4389411842, + 0, + 0.006995694657, + 0, + 4.858122479e-05, + 0, + 530, + 105.9285098, + 1.914046518, + 0, + 0.4524155601, + 0, + 0.006899299936, + 0, + 4.791180849e-05, + 0, + 531, + 94.79318589, + 2.481068526, + 0, + 0.4834299729, + 0, + 0.00672174656, + 0, + 4.667881134e-05, + 0, + 532, + 96.7395046, + 2.375133759, + 0, + 0.4916982968, + 0, + 0.006754713937, + 0, + 4.690774676e-05, + 0, + 533, + 100.3363873, + 2.216907619, + 0, + 0.468055927, + 0, + 0.006813420501, + 0, + 4.731544917e-05, + 0, + 534, + 102.7807416, + 2.084521529, + 0, + 0.462860407, + 0, + 0.006851734412, + 0, + 4.75815214e-05, + 0, + 535, + 106.444424, + 1.887566952, + 0, + 0.4525686748, + 0, + 0.006906915152, + 0, + 4.796468586e-05, + 0, + 536, + 98.86655787, + 2.289073793, + 0, + 0.4752769044, + 0, + 0.006789772268, + 0, + 4.715121616e-05, + 0, + 537, + 85.18897492, + 2.694130176, + 0, + 0.5113656879, + 0, + 0.006545151099, + 0, + 4.545244505e-05, + 0, + 538, + 87.42087089, + 2.699628716, + 0, + 0.5112156999, + 0, + 0.006588481202, + 0, + 4.575334079e-05, + 0, + 539, + 124.5403689, + 1.034633451, + 0, + 0.4150066521, + 0, + 0.007146406402, + 0, + 4.96279342e-05, + 0, + 540, + 94.15457875, + 2.508355839, + 0, + 0.4841906107, + 0, + 0.006710740231, + 0, + 4.660238221e-05, + 0, + 541, + 103.9397488, + 2.026032863, + 0, + 0.4606422276, + 0, + 0.006869473478, + 0, + 4.770470217e-05, + 0, + 542, + 100.2714722, + 2.21986502, + 0, + 0.4684551536, + 0, + 0.006812385877, + 0, + 4.730826392e-05, + 0, + 543, + 114.4554658, + 1.456906941, + 0, + 0.4337460284, + 0, + 0.007019253225, + 0, + 4.874483132e-05, + 0, + 544, + 95.07439613, + 2.465066015, + 0, + 0.4831272714, + 0, + 0.006726563215, + 0, + 4.671225893e-05, + 0, + 545, + 102.4104069, + 2.103308286, + 0, + 0.4636851069, + 0, + 0.006846009188, + 0, + 4.754176395e-05, + 0, + 546, + 82.2488071, + 2.684814518, + 0, + 0.5191499006, + 0, + 0.00648571353, + 0, + 4.503980475e-05, + 0, + 547, + 93.67156521, + 2.522042417, + 0, + 0.485843602, + 0, + 0.006702352126, + 0, + 4.654413455e-05, + 0, + 548, + 99.03168159, + 2.279889158, + 0, + 0.4765464842, + 0, + 0.006792452257, + 0, + 4.716982825e-05, + 0, + 549, + 91.92761647, + 2.578396296, + 0, + 0.511359297, + 0, + 0.006671600551, + 0, + 4.633059046e-05, + 0, + 550, + 93.98077766, + 2.513740289, + 0, + 0.4845142602, + 0, + 0.006707728297, + 0, + 4.65814671e-05, + 0, + 551, + 100.4438159, + 2.211935668, + 0, + 0.4675188737, + 0, + 0.006815130736, + 0, + 4.732732637e-05, + 0, + 552, + 113.0290268, + 1.528798072, + 0, + 0.4381221474, + 0, + 0.007000022791, + 0, + 4.861128422e-05, + 0, + 553, + 101.1445504, + 2.17578953, + 0, + 0.4663568928, + 0, + 0.006826226189, + 0, + 4.740438111e-05, + 0, + 554, + 98.08773209, + 2.330236177, + 0, + 0.4694539291, + 0, + 0.006777051449, + 0, + 4.706287263e-05, + 0, + 555, + 104.3411921, + 2.003199676, + 0, + 0.4592712633, + 0, + 0.006875555584, + 0, + 4.77469353e-05, + 0, + 556, + 95.78257069, + 2.420366676, + 0, + 0.4846013966, + 0, + 0.00673861268, + 0, + 4.679593323e-05, + 0, + 557, + 86.53516776, + 2.701488618, + 0, + 0.5114479628, + 0, + 0.006571468306, + 0, + 4.563519126e-05, + 0, + 558, + 100.1775351, + 2.224100714, + 0, + 0.4691341836, + 0, + 0.006810887104, + 0, + 4.729785525e-05, + 0, + 559, + 102.4864321, + 2.099343751, + 0, + 0.4634986638, + 0, + 0.00684718679, + 0, + 4.754994158e-05, + 0, + 560, + 93.0020031, + 2.539626533, + 0, + 0.4960010246, + 0, + 0.006690632743, + 0, + 4.646275402e-05, + 0, + 561, + 85.26554805, + 2.694463784, + 0, + 0.511209401, + 0, + 0.006546663134, + 0, + 4.546294381e-05, + 0, + 562, + 85.59299279, + 2.696196857, + 0, + 0.5107074298, + 0, + 0.006553108331, + 0, + 4.550769693e-05, + 0, + 563, + 100.8646314, + 2.191078048, + 0, + 0.4665586371, + 0, + 0.006821806396, + 0, + 4.737368709e-05, + 0, + 564, + 96.70277319, + 2.376362134, + 0, + 0.4916692404, + 0, + 0.006754099702, + 0, + 4.690348121e-05, + 0, + 565, + 102.8053609, + 2.083311375, + 0, + 0.4628131157, + 0, + 0.006852114027, + 0, + 4.758415752e-05, + 0, + 566, + 93.51340326, + 2.525999662, + 0, + 0.487177024, + 0, + 0.006699593466, + 0, + 4.652497819e-05, + 0, + 567, + 102.2660948, + 2.111014315, + 0, + 0.4640585224, + 0, + 0.006843770594, + 0, + 4.75262184e-05, + 0, + 568, + 98.6393688, + 2.301784451, + 0, + 0.4726901726, + 0, + 0.006786075232, + 0, + 4.712554089e-05, + 0, + 569, + 93.44659195, + 2.527669654, + 0, + 0.4879200566, + 0, + 0.006698426356, + 0, + 4.651687367e-05, + 0, + 570, + 93.42028812, + 2.528330889, + 0, + 0.4882448395, + 0, + 0.006697966569, + 0, + 4.651368087e-05, + 0, + 571, + 109.4119217, + 1.720325916, + 0, + 0.4479027782, + 0, + 0.006949787836, + 0, + 4.826239657e-05, + 0, + 572, + 104.6030716, + 1.987809603, + 0, + 0.458096777, + 0, + 0.006879506257, + 0, + 4.777436784e-05, + 0, + 573, + 97.59356221, + 2.349675709, + 0, + 0.4777497652, + 0, + 0.006768910841, + 0, + 4.700633843e-05, + 0, + 574, + 96.3943609, + 2.388142903, + 0, + 0.4898881946, + 0, + 0.006748930389, + 0, + 4.686758313e-05, + 0, + 575, + 110.2612626, + 1.682174633, + 0, + 0.446030894, + 0, + 0.006961777785, + 0, + 4.834566451e-05, + 0, + 576, + 101.9865361, + 2.126614217, + 0, + 0.464816092, + 0, + 0.006839421849, + 0, + 4.749601899e-05, + 0, + 577, + 100.5732868, + 2.205777288, + 0, + 0.4670587597, + 0, + 0.006817188615, + 0, + 4.734161786e-05, + 0, + 578, + 102.3210778, + 2.108049831, + 0, + 0.4639136566, + 0, + 0.006844624004, + 0, + 4.753214477e-05, + 0, + 579, + 90.91423836, + 2.614245037, + 0, + 0.4831325002, + 0, + 0.006653384933, + 0, + 4.620409292e-05, + 0, + 580, + 88.64342424, + 2.676590303, + 0, + 0.5091830132, + 0, + 0.006611583621, + 0, + 4.591378752e-05, + 0, + 581, + 89.76041782, + 2.645468648, + 0, + 0.4994435795, + 0, + 0.006632320098, + 0, + 4.605780262e-05, + 0, + 582, + 97.259262, + 2.359828009, + 0, + 0.4859527543, + 0, + 0.006763373153, + 0, + 4.696788117e-05, + 0, + 583, + 91.75704848, + 2.585063359, + 0, + 0.5075412476, + 0, + 0.006668552772, + 0, + 4.630942564e-05, + 0, + 584, + 91.64004184, + 2.589542328, + 0, + 0.5039508554, + 0, + 0.006666457825, + 0, + 4.629487754e-05, + 0, + 585, + 96.1669101, + 2.398776101, + 0, + 0.4877221451, + 0, + 0.006745104361, + 0, + 4.684101365e-05, + 0, + 586, + 105.2320833, + 1.951324981, + 0, + 0.4547155891, + 0, + 0.006888941363, + 0, + 4.783988232e-05, + 0, + 587, + 96.10764442, + 2.401827188, + 0, + 0.4871571625, + 0, + 0.006744105515, + 0, + 4.68340773e-05, + 0, + 588, + 99.65361525, + 2.247920186, + 0, + 0.4743547347, + 0, + 0.006802493248, + 0, + 4.723956138e-05, + 0, + 589, + 82.68888462, + 2.689850062, + 0, + 0.5179685871, + 0, + 0.006494778948, + 0, + 4.510273776e-05, + 0, + 590, + 93.65782976, + 2.522389176, + 0, + 0.4859379624, + 0, + 0.006702112788, + 0, + 4.654247256e-05, + 0, + 591, + 94.00404323, + 2.513057575, + 0, + 0.4844596144, + 0, + 0.006708131896, + 0, + 4.658426972e-05, + 0, + 592, + 93.87891472, + 2.51661458, + 0, + 0.4848127656, + 0, + 0.006705959734, + 0, + 4.656918606e-05, + 0, + 593, + 80.14141648, + 2.650921513, + 0, + 0.5188374865, + 0, + 0.006441541125, + 0, + 4.473303906e-05, + 0, + 594, + 113.9288973, + 1.479628681, + 0, + 0.4354011493, + 0, + 0.007012191651, + 0, + 4.869579433e-05, + 0, + 595, + 109.4416968, + 1.718911906, + 0, + 0.4478389698, + 0, + 0.006950210228, + 0, + 4.826532994e-05, + 0, + 596, + 96.55305983, + 2.381729263, + 0, + 0.4910903692, + 0, + 0.006751593018, + 0, + 4.68860736e-05, + 0, + 597, + 96.82880822, + 2.372270631, + 0, + 0.4915489233, + 0, + 0.00675620604, + 0, + 4.691810869e-05, + 0, + 598, + 104.2401358, + 2.009063419, + 0, + 0.4596646082, + 0, + 0.006874027494, + 0, + 4.773632456e-05, + 0, + 599, + 112.0554245, + 1.589090317, + 0, + 0.4409151341, + 0, + 0.006986711506, + 0, + 4.851883448e-05, + 0, + 600, + 86.167786, + 2.69973907, + 0, + 0.5108102306, + 0, + 0.006564341713, + 0, + 4.558570166e-05, + 0, + 601, + 88.25524613, + 2.686222563, + 0, + 0.5093241316, + 0, + 0.006604295174, + 0, + 4.586316875e-05, + 0, + 602, + 118.3423251, + 1.32242182, + 0, + 0.4262661829, + 0, + 0.007070059303, + 0, + 4.909748044e-05, + 0, + 603, + 111.0066186, + 1.647654191, + 0, + 0.444172536, + 0, + 0.006972200383, + 0, + 4.841805054e-05, + 0, + 604, + 95.54991469, + 2.434969202, + 0, + 0.4835526869, + 0, + 0.006734666712, + 0, + 4.676853134e-05, + 0, + 605, + 87.65410029, + 2.697069657, + 0, + 0.510509601, + 0, + 0.006592922163, + 0, + 4.578418296e-05, + 0, + 606, + 100.8875028, + 2.189870636, + 0, + 0.466538484, + 0, + 0.006822168145, + 0, + 4.737619933e-05, + 0, + 607, + 102.945915, + 2.076455056, + 0, + 0.462558592, + 0, + 0.006854278935, + 0, + 4.759919103e-05, + 0, + 608, + 105.3007364, + 1.947490441, + 0, + 0.4543652794, + 0, + 0.006889966572, + 0, + 4.784700101e-05, + 0, + 609, + 109.5551943, + 1.71359891, + 0, + 0.4475951437, + 0, + 0.00695181893, + 0, + 4.827650184e-05, + 0, + 610, + 118.9010939, + 1.293520436, + 0, + 0.4249119176, + 0, + 0.007077176137, + 0, + 4.914685633e-05, + 0, + 611, + 84.35738995, + 2.692608079, + 0, + 0.5134512507, + 0, + 0.006528612294, + 0, + 4.533761521e-05, + 0, + 612, + 105.0653446, + 1.960788124, + 0, + 0.4556175338, + 0, + 0.006886447689, + 0, + 4.782256708e-05, + 0, + 613, + 95.41243064, + 2.443807786, + 0, + 0.4832316845, + 0, + 0.006732329111, + 0, + 4.675229848e-05, + 0, + 614, + 103.5957055, + 2.044372974, + 0, + 0.461456936, + 0, + 0.006864235753, + 0, + 4.76683318e-05, + 0, + 615, + 98.59496258, + 2.304243137, + 0, + 0.472153204, + 0, + 0.006785351295, + 0, + 4.712051328e-05, + 0, + 616, + 106.9824364, + 1.858711414, + 0, + 0.4527755064, + 0, + 0.006914804442, + 0, + 4.801946679e-05, + 0, + 617, + 104.0879279, + 2.017760622, + 0, + 0.4601946451, + 0, + 0.006871722161, + 0, + 4.772031672e-05, + 0, + 618, + 99.46852922, + 2.256901415, + 0, + 0.4759895725, + 0, + 0.00679951382, + 0, + 4.721886971e-05, + 0, + 619, + 98.40981418, + 2.314264941, + 0, + 0.4701824903, + 0, + 0.006782328241, + 0, + 4.709951876e-05, + 0, + 620, + 71.21393592, + 2.860035158, + 0, + 0.5497019993, + 0, + 0.0062484368, + 0, + 4.336688221e-05, + 0, + 621, + 82.28009532, + 2.685257349, + 0, + 0.5190671426, + 0, + 0.006486359958, + 0, + 4.50442924e-05, + 0, + 622, + 98.32426847, + 2.318720296, + 0, + 0.4695638039, + 0, + 0.006780928936, + 0, + 4.708980088e-05, + 0, + 623, + 90.52738547, + 2.625204214, + 0, + 0.4840741161, + 0, + 0.006646361546, + 0, + 4.615531791e-05, + 0, + 624, + 93.27204922, + 2.532133418, + 0, + 0.4904358854, + 0, + 0.006695372285, + 0, + 4.649566592e-05, + 0, + 625, + 96.78540278, + 2.373641684, + 0, + 0.4916620204, + 0, + 0.006755481036, + 0, + 4.691307389e-05, + 0, + 626, + 97.0429585, + 2.365930575, + 0, + 0.4897708363, + 0, + 0.006759776839, + 0, + 4.694290625e-05, + 0, + 627, + 98.47692195, + 2.310684332, + 0, + 0.4708205926, + 0, + 0.006783424826, + 0, + 4.710713432e-05, + 0, + 628, + 104.8695281, + 1.972133474, + 0, + 0.4567040018, + 0, + 0.00688351235, + 0, + 4.780218502e-05, + 0, + 629, + 107.0579253, + 1.854474739, + 0, + 0.4527264053, + 0, + 0.006915907182, + 0, + 4.802712396e-05, + 0, + 630, + 106.8651325, + 1.865195564, + 0, + 0.4528077907, + 0, + 0.00691308882, + 0, + 4.800755394e-05, + 0, + 631, + 93.80559181, + 2.518586129, + 0, + 0.4851019546, + 0, + 0.006704685174, + 0, + 4.656033541e-05, + 0, + 632, + 120.9330103, + 1.189016574, + 0, + 0.4200090468, + 0, + 0.007102667718, + 0, + 4.93237251e-05, + 0, + 633, + 107.6716578, + 1.818374968, + 0, + 0.4516870383, + 0, + 0.00692483454, + 0, + 4.808911421e-05, + 0, + 634, + 99.86013044, + 2.238353487, + 0, + 0.4721658464, + 0, + 0.006805808919, + 0, + 4.726258817e-05, + 0, + 635, + 111.7358369, + 1.60819995, + 0, + 0.4419723296, + 0, + 0.006982308733, + 0, + 4.848825583e-05, + 0, + 636, + 106.6795078, + 1.875220698, + 0, + 0.4527564881, + 0, + 0.006910368866, + 0, + 4.798866735e-05, + 0, + 637, + 95.76084938, + 2.421695764, + 0, + 0.4844745347, + 0, + 0.006738244796, + 0, + 4.679337854e-05, + 0, + 638, + 107.1686042, + 1.848172811, + 0, + 0.4526155742, + 0, + 0.006917522116, + 0, + 4.803833772e-05, + 0, + 639, + 100.7844812, + 2.195247174, + 0, + 0.4666444256, + 0, + 0.006820537816, + 0, + 4.736487717e-05, + 0, + 640, + 99.15389988, + 2.273225684, + 0, + 0.4769736399, + 0, + 0.006794432064, + 0, + 4.718357769e-05, + 0, + 641, + 105.4530017, + 1.939121027, + 0, + 0.453660597, + 0, + 0.006892237188, + 0, + 4.786276736e-05, + 0, + 642, + 117.9768931, + 1.340072207, + 0, + 0.4271532056, + 0, + 0.007065379857, + 0, + 4.906501281e-05, + 0, + 643, + 118.1861945, + 1.330110223, + 0, + 0.4266450401, + 0, + 0.007068062444, + 0, + 4.908362578e-05, + 0, + 644, + 102.5817763, + 2.094457887, + 0, + 0.463276903, + 0, + 0.006848661965, + 0, + 4.75601856e-05, + 0, + 645, + 105.8921956, + 1.915918342, + 0, + 0.45245372, + 0, + 0.006898762055, + 0, + 4.790807364e-05, + 0, + 646, + 72.20283832, + 2.853037241, + 0, + 0.5469248979, + 0, + 0.006269522763, + 0, + 4.352078083e-05, + 0, + 647, + 119.4328894, + 1.264909307, + 0, + 0.4236253992, + 0, + 0.007083906546, + 0, + 4.919354952e-05, + 0, + 648, + 108.9088934, + 1.745709284, + 0, + 0.4489721691, + 0, + 0.006942628943, + 0, + 4.821268147e-05, + 0, + 649, + 103.4301973, + 2.052776219, + 0, + 0.4617635144, + 0, + 0.006861707677, + 0, + 4.765077685e-05, + 0, + 650, + 103.6155467, + 2.043348548, + 0, + 0.4614171481, + 0, + 0.006864538453, + 0, + 4.767043374e-05, + 0, + 651, + 99.61332788, + 2.249838115, + 0, + 0.4747521196, + 0, + 0.00680184535, + 0, + 4.723506183e-05, + 0, + 652, + 99.17504949, + 2.27208848, + 0, + 0.4769995377, + 0, + 0.006794774336, + 0, + 4.718595472e-05, + 0, + 653, + 89.05849972, + 2.665076304, + 0, + 0.5079917401, + 0, + 0.006619329811, + 0, + 4.596758527e-05, + 0, + 654, + 99.91675564, + 2.235789681, + 0, + 0.4715657021, + 0, + 0.006806716454, + 0, + 4.726889085e-05, + 0, + 655, + 105.2661708, + 1.949416373, + 0, + 0.4545395924, + 0, + 0.00688945051, + 0, + 4.784341766e-05, + 0, + 656, + 93.70653245, + 2.521154638, + 0, + 0.4856198322, + 0, + 0.006702961223, + 0, + 4.654836416e-05, + 0, + 657, + 110.0303657, + 1.692306544, + 0, + 0.4465557483, + 0, + 0.006958530291, + 0, + 4.832311087e-05, + 0, + 658, + 113.8936469, + 1.481321954, + 0, + 0.4355232344, + 0, + 0.007011717371, + 0, + 4.86925007e-05, + 0, + 659, + 92.32770267, + 2.562727773, + 0, + 0.5117924522, + 0, + 0.006678721017, + 0, + 4.638003693e-05, + 0, + 660, + 107.3629826, + 1.836859004, + 0, + 0.45232289, + 0, + 0.006920352985, + 0, + 4.805799477e-05, + 0, + 661, + 102.8838807, + 2.079471946, + 0, + 0.4626678973, + 0, + 0.006853323935, + 0, + 4.759255935e-05, + 0, + 662, + 77.85229133, + 2.72550052, + 0, + 0.5307603418, + 0, + 0.006392371141, + 0, + 4.439078451e-05, + 0, + 663, + 103.8860954, + 2.028974552, + 0, + 0.4607887201, + 0, + 0.006868658199, + 0, + 4.769904096e-05, + 0, + 664, + 106.1645556, + 1.901951974, + 0, + 0.4523614912, + 0, + 0.006902790238, + 0, + 4.793604388e-05, + 0, + 665, + 108.8189373, + 1.75056645, + 0, + 0.4491617008, + 0, + 0.006941344144, + 0, + 4.820375932e-05, + 0, + 666, + 88.11209086, + 2.689318611, + 0, + 0.509447202, + 0, + 0.006601596365, + 0, + 4.584442537e-05, + 0, + 667, + 121.3263869, + 1.172461072, + 0, + 0.4190656045, + 0, + 0.007107532632, + 0, + 4.935749306e-05, + 0, + 668, + 118.7903832, + 1.299382555, + 0, + 0.4251800402, + 0, + 0.007075769728, + 0, + 4.913709903e-05, + 0, + 669, + 101.6497353, + 2.146293593, + 0, + 0.4656475184, + 0, + 0.006834161207, + 0, + 4.745948655e-05, + 0, + 670, + 100.215705, + 2.222384581, + 0, + 0.4688439682, + 0, + 0.006811496334, + 0, + 4.730208623e-05, + 0, + 671, + 96.61136992, + 2.379565747, + 0, + 0.4913953155, + 0, + 0.006752569915, + 0, + 4.689285763e-05, + 0, + 672, + 89.457845, + 2.653776304, + 0, + 0.5042904228, + 0, + 0.006626737045, + 0, + 4.601902861e-05, + 0, + 673, + 94.84114754, + 2.47849272, + 0, + 0.4833690326, + 0, + 0.006722569352, + 0, + 4.668452492e-05, + 0, + 674, + 107.8167979, + 1.80954953, + 0, + 0.4513551543, + 0, + 0.00692693592, + 0, + 4.810370611e-05, + 0, + 675, + 109.2703499, + 1.727175157, + 0, + 0.4482053952, + 0, + 0.006947777421, + 0, + 4.824843504e-05, + 0, + 676, + 113.3285999, + 1.511205346, + 0, + 0.4373276342, + 0, + 0.007004088129, + 0, + 4.86395179e-05, + 0, + 677, + 93.61487532, + 2.523468038, + 0, + 0.4862579326, + 0, + 0.006701364024, + 0, + 4.653727309e-05, + 0, + 678, + 100.0468119, + 2.229952567, + 0, + 0.4702664003, + 0, + 0.006808798266, + 0, + 4.728334867e-05, + 0, + 679, + 97.37886009, + 2.356371757, + 0, + 0.4831759302, + 0, + 0.006765357149, + 0, + 4.698165927e-05, + 0, + 680, + 110.1970889, + 1.684995346, + 0, + 0.4461785604, + 0, + 0.006960876098, + 0, + 4.833940232e-05, + 0, + 681, + 96.44411186, + 2.386046084, + 0, + 0.4903113755, + 0, + 0.006749765713, + 0, + 4.687338398e-05, + 0, + 682, + 88.72499585, + 2.674393251, + 0, + 0.5090936533, + 0, + 0.006613109755, + 0, + 4.592438663e-05, + 0, + 683, + 83.30590383, + 2.692868894, + 0, + 0.5162948203, + 0, + 0.006507390776, + 0, + 4.519028878e-05, + 0, + 684, + 100.9643087, + 2.185759316, + 0, + 0.4664798907, + 0, + 0.006823382147, + 0, + 4.73846302e-05, + 0, + 685, + 109.2230794, + 1.729511122, + 0, + 0.4483061639, + 0, + 0.006947105386, + 0, + 4.824376805e-05, + 0, + 686, + 116.4332829, + 1.398356773, + 0, + 0.4308326556, + 0, + 0.007045392813, + 0, + 4.892630755e-05, + 0, + 687, + 99.2803181, + 2.26650901, + 0, + 0.4769194824, + 0, + 0.006796476493, + 0, + 4.719777594e-05, + 0, + 688, + 97.29601412, + 2.3587793, + 0, + 0.4851376596, + 0, + 0.006763983167, + 0, + 4.697211748e-05, + 0, + 689, + 104.5398665, + 1.991538274, + 0, + 0.4584001591, + 0, + 0.006878553973, + 0, + 4.776775543e-05, + 0, + 690, + 107.2990494, + 1.84061293, + 0, + 0.4524313353, + 0, + 0.00691942263, + 0, + 4.805153453e-05, + 0, + 691, + 106.0238651, + 1.90915007, + 0, + 0.4523561747, + 0, + 0.006900711159, + 0, + 4.79216075e-05, + 0, + 692, + 104.7596348, + 1.9785791, + 0, + 0.4572974024, + 0, + 0.006881861797, + 0, + 4.779072407e-05, + 0, + 693, + 111.0615802, + 1.64490314, + 0, + 0.4440218181, + 0, + 0.006972965292, + 0, + 4.8423363e-05, + 0, + 694, + 85.51819687, + 2.695763766, + 0, + 0.5107933265, + 0, + 0.006551639041, + 0, + 4.549749455e-05, + 0, + 695, + 112.8262144, + 1.541171741, + 0, + 0.4386398582, + 0, + 0.006997262426, + 0, + 4.859211321e-05, + 0, + 696, + 101.2306908, + 2.170885126, + 0, + 0.4662854965, + 0, + 0.006827582988, + 0, + 4.741380359e-05, + 0, + 697, + 103.1313153, + 2.067467764, + 0, + 0.4622519884, + 0, + 0.00685712849, + 0, + 4.761897871e-05, + 0, + 698, + 85.63376764, + 2.696439987, + 0, + 0.5106691499, + 0, + 0.006553908579, + 0, + 4.55132537e-05, + 0, + 699, + 103.3047716, + 2.058999427, + 0, + 0.461973788, + 0, + 0.006859788203, + 0, + 4.763744796e-05, + 0, + 700, + 111.6566797, + 1.612783799, + 0, + 0.4422304211, + 0, + 0.006981215668, + 0, + 4.848066414e-05, + 0, + 701, + 98.11786331, + 2.328843272, + 0, + 0.469316401, + 0, + 0.006777546067, + 0, + 4.706630763e-05, + 0, + 702, + 108.1863622, + 1.787091647, + 0, + 0.4505130467, + 0, + 0.00693226977, + 0, + 4.814074465e-05, + 0, + 703, + 97.45093384, + 2.354209761, + 0, + 0.481373063, + 0, + 0.006766551235, + 0, + 4.698995177e-05, + 0, + 704, + 96.35558685, + 2.389833508, + 0, + 0.4895380304, + 0, + 0.006748278982, + 0, + 4.686305948e-05, + 0, + 705, + 111.2635073, + 1.634486017, + 0, + 0.4434470634, + 0, + 0.006975771282, + 0, + 4.844285129e-05, + 0, + 706, + 83.91196008, + 2.692924698, + 0, + 0.5146524454, + 0, + 0.006519664469, + 0, + 4.527549481e-05, + 0, + 707, + 100.2295711, + 2.221759625, + 0, + 0.4687433556, + 0, + 0.006811717574, + 0, + 4.730362269e-05, + 0, + 708, + 89.49775213, + 2.652663671, + 0, + 0.503751488, + 0, + 0.006627474842, + 0, + 4.602415258e-05, + 0, + 709, + 106.9183674, + 1.862267778, + 0, + 0.4527997527, + 0, + 0.006913867714, + 0, + 4.801296238e-05, + 0, + 710, + 86.78072647, + 2.702030899, + 0, + 0.5118197078, + 0, + 0.006576208781, + 0, + 4.566811171e-05, + 0, + 711, + 122.9242587, + 1.118122081, + 0, + 0.4160890654, + 0, + 0.007127056942, + 0, + 4.949313739e-05, + 0, + 712, + 96.19848411, + 2.397197128, + 0, + 0.488028407, + 0, + 0.006745636176, + 0, + 4.684470678e-05, + 0, + 713, + 95.31576712, + 2.450009212, + 0, + 0.4831170403, + 0, + 0.006730682983, + 0, + 4.67408674e-05, + 0, + 714, + 107.7290929, + 1.814888402, + 0, + 0.4515567266, + 0, + 0.006925666548, + 0, + 4.809489163e-05, + 0, + 715, + 100.3848045, + 2.214680225, + 0, + 0.4677952168, + 0, + 0.006814191593, + 0, + 4.732080424e-05, + 0, + 716, + 106.3267308, + 1.893642054, + 0, + 0.4524636187, + 0, + 0.00690518226, + 0, + 4.795265324e-05, + 0, + 717, + 103.5593521, + 2.04624003, + 0, + 0.461527976, + 0, + 0.006863680936, + 0, + 4.766447916e-05, + 0, + 718, + 103.8475457, + 2.031069693, + 0, + 0.4608891556, + 0, + 0.006868072073, + 0, + 4.769497096e-05, + 0, + 719, + 117.4268681, + 1.364033114, + 0, + 0.4284893257, + 0, + 0.007058299081, + 0, + 4.901587956e-05, + 0, + 720, + 84.20050742, + 2.692680521, + 0, + 0.5138730239, + 0, + 0.0065254679, + 0, + 4.531578485e-05, + 0, + 721, + 89.38094409, + 2.655932723, + 0, + 0.5052402326, + 0, + 0.00662531408, + 0, + 4.600914613e-05, + 0, + 722, + 92.16582157, + 2.569006551, + 0, + 0.5130673027, + 0, + 0.006675844747, + 0, + 4.636006339e-05, + 0, + 723, + 84.42454627, + 2.692601616, + 0, + 0.5132715101, + 0, + 0.006529955953, + 0, + 4.534694386e-05, + 0, + 724, + 94.35248345, + 2.50127536, + 0, + 0.483954432, + 0, + 0.006714161256, + 0, + 4.662613812e-05, + 0, + 725, + 106.8352479, + 1.866828513, + 0, + 0.452807598, + 0, + 0.006912651345, + 0, + 4.800451624e-05, + 0, + 726, + 89.19155399, + 2.661294221, + 0, + 0.5070885237, + 0, + 0.00662180267, + 0, + 4.598475936e-05, + 0, + 727, + 101.1208481, + 2.177124399, + 0, + 0.4663742497, + 0, + 0.006825852579, + 0, + 4.740178652e-05, + 0, + 728, + 102.7452908, + 2.086270462, + 0, + 0.4629300802, + 0, + 0.006851187566, + 0, + 4.757772398e-05, + 0, + 729, + 101.9313272, + 2.129788585, + 0, + 0.464963579, + 0, + 0.006838561128, + 0, + 4.749004176e-05, + 0, + 730, + 82.58531112, + 2.688897445, + 0, + 0.5182487507, + 0, + 0.006492650588, + 0, + 4.508796265e-05, + 0, + 731, + 93.1636275, + 2.535036228, + 0, + 0.4924357353, + 0, + 0.006693471497, + 0, + 4.648246666e-05, + 0, + 732, + 101.8281322, + 2.135786806, + 0, + 0.4652303924, + 0, + 0.006836950598, + 0, + 4.747885749e-05, + 0, + 733, + 106.7564368, + 1.871099315, + 0, + 0.4527916652, + 0, + 0.006911496867, + 0, + 4.799649986e-05, + 0, + 734, + 107.2640231, + 1.842656348, + 0, + 0.4524859827, + 0, + 0.006918912617, + 0, + 4.804799309e-05, + 0, + 735, + 119.7550768, + 1.247570761, + 0, + 0.4228470921, + 0, + 0.007087963876, + 0, + 4.922169813e-05, + 0, + 736, + 105.1123374, + 1.958100589, + 0, + 0.4553583504, + 0, + 0.006887151029, + 0, + 4.782745085e-05, + 0, + 737, + 93.73116637, + 2.520524101, + 0, + 0.4854757049, + 0, + 0.006703390149, + 0, + 4.655134266e-05, + 0, + 738, + 109.0939293, + 1.736025891, + 0, + 0.4485807473, + 0, + 0.006945267338, + 0, + 4.823100369e-05, + 0, + 739, + 112.5989046, + 1.555301192, + 0, + 0.4392468291, + 0, + 0.006994160828, + 0, + 4.857057205e-05, + 0, + 740, + 92.24415971, + 2.565948951, + 0, + 0.5126765967, + 0, + 0.006677237451, + 0, + 4.636973469e-05, + 0, + 741, + 104.8827213, + 1.971362746, + 0, + 0.4566315026, + 0, + 0.00688371035, + 0, + 4.780355987e-05, + 0, + 742, + 98.57906502, + 2.305119332, + 0, + 0.4719637066, + 0, + 0.006785092018, + 0, + 4.711871265e-05, + 0, + 743, + 92.52776416, + 2.555260961, + 0, + 0.508102692, + 0, + 0.00668226675, + 0, + 4.640465925e-05, + 0, + 744, + 110.1807997, + 1.685710202, + 0, + 0.4462158095, + 0, + 0.006960647113, + 0, + 4.833781203e-05, + 0, + 745, + 107.2244572, + 1.844952865, + 0, + 0.4525432805, + 0, + 0.006918336239, + 0, + 4.804399082e-05, + 0, + 746, + 101.4792149, + 2.156384245, + 0, + 0.4659707874, + 0, + 0.006831488781, + 0, + 4.744092776e-05, + 0, + 747, + 108.9907789, + 1.741372725, + 0, + 0.4487992371, + 0, + 0.006943797259, + 0, + 4.822079477e-05, + 0, + 748, + 98.72523101, + 2.29699532, + 0, + 0.4737280638, + 0, + 0.006787473788, + 0, + 4.713525361e-05, + 0, + 749, + 104.1285764, + 2.015456124, + 0, + 0.460060273, + 0, + 0.006872338266, + 0, + 4.772459485e-05, + 0, + 750, + 90.00292308, + 2.639018458, + 0, + 0.494483434, + 0, + 0.006636776842, + 0, + 4.60887542e-05, + 0, + 751, + 104.6361567, + 1.985857125, + 0, + 0.4579332707, + 0, + 0.006880004427, + 0, + 4.7777827e-05, + 0, + 752, + 115.4077701, + 1.426269106, + 0, + 0.4324209254, + 0, + 0.007031914452, + 0, + 4.883274246e-05, + 0, + 753, + 95.81422796, + 2.418446241, + 0, + 0.4847970817, + 0, + 0.006739148652, + 0, + 4.679965519e-05, + 0, + 754, + 99.63755991, + 2.248682206, + 0, + 0.4745151672, + 0, + 0.00680223509, + 0, + 4.723776851e-05, + 0, + 755, + 81.93634953, + 2.679738467, + 0, + 0.5199493389, + 0, + 0.006479242263, + 0, + 4.499487855e-05, + 0, + 756, + 89.29234634, + 2.658433973, + 0, + 0.5061905143, + 0, + 0.006623672657, + 0, + 4.599774645e-05, + 0, + 757, + 93.58459422, + 2.524224917, + 0, + 0.4865073027, + 0, + 0.006700835914, + 0, + 4.653360585e-05, + 0, + 758, + 101.3121799, + 2.166178373, + 0, + 0.4662020884, + 0, + 0.006828865092, + 0, + 4.742270732e-05, + 0, + 759, + 93.23270226, + 2.533172664, + 0, + 0.4911229641, + 0, + 0.006694682802, + 0, + 4.649087809e-05, + 0, + 760, + 112.3664296, + 1.569843308, + 0, + 0.4399239905, + 0, + 0.006990980182, + 0, + 4.854848168e-05, + 0, + 761, + 107.7039036, + 1.816418686, + 0, + 0.4516141054, + 0, + 0.006925301726, + 0, + 4.809235832e-05, + 0, + 762, + 94.99189732, + 2.469971347, + 0, + 0.483197013, + 0, + 0.006725152039, + 0, + 4.670245949e-05, + 0, + 763, + 129.1611527, + 0.6330998755, + 0, + 0.4004999412, + 0, + 0.007199202056, + 0, + 5.000058551e-05, + 0, + 764, + 95.59422236, + 2.432138937, + 0, + 0.4837009153, + 0, + 0.006735419144, + 0, + 4.677375642e-05, + 0, + 765, + 105.6986469, + 1.925994642, + 0, + 0.4528158017, + 0, + 0.00689589107, + 0, + 4.788813858e-05, + 0, + 766, + 89.87171342, + 2.642488405, + 0, + 0.4972593532, + 0, + 0.006634367452, + 0, + 4.607202129e-05, + 0, + 767, + 95.10363108, + 2.463292531, + 0, + 0.4831087932, + 0, + 0.006727062914, + 0, + 4.671572894e-05, + 0, + 768, + 88.36996563, + 2.683545589, + 0, + 0.5092811299, + 0, + 0.00660645364, + 0, + 4.587815944e-05, + 0, + 769, + 102.3805201, + 2.104884461, + 0, + 0.4637605197, + 0, + 0.006845545931, + 0, + 4.753854694e-05, + 0, + 770, + 106.799317, + 1.868781927, + 0, + 0.4528030347, + 0, + 0.006912125145, + 0, + 4.800086245e-05, + 0, + 771, + 113.1387023, + 1.522246868, + 0, + 0.4378398197, + 0, + 0.00700151279, + 0, + 4.86216323e-05, + 0, + 772, + 87.01859266, + 2.701863012, + 0, + 0.5119048106, + 0, + 0.006580783349, + 0, + 4.569988061e-05, + 0, + 773, + 114.4852097, + 1.455764817, + 0, + 0.4336712841, + 0, + 0.007019650813, + 0, + 4.874759213e-05, + 0, + 774, + 109.1578065, + 1.732779078, + 0, + 0.4484450768, + 0, + 0.006946176788, + 0, + 4.823731937e-05, + 0, + 775, + 108.5331547, + 1.766608784, + 0, + 0.449763773, + 0, + 0.006937253173, + 0, + 4.817535033e-05, + 0, + 776, + 101.1850903, + 2.173491364, + 0, + 0.4663251191, + 0, + 0.006826864927, + 0, + 4.740881692e-05, + 0, + 777, + 85.86471162, + 2.697876003, + 0, + 0.5105798577, + 0, + 0.006558431358, + 0, + 4.554465946e-05, + 0, + 778, + 109.9040248, + 1.697867376, + 0, + 0.4468363153, + 0, + 0.006956749559, + 0, + 4.831074392e-05, + 0, + 779, + 99.52946437, + 2.253895291, + 0, + 0.4755119251, + 0, + 0.006800495542, + 0, + 4.722568762e-05, + 0, + 780, + 95.8604979, + 2.415677733, + 0, + 0.4851058366, + 0, + 0.006739931615, + 0, + 4.680509232e-05, + 0, + 781, + 96.91694157, + 2.369589105, + 0, + 0.4910684674, + 0, + 0.00675767684, + 0, + 4.69283227e-05, + 0, + 782, + 103.9113877, + 2.027591523, + 0, + 0.4607206526, + 0, + 0.006869042594, + 0, + 4.770171016e-05, + 0, + 783, + 96.71173102, + 2.376059617, + 0, + 0.4916808977, + 0, + 0.006754249526, + 0, + 4.690452166e-05, + 0, + 784, + 92.87650742, + 2.543443555, + 0, + 0.4991500263, + 0, + 0.006688424203, + 0, + 4.644741762e-05, + 0, + 785, + 83.93108223, + 2.692907751, + 0, + 0.5146007099, + 0, + 0.006520049869, + 0, + 4.527817039e-05, + 0, + 786, + 98.38783184, + 2.315422272, + 0, + 0.4700003659, + 0, + 0.00678196882, + 0, + 4.709702266e-05, + 0, + 787, + 97.67117574, + 2.34703296, + 0, + 0.4758666444, + 0, + 0.006770192965, + 0, + 4.701524237e-05, + 0, + 788, + 113.5889011, + 1.496828506, + 0, + 0.436547183, + 0, + 0.007007608971, + 0, + 4.866396948e-05, + 0, + 789, + 100.4083323, + 2.213590145, + 0, + 0.4676796924, + 0, + 0.006814566118, + 0, + 4.732340523e-05, + 0, + 790, + 105.9746437, + 1.911674655, + 0, + 0.4523797105, + 0, + 0.006899982912, + 0, + 4.791655082e-05, + 0, + 791, + 99.40893591, + 2.259890578, + 0, + 0.4763812873, + 0, + 0.00679855294, + 0, + 4.721219655e-05, + 0, + 792, + 122.0427256, + 1.146661512, + 0, + 0.4174000367, + 0, + 0.007116332786, + 0, + 4.941860165e-05, + 0, + 793, + 101.0832283, + 2.179229007, + 0, + 0.4664004129, + 0, + 0.006825259352, + 0, + 4.739766677e-05, + 0, + 794, + 116.1193808, + 1.407219562, + 0, + 0.4314684091, + 0, + 0.007041284257, + 0, + 4.889778886e-05, + 0, + 795, + 88.88329684, + 2.67002059, + 0, + 0.508747319, + 0, + 0.006616066064, + 0, + 4.594491839e-05, + 0, + 796, + 115.9312204, + 1.412286043, + 0, + 0.4317920747, + 0, + 0.007038814287, + 0, + 4.888064304e-05, + 0, + 797, + 101.2419883, + 2.170236193, + 0, + 0.4662749516, + 0, + 0.006827760819, + 0, + 4.741503856e-05, + 0, + 798, + 103.5539104, + 2.046518425, + 0, + 0.4615384117, + 0, + 0.006863597863, + 0, + 4.76639023e-05, + 0, + 799, + 100.6999336, + 2.199540377, + 0, + 0.4667705558, + 0, + 0.006819198163, + 0, + 4.735557364e-05, + 0, + 800, + 100.9797309, + 2.18492346, + 0, + 0.466469261, + 0, + 0.006823625763, + 0, + 4.738632203e-05, + 0, + 801, + 110.6865374, + 1.66302599, + 0, + 0.4450081246, + 0, + 0.006967735853, + 0, + 4.838704362e-05, + 0, + 802, + 116.1855617, + 1.405402134, + 0, + 0.4313432217, + 0, + 0.007042151725, + 0, + 4.890381039e-05, + 0, + 803, + 108.861121, + 1.748276704, + 0, + 0.4490728716, + 0, + 0.006941946806, + 0, + 4.820794444e-05, + 0, + 804, + 79.72648796, + 2.653263198, + 0, + 0.5184749806, + 0, + 0.006432708602, + 0, + 4.467164775e-05, + 0, + 805, + 102.2772044, + 2.110412483, + 0, + 0.4640290335, + 0, + 0.006843943079, + 0, + 4.75274162e-05, + 0, + 806, + 114.3353006, + 1.461670857, + 0, + 0.4340740956, + 0, + 0.007017645566, + 0, + 4.873366774e-05, + 0, + 807, + 97.43931619, + 2.354563325, + 0, + 0.4816675026, + 0, + 0.006766358837, + 0, + 4.698861563e-05, + 0, + 808, + 88.04554628, + 2.690656511, + 0, + 0.509539405, + 0, + 0.006600339827, + 0, + 4.583569866e-05, + 0, + 809, + 92.28388681, + 2.564411243, + 0, + 0.5123130456, + 0, + 0.006677943145, + 0, + 4.63746352e-05, + 0, + 810, + 90.12464934, + 2.635827733, + 0, + 0.4918045007, + 0, + 0.006639007954, + 0, + 4.610424892e-05, + 0, + 811, + 98.43996218, + 2.312664834, + 0, + 0.4704549722, + 0, + 0.006782821001, + 0, + 4.710294088e-05, + 0, + 812, + 124.8786368, + 1.007976649, + 0, + 0.4133064688, + 0, + 0.007150403547, + 0, + 4.965585255e-05, + 0, + 813, + 89.5666971, + 2.650752949, + 0, + 0.5027467136, + 0, + 0.006628748456, + 0, + 4.603299779e-05, + 0, + 814, + 90.85072101, + 2.616130523, + 0, + 0.4826173614, + 0, + 0.00665223444, + 0, + 4.61961032e-05, + 0, + 815, + 88.86112807, + 2.670639874, + 0, + 0.5088126025, + 0, + 0.006615652482, + 0, + 4.594204603e-05, + 0, + 816, + 111.2829534, + 1.633456551, + 0, + 0.4433898917, + 0, + 0.006976041153, + 0, + 4.844472562e-05, + 0, + 817, + 83.22191914, + 2.69268887, + 0, + 0.5165226769, + 0, + 0.00650568098, + 0, + 4.517841935e-05, + 0, + 818, + 102.5148705, + 2.097876769, + 0, + 0.4634310598, + 0, + 0.006847626987, + 0, + 4.755299843e-05, + 0, + 819, + 108.3883672, + 1.7750491, + 0, + 0.4500723662, + 0, + 0.006935175132, + 0, + 4.816091994e-05, + 0, + 820, + 93.37944016, + 2.529364166, + 0, + 0.4887866947, + 0, + 0.006697252225, + 0, + 4.650872041e-05, + 0, + 821, + 96.65749607, + 2.377921718, + 0, + 0.4915674721, + 0, + 0.006753342148, + 0, + 4.689822039e-05, + 0, + 822, + 103.3317679, + 2.057668717, + 0, + 0.461929603, + 0, + 0.006860201612, + 0, + 4.764031869e-05, + 0, + 823, + 105.0896105, + 1.959398438, + 0, + 0.4554833803, + 0, + 0.006886810929, + 0, + 4.782508931e-05, + 0, + 824, + 90.71844423, + 2.619937816, + 0, + 0.4824430111, + 0, + 0.006649835137, + 0, + 4.617944091e-05, + 0, + 825, + 81.12318912, + 2.663293045, + 0, + 0.5211686065, + 0, + 0.006462270039, + 0, + 4.487703342e-05, + 0, + 826, + 94.53105807, + 2.493855068, + 0, + 0.4837574289, + 0, + 0.006717240293, + 0, + 4.664751926e-05, + 0, + 827, + 95.17094342, + 2.459148327, + 0, + 0.4830817262, + 0, + 0.006728212707, + 0, + 4.672371331e-05, + 0, + 828, + 104.3656147, + 2.001774121, + 0, + 0.4591711475, + 0, + 0.006875924583, + 0, + 4.774949755e-05, + 0, + 829, + 117.7301576, + 1.351243544, + 0, + 0.4277525926, + 0, + 0.007062209091, + 0, + 4.904301167e-05, + 0, + 830, + 127.3916313, + 0.7725626772, + 0, + 0.404649179, + 0, + 0.007179473639, + 0, + 4.986011278e-05, + 0, + 831, + 92.19510215, + 2.567860302, + 0, + 0.5129737001, + 0, + 0.006676365478, + 0, + 4.636367949e-05, + 0, + 832, + 103.681119, + 2.03993488, + 0, + 0.4612801414, + 0, + 0.006865538279, + 0, + 4.767737648e-05, + 0, + 833, + 100.3152535, + 2.217873781, + 0, + 0.4681796016, + 0, + 0.006813083766, + 0, + 4.731311061e-05, + 0, + 834, + 92.98181906, + 2.540224873, + 0, + 0.4964889294, + 0, + 0.006690277791, + 0, + 4.646028918e-05, + 0, + 835, + 109.9504753, + 1.695818284, + 0, + 0.4467336221, + 0, + 0.006957404576, + 0, + 4.831529291e-05, + 0, + 836, + 103.1668087, + 2.06574367, + 0, + 0.4621952122, + 0, + 0.006857673223, + 0, + 4.762276139e-05, + 0, + 837, + 91.80873998, + 2.583056532, + 0, + 0.5089000528, + 0, + 0.006669477187, + 0, + 4.631584511e-05, + 0, + 838, + 90.20424069, + 2.633747456, + 0, + 0.490058268, + 0, + 0.006640464635, + 0, + 4.611436529e-05, + 0, + 839, + 113.3918838, + 1.507623377, + 0, + 0.4371471415, + 0, + 0.007004945095, + 0, + 4.864546942e-05, + 0, + 840, + 105.7984513, + 1.920775115, + 0, + 0.4525949892, + 0, + 0.006897372384, + 0, + 4.789842427e-05, + 0, + 841, + 91.89785767, + 2.579567404, + 0, + 0.5108375761, + 0, + 0.006671069333, + 0, + 4.632690151e-05, + 0, + 842, + 94.65678964, + 2.488001599, + 0, + 0.4836049898, + 0, + 0.006719403745, + 0, + 4.666254253e-05, + 0, + 843, + 99.05979277, + 2.278343863, + 0, + 0.4766860749, + 0, + 0.006792907916, + 0, + 4.717299272e-05, + 0, + 844, + 101.6688621, + 2.145162049, + 0, + 0.4656062248, + 0, + 0.006834460587, + 0, + 4.74615656e-05, + 0, + 845, + 111.9322218, + 1.596559996, + 0, + 0.4413227963, + 0, + 0.006985016175, + 0, + 4.850705988e-05, + 0, + 846, + 99.36272194, + 2.262242536, + 0, + 0.4766261964, + 0, + 0.006797807259, + 0, + 4.720701791e-05, + 0, + 847, + 96.37181102, + 2.389120047, + 0, + 0.4896863799, + 0, + 0.00674855159, + 0, + 4.686495259e-05, + 0, + 848, + 92.70192303, + 2.549143661, + 0, + 0.5037694259, + 0, + 0.006685345423, + 0, + 4.64260381e-05, + 0, + 849, + 91.95739783, + 2.577222331, + 0, + 0.511814953, + 0, + 0.00667213195, + 0, + 4.633428066e-05, + 0, + 850, + 99.77559124, + 2.242222363, + 0, + 0.4730755093, + 0, + 0.006804452723, + 0, + 4.725316962e-05, + 0, + 851, + 105.0074119, + 1.964121585, + 0, + 0.455939515, + 0, + 0.006885580028, + 0, + 4.781654233e-05, + 0, + 852, + 101.862098, + 2.133804189, + 0, + 0.4651441461, + 0, + 0.006837480935, + 0, + 4.74825404e-05, + 0, + 853, + 97.23109189, + 2.360626239, + 0, + 0.4865496192, + 0, + 0.00676290538, + 0, + 4.696463267e-05, + 0, + 854, + 101.3685349, + 2.162892174, + 0, + 0.4661335597, + 0, + 0.006829750936, + 0, + 4.742885915e-05, + 0, + 855, + 100.8198527, + 2.193419221, + 0, + 0.4666032535, + 0, + 0.006821097827, + 0, + 4.736876628e-05, + 0, + 856, + 114.0587554, + 1.473576963, + 0, + 0.434954521, + 0, + 0.007013937158, + 0, + 4.870791582e-05, + 0, + 857, + 99.59419338, + 2.250755931, + 0, + 0.4749342872, + 0, + 0.006801537508, + 0, + 4.723292392e-05, + 0, + 858, + 106.3660548, + 1.891617935, + 0, + 0.4524973592, + 0, + 0.006905761544, + 0, + 4.795667559e-05, + 0, + 859, + 94.40893605, + 2.499040787, + 0, + 0.4838936149, + 0, + 0.006715135431, + 0, + 4.663290289e-05, + 0, + 860, + 97.90236633, + 2.33828014, + 0, + 0.4713361588, + 0, + 0.006774004184, + 0, + 4.704171017e-05, + 0, + 861, + 86.61998003, + 2.701746743, + 0, + 0.5115968009, + 0, + 0.006573107666, + 0, + 4.56465758e-05, + 0, + 862, + 73.47939481, + 2.842187884, + 0, + 0.5433518415, + 0, + 0.006297071098, + 0, + 4.371915089e-05, + 0, + 863, + 105.1780929, + 1.954366543, + 0, + 0.4550013689, + 0, + 0.006888134486, + 0, + 4.783427964e-05, + 0, + 864, + 101.4170464, + 2.160047069, + 0, + 0.4660668909, + 0, + 0.006830512955, + 0, + 4.743415106e-05, + 0, + 865, + 88.0778922, + 2.690014561, + 0, + 0.5094916063, + 0, + 0.006600950764, + 0, + 4.583994165e-05, + 0, + 866, + 108.1471065, + 1.789459296, + 0, + 0.4506004426, + 0, + 0.006931704341, + 0, + 4.813681824e-05, + 0, + 867, + 100.0000101, + 2.232047668, + 0, + 0.4707176066, + 0, + 0.006808049527, + 0, + 4.72781488e-05, + 0, + 868, + 119.8768584, + 1.241089127, + 0, + 0.4225531264, + 0, + 0.007089493502, + 0, + 4.923231049e-05, + 0, + 869, + 103.9782879, + 2.0239018, + 0, + 0.4605320186, + 0, + 0.006870058742, + 0, + 4.770876617e-05, + 0, + 870, + 112.0090624, + 1.59191444, + 0, + 0.4410681119, + 0, + 0.006986073829, + 0, + 4.851440561e-05, + 0, + 871, + 102.719958, + 2.087525271, + 0, + 0.4629810412, + 0, + 0.006850796639, + 0, + 4.75750093e-05, + 0, + 872, + 102.1846274, + 2.115471369, + 0, + 0.4642774218, + 0, + 0.00684250497, + 0, + 4.751742944e-05, + 0, + 873, + 110.4228847, + 1.675015261, + 0, + 0.4456519108, + 0, + 0.006964045645, + 0, + 4.836141482e-05, + 0, + 874, + 77.23115759, + 2.756720353, + 0, + 0.5328831413, + 0, + 0.006378878471, + 0, + 4.429656215e-05, + 0, + 875, + 97.31700419, + 2.358175694, + 0, + 0.4846554833, + 0, + 0.006764331427, + 0, + 4.697453602e-05, + 0, + 876, + 105.5242773, + 1.935266674, + 0, + 0.4533741438, + 0, + 0.006893298557, + 0, + 4.787013712e-05, + 0, + 877, + 109.057163, + 1.737916895, + 0, + 0.4486587095, + 0, + 0.006944743561, + 0, + 4.822736633e-05, + 0, + 878, + 98.87570644, + 2.28856158, + 0, + 0.4753651044, + 0, + 0.006789920907, + 0, + 4.715224843e-05, + 0, + 879, + 107.0048781, + 1.857457168, + 0, + 0.4527632195, + 0, + 0.006915132378, + 0, + 4.80217439e-05, + 0, + 880, + 79.54832545, + 2.656062318, + 0, + 0.5189584215, + 0, + 0.00642890395, + 0, + 4.46451943e-05, + 0, + 881, + 96.12561095, + 2.400890362, + 0, + 0.4873266422, + 0, + 0.006744408401, + 0, + 4.683618065e-05, + 0, + 882, + 87.95233495, + 2.692414924, + 0, + 0.5097088948, + 0, + 0.006598577587, + 0, + 4.582345985e-05, + 0, + 883, + 126.0295916, + 0.9007406669, + 0, + 0.4080845072, + 0, + 0.007163858937, + 0, + 4.975009055e-05, + 0, + 884, + 104.7012349, + 1.982018429, + 0, + 0.4576028803, + 0, + 0.006880983707, + 0, + 4.778462686e-05, + 0, + 885, + 107.3971056, + 1.834843319, + 0, + 0.4522608385, + 0, + 0.006920849242, + 0, + 4.806144071e-05, + 0, + 886, + 102.4570427, + 2.100868831, + 0, + 0.4635697784, + 0, + 0.006846731699, + 0, + 4.754678129e-05, + 0, + 887, + 102.8428465, + 2.081474926, + 0, + 0.4627427587, + 0, + 0.006852691798, + 0, + 4.758816967e-05, + 0, + 888, + 98.70155526, + 2.29831937, + 0, + 0.4734449418, + 0, + 0.006787088309, + 0, + 4.713257653e-05, + 0, + 889, + 78.65397637, + 2.685479587, + 0, + 0.5257579572, + 0, + 0.006409704595, + 0, + 4.451159781e-05, + 0, + 890, + 94.13432552, + 2.50901966, + 0, + 0.4842201455, + 0, + 0.006710389612, + 0, + 4.659994748e-05, + 0, + 891, + 88.48164789, + 2.680792703, + 0, + 0.5092575874, + 0, + 0.006608551336, + 0, + 4.589272808e-05, + 0, + 892, + 87.81757467, + 2.694706418, + 0, + 0.5100312046, + 0, + 0.006596025353, + 0, + 4.580573456e-05, + 0, + 893, + 107.650525, + 1.819655189, + 0, + 0.4517344526, + 0, + 0.006924528261, + 0, + 4.808698743e-05, + 0, + 894, + 97.8414285, + 2.340722903, + 0, + 0.4723254989, + 0, + 0.006773000759, + 0, + 4.703474166e-05, + 0, + 895, + 128.2567002, + 0.7012891578, + 0, + 0.4026172418, + 0, + 0.007189201948, + 0, + 4.992913987e-05, + 0, + 896, + 104.5889358, + 1.988643766, + 0, + 0.458165669, + 0, + 0.006879293347, + 0, + 4.777288945e-05, + 0, + 897, + 81.67751143, + 2.674784283, + 0, + 0.520536274, + 0, + 0.006473860063, + 0, + 4.495751096e-05, + 0, + 898, + 99.26236062, + 2.267450841, + 0, + 0.4769572675, + 0, + 0.006796186297, + 0, + 4.719576057e-05, + 0, + 899, + 101.8029808, + 2.137259507, + 0, + 0.4652930693, + 0, + 0.006836557734, + 0, + 4.747612925e-05, + 0, + 900, + 94.88693148, + 2.475970647, + 0, + 0.4833127487, + 0, + 0.00672335429, + 0, + 4.668997564e-05, + 0, + 901, + 97.92496527, + 2.337348801, + 0, + 0.4710134539, + 0, + 0.006774376098, + 0, + 4.704429301e-05, + 0, + 902, + 91.53428991, + 2.593495296, + 0, + 0.5002853339, + 0, + 0.006664561418, + 0, + 4.628170811e-05, + 0, + 903, + 117.0633699, + 1.377903792, + 0, + 0.4293689095, + 0, + 0.00705359467, + 0, + 4.898323251e-05, + 0, + 904, + 112.2533887, + 1.576886627, + 0, + 0.4402749353, + 0, + 0.006989430453, + 0, + 4.853771839e-05, + 0, + 905, + 112.7936262, + 1.543184485, + 0, + 0.4387243158, + 0, + 0.006996818274, + 0, + 4.858902851e-05, + 0, + 906, + 94.46371076, + 2.496775185, + 0, + 0.483833735, + 0, + 0.006716079942, + 0, + 4.663946166e-05, + 0, + 907, + 94.27116853, + 2.504321242, + 0, + 0.4840439897, + 0, + 0.006712756736, + 0, + 4.6616385e-05, + 0, + 908, + 104.9046835, + 1.970081496, + 0, + 0.4565103793, + 0, + 0.00688403988, + 0, + 4.780584803e-05, + 0, + 909, + 123.6282442, + 1.089858859, + 0, + 0.4163888948, + 0, + 0.007135536072, + 0, + 4.955214565e-05, + 0, + 910, + 76.43984753, + 2.789231711, + 0, + 0.5351161335, + 0, + 0.006361632754, + 0, + 4.417583415e-05, + 0, + 911, + 94.51813607, + 2.494426959, + 0, + 0.4837723485, + 0, + 0.006717017737, + 0, + 4.664597381e-05, + 0, + 912, + 88.52042514, + 2.679806727, + 0, + 0.5092473895, + 0, + 0.006609278843, + 0, + 4.589778068e-05, + 0, + 913, + 101.532007, + 2.153263742, + 0, + 0.4658798088, + 0, + 0.006832316795, + 0, + 4.744667796e-05, + 0, + 914, + 97.95339611, + 2.336157518, + 0, + 0.470643084, + 0, + 0.006774843828, + 0, + 4.704754127e-05, + 0, + 915, + 97.5326499, + 2.351659003, + 0, + 0.4792879145, + 0, + 0.006767903676, + 0, + 4.6999344e-05, + 0, + 916, + 98.22844659, + 2.323539834, + 0, + 0.4692042326, + 0, + 0.006779359632, + 0, + 4.707890241e-05, + 0, + 917, + 100.9132318, + 2.18850305, + 0, + 0.4665175178, + 0, + 0.00682257496, + 0, + 4.737902453e-05, + 0, + 918, + 104.3997482, + 1.999777146, + 0, + 0.459027921, + 0, + 0.00687644011, + 0, + 4.775307726e-05, + 0, + 919, + 91.32753108, + 2.600899791, + 0, + 0.4929153975, + 0, + 0.006660845501, + 0, + 4.625590312e-05, + 0, + 920, + 98.80859482, + 2.292322832, + 0, + 0.4746792833, + 0, + 0.006788830109, + 0, + 4.714467302e-05, + 0, + 921, + 105.5439374, + 1.934210384, + 0, + 0.4533007412, + 0, + 0.006893591148, + 0, + 4.787216877e-05, + 0, + 922, + 95.48963884, + 2.438838643, + 0, + 0.4833871319, + 0, + 0.006733642391, + 0, + 4.67614182e-05, + 0, + 923, + 113.1002204, + 1.524532416, + 0, + 0.4379395985, + 0, + 0.007000990212, + 0, + 4.861800299e-05, + 0, + 924, + 77.48794059, + 2.744209446, + 0, + 0.5320919269, + 0, + 0.006384462153, + 0, + 4.433557613e-05, + 0, + 925, + 94.85241282, + 2.47787778, + 0, + 0.4833549696, + 0, + 0.006722762534, + 0, + 4.66858664e-05, + 0, + 926, + 98.5183276, + 2.3084433, + 0, + 0.4712645013, + 0, + 0.00678410093, + 0, + 4.711182973e-05, + 0, + 927, + 83.75035342, + 2.693047939, + 0, + 0.5150899541, + 0, + 0.0065164028, + 0, + 4.525285134e-05, + 0, + 928, + 103.0788821, + 2.070010281, + 0, + 0.4623365428, + 0, + 0.006856323309, + 0, + 4.761338744e-05, + 0, + 929, + 102.0322141, + 2.124008921, + 0, + 0.4646925176, + 0, + 0.006840133506, + 0, + 4.750096104e-05, + 0, + 930, + 102.2328381, + 2.112824503, + 0, + 0.4641473692, + 0, + 0.006843254105, + 0, + 4.752263171e-05, + 0, + 931, + 89.82036967, + 2.643858553, + 0, + 0.4982898986, + 0, + 0.006633423367, + 0, + 4.606546472e-05, + 0, + 932, + 107.3308839, + 1.838747519, + 0, + 0.4523786766, + 0, + 0.006919885977, + 0, + 4.805475194e-05, + 0, + 933, + 121.7438683, + 1.156822103, + 0, + 0.4180773858, + 0, + 0.007112670622, + 0, + 4.939316669e-05, + 0, + 934, + 105.7331045, + 1.924186176, + 0, + 0.4527312641, + 0, + 0.006896402708, + 0, + 4.78916912e-05, + 0, + 935, + 97.17833229, + 2.362112884, + 0, + 0.4875943824, + 0, + 0.006762028817, + 0, + 4.695854529e-05, + 0, + 936, + 113.4527514, + 1.504228926, + 0, + 0.4369680385, + 0, + 0.007005768744, + 0, + 4.865118953e-05, + 0, + 937, + 112.5751121, + 1.556788683, + 0, + 0.4393132734, + 0, + 0.006993835706, + 0, + 4.856831401e-05, + 0, + 938, + 121.1809342, + 1.178372342, + 0, + 0.4194138523, + 0, + 0.007105736471, + 0, + 4.934502473e-05, + 0, + 939, + 116.5764679, + 1.394064654, + 0, + 0.4305145887, + 0, + 0.007047261935, + 0, + 4.893928096e-05, + 0, + 940, + 113.802805, + 1.485783567, + 0, + 0.4358364557, + 0, + 0.007010494225, + 0, + 4.868400654e-05, + 0, + 941, + 94.75806491, + 2.482910167, + 0, + 0.4834752233, + 0, + 0.006721143715, + 0, + 4.66746251e-05, + 0, + 942, + 96.24009973, + 2.39516627, + 0, + 0.4884341538, + 0, + 0.006746336782, + 0, + 4.684957206e-05, + 0, + 943, + 109.5312147, + 1.714711744, + 0, + 0.4476467456, + 0, + 0.006951479229, + 0, + 4.827414272e-05, + 0, + 944, + 98.13755033, + 2.327920807, + 0, + 0.4692518363, + 0, + 0.006777869131, + 0, + 4.706855123e-05, + 0, + 945, + 84.85565914, + 2.693062229, + 0, + 0.5121460885, + 0, + 0.006538548005, + 0, + 4.540659793e-05, + 0, + 946, + 84.58462945, + 2.692662511, + 0, + 0.5128462751, + 0, + 0.006533153193, + 0, + 4.536914171e-05, + 0, + 947, + 90.96250273, + 2.612785075, + 0, + 0.4837163837, + 0, + 0.006654258449, + 0, + 4.621015913e-05, + 0, + 948, + 86.47471947, + 2.701265034, + 0, + 0.5113356894, + 0, + 0.006570298547, + 0, + 4.562706792e-05, + 0, + 949, + 104.5340913, + 1.991878755, + 0, + 0.4584272715, + 0, + 0.006878466923, + 0, + 4.776715098e-05, + 0, + 950, + 81.28969707, + 2.666722294, + 0, + 0.5211111067, + 0, + 0.006465760421, + 0, + 4.490127135e-05, + 0, + 951, + 102.4554513, + 2.100951678, + 0, + 0.4635736644, + 0, + 0.006846707052, + 0, + 4.754661013e-05, + 0, + 952, + 101.6878332, + 2.144040467, + 0, + 0.4655643659, + 0, + 0.006834757456, + 0, + 4.746362721e-05, + 0, + 953, + 106.0971514, + 1.905398817, + 0, + 0.452346716, + 0, + 0.006901794618, + 0, + 4.792913065e-05, + 0, + 954, + 110.8235417, + 1.656574156, + 0, + 0.4446586636, + 0, + 0.006969648877, + 0, + 4.840032985e-05, + 0, + 955, + 94.46929295, + 2.496538816, + 0, + 0.4838275384, + 0, + 0.00671617616, + 0, + 4.664012981e-05, + 0, + 956, + 115.0619668, + 1.436200254, + 0, + 0.4327264306, + 0, + 0.007027333124, + 0, + 4.880093461e-05, + 0, + 957, + 89.615849, + 2.649400196, + 0, + 0.5019741911, + 0, + 0.006629655641, + 0, + 4.603929815e-05, + 0, + 958, + 101.7458924, + 2.140614591, + 0, + 0.4654310429, + 0, + 0.006835665528, + 0, + 4.746993333e-05, + 0, + 959, + 98.36209338, + 2.31676669, + 0, + 0.4698066428, + 0, + 0.006781547851, + 0, + 4.709409911e-05, + 0, + 960, + 107.8678912, + 1.806434763, + 0, + 0.4512371471, + 0, + 0.006927674774, + 0, + 4.810883671e-05, + 0, + 961, + 87.4045548, + 2.699772003, + 0, + 0.5112606826, + 0, + 0.006588169921, + 0, + 4.575117899e-05, + 0, + 962, + 117.337873, + 1.367577679, + 0, + 0.4287052654, + 0, + 0.007057149139, + 0, + 4.90078996e-05, + 0, + 963, + 112.4541621, + 1.564357482, + 0, + 0.4396610954, + 0, + 0.006992181529, + 0, + 4.855682535e-05, + 0, + 964, + 101.2737399, + 2.168405942, + 0, + 0.4662436139, + 0, + 0.006828260472, + 0, + 4.741850846e-05, + 0, + 965, + 101.6056526, + 2.148903415, + 0, + 0.4657390423, + 0, + 0.006833470915, + 0, + 4.74546928e-05, + 0, + 966, + 90.38975496, + 2.62887786, + 0, + 0.4862857982, + 0, + 0.006643853373, + 0, + 4.613789933e-05, + 0, + 967, + 90.55386385, + 2.624487713, + 0, + 0.4837349709, + 0, + 0.006646843514, + 0, + 4.615866504e-05, + 0, + 968, + 100.074617, + 2.228709013, + 0, + 0.4700088848, + 0, + 0.006809242873, + 0, + 4.728643637e-05, + 0, + 969, + 106.8933158, + 1.8636486, + 0, + 0.4528048894, + 0, + 0.006913501241, + 0, + 4.801041769e-05, + 0, + 970, + 99.57105682, + 2.251871845, + 0, + 0.475148035, + 0, + 0.006801165175, + 0, + 4.723033812e-05, + 0, + 971, + 88.94700358, + 2.668231522, + 0, + 0.5085240979, + 0, + 0.006617253813, + 0, + 4.595316737e-05, + 0, + 972, + 103.7271367, + 2.037512802, + 0, + 0.4611785548, + 0, + 0.006866239434, + 0, + 4.768224526e-05, + 0, + 973, + 83.63759267, + 2.693094985, + 0, + 0.5153954518, + 0, + 0.006514122164, + 0, + 4.52370187e-05, + 0, + 974, + 92.35004558, + 2.561875001, + 0, + 0.511481586, + 0, + 0.006679117493, + 0, + 4.638279015e-05, + 0, + 975, + 93.83555624, + 2.517788903, + 0, + 0.4849751337, + 0, + 0.006705206194, + 0, + 4.656395342e-05, + 0, + 976, + 84.04256628, + 2.692807027, + 0, + 0.5142992751, + 0, + 0.006522294517, + 0, + 4.529375363e-05, + 0, + 977, + 97.1850507, + 2.361923962, + 0, + 0.4874669684, + 0, + 0.006762140473, + 0, + 4.69593207e-05, + 0, + 978, + 95.91713922, + 2.412356736, + 0, + 0.4855194361, + 0, + 0.006740889416, + 0, + 4.68117436e-05, + 0, + 979, + 99.2093448, + 2.270255606, + 0, + 0.4770113552, + 0, + 0.006795329143, + 0, + 4.718980777e-05, + 0, + 980, + 101.5833565, + 2.150223816, + 0, + 0.4657833073, + 0, + 0.006833121626, + 0, + 4.745226714e-05, + 0, + 981, + 110.9139339, + 1.652215464, + 0, + 0.4444215764, + 0, + 0.006970909345, + 0, + 4.840908403e-05, + 0, + 982, + 92.83079312, + 2.544892223, + 0, + 0.5003493838, + 0, + 0.00668761875, + 0, + 4.644182445e-05, + 0, + 983, + 89.95786394, + 2.640205577, + 0, + 0.4954558647, + 0, + 0.006635949948, + 0, + 4.608301154e-05, + 0, + 984, + 104.9769732, + 1.965881386, + 0, + 0.4561090417, + 0, + 0.006885123889, + 0, + 4.781337504e-05, + 0, + 985, + 98.28770169, + 2.320582284, + 0, + 0.4693809263, + 0, + 0.006780330308, + 0, + 4.708564355e-05, + 0, + 986, + 90.95818124, + 2.612916789, + 0, + 0.4836573412, + 0, + 0.00665418026, + 0, + 4.620961614e-05, + 0, + 987, + 90.24882294, + 2.632581605, + 0, + 0.4891008477, + 0, + 0.006641279841, + 0, + 4.612002674e-05, + 0, + 988, + 108.6583397, + 1.759472375, + 0, + 0.4494995935, + 0, + 0.006939046936, + 0, + 4.818780672e-05, + 0, + 989, + 115.7495476, + 1.417102272, + 0, + 0.4320542173, + 0, + 0.00703642434, + 0, + 4.886405201e-05, + 0, + 990, + 97.70639876, + 2.345787353, + 0, + 0.4750563897, + 0, + 0.006770774386, + 0, + 4.701928016e-05, + 0, + 991, + 87.24598714, + 2.70092656, + 0, + 0.5116346951, + 0, + 0.006585140627, + 0, + 4.573014096e-05, + 0, + 992, + 102.6079567, + 2.093131809, + 0, + 0.463218502, + 0, + 0.006849066707, + 0, + 4.756299624e-05, + 0, + 993, + 110.3691964, + 1.677404944, + 0, + 0.4457789943, + 0, + 0.006963292782, + 0, + 4.835618616e-05, + 0, + 994, + 90.61062189, + 2.622938626, + 0, + 0.483121704, + 0, + 0.006647876023, + 0, + 4.61658355e-05, + 0, + 995, + 89.64275527, + 2.64866312, + 0, + 0.5015318938, + 0, + 0.006630151965, + 0, + 4.604274509e-05, + 0, + 996, + 95.15283457, + 2.460270986, + 0, + 0.4830866965, + 0, + 0.006727903484, + 0, + 4.672156601e-05, + 0, + 997, + 96.28499173, + 2.393040263, + 0, + 0.4888700497, + 0, + 0.006747092109, + 0, + 4.685481735e-05, + 0, + 998, + 92.50230637, + 2.556187622, + 0, + 0.5086699386, + 0, + 0.006681816101, + 0, + 4.640152986e-05, + 0, + 999, + 97.6380729, + 2.348176796, + 0, + 0.4766556407, + 0, + 0.006769646291, + 0, + 4.70114459e-05, + 0, + 1000, + 86.41938745, + 2.701034429, + 0, + 0.5112317257, + 0, + 0.006569226817, + 0, + 4.561962538e-05, + 0 + ], + "headings": [ + "Run #", + "w", + "1-PFA-1-1", + "1-PFA-1-2", + "1-RMSA-1-1", + "1-RMSA-1-2", + "1-PFD-1-1", + "1-PFD-1-2", + "1-PID-1-1", + "1-PID-1-2", + "" + ], + "isSurrogate": false, + "nrv": 2, + "numCol": 10, + "numRow": 1000 + }, + "summary": [ + { + "kurtosis": null, + "mean": 0, + "name": "1-PFA-1-2", + "skewness": null, + "stdDev": 0 + }, + { + "kurtosis": 2.5856833408120545, + "mean": 0.4725309257340997, + "name": "1-RMSA-1-1", + "skewness": 0.16713473028854975, + "stdDev": 0.027153310364463147 + }, + { + "kurtosis": null, + "mean": 0, + "name": "1-RMSA-1-2", + "skewness": null, + "stdDev": 0 + }, + { + "kurtosis": 3.230276264056383, + "mean": 0.006797377127228012, + "name": "1-PFD-1-1", + "skewness": -0.39248525026439496, + "stdDev": 0.00016266928938357366 + }, + { + "kurtosis": null, + "mean": 0, + "name": "1-PFD-1-2", + "skewness": null, + "stdDev": 0 + }, + { + "kurtosis": 3.254030399705642, + "mean": 4.7203862367050086e-05, + "name": "1-PID-1-1", + "skewness": -0.3971494283159703, + "stdDev": 1.1303385913438104e-06 + }, + { + "kurtosis": null, + "mean": 0, + "name": "1-PID-1-2", + "skewness": null, + "stdDev": 0 + } + ], + "workingDir": "/home/justinbonus/Documents/HydroUQ/LocalWorkDir" +} diff --git a/Examples/index.json b/Examples/index.json index b72bd63f..fca58bc8 100644 --- a/Examples/index.json +++ b/Examples/index.json @@ -67,17 +67,16 @@ "title": "Multi-Story Structure - OSU LWF Digital Twin - OpenFOAM", "base": "hdro-0001", "doc": [ - "hdro-0001/figures/openfoam.png", - "hdro-0001/figures/opensees.png", "hdro-0001/figures/Coupled.png", "hdro-0001/figures/RV.png", "hdro-0001/figures/UQ.png", "hdro-0001/figures/FEM.png", + "hdro-0001/src/input.json", "hdro-0001/README.rst" ], "entry_point": "hdro-0001/./input.json", "summary": "Simple Example of Using the Coupled Digital Twin.", - "logo": "figures/openfoam.png", + "logo": "figures/Coupled.png", "categories": { "Difficulty": "1" } @@ -133,8 +132,6 @@ "title": "Cylinder in Flow - UW WASIRF Digital Twin - OpenFOAM + OpenSees", "base": "hdro-0003", "doc": [ - "hdro-0003/figures/openfoam.png", - "hdro-0003/figures/opensees.png", "hdro-0003/figures/downloadResults.PNG", "hdro-0003/figures/DSToolsAndAppsJobsStatus.PNG", "hdro-0003/figures/DSToolsAndAppsJobsStatusFinished.PNG", @@ -155,11 +152,12 @@ "hdro-0003/figures/TipDisplacement.png", "hdro-0003/figures/Velocities.png", "hdro-0003/figures/WaveGauges.png", + "hdro-0003/src/input.json", "hdro-0003/README.rst" ], "entry_point": "hdro-0003/./input.json", "summary": "Example of modeling a cylindrical, partially submerged structure in a fluid flow in a digital twin (UW WASIRF). Uses two-way coupled CFD-FEM simulations, i.e. OpenFOAM + OpenSees.", - "logo": "figures/openfoam.png", + "logo": "figures/hdro-0003example.png", "categories": { "Difficulty": "1" } diff --git a/WorkflowAppHydroUQ.cpp b/WorkflowAppHydroUQ.cpp index d2d8ed66..056e9d8a 100644 --- a/WorkflowAppHydroUQ.cpp +++ b/WorkflowAppHydroUQ.cpp @@ -96,6 +96,8 @@ UPDATES, ENHANCEMENTS, OR MODIFICATIONS. #include #include +#include +#include #include #include #include @@ -122,7 +124,7 @@ UPDATES, ENHANCEMENTS, OR MODIFICATIONS. // #include #include #include -#include + // static pointer for global procedure set in constructor static WorkflowAppHydroUQ *theApp = 0; @@ -147,7 +149,6 @@ WorkflowAppHydroUQ::WorkflowAppHydroUQ(RemoteService *theService, QWidget *paren theEventSelection = new HydroEventSelection(theRVs, theService); // theEventSelection = new HydroEventSelection(theRVs, theGI); theAnalysisSelection = new FEA_Selection(true); - // theUQ_Selection = new UQ_EngineSelection(ForwardReliabilitySensitivity); // ForwardReliabilitySensitivitySurrogate theUQ_Selection = new UQ_EngineSelection(ForwardReliabilitySensitivitySurrogate); // ForwardReliabilitySensitivitySurrogate theEDP_Selection = new HydroEDP_Selection(theRVs); theResults = theUQ_Selection->getResults(); @@ -175,8 +176,8 @@ WorkflowAppHydroUQ::WorkflowAppHydroUQ(RemoteService *theService, QWidget *paren currentApp = localApp; setUpForApplicationRun(workingDir, subDir); }); - connect(localApp, SIGNAL(runComplete()), this, SLOT(runComplete())); // swao with next? connect(localApp, SIGNAL(processResults(QString&)), this, SLOT(processResults(QString&))); + connect(localApp, SIGNAL(runComplete()), this, SLOT(runComplete())); // swao with next? connect(localApp,SIGNAL(sendErrorMessage(QString)), this,SLOT(errorMessage(QString))); connect(localApp,SIGNAL(sendStatusMessage(QString)), @@ -228,6 +229,7 @@ WorkflowAppHydroUQ::WorkflowAppHydroUQ(RemoteService *theService, QWidget *paren // // create the component selection & add the components to it // + theComponentSelection = new SimCenterComponentSelection(); horizontalLayout->addWidget(theComponentSelection); horizontalLayout->setAlignment(Qt::AlignLeft); @@ -242,19 +244,19 @@ WorkflowAppHydroUQ::WorkflowAppHydroUQ(RemoteService *theService, QWidget *paren theComponentSelection->displayComponent("UQ"); // Initial page on startup - - // access a web page which will increment the usage count for this tool - manager = new QNetworkAccessManager(this); - connect(manager, SIGNAL(finished(QNetworkReply*)), - this, SLOT(replyFinished(QNetworkReply*))); - manager->get(QNetworkRequest(QUrl("http://opensees.berkeley.edu/OpenSees/developer/eeuq/use.php"))); // EE-UQ? - // // set the defults in the General Info // theGI->setDefaultProperties(1,144,360,360,37.8715,-122.2730); // Berkeley, kips and inches + // access a web page which will increment the usage count for this tool + // manager = new QNetworkAccessManager(this); + // connect(manager, SIGNAL(finished(QNetworkReply*)), + // this, SLOT(replyFinished(QNetworkReply*))); + // manager->get(QNetworkRequest(QUrl("http://opensees.berkeley.edu/OpenSees/developer/eeuq/use.php"))); // EE-UQ? + + ProgramOutputDialog *theDialog=ProgramOutputDialog::getInstance(); theDialog->appendInfoMessage("Welcome to HydroUQ"); } @@ -271,7 +273,6 @@ constexpr bool USE_CELERIS_TOOL = false; constexpr bool USE_WEBGPU_TOOL = false; -// Imported from WE-UQ for EmptyDomainCFD Tool void WorkflowAppHydroUQ::setMainWindow(MainWindowWorkflowApp* window) { @@ -436,14 +437,14 @@ WorkflowAppHydroUQ::setMainWindow(MainWindowWorkflowApp* window) { QString tmpDirectoryString = localWorkDir.absoluteFilePath(tmpDirName); QDir tmpDirectory(tmpDirectoryString); if (tmpDirectory.exists()) { - if (SCUtils::isSafeToRemoveRecursivily(tmpDirectoryString)) - tmpDirectory.removeRecursively(); - else { - QString msg("The Program stopped, it was about to recursivily remove: "); - msg += tmpDirName; - fatalMessage(msg); - return; - } + if (SCUtils::isSafeToRemoveRecursivily(tmpDirectoryString)) + tmpDirectory.removeRecursively(); + else { + QString msg("The Program stopped, it was about to recursivily remove: "); + msg += tmpDirName; + fatalMessage(msg); + return; + } } tmpDirectory.mkpath(tmpDirectoryString); @@ -949,11 +950,18 @@ WorkflowAppHydroUQ::setUpForApplicationRun(QString &workingDir, QString &subDir) QDir destinationDirectory(tmpDirectory); if (destinationDirectory.exists()) { - destinationDirectory.removeRecursively(); - } else { - destinationDirectory.mkpath(tmpDirectory); + if (SCUtils::isSafeToRemoveRecursivily(tmpDirectory)) { + destinationDirectory.removeRecursively(); + } + else { + QString msg("The Program stopped, it was about to recursivily remove: "); + msg.append(tmpDirectory); + fatalMessage(msg); + } } + destinationDirectory.mkpath(tmpDirectory); + // Used in other places temporarily, // e.g. citation output for Tools to avoid passing parameters defaultWorkDir = destinationDirectory; diff --git a/copy_backend.sh b/copy_backend.sh new file mode 100644 index 00000000..66f9ace0 --- /dev/null +++ b/copy_backend.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +cd build +cp -r ../Examples/ . +cp -r ../../SimCenterBackendApplications/applications/ . +sudo chmod 'a+rwx' ./applications/* +sudo chmod 'a+rwx' ./applications/**/* +sudo chmod 'a+rwx' ./applications/**/**/*