Changeset 8131


Ignore:
Timestamp:
2017-06-02T17:14:01+02:00 (3 years ago)
Author:
jpalmier
Message:

JPALM — DMS add an updated version of ANDERSON sheme

Location:
branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM
Files:
4 edited

Legend:

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

    r8130 r8131  
    432432       <field id= "DMS_ARAN"   long_name="DMS Surface Concentration, AranamiT"       unit="nmol/L"      /> 
    433433       <field id= "DMS_HALL"   long_name="DMS Surface Concentration, Halloran"       unit="nmol/L"      /> 
     434       <field id= "DMS_ANDM"   long_name="DMS Surface Concentration, Anderson modif" unit="nmol/L"      /> 
    434435       <field id= "ATM_XCO2"   long_name="Atmospheric xCO2"                          unit="ppm"         /> 
    435436       <field id= "OCN_FCO2"   long_name="Surface ocean fCO2"                        unit="uatm"        /> 
     
    769770      <field field_ref= "DMS_ARAN"   name="DMS_ARAN"   /> 
    770771      <field field_ref= "DMS_HALL"   name="DMS_HALL"   /> 
     772      <field field_ref= "DMS_ANDM"   name="DMS_ANDM"   /> 
    771773    </field_group> 
    772774 
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcbio_medusa.F90

    r8074 r8131  
    2020   !!  -   !  2015-10  (J. Palm)              Update for diag outputs through iom_use   
    2121   !!  -   !  2016-11  (A. Yool)              Updated diags for CMIP6 
     22   !!  -   !  2017-05  (A. Yool)              Added extra DMS calculation 
    2223   !!---------------------------------------------------------------------- 
    2324   !! 
     
    335336      REAL(wp) ::    dms_surf 
    336337      !! AXY (13/03/15): add in other DMS calculations 
    337       REAL(wp) ::    dms_andr, dms_simo, dms_aran, dms_hall 
     338      REAL(wp) ::    dms_andr, dms_simo, dms_aran, dms_hall, dms_andm, dms_nlim, dms_wtkn 
    338339 
    339340# endif 
     
    371372      REAL(wp), POINTER, DIMENSION(:,:  ) :: mdetc2d, gmidc2d, gmedc2d, f_pco2a2d, f_pco2w2d, f_co2flux2d 
    372373      REAL(wp), POINTER, DIMENSION(:,:  ) :: f_TDIC2d, f_TALK2d, f_kw6602d, f_pp02d, f_o2flux2d, f_o2sat2d 
    373       REAL(wp), POINTER, DIMENSION(:,:  ) :: dms_andr2d, dms_simo2d, dms_aran2d, dms_hall2d, dms_surf2d 
     374      REAL(wp), POINTER, DIMENSION(:,:  ) :: dms_andr2d, dms_simo2d, dms_aran2d, dms_hall2d, dms_andm2d, dms_surf2d 
    374375      REAL(wp), POINTER, DIMENSION(:,:  ) :: iben_n2d, iben_fe2d, iben_c2d, iben_si2d, iben_ca2d, oben_n2d 
    375376      REAL(wp), POINTER, DIMENSION(:,:  ) :: oben_fe2d, oben_c2d, oben_si2d, oben_ca2d, sfr_ocal2d 
     
    10011002               CALL wrk_alloc( jpi, jpj,   dms_hall2d    ) 
    10021003               dms_hall2d(:,:)      = 0.0 !! 
     1004            ENDIF 
     1005            IF( med_diag%DMS_ANDM%dgsave ) THEN 
     1006               CALL wrk_alloc( jpi, jpj,   dms_andm2d    ) 
     1007               dms_andm2d(:,:)      = 0.0 !! 
    10031008            ENDIF 
    10041009         ENDIF    
     
    18411846                  !!                 in trcdms_medusa.F90) 
    18421847                  !! 
     1848                  !! AXY (25/05/17): amended to additionally pass DIN limitation as well as [DIN]; 
     1849                  !!                 accounts for differences in nutrient half-saturations; changes 
     1850                  !!                 also made in trc_dms_medusa; this permits an additional DMS 
     1851                  !!                 calculation while retaining the existing Anderson one 
     1852                  !! 
    18431853                  IF (jdms .eq. 1) THEN 
     1854                     !! 
     1855                     !! calculate weighted half-saturation for DIN uptake 
     1856                     dms_wtkn = ((zphn * xnln) + (zphd * xnld)) / (zphn + zphd) 
    18441857                     !! 
    18451858                     !! feed in correct inputs 
    18461859                     if (jdms_input .eq. 0) then 
    18471860                        !! use instantaneous inputs 
    1848                         CALL trc_dms_medusa( zchn, zchd, hmld(ji,jj), qsr(ji,jj), zdin, &  ! inputs 
    1849                         dms_andr, dms_simo, dms_aran, dms_hall )                           ! outputs 
     1861                        dms_nlim = zdin / (zdin + dms_wtkn) 
     1862                        !! 
     1863                        CALL trc_dms_medusa( zchn, zchd,                           &  ! inputs 
     1864                        hmld(ji,jj), qsr(ji,jj),                                   &  ! inputs 
     1865                        zdin, dms_nlim,                                            &  ! inputs 
     1866                        dms_andr, dms_simo, dms_aran, dms_hall, dms_andm )            ! outputs 
    18501867                     else 
    18511868                        !! use diel-average inputs 
     1869                        dms_nlim = zn_dms_din(ji,jj) / (zn_dms_din(ji,jj) + dms_wtkn) 
     1870                        !! 
    18521871                        CALL trc_dms_medusa( zn_dms_chn(ji,jj), zn_dms_chd(ji,jj), &  ! inputs 
    1853                         zn_dms_mld(ji,jj), zn_dms_qsr(ji,jj), zn_dms_din(ji,jj),   &  ! inputs 
    1854                         dms_andr, dms_simo, dms_aran, dms_hall )                      ! outputs 
     1872                        zn_dms_mld(ji,jj), zn_dms_qsr(ji,jj),                      &  ! inputs 
     1873                        zn_dms_din(ji,jj), dms_nlim,                               &  ! inputs 
     1874                        dms_andr, dms_simo, dms_aran, dms_hall, dms_andm )            ! outputs 
    18551875                     endif 
    18561876                     !! 
     
    18641884                     elseif (jdms_model .eq. 4) then 
    18651885                        dms_surf = dms_hall 
     1886                     elseif (jdms_model .eq. 5) then 
     1887                        dms_surf = dms_andm 
    18661888                     endif 
    18671889                     !! 
     
    18821904                       IF( med_diag%DMS_HALL%dgsave ) THEN 
    18831905                         dms_hall2d(ji,jj) = dms_hall 
     1906                       ENDIF 
     1907                       IF( med_diag%DMS_ANDM%dgsave ) THEN 
     1908                         dms_andm2d(ji,jj) = dms_andm 
    18841909                       ENDIF 
    18851910#   if defined key_debug_medusa 
     
    25272552                  !! temperature-dependent 
    25282553                  fdd  = xmd  * fun_Q10 * zdet 
    2529 #if defined key_roam 
     2554# if defined key_roam 
    25302555                  fddc = xmdc * fun_Q10 * zdtc 
    2531 #endif 
     2556# endif 
    25322557               else 
    25332558                  !! temperature-independent 
     
    49144939                         CALL wrk_dealloc( jpi, jpj,   dms_hall2d   ) 
    49154940                       ENDIF 
     4941                       IF( med_diag%DMS_ANDM%dgsave ) THEN 
     4942                         CALL iom_put( "DMS_ANDM"  , dms_andm2d ) 
     4943                         CALL wrk_dealloc( jpi, jpj,   dms_andm2d   ) 
     4944                       ENDIF 
    49164945                     ENDIF 
    49174946                     !! AXY (24/11/16): extra MOCSY diagnostics 
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcdms_medusa.F90

    r8074 r8131  
    66   !! History : 
    77   !!  -   !  2014-08  (J. Palmieri - A. Yool)    added for UKESM1 project 
     8   !!  -   !  2017-05  (A. Yool)                  add extra Anderson scheme 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_medusa && defined key_roam 
     
    3839!======================================================================= 
    3940! 
    40    SUBROUTINE trc_dms_medusa( chn, chd, mld, xqsr, xdin,   &  !! inputs 
    41      &  dms_andr, dms_simo, dms_aran, dms_hall )              !! outputs 
     41   SUBROUTINE trc_dms_medusa( chn, chd, mld, xqsr, xdin, xlim,  &  !! inputs 
     42     &  dms_andr, dms_simo, dms_aran, dms_hall dms_andm)           !! outputs 
    4243!       
    4344!======================================================================= 
     
    6970      !!                    and is included because it is formally 
    7071      !!                    published (and different from the above) 
     72      !! 
     73      !! AXY (25/05/17): add extra "corrected" Anderson scheme 
     74      !! 
     75      !!                 5. As Anderson et al. (2001) but modified to 
     76      !!                    more accurately reflect nutrient limitation 
     77      !!                    status of phytoplankton community 
    7178      !! 
    7279      !! AXY (08/07/15): amend to remove Julien's original calculation 
     
    8491      REAL(wp), INTENT( in )    :: xqsr                 !! surface irradiance        (W/m2) 
    8592      REAL(wp), INTENT( in )    :: xdin                 !! surface DIN               (mmol N/m3) 
     93      REAL(wp), INTENT( in )    :: xlim                 !! surface DIN limitation    (mmol N/m3) 
    8694      REAL(wp), INTENT( inout ) :: dms_andr             !! DMS surface concentration (nmol/L)  
    8795      REAL(wp), INTENT( inout ) :: dms_simo             !! DMS surface concentration (nmol/L)  
    8896      REAL(wp), INTENT( inout ) :: dms_aran             !! DMS surface concentration (nmol/L)  
    8997      REAL(wp), INTENT( inout ) :: dms_hall             !! DMS surface concentration (nmol/L)  
     98      REAL(wp), INTENT( inout ) :: dms_andm             !! DMS surface concentration (nmol/L)  
    9099! 
    91100      REAL(wp) :: CHL, cmr, sw_dms 
     
    147156           dms_hall = fq3 
    148157        endif 
     158! 
     159! AXY (25/05/17): modified Anderson et al. (2001) 
     160        Jterm = xqsr + 1.0e-6 
     161        !! this version fixes the hard-coded assumption above 
     162        Qterm = xlim 
     163        fq1 = log10(CHL * Jterm * Qterm) 
     164        if (fq1 > 1.72) then 
     165           dms_andm = (8.24 * (fq1 - 1.72)) + 2.29 
     166        else 
     167           dms_andm = 2.29 
     168        endif 
    149169 
    150170  END SUBROUTINE trc_dms_medusa 
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcnam_medusa.F90

    r8074 r8131  
    493493!!  jdms_input  :  use instant (0) or diel-avg (1) inputs 
    494494!!       jdms_model  :  choice of DMS model passed to atmosphere 
    495 !!                      1 = ANDR, 2 = SIMO, 3 = ARAN, 4 = HALL 
     495!!                      1 = ANDR, 2 = SIMO, 3 = ARAN, 4 = HALL, 5 = ANDM 
    496496!! 
    497497      IF(lwp) THEN 
     
    10261026            WRITE(numout,*)     & 
    10271027            &   ' choice of DMS model passed to atmosphere,                  jdms_model  = Halloran et al. (2010)' 
     1028    elseif (jdms_model .eq. 5) then 
     1029            WRITE(numout,*)     & 
     1030            &   ' choice of DMS model passed to atmosphere,                  jdms_model  = Anderson et al. (2001; modified)' 
    10281031         endif 
    10291032!! 
     
    20952098          med_diag%DMS_HALL%dgsave = .FALSE. 
    20962099      ENDIF 
     2100      IF  (iom_use("DMS_ANDM")) THEN  
     2101          med_diag%DMS_ANDM%dgsave = .TRUE. 
     2102      ELSE  
     2103          med_diag%DMS_ANDM%dgsave = .FALSE. 
     2104      ENDIF 
    20972105      IF  (iom_use("ATM_XCO2")) THEN  
    20982106          med_diag%ATM_XCO2%dgsave = .TRUE. 
Note: See TracChangeset for help on using the changeset viewer.