New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
trcavg_medusa.F90 in branches/UKMO/dev_r5518_GO6_under_ice_relax_dr_hook/NEMOGCM/NEMO/TOP_SRC/MEDUSA – NEMO

source: branches/UKMO/dev_r5518_GO6_under_ice_relax_dr_hook/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcavg_medusa.F90 @ 11738

Last change on this file since 11738 was 11738, checked in by marc, 5 years ago

The Dr Hook changes from my perl code.

File size: 5.9 KB
Line 
1MODULE trcavg_medusa
2   !!======================================================================
3   !!                         ***  MODULE trcavg_medusa  ***
4   !! TOP :   MEDUSA
5   !!======================================================================
6   !! History :    -   !  2015-07  (A. Yool) Original code
7   !!----------------------------------------------------------------------
8#if defined key_medusa && defined key_roam
9   !!----------------------------------------------------------------------
10   !!                                        MEDUSA rolling averages
11   !!----------------------------------------------------------------------
12   !!   trc_avg_medusa        : 
13   !!----------------------------------------------------------------------
14      USE oce_trc
15      USE trc
16      USE sms_medusa
17      USE lbclnk
18      USE prtctl_trc      ! Print control for debugging
19      USE in_out_manager  ! I/O manager
20
21      USE yomhook, ONLY: lhook, dr_hook
22      USE parkind1, ONLY: jprb, jpim
23
24      IMPLICIT NONE
25      PRIVATE
26
27      PUBLIC   trc_avg_medusa    ! called in trc_sms_medusa
28
29   !!* Substitution
30#  include "domzgr_substitute.h90"
31   !!----------------------------------------------------------------------
32   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)
33   !! $Id$
34   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
35   !!----------------------------------------------------------------------
36
37CONTAINS
38
39!=======================================================================
40!
41      SUBROUTINE trc_avg_medusa( kt )
42!     
43!=======================================================================
44      !!
45      !! Title  : Calculates rolling averages of variables
46      !! Author : Andrew Yool
47      !! Date   : 23/07/15
48      !!
49      !! Calculates and updates rolling averages of properties such
50      !! as surface irradiance and mixed layer depth that are used
51      !! in functions that require average rather than instantaneous
52      !! values.
53      !!
54      !! This functionality was originally added to support the
55      !! calculation of surface DMS concentrations - and was done so
56      !! within the trcbio_meduse.F90 routine - but was moved to
57      !! this separate module so that its calculations could be used
58      !! to inform MEDUSA's submarine irradiance field
59      !!
60!=======================================================================
61!
62      USE yomhook, ONLY: lhook, dr_hook
63      USE parkind1, ONLY: jprb, jpim
64
65      IMPLICIT NONE
66!
67      INTEGER, INTENT( in ) ::   kt   ! index of the time stepping
68      INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0
69      INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1
70      REAL(KIND=jprb)               :: zhook_handle
71
72      CHARACTER(LEN=*), PARAMETER :: RoutineName='TRC_AVG_MEDUSA'
73
74      IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle)
75
76!
77!=======================================================================
78# if defined key_debug_medusa
79         IF(lwp) WRITE(numout,*) ' MEDUSA inside trc_avg_medusa'
80         CALL flush(numout)
81# endif
82      !! AXY (24/07/15): alter this to report on first MEDUSA call
83      IF( kt == nittrc000 ) THEN
84         IF(lwp) WRITE(numout,*)
85         IF(lwp) WRITE(numout,*) ' trc_avg_medusa: MEDUSA rolling average'
86         IF(lwp) WRITE(numout,*) ' ~~~~~~~'
87         IF(lwp) WRITE(numout,*) ' kt =',kt
88      ENDIF
89      !!
90      !!----------------------------------------------------------------------
91      !! Process average fields
92      !! The empirical formulae used for estimating surface DMS concentrations
93      !! require temporally averaged input fields; this block calculates these
94      !! averages based on diel averages; note that rdt
95      !!----------------------------------------------------------------------
96      !!
97      zn_dms_chn(:,:) = ( zb_dms_chn(:,:) * ((86400. - rdt) / 86400.) ) &
98      &                  + ( trn(:,:,1,jpchn) * (rdt / 86400.) )
99      zb_dms_chn(:,:) = zn_dms_chn(:,:)
100      zn_dms_chd(:,:) = ( zb_dms_chd(:,:) * ((86400. - rdt) / 86400.) ) &
101      &                  + ( trn(:,:,1,jpchd) * (rdt / 86400.) )
102      zb_dms_chd(:,:) = zn_dms_chd(:,:)
103      zn_dms_mld(:,:) = ( zb_dms_mld(:,:) * ((86400. - rdt) / 86400.) ) &
104      &                  + (        hmld(:,:) * (rdt / 86400.) )
105      zb_dms_mld(:,:) = zn_dms_mld(:,:)
106      zn_dms_qsr(:,:) = ( zb_dms_qsr(:,:) * ((86400. - rdt) / 86400.) ) &
107      &                  + (         qsr(:,:) * (rdt / 86400.) )
108      zb_dms_qsr(:,:) = zn_dms_qsr(:,:)
109      zn_dms_din(:,:) = ( zb_dms_din(:,:) * ((86400. - rdt) / 86400.) ) &
110      &                  + ( trn(:,:,1,jpdin) * (rdt / 86400.) )
111      zb_dms_din(:,:) = zn_dms_din(:,:)
112
113      IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle)
114  END SUBROUTINE trc_avg_medusa
115
116!=======================================================================
117!=======================================================================
118!=======================================================================
119
120#else
121   !!======================================================================
122   !!  Dummy module :                                   No MEDUSA bio-model
123   !!======================================================================
124
125CONTAINS
126
127!=======================================================================
128!
129   SUBROUTINE trc_avg_medusa( kt )                                        !! EMPTY Routine
130!     
131!
132      INTEGER, INTENT( in ) ::   kt
133      INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0
134      INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1
135      REAL(KIND=jprb)               :: zhook_handle
136
137      CHARACTER(LEN=*), PARAMETER :: RoutineName='TRC_AVG_MEDUSA'
138
139      IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle)
140
141!
142
143      WRITE(*,*) 'trc_avg_medusa: You should not have seen this print! error?'
144
145      IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle)
146   END SUBROUTINE trc_avg_medusa
147#endif
148
149   !!======================================================================
150END MODULE  trcavg_medusa
151
152
Note: See TracBrowser for help on using the repository browser.