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; }