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.
traqsr.F90 in NEMO/branches/UKMO/dev_r10037_GPU/src/OCE/TRA – NEMO

source: NEMO/branches/UKMO/dev_r10037_GPU/src/OCE/TRA/traqsr.F90

Last change on this file was 11467, checked in by andmirek, 5 years ago

Ticket #2197 allocate arrays at the beggining of the run

File size: 21.5 KB
Line 
1MODULE traqsr
2   !!======================================================================
3   !!                       ***  MODULE  traqsr  ***
4   !! Ocean physics:   solar radiation penetration in the top ocean levels
5   !!======================================================================
6   !! History :  OPA  !  1990-10  (B. Blanke)  Original code
7   !!            7.0  !  1991-11  (G. Madec)
8   !!                 !  1996-01  (G. Madec)  s-coordinates
9   !!   NEMO     1.0  !  2002-06  (G. Madec)  F90: Free form and module
10   !!             -   !  2005-11  (G. Madec) zco, zps, sco coordinate
11   !!            3.2  !  2009-04  (G. Madec & NEMO team)
12   !!            3.6  !  2012-05  (C. Rousset) store attenuation coef for use in ice model
13   !!            3.6  !  2015-12  (O. Aumont, J. Jouanno, C. Ethe) use vertical profile of chlorophyll
14   !!            3.7  !  2015-11  (G. Madec, A. Coward)  remove optimisation for fix volume
15   !!----------------------------------------------------------------------
16
17   !!----------------------------------------------------------------------
18   !!   tra_qsr       : temperature trend due to the penetration of solar radiation
19   !!   tra_qsr_init  : initialization of the qsr penetration
20   !!----------------------------------------------------------------------
21   USE oce            ! ocean dynamics and active tracers
22   USE phycst         ! physical constants
23   USE dom_oce        ! ocean space and time domain
24   USE sbc_oce        ! surface boundary condition: ocean
25   USE trc_oce        ! share SMS/Ocean variables
26   USE trd_oce        ! trends: ocean variables
27   USE trdtra         ! trends manager: tracers
28   !
29   USE in_out_manager ! I/O manager
30   USE prtctl         ! Print control
31   USE iom            ! I/O library
32   USE fldread        ! read input fields
33   USE restart        ! ocean restart
34   USE lib_mpp        ! MPP library
35   USE lbclnk         ! ocean lateral boundary conditions (or mpp link)
36   USE timing         ! Timing
37
38   IMPLICIT NONE
39   PRIVATE
40
41   PUBLIC   tra_qsr       ! routine called by step.F90 (ln_traqsr=T)
42   PUBLIC   tra_qsr_init  ! routine called by nemogcm.F90
43
44   !                                 !!* Namelist namtra_qsr: penetrative solar radiation
45   LOGICAL , PUBLIC ::   ln_traqsr    !: light absorption (qsr) flag
46   LOGICAL , PUBLIC ::   ln_qsr_rgb   !: Red-Green-Blue light absorption flag 
47   LOGICAL , PUBLIC ::   ln_qsr_2bd   !: 2 band         light absorption flag
48   LOGICAL , PUBLIC ::   ln_qsr_bio   !: bio-model      light absorption flag
49   INTEGER , PUBLIC ::   nn_chldta    !: use Chlorophyll data (=1) or not (=0)
50   REAL(wp), PUBLIC ::   rn_abs       !: fraction absorbed in the very near surface (RGB & 2 bands)
51   REAL(wp), PUBLIC ::   rn_si0       !: very near surface depth of extinction      (RGB & 2 bands)
52   REAL(wp), PUBLIC ::   rn_si1       !: deepest depth of extinction (water type I)       (2 bands)
53   !
54   INTEGER , PUBLIC ::   nksr         !: levels below which the light cannot penetrate (depth larger than 391 m)
55 
56   INTEGER, PARAMETER ::   np_RGB  = 1   ! R-G-B     light penetration with constant Chlorophyll
57   INTEGER, PARAMETER ::   np_RGBc = 2   ! R-G-B     light penetration with Chlorophyll data
58   INTEGER, PARAMETER ::   np_2BD  = 3   ! 2 bands   light penetration
59   INTEGER, PARAMETER ::   np_BIO  = 4   ! bio-model light penetration
60   !
61   INTEGER  ::   nqsr    ! user choice of the type of light penetration
62   REAL(wp) ::   xsi0r   ! inverse of rn_si0
63   REAL(wp) ::   xsi1r   ! inverse of rn_si1
64   !
65   REAL(wp) , DIMENSION(3,61)           ::   rkrgb    ! tabulated attenuation coefficients for RGB absorption
66   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_chl   ! structure of input Chl (file informations, fields read)
67
68   !! * Substitutions
69#  include "vectopt_loop_substitute.h90"
70   !!----------------------------------------------------------------------
71   !! NEMO/OCE 4.0 , NEMO Consortium (2018)
72   !! $Id$
73   !! Software governed by the CeCILL license (see ./LICENSE)
74   !!----------------------------------------------------------------------
75CONTAINS
76
77   SUBROUTINE tra_qsr( kt )
78      !!----------------------------------------------------------------------
79      !!                  ***  ROUTINE tra_qsr  ***
80      !!
81      !! ** Purpose :   Compute the temperature trend due to the solar radiation
82      !!              penetration and add it to the general temperature trend.
83      !!
84      !! ** Method  : The profile of the solar radiation within the ocean is defined
85      !!      through 2 wavebands (rn_si0,rn_si1) or 3 wavebands (RGB) and a ratio rn_abs
86      !!      Considering the 2 wavebands case:
87      !!         I(k) = Qsr*( rn_abs*EXP(z(k)/rn_si0) + (1.-rn_abs)*EXP(z(k)/rn_si1) )
88      !!         The temperature trend associated with the solar radiation penetration
89      !!         is given by : zta = 1/e3t dk[ I ] / (rau0*Cp)
90      !!         At the bottom, boudary condition for the radiation is no flux :
91      !!      all heat which has not been absorbed in the above levels is put
92      !!      in the last ocean level.
93      !!         The computation is only done down to the level where
94      !!      I(k) < 1.e-15 W/m2 (i.e. over the top nksr levels) .
95      !!
96      !! ** Action  : - update ta with the penetrative solar radiation trend
97      !!              - send  trend for further diagnostics (l_trdtra=T)
98      !!
99      !! Reference  : Jerlov, N. G., 1968 Optical Oceanography, Elsevier, 194pp.
100      !!              Lengaigne et al. 2007, Clim. Dyn., V28, 5, 503-516.
101      !!              Morel, A. et Berthon, JF, 1989, Limnol Oceanogr 34(8), 1545-1562
102      !!----------------------------------------------------------------------
103      USE scoce, ONLY : zekb => scr2D1, zekg => scr2D2, zekr => scr2D3, &
104                       ze0 => scr1, ze1 => scr2, ze2 => scr3, ze3 => scr4, zea => scr5, ztrdt => scr6, &
105                       zetot => scr7, zchl3d => scr8 
106      INTEGER, INTENT(in) ::   kt     ! ocean time-step
107      !
108      INTEGER  ::   ji, jj, jk               ! dummy loop indices
109      INTEGER  ::   irgb                     ! local integers
110      REAL(wp) ::   zchl, zcoef, z1_2        ! local scalars
111      REAL(wp) ::   zc0 , zc1 , zc2 , zc3    !    -         -
112      REAL(wp) ::   zzc0, zzc1, zzc2, zzc3   !    -         -
113      REAL(wp) ::   zz0 , zz1                !    -         -
114      REAL(wp) ::   zCb, zCmax, zze, zpsi, zpsimax, zdelpsi, zCtot, zCze
115      REAL(wp) ::   zlogc, zlogc2, zlogc3 
116      !!----------------------------------------------------------------------
117      !
118      IF( ln_timing )   CALL timing_start('tra_qsr')
119      !
120      IF( kt == nit000 ) THEN
121         IF(lwp) WRITE(numout,*)
122         IF(lwp) WRITE(numout,*) 'tra_qsr : penetration of the surface solar radiation'
123         IF(lwp) WRITE(numout,*) '~~~~~~~'
124      ENDIF
125      !
126      IF( l_trdtra ) THEN      ! trends diagnostic: save the input temperature trend
127         ztrdt(:,:,:) = tsa(:,:,:,jp_tem)
128      ENDIF
129      !
130      !                         !-----------------------------------!
131      !                         !  before qsr induced heat content  !
132      !                         !-----------------------------------!
133      IF( kt == nit000 ) THEN          !==  1st time step  ==!
134!!gm case neuler  not taken into account....
135         IF( ln_rstart .AND. iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0 ) THEN    ! read in restart
136            IF(lwp) WRITE(numout,*) '          nit000-1 qsr tracer content forcing field read in the restart file'
137            z1_2 = 0.5_wp
138            CALL iom_get( numror, jpdom_autoglo, 'qsr_hc_b', qsr_hc_b, ldxios = lrxios )   ! before heat content trend due to Qsr flux
139         ELSE                                           ! No restart or restart not found: Euler forward time stepping
140            z1_2 = 1._wp
141            qsr_hc_b(:,:,:) = 0._wp
142         ENDIF
143      ELSE                             !==  Swap of qsr heat content  ==!
144         z1_2 = 0.5_wp
145         qsr_hc_b(:,:,:) = qsr_hc(:,:,:)
146      ENDIF
147      !
148      !                         !--------------------------------!
149      SELECT CASE( nqsr )       !  now qsr induced heat content  !
150      !                         !--------------------------------!
151      !
152      CASE( np_BIO )                   !==  bio-model fluxes  ==!
153         !
154         DO jk = 1, nksr
155            qsr_hc(:,:,jk) = r1_rau0_rcp * ( etot3(:,:,jk) - etot3(:,:,jk+1) )
156         END DO
157         !
158      CASE( np_RGB , np_RGBc )         !==  R-G-B fluxes  ==!
159         !
160         IF( nqsr == np_RGBc ) THEN          !*  Variable Chlorophyll
161            CALL fld_read( kt, 1, sf_chl )         ! Read Chl data and provides it at the current time step
162            DO jk = 1, nksr + 1
163               DO jj = 2, jpjm1                       ! Separation in R-G-B depending of the surface Chl
164                  DO ji = fs_2, fs_jpim1
165                     zchl    = sf_chl(1)%fnow(ji,jj,1)
166                     zCtot   = 40.6  * zchl**0.459
167                     zze     = 568.2 * zCtot**(-0.746)
168                     IF( zze > 102. ) zze = 200.0 * zCtot**(-0.293)
169                     zpsi    = gdepw_n(ji,jj,jk) / zze
170                     !
171                     zlogc   = LOG( zchl )
172                     zlogc2  = zlogc * zlogc
173                     zlogc3  = zlogc * zlogc * zlogc
174                     zCb     = 0.768 + 0.087 * zlogc - 0.179 * zlogc2 - 0.025 * zlogc3
175                     zCmax   = 0.299 - 0.289 * zlogc + 0.579 * zlogc2
176                     zpsimax = 0.6   - 0.640 * zlogc + 0.021 * zlogc2 + 0.115 * zlogc3
177                     zdelpsi = 0.710 + 0.159 * zlogc + 0.021 * zlogc2
178                     zCze    = 1.12  * (zchl)**0.803 
179                     !
180                     zchl3d(ji,jj,jk) = zCze * ( zCb + zCmax * EXP( -( (zpsi - zpsimax) / zdelpsi )**2 ) )
181                  END DO
182                  !
183               END DO
184            END DO
185         ELSE                                !* constant chrlorophyll
186           DO jk = 1, nksr + 1
187              zchl3d(:,:,jk) = 0.05 
188            ENDDO
189         ENDIF
190         !
191         zcoef  = ( 1. - rn_abs ) / 3._wp    !* surface equi-partition in R-G-B
192         DO jj = 2, jpjm1
193            DO ji = fs_2, fs_jpim1
194               ze0(ji,jj,1) = rn_abs * qsr(ji,jj)
195               ze1(ji,jj,1) = zcoef  * qsr(ji,jj)
196               ze2(ji,jj,1) = zcoef  * qsr(ji,jj)
197               ze3(ji,jj,1) = zcoef  * qsr(ji,jj)
198               zea(ji,jj,1) =          qsr(ji,jj)
199            END DO
200         END DO
201         !
202         DO jk = 2, nksr+1                   !* interior equi-partition in R-G-B depending of vertical profile of Chl
203            DO jj = 2, jpjm1
204               DO ji = fs_2, fs_jpim1
205                  zchl = MIN( 10. , MAX( 0.03, zchl3d(ji,jj,jk) ) )
206                  irgb = NINT( 41 + 20.*LOG10(zchl) + 1.e-15 )
207                  zekb(ji,jj) = rkrgb(1,irgb)
208                  zekg(ji,jj) = rkrgb(2,irgb)
209                  zekr(ji,jj) = rkrgb(3,irgb)
210               END DO
211            END DO
212
213            DO jj = 2, jpjm1
214               DO ji = fs_2, fs_jpim1
215                  zc0 = ze0(ji,jj,jk-1) * EXP( - e3t_n(ji,jj,jk-1) * xsi0r       )
216                  zc1 = ze1(ji,jj,jk-1) * EXP( - e3t_n(ji,jj,jk-1) * zekb(ji,jj) )
217                  zc2 = ze2(ji,jj,jk-1) * EXP( - e3t_n(ji,jj,jk-1) * zekg(ji,jj) )
218                  zc3 = ze3(ji,jj,jk-1) * EXP( - e3t_n(ji,jj,jk-1) * zekr(ji,jj) )
219                  ze0(ji,jj,jk) = zc0
220                  ze1(ji,jj,jk) = zc1
221                  ze2(ji,jj,jk) = zc2
222                  ze3(ji,jj,jk) = zc3
223                  zea(ji,jj,jk) = ( zc0 + zc1 + zc2 + zc3 ) * wmask(ji,jj,jk)
224               END DO
225            END DO
226         END DO
227         !
228         DO jk = 1, nksr                     !* now qsr induced heat content
229            DO jj = 2, jpjm1
230               DO ji = fs_2, fs_jpim1
231                  qsr_hc(ji,jj,jk) = r1_rau0_rcp * ( zea(ji,jj,jk) - zea(ji,jj,jk+1) )
232               END DO
233            END DO
234         END DO
235         !
236      CASE( np_2BD  )            !==  2-bands fluxes  ==!
237         !
238         zz0 =        rn_abs   * r1_rau0_rcp      ! surface equi-partition in 2-bands
239         zz1 = ( 1. - rn_abs ) * r1_rau0_rcp
240         DO jk = 1, nksr                          ! solar heat absorbed at T-point in the top 400m
241            DO jj = 2, jpjm1
242               DO ji = fs_2, fs_jpim1
243                  zc0 = zz0 * EXP( -gdepw_n(ji,jj,jk  )*xsi0r ) + zz1 * EXP( -gdepw_n(ji,jj,jk  )*xsi1r )
244                  zc1 = zz0 * EXP( -gdepw_n(ji,jj,jk+1)*xsi0r ) + zz1 * EXP( -gdepw_n(ji,jj,jk+1)*xsi1r )
245                  qsr_hc(ji,jj,jk) = qsr(ji,jj) * ( zc0 * wmask(ji,jj,jk) - zc1 * wmask(ji,jj,jk+1) ) 
246               END DO
247            END DO
248         END DO
249         !
250      END SELECT
251      !
252      !                          !-----------------------------!
253      DO jk = 1, nksr            !  update to the temp. trend  !
254         DO jj = 2, jpjm1        !-----------------------------!
255            DO ji = fs_2, fs_jpim1   ! vector opt.
256               tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)   &
257                  &                 + z1_2 * ( qsr_hc_b(ji,jj,jk) + qsr_hc(ji,jj,jk) ) / e3t_n(ji,jj,jk)
258            END DO
259         END DO
260      END DO
261      !
262      ! sea-ice: store the 1st ocean level attenuation coefficient
263      DO jj = 2, jpjm1 
264         DO ji = fs_2, fs_jpim1   ! vector opt.
265            IF( qsr(ji,jj) /= 0._wp ) THEN   ;   fraqsr_1lev(ji,jj) = qsr_hc(ji,jj,1) / ( r1_rau0_rcp * qsr(ji,jj) )
266            ELSE                             ;   fraqsr_1lev(ji,jj) = 1._wp
267            ENDIF
268         END DO
269      END DO
270      CALL lbc_lnk( fraqsr_1lev(:,:), 'T', 1._wp )
271      !
272      IF( iom_use('qsr3d') ) THEN      ! output the shortwave Radiation distribution
273         zetot(:,:,nksr+1:jpk) = 0._wp     ! below ~400m set to zero
274         DO jk = nksr, 1, -1
275            zetot(:,:,jk) = zetot(:,:,jk+1) + qsr_hc(:,:,jk) * rau0_rcp
276         END DO         
277         CALL iom_put( 'qsr3d', zetot )   ! 3D distribution of shortwave Radiation
278      ENDIF
279      !
280      IF( lrst_oce ) THEN     ! write in the ocean restart file
281         IF( lwxios ) CALL iom_swap(      cwxios_context          )
282         CALL iom_rstput( kt, nitrst, numrow, 'qsr_hc_b'   , qsr_hc     , ldxios = lwxios )
283         CALL iom_rstput( kt, nitrst, numrow, 'fraqsr_1lev', fraqsr_1lev, ldxios = lwxios ) 
284         IF( lwxios ) CALL iom_swap(      cxios_context          )
285      ENDIF
286      !
287      IF( l_trdtra ) THEN     ! qsr tracers trends saved for diagnostics
288         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:)
289         CALL trd_tra( kt, 'TRA', jp_tem, jptra_qsr, ztrdt )
290      ENDIF
291      !                       ! print mean trends (used for debugging)
292      IF(ln_ctl)   CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' qsr  - Ta: ', mask1=tmask, clinfo3='tra-ta' )
293      !
294      IF( ln_timing )   CALL timing_stop('tra_qsr')
295      !
296   END SUBROUTINE tra_qsr
297
298
299   SUBROUTINE tra_qsr_init
300      !!----------------------------------------------------------------------
301      !!                  ***  ROUTINE tra_qsr_init  ***
302      !!
303      !! ** Purpose :   Initialization for the penetrative solar radiation
304      !!
305      !! ** Method  :   The profile of solar radiation within the ocean is set
306      !!      from two length scale of penetration (rn_si0,rn_si1) and a ratio
307      !!      (rn_abs). These parameters are read in the namtra_qsr namelist. The
308      !!      default values correspond to clear water (type I in Jerlov'
309      !!      (1968) classification.
310      !!         called by tra_qsr at the first timestep (nit000)
311      !!
312      !! ** Action  : - initialize rn_si0, rn_si1 and rn_abs
313      !!
314      !! Reference : Jerlov, N. G., 1968 Optical Oceanography, Elsevier, 194pp.
315      !!----------------------------------------------------------------------
316      INTEGER  ::   ji, jj, jk                  ! dummy loop indices
317      INTEGER  ::   ios, irgb, ierror, ioptio   ! local integer
318      REAL(wp) ::   zz0, zc0 , zc1, zcoef      ! local scalars
319      REAL(wp) ::   zz1, zc2 , zc3, zchl       !   -      -
320      !
321      CHARACTER(len=100) ::   cn_dir   ! Root directory for location of ssr files
322      TYPE(FLD_N)        ::   sn_chl   ! informations about the chlorofyl field to be read
323      !!
324      NAMELIST/namtra_qsr/  sn_chl, cn_dir, ln_qsr_rgb, ln_qsr_2bd, ln_qsr_bio,  &
325         &                  nn_chldta, rn_abs, rn_si0, rn_si1
326      !!----------------------------------------------------------------------
327      !
328      REWIND( numnam_ref )              ! Namelist namtra_qsr in reference     namelist
329      READ  ( numnam_ref, namtra_qsr, IOSTAT = ios, ERR = 901)
330901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtra_qsr in reference namelist', lwp )
331      !
332      REWIND( numnam_cfg )              ! Namelist namtra_qsr in configuration namelist
333      READ  ( numnam_cfg, namtra_qsr, IOSTAT = ios, ERR = 902 )
334902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtra_qsr in configuration namelist', lwp )
335      IF(lwm) WRITE ( numond, namtra_qsr )
336      !
337      IF(lwp) THEN                ! control print
338         WRITE(numout,*)
339         WRITE(numout,*) 'tra_qsr_init : penetration of the surface solar radiation'
340         WRITE(numout,*) '~~~~~~~~~~~~'
341         WRITE(numout,*) '   Namelist namtra_qsr : set the parameter of penetration'
342         WRITE(numout,*) '      RGB (Red-Green-Blue) light penetration       ln_qsr_rgb = ', ln_qsr_rgb
343         WRITE(numout,*) '      2 band               light penetration       ln_qsr_2bd = ', ln_qsr_2bd
344         WRITE(numout,*) '      bio-model            light penetration       ln_qsr_bio = ', ln_qsr_bio
345         WRITE(numout,*) '      RGB : Chl data (=1) or cst value (=0)        nn_chldta  = ', nn_chldta
346         WRITE(numout,*) '      RGB & 2 bands: fraction of light (rn_si1)    rn_abs     = ', rn_abs
347         WRITE(numout,*) '      RGB & 2 bands: shortess depth of extinction  rn_si0     = ', rn_si0
348         WRITE(numout,*) '      2 bands: longest depth of extinction         rn_si1     = ', rn_si1
349         WRITE(numout,*)
350      ENDIF
351      !
352      ioptio = 0                    ! Parameter control
353      IF( ln_qsr_rgb  )   ioptio = ioptio + 1
354      IF( ln_qsr_2bd  )   ioptio = ioptio + 1
355      IF( ln_qsr_bio  )   ioptio = ioptio + 1
356      !
357      IF( ioptio /= 1 )   CALL ctl_stop( 'Choose ONE type of light penetration in namelist namtra_qsr',  &
358         &                               ' 2 bands, 3 RGB bands or bio-model light penetration' )
359      !
360      IF( ln_qsr_rgb .AND. nn_chldta == 0 )   nqsr = np_RGB 
361      IF( ln_qsr_rgb .AND. nn_chldta == 1 )   nqsr = np_RGBc
362      IF( ln_qsr_2bd                      )   nqsr = np_2BD
363      IF( ln_qsr_bio                      )   nqsr = np_BIO
364      !
365      !                             ! Initialisation
366      xsi0r = 1._wp / rn_si0
367      xsi1r = 1._wp / rn_si1
368      !
369      SELECT CASE( nqsr )
370      !                               
371      CASE( np_RGB , np_RGBc )         !==  Red-Green-Blue light penetration  ==!
372         !                             
373         IF(lwp)   WRITE(numout,*) '   ==>>>   R-G-B   light penetration '
374         !
375         CALL trc_oce_rgb( rkrgb )                 ! tabulated attenuation coef.
376         !                                   
377         nksr = trc_oce_ext_lev( r_si2, 33._wp )   ! level of light extinction
378         !
379         IF(lwp) WRITE(numout,*) '        level of light extinction = ', nksr, ' ref depth = ', gdepw_1d(nksr+1), ' m'
380         !
381         IF( nqsr == np_RGBc ) THEN                ! Chl data : set sf_chl structure
382            IF(lwp) WRITE(numout,*) '   ==>>>   Chlorophyll read in a file'
383            ALLOCATE( sf_chl(1), STAT=ierror )
384            IF( ierror > 0 ) THEN
385               CALL ctl_stop( 'tra_qsr_init: unable to allocate sf_chl structure' )   ;   RETURN
386            ENDIF
387            ALLOCATE( sf_chl(1)%fnow(jpi,jpj,1)   )
388            IF( sn_chl%ln_tint )   ALLOCATE( sf_chl(1)%fdta(jpi,jpj,1,2) )
389            !                                        ! fill sf_chl with sn_chl and control print
390            CALL fld_fill( sf_chl, (/ sn_chl /), cn_dir, 'tra_qsr_init',   &
391               &           'Solar penetration function of read chlorophyll', 'namtra_qsr' , no_print )
392         ENDIF
393         IF( nqsr == np_RGB ) THEN                 ! constant Chl
394            IF(lwp) WRITE(numout,*) '   ==>>>   Constant Chlorophyll concentration = 0.05'
395         ENDIF
396         !
397      CASE( np_2BD )                   !==  2 bands light penetration  ==!
398         !
399         IF(lwp)  WRITE(numout,*) '   ==>>>   2 bands light penetration'
400         !
401         nksr = trc_oce_ext_lev( rn_si1, 100._wp )    ! level of light extinction
402         IF(lwp) WRITE(numout,*) '        level of light extinction = ', nksr, ' ref depth = ', gdepw_1d(nksr+1), ' m'
403         !
404      CASE( np_BIO )                   !==  BIO light penetration  ==!
405         !
406         IF(lwp) WRITE(numout,*) '   ==>>>   bio-model light penetration'
407         IF( .NOT.lk_top )   CALL ctl_stop( 'No bio model : ln_qsr_bio = true impossible ' )
408         !
409      END SELECT
410      !
411      qsr_hc(:,:,:) = 0._wp     ! now qsr heat content set to zero where it will not be computed
412      !
413      ! 1st ocean level attenuation coefficient (used in sbcssm)
414      IF( iom_varid( numror, 'fraqsr_1lev', ldstop = .FALSE. ) > 0 ) THEN
415         CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev'  , fraqsr_1lev, ldxios = lrxios  )
416      ELSE
417         fraqsr_1lev(:,:) = 1._wp   ! default : no penetration
418      ENDIF
419      !
420      IF( lwxios ) THEN
421         CALL iom_set_rstw_var_active('qsr_hc_b')
422         CALL iom_set_rstw_var_active('fraqsr_1lev')
423      ENDIF
424      !
425   END SUBROUTINE tra_qsr_init
426
427   !!======================================================================
428END MODULE traqsr
Note: See TracBrowser for help on using the repository browser.