Index: branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/CONFIG/SHARED/namelist_ref
===================================================================
--- branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/CONFIG/SHARED/namelist_ref	(revision 12654)
+++ branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/CONFIG/SHARED/namelist_ref	(revision 13318)
@@ -1303,4 +1303,8 @@
     ln_plchltotinc = .false. !  Logical switch for applying plchltot increments
     ln_pchltotinc  = .false. !  Logical switch for applying pchltot increments
+    ln_plchldiainc = .false. !  Logical switch for applying plchldia increments
+    ln_plchlnaninc = .false. !  Logical switch for applying plchlnan increments
+    ln_plchlpicinc = .false. !  Logical switch for applying plchlpic increments
+    ln_plchldininc = .false. !  Logical switch for applying plchldin increments
     ln_pno3inc     = .false. !  Logical switch for applying pno3 increments
     ln_psi4inc     = .false. !  Logical switch for applying psi4 increments
Index: branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/NEMO/OPA_SRC/ASM/asmbgc.F90
===================================================================
--- branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/NEMO/OPA_SRC/ASM/asmbgc.F90	(revision 12654)
+++ branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/NEMO/OPA_SRC/ASM/asmbgc.F90	(revision 13318)
@@ -132,4 +132,8 @@
    LOGICAL, PUBLIC :: ln_sfco2inc    = .FALSE. !: No surface fCO2                          increment
    LOGICAL, PUBLIC :: ln_plchltotinc = .FALSE. !: No profile total      log10(chlorophyll) increment
+   LOGICAL, PUBLIC :: ln_plchldiainc = .FALSE. !: No profile diatom     log10(chlorophyll) increment
+   LOGICAL, PUBLIC :: ln_plchlnaninc = .FALSE. !: No profile nanophyto  log10(chlorophyll) increment
+   LOGICAL, PUBLIC :: ln_plchlpicinc = .FALSE. !: No profile picophyto  log10(chlorophyll) increment
+   LOGICAL, PUBLIC :: ln_plchldininc = .FALSE. !: No profile dinoflag   log10(chlorophyll) increment
    LOGICAL, PUBLIC :: ln_pchltotinc  = .FALSE. !: No profile total      chlorophyll        increment
    LOGICAL, PUBLIC :: ln_pno3inc     = .FALSE. !: No profile nitrate                       increment
@@ -173,4 +177,8 @@
    REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: spco2_bkginc    ! spco2 inc
    REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: plchltot_bkginc ! plchltot inc
+   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: plchldia_bkginc ! plchldia inc
+   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: plchlnan_bkginc ! plchlnan inc
+   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: plchlpic_bkginc ! plchlpic inc
+   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: plchldin_bkginc ! plchldin inc
    REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: pchltot_bkginc  ! pchltot inc
    REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: pno3_bkginc     ! pno3 inc
@@ -262,5 +270,5 @@
          & ( .NOT. ln_slphydiainc ).AND.( .NOT. ln_slphynoninc ) ) THEN
          CALL ctl_warn( ' Cannot calculate phytoplankton balancing increments', &
-            &           ' if not assimilating ocean colour,',                   &
+            &           ' if not assimilating ocean colour in 2D,',             &
             &           ' so ln_phytobal will be set to .false.')
          ln_phytobal = .FALSE.
@@ -274,4 +282,6 @@
          & ( .NOT. ln_slphytotinc ).AND.( .NOT. ln_slphydiainc ).AND. &
          & ( .NOT. ln_slphynoninc ).AND.( .NOT. ln_plchltotinc ).AND. &
+         & ( .NOT. ln_plchldiainc ).AND.( .NOT. ln_plchlnaninc ).AND. &
+         & ( .NOT. ln_plchlpicinc ).AND.( .NOT. ln_plchldininc ).AND. &
          & ( .NOT. ln_pchltotinc  ).AND.( .NOT. ln_pphinc      ).AND. &
          & ( .NOT. ln_spco2inc    ).AND.( .NOT. ln_sfco2inc    ) ) THEN
