Changeset 13318


Ignore:
Timestamp:
2020-07-16T19:14:10+02:00 (4 months ago)
Author:
dford
Message:

Allow assimilation of PFT chlorophyll profiles. See Met Office utils ticket 346.

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

Legend:

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

    r11277 r13318  
    13031303    ln_plchltotinc = .false. !  Logical switch for applying plchltot increments 
    13041304    ln_pchltotinc  = .false. !  Logical switch for applying pchltot increments 
     1305    ln_plchldiainc = .false. !  Logical switch for applying plchldia increments 
     1306    ln_plchlnaninc = .false. !  Logical switch for applying plchlnan increments 
     1307    ln_plchlpicinc = .false. !  Logical switch for applying plchlpic increments 
     1308    ln_plchldininc = .false. !  Logical switch for applying plchldin increments 
    13051309    ln_pno3inc     = .false. !  Logical switch for applying pno3 increments 
    13061310    ln_psi4inc     = .false. !  Logical switch for applying psi4 increments 
  • branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/NEMO/OPA_SRC/ASM/asmbgc.F90

    r10728 r13318  
    132132   LOGICAL, PUBLIC :: ln_sfco2inc    = .FALSE. !: No surface fCO2                          increment 
    133133   LOGICAL, PUBLIC :: ln_plchltotinc = .FALSE. !: No profile total      log10(chlorophyll) increment 
     134   LOGICAL, PUBLIC :: ln_plchldiainc = .FALSE. !: No profile diatom     log10(chlorophyll) increment 
     135   LOGICAL, PUBLIC :: ln_plchlnaninc = .FALSE. !: No profile nanophyto  log10(chlorophyll) increment 
     136   LOGICAL, PUBLIC :: ln_plchlpicinc = .FALSE. !: No profile picophyto  log10(chlorophyll) increment 
     137   LOGICAL, PUBLIC :: ln_plchldininc = .FALSE. !: No profile dinoflag   log10(chlorophyll) increment 
    134138   LOGICAL, PUBLIC :: ln_pchltotinc  = .FALSE. !: No profile total      chlorophyll        increment 
    135139   LOGICAL, PUBLIC :: ln_pno3inc     = .FALSE. !: No profile nitrate                       increment 
     
    173177   REAL(wp), DIMENSION(:,:),     ALLOCATABLE :: spco2_bkginc    ! spco2 inc 
    174178   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: plchltot_bkginc ! plchltot inc 
     179   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: plchldia_bkginc ! plchldia inc 
     180   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: plchlnan_bkginc ! plchlnan inc 
     181   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: plchlpic_bkginc ! plchlpic inc 
     182   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: plchldin_bkginc ! plchldin inc 
    175183   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: pchltot_bkginc  ! pchltot inc 
    176184   REAL(wp), DIMENSION(:,:,:),   ALLOCATABLE :: pno3_bkginc     ! pno3 inc 
     
    262270         & ( .NOT. ln_slphydiainc ).AND.( .NOT. ln_slphynoninc ) ) THEN 
    263271         CALL ctl_warn( ' Cannot calculate phytoplankton balancing increments', & 
    264             &           ' if not assimilating ocean colour,',                   & 
     272            &           ' if not assimilating ocean colour in 2D,',             & 
    265273            &           ' so ln_phytobal will be set to .false.') 
    266274         ln_phytobal = .FALSE. 
     
    274282         & ( .NOT. ln_slphytotinc ).AND.( .NOT. ln_slphydiainc ).AND. & 
    275283         & ( .NOT. ln_slphynoninc ).AND.( .NOT. ln_plchltotinc ).AND. & 
     284         & ( .NOT. ln_plchldiainc ).AND.( .NOT. ln_plchlnaninc ).AND. & 
     285         & ( .NOT. ln_plchlpicinc ).AND.( .NOT. ln_plchldininc ).AND. & 
    276286         & ( .NOT. ln_pchltotinc  ).AND.( .NOT. ln_pphinc      ).AND. & 
    277287         & ( .NOT. ln_spco2inc    ).AND.( .NOT. ln_sfco2inc    ) ) THEN 
     
    297307         &   ln_slchlpicinc .OR. ln_slchldininc ) ) THEN 
    298308         CALL ctl_stop( ' Can only assimilate total or PFT surface chlorophyll, not both' ) 
     309      ENDIF 
     310 
     311      IF ( ( ln_plchltotinc .OR. ln_pchltotinc  ) .AND. & 
     312         & ( ln_plchldiainc .OR. ln_plchlnaninc .OR. & 
     313         &   ln_plchlpicinc .OR. ln_plchldininc ) ) THEN 
     314         CALL ctl_stop( ' Can only assimilate total or PFT profile chlorophyll, not both' ) 
    299315      ENDIF 
    300316 
     
    416432      ENDIF 
    417433       
     434      IF ( ln_plchldiainc ) THEN 
     435         ALLOCATE( plchldia_bkginc(jpi,jpj,jpk) ) 
     436         CALL asm_bgc_read_incs_3d( knum, 'bckinplchldia', plchldia_bkginc ) 
     437      ENDIF 
     438       
     439      IF ( ln_plchldininc ) THEN 
     440         ALLOCATE( plchldin_bkginc(jpi,jpj,jpk) ) 
     441         CALL asm_bgc_read_incs_3d( knum, 'bckinplchldin', plchldin_bkginc ) 
     442      ENDIF 
     443       
     444      IF ( ln_plchlnaninc ) THEN 
     445         ALLOCATE( plchlnan_bkginc(jpi,jpj,jpk) ) 
     446         CALL asm_bgc_read_incs_3d( knum, 'bckinplchlnan', plchlnan_bkginc ) 
     447      ENDIF 
     448       
     449      IF ( ln_plchlpicinc ) THEN 
     450         ALLOCATE( plchlpic_bkginc(jpi,jpj,jpk) ) 
     451         CALL asm_bgc_read_incs_3d( knum, 'bckinplchlpic', plchlpic_bkginc ) 
     452      ENDIF 
     453       
    418454      IF ( ln_pchltotinc ) THEN 
    419455         ALLOCATE( pchltot_bkginc(jpi,jpj,jpk) ) 
     
    470506      ENDIF 
    471507       
    472       IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
     508      IF ( ln_plchltotinc .OR. ln_pchltotinc  .OR. ln_plchldiainc .OR. & 
     509         & ln_plchlnaninc .OR. ln_plchlpicinc .OR. ln_plchldininc ) THEN 
    473510#if defined key_top 
    474511         ALLOCATE( phyto3d_balinc(jpi,jpj,jpk,jptra) ) 
     
    601638         & ln_slchlnaninc .OR. ln_slchlpicinc .OR. ln_slchldininc .OR. & 
    602639         & ln_schltotinc  .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 
    603          & ln_slphynoninc .OR. ln_plchltotinc .OR. ln_pchltotinc ) THEN 
     640         & ln_slphynoninc .OR. ln_plchltotinc .OR. ln_pchltotinc  .OR. & 
     641         & ln_plchldiainc .OR. ln_plchldininc .OR. ln_plchlnaninc .OR. & 
     642         & ln_plchlpicinc ) THEN 
    604643 
    605644         ALLOCATE( pgrow_avg_bkg(jpi,jpj)        ) 
     
    888927         ENDIF 
    889928 
    890          IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
     929         IF ( ln_plchltotinc .OR. ln_pchltotinc  .OR. ln_plchldiainc .OR. & 
     930            & ln_plchldininc .OR. ln_plchlnaninc .OR. ln_plchlpicinc ) THEN 
    891931#if defined key_medusa 
    892932            CALL iom_rstput( kt, kt, inum, 'phy3d_chn', phyto3d_balinc(:,:,:,jpchn) ) 
     
    12541294   !!=========================================================================== 
    12551295 
     1296   SUBROUTINE asm_bgc_unlog_3d( pbkg, pinc_log, pinc_nonlog ) 
     1297      !!------------------------------------------------------------------------ 
     1298      !!                    ***  ROUTINE asm_bgc_init_incs  *** 
     1299      !! 
     1300      !! ** Purpose :   convert log increments to non-log 
     1301      !! 
     1302      !! ** Method  :   need to account for model background, 
     1303      !!                cannot simply do 10^log_inc. Need to: 
     1304      !!                1) Add log_inc to log10(background) to get log10(analysis) 
     1305      !!                2) Take 10^log10(analysis) to get analysis 
     1306      !!                3) Subtract background from analysis to get non-log incs 
     1307      !! 
     1308      !! ** Action  :   return non-log increments 
     1309      !! 
     1310      !! References :    
     1311      !!------------------------------------------------------------------------ 
     1312      !! 
     1313      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpk) :: pbkg        ! Background 
     1314      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpk) :: pinc_log    ! Log incs 
     1315      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj,jpk) :: pinc_nonlog ! Non-log incs 
     1316      ! 
     1317      INTEGER                                         :: ji, jj, jk  ! Loop counters 
     1318      !! 
     1319      !!------------------------------------------------------------------------ 
     1320 
     1321      DO jk = 1, jpk 
     1322         DO jj = 1, jpj 
     1323            DO ji = 1, jpi 
     1324               IF ( pbkg(ji,jj,jk) > 0.0 ) THEN 
     1325                  pinc_nonlog(ji,jj,jk) = 10**( LOG10( pbkg(ji,jj,jk) ) + & 
     1326                     &                          pinc_log(ji,jj,jk) )      & 
     1327                     &                    - pbkg(ji,jj,jk) 
     1328               ELSE 
     1329                  pinc_nonlog(ji,jj,jk) = 0.0 
     1330               ENDIF 
     1331            END DO 
     1332         END DO 
     1333      END DO 
     1334 
     1335   END SUBROUTINE asm_bgc_unlog_3d 
     1336 
     1337   !!=========================================================================== 
     1338   !!=========================================================================== 
     1339   !!=========================================================================== 
     1340 
    12561341   SUBROUTINE phyto2d_asm_inc( kt, ll_asmdin, ll_asmiau, kcycper, pwgtiau ) 
    12571342      !!------------------------------------------------------------------------ 
     
    16181703      INTEGER                          :: it            ! Index 
    16191704      REAL(wp)                         :: zincwgt       ! IAU weight for timestep 
     1705      REAL(wp)                         :: zfrac         ! Fraction 
    16201706      REAL(wp)                         :: zfrac_chn     ! Fraction of jpchn 
    16211707      REAL(wp)                         :: zfrac_chd     ! Fraction of jpchd 
     
    16401726      REAL(wp)                         :: zrat_p4n_chl4 ! jp_fabm_p4n:jp_fabm_chl4 ratio 
    16411727      REAL(wp)                         :: zrat_p4p_chl4 ! jp_fabm_p4p:jp_fabm_chl4 ratio 
    1642       REAL(wp), DIMENSION(jpi,jpj,jpk) :: chl_inc       ! Chlorophyll increments 
    1643       REAL(wp), DIMENSION(jpi,jpj,jpk) :: bkg_chl       ! Chlorophyll background 
     1728      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zinc_chltot   ! Local chltot incs 
     1729      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zbkg_chltot   ! Local chltot bkg 
     1730#if defined key_fabm 
     1731      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zinc_chldia   ! Local chldia incs 
     1732      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zbkg_chldia   ! Local chldia bkg 
     1733      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zinc_chldin   ! Local chldin incs 
     1734      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zbkg_chldin   ! Local chldin bkg 
     1735      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zinc_chlnan   ! Local chlnan incs 
     1736      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zbkg_chlnan   ! Local chlnan bkg 
     1737      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zinc_chlpic   ! Local chlpic incs 
     1738      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zbkg_chlpic   ! Local chlpic bkg 
     1739      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zinc_chltot_temp   ! Local chltot incs 
     1740#endif 
    16441741      !!------------------------------------------------------------------------ 
    16451742 
    16461743      IF ( kt <= nit000 ) THEN 
    16471744 
     1745         ! Un-log any log increments 
     1746         ! Remember that two sets of non-log increments should not be 
     1747         ! expected to be in the same ratio as their log equivalents 
     1748          
     1749         ! Total chlorophyll 
    16481750         IF ( ln_plchltotinc ) THEN 
    1649             ! Convert log10(chlorophyll) increment back to a chlorophyll increment 
    1650             ! In order to transform logchl incs to chl incs, need to account for model 
    1651             ! background, cannot simply do 10^logchl_bkginc. Need to: 
    1652             ! 1) Add logchl inc to log10(background) to get log10(analysis) 
    1653             ! 2) Take 10^log10(analysis) to get analysis 
    1654             ! 3) Subtract background from analysis to get chl incs 
    1655             ! If rn_maxchlinc > 0 then cap total absolute chlorophyll increment at that value 
    16561751#if defined key_medusa 
    1657             bkg_chl(:,:,:) = tracer_bkg(:,:,:,jpchn) + tracer_bkg(:,:,:,jpchd) 
     1752            zbkg_chltot(:,:,:) = tracer_bkg(:,:,:,jpchn) + tracer_bkg(:,:,:,jpchd) 
    16581753#elif defined key_hadocc 
    1659             bkg_chl(:,:,:) = chl_bkg(:,:,:) 
    1660 #elif defined key_fabm 
    1661             bkg_chl(:,:,:) = tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl1) + & 
    1662                &             tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl2) + & 
    1663                &             tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl3) + & 
    1664                &             tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl4) 
    1665 #endif 
    1666             DO jk = 1, jpk 
    1667                DO jj = 1, jpj 
    1668                   DO ji = 1, jpi 
    1669                      IF ( bkg_chl(ji,jj,jk) > 0.0 ) THEN 
    1670                         chl_inc(ji,jj,jk) = 10**( LOG10( bkg_chl(ji,jj,jk) ) + plchltot_bkginc(ji,jj,jk) ) - bkg_chl(ji,jj,jk) 
    1671                         IF ( rn_maxchlinc > 0.0 ) THEN 
    1672                            chl_inc(ji,jj,jk) = MAX( -1.0 * rn_maxchlinc, MIN( chl_inc(ji,jj,jk), rn_maxchlinc ) ) 
    1673                         ENDIF 
    1674                      ELSE 
    1675                         chl_inc(ji,jj,jk) = 0.0 
    1676                      ENDIF 
     1754            zbkg_chltot(:,:,:) = chl_bkg(:,:,:) 
     1755#elif defined key_fabm 
     1756            zbkg_chltot(:,:,:) = tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl1) + & 
     1757               &                 tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl2) + & 
     1758               &                 tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl3) + & 
     1759               &                 tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl4) 
     1760#endif 
     1761            CALL asm_bgc_unlog_3d( zbkg_chltot, plchltot_bkginc, zinc_chltot ) 
     1762         ELSE IF ( ln_pchltotinc ) THEN 
     1763            zinc_chltot(:,:,:) = pchltot_bkginc(:,:,:) 
     1764         ELSE 
     1765            zinc_chltot(:,:,:) = 0.0 
     1766         ENDIF 
     1767 
     1768#if defined key_fabm 
     1769         ! Diatom chlorophyll 
     1770         IF ( ln_plchldiainc ) THEN 
     1771            zbkg_chldia(:,:,:) = tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl1) 
     1772            CALL asm_bgc_unlog_3d( zbkg_chldia, plchldia_bkginc, zinc_chldia ) 
     1773         ELSE 
     1774            zinc_chldia(:,:,:) = 0.0 
     1775         ENDIF 
     1776 
     1777         ! Nanophytoplankton chlorophyll 
     1778         IF ( ln_plchlnaninc ) THEN 
     1779            zbkg_chlnan(:,:,:) = tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl2) 
     1780            CALL asm_bgc_unlog_3d( zbkg_chlnan, plchlnan_bkginc, zinc_chlnan ) 
     1781         ELSE 
     1782            zinc_chlnan(:,:,:) = 0.0 
     1783         ENDIF 
     1784 
     1785         ! Picophytoplankton chlorophyll 
     1786         IF ( ln_plchlpicinc ) THEN 
     1787            zbkg_chlpic(:,:,:) = tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl3) 
     1788            CALL asm_bgc_unlog_3d( zbkg_chlpic, plchlpic_bkginc, zinc_chlpic ) 
     1789         ELSE 
     1790            zinc_chlpic(:,:,:) = 0.0 
     1791         ENDIF 
     1792 
     1793         ! Dinoflagellate chlorophyll 
     1794         IF ( ln_plchldininc ) THEN 
     1795            zbkg_chldin(:,:,:) = tracer_bkg(:,:,:,jp_fabm_m1+jp_fabm_chl4) 
     1796            CALL asm_bgc_unlog_3d( zbkg_chldin, plchldin_bkginc, zinc_chldin ) 
     1797         ELSE 
     1798            zinc_chldin(:,:,:) = 0.0 
     1799         ENDIF 
     1800#endif 
     1801 
     1802         ! If rn_maxchlinc > 0 then cap total absolute chlorophyll increment at that value 
     1803         IF ( rn_maxchlinc > 0.0 ) THEN 
     1804            IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
     1805               DO jk = 1, jpk 
     1806                  DO jj = 1, jpj 
     1807                     DO ji = 1, jpi 
     1808                        zinc_chltot(ji,jj,jk) = MAX( -1.0 * rn_maxchlinc, MIN( zinc_chltot(ji,jj,jk), rn_maxchlinc ) ) 
     1809                     END DO 
    16771810                  END DO 
    16781811               END DO 
    1679             END DO 
    1680          ELSE IF ( ln_pchltotinc ) THEN 
    1681             DO jk = 1, jpk 
    1682                DO jj = 1, jpj 
    1683                   DO ji = 1, jpi 
    1684                      IF ( rn_maxchlinc > 0.0 ) THEN 
    1685                         chl_inc(ji,jj,jk) = MAX( -1.0 * rn_maxchlinc, MIN( pchltot_bkginc(ji,jj,jk), rn_maxchlinc ) ) 
    1686                      ELSE 
    1687                         chl_inc(ji,jj,jk) = pchltot_bkginc(ji,jj,jk) 
    1688                      ENDIF 
     1812#if defined key_fabm 
     1813            ELSE 
     1814               DO jk = 1, jpk 
     1815                  DO jj = 1, jpj 
     1816                     DO ji = 1, jpi 
     1817                        IF ( ln_plchldiainc .AND. ln_plchlnaninc .AND. ln_plchlpicinc .AND. ln_plchldininc ) THEN 
     1818                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + zinc_chlnan(ji,jj,jk) + & 
     1819                              &                         zinc_chlpic(ji,jj,jk) + zinc_chldin(ji,jj,jk) 
     1820                        ELSE IF ( ln_plchldiainc .AND. ln_plchlnaninc .AND. ln_plchlpicinc ) THEN 
     1821                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + zinc_chlnan(ji,jj,jk) + & 
     1822                              &                         zinc_chlpic(ji,jj,jk) 
     1823                        ELSE IF ( ln_plchldiainc .AND. ln_plchlnaninc .AND. ln_plchldininc ) THEN 
     1824                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + zinc_chlnan(ji,jj,jk) + & 
     1825                              &                         zinc_chldin(ji,jj,jk) 
     1826                        ELSE IF ( ln_plchldiainc .AND. ln_plchlpicinc .AND. ln_plchldininc ) THEN 
     1827                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + & 
     1828                              &                         zinc_chlpic(ji,jj,jk) + zinc_chldin(ji,jj,jk) 
     1829                        ELSE IF ( ln_plchlnaninc .AND. ln_plchlpicinc .AND. ln_plchldininc ) THEN 
     1830                           zinc_chltot_temp(ji,jj,jk) = zinc_chlnan(ji,jj,jk) + & 
     1831                              &                         zinc_chlpic(ji,jj,jk) + zinc_chldin(ji,jj,jk) 
     1832                        ELSE IF ( ln_plchldiainc .AND. ln_plchlnaninc ) THEN 
     1833                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + zinc_chlnan(ji,jj,jk) 
     1834                        ELSE IF ( ln_plchldiainc .AND. ln_plchlpicinc ) THEN 
     1835                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + zinc_chlpic(ji,jj,jk) 
     1836                        ELSE IF ( ln_plchldiainc .AND. ln_plchldininc ) THEN 
     1837                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) + zinc_chldin(ji,jj,jk) 
     1838                        ELSE IF ( ln_plchlnaninc .AND. ln_plchlpicinc ) THEN 
     1839                           zinc_chltot_temp(ji,jj,jk) = zinc_chlnan(ji,jj,jk) + zinc_chlpic(ji,jj,jk) 
     1840                        ELSE IF ( ln_plchlnaninc .AND. ln_plchldininc ) THEN 
     1841                           zinc_chltot_temp(ji,jj,jk) = zinc_chlnan(ji,jj,jk) + zinc_chldin(ji,jj,jk) 
     1842                        ELSE IF ( ln_plchlpicinc .AND. ln_plchldininc ) THEN 
     1843                           zinc_chltot_temp(ji,jj,jk) = zinc_chlpic(ji,jj,jk) + zinc_chldin(ji,jj,jk) 
     1844                        ELSE IF ( ln_plchldiainc ) THEN 
     1845                           zinc_chltot_temp(ji,jj,jk) = zinc_chldia(ji,jj,jk) 
     1846                        ELSE IF ( ln_plchlnaninc ) THEN 
     1847                           zinc_chltot_temp(ji,jj,jk) = zinc_chlnan(ji,jj,jk) 
     1848                        ELSE IF ( ln_plchlpicinc ) THEN 
     1849                           zinc_chltot_temp(ji,jj,jk) = zinc_chlpic(ji,jj,jk) 
     1850                        ELSE IF ( ln_plchldininc ) THEN 
     1851                           zinc_chltot_temp(ji,jj,jk) = zinc_chldin(ji,jj,jk) 
     1852                        ENDIF 
     1853                        zinc_chltot(ji,jj,jk) = MAX( -1.0 * rn_maxchlinc, MIN( zinc_chltot_temp(ji,jj,jk), rn_maxchlinc ) ) 
     1854                        IF ( zinc_chltot(ji,jj,jk) .NE. zinc_chltot_temp(ji,jj,jk) ) THEN 
     1855                           zfrac = zinc_chltot(ji,jj,jk) / zinc_chltot_temp(ji,jj,jk) 
     1856                           IF ( ln_plchldiainc ) THEN 
     1857                              zinc_chldia(ji,jj,jk) = zinc_chldia(ji,jj,jk) * zfrac 
     1858                           ENDIF 
     1859                           IF ( ln_plchlnaninc ) THEN 
     1860                              zinc_chlnan(ji,jj,jk) = zinc_chlnan(ji,jj,jk) * zfrac 
     1861                           ENDIF 
     1862                           IF ( ln_plchlpicinc ) THEN 
     1863                              zinc_chlpic(ji,jj,jk) = zinc_chlpic(ji,jj,jk) * zfrac 
     1864                           ENDIF 
     1865                           IF ( ln_plchldininc ) THEN 
     1866                              zinc_chldin(ji,jj,jk) = zinc_chldin(ji,jj,jk) * zfrac 
     1867                           ENDIF 
     1868                        ENDIF 
     1869                     END DO 
    16891870                  END DO 
    16901871               END DO 
    1691             END DO 
     1872#endif 
     1873            ENDIF 
    16921874         ENDIF 
    16931875 
     
    17001882                     zfrac_chn = tracer_bkg(ji,jj,jk,jpchn) / (tracer_bkg(ji,jj,jk,jpchn) + tracer_bkg(ji,jj,jk,jpchd)) 
    17011883                     zfrac_chd = 1.0 - zfrac_chn 
    1702                      phyto3d_balinc(ji,jj,jk,jpchn) = chl_inc(ji,jj,jk) * zfrac_chn 
    1703                      phyto3d_balinc(ji,jj,jk,jpchd) = chl_inc(ji,jj,jk) * zfrac_chd 
     1884                     phyto3d_balinc(ji,jj,jk,jpchn) = zinc_chltot(ji,jj,jk) * zfrac_chn 
     1885                     phyto3d_balinc(ji,jj,jk,jpchd) = zinc_chltot(ji,jj,jk) * zfrac_chd 
    17041886                     zrat_phn_chn = tracer_bkg(ji,jj,jk,jpphn) / tracer_bkg(ji,jj,jk,jpchn) 
    17051887                     zrat_phd_chd = tracer_bkg(ji,jj,jk,jpphd) / tracer_bkg(ji,jj,jk,jpchd) 
     
    17131895         END DO 
    17141896#elif defined key_hadocc 
    1715          phyto3d_balinc(:,:,:,jp_had_phy) = ( cchl_p_bkg(:,:,:) / (mw_carbon * c2n_p) ) * chl_inc(:,:,:) 
     1897         phyto3d_balinc(:,:,:,jp_had_phy) = ( cchl_p_bkg(:,:,:) / (mw_carbon * c2n_p) ) * zinc_chltot(:,:,:) 
    17161898#elif defined key_fabm 
    17171899         ! Loop over each grid point partioning the increments based on existing ratios 
     
    17231905                     & ( tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl3) > 0.0 ) .AND. & 
    17241906                     & ( tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl4) > 0.0 ) ) THEN 
    1725                      zfrac_chl1 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1) / bkg_chl(ji,jj,jk) 
    1726                      zfrac_chl2 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl2) / bkg_chl(ji,jj,jk) 
    1727                      zfrac_chl3 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl3) / bkg_chl(ji,jj,jk) 
    1728                      zfrac_chl4 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl4) / bkg_chl(ji,jj,jk) 
    1729                      phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1) = chl_inc(ji,jj,jk) * zfrac_chl1 
    1730                      phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl2) = chl_inc(ji,jj,jk) * zfrac_chl2 
    1731                      phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl3) = chl_inc(ji,jj,jk) * zfrac_chl3 
    1732                      phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl4) = chl_inc(ji,jj,jk) * zfrac_chl4 
     1907                     IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
     1908                        zfrac_chl1 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1) / zbkg_chltot(ji,jj,jk) 
     1909                        zfrac_chl2 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl2) / zbkg_chltot(ji,jj,jk) 
     1910                        zfrac_chl3 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl3) / zbkg_chltot(ji,jj,jk) 
     1911                        zfrac_chl4 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl4) / zbkg_chltot(ji,jj,jk) 
     1912                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1) = zinc_chltot(ji,jj,jk) * zfrac_chl1 
     1913                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl2) = zinc_chltot(ji,jj,jk) * zfrac_chl2 
     1914                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl3) = zinc_chltot(ji,jj,jk) * zfrac_chl3 
     1915                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl4) = zinc_chltot(ji,jj,jk) * zfrac_chl4 
     1916                     ELSE 
     1917                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1) = zinc_chldia(ji,jj,jk) 
     1918                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl2) = zinc_chlnan(ji,jj,jk) 
     1919                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl3) = zinc_chlpic(ji,jj,jk) 
     1920                        phyto3d_balinc(ji,jj,jk,jp_fabm_m1+jp_fabm_chl4) = zinc_chldin(ji,jj,jk) 
     1921                     ENDIF 
    17331922                     zrat_p1c_chl1 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_p1c) / tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1) 
    17341923                     zrat_p1n_chl1 = tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_p1n) / tracer_bkg(ji,jj,jk,jp_fabm_m1+jp_fabm_chl1) 
     
    17621951         END DO 
    17631952#else 
    1764          CALL ctl_stop( 'Attempting to assimilate p(l)chltot, ', & 
     1953         CALL ctl_stop( 'Attempting to assimilate phyto3d, ', & 
    17651954            &           'but not defined a biogeochemical model' ) 
    17661955#endif 
     
    24252614            it = jp_fabm_n3n 
    24262615#endif 
    2427             IF ( ln_phytobal ) THEN 
     2616            IF ( ALLOCATED(phyto2d_balinc) ) THEN 
    24282617               pno3_bkginc(:,:,:) = pno3_bkginc(:,:,:) - phyto2d_balinc(:,:,:,it) 
    24292618            ENDIF 
    2430             IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
     2619            IF ( ALLOCATED(phyto3d_balinc) ) THEN 
    24312620               pno3_bkginc(:,:,:) = pno3_bkginc(:,:,:) - phyto3d_balinc(:,:,:,it) 
    24322621            ENDIF 
     
    24492638            it = jp_fabm_n5s 
    24502639#endif 
    2451             IF ( ln_phytobal ) THEN 
     2640            IF ( ALLOCATED(phyto2d_balinc) ) THEN 
    24522641               psi4_bkginc(:,:,:) = psi4_bkginc(:,:,:) - phyto2d_balinc(:,:,:,it) 
    24532642            ENDIF 
    2454             IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
     2643            IF ( ALLOCATED(phyto3d_balinc) ) THEN 
    24552644               psi4_bkginc(:,:,:) = psi4_bkginc(:,:,:) - phyto3d_balinc(:,:,:,it) 
    24562645            ENDIF 
     
    24702659            it = jp_fabm_n1p 
    24712660 
    2472             IF ( ln_phytobal ) THEN 
     2661            IF ( ALLOCATED(phyto2d_balinc) ) THEN 
    24732662               ppo4_bkginc(:,:,:) = ppo4_bkginc(:,:,:) - phyto2d_balinc(:,:,:,it) 
    24742663            ENDIF 
    2475             IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
     2664            IF ( ALLOCATED(phyto3d_balinc) ) THEN 
    24762665               ppo4_bkginc(:,:,:) = ppo4_bkginc(:,:,:) - phyto3d_balinc(:,:,:,it) 
    24772666            ENDIF 
     
    24962685            it = jp_fabm_o3c 
    24972686#endif 
    2498             IF ( ln_phytobal ) THEN 
     2687            IF ( ALLOCATED(phyto2d_balinc) ) THEN 
    24992688               pdic_bkginc(:,:,:) = pdic_bkginc(:,:,:) - phyto2d_balinc(:,:,:,it) 
    25002689            ENDIF 
    2501             IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
     2690            IF ( ALLOCATED(phyto3d_balinc) ) THEN 
    25022691               pdic_bkginc(:,:,:) = pdic_bkginc(:,:,:) - phyto3d_balinc(:,:,:,it) 
    25032692            ENDIF 
     
    25222711            it = jp_fabm_o3ba 
    25232712#endif 
    2524             IF ( ln_phytobal ) THEN 
     2713            IF ( ALLOCATED(phyto2d_balinc) ) THEN 
    25252714               palk_bkginc(:,:,:) = palk_bkginc(:,:,:) - phyto2d_balinc(:,:,:,it) 
    25262715            ENDIF 
    2527             IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
     2716            IF ( ALLOCATED(phyto3d_balinc) ) THEN 
    25282717               palk_bkginc(:,:,:) = palk_bkginc(:,:,:) - phyto3d_balinc(:,:,:,it) 
    25292718            ENDIF 
     
    25462735            it = jp_fabm_o2o 
    25472736#endif 
    2548             IF ( ln_phytobal ) THEN 
     2737            IF ( ALLOCATED(phyto2d_balinc) ) THEN 
    25492738               po2_bkginc(:,:,:) = po2_bkginc(:,:,:) - phyto2d_balinc(:,:,:,it) 
    25502739            ENDIF 
    2551             IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
     2740            IF ( ALLOCATED(phyto3d_balinc) ) THEN 
    25522741               po2_bkginc(:,:,:) = po2_bkginc(:,:,:) - phyto3d_balinc(:,:,:,it) 
    25532742            ENDIF 
  • branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90

    r12611 r13318  
    174174         &                 ln_slphydiainc, ln_slphynoninc, ln_spco2inc,    & 
    175175         &                 ln_sfco2inc, ln_plchltotinc, ln_pchltotinc,     & 
     176         &                 ln_plchldiainc, ln_plchlnaninc, ln_plchlpicinc, & 
     177         &                 ln_plchldininc,                                 &  
    176178         &                 ln_pno3inc, ln_psi4inc, ln_pdicinc, ln_palkinc, & 
    177179         &                 ln_pphinc, ln_po2inc, ln_ppo4inc,               & 
     
    259261         WRITE(numout,*) '      Logical switch for applying plchltot increments          ln_plchltotinc = ', ln_plchltotinc 
    260262         WRITE(numout,*) '      Logical switch for applying pchltot increments           ln_pchltotinc = ', ln_pchltotinc 
     263         WRITE(numout,*) '      Logical switch for applying plchldia increments          ln_plchldiainc = ', ln_plchldiainc 
     264         WRITE(numout,*) '      Logical switch for applying plchlnan increments          ln_plchlnaninc = ', ln_plchlnaninc 
     265         WRITE(numout,*) '      Logical switch for applying plchlpic increments          ln_plchlpicinc = ', ln_plchlpicinc 
     266         WRITE(numout,*) '      Logical switch for applying plchldin increments          ln_plchldininc = ', ln_plchldininc 
    261267         WRITE(numout,*) '      Logical switch for applying pno3 increments              ln_pno3inc = ', ln_pno3inc 
    262268         WRITE(numout,*) '      Logical switch for applying psi4 increments              ln_psi4inc = ', ln_psi4inc 
     
    310316         & ln_schltotinc  .OR. ln_slphytotinc .OR. ln_slphydiainc .OR. & 
    311317         & ln_slphynoninc .OR. ln_spco2inc    .OR. ln_sfco2inc    .OR. & 
    312          & ln_plchltotinc .OR. ln_pchltotinc  .OR. ln_pno3inc     .OR. & 
     318         & ln_plchltotinc .OR. ln_pchltotinc  .OR. ln_plchldiainc .OR. & 
     319         & ln_plchlnaninc .OR. ln_plchlpicinc .OR. ln_plchldininc .OR. & 
     320         & ln_pno3inc     .OR.                                         & 
    313321         & ln_psi4inc     .OR. ln_pdicinc     .OR. ln_palkinc     .OR. & 
    314322         & ln_pphinc      .OR. ln_po2inc      .OR. ln_ppo4inc ) THEN 
     
    14781486       
    14791487      ! Then chlorophyll profiles 
    1480       IF ( ln_plchltotinc .OR. ln_pchltotinc ) THEN 
     1488      IF ( ln_plchltotinc .OR. ln_pchltotinc  .OR. ln_plchldiainc .OR. & 
     1489         & ln_plchlnaninc .OR. ln_plchlpicinc .OR. ln_plchldininc ) THEN 
    14811490         CALL phyto3d_asm_inc( kt, ln_asmdin, ln_asmiau, icycper, wgtiau ) 
    14821491      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.