Ignore:
Timestamp:
2017-08-16T14:47:00+02:00 (3 years ago)
Author:
dford
Message:

Add more variables to assimilation background, so it includes all required elements of the background state.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GO6_package_asm_surf_bgc/NEMOGCM/NEMO/OPA_SRC/ASM/asmlogchlbal_medusa.F90

    r8436 r8440  
    2525   USE zdfmxl                              ! mixed layer depth 
    2626   USE iom                                 ! i/o 
    27    USE trc,           ONLY: trn, trb       ! MEDUSA variables 
    2827   USE sms_medusa                          ! MEDUSA parameters 
    2928   USE par_medusa                          ! MEDUSA parameters 
     
    7372      &                              pgrow_avg_bkg, ploss_avg_bkg,           & 
    7473      &                              phyt_avg_bkg, mld_max_bkg,              & 
    75       &                              logchl_balinc ) 
     74      &                              tracer_bkg, logchl_balinc ) 
    7675      !!--------------------------------------------------------------------------- 
    7776      !!                    ***  ROUTINE asm_logchl_bal_medusa  *** 
     
    9998      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj)           :: phyt_avg_bkg   ! Avg phyto 
    10099      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj)           :: mld_max_bkg    ! Max MLD 
     100      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpk,jptra) :: tracer_bkg     ! State variables 
    101101      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj,jpk,jptra) :: logchl_balinc  ! Balancing increments 
    102102      !! 
     
    136136      ! 3) Subtract background from analysis to get chl incs 
    137137      ! If k_maxchlinc > 0 then cap total absolute chlorophyll increment at that value 
    138       medusa_chl(:,:) = trb(:,:,1,jpchn) + trb(:,:,1,jpchd) 
     138      medusa_chl(:,:) = tracer_bkg(:,:,1,jpchn) + tracer_bkg(:,:,1,jpchd) 
    139139      DO jj = 1, jpj 
    140140         DO ji = 1, jpi 
     
    233233 
    234234         ! Set background state 
    235          bstate(:,:,:,i_tracer(1)) = trb(:,:,:,jpdin) 
    236          bstate(:,:,:,i_tracer(2)) = trb(:,:,:,jpphn) + trb(:,:,:,jpphd) 
    237          bstate(:,:,:,i_tracer(3)) = trb(:,:,:,jpzmi) + trb(:,:,:,jpzme) 
    238          bstate(:,:,:,i_tracer(4)) = trb(:,:,:,jpdet) 
    239          bstate(:,:,:,i_tracer(5)) = trb(:,:,:,jpdic) 
    240          bstate(:,:,:,i_tracer(6)) = trb(:,:,:,jpalk) 
     235         bstate(:,:,:,i_tracer(1)) = tracer_bkg(:,:,:,jpdin) 
     236         bstate(:,:,:,i_tracer(2)) = tracer_bkg(:,:,:,jpphn) + tracer_bkg(:,:,:,jpphd) 
     237         bstate(:,:,:,i_tracer(3)) = tracer_bkg(:,:,:,jpzmi) + tracer_bkg(:,:,:,jpzme) 
     238         bstate(:,:,:,i_tracer(4)) = tracer_bkg(:,:,:,jpdet) 
     239         bstate(:,:,:,i_tracer(5)) = tracer_bkg(:,:,:,jpdic) 
     240         bstate(:,:,:,i_tracer(6)) = tracer_bkg(:,:,:,jpalk) 
    241241 
    242242         ! Calculate carbon to chlorophyll ratio for combined phytoplankton 
    243243         ! and nitrogen to biomass equivalent for PZD 
    244244         ! Hardwire nitrogen mass to 14.01 for now as it doesn't seem to be set in MEDUSA 
    245          !cchl_p(:,:) = ( trb(:,:,1,jpchn) + trb(:,:,1,jpchd ) ) / & 
    246          !   &          ( ( trb(:,:,1,jpphn) * xthetapn ) + ( trb(:,:,1,jpphd) * xthetapd ) ) 
    247245         cchl_p(:,:) = 0.0 
    248246         DO jj = 1, jpj 
    249247            DO ji = 1, jpi 
    250                IF ( ( trb(ji,jj,1,jpchn) + trb(ji,jj,1,jpchd ) ) .GT. 0.0 ) THEN 
    251                   cchl_p(ji,jj) = ( ( trb(ji,jj,1,jpphn) * xthetapn ) + ( trb(ji,jj,1,jpphd) * xthetapd ) ) / & 
    252                      &            ( trb(ji,jj,1,jpchn) + trb(ji,jj,1,jpchd ) ) 
     248               IF ( ( tracer_bkg(ji,jj,1,jpchn) + tracer_bkg(ji,jj,1,jpchd ) ) .GT. 0.0 ) THEN 
     249                  cchl_p(ji,jj) = ( ( tracer_bkg(ji,jj,1,jpphn) * xthetapn ) + ( tracer_bkg(ji,jj,1,jpphd) * xthetapd ) ) / & 
     250                     &            ( tracer_bkg(ji,jj,1,jpchn) + tracer_bkg(ji,jj,1,jpchd ) ) 
    253251               ENDIF 
    254252            END DO 
     
    257255         n2be_z = 14.01 + ( xmassc * ( ( xthetazmi + xthetazme ) / 2.0 ) ) 
    258256         n2be_d = 14.01 + ( xmassc * xthetad ) 
    259           
    260          WRITE(numout,*) 'DAF: nproc, min/max cchl_p, min/max chl_inc = ', nproc, MINVAL(cchl_p), MAXVAL(cchl_p), MINVAL(chl_inc), MAXVAL(chl_inc) 
    261257 
    262258         ! Call nitrogen balancing routine 
     
    273269            &               diag_fulldepth_active, diag_fulldepth ) 
    274270          
    275          WRITE(numout,*) 'DAF: nproc, min/max outincs(phy)1,20 = ', nproc, MINVAL(outincs(:,:,1,i_tracer(2))), MAXVAL(outincs(:,:,1,i_tracer(2))), MINVAL(outincs(:,:,20,i_tracer(2))), MAXVAL(outincs(:,:,20,i_tracer(2))) 
    276  
    277271         ! Loop over each grid point partioning the increments 
    278272         logchl_balinc(:,:,:,:) = 0.0 
     
    281275               DO ji = 1, jpi 
    282276 
    283                   IF ( ( trb(ji,jj,jk,jpphn) > 0.0 ) .AND. ( trb(ji,jj,jk,jpphd) > 0.0 ) ) THEN 
     277                  IF ( ( tracer_bkg(ji,jj,jk,jpphn) > 0.0 ) .AND. ( tracer_bkg(ji,jj,jk,jpphd) > 0.0 ) ) THEN 
    284278                     ! Phytoplankton nitrogen and silicate split up based on existing ratios 
    285                      zfrac_phn = trb(ji,jj,jk,jpphn) / (trb(ji,jj,jk,jpphn) + trb(ji,jj,jk,jpphd)) 
     279                     zfrac_phn = tracer_bkg(ji,jj,jk,jpphn) / (tracer_bkg(ji,jj,jk,jpphn) + tracer_bkg(ji,jj,jk,jpphd)) 
    286280                     zfrac_phd = 1.0 - zfrac_phn 
    287                      zrat_pds_phd = trb(ji,jj,jk,jppds) / trb(ji,jj,jk,jpphd) 
     281                     zrat_pds_phd = tracer_bkg(ji,jj,jk,jppds) / tracer_bkg(ji,jj,jk,jpphd) 
    288282                     logchl_balinc(ji,jj,jk,jpphn) = outincs(ji,jj,jk,i_tracer(2)) * zfrac_phn 
    289283                     logchl_balinc(ji,jj,jk,jpphd) = outincs(ji,jj,jk,i_tracer(2)) * zfrac_phd 
     
    293287                     ! Not using chl_inc directly as it's only 2D 
    294288                     ! This method should give same results at surface as splitting chl_inc would 
    295                      zrat_chn_phn = trb(ji,jj,jk,jpchn) / trb(ji,jj,jk,jpphn) 
    296                      zrat_chd_phd = trb(ji,jj,jk,jpchd) / trb(ji,jj,jk,jpphd) 
     289                     zrat_chn_phn = tracer_bkg(ji,jj,jk,jpchn) / tracer_bkg(ji,jj,jk,jpphn) 
     290                     zrat_chd_phd = tracer_bkg(ji,jj,jk,jpchd) / tracer_bkg(ji,jj,jk,jpphd) 
    297291                     logchl_balinc(ji,jj,jk,jpchn) = logchl_balinc(ji,jj,jk,jpphn) * zrat_chn_phn 
    298292                     logchl_balinc(ji,jj,jk,jpchd) = logchl_balinc(ji,jj,jk,jpphd) * zrat_chd_phd 
    299293                  ENDIF 
    300294 
    301                   IF ( ( trb(ji,jj,jk,jpzmi) > 0.0 ) .AND. ( trb(ji,jj,jk,jpzme) > 0.0 ) ) THEN 
     295                  IF ( ( tracer_bkg(ji,jj,jk,jpzmi) > 0.0 ) .AND. ( tracer_bkg(ji,jj,jk,jpzme) > 0.0 ) ) THEN 
    302296                     ! Zooplankton nitrogen split up based on existing ratios 
    303                      zfrac_zmi = trb(ji,jj,jk,jpzmi) / (trb(ji,jj,jk,jpzmi) + trb(ji,jj,jk,jpzme)) 
     297                     zfrac_zmi = tracer_bkg(ji,jj,jk,jpzmi) / (tracer_bkg(ji,jj,jk,jpzmi) + tracer_bkg(ji,jj,jk,jpzme)) 
    304298                     zfrac_zme = 1.0 - zfrac_zmi 
    305299                     logchl_balinc(ji,jj,jk,jpzmi) = outincs(ji,jj,jk,i_tracer(3)) * zfrac_zmi 
     
    320314 
    321315                  ! Remove diatom silicate increment from nutrient silicate to conserve mass 
    322                   IF ( ( trb(ji,jj,jk,jpsil) - logchl_balinc(ji,jj,jk,jppds) ) > 0.0 ) THEN 
     316                  IF ( ( tracer_bkg(ji,jj,jk,jpsil) - logchl_balinc(ji,jj,jk,jppds) ) > 0.0 ) THEN 
    323317                     logchl_balinc(ji,jj,jk,jpsil) = logchl_balinc(ji,jj,jk,jppds) * (-1.0) 
    324318                  ENDIF 
    325319 
    326                   IF ( ( trb(ji,jj,jk,jpdet) > 0.0 ) .AND. ( trb(ji,jj,jk,jpdtc) > 0.0 ) ) THEN 
     320                  IF ( ( tracer_bkg(ji,jj,jk,jpdet) > 0.0 ) .AND. ( tracer_bkg(ji,jj,jk,jpdtc) > 0.0 ) ) THEN 
    327321                     ! Carbon detritus based on existing ratios 
    328                      zrat_dtc_det = trb(ji,jj,jk,jpdtc) / trb(ji,jj,jk,jpdet) 
     322                     zrat_dtc_det = tracer_bkg(ji,jj,jk,jpdtc) / tracer_bkg(ji,jj,jk,jpdet) 
    329323                     logchl_balinc(ji,jj,jk,jpdtc) = logchl_balinc(ji,jj,jk,jpdet) * zrat_dtc_det 
    330324                  ENDIF 
     
    348342            DO ji = 1, jpi 
    349343               IF ( medusa_chl(ji,jj) > 0.0 ) THEN 
    350                   zfrac_chn = trb(ji,jj,1,jpchn) / medusa_chl(ji,jj) 
     344                  zfrac_chn = tracer_bkg(ji,jj,1,jpchn) / medusa_chl(ji,jj) 
    351345                  zfrac_chd = 1.0 - zfrac_chn 
    352346                  logchl_balinc(ji,jj,1,jpchn) = chl_inc(ji,jj) * zfrac_chn 
     
    402396CONTAINS 
    403397   SUBROUTINE asm_logchl_bal_medusa( logchl_bkginc, aincper, mld_choice_bgc, & 
    404       &                              k_maxchlinc, logchl_balinc ) 
     398      &                              k_maxchlinc, ld_logchlbal,              & 
     399      &                              pgrow_avg_bkg, ploss_avg_bkg,           & 
     400      &                              phyt_avg_bkg, mld_max_bkg,              & 
     401      &                              tracer_bkg, logchl_balinc ) 
    405402      REAL    :: logchl_bkginc(:,:) 
    406403      REAL    :: aincper 
    407404      INTEGER :: mld_choice_bgc 
    408405      REAL    :: k_maxchlinc 
    409       REAL(   :: logchl_balinc(:,:,:,:) 
     406      LOGICAL :: ld_logchlbal 
     407      REAL    :: pgrow_avg_bkg(:,:) 
     408      REAL    :: ploss_avg_bkg(:,:) 
     409      REAL    :: phyt_avg_bkg(:,:) 
     410      REAL    :: mld_max_bkg(:,:) 
     411      REAL    :: tracer_bkg(:,:,:,:) 
     412      REAL    :: logchl_balinc(:,:,:,:) 
    410413      WRITE(*,*) 'asm_logchl_bal_medusa: You should not have seen this print! error?' 
    411414   END SUBROUTINE asm_logchl_bal_medusa 
Note: See TracChangeset for help on using the changeset viewer.