@@ -297,4 +307,10 @@
          &   ln_slchlpicinc .OR. ln_slchldininc ) ) THEN
          CALL ctl_stop( ' Can only assimilate total or PFT surface chlorophyll, not both' )
+      ENDIF
+
+      IF ( ( ln_plchltotinc .OR. ln_pchltotinc  ) .AND. &
+         & ( ln_plchldiainc .OR. ln_plchlnaninc .OR. &
+         &   ln_plchlpicinc .OR. ln_plchldininc ) ) THEN
+         CALL ctl_stop( ' Can only assimilate total or PFT profile chlorophyll, not both' )
       ENDIF
 
@@ -416,4 +432,24 @@
       ENDIF
       
+      IF ( ln_plchldiainc ) THEN
+         ALLOCATE( plchldia_bkginc(jpi,jpj,jpk) )
+         CALL asm_bgc_read_incs_3d( knum, 'bckinplchldia', plchldia_bkginc )
+      ENDIF
+      
+      IF ( ln_plchldininc ) THEN
+         ALLOCATE( plchldin_bkginc(jpi,jpj,jpk) )
+         CALL asm_bgc_read_incs_3d( knum, 'bckinplchldin', plchldin_bkginc )
+      ENDIF
+      
+      IF ( ln_plchlnaninc ) THEN
+         ALLOCATE( plchlnan_bkginc(jpi,jpj,jpk) )
+         CALL asm_bgc_read_incs_3d( knum, 'bckinplchlnan', plchlnan_bkginc )
+      ENDIF
+      
+      IF ( ln_plchlpicinc ) THEN
+         ALLOCATE( plchlpic_bkginc(jpi,jpj,jpk) )
+         CALL asm_bgc_read_incs_3d( knum, 'bckinplchlpic', plchlpic_bkginc )
+      ENDIF
+      
       IF ( ln_pchltotinc ) THEN
          ALLOCATE( pchltot_bkginc(jpi,jpj,jpk) )
@@ -470,5 +506,6 @@
       ENDIF
       
-      IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN
+      IF ( ln_plchltotinc .OR. ln_pchltotinc  .OR. ln_plchldiainc .OR. &
+         & ln_plchlnaninc .OR. ln_plchlpicinc .OR. ln_plchldininc ) THEN
 #if defined key_top
          ALLOCATE( phyto3d_balinc(jpi,jpj,jpk,jptra) )
@@ -601,5 +638,7 @@
          & ln_slchlnaninc .OR. ln_slchlpicinc .OR. ln_slchldininc .OR. &
          & ln_schltotinc  .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. &
-         & ln_slphynoninc .OR. ln_plchltotinc .OR. ln_pchltotinc ) THEN
+         & ln_slphynoninc .OR. ln_plchltotinc .OR. ln_pchltotinc  .OR. &
+         & ln_plchldiainc .OR. ln_plchldininc .OR. ln_plchlnaninc .OR. &
+         & ln_plchlpicinc ) THEN
 
          ALLOCATE( pgrow_avg_bkg(jpi,jpj)        )
@@ -888,5 +927,6 @@
          ENDIF
 
-         IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN
+         IF ( ln_plchltotinc .OR. ln_pchltotinc  .OR. ln_plchldiainc .OR. &
+            & ln_plchldininc .OR. ln_plchlnaninc .OR. ln_plchlpicinc ) THEN
 #if defined key_medusa
             CALL iom_rstput( kt, kt, inum, 'phy3d_chn', phyto3d_balinc(:,:,:,jpchn) )
@@ -1254,4 +1294,49 @@
    !!===========================================================================
 
