diff --git a/couplage/CARAIB/ver01_Iv_couplage/carbon_npp_cal.f b/couplage/CARAIB/ver01_Iv_couplage/carbon_npp_cal.f
index ade0cadee5e30e2ff6f13b511524fd29e7371a06..ee0746a0fa529b220676fb84d4ffeeae5fe8ade8 100644
--- a/couplage/CARAIB/ver01_Iv_couplage/carbon_npp_cal.f
+++ b/couplage/CARAIB/ver01_Iv_couplage/carbon_npp_cal.f
@@ -85,7 +85,7 @@ c
       integer , intent(in) :: ngt,ny0,iread,itmt
       integer ih,ipool,iday2,iday_sow,iharv
       real*4  , intent(in) :: tmt_it
-      real*4  faparl,tot_frac,faparh
+      real*4  faparl,tot_frac,faparh,rbmax
 c------------------------------------------------      
 
 c   second argument of year_iteration : 
@@ -207,33 +207,33 @@ c=======================================================================
 c   yearly gpp and fractionation calculation
 c=======================================================================
       do ip = 1,npft 
-        iharv = 0     
-        if(frac(ip).gt.1.e-7) then
-          do iday = 1, nd
+            iharv = 0     
+            if(frac(ip).gt.1.e-7) then
+            do iday = 1, nd
             if(ip.le.npft0.or.ip.ge.npft0+ncrop+1) then
-              ygppf(ip) = ygppf(ip) + xgpp(ip,iday)
-	      ygppf_ini(ip,ngt) = ygppf(ip)  
-	    else
-              if(iharv.eq.0) then
-	        ygppf(ip) = ygppf(ip) + xgpp(ip,iday)
-		if(maturity(ip).eq.-999) ygppf(ip) =0.
-		ygppf_ini(ip,ngt) = ygppf(ip)
-                if(iphase(ip,iday).eq.2) then
-	          ygppf_ini(ip,ngt) = 0.
-	          iharv = 1
-	        endif  
-	      else 
-	        ygppf_ini(ip,ngt) = ygppf_ini(ip,ngt) + xgpp(ip,iday)
-	      endif   
-	    endif 	    
+                  ygppf(ip) = ygppf(ip) + xgpp(ip,iday)
+            ygppf_ini(ip,ngt) = ygppf(ip)  
+            else
+                  if(iharv.eq.0) then
+                  ygppf(ip) = ygppf(ip) + xgpp(ip,iday)
+            if(maturity(ip).eq.-999) ygppf(ip) =0.
+            ygppf_ini(ip,ngt) = ygppf(ip)
+                  if(iphase(ip,iday).eq.2) then
+                  ygppf_ini(ip,ngt) = 0.
+                  iharv = 1
+                  endif  
+            else 
+                  ygppf_ini(ip,ngt) = ygppf_ini(ip,ngt) + xgpp(ip,iday)
+            endif   
+            endif 	    
             yfractf(ip) = yfractf(ip) + xfract(ip,iday)
-          enddo
-          if (ygppf(ip).eq.0.) then 
+            enddo
+            if (ygppf(ip).eq.0.) then 
             yfractf(ip) = 0. 
-          else
+            else
             yfractf(ip) = yfractf(ip) / ygppf(ip)
-          endif
-        endif
+            endif
+            endif
       end do
       
 
@@ -262,62 +262,67 @@ c   grid point gpp, npp, lai, biomass, 13C fract and fire emission
 c=======================================================================
 
       do iday = 1, nd
-        iday2 = iday-1
-	if(iday .eq. 1) iday2 = nd
-        do ip = 1, npft
-          xdgpp(iday) = xdgpp(iday) + frac(ip) * xgpp(ip,iday)
-          xdnpp(iday) = xdnpp(iday) + frac(ip) * xnpp(ip,iday)
-          xdlai(iday) = xdlai(iday) + frac(ip) * xlai(ip,iday)
-          xdfract(iday) = xdfract(iday) 
+            iday2 = iday-1
+      if(iday .eq. 1) iday2 = nd
+            do ip = 1, npft
+            xdgpp(iday) = xdgpp(iday) + frac(ip) * xgpp(ip,iday)
+            xdnpp(iday) = xdnpp(iday) + frac(ip) * xnpp(ip,iday)
+            xdlai(iday) = xdlai(iday) + frac(ip) * xlai(ip,iday)
+            xdfract(iday) = xdfract(iday) 
      &                              + frac(ip) * xfract(ip,iday)
