Fixing fortran control point interface routine. Fortran passes ints by reference...
authorIsaac Dooley <idooley2@bp-login1.(none)>
Tue, 4 May 2010 20:05:28 +0000 (15:05 -0500)
committerIsaac Dooley <idooley2@bp-login1.(none)>
Tue, 4 May 2010 20:05:28 +0000 (15:05 -0500)
src/ck-cp/controlPoints.C
src/ck-cp/controlPoints.h
src/ck-cp/controlPointsf.h

index 3624a8dd2939e9dd8acb16c4a9c9f1a60c1069c5..cb3a5c58062cb279982b7485c9e79419aa4fed2f 100644 (file)
@@ -11,6 +11,7 @@
 #include "trace-projections.h"
 #include <pathHistory.h>
 #include "cp_effects.h"
+#include <iostream>
 
 #include <climits>
 //  A framework for tuning "control points" exposed by an application. Tuning decisions are based upon observed performance measurements.
@@ -1818,6 +1819,11 @@ int controlPoint(const char *name, int lb, int ub){
     
   }
 
+  if(!isInRange(result,ub,lb)){
+    std::cerr << "control point out of range: " << result << " " << lb << " " << ub << std::endl;
+    fflush(stdout);
+    fflush(stderr);
+  }
   CkAssert(isInRange(result,ub,lb));
   thisPhaseData->controlPoints[std::string(name)] = result; // was insert() 
 
@@ -1830,8 +1836,10 @@ int controlPoint(const char *name, int lb, int ub){
 }
 
 
-FDECL int FTN_NAME(CONTROLPOINT, controlpoint)(int lb, int ub){
-  return controlPoint("Fortran CP", lb, ub);
+FDECL int FTN_NAME(CONTROLPOINT, controlpoint)(CMK_TYPEDEF_INT4 *lb, CMK_TYPEDEF_INT4 *ub){
+  CkAssert(sizeof(lb) == 4);
+  CkAssert(CkMyPe() == 0);
+  return controlPoint("FortranCP", *lb, *ub);
 }
 
 
index 83aacb3a404b9c5134c81bf0acddb7ea5565688d..9adabbc3ef5350b13bd787f6a3185a4994d8c560 100644 (file)
@@ -89,7 +89,7 @@ int controlPoint(const char *name, int lb, int ub);
 
 /// A fortran callable one. I couldn't figure out how to pass a string from fortran to C++ yet
 /// So far fortran can only have one control point
-FDECL int FTN_NAME(controlpoint,CONTROLPOINT)(int lb, int ub);
+FDECL int FTN_NAME(controlpoint,CONTROLPOINT)(CMK_TYPEDEF_INT4 *lb, CMK_TYPEDEF_INT4 *ub);
 
 
 /// Return an integer from the provided vector of values
index 2be4ec4d20d8e7737a9670c7f6a89a84541aaf61..7e7af61cf9754621d324079a570f3fd6814624f6 100644 (file)
@@ -9,8 +9,8 @@ subroutine gotoNextPhase()
 end subroutine
 
 integer function controlPoint(lb, ub)
-     integer :: lb
-integer :: ub
+     integer*4 :: lb
+integer*4 :: ub
 end function
 
 end interface