+   SUBROUTINE asm_bgc_unlog_3d( pbkg, pinc_log, pinc_nonlog )
+      !!------------------------------------------------------------------------
+      !!                    ***  ROUTINE asm_bgc_init_incs  ***
+      !!
+      !! ** Purpose :   convert log increments to non-log
+      !!
+      !! ** Method  :   need to account for model background,
+      !!                cannot simply do 10^log_inc. Need to:
+      !!                1) Add log_inc to log10(background) to get log10(analysis)
+      !!                2) Take 10^log10(analysis) to get analysis
+      !!                3) Subtract background from analysis to get non-log incs
+      !!
+      !! ** Action  :   return non-log increments
+      !!
+      !! References :   
+      !!------------------------------------------------------------------------
+      !!
+      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpk) :: pbkg        ! Background
+      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpk) :: pinc_log    ! Log incs
+      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj,jpk) :: pinc_nonlog ! Non-log incs
+      !
+      INTEGER                                         :: ji, jj, jk  ! Loop counters
+      !!
+      !!------------------------------------------------------------------------
+
+      DO jk = 1, jpk
+         DO jj = 1, jpj
+            DO ji = 1, jpi
+               IF ( pbkg(ji,jj,jk) > 0.0 ) THEN
+                  pinc_nonlog(ji,jj,jk) = 10**( LOG10( pbkg(ji,jj,jk) ) + &
+                     &                          pinc_log(ji,jj,jk) )      &
+                     &                    - pbkg(ji,jj,jk)
+               ELSE
+                  pinc_nonlog(ji,jj,jk) = 0.0
+               ENDIF
+            END DO
+         END DO
+      END DO
+
+   END SUBROUTINE asm_bgc_unlog_3d
+
+   !!===========================================================================
+   !!===========================================================================
+   !!===========================================================================
+
    SUBROUTINE phyto2d_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau )
       !!------------------------------------------------------------------------
@@ -1618,4 +1703,5 @@
       INTEGER                          :: it            ! Index
       REAL(wp)                         :: zincwgt       ! IAU weight for timestep
+      REAL(wp)                         :: zfrac         ! Fraction
       REAL(wp)                         :: zfrac_chn     ! Fraction of jpchn
       REAL(wp)                         :: zfrac_chd     ! Fraction of jpchd
@@ -1640,54 +1726,150 @@
       REAL(wp)                         :: zrat_p4n_chl4 ! jp_fabm_p4n:jp_fabm_chl4 ratio
       REAL(wp)                         :: zrat_p4p_chl4 ! jp_fabm_p4p:jp_fabm_chl4 ratio
-      REAL(wp), DIMENSION(jpi,jpj,jpk) :: chl_inc       ! Chlorophyll increments
-      REAL(wp), DIMENSION(jpi,jpj,jpk) :: bkg_chl       ! Chlorophyll background
+      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zinc_chltot   ! Local chltot incs
+      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zbkg_chltot   ! Local chltot bkg
+#if defined key_fabm
+      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zinc_chldia   ! Local chldia incs
+      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zbkg_chldia   ! Local chldia bkg
+      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zinc_chldin   ! Local chldin incs
+      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zbkg_chldin   ! Local chldin bkg
+      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zinc_chlnan   ! Local chlnan incs
+      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zbkg_chlnan   ! Local chlnan bkg
+      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zinc_chlpic   ! Local chlpic incs
+      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zbkg_chlpic   ! Local chlpic bkg
+      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zinc_chltot_temp   ! Local chltot incs
+#endif
       !!------------------------------------------------------------------------
 
       IF ( kt <= nit000 ) THEN
 
+         ! Un-log any log increments
+         ! Remember that two sets of non-log increments should not be
+         ! expected to be in the same ratio as their log equivalents
+         
+         ! Total chlorophyll
          IF ( ln_plchltotinc ) THEN
-            ! Convert log10(chlorophyll) increment back to a chlorophyll increment
-            ! In order to transform logchl incs to chl incs, need to account for model
-            ! background, cannot simply do 10^logchl_bkginc. Need to:
-            ! 1) Add logchl inc to log10(background) to get log10(analysis)
-            ! 2) Take 10^log10(analysis) to get analysis
-            ! 3) Subtract background from analysis to get chl incs
-            ! If rn_maxchlinc > 0 then cap total absolute chlorophyll increment at that value
 #if defined key_medusa
