int main(int argc, char *argv[]) { #ifdef HAVE_MPI MPI_Init(&argc, &argv); #endif Ioss::StorageInitializer initialize_storage; std::string input_file = std::string(argv[argc-1]); if (input_file == "") { OUTPUT << "Error: No input file specified\n"; return (EXIT_FAILURE); } std::string cwd = ""; input_file = Ioss::Utils::local_filename(input_file, "text", cwd); Ioex::SuperElement se(input_file, "superelement"); size_t numDOF = se.get_property("numDOF").get_int(); size_t numEIG = se.get_property("numEIG").get_int(); size_t numCon = se.get_property("numConstraints").get_int(); std::cerr << "DOF count = " << numDOF << "\n"; std::cerr << "EIG count = " << numEIG << "\n"; std::cerr << "Constraint dof count = " << numCon << "\n"; assert(numCon == numDOF - numEIG); // List the fields on the superelement... if (!se.field_exists("Kr")) { std::cerr << "ERROR: Stiffness matrix field 'Kr' not found\n"; } else { Ioss::Field kr = se.get_field("Kr"); assert(kr.raw_count() == numDOF * numDOF); } if (!se.field_exists("Mr")) { std::cerr << "ERROR: Mass matrix field 'Mr' not found\n"; } else { Ioss::Field mr = se.get_field("Mr"); assert(mr.raw_count() == numDOF * numDOF); } std::vector<double> stiff_mat(numDOF * numDOF); std::vector<double> mass_mat(numDOF * numDOF); size_t kr_size = se.get_field_data("Kr", stiff_mat); size_t mr_size = se.get_field_data("Mr", mass_mat); assert(kr_size == numDOF * numDOF); assert(mr_size == numDOF * numDOF); OUTPUT << "\nSIERRA execution successful." << std::endl; #ifdef HAVE_MPI MPI_Finalize(); #endif return EXIT_SUCCESS; }
bool Tensor::internal_execute(const Ioss::Field &field, void *data) { assert(field.get_type() == Ioss::Field::REAL); double *r = static_cast<double*>(data); int count = field.raw_count(); int components = field.raw_storage()->component_count(); bool success = false; switch (type_) { case TRACE: case INVARIANT1: { int j = 0; for (int i=0; i < count*components; i+=components) { r[j++] = r[i] + r[i+1] + r[i+2]; } } success = true; break; case INVARIANT2: { int j = 0; for (int i=0; i < count*components; i+=components) { r[j++] = r[i+3]*r[i+3] + r[i+4]*r[i+4] + r[i+5]*r[i+5] - (r[i+0]*r[i+1] + r[i+1]*r[i+2] + r[i+0]*r[i+2]); } } success = true; break; case INVARIANT3: case MAGNITUDE: case DEVIATOR: case SPHERICAL: case INVARIANTS: success = false; break; default: success = false; } return success; }