//********************************************************************************************************************** vector<string> ChimeraPintailCommand::setParameters(){ try { CommandParameter ptemplate("reference", "InputTypes", "", "", "none", "none", "none","",false,true,true); parameters.push_back(ptemplate); CommandParameter pfasta("fasta", "InputTypes", "", "", "none", "none", "none","chimera-accnos",false,true,true); parameters.push_back(pfasta); CommandParameter pconservation("conservation", "InputTypes", "", "", "none", "none", "none","",false,false); parameters.push_back(pconservation); CommandParameter pquantile("quantile", "InputTypes", "", "", "none", "none", "none","",false,false); parameters.push_back(pquantile); CommandParameter pfilter("filter", "Boolean", "", "F", "", "", "","",false,false); parameters.push_back(pfilter); CommandParameter pwindow("window", "Number", "", "0", "", "", "","","",false,false); parameters.push_back(pwindow); CommandParameter pincrement("increment", "Number", "", "25", "", "", "","",false,false); parameters.push_back(pincrement); CommandParameter pmask("mask", "String", "", "", "", "", "","",false,false); parameters.push_back(pmask); CommandParameter pprocessors("processors", "Number", "", "1", "", "", "","",false,false,true); parameters.push_back(pprocessors); CommandParameter pinputdir("inputdir", "String", "", "", "", "", "","",false,false); parameters.push_back(pinputdir); CommandParameter poutputdir("outputdir", "String", "", "", "", "", "","",false,false); parameters.push_back(poutputdir); CommandParameter psave("save", "Boolean", "", "F", "", "", "","",false,false); parameters.push_back(psave); vector<string> myArray; for (int i = 0; i < parameters.size(); i++) { myArray.push_back(parameters[i].name); } return myArray; } catch(exception& e) { m->errorOut(e, "ChimeraPintailCommand", "setParameters"); exit(1); } }
//keyword "cellvars" in OOFEM input file void VTKXMLExportModule :: exportCellVarAs(InternalStateType type, int region, #ifdef __VTK_MODULE vtkSmartPointer<vtkUnstructuredGrid> &stream, #else FILE *stream, #endif TimeStep *tStep) { Domain *d = emodel->giveDomain(1); int ielem, nelem = d->giveNumberOfElements(); int pos; Element *elem; FloatMatrix mtrx(3, 3); IntegrationRule *iRule; GaussPoint *gp; FloatArray answer, temp; double gptot; int ncomponents = 1; #ifdef __VTK_MODULE vtkSmartPointer<vtkDoubleArray> cellVarsArray = vtkSmartPointer<vtkDoubleArray>::New(); cellVarsArray->SetName(__InternalStateTypeToString(type)); #endif switch ( type ) { case IST_MaterialNumber: case IST_ElementNumber: case IST_Pressure: // if it wasn't for IST_Pressure, #ifdef __VTK_MODULE cellVarsArray->SetNumberOfComponents(1); cellVarsArray->SetNumberOfTuples(nelem); #else fprintf( stream, "<DataArray type=\"Float64\" Name=\"%s\" format=\"ascii\">\n", __InternalStateTypeToString(type) ); #endif for ( ielem = 1; ielem <= nelem; ielem++ ) { elem = d->giveElement(ielem); if ( (( region > 0 ) && ( this->smoother->giveElementVirtualRegionNumber(ielem) != region )) || this->isElementComposite(elem) || !elem-> isActivated(tStep) ) { // composite cells exported individually continue; } #ifdef __PARALLEL_MODE if ( elem->giveParallelMode() != Element_local ) { continue; } #endif if ( type == IST_MaterialNumber ) { #ifdef __VTK_MODULE cellVarsArray->SetTuple1(ielem-1, elem->giveMaterial()->giveNumber() ); // Should be integer.. #else fprintf( stream, "%d ", elem->giveMaterial()->giveNumber() ); #endif } else if ( type == IST_ElementNumber ) { #ifdef __VTK_MODULE cellVarsArray->SetTuple1(ielem-1, elem->giveNumber() ); // Should be integer.. #else fprintf( stream, "%d ", elem->giveNumber() ); #endif } else if (type == IST_Pressure) { ///@todo Why this special treatment for pressure? / Mikael if (elem->giveNumberOfInternalDofManagers() == 1) { IntArray pmask(1); pmask.at(1) = P_f; elem->giveInternalDofManager(1)->giveUnknownVector (answer, pmask,EID_ConservationEquation, VM_Total, tStep); #ifdef __VTK_MODULE cellVarsArray->SetTuple1(ielem-1, answer.at(1) ); // Should be integer.. #else fprintf( stream, "%f ", answer.at(1) ); #endif } } } #ifdef __VTK_MODULE stream->GetCellData()->SetActiveScalars(__InternalStateTypeToString(type)); stream->GetCellData()->SetScalars(cellVarsArray); #endif break; case IST_MaterialOrientation_x: case IST_MaterialOrientation_y: case IST_MaterialOrientation_z: #ifdef __VTK_MODULE cellVarsArray->SetNumberOfComponents(3); cellVarsArray->SetNumberOfTuples(nelem); ncomponents = 3; #else fprintf( stream, "<DataArray type=\"Float64\" Name=\"%s\" NumberOfComponents=\"3\" format=\"ascii\">\n", __InternalStateTypeToString(type) ); #endif if ( type == IST_MaterialOrientation_x ) { pos = 1; } if ( type == IST_MaterialOrientation_y ) { pos = 2; } if ( type == IST_MaterialOrientation_z ) { pos = 3; } for ( ielem = 1; ielem <= nelem; ielem++ ) { ///@todo Should no elements be skipped here? / Mikael if ( !d->giveElement(ielem)->giveLocalCoordinateSystem(mtrx) ) { mtrx.resize(3, 3); mtrx.zero(); } #ifdef __VTK_MODULE cellVarsArray->SetTuple3(ielem-1, mtrx.at(1, pos), mtrx.at(2,pos), mtrx.at(3,pos) ); #else fprintf( stream, "%f %f %f ", mtrx.at(1, pos), mtrx.at(2, pos), mtrx.at(3, pos) ); #endif } #ifdef __VTK_MODULE stream->GetCellData()->SetActiveVectors(__InternalStateTypeToString(type)); stream->GetCellData()->SetVectors(cellVarsArray); #endif break; default: bool reshape = false; InternalStateValueType vt = giveInternalStateValueType(type); if ( vt == ISVT_SCALAR ) { ncomponents = 1; } else if ( vt == ISVT_VECTOR ) { ncomponents = 3; } else { ncomponents = 9; reshape = true; } #ifdef __VTK_MODULE cellVarsArray->SetNumberOfComponents(ncomponents); cellVarsArray->SetNumberOfTuples(nelem); #else fprintf( stream, "<DataArray type=\"Float64\" Name=\"%s\" NumberOfComponents=\"%d\" format=\"ascii\">\n", __InternalStateTypeToString(type), ncomponents ); #endif IntArray redIndx; for ( ielem = 1; ielem <= nelem; ielem++ ) { elem = d->giveElement(ielem); if ( (( region > 0 ) && ( this->smoother->giveElementVirtualRegionNumber(ielem) != region )) || this->isElementComposite(elem) || !elem-> isActivated(tStep) ) { // composite cells exported individually continue; } #ifdef __PARALLEL_MODE if ( elem->giveParallelMode() != Element_local ) { continue; } #endif gptot = 0; answer.resize(0); iRule = elem->giveDefaultIntegrationRulePtr(); if (iRule) { MaterialMode mmode = _Unknown; for (int i = 0; i < iRule->getNumberOfIntegrationPoints(); ++i) { gp = iRule->getIntegrationPoint(i); mmode = gp->giveMaterialMode(); elem->giveIPValue(temp, gp, type, tStep); gptot += gp->giveWeight(); answer.add(gp->giveWeight(), temp); } answer.times(1./gptot); elem->giveMaterial()->giveIntVarCompFullIndx(redIndx, type, mmode); } // Reshape the Voigt vectors to include all components (duplicated if necessary, VTK insists on 9 components for tensors.) if ( reshape && answer.giveSize() != 9) { // If it has 9 components, then it is assumed to be proper already. FloatArray tmp = answer; this->makeFullForm(answer, tmp, vt, redIndx); } else if ( vt == ISVT_VECTOR && answer.giveSize() < 3) { answer.setValues(3, answer.giveSize() > 1 ? answer.at(1) : 0.0, answer.giveSize() > 2 ? answer.at(2) : 0.0, 0.0); } else if ( ncomponents != answer.giveSize() ) { // Trying to gracefully handle bad cases, just output zeros. answer.resize(ncomponents); answer.zero(); } for (int i = 1; i <= ncomponents; ++i) { #ifdef __VTK_MODULE cellVarsArray->SetComponent(ielem-1, i-1, answer.at(i)); #else fprintf( stream, "%e ", answer.at(i) ); #endif } #ifndef __VTK_MODULE fprintf( stream, "\n" ); #endif } #ifdef __VTK_MODULE if (ncomponents == 1) { stream->GetCellData()->SetActiveScalars(__InternalStateTypeToString(type)); stream->GetCellData()->SetScalars(cellVarsArray); } else if (ncomponents == 3) { stream->GetCellData()->SetActiveVectors(__InternalStateTypeToString(type)); stream->GetCellData()->SetVectors(cellVarsArray); } else { stream->GetCellData()->SetActiveTensors(__InternalStateTypeToString(type)); stream->GetCellData()->SetTensors(cellVarsArray); } #endif } #ifndef __VTK_MODULE fprintf(stream, "</DataArray>\n"); #endif }