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.
p4zsms.F90 in trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z – NEMO

source: trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90 @ 4641

Last change on this file since 4641 was 4624, checked in by acc, 10 years ago

#1305. Fix slow start-up problems on some systems by introducing and using lwm logical to restrict output of merged namelists to the first (or only) processor. lwm is true only on the first processor regardless of ln_ctl. Small changes to all flavours of nemogcm.F90 are also required to write namctl and namcfg after the call to mynode which now opens output.namelist.dyn and writes nammpp.

File size: 20.6 KB
Line 
1MODULE p4zsms
2   !!======================================================================
3   !!                         ***  MODULE p4zsms  ***
4   !! TOP :   PISCES Source Minus Sink manager
5   !!======================================================================
6   !! History :   1.0  !  2004-03 (O. Aumont) Original code
7   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
8   !!----------------------------------------------------------------------
9#if defined key_pisces
10   !!----------------------------------------------------------------------
11   !!   'key_pisces'                                       PISCES bio-model
12   !!----------------------------------------------------------------------
13   !!   p4zsms        :  Time loop of passive tracers sms
14   !!----------------------------------------------------------------------
15   USE oce_trc         !  shared variables between ocean and passive tracers
16   USE trc             !  passive tracers common variables
17   USE trcdta
18   USE sms_pisces      !  PISCES Source Minus Sink variables
19   USE p4zbio          !  Biological model
20   USE p4zche          !  Chemical model
21   USE p4zlys          !  Calcite saturation
22   USE p4zflx          !  Gas exchange
23   USE p4zsbc          !  External source of nutrients
24   USE p4zsed          !  Sedimentation
25   USE p4zint          !  time interpolation
26   USE iom             !  I/O manager
27   USE trdmod_oce      !  Ocean trends variables
28   USE trdmod_trc      !  TOP trends variables
29   USE sedmodel        !  Sediment model
30   USE prtctl_trc      !  print control for debugging
31
32   IMPLICIT NONE
33   PRIVATE
34
35   PUBLIC   p4z_sms_init    ! called in p4zsms.F90
36   PUBLIC   p4z_sms    ! called in p4zsms.F90
37
38   REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget
39   INTEGER ::  numco2, numnut  !: logical unit for co2 budget
40
41   !!----------------------------------------------------------------------
42   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
43   !! $Id: p4zsms.F90 3320 2012-03-05 16:37:52Z cetlod $
44   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
45   !!----------------------------------------------------------------------
46
47CONTAINS
48
49   SUBROUTINE p4z_sms( kt )
50      !!---------------------------------------------------------------------
51      !!                     ***  ROUTINE p4z_sms  ***
52      !!
53      !! ** Purpose :   Managment of the call to Biological sources and sinks
54      !!              routines of PISCES bio-model
55      !!
56      !! ** Method  : - at each new day ...
57      !!              - several calls of bio and sed ???
58      !!              - ...
59      !!---------------------------------------------------------------------
60      !
61      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index     
62      !!
63      INTEGER ::   jnt, jn, jl
64      CHARACTER (len=25) :: charout
65      REAL(wp), POINTER, DIMENSION(:,:,:,:)  :: ztrdpis
66      !!---------------------------------------------------------------------
67      !
68      IF( nn_timing == 1 )  CALL timing_start('p4z_sms')
69      !
70      IF( l_trdtrc )  THEN
71         CALL wrk_alloc( jpi, jpj, jpk, jp_pisces, ztrdpis ) 
72         DO jn = 1, jp_pisces
73            jl = jn + jp_pcs0 - 1
74            ztrdpis(:,:,:,jn) = trn(:,:,:,jl)
75         ENDDO
76      ENDIF
77      !
78      IF( kt == nittrc000 ) THEN
79        !
80        CALL p4z_che                              ! initialize the chemical constants
81        !
82        IF( .NOT. ln_rsttr ) THEN  ;   CALL p4z_ph_ini   !  set PH at kt=nit000
83        ELSE                       ;   CALL p4z_rst( nittrc000, 'READ' )  !* read or initialize all required fields
84        ENDIF
85        !
86      ENDIF
87      !
88      IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 )   CALL p4z_dmp( kt )      ! Relaxation of some tracers
89      !
90      IF( ndayflxtr /= nday_year ) THEN      ! New days
91         !
92         ndayflxtr = nday_year
93
94         IF(lwp) write(numout,*)
95         IF(lwp) write(numout,*) ' New chemical constants and various rates for biogeochemistry at new day : ', nday_year
96         IF(lwp) write(numout,*) '~~~~~~'
97
98         CALL p4z_che              ! computation of chemical constants
99         CALL p4z_int( kt )        ! computation of various rates for biogeochemistry
100         !
101      ENDIF
102
103      IF( ll_sbc ) CALL p4z_sbc( kt )   ! external sources of nutrients
104
105      DO jnt = 1, nrdttrc          ! Potential time splitting if requested
106         !
107         CALL p4z_bio (kt, jnt)    ! Biology
108         CALL p4z_sed (kt, jnt)    ! Sedimentation
109         !
110         DO jn = jp_pcs0, jp_pcs1
111            trb(:,:,:,jn) = trn(:,:,:,jn)
112         ENDDO
113         !
114      END DO
115
116      IF( l_trdtrc )  THEN
117         DO jn = 1, jp_pisces
118            jl = jn + jp_pcs0 - 1
119            ztrdpis(:,:,:,jn) = ( ztrdpis(:,:,:,jn) - trn(:,:,:,jl) ) * rfact2r
120         ENDDO
121      ENDIF
122
123      CALL p4z_lys( kt )             ! Compute CaCO3 saturation
124      CALL p4z_flx( kt )             ! Compute surface fluxes
125
126      DO jn = jp_pcs0, jp_pcs1
127        CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. )
128        CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. )
129        CALL lbc_lnk( tra(:,:,:,jn), 'T', 1. )
130      END DO
131      !
132      IF( lk_sed ) THEN 
133         !
134         CALL sed_model( kt )     !  Main program of Sediment model
135         !
136         DO jn = jp_pcs0, jp_pcs1
137           CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. )
138         END DO
139         !
140      ENDIF
141      !
142      IF( lrst_trc )  CALL p4z_rst( kt, 'WRITE' )  !* Write PISCES informations in restart file
143      !
144      IF( l_trdtrc ) THEN
145         DO jn = 1, jp_pisces
146            jl = jn + jp_pcs0 - 1
147             ztrdpis(:,:,:,jn) = ztrdpis(:,:,:,jn) + tra(:,:,:,jl)
148             CALL trd_mod_trc( ztrdpis(:,:,:,jn), jn, jptra_trd_sms, kt )   ! save trends
149          END DO
150          CALL wrk_dealloc( jpi, jpj, jpk, jp_pisces, ztrdpis ) 
151      END IF
152      !
153      CALL p4z_chk_mass( kt ) ! Mass conservation checking
154
155      IF ( lwm .AND. kt == nittrc000 ) CALL FLUSH    ( numonp )     ! flush output namelist PISCES
156      IF( nn_timing == 1 )  CALL timing_stop('p4z_sms')
157      !
158      !
159   END SUBROUTINE p4z_sms
160
161   SUBROUTINE p4z_sms_init
162      !!----------------------------------------------------------------------
163      !!                     ***  p4z_sms_init  *** 
164      !!
165      !! ** Purpose :   read PISCES namelist
166      !!
167      !! ** input   :   file 'namelist.trc.s' containing the following
168      !!             namelist: natext, natbio, natsms
169      !!                       natkriest ("key_kriest")
170      !!----------------------------------------------------------------------
171      NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, wsbio2, niter1max, niter2max
172#if defined key_kriest
173      NAMELIST/nampiskrp/ xkr_eta, xkr_zeta, xkr_ncontent, xkr_mass_min, xkr_mass_max
174#endif
175      NAMELIST/nampisdmp/ ln_pisdmp, nn_pisdmp
176      NAMELIST/nampismass/ ln_check_mass
177      INTEGER :: ios                 ! Local integer output status for namelist read
178      !!----------------------------------------------------------------------
179
180      REWIND( numnatp_ref )              ! Namelist nampisbio in reference namelist : Pisces variables
181      READ  ( numnatp_ref, nampisbio, IOSTAT = ios, ERR = 901)
182901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisbio in reference namelist', lwp )
183
184      REWIND( numnatp_cfg )              ! Namelist nampisbio in configuration namelist : Pisces variables
185      READ  ( numnatp_cfg, nampisbio, IOSTAT = ios, ERR = 902 )
186902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisbio in configuration namelist', lwp )
187      IF(lwm) WRITE ( numonp, nampisbio )
188
189      IF(lwp) THEN                         ! control print
190         WRITE(numout,*) ' Namelist : nampisbio'
191         WRITE(numout,*) '    frequence pour la biologie                nrdttrc   =', nrdttrc
192         WRITE(numout,*) '    POC sinking speed                         wsbio     =', wsbio
193         WRITE(numout,*) '    half saturation constant for mortality    xkmort    =', xkmort
194         WRITE(numout,*) '    Fe/C in zooplankton                       ferat3    =', ferat3
195         WRITE(numout,*) '    Big particles sinking speed               wsbio2    =', wsbio2
196         WRITE(numout,*) '    Maximum number of iterations for POC      niter1max =', niter1max
197         WRITE(numout,*) '    Maximum number of iterations for GOC      niter2max =', niter2max
198      ENDIF
199
200#if defined key_kriest
201
202      !                               ! nampiskrp : kriest parameters
203      !                               ! -----------------------------
204      REWIND( numnatp_ref )              ! Namelist nampiskrp in reference namelist : Pisces Kriest
205      READ  ( numnatp_ref, nampiskrp, IOSTAT = ios, ERR = 903)
206903   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrp in reference namelist', lwp )
207
208      REWIND( numnatp_cfg )              ! Namelist nampiskrp in configuration namelist : Pisces Kriest
209      READ  ( numnatp_cfg, nampiskrp, IOSTAT = ios, ERR = 904 )
210904   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrp in configuration namelist', lwp )
211      IF(lwm) WRITE ( numonp, nampiskrp )
212
213      IF(lwp) THEN
214         WRITE(numout,*)
215         WRITE(numout,*) ' Namelist : nampiskrp'
216         WRITE(numout,*) '    Sinking  exponent                        xkr_eta      = ', xkr_eta
217         WRITE(numout,*) '    N content exponent                       xkr_zeta     = ', xkr_zeta
218         WRITE(numout,*) '    N content factor                         xkr_ncontent = ', xkr_ncontent
219         WRITE(numout,*) '    Minimum mass for Aggregates              xkr_mass_min = ', xkr_mass_min
220         WRITE(numout,*) '    Maximum mass for Aggregates              xkr_mass_max = ', xkr_mass_max
221         WRITE(numout,*)
222     ENDIF
223
224
225     ! Computation of some variables
226     xkr_massp = xkr_ncontent * 7.625 * xkr_mass_min**xkr_zeta
227
228#endif
229
230      REWIND( numnatp_ref )              ! Namelist nampisdmp in reference namelist : Pisces damping
231      READ  ( numnatp_ref, nampisdmp, IOSTAT = ios, ERR = 905)
232905   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdmp in reference namelist', lwp )
233
234      REWIND( numnatp_cfg )              ! Namelist nampisdmp in configuration namelist : Pisces damping
235      READ  ( numnatp_cfg, nampisdmp, IOSTAT = ios, ERR = 906 )
236906   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdmp in configuration namelist', lwp )
237      IF(lwm) WRITE ( numonp, nampisdmp )
238
239      IF(lwp) THEN                         ! control print
240         WRITE(numout,*)
241         WRITE(numout,*) ' Namelist : nampisdmp'
242         WRITE(numout,*) '    Relaxation of tracer to glodap mean value             ln_pisdmp      =', ln_pisdmp
243         WRITE(numout,*) '    Frequency of Relaxation                               nn_pisdmp      =', nn_pisdmp
244         WRITE(numout,*) ' '
245      ENDIF
246
247      REWIND( numnatp_ref )              ! Namelist nampismass in reference namelist : Pisces mass conservation check
248      READ  ( numnatp_ref, nampismass, IOSTAT = ios, ERR = 907)
249907   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismass in reference namelist', lwp )
250
251      REWIND( numnatp_cfg )              ! Namelist nampismass in configuration namelist : Pisces mass conservation check
252      READ  ( numnatp_cfg, nampismass, IOSTAT = ios, ERR = 908 )
253908   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismass in configuration namelist', lwp )
254      IF(lwm) WRITE ( numonp, nampismass )
255
256      IF(lwp) THEN                         ! control print
257         WRITE(numout,*) ' '
258         WRITE(numout,*) ' Namelist parameter for mass conservation checking'
259         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
260         WRITE(numout,*) '    Flag to check mass conservation of NO3/Si/TALK ln_check_mass = ', ln_check_mass
261      ENDIF
262
263   END SUBROUTINE p4z_sms_init
264
265   SUBROUTINE p4z_ph_ini
266      !!---------------------------------------------------------------------
267      !!                   ***  ROUTINE p4z_ini_ph  ***
268      !!
269      !!  ** Purpose : Initialization of chemical variables of the carbon cycle
270      !!---------------------------------------------------------------------
271      INTEGER  ::  ji, jj, jk
272      REAL(wp) ::  zcaralk, zbicarb, zco3
273      REAL(wp) ::  ztmas, ztmas1
274      !!---------------------------------------------------------------------
275
276      ! Set PH from  total alkalinity, borat (???), akb3 (???) and ak23 (???)
277      ! --------------------------------------------------------
278      DO jk = 1, jpk
279         DO jj = 1, jpj
280            DO ji = 1, jpi
281               ztmas   = tmask(ji,jj,jk)
282               ztmas1  = 1. - tmask(ji,jj,jk)
283               zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / (  1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) )  )
284               zco3    = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1
285               zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk )
286               hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1
287            END DO
288         END DO
289     END DO
290     !
291   END SUBROUTINE p4z_ph_ini
292
293   SUBROUTINE p4z_rst( kt, cdrw )
294      !!---------------------------------------------------------------------
295      !!                   ***  ROUTINE p4z_rst  ***
296      !!
297      !!  ** Purpose : Read or write variables in restart file:
298      !!
299      !!  WRITE(READ) mode:
300      !!       kt        : number of time step since the begining of the experiment at the
301      !!                   end of the current(previous) run
302      !!---------------------------------------------------------------------
303      INTEGER         , INTENT(in) ::   kt         ! ocean time-step
304      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag
305      !
306      INTEGER  ::  ji, jj, jk
307      REAL(wp) ::  zcaralk, zbicarb, zco3
308      REAL(wp) ::  ztmas, ztmas1
309      !!---------------------------------------------------------------------
310
311      IF( TRIM(cdrw) == 'READ' ) THEN
312         !
313         IF(lwp) WRITE(numout,*)
314         IF(lwp) WRITE(numout,*) ' p4z_rst : Read specific variables from pisces model '
315         IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~'
316         !
317         IF( iom_varid( numrtr, 'PH', ldstop = .FALSE. ) > 0 ) THEN
318            CALL iom_get( numrtr, jpdom_autoglo, 'PH' , hi(:,:,:)  )
319         ELSE
320!            hi(:,:,:) = 1.e-9
321            CALL p4z_ph_ini
322         ENDIF
323         CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:) )
324         IF( iom_varid( numrtr, 'Silicamax', ldstop = .FALSE. ) > 0 ) THEN
325            CALL iom_get( numrtr, jpdom_autoglo, 'Silicamax' , xksimax(:,:)  )
326         ELSE
327            xksimax(:,:) = xksi(:,:)
328         ENDIF
329         !
330      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN
331         IF( kt == nitrst ) THEN
332            IF(lwp) WRITE(numout,*)
333            IF(lwp) WRITE(numout,*) 'p4z_rst : write pisces restart file  kt =', kt
334            IF(lwp) WRITE(numout,*) '~~~~~~~'
335         ENDIF
336         CALL iom_rstput( kt, nitrst, numrtw, 'PH', hi(:,:,:) )
337         CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) )
338         CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) )
339      ENDIF
340      !
341   END SUBROUTINE p4z_rst
342
343   SUBROUTINE p4z_dmp( kt )
344      !!----------------------------------------------------------------------
345      !!                    ***  p4z_dmp  ***
346      !!
347      !! ** purpose  : Relaxation of some tracers
348      !!----------------------------------------------------------------------
349      !
350      INTEGER, INTENT( in )  ::     kt ! time step
351      !
352      REAL(wp) ::  alkmean = 2426.     ! mean value of alkalinity ( Glodap ; for Goyet 2391. )
353      REAL(wp) ::  po4mean = 2.165     ! mean value of phosphates
354      REAL(wp) ::  no3mean = 30.90     ! mean value of nitrate
355      REAL(wp) ::  silmean = 91.51     ! mean value of silicate
356      !
357      REAL(wp) :: zarea, zalksum, zpo4sum, zno3sum, zsilsum
358      !!---------------------------------------------------------------------
359
360
361      IF(lwp)  WRITE(numout,*)
362      IF(lwp)  WRITE(numout,*) ' p4z_dmp : Restoring of nutrients at time-step kt = ', kt
363      IF(lwp)  WRITE(numout,*)
364
365      IF( cp_cfg == "orca" .AND. .NOT. lk_c1d ) THEN      ! ORCA configuration (not 1D) !
366         !                                                    ! --------------------------- !
367         ! set total alkalinity, phosphate, nitrate & silicate
368         zarea          = 1._wp / glob_sum( cvol(:,:,:) ) * 1e6             
369
370         zalksum = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:)  ) * zarea
371         zpo4sum = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r
372         zno3sum = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3
373         zsilsum = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea
374 
375         IF(lwp) WRITE(numout,*) '       TALK mean : ', zalksum
376         trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksum
377
378         IF(lwp) WRITE(numout,*) '       PO4  mean : ', zpo4sum
379         trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sum
380
381         IF(lwp) WRITE(numout,*) '       NO3  mean : ', zno3sum
382         trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sum
383
384         IF(lwp) WRITE(numout,*) '       SiO3 mean : ', zsilsum
385         trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsum )
386         !
387      ENDIF
388
389   END SUBROUTINE p4z_dmp
390
391
392   SUBROUTINE p4z_chk_mass( kt )
393      !!----------------------------------------------------------------------
394      !!                  ***  ROUTINE p4z_chk_mass  ***
395      !!
396      !! ** Purpose :  Mass conservation check
397      !!
398      !!---------------------------------------------------------------------
399      !
400      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index     
401      !!
402      !!---------------------------------------------------------------------
403
404      IF( kt == nittrc000 ) THEN
405         IF( ln_check_mass .AND. lwp) THEN      !   Open budget file of NO3, ALK, Si, Fer
406            CALL ctl_opn( numco2, 'carbon.budget'  , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea )
407            CALL ctl_opn( numnut, 'nutrient.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea )
408         ENDIF
409      ENDIF
410
411      IF( ln_check_mass .AND. kt == nitend ) THEN      !   Compute the budget of NO3, ALK, Si, Fer
412         no3budget = glob_sum( (   trn(:,:,:,jpno3) + trn(:,:,:,jpnh4)  &
413            &                    + trn(:,:,:,jpphy) + trn(:,:,:,jpdia)  &
414            &                    + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  &
415            &                    + trn(:,:,:,jppoc)                     &
416#if ! defined key_kriest
417            &                    + trn(:,:,:,jpgoc)                     &
418#endif
419            &                    + trn(:,:,:,jpdoc)                     ) * cvol(:,:,:)  ) 
420         !
421         silbudget = glob_sum( (   trn(:,:,:,jpsil) + trn(:,:,:,jpgsi)  &
422            &                    + trn(:,:,:,jpdsi)                     ) * cvol(:,:,:)  )
423         !
424         alkbudget = glob_sum( (   trn(:,:,:,jpno3) * rno3              &
425            &                    + trn(:,:,:,jptal)                     &
426            &                    + trn(:,:,:,jpcal) * 2.                ) * cvol(:,:,:)  )
427         !
428         ferbudget = glob_sum( (   trn(:,:,:,jpfer) + trn(:,:,:,jpnfe)  &
429            &                    + trn(:,:,:,jpdfe)                     &
430#if ! defined key_kriest
431            &                    + trn(:,:,:,jpbfe)                     &
432#endif
433            &                    + trn(:,:,:,jpsfe)                     &
434            &                    + trn(:,:,:,jpzoo) * ferat3            &
435            &                    + trn(:,:,:,jpmes) * ferat3            ) * cvol(:,:,:)  )
436
437         !
438         t_atm_co2_flx  = t_atm_co2_flx / glob_sum( e1e2t(:,:) )
439         t_oce_co2_flx  = t_oce_co2_flx         * 12. / 1.e15 * (-1 )
440         tpp            = tpp           * 1000. * 12. / 1.E15
441         t_oce_co2_exp  = t_oce_co2_exp * 1000. * 12. / 1.E15
442         !
443         no3budget = no3budget / areatot
444         silbudget = silbudget / areatot
445         alkbudget = alkbudget / areatot
446         ferbudget = ferbudget / areatot
447         !
448         IF(lwp) THEN
449            WRITE(numco2,9000) ndastp, t_atm_co2_flx, t_oce_co2_flx, tpp, t_oce_co2_exp
450            WRITE(numnut,9500) ndastp, alkbudget, no3budget, silbudget, ferbudget
451         ENDIF
452         !
453      ENDIF
454       !
455 9000  FORMAT(i8,f10.5,e18.10,f10.5,f10.5)
456 9500  FORMAT(i8,4e18.10)     
457       !
458   END SUBROUTINE p4z_chk_mass
459
460#else
461   !!======================================================================
462   !!  Dummy module :                                   No PISCES bio-model
463   !!======================================================================
464CONTAINS
465   SUBROUTINE p4z_sms( kt )                   ! Empty routine
466      INTEGER, INTENT( in ) ::   kt
467      WRITE(*,*) 'p4z_sms: You should not have seen this print! error?', kt
468   END SUBROUTINE p4z_sms
469#endif 
470
471   !!======================================================================
472END MODULE p4zsms 
Note: See TracBrowser for help on using the repository browser.