/* Run a transition of the FSM */ int fsm_step(url_t* url, pfd_t* pfd) { int rc1 = 0, rc2 = 0; char buffer[BUFSIZ]; /* To pass in to readConn */ conn_t* conn = conn_get(pfd_getfd(pfd)); if (pfd->revents & POLLOUT) rc1 = writeConn(url, conn); if (pfd->revents & POLLIN) rc2 = readConn(conn, buffer, sizeof(buffer)); if (verbose > 2) fprintf(stderr, "Stepped conn #%d -> %s\n", conn->index, state_names[conn->state]); if (rc2 == ST_OK && out_file != 0) fprintf(out_file, "%s %s\n", conn->last_etag, conn->last_path); if (rc2 == ST_OK || rc2 == ST_DUP) { conn_reset(conn, (struct sockaddr*) &url->addr); } if (rc1 == ST_ERROR || rc2 == ST_ERROR) { if (verbose) { char buf[100]; snprintf(buf, sizeof(buf), "FSM error {r:%s w:%s}", rc_names[rc2], rc_names[rc1]); error(conn, buf); } conn_reset(conn, (struct sockaddr*) &url->addr); } if (rc1 != ST_OK && rc1 != ST_CONTINUE) return rc1; return rc2; }
void Application::compute(void *) { int fd, numt, skip, ret, i, n; char buf[500]; // read input parameters and data object name Covise::get_browser_param("path", &dataPath); Covise::get_scalar_param("numt", &numt); Covise::get_scalar_param("skip", &skip); Covise::get_choice_param("format", &i); if (i == 1) readDouble = 1; else readDouble = 0; pfactor = 1; Covise::get_scalar_param("pfactor", &pfactor); coDistributedObject **grids; coDistributedObject **DOSveloc; coDistributedObject **DOSpress; coDistributedObject **DOSrho; coDistributedObject **DOSvol; coDistributedObject **DOStemperature; coDistributedObject **DOSamu; coDistributedObject **DOStke; coDistributedObject **DOSeps; coDistributedObject **DOSparticles; coDistributedObject **DOSpveloc; coDistributedObject **DOSptemperature; grids = new coDistributedObject *[numt + 1]; DOSveloc = new coDistributedObject *[numt + 1]; DOSpress = new coDistributedObject *[numt + 1]; DOSrho = new coDistributedObject *[numt + 1]; DOSvol = new coDistributedObject *[numt + 1]; DOStemperature = new coDistributedObject *[numt + 1]; DOSamu = new coDistributedObject *[numt + 1]; DOStke = new coDistributedObject *[numt + 1]; DOSeps = new coDistributedObject *[numt + 1]; DOSparticles = new coDistributedObject *[numt + 1]; DOSpveloc = new coDistributedObject *[numt + 1]; DOSptemperature = new coDistributedObject *[numt + 1]; for (i = 0; i < numt + 1; i++) { grids[i] = NULL; DOSveloc[i] = NULL; DOSpress[i] = NULL; DOSrho[i] = NULL; DOSvol[i] = NULL; DOStemperature[i] = NULL; DOSamu[i] = NULL; DOStke[i] = NULL; DOSeps[i] = NULL; DOSparticles[i] = NULL; DOSpveloc[i] = NULL; DOSptemperature[i] = NULL; } Mesh = Covise::get_object_name("mesh"); Veloc = Covise::get_object_name("velocity"); Press = Covise::get_object_name("pressure"); rho_name = Covise::get_object_name("rho"); vol_name = Covise::get_object_name("vol"); temp_name = Covise::get_object_name("temperature"); amu_name = Covise::get_object_name("amu"); tke_name = Covise::get_object_name("tke"); eps_name = Covise::get_object_name("eps"); p_name = Covise::get_object_name("particles"); pv_name = Covise::get_object_name("pvelocity"); pt_name = Covise::get_object_name("ptemperature"); if ((fd = Covise::open(dataPath, O_RDONLY)) < 0) { strcpy(buf, "ERROR: Can't open file >> "); strcat(buf, dataPath); Covise::sendError(buf); return; } for (n = 0; n < numt; n++) { ret = readHeader(fd); if (ret < 0) { close(fd); break; } sprintf(buf, "%s_%d", Mesh, n); mesh = new coDoUnstructuredGrid(buf, header.numElem, header.numElem * 8, header.numCoords, 1); if (!mesh->objectOk()) { Covise::sendError("could not create output object:"); break; } sprintf(buf, "%s_%d", Veloc, n); DOveloc = new coDoVec3(buf, header.numCoords); if (!DOveloc->objectOk()) { Covise::sendError("could not create output object:"); break; } sprintf(buf, "%s_%d", Press, n); DOpress = new coDoFloat(buf, header.numElem); if (!DOpress->objectOk()) { Covise::sendError("could not create output object:"); break; } sprintf(buf, "%s_%d", rho_name, n); DOrho = new coDoFloat(buf, header.numElem); if (!DOrho->objectOk()) { Covise::sendError("could not create output object:"); break; } sprintf(buf, "%s_%d", vol_name, n); DOvol = new coDoFloat(buf, header.numElem); if (!DOvol->objectOk()) { Covise::sendError("could not create output object:"); break; } sprintf(buf, "%s_%d", temp_name, n); DOtemperature = new coDoFloat(buf, header.numElem); if (!DOtemperature->objectOk()) { Covise::sendError("could not create output object:"); break; } sprintf(buf, "%s_%d", amu_name, n); DOamu = new coDoFloat(buf, header.numElem); if (!DOamu->objectOk()) { Covise::sendError("could not create output object:"); break; } sprintf(buf, "%s_%d", tke_name, n); DOtke = new coDoFloat(buf, header.numElem); if (!DOtke->objectOk()) { Covise::sendError("could not create output object:"); break; } sprintf(buf, "%s_%d", eps_name, n); DOeps = new coDoFloat(buf, header.numElem); if (!DOeps->objectOk()) { Covise::sendError("could not create output object:"); break; } if (header.np > 0) { sprintf(buf, "%s_%d", p_name, n); DOparticles = new coDoPoints(buf, header.np / pfactor); if (!DOeps->objectOk()) { Covise::sendError("could not create output object:"); break; } sprintf(buf, "%s_%d", pv_name, n); DOpveloc = new coDoVec3(buf, header.np / pfactor); if (!DOeps->objectOk()) { Covise::sendError("could not create output object:"); break; } sprintf(buf, "%s_%d", pt_name, n); DOptemperature = new coDoFloat(buf, header.np / pfactor); if (!DOeps->objectOk()) { Covise::sendError("could not create output object:"); break; } } mesh->getAddresses(&el, &vl, &x_coord, &y_coord, &z_coord); mesh->getTypeList(&tl); DOveloc->getAddresses(&u, &v, &w); DOpress->getAddress(&p); DOrho->getAddress(&rho); DOvol->getAddress(&vol); DOtemperature->getAddress(&temp); DOamu->getAddress(&amu); DOtke->getAddress(&tke); DOeps->getAddress(&eps); if (header.np > 0) { DOparticles->getAddresses(&px, &py, &pz); DOpveloc->getAddresses(&pu, &pv, &pw); DOptemperature->getAddress(&ptemp); } if (readData(fd) < 0) { close(fd); break; } skipBlocks(fd, 1); if (readConn(fd) < 0) { close(fd); break; } if (header.iper > 0) skipBlocks(fd, 1); if (header.np > 0) readParticles(fd); grids[n] = mesh; DOSveloc[n] = DOveloc; DOSpress[n] = DOpress; DOSrho[n] = DOrho; DOSvol[n] = DOvol; DOStemperature[n] = DOtemperature; DOSamu[n] = DOamu; DOStke[n] = DOtke; DOSeps[n] = DOeps; if (header.np > 0) { DOSparticles[n] = DOparticles; DOSpveloc[n] = DOpveloc; DOSptemperature[n] = DOptemperature; } if (header.iper > 0) { if (header.np > 0) skipBlocks(fd, skip * 5); else skipBlocks(fd, skip * 4); } else if (header.np > 0) skipBlocks(fd, skip * 4); else skipBlocks(fd, skip * 3); } coDoSet *set = new coDoSet(Mesh, grids); set->addAttribute("TIMESTEP", "1 1000"); delete set; set = new coDoSet(Veloc, DOSveloc); set->addAttribute("TIMESTEP", "1 1000"); delete set; set = new coDoSet(Press, DOSpress); set->addAttribute("TIMESTEP", "1 1000"); delete set; set = new coDoSet(rho_name, DOSrho); set->addAttribute("TIMESTEP", "1 1000"); delete set; set = new coDoSet(vol_name, DOSvol); set->addAttribute("TIMESTEP", "1 1000"); delete set; set = new coDoSet(temp_name, DOStemperature); set->addAttribute("TIMESTEP", "1 1000"); delete set; set = new coDoSet(amu_name, DOSamu); set->addAttribute("TIMESTEP", "1 1000"); delete set; set = new coDoSet(tke_name, DOStke); set->addAttribute("TIMESTEP", "1 1000"); delete set; set = new coDoSet(eps_name, DOSeps); set->addAttribute("TIMESTEP", "1 1000"); delete set; if (header.np > 0) { set = new coDoSet(p_name, DOSparticles); set->addAttribute("TIMESTEP", "1 1000"); delete set; set = new coDoSet(pv_name, DOSpveloc); delete set; set = new coDoSet(pt_name, DOSptemperature); delete set; } for (i = 0; i < n; i++) { delete grids[i]; delete DOSveloc[i]; delete DOSpress[i]; delete DOSrho[i]; delete DOSvol[i]; delete DOStemperature[i]; delete DOSamu[i]; delete DOStke[i]; delete DOSeps[i]; delete DOSparticles[i]; delete DOSpveloc[i]; delete DOSptemperature[i]; } delete[] grids; delete[] DOSveloc; delete[] DOSpress; delete[] DOSrho; delete[] DOSvol; delete[] DOStemperature; delete[] DOSamu; delete[] DOStke; delete[] DOSeps; delete[] DOSparticles; delete[] DOSpveloc; delete[] DOSptemperature; close(fd); }