Index: LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/climb_qbs_mod.f90
===================================================================
--- LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/climb_qbs_mod.f90	(revision 5879)
+++ LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/climb_qbs_mod.f90	(revision 5880)
@@ -3,10 +3,9 @@
 ! Module to solve the verctical diffusion of blowing snow; 
 !
-  USE dimphy
 
   IMPLICIT NONE
   SAVE 
   PRIVATE
-  PUBLIC :: climb_qbs_down, climb_qbs_up
+  PUBLIC :: climb_qbs_down, climb_qbs_up, climb_qbs_init, climb_qbs_finalize
 
   REAL, DIMENSION(:,:), ALLOCATABLE :: gamaqbs
@@ -19,5 +18,62 @@
   !$OMP THREADPRIVATE(Kcoefqbs)
 
+  LOGICAL, SAVE                            :: first=.TRUE.
+  !$OMP THREADPRIVATE(first)
+ 
 CONTAINS
+  SUBROUTINE climb_qbs_init
+  USE dimphy, ONLY : klon, klev
+  IMPLICIT NONE 
+    INTEGER :: ierr
+!****************************************************************************************
+! 1)
+! Allocation at first time step only
+!   
+!****************************************************************************************
+
+    IF (first) THEN
+       first=.FALSE.
+       ALLOCATE(Ccoef_QBS(klon,klev), STAT=ierr)
+       IF ( ierr /= 0 )  PRINT*,' pb in allloc Ccoef_QBS, ierr=', ierr
+       Ccoef_QBS(:,:) = 0.
+       
+       ALLOCATE(Dcoef_QBS(klon,klev), STAT=ierr)
+       IF ( ierr /= 0 )  PRINT*,' pb in allloc Dcoef_QBS, ierr=', ierr
+       Dcoef_QBS(:,:) = 0.
+
+       ALLOCATE(Acoef_QBS(klon), Bcoef_QBS(klon), STAT=ierr)
+       IF ( ierr /= 0 )  PRINT*,' pb in allloc Acoef_BS and Bcoef_BS, ierr=', ierr
+       Acoef_QBS(:) = 0. ; Bcoef_QBS(:) = 0.
+
+       ALLOCATE(Kcoefqbs(klon,klev), STAT=ierr)
+       IF ( ierr /= 0 )  PRINT*,' pb in allloc Kcoefqbs, ierr=', ierr
+       Kcoefqbs(:,:) = 0.
+
+       ALLOCATE(gamaqbs(1:klon,2:klev), STAT=ierr)
+       IF ( ierr /= 0 ) PRINT*,' pb in allloc gamaqbs, ierr=', ierr
+       gamaqbs(:,:) = 0.
+
+    END IF
+
+  END SUBROUTINE climb_qbs_init
+
+  SUBROUTINE climb_qbs_finalize
+  IMPLICIT NONE
+  INTEGER :: ierr
+    !****************************************************************************************
+    ! Some deallocations
+    !
+    !****************************************************************************************
+    DEALLOCATE(Ccoef_QBS, Dcoef_QBS,stat=ierr)    
+    IF ( ierr /= 0 )  PRINT*,' pb in dealllocate Ccoef_QBS, Dcoef_QBS, ierr=', ierr
+    DEALLOCATE(Acoef_QBS, Bcoef_QBS,stat=ierr)    
+    IF ( ierr /= 0 )  PRINT*,' pb in dealllocate Acoef_QBS, Bcoef_QBS, ierr=', ierr
+    DEALLOCATE(gamaqbs,stat=ierr)
+    IF ( ierr /= 0 )  PRINT*,' pb in dealllocate gamaqbs, ierr=', ierr
+    DEALLOCATE(Kcoefqbs,stat=ierr)
+    IF ( ierr /= 0 )  PRINT*,' pb in dealllocate Kcoefqbs, ierr=', ierr
+
+  END SUBROUTINE climb_qbs_finalize
+
 !
 !****************************************************************************************
@@ -28,4 +84,5 @@
        Kcoef_qbs_out, gama_qbs_out, &
        Acoef_QBS_out, Bcoef_QBS_out)
+!$gpum horizontal knon
 
 ! This routine calculates recursivly the coefficients C and D
@@ -34,4 +91,5 @@
 USE yomcst_mod_h
 USE compbl_mod_h
+USE dimphy, ONLY : klev
 ! Input arguments
 !****************************************************************************************
@@ -64,33 +122,8 @@
     REAL :: ygamaqbs(1:knon,2:klev)
 
