ROMS
Loading...
Searching...
No Matches
ana_biology.h
Go to the documentation of this file.
1!!
2 SUBROUTINE ana_biology (ng, tile, model)
3!
4!! git $Id$
5!!======================================================================
6!! Copyright (c) 2002-2025 The ROMS Group !
7!! Licensed under a MIT/X style license !
8!! See License_ROMS.md !
9!=======================================================================
10! !
11! This routine sets initial conditions for biological tracer fields !
12! using analytical expressions. !
13! !
14!=======================================================================
15!
16 USE mod_param
17 USE mod_ncparam
18 USE mod_ocean
19!
20! Imported variable declarations.
21!
22 integer, intent(in) :: ng, tile, model
23!
24! Local variable declarations.
25!
26 character (len=*), parameter :: MyFile = &
27 & __FILE__
28!
29#include "tile.h"
30!
31 CALL ana_biology_tile (ng, tile, model, &
32 & lbi, ubi, lbj, ubj, &
33 & imins, imaxs, jmins, jmaxs, &
34 & ocean(ng) % t)
35!
36! Set analytical header file name used.
37!
38#ifdef DISTRIBUTE
39 IF (lanafile) THEN
40#else
41 IF (lanafile.and.(tile.eq.0)) THEN
42#endif
43 ananame( 1)=myfile
44 END IF
45!
46 RETURN
47 END SUBROUTINE ana_biology
48!
49!***********************************************************************
50 SUBROUTINE ana_biology_tile (ng, tile, model, &
51 & LBi, UBi, LBj, UBj, &
52 & IminS, ImaxS, JminS, JmaxS, &
53 & t)
54!***********************************************************************
55!
56 USE mod_param
57 USE mod_parallel
58 USE mod_biology
59 USE mod_ncparam
60 USE mod_iounits
61 USE mod_scalars
62!
63 USE stats_mod, ONLY : stats_3dfld
64!
65! Imported variable declarations.
66!
67 integer, intent(in) :: ng, tile, model
68 integer, intent(in) :: LBi, UBi, LBj, UBj
69 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
70!
71#ifdef ASSUMED_SHAPE
72 real(r8), intent(inout) :: t(LBi:,LBj:,:,:,:)
73#else
74 real(r8), intent(inout) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
75#endif
76!
77! Local variable declarations.
78!
79 logical, save :: first = .true.
80
81 integer :: i, is, itrc, j, k
82
83#if defined BIO_FENNEL || defined NEMURO
84 real(r8) :: SiO4, cff1, cff2, temp
85#elif defined ECOSIM
86 real(r8) :: cff1, cff2, cff3, cff4, cff5, cff6, cff7, cff8, cff9
87 real(r8) :: cff10, cff11, cff12, cff13, cff14, cff15
88 real(r8) :: salt, sftm, temp
89#endif
90!
91! Maximum 80 biological tracers consider for field statistics.
92!
93 TYPE (T_STATS), save :: Stats(80)
94
95#include "set_bounds.h"
96!
97!-----------------------------------------------------------------------
98! Initialize field statistics structure.
99!-----------------------------------------------------------------------
100!
101 IF (first) THEN
102 first=.false.
103 DO i=1,SIZE(stats,1)
104 stats(i) % checksum=0_i8b
105 stats(i) % count=0.0_r8
106 stats(i) % min=large
107 stats(i) % max=-large
108 stats(i) % avg=0.0_r8
109 stats(i) % rms=0.0_r8
110 END DO
111 END IF
112
113#if defined BIO_FENNEL
114!
115!-----------------------------------------------------------------------
116! Fennel et al. (2006), nitrogen-based biology model.
117!-----------------------------------------------------------------------
118!
119 cff1=20.0_r8/3.0_r8
120 cff2= 2.0_r8/3.0_r8
121 DO k=1,n(ng)
122 DO j=jstrt,jendt
123 DO i=istrt,iendt
124 temp=t(i,j,k,1,itemp)
125 IF (temp.lt.8.0_r8) THEN
126 sio4=30.0_r8
127 ELSE IF ((temp.ge.8.0_r8).and.(temp.le.11.0_r8)) THEN
128 sio4=30.0_r8-((temp-8.0_r8)*cff1)
129 ELSE IF ((temp.gt.11.0_r8).and.(temp.le.13.0_r8)) THEN
130 sio4=10.0_r8-((temp-11.0_r8)*4.0_r8)
131 ELSE IF ((temp.gt.13.0_r8).and.(temp.le.16.0_r8)) THEN
132 sio4=2.0_r8-((temp-13.0_r8)*cff2)
133 ELSE IF (temp.gt.16.0_r8) THEN
134 sio4=0.0_r8
135 END IF
136 t(i,j,k,1,ino3_)=1.67_r8+0.5873_r8*sio4+ &
137 & 0.0144_r8*sio4**2+ &
138 & 0.0003099_r8*sio4**3
139 t(i,j,k,1,iphyt)=0.08_r8
140 t(i,j,k,1,izoop)=0.06_r8
141 t(i,j,k,1,inh4_)=0.1_r8
142 t(i,j,k,1,ilden)=0.02_r8
143 t(i,j,k,1,isden)=0.04_r8
144 t(i,j,k,1,ichlo)=0.02_r8
145#ifdef CARBON
146 t(i,j,k,1,itic_)=2100.0_r8
147 t(i,j,k,1,italk)=2350.0_r8
148 t(i,j,k,1,ildec)=0.002_r8
149 t(i,j,k,1,isdec)=0.06_r8
150#endif
151#ifdef OXYGEN
152 t(i,j,k,1,ioxyg)=10.0_r8/0.02241_r8
153#endif
154 END DO
155 END DO
156 END DO
157
158#elif defined NEMURO
159!
160!-----------------------------------------------------------------------
161! Nemuro lower trophic level ecosystem model.
162!-----------------------------------------------------------------------
163!
164 cff1=20.0_r8/3.0_r8
165 cff2= 2.0_r8/3.0_r8
166 DO k=1,n(ng)
167 DO j=jstrt,jendt
168 DO i=istrt,iendt
169 temp=t(i,j,k,1,itemp)
170 IF (temp.lt.8.0_r8) THEN
171 sio4=30.0_r8
172 ELSE IF ((temp.ge.8.0_r8).and.(temp.le.11.0_r8)) THEN
173 sio4=30.0_r8-((temp-8.0_r8)*cff1)
174 ELSE IF ((temp.gt.11.0_r8).and.(temp.le.13.0_r8)) THEN
175 sio4=10.0_r8-((temp-11.0_r8)*4.0_r8)
176 ELSE IF ((temp.gt.13.0_r8).and.(temp.le.16.0_r8)) THEN
177 sio4=2.0_r8-((temp-13.0_r8)*cff2)
178 ELSE IF (temp.gt.16.0_r8) THEN
179 sio4=0.0_r8
180 END IF
181 t(i,j,k,1,ino3_)=1.67_r8+0.5873_r8*sio4+ &
182 & 0.0144_r8*sio4**2+ &
183 & 0.0003099_r8*sio4**3
184 t(i,j,k,1,isphy)=0.06_r8
185 t(i,j,k,1,ilphy)=0.06_r8
186 t(i,j,k,1,iszoo)=0.05_r8
187 t(i,j,k,1,ilzoo)=0.05_r8
188 t(i,j,k,1,ipzoo)=0.05_r8
189 t(i,j,k,1,inh4_)=0.1_r8
190 t(i,j,k,1,ipon_)=0.001_r8
191 t(i,j,k,1,idon_)=0.001_r8
192 t(i,j,k,1,isioh)=sio4
193 t(i,j,k,1,iopal)=0.001_r8
194 END DO
195 END DO
196 END DO
197
198#elif defined NPZD_FRANKS || defined NPZD_POWELL
199!
200!-----------------------------------------------------------------------
201! NPZD biology model.
202!-----------------------------------------------------------------------
203!
204 DO k=1,n(ng)
205 DO j=jstrt,jendt
206 DO i=istrt,iendt
207 t(i,j,k,1,ino3_)=bioini(ino3_,ng)
208 t(i,j,k,1,iphyt)=bioini(iphyt,ng)
209 t(i,j,k,1,izoop)=bioini(izoop,ng)
210 t(i,j,k,1,isdet)=bioini(isdet,ng)
211 END DO
212 END DO
213 END DO
214
215#elif defined NPZD_IRON
216!
217!-----------------------------------------------------------------------
218! NPZD biology model with or without iron limitation on phytoplankton
219! growth.
220!-----------------------------------------------------------------------
221!
222 DO k=1,n(ng)
223 DO j=jstrt,jendt
224 DO i=istrt,iendt
225 t(i,j,k,1,ino3_)=bioini(ino3_,ng)
226 t(i,j,k,1,iphyt)=bioini(iphyt,ng)
227 t(i,j,k,1,izoop)=bioini(izoop,ng)
228 t(i,j,k,1,isdet)=bioini(isdet,ng)
229# ifdef IRON_LIMIT
230 t(i,j,k,1,ifphy)=bioini(ifphy,ng)
231 t(i,j,k,1,ifdis)=bioini(ifdis,ng)
232# endif
233 END DO
234 END DO
235 END DO
236
237#elif defined ECOSIM
238!
239!---------------------------------------------------------------------
240! EcoSim initial fields.
241!---------------------------------------------------------------------
242!
243! Assumed maximum temperature gradient.
244!
245 cff3=1.0_r8/14.0_r8
246 cff4=1.0_r8/16.0_r8
247 cff5=32.0_r8
248 cff7=1.0_r8/0.0157_r8
249 cff8=1.0_r8/6.625_r8
250 cff9=1.0_r8/16.0_r8
251 cff10=1.0_r8/15.0_r8
252 cff11=1.0_r8/8.0_r8
253 cff12=1.0_r8/128.0_r8
254 cff13=1.0_r8/1000.0_r8
255 cff14=1.0_r8/12.0_r8
256 cff15=cff5*cff8*cff14 ! mole N : gram Chl
257
258 DO k=n(ng),1,-1
259 DO j=jstrt,jendt
260 DO i=istrt,iendt
261!
262! Initialization of surface chlorophyll.
263!
264 sftm=t(i,j,n(ng),1,itemp)
265 temp=t(i,j,k,1,itemp)
266# ifdef SALINITY
267 salt=t(i,j,k,1,isalt)
268# endif
269 cff1=-0.0827_r8*sftm+2.6386_r8
270 cff2=max(0.00001_r8,cff1*(1.0_r8-(sftm-temp)*cff3))
271!
272! Initialization of nutrients.
273!
274 t(i,j,k,1,inh4_)=0.053_r8*temp+0.7990_r8
275 t(i,j,k,1,ino3_)=8.5_r8-cff2*cff15-t(i,j,k,1,inh4_)
276 t(i,j,k,1,ipo4_)=(t(i,j,k,1,inh4_)+t(i,j,k,1,ino3_))*cff4
277 t(i,j,k,1,ifeo_)=1.0_r8
278!
279! Assuming diatoms are 75% of initialized chlorophyll.
280!
281 t(i,j,k,1,isio_)=5.5_r8-(cff2*0.75_r8)*cff15*1.20_r8
282 t(i,j,k,1,idic_)=2000.0_r8
283!
284! Bacteria Initialization.
285!
286 DO is=1,nbac
287 t(i,j,k,1,ibacc(is))=0.85_r8
288 t(i,j,k,1,ibacn(is))=t(i,j,k,1,ibacc(is))*n2cbac(ng)
289 t(i,j,k,1,ibacp(is))=t(i,j,k,1,ibacc(is))*p2cbac(ng)
290 t(i,j,k,1,ibacf(is))=t(i,j,k,1,ibacc(is))*fe2cbac(ng)
291 END DO
292!
293! Initialize phytoplankton populations.
294!
295 t(i,j,k,1,iphyc(1))=max(0.02_r8, &
296 & 0.75_r8*0.75_r8*cff5*cff2*cff14)
297 t(i,j,k,1,iphyc(2))=max(0.02_r8, &
298 & 0.75_r8*0.25_r8*cff5*cff2*cff14)
299 t(i,j,k,1,iphyc(3))=max(0.02_r8, &
300 & 0.125_r8*cff5*cff2*cff14)
301 t(i,j,k,1,iphyc(4))=t(i,j,k,1,iphyc(3))
302 DO is=1,nphy
303 t(i,j,k,1,iphyn(is))=t(i,j,k,1,iphyc(is))*cff8
304 t(i,j,k,1,iphyp(is))=t(i,j,k,1,iphyn(is))*cff4
305 t(i,j,k,1,iphyf(is))=t(i,j,k,1,iphyc(is))*cff13
306 IF (iphys(is).gt.0) THEN
307 t(i,j,k,1,iphys(is))=t(i,j,k,1,iphyn(is))*1.20_r8
308 END IF
309!
310! Initialize Pigments in ugrams/liter (not umole/liter).
311! Chlorophyll-a
312!
313 cff6=12.0_r8/cff5
314 t(i,j,k,1,ipigs(is,1))=cff6*t(i,j,k,1,iphyc(is))
315!
316! Chlorophyll-b.
317!
318 cff6=cff5-b_c2cl(is,ng)
319 IF (ipigs(is,2).gt.0) THEN
320 t(i,j,k,1,ipigs(is,2))=t(i,j,k,1,ipigs(is,1))* &
321 & (b_chlb(is,ng)+ &
322 & mxchlb(is,ng)*cff6)
323 END IF
324!
325! Chlorophyll-c.
326!
327 IF (ipigs(is,3).gt.0) THEN
328 t(i,j,k,1,ipigs(is,3))=t(i,j,k,1,ipigs(is,1))* &
329 & (b_chlc(is,ng)+ &
330 & mxchlc(is,ng)*cff6)
331 END IF
332!
333! Photosynthetic Carotenoids.
334!
335 IF (ipigs(is,4).gt.0) THEN
336 t(i,j,k,1,ipigs(is,4))=t(i,j,k,1,ipigs(is,1))* &
337 & (b_psc(is,ng)+ &
338 & mxpsc(is,ng)*cff6)
339 END IF
340!
341! Photoprotective Carotenoids.
342!
343 IF (ipigs(is,5).gt.0) THEN
344 t(i,j,k,1,ipigs(is,5))=t(i,j,k,1,ipigs(is,1))* &
345 & (b_ppc(is,ng)+ &
346 & mxppc(is,ng)*cff6)
347 END IF
348!
349! Low Urobilin Phycoeurythin Carotenoids.
350!
351 IF (ipigs(is,6).gt.0) THEN
352 t(i,j,k,1,ipigs(is,6))=t(i,j,k,1,ipigs(is,1))* &
353 & (b_lpub(is,ng)+ &
354 & mxlpub(is,ng)*cff6)
355 END IF
356!
357! High Urobilin Phycoeurythin Carotenoids.
358!
359 IF (ipigs(is,7).gt.0) THEN
360 t(i,j,k,1,ipigs(is,7))=t(i,j,k,1,ipigs(is,1))* &
361 & (b_hpub(is,ng)+ &
362 & mxhpub(is,ng)*cff6)
363 END IF
364 END DO
365!
366! DOC initialization.
367!
368# ifdef SALINITY
369 cff6=max(0.001_r8,-0.9833_r8*salt+33.411_r8)
370# else
371 cff6=0.0_r8
372# endif
373 t(i,j,k,1,idomc(1))=0.1_r8
374 t(i,j,k,1,idomn(1))=t(i,j,k,1,idomc(1))*cff8
375 t(i,j,k,1,idomp(1))=t(i,j,k,1,idomn(1))*cff9
376 t(i,j,k,1,icdmc(1))=t(i,j,k,1,idomc(1))*cdocfrac_c(1,ng)
377 t(i,j,k,1,idomc(2))=15.254_r8*cff6+70.0_r8
378 t(i,j,k,1,idomn(2))=t(i,j,k,1,idomc(2))*cff10
379 t(i,j,k,1,idomp(2))=0.0_r8
380 t(i,j,k,1,icdmc(2))=(0.243_r8*cff6+0.055_r8)*cff7
381!
382! Fecal Initialization.
383!
384 DO is=1,nfec
385 t(i,j,k,1,ifecc(is))=0.002_r8
386 t(i,j,k,1,ifecn(is))=t(i,j,k,1,ifecc(is))*cff11
387 t(i,j,k,1,ifecp(is))=t(i,j,k,1,ifecc(is))*cff12
388 t(i,j,k,1,ifecf(is))=t(i,j,k,1,ifecc(is))*cff13
389 t(i,j,k,1,ifecs(is))=t(i,j,k,1,ifecc(is))*cff11
390 END DO
391 END DO
392 END DO
393 END DO
394#endif
395!
396! Report statistics.
397!
398 DO itrc=1,nbt
399 i=idbio(itrc)
400 CALL stats_3dfld (ng, tile, inlm, r3dvar, stats(itrc), 0, &
401 & lbi, ubi, lbj, ubj, 1, n(ng), t(:,:,:,1,i))
402 IF (domain(ng)%NorthEast_Corner(tile)) THEN
403 WRITE (stdout,10) trim(vname(2,idtvar(i)))//': '// &
404 & trim(vname(1,idtvar(i))), &
405 & ng, stats(itrc)%min, stats(itrc)%max
406 END IF
407 END DO
408!
409 10 FORMAT (3x,' ANA_BIOLOGY - ',a,/,19x, &
410 & '(Grid = ',i2.2,', Min = ',1p,e15.8,0p, &
411 & ' Max = ',1p,e15.8,0p,')')
412!
413 RETURN
414 END SUBROUTINE ana_biology_tile
subroutine ana_biology_tile(ng, tile, model, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, t)
Definition ana_biology.h:54
subroutine ana_biology(ng, tile, model)
Definition ana_biology.h:3
integer isden
Definition fennel_mod.h:84
integer, dimension(nphy) iphyn
Definition ecosim_mod.h:272
real(r8), dimension(:,:), allocatable b_c2cl
Definition ecosim_mod.h:380
integer isioh
Definition nemuro_mod.h:187
real(r8), dimension(:,:), allocatable mxppc
Definition ecosim_mod.h:391
real(r8), dimension(:,:), allocatable mxchlc
Definition ecosim_mod.h:387
integer ipzoo
Definition nemuro_mod.h:182
integer, parameter nfec
Definition ecosim_mod.h:204
real(r8), dimension(:,:), allocatable mxpsc
Definition ecosim_mod.h:389
integer ifphy
integer, parameter nbac
Definition ecosim_mod.h:202
real(r8), dimension(:,:), allocatable b_chlc
Definition ecosim_mod.h:388
integer ipon_
Definition nemuro_mod.h:185
integer, dimension(nbac) ibacc
Definition ecosim_mod.h:258
integer itic_
Definition fennel_mod.h:91
integer ilphy
Definition nemuro_mod.h:178
real(r8), dimension(:,:), allocatable mxchlb
Definition ecosim_mod.h:385
integer ilden
Definition fennel_mod.h:83
real(r8), dimension(:,:), allocatable b_psc
Definition ecosim_mod.h:390
integer, dimension(nfec) ifecf
Definition ecosim_mod.h:269
integer, dimension(ndom) idomn
Definition ecosim_mod.h:264
integer, dimension(nbac) ibacp
Definition ecosim_mod.h:260
integer, dimension(nfec) ifecp
Definition ecosim_mod.h:268
integer, dimension(nfec) ifecc
Definition ecosim_mod.h:266
integer isdec
Definition fennel_mod.h:90
real(r8), dimension(:,:), allocatable bioini
integer ino3_
Definition ecosim_mod.h:277
integer, dimension(nphy) iphyp
Definition ecosim_mod.h:273
integer iszoo
Definition nemuro_mod.h:181
integer ipo4_
Definition ecosim_mod.h:279
real(r8), dimension(:), allocatable p2cbac
Definition ecosim_mod.h:480
integer, dimension(nfec) ifecs
Definition ecosim_mod.h:270
integer italk
Definition fennel_mod.h:92
integer, dimension(ndom) icdmc
Definition ecosim_mod.h:262
real(r8), dimension(:,:), allocatable b_hpub
Definition ecosim_mod.h:396
integer ifdis
real(r8), dimension(:), allocatable n2cbac
Definition ecosim_mod.h:479
real(r8), dimension(:,:), allocatable mxlpub
Definition ecosim_mod.h:393
real(r8), dimension(:,:), allocatable b_chlb
Definition ecosim_mod.h:386
integer iphyt
Definition fennel_mod.h:81
integer, dimension(nphy) iphyc
Definition ecosim_mod.h:271
real(r8), dimension(:,:), allocatable mxhpub
Definition ecosim_mod.h:395
integer, dimension(nbac) ibacf
Definition ecosim_mod.h:261
integer isphy
Definition nemuro_mod.h:179
real(r8), dimension(:,:), allocatable b_ppc
Definition ecosim_mod.h:392
integer, dimension(nphy, npig) ipigs
Definition ecosim_mod.h:276
integer inh4_
Definition ecosim_mod.h:278
integer, dimension(:), allocatable idbio
Definition ecosim_mod.h:256
integer, dimension(ndom) idomp
Definition ecosim_mod.h:265
integer ioxyg
Definition fennel_mod.h:98
integer, parameter nphy
Definition ecosim_mod.h:205
real(r8), dimension(:,:), allocatable cdocfrac_c
Definition ecosim_mod.h:432
integer, dimension(nbac) ibacn
Definition ecosim_mod.h:259
integer idic_
Definition ecosim_mod.h:282
integer, dimension(ndom) idomc
Definition ecosim_mod.h:263
real(r8), dimension(:,:), allocatable b_lpub
Definition ecosim_mod.h:394
integer, dimension(nphy) iphyf
Definition ecosim_mod.h:274
integer ifeo_
Definition ecosim_mod.h:280
integer, dimension(nphy) iphys
Definition ecosim_mod.h:275
integer, dimension(nfec) ifecn
Definition ecosim_mod.h:267
integer iopal
Definition nemuro_mod.h:188
integer izoop
Definition fennel_mod.h:82
real(r8), dimension(:), allocatable fe2cbac
Definition ecosim_mod.h:481
integer ildec
Definition fennel_mod.h:89
integer idon_
Definition nemuro_mod.h:186
integer ichlo
Definition fennel_mod.h:80
integer isio_
Definition ecosim_mod.h:281
integer ilzoo
Definition nemuro_mod.h:180
integer stdout
integer, dimension(:), allocatable idtvar
logical lanafile
character(len=maxlen), dimension(6, 0:nv) vname
character(len=256), dimension(39) ananame
type(t_ocean), dimension(:), allocatable ocean
Definition mod_ocean.F:351
integer, parameter inlm
Definition mod_param.F:662
integer, parameter r3dvar
Definition mod_param.F:721
integer nbt
Definition mod_param.F:509
type(t_domain), dimension(:), allocatable domain
Definition mod_param.F:329
real(dp), parameter large
integer isalt
integer itemp
subroutine, public stats_3dfld(ng, tile, model, gtype, s, extract_flag, lbi, ubi, lbj, ubj, lbk, ubk, f, fmask, debug)
Definition stats.F:342