bool occluded(const intersector &bvhtree, const ray &r) { const intersector::node *stack[64]; const auto rdir = rcp(r.dir); stack[0] = bvhtree.root; u32 stacksz = 1; while (stacksz) { const intersector::node *node = stack[--stacksz]; for (;;) { auto res = slab(node->box, r.org, rdir, r.tfar); if (!res.isec) break; processnode: const u32 flag = node->getflag(); if (flag == intersector::NONLEAF) { const u32 offset = node->getoffset(); stack[stacksz++] = node+offset+1; node = node+offset; } else { if (flag == intersector::TRILEAF) { auto tris = node->getptr<waldtriangle>(); const s32 n = tris->num; loopi(n) if (raytriangle<true>(tris[i], r.org, r.dir)) return true; } else { node = node->getptr<intersector>()->root; goto processnode; } break; } }
void closest(const intersector &bvhtree, const ray &r, hit &hit) { const s32 signs[3] = {(r.dir.x>=0.f)&1, (r.dir.y>=0.f)&1, (r.dir.z>=0.f)&1}; const auto rdir = rcp(r.dir); const intersector::node *stack[64]; stack[0] = bvhtree.root; u32 stacksz = 1; while (stacksz) { const intersector::node *node = stack[--stacksz]; for (;;) { auto res = slab(node->box, r.org, rdir, hit.t); if (!res.isec) break; processnode: const u32 flag = node->getflag(); if (flag == intersector::NONLEAF) { const s32 farindex = signs[node->getaxis()]; const s32 nearindex = farindex^1; const u32 offset = node->getoffset(); stack[stacksz++] = node+offset+farindex; node = node+offset+nearindex; } else { if (flag == intersector::TRILEAF) { auto tris = node->getptr<waldtriangle>(); const s32 n = tris->num; loopi(n) raytriangle<false>(tris[i], r.org, r.dir, &hit); break; } else { node = node->getptr<intersector>()->root; goto processnode; } } } } }
dmatrix3 ConvLayer::think(dmatrix3 mat) { dmatrix3 slab(mat.size(), dmatrix2(Fshape[1], dvec(Fshape[0]))); ivec step(4); dvec exc(OutShape[1]*OutShape[2]); dvec act(OutShape[1]*OutShape[2]); ivec foldshape(2); foldshape[0] = OutShape[1]; foldshape[1] = OutShape[2]; Inputs = &mat; for(int f=0;f<Filters.size();f++) { dmatrix3 filt = Filters[f]; for(int i=0;i<Steps.size();i++) { step = Steps[i]; slab = invert<real>(slice<real>(invert<real>(mat), step)); exc[i] = frobenius(slab, filt); // This is the "convolve" step act[i] = sigmoid(exc[exc.size()-1]); } Excitations[f] = fold2<real>(exc, foldshape); Activations[f] = fold2<real>(act, foldshape); } return Activations; }
void SelectionVisitor::apply( const xdm::HyperslabDataSelection& selection ) { xdm::HyperSlab< hsize_t > slab( selection.hyperslab() ); H5Sselect_hyperslab( mIdent, H5S_SELECT_SET, &(slab.start( 0 )), &(slab.stride( 0 )), &(slab.count( 0 )), NULL ); }
int makeGeometry(Box& a_domain) { int eekflag = 0; //parse input file ParmParse pp; RealVect origin = RealVect::Zero; Vector<int> n_cell(SpaceDim); pp.getarr("n_cell",n_cell,0,SpaceDim); Real probhi; pp.get("prob_hi", probhi); Real dx = probhi/n_cell[0]; CH_assert(n_cell.size() == SpaceDim); IntVect lo = IntVect::Zero; IntVect hi; for (int ivec = 0; ivec < SpaceDim; ivec++) { if (n_cell[ivec] <= 0) { pout() << " bogus number of cells input = " << n_cell[ivec]; return(-1); } hi[ivec] = n_cell[ivec] - 1; } a_domain.setSmall(lo); a_domain.setBig(hi); int iverbose; pp.get("verbose", iverbose); bool verbose = (iverbose==1); int whichgeom; pp.get("which_geom",whichgeom); if (whichgeom == 0) { //allregular if (verbose) pout() << "all regular geometry" << endl; AllRegularService regserv; EBIndexSpace* ebisPtr = Chombo_EBIS::instance(); ebisPtr->define(a_domain, origin, dx, regserv, 2048); } else if (whichgeom == 1) { if (verbose) pout() << "ramp geometry" << endl; int upDir; int indepVar; Real startPt; Real slope; pp.get("up_dir",upDir); pp.get("indep_var",indepVar); pp.get("start_pt", startPt); pp.get("ramp_slope", slope); RealVect normal = RealVect::Zero; normal[upDir] = 1.0; normal[indepVar] = -slope; RealVect point = RealVect::Zero; point[upDir] = -slope*startPt; bool normalInside = true; PlaneIF ramp(normal,point,normalInside); RealVect vectDx = RealVect::Unit; vectDx *= dx; GeometryShop workshop(ramp,0,vectDx); //this generates the new EBIS EBIndexSpace* ebisPtr = Chombo_EBIS::instance(); ebisPtr->define(a_domain, origin, dx, workshop, 2048); } else if (whichgeom == 2) { if (verbose) pout() << "slab geometry" << endl; vector<int> slab_lo(SpaceDim); pp.getarr("slab_lo",slab_lo,0,SpaceDim); vector<int> slab_hi(SpaceDim); pp.getarr("slab_hi",slab_hi,0,SpaceDim); IntVect lo, hi; for (int idir = 0; idir < SpaceDim; idir++) { lo[idir] = slab_lo[idir]; hi[idir] = slab_hi[idir]; } Box coveredBox(lo,hi); SlabService slab(coveredBox); //this generates the new EBIS EBIndexSpace* ebisPtr = Chombo_EBIS::instance(); RealVect origin = RealVect::Zero; ebisPtr->define(a_domain, origin, dx, slab,2048); } else { //bogus which_geom pout() << " bogus which_geom input = " << whichgeom; eekflag = 33; } return eekflag; }
int makeGeometry(Box& a_domain, Real& a_dx) { int eekflag = 0; //parse input file ParmParse pp; RealVect origin = RealVect::Zero; Vector<int> n_cell(SpaceDim); pp.getarr("n_cell",n_cell,0,SpaceDim); int nlevels = 2; Vector<int> refRatio(nlevels); pp.getarr("ref_ratio", refRatio,0,nlevels); IntVect lo = IntVect::Zero; IntVect hi; for (int ivec = 0; ivec < SpaceDim; ivec++) { if (n_cell[ivec] <= 0) { pout() << " bogus number of cells input = " << n_cell[ivec]; return(-1); } hi[ivec] = n_cell[ivec] - 1; } a_domain.setSmall(lo); a_domain.setBig(hi); //now coarsen a_domain so it's the finest domain (level 1, fine hierarchy) a_domain.refine(refRatio[0]*2); Vector<Real> prob_lo(SpaceDim, 1.0); Real prob_hi; pp.getarr("prob_lo",prob_lo,0,SpaceDim); pp.get("prob_hi",prob_hi); a_dx = (prob_hi-prob_lo[0])/n_cell[0]; a_dx /= 2*refRatio[0];//so it's dx on the finest domain (level 1, fine hierarchy) for (int idir = 0; idir < SpaceDim; idir++) { origin[idir] = prob_lo[idir]; } int whichgeom; pp.get("which_geom",whichgeom); if (whichgeom == 0) { //allregular pout() << "all regular geometry" << endl; AllRegularService regserv; CH_XD::EBIndexSpace* ebisPtr = Chombo_EBIS::instance(); ebisPtr->define(a_domain, origin, a_dx, regserv); } else if (whichgeom == 1) { pout() << "ramp geometry" << endl; int upDir; int indepVar; Real startPt; Real slope; pp.get("up_dir",upDir); pp.get("indep_var",indepVar); pp.get("start_pt", startPt); pp.get("ramp_slope", slope); RealVect normal = RealVect::Zero; normal[upDir] = 1.0; normal[indepVar] = -slope; RealVect point = RealVect::Zero; point[upDir] = -slope*startPt; bool normalInside = true; PlaneIF ramp(normal,point,normalInside); RealVect vectDx = RealVect::Unit; vectDx *= a_dx; GeometryShop workshop(ramp,0,vectDx); //this generates the new EBIS CH_XD::EBIndexSpace* ebisPtr = Chombo_EBIS::instance(); ebisPtr->define(a_domain, origin, a_dx, workshop); } else if (whichgeom == 2) { pout() << "slab geometry" << endl; vector<int> slab_lo(SpaceDim); pp.getarr("slab_lo",slab_lo,0,SpaceDim); vector<int> slab_hi(SpaceDim); pp.getarr("slab_hi",slab_hi,0,SpaceDim); IntVect lo, hi; for (int idir = 0; idir < SpaceDim; idir++) { lo[idir] = slab_lo[idir]; hi[idir] = slab_hi[idir]; } Box coveredBox(lo,hi); SlabService slab(coveredBox); //this generates the new EBIS CH_XD::EBIndexSpace* ebisPtr = Chombo_EBIS::instance(); RealVect origin = RealVect::Zero; ebisPtr->define(a_domain, origin, a_dx, slab); } else { //bogus which_geom pout() << " bogus which_geom input = " << whichgeom; eekflag = 33; } return eekflag; }