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.
oce_trc.F90 in branches/nemo_v3_3_beta/NEMOGCM/NEMO/TOP_SRC – NEMO

source: branches/nemo_v3_3_beta/NEMOGCM/NEMO/TOP_SRC/oce_trc.F90 @ 2392

Last change on this file since 2392 was 2317, checked in by cetlod, 14 years ago

Improve the computation of the divergence of the downward solar irradiance in traqsr.F90, see ticket #726

  • change fsdepw & fse3t into fsdepw_0 & fse3t_0 in tra_qsr_init
  • modify tra_qsr to recompute systematically etot3 in vvl case
  • suppress the namelist parameter rn_si2 which is computed as the RGB longest depth of extinction in trc_oce.F90
  • Property svn:keywords set to Id
File size: 17.7 KB
Line 
1MODULE oce_trc
2   !!======================================================================
3   !!                      ***  MODULE  oce_trc  ***
4   !! TOP :   variables shared between ocean and passive tracers
5   !!======================================================================
6   !! History :   1.0  !  2004-03  (C. Ethe)  original code
7   !!             2.0  !  2007-12 (C. Ethe, G. Madec)  rewritting
8   !!----------------------------------------------------------------------
9#if defined key_top
10   !!----------------------------------------------------------------------
11   !!   'key_top'                                                TOP models
12   !!----------------------------------------------------------------------
13
14   !* Domain size *
15   USE par_oce , ONLY :   cp_cfg   =>   cp_cfg     !: name of the configuration
16   USE par_oce , ONLY :   jp_cfg   =>   jp_cfg     !: resolution of the configuration
17   USE par_oce , ONLY :   jpiglo   =>   jpiglo     !: first  dimension of global domain --> i
18   USE par_oce , ONLY :   jpjglo   =>   jpjglo     !: second dimension of global domain --> j
19   USE par_oce , ONLY :   jpi      =>   jpi        !: first  dimension of grid --> i
20   USE par_oce , ONLY :   jpj      =>   jpj        !: second dimension of grid --> j 
21   USE par_oce , ONLY :   jpk      =>   jpk        !: number of levels 
22   USE par_oce , ONLY :   jpim1    =>   jpim1      !: jpi - 1
23   USE par_oce , ONLY :   jpjm1    =>   jpjm1      !: jpj - 1
24   USE par_oce , ONLY :   jpkm1    =>   jpkm1      !: jpk - 1 
25   USE par_oce , ONLY :   jpij     =>   jpij       !: jpi x jpj
26   USE par_oce , ONLY :   jpidta   =>   jpidta     !: first horizontal dimension  > or = jpi
27   USE par_oce , ONLY :   jpjdta   =>   jpjdta     !: second horizontal dimension > or = jpj
28   USE par_oce , ONLY :   jpkdta   =>   jpkdta     !: number of levels            > or = jpk
29   USE par_oce , ONLY :   lk_esopa =>   lk_esopa   !: flag to activate the all option
30   USE par_oce , ONLY :   jp_tem   =>   jp_tem     !: indice for temperature
31   USE par_oce , ONLY :   jp_sal   =>   jp_sal     !: indice for salinity
32
33   !* IO manager *
34   USE in_out_manager      ! use all the variables
35   !* physical constants *
36   USE phycst              ! use all the variables
37
38   !* model domain *
39   USE dom_oce , ONLY :   lzoom      => lzoom        !: zoom flag
40   USE dom_oce , ONLY :   lzoom_e    => lzoom_e      !: East  zoom type flag
41   USE dom_oce , ONLY :   lzoom_w    => lzoom_w      !: West  zoom type flag
42   USE dom_oce , ONLY :   lzoom_s    => lzoom_s      !: South zoom type flag
43   USE dom_oce , ONLY :   lzoom_n    => lzoom_n      !: North zoom type flag
44   USE dom_oce , ONLY :   lzoom_arct => lzoom_arct   !: ORCA    arctic zoom flag
45   USE dom_oce , ONLY :   lzoom_anta => lzoom_anta   !: ORCA antarctic zoom flag
46   USE dom_oce , ONLY :   nperio     =>   nperio     !: type of lateral boundary condition       
47   USE dom_oce , ONLY :   nimpp      =>   nimpp      !: i index for mpp-subdomain left bottom
48   USE dom_oce , ONLY :   njmpp      =>   njmpp      !: j index for mpp-subdomain left bottom
49   USE dom_oce , ONLY :   nproc      =>   nproc      !: number for local processor
50   USE dom_oce , ONLY :   narea      =>   narea      !: number for local area
51   USE dom_oce , ONLY :   mig        =>   mig        !: local  ==> global  domain i-indice
52   USE dom_oce , ONLY :   mjg        =>   mjg        !: local  ==> global  domain i-indice
53   USE dom_oce , ONLY :   mi0        =>   mi0        !: global ==> local domain i-indice
54   USE dom_oce , ONLY :   mi1        =>   mi1        !: (mi0=1 and mi1=0 if the global indice is not in the local one)
55   USE dom_oce , ONLY :   mj0        =>   mj0        !: global ==> local domain j-indice
56   USE dom_oce , ONLY :   mj1        =>   mj1        !: (mj0=1 and mj1=0 if the global indice is not in the local one)
57   USE dom_oce , ONLY :   nidom      =>   nidom
58   USE dom_oce , ONLY :   nimppt     => nimppt     !:i-indexes for each processor
59   USE dom_oce , ONLY :   njmppt     => njmppt       !:j-indexes for each processor
60   USE dom_oce , ONLY :   ibonit     => ibonit       !:i-processor neighbour existence
61   USE dom_oce , ONLY :   ibonjt     => ibonjt       !:j- processor neighbour existence
62   USE dom_oce , ONLY :   nlci       => nlci         !:i- & j-dimensions of the local subdomain
63   USE dom_oce , ONLY :   nlcj       => nlcj         !:
64   USE dom_oce , ONLY :   nldi       => nldi         !:first and last indoor i- and j-indexes
65   USE dom_oce , ONLY :   nlei       => nlei         !:
66   USE dom_oce , ONLY :   nldj       => nldj         !:
67   USE dom_oce , ONLY :   nlej       => nlej         !:
68   USE dom_oce , ONLY :   nlcit      => nlcit        !:dimensions of every i-subdomain
69   USE dom_oce , ONLY :   nlcjt      => nlcjt        !:dimensions of every j-subdomain
70   USE dom_oce , ONLY :   nldit      => nldit        !:first indoor index for each i-domain
71   USE dom_oce , ONLY :   nleit      => nleit        !:last indoor index for each i-domain
72   USE dom_oce , ONLY :   nldjt      => nldjt        !:first indoor index for each j-domain
73   USE dom_oce , ONLY :   nlejt      => nlejt        !:last indoor index for each j-domain
74 
75   !* horizontal mesh *
76   USE dom_oce , ONLY :   glamt      =>   glamt      !: longitude of t-point (degre) 
77   USE dom_oce , ONLY :   glamu      =>   glamu      !: longitude of t-point (degre) 
78   USE dom_oce , ONLY :   glamv      =>   glamv      !: longitude of t-point (degre) 
79   USE dom_oce , ONLY :   glamf      =>   glamf      !: longitude of t-point (degre) 
80   USE dom_oce , ONLY :   gphit      =>   gphit      !: latitude  of t-point (degre)   
81   USE dom_oce , ONLY :   gphiu      =>   gphiu      !: latitude  of t-point (degre)   
82   USE dom_oce , ONLY :   gphiv      =>   gphiv      !: latitude  of t-point (degre)   
83   USE dom_oce , ONLY :   gphif      =>   gphif      !: latitude  of t-point (degre)   
84   USE dom_oce , ONLY :   e1t        =>   e1t        !: horizontal scale factors at t-point (m) 
85   USE dom_oce , ONLY :   e2t        =>   e2t        !: horizontal scale factors at t-point (m)   
86   USE dom_oce , ONLY :   e1u        =>   e1u        !: horizontal scale factors at u-point (m)
87   USE dom_oce , ONLY :   e2u        =>   e2u        !: horizontal scale factors at u-point (m)
88   USE dom_oce , ONLY :   e1v        =>   e1v        !: horizontal scale factors at v-point (m)
89   USE dom_oce , ONLY :   e2v        =>   e2v        !: horizontal scale factors at v-point (m) 
90
91   !* vertical mesh *
92   USE dom_oce , ONLY :   gdept_0    =>   gdept_0    !: reference depth of t-points (m)
93   USE dom_oce , ONLY :   e3t_0      =>   e3t_0      !: reference depth of t-points (m) 
94   USE dom_oce , ONLY :   e3w_0      =>   e3w_0      !: reference depth of w-points (m)
95   USE dom_oce , ONLY :   gdepw_0    =>   gdepw_0    !: reference depth of w-points (m)
96# if ! defined key_zco
97   USE dom_oce , ONLY :   gdep3w     =>  gdep3w      !: ???
98   USE dom_oce , ONLY :   gdept      =>  gdept       !: depth of t-points (m)
99   USE dom_oce , ONLY :   gdepw      =>  gdepw       !: depth of t-points (m)
100   USE dom_oce , ONLY :   e3t        =>  e3t         !: vertical scale factors at t-
101   USE dom_oce , ONLY :   e3u        =>  e3u         !: vertical scale factors at u-
102   USE dom_oce , ONLY :   e3v        =>  e3v         !: vertical scale factors v-
103   USE dom_oce , ONLY :   e3w        =>  e3w         !: w-points (m)
104   USE dom_oce , ONLY :   e3f        =>  e3f         !: f-points (m)
105   USE dom_oce , ONLY :   e3uw       =>  e3uw        !: uw-points (m)
106   USE dom_oce , ONLY :   e3vw       =>  e3vw        !: vw-points (m)
107# endif
108   USE dom_oce , ONLY :   ln_zps     =>  ln_zps      !: partial steps flag
109   USE dom_oce , ONLY :   ln_sco     =>  ln_sco      !: s-coordinate flag
110   USE dom_oce , ONLY :   ln_zco     =>  ln_zco      !: z-coordinate flag
111   USE dom_oce , ONLY :   hbatt      =>  hbatt       !: ocean depth at the vertical of  t-point (m)
112   USE dom_oce , ONLY :   hbatu      =>  hbatu       !: ocean depth at the vertical of  u-point (m)
113   USE dom_oce , ONLY :   hbatv      =>  hbatv       !: ocean depth at the vertical of w-point (m)
114   USE dom_oce , ONLY :   gsigt      =>  gsigt       !: model level depth coefficient at T-levels
115   USE dom_oce , ONLY :   gsigw      =>  gsigw       !: model level depth coefficient at W-levels
116   USE dom_oce , ONLY :   gsi3w      =>  gsi3w       !: model level depth coef at w-levels (defined as the sum of e3w)
117   USE dom_oce , ONLY :   esigt      =>  esigt       !: vertical scale factor coef. at t-levels
118   USE dom_oce , ONLY :   esigw      =>  esigw       !: vertical scale factor coef. at w-levels
119   USE dom_oce , ONLY :   lk_vvl     =>  lk_vvl      !: variable grid flag
120# if defined key_vvl
121   USE dom_oce , ONLY :   gdep3w_1   =>  gdep3w_1    !: ???
122   USE dom_oce , ONLY :   gdept_1    =>  gdept_1     !: depth of t-points (m)
123   USE dom_oce , ONLY :   gdepw_1    =>  gdepw_1     !: depth of t-points (m)
124   USE dom_oce , ONLY :   e3t_1      =>  e3t_1       !: vertical scale factors at t-
125   USE dom_oce , ONLY :   e3u_1      =>  e3u_1       !: vertical scale factors at u-
126   USE dom_oce , ONLY :   e3v_1      =>  e3v_1       !: vertical scale factors v-
127   USE dom_oce , ONLY :   e3w_1      =>  e3w_1       !: w-points (m)
128   USE dom_oce , ONLY :   e3f_1      =>  e3f_1       !: f-points (m)
129   USE dom_oce , ONLY :   e3uw_1     =>  e3uw_1      !: uw-points (m)
130   USE dom_oce , ONLY :   e3vw_1     =>  e3vw_1      !: vw-points (m)
131# endif
132   !* masks, bathymetry *
133   USE dom_oce , ONLY :   mbathy     =>   mbathy     !: number of ocean level (=0,  & 1, ... , jpk-1)
134   USE dom_oce , ONLY :   tmask_i    =>   tmask_i    !: Interior mask at t-points
135   USE dom_oce , ONLY :   tmask      =>   tmask      !: land/ocean mask at t-points
136   USE dom_oce , ONLY :   umask      =>   umask      !: land/ocean mask at u-points   
137   USE dom_oce , ONLY :   vmask      =>   vmask      !: land/ocean mask at v-points
138   USE dom_oce , ONLY :   fmask      =>   fmask      !: land/ocean mask at f-points
139
140   !* time domain *
141   USE dom_oce , ONLY :   neuler     =>   neuler     !: restart euler forward option (0=Euler)
142   USE dom_oce , ONLY :   rdt        =>   rdt        !: time step for the dynamics
143   USE dom_oce , ONLY :   atfp       =>   atfp       !: asselin time filter parameter
144   USE dom_oce , ONLY :   atfp1      =>   atfp1      !: asselin time filter coeff. (atfp1= 1-2*atfp)
145   USE dom_oce , ONLY :   rdttra     =>   rdttra     !: vertical profile of tracer time step
146   !                                                 !: it is the accumulated duration of previous runs
147   !                                                 !: that may have been run with different time steps.
148   !* calendar variables *
149   USE dom_oce , ONLY :   nyear      =>   nyear      !: current year
150   USE dom_oce , ONLY :   nmonth     =>   nmonth     !: current month
151   USE dom_oce , ONLY :   nday       =>   nday       !: current day of the month
152   USE dom_oce , ONLY :   ndastp     =>   ndastp     !: time step date in yyyymmdd format
153   USE dom_oce , ONLY :   nday_year  =>   nday_year  !: current day counted from jan 1st of the current year
154   USE dom_oce , ONLY :   nsec_year  =>   nsec_year  !: current time step counted in second since 00h jan 1st of the current year
155   USE dom_oce , ONLY :   nsec_month =>   nsec_month !: current time step counted in second since 00h 1st day of the current month
156   USE dom_oce , ONLY :   nsec_day   =>   nsec_day   !: current time step counted in second since 00h of the current day
157   USE dom_oce , ONLY :   fjulday    =>   fjulday    !: julian day
158   USE dom_oce , ONLY :   adatrj     =>   adatrj     !: number of elapsed days since the begining of the whole simulation
159                                                     !: (cumulative duration of previous runs
160                                                     !: that may have used different time-step size)
161   USE dom_oce , ONLY :   nyear_len  =>   nyear_len  !: length in days of the previous/current year
162   USE dom_oce , ONLY :   nmonth_len =>   nmonth_len !: length in days of the months of the current year
163
164
165   !* ocean fields: here now and after fields *
166   USE oce , ONLY :   ua      =>    ua      !: i-horizontal velocity (m s-1)
167   USE oce , ONLY :   va      =>    va      !: j-horizontal velocity (m s-1)
168   USE oce , ONLY :   un      =>    un      !: i-horizontal velocity (m s-1)
169   USE oce , ONLY :   vn      =>    vn      !: j-horizontal velocity (m s-1)
170   USE oce , ONLY :   wn      =>    wn      !: vertical velocity (m s-1) 
171   USE oce , ONLY :   tn      =>    tn      !: pot. temperature (celsius)
172   USE oce , ONLY :   sn      =>    sn      !: salinity (psu)
173   USE oce , ONLY :   tsn     =>    tsn     !: 4D array contaning ( tn, sn )
174   USE oce , ONLY :   tsb     =>    tsb     !: 4D array contaning ( tb, sb )
175   USE oce , ONLY :   tsa     =>    tsa     !: 4D array contaning ( ta, sa )
176   USE oce , ONLY :   rhop    =>    rhop    !: potential volumic mass (kg m-3)
177   USE oce , ONLY :   rhd     =>    rhd     !: in situ density anomalie rhd=(rho-rau0)/rau0 (no units)
178   USE oce , ONLY :   hdivn   =>    hdivn   !: horizontal divergence (1/s)
179   USE oce , ONLY :   l_traldf_rot => l_traldf_rot  !: rotated laplacian operator for lateral diffusion
180#if defined key_offline
181   USE oce , ONLY :   gtsu    =>    gtsu    !: t-, s- and rd horizontal gradient at u- and
182   USE oce , ONLY :   gtsv    =>    gtsv    !:
183   USE oce , ONLY :   gru     =>    gru     !:
184   USE oce , ONLY :   grv     =>    grv     !:
185# if defined key_degrad
186   USE dommsk , ONLY :   facvol     =>   facvol     !: volume factor for degradation
187# endif
188
189#endif
190   USE lib_mpp , ONLY :   lk_mpp    =>  lk_mpp       !: Mpp flag
191
192   USE dom_oce , ONLY :   n_cla     =>   n_cla         !: flag (0/1) for cross land advection
193
194   !* surface fluxes *
195   USE sbc_oce , ONLY :   utau       =>    utau       !: i-surface stress component
196   USE sbc_oce , ONLY :   vtau       =>    vtau       !: j-surface stress component
197   USE sbc_oce , ONLY :   wndm       =>    wndm       !: 10m wind speed
198   USE sbc_oce , ONLY :   qsr        =>    qsr        !: penetrative solar radiation (w m-2) 
199   USE sbc_oce , ONLY :   emp        =>    emp        !: freshwater budget: volume flux               [Kg/m2/s]
200   USE sbc_oce , ONLY :   emps       =>    emps       !: freshwater budget: concentration/dillution   [Kg/m2/s]
201   USE sbc_oce , ONLY :   rnf        =>    rnf        !: river runoff   [Kg/m2/s]
202   USE sbc_oce , ONLY :   ln_dm2dc   =>    ln_dm2dc   !: Daily mean to Diurnal Cycle short wave (qsr)
203   USE sbc_oce , ONLY :   ln_rnf     =>    ln_rnf     !: runoffs / runoff mouths
204   USE sbc_oce , ONLY :   fr_i       =>    fr_i       !: ice fraction (between 0 to 1)
205   USE traqsr  , ONLY :   rn_abs     =>    rn_abs     !: fraction absorbed in the very near surface
206   USE traqsr  , ONLY :   rn_si0     =>    rn_si0     !: very near surface depth of extinction
207   USE traqsr  , ONLY :   ln_qsr_bio =>    ln_qsr_bio !: flag to use or not the biological fluxes for light
208   USE sbcrnf  , ONLY :   rnfmsk     =>    rnfmsk     !: mixed adv scheme in runoffs vicinity (hori.)
209   USE sbcrnf  , ONLY :   rnfmsk_z   =>    rnfmsk_z   !: mixed adv scheme in runoffs vicinity (vert.)
210
211   USE trc_oce
212
213   !* lateral diffusivity (tracers) *
214   USE ldftra_oce , ONLY :   aht0    =>   aht0     !: horizontal eddy diffusivity for tracers (m2/s)
215   USE ldftra_oce , ONLY :   ahtb0   =>   ahtb0    !: background eddy diffusivity for isopycnal diff. (m2/s)
216   USE ldftra_oce , ONLY :   ahtu    =>   ahtu     !: lateral diffusivity coef. at u-points
217   USE ldftra_oce , ONLY :   ahtv    =>   ahtv     !: lateral diffusivity coef. at v-points
218   USE ldftra_oce , ONLY :   ahtw    =>   ahtw     !: lateral diffusivity coef. at w-points
219   USE ldftra_oce , ONLY :   ahtt    =>   ahtt     !: lateral diffusivity coef. at t-points
220   USE ldftra_oce , ONLY :   aeiv0   =>   aeiv0    !: eddy induced velocity coefficient (m2/s)
221   USE ldftra_oce , ONLY :   aeiu    =>   aeiu     !: eddy induced velocity coef. at u-points (m2/s)   
222   USE ldftra_oce , ONLY :   aeiv    =>   aeiv     !: eddy induced velocity coef. at v-points (m2/s)
223   USE ldftra_oce , ONLY :   aeiw    =>   aeiw     !: eddy induced velocity coef. at w-points (m2/s)
224
225   !* vertical diffusion *
226   USE zdf_oce , ONLY :   avt        =>   avt         !: vert. diffusivity coef. at w-point for temp 
227# if defined key_zdfddm
228   USE zdfddm  , ONLY :   avs        =>   avs        !: salinity vertical diffusivity coeff. at w-point
229# endif
230
231   !* mixing & mixed layer depth *
232   USE zdfmxl , ONLY :   nmln        =>   nmln        !: number of level in the mixed layer
233   USE zdfmxl , ONLY :   hmld        =>   hmld        !: mixing layer depth (turbocline)
234   USE zdfmxl , ONLY :   hmlp        =>   hmlp        !: mixed layer depth  (rho=rho0+zdcrit) (m)
235   USE zdfmxl , ONLY :   hmlpt       =>   hmlpt       !: mixed layer depth at t-points (m)
236
237   !* direction of lateral diffusion *
238   USE ldfslp , ONLY :   lk_ldfslp  =>  lk_ldfslp     !: slopes flag
239# if   defined key_ldfslp
240   USE ldfslp , ONLY :   uslp       =>   uslp         !: i-direction slope at u-, w-points
241   USE ldfslp , ONLY :   vslp       =>   vslp         !: j-direction slope at v-, w-points
242   USE ldfslp , ONLY :   wslpi      =>   wslpi        !: i-direction slope at u-, w-points
243   USE ldfslp , ONLY :   wslpj      =>   wslpj        !: j-direction slope at v-, w-points
244# endif
245
246#else
247   !!----------------------------------------------------------------------
248   !!  Empty module :                                     No passive tracer
249   !!----------------------------------------------------------------------
250#endif
251
252   !!----------------------------------------------------------------------
253   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
254   !! $Id$
255   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
256   !!======================================================================
257END MODULE oce_trc
Note: See TracBrowser for help on using the repository browser.