static void computeAndSendVertexArrays(GmshClient *client, bool compute=true) { for(unsigned int i = 0; i < PView::list.size(); i++){ PView *p = PView::list[i]; if(compute) p->fillVertexArrays(); PViewData *data = p->getData(); PViewOptions *opt = p->getOptions(); double min = data->getMin(), max = data->getMax(); if(opt->rangeType == PViewOptions::PerTimeStep){ min = data->getMin(opt->timeStep); max = data->getMax(opt->timeStep); } VertexArray *va[4] = {p->va_points, p->va_lines, p->va_triangles, p->va_vectors}; for(int type = 0; type < 4; type++){ if(va[type]){ int len; char *str = va[type]->toChar (p->getTag(), data->getName(), type + 1, min, max, data->getNumTimeSteps(), data->getTime(opt->timeStep), data->getBoundingBox(), len); client->SendMessage(GmshSocket::GMSH_VERTEX_ARRAY, len, str); delete [] str; } } } }
// This version sends VArrays using MPI static void computeAndSendVertexArrays() { // compute... for(unsigned int i = 0; i < PView::list.size(); i++) PView::list[i]->fillVertexArrays(); // ...and send int nbArrays = PView::list.size()* 4; MPI_Send(&nbArrays, 1, MPI_INT, 0, MPI_GMSH_DATA_READY, MPI_COMM_WORLD); for(unsigned int i = 0; i < PView::list.size(); i++){ PView *p = PView::list[i]; PViewData *data = p->getData(); PViewOptions *opt = p->getOptions(); double min = data->getMin(), max = data->getMax(); if(opt->rangeType == PViewOptions::PerTimeStep){ min = data->getMin(opt->timeStep); max = data->getMax(opt->timeStep); } VertexArray *va[4] = {p->va_points, p->va_lines, p->va_triangles, p->va_vectors}; for(int type = 0; type < 4; type++){ if(va[type]){ int len; char *str = va[type]->toChar (p->getTag(), data->getName(), type + 1, min, max, data->getNumTimeSteps(), data->getTime(opt->timeStep), data->getBoundingBox(), len); MPI_Send(&len, 1, MPI_INT, 0, MPI_GMSH_VARRAY_LEN, MPI_COMM_WORLD); MPI_Send(str, len, MPI_CHAR, 0, MPI_GMSH_VARRAY, MPI_COMM_WORLD); delete [] str; } } } }
PView::PView(PView *ref, bool copyOptions) { _init(); if(ref->getAliasOf() >= 0){ // alias of an alias PView *orig = getViewByTag(ref->getAliasOf()); if(orig) _aliasOf = orig->getTag(); else{ Msg::Warning("Original view for alias does not exist anymore"); _aliasOf = ref->getTag(); } } else _aliasOf = ref->getTag(); _data = ref->getData(); if(copyOptions) _options = new PViewOptions(*ref->getOptions()); else _options = new PViewOptions(*PViewOptions::reference()); if(_options->adaptVisualizationGrid) _data->initAdaptiveData(_options->timeStep, _options->maxRecursionLevel, _options->targetError); }