Commit abea8076 authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Update OpenMP implementation of frfme()

parent 0b7e3963
Loading
Loading
Loading
Loading
+21 −20
Original line number Diff line number Diff line
@@ -129,19 +129,19 @@ void frfme(string data_file, string output_path) {
      if (tt2 != NULL) {
	vkv = tt2->get_vector();
	vkzm = tt2->get_matrix();
	apfafa = tt2->get_param("apfafa");
	pmf = tt2->get_param("pmf");
	spd = tt2->get_param("spd");
	rir = tt2->get_param("rir");
	ftcn = tt2->get_param("ftcn");
	fshmx = tt2->get_param("fshmx");
	vxyzmx = tt2->get_param("vxyzmx");
	delxyz = tt2->get_param("delxyz");
	vknmx = tt2->get_param("vknmx");
	delk = tt2->get_param("delk");
	delks = tt2->get_param("delks");
	nlmmt = (int)tt2->get_param("nlmmt");
	nrvc = (int)tt2->get_param("nrvc");
	apfafa = tt2->apfafa;
	pmf = tt2->pmf;
	spd = tt2->spd;
	rir = tt2->rir;
	ftcn = tt2->ftcn;
	fshmx = tt2->fshmx;
	vxyzmx = tt2->vxyzmx;
	delxyz = tt2->delxyz;
	vknmx = tt2->vknmx;
	delk = tt2->delk;
	delks = tt2->delks;
	nlmmt = tt2->nlmmt;
	nrvc = tt2->nrvc;
      } else {
	printf("ERROR: could not open TEMPTAPE2 file.\n");
      }
@@ -273,10 +273,10 @@ void frfme(string data_file, string output_path) {
	long swap1_size, swap2_size, tfrfme_size;
	double size_mb;
	printf("INFO: calculating memory requirements\n");
	swap1_size = Swap1::get_memory_requirement(lm, nkv);
	swap1_size = Swap1::get_size(lm, nkv);
	size_mb = 1.0 * swap1_size / 1024.0 / 1024.0;
	printf("Swap 1: %.2lg MB\n", size_mb);
	swap2_size = Swap2::get_memory_requirement(nkv);
	swap2_size = Swap2::get_size(nkv);
	size_mb = 1.0 * swap2_size / 1024.0 / 1024.0;
	printf("Swap 2: %.2lg MB\n", size_mb);
	tt2 = new Swap2(nkv);
@@ -374,13 +374,14 @@ 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++) {
	    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 = 0;
	    for (int jy50 = 0; jy50 < nkv; jy50++) {
	      for (int jx50 = 0; jx50 < nkv; jx50++) {
@@ -419,9 +420,9 @@ void frfme(string data_file, string output_path) {
		} // ix65 loop
	      } // iy70 loop
	    } // iz75 loop
	  } // j80 loop
	    delete[] vec_w;
	    delete[] w;
	  } // j80 loop
#ifdef USE_NVTX
	  nvtxRangePop();
#endif