diff --git a/src/trapping/cfrfme.cpp b/src/trapping/cfrfme.cpp
index 5901be17f7a617910bc6b3e4413a5bc8eaa879cb..24a780ccf95d82906e07538be6b34bb9c1a24f66 100644
--- a/src/trapping/cfrfme.cpp
+++ b/src/trapping/cfrfme.cpp
@@ -374,14 +374,15 @@ void frfme(string data_file, string output_path) {
 #ifdef USE_NVTX
 	  nvtxRangePop();
 #endif
-	  dcomplex *vec_w = new dcomplex[nkv * nkv]();
-	  dcomplex **w = new dcomplex*[nkv];
-	  for (int wi = 0; wi < nkv; wi++) w[wi] = vec_w + wi * nkv;
 #ifdef USE_NVTX
 	  nvtxRangePush("j80 loop");
 #endif
+#pragma omp parallel for
 	  for (int j80 = jlmf; j80 <= jlml; j80++) {
-	    int wk_index = 0;
+	    dcomplex *vec_w = new dcomplex[nkv * nkv]();
+	    dcomplex **w = new dcomplex*[nkv];
+	    for (int wi = 0; wi < nkv; wi++) w[wi] = vec_w + wi * nkv;
+	    int wk_index = (j80 - jlmf) * nkv * nkv;
 	    for (int jy50 = 0; jy50 < nkv; jy50++) {
 	      for (int jx50 = 0; jx50 < nkv; jx50++) {
 		for (int wi = 0; wi < nlmmt; wi++) wk[wi] = tt1->vec_wk[wk_index++];
@@ -419,9 +420,9 @@ void frfme(string data_file, string output_path) {
 		} // ix65 loop
 	      } // iy70 loop
 	    } // iz75 loop
+	    delete[] vec_w;
+	    delete[] w;
 	  } // j80 loop
-	  delete[] vec_w;
-	  delete[] w;
 #ifdef USE_NVTX
 	  nvtxRangePop();
 #endif