source: NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/SED/trcdmp_sed.F90 @ 10963

Last change on this file since 10963 was 10963, checked in by acc, 19 months ago

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Convert TOP routines in top-level TOP directory and all knock on effects of these conversions. SETTE tested.

File size: 7.0 KB
Line 
1MODULE trcdmp_sed
2   !!======================================================================
3   !!                       ***  MODULE  trcdmp  ***
4   !! Ocean physics: internal restoring trend on passive tracers
5   !!======================================================================
6   !! History :  OPA  !  1991-03  (O. Marti, G. Madec)  Original code
7   !!                 !  1996-01  (G. Madec) statement function for e3
8   !!                 !  1997-05  (H. Loukos)  adapted for passive tracers
9   !!    NEMO    9.0  !  2004-03  (C. Ethe)    free form + modules
10   !!            3.2  !  2007-02  (C. Deltel)  Diagnose ML trends for passive tracers
11   !!            3.3  !  2010-06  (C. Ethe, G. Madec) merge TRA-TRC
12   !!----------------------------------------------------------------------
13#if  defined key_top
14   !!----------------------------------------------------------------------
15   !!   trc_dmp      : update the tracer trend with the internal damping
16   !!   trc_dmp_init : initialization, namlist read, parameters control
17   !!----------------------------------------------------------------------
18   USE oce_trc         ! ocean dynamics and tracers variables
19   USE trc             ! ocean passive tracers variables
20   USE sed , ONLY : dtsed => dtsed      ! ocean dynamics and tracers variables
21   USE trc             ! ocean passive tracers variables
22   USE trcdta
23   USE prtctl_trc      ! Print control for debbuging
24   USE iom
25
26
27   IMPLICIT NONE
28   PRIVATE
29
30   PUBLIC trc_dmp_sed     
31   PUBLIC trc_dmp_sed_alloc 
32   PUBLIC trc_dmp_sed_ini   
33
34   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   restosed   ! restoring coeff. on tracers (s-1)
35
36   !! * Substitutions
37#  include "vectopt_loop_substitute.h90"
38   !!----------------------------------------------------------------------
39   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
40   !! $Id: trcdmp.F90 7646 2017-02-06 09:25:03Z timgraham $
41   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
42   !!----------------------------------------------------------------------
43CONTAINS
44
45   INTEGER FUNCTION trc_dmp_sed_alloc()
46      !!----------------------------------------------------------------------
47      !!                   ***  ROUTINE trc_dmp_alloc  ***
48      !!----------------------------------------------------------------------
49      ALLOCATE( restosed(jpi,jpj,jpk) , STAT=trc_dmp_sed_alloc )
50      !
51      IF( trc_dmp_sed_alloc /= 0 )   CALL ctl_warn('trc_dmp_sed_alloc: failed to allocate array')
52      !
53   END FUNCTION trc_dmp_sed_alloc
54
55
56   SUBROUTINE trc_dmp_sed( kt, Kmm )
57      !!----------------------------------------------------------------------
58      !!                   ***  ROUTINE trc_dmp_sed  ***
59      !!                 
60      !! ** Purpose :   Compute the passive tracer trend due to a newtonian damping
61      !!      of the tracer field towards given data field and add it to the
62      !!      general tracer trends.
63      !!
64      !! ** Method  :   Newtonian damping towards trdta computed
65      !!      and add to the general tracer trends:
66      !!                     trn = tra + restotr * (trdta - trb)
67      !!         The trend is computed either throughout the water column
68      !!      (nlmdmptr=0) or in area of weak vertical mixing (nlmdmptr=1) or
69      !!      below the well mixed layer (nlmdmptr=2)
70      !!
71      !! ** Action  : - update the tracer trends tra with the newtonian
72      !!                damping trends.
73      !!              - save the trends ('key_trdmxl_trc')
74      !!----------------------------------------------------------------------
75      INTEGER, INTENT(in) ::   kt   ! ocean time-step index
76      INTEGER, INTENT(in) ::   Kmm  ! time level index
77      !
78      INTEGER ::   ji, jj, jk, jn, jl, ikt   ! dummy loop indices
79      CHARACTER (len=22) ::   charout
80      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrcdta   ! 3D  workspace
81      !!----------------------------------------------------------------------
82      !
83      IF( ln_timing )  CALL timing_start('trc_dmp_sed')
84      !
85      !
86      IF( nb_trcdta > 0 ) THEN  ! Initialisation of tracer from a file that may also be used for damping
87         !
88         DO jn = 1, jptra                                           ! tracer loop
89            !                                                       ! ===========
90            IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file
91               !
92               jl = n_trc_index(jn) 
93               CALL trc_dta( kt, Kmm, sf_trcdta(jl), rf_trfac(jl), ztrcdta )   ! read tracer data at nit000
94               !
95               DO jj = 1, jpj
96                  DO ji = 1, jpi   ! vector opt.
97                     ikt = mbkt(ji,jj)
98                     trb(ji,jj,ikt,jn) = ztrcdta(ji,jj,ikt) + ( trb(ji,jj,ikt,jn) -  ztrcdta(ji,jj,ikt) )     &
99                     &                  * exp( -restosed(ji,jj,ikt) * dtsed )
100                  END DO
101               END DO
102               !
103            ENDIF
104         END DO                                                     ! tracer loop
105         !                                                          ! ===========
106      ENDIF
107      !
108      !                                          ! print mean trends (used for debugging)
109      IF( ln_ctl ) THEN
110         WRITE(charout, FMT="('dmp ')")
111         CALL prt_ctl_trc_info(charout)
112         CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' )
113      ENDIF
114      !
115      IF( ln_timing )  CALL timing_stop('trc_dmp_sed')
116      !
117   END SUBROUTINE trc_dmp_sed
118
119
120   SUBROUTINE trc_dmp_sed_ini
121      !!----------------------------------------------------------------------
122      !!                  ***  ROUTINE trc_dmp_ini  ***
123      !!
124      !! ** Purpose :   Initialization for the newtonian damping
125      !!
126      !! ** Method  :   read the nammbf namelist and check the parameters
127      !!              called by trc_dmp at the first timestep (nittrc000)
128      !!----------------------------------------------------------------------
129      !!----------------------------------------------------------------------
130      !
131      IF( ln_timing )  CALL timing_start('trc_dmp_sed_ini')
132
133      IF (lwp) WRITE(numout,*) '   tracer damping throughout the water column'
134      !
135      IF( trc_dmp_sed_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'trc_dmp_sed_ini: unable to allocate arrays' )
136      !
137      IF( .NOT.lk_c1d ) THEN
138         !Read in mask from file
139          restosed(:,:,:) = 0.5 / rday
140         !
141      ENDIF
142      IF( ln_timing )  CALL timing_stop('trc_dmp_sed_ini')
143     !
144   END SUBROUTINE trc_dmp_sed_ini
145
146#else
147   !!----------------------------------------------------------------------
148   !!  Dummy module :                                     No passive tracer
149   !!----------------------------------------------------------------------
150CONTAINS
151   SUBROUTINE trc_dmp_sed( kt )        ! Empty routine
152      INTEGER, INTENT(in) :: kt
153      WRITE(*,*) 'trc_dmp_sed: You should not have seen this print! error?', kt
154   END SUBROUTINE trc_dmp_sed
155#endif
156
157   !!======================================================================
158END MODULE trcdmp_sed
Note: See TracBrowser for help on using the repository browser.