diff --git a/main.for b/main.for index 17311c5ad66c56981d57ce9033201f64e3c4f6b7..9b74209edb73b356a7a9e8a3f2e38d97f6558bae 100644 --- a/main.for +++ b/main.for @@ -648,7 +648,7 @@ C MCMC BURN-IN DO it = 1,nt IF (thetaprior(it,3).LT.thetaprior(it,4)) THEN CALL SLICE2(it,nobs,d,ny,nz,nx,nu,ns,nt,S,yk(1:nobs,:), - 1 theta0,thetaprior(it,:),pdftheta(it),pdll, + 1 theta0,thetaprior(it,:),pdftheta(it), 2 NEVAL(it),theta(it)) theta0(it) = theta(it) ENDIF @@ -818,7 +818,7 @@ C MCMC RECORDING phase DO it = 1,nt IF (thetaprior(it,3).LT.thetaprior(it,4)) THEN CALL SLICE2(it,nobs,d,ny,nz,nx,nu,ns,nt,S,yk(1:nobs,:), - 1 theta0,thetaprior(it,:),pdftheta(it),pdll, + 1 theta0,thetaprior(it,:),pdftheta(it), 2 NEVAL(it),theta(it)) theta0(it) = theta(it) ENDIF diff --git a/ptheta2.for b/ptheta2.for index 8b36c62cb5e0cb13427cc25eda991b1f461d7985..0c77cb46a2abd2c55f1ad761dd0bd0c692645672 100644 --- a/ptheta2.for +++ b/ptheta2.for @@ -21,7 +21,7 @@ C You should have received a copy of the GNU General Public License C along with DMM. If not, see <http://www.gnu.org/licenses/>. C ---------------------------------------------------------------- DOUBLE PRECISION FUNCTION PTHETA2(it,nobs,d,ny,nz,nx,nu,ns,nt, - 1 S,yk,theta,thetaprior,tipo,pdll) + 1 S,yk,theta,thetaprior,tipo) #if defined(__CYGWIN32__) || defined(_WIN32) #ifdef __INTEL_COMPILER USE dfwin @@ -31,23 +31,6 @@ C ---------------------------------------------------------------- USE ISO_C_UTILITIES USE DLFCN #endif - INTERFACE - SUBROUTINE DESIGN(ny,nz,nx,nu,ns,nt,theta,c,H,G,a,F,R) - INTEGER ny,nz,nx,nu,ns(6),nt - DOUBLE PRECISION theta(nt) - DOUBLE PRECISION c(ny,max(1,nz),ns(1)),H(ny,nx,ns(2)), - 1 G(ny,nu,ns(3)),a(nx,ns(4)),F(nx,nx,ns(5)),R(nx,nu,ns(6)) - END SUBROUTINE - END INTERFACE - CHARACTER*1 fittizia -#if defined(__CYGWIN32__) || defined(_WIN32) - POINTER (pdll,fittizia) ! ASSOCIATE pointer pdll alla DLL ad una varibile fittizia - POINTER (pdesign,DESIGN) ! IMPORTANT associo il puntatore pdesign alla Interface definita -#else - TYPE(C_PTR) :: pdll - TYPE(C_FUNPTR) :: pdesign=C_NULL_FUNPTR - PROCEDURE(DESIGN), POINTER :: ptrdesign=>NULL() -#endif C INPUT INTEGER it,nobs,d(2),ny,nz,nx,nu,ns(6),nt,S(nobs,6) @@ -66,16 +49,9 @@ C LOCALS C computes the log-posterior -#if defined(__CYGWIN32__) || defined(_WIN32) - pdesign = getprocaddress(pdll, "design_"C) +#if defined(ORIGDLL) CALL DESIGN(ny,nz,nx,nu,ns,nt,theta,c,H,G,a,F,R) #else - pdesign = DLSym(pdll, 'design_'//C_NULL_CHAR) - IF(.NOT.C_ASSOCIATED(pdesign)) THEN - WRITE(*,*) ' Error in dlsym: ', C_F_STRING(DLError()) - END IF - CALL C_F_PROCPOINTER(CPTR=pdesign, FPTR=ptrdesign) - CALL ptrdesign(ny,nz,nx,nu,ns,nt,theta,c,H,G,a,F,R) #endif CALL IKF2(d,ny,nz,nx,nu,ns,S(1:max(d(1),1),1:6), 1 yk(1:max(d(1),1),1:ny+nz), diff --git a/slice2.for b/slice2.for index 6810e700ab2387ff42e66865c4d1bc03d0d0f304..80d673ef0ec08a9763a27650d8a9ff2e538a5958 100644 --- a/slice2.for +++ b/slice2.for @@ -22,13 +22,11 @@ C You should have received a copy of the GNU General Public License C along with DMM. If not, see <http://www.gnu.org/licenses/>. C ------------------------------------------------------------- SUBROUTINE SLICE2(it,nobs,d,ny,nz,nx,nu,ns,nt,S,yk, - 1 theta,thetaprior,tipo,pdll,NEVAL,XSIM) + 1 theta,thetaprior,tipo,NEVAL,XSIM) C INPUT INTEGER it,nobs,d(2),ny,nz,nx,nu,ns(6),nt,S(nobs,6) DOUBLE PRECISION yk(nobs,ny+nz),theta(nt),thetaprior(4) CHARACTER*2 tipo - CHARACTER*1 fittizia - POINTER (pdll,fittizia) C OUTPUT INTEGER NEVAL @@ -50,7 +48,7 @@ C THIS DEFINES THE SLICE S={x: z < ln(f(x))} C ------------------------------------------------------- theta(it) = XOLD FXOLD=PTHETA2(it,nobs,d,ny,nz,nx,nu,ns,nt,S,yk, - 1 theta,thetaprior,tipo,pdll) + 1 theta,thetaprior,tipo) NEVAL = NEVAL + 1 U = genunf(0.D0,1.D0) Z = FXOLD + DLOG(U) @@ -71,14 +69,14 @@ C U = G05CAF(U) DO 100 WHILE(L.GT.XLB) theta(it) = L FXL=PTHETA2(it,nobs,d,ny,nz,nx,nu,ns,nt,S,yk, - 1 theta,thetaprior,tipo,pdll) + 1 theta,thetaprior,tipo) NEVAL = NEVAL + 1 IF (FXL.LE.Z) GOTO 110 100 L = L - W 110 DO 200 WHILE(R.LT.XUB) theta(it) = R FXR=PTHETA2(it,nobs,d,ny,nz,nx,nu,ns,nt,S,yk, - 1 theta,thetaprior,tipo,pdll) + 1 theta,thetaprior,tipo) NEVAL = NEVAL + 1 IF (FXR.LE.Z) GOTO 210 200 R = R + W @@ -92,7 +90,7 @@ C U = G05CAF(U) IF (L.LE.XLB) GOTO 310 theta(it) = L FXL=PTHETA2(it,nobs,d,ny,nz,nx,nu,ns,nt,S,yk, - 1 theta,thetaprior,tipo,pdll) + 1 theta,thetaprior,tipo) NEVAL = NEVAL + 1 IF (FXL.LE.Z) GOTO 310 L = L - W @@ -102,7 +100,7 @@ C U = G05CAF(U) IF (R.GE.XLB) GOTO 410 theta(it) = R FXR=PTHETA2(it,nobs,d,ny,nz,nx,nu,ns,nt,S,yk, - 1 theta,thetaprior,tipo,pdll) + 1 theta,thetaprior,tipo) NEVAL = NEVAL + 1 IF (FXR.LE.Z) GOTO 410 R = R + W @@ -122,7 +120,7 @@ C U = G05CAF(U) XSIM = L + U*(R - L) theta(it) = XSIM FXSIM=PTHETA2(it,nobs,d,ny,nz,nx,nu,ns,nt,S,yk, - 1 theta,thetaprior,tipo,pdll) + 1 theta,thetaprior,tipo) NEVAL = NEVAL + 1 IF (FXSIM.GE.Z) OK = 1 IF(XSIM.GT.XOLD) THEN