void FsGuiColorDialog::UpdateRGBSliderFromCurrentColor(void) { auto col=GetCurrentColor(); redSlider->SetPosition(col.Rd()); greenSlider->SetPosition(col.Gd()); blueSlider->SetPosition(col.Bd()); }
void collect_vertex_partitions(const Partition& P, // in Vtx2PartMap & p_of_v, // out bool mark_on_boundary) // int { typedef typename Partition::PartBdVertexIterator PartBdVertexIterator; typedef typename Partition::grid_type grid_type; typedef grid_types<grid_type> gt; typedef typename gt::CellIterator CellIterator; typedef typename gt::VertexOnCellIterator VertexOnCellIterator; typedef BoundaryRange<grid_type> BdRange; typedef typename BdRange::VertexIterator BdVertexIterator; BdRange Bd(P.TheGrid()); // add mark for vertices on grid boundary if(mark_on_boundary) { for(BdVertexIterator bv = Bd.FirstVertex(); ! bv.IsDone(); ++bv) p_of_v[*bv].push_back(-1); } for(CellIterator c = P.TheGrid().FirstCell(); ! c.IsDone(); ++c) for(VertexOnCellIterator vc = (*c).FirstVertex(); ! vc.IsDone(); ++vc) { int pt = P.partition(*c); if(std::find(p_of_v[*vc].begin(),p_of_v[*vc].end(),pt) == p_of_v[*vc].end()) p_of_v[*vc].push_back(pt); } /* // add mark for vertices on boundary of partitions for(int pt = 0; pt < (int)P.NumOfPartitions(); ++pt) { for(PartBdVertexIterator pbv = P.FirstBdVertex(pt); ! pbv.IsDone(); ++pbv) partitions_of_vertex[*pbv].push_back(pt); } */ }
Matrix Timoshenko2d::getBd(int sec, const Vector &v, double L) { double pts[maxNumSections]; double Omegai = Omega[sec]; double mu, x, phi1p, phi2p, phi3, phi3p, phi4, phi4p; beamInt->getSectionLocations(numSections, L, pts); x = L * pts[sec]; // if (Omegai > 1.0e12) { // mu = 0.0; // //phi1 = (L-x)*x/L/2.; // phi1p = 0.5-x/L; // //phi2 = -(L-x)*x/L/2.; // phi2p = -0.5-x/L; // phi3 = 1.0-x/L; // phi3p = -1.0/L; // phi4 = x/L; // phi4p = 1.0/L; // } else { mu = 1./(1.+12.*Omegai); //phi1 = mu*x*(L-x)*(L-x-6*Omega*L) /L/L; phi1p = mu*(3*x*x-4*L*x*(1-3*Omegai)-L*L*(6*Omegai-1))/L/L; //phi2 = mu*x*(L-x)*(6*Omega*L-x) /L/L; phi2p = mu*(6*L*(L-2*x)*Omegai-(2*L-3*x)*x) /L/L; phi3 = (L-x)*mu*(L-3*x-12*L*Omegai) /L/L; phi3p = 2*mu*(3*x+L*(6*Omegai-2)) /L/L; phi4 = x*mu*(3*x-2*L*(1+6*Omegai)) /L/L; phi4p = -2*mu*(L-3*x+6*L*Omegai) /L/L; // } Matrix Bd(3,3); Bd.Zero(); Bd(0,0) = 1./L; Bd(1,1) = phi3p; // sectional curvature Bd(1,2) = phi4p; // Bd(2,1) = phi1p-phi3; // shear components Bd(2,2) = phi2p-phi4; // return Bd; }
int shylu_dist_solve<Epetra_CrsMatrix,Epetra_MultiVector>( shylu_symbolic<Epetra_CrsMatrix,Epetra_MultiVector> *ssym, shylu_data<Epetra_CrsMatrix,Epetra_MultiVector> *data, shylu_config<Epetra_CrsMatrix,Epetra_MultiVector> *config, const Epetra_MultiVector& X, Epetra_MultiVector& Y ) { int err; AztecOO *solver = 0; assert(X.Map().SameAs(Y.Map())); //assert(X.Map().SameAs(A_->RowMap())); const Epetra_MultiVector *newX; newX = &X; //rd_->redistribute(X, newX); int nvectors = newX->NumVectors(); // May have to use importer/exporter Epetra_Map BsMap(-1, data->Snr, data->SRowElems, 0, X.Comm()); Epetra_Map BdMap(-1, data->Dnr, data->DRowElems, 0, X.Comm()); Epetra_MultiVector Bs(BsMap, nvectors); Epetra_Import BsImporter(BsMap, newX->Map()); assert(BsImporter.SourceMap().SameAs(newX->Map())); assert((newX->Map()).SameAs(BsImporter.SourceMap())); Bs.Import(*newX, BsImporter, Insert); Epetra_MultiVector Xs(BsMap, nvectors); Epetra_SerialComm LComm; // Use Serial Comm for the local vectors. Epetra_Map LocalBdMap(-1, data->Dnr, data->DRowElems, 0, LComm); Epetra_MultiVector localrhs(LocalBdMap, nvectors); Epetra_MultiVector locallhs(LocalBdMap, nvectors); Epetra_MultiVector Z(BdMap, nvectors); Epetra_MultiVector Bd(BdMap, nvectors); Epetra_Import BdImporter(BdMap, newX->Map()); assert(BdImporter.SourceMap().SameAs(newX->Map())); assert((newX->Map()).SameAs(BdImporter.SourceMap())); Bd.Import(*newX, BdImporter, Insert); int lda; double *values; err = Bd.ExtractView(&values, &lda); assert (err == 0); int nrows = ssym->C->RowMap().NumMyElements(); // copy to local vector //TODO: OMP ? assert(lda == nrows); for (int v = 0; v < nvectors; v++) { for (int i = 0; i < nrows; i++) { err = localrhs.ReplaceMyValue(i, v, values[i+v*lda]); assert (err == 0); } } // TODO : Do we need to reset the lhs and rhs here ? if (config->amesosForDiagonal) { ssym->LP->SetRHS(&localrhs); ssym->LP->SetLHS(&locallhs); ssym->Solver->Solve(); } else { ssym->ifSolver->ApplyInverse(localrhs, locallhs); } err = locallhs.ExtractView(&values, &lda); assert (err == 0); // copy to distributed vector //TODO: OMP ? assert(lda == nrows); for (int v = 0; v < nvectors; v++) { for (int i = 0; i < nrows; i++) { err = Z.ReplaceMyValue(i, v, values[i+v*lda]); assert (err == 0); } } Epetra_MultiVector temp1(BsMap, nvectors); ssym->R->Multiply(false, Z, temp1); Bs.Update(-1.0, temp1, 1.0); Xs.PutScalar(0.0); Epetra_LinearProblem Problem(data->Sbar.get(), &Xs, &Bs); if (config->schurSolver == "Amesos") { Amesos_BaseSolver *solver2 = data->dsolver; data->LP2->SetLHS(&Xs); data->LP2->SetRHS(&Bs); //cout << "Calling solve *****************************" << endl; solver2->Solve(); //cout << "Out of solve *****************************" << endl; } else { if (config->libName == "Belos") { solver = data->innersolver; solver->SetLHS(&Xs); solver->SetRHS(&Bs); } else { // See the comment above on why we are not able to reuse the solver // when outer solve is AztecOO as well. solver = new AztecOO(); //solver.SetPrecOperator(precop_); solver->SetAztecOption(AZ_solver, AZ_gmres); // Do not use AZ_none solver->SetAztecOption(AZ_precond, AZ_dom_decomp); //solver->SetAztecOption(AZ_precond, AZ_none); //solver->SetAztecOption(AZ_precond, AZ_Jacobi); ////solver->SetAztecOption(AZ_precond, AZ_Neumann); //solver->SetAztecOption(AZ_overlap, 3); //solver->SetAztecOption(AZ_subdomain_solve, AZ_ilu); //solver->SetAztecOption(AZ_output, AZ_all); //solver->SetAztecOption(AZ_diagnostics, AZ_all); solver->SetProblem(Problem); } // What should be a good inner_tolerance :-) ? solver->Iterate(config->inner_maxiters, config->inner_tolerance); } Epetra_MultiVector temp(BdMap, nvectors); ssym->C->Multiply(false, Xs, temp); temp.Update(1.0, Bd, -1.0); //Epetra_SerialComm LComm; // Use Serial Comm for the local vectors. //Epetra_Map LocalBdMap(-1, data->Dnr, data->DRowElems, 0, LComm); //Epetra_MultiVector localrhs(LocalBdMap, nvectors); //Epetra_MultiVector locallhs(LocalBdMap, nvectors); //int lda; //double *values; err = temp.ExtractView(&values, &lda); assert (err == 0); //int nrows = data->Cptr->RowMap().NumMyElements(); // copy to local vector //TODO: OMP ? assert(lda == nrows); for (int v = 0; v < nvectors; v++) { for (int i = 0; i < nrows; i++) { err = localrhs.ReplaceMyValue(i, v, values[i+v*lda]); assert (err == 0); } } if (config->amesosForDiagonal) { ssym->LP->SetRHS(&localrhs); ssym->LP->SetLHS(&locallhs); ssym->Solver->Solve(); } else { ssym->ifSolver->ApplyInverse(localrhs, locallhs); } err = locallhs.ExtractView(&values, &lda); assert (err == 0); // copy to distributed vector //TODO: OMP ? assert(lda == nrows); for (int v = 0; v < nvectors; v++) { for (int i = 0; i < nrows; i++) { err = temp.ReplaceMyValue(i, v, values[i+v*lda]); assert (err == 0); } } // For checking faults //if (NumApplyInverse_ == 5) temp.ReplaceMyValue(0, 0, 0.0); Epetra_Export XdExporter(BdMap, Y.Map()); Y.Export(temp, XdExporter, Insert); Epetra_Export XsExporter(BsMap, Y.Map()); Y.Export(Xs, XsExporter, Insert); if (config->libName == "Belos" || config->schurSolver == "Amesos") { // clean up } else { delete solver; } return 0; }//end shylu_dist_solve <epetra,epetra>