[3443] | 1 | MODULE p4zint |
---|
[14385] | 2 | !!========================================================================= |
---|
[3443] | 3 | !! *** MODULE p4zint *** |
---|
| 4 | !! TOP : PISCES interpolation and computation of various accessory fields |
---|
[14385] | 5 | !!========================================================================= |
---|
[3443] | 6 | !! History : 1.0 ! 2004-03 (O. Aumont) Original code |
---|
| 7 | !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 |
---|
| 8 | !!---------------------------------------------------------------------- |
---|
| 9 | !! p4z_int : interpolation and computation of various accessory fields |
---|
| 10 | !!---------------------------------------------------------------------- |
---|
| 11 | USE oce_trc ! shared variables between ocean and passive tracers |
---|
| 12 | USE trc ! passive tracers common variables |
---|
| 13 | USE sms_pisces ! PISCES Source Minus Sink variables |
---|
| 14 | |
---|
| 15 | IMPLICIT NONE |
---|
| 16 | PRIVATE |
---|
| 17 | |
---|
| 18 | PUBLIC p4z_int |
---|
| 19 | REAL(wp) :: xksilim = 16.5e-6_wp ! Half-saturation constant for the Si half-saturation constant computation |
---|
| 20 | |
---|
[14086] | 21 | # include "do_loop_substitute.h90" |
---|
[3443] | 22 | !!---------------------------------------------------------------------- |
---|
[10067] | 23 | !! NEMO/TOP 4.0 , NEMO Consortium (2018) |
---|
[7753] | 24 | !! $Id$ |
---|
[10068] | 25 | !! Software governed by the CeCILL license (see ./LICENSE) |
---|
[3443] | 26 | !!---------------------------------------------------------------------- |
---|
| 27 | CONTAINS |
---|
| 28 | |
---|
[12377] | 29 | SUBROUTINE p4z_int( kt, Kbb, Kmm ) |
---|
[3443] | 30 | !!--------------------------------------------------------------------- |
---|
| 31 | !! *** ROUTINE p4z_int *** |
---|
| 32 | !! |
---|
| 33 | !! ** Purpose : interpolation and computation of various accessory fields |
---|
| 34 | !! |
---|
| 35 | !!--------------------------------------------------------------------- |
---|
[12377] | 36 | INTEGER, INTENT( in ) :: kt ! ocean time-step index |
---|
| 37 | INTEGER, INTENT( in ) :: Kbb, Kmm ! time level indices |
---|
[3443] | 38 | ! |
---|
[7753] | 39 | INTEGER :: ji, jj ! dummy loop indices |
---|
[14385] | 40 | REAL(wp) :: zrum, zcodel, zargu, zvar |
---|
[3443] | 41 | !!--------------------------------------------------------------------- |
---|
| 42 | ! |
---|
[9124] | 43 | IF( ln_timing ) CALL timing_start('p4z_int') |
---|
[3443] | 44 | ! |
---|
| 45 | ! Computation of phyto and zoo metabolic rate |
---|
| 46 | ! ------------------------------------------- |
---|
[14385] | 47 | ! Generic temperature dependence (Eppley, 1972) |
---|
| 48 | tgfunc (:,:,:) = EXP( 0.0631 * ts(:,:,:,jp_tem,Kmm) ) |
---|
| 49 | ! Temperature dependence of mesozooplankton (Buitenhuis et al. (2005)) |
---|
| 50 | tgfunc2(:,:,:) = EXP( 0.0761 * ts(:,:,:,jp_tem,Kmm) ) |
---|
[3443] | 51 | |
---|
[14385] | 52 | |
---|
[3446] | 53 | ! Computation of the silicon dependant half saturation constant for silica uptake |
---|
[14385] | 54 | ! This is based on an old study by Pondaven et al. (1998) |
---|
| 55 | ! -------------------------------------------------------------------------------- |
---|
[14086] | 56 | DO_2D( 1, 1, 1, 1 ) |
---|
| 57 | zvar = tr(ji,jj,1,jpsil,Kbb) * tr(ji,jj,1,jpsil,Kbb) |
---|
| 58 | xksimax(ji,jj) = MAX( xksimax(ji,jj), ( 1.+ 7.* zvar / ( xksilim * xksilim + zvar ) ) * 1e-6 ) |
---|
| 59 | END_2D |
---|
[3443] | 60 | ! |
---|
[14385] | 61 | ! At the end of each year, the half saturation constant for silica is |
---|
| 62 | ! updated as this is based on the highest concentration reached over |
---|
| 63 | ! the year |
---|
| 64 | ! ------------------------------------------------------------------- |
---|
[3443] | 65 | IF( nday_year == nyear_len(1) ) THEN |
---|
[7753] | 66 | xksi (:,:) = xksimax(:,:) |
---|
| 67 | xksimax(:,:) = 0._wp |
---|
[3443] | 68 | ENDIF |
---|
| 69 | ! |
---|
[14385] | 70 | ! compute the day length depending on latitude and the day |
---|
| 71 | ! Astronomical parameterization taken from HAMOCC3 |
---|
| 72 | zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) |
---|
| 73 | zcodel = ASIN( SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp ) ) |
---|
| 74 | |
---|
| 75 | ! day length in hours |
---|
| 76 | strn(:,:) = 0. |
---|
| 77 | DO jj = 1, jpj |
---|
| 78 | DO ji = 1, jpi |
---|
| 79 | zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) |
---|
| 80 | zargu = MAX( -1., MIN( 1., zargu ) ) |
---|
| 81 | strn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) |
---|
| 82 | END DO |
---|
| 83 | END DO |
---|
| 84 | ! |
---|
[9124] | 85 | IF( ln_timing ) CALL timing_stop('p4z_int') |
---|
[3443] | 86 | ! |
---|
| 87 | END SUBROUTINE p4z_int |
---|
| 88 | |
---|
| 89 | !!====================================================================== |
---|
[5656] | 90 | END MODULE p4zint |
---|