 
 	int ptrPos, length;
 
-	if (lGrpId == ALL) {
+	if(lGrpId == ALL) {
 		ptrPos = 0;
 		length = networkConfigs[netId].numNReg;
 	} else {

	case STANDARD:
		if (groupConfigsGPU[grpId].WithHomeostasis) {
			// this factor is slow
			t_wt += (diff_firing*t_wt*homeostasisScale + t_effectiveWtChange) * baseFiring * avgTimeScaleInv / (1.0f + fabs(diff_firing)*50.0f);
		} else {
			t_wt += t_effectiveWtChange;
		}

	checkAndSetGPUDevice(netId);

	// cudaFree all device pointers
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].voltage) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].nextVoltage) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].recovery) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].current) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].extCurrent) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].curSpike) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].Npre) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].Npre_plastic) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].Npre_plasticInv) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].Npost) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].cumulativePost) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].cumulativePre) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].synSpikeTime) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].wt) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].wtChange) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].maxSynWt) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].nSpikeCnt) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].avgFiring) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].baseFiring) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].baseFiringInv) );

	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].grpDA) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].grp5HT) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].grpACh) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].grpNE) );

	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].grpDABuffer) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].grp5HTBuffer) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].grpAChBuffer) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].grpNEBuffer) );

	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].grpIds) );

	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].Izh_a) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].Izh_b) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].Izh_c) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].Izh_d) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].Izh_C) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].Izh_k) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].Izh_vr) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].Izh_vt) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].Izh_vpeak) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].gAMPA) );
	if (sim_with_NMDA_rise) {
		CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].gNMDA_r) );
		CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].gNMDA_d) );
	}
	else {
		CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].gNMDA) );
	}
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].gGABAa) );
	if (sim_with_GABAb_rise) {
		CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].gGABAb_r) );
		CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].gGABAb_d) );
	}
	else {
		CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].gGABAb) );
	}

	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].stpu) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].stpx) );

	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].connIdsPreIdx) );

	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].groupIdInfo) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].neuronAllocation) );

	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].postDelayInfo) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].postSynapticIds) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].preSynapticIds) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].I_set) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].poissonFireRate) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].lastSpikeTime) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].spikeGenBits) );

	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].firingTableD2) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].firingTableD1) );

	int** tempPtrs;
	tempPtrs = new int*[networkConfigs[netId].numGroups];

	// fetch device memory address stored in extFiringTableD2
	CUDA_CHECK_ERRORS( cudaMemcpy(tempPtrs, runtimeData[netId].extFiringTableD2, sizeof(int*) * networkConfigs[netId].numGroups, cudaMemcpyDeviceToHost) );
	for (int i = 0; i < networkConfigs[netId].numGroups; i++)
		CUDA_CHECK_ERRORS( cudaFree(tempPtrs[i]) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].extFiringTableD2) );

	// fetch device memory address stored in extFiringTableD1
	CUDA_CHECK_ERRORS( cudaMemcpy(tempPtrs, runtimeData[netId].extFiringTableD1, sizeof(int*) * networkConfigs[netId].numGroups, cudaMemcpyDeviceToHost) );
	for (int i = 0; i < networkConfigs[netId].numGroups; i++)
		CUDA_CHECK_ERRORS( cudaFree(tempPtrs[i]) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].extFiringTableD1) );

	delete [] tempPtrs;

	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].extFiringTableEndIdxD2) );
	CUDA_CHECK_ERRORS( cudaFree(runtimeData[netId].extFiringTableEndIdxD1) );

	// delete random numbr generator on GPU(s)
	// Note: RNG_rand48 objects allocate device memory
