     cudaFree(d_V);
     cudaFree(d_nodes);
     cudaFree(d_elements);
+    cudaFree(d_conv);
 
     return k;
 }

#include "nscheme.h"


__device__ int d_convergence;

// Kernel responsável por uma iteração.
__global__ void kernel_iter(const int nn, const int k, const float alpha, float R, elementri *elements, node *nodes, float *V) {
    int i = blockIdx.x * blockDim.x + threadIdx.x;
    if (i >= nn) return;



    // Iterações
    t = clock();
    conv = 1;
    while (conv == 1) {
        conv = 0;
        R = Rf*(1-expf(-k/T));
        cudaMemcpy(d_conv, &conv, sizeof(int), cudaMemcpyHostToDevice);
        kernel_iter<<<iterblocks, threads>>>(nn, k, alpha, R, d_elements, d_nodes, d_V, d_conv);
        cudaDeviceSynchronize();
        cudaMemcpy(&conv, d_conv, sizeof(int), cudaMemcpyDeviceToHost);
        k++;
    }
    t = clock() - t;