-    LOGICAL, SAVE                            :: first=.TRUE.
-    !$OMP THREADPRIVATE(first)
     REAL, DIMENSION(knon)                    :: psref 
     REAL                                     :: delz, pkh
     INTEGER                                  :: k, i, j, ierr
-!****************************************************************************************
-! 1)
-! Allocation at first time step only
-!   
-!****************************************************************************************
-
-    IF (first) THEN
-       first=.FALSE.
-       ALLOCATE(Ccoef_QBS(klon,klev), STAT=ierr)
-       IF ( ierr /= 0 )  PRINT*,' pb in allloc Ccoef_QBS, ierr=', ierr
-       
-       ALLOCATE(Dcoef_QBS(klon,klev), STAT=ierr)
-       IF ( ierr /= 0 )  PRINT*,' pb in allloc Dcoef_QBS, ierr=', ierr
-       
-       ALLOCATE(Acoef_QBS(klon), Bcoef_QBS(klon), STAT=ierr)
-       IF ( ierr /= 0 )  PRINT*,' pb in allloc Acoef_BS and Bcoef_BS, ierr=', ierr
-       
-       ALLOCATE(Kcoefqbs(klon,klev), STAT=ierr)
-       IF ( ierr /= 0 )  PRINT*,' pb in allloc Kcoefqbs, ierr=', ierr
-       
-       ALLOCATE(gamaqbs(1:klon,2:klev), STAT=ierr)
-       IF ( ierr /= 0 ) PRINT*,' pb in allloc gamaqbs, ierr=', ierr
-       
-    END IF
+
 
 !****************************************************************************************
@@ -195,8 +228,11 @@
 !
   SUBROUTINE calc_coef_qbs(knon, Kcoef, gama, delp, X, Ccoef, Dcoef, Acoef, Bcoef)
+!$gpum horizontal knon
 !
 ! Calculate the coefficients C and D in : X(k) = C(k) + D(k)*X(k-1)
 ! where X is QQBS, and k the vertical level k=1,klev
 USE yomcst_mod_h
+USE dimphy, ONLY : klev
+
 ! Input arguments
 !****************************************************************************************
@@ -266,4 +302,5 @@
        Kcoef_qbs_in, gama_qbs_in, &
        flux_qbs, d_qbs)
+!$gpum horizontal knon
 ! 
 ! This routine calculates the flux and tendency of the specific content of blowing snow qbs 
@@ -274,4 +311,6 @@
 USE yomcst_mod_h
 USE compbl_mod_h
+USE dimphy, ONLY : klev
+
 ! Input arguments
 !****************************************************************************************
@@ -302,6 +341,4 @@
     REAL :: ygamaqbs(1:knon,2:klev)
 
-    LOGICAL, SAVE                            :: last=.FALSE.
-!$OMP THREADPRIVATE(last)
     REAL, DIMENSION(knon,klev)               :: qbs_new
     REAL, DIMENSION(knon)                    :: psref         
@@ -407,18 +444,5 @@
       ENDDO
     ENDDO
-!****************************************************************************************
-! Some deallocations
-!
-!****************************************************************************************
-    IF (last) THEN
-       DEALLOCATE(Ccoef_QBS, Dcoef_QBS,stat=ierr)    
-       IF ( ierr /= 0 )  PRINT*,' pb in dealllocate Ccoef_QBS, Dcoef_QBS, ierr=', ierr
-       DEALLOCATE(Acoef_QBS, Bcoef_QBS,stat=ierr)    
-       IF ( ierr /= 0 )  PRINT*,' pb in dealllocate Acoef_QBS, Bcoef_QBS, ierr=', ierr
-       DEALLOCATE(gamaqbs,stat=ierr)
-       IF ( ierr /= 0 )  PRINT*,' pb in dealllocate gamaqbs, ierr=', ierr
-       DEALLOCATE(Kcoefqbs,stat=ierr)
-       IF ( ierr /= 0 )  PRINT*,' pb in dealllocate Kcoefqbs, ierr=', ierr
-    END IF
+
   END SUBROUTINE climb_qbs_up
 !
Index: LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/pbl_surface_mod.F90
===================================================================
--- LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/pbl_surface_mod.F90	(revision 5879)
+++ LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/pbl_surface_mod.F90	(revision 5880)
@@ -111,4 +111,6 @@
     USE climb_hq_mod, ONLY : climb_hq_init
     USE climb_wind_mod, ONLY : climb_wind_init
+    USE climb_qbs_mod, ONLY : climb_qbs_init
+
     IMPLICIT NONE
  
@@ -267,4 +269,5 @@
     CALL climb_hq_init
     CALL climb_wind_init
+    CALL climb_qbs_init
 
   END SUBROUTINE pbl_surface_init