-            bkg_chl(:,:,:) = tracer_bkg(:,:,:,jpchn) + tracer_bkg(:,:,:,jpchd)
+            zbkg_chltot(:,:,:) = tracer_bkg(:,:,:,jpchn) + tracer_bkg(:,:,:,jpchd)
 #elif defined key_hadocc
-            bkg_chl(:,:,:) = chl_bkg(:,:,:)
-#elif defined key_fabm
-            bkg_chl(:,:,:) = tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl1) + &
-               &             tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl2) + &
-               &             tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl3) + &
-               &             tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl4)
-#endif
-            DO jk = 1, jpk
-               DO jj = 1, jpj
-                  DO ji = 1, jpi
-                     IF ( bkg_chl(ji,jj,jk) > 0.0 ) THEN
-                        chl_inc(ji,jj,jk) = 10**( LOG10( bkg_chl(ji,jj,jk) ) + plchltot_bkginc(ji,jj,jk) ) - bkg_chl(ji,jj,jk)
-                        IF ( rn_maxchlinc > 0.0 ) THEN
-                           chl_inc(ji,jj,jk) = MAX( -1.0 * rn_maxchlinc, MIN( chl_inc(ji,jj,jk), rn_maxchlinc ) )
-                        ENDIF
-                     ELSE
-                        chl_inc(ji,jj,jk) = 0.0
-                     ENDIF
+            zbkg_chltot(:,:,:) = chl_bkg(:,:,:)
+#elif defined key_fabm
+            zbkg_chltot(:,:,:) = tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl1) + &
+               &                 tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl2) + &
+               &                 tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl3) + &
+               &                 tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl4)
+#endif
+            CALL asm_bgc_unlog_3d( zbkg_chltot, plchltot_bkginc, zinc_chltot )
+         ELSE IF ( ln_pchltotinc ) THEN
+            zinc_chltot(:,:,:) = pchltot_bkginc(:,:,:)
+         ELSE
+            zinc_chltot(:,:,:) = 0.0
+         ENDIF
+
+#if defined key_fabm
+         ! Diatom chlorophyll
+         IF ( ln_plchldiainc ) THEN
+            zbkg_chldia(:,:,:) = tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl1)
+            CALL asm_bgc_unlog_3d( zbkg_chldia, plchldia_bkginc, zinc_chldia )
+         ELSE
+            zinc_chldia(:,:,:) = 0.0
+         ENDIF
+
+         ! Nanophytoplankton chlorophyll
+         IF ( ln_plchlnaninc ) THEN
+            zbkg_chlnan(:,:,:) = tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl2)
+            CALL asm_bgc_unlog_3d( zbkg_chlnan, plchlnan_bkginc, zinc_chlnan )
+         ELSE
+            zinc_chlnan(:,:,:) = 0.0
+         ENDIF
+
+         ! Picophytoplankton chlorophyll
+         IF ( ln_plchlpicinc ) THEN
+            zbkg_chlpic(:,:,:) = tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl3)
+            CALL asm_bgc_unlog_3d( zbkg_chlpic, plchlpic_bkginc, zinc_chlpic )
+         ELSE
+            zinc_chlpic(:,:,:) = 0.0
+         ENDIF
+
+         ! Dinoflagellate chlorophyll
+         IF ( ln_plchldininc ) THEN
+            zbkg_chldin(:,:,:) = tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl4)
+            CALL asm_bgc_unlog_3d( zbkg_chldin, plchldin_bkginc, zinc_chldin )
+         ELSE
+            zinc_chldin(:,:,:) = 0.0
+         ENDIF
+#endif
+
+         ! If rn_maxchlinc > 0 then cap total absolute chlorophyll increment at that value
+         IF ( rn_maxchlinc > 0.0 ) THEN
+            IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN
+               DO jk = 1, jpk
+                  DO jj = 1, jpj
+                     DO ji = 1, jpi
+                        zinc_chltot(ji,jj,jk) = MAX( -1.0 * rn_maxchlinc, MIN( zinc_chltot(ji,jj,jk), rn_maxchlinc ) )
+                     END DO
                   END DO
                END DO
