[7041] | 1 | MODULE trcsms_c14 |
---|
| 2 | !!====================================================================== |
---|
| 3 | !! *** MODULE trcsms_c14 *** |
---|
| 4 | !! TOP : Bomb C14 main module |
---|
| 5 | !!====================================================================== |
---|
| 6 | !! History - ! 1994-05 ( J. Orr ) original code |
---|
| 7 | !! 1.0 ! 2006-02 ( J.M. Molines ) Free form + modularity |
---|
| 8 | !! 2.0 ! 2008-12 ( C. Ethe ) reorganisation |
---|
| 9 | !! 4.0 ! 2011-02 ( A.R. Porter, STFC Daresbury ) Dynamic memory |
---|
| 10 | !! ! 2015 (A. Mouchet) general C14 + update formulas |
---|
| 11 | !!---------------------------------------------------------------------- |
---|
| 12 | !! trc_sms_c14 : compute and add C14 suface forcing to C14 trends |
---|
| 13 | !!---------------------------------------------------------------------- |
---|
| 14 | USE oce_trc ! Ocean variables |
---|
| 15 | USE par_trc ! TOP parameters |
---|
| 16 | USE trc ! TOP variables |
---|
| 17 | USE trd_oce ! trends |
---|
| 18 | USE trdtrc ! trends |
---|
| 19 | USE sms_c14 ! atmospheric forcing |
---|
| 20 | USE trcatm_c14 ! atmospheric forcing |
---|
| 21 | USE iom |
---|
| 22 | |
---|
| 23 | IMPLICIT NONE |
---|
| 24 | PRIVATE |
---|
| 25 | |
---|
| 26 | PUBLIC trc_sms_c14 ! called in trcsms.F90 |
---|
| 27 | |
---|
[12377] | 28 | !! * Substitutions |
---|
| 29 | # include "do_loop_substitute.h90" |
---|
[13540] | 30 | # include "domzgr_substitute.h90" |
---|
[7041] | 31 | !!---------------------------------------------------------------------- |
---|
[10067] | 32 | !! NEMO/TOP 4.0 , NEMO Consortium (2018) |
---|
[10068] | 33 | !! $Id$ |
---|
| 34 | !! Software governed by the CeCILL license (see ./LICENSE) |
---|
[7041] | 35 | !!---------------------------------------------------------------------- |
---|
| 36 | CONTAINS |
---|
| 37 | |
---|
[12377] | 38 | SUBROUTINE trc_sms_c14( kt, Kbb, Kmm, Krhs ) |
---|
[7041] | 39 | !!---------------------------------------------------------------------- |
---|
| 40 | !! *** ROUTINE trc_sms_c14 *** |
---|
| 41 | !! |
---|
| 42 | !! ** Purpose : Compute the surface boundary contition on C14 |
---|
| 43 | !! passive tracer associated with air-sea fluxes and add it to |
---|
| 44 | !! the general trend of tracers equations. |
---|
| 45 | ! |
---|
| 46 | ! Method: |
---|
| 47 | ! - transport the ratio C14/C as in Toggweiler et al. (JGR,1989) |
---|
| 48 | ! - if on-line a passive tracer (jpcref; NO sms) allows compensating for |
---|
| 49 | ! freshwater fluxes which should not impact the C14/C ratio |
---|
| 50 | ! |
---|
[12377] | 51 | ! => Delta-C14= ( tr(...jp_c14,Kmm) -1)*1000. |
---|
[7041] | 52 | !! |
---|
| 53 | !!---------------------------------------------------------------------- |
---|
| 54 | ! |
---|
[12377] | 55 | INTEGER, INTENT(in) :: kt ! ocean time-step index |
---|
| 56 | INTEGER, INTENT(in) :: Kbb, Kmm, Krhs ! ocean time level |
---|
[7041] | 57 | ! |
---|
[12377] | 58 | INTEGER :: ji, jj, jk ! dummy loop indices |
---|
[7041] | 59 | REAL(wp) :: zt, ztp, zsk ! dummy variables |
---|
| 60 | REAL(wp) :: zsol ! solubility |
---|
| 61 | REAL(wp) :: zsch ! schmidt number |
---|
| 62 | REAL(wp) :: zv2 ! wind speed ( square) |
---|
| 63 | REAL(wp) :: zpv ! piston velocity |
---|
| 64 | !!---------------------------------------------------------------------- |
---|
| 65 | ! |
---|
[9124] | 66 | IF( ln_timing ) CALL timing_start('trc_sms_c14') |
---|
[7041] | 67 | ! |
---|
| 68 | IF( kt == nittrc000 ) THEN |
---|
| 69 | IF(lwp) WRITE(numout,*) |
---|
| 70 | IF(lwp) WRITE(numout,*) ' trc_sms_c14: C14 model' |
---|
| 71 | IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' |
---|
| 72 | ENDIF |
---|
| 73 | ! |
---|
| 74 | ! Get co2sbc & c14sbc(ji,jj): at 1st iter for all, at each time step for transient |
---|
| 75 | IF( kc14typ >= 1 .OR. kt == nittrc000 ) CALL trc_atm_c14( kt, co2sbc, c14sbc ) |
---|
| 76 | |
---|
| 77 | ! ------------------------------------------------------------------- |
---|
| 78 | ! Gas exchange coefficient (Wanninkhof, 1992, JGR, 97,7373-7382) |
---|
| 79 | ! Schmidt number of CO2 in seawater (Wanninkhof, 1992 & 2014) |
---|
| 80 | ! CO2 solubility (Weiss, 1974; Wanninkhof, 2014) |
---|
| 81 | ! ------------------------------------------------------------------- |
---|
| 82 | |
---|
[13540] | 83 | DO_2D( 1, 1, 1, 1 ) |
---|
[12377] | 84 | IF( tmask(ji,jj,1) > 0. ) THEN |
---|
| 85 | ! |
---|
| 86 | zt = MIN( 40. , ts(ji,jj,1,jp_tem,Kmm) ) |
---|
| 87 | ! |
---|
| 88 | ! Computation of solubility zsol in [mol/(L * atm)] |
---|
| 89 | ! after Wanninkhof (2014) referencing Weiss (1974) |
---|
| 90 | ztp = ( zt + 273.16 ) * 0.01 |
---|
| 91 | zsk = 0.027766 + ztp * ( -0.025888 + 0.0050578 * ztp ) ! [mol/(L * atm)] |
---|
| 92 | zsol = EXP( -58.0931 + 90.5069 / ztp + 22.2940 * LOG( ztp ) + zsk * ts(ji,jj,1,jp_sal,Kmm) ) |
---|
| 93 | ! convert solubilities [mol/(L * atm)] -> [mol/(m^3 * ppm)] |
---|
| 94 | zsol = zsol * 1.e-03 |
---|
[7041] | 95 | |
---|
[12377] | 96 | ! Computes the Schmidt number of CO2 in seawater |
---|
| 97 | ! Wanninkhof-2014 |
---|
| 98 | zsch = 2116.8 + zt * ( -136.25 + zt * (4.7353 + zt * (-0.092307 + 0.0007555 * zt ) ) ) |
---|
[7041] | 99 | |
---|
[12377] | 100 | ! Wanninkhof Piston velocity: zpv in units [m/s] |
---|
| 101 | zv2 = xkwind * (wndm(ji,jj) * wndm(ji,jj)) ! wind speed module at T points |
---|
| 102 | ! chemical enhancement (Wanninkhof & Knox, 1996) |
---|
| 103 | IF( ln_chemh ) zv2 = zv2 + 2.5 * ( 0.5246 + zt * (0.016256 + 0.00049946 * zt ) ) |
---|
| 104 | zv2 = zv2/360000._wp ! conversion cm/h -> m/s |
---|
| 105 | ! |
---|
| 106 | zpv = ( zv2 * SQRT( 660./ zsch ) ) * ( 1. - fr_i(ji,jj) ) * tmask(ji,jj,1) |
---|
[7041] | 107 | |
---|
[12377] | 108 | ! CO2 piston velocity (m/s) |
---|
| 109 | exch_co2(ji,jj)= zpv |
---|
| 110 | ! CO2 invasion rate (mol/ppm/m2/s) = 1st part of 14C/C exchange velocity |
---|
| 111 | exch_c14(ji,jj)= zpv * zsol |
---|
| 112 | ELSE |
---|
| 113 | exch_co2(ji,jj) = 0._wp |
---|
| 114 | exch_c14(ji,jj) = 0._wp |
---|
| 115 | ENDIF |
---|
| 116 | END_2D |
---|
[7041] | 117 | |
---|
| 118 | ! Exchange velocity for 14C/C ratio (m/s) |
---|
| 119 | zt = co2sbc / xdicsur |
---|
| 120 | exch_c14(:,:) = zt * exch_c14(:,:) |
---|
| 121 | ! |
---|
| 122 | ! Flux of C-14 from air-to-sea; units: (C14/C ratio) x m/s |
---|
| 123 | ! already masked |
---|
[12377] | 124 | qtr_c14(:,:) = exch_c14(:,:) * ( c14sbc(:,:) - tr(:,:,1,jp_c14,Kbb) ) |
---|
[7041] | 125 | |
---|
| 126 | ! cumulation of air-to-sea flux at each time step |
---|
[12511] | 127 | qint_c14(:,:) = qint_c14(:,:) + qtr_c14(:,:) * rn_Dt |
---|
[7041] | 128 | ! |
---|
[7068] | 129 | ! Add the surface flux to the trend of jp_c14 |
---|
[13540] | 130 | DO_2D( 1, 1, 1, 1 ) |
---|
[12377] | 131 | tr(ji,jj,1,jp_c14,Krhs) = tr(ji,jj,1,jp_c14,Krhs) + qtr_c14(ji,jj) / e3t(ji,jj,1,Kmm) |
---|
| 132 | END_2D |
---|
[7041] | 133 | ! |
---|
[7068] | 134 | ! Computation of decay effects on jp_c14 |
---|
[13540] | 135 | DO_3D( 1, 1, 1, 1, 1, jpk ) |
---|
[12377] | 136 | ! |
---|
| 137 | tr(ji,jj,jk,jp_c14,Krhs) = tr(ji,jj,jk,jp_c14,Krhs) - rlam14 * tr(ji,jj,jk,jp_c14,Kbb) * tmask(ji,jj,jk) |
---|
| 138 | ! |
---|
| 139 | END_3D |
---|
[7041] | 140 | ! |
---|
| 141 | IF( lrst_trc ) THEN |
---|
| 142 | IF(lwp) WRITE(numout,*) |
---|
| 143 | IF(lwp) WRITE(numout,*) ' trc_rst_wri_c14 : Write specific variables from c14 model ' |
---|
| 144 | IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' |
---|
[9124] | 145 | ! |
---|
[7041] | 146 | CALL iom_rstput( kt, nitrst, numrtw, 'co2sbc', co2sbc ) ! These five need & |
---|
| 147 | CALL iom_rstput( kt, nitrst, numrtw, 'c14sbc', c14sbc ) ! & to be written & |
---|
| 148 | CALL iom_rstput( kt, nitrst, numrtw, 'exch_co2', exch_co2 ) ! & for temporal & |
---|
| 149 | CALL iom_rstput( kt, nitrst, numrtw, 'exch_c14', exch_c14 ) ! & averages & |
---|
| 150 | CALL iom_rstput( kt, nitrst, numrtw, 'qtr_c14', qtr_c14 ) ! & to be coherent. |
---|
| 151 | CALL iom_rstput( kt, nitrst, numrtw, 'qint_c14', qint_c14 ) ! Cumulative |
---|
[9124] | 152 | ! |
---|
[7041] | 153 | ENDIF |
---|
| 154 | |
---|
[12377] | 155 | IF( l_trdtrc ) CALL trd_trc( tr(:,:,:,jp_c14,Krhs), 1, jptra_sms, kt, Kmm ) ! save trends |
---|
[7041] | 156 | ! |
---|
[9124] | 157 | IF( ln_timing ) CALL timing_stop('trc_sms_c14') |
---|
[7041] | 158 | ! |
---|
| 159 | END SUBROUTINE trc_sms_c14 |
---|
| 160 | |
---|
| 161 | !!====================================================================== |
---|
| 162 | END MODULE trcsms_c14 |
---|