[7041] | 1 | MODULE trcsms_age |
---|
| 2 | !!====================================================================== |
---|
| 3 | !! *** MODULE trcsms_age *** |
---|
| 4 | !! TOP : Main module of the AGE tracers |
---|
| 5 | !!====================================================================== |
---|
| 6 | !! History : 2.0 ! 2007-12 (C. Ethe, G. Madec) Original code |
---|
| 7 | !!---------------------------------------------------------------------- |
---|
| 8 | !! trc_sms_age : AGE model main routine |
---|
| 9 | !!---------------------------------------------------------------------- |
---|
| 10 | USE oce_trc ! Ocean variables |
---|
| 11 | USE trc ! TOP variables |
---|
| 12 | USE trd_oce |
---|
| 13 | USE trdtrc |
---|
| 14 | |
---|
| 15 | IMPLICIT NONE |
---|
| 16 | PRIVATE |
---|
| 17 | |
---|
| 18 | PUBLIC trc_sms_age ! called by trcsms.F90 module |
---|
| 19 | |
---|
| 20 | INTEGER , PUBLIC :: nl_age ! T level surrounding age_depth |
---|
| 21 | INTEGER , PUBLIC :: nla_age ! T level wholly above age_depth |
---|
| 22 | INTEGER , PUBLIC :: nlb_age ! T level wholly below age_depth |
---|
| 23 | |
---|
| 24 | REAL(wp), PUBLIC :: rn_age_depth ! = 10 depth over which age tracer reset to zero |
---|
| 25 | REAL(wp), PUBLIC :: rn_age_kill_rate ! = -1./7200 recip of relaxation timescale (s) for age tracer shallower than age_depth |
---|
| 26 | |
---|
| 27 | REAL(wp), PUBLIC :: rryear !: recip number of seconds in one year |
---|
| 28 | REAL(wp), PUBLIC :: frac_kill_age !: fraction of level nl_age above age_depth where it is relaxed towards zero |
---|
| 29 | REAL(wp), PUBLIC :: frac_add_age !: fraction of level nl_age below age_depth where it is incremented |
---|
| 30 | |
---|
| 31 | |
---|
| 32 | !!---------------------------------------------------------------------- |
---|
[10067] | 33 | !! NEMO/TOP 4.0 , NEMO Consortium (2018) |
---|
[7041] | 34 | !! $Id$ |
---|
[10068] | 35 | !! Software governed by the CeCILL license (see ./LICENSE) |
---|
[7041] | 36 | !!---------------------------------------------------------------------- |
---|
| 37 | CONTAINS |
---|
| 38 | |
---|
| 39 | SUBROUTINE trc_sms_age( kt ) |
---|
| 40 | !!---------------------------------------------------------------------- |
---|
| 41 | !! *** trc_sms_age *** |
---|
| 42 | !! |
---|
| 43 | !! ** Purpose : main routine of AGE model |
---|
| 44 | !! |
---|
| 45 | !! ** Method : - |
---|
| 46 | !!---------------------------------------------------------------------- |
---|
| 47 | INTEGER, INTENT(in) :: kt ! ocean time-step index |
---|
| 48 | INTEGER :: jn, jk ! dummy loop index |
---|
| 49 | !!---------------------------------------------------------------------- |
---|
| 50 | ! |
---|
[9124] | 51 | IF( ln_timing ) CALL timing_start('trc_sms_age') |
---|
[7041] | 52 | ! |
---|
| 53 | IF(lwp) WRITE(numout,*) |
---|
| 54 | IF(lwp) WRITE(numout,*) ' trc_sms_age: AGE model' |
---|
| 55 | IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' |
---|
| 56 | |
---|
| 57 | |
---|
| 58 | DO jk = 1, nla_age |
---|
[7068] | 59 | tra(:,:,jk,jp_age) = rn_age_kill_rate * trb(:,:,jk,jp_age) |
---|
[9124] | 60 | END DO |
---|
[7041] | 61 | ! |
---|
[7068] | 62 | tra(:,:,nl_age,jp_age) = frac_kill_age * rn_age_kill_rate * trb(:,:,nl_age,jp_age) & |
---|
[7041] | 63 | & + frac_add_age * rryear * tmask(:,:,nl_age) |
---|
| 64 | ! |
---|
| 65 | DO jk = nlb_age, jpk |
---|
[7068] | 66 | tra(:,:,jk,jp_age) = tmask(:,:,jk) * rryear |
---|
[9124] | 67 | END DO |
---|
[7041] | 68 | ! |
---|
[7068] | 69 | IF( l_trdtrc ) CALL trd_trc( tra(:,:,:,jp_age), jn, jptra_sms, kt ) ! save trends |
---|
[7041] | 70 | ! |
---|
[9124] | 71 | IF( ln_timing ) CALL timing_stop('trc_sms_age') |
---|
[7041] | 72 | ! |
---|
| 73 | END SUBROUTINE trc_sms_age |
---|
| 74 | |
---|
| 75 | !!====================================================================== |
---|
| 76 | END MODULE trcsms_age |
---|