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.
trclsm_lobster.F90 in trunk/NEMO/TOP_SRC/LOBSTER – NEMO

source: trunk/NEMO/TOP_SRC/LOBSTER/trclsm_lobster.F90 @ 1255

Last change on this file since 1255 was 1255, checked in by cetlod, 15 years ago

minor modifications in all top models, see ticket:299

  • Property svn:keywords set to Id
File size: 16.4 KB
Line 
1MODULE trclsm_lobster
2   !!======================================================================
3   !!                      ***  MODULE trclsm_lobster  ***
4   !! TOP :   initialisation of some run parameters for LOBSTER bio-model
5   !!======================================================================
6   !! History :   2.0  !  2007-12  (C. Ethe, G. Madec) from trclsm.lobster1.h90
7   !!----------------------------------------------------------------------
8#if defined key_lobster
9   !!----------------------------------------------------------------------
10   !!   'key_lobster'   :                                 LOBSTER bio-model
11   !!----------------------------------------------------------------------
12   !! trc_lsm_lobster      : LOBSTER model namelist read
13   !!----------------------------------------------------------------------
14   USE oce_trc         ! Ocean variables
15   USE par_trc         ! TOP parameters
16   USE trc             ! TOP variables
17   USE sms_lobster     ! sms trends
18
19   IMPLICIT NONE
20   PRIVATE
21
22   PUBLIC   trc_lsm_lobster   ! called by trclsm.F90 module
23
24   !!----------------------------------------------------------------------
25   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)
26   !! $Id$
27   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
28   !!----------------------------------------------------------------------
29
30CONTAINS
31
32   SUBROUTINE trc_lsm_lobster
33      !!----------------------------------------------------------------------
34      !!                     ***  trc_lsm_lobster  *** 
35      !!
36      !! ** Purpose :   read LOBSTER namelist
37      !!
38      !! ** input   :   file 'namelist.trc.sms' containing the following
39      !!             namelist: natbio, natopt, and natdbi ("key_trc_diabio")
40      !!----------------------------------------------------------------------
41      CHARACTER (len=32) :: clname
42      INTEGER ::   numnatl
43      !!
44#if defined key_trc_diaadd
45      INTEGER :: jl, jn
46      ! definition of additional diagnostic as a structure
47      TYPE DIAG
48         CHARACTER(len = 20)  :: snamedia   !: short name
49         CHARACTER(len = 80 ) :: lnamedia   !: long name
50         CHARACTER(len = 20 ) :: unitdia    !: unit
51      END TYPE DIAG
52
53      TYPE(DIAG) , DIMENSION(jp_lobster_2d) :: lobdia2d
54      TYPE(DIAG) , DIMENSION(jp_lobster_3d) :: lobdia3d
55#endif
56#if defined key_trc_diabio
57      INTEGER :: js, jd
58      ! definition of additional diagnostic as a structure
59      TYPE DIABIO
60         CHARACTER(len = 20)  :: snamebio   !: short name
61         CHARACTER(len = 80 ) :: lnamebio   !: long name
62         CHARACTER(len = 20 ) :: unitbio    !: unit
63      END TYPE DIABIO
64
65      TYPE(DIABIO) , DIMENSION(jp_lobster_trd) :: lobdiabio
66#endif
67
68      NAMELIST/namlobphy/ apmin, tmumax, rgamma, fphylab, tmmaxp, tmminp, &
69         &                rcchl, aki, toptp 
70      NAMELIST/namlobnut/ anmin, akno3, aknh4, taunn, psinut
71      NAMELIST/namlobzoo/ azmin, eggzoo, rgz, rppz, taus, aks, rpnaz,     &
72         &                rdnaz, tauzn, fzoolab, fdbod, tmmaxz, tmminz
73      NAMELIST/namlobdet/ admin, taudn, fdetlab, vsed
74      NAMELIST/namlobdom/ taudomn
75      NAMELIST/namlobsed/ sedlam, sedlostpoc
76      NAMELIST/namlobrat/ redf, reddom, slopet, tmaxr, tminr, xhr,        &
77         &                filmax, toptgz, tmaxgz, anumin, afdmin
78
79      NAMELIST/namlobopt/ xkg0, xkr0, xkgp, xkrp, xlg, xlr, rpig
80#if defined key_trc_diaadd
81      NAMELIST/namlobdia/nwritedia, lobdia3d, lobdia2d     ! additional diagnostics
82#endif
83#if defined key_trc_diabio
84      NAMELIST/namlobdbi/nwritebio, lobdiabio
85#endif
86      !!----------------------------------------------------------------------
87
88      IF(lwp) WRITE(numout,*)
89      IF(lwp) WRITE(numout,*) ' trc_lsm_lobster : read LOBSTER namelists'
90      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~'
91
92      !                               ! Open the namelist file
93      !                               ! ----------------------
94      clname ='namelist_lobster'
95      CALL ctlopn( numnatl, clname, 'OLD', 'FORMATTED', 'SEQUENTIAL', 1, numout, .FALSE., 1 )
96
97      ! namlobphy : parameters for phytoplankton
98      apmin   = 0. 
99      tmumax  = 0. 
100      rgamma  = 0. 
101      fphylab = 0. 
102      tmmaxp  = 0.
103      tmminp  = 0.
104      rcchl   = 0. 
105      aki     = 0. 
106      toptp   = 0. 
107
108      REWIND( numnatl )
109      READ  ( numnatl, namlobphy )
110
111      IF(lwp) THEN
112          WRITE(numout,*) ' Namelist namlobphy'
113          WRITE(numout,*) '    minimum phytoplancton concentration                  apmin     =', apmin
114          WRITE(numout,*) '    phyto max growth rate                                tmumax    =', 86400 * tmumax, ' d'
115          WRITE(numout,*) '    phytoplankton exudation fraction                     rgamma    =', rgamma
116          WRITE(numout,*) '    NH4 fraction of phytoplankton exsudation             fphylab   =', fphylab
117          WRITE(numout,*) '    maximal phyto mortality rate                         tmmaxp    =', 86400 * tmmaxp
118          WRITE(numout,*) '    minimal phyto mortality rate                         tmminp    =', 86400 * tmminp
119          WRITE(numout,*) '    carbone/chlorophyl ratio                             rcchl     =', rcchl
120          WRITE(numout,*) '    light hlaf saturation constant                       aki       =', aki
121          WRITE(numout,*) '    optimal photosynthesis temperature                   toptp     =', toptp
122          WRITE(numout,*) ' '
123      ENDIF
124
125      ! namlobnut : parameters for nutrients
126      anmin  = 0.
127      psinut = 0.
128      akno3  = 0.
129      aknh4  = 0.
130      taunn  = 0.
131
132      REWIND( numnatl )
133      READ  ( numnatl, namlobnut )
134      IF(lwp) THEN
135          WRITE(numout,*) ' Namelist namlobnut'
136          WRITE(numout,*) '    minimum nutrients     concentration                  anmin     =', anmin
137          WRITE(numout,*) '    half-saturation nutrient for no3 uptake              akno3     =', akno3
138          WRITE(numout,*) '    half-saturation nutrient for nh4 uptake              aknh4     =', aknh4
139          WRITE(numout,*) '    nitrification rate                                   taunn     =', taunn
140          WRITE(numout,*) '    inhibition of no3 uptake by nh4                      psinut    =', psinut
141          WRITE(numout,*) ' '
142      ENDIF
143
144      ! namlobzoo : parameters for zooplankton
145      azmin   = 0.
146      rgz     = 0.
147      rppz    = 0.
148      taus    = 0.
149      aks     = 0.
150      rpnaz   = 0.
151      rdnaz   = 0.
152      eggzoo  = 0.
153      tauzn   = 0.
154      tmmaxz  = 0.
155      tmminz  = 0.
156      fzoolab = 0.
157      fdbod   = 0.
158
159      REWIND( numnatl )
160      READ  ( numnatl, namlobzoo )
161
162      IF(lwp) THEN
163          WRITE(numout,*) ' Namelist namlobzoo'
164          WRITE(numout,*) '    minimum zooplancton   concentration                  azmin     =', azmin
165          WRITE(numout,*) '    minimum  for zoo concentration                       eggzoo    =', eggzoo
166          WRITE(numout,*) '    widtht of zoo temperature FUNCTION                   rgz       =', rgz
167          WRITE(numout,*) '    zoo preference for phyto                             rppz      =', rppz
168          WRITE(numout,*) '    maximal zoo grazing rate                             taus      =', 86400 * taus, ' d'
169          WRITE(numout,*) '    half saturation constant for zoo food                aks       =', aks
170          WRITE(numout,*) '    non-assimilated phyto by zoo                         rpnaz     =', rpnaz
171          WRITE(numout,*) '    non-assimilated detritus by zoo                      rdnaz     =', rdnaz
172          WRITE(numout,*) '    zoo specific excretion rate                          tauzn     =', 86400 * tauzn
173          WRITE(numout,*) '    maximal zoo mortality rate                           tmmaxz    =', 86400 * tmmaxz
174          WRITE(numout,*) '    minimal zoo mortality rate                           tmminz    =', 86400 * tmminz
175          WRITE(numout,*) '    NH4 fraction of zooplankton excretion                fzoolab   =', fzoolab
176          WRITE(numout,*) '    Zooplankton mortality fraction that goes to detritus fdbod     =', fdbod
177          WRITE(numout,*) ' '
178      ENDIF
179
180      ! namlobdet : parameters for detritus
181      admin   = 0.
182      taudn   = 0.
183      vsed    = 0.
184      fdetlab = 0.
185
186      REWIND( numnatl )
187      READ  ( numnatl, namlobdet )
188
189      IF(lwp) THEN
190          WRITE(numout,*) ' Namelist namlobdet'
191          WRITE(numout,*) '    minimum detritus      concentration                  admin     =', admin
192          WRITE(numout,*) '    detrital breakdown rate                              taudn     =', 86400 * taudn , ' d'
193          WRITE(numout,*) '    detritus sedimentation speed                         vsed      =', 86400 * vsed  , ' d'
194          WRITE(numout,*) '    NH4 fraction of detritus dissolution                 fdetlab   =', fdetlab
195          WRITE(numout,*) ' '
196      ENDIF
197
198      ! namlobdom : parameters for DOM
199      taudomn = 0.
200
201      REWIND( numnatl ) 
202      READ  ( numnatl, namlobdom )
203
204      IF(lwp) THEN
205          WRITE(numout,*) ' Namelist namlobdom'
206          WRITE(numout,*) '    dom remineralisation rate                            taudomn   =', taudomn
207          WRITE(numout,*) ' '
208      ENDIF
209
210      ! namlobsed : parameters from aphotic layers to sediment
211      sedlam     = 0.
212      sedlostpoc = 0.
213
214      REWIND( numnatl )
215      READ  ( numnatl, namlobsed )
216
217      IF(lwp) THEN
218          WRITE(numout,*) ' Namelist namlobsed'
219          WRITE(numout,*) '    time coeff of POC in sediments                       sedlam    =', sedlam
220          WRITE(numout,*) '    Sediment geol loss for POC                           sedlostpoc=', sedlostpoc
221          WRITE(numout,*) ' '
222      ENDIF
223
224      ! namlobrat : general coefficient
225      redf   = 0.
226      reddom = 0.
227      slopet = 0.
228      tmaxr  = 1./(     4.*rday)*0.
229      tminr  = 1./(24.*30.*rday)*0.
230      xhr    = 0.
231      filmax = 0.
232      toptgz = 0.
233      tmaxgz = 0.
234      anumin = 0.
235      afdmin = 0.
236
237      REWIND( numnatl )
238      READ  ( numnatl, namlobrat )
239
240      IF(lwp) THEN
241          WRITE(numout,*) ' Namelist namlobrat'
242          WRITE(numout,*) '    redfield ratio  c:n for phyto                        redf      =', redf 
243          WRITE(numout,*) '    redfield ratio  c:n for DOM                          reddom    =', reddom 
244          WRITE(numout,*) '    van t hoff coefficient                               slopet    =', slopet
245          WRITE(numout,*) '    maximum damping for d z or p                         tmaxr     =', tmaxr
246          WRITE(numout,*) '    damping-remineralisation rate                        tminr     =', tminr
247          WRITE(numout,*) '    coeff for martin''s remineralistion                  xhr       =', xhr
248          WRITE(numout,*) '    maximal mass clearance rate for zoo                  filmax    =', filmax
249          WRITE(numout,*) '    optimal temperature for zoo growth                   toptgz    =', toptgz
250          WRITE(numout,*) '    maximal temperature for zoo growth                   tmaxgz    =', tmaxgz
251          WRITE(numout,*) '    nutrient threshold for phyto mort                    anumin    =', anumin
252          WRITE(numout,*) '    food threshold for zoo mort                          afdmin    =', afdmin
253          WRITE(numout,*) ' '
254      ENDIF
255
256
257      ! namlobopt : optical parameters
258      xkg0  = 0. 
259      xkr0  = 0.
260      xkgp  = 0.
261      xkrp  = 0.
262      xlg   = 0.
263      xlr   = 0.
264      rpig  = 0.
265
266      REWIND( numnatl )
267      READ  ( numnatl, namlobopt )
268
269      IF(lwp) THEN                         
270         WRITE(numout,*)
271         WRITE(numout,*) ' Namelist namlobopt'
272         WRITE(numout,*) '    green   water absorption coeff                       xkg0  = ', xkg0
273         WRITE(numout,*) '    red water absorption coeff                           xkr0  = ', xkr0
274         WRITE(numout,*) '    pigment red absorption coeff                         xkrp  = ', xkrp
275         WRITE(numout,*) '    pigment green absorption coeff                       xkgp  = ', xkgp
276         WRITE(numout,*) '    green chl exposant                                   xlg   = ', xlg
277         WRITE(numout,*) '    red   chl exposant                                   xlr   = ', xlr
278         WRITE(numout,*) '    chla/chla+phea ratio                                 rpig  = ', rpig
279         WRITE(numout,*) ' '
280      ENDIF
281
282#if defined key_trc_diaadd
283
284      ! Namelist namlobdia
285      ! -------------------
286      nwritedia = 10                   ! default values
287
288      DO jl = 1, jp_lobster_2d
289         jn = jp_lob0_2d + jl - 1
290         WRITE(ctrc2d(jn),'("2D_",I1)') jn                      ! short name
291         WRITE(ctrc2l(jn),'("2D DIAGNOSTIC NUMBER ",I2)') jn    ! long name
292         ctrc2u(jn) = ' '                                       ! units
293      END DO
294      !                                 ! 3D output arrays
295      DO jl = 1, jp_lobster_3d
296         jn = jp_lob0_3d + jl - 1
297         WRITE(ctrc3d(jn),'("3D_",I1)') jn                      ! short name
298         WRITE(ctrc3l(jn),'("3D DIAGNOSTIC NUMBER ",I2)') jn    ! long name
299         ctrc3u(jn) = ' '                                       ! units
300      END DO
301
302      REWIND( numnatl )               ! read natrtd
303      READ  ( numnatl, namlobdia )
304
305      DO jl = 1, jp_lobster_2d
306         jn = jp_lob0_2d + jl - 1
307         ctrc2d(jn) = lobdia2d(jl)%snamedia
308         ctrc2l(jn) = lobdia2d(jl)%lnamedia
309         ctrc2u(jn) = lobdia2d(jl)%unitdia
310      END DO
311
312      DO jl = 1, jp_lobster_3d
313         jn = jp_lob0_3d + jl - 1
314         ctrc3d(jn) = lobdia3d(jl)%snamedia
315         ctrc3l(jn) = lobdia3d(jl)%lnamedia
316         ctrc3u(jn) = lobdia3d(jl)%unitdia
317      END DO
318
319      IF(lwp) THEN                   ! control print
320         WRITE(numout,*)
321         WRITE(numout,*) ' Namelist : natadd'
322         WRITE(numout,*) '    frequency of outputs for additional arrays nwritedia = ', nwritedia
323         DO jl = 1, jp_lobster_3d
324            jn = jp_lob0_3d + jl - 1
325            WRITE(numout,*) '   3d output field No : ',jn
326            WRITE(numout,*) '   short name         : ', TRIM(ctrc3d(jn))
327            WRITE(numout,*) '   long name          : ', TRIM(ctrc3l(jn))
328            WRITE(numout,*) '   unit               : ', TRIM(ctrc3u(jn))
329            WRITE(numout,*) ' '
330         END DO
331
332         DO jl = 1, jp_lobster_2d
333            jn = jp_lob0_2d + jl - 1
334            WRITE(numout,*) '   2d output field No : ',jn
335            WRITE(numout,*) '   short name         : ', TRIM(ctrc2d(jn))
336            WRITE(numout,*) '   long name          : ', TRIM(ctrc2l(jn))
337            WRITE(numout,*) '   unit               : ', TRIM(ctrc2u(jn))
338            WRITE(numout,*) ' '
339         END DO
340      ENDIF
341#endif
342
343#if defined key_trc_diabio
344
345      ! namlobdbi : bio diagnostics
346      nwritebio = 10                     ! default values
347
348      DO js = 1, jp_lobster_trd
349         jd = jp_lob0_trd + js - 1
350         IF(     jd <  10 ) THEN   ;   WRITE (ctrbio(jd),'("BIO_",I1)') jd      ! short name
351         ELSEIF (jd < 100 ) THEN   ;   WRITE (ctrbio(jd),'("BIO_",I2)') jd   
352         ELSE                      ;   WRITE (ctrbio(jd),'("BIO_",I3)') jd
353         ENDIF
354         WRITE(ctrbil(jd),'("BIOLOGICAL TREND NUMBER ",I2)') jd                 ! long name
355         ctrbiu(jd) = 'mmoleN/m3/s '                                            ! units
356      END DO
357
358      REWIND( numnatl )
359      READ  ( numnatl, namlobdbi ) 
360 
361      DO js = 1, jp_lobster_trd
362         jd = jp_lob0_trd + js - 1
363         ctrbio(jd) = lobdiabio(js)%snamebio
364         ctrbil(jd) = lobdiabio(js)%lnamebio
365         ctrbiu(jd) = lobdiabio(js)%unitbio
366      END DO
367
368      IF(lwp) THEN                   ! control print
369         WRITE(numout,*)
370         WRITE(numout,*) ' Namelist : namlobdbi'
371         WRITE(numout,*) '    frequency of outputs for biological trends nwritebio = ', nwritebio
372         DO js = 1, jp_lobster_trd
373            jd = jp_lob0_trd + js - 1
374            WRITE(numout,*) '   biological trend No : ',jd
375            WRITE(numout,*) '   short name         : ', TRIM(ctrbio(jd))
376            WRITE(numout,*) '   long name          : ', TRIM(ctrbil(jd))
377            WRITE(numout,*) '   unit               : ', TRIM(ctrbiu(jd))
378            WRITE(numout,*) ' '
379         END DO
380      END IF
381#endif
382      !
383   END SUBROUTINE trc_lsm_lobster
384   
385#else
386   !!----------------------------------------------------------------------
387   !!  Dummy module :                                            No LOBSTER
388   !!----------------------------------------------------------------------
389CONTAINS
390   SUBROUTINE trc_lsm_lobster                      ! Empty routine
391   END  SUBROUTINE  trc_lsm_lobster
392#endif 
393
394   !!======================================================================
395END MODULE trclsm_lobster
Note: See TracBrowser for help on using the repository browser.