Add OpenMP parallelism
[ctsim.git] / libctsim / filter.cpp
index 86dca12bbab6d2b93a9db570aa3ed2164e41a854..6382b5609497d5bc5b37e9e08c4ab3a049e54561 100644 (file)
@@ -198,10 +198,14 @@ SignalFilter::~SignalFilter (void)
 void
 SignalFilter::createFrequencyFilter (double* adFilter) const
 {
-  double x;
-  int i;
-  for (x = m_dFilterMin, i = 0; i < m_nFilterPoints; x += m_dFilterInc, i++)
+  double xstart = m_dFilterMin;
+#if HAVE_OPENMP
+  #pragma omp parallel for
+#endif
+  for (int i = 0; i < m_nFilterPoints; i++) {
+    double x = xstart + (i * m_dFilterInc);
     adFilter[i] = frequencyResponse (x);
+  }
 }
 
 
@@ -218,8 +222,12 @@ SignalFilter::createSpatialFilter (double* adFilter) const
     for (int i = 1; i <= sidelen; i++ )
       m_adFilter [center + i] = m_adFilter [center - i] = c / (4 * (i * i) - 1);
   } else {
-    double x = m_dFilterMin;
-    for (int i = 0; i < m_nFilterPoints; i++, x += m_dFilterInc) {
+    double xstart = m_dFilterMin;
+#if HAVE_OPENMP
+    #pragma omp parallel for
+#endif
+    for (int i = 0; i < m_nFilterPoints; i++) {
+      double x = xstart + (i * m_dFilterInc);
       if (haveAnalyticSpatial(m_idFilter))
         m_adFilter[i] = spatialResponseAnalytic (x);
       else
@@ -233,11 +241,12 @@ SignalFilter::convertFilterNameToID (const char *filterName)
 {
   int filterID = FILTER_INVALID;
 
-  for (int i = 0; i < s_iFilterCount; i++)
+  for (int i = 0; i < s_iFilterCount; i++) {
     if (strcasecmp (filterName, s_aszFilterName[i]) == 0) {
       filterID = i;
       break;
     }
+  }
 
     return (filterID);
 }
@@ -258,9 +267,9 @@ SignalFilter::convertFilterIDToTitle (const int filterID)
 {
   static const char *title = "";
 
-  if (filterID >= 0 && filterID < s_iFilterCount)
+  if (filterID >= 0 && filterID < s_iFilterCount) {
     return (s_aszFilterTitle [filterID]);
-
+  }
   return (title);
 }
 
@@ -269,13 +278,13 @@ SignalFilter::convertDomainNameToID (const char* const domainName)
 {
   int dID = DOMAIN_INVALID;
 
-  for (int i = 0; i < s_iDomainCount; i++)
+  for (int i = 0; i < s_iDomainCount; i++) {
     if (strcasecmp (domainName, s_aszDomainName[i]) == 0) {
       dID = i;
       break;
     }
-
-    return (dID);
+  }
+  return (dID);
 }
 
 const char *