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 6983 – NEMO

Changeset 6983


Ignore:
Timestamp:
2016-10-04T16:26:51+02:00 (8 years ago)
Author:
dford
Message:

An initial version of code to apply chlorophyll increments to FABM-ERSEM.

Location:
branches/UKMO/dev_r5518_v3.4_asm_nemovar_community_bgc_ersem/NEMOGCM/NEMO/OPA_SRC
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_v3.4_asm_nemovar_community_bgc_ersem/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90

    r6661 r6983  
    2222   !!   ssh_asm_inc    : Apply the SSH increment 
    2323   !!   seaice_asm_inc : Apply the seaice increment 
     24   !!   logchl_asm_inc : Apply the logchl increment 
    2425   !!---------------------------------------------------------------------- 
    2526   USE wrk_nemo         ! Memory Allocation 
     
    5253   USE bdy_oce, ONLY: bdytmask   
    5354#endif   
     55#if defined key_fabm 
     56   USE asmlogchlbal_ersem, ONLY: & 
     57      & asm_logchl_bal_ersem 
     58   USE trc, ONLY: & 
     59      & trn,      & 
     60      & trb 
     61   USE par_fabm 
     62#elif defined key_medusa && defined key_foam_medusa 
     63   USE asmlogchlbal_medusa, ONLY: & 
     64      & asm_logchl_bal_medusa 
     65   USE trc, ONLY: & 
     66      & trn,      & 
     67      & trb 
     68   USE par_medusa 
     69#elif defined key_hadocc 
     70   USE asmlogchlbal_hadocc, ONLY: & 
     71      & asm_logchl_bal_hadocc 
     72   USE trc, ONLY: & 
     73      & trn,      & 
     74      & trb 
     75   USE par_hadocc 
     76#endif 
    5477 
    5578   IMPLICIT NONE 
     
    6285   PUBLIC   ssh_asm_inc    !: Apply the SSH increment 
    6386   PUBLIC   seaice_asm_inc !: Apply the seaice increment 
     87   PUBLIC   logchl_asm_inc !: Apply the seaice increment 
    6488 
    6589#if defined key_asminc 
     
    6993#endif 
    7094   LOGICAL, PUBLIC :: ln_bkgwri = .FALSE.      !: No output of the background state fields 
     95   LOGICAL, PUBLIC :: ln_balwri = .FALSE.      !: No output of the assimilation balancing increments 
    7196   LOGICAL, PUBLIC :: ln_asmiau = .FALSE.      !: No applying forcing with an assimilation increment 
    7297   LOGICAL, PUBLIC :: ln_asmdin = .FALSE.      !: No direct initialization 
     
    7499   LOGICAL, PUBLIC :: ln_dyninc = .FALSE.      !: No dynamics (u and v) assimilation increments 
    75100   LOGICAL, PUBLIC :: ln_sshinc = .FALSE.      !: No sea surface height assimilation increment 
    76    LOGICAL, PUBLIC :: ln_seaiceinc             !: No sea ice concentration increment 
     101   LOGICAL, PUBLIC :: ln_seaiceinc = .FALSE.   !: No sea ice concentration increment 
     102   LOGICAL, PUBLIC :: ln_logchltotinc = .FALSE. !: No total log10(chlorophyll) increment 
     103   LOGICAL, PUBLIC :: ln_logchlpftinc = .FALSE. !: No PFT   log10(chlorophyll) increment 
    77104   LOGICAL, PUBLIC :: ln_salfix = .FALSE.      !: Apply minimum salinity check 
    78105   LOGICAL, PUBLIC :: ln_temnofreeze = .FALSE. !: Don't allow the temperature to drop below freezing 
     
    100127   REAL(wp), DIMENSION(:,:), ALLOCATABLE ::   seaice_bkginc         ! Increment to the background sea ice conc 
    101128 
     129   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_bkginc !: Increment to background logchl 
     130#if defined key_fabm 
     131   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_chl1  !: Increment to ERSEM diatom chl   from logchl 
     132   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_chl2  !: Increment to ERSEM nanophy chl  from logchl 
     133   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_chl3  !: Increment to ERSEM picophy chl  from logchl 
     134   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_chl4  !: Increment to ERSEM microphy chl from logchl 
     135   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p1c   !: Increment to ERSEM diatom c     from logchl 
     136   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p1n   !: Increment to ERSEM diatom n     from logchl 
     137   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p1p   !: Increment to ERSEM diatom p     from logchl 
     138   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p1s   !: Increment to ERSEM diatom s     from logchl 
     139   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p2c   !: Increment to ERSEM nanophy c    from logchl 
     140   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p2n   !: Increment to ERSEM nanophy n    from logchl 
     141   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p2p   !: Increment to ERSEM nanophy p    from logchl 
     142   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p3c   !: Increment to ERSEM picophy c    from logchl 
     143   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p3n   !: Increment to ERSEM picophy n    from logchl 
     144   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p3p   !: Increment to ERSEM picophy p    from logchl 
     145   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p4c   !: Increment to ERSEM microphy c   from logchl 
     146   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p4n   !: Increment to ERSEM microphy n   from logchl 
     147   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_p4p   !: Increment to ERSEM microphy p   from logchl 
     148   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z4c   !: Increment to ERSEM mesozoo c    from logchl 
     149   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z5c   !: Increment to ERSEM microzoo c   from logchl 
     150   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z5n   !: Increment to ERSEM microzoo n   from logchl 
     151   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z5p   !: Increment to ERSEM microzoo p   from logchl 
     152   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z6c   !: Increment to ERSEM het flag c   from logchl 
     153   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z6n   !: Increment to ERSEM het flag n   from logchl 
     154   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_z6p   !: Increment to ERSEM het flag p   from logchl 
     155   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_n1p   !: Increment to ERSEM phosphate    from logchl 
     156   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_n3n   !: Increment to ERSEM nitrate      from logchl 
     157   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_n4n   !: Increment to ERSEM ammonium     from logchl 
     158   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_ersem_n5s   !: Increment to ERSEM silicate     from logchl 
     159#elif defined key_medusa && defined key_foam_medusa 
     160   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_chn  !: Increment to MEDUSA nondiatom chl from logchl 
     161   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_chd  !: Increment to MEDUSA diatom chl    from logchl 
     162   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_phn  !: Increment to MEDUSA nondiatom n   from logchl 
     163   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_phd  !: Increment to MEDUSA diatom n      from logchl 
     164   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_pds  !: Increment to MEDUSA diatom s      from logchl 
     165   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_zmi  !: Increment to MEDUSA microzoop n   from logchl 
     166   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_zme  !: Increment to MEDUSA mesozoop n    from logchl 
     167   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_din  !: Increment to MEDUSA nitrate       from logchl 
     168   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_sil  !: Increment to MEDUSA silicate      from logchl 
     169   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_fer  !: Increment to MEDUSA iron          from logchl 
     170   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_det  !: Increment to MEDUSA detritus n    from logchl 
     171   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_dtc  !: Increment to MEDUSA detritus c    from logchl 
     172   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_dic  !: Increment to MEDUSA dic           from logchl 
     173   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_alk  !: Increment to MEDUSA alkalinity    from logchl 
     174   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_medusa_oxy  !: Increment to MEDUSA oxygen        from logchl 
     175#elif defined key_hadocc 
     176   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_hadocc_nut  !: Increment to HadOCC nutrient      from logchl 
     177   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_hadocc_phy  !: Increment to HadOCC phytoplankton from logchl 
     178   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_hadocc_zoo  !: Increment to HadOCC zooplankton   from logchl 
     179   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_hadocc_det  !: Increment to HadOCC detritus      from logchl 
     180   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_hadocc_dic  !: Increment to HadOCC DIC           from logchl 
     181   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: logchl_balinc_hadocc_alk  !: Increment to HadOCC alkalinity    from logchl 
     182#endif 
     183 
    102184   INTEGER :: mld_choice        = 4   !: choice of mld criteria to use for physics assimilation 
    103185                                      !: 1) hmld      - Turbocline/mixing depth                           [W points] 
     
    106188                                      !: 4) hmld_tref - Temperature criterion (0.2 K change from surface) [T points] 
    107189 
     190   INTEGER :: mld_choice_bgc    = 5   !: choice of mld criteria to use for physics assimilation 
     191                                      !: 1) hmld      - Turbocline/mixing depth                           [W points] 
     192                                      !: 2) hmlp      - Density criterion (0.01 kg/m^3 change from 10m)   [W points] 
     193                                      !: 3) hmld_kara - Kara MLD                                          [Interpolated] 
     194                                      !: 4) hmld_tref - Temperature criterion (0.2 K change from surface) [T points] 
     195                                      !: 5) hmlpt     - Density criterion (0.01 kg/m^3 change from 10m)   [T points] 
     196 
     197   INTEGER :: nn_asmpfts        = 0   !: number of logchl PFTs assimilated 
    108198 
    109199   !! * Substitutions 
     
    157247      LOGICAL :: lk_surft      ! Logical: T => Increments file contains surft variable  
    158248                               !               so only apply surft increments. 
     249      ! 
     250      CHARACTER(LEN=2) :: cl_pftstr 
    159251      !! 
    160       NAMELIST/nam_asminc/ ln_bkgwri,                                      & 
     252      NAMELIST/nam_asminc/ ln_bkgwri, ln_balwri,                           & 
    161253         &                 ln_trainc, ln_dyninc, ln_sshinc,                & 
     254         &                 ln_logchltotinc, ln_logchlpftinc,               & 
    162255         &                 ln_asmdin, ln_asmiau,                           & 
    163256         &                 nitbkg, nitdin, nitiaustr, nitiaufin, niaufn,   & 
    164          &                 ln_salfix, salfixmin, nn_divdmp, mld_choice 
     257         &                 ln_salfix, salfixmin, nn_divdmp, mld_choice,    & 
     258         &                 mld_choice_bgc 
    165259      !!---------------------------------------------------------------------- 
    166260 
     
    171265      ! Set default values 
    172266      ln_bkgwri = .FALSE. 
     267      ln_balwri = .FALSE. 
    173268      ln_trainc = .FALSE. 
    174269      ln_dyninc = .FALSE. 
    175270      ln_sshinc = .FALSE. 
    176271      ln_seaiceinc = .FALSE. 
     272      ln_logchltotinc = .FALSE. 
     273      ln_logchlpftinc = .FALSE. 
    177274      ln_asmdin = .FALSE. 
    178275      ln_asmiau = .TRUE. 
     
    185282      nitiaufin = 150 
    186283      niaufn    = 0 
     284#if defined key_fabm 
     285      nn_asmpfts = 4 
     286#elif defined key_medusa && defined key_foam_medusa 
     287      nn_asmpfts = 2 
     288#elif defined key_hadocc 
     289      nn_asmpfts = 1 
     290#else 
     291      nn_asmpfts = 0 
     292#endif 
    187293 
    188294      REWIND( numnam_ref )              ! Namelist nam_asminc in reference namelist : Assimilation increment 
     
    194300902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_asminc in configuration namelist', lwp ) 
    195301      IF(lwm) WRITE ( numond, nam_asminc ) 
     302 
     303      IF ( ln_logchltotinc ) THEN 
     304         nn_asmpfts = 1 
     305      ELSE IF ( .NOT.( ln_logchlpftinc ) ) THEN 
     306         nn_asmpfts = 0 
     307      ENDIF 
    196308 
    197309      ! Control print 
     
    202314         WRITE(numout,*) '   Namelist namasm : set assimilation increment parameters' 
    203315         WRITE(numout,*) '      Logical switch for writing out background state          ln_bkgwri = ', ln_bkgwri 
     316         WRITE(numout,*) '      Logical switch for writing out balancing increments      ln_balwri = ', ln_balwri 
    204317         WRITE(numout,*) '      Logical switch for applying tracer increments            ln_trainc = ', ln_trainc 
    205318         WRITE(numout,*) '      Logical switch for applying velocity increments          ln_dyninc = ', ln_dyninc 
     
    207320         WRITE(numout,*) '      Logical switch for Direct Initialization (DI)            ln_asmdin = ', ln_asmdin 
    208321         WRITE(numout,*) '      Logical switch for applying sea ice increments        ln_seaiceinc = ', ln_seaiceinc 
     322         WRITE(numout,*) '      Logical switch for applying total logchl incs      ln_logchltotinc = ', ln_logchltotinc 
     323         WRITE(numout,*) '      Logical switch for applying PFT   logchl incs      ln_logchlpftinc = ', ln_logchlpftinc 
     324         WRITE(numout,*) '      Number of logchl PFTs assimilated                       nn_asmpfts = ', nn_asmpfts 
    209325         WRITE(numout,*) '      Logical switch for Incremental Analysis Updating (IAU)   ln_asmiau = ', ln_asmiau 
    210326         WRITE(numout,*) '      Timestep of background in [0,nitend-nit000-1]            nitbkg    = ', nitbkg 
     
    216332         WRITE(numout,*) '      Minimum salinity after applying the increments           salfixmin = ', salfixmin 
    217333         WRITE(numout,*) '      Choice of MLD for physics assimilation                  mld_choice = ', mld_choice 
     334         WRITE(numout,*) '      Choice of MLD for BGC assimilation                  mld_choice_bgc = ', mld_choice_bgc 
    218335      ENDIF 
    219336 
     
    263380 
    264381      IF (      ( ( .NOT. ln_asmdin ).AND.( .NOT. ln_asmiau ) ) & 
    265            .AND.( ( ln_trainc ).OR.( ln_dyninc ).OR.( ln_sshinc ) .OR. ( ln_seaiceinc) )) & 
    266          & CALL ctl_stop( ' One or more of ln_trainc, ln_dyninc, ln_sshinc and ln_seaiceinc is set to .true.', & 
     382         & .AND.( ( ln_trainc ).OR.( ln_dyninc ).OR.( ln_sshinc ).OR.( ln_seaiceinc ).OR. & 
     383         &        ( ln_logchltotinc ).OR.( ln_logchlpftinc ) )) & 
     384         & CALL ctl_stop( ' One or more of ln_trainc, ln_dyninc, ln_sshinc, ln_seaiceinc,', & 
     385         &                ' ln_logchltotinc, and ln_logchlpftinc is set to .true.', & 
    267386         &                ' but ln_asmdin and ln_asmiau are both set to .false. :', & 
    268387         &                ' Inconsistent options') 
     
    273392 
    274393      IF ( ( .NOT. ln_trainc ).AND.( .NOT. ln_dyninc ).AND.( .NOT. ln_sshinc ).AND.( .NOT. ln_seaiceinc ) & 
    275          &                     )  & 
    276          & CALL ctl_warn( ' ln_trainc, ln_dyninc, ln_sshinc and ln_seaiceinc are set to .false. :', & 
     394         & .AND.( .NOT. ln_logchltotinc ).AND.( .NOT. ln_logchlpftinc ) )  & 
     395         & CALL ctl_warn( ' ln_trainc, ln_dyninc, ln_sshinc, ln_seaiceinc,', & 
     396         &                ' ln_logchltotinc, and ln_logchlpftinc are set to .false. :', & 
    277397         &                ' The assimilation increments are not applied') 
    278398 
     
    294414         &                ' Background time step for Direct Initialization is outside', & 
    295415         &                ' the cycle interval') 
     416 
     417      IF ( ( ln_logchltotinc ).AND.( ln_logchlpftinc ) ) THEN 
     418         CALL ctl_stop( ' ln_logchltotinc and ln_logchlpftinc both set:', & 
     419            &           ' These options are not compatible') 
     420      ENDIF 
     421 
     422      IF ( ( ln_balwri ).AND.( .NOT. ( ( ln_logchltotinc ).OR.( ln_logchlpftinc ) ) ) ) THEN 
     423         CALL ctl_warn( ' Balancing increments are only calculated for logchl', & 
     424            &           ' Not assimilating logchl, so ln_balwri will be set to .false.') 
     425         ln_balwri = .FALSE. 
     426      ENDIF 
    296427 
    297428      IF ( nstop > 0 ) RETURN       ! if there are any errors then go no further 
     
    396527      ssh_iau(:,:)    = 0.0 
    397528#endif 
    398       IF ( ( ln_trainc ).OR.( ln_dyninc ).OR.( ln_sshinc ).OR.( ln_seaiceinc ) ) THEN 
     529      IF ( ( ln_logchltotinc ).OR.( ln_logchlpftinc ) ) THEN 
     530         IF ( ln_logchltotinc ) THEN 
     531            ALLOCATE( logchl_bkginc(jpi,jpj,1)) 
     532         ELSE IF ( ln_logchlpftinc ) THEN 
     533            ALLOCATE( logchl_bkginc(jpi,jpj,nn_asmpfts)) 
     534         ENDIF 
     535         logchl_bkginc(:,:,:) = 0.0 
     536#if defined key_fabm 
     537         ALLOCATE( logchl_balinc_ersem_chl1(jpi,jpj,jpk) ) 
     538         ALLOCATE( logchl_balinc_ersem_chl2(jpi,jpj,jpk) ) 
     539         ALLOCATE( logchl_balinc_ersem_chl3(jpi,jpj,jpk) ) 
     540         ALLOCATE( logchl_balinc_ersem_chl4(jpi,jpj,jpk) ) 
     541         ALLOCATE( logchl_balinc_ersem_p1c(jpi,jpj,jpk)  ) 
     542         ALLOCATE( logchl_balinc_ersem_p1n(jpi,jpj,jpk)  ) 
     543         ALLOCATE( logchl_balinc_ersem_p1p(jpi,jpj,jpk)  ) 
     544         ALLOCATE( logchl_balinc_ersem_p1s(jpi,jpj,jpk)  ) 
     545         ALLOCATE( logchl_balinc_ersem_p2c(jpi,jpj,jpk)  ) 
     546         ALLOCATE( logchl_balinc_ersem_p2n(jpi,jpj,jpk)  ) 
     547         ALLOCATE( logchl_balinc_ersem_p2p(jpi,jpj,jpk)  ) 
     548         ALLOCATE( logchl_balinc_ersem_p3c(jpi,jpj,jpk)  ) 
     549         ALLOCATE( logchl_balinc_ersem_p3n(jpi,jpj,jpk)  ) 
     550         ALLOCATE( logchl_balinc_ersem_p3p(jpi,jpj,jpk)  ) 
     551         ALLOCATE( logchl_balinc_ersem_p4c(jpi,jpj,jpk)  ) 
     552         ALLOCATE( logchl_balinc_ersem_p4n(jpi,jpj,jpk)  ) 
     553         ALLOCATE( logchl_balinc_ersem_p4p(jpi,jpj,jpk)  ) 
     554         ALLOCATE( logchl_balinc_ersem_z4c(jpi,jpj,jpk)  ) 
     555         ALLOCATE( logchl_balinc_ersem_z5c(jpi,jpj,jpk)  ) 
     556         ALLOCATE( logchl_balinc_ersem_z5n(jpi,jpj,jpk)  ) 
     557         ALLOCATE( logchl_balinc_ersem_z5p(jpi,jpj,jpk)  ) 
     558         ALLOCATE( logchl_balinc_ersem_z6c(jpi,jpj,jpk)  ) 
     559         ALLOCATE( logchl_balinc_ersem_z6n(jpi,jpj,jpk)  ) 
     560         ALLOCATE( logchl_balinc_ersem_z6p(jpi,jpj,jpk)  ) 
     561         ALLOCATE( logchl_balinc_ersem_n1p(jpi,jpj,jpk)  ) 
     562         ALLOCATE( logchl_balinc_ersem_n3n(jpi,jpj,jpk)  ) 
     563         ALLOCATE( logchl_balinc_ersem_n4n(jpi,jpj,jpk)  ) 
     564         ALLOCATE( logchl_balinc_ersem_n5s(jpi,jpj,jpk)  ) 
     565         logchl_balinc_ersem_chl1(:,:,:) = 0.0 
     566         logchl_balinc_ersem_chl2(:,:,:) = 0.0 
     567         logchl_balinc_ersem_chl3(:,:,:) = 0.0 
     568         logchl_balinc_ersem_chl4(:,:,:) = 0.0 
     569         logchl_balinc_ersem_p1c(:,:,:)  = 0.0 
     570         logchl_balinc_ersem_p1n(:,:,:)  = 0.0 
     571         logchl_balinc_ersem_p1p(:,:,:)  = 0.0 
     572         logchl_balinc_ersem_p1s(:,:,:)  = 0.0 
     573         logchl_balinc_ersem_p2c(:,:,:)  = 0.0 
     574         logchl_balinc_ersem_p2n(:,:,:)  = 0.0 
     575         logchl_balinc_ersem_p2p(:,:,:)  = 0.0 
     576         logchl_balinc_ersem_p3c(:,:,:)  = 0.0 
     577         logchl_balinc_ersem_p3n(:,:,:)  = 0.0 
     578         logchl_balinc_ersem_p3p(:,:,:)  = 0.0 
     579         logchl_balinc_ersem_p4c(:,:,:)  = 0.0 
     580         logchl_balinc_ersem_p4n(:,:,:)  = 0.0 
     581         logchl_balinc_ersem_p4p(:,:,:)  = 0.0 
     582         logchl_balinc_ersem_z4c(:,:,:)  = 0.0 
     583         logchl_balinc_ersem_z5c(:,:,:)  = 0.0 
     584         logchl_balinc_ersem_z5n(:,:,:)  = 0.0 
     585         logchl_balinc_ersem_z5p(:,:,:)  = 0.0 
     586         logchl_balinc_ersem_z6c(:,:,:)  = 0.0 
     587         logchl_balinc_ersem_z6n(:,:,:)  = 0.0 
     588         logchl_balinc_ersem_z6p(:,:,:)  = 0.0 
     589         logchl_balinc_ersem_n1p(:,:,:)  = 0.0 
     590         logchl_balinc_ersem_n3n(:,:,:)  = 0.0 
     591         logchl_balinc_ersem_n4n(:,:,:)  = 0.0 
     592         logchl_balinc_ersem_n5s(:,:,:)  = 0.0 
     593#elif defined key_medusa && defined key_foam_medusa 
     594         ALLOCATE( logchl_balinc_medusa_chn(jpi,jpj,jpk) ) 
     595         ALLOCATE( logchl_balinc_medusa_chd(jpi,jpj,jpk) ) 
     596         ALLOCATE( logchl_balinc_medusa_phn(jpi,jpj,jpk) ) 
     597         ALLOCATE( logchl_balinc_medusa_phd(jpi,jpj,jpk) ) 
     598         ALLOCATE( logchl_balinc_medusa_pds(jpi,jpj,jpk) ) 
     599         ALLOCATE( logchl_balinc_medusa_zmi(jpi,jpj,jpk) ) 
     600         ALLOCATE( logchl_balinc_medusa_zme(jpi,jpj,jpk) ) 
     601         ALLOCATE( logchl_balinc_medusa_din(jpi,jpj,jpk) ) 
     602         ALLOCATE( logchl_balinc_medusa_sil(jpi,jpj,jpk) ) 
     603         ALLOCATE( logchl_balinc_medusa_fer(jpi,jpj,jpk) ) 
     604         ALLOCATE( logchl_balinc_medusa_det(jpi,jpj,jpk) ) 
     605         ALLOCATE( logchl_balinc_medusa_dtc(jpi,jpj,jpk) ) 
     606         ALLOCATE( logchl_balinc_medusa_dic(jpi,jpj,jpk) ) 
     607         ALLOCATE( logchl_balinc_medusa_alk(jpi,jpj,jpk) ) 
     608         ALLOCATE( logchl_balinc_medusa_oxy(jpi,jpj,jpk) ) 
     609         logchl_balinc_medusa_chn(:,:,:) = 0.0 
     610         logchl_balinc_medusa_chd(:,:,:) = 0.0 
     611         logchl_balinc_medusa_phn(:,:,:) = 0.0 
     612         logchl_balinc_medusa_phd(:,:,:) = 0.0 
     613         logchl_balinc_medusa_pds(:,:,:) = 0.0 
     614         logchl_balinc_medusa_zmi(:,:,:) = 0.0 
     615         logchl_balinc_medusa_zme(:,:,:) = 0.0 
     616         logchl_balinc_medusa_din(:,:,:) = 0.0 
     617         logchl_balinc_medusa_sil(:,:,:) = 0.0 
     618         logchl_balinc_medusa_fer(:,:,:) = 0.0 
     619         logchl_balinc_medusa_det(:,:,:) = 0.0 
     620         logchl_balinc_medusa_dtc(:,:,:) = 0.0 
     621         logchl_balinc_medusa_dic(:,:,:) = 0.0 
     622         logchl_balinc_medusa_alk(:,:,:) = 0.0 
     623         logchl_balinc_medusa_oxy(:,:,:) = 0.0 
     624#elif defined key_hadocc 
     625         ALLOCATE( logchl_balinc_hadocc_nut(jpi,jpj,jpk) ) 
     626         ALLOCATE( logchl_balinc_hadocc_phy(jpi,jpj,jpk) ) 
     627         ALLOCATE( logchl_balinc_hadocc_zoo(jpi,jpj,jpk) ) 
     628         ALLOCATE( logchl_balinc_hadocc_det(jpi,jpj,jpk) ) 
     629         ALLOCATE( logchl_balinc_hadocc_dic(jpi,jpj,jpk) ) 
     630         ALLOCATE( logchl_balinc_hadocc_alk(jpi,jpj,jpk) ) 
     631         logchl_balinc_hadocc_nut(:,:,:) = 0.0 
     632         logchl_balinc_hadocc_phy(:,:,:) = 0.0 
     633         logchl_balinc_hadocc_zoo(:,:,:) = 0.0 
     634         logchl_balinc_hadocc_det(:,:,:) = 0.0 
     635         logchl_balinc_hadocc_dic(:,:,:) = 0.0 
     636         logchl_balinc_hadocc_alk(:,:,:) = 0.0 
     637#endif 
     638      ENDIF 
     639      IF ( ( ln_trainc ).OR.( ln_dyninc ).OR.( ln_sshinc ).OR.( ln_seaiceinc ) & 
     640         &  .OR.( ln_logchltotinc ).OR.( ln_logchlpftinc ) ) THEN 
    399641 
    400642         !-------------------------------------------------------------------- 
     
    527769            ! to allow for differences in masks 
    528770            WHERE( ABS( seaice_bkginc(:,:) ) > 1.0e+10 ) seaice_bkginc(:,:) = 0.0 
     771         ENDIF 
     772 
     773         IF ( ln_logchltotinc ) THEN 
     774            CALL iom_get( inum, jpdom_autoglo, 'bckinlogchl', logchl_bkginc(:,:,1), 1 ) 
     775            ! Apply the masks 
     776            logchl_bkginc(:,:,1) = logchl_bkginc(:,:,1) * tmask(:,:,1) 
     777            ! Set missing increments to 0.0 rather than 1e+20 
     778            ! to allow for differences in masks 
     779            WHERE( ABS( logchl_bkginc(:,:,1) ) > 1.0e+10 ) logchl_bkginc(:,:,1) = 0.0 
     780         ENDIF 
     781 
     782         IF ( ln_logchlpftinc ) THEN 
     783            DO jt = 1, nn_asmpfts 
     784               WRITE(cl_pftstr,'(I2.2)') jt 
     785               CALL iom_get( inum, jpdom_autoglo, 'bckinlogchl'//cl_pftstr, logchl_bkginc(:,:,jt), 1 ) 
     786               ! Apply the masks 
     787               logchl_bkginc(:,:,jt) = logchl_bkginc(:,:,jt) * tmask(:,:,1) 
     788               ! Set missing increments to 0.0 rather than 1e+20 
     789               ! to allow for differences in masks 
     790               WHERE( ABS( logchl_bkginc(:,:,jt) ) > 1.0e+10 ) logchl_bkginc(:,:,jt) = 0.0 
     791            END DO 
    529792         ENDIF 
    530793 
     
    12561519 
    12571520   END SUBROUTINE seaice_asm_inc 
     1521 
     1522   SUBROUTINE logchl_asm_inc( kt ) 
     1523      !!---------------------------------------------------------------------- 
     1524      !!                    ***  ROUTINE logchl_asm_inc  *** 
     1525      !!           
     1526      !! ** Purpose : Apply the chlorophyll assimilation increments. 
     1527      !! 
     1528      !! ** Method  : Calculate increments to state variables using nitrogen 
     1529      !!              balancing. 
     1530      !!              Direct initialization or Incremental Analysis Updating. 
     1531      !! 
     1532      !! ** Action  :  
     1533      !!---------------------------------------------------------------------- 
     1534      INTEGER, INTENT(IN) :: kt   ! Current time step 
     1535      ! 
     1536      INTEGER  :: jk              ! Loop counter 
     1537      INTEGER  :: it              ! Index 
     1538      REAL(wp) :: zincwgt         ! IAU weight for current time step 
     1539      REAL(wp) :: zincper         ! IAU interval in seconds 
     1540      !!---------------------------------------------------------------------- 
     1541 
     1542      IF ( kt <= nit000 ) THEN 
     1543 
     1544         zincper = (nitiaufin_r - nitiaustr_r + 1) * rdt 
     1545 
     1546#if defined key_fabm 
     1547         CALL asm_logchl_bal_ersem( ln_logchlpftinc,          nn_asmpfts,               & 
     1548            &                       mld_choice_bgc,           logchl_bkginc,            & 
     1549            &                       logchl_balinc_ersem_chl1, logchl_balinc_ersem_chl2, & 
     1550            &                       logchl_balinc_ersem_chl3, logchl_balinc_ersem_chl4, & 
     1551            &                       logchl_balinc_ersem_p1c,  logchl_balinc_ersem_p1n,  & 
     1552            &                       logchl_balinc_ersem_p1p,  logchl_balinc_ersem_p1s,  & 
     1553            &                       logchl_balinc_ersem_p2c,  logchl_balinc_ersem_p2n,  & 
     1554            &                       logchl_balinc_ersem_p2p,  logchl_balinc_ersem_p3c,  & 
     1555            &                       logchl_balinc_ersem_p3n,  logchl_balinc_ersem_p3p,  & 
     1556            &                       logchl_balinc_ersem_p4c,  logchl_balinc_ersem_p4n,  & 
     1557            &                       logchl_balinc_ersem_p4p,  logchl_balinc_ersem_z4c,  & 
     1558            &                       logchl_balinc_ersem_z5c,  logchl_balinc_ersem_z5n,  & 
     1559            &                       logchl_balinc_ersem_z5p,  logchl_balinc_ersem_z6c,  & 
     1560            &                       logchl_balinc_ersem_z6n,  logchl_balinc_ersem_z6p,  & 
     1561            &                       logchl_balinc_ersem_n1p,  logchl_balinc_ersem_n3n,  & 
     1562            &                       logchl_balinc_ersem_n4n,  logchl_balinc_ersem_n5s ) 
     1563#elif defined key_medusa && defined key_foam_medusa 
     1564         !CALL asm_logchl_bal_medusa() 
     1565         CALL ctl_stop( 'Attempting to assimilate logchl into MEDUSA, ', & 
     1566            &           'but not fully implemented yet' ) 
     1567#elif defined key_hadocc 
     1568         !CALL asm_logchl_bal_hadocc() 
     1569         CALL ctl_stop( 'Attempting to assimilate logchl into HadOCC, ', & 
     1570            &           'but not fully implemented yet' ) 
     1571#else 
     1572         CALL ctl_stop( 'Attempting to assimilate logchl, ', & 
     1573            &           'but not defined a biogeochemical model' ) 
     1574#endif 
     1575 
     1576      ENDIF 
     1577 
     1578      IF ( ln_asmiau ) THEN 
     1579 
     1580         !-------------------------------------------------------------------- 
     1581         ! Incremental Analysis Updating 
     1582         !-------------------------------------------------------------------- 
     1583 
     1584         IF ( ( kt >= nitiaustr_r ).AND.( kt <= nitiaufin_r ) ) THEN 
     1585 
     1586            it = kt - nit000 + 1 
     1587            zincwgt = wgtiau(it)      ! IAU weight for the current time step 
     1588            ! note this is not a tendency so should not be divided by rdt 
     1589 
     1590            IF(lwp) THEN 
     1591               WRITE(numout,*)  
     1592               WRITE(numout,*) 'logchl_asm_inc : logchl IAU at time step = ', & 
     1593                  &  kt,' with IAU weight = ', wgtiau(it) 
     1594               WRITE(numout,*) '~~~~~~~~~~~~' 
     1595            ENDIF 
     1596 
     1597            ! Update the biogeochemical tendencies 
     1598#if defined key_fabm 
     1599            DO jk = 1, jpkm1 
     1600               ! Add directly to trn and trb, rather than to tra, as not a tendency 
     1601               trn(:,:,jk,jp_fabm_m1+jp_fabm_chl1) = trn(:,:,jk,jp_fabm_m1+jp_fabm_chl1) + & 
     1602                  &                                  logchl_balinc_ersem_chl1(:,:,jk) * zincwgt 
     1603               trn(:,:,jk,jp_fabm_m1+jp_fabm_chl2) = trn(:,:,jk,jp_fabm_m1+jp_fabm_chl2) + & 
     1604                  &                                  logchl_balinc_ersem_chl2(:,:,jk) * zincwgt 
     1605               trn(:,:,jk,jp_fabm_m1+jp_fabm_chl3) = trn(:,:,jk,jp_fabm_m1+jp_fabm_chl3) + & 
     1606                  &                                  logchl_balinc_ersem_chl3(:,:,jk) * zincwgt 
     1607               trn(:,:,jk,jp_fabm_m1+jp_fabm_chl4) = trn(:,:,jk,jp_fabm_m1+jp_fabm_chl4) + & 
     1608                  &                                  logchl_balinc_ersem_chl4(:,:,jk) * zincwgt 
     1609               trn(:,:,jk,jp_fabm_m1+jp_fabm_p1c)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_p1c) + & 
     1610                  &                                  logchl_balinc_ersem_p1c(:,:,jk)  * zincwgt 
     1611               trn(:,:,jk,jp_fabm_m1+jp_fabm_p1n)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_p1n) + & 
     1612                  &                                  logchl_balinc_ersem_p1n(:,:,jk)  * zincwgt 
     1613               trn(:,:,jk,jp_fabm_m1+jp_fabm_p1p)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_p1p) + & 
     1614                  &                                  logchl_balinc_ersem_p1p(:,:,jk)  * zincwgt 
     1615               trn(:,:,jk,jp_fabm_m1+jp_fabm_p1s)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_p1s) + & 
     1616                  &                                  logchl_balinc_ersem_p1s(:,:,jk)  * zincwgt 
     1617               trn(:,:,jk,jp_fabm_m1+jp_fabm_p2c)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_p2c) + & 
     1618                  &                                  logchl_balinc_ersem_p2c(:,:,jk)  * zincwgt 
     1619               trn(:,:,jk,jp_fabm_m1+jp_fabm_p2n)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_p2n) + & 
     1620                  &                                  logchl_balinc_ersem_p2n(:,:,jk)  * zincwgt 
     1621               trn(:,:,jk,jp_fabm_m1+jp_fabm_p2p)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_p2p) + & 
     1622                  &                                  logchl_balinc_ersem_p2p(:,:,jk)  * zincwgt 
     1623               trn(:,:,jk,jp_fabm_m1+jp_fabm_p3c)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_p3c) + & 
     1624                  &                                  logchl_balinc_ersem_p3c(:,:,jk)  * zincwgt 
     1625               trn(:,:,jk,jp_fabm_m1+jp_fabm_p3n)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_p3n) + & 
     1626                  &                                  logchl_balinc_ersem_p3n(:,:,jk)  * zincwgt 
     1627               trn(:,:,jk,jp_fabm_m1+jp_fabm_p3p)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_p3p) + & 
     1628                  &                                  logchl_balinc_ersem_p3p(:,:,jk)  * zincwgt 
     1629               trn(:,:,jk,jp_fabm_m1+jp_fabm_p4c)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_p4c) + & 
     1630                  &                                  logchl_balinc_ersem_p4c(:,:,jk)  * zincwgt 
     1631               trn(:,:,jk,jp_fabm_m1+jp_fabm_p4n)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_p4n) + & 
     1632                  &                                  logchl_balinc_ersem_p4n(:,:,jk)  * zincwgt 
     1633               trn(:,:,jk,jp_fabm_m1+jp_fabm_p4p)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_p4p) + & 
     1634                  &                                  logchl_balinc_ersem_p4p(:,:,jk)  * zincwgt 
     1635               trn(:,:,jk,jp_fabm_m1+jp_fabm_z4c)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_z4c) + & 
     1636                  &                                  logchl_balinc_ersem_z4c(:,:,jk)  * zincwgt 
     1637               trn(:,:,jk,jp_fabm_m1+jp_fabm_z5c)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_z5c) + & 
     1638                  &                                  logchl_balinc_ersem_z5c(:,:,jk)  * zincwgt 
     1639               trn(:,:,jk,jp_fabm_m1+jp_fabm_z5n)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_z5n) + & 
     1640                  &                                  logchl_balinc_ersem_z5n(:,:,jk)  * zincwgt 
     1641               trn(:,:,jk,jp_fabm_m1+jp_fabm_z5p)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_z5p) + & 
     1642                  &                                  logchl_balinc_ersem_z5p(:,:,jk)  * zincwgt 
     1643               trn(:,:,jk,jp_fabm_m1+jp_fabm_z6c)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_z6c) + & 
     1644                  &                                  logchl_balinc_ersem_z6c(:,:,jk)  * zincwgt 
     1645               trn(:,:,jk,jp_fabm_m1+jp_fabm_z6n)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_z6n) + & 
     1646                  &                                  logchl_balinc_ersem_z6n(:,:,jk)  * zincwgt 
     1647               trn(:,:,jk,jp_fabm_m1+jp_fabm_z6p)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_z6p) + & 
     1648                  &                                  logchl_balinc_ersem_z6p(:,:,jk)  * zincwgt 
     1649               trn(:,:,jk,jp_fabm_m1+jp_fabm_n1p)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_n1p) + & 
     1650                  &                                  logchl_balinc_ersem_n1p(:,:,jk)  * zincwgt 
     1651               trn(:,:,jk,jp_fabm_m1+jp_fabm_n3n)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_n3n) + & 
     1652                  &                                  logchl_balinc_ersem_n3n(:,:,jk)  * zincwgt 
     1653               trn(:,:,jk,jp_fabm_m1+jp_fabm_n4n)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_n4n) + & 
     1654                  &                                  logchl_balinc_ersem_n4n(:,:,jk)  * zincwgt 
     1655               trn(:,:,jk,jp_fabm_m1+jp_fabm_n5s)  = trn(:,:,jk,jp_fabm_m1+jp_fabm_n5s) + & 
     1656                  &                                  logchl_balinc_ersem_n5s(:,:,jk)  * zincwgt 
     1657 
     1658               trb(:,:,jk,jp_fabm_m1+jp_fabm_chl1) = trb(:,:,jk,jp_fabm_m1+jp_fabm_chl1) + & 
     1659                  &                                  logchl_balinc_ersem_chl1(:,:,jk) * zincwgt 
     1660               trb(:,:,jk,jp_fabm_m1+jp_fabm_chl2) = trb(:,:,jk,jp_fabm_m1+jp_fabm_chl2) + & 
     1661                  &                                  logchl_balinc_ersem_chl2(:,:,jk) * zincwgt 
     1662               trb(:,:,jk,jp_fabm_m1+jp_fabm_chl3) = trb(:,:,jk,jp_fabm_m1+jp_fabm_chl3) + & 
     1663                  &                                  logchl_balinc_ersem_chl3(:,:,jk) * zincwgt 
     1664               trb(:,:,jk,jp_fabm_m1+jp_fabm_chl4) = trb(:,:,jk,jp_fabm_m1+jp_fabm_chl4) + & 
     1665                  &                                  logchl_balinc_ersem_chl4(:,:,jk) * zincwgt 
     1666               trb(:,:,jk,jp_fabm_m1+jp_fabm_p1c)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_p1c) + & 
     1667                  &                                  logchl_balinc_ersem_p1c(:,:,jk)  * zincwgt 
     1668               trb(:,:,jk,jp_fabm_m1+jp_fabm_p1n)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_p1n) + & 
     1669                  &                                  logchl_balinc_ersem_p1n(:,:,jk)  * zincwgt 
     1670               trb(:,:,jk,jp_fabm_m1+jp_fabm_p1p)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_p1p) + & 
     1671                  &                                  logchl_balinc_ersem_p1p(:,:,jk)  * zincwgt 
     1672               trb(:,:,jk,jp_fabm_m1+jp_fabm_p1s)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_p1s) + & 
     1673                  &                                  logchl_balinc_ersem_p1s(:,:,jk)  * zincwgt 
     1674               trb(:,:,jk,jp_fabm_m1+jp_fabm_p2c)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_p2c) + & 
     1675                  &                                  logchl_balinc_ersem_p2c(:,:,jk)  * zincwgt 
     1676               trb(:,:,jk,jp_fabm_m1+jp_fabm_p2n)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_p2n) + & 
     1677                  &                                  logchl_balinc_ersem_p2n(:,:,jk)  * zincwgt 
     1678               trb(:,:,jk,jp_fabm_m1+jp_fabm_p2p)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_p2p) + & 
     1679                  &                                  logchl_balinc_ersem_p2p(:,:,jk)  * zincwgt 
     1680               trb(:,:,jk,jp_fabm_m1+jp_fabm_p3c)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_p3c) + & 
     1681                  &                                  logchl_balinc_ersem_p3c(:,:,jk)  * zincwgt 
     1682               trb(:,:,jk,jp_fabm_m1+jp_fabm_p3n)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_p3n) + & 
     1683                  &                                  logchl_balinc_ersem_p3n(:,:,jk)  * zincwgt 
     1684               trb(:,:,jk,jp_fabm_m1+jp_fabm_p3p)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_p3p) + & 
     1685                  &                                  logchl_balinc_ersem_p3p(:,:,jk)  * zincwgt 
     1686               trb(:,:,jk,jp_fabm_m1+jp_fabm_p4c)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_p4c) + & 
     1687                  &                                  logchl_balinc_ersem_p4c(:,:,jk)  * zincwgt 
     1688               trb(:,:,jk,jp_fabm_m1+jp_fabm_p4n)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_p4n) + & 
     1689                  &                                  logchl_balinc_ersem_p4n(:,:,jk)  * zincwgt 
     1690               trb(:,:,jk,jp_fabm_m1+jp_fabm_p4p)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_p4p) + & 
     1691                  &                                  logchl_balinc_ersem_p4p(:,:,jk)  * zincwgt 
     1692               trb(:,:,jk,jp_fabm_m1+jp_fabm_z4c)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_z4c) + & 
     1693                  &                                  logchl_balinc_ersem_z4c(:,:,jk)  * zincwgt 
     1694               trb(:,:,jk,jp_fabm_m1+jp_fabm_z5c)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_z5c) + & 
     1695                  &                                  logchl_balinc_ersem_z5c(:,:,jk)  * zincwgt 
     1696               trb(:,:,jk,jp_fabm_m1+jp_fabm_z5n)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_z5n) + & 
     1697                  &                                  logchl_balinc_ersem_z5n(:,:,jk)  * zincwgt 
     1698               trb(:,:,jk,jp_fabm_m1+jp_fabm_z5p)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_z5p) + & 
     1699                  &                                  logchl_balinc_ersem_z5p(:,:,jk)  * zincwgt 
     1700               trb(:,:,jk,jp_fabm_m1+jp_fabm_z6c)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_z6c) + & 
     1701                  &                                  logchl_balinc_ersem_z6c(:,:,jk)  * zincwgt 
     1702               trb(:,:,jk,jp_fabm_m1+jp_fabm_z6n)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_z6n) + & 
     1703                  &                                  logchl_balinc_ersem_z6n(:,:,jk)  * zincwgt 
     1704               trb(:,:,jk,jp_fabm_m1+jp_fabm_z6p)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_z6p) + & 
     1705                  &                                  logchl_balinc_ersem_z6p(:,:,jk)  * zincwgt 
     1706               trb(:,:,jk,jp_fabm_m1+jp_fabm_n1p)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_n1p) + & 
     1707                  &                                  logchl_balinc_ersem_n1p(:,:,jk)  * zincwgt 
     1708               trb(:,:,jk,jp_fabm_m1+jp_fabm_n3n)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_n3n) + & 
     1709                  &                                  logchl_balinc_ersem_n3n(:,:,jk)  * zincwgt 
     1710               trb(:,:,jk,jp_fabm_m1+jp_fabm_n4n)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_n4n) + & 
     1711                  &                                  logchl_balinc_ersem_n4n(:,:,jk)  * zincwgt 
     1712               trb(:,:,jk,jp_fabm_m1+jp_fabm_n5s)  = trb(:,:,jk,jp_fabm_m1+jp_fabm_n5s) + & 
     1713                  &                                  logchl_balinc_ersem_n5s(:,:,jk)  * zincwgt 
     1714            END DO 
     1715 
     1716#elif defined key_medusa && defined key_foam_medusa 
     1717            DO jk = 1, jpkm1 
     1718               ! Add directly to trn and trb, rather than to tra, as not a tendency 
     1719               trn(:,:,jk,jpchn) = trn(:,:,jk,jpchn) + logchl_balinc_medusa_chn(:,:,jk) * zincwgt 
     1720               trn(:,:,jk,jpchd) = trn(:,:,jk,jpchd) + logchl_balinc_medusa_chd(:,:,jk) * zincwgt 
     1721               trn(:,:,jk,jpphn) = trn(:,:,jk,jpphn) + logchl_balinc_medusa_phn(:,:,jk) * zincwgt 
     1722               trn(:,:,jk,jpphd) = trn(:,:,jk,jpphd) + logchl_balinc_medusa_phd(:,:,jk) * zincwgt 
     1723               trn(:,:,jk,jpzmi) = trn(:,:,jk,jpzmi) + logchl_balinc_medusa_zmi(:,:,jk) * zincwgt 
     1724               trn(:,:,jk,jpzme) = trn(:,:,jk,jpzme) + logchl_balinc_medusa_zme(:,:,jk) * zincwgt 
     1725               trn(:,:,jk,jpdin) = trn(:,:,jk,jpdin) + logchl_balinc_medusa_din(:,:,jk) * zincwgt 
     1726               trn(:,:,jk,jpsil) = trn(:,:,jk,jpsil) + logchl_balinc_medusa_sil(:,:,jk) * zincwgt 
     1727               trn(:,:,jk,jpfer) = trn(:,:,jk,jpfer) + logchl_balinc_medusa_fer(:,:,jk) * zincwgt 
     1728               trn(:,:,jk,jpdet) = trn(:,:,jk,jpdet) + logchl_balinc_medusa_det(:,:,jk) * zincwgt 
     1729               trn(:,:,jk,jppds) = trn(:,:,jk,jppds) + logchl_balinc_medusa_pds(:,:,jk) * zincwgt 
     1730               trn(:,:,jk,jpdtc) = trn(:,:,jk,jpdtc) + logchl_balinc_medusa_dtc(:,:,jk) * zincwgt 
     1731               trn(:,:,jk,jpdic) = trn(:,:,jk,jpdic) + logchl_balinc_medusa_dic(:,:,jk) * zincwgt 
     1732               trn(:,:,jk,jpalk) = trn(:,:,jk,jpalk) + logchl_balinc_medusa_alk(:,:,jk) * zincwgt 
     1733               trn(:,:,jk,jpoxy) = trn(:,:,jk,jpoxy) + logchl_balinc_medusa_oxy(:,:,jk) * zincwgt 
     1734 
     1735               trb(:,:,jk,jpchn) = trb(:,:,jk,jpchn) + logchl_balinc_medusa_chn(:,:,jk) * zincwgt 
     1736               trb(:,:,jk,jpchd) = trb(:,:,jk,jpchd) + logchl_balinc_medusa_chd(:,:,jk) * zincwgt 
     1737               trb(:,:,jk,jpphn) = trb(:,:,jk,jpphn) + logchl_balinc_medusa_phn(:,:,jk) * zincwgt 
     1738               trb(:,:,jk,jpphd) = trb(:,:,jk,jpphd) + logchl_balinc_medusa_phd(:,:,jk) * zincwgt 
     1739               trb(:,:,jk,jpzmi) = trb(:,:,jk,jpzmi) + logchl_balinc_medusa_zmi(:,:,jk) * zincwgt 
     1740               trb(:,:,jk,jpzme) = trb(:,:,jk,jpzme) + logchl_balinc_medusa_zme(:,:,jk) * zincwgt 
     1741               trb(:,:,jk,jpdin) = trb(:,:,jk,jpdin) + logchl_balinc_medusa_din(:,:,jk) * zincwgt 
     1742               trb(:,:,jk,jpsil) = trb(:,:,jk,jpsil) + logchl_balinc_medusa_sil(:,:,jk) * zincwgt 
     1743               trb(:,:,jk,jpfer) = trb(:,:,jk,jpfer) + logchl_balinc_medusa_fer(:,:,jk) * zincwgt 
     1744               trb(:,:,jk,jpdet) = trb(:,:,jk,jpdet) + logchl_balinc_medusa_det(:,:,jk) * zincwgt 
     1745               trb(:,:,jk,jppds) = trb(:,:,jk,jppds) + logchl_balinc_medusa_pds(:,:,jk) * zincwgt 
     1746               trb(:,:,jk,jpdtc) = trb(:,:,jk,jpdtc) + logchl_balinc_medusa_dtc(:,:,jk) * zincwgt 
     1747               trb(:,:,jk,jpdic) = trb(:,:,jk,jpdic) + logchl_balinc_medusa_dic(:,:,jk) * zincwgt 
     1748               trb(:,:,jk,jpalk) = trb(:,:,jk,jpalk) + logchl_balinc_medusa_alk(:,:,jk) * zincwgt 
     1749               trb(:,:,jk,jpoxy) = trb(:,:,jk,jpoxy) + logchl_balinc_medusa_oxy(:,:,jk) * zincwgt 
     1750            END DO 
     1751 
     1752#elif defined key_hadocc 
     1753            DO jk = 1, jpkm1 
     1754               ! Add directly to trn and trb, rather than to tra, as not a tendency 
     1755               trn(:,:,jk,jp_had_nut) = trn(:,:,jk,jp_had_nut) + logchl_balinc_hadocc_nut(:,:,jk) * zincwgt 
     1756               trn(:,:,jk,jp_had_phy) = trn(:,:,jk,jp_had_phy) + logchl_balinc_hadocc_phy(:,:,jk) * zincwgt 
     1757               trn(:,:,jk,jp_had_zoo) = trn(:,:,jk,jp_had_zoo) + logchl_balinc_hadocc_zoo(:,:,jk) * zincwgt 
     1758               trn(:,:,jk,jp_had_pdn) = trn(:,:,jk,jp_had_pdn) + logchl_balinc_hadocc_det(:,:,jk) * zincwgt 
     1759               trn(:,:,jk,jp_had_dic) = trn(:,:,jk,jp_had_dic) + logchl_balinc_hadocc_dic(:,:,jk) * zincwgt 
     1760               trn(:,:,jk,jp_had_alk) = trn(:,:,jk,jp_had_alk) + logchl_balinc_hadocc_alk(:,:,jk) * zincwgt 
     1761             
     1762               trb(:,:,jk,jp_had_nut) = trb(:,:,jk,jp_had_nut) + logchl_balinc_hadocc_nut(:,:,jk) * zincwgt 
     1763               trb(:,:,jk,jp_had_phy) = trb(:,:,jk,jp_had_phy) + logchl_balinc_hadocc_phy(:,:,jk) * zincwgt 
     1764               trb(:,:,jk,jp_had_zoo) = trb(:,:,jk,jp_had_zoo) + logchl_balinc_hadocc_zoo(:,:,jk) * zincwgt 
     1765               trb(:,:,jk,jp_had_pdn) = trb(:,:,jk,jp_had_pdn) + logchl_balinc_hadocc_det(:,:,jk) * zincwgt 
     1766               trb(:,:,jk,jp_had_dic) = trb(:,:,jk,jp_had_dic) + logchl_balinc_hadocc_dic(:,:,jk) * zincwgt 
     1767               trb(:,:,jk,jp_had_alk) = trb(:,:,jk,jp_had_alk) + logchl_balinc_hadocc_alk(:,:,jk) * zincwgt 
     1768            END DO 
     1769#endif 
     1770            
     1771            ! Do not deallocate arrays - needed by asm_bal_wri 
     1772            ! which is called at end of model run 
     1773 
     1774         ENDIF 
     1775 
     1776      ELSEIF ( ln_asmdin ) THEN  
     1777 
     1778         !-------------------------------------------------------------------- 
     1779         ! Direct Initialization 
     1780         !-------------------------------------------------------------------- 
     1781          
     1782         IF ( kt == nitdin_r ) THEN 
     1783 
     1784            neuler = 0                    ! Force Euler forward step 
     1785 
     1786#if defined key_fabm 
     1787            ! Initialize the now fields with the background + increment 
     1788            ! Background currently is what the model is initialised with 
     1789            CALL ctl_warn( ' Doing direct initialisation of ERSEM with chlorophyll assimilation', & 
     1790               &           ' Background state is taken from model rather than background file' ) 
     1791            trn(:,:,:,jp_fabm_m1+jp_fabm_chl1) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl1) + & 
     1792               &                                 logchl_balinc_ersem_chl1(:,:,:) 
     1793            trn(:,:,:,jp_fabm_m1+jp_fabm_chl2) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl2) + & 
     1794               &                                 logchl_balinc_ersem_chl2(:,:,:) 
     1795            trn(:,:,:,jp_fabm_m1+jp_fabm_chl3) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl3) + & 
     1796               &                                 logchl_balinc_ersem_chl3(:,:,:) 
     1797            trn(:,:,:,jp_fabm_m1+jp_fabm_chl4) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl4) + & 
     1798               &                                 logchl_balinc_ersem_chl4(:,:,:) 
     1799            trn(:,:,:,jp_fabm_m1+jp_fabm_p1c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p1c)  + & 
     1800               &                                 logchl_balinc_ersem_p1c(:,:,:) 
     1801            trn(:,:,:,jp_fabm_m1+jp_fabm_p1n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p1n)  + & 
     1802               &                                 logchl_balinc_ersem_p1n(:,:,:) 
     1803            trn(:,:,:,jp_fabm_m1+jp_fabm_p1p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p1p)  + & 
     1804               &                                 logchl_balinc_ersem_p1p(:,:,:) 
     1805            trn(:,:,:,jp_fabm_m1+jp_fabm_p1s)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p1s)  + & 
     1806               &                                 logchl_balinc_ersem_p1s(:,:,:) 
     1807            trn(:,:,:,jp_fabm_m1+jp_fabm_p2c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p2c)  + & 
     1808               &                                 logchl_balinc_ersem_p2c(:,:,:) 
     1809            trn(:,:,:,jp_fabm_m1+jp_fabm_p2n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p2n)  + & 
     1810               &                                 logchl_balinc_ersem_p2n(:,:,:) 
     1811            trn(:,:,:,jp_fabm_m1+jp_fabm_p2p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p2p)  + & 
     1812               &                                 logchl_balinc_ersem_p2p(:,:,:) 
     1813            trn(:,:,:,jp_fabm_m1+jp_fabm_p3c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p3c)  + & 
     1814               &                                 logchl_balinc_ersem_p3c(:,:,:) 
     1815            trn(:,:,:,jp_fabm_m1+jp_fabm_p3n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p3n)  + & 
     1816               &                                 logchl_balinc_ersem_p3n(:,:,:) 
     1817            trn(:,:,:,jp_fabm_m1+jp_fabm_p3p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p3p)  + & 
     1818               &                                 logchl_balinc_ersem_p3p(:,:,:) 
     1819            trn(:,:,:,jp_fabm_m1+jp_fabm_p4c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p4c)  + & 
     1820               &                                 logchl_balinc_ersem_p4c(:,:,:) 
     1821            trn(:,:,:,jp_fabm_m1+jp_fabm_p4n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p4n)  + & 
     1822               &                                 logchl_balinc_ersem_p4n(:,:,:) 
     1823            trn(:,:,:,jp_fabm_m1+jp_fabm_p4p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p4p)  + & 
     1824               &                                 logchl_balinc_ersem_p4p(:,:,:) 
     1825            trn(:,:,:,jp_fabm_m1+jp_fabm_z4c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z4c)  + & 
     1826               &                                 logchl_balinc_ersem_z4c(:,:,:) 
     1827            trn(:,:,:,jp_fabm_m1+jp_fabm_z5c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z5c)  + & 
     1828               &                                 logchl_balinc_ersem_z5c(:,:,:) 
     1829            trn(:,:,:,jp_fabm_m1+jp_fabm_z5n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z5n)  + & 
     1830               &                                 logchl_balinc_ersem_z5n(:,:,:) 
     1831            trn(:,:,:,jp_fabm_m1+jp_fabm_z5p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z5p)  + & 
     1832               &                                 logchl_balinc_ersem_z5p(:,:,:) 
     1833            trn(:,:,:,jp_fabm_m1+jp_fabm_z6c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z6c)  + & 
     1834               &                                 logchl_balinc_ersem_z6c(:,:,:) 
     1835            trn(:,:,:,jp_fabm_m1+jp_fabm_z6n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z6n)  + & 
     1836               &                                 logchl_balinc_ersem_z6n(:,:,:) 
     1837            trn(:,:,:,jp_fabm_m1+jp_fabm_z6p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z6p)  + & 
     1838               &                                 logchl_balinc_ersem_z6p(:,:,:) 
     1839            trn(:,:,:,jp_fabm_m1+jp_fabm_n1p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_n1p)  + & 
     1840               &                                 logchl_balinc_ersem_n1p(:,:,:) 
     1841            trn(:,:,:,jp_fabm_m1+jp_fabm_n3n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_n3n)  + & 
     1842               &                                 logchl_balinc_ersem_n3n(:,:,:) 
     1843            trn(:,:,:,jp_fabm_m1+jp_fabm_n4n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_n4n)  + & 
     1844               &                                 logchl_balinc_ersem_n4n(:,:,:) 
     1845            trn(:,:,:,jp_fabm_m1+jp_fabm_n5s)  = trn(:,:,:,jp_fabm_m1+jp_fabm_n5s)  + & 
     1846               &                                 logchl_balinc_ersem_n5s(:,:,:) 
     1847 
     1848            trb(:,:,:,jp_fabm_m1+jp_fabm_chl1) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl1) 
     1849            trb(:,:,:,jp_fabm_m1+jp_fabm_chl2) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl2) 
     1850            trb(:,:,:,jp_fabm_m1+jp_fabm_chl3) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl3) 
     1851            trb(:,:,:,jp_fabm_m1+jp_fabm_chl4) = trn(:,:,:,jp_fabm_m1+jp_fabm_chl4) 
     1852            trb(:,:,:,jp_fabm_m1+jp_fabm_p1c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p1c) 
     1853            trb(:,:,:,jp_fabm_m1+jp_fabm_p1n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p1n) 
     1854            trb(:,:,:,jp_fabm_m1+jp_fabm_p1p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p1p) 
     1855            trb(:,:,:,jp_fabm_m1+jp_fabm_p1s)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p1s) 
     1856            trb(:,:,:,jp_fabm_m1+jp_fabm_p2c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p2c) 
     1857            trb(:,:,:,jp_fabm_m1+jp_fabm_p2n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p2n) 
     1858            trb(:,:,:,jp_fabm_m1+jp_fabm_p2p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p2p) 
     1859            trb(:,:,:,jp_fabm_m1+jp_fabm_p3c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p3c) 
     1860            trb(:,:,:,jp_fabm_m1+jp_fabm_p3n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p3n) 
     1861            trb(:,:,:,jp_fabm_m1+jp_fabm_p3p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p3p) 
     1862            trb(:,:,:,jp_fabm_m1+jp_fabm_p4c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p4c) 
     1863            trb(:,:,:,jp_fabm_m1+jp_fabm_p4n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p4n) 
     1864            trb(:,:,:,jp_fabm_m1+jp_fabm_p4p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_p4p) 
     1865            trb(:,:,:,jp_fabm_m1+jp_fabm_z4c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z4c) 
     1866            trb(:,:,:,jp_fabm_m1+jp_fabm_z5c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z5c) 
     1867            trb(:,:,:,jp_fabm_m1+jp_fabm_z5n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z5n) 
     1868            trb(:,:,:,jp_fabm_m1+jp_fabm_z5p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z5p) 
     1869            trb(:,:,:,jp_fabm_m1+jp_fabm_z6c)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z6c) 
     1870            trb(:,:,:,jp_fabm_m1+jp_fabm_z6n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z6n) 
     1871            trb(:,:,:,jp_fabm_m1+jp_fabm_z6p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_z6p) 
     1872            trb(:,:,:,jp_fabm_m1+jp_fabm_n1p)  = trn(:,:,:,jp_fabm_m1+jp_fabm_n1p) 
     1873            trb(:,:,:,jp_fabm_m1+jp_fabm_n3n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_n3n) 
     1874            trb(:,:,:,jp_fabm_m1+jp_fabm_n4n)  = trn(:,:,:,jp_fabm_m1+jp_fabm_n4n) 
     1875            trb(:,:,:,jp_fabm_m1+jp_fabm_n5s)  = trn(:,:,:,jp_fabm_m1+jp_fabm_n5s) 
     1876 
     1877#elif defined key_medusa && defined key_foam_medusa 
     1878            ! Initialize the now fields with the background + increment 
     1879            ! Background currently is what the model is initialised with 
     1880            CALL ctl_warn( ' Doing direct initialisation of MEDUSA with chlorophyll assimilation', & 
     1881               &           ' Background state is taken from model rather than background file' ) 
     1882            trn(:,:,:,jpchn) = trn(:,:,:,jpchn) + logchl_balinc_medusa_chn(:,:,:) 
     1883            trn(:,:,:,jpchd) = trn(:,:,:,jpchd) + logchl_balinc_medusa_chd(:,:,:) 
     1884            trn(:,:,:,jpphn) = trn(:,:,:,jpphn) + logchl_balinc_medusa_phn(:,:,:) 
     1885            trn(:,:,:,jpphd) = trn(:,:,:,jpphd) + logchl_balinc_medusa_phd(:,:,:) 
     1886            trn(:,:,:,jpzmi) = trn(:,:,:,jpzmi) + logchl_balinc_medusa_zmi(:,:,:) 
     1887            trn(:,:,:,jpzme) = trn(:,:,:,jpzme) + logchl_balinc_medusa_zme(:,:,:) 
     1888            trn(:,:,:,jpdin) = trn(:,:,:,jpdin) + logchl_balinc_medusa_din(:,:,:) 
     1889            trn(:,:,:,jpsil) = trn(:,:,:,jpsil) + logchl_balinc_medusa_sil(:,:,:) 
     1890            trn(:,:,:,jpfer) = trn(:,:,:,jpfer) + logchl_balinc_medusa_fer(:,:,:) 
     1891            trn(:,:,:,jpdet) = trn(:,:,:,jpdet) + logchl_balinc_medusa_det(:,:,:) 
     1892            trn(:,:,:,jppds) = trn(:,:,:,jppds) + logchl_balinc_medusa_pds(:,:,:) 
     1893            trn(:,:,:,jpdtc) = trn(:,:,:,jpdtc) + logchl_balinc_medusa_dtc(:,:,:) 
     1894            trn(:,:,:,jpdic) = trn(:,:,:,jpdic) + logchl_balinc_medusa_dic(:,:,:) 
     1895            trn(:,:,:,jpalk) = trn(:,:,:,jpalk) + logchl_balinc_medusa_alk(:,:,:) 
     1896            trn(:,:,:,jpoxy) = trn(:,:,:,jpoxy) + logchl_balinc_medusa_oxy(:,:,:) 
     1897 
     1898            trb(:,:,:,jpchn) = trn(:,:,:,jpchn) 
     1899            trb(:,:,:,jpchd) = trn(:,:,:,jpchd) 
     1900            trb(:,:,:,jpphn) = trn(:,:,:,jpphn) 
     1901            trb(:,:,:,jpphd) = trn(:,:,:,jpphd) 
     1902            trb(:,:,:,jpzmi) = trn(:,:,:,jpzmi) 
     1903            trb(:,:,:,jpzme) = trn(:,:,:,jpzme) 
     1904            trb(:,:,:,jpdin) = trn(:,:,:,jpdin) 
     1905            trb(:,:,:,jpsil) = trn(:,:,:,jpsil) 
     1906            trb(:,:,:,jpfer) = trn(:,:,:,jpfer) 
     1907            trb(:,:,:,jpdet) = trn(:,:,:,jpdet) 
     1908            trb(:,:,:,jppds) = trn(:,:,:,jppds) 
     1909            trb(:,:,:,jpdtc) = trn(:,:,:,jpdtc) 
     1910            trb(:,:,:,jpdic) = trn(:,:,:,jpdic) 
     1911            trb(:,:,:,jpalk) = trn(:,:,:,jpalk) 
     1912            trb(:,:,:,jpoxy) = trn(:,:,:,jpoxy) 
     1913 
     1914#elif defined key_hadocc 
     1915            ! Initialize the now fields with the background + increment 
     1916            ! Background currently is what the model is initialised with 
     1917            CALL ctl_warn( ' Doing direct initialisation of HadOCC with chlorophyll assimilation', & 
     1918               &           ' Background state is taken from model rather than background file' ) 
     1919            trn(:,:,:,jp_had_nut) = trn(:,:,:,jp_had_nut) + logchl_balinc_hadocc_nut(:,:,:) 
     1920            trn(:,:,:,jp_had_phy) = trn(:,:,:,jp_had_phy) + logchl_balinc_hadocc_phy(:,:,:) 
     1921            trn(:,:,:,jp_had_zoo) = trn(:,:,:,jp_had_zoo) + logchl_balinc_hadocc_zoo(:,:,:) 
     1922            trn(:,:,:,jp_had_pdn) = trn(:,:,:,jp_had_pdn) + logchl_balinc_hadocc_det(:,:,:) 
     1923            trn(:,:,:,jp_had_dic) = trn(:,:,:,jp_had_dic) + logchl_balinc_hadocc_dic(:,:,:) 
     1924            trn(:,:,:,jp_had_alk) = trn(:,:,:,jp_had_alk) + logchl_balinc_hadocc_alk(:,:,:) 
     1925 
     1926            trb(:,:,:,jp_had_nut) = trn(:,:,:,jp_had_nut) 
     1927            trb(:,:,:,jp_had_phy) = trn(:,:,:,jp_had_phy) 
     1928            trb(:,:,:,jp_had_zoo) = trn(:,:,:,jp_had_zoo) 
     1929            trb(:,:,:,jp_had_pdn) = trn(:,:,:,jp_had_pdn) 
     1930            trb(:,:,:,jp_had_dic) = trn(:,:,:,jp_had_dic) 
     1931            trb(:,:,:,jp_had_alk) = trn(:,:,:,jp_had_alk) 
     1932#endif 
     1933  
     1934            ! Do not deallocate arrays - needed by asm_bal_wri 
     1935            ! which is called at end of model run 
     1936         ENDIF 
     1937         ! 
     1938      ENDIF 
     1939      ! 
     1940   END SUBROUTINE logchl_asm_inc 
    12581941    
    12591942   !!====================================================================== 
  • branches/UKMO/dev_r5518_v3.4_asm_nemovar_community_bgc_ersem/NEMOGCM/NEMO/OPA_SRC/ASM/asmpar.F90

    r6613 r6983  
    2020      & c_asmtrj = 'assim_trj',                  & !: Filename for storing the  
    2121                                                   !: reference trajectory 
    22       & c_asminc = 'assim_background_increments'  !: Filename for storing the  
     22      & c_asminc = 'assim_background_increments', & !: Filename for storing the  
    2323                                                   !: increments to the background 
    2424                                                   !: state 
     25      & c_asmbal = 'assim.balincs'                 !: Filename for storing the  
     26                                                   !: balancing increments calculated 
     27                                                   !: for biogeochemistry 
    2528 
    2629   INTEGER, PUBLIC :: nitbkg_r      !: Background time step referenced to nit000 
  • branches/UKMO/dev_r5518_v3.4_asm_nemovar_community_bgc_ersem/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r6661 r6983  
    6161   USE asminc          ! assimilation increments      
    6262   USE asmbkg          ! writing out state trajectory 
     63   USE asmbal          ! writing out assimilation balancing increments 
    6364   USE diaptr          ! poleward transports           (dia_ptr_init routine) 
    6465   USE diadct          ! sections transports           (dia_dct_init routine) 
     
    158159                IF( ln_dyninc ) CALL dyn_asm_inc( nit000 - 1 )    ! Dynamics 
    159160                IF( ln_sshinc ) CALL ssh_asm_inc( nit000 - 1 )    ! SSH 
     161                IF( ln_logchltotinc .OR. ln_logchlpftinc ) CALL logchl_asm_inc( nit000 - 1 ) 
    160162             ENDIF 
    161163          ENDIF 
     
    177179 
    178180      IF( lk_diaobs   )   CALL dia_obs_wri 
     181      ! 
     182      IF( ( lk_asminc ).AND.( ln_balwri ) ) CALL asm_bal_wri( nitend )  ! Output balancing increments 
    179183      ! 
    180184      IF( ln_icebergs )   CALL icb_end( nitend ) 
  • branches/UKMO/dev_r5518_v3.4_asm_nemovar_community_bgc_ersem/NEMOGCM/NEMO/OPA_SRC/step.F90

    r6626 r6983  
    242242      ! Passive Tracer Model 
    243243      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     244      IF( lk_asminc .AND. ln_asmiau .AND. ( ln_logchltotinc .OR. ln_logchlpftinc ) ) & 
     245         &               CALL logchl_asm_inc( kstp )  ! logchl assimilation 
    244246                         CALL trc_stp( kstp )         ! time-stepping 
    245247#endif 
Note: See TracChangeset for help on using the changeset viewer.