New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 9322 for branches – NEMO

Changeset 9322 for branches


Ignore:
Timestamp:
2018-02-12T14:37:32+01:00 (6 years ago)
Author:
dford
Message:

Add increments from various BGC profiles.

Location:
branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/CONFIG/SHARED/namelist_ref

    r9296 r9322  
    12871287&nam_asminc   !   assimilation increments                               ('key_asminc') 
    12881288!----------------------------------------------------------------------- 
    1289     ln_bkgwri = .false.    !  Logical switch for writing out background state 
    1290     ln_trainc = .false.    !  Logical switch for applying tracer increments 
    1291     ln_dyninc = .false.    !  Logical switch for applying velocity increments 
    1292     ln_sshinc = .false.    !  Logical switch for applying SSH increments 
    1293     ln_asmdin = .false.    !  Logical switch for Direct Initialization (DI) 
    1294     ln_asmiau = .false.    !  Logical switch for Incremental Analysis Updating (IAU) 
    1295     ln_seaiceinc = .false. !  Logical switch for applying sea ice increments 
     1289    ln_bkgwri      = .false. !  Logical switch for writing out background state 
     1290    ln_balwri      = .false. !  Logical switch for writing out balancing increments 
     1291    ln_trainc      = .false. !  Logical switch for applying tracer increments 
     1292    ln_dyninc      = .false. !  Logical switch for applying velocity increments 
     1293    ln_sshinc      = .false. !  Logical switch for applying SSH increments 
     1294    ln_asmdin      = .false. !  Logical switch for Direct Initialization (DI) 
     1295    ln_asmiau      = .false. !  Logical switch for Incremental Analysis Updating (IAU) 
     1296    ln_seaiceinc   = .false. !  Logical switch for applying sea ice increments 
     1297    ln_phytobal    = .false. !  Logical switch for phytoplankton multivariate balancing 
    12961298    ln_slchltotinc = .false. !  Logical switch for applying slchltot increments 
    1297     ln_slchltotbal = .false. !  Logical switch for applying slchltot multivariate balancing 
    1298     ln_sfco2inc = .false.   !  Logical switch for applying sfCO2 increments 
    1299     ln_spco2inc = .false.   !  Logical switch for applying spCO2 increments 
     1299    ln_slchldiainc = .false. !  Logical switch for applying slchldia increments 
     1300    ln_slchlnoninc = .false. !  Logical switch for applying slchlnon increments 
     1301    ln_schltotinc  = .false. !  Logical switch for applying schltot increments 
     1302    ln_slphytotinc = .false. !  Logical switch for applying slphytot increments 
     1303    ln_slphydiainc = .false. !  Logical switch for applying slphydia increments 
     1304    ln_slphynoninc = .false. !  Logical switch for applying slphynon increments 
     1305    ln_sfco2inc    = .false. !  Logical switch for applying sfCO2 increments 
     1306    ln_spco2inc    = .false. !  Logical switch for applying spCO2 increments 
     1307    ln_plchltotinc = .false. !  Logical switch for applying plchltot increments 
     1308    ln_pchltotinc  = .false. !  Logical switch for applying pchltot increments 
     1309    ln_pno3inc     = .false. !  Logical switch for applying pno3 increments 
     1310    ln_psi4inc     = .false. !  Logical switch for applying psi4 increments 
     1311    ln_pdicinc     = .false. !  Logical switch for applying pdic increments 
     1312    ln_palkinc     = .false. !  Logical switch for applying palk increments 
     1313    ln_pphinc      = .false. !  Logical switch for applying pph increments 
     1314    ln_po2inc      = .false. !  Logical switch for applying po2 increments 
    13001315    ln_temnofreeze = .false. !  Logical to not add increments if temperature would fall below freezing 
    1301     nitbkg    = 0          !  Timestep of background in [0,nitend-nit000-1] 
    1302     nitdin    = 0          !  Timestep of background for DI in [0,nitend-nit000-1] 
    1303     nitiaustr = 1          !  Timestep of start of IAU interval in [0,nitend-nit000-1] 
    1304     nitiaufin = 15         !  Timestep of end of IAU interval in [0,nitend-nit000-1] 
    1305     niaufn    = 0          !  Type of IAU weighting function 
    1306     ln_salfix = .false.    !  Logical switch for ensuring that the sa > salfixmin 
    1307     salfixmin = -9999      !  Minimum salinity after applying the increments 
    1308     nn_divdmp = 0          !  Number of iterations of divergence damping operator 
    1309     mld_choice_bgc = 1     !  MLD criterion to use for biogeochemistry assimilation 
    1310     rn_maxchlinc = -999.0  !  maximum absolute non-log chlorophyll increment from logchl assimilation 
    1311                            !  <= 0 implies no maximum applied (switch turned off) 
    1312                            !   > 0 implies maximum absolute chl increment capped at this value 
     1316    nitbkg         = 0       !  Timestep of background in [0,nitend-nit000-1] 
     1317    nitdin         = 0       !  Timestep of background for DI in [0,nitend-nit000-1] 
     1318    nitiaustr      = 1       !  Timestep of start of IAU interval in [0,nitend-nit000-1] 
     1319    nitiaufin      = 15      !  Timestep of end of IAU interval in [0,nitend-nit000-1] 
     1320    niaufn         = 0       !  Type of IAU weighting function 
     1321    ln_salfix      = .false. !  Logical switch for ensuring that the sa > salfixmin 
     1322    salfixmin      = -9999   !  Minimum salinity after applying the increments 
     1323    nn_divdmp      = 0       !  Number of iterations of divergence damping operator 
     1324    mld_choice_bgc = 1       !  MLD criterion to use for biogeochemistry assimilation 
     1325    rn_maxchlinc   = -999.0  !  maximum absolute non-log chlorophyll increment from ocean colour assimilation 
     1326                             !  <= 0 implies no maximum applied (switch turned off) 
     1327                             !   > 0 implies maximum absolute chl increment capped at this value 
    13131328/ 
    13141329!----------------------------------------------------------------------- 
  • branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asmbgc.F90

    r9297 r9322  
    1919   !! asm_bgc_bal_wri       : write out bgc balancing increments 
    2020   !! asm_bgc_bkg_wri       : write out bgc background 
    21    !! slchltot_asm_inc      : apply the slchltot increment 
    22    !! spco2_asm_inc         : apply the pCO2/fCO2 increment 
     21   !! phyto_asm_inc         : apply the ocean colour increments 
     22   !! pco2_asm_inc          : apply the pCO2/fCO2 increments 
     23   !! ph_asm_inc            : apply the pH increments 
     24   !! bgc3d_asm_inc         : apply the generic 3D BGC increments 
    2325   !!--------------------------------------------------------------------------- 
    2426   USE par_kind, ONLY:      & ! kind parameters 
     
    8587   PRIVATE                    
    8688 
    87    PUBLIC asm_bgc_check_options  ! called by asm_inc_init in asminc.F90 
    88    PUBLIC asm_bgc_init_incs      ! called by asm_inc_init in asminc.F90 
    89    PUBLIC asm_bgc_init_bkg       ! called by asm_inc_init in asminc.F90 
    90    PUBLIC asm_bgc_bal_wri        ! called by nemo_gcm in nemogcm.F90 
    91    PUBLIC asm_bgc_bkg_wri        ! called by asm_bkg_wri in asmbkg.F90 
    92    PUBLIC slchltot_asm_inc       ! called by bgc_asm_inc in asminc.F90 
    93    PUBLIC spco2_asm_inc          ! called by bgc_asm_inc in asminc.F90 
    94  
    95    LOGICAL, PUBLIC :: ln_balwri = .FALSE.        !: No output of balancing incs 
    96    LOGICAL, PUBLIC :: ln_slchltotinc = .FALSE.   !: No slchltot increment 
    97    LOGICAL, PUBLIC :: ln_slchltotbal = .FALSE.   !: No slchltot balancing 
    98    LOGICAL, PUBLIC :: ln_spco2inc = .FALSE.      !: No pCO2 increment 
    99    LOGICAL, PUBLIC :: ln_sfco2inc = .FALSE.      !: No fCO2 increment 
     89   PUBLIC  asm_bgc_check_options  ! called by asm_inc_init in asminc.F90 
     90   PUBLIC  asm_bgc_init_incs      ! called by asm_inc_init in asminc.F90 
     91   PRIVATE asm_bgc_read_incs_2d   ! called by asm_bgc_init_incs 
     92   PRIVATE asm_bgc_read_incs_3d   ! called by asm_bgc_init_incs 
     93   PUBLIC  asm_bgc_init_bkg       ! called by asm_inc_init in asminc.F90 
     94   PUBLIC  asm_bgc_bal_wri        ! called by nemo_gcm in nemogcm.F90 
     95   PUBLIC  asm_bgc_bkg_wri        ! called by asm_bkg_wri in asmbkg.F90 
     96   PUBLIC  phyto_asm_inc          ! called by bgc_asm_inc in asminc.F90 
     97   PUBLIC  pco2_asm_inc           ! called by bgc_asm_inc in asminc.F90 
     98   PUBLIC  ph_asm_inc             ! called by bgc_asm_inc in asminc.F90 
     99   PUBLIC  bgc3d_asm_inc          ! called by bgc_asm_inc in asminc.F90 
     100 
     101   LOGICAL, PUBLIC :: ln_balwri      = .FALSE. !: No output of balancing incs 
     102   LOGICAL, PUBLIC :: ln_phytobal    = .FALSE. !: No phytoplankton balancing 
     103   LOGICAL, PUBLIC :: ln_slchltotinc = .FALSE. !: No surface total      log10(chlorophyll) increment 
     104   LOGICAL, PUBLIC :: ln_slchldiainc = .FALSE. !: No surface diatom     log10(chlorophyll) increment 
     105   LOGICAL, PUBLIC :: ln_slchlnoninc = .FALSE. !: No surface non-diatom log10(chlorophyll) increment 
     106   LOGICAL, PUBLIC :: ln_schltotinc  = .FALSE. !: No surface total      chlorophyll        increment 
     107   LOGICAL, PUBLIC :: ln_slphytotinc = .FALSE. !: No surface total      log10(phyto C)     increment 
     108   LOGICAL, PUBLIC :: ln_slphydiainc = .FALSE. !: No surface diatom     log10(phyto C)     increment 
     109   LOGICAL, PUBLIC :: ln_slphynoninc = .FALSE. !: No surface non-diatom log10(phyto C)     increment 
     110   LOGICAL, PUBLIC :: ln_spco2inc    = .FALSE. !: No surface pCO2                          increment 
     111   LOGICAL, PUBLIC :: ln_sfco2inc    = .FALSE. !: No surface fCO2                          increment 
     112   LOGICAL, PUBLIC :: ln_plchltotinc = .FALSE. !: No profile total      log10(chlorophyll) increment 
     113   LOGICAL, PUBLIC :: ln_pchltotinc  = .FALSE. !: No profile total      chlorophyll        increment 
     114   LOGICAL, PUBLIC :: ln_pno3inc     = .FALSE. !: No profile nitrate                       increment 
     115   LOGICAL, PUBLIC :: ln_psi4inc     = .FALSE. !: No profile silicate                      increment 
     116   LOGICAL, PUBLIC :: ln_pdicinc     = .FALSE. !: No profile dissolved inorganic carbon    increment 
     117   LOGICAL, PUBLIC :: ln_palkinc     = .FALSE. !: No profile alkalinity                    increment 
     118   LOGICAL, PUBLIC :: ln_pphinc      = .FALSE. !: No profile pH                            increment 
     119   LOGICAL, PUBLIC :: ln_po2inc      = .FALSE. !: No profile oxygen                        increment 
    100120 
    101121   INTEGER, PUBLIC :: mld_choice_bgc = 1 !: choice of mld for bgc assimilation 
     
    119139 
    120140   REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: slchltot_bkginc ! slchltot inc 
    121    REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: spco2_bkginc    ! sp(/f)co2 inc 
     141   REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: slchldia_bkginc ! slchldia inc 
     142   REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: slchlnon_bkginc ! slchlnon inc 
     143   REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: schltot_bkginc  ! schltot inc 
     144   REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: slphytot_bkginc ! slphytot inc 
     145   REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: slphydia_bkginc ! slphydia inc 
     146   REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: slphynon_bkginc ! slphynon inc 
     147   REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: sfco2_bkginc    ! sfco2 inc 
     148   REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: spco2_bkginc    ! spco2 inc 
     149   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: plchltot_bkginc ! plchltot inc 
     150   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: pchltot_bkginc  ! pchltot inc 
     151   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: pno3_bkginc     ! pno3 inc 
     152   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: psi4_bkginc     ! psi4 inc 
     153   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: pdic_bkginc     ! pdic inc 
     154   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: palk_bkginc     ! palk inc 
     155   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: pph_bkginc      ! pph inc 
     156   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: po2_bkginc      ! po2 inc 
    122157#if defined key_top 
    123    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: slchltot_balinc ! Balancing incs from slchltot asm 
    124    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: spco2_balinc    ! Balancing incs from sp(/f)co2 asm 
     158   REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: phyto_balinc    ! Balancing incs from ocean colour 
     159   REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: pco2_balinc     ! Balancing incs from spco2/sfco2 
     160   REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: ph_balinc       ! Balancing incs from pph 
    125161#endif 
    126162 
     
    133169#endif 
    134170#if defined key_hadocc 
    135    REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: chl_bkg         ! Background surface chl 
    136    REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: cchl_p_bkg      ! Background surface c:chl 
     171   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: chl_bkg         ! Background chl 
     172   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: cchl_p_bkg      ! Background c:chl 
    137173#endif 
    138174 
     
    152188      !!------------------------------------------------------------------------ 
    153189 
    154       IF ( ( ln_balwri ).AND.( .NOT. ln_slchltotinc ).AND. & 
    155          & ( .NOT. ln_spco2inc ).AND.( .NOT. ln_sfco2inc ) ) THEN 
    156          CALL ctl_warn( ' Balancing increments are only calculated for logchl and pCO2/fCO2', & 
    157             &           ' Not assimilating logchl, pCO2 or fCO2, so ln_balwri will be set to .false.') 
     190#if ! defined key_top || ( ! defined key_hadocc && ( ! defined key_medusa || ! defined key_foam_medusa ) ) 
     191      CALL ctl_stop( ' Attempting to assimilate biogeochemical observations', & 
     192         &           ' but no compatible biogeochemical model is available' ) 
     193#endif 
     194 
     195#if defined key_hadocc 
     196      IF ( ln_slchldiainc .OR. ln_slchlnoninc .OR. ln_slphydiainc .OR. & 
     197         & ln_slphynoninc .OR. ln_psi4inc .OR. ln_pphinc .OR. ln_po2inc ) THEN 
     198         CALL ctl_stop( ' Cannot assimilate PFTs, Si4, pH or O2 into HadOCC' ) 
     199      ENDIF 
     200#endif 
     201 
     202      IF ( ( ln_phytobal ).AND.                                       & 
     203         & ( .NOT. ln_slchltotinc ).AND.( .NOT. ln_slchldiainc ).AND. & 
     204         & ( .NOT. ln_slchlnoninc ).AND.( .NOT. ln_schltotinc  ).AND. & 
     205         & ( .NOT. ln_slphytotinc ).AND.( .NOT. ln_slphydiainc ).AND. & 
     206         & ( .NOT. ln_slphynoninc ) ) THEN 
     207         CALL ctl_warn( ' Cannot calculate phytoplankton balancing increments', & 
     208            &           ' if not assimilating ocean colour,',                   & 
     209            &           ' so ln_phytobal will be set to .false.') 
     210         ln_phytobal = .FALSE. 
     211      ENDIF 
     212 
     213      IF ( ( ln_balwri ).AND.( .NOT. ln_phytobal ).AND. & 
     214         & ( .NOT. ln_spco2inc ).AND.( .NOT. ln_sfco2inc ).AND.( .NOT. ln_pphinc ) ) THEN 
     215         CALL ctl_warn( ' Balancing increments are only calculated for ocean colour', & 
     216            &           ' with ln_phytobal, or for pCO2, fCO2, or pH.',               & 
     217            &           ' Not the case, so ln_balwri will be set to .false.') 
    158218         ln_balwri = .FALSE. 
    159219      ENDIF 
    160220 
    161       IF ( ( ln_slchltotbal ).AND.( .NOT. ln_slchltotinc ) ) THEN 
    162          CALL ctl_warn( ' Cannot calculate logchl balancing increments if not assimilating logchl', & 
    163             &           ' Not assimilating logchl, so ln_slchltotbal will be set to .false.') 
    164          ln_slchltotbal = .FALSE. 
    165       ENDIF 
    166  
    167       IF ( ( ln_spco2inc ).AND.( ln_sfco2inc ) ) THEN 
     221      IF ( ln_spco2inc .AND. ln_sfco2inc ) THEN 
    168222         CALL ctl_stop( ' Can only assimilate pCO2 OR fCO2, not both' ) 
    169223      ENDIF 
    170224 
     225      IF ( ln_slchltotinc .AND. ln_schltotinc ) THEN 
     226         CALL ctl_stop( ' Can only assimilate surface log10(chlorophyll) or chlorophyll, not both' ) 
     227      ENDIF 
     228 
     229      IF ( ln_plchltotinc .AND. ln_pchltotinc ) THEN 
     230         CALL ctl_stop( ' Can only assimilate profile log10(chlorophyll) or chlorophyll, not both' ) 
     231      ENDIF 
     232 
     233      IF ( ( ln_slchltotinc .OR. ln_schltotinc  ) .AND. & 
     234         & ( ln_slchldiainc .OR. ln_slchlnoninc ) ) THEN 
     235         CALL ctl_stop( ' Can only assimilate total or PFT surface chlorophyll, not both' ) 
     236      ENDIF 
     237 
     238      IF ( ln_slphytotinc .AND. ( ln_slphydiainc .OR. ln_slphynoninc ) ) THEN 
     239         CALL ctl_stop( ' Can only assimilate total or PFT surface phytoplankton carbon, not both' ) 
     240      ENDIF 
     241 
    171242   END SUBROUTINE asm_bgc_check_options 
    172243 
     
    192263      !!------------------------------------------------------------------------ 
    193264 
     265      ! Allocate and read increments 
     266       
    194267      IF ( ln_slchltotinc ) THEN 
    195268         ALLOCATE( slchltot_bkginc(jpi,jpj) ) 
    196          slchltot_bkginc(:,:) = 0.0 
     269         CALL asm_bgc_read_incs_2d( knum, 'bckinslchltot', slchltot_bkginc ) 
     270      ENDIF 
     271       
     272      IF ( ln_slchldiainc ) THEN 
     273         ALLOCATE( slchldia_bkginc(jpi,jpj) ) 
     274         CALL asm_bgc_read_incs_2d( knum, 'bckinslchldia', slchldia_bkginc ) 
     275      ENDIF 
     276       
     277      IF ( ln_slchlnoninc ) THEN 
     278         ALLOCATE( slchlnon_bkginc(jpi,jpj) ) 
     279         CALL asm_bgc_read_incs_2d( knum, 'bckinslchlnon', slchlnon_bkginc ) 
     280      ENDIF 
     281       
     282      IF ( ln_schltotinc ) THEN 
     283         ALLOCATE( schltot_bkginc(jpi,jpj) ) 
     284         CALL asm_bgc_read_incs_2d( knum, 'bckinschltot', schltot_bkginc ) 
     285      ENDIF 
     286       
     287      IF ( ln_slphytotinc ) THEN 
     288         ALLOCATE( slphytot_bkginc(jpi,jpj) ) 
     289         CALL asm_bgc_read_incs_2d( knum, 'bckinslphytot', slphytot_bkginc ) 
     290      ENDIF 
     291       
     292      IF ( ln_slphydiainc ) THEN 
     293         ALLOCATE( slphydia_bkginc(jpi,jpj) ) 
     294         CALL asm_bgc_read_incs_2d( knum, 'bckinslphydia', slphydia_bkginc ) 
     295      ENDIF 
     296       
     297      IF ( ln_slphynoninc ) THEN 
     298         ALLOCATE( slphynon_bkginc(jpi,jpj) ) 
     299         CALL asm_bgc_read_incs_2d( knum, 'bckinslphynon', slphynon_bkginc ) 
     300      ENDIF 
     301 
     302      IF ( ln_sfco2inc ) THEN 
     303         ALLOCATE( sfco2_bkginc(jpi,jpj) ) 
     304         CALL asm_bgc_read_incs_2d( knum, 'bckinsfco2', sfco2_bkginc ) 
     305      ENDIF 
     306 
     307      IF ( ln_spco2inc ) THEN 
     308         ALLOCATE( spco2_bkginc(jpi,jpj) ) 
     309         CALL asm_bgc_read_incs_2d( knum, 'bckinspco2', sfco2_bkginc ) 
     310      ENDIF 
     311       
     312      IF ( ln_plchltotinc ) THEN 
     313         ALLOCATE( plchltot_bkginc(jpi,jpj,jpk) ) 
     314         CALL asm_bgc_read_incs_3d( knum, 'bckinplchltot', plchltot_bkginc ) 
     315      ENDIF 
     316       
     317      IF ( ln_pchltotinc ) THEN 
     318         ALLOCATE( pchltot_bkginc(jpi,jpj,jpk) ) 
     319         CALL asm_bgc_read_incs_3d( knum, 'bckinpchltot', pchltot_bkginc ) 
     320      ENDIF 
     321       
     322      IF ( ln_pno3inc ) THEN 
     323         ALLOCATE( pno3_bkginc(jpi,jpj,jpk) ) 
     324         CALL asm_bgc_read_incs_3d( knum, 'bckinpno3', pno3_bkginc ) 
     325      ENDIF 
     326       
     327      IF ( ln_psi4inc ) THEN 
     328         ALLOCATE( psi4_bkginc(jpi,jpj,jpk) ) 
     329         CALL asm_bgc_read_incs_3d( knum, 'bckinpsi4', psi4_bkginc ) 
     330      ENDIF 
     331       
     332      IF ( ln_pdicinc ) THEN 
     333         ALLOCATE( pdic_bkginc(jpi,jpj,jpk) ) 
     334         CALL asm_bgc_read_incs_3d( knum, 'bckinpdic', pdic_bkginc ) 
     335      ENDIF 
     336       
     337      IF ( ln_palkinc ) THEN 
     338         ALLOCATE( palk_bkginc(jpi,jpj,jpk) ) 
     339         CALL asm_bgc_read_incs_3d( knum, 'bckinpalk', palk_bkginc ) 
     340      ENDIF 
     341       
     342      IF ( ln_pphinc ) THEN 
     343         ALLOCATE( pph_bkginc(jpi,jpj,jpk) ) 
     344         CALL asm_bgc_read_incs_3d( knum, 'bckinpph', pph_bkginc ) 
     345      ENDIF 
     346       
     347      IF ( ln_po2inc ) THEN 
     348         ALLOCATE( po2_bkginc(jpi,jpj,jpk) ) 
     349         CALL asm_bgc_read_incs_3d( knum, 'bckinpo2', po2_bkginc ) 
     350      ENDIF 
     351 
     352      ! Allocate balancing increments 
     353       
     354      IF ( ln_slchltotinc .OR. ln_slchldiainc .OR. ln_slchlnoninc .OR. & 
     355         & ln_schltotinc  .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 
     356         & ln_slphynoninc ) THEN 
    197357#if defined key_top 
    198          ALLOCATE( slchltot_balinc(jpi,jpj,jpk,jptra) ) 
    199          slchltot_balinc(:,:,:,:) = 0.0 
    200 #endif 
    201       ENDIF 
     358         ALLOCATE( phyto_balinc(jpi,jpj,jpk,jptra) ) 
     359         phyto_balinc(:,:,:,:) = 0.0 
     360#else 
     361         CALL ctl_stop( ' key_top must be set for balancing increments' ) 
     362#endif 
     363      ENDIF 
     364 
    202365      IF ( ln_spco2inc .OR. ln_sfco2inc ) THEN 
    203          ALLOCATE( spco2_bkginc(jpi,jpj) ) 
    204          spco2_bkginc(:,:) = 0.0 
    205366#if defined key_top 
    206          ALLOCATE( spco2_balinc(jpi,jpj,jpk,jptra) ) 
    207          spco2_balinc(:,:,:,:) = 0.0 
    208 #endif 
    209       ENDIF 
    210  
    211       IF ( ln_slchltotinc ) THEN 
    212          CALL iom_get( knum, jpdom_autoglo, 'bckinslchltot', slchltot_bkginc(:,:), 1 ) 
    213          ! Apply the masks 
    214          slchltot_bkginc(:,:) = slchltot_bkginc(:,:) * tmask(:,:,1) 
    215          ! Set missing increments to 0.0 rather than 1e+20 
    216          ! to allow for differences in masks 
    217          WHERE( ABS( slchltot_bkginc(:,:) ) > 1.0e+10 ) slchltot_bkginc(:,:) = 0.0 
    218       ENDIF 
    219  
    220       IF ( ln_spco2inc .OR. ln_sfco2inc ) THEN 
    221          IF ( ln_spco2inc ) THEN 
    222             CALL iom_get( knum, jpdom_autoglo, 'bckinspco2', spco2_bkginc(:,:), 1 ) 
    223          ELSE IF ( ln_sfco2inc ) THEN 
    224             CALL iom_get( knum, jpdom_autoglo, 'bckinsfco2', spco2_bkginc(:,:), 1 ) 
    225          ENDIF 
    226          ! Apply the masks 
    227          spco2_bkginc(:,:) = spco2_bkginc(:,:) * tmask(:,:,1) 
    228          ! Set missing increments to 0.0 rather than 1e+20 
    229          ! to allow for differences in masks 
    230          WHERE( ABS( spco2_bkginc(:,:) ) > 1.0e+10 ) spco2_bkginc(:,:) = 0.0 
     367         ALLOCATE( pco2_balinc(jpi,jpj,jpk,jptra) ) 
     368         pco2_balinc(:,:,:,:) = 0.0 
     369#else 
     370         CALL ctl_stop( ' key_top must be set for balancing increments' ) 
     371#endif 
     372      ENDIF 
     373 
     374      IF ( ln_pphinc ) THEN 
     375#if defined key_top 
     376         ALLOCATE( ph_balinc(jpi,jpj,jpk,jptra) ) 
     377         ph_balinc(:,:,:,:) = 0.0 
     378#else 
     379         CALL ctl_stop( ' key_top must be set for balancing increments' ) 
     380#endif 
    231381      ENDIF 
    232382 
    233383   END SUBROUTINE asm_bgc_init_incs 
     384 
     385   !!=========================================================================== 
     386   !!=========================================================================== 
     387   !!=========================================================================== 
     388 
     389   SUBROUTINE asm_bgc_read_incs_2d( knum, cd_bgcname, p_incs ) 
     390      !!------------------------------------------------------------------------ 
     391      !!                    ***  ROUTINE asm_bgc_init_incs  *** 
     392      !! 
     393      !! ** Purpose :   read 2d bgc increments 
     394      !! 
     395      !! ** Method  :   read increments from file 
     396      !! 
     397      !! ** Action  :   read increments from file 
     398      !! 
     399      !! References :   asm_inc_init 
     400      !!------------------------------------------------------------------------ 
     401      !! 
     402      INTEGER,                      INTENT(in   ) :: knum       ! i/o unit 
     403      CHARACTER(LEN=13),            INTENT(in   ) :: cd_bgcname ! variable 
     404      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) :: p_incs     ! increments 
     405      !! 
     406      !!------------------------------------------------------------------------ 
     407 
     408      ! Initialise 
     409      p_incs(:,:) = 0.0 
     410       
     411      ! read from file 
     412      CALL iom_get( knum, jpdom_autoglo, TRIM(cd_bgcname), p_incs(:,:), 1 ) 
     413       
     414      ! Apply the masks 
     415      p_incs(:,:) = p_incs(:,:) * tmask(:,:,1) 
     416       
     417      ! Set missing increments to 0.0 rather than 1e+20 
     418      ! to allow for differences in masks 
     419      WHERE( ABS( p_incs(:,:) ) > 1.0e+10 ) p_incs(:,:) = 0.0 
     420 
     421   END SUBROUTINE asm_bgc_read_incs_2d 
     422 
     423   !!=========================================================================== 
     424   !!=========================================================================== 
     425   !!=========================================================================== 
     426 
     427   SUBROUTINE asm_bgc_read_incs_3d( knum, cd_bgcname, p_incs ) 
     428      !!------------------------------------------------------------------------ 
     429      !!                    ***  ROUTINE asm_bgc_init_incs  *** 
     430      !! 
     431      !! ** Purpose :   read 3d bgc increments 
     432      !! 
     433      !! ** Method  :   read increments from file 
     434      !! 
     435      !! ** Action  :   read increments from file 
     436      !! 
     437      !! References :   asm_inc_init 
     438      !!------------------------------------------------------------------------ 
     439      !! 
     440      INTEGER,                          INTENT(in   ) :: knum       ! i/o unit 
     441      CHARACTER(LEN=13),                INTENT(in   ) :: cd_bgcname ! variable 
     442      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(  out) :: p_incs     ! increments 
     443      !! 
     444      !!------------------------------------------------------------------------ 
     445 
     446      ! Initialise 
     447      p_incs(:,:,:) = 0.0 
     448       
     449      ! read from file 
     450      CALL iom_get( knum, jpdom_autoglo, TRIM(cd_bgcname), p_incs(:,:,:), 1 ) 
     451       
     452      ! Apply the masks 
     453      p_incs(:,:,:) = p_incs(:,:,:) * tmask(:,:,:) 
     454       
     455      ! Set missing increments to 0.0 rather than 1e+20 
     456      ! to allow for differences in masks 
     457      WHERE( ABS( p_incs(:,:,:) ) > 1.0e+10 ) p_incs(:,:,:) = 0.0 
     458 
     459   END SUBROUTINE asm_bgc_read_incs_3d 
    234460 
    235461   !!=========================================================================== 
     
    255481      !!------------------------------------------------------------------------ 
    256482 
    257 #if defined key_hadocc || (defined key_medusa && defined key_foam_medusa) 
    258       IF ( ln_slchltotinc ) THEN 
     483#if defined key_top && ( defined key_hadocc || (defined key_medusa && defined key_foam_medusa) ) 
     484      IF ( ln_slchltotinc .OR. ln_slchldiainc .OR. ln_slchlnoninc .OR. & 
     485         & ln_schltotinc  .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 
     486         & ln_slphynoninc .OR. ln_plchltotinc .OR. ln_pchltotinc ) THEN 
    259487 
    260488         ALLOCATE( pgrow_avg_bkg(jpi,jpj)        ) 
     
    270498 
    271499#if defined key_hadocc 
    272          ALLOCATE( chl_bkg(jpi,jpj)    ) 
    273          ALLOCATE( cchl_p_bkg(jpi,jpj) ) 
    274          chl_bkg(:,:)    = 0.0 
    275          cchl_p_bkg(:,:) = 0.0 
     500         ALLOCATE( chl_bkg(jpi,jpj,jpk)    ) 
     501         ALLOCATE( cchl_p_bkg(jpi,jpj,jpk) ) 
     502         chl_bkg(:,:,:)    = 0.0 
     503         cchl_p_bkg(:,:,:) = 0.0 
    276504#endif 
    277505          
    278506         !-------------------------------------------------------------------- 
    279          ! Read background variables for slchltot assimilation 
     507         ! Read background variables for phytoplankton assimilation 
    280508         ! Some only required if performing balancing 
    281509         !-------------------------------------------------------------------- 
     
    286514         CALL iom_get( inum, jpdom_autoglo, 'hadocc_chl',  chl_bkg    ) 
    287515         CALL iom_get( inum, jpdom_autoglo, 'hadocc_cchl', cchl_p_bkg ) 
    288          chl_bkg(:,:)    = chl_bkg(:,:)    * tmask(:,:,1) 
    289          cchl_p_bkg(:,:) = cchl_p_bkg(:,:) * tmask(:,:,1) 
     516         chl_bkg(:,:,:)    = chl_bkg(:,:,:)    * tmask(:,:,:) 
     517         cchl_p_bkg(:,:,:) = cchl_p_bkg(:,:,:) * tmask(:,:,:) 
    290518#elif defined key_medusa 
    291519         CALL iom_get( inum, jpdom_autoglo, 'medusa_chn', tracer_bkg(:,:,:,jpchn) ) 
     
    293521#endif 
    294522          
    295          IF ( ln_slchltotbal ) THEN 
     523         IF ( ln_phytobal ) THEN 
    296524 
    297525            CALL iom_get( inum, jpdom_autoglo, 'pgrow_avg', pgrow_avg_bkg ) 
     
    344572         END DO 
    345573       
    346       ELSE IF ( ln_spco2inc .OR. ln_sfco2inc ) THEN 
     574      ELSE IF ( ln_spco2inc .OR. ln_sfco2inc .OR. ln_pphinc ) THEN 
    347575 
    348576         ALLOCATE( tracer_bkg(jpi,jpj,jpk,jptra) ) 
     
    370598       
    371599      ENDIF 
     600#else 
     601      CALL ctl_stop( ' asm_bgc_init_bkg: key_top and a compatible biogeochemical model required' ) 
    372602#endif 
    373603 
     
    423653         IF ( ln_slchltotinc ) THEN 
    424654#if defined key_medusa 
    425             CALL iom_rstput( kt, kt, inum, 'logchl_balinc_chn', slchltot_balinc(:,:,:,jpchn) ) 
    426             CALL iom_rstput( kt, kt, inum, 'logchl_balinc_chd', slchltot_balinc(:,:,:,jpchd) ) 
    427             IF ( ln_slchltotbal ) THEN 
    428                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_phn', slchltot_balinc(:,:,:,jpphn) ) 
    429                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_phd', slchltot_balinc(:,:,:,jpphd) ) 
    430                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_pds', slchltot_balinc(:,:,:,jppds) ) 
    431                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_zmi', slchltot_balinc(:,:,:,jpzmi) ) 
    432                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_zme', slchltot_balinc(:,:,:,jpzme) ) 
    433                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_din', slchltot_balinc(:,:,:,jpdin) ) 
    434                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_sil', slchltot_balinc(:,:,:,jpsil) ) 
    435                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_fer', slchltot_balinc(:,:,:,jpfer) ) 
    436                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_det', slchltot_balinc(:,:,:,jpdet) ) 
    437                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_dtc', slchltot_balinc(:,:,:,jpdtc) ) 
    438                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_dic', slchltot_balinc(:,:,:,jpdic) ) 
    439                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_alk', slchltot_balinc(:,:,:,jpalk) ) 
    440                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_oxy', slchltot_balinc(:,:,:,jpoxy) ) 
     655            CALL iom_rstput( kt, kt, inum, 'logchl_balinc_chn', phyto_balinc(:,:,:,jpchn) ) 
     656            CALL iom_rstput( kt, kt, inum, 'logchl_balinc_chd', phyto_balinc(:,:,:,jpchd) ) 
     657            IF ( ln_phytobal ) THEN 
     658               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_phn', phyto_balinc(:,:,:,jpphn) ) 
     659               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_phd', phyto_balinc(:,:,:,jpphd) ) 
     660               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_pds', phyto_balinc(:,:,:,jppds) ) 
     661               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_zmi', phyto_balinc(:,:,:,jpzmi) ) 
     662               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_zme', phyto_balinc(:,:,:,jpzme) ) 
     663               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_din', phyto_balinc(:,:,:,jpdin) ) 
     664               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_sil', phyto_balinc(:,:,:,jpsil) ) 
     665               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_fer', phyto_balinc(:,:,:,jpfer) ) 
     666               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_det', phyto_balinc(:,:,:,jpdet) ) 
     667               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_dtc', phyto_balinc(:,:,:,jpdtc) ) 
     668               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_dic', phyto_balinc(:,:,:,jpdic) ) 
     669               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_alk', phyto_balinc(:,:,:,jpalk) ) 
     670               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_oxy', phyto_balinc(:,:,:,jpoxy) ) 
    441671            ENDIF 
    442672#elif defined key_hadocc 
    443             CALL iom_rstput( kt, kt, inum, 'logchl_balinc_phy', slchltot_balinc(:,:,:,jp_had_phy) ) 
    444             IF ( ln_slchltotbal ) THEN 
    445                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_nut', slchltot_balinc(:,:,:,jp_had_nut) ) 
    446                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_zoo', slchltot_balinc(:,:,:,jp_had_zoo) ) 
    447                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_det', slchltot_balinc(:,:,:,jp_had_pdn) ) 
    448                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_dic', slchltot_balinc(:,:,:,jp_had_dic) ) 
    449                CALL iom_rstput( kt, kt, inum, 'logchl_balinc_alk', slchltot_balinc(:,:,:,jp_had_alk) ) 
     673            CALL iom_rstput( kt, kt, inum, 'logchl_balinc_phy', phyto_balinc(:,:,:,jp_had_phy) ) 
     674            IF ( ln_phytobal ) THEN 
     675               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_nut', phyto_balinc(:,:,:,jp_had_nut) ) 
     676               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_zoo', phyto_balinc(:,:,:,jp_had_zoo) ) 
     677               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_det', phyto_balinc(:,:,:,jp_had_pdn) ) 
     678               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_dic', phyto_balinc(:,:,:,jp_had_dic) ) 
     679               CALL iom_rstput( kt, kt, inum, 'logchl_balinc_alk', phyto_balinc(:,:,:,jp_had_alk) ) 
    450680            ENDIF 
    451681#endif 
     
    454684         IF ( ln_spco2inc ) THEN 
    455685#if defined key_medusa 
    456             CALL iom_rstput( kt, kt, inum, 'pco2_balinc_dic', spco2_balinc(:,:,:,jpdic) ) 
    457             CALL iom_rstput( kt, kt, inum, 'pco2_balinc_alk', spco2_balinc(:,:,:,jpalk) ) 
     686            CALL iom_rstput( kt, kt, inum, 'pco2_balinc_dic', pco2_balinc(:,:,:,jpdic) ) 
     687            CALL iom_rstput( kt, kt, inum, 'pco2_balinc_alk', pco2_balinc(:,:,:,jpalk) ) 
    458688#elif defined key_hadocc 
    459             CALL iom_rstput( kt, kt, inum, 'pco2_balinc_dic', spco2_balinc(:,:,:,jp_had_dic) ) 
    460             CALL iom_rstput( kt, kt, inum, 'pco2_balinc_alk', spco2_balinc(:,:,:,jp_had_alk) ) 
     689            CALL iom_rstput( kt, kt, inum, 'pco2_balinc_dic', pco2_balinc(:,:,:,jp_had_dic) ) 
     690            CALL iom_rstput( kt, kt, inum, 'pco2_balinc_alk', pco2_balinc(:,:,:,jp_had_alk) ) 
    461691#endif 
    462692         ELSE IF ( ln_sfco2inc ) THEN 
    463693#if defined key_medusa 
    464             CALL iom_rstput( kt, kt, inum, 'fco2_balinc_dic', spco2_balinc(:,:,:,jpdic) ) 
    465             CALL iom_rstput( kt, kt, inum, 'fco2_balinc_alk', spco2_balinc(:,:,:,jpalk) ) 
     694            CALL iom_rstput( kt, kt, inum, 'fco2_balinc_dic', pco2_balinc(:,:,:,jpdic) ) 
     695            CALL iom_rstput( kt, kt, inum, 'fco2_balinc_alk', pco2_balinc(:,:,:,jpalk) ) 
    466696#elif defined key_hadocc 
    467             CALL iom_rstput( kt, kt, inum, 'fco2_balinc_dic', spco2_balinc(:,:,:,jp_had_dic) ) 
    468             CALL iom_rstput( kt, kt, inum, 'fco2_balinc_alk', spco2_balinc(:,:,:,jp_had_alk) ) 
     697            CALL iom_rstput( kt, kt, inum, 'fco2_balinc_dic', pco2_balinc(:,:,:,jp_had_dic) ) 
     698            CALL iom_rstput( kt, kt, inum, 'fco2_balinc_alk', pco2_balinc(:,:,:,jp_had_alk) ) 
    469699#endif 
    470700         ENDIF 
     
    514744      CALL iom_rstput( kt, nitbkg_r, knum, 'hadocc_dic'  , trn(:,:,:,jp_had_dic) ) 
    515745      CALL iom_rstput( kt, nitbkg_r, knum, 'hadocc_alk'  , trn(:,:,:,jp_had_alk) ) 
    516       CALL iom_rstput( kt, nitbkg_r, knum, 'hadocc_chl'  , HADOCC_CHL(:,:,1)     ) 
    517       CALL iom_rstput( kt, nitbkg_r, knum, 'hadocc_cchl' , cchl_p(:,:,1)         ) 
     746      CALL iom_rstput( kt, nitbkg_r, knum, 'hadocc_chl'  , HADOCC_CHL(:,:,:)     ) 
     747      CALL iom_rstput( kt, nitbkg_r, knum, 'hadocc_cchl' , cchl_p(:,:,:)         ) 
    518748#elif defined key_medusa && defined key_foam_medusa 
    519749      CALL iom_rstput( kt, nitbkg_r, knum, 'pgrow_avg'   , pgrow_avg        ) 
     
    544774   !!=========================================================================== 
    545775 
    546    SUBROUTINE slchltot_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau ) 
    547       !!------------------------------------------------------------------------ 
    548       !!                    ***  ROUTINE logchl_asm_inc  *** 
     776   SUBROUTINE phyto_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau ) 
     777      !!------------------------------------------------------------------------ 
     778      !!                    ***  ROUTINE phyto_asm_inc  *** 
    549779      !!           
    550780      !! ** Purpose : Apply the chlorophyll assimilation increments. 
     
    568798      !!------------------------------------------------------------------------ 
    569799 
     800      IF ( ln_slchldiainc .OR. ln_slchlnoninc .OR. & 
     801         & ln_schltotinc  .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 
     802         & ln_slphynoninc ) THEN 
     803         CALL ctl_stop( ' No PFT assimilation quite yet' ) 
     804      ENDIF 
     805       
    570806      IF ( kt <= nit000 ) THEN 
    571807 
     
    574810#if defined key_medusa && defined key_foam_medusa 
    575811         CALL asm_logchl_bal_medusa( slchltot_bkginc, zincper, mld_choice_bgc, & 
    576             &                        rn_maxchlinc, ln_slchltotbal, ll_asmdin,  & 
     812            &                        rn_maxchlinc, ln_phytobal, ll_asmdin,  & 
    577813            &                        pgrow_avg_bkg, ploss_avg_bkg,           & 
    578814            &                        phyt_avg_bkg, mld_max_bkg,              & 
    579             &                        tracer_bkg, slchltot_balinc ) 
     815            &                        tracer_bkg, phyto_balinc ) 
    580816#elif defined key_hadocc 
    581817         CALL asm_logchl_bal_hadocc( slchltot_bkginc, zincper, mld_choice_bgc, & 
    582             &                        rn_maxchlinc, ln_slchltotbal, ll_asmdin,  & 
     818            &                        rn_maxchlinc, ln_phytobal, ll_asmdin,  & 
    583819            &                        pgrow_avg_bkg, ploss_avg_bkg,           & 
    584820            &                        phyt_avg_bkg, mld_max_bkg,              & 
    585             &                        chl_bkg, cchl_p_bkg,                    & 
    586             &                        tracer_bkg, slchltot_balinc ) 
     821            &                        chl_bkg(:,:,1), cchl_p_bkg(:,:,1),      & 
     822            &                        tracer_bkg, phyto_balinc ) 
    587823#else 
    588824         CALL ctl_stop( 'Attempting to assimilate slchltot, ', & 
     
    617853            DO jk = 1, jpkm1 
    618854               trn(:,:,jk,jp_msa0:jp_msa1) = trn(:,:,jk,jp_msa0:jp_msa1) + & 
    619                   &                          slchltot_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt 
     855                  &                          phyto_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt 
    620856               trb(:,:,jk,jp_msa0:jp_msa1) = trb(:,:,jk,jp_msa0:jp_msa1) + & 
    621                   &                          slchltot_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt 
     857                  &                          phyto_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt 
    622858            END DO 
    623859#elif defined key_hadocc 
    624860            DO jk = 1, jpkm1 
    625861               trn(:,:,jk,jp_had0:jp_had1) = trn(:,:,jk,jp_had0:jp_had1) + & 
    626                   &                          slchltot_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt 
     862                  &                          phyto_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt 
    627863               trb(:,:,jk,jp_had0:jp_had1) = trb(:,:,jk,jp_had0:jp_had1) + & 
    628                   &                          slchltot_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt 
     864                  &                          phyto_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt 
    629865            END DO 
    630866#endif 
     
    650886               &           ' Background state is taken from model rather than background file' ) 
    651887            trn(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) + & 
    652                &                         slchltot_balinc(:,:,:,jp_msa0:jp_msa1) 
     888               &                         phyto_balinc(:,:,:,jp_msa0:jp_msa1) 
    653889            trb(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) 
    654890#elif defined key_hadocc 
     
    658894               &           ' Background state is taken from model rather than background file' ) 
    659895            trn(:,:,:,jp_had0:jp_had1) = trn(:,:,:,jp_had0:jp_had1) + & 
    660                &                         slchltot_balinc(:,:,:,jp_had0:jp_had1) 
     896               &                         phyto_balinc(:,:,:,jp_had0:jp_had1) 
    661897            trb(:,:,:,jp_had0:jp_had1) = trn(:,:,:,jp_had0:jp_had1) 
    662898#endif 
     
    668904      ENDIF 
    669905      ! 
    670    END SUBROUTINE slchltot_asm_inc 
    671  
    672    !!=========================================================================== 
    673    !!=========================================================================== 
    674    !!=========================================================================== 
    675  
    676    SUBROUTINE spco2_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau, & 
    677       &                      ll_trainc, pt_bkginc, ps_bkginc ) 
     906   END SUBROUTINE phyto_asm_inc 
     907 
     908   !!=========================================================================== 
     909   !!=========================================================================== 
     910   !!=========================================================================== 
     911 
     912   SUBROUTINE pco2_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau, & 
     913      &                     ll_trainc, pt_bkginc, ps_bkginc ) 
    678914      !!------------------------------------------------------------------------ 
    679915      !!                    ***  ROUTINE pco2_asm_inc  *** 
     
    733969            DO jj = 1, jpj 
    734970               DO ji = 1, jpi 
    735                   CALL f2pCO2( spco2_bkginc(ji,jj), tsn(ji,jj,1,1), patm, phyd, 1, pco2_bkginc_temp(ji,jj) ) 
     971                  CALL f2pCO2( sfco2_bkginc(ji,jj), tsn(ji,jj,1,1), patm, phyd, 1, pco2_bkginc_temp(ji,jj) ) 
    736972               END DO 
    737973            END DO 
     
    739975            ! If assimilating fCO2, then convert to pCO2 using temperature 
    740976            ! See flux_gas.F90 within HadOCC for details of calculation 
    741             pco2_bkginc_temp(:,:) = spco2_bkginc(:,:) /                                                             & 
     977            pco2_bkginc_temp(:,:) = sfco2_bkginc(:,:) /                                                             & 
    742978               &                    EXP((zcoef_fco2_1                                                            + & 
    743979               &                         zcoef_fco2_2 * (tsn(:,:,1,1)+rt0)                                       - & 
     
    762998#if defined key_medusa 
    763999         ! Account for logchl balancing if required 
    764          IF ( ln_slchltotinc .AND. ln_slchltotbal ) THEN 
    765             dic_bkg_temp(:,:) = tracer_bkg(:,:,1,jpdic) + slchltot_balinc(:,:,1,jpdic) 
    766             alk_bkg_temp(:,:) = tracer_bkg(:,:,1,jpalk) + slchltot_balinc(:,:,1,jpalk) 
     1000         IF ( ln_slchltotinc .AND. ln_phytobal ) THEN 
     1001            dic_bkg_temp(:,:) = tracer_bkg(:,:,1,jpdic) + phyto_balinc(:,:,1,jpdic) 
     1002            alk_bkg_temp(:,:) = tracer_bkg(:,:,1,jpalk) + phyto_balinc(:,:,1,jpalk) 
    7671003         ELSE 
    7681004            dic_bkg_temp(:,:) = tracer_bkg(:,:,1,jpdic) 
     
    7721008         CALL asm_pco2_bal( pco2_bkginc_temp(:,:), dic_bkg_temp(:,:), alk_bkg_temp(:,:), & 
    7731009            &               tem_bkg_temp(:,:), sal_bkg_temp(:,:),                        & 
    774             &               spco2_balinc(:,:,1,jpdic), spco2_balinc(:,:,1,jpalk) ) 
     1010            &               pco2_balinc(:,:,1,jpdic), pco2_balinc(:,:,1,jpalk) ) 
    7751011 
    7761012#elif defined key_hadocc 
    7771013         ! Account for slchltot balancing if required 
    778          IF ( ln_slchltotinc .AND. ln_slchltotbal ) THEN 
    779             dic_bkg_temp(:,:) = tracer_bkg(:,:,1,jp_had_dic) + slchltot_balinc(:,:,1,jp_had_dic) 
    780             alk_bkg_temp(:,:) = tracer_bkg(:,:,1,jp_had_alk) + slchltot_balinc(:,:,1,jp_had_alk) 
     1014         IF ( ln_slchltotinc .AND. ln_phytobal ) THEN 
     1015            dic_bkg_temp(:,:) = tracer_bkg(:,:,1,jp_had_dic) + phyto_balinc(:,:,1,jp_had_dic) 
     1016            alk_bkg_temp(:,:) = tracer_bkg(:,:,1,jp_had_alk) + phyto_balinc(:,:,1,jp_had_alk) 
    7811017         ELSE 
    7821018            dic_bkg_temp(:,:) = tracer_bkg(:,:,1,jp_had_dic) 
     
    7861022         CALL asm_pco2_bal( pco2_bkginc_temp(:,:), dic_bkg_temp(:,:), alk_bkg_temp(:,:), & 
    7871023            &               tem_bkg_temp(:,:), sal_bkg_temp(:,:),                        & 
    788             &               spco2_balinc(:,:,1,jp_had_dic), spco2_balinc(:,:,1,jp_had_alk) ) 
     1024            &               pco2_balinc(:,:,1,jp_had_dic), pco2_balinc(:,:,1,jp_had_alk) ) 
    7891025 
    7901026#else 
     
    8441080#if defined key_top 
    8451081               DO jk = 2, jkmax 
    846                   spco2_balinc(ji,jj,jk,:) = spco2_balinc(ji,jj,1,:) 
     1082                  pco2_balinc(ji,jj,jk,:) = pco2_balinc(ji,jj,1,:) 
    8471083               END DO 
    8481084#endif 
     
    8831119            DO jk = 1, jpkm1 
    8841120               trn(:,:,jk,jp_msa0:jp_msa1) = trn(:,:,jk,jp_msa0:jp_msa1) + & 
    885                   &                          spco2_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt 
     1121                  &                          pco2_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt 
    8861122               trb(:,:,jk,jp_msa0:jp_msa1) = trb(:,:,jk,jp_msa0:jp_msa1) + & 
    887                   &                          spco2_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt 
     1123                  &                          pco2_balinc(:,:,jk,jp_msa0:jp_msa1) * zincwgt 
    8881124            END DO 
    8891125#elif defined key_hadocc 
    8901126            DO jk = 1, jpkm1 
    8911127               trn(:,:,jk,jp_had0:jp_had1) = trn(:,:,jk,jp_had0:jp_had1) + & 
    892                   &                          spco2_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt 
     1128                  &                          pco2_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt 
    8931129               trb(:,:,jk,jp_had0:jp_had1) = trb(:,:,jk,jp_had0:jp_had1) + & 
    894                   &                          spco2_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt 
     1130                  &                          pco2_balinc(:,:,jk,jp_had0:jp_had1) * zincwgt 
    8951131            END DO 
    8961132#endif 
     
    9171153               &           ' Background state is taken from model rather than background file' ) 
    9181154            trn(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) + & 
    919                &                         spco2_balinc(:,:,:,jp_msa0:jp_msa1) 
     1155               &                         pco2_balinc(:,:,:,jp_msa0:jp_msa1) 
    9201156            trb(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) 
    9211157#elif defined key_hadocc 
     
    9251161               &           ' Background state is taken from model rather than background file' ) 
    9261162            trn(:,:,:,jp_had0:jp_had1) = trn(:,:,:,jp_had0:jp_had1) + & 
    927                &                         spco2_balinc(:,:,:,jp_had0:jp_had1) 
     1163               &                         pco2_balinc(:,:,:,jp_had0:jp_had1) 
    9281164            trb(:,:,:,jp_had0:jp_had1) = trn(:,:,:,jp_had0:jp_had1) 
    9291165#endif 
     
    9351171      ENDIF 
    9361172      ! 
    937    END SUBROUTINE spco2_asm_inc 
     1173   END SUBROUTINE pco2_asm_inc 
     1174 
     1175   !!=========================================================================== 
     1176   !!=========================================================================== 
     1177   !!=========================================================================== 
     1178 
     1179   SUBROUTINE ph_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau, & 
     1180      &                   ll_trainc, pt_bkginc, ps_bkginc ) 
     1181      !!------------------------------------------------------------------------ 
     1182      !!                    ***  ROUTINE ph_asm_inc  *** 
     1183      !!           
     1184      !! ** Purpose : Apply the pH assimilation increments. 
     1185      !! 
     1186      !! ** Method  : Calculate increments to state variables using carbon 
     1187      !!              balancing. 
     1188      !!              Direct initialization or Incremental Analysis Updating. 
     1189      !! 
     1190      !! ** Action  :  
     1191      !!------------------------------------------------------------------------ 
     1192      INTEGER, INTENT(IN)                   :: kt           ! Current time step 
     1193      LOGICAL, INTENT(IN)                   :: ll_asmdin    ! Flag for direct initialisation 
     1194      LOGICAL, INTENT(IN)                   :: ll_asmiau    ! Flag for incremental analysis update 
     1195      INTEGER, INTENT(IN)                   :: kcycper      ! Dimension of pwgtiau 
     1196      REAL(wp), DIMENSION(kcycper), INTENT(IN) :: pwgtiau   ! IAU weights 
     1197      LOGICAL, INTENT(IN)                   :: ll_trainc    ! Flag for T/S increments 
     1198      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(IN) :: pt_bkginc ! T increments 
     1199      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(IN) :: ps_bkginc ! S increments 
     1200      !!------------------------------------------------------------------------ 
     1201       
     1202      CALL ctl_stop( ' pH balancing not yet implemented' ) 
     1203       
     1204      ! 
     1205   END SUBROUTINE ph_asm_inc 
     1206 
     1207   !!=========================================================================== 
     1208   !!=========================================================================== 
     1209   !!=========================================================================== 
     1210 
     1211   SUBROUTINE bgc3d_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau ) 
     1212      !!---------------------------------------------------------------------- 
     1213      !!                    ***  ROUTINE dyn_asm_inc  *** 
     1214      !!           
     1215      !! ** Purpose : Apply generic 3D biogeochemistry assimilation increments. 
     1216      !! 
     1217      !! ** Method  : Direct initialization or Incremental Analysis Updating. 
     1218      !! 
     1219      !! ** Action  :  
     1220      !!---------------------------------------------------------------------- 
     1221      INTEGER,  INTENT(IN) :: kt        ! Current time step 
     1222      LOGICAL,  INTENT(IN) :: ll_asmdin ! Flag for direct initialisation 
     1223      LOGICAL,  INTENT(IN) :: ll_asmiau ! Flag for incremental analysis update 
     1224      INTEGER,  INTENT(IN) :: kcycper   ! Dimension of pwgtiau 
     1225      REAL(wp), DIMENSION(kcycper), INTENT(IN) :: pwgtiau   ! IAU weights 
     1226      ! 
     1227      INTEGER  :: jk              ! Loop counter 
     1228      INTEGER  :: it              ! Index 
     1229      REAL(wp) :: zincwgt         ! IAU weight for current time step 
     1230      REAL(wp) :: zincper         ! IAU interval in seconds 
     1231      !!---------------------------------------------------------------------- 
     1232 
     1233      IF ( ll_asmiau ) THEN 
     1234 
     1235         !-------------------------------------------------------------------- 
     1236         ! Incremental Analysis Updating 
     1237         !-------------------------------------------------------------------- 
     1238 
     1239         IF ( ( kt >= nitiaustr_r ).AND.( kt <= nitiaufin_r ) ) THEN 
     1240 
     1241            it = kt - nit000 + 1 
     1242            !zincwgt = pwgtiau(it) / rdt   ! IAU weight for the current time step 
     1243            zincwgt = pwgtiau(it)   ! IAU weight for the current time step 
     1244            ! Check which we should use both here and for all others 
     1245 
     1246            IF(lwp) THEN 
     1247               WRITE(numout,*)  
     1248               WRITE(numout,*) 'bgc3d_asm_inc : 3D BGC IAU at time step = ', & 
     1249                  &  kt,' with IAU weight = ', pwgtiau(it) 
     1250               WRITE(numout,*) '~~~~~~~~~~~~' 
     1251            ENDIF 
     1252 
     1253            ! Update the 3D BGC variables 
     1254            ! Add directly to trn and trb, rather than to tra, because tra gets 
     1255            ! reset to zero at the start of trc_stp, called after this routine 
     1256            ! Don't apply increments if they'll take concentrations negative 
     1257 
     1258            IF ( ln_pno3inc ) THEN 
     1259#if defined key_hadocc 
     1260               WHERE( pno3_bkginc(:,:,:) > 0.0_wp .OR. & 
     1261                  &   trn(:,:,:,jp_had_nut) + pno3_bkginc(:,:,:) * zincwgt > 0.0_wp ) 
     1262                  trn(:,:,:,jp_had_nut) = trn(:,:,:,jp_had_nut) + pno3_bkginc(:,:,:) * zincwgt 
     1263                  trb(:,:,:,jp_had_nut) = trb(:,:,:,jp_had_nut) + pno3_bkginc(:,:,:) * zincwgt 
     1264               END WHERE 
     1265#elif defined key_medusa && defined key_foam_medusa 
     1266               WHERE( pno3_bkginc(:,:,:) > 0.0_wp .OR. & 
     1267                  &   trn(:,:,:,jpdin) + pno3_bkginc(:,:,:) * zincwgt > 0.0_wp ) 
     1268                  trn(:,:,:,jpdin) = trn(:,:,:,jpdin) + pno3_bkginc(:,:,:) * zincwgt 
     1269                  trb(:,:,:,jpdin) = trb(:,:,:,jpdin) + pno3_bkginc(:,:,:) * zincwgt 
     1270               END WHERE 
     1271#else 
     1272               CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 
     1273#endif 
     1274            ENDIF 
     1275 
     1276            IF ( ln_psi4inc ) THEN 
     1277#if defined key_medusa && defined key_foam_medusa 
     1278               WHERE( psi4_bkginc(:,:,:) > 0.0_wp .OR. & 
     1279                  &   trn(:,:,:,jpsil) + psi4_bkginc(:,:,:) * zincwgt > 0.0_wp ) 
     1280                  trn(:,:,:,jpsil) = trn(:,:,:,jpsil) + psi4_bkginc(:,:,:) * zincwgt 
     1281                  trb(:,:,:,jpsil) = trb(:,:,:,jpsil) + psi4_bkginc(:,:,:) * zincwgt 
     1282               END WHERE 
     1283#else 
     1284               CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 
     1285#endif 
     1286            ENDIF 
     1287 
     1288            IF ( ln_pdicinc ) THEN 
     1289#if defined key_hadocc 
     1290               WHERE( pdic_bkginc(:,:,:) > 0.0_wp .OR. & 
     1291                  &   trn(:,:,:,jp_had_dic) + pdic_bkginc(:,:,:) * zincwgt > 0.0_wp ) 
     1292                  trn(:,:,:,jp_had_dic) = trn(:,:,:,jp_had_dic) + pdic_bkginc(:,:,:) * zincwgt 
     1293                  trb(:,:,:,jp_had_dic) = trb(:,:,:,jp_had_dic) + pdic_bkginc(:,:,:) * zincwgt 
     1294               END WHERE 
     1295#elif defined key_medusa && defined key_foam_medusa 
     1296               WHERE( pdic_bkginc(:,:,:) > 0.0_wp .OR. & 
     1297                  &   trn(:,:,:,jpdic) + pdic_bkginc(:,:,:) * zincwgt > 0.0_wp ) 
     1298                  trn(:,:,:,jpdic) = trn(:,:,:,jpdic) + pdic_bkginc(:,:,:) * zincwgt 
     1299                  trb(:,:,:,jpdic) = trb(:,:,:,jpdic) + pdic_bkginc(:,:,:) * zincwgt 
     1300               END WHERE 
     1301#else 
     1302               CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 
     1303#endif 
     1304            ENDIF 
     1305 
     1306            IF ( ln_palkinc ) THEN 
     1307#if defined key_hadocc 
     1308               WHERE( palk_bkginc(:,:,:) > 0.0_wp .OR. & 
     1309                  &   trn(:,:,:,jp_had_alk) + palk_bkginc(:,:,:) * zincwgt > 0.0_wp ) 
     1310                  trn(:,:,:,jp_had_alk) = trn(:,:,:,jp_had_alk) + palk_bkginc(:,:,:) * zincwgt 
     1311                  trb(:,:,:,jp_had_alk) = trb(:,:,:,jp_had_alk) + palk_bkginc(:,:,:) * zincwgt 
     1312               END WHERE 
     1313#elif defined key_medusa && defined key_foam_medusa 
     1314               WHERE( palk_bkginc(:,:,:) > 0.0_wp .OR. & 
     1315                  &   trn(:,:,:,jpalk) + palk_bkginc(:,:,:) * zincwgt > 0.0_wp ) 
     1316                  trn(:,:,:,jpalk) = trn(:,:,:,jpalk) + palk_bkginc(:,:,:) * zincwgt 
     1317                  trb(:,:,:,jpalk) = trb(:,:,:,jpalk) + palk_bkginc(:,:,:) * zincwgt 
     1318               END WHERE 
     1319#else 
     1320               CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 
     1321#endif 
     1322            ENDIF 
     1323 
     1324            IF ( ln_po2inc ) THEN 
     1325#if defined key_medusa && defined key_foam_medusa 
     1326               WHERE( po2_bkginc(:,:,:) > 0.0_wp .OR. & 
     1327                  &   trn(:,:,:,jpoxy) + po2_bkginc(:,:,:) * zincwgt > 0.0_wp ) 
     1328                  trn(:,:,:,jpoxy) = trn(:,:,:,jpoxy) + po2_bkginc(:,:,:) * zincwgt 
     1329                  trb(:,:,:,jpoxy) = trb(:,:,:,jpoxy) + po2_bkginc(:,:,:) * zincwgt 
     1330               END WHERE 
     1331#else 
     1332               CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 
     1333#endif 
     1334            ENDIF 
     1335            
     1336            IF ( kt == nitiaufin_r ) THEN 
     1337               IF ( ln_pno3inc ) DEALLOCATE( pno3_bkginc ) 
     1338               IF ( ln_psi4inc ) DEALLOCATE( psi4_bkginc ) 
     1339               IF ( ln_pdicinc ) DEALLOCATE( pdic_bkginc ) 
     1340               IF ( ln_palkinc ) DEALLOCATE( palk_bkginc ) 
     1341               IF ( ln_po2inc  ) DEALLOCATE( po2_bkginc  ) 
     1342            ENDIF 
     1343 
     1344         ENDIF 
     1345 
     1346      ELSEIF ( ll_asmdin ) THEN  
     1347 
     1348         !-------------------------------------------------------------------- 
     1349         ! Direct Initialization 
     1350         !-------------------------------------------------------------------- 
     1351          
     1352         IF ( kt == nitdin_r ) THEN 
     1353 
     1354            neuler = 0                    ! Force Euler forward step 
     1355 
     1356            ! Initialize the now fields with the background + increment 
     1357            ! Background currently is what the model is initialised with 
     1358#if defined key_hadocc 
     1359            CALL ctl_warn( ' Doing direct initialisation of HadOCC with 3D BGC assimilation', & 
     1360               &           ' Background state is taken from model rather than background file' ) 
     1361#elif defined key_medusa && defined key_foam_medusa 
     1362            CALL ctl_warn( ' Doing direct initialisation of MEDUSA with 3D BGC assimilation', & 
     1363               &           ' Background state is taken from model rather than background file' ) 
     1364#endif 
     1365 
     1366            trn(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) + & 
     1367               &                         pco2_balinc(:,:,:,jp_msa0:jp_msa1) 
     1368            trb(:,:,:,jp_msa0:jp_msa1) = trn(:,:,:,jp_msa0:jp_msa1) 
     1369 
     1370            IF ( ln_pno3inc ) THEN 
     1371#if defined key_hadocc 
     1372               WHERE( pno3_bkginc(:,:,:) > 0.0_wp .OR. & 
     1373                  &   trn(:,:,:,jp_had_nut) + pno3_bkginc(:,:,:) > 0.0_wp ) 
     1374                  trn(:,:,:,jp_had_nut) = trn(:,:,:,jp_had_nut) + pno3_bkginc(:,:,:) 
     1375                  trb(:,:,:,jp_had_nut) = trn(:,:,:,jp_had_nut) 
     1376               END WHERE 
     1377#elif defined key_medusa && defined key_foam_medusa 
     1378               WHERE( pno3_bkginc(:,:,:) > 0.0_wp .OR. & 
     1379                  &   trn(:,:,:,jpdin) + pno3_bkginc(:,:,:) > 0.0_wp ) 
     1380                  trn(:,:,:,jpdin) = trn(:,:,:,jpdin) + pno3_bkginc(:,:,:) 
     1381                  trb(:,:,:,jpdin) = trn(:,:,:,jpdin) 
     1382               END WHERE 
     1383#else 
     1384               CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 
     1385#endif 
     1386            ENDIF 
     1387 
     1388            IF ( ln_psi4inc ) THEN 
     1389#if defined key_medusa && defined key_foam_medusa 
     1390               WHERE( psi4_bkginc(:,:,:) > 0.0_wp .OR. & 
     1391                  &   trn(:,:,:,jpsil) + psi4_bkginc(:,:,:) > 0.0_wp ) 
     1392                  trn(:,:,:,jpsil) = trn(:,:,:,jpsil) + psi4_bkginc(:,:,:) 
     1393                  trb(:,:,:,jpsil) = trn(:,:,:,jpsil) 
     1394               END WHERE 
     1395#else 
     1396               CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 
     1397#endif 
     1398            ENDIF 
     1399 
     1400            IF ( ln_pdicinc ) THEN 
     1401#if defined key_hadocc 
     1402               WHERE( pdic_bkginc(:,:,:) > 0.0_wp .OR. & 
     1403                  &   trn(:,:,:,jp_had_dic) + pdic_bkginc(:,:,:) > 0.0_wp ) 
     1404                  trn(:,:,:,jp_had_dic) = trn(:,:,:,jp_had_dic) + pdic_bkginc(:,:,:) 
     1405                  trb(:,:,:,jp_had_dic) = trn(:,:,:,jp_had_dic) 
     1406               END WHERE 
     1407#elif defined key_medusa && defined key_foam_medusa 
     1408               WHERE( pdic_bkginc(:,:,:) > 0.0_wp .OR. & 
     1409                  &   trn(:,:,:,jpdic) + pdic_bkginc(:,:,:) > 0.0_wp ) 
     1410                  trn(:,:,:,jpdic) = trn(:,:,:,jpdic) + pdic_bkginc(:,:,:) 
     1411                  trb(:,:,:,jpdic) = trn(:,:,:,jpdic) 
     1412               END WHERE 
     1413#else 
     1414               CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 
     1415#endif 
     1416            ENDIF 
     1417 
     1418            IF ( ln_palkinc ) THEN 
     1419#if defined key_hadocc 
     1420               WHERE( palk_bkginc(:,:,:) > 0.0_wp .OR. & 
     1421                  &   trn(:,:,:,jp_had_alk) + palk_bkginc(:,:,:) > 0.0_wp ) 
     1422                  trn(:,:,:,jp_had_alk) = trn(:,:,:,jp_had_alk) + palk_bkginc(:,:,:) 
     1423                  trb(:,:,:,jp_had_alk) = trn(:,:,:,jp_had_alk) 
     1424               END WHERE 
     1425#elif defined key_medusa && defined key_foam_medusa 
     1426               WHERE( palk_bkginc(:,:,:) > 0.0_wp .OR. & 
     1427                  &   trn(:,:,:,jpalk) + palk_bkginc(:,:,:) > 0.0_wp ) 
     1428                  trn(:,:,:,jpalk) = trn(:,:,:,jpalk) + palk_bkginc(:,:,:) 
     1429                  trb(:,:,:,jpalk) = trn(:,:,:,jpalk) 
     1430               END WHERE 
     1431#else 
     1432               CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 
     1433#endif 
     1434            ENDIF 
     1435 
     1436            IF ( ln_po2inc ) THEN 
     1437#if defined key_medusa && defined key_foam_medusa 
     1438               WHERE( po2_bkginc(:,:,:) > 0.0_wp .OR. & 
     1439                  &   trn(:,:,:,jpoxy) + po2_bkginc(:,:,:) > 0.0_wp ) 
     1440                  trn(:,:,:,jpoxy) = trn(:,:,:,jpoxy) + po2_bkginc(:,:,:) 
     1441                  trb(:,:,:,jpoxy) = trn(:,:,:,jpoxy) 
     1442               END WHERE 
     1443#else 
     1444               CALL ctl_stop ( ' bgc3d_asm_inc: no compatible BGC model defined' ) 
     1445#endif 
     1446            ENDIF 
     1447  
     1448            IF ( ln_pno3inc ) DEALLOCATE( pno3_bkginc ) 
     1449            IF ( ln_psi4inc ) DEALLOCATE( psi4_bkginc ) 
     1450            IF ( ln_pdicinc ) DEALLOCATE( pdic_bkginc ) 
     1451            IF ( ln_palkinc ) DEALLOCATE( palk_bkginc ) 
     1452            IF ( ln_po2inc  ) DEALLOCATE( po2_bkginc  ) 
     1453         ENDIF 
     1454         ! 
     1455      ENDIF 
     1456      ! 
     1457   END SUBROUTINE bgc3d_asm_inc 
    9381458 
    9391459   !!=========================================================================== 
  • branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90

    r9296 r9322  
    138138      NAMELIST/nam_asminc/ ln_bkgwri, ln_balwri,                           & 
    139139         &                 ln_trainc, ln_dyninc, ln_sshinc,                & 
    140          &                 ln_slchltotinc, ln_slchltotbal,                 & 
    141          &                 ln_spco2inc, ln_sfco2inc,                       & 
     140         &                 ln_phytobal, ln_slchltotinc, ln_slchldiainc,    & 
     141         &                 ln_slchlnoninc, ln_schltotinc, ln_slphytotinc,  & 
     142         &                 ln_slphydiainc, ln_slphynoninc, ln_spco2inc,    & 
     143         &                 ln_sfco2inc, ln_plchltotinc, ln_pchltotinc,     & 
     144         &                 ln_pno3inc, ln_psi4inc, ln_pdicinc, ln_palkinc, & 
     145         &                 ln_pphinc, ln_po2inc,                           & 
    142146         &                 ln_asmdin, ln_asmiau,                           & 
    143147         &                 nitbkg, nitdin, nitiaustr, nitiaufin, niaufn,   & 
     
    167171         WRITE(numout,*) 'asm_inc_init : Assimilation increment initialization :' 
    168172         WRITE(numout,*) '~~~~~~~~~~~~' 
    169          WRITE(numout,*) '   Namelist namasm : set assimilation increment parameters' 
     173         WRITE(numout,*) '   Namelist nam_asminc : set assimilation increment parameters' 
    170174         WRITE(numout,*) '      Logical switch for writing out background state          ln_bkgwri = ', ln_bkgwri 
    171175         WRITE(numout,*) '      Logical switch for writing out balancing increments      ln_balwri = ', ln_balwri 
     
    175179         WRITE(numout,*) '      Logical switch for Direct Initialization (DI)            ln_asmdin = ', ln_asmdin 
    176180         WRITE(numout,*) '      Logical switch for applying sea ice increments        ln_seaiceinc = ', ln_seaiceinc 
     181         WRITE(numout,*) '      Logical switch for phytoplankton balancing             ln_phytobal = ', ln_phytobal 
    177182         WRITE(numout,*) '      Logical switch for applying slchltot increments     ln_slchltotinc = ', ln_slchltotinc 
    178          WRITE(numout,*) '      Logical switch for slchltot multivariate balancing  ln_slchltotbal = ', ln_slchltotbal 
    179          WRITE(numout,*) '      Logical switch for applying pCO2 increments            ln_spco2inc = ', ln_spco2inc 
    180          WRITE(numout,*) '      Logical switch for applying fCO2 increments            ln_sfco2inc = ', ln_sfco2inc 
     183         WRITE(numout,*) '      Logical switch for applying slchldia increments     ln_slchldiainc = ', ln_slchldiainc 
     184         WRITE(numout,*) '      Logical switch for applying slchlnon increments     ln_slchlnoninc = ', ln_slchlnoninc 
     185         WRITE(numout,*) '      Logical switch for applying schltot increments       ln_schltotinc = ', ln_schltotinc 
     186         WRITE(numout,*) '      Logical switch for applying slphytot increments     ln_slphytotinc = ', ln_slphytotinc 
     187         WRITE(numout,*) '      Logical switch for applying slphydia increments     ln_slphydiainc = ', ln_slphydiainc 
     188         WRITE(numout,*) '      Logical switch for applying slphynon increments     ln_slphynoninc = ', ln_slphynoninc 
     189         WRITE(numout,*) '      Logical switch for applying spco2 increments           ln_spco2inc = ', ln_spco2inc 
     190         WRITE(numout,*) '      Logical switch for applying sfco2 increments           ln_sfco2inc = ', ln_sfco2inc 
     191         WRITE(numout,*) '      Logical switch for applying plchltot increments     ln_plchltotinc = ', ln_plchltotinc 
     192         WRITE(numout,*) '      Logical switch for applying pchltot increments       ln_pchltotinc = ', ln_pchltotinc 
     193         WRITE(numout,*) '      Logical switch for applying pno3 increments             ln_pno3inc = ', ln_pno3inc 
     194         WRITE(numout,*) '      Logical switch for applying psi4 increments             ln_psi4inc = ', ln_psi4inc 
     195         WRITE(numout,*) '      Logical switch for applying pdic increments             ln_pdicinc = ', ln_pdicinc 
     196         WRITE(numout,*) '      Logical switch for applying palk increments             ln_palkinc = ', ln_palkinc 
     197         WRITE(numout,*) '      Logical switch for applying pph increments               ln_pphinc = ', ln_pphinc 
     198         WRITE(numout,*) '      Logical switch for applying po2 increments               ln_po2inc = ', ln_po2inc 
    181199         WRITE(numout,*) '      Logical switch for Incremental Analysis Updating (IAU)   ln_asmiau = ', ln_asmiau 
    182200         WRITE(numout,*) '      Timestep of background in [0,nitend-nit000-1]            nitbkg    = ', nitbkg 
     
    226244      ENDIF 
    227245       
    228       IF ( ln_slchltotinc .OR. ln_spco2inc .OR. ln_sfco2inc ) THEN 
     246      IF ( ln_slchltotinc .OR. ln_slchldiainc .OR. ln_slchlnoninc .OR. & 
     247         & ln_schltotinc  .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 
     248         & ln_slphynoninc .OR. ln_spco2inc    .OR. ln_sfco2inc    .OR. & 
     249         & ln_plchltotinc .OR. ln_pchltotinc  .OR. ln_pno3inc     .OR. & 
     250         & ln_psi4inc     .OR. ln_pdicinc     .OR. ln_palkinc     .OR. & 
     251         & ln_pphinc      .OR. ln_po2inc ) THEN 
    229252         lk_bgcinc = .TRUE. 
    230253      ENDIF 
     
    12081231      icycper = SIZE( wgtiau ) 
    12091232       
    1210       IF( ln_slchltotinc ) THEN 
    1211          CALL slchltot_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau ) 
     1233      ! Ocean colour variables first (chlorophyll profiles?) 
     1234      IF ( ln_slchltotinc .OR. ln_slchldiainc .OR. ln_slchlnoninc .OR. & 
     1235         & ln_schltotinc  .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 
     1236         & ln_slphynoninc ) THEN 
     1237         CALL phyto_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau ) 
    12121238      ENDIF 
    12131239       
     1240      IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
     1241         CALL ctl_stop( 'Not worked out what to do about profile chl yet' ) 
     1242      ENDIF 
     1243       
     1244      ! Surface pCO2/fCO2 next 
    12141245      IF( ln_sfco2inc .OR. ln_spco2inc ) THEN 
    1215          CALL spco2_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau, & 
    1216             &                ln_trainc, t_bkginc, s_bkginc ) 
     1246         CALL pco2_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau, & 
     1247            &               ln_trainc, t_bkginc, s_bkginc ) 
     1248      ENDIF 
     1249       
     1250      ! Profile pH next 
     1251      IF( ln_pphinc ) THEN 
     1252         CALL ph_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau, & 
     1253            &             ln_trainc, t_bkginc, s_bkginc ) 
     1254      ENDIF 
     1255       
     1256      ! Remaining bgc profile variables 
     1257      IF ( ln_pno3inc .OR. ln_psi4inc .OR. ln_pdicinc .OR. & 
     1258         & ln_palkinc .OR. ln_po2inc ) THEN 
     1259         CALL bgc3d_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau ) 
    12171260      ENDIF 
    12181261 
Note: See TracChangeset for help on using the changeset viewer.