Changeset 9157


Ignore:
Timestamp:
2017-12-21T16:51:24+01:00 (3 years ago)
Author:
jpalmier
Message:

JPALM - merge GO6 branch

Location:
branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/CONFIG/SHARED/field_def_bgc.xml

    r8308 r9157  
    448448       <field id= "DMS_HALL"   long_name="DMS Surface Concentration, Halloran"       unit="nmol/L"      /> 
    449449       <field id= "DMS_ANDM"   long_name="DMS Surface Concentration, Anderson modif" unit="nmol/L"      /> 
     450       <field id= "CHL_MLD"    long_name="MLD averaged Chlorophyll"                  unit="mg Chl/m3"   /> 
     451       <field id= "CHL_CPL"    long_name="Scaled Surf or MLD Chlorophyll to UM"      unit="kg Chl/m3"   /> 
    450452       <field id= "ATM_XCO2"   long_name="Atmospheric xCO2"                          unit="ppm"         /> 
    451453       <field id= "OCN_FCO2"   long_name="Surface ocean fCO2"                        unit="uatm"        /> 
     
    702704      <field field_ref= "OCN_CO3"    name="OCN_CO3"    /> 
    703705      <field field_ref= "CO2FLUX"    name="CO2FLUX"    /> 
    704       <field field_ref= "FGCO2"      name="FGCO2"      /> 
    705706      <field field_ref= "OM_CAL"     name="OM_CAL"     /> 
    706707      <field field_ref= "OM_ARG"     name="OM_ARG"     /> 
     
    784785      <field field_ref= "CO2STARAIR" name="CO2STARAIR" /> 
    785786      <field field_ref= "OCN_DPCO2"  name="OCN_DPCO2"  /> 
     787      <field field_ref= "CHL_MLD"    name="CHL_MLD"    /> 
     788    </field_group> 
     789 
     790    <field_group id="groupMEDUSA_cpl" > 
     791      <field field_ref= "CHL_CPL"    name="CHL_CPL"    /> 
     792      <field field_ref= "FGCO2"      name="FGCO2_CPL"  /> 
     793      <field field_ref= "DMS_SURF"   name="DMS_CPL"    /> 
     794      <field field_ref= "ATM_XCO2"   name="AXCO2_CPL"  /> 
     795      <field field_ref= "AEOLIAN"    name="DUST_CPL"   /> 
    786796    </field_group> 
    787797 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/OPA_SRC/DIA/diaptr.F90

    r7747 r9157  
    8484      REAL(wp), DIMENSION(jpi,jpj)     ::  z2d   ! 2D workspace 
    8585      REAL(wp), DIMENSION(jpi,jpj,jpk) ::  z3d   ! 3D workspace 
     86      REAL(wp), DIMENSION(jpi,jpj,jpk) ::  zvn   ! 3D workspace 
    8687      REAL(wp), DIMENSION(jpi,jpj,jpk) ::  zmask   ! 3D workspace 
    8788      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts) ::  zts   ! 3D workspace 
     
    9394      REAL(wp), DIMENSION(jpj,jpk,nptr) ::   sjk  , r1_sjk ! i-mean i-k-surface and its inverse 
    9495      REAL(wp), DIMENSION(jpj,jpk,nptr) ::   v_msf, sn_jk  , tn_jk ! i-mean T and S, j-Stream-Function 
    95       REAL(wp), DIMENSION(jpi,jpj,jpk) ::  zvn   ! 3D workspace 
    9696 
    9797 
     
    130130            zmask(:,:,:) = 0._wp 
    131131            zts(:,:,:,:) = 0._wp 
    132             zvn(:,:,:) = 0._wp 
    133132            DO jk = 1, jpkm1 
    134133               DO jj = 1, jpjm1 
     
    138137                     zts(ji,jj,jk,jp_tem) = (tsn(ji,jj,jk,jp_tem)+tsn(ji,jj+1,jk,jp_tem)) * 0.5 * zvfc  !Tracers averaged onto V grid 
    139138                     zts(ji,jj,jk,jp_sal) = (tsn(ji,jj,jk,jp_sal)+tsn(ji,jj+1,jk,jp_sal)) * 0.5 * zvfc 
    140                      zvn(ji,jj,jk)        = vn(ji,jj,jk)         * zvfc 
    141139                  ENDDO 
    142140               ENDDO 
     
    151149             tn_jk(:,:,1) = ptr_sjk( zts(:,:,:,jp_tem) ) * r1_sjk(:,:,1) 
    152150             sn_jk(:,:,1) = ptr_sjk( zts(:,:,:,jp_sal) ) * r1_sjk(:,:,1) 
    153              v_msf(:,:,1) = ptr_sjk( zvn(:,:,:) ) 
     151             v_msf(:,:,1) = ptr_sjk( pvtr(:,:,:) ) 
    154152 
    155153             htr_ove(:,1) = SUM( v_msf(:,:,1)*tn_jk(:,:,1) ,2 ) 
     
    177175                    tn_jk(:,:,jn) = ptr_sjk( zts(:,:,:,jp_tem), btmsk(:,:,jn) ) * r1_sjk(:,:,jn) 
    178176                    sn_jk(:,:,jn) = ptr_sjk( zts(:,:,:,jp_sal), btmsk(:,:,jn) ) * r1_sjk(:,:,jn) 
    179                     v_msf(:,:,jn) = ptr_sjk( zvn(:,:,:), btmsk(:,:,jn) )  
     177                    v_msf(:,:,jn) = ptr_sjk( pvtr(:,:,:), btmsk(:,:,jn) )  
    180178                    htr_ove(:,jn) = SUM( v_msf(:,:,jn)*tn_jk(:,:,jn) ,2 ) 
    181179                    str_ove(:,jn) = SUM( v_msf(:,:,jn)*sn_jk(:,:,jn) ,2 ) 
     
    202200             WHERE( sjk(:,1,1) /= 0._wp )   r1_sjk(:,1,1) = 1._wp / sjk(:,1,1) 
    203201             
    204             vsum = ptr_sj( zvn(:,:,:), btmsk(:,:,1)) 
     202            vsum = ptr_sj( pvtr(:,:,:), btmsk(:,:,1)) 
    205203            tssum(:,jp_tem) = ptr_sj( zts(:,:,:,jp_tem), btmsk(:,:,1) ) 
    206204            tssum(:,jp_sal) = ptr_sj( zts(:,:,:,jp_sal), btmsk(:,:,1) ) 
     
    224222                    r1_sjk(:,1,jn) = 0._wp 
    225223                    WHERE( sjk(:,1,jn) /= 0._wp )   r1_sjk(:,1,jn) = 1._wp / sjk(:,1,jn) 
    226                     vsum = ptr_sj( zvn(:,:,:), btmsk(:,:,jn)) 
     224                    vsum = ptr_sj( pvtr(:,:,:), btmsk(:,:,jn)) 
    227225                    tssum(:,jp_tem) = ptr_sj( zts(:,:,:,jp_tem), btmsk(:,:,jn) ) 
    228226                    tssum(:,jp_sal) = ptr_sj( zts(:,:,:,jp_sal), btmsk(:,:,jn) ) 
     
    408406            ENDIF 
    409407            IF( iom_use("zomsfeivglo") ) THEN 
    410                z3d(1,:,:) = ptr_sjk( v_eiv(:,:,:) )  ! zonal cumulative effective transport 
     408               DO jk=1,jpk 
     409                  DO jj=1,jpj 
     410                     DO ji=1,jpi 
     411                        zvn(ji,jj,jk) = v_eiv(ji,jj,jk) * fse3v(ji,jj,jk) * e1v(ji,jj) 
     412                     ENDDO 
     413                  ENDDO 
     414               ENDDO 
     415               z3d(1,:,:) = ptr_sjk( zvn(:,:,:) )  ! zonal cumulative effective transport 
    411416               DO jk = jpkm1,1,-1 
    412417                 z3d(1,:,jk) = z3d(1,:,jk+1) - z3d(1,:,jk)   ! effective j-Stream-Function (MSF) 
     
    419424               IF( ln_subbas ) THEN 
    420425                  DO jn = 2, nptr                                    ! by sub-basins 
    421                      z3d(1,:,:) =  ptr_sjk( v_eiv(:,:,:), btmsk(:,:,jn) )  
     426                     z3d(1,:,:) =  ptr_sjk( zvn(:,:,:), btmsk(:,:,jn) )  
    422427                     DO jk = jpkm1,1,-1 
    423428                        z3d(1,:,jk) = z3d(1,:,jk+1) - z3d(1,:,jk)    ! effective j-Stream-Function (MSF) 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90

    r7771 r9157  
    549549      zmbk(:,:) = REAL( mbkv_d(:,:), wp )   ;   CALL lbc_lnk(zmbk,'V',1.)   ;   mbkv_d(:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
    550550 
    551                                         !* sign of grad(H) at u- and v-points 
    552       mgrhu(jpi,:) = 0   ;   mgrhu(:,jpj) = 0   ;   mgrhv(jpi,:) = 0   ;   mgrhv(:,jpj) = 0 
     551      !! AXY (16/08/17): remove the following per George and Andrew bug-hunt 
     552      !!                                   !* sign of grad(H) at u- and v-points 
     553      !! mgrhu(jpi,:) = 0   ;   mgrhu(:,jpj) = 0   ;   mgrhv(jpi,:) = 0   ;   mgrhv(:,jpj) = 0 
     554      !! DO jj = 1, jpjm1 
     555      !!    DO ji = 1, jpim1 
     556      !!       mgrhu(ji,jj) = INT(  SIGN( 1.e0, gdept_0(ji+1,jj,mbkt(ji+1,jj)) - gdept_0(ji,jj,mbkt(ji,jj)) )  ) 
     557      !!       mgrhv(ji,jj) = INT(  SIGN( 1.e0, gdept_0(ji,jj+1,mbkt(ji,jj+1)) - gdept_0(ji,jj,mbkt(ji,jj)) )  ) 
     558      !!    END DO 
     559      !! END DO 
     560 
     561      !! AXY (16/08/17): add the following replacement per George and Andrew bug-hunt 
     562                                        !* sign of grad(H) at u- and  v-points; zero if grad(H) = 0 
     563      mgrhu(:,:) = 0   ;   mgrhv(:,:) = 0 
    553564      DO jj = 1, jpjm1 
    554565         DO ji = 1, jpim1 
    555             mgrhu(ji,jj) = INT(  SIGN( 1.e0, gdept_0(ji+1,jj,mbkt(ji+1,jj)) - gdept_0(ji,jj,mbkt(ji,jj)) )  ) 
    556             mgrhv(ji,jj) = INT(  SIGN( 1.e0, gdept_0(ji,jj+1,mbkt(ji,jj+1)) - gdept_0(ji,jj,mbkt(ji,jj)) )  ) 
     566#if defined key_bbl_old_nonconserve 
     567             ! This key allows old (non conservative version) to be used for continuity of results 
     568             mgrhu(ji,jj) = INT(  SIGN( 1.e0, gdept_0(ji+1,jj,mbkt(ji+1,jj)) - gdept_0(ji,jj,mbkt(ji,jj)) )  ) 
     569             mgrhv(ji,jj) = INT(  SIGN( 1.e0, gdept_0(ji,jj+1,mbkt(ji,jj+1)) - gdept_0(ji,jj,mbkt(ji,jj)) )  ) 
     570#else 
     571            IF( gdept_0(ji+1,jj,mbkt(ji+1,jj)) - gdept_0(ji,jj,mbkt(ji,jj)) /= 0._wp ) THEN 
     572               mgrhu(ji,jj) = INT(  SIGN( 1.e0, & 
     573               gdept_0(ji+1,jj,mbkt(ji+1,jj)) - gdept_0(ji,jj,mbkt(ji,jj)) )  ) 
     574            ENDIF 
     575            !      
     576            IF( gdept_0(ji,jj+1,mbkt(ji,jj+1)) - gdept_0(ji,jj,mbkt(ji,jj)) /= 0._wp ) THEN 
     577               mgrhv(ji,jj) = INT(  SIGN( 1.e0, & 
     578               gdept_0(ji,jj+1,mbkt(ji,jj+1)) - gdept_0(ji,jj,mbkt(ji,jj)) )  ) 
     579            ENDIF 
     580#endif 
    557581         END DO 
    558582      END DO 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/air_sea.F90

    r9073 r9157  
    66   !! History : 
    77   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90 
     8   !!   -   ! 2017-08 (A. Yool)            Add air-sea flux kill switch 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_medusa 
     
    372373         ENDDO 
    373374      ENDDO 
     375#  endif 
     376 
     377#  if defined key_axy_killco2flux 
     378      !! AXY (18/08/17): single kill switch on air-sea CO2 flux for budget checking 
     379      f_co2flux(:,:) = 0. 
    374380#  endif 
    375381 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_diag_slice.F90

    r9070 r9157  
    3939# endif 
    4040      USE lbclnk,            ONLY: lbc_lnk 
    41       USE trc,               ONLY: trn 
    42       USE oce,               ONLY: CO2Flux_out_cpl, DMS_out_cpl, chloro_out_cpl 
     41      USE oce,               ONLY: CO2Flux_out_cpl, DMS_out_cpl 
    4342      USE par_oce,           ONLY: jpi, jpj 
    4443      USE sbc_oce,           ONLY: lk_oasis, qsr, wndm 
     
    4847                                   jdms, ocal_ccd, xpar, xze,              & 
    4948                                   zb_co2_flx, zb_dms_srf,                 & 
    50                                    zn_co2_flx, zn_dms_srf, zn_chl_srf 
     49                                   zn_co2_flx, zn_dms_srf 
    5150      USE trc,               ONLY: med_diag 
    5251 
     
    6665      !! 
    6766      IF (jk.eq.1) THEN 
    68          !! JPALM -- 02-06-2017 -- 
    69          !! add Chl surf coupling 
    70          !! no need to output, just pass to cpl var 
    71          IF (lk_oasis) THEN 
    72             zn_chl_srf(:,:) = (trn(:,:,1,jpchd) + trn(:,:,1,jpchn)) * 1.0E-6  !! surf Chl in Kg-chl/m3 as needed for cpl 
    73             chloro_out_cpl(:,:) = zn_chl_srf(:,:)        !! Coupling Chl 
    74          END IF 
    7567         IF( med_diag%MED_QSR%dgsave ) THEN 
    7668            CALL iom_put( "MED_QSR"  , qsr ) ! 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90

    r9070 r9157  
    66   !! History : 
    77   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90 
     8   !!   -   ! 2017-08 (A. Yool)            Amend bethic reservoir updating 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_medusa 
     
    3839# endif 
    3940      USE lbclnk,            ONLY: lbc_lnk 
     41      USE oce,               ONLY: chloro_out_cpl  
    4042      USE par_medusa,        ONLY: jp_medusa_2d, jp_medusa_3d,          & 
    41                                    jp_medusa_trd 
     43                                   jp_medusa_trd, jpchd, jpchn 
    4244      USE par_oce,           ONLY: jpi, jpim1, jpj, jpjm1, jpk 
    4345      USE phycst,            ONLY: rsmall 
     46      USE sbc_oce,           ONLY: lk_oasis 
    4447      USE sms_medusa,        ONLY: jinorgben, jorgben,                  & 
    4548                                   f3_co3, f3_h2co3, f3_hco3,           & 
     
    5053                                   zb_sed_n, zb_sed_si,                 & 
    5154                                   zn_sed_c, zn_sed_ca, zn_sed_fe,      & 
    52                                    zn_sed_n, zn_sed_si 
    53       USE trc,               ONLY: med_diag, nittrc000  
     55                                   zn_sed_n, zn_sed_si, zn_chl_srf,     & 
     56                                   scl_chl, chl_out 
     57      USE trc,               ONLY: med_diag, nittrc000, trn  
    5458      USE trcnam_trp,        ONLY: ln_trcadv_cen2, ln_trcadv_tvd 
    5559  
     
    6266      REAL(wp) :: fq0,fq1,fq2,fq3 
    6367 
     68# if defined key_roam                      
     69      !!---------------------------------------------------------------------- 
     70      !! AXY (09/08/17): fix benthic submodel 
    6471      !!---------------------------------------------------------------------- 
    6572      !! Process benthic in/out fluxes 
    6673      !! These can be handled outside of the 3D calculations since the 
    67       !! benthic pools (and fluxes) are 2D in nature; this code is 
    68       !! (shamelessly) borrowed from corresponding code in the LOBSTER 
    69       !! model 
     74      !! benthic pools (and fluxes) are 2D in nature; this code was 
     75      !! developed with help from George Nurser (NOC); it cannot be run 
     76      !! in a configuration with variable time-stepping with depth 
    7077      !!---------------------------------------------------------------------- 
    7178      !! 
    72       !! IF(lwp) WRITE(numout,*) 'AXY: rdt = ', rdt 
     79      !! time-step calculation 
    7380      if (jorgben.eq.1) then 
    74          za_sed_n(:,:)  = zn_sed_n(:,:)  +                                 &  
    75                           ( f_sbenin_n(:,:)  + f_fbenin_n(:,:)  -          & 
    76                             f_benout_n(:,:)  ) * (rdt / 86400.) 
     81         za_sed_n(:,:)  = zb_sed_n(:,:)  + ((2. * (rdt / 86400.)) * & 
     82                          ( f_sbenin_n(:,:)  + f_fbenin_n(:,:)  - f_benout_n(:,:)  )) 
     83         za_sed_fe(:,:) = zb_sed_fe(:,:) + ((2. * (rdt / 86400.)) * & 
     84                          ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) - f_benout_fe(:,:) )) 
     85         za_sed_c(:,:)  = zb_sed_c(:,:)  + ((2. * (rdt / 86400.)) * & 
     86                          ( f_sbenin_c(:,:)  + f_fbenin_c(:,:)  - f_benout_c(:,:)  )) 
     87      endif 
     88      if (jinorgben.eq.1) then 
     89         za_sed_si(:,:) = zb_sed_si(:,:) + ((2. * (rdt / 86400.)) * & 
     90                          ( f_fbenin_si(:,:) - f_benout_si(:,:) )) 
     91         za_sed_ca(:,:) = zb_sed_ca(:,:) + ((2. * (rdt / 86400.)) * & 
     92                          ( f_fbenin_ca(:,:) - f_benout_ca(:,:) )) 
     93      endif 
     94      !! 
     95      !! time-level calculation 
     96      if (jorgben.eq.1) then 
     97         zb_sed_n(:,:)  = zn_sed_n(:,:)  + (atfp * & 
     98                          ( za_sed_n(:,:)  - (2. * zn_sed_n(:,:))  + zb_sed_n(:,:)  )) 
    7799         zn_sed_n(:,:)  = za_sed_n(:,:) 
    78          !! 
    79          za_sed_fe(:,:) = zn_sed_fe(:,:) +                                 & 
    80                           ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) -          & 
    81                             f_benout_fe(:,:) ) * (rdt / 86400.) 
     100         zb_sed_fe(:,:) = zn_sed_fe(:,:) + (atfp * & 
     101                          ( za_sed_fe(:,:) - (2. * zn_sed_fe(:,:)) + zb_sed_fe(:,:) )) 
    82102         zn_sed_fe(:,:) = za_sed_fe(:,:) 
    83          !! 
    84          za_sed_c(:,:)  = zn_sed_c(:,:)  +                                 & 
    85                           ( f_sbenin_c(:,:)  + f_fbenin_c(:,:)  -          & 
    86                             f_benout_c(:,:)  ) * (rdt / 86400.) 
     103         zb_sed_c(:,:)  = zn_sed_c(:,:)  + (atfp * & 
     104                          ( za_sed_c(:,:)  - (2. * zn_sed_c(:,:))  + zb_sed_c(:,:)  )) 
    87105         zn_sed_c(:,:)  = za_sed_c(:,:) 
    88106      endif 
    89107      if (jinorgben.eq.1) then 
    90          za_sed_si(:,:) = zn_sed_si(:,:) +                                 &  
    91                           ( f_fbenin_si(:,:) - f_benout_si(:,:) ) *        & 
    92                           (rdt / 86400.) 
     108         zb_sed_si(:,:) = zn_sed_si(:,:) + (atfp * & 
     109                          ( za_sed_si(:,:) - (2. * zn_sed_si(:,:)) + zb_sed_si(:,:) )) 
    93110         zn_sed_si(:,:) = za_sed_si(:,:) 
    94          !! 
    95          za_sed_ca(:,:) = zn_sed_ca(:,:) +                                 & 
    96                           ( f_fbenin_ca(:,:) - f_benout_ca(:,:) ) *        & 
    97                           (rdt / 86400.) 
     111         zb_sed_ca(:,:) = zn_sed_ca(:,:) + (atfp * & 
     112                          ( za_sed_ca(:,:) - (2. * zn_sed_ca(:,:)) + zb_sed_ca(:,:) )) 
    98113         zn_sed_ca(:,:) = za_sed_ca(:,:) 
    99114      endif 
    100       !! 
    101       if (ibenthic.eq.2) then 
    102          !! The code below (in this if ... then ... endif loop) is 
    103          !! effectively commented out because it does not work as  
    104          !! anticipated; it can be deleted at a later date 
    105          if (jorgben.eq.1) then 
    106             za_sed_n(:,:)  = ( f_sbenin_n(:,:)  + f_fbenin_n(:,:)  -       & 
    107                                f_benout_n(:,:)  ) * rdt 
    108             za_sed_fe(:,:) = ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) -       & 
    109                                f_benout_fe(:,:) ) * rdt 
    110             za_sed_c(:,:)  = ( f_sbenin_c(:,:)  + f_fbenin_c(:,:)  -       & 
    111                                f_benout_c(:,:)  ) * rdt 
    112          endif 
    113          if (jinorgben.eq.1) then 
    114             za_sed_si(:,:) = ( f_fbenin_si(:,:) - f_benout_si(:,:) ) * rdt 
    115             za_sed_ca(:,:) = ( f_fbenin_ca(:,:) - f_benout_ca(:,:) ) * rdt 
    116          endif 
    117          !! 
    118          !! Leap-frog scheme - only in explicit case, otherwise the  
    119          !! time stepping is already being done in trczdf 
    120          !! IF( l_trczdf_exp .AND. (ln_trcadv_cen2 .OR. ln_trcadv_tvd) ) THEN 
    121          !!    zfact = 2. * rdttra(jk) * FLOAT( ndttrc ) 
    122          !!    IF( neuler == 0 .AND. kt == nittrc000 )  zfact = rdttra(jk) *  
    123          !!                                             FLOAT(ndttrc) 
    124          !!    if (jorgben.eq.1) then 
    125          !!       za_sed_n(:,:)  = zb_sed_n(:,:)  + ( zfact * za_sed_n(:,:)  ) 
    126          !!      za_sed_fe(:,:) = zb_sed_fe(:,:) + ( zfact * za_sed_fe(:,:) ) 
    127          !!       za_sed_c(:,:)  = zb_sed_c(:,:)  + ( zfact * za_sed_c(:,:)  ) 
    128          !!    endif 
    129          !!    if (jinorgben.eq.1) then 
    130          !!       za_sed_si(:,:) = zb_sed_si(:,:) + ( zfact * za_sed_si(:,:) ) 
    131          !!       za_sed_ca(:,:) = zb_sed_ca(:,:) + ( zfact * za_sed_ca(:,:) ) 
    132          !!    endif 
    133          !! ENDIF 
    134          !!  
    135          !! Time filter and swap of arrays 
    136          IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd  ) THEN ! centred or tvd scheme 
    137             IF( neuler == 0 .AND. kt == nittrc000 ) THEN 
    138                if (jorgben.eq.1) then 
    139                   zb_sed_n(:,:)  = zn_sed_n(:,:) 
    140                   zn_sed_n(:,:)  = za_sed_n(:,:) 
    141                   za_sed_n(:,:)  = 0.0 
    142                   !! 
    143                   zb_sed_fe(:,:) = zn_sed_fe(:,:) 
    144                   zn_sed_fe(:,:) = za_sed_fe(:,:) 
    145                   za_sed_fe(:,:) = 0.0 
    146                   !! 
    147                   zb_sed_c(:,:)  = zn_sed_c(:,:) 
    148                   zn_sed_c(:,:)  = za_sed_c(:,:) 
    149                   za_sed_c(:,:)  = 0.0 
    150                endif 
    151                if (jinorgben.eq.1) then 
    152                   zb_sed_si(:,:) = zn_sed_si(:,:) 
    153                   zn_sed_si(:,:) = za_sed_si(:,:) 
    154                   za_sed_si(:,:) = 0.0 
    155                   !! 
    156                   zb_sed_ca(:,:) = zn_sed_ca(:,:) 
    157                   zn_sed_ca(:,:) = za_sed_ca(:,:) 
    158                   za_sed_ca(:,:) = 0.0 
    159                endif 
    160             ELSE 
    161                if (jorgben.eq.1) then 
    162                   zb_sed_n(:,:)  = (atfp  *                                 & 
    163                                     ( zb_sed_n(:,:)  + za_sed_n(:,:)  )) +  & 
    164                                       (atfp1 * zn_sed_n(:,:) ) 
    165                   zn_sed_n(:,:)  = za_sed_n(:,:) 
    166                   za_sed_n(:,:)  = 0.0 
    167                   !! 
    168                   zb_sed_fe(:,:) = (atfp  *                                 & 
    169                                     ( zb_sed_fe(:,:) + za_sed_fe(:,:) )) +  & 
    170                                       (atfp1 * zn_sed_fe(:,:)) 
    171                   zn_sed_fe(:,:) = za_sed_fe(:,:) 
    172                   za_sed_fe(:,:) = 0.0 
    173                   !! 
    174                   zb_sed_c(:,:)  = (atfp  *                                 & 
    175                                     ( zb_sed_c(:,:)  + za_sed_c(:,:)  )) +  & 
    176                                       (atfp1 * zn_sed_c(:,:) ) 
    177                   zn_sed_c(:,:)  = za_sed_c(:,:) 
    178                   za_sed_c(:,:)  = 0.0 
    179                endif 
    180                if (jinorgben.eq.1) then 
    181                   zb_sed_si(:,:) = (atfp  *                                 & 
    182                                     ( zb_sed_si(:,:) + za_sed_si(:,:) )) +  & 
    183                                       (atfp1 * zn_sed_si(:,:)) 
    184                   zn_sed_si(:,:) = za_sed_si(:,:) 
    185                   za_sed_si(:,:) = 0.0 
    186                   !! 
    187                   zb_sed_ca(:,:) = (atfp  *                                 & 
    188                                     ( zb_sed_ca(:,:) + za_sed_ca(:,:) )) +  & 
    189                                       (atfp1 * zn_sed_ca(:,:)) 
    190                   zn_sed_ca(:,:) = za_sed_ca(:,:) 
    191                   za_sed_ca(:,:) = 0.0 
    192                endif 
    193             ENDIF 
    194          ELSE                   !  case of smolar scheme or muscl 
    195             if (jorgben.eq.1) then 
    196                zb_sed_n(:,:)  = za_sed_n(:,:) 
    197                zn_sed_n(:,:)  = za_sed_n(:,:) 
    198                za_sed_n(:,:)  = 0.0 
    199                !! 
    200                zb_sed_fe(:,:) = za_sed_fe(:,:) 
    201                zn_sed_fe(:,:) = za_sed_fe(:,:) 
    202                za_sed_fe(:,:) = 0.0 
    203                !! 
    204                zb_sed_c(:,:)  = za_sed_c(:,:) 
    205                zn_sed_c(:,:)  = za_sed_c(:,:) 
    206                za_sed_c(:,:)  = 0.0 
    207             endif 
    208             if (jinorgben.eq.1) then 
    209                zb_sed_si(:,:) = za_sed_si(:,:) 
    210                zn_sed_si(:,:) = za_sed_si(:,:) 
    211                za_sed_si(:,:) = 0.0 
    212                !! 
    213                zb_sed_ca(:,:) = za_sed_ca(:,:) 
    214                zn_sed_ca(:,:) = za_sed_ca(:,:) 
    215                za_sed_ca(:,:) = 0.0 
    216             endif 
    217          ENDIF 
    218       endif 
     115# endif       
    219116 
    220117#  if defined key_debug_medusa 
     
    253150                  fq1 = f_sbenin_n(ji,jj) + f_fbenin_n(ji,jj) 
    254151                  fq2 = fq0 + fq1 
    255                   IF (lwp) write (numout,'(a,2i3,a,3f15.10)')               & 
    256                      'AXY N   cons: (i,j)=',ji,jj,', (flx,ben,err)=',      & 
    257                      fq0,fq1,fq2 
     152                  fq3 = f_benout_n(ji,jj) 
     153                  if (lwp) write (numout,'a,2i3,a,4f15,5)')                   & 
     154                     'AXY N   cons: (i,j)=',ji,jj,', (flx,ben,err,out)=',      & 
     155                     fq0,fq1,fq2,fq3 
    258156               ENDIF 
    259157            ENDDO 
     
    266164                  fq1 = f_fbenin_si(ji,jj) 
    267165                  fq2 = fq0 + fq1 
    268                   IF (lwp) write (numout,'(a,2i3,a,3f15.10)')               & 
    269                      'AXY Si  cons: (i,j)=',ji,jj,', (flx,ben,err)=',     & 
    270                      fq0,fq1,fq2 
     166                  fq3 = f_benout_si(ji,jj) 
     167                  if (lwp) write (numout,'a,2i3,a,4f15,5)')                   & 
     168                     'AXY Si  cons: (i,j)=',ji,jj,', (flx,ben,err,out)=',     & 
     169                     fq0,fq1,fq2,fq3 
    271170               ENDIF 
    272171            ENDDO 
     
    278177                  fq0 = fflx_c(ji,jj) 
    279178                  fq1 = f_sbenin_c(ji,jj) + f_fbenin_c(ji,jj) + f_fbenin_ca(ji,jj) 
    280                   fq2 = f_co2flux(ji,jj) * e3t_n(ji,jj,1) 
     179                  fq2 = f_co2flux(ji,jj) * fse3t(ji,jj,1) 
    281180                  fq3 = fq0 + fq1 
    282                   IF (lwp) write (numout,'(a,2i3,a,4f15.10)')               & 
    283                     'AXY C   cons: (i,j)=',ji,jj,', (flx,ben,asf,err)=',  & 
    284                     fq0,fq1,fq2,fq3 
    285                ENDIF 
    286             ENDDO 
    287          ENDDO    
    288          !! alkalinity 
    289          DO jj = 2,jpjm1 
    290             DO ji = 2,jpim1 
    291                if (tmask(ji,jj,1) == 1) then 
    292                   fq0 = fflx_a(ji,jj) 
    293                   fq1 = 2.0 * f_fbenin_ca(ji,jj) 
    294                   fq2 = fq0 + fq1 
    295                   IF (lwp) write (numout,'(a,2i3,a,3f15.10)')               & 
    296                      'AXY alk cons: (i,j)=',ji,jj,', (flx,ben,err)=',     & 
    297                      fq0,fq1,fq2 
     181                  fq4 = f_benout_c(ji,jj) + f_benout_ca(ji,jj) 
     182                  if (lwp) write (numout,'a,2i3,a,5f15,5)')                   & 
     183                     'AXY C   cons: (i,j)=',ji,jj,', (flx,ben,asf,err,out)=', & 
     184                     fq0,fq1,fq2,fq3,fq4 
     185                ENDIF 
     186             ENDDO 
     187          ENDDO    
     188          !! alkalinity 
     189          DO jj = 2,jpjm1 
     190             DO ji = 2,jpim1 
     191                if (tmask(ji,jj,1) == 1) then 
     192                   fq0 = fflx_a(ji,jj) 
     193                   fq1 = 2.0 * f_fbenin_ca(ji,jj) 
     194                   fq2 = fq0 + fq1 
     195                   fq3 = 2.0 * f_benout_ca(ji,jj) 
     196                   if (lwp) write (numout,'a,2i3,a,4f15,5)')                   & 
     197                      'AXY alk cons: (i,j)=',ji,jj,', (flx,ben,err,out)=',     & 
     198                      fq0,fq1,fq2,fq3 
    298199               ENDIF 
    299200            ENDDO 
     
    333234            ENDDO 
    334235         ENDDO 
     236 
     237         !!!--------------------------------------------------------------- 
     238         !! Calculates Chl diag for UM coupling  
     239         !!!--------------------------------------------------------------- 
     240         !! JPALM -- 02-06-2017 -- 
     241         !! add Chl surf coupling 
     242         !! no need to output, just pass to cpl var 
     243         IF (lk_oasis) THEN 
     244            IF (chl_out.eq.1) THEN 
     245               !! export and scale surface chl 
     246               zn_chl_srf(:,:) = MAX( 0.0, (trn(:,:,1,jpchd) + trn(:,:,1,jpchn)) * 1.0E-6 ) 
     247                                 !! surf Chl in Kg-chl/m3 as needed for cpl 
     248            ELSEIF (chl_out.eq.2) THEN 
     249               !! export and scale mld chl 
     250               zn_chl_srf(:,:) = MAX( 0.0, fchl_ml(:,:) * 1.0E-6 ) 
     251                                 !! mld Chl in Kg-chl/m3 as needed for cpl 
     252            ENDIF 
     253            chloro_out_cpl(:,:) = zn_chl_srf(:,:) * scl_chl        !! Coupling Chl 
     254         END IF 
     255 
    335256         !!---------------------------------------------------------------- 
    336257         !! Add in XML diagnostics stuff 
     
    360281            CALL iom_put( "OCAL_LVL"  , fccd ) 
    361282         ENDIF 
     283         IF ( med_diag%CHL_MLD%dgsave ) THEN 
     284            CALL iom_put( "CHL_MLD"  , fchl_ml ) 
     285         ENDIF 
     286         IF (lk_oasis) THEN 
     287            IF ( med_diag%CHL_CPL%dgsave ) THEN 
     288               CALL iom_put( "CHL_CPL"  , chloro_out_cpl ) 
     289            ENDIF 
     290         ENDIF 
    362291         IF ( med_diag%PN_JLIM%dgsave ) THEN 
    363292            CALL iom_put( "PN_JLIM"  , fjln2d ) 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_init.F90

    r9073 r9157  
    66   !! History : 
    77   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90 
     8   !!   -   ! 2017-08 (A. Yool)            Add slow-sinking detrius variables 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_medusa 
     
    161162      fprn_ml(:,:) = 0.0        !! mixed layer PP diagnostics 
    162163      fprd_ml(:,:) = 0.0        !! mixed layer PP diagnostics 
     164      !! AXY (16/08/17) 
     165      fchl_ml(:,:) = 0.0   !! mixed layer chlorophyll diagnostics 
    163166      !!  
    164167      fslownflux(:,:) = 0.0  
     
    183186      f_omarg(:,:)    = 0.0 
    184187      f_omcal(:,:)    = 0.0 
    185  
     188      !! 
     189      !! AXY (08/08/17): zero slow detritus fluxes 
     190      fslowsink(:,:)  = 0.0 
     191# if defined key_roam 
     192      fslowsinkc(:,:) = 0.0 
     193# endif       
    186194      !! 
    187195      !! allocate and initiate 2D diag 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_mod.F90

    r9070 r9157  
    77   !! History : 
    88   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90 
     9   !!   -   ! 2017-08 (A. Yool)            Slow detritus, ML-avg chl variables 
    910   !!---------------------------------------------------------------------- 
    1011#if defined key_medusa 
     
    5455   !! AXY (01/03/10): add in mixed layer PP diagnostics 
    5556   REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: fprn_ml,fprd_ml 
     57   !! AXY (16/08/17): add in mixed layer chlorophyll diagnostic 
     58   REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: fchl_ml 
    5659   !! 
    5760   !! nutrient limiting factors 
     
    9497   REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: fregenfastc 
    9598# endif 
    96  
     99   !! 
     100   !! AXY (08/08/17): sinking of detritus moved here 
     101   REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::    fslowsink, fslowgain, fslowloss 
     102# if defined key_roam 
     103   REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::    fslowsinkc, fslowgainc, fslowlossc 
     104# endif 
     105   !! 
    97106   !! Particle flux 
    98107   REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: fdep1 
     
    287296               fjlim_pn(jpi,jpj),fjlim_pd(jpi,jpj),                   & 
    288297               fun_T(jpi,jpj),fun_Q10(jpi,jpj),                       & 
    289                fprn_ml(jpi,jpj),fprd_ml(jpi,jpj),                     & 
     298               fprn_ml(jpi,jpj),fprd_ml(jpi,jpj),fchl_ml(jpi,jpj),    & 
    290299               fnln(jpi,jpj),ffln2(jpi,jpj),                          & 
    291300               fnld(jpi,jpj),ffld(jpi,jpj),fsld(jpi,jpj),             & 
     
    316325               fregenfastc(jpi,jpj),                                  & 
    317326# endif 
     327          fslowsink(jpi,jpj),fslowgain(jpi,jpj),                 & 
     328               fslowloss(jpi,jpj),                                    & 
     329# if defined key_roam 
     330          fslowsinkc(jpi,jpj),fslowgainc(jpi,jpj),               & 
     331               fslowlossc(jpi,jpj),                                   & 
     332# endif 
    318333               fdep1(jpi,jpj),                                        & 
    319334               ftempn(jpi,jpj),ftempsi(jpi,jpj),ftempfe(jpi,jpj),     & 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_update.F90

    r9070 r9157  
    66   !! History : 
    77   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90 
     8   !!   -   ! 2017-08 (A. Yool)            Amend slow-detritus bug 
     9   !!   -   ! 2017-08 (A. Yool)            Reformatting for clarity 
    810   !!---------------------------------------------------------------------- 
    911#if defined key_medusa 
     
    6062                                   fsil_cons, fsil_prod, fsdiss,             & 
    6163                                   ftempca, fthetad, fthetan,                & 
     64                                   fslowsink, fslowgain, fslowloss,          & ! AXY (22/08/17) 
     65                                   f_sbenin_n, f_sbenin_c,                   & 
    6266# if defined key_roam 
     67                                   fslowsinkc, fslowgainc, fslowlossc,       & ! AXY (22/08/17) 
    6368                                   fcar_cons, fcar_prod, fcomm_resp,         & 
    6469                                   fddc, fflx_a, fflx_c, fflx_o2, zoxy,      & 
     
    181186      ENDDO 
    182187 
    183       DO jj = 2,jpjm1 
    184          DO ji = 2,jpim1 
    185             if (tmask(ji,jj,jk) == 1) then 
    186                !! 
    187                !!---------------------------------------------------------- 
    188                !! detritus 
    189                btra(ji,jj,jpdet_lc) = b0 *                                      & 
    190                                           ! mort. losses  
    191                                    (fdpn(ji,jj) + ((1.0 - xfdfrac1) *        & 
    192                                                    fdpd(ji,jj)) +            & 
    193                                     fdzmi(ji,jj) +                           & 
    194                                     ((1.0 - xfdfrac2) * fdzme(ji,jj)) +      & 
    195                                           ! assim. inefficiency 
    196                                     ((1.0 - xbetan) * (finmi(ji,jj) +        & 
    197                                                        finme(ji,jj))) -      & 
    198                                           ! grazing and remin. 
    199                                     fgmid(ji,jj) - fgmed(ji,jj) -            & 
    200                                     fdd(ji,jj) +                             & 
    201                                           ! seafloor fast->slow 
    202                                     ffast2slown(ji,jj)) 
    203                !! 
     188      !!---------------------------------------------------------- 
     189      !! detritus 
     190      DO jj = 2,jpjm1 
     191         DO ji = 2,jpim1 
     192            if (tmask(ji,jj,jk) == 1) then 
     193               !! 
     194               btra(ji,jj,jpdet_lc) = b0 * (                           & 
     195                   fdpn(ji,jj)                                         & ! mort. losses  
     196                 + ((1.0 - xfdfrac1) * fdpd(ji,jj))                    & ! mort. losses  
     197                 + fdzmi(ji,jj)                                        & ! mort. losses 
     198                 + ((1.0 - xfdfrac2) * fdzme(ji,jj))                   & ! mort. losses 
     199                 + ((1.0 - xbetan) * (finmi(ji,jj) + finme(ji,jj)))    & ! assim. inefficiency 
     200                 - fgmid(ji,jj) - fgmed(ji,jj)                         & ! grazing 
     201                 - fdd(ji,jj)                                          & ! remin. 
     202                 + fslowgain(ji,jj) - fslowloss(ji,jj)                 & ! slow-sinking 
     203                 - (f_sbenin_n(ji,jj) / fse3t(ji,jj,jk))               & ! slow-sinking loss to seafloor 
     204                 + ffast2slown(ji,jj) )                                  ! seafloor fast->slow  
    204205            ENDIF 
    205206         ENDDO 
     
    305306                                          ffetop(ji,jj) + ffebot(ji,jj) -    & 
    306307                                          ffescav(ji,jj) ) 
     308            ENDIF 
     309         ENDDO 
     310      ENDDO 
     311 
    307312# if defined key_roam 
    308                !! 
    309                !!---------------------------------------------------------- 
    310                !! AXY (26/11/08): implicit detrital carbon change 
    311                btra(ji,jj,jpdtc_lc) = b0 * (                                    & 
    312                                             ! mort. losses 
    313                                          (xthetapn * fdpn(ji,jj)) +          & 
    314                                          ((1.0 - xfdfrac1) *                 & 
    315                                           (xthetapd * fdpd(ji,jj))) +        & 
    316                                          (xthetazmi * fdzmi(ji,jj)) +        & 
    317                                          ((1.0 - xfdfrac2) *                 & 
    318                                           (xthetazme * fdzme(ji,jj))) +      & 
    319                                              ! assim. inefficiency 
    320                                          ((1.0 - xbetac) *                   & 
    321                                           (ficmi(ji,jj) + ficme(ji,jj))) -   & 
    322                                              ! grazing and remin. 
    323                                          fgmidc(ji,jj) - fgmedc(ji,jj) -     & 
    324                                          fddc(ji,jj) +                       & 
    325                                              ! seafloor fast->slow 
    326                                          ffast2slowc(ji,jj) ) 
     313      !!---------------------------------------------------------- 
     314      !! AXY (26/11/08): implicit detrital carbon change 
     315      DO jj = 2,jpjm1 
     316         DO ji = 2,jpim1 
     317            if (tmask(ji,jj,jk) == 1) then  
     318               !! 
     319               btra(ji,jj,jpdtc_lc) = b0 * (                           & 
     320                   (xthetapn * fdpn(ji,jj))                            & ! mort. losses  
     321                 + ((1.0 - xfdfrac1) * (xthetapd * fdpd(ji,jj)))       & ! mort. losses  
     322                 + (xthetazmi * fdzmi(ji,jj))                          & ! mort. losses  
     323                 + ((1.0 - xfdfrac2) * (xthetazme * fdzme(ji,jj)))     & ! mort. losses  
     324                 + ((1.0 - xbetac) * (ficmi(ji,jj) + ficme(ji,jj)))    & ! assim. inefficiency 
     325                 - fgmidc(ji,jj) - fgmedc(ji,jj)                       & ! grazing 
     326                 - fddc(ji,jj)                                         & ! remin. 
     327                 + fslowgainc(ji,jj) - fslowlossc(ji,jj)               & ! slow-sinking 
     328                 - (f_sbenin_c(ji,jj) / fse3t(ji,jj,jk))               & ! slow-sinking loss to seafloor 
     329                 + ffast2slowc(ji,jj) )                                  ! seafloor fast->slow 
    327330            ENDIF 
    328331         ENDDO 
     
    575578                                                           f_o2flux(ji,jj)) 
    576579               endif 
     580            ENDIF 
     581         ENDDO 
     582      ENDDO 
    577583# endif 
    578             ENDIF 
    579          ENDDO 
    580       ENDDO 
    581584 
    582585# if defined key_debug_medusa 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/detritus.F90

    r9070 r9157  
    66   !! History : 
    77   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90 
     8   !!   -   ! 2017-08 (A. Yool)            Revise slow-sinking of detritus 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_medusa 
     
    3536                                        f_sbenin_n, fdd,                   & 
    3637                                        idf, idfval,                       &    
    37 # if defined key_roam 
     38                                        fslowsink,                         & 
     39                                        fslowgain, fslowloss,              & 
     40# if defined key_roam 
     41                                        fslowsinkc,                        & 
     42                                        fslowgainc, fslowlossc,            & 
    3843                                        fddc,                              & 
    3944# endif 
    4045                                        fun_T, fun_Q10, zdet, zdtc 
    4146      USE detritus_fast_sink_mod, ONLY: detritus_fast_sink 
    42       USE dom_oce,                ONLY: mbathy, tmask 
     47      USE dom_oce,                ONLY: mbathy, e3t_0, e3t_n, gphit, tmask 
    4348      USE in_out_manager,         ONLY: lwp, numout 
    4449      USE par_oce,                ONLY: jpim1, jpjm1 
    4550      USE sms_medusa,             ONLY: jmd, jorgben, jsfd, vsed,          & 
    4651                                        xrfn, xmd, xmdc, xthetad 
     52 
     53   !!* Substitution 
     54#  include "domzgr_substitute.h90" 
    4755 
    4856      !! Level 
     
    123131         DO ji = 2,jpim1 
    124132            if (tmask(ji,jj,jk) == 1) then 
     133               !!---------------------------------------------------------------------- 
     134               !! Detritus sinking (AXY, 08/08/18) 
     135          !! Replaces slow-sinking done in trcsed_medusa.F90 
     136               !! 
     137               !! Uses the fslowsink variable to carry slow-sinking detritus from one 
     138               !! grid level to the next, variable fslowgain to "add" detritus sinking 
     139               !! from above and variable fslowloss to "subtract" detritus sinking out 
     140               !! to below; these variables appear in the differential equations of 
     141               !! detrital nitrogen and carbon below 
     142               !!---------------------------------------------------------------------- 
     143               !! 
     144               fslowgain(ji,jj)  = fslowsink(ji,jj) / fse3t(ji,jj,jk)                  ! = mmol N / m3 / d 
     145               if (jk.lt.mbathy(ji,jj)) then 
     146                  fslowloss(ji,jj)  = (zdet(ji,jj) * vsed * 86400.) / fse3t(ji,jj,jk)  ! = mmol N / m3 / d 
     147               else 
     148                  fslowloss(ji,jj)  = 0.                                               ! = mmol N / m3 / d 
     149               endif 
     150               fslowsink(ji,jj) = fslowloss(ji,jj) * fse3t(ji,jj,jk)                   ! = mmol N / m2 / d 
     151               !! 
     152#  if defined key_roam 
     153               fslowgainc(ji,jj) = fslowsinkc(ji,jj) / fse3t(ji,jj,jk)                 ! = mmol C / m3 / d 
     154               if (jk.lt.mbathy(ji,jj)) then 
     155                  fslowlossc(ji,jj) = (zdtc(ji,jj) * vsed * 86400.) / fse3t(ji,jj,jk)  ! = mmol C / m3 / d 
     156               else 
     157                  fslowlossc(ji,jj) = 0.                                               ! = mmol C / m3 / d 
     158               endif 
     159               fslowsinkc(ji,jj) = fslowlossc(ji,jj) * fse3t(ji,jj,jk)                 ! = mmol C / m2 / d 
     160#  endif 
     161            ENDIF 
     162         ENDDO 
     163      ENDDO 
     164 
     165      DO jj = 2,jpjm1 
     166         DO ji = 2,jpim1 
     167            if (tmask(ji,jj,jk) == 1) then 
    125168               !!--------------------------------------------------------- 
    126169               !! Detritus addition to benthos 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/phytoplankton.F90

    r9070 r9157  
    66   !! History : 
    77   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90 
     8   !!   -   ! 2017-08 (A. Yool)            Mean mixed layer chlorophyll 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_medusa 
     
    4243                                   zchd, zchn, zdet, zdin, zdtc,         & 
    4344                                   zfer, zpds, zphd, zphn, zsil,         & 
    44                                    zzme, zzmi 
     45                                   zzme, zzmi, fchl_ml 
    4546      USE dom_oce,           ONLY: e3t_0, e3t_n, gdepw_0, gdepw_n, tmask 
    4647      USE in_out_manager,    ONLY: lwp, numout 
     
    5556                                   xvpd, xvpn, xxi 
    5657      USE zdfmxl,            ONLY: hmld 
     58      USE lbclnk,            ONLY: lbc_lnk 
    5759 
    5860   !!* Substitution 
     
    373375               fprd_ml(ji,jj) = fprd_ml(ji,jj) + (fprd(ji,jj) * zphd(ji,jj) * & 
    374376                                                  fse3t(ji,jj,jk) * fq0) 
    375             ENDIF 
    376          ENDDO 
    377       ENDDO 
     377          !! AXY (16/08/17) 
     378          fchl_ml(ji,jj) = fchl_ml(ji,jj) + ((zchn(ji,jj) + zchd(ji,jj)) * & 
     379                                             (fse3t(ji,jj,jk) * fq0) / hmld(ji,jj)) 
     380            ENDIF 
     381         ENDDO 
     382      ENDDO 
     383      CALL lbc_lnk(fchl_ml(:,:),'T',1. ) 
    378384 
    379385      DO jj = 2,jpjm1 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/sms_medusa.F90

    r8132 r9157  
    177177   INTEGER  ::  jdms_model   !: choice of DMS model passed to atmosphere 
    178178!!                              1 = ANDR, 2 = SIMO, 3 = ARAN, 4 = HALL 
    179 !! 
     179!! FOR UKESM    
     180   REAL(wp) ::  scl_chl      !: scaling factor for tuned Chl passed to the UM  
     181   INTEGER  ::  chl_out      !: select Chl field exported and scaled for UM: 
     182                             !: 1- Surface Chl ; 2- MLD Chl 
    180183!! 
    181184   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   remdmp   !: depth dependent damping coefficient of passive tracers  
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcini_medusa.F90

    r8147 r9157  
    271271      zn_dms_srf(:,:)  = 0.0 
    272272      za_dms_srf(:,:)  = 0.0 
    273       zn_chl_srf(:,:)  = 2.0E-8 !! Chl srf 
     273      zn_chl_srf(:,:)  = 2.0E-8 !! Chl cpl - set first as surf 
    274274      !! 
    275275      IF(lwp) WRITE(numout,*) ' trc_ini_medusa: DMS and CO2 flux (UKESM) initialised to zero' 
     
    278278         CO2Flux_out_cpl(:,:) =  zn_co2_flx(:,:)   !! Coupling variable 
    279279         DMS_out_cpl(:,:)     =  zn_dms_srf(:,:)   !! Coupling variable 
    280          chloro_out_cpl(:,:)  =  zn_chl_srf(:,:)   !! Coupling variable 
     280         chloro_out_cpl(:,:)  =  zn_chl_srf(:,:) * scl_chl   !! Coupling variable 
    281281      END IF 
    282282      !! 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcnam_medusa.F90

    r9070 r9157  
    2424   USE sms_medusa      ! sms trends 
    2525   USE iom             ! I/O manager 
     26   USE sbc_oce, ONLY: lk_oasis 
    2627   !!USE trc_nam_dia     ! JPALM 13-11-2015 -- if iom_use for diag 
    2728 
     
    8586      &  jriver_n,jriver_si,jriver_c,jriver_alk,jriver_dep,   & 
    8687      &  xsdiss,                                              & 
    87       &  sedlam,sedlostpoc,jpkb,jdms,jdms_input,jdms_model 
     88      &  sedlam,sedlostpoc,jpkb,jdms,jdms_input,jdms_model,   & 
     89      &  scl_chl, chl_out 
    8890#if defined key_roam 
    8991      NAMELIST/natroam/ xthetaphy,xthetazoo,xthetanit,        & 
     
    246248      jdms_input  = 0 
    247249      jdms_model  = 0 
     250      scl_chl     = 1. 
     251      chl_out     = 1 
    248252             
    249253      !REWIND(numnatm) 
     
    400404!!                      1 = ANDR, 2 = SIMO, 3 = ARAN, 4 = HALL, 5 = ANDM 
    401405!! 
     406!! UKESM1 - exported Chl to UM 
     407!!       scl_chl     : scaling factor to tune the chl field sent to the UM 
     408!!       chl_out     : select the chl field to send at the UM: 
     409!!                     1- Surf Chl ; 2- MLD Chl  
     410 
    402411      IF(lwp) THEN 
    403412!! 
     
    909918!! 
    910919!! UKESM1 - new diagnostics  !! Jpalm; AXY (08/07/15) 
    911          WRITE(numout,*) '=== UKESM1-related parameters' 
    912          WRITE(numout,*)     & 
    913          &   ' include DMS diagnostic?,                                   jdms        = ', jdms 
    914          if (jdms_input .eq. 0) then 
    915             WRITE(numout,*)     & 
    916             &   ' use instant (0) or diel-avg (1) inputs,                    jdms_input  = instantaneous' 
    917          else 
    918             WRITE(numout,*)     & 
    919             &   ' use instant (0) or diel-avg (1) inputs,                    jdms_input  = diel-average' 
    920          endif 
    921     if (jdms_model .eq. 1) then 
    922             WRITE(numout,*)     & 
    923             &   ' choice of DMS model passed to atmosphere,                  jdms_model  = Anderson et al. (2001)' 
    924     elseif (jdms_model .eq. 2) then 
    925             WRITE(numout,*)     & 
    926             &   ' choice of DMS model passed to atmosphere,                  jdms_model  = Simo & Dachs (2002)' 
    927     elseif (jdms_model .eq. 3) then 
    928             WRITE(numout,*)     & 
    929             &   ' choice of DMS model passed to atmosphere,                  jdms_model  = Aranami & Tsunogai (2004)' 
    930     elseif (jdms_model .eq. 4) then 
    931             WRITE(numout,*)     & 
    932             &   ' choice of DMS model passed to atmosphere,                  jdms_model  = Halloran et al. (2010)' 
    933     elseif (jdms_model .eq. 5) then 
    934             WRITE(numout,*)     & 
    935             &   ' choice of DMS model passed to atmosphere,                  jdms_model  = Anderson et al. (2001; modified)' 
    936          endif 
     920         WRITE(numout,*) '=== UKESM1-related parameters ===' 
     921         WRITE(numout,*) ' ---- --- ---' 
     922 
     923         IF (lk_oasis) THEN 
     924            WRITE(numout,*) '=== UKESM1 --  coupled DMS to the atmosphere' 
     925            WRITE(numout,*)     & 
     926            &   ' include DMS diagnostic?,                                   jdms        = ', jdms 
     927            if (jdms_input .eq. 0) then 
     928               WRITE(numout,*)     & 
     929               &   ' use instant (0) or diel-avg (1) inputs,                    jdms_input  = instantaneous' 
     930            else 
     931               WRITE(numout,*)     & 
     932               &   ' use instant (0) or diel-avg (1) inputs,                    jdms_input  = diel-average' 
     933            endif 
     934          if (jdms_model .eq. 1) then 
     935               WRITE(numout,*)     & 
     936               &   ' choice of DMS model passed to atmosphere,                  jdms_model  = Anderson et al. (2001)' 
     937       elseif (jdms_model .eq. 2) then 
     938               WRITE(numout,*)     & 
     939               &   ' choice of DMS model passed to atmosphere,                  jdms_model  = Simo & Dachs (2002)' 
     940       elseif (jdms_model .eq. 3) then 
     941               WRITE(numout,*)     & 
     942               &   ' choice of DMS model passed to atmosphere,                  jdms_model  = Aranami & Tsunogai (2004)' 
     943       elseif (jdms_model .eq. 4) then 
     944               WRITE(numout,*)     & 
     945               &   ' choice of DMS model passed to atmosphere,                  jdms_model  = Halloran et al. (2010)' 
     946       elseif (jdms_model .eq. 5) then 
     947               WRITE(numout,*)     & 
     948               &   ' choice of DMS model passed to atmosphere,                  jdms_model  = Anderson et al. (2001; modified)' 
     949            endif 
     950          
     951            WRITE(numout,*) '=== UKESM1 --  coupled Chl to the atmosphere' 
     952            WRITE(numout,*)        & 
     953               &   ' Scaling factor to export tuned Chl to the atmosphere       scl_chl  = ', scl_chl 
     954            IF (chl_out .eq. 1) THEN 
     955               WRITE(numout,*)        & 
     956               &   ' Chl field to be scaled and sent to the atmosphere:         chl_out  = Surface Chl field ' 
     957            ELSEIF (chl_out .eq. 2) THEN 
     958               WRITE(numout,*)        & 
     959               &   ' Chl field to be scaled and sent to the atmosphere:         chl_out  = MLD Chl field ' 
     960            ENDIF 
     961         ENDIF ! IF lk_oasis=true 
    937962!! 
    938963      ENDIF 
     
    20532078          med_diag%OCN_DPCO2%dgsave = .FALSE. 
    20542079      ENDIF 
    2055       !! 
     2080      !! UKESM additional 
     2081      IF  (iom_use("CHL_MLD")) THEN  
     2082          med_diag%CHL_MLD%dgsave = .TRUE. 
     2083      ELSE  
     2084          med_diag%CHL_MLD%dgsave = .FALSE. 
     2085      ENDIF 
     2086      IF  (iom_use("CHL_CPL")) THEN  
     2087          med_diag%CHL_CPL%dgsave = .TRUE. 
     2088      ELSE  
     2089          med_diag%CHL_CPL%dgsave = .FALSE. 
     2090      ENDIF 
     2091      !! 3D 
    20562092      IF  (iom_use("TPP3")) THEN  
    20572093          med_diag%TPP3%dgsave = .TRUE. 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcsms_medusa.F90

    r8074 r9157  
    88   !!              -   !  2008-11  (A. Yool) continuing adaptation for MEDUSA 
    99   !!              -   !  2010-03  (A. Yool) updated for branch inclusion 
     10   !!              -   !  2017-08  (A. Yool) amend for slow detritus bug 
    1011   !!---------------------------------------------------------------------- 
    1112#if defined key_medusa 
     
    8889#  endif 
    8990       
    90       CALL trc_sed_medusa( kt ) ! sedimentation model 
    91 #  if defined key_debug_medusa 
    92       IF(lwp) WRITE(numout,*) ' MEDUSA done trc_sed_medusa' 
    93       CALL flush(numout) 
    94 #  endif 
     91!! AXY (08/08/2017): remove call to buggy subroutine (now handled by detritus.F90) 
     92!!       CALL trc_sed_medusa( kt ) ! sedimentation model 
     93!! #  if defined key_debug_medusa 
     94!!       IF(lwp) WRITE(numout,*) ' MEDUSA done trc_sed_medusa' 
     95!!       CALL flush(numout) 
     96!! #  endif 
    9597# endif 
    9698 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/trc.F90

    r8280 r9157  
    134134                  OCN_KWCO2, OCN_K0, CO2STARAIR, OCN_DPCO2,                                          & ! end of regular 2D 
    135135                  TPP3, DETFLUX3, REMIN3N, PH3, OM_CAL3,                                             & ! end of regular 3D 
     136! JPALM (01/09/17): additional UKESM 2D diag 
     137                  CHL_MLD, CHL_CPL,                                                                  & 
    136138! AXY (11/11/16): additional CMIP6 2D diagnostics 
    137139                  epC100, epCALC100, epN100, epSI100,                                                & 
  • branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_8356/NEMOGCM/NEMO/TOP_SRC/trcrst.F90

    r9073 r9157  
    276276      !!                     as proxy of org matter from the ocean 
    277277      !!                  -- needed for the coupling with atm 
     278      !!       07-12-2017 -- To make things cleaner, we want to store an   
     279      !!                     unscaled Chl field in the restart and only  
     280      !!                     scale it when reading it in. 
     281 
    278282      IF( iom_varid( numrtr, 'N_CHL_srf', ldstop = .FALSE. ) > 0 ) THEN 
    279          IF(lwp) WRITE(numout,*) 'Chl surf concentration - reading in ...' 
     283         IF(lwp) WRITE(numout,*) 'Chl cpl concentration - reading in ... - scale by ', scl_chl 
    280284         CALL iom_get( numrtr, jpdom_autoglo, 'N_CHL_srf',  zn_chl_srf(:,:)  ) 
    281285      ELSE 
    282          IF(lwp) WRITE(numout,*) 'Chl surf concentration - setting to zero ...' 
    283          zn_chl_srf(:,:)  = (trn(:,:,1,jpchn) + trn(:,:,1,jpchd)) * 1.E-6 
     286         IF(lwp) WRITE(numout,*) 'set Chl coupled concentration - scaled by ', scl_chl 
     287         zn_chl_srf(:,:)  = MAX( 0.0, (trn(:,:,1,jpchn) + trn(:,:,1,jpchd)) * 1.E-6 ) 
    284288      ENDIF 
    285289      IF (lk_oasis) THEN 
    286          chloro_out_cpl(:,:) = zn_chl_srf(:,:)        !! Coupling variable 
     290         chloro_out_cpl(:,:) = zn_chl_srf(:,:) * scl_chl        !! Coupling variable 
    287291      END IF 
    288292      !! 
     
    296300      call trc_rst_dia_stat(zn_dms_srf(:,:), 'DMS surf') 
    297301      call trc_rst_dia_stat(zn_co2_flx(:,:), 'CO2 flux') 
    298       call trc_rst_dia_stat(zn_chl_srf(:,:), 'CHL surf') 
     302      IF (lk_oasis) THEN 
     303         call trc_rst_dia_stat(chloro_out_cpl(:,:), 'CHL  cpl') 
     304      END IF 
    299305      !!   
    300306      !! JPALM 14-06-2016 -- add Carbonate chenistry variables through the restart 
     
    456462      CALL iom_rstput( kt, nitrst, numrtw, 'B_CO2_flx',  zb_co2_flx(:,:)  ) 
    457463      CALL iom_rstput( kt, nitrst, numrtw, 'N_CO2_flx',  zn_co2_flx(:,:)  ) 
     464      !! JPALM 07-12-2017 -- To make things cleaner, we want to store an   
     465      !!                     unscaled Chl field in the restart and only  
     466      !!                     scale it when reading it in. 
    458467      CALL iom_rstput( kt, nitrst, numrtw, 'N_CHL_srf',  zn_chl_srf(:,:)  ) 
    459468      !! 
     
    467476      call trc_rst_dia_stat(zn_dms_srf(:,:), 'DMS surf') 
    468477      call trc_rst_dia_stat(zn_co2_flx(:,:), 'CO2 flux') 
    469       call trc_rst_dia_stat(zn_chl_srf(:,:), 'CHL surf') 
     478      call trc_rst_dia_stat(zn_chl_srf(:,:), 'unscaled CHL cpl') 
    470479      !! 
    471480      IF(lwp) WRITE(numout,*) ' MEDUSA averaged prop. for dust and iron dep.' 
Note: See TracChangeset for help on using the changeset viewer.