369 nObs = length(ASSIM);
370 niter = INTEGER(NITER)[0];
378 double scale = REAL(SCALE)[0];
381 double Rd = REAL(iRD)[0];
382 double ikparm = REAL(iKPARM)[0];
383 double ibeta = REAL(iBETA)[0];
384 double itheta = REAL(iTHETA)[0];
385 double Catm = REAL(CATM)[0];
386 double b0 = REAL(B0)[0];
387 double b1 = REAL(B1)[0];
388 double StomWS = REAL(STOMWS)[0];
389 int ws = INTEGER(WS)[0];
397 double pmuVmax = REAL(PRIOR)[0];
398 double psdVmax = REAL(PRIOR)[1];
399 double pmuAlpha = REAL(PRIOR)[2];
400 double psdAlpha = REAL(PRIOR)[3];
402 double upperT =REAL(UPPERTEMP)[0];
403 double lowerT =REAL(LOWERTEMP)[0];
406 double rnewVcmax, rnewAlpha;
407 double oldAlpha, oldVcmax;
415 PROTECT(lists = allocVector(VECSXP,2));
416 PROTECT(names = allocVector(STRSXP,2));
417 PROTECT(mat1 = allocMatrix(REALSXP,3,niter));
418 PROTECT(accept = allocVector(REALSXP,1));
422 oldVcmax = REAL(iVCMAX)[0];
423 oldAlpha = REAL(iALPHA)[0];
425 sd1 = REAL(SD1)[0] * scale;
426 sd2 = REAL(SD2)[0] * scale;
428 for(i = 0; i < niter; i++){
433 rnewVcmax = oldVcmax + rnorm(0,sd1);
434 rnewAlpha = oldAlpha;
436 rnewAlpha = oldAlpha + rnorm(0, sd2);
437 rnewVcmax = oldVcmax;
441 rnum = dnorm(rnewVcmax,pmuVmax,psdVmax,0)*dnorm(rnewAlpha,pmuAlpha,psdAlpha,0);
442 rden = dnorm(oldVcmax,pmuVmax,psdVmax,0)*dnorm(oldAlpha,pmuAlpha,psdAlpha,0);
444 lratio = log(rnum) - log(rden);
446 RSS =
RSS_C4photo(REAL(ASSIM),REAL(QP),REAL(TEMP),REAL(RH),rnewVcmax,rnewAlpha, ikparm, itheta, ibeta, Rd, Catm, b0, b1, StomWS, ws,upperT,lowerT);
452 lmr = -RSS + oldRSS + lratio;
456 oldVcmax = rnewVcmax;
457 oldAlpha = rnewAlpha;
462 REAL(mat1)[i*3] = oldVcmax ;
463 REAL(mat1)[i*3 + 1] = oldAlpha ;
464 REAL(mat1)[i*3 + 2] = oldRSS;
469 REAL(accept)[0] = n1;
471 SET_VECTOR_ELT(lists,0,accept);
472 SET_VECTOR_ELT(lists,1,mat1);
474 SET_STRING_ELT(names,0,mkChar(
"accept"));
475 SET_STRING_ELT(names,1,mkChar(
"resuMC"));
477 setAttrib(lists,R_NamesSymbol,names);
int nObs
Definition: c4photo.h:8
double RSS_C4photo(double oAssim[nObs], double oQp[nObs], double oTemp[nObs], double oRH[nObs], double vmax, double alpha, double kparm, double theta, double beta, double Rd, double Catm, double b0, double b1, double StomWS, int ws, double upperT, double lowerT)
Definition: c4photo.c:486