// set V to global x/y/f position int ShrunkenPatchTestLayer::setVtoGlobalPos(){ for (int kLocal = 0; kLocal < clayer->numNeurons; kLocal++){ int kGlobal = globalIndexFromLocal(kLocal, clayer->loc); int kxGlobal = kxPos(kGlobal, clayer->loc.nxGlobal, clayer->loc.nyGlobal, clayer->loc.nf); float xScaleLog2 = clayer->xScale; float x0 = xOriginGlobal(xScaleLog2); float dx = deltaX(xScaleLog2); float x_global_pos = (x0 + dx * kxGlobal); clayer->V[kLocal] = x_global_pos; } return PV_SUCCESS; }
int MatchingPursuitProbe::outputState(double timed) { int status = PV_SUCCESS; const PVLayerLoc * loc = getTargetLayer()->getLayerLoc(); if (timed>0.0) { for (int k=0; k<getTargetLayer()->getNumNeurons(); k++) { int kGlobal = globalIndexFromLocal(k, *loc); pvdata_t correctValue = nearbyint((double)kGlobal + timed)==256.0 ? (pvdata_t) kGlobal/255.0f : 0.0f; int kExtended = kIndexExtended(k, loc->nx, loc->ny, loc->nf, loc->halo.lt, loc->halo.rt, loc->halo.dn, loc->halo.up); pvdata_t observed = getTargetLayer()->getLayerData()[kExtended]; pvdata_t relerr = fabs(observed-correctValue)/correctValue; if (relerr>1e-7) { fprintf(stderr, "Time %f: Neuron %d (global index) has relative error %f (%f versus correct %f)\n", timed, kGlobal, relerr, observed, correctValue); status = PV_FAILURE; } } } assert(status==PV_SUCCESS); return status; }
int ResetStateOnTriggerTestProbe::calcValues(double timevalue) { int nBatch = getNumValues(); if (timevalue > parent->getStartTime()) { int N = targetLayer->getNumNeurons(); int NGlobal = targetLayer->getNumGlobalNeurons(); PVLayerLoc const * loc = targetLayer->getLayerLoc(); PVHalo const * halo = &loc->halo; int inttime = (int) nearbyintf(timevalue/parent->getDeltaTime()); for (int b=0; b<nBatch; b++) { int numDiscreps = 0; pvadata_t const * activity = targetLayer->getLayerData() + b*targetLayer->getNumExtended(); for (int k=0; k<N; k++) { int kex = kIndexExtended(k, loc->nx, loc->ny, loc->nf, halo->lt, halo->rt, halo->dn, halo->up); pvadata_t a = activity[kex]; int kGlobal = globalIndexFromLocal(k, *loc); int correctValue = 4*kGlobal*((inttime + 4)%5+1) + (kGlobal==((((inttime-1)/5)*5)+1)%NGlobal); if ( a != (pvadata_t) correctValue ) { numDiscreps++; } } getValuesBuffer()[b] = (double) numDiscreps; } MPI_Allreduce(MPI_IN_PLACE, getValuesBuffer(), nBatch, MPI_DOUBLE, MPI_SUM, parent->icCommunicator()->communicator()); if (probeStatus==0) { for (int k=0; k<nBatch; k++) { if (getValuesBuffer()[k]) { probeStatus = 1; firstFailureTime = timevalue; } } } } else { for (int b=0; b<nBatch; b++) { getValuesBuffer()[b] = 0.0; } } return PV_SUCCESS; }