-            END DO
-         ELSE IF ( ln_pchltotinc ) THEN
-            DO jk = 1, jpk
-               DO jj = 1, jpj
-                  DO ji = 1, jpi
-                     IF ( rn_maxchlinc > 0.0 ) THEN
-                        chl_inc(ji,jj,jk) = MAX( -1.0 * rn_maxchlinc, MIN( pchltot_bkginc(ji,jj,jk), rn_maxchlinc ) )
-                     ELSE
-                        chl_inc(ji,jj,jk) = pchltot_bkginc(ji,jj,jk)
-                     ENDIF
+#if defined key_fabm
+            ELSE
+               DO jk = 1, jpk
+                  DO jj = 1, jpj
+                     DO ji = 1, jpi
+                        IF ( ln_plchldiainc .AND. ln_plchlnaninc .AND. ln_plchlpicinc .AND. ln_plchldininc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + zinc_chlnan(ji,jj,jk) + &
+                              &                         zinc_chlpic(ji,jj,jk) + zinc_chldin(ji,jj,jk)
+                        ELSE IF ( ln_plchldiainc .AND. ln_plchlnaninc .AND. ln_plchlpicinc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + zinc_chlnan(ji,jj,jk) + &
+                              &                         zinc_chlpic(ji,jj,jk)
+                        ELSE IF ( ln_plchldiainc .AND. ln_plchlnaninc .AND. ln_plchldininc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + zinc_chlnan(ji,jj,jk) + &
+                              &                         zinc_chldin(ji,jj,jk)
+                        ELSE IF ( ln_plchldiainc .AND. ln_plchlpicinc .AND. ln_plchldininc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + &
+                              &                         zinc_chlpic(ji,jj,jk) + zinc_chldin(ji,jj,jk)
+                        ELSE IF ( ln_plchlnaninc .AND. ln_plchlpicinc .AND. ln_plchldininc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chlnan(ji,jj,jk) + &
+                              &                         zinc_chlpic(ji,jj,jk) + zinc_chldin(ji,jj,jk)
+                        ELSE IF ( ln_plchldiainc .AND. ln_plchlnaninc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + zinc_chlnan(ji,jj,jk)
+                        ELSE IF ( ln_plchldiainc .AND. ln_plchlpicinc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + zinc_chlpic(ji,jj,jk)
+                        ELSE IF ( ln_plchldiainc .AND. ln_plchldininc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + zinc_chldin(ji,jj,jk)
+                        ELSE IF ( ln_plchlnaninc .AND. ln_plchlpicinc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chlnan(ji,jj,jk) + zinc_chlpic(ji,jj,jk)
+                        ELSE IF ( ln_plchlnaninc .AND. ln_plchldininc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chlnan(ji,jj,jk) + zinc_chldin(ji,jj,jk)
+                        ELSE IF ( ln_plchlpicinc .AND. ln_plchldininc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chlpic(ji,jj,jk) + zinc_chldin(ji,jj,jk)
+                        ELSE IF ( ln_plchldiainc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk)
+                        ELSE IF ( ln_plchlnaninc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chlnan(ji,jj,jk)
+                        ELSE IF ( ln_plchlpicinc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chlpic(ji,jj,jk)
+                        ELSE IF ( ln_plchldininc ) THEN
+                           zinc_chltot_temp(ji,jj,jk) = zinc_chldin(ji,jj,jk)
+                        ENDIF
+                        zinc_chltot(ji,jj,jk) = MAX( -1.0 * rn_maxchlinc, MIN( zinc_chltot_temp(ji,jj,jk), rn_maxchlinc ) )
+                        IF ( zinc_chltot(ji,jj,jk) .NE. zinc_chltot_temp(ji,jj,jk) ) THEN
+                           zfrac = zinc_chltot(ji,jj,jk) / zinc_chltot_temp(ji,jj,jk)
+                           IF ( ln_plchldiainc ) THEN
+                              zinc_chldia(ji,jj,jk) = zinc_chldia(ji,jj,jk) * zfrac
+                           ENDIF
+                           IF ( ln_plchlnaninc ) THEN
+                              zinc_chlnan(ji,jj,jk) = zinc_chlnan(ji,jj,jk) * zfrac
+                           ENDIF
+                           IF ( ln_plchlpicinc ) THEN
+                              zinc_chlpic(ji,jj,jk) = zinc_chlpic(ji,jj,jk) * zfrac
+                           ENDIF
+                           IF ( ln_plchldininc ) THEN
+                              zinc_chldin(ji,jj,jk) = zinc_chldin(ji,jj,jk) * zfrac
+                           ENDIF
+                        ENDIF
+                     END DO
                   END DO
                END DO
-            END DO
+#endif
+            ENDIF
          ENDIF
 
@@ -1700,6 +1882,6 @@
                      zfrac_chn = tracer_bkg(ji,jj,jk,jpchn) / (tracer_bkg(ji,jj,jk,jpchn) + tracer_bkg(ji,jj,jk,jpchd))
                      zfrac_chd = 1.0 - zfrac_chn
-                     phyto3d_balinc(ji,jj,jk,jpchn) = chl_inc(ji,jj,jk) * zfrac_chn
-                     phyto3d_balinc(ji,jj,jk,jpchd) = chl_inc(ji,jj,jk) * zfrac_chd
+                     phyto3d_balinc(ji,jj,jk,jpchn) = zinc_chltot(ji,jj,jk) * zfrac_chn
+                     phyto3d_balinc(ji,jj,jk,jpchd) = zinc_chltot(ji,jj,jk) * zfrac_chd
                      zrat_phn_chn = tracer_bkg(ji,jj,jk,jpphn) / tracer_bkg(ji,jj,jk,jpchn)
                      zrat_phd_chd = tracer_bkg(ji,jj,jk,jpphd) / tracer_bkg(ji,jj,jk,jpchd)
@@ -1713,5 +1895,5 @@
          END DO
 #elif defined key_hadocc
-         phyto3d_balinc(:,:,:,jp_had_phy) = ( cchl_p_bkg(:,:,:) / (mw_carbon * c2n_p) ) * chl_inc(:,:,:)
+         phyto3d_balinc(:,:,:,jp_had_phy) = ( cchl_p_bkg(:,:,:) / (mw_carbon * c2n_p) ) * zinc_chltot(:,:,:)
 #elif defined key_fabm
          ! Loop over each grid point partioning the increments based on existing ratios
@@ -1723,12 +1905,19 @@
                      & ( tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl3) > 0.0 ) .AND. &
                      & ( tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl4) > 0.0 ) ) THEN
-                     zfrac_chl1 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1) / bkg_chl(ji,jj,jk)
-                     zfrac_chl2 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl2) / bkg_chl(ji,jj,jk)
-                     zfrac_chl3 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl3) / bkg_chl(ji,jj,jk)
-                     zfrac_chl4 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl4) / bkg_chl(ji,jj,jk)
-                     phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1) = chl_inc(ji,jj,jk) * zfrac_chl1
-                     phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl2) = chl_inc(ji,jj,jk) * zfrac_chl2
-                     phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl3) = chl_inc(ji,jj,jk) * zfrac_chl3
-                     phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl4) = chl_inc(ji,jj,jk) * zfrac_chl4
+                     IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN
+                        zfrac_chl1 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1) / zbkg_chltot(ji,jj,jk)
+                        zfrac_chl2 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl2) / zbkg_chltot(ji,jj,jk)
+                        zfrac_chl3 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl3) / zbkg_chltot(ji,jj,jk)
+                        zfrac_chl4 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl4) / zbkg_chltot(ji,jj,jk)
+                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1) = zinc_chltot(ji,jj,jk) * zfrac_chl1
+                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl2) = zinc_chltot(ji,jj,jk) * zfrac_chl2
+                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl3) = zinc_chltot(ji,jj,jk) * zfrac_chl3
+                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl4) = zinc_chltot(ji,jj,jk) * zfrac_chl4
+                     ELSE
+                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1) = zinc_chldia(ji,jj,jk)
+                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl2) = zinc_chlnan(ji,jj,jk)
+                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl3) = zinc_chlpic(ji,jj,jk)
+                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl4) = zinc_chldin(ji,jj,jk)
+                     ENDIF
                      zrat_p1c_chl1 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_p1c) / tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1)
                      zrat_p1n_chl1 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_p1n) / tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1)