-          do ipool = 1, npool 
-           xdbiom(iday) = xdbiom(iday) + frac(ip)*carbon(ip,ipool,iday)   
-           ybiomf(ip) = ybiomf(ip) + carbon(ip,ipool,iday)/float(nd)
-           xbiom(ip,iday) = xbiom(ip,iday) + carbon(ip,ipool,iday)
-	     xemifire(ip,iday) = xemifire(ip,iday)
+            do ipool = 1, npool 
+            xdbiom(iday) = xdbiom(iday) + frac(ip)*carbon(ip,ipool,iday)   
+            ybiomf(ip) = ybiomf(ip) + carbon(ip,ipool,iday)/float(nd)
+            xbiom(ip,iday) = xbiom(ip,iday) + carbon(ip,ipool,iday)
+            xemifire(ip,iday) = xemifire(ip,iday)
      &                       + emi_burn_veg(ip,ipool,iday)
-	   xcharvest(ip,iday) = xcharvest(ip,iday)
+            xcharvest(ip,iday) = xcharvest(ip,iday)
      &                       + charvest(ip,ipool,iday)     
-           yemifiref(ip) = yemifiref(ip) + emi_burn_veg(ip,ipool,iday)
-          enddo
-	  
-	  if(ip.le.npft0.or.ip.ge.npft0+ncrop+1) then
-	    ybiomag(ip) = ybiomag(ip) 
+            yemifiref(ip) = yemifiref(ip) + emi_burn_veg(ip,ipool,iday)
+            enddo
+            
+            if(ip.le.npft0.or.ip.ge.npft0+ncrop+1) then
+            ybiomag(ip) = ybiomag(ip) 
      &	     + (carbon(ip,1,iday)
-     &        + carbon(ip,2,iday)-root_biomass(ip,iday))/float(nd)
-            ybiombg(ip) = ybiombg(ip)+root_biomass(ip,iday)/float(nd)
+     &       + max(0.,carbon(ip,2,iday)-root_biomass(ip,iday)))
+     &       /float(nd)
+                  ybiombg(ip) = ybiombg(ip)+min(carbon(ip,2,iday),
+     &                      root_biomass(ip,iday))/float(nd)
 c Ingrid
-	    ybiomtot(ip) = carbon(ip,1,iday)+carbon(ip,2,iday)
-          else
-	    if (iphase(ip,iday2).eq.1.and.iphase(ip,iday).eq.2) then
-	      if(iday.eq.1) then
-	        root_biomass(ip,iday2) = root_ini(ip)
-                carbon(ip,1,iday2) = ycar_ini(ip,1,ngt) !carbon_ini(ip,1)
-		carbon(ip,2,iday2) = ycar_ini(ip,2,ngt) !carbon_ini(ip,2)
-	      endif	
-	      ybiomag(ip) = carbon(ip,1,iday2)
-     &        + carbon(ip,2,iday2)-root_biomass(ip,iday2)
-              ybiombg(ip) = root_biomass(ip,iday2)
+            ybiomtot(ip) = carbon(ip,1,iday)+carbon(ip,2,iday)
+            else
+            if (iphase(ip,iday2).eq.1.and.iphase(ip,iday).eq.2) then
+            if(iday.eq.1) then
+                  carbon(ip,1,iday2) = ycar_ini(ip,1,ngt) !carbon_ini(ip,1)
+                  carbon(ip,2,iday2) = ycar_ini(ip,2,ngt) !carbon_ini(ip,2)
+                        rbmax = (rootsh(ip)/(1.+rootsh(ip)))
+     &                 *(carbon(ip,1,iday2)+carbon(ip,2,iday2))
+                        root_ini(ip) = min(carbon(ip,2,iday2),rbmax)
+                        root_biomass(ip,iday2) = root_ini(ip)
+            endif	
+            ybiomag(ip) = carbon(ip,1,iday2)
+     &        + max(0.,carbon(ip,2,iday2)-root_biomass(ip,iday2))
+                        ybiombg(ip) = max(0.,root_biomass(ip,iday2))
 c Ingrid
