tmp < BlockLduSystem<vector, typename outerProduct<vector, Type>::type> > gradScheme<Type>::fvmGrad ( const GeometricField<Type, fvPatchField, volMesh>& vf ) const { FatalErrorIn ( "tmp<BlockLduSystem> gradScheme<Type>::fvmGrad\n" "(\n" " GeometricField<Type, fvPatchField, volMesh>&" ")\n" ) << "Implicit gradient operator currently defined only for Gauss linear " << "and leastSquares (cell and face limiters are optional)." << abort(FatalError); typedef typename outerProduct<vector, Type>::type GradType; tmp<BlockLduSystem<vector, GradType> > tbs ( new BlockLduSystem<vector, GradType>(vf.mesh()) ); return tbs; }
void TrimmedSurfaceConverter::_convert( TrimmedNurbsSurfaceObject::surface_type const& nurbspatch) { tml::converter2d conv2d; tml::converter3d conv3d; // first convert trimmed nurbs surface into bezierpatches std::vector<tml::beziersurface_from_nurbs<tml::point3d> > bezierpatches; conv3d.convert(nurbspatch, std::back_inserter(bezierpatches)); // then convert all trimming nurbs curves into bezier curves std::vector<TrimDomain::contour_type> loops; for (TrimmedNurbsSurface::const_trimloop_iterator l = nurbspatch.trimloops().begin(); l != nurbspatch.trimloops().end(); ++l) { // first split nurbs loop into bezier loop TrimmedBezierSurface::curve_container loop; for (auto c = l->begin(); c != l->end(); ++c) { conv2d.convert(*c, std::back_inserter(loop)); } // convert to pointer std::vector<TrimDomain::curve_ptr> loop_as_ptr; for (auto c = loop.begin(); c != loop.end(); ++c) { loop_as_ptr.push_back( TrimDomain::curve_ptr(new TrimDomain::curve_type(*c))); } loops.push_back( TrimDomain::contour_type(loop_as_ptr.begin(), loop_as_ptr.end())); } TrimmedBezierSurface::trimdomain_ptr domain(new TrimDomain); // add curves, set trimtype and which part of the nurbs patch the patch is std::for_each( loops.begin(), loops.end(), boost::bind(&TrimDomain::add, domain, _1)); domain->type(nurbspatch.trimtype()); domain->nurbsdomain(TrimDomain::bbox_type( TrimDomain::point_type(nurbspatch.umin(), nurbspatch.vmin()), TrimDomain::point_type(nurbspatch.umax(), nurbspatch.vmax()))); // generate trimmed bezier patches from subpatches and trimming curves for (std::vector<tml::beziersurface_from_nurbs<tml::point3d> >::const_iterator b = bezierpatches.begin(); b != bezierpatches.end(); ++b) { boost::shared_ptr<TrimmedBezierSurface> tbs( new TrimmedBezierSurface(b->surface)); tbs->domain(domain); tbs->bezierdomain( TrimDomain::bbox_type(TrimDomain::point_type(b->umin, b->vmin), TrimDomain::point_type(b->umax, b->vmax))); // lock for write access into TrimmedBezierSurfaceObject boost::mutex::scoped_lock lock(_impl->target_access); _impl->target->add(tbs); } }