@@ -1762,5 +1951,5 @@
          END DO
 #else
-         CALL ctl_stop( 'Attempting to assimilate p(l)chltot, ', &
+         CALL ctl_stop( 'Attempting to assimilate phyto3d, ', &
             &           'but not defined a biogeochemical model' )
 #endif
@@ -2425,8 +2614,8 @@
             it = jp_fabm_n3n
 #endif
-            IF ( ln_phytobal ) THEN
+            IF ( ALLOCATED(phyto2d_balinc) ) THEN
                pno3_bkginc(:,:,:) = pno3_bkginc(:,:,:) - phyto2d_balinc(:,:,:,it)
             ENDIF
-            IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN
+            IF ( ALLOCATED(phyto3d_balinc) ) THEN
                pno3_bkginc(:,:,:) = pno3_bkginc(:,:,:) - phyto3d_balinc(:,:,:,it)
             ENDIF
@@ -2449,8 +2638,8 @@
             it = jp_fabm_n5s
 #endif
-            IF ( ln_phytobal ) THEN
+            IF ( ALLOCATED(phyto2d_balinc) ) THEN
                psi4_bkginc(:,:,:) = psi4_bkginc(:,:,:) - phyto2d_balinc(:,:,:,it)
             ENDIF
-            IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN
+            IF ( ALLOCATED(phyto3d_balinc) ) THEN
                psi4_bkginc(:,:,:) = psi4_bkginc(:,:,:) - phyto3d_balinc(:,:,:,it)
             ENDIF
@@ -2470,8 +2659,8 @@
             it = jp_fabm_n1p
 
-            IF ( ln_phytobal ) THEN
+            IF ( ALLOCATED(phyto2d_balinc) ) THEN
                ppo4_bkginc(:,:,:) = ppo4_bkginc(:,:,:) - phyto2d_balinc(:,:,:,it)
             ENDIF
-            IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN
+            IF ( ALLOCATED(phyto3d_balinc) ) THEN
                ppo4_bkginc(:,:,:) = ppo4_bkginc(:,:,:) - phyto3d_balinc(:,:,:,it)
             ENDIF
@@ -2496,8 +2685,8 @@
             it = jp_fabm_o3c
 #endif
-            IF ( ln_phytobal ) THEN
+            IF ( ALLOCATED(phyto2d_balinc) ) THEN
                pdic_bkginc(:,:,:) = pdic_bkginc(:,:,:) - phyto2d_balinc(:,:,:,it)
             ENDIF
-            IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN
+            IF ( ALLOCATED(phyto3d_balinc) ) THEN
                pdic_bkginc(:,:,:) = pdic_bkginc(:,:,:) - phyto3d_balinc(:,:,:,it)
             ENDIF
@@ -2522,8 +2711,8 @@
             it = jp_fabm_o3ba
 #endif
-            IF ( ln_phytobal ) THEN
+            IF ( ALLOCATED(phyto2d_balinc) ) THEN
                palk_bkginc(:,:,:) = palk_bkginc(:,:,:) - phyto2d_balinc(:,:,:,it)
             ENDIF
-            IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN
+            IF ( ALLOCATED(phyto3d_balinc) ) THEN
                palk_bkginc(:,:,:) = palk_bkginc(:,:,:) - phyto3d_balinc(:,:,:,it)
             ENDIF
@@ -2546,8 +2735,8 @@
             it = jp_fabm_o2o
 #endif
-            IF ( ln_phytobal ) THEN
+            IF ( ALLOCATED(phyto2d_balinc) ) THEN
                po2_bkginc(:,:,:) = po2_bkginc(:,:,:) - phyto2d_balinc(:,:,:,it)
             ENDIF
-            IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN
+            IF ( ALLOCATED(phyto3d_balinc) ) THEN
                po2_bkginc(:,:,:) = po2_bkginc(:,:,:) - phyto3d_balinc(:,:,:,it)
             ENDIF
Index: branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90
===================================================================
--- branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90	(revision 12654)
+++ branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90	(revision 13318)
@@ -174,4 +174,6 @@
          &                 ln_slphydiainc, ln_slphynoninc, ln_spco2inc,    &
          &                 ln_sfco2inc, ln_plchltotinc, ln_pchltotinc,     &
+         &                 ln_plchldiainc, ln_plchlnaninc, ln_plchlpicinc, &
+         &                 ln_plchldininc,                                 & 
          &                 ln_pno3inc, ln_psi4inc, ln_pdicinc, ln_palkinc, &
          &                 ln_pphinc, ln_po2inc, ln_ppo4inc,               &
@@ -259,4 +261,8 @@
          WRITE(numout,*) '      Logical switch for applying plchltot increments          ln_plchltotinc = ', ln_plchltotinc
          WRITE(numout,*) '      Logical switch for applying pchltot increments           ln_pchltotinc = ', ln_pchltotinc
+         WRITE(numout,*) '      Logical switch for applying plchldia increments          ln_plchldiainc = ', ln_plchldiainc
+         WRITE(numout,*) '      Logical switch for applying plchlnan increments          ln_plchlnaninc = ', ln_plchlnaninc
+         WRITE(numout,*) '      Logical switch for applying plchlpic increments          ln_plchlpicinc = ', ln_plchlpicinc
+         WRITE(numout,*) '      Logical switch for applying plchldin increments          ln_plchldininc = ', ln_plchldininc
          WRITE(numout,*) '      Logical switch for applying pno3 increments              ln_pno3inc = ', ln_pno3inc
          WRITE(numout,*) '      Logical switch for applying psi4 increments              ln_psi4inc = ', ln_psi4inc
@@ -310,5 +316,7 @@
          & ln_schltotinc  .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. &
          & ln_slphynoninc .OR. ln_spco2inc    .OR. ln_sfco2inc    .OR. &
-         & ln_plchltotinc .OR. ln_pchltotinc  .OR. ln_pno3inc     .OR. &
+         & ln_plchltotinc .OR. ln_pchltotinc  .OR. ln_plchldiainc .OR. &
+         & ln_plchlnaninc .OR. ln_plchlpicinc .OR. ln_plchldininc .OR. &
+         & ln_pno3inc     .OR.                                         &
          & ln_psi4inc     .OR. ln_pdicinc     .OR. ln_palkinc     .OR. &
          & ln_pphinc      .OR. ln_po2inc      .OR. ln_ppo4inc ) THEN
@@ -1478,5 +1486,6 @@
       
       ! Then chlorophyll profiles
-      IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN
+      IF ( ln_plchltotinc .OR. ln_pchltotinc  .OR. ln_plchldiainc .OR. &
+         & ln_plchlnaninc .OR. ln_plchlpicinc .OR. ln_plchldininc ) THEN
          CALL phyto3d_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau )
       ENDIF