-	      ybiomtot(ip) = carbon(ip,1,iday2) + carbon(ip,2,iday2)
+            ybiomtot(ip) = carbon(ip,1,iday2) + carbon(ip,2,iday2)
             endif
-	  endif  	  
+            endif  	  
 c Ingrid
-        yield(ip)=yield_fac(ip)*ybiomtot(ip)
+            yield(ip)=yield_fac(ip)*ybiomtot(ip)
 
-        enddo
+            enddo
 
 
 
-        if(xdgpp(iday).ne.0.) then
-          xdfract(iday) = xdfract(iday) / xdgpp(iday)
-        else
-          if(abs(xdfract(iday)).gt.1.e-20) then
+            if(xdgpp(iday).ne.0.) then
+            xdfract(iday) = xdfract(iday) / xdgpp(iday)
+            else
+            if(abs(xdfract(iday)).gt.1.e-20) then
             write(99961,*) 'error, fractionation:',iday,xdfract(iday),
      &                  xdgpp(iday)
-          endif
-	  xdfract(iday) = 0.
-        endif
+            endif
+            xdfract(iday) = 0.
+            endif
 
       enddo
 
@@ -327,7 +332,7 @@ c=======================================================================
 
       tot_frac = 0.
       do ip = 1, npft
-        tot_frac = tot_frac + frac(ip)
+            tot_frac = tot_frac + frac(ip)
       end do
 
 c      write(*,*)'npp_cal:after loop iday,ip, ybiom'
@@ -336,35 +341,35 @@ c   fapar calculation
 c=======================================================================
 
       do iday = 1, nd
-       xdfapar(iday) = 0.
-       if(partoc(iday).gt.0.) then
-         do ip = 1, npft
-           faparl = 0.
-           if(frac(ip) .gt. 1.e-7) then
-             do ih = 1, nh2
-               faparh = 0.
-
-                 faparh = faparh
+            xdfapar(iday) = 0.
+            if(partoc(iday).gt.0.) then
+            do ip = 1, npft
+            faparl = 0.
+            if(frac(ip) .gt. 1.e-7) then
+                  do ih = 1, nh2
+                  faparh = 0.
+
+                  faparh = faparh
      &   + (sunhour(iday) * (fsun(ip,iday,ih)*apar(ip,iday,ih,1)
      &   + (1.-fsun(ip,iday,ih))*apar(ip,iday,ih,2))
      &   + (1.-sunhour(iday)) * apar(ip,iday,ih,3))
      &   *corr_hour(iday,ih)/radun
 
-               faparl = faparl + faparh
-             enddo
-             faparl = faparl * xlai(ip,iday) * frac(ip)
-           endif
-           xdfapar(iday) = xdfapar(iday) + faparl
-         enddo
-         xdfapar(iday) = xdfapar(iday) / partoc(iday)
-
-         if(tot_frac.gt.0.0) then
-           xdfapar(iday)= xdfapar(iday) / tot_frac
-         endif
-       endif
-       if(xdfapar(iday).lt.0. .or. xdfapar(iday).gt.1.) then
-         write(99961,*) 'error L',iday,xdfapar(iday)
-       endif
+                  faparl = faparl + faparh
+                  enddo
+                  faparl = faparl * xlai(ip,iday) * frac(ip)
+            endif
+            xdfapar(iday) = xdfapar(iday) + faparl
+            enddo
+            xdfapar(iday) = xdfapar(iday) / partoc(iday)
+
+            if(tot_frac.gt.0.0) then
+            xdfapar(iday)= xdfapar(iday) / tot_frac
+            endif
+            endif
+            if(xdfapar(iday).lt.0. .or. xdfapar(iday).gt.1.) then
+            write(99961,*) 'error L',iday,xdfapar(iday)
+            endif
       enddo
 
 c      write(*,*)'npp_cal:after loop iday fapar'
@@ -374,13 +379,13 @@ c   calculation of g*Ca and g*Ci
 c=======================================================================
 
       do iday = 1, nd
-        do ip = 1, npft
+            do ip = 1, npft
 
             xdgca(iday) = xdgca(iday) 
      &                  + gca(ip,iday) * xlai(ip,iday) * frac(ip)
             xdgci(iday) = xdgci(iday) 
      &                  + gci(ip,iday) * xlai(ip,iday) * frac(ip)
-        enddo
+            enddo
       enddo
 
 c      write(*,*)'npp_cal: end of subroutine'