forked from ESCOMP/CTSM
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCNGapMortalityMod.F90
717 lines (670 loc) · 35.8 KB
/
CNGapMortalityMod.F90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
module CNGapMortalityMod
!-----------------------------------------------------------------------
!BOP
!
! !MODULE: CNGapMortalityMod
!
! !DESCRIPTION:
! Module holding routines used in gap mortality for coupled carbon
! nitrogen code.
!
! !USES:
use shr_kind_mod, only: r8 => shr_kind_r8
implicit none
save
private
! !PUBLIC MEMBER FUNCTIONS:
public :: CNGapMortality
!
! !REVISION HISTORY:
! 3/29/04: Created by Peter Thornton
!
!EOP
!-----------------------------------------------------------------------
contains
!-----------------------------------------------------------------------
!BOP
!
! !IROUTINE: CNGapMortality
!
! !INTERFACE:
subroutine CNGapMortality (num_soilc, filter_soilc, num_soilp, filter_soilp)
!
! !DESCRIPTION:
! Gap-phase mortality routine for coupled carbon-nitrogen code (CN)
!
! !USES:
use clmtype
use clm_time_manager, only: get_days_per_year
use clm_varcon , only: secspday
use clm_varctl , only: use_cndv
!
! !ARGUMENTS:
implicit none
integer, intent(in) :: num_soilc ! number of soil columns in filter
integer, intent(in) :: filter_soilc(:) ! column filter for soil points
integer, intent(in) :: num_soilp ! number of soil pfts in filter
integer, intent(in) :: filter_soilp(:) ! pft filter for soil points
!
! !CALLED FROM:
! subroutine CNEcosystemDyn
!
! !REVISION HISTORY:
! 3/29/04: Created by Peter Thornton
!
! !LOCAL VARIABLES:
!
! local pointers to implicit in arrays
integer , pointer :: ivt(:) ! pft vegetation type
real(r8), pointer :: woody(:) ! binary flag for woody lifeform
! (1=woody, 0=not woody)
real(r8), pointer :: leafc(:) ! (gC/m2) leaf C
real(r8), pointer :: frootc(:) ! (gC/m2) fine root C
real(r8), pointer :: livestemc(:) ! (gC/m2) live stem C
real(r8), pointer :: deadstemc(:) ! (gC/m2) dead stem C
real(r8), pointer :: livecrootc(:) ! (gC/m2) live coarse root C
real(r8), pointer :: deadcrootc(:) ! (gC/m2) dead coarse root C
real(r8), pointer :: leafc_storage(:) ! (gC/m2) leaf C storage
real(r8), pointer :: frootc_storage(:) ! (gC/m2) fine root C storage
real(r8), pointer :: livestemc_storage(:) ! (gC/m2) live stem C storage
real(r8), pointer :: deadstemc_storage(:) ! (gC/m2) dead stem C storage
real(r8), pointer :: livecrootc_storage(:) ! (gC/m2) live coarse root C storage
real(r8), pointer :: deadcrootc_storage(:) ! (gC/m2) dead coarse root C storage
real(r8), pointer :: gresp_storage(:) ! (gC/m2) growth respiration storage
real(r8), pointer :: leafc_xfer(:) ! (gC/m2) leaf C transfer
real(r8), pointer :: frootc_xfer(:) ! (gC/m2) fine root C transfer
real(r8), pointer :: livestemc_xfer(:) ! (gC/m2) live stem C transfer
real(r8), pointer :: deadstemc_xfer(:) ! (gC/m2) dead stem C transfer
real(r8), pointer :: livecrootc_xfer(:) ! (gC/m2) live coarse root C transfer
real(r8), pointer :: deadcrootc_xfer(:) ! (gC/m2) dead coarse root C transfer
real(r8), pointer :: gresp_xfer(:) ! (gC/m2) growth respiration transfer
real(r8), pointer :: leafn(:) ! (gN/m2) leaf N
real(r8), pointer :: frootn(:) ! (gN/m2) fine root N
real(r8), pointer :: livestemn(:) ! (gN/m2) live stem N
real(r8), pointer :: deadstemn(:) ! (gN/m2) dead stem N
real(r8), pointer :: livecrootn(:) ! (gN/m2) live coarse root N
real(r8), pointer :: deadcrootn(:) ! (gN/m2) dead coarse root N
real(r8), pointer :: retransn(:) ! (gN/m2) plant pool of retranslocated N
real(r8), pointer :: leafn_storage(:) ! (gN/m2) leaf N storage
real(r8), pointer :: frootn_storage(:) ! (gN/m2) fine root N storage
real(r8), pointer :: livestemn_storage(:) ! (gN/m2) live stem N storage
real(r8), pointer :: deadstemn_storage(:) ! (gN/m2) dead stem N storage
real(r8), pointer :: livecrootn_storage(:) ! (gN/m2) live coarse root N storage
real(r8), pointer :: deadcrootn_storage(:) ! (gN/m2) dead coarse root N storage
real(r8), pointer :: leafn_xfer(:) ! (gN/m2) leaf N transfer
real(r8), pointer :: frootn_xfer(:) ! (gN/m2) fine root N transfer
real(r8), pointer :: livestemn_xfer(:) ! (gN/m2) live stem N transfer
real(r8), pointer :: deadstemn_xfer(:) ! (gN/m2) dead stem N transfer
real(r8), pointer :: livecrootn_xfer(:) ! (gN/m2) live coarse root N transfer
real(r8), pointer :: deadcrootn_xfer(:) ! (gN/m2) dead coarse root N transfer
real(r8), pointer :: greffic(:)
real(r8), pointer :: heatstress(:)
!
! local pointers to implicit in/out arrays
!
! local pointers to implicit out arrays
real(r8), pointer :: m_leafc_to_litter(:)
real(r8), pointer :: m_frootc_to_litter(:)
real(r8), pointer :: m_livestemc_to_litter(:)
real(r8), pointer :: m_deadstemc_to_litter(:)
real(r8), pointer :: m_livecrootc_to_litter(:)
real(r8), pointer :: m_deadcrootc_to_litter(:)
real(r8), pointer :: m_leafc_storage_to_litter(:)
real(r8), pointer :: m_frootc_storage_to_litter(:)
real(r8), pointer :: m_livestemc_storage_to_litter(:)
real(r8), pointer :: m_deadstemc_storage_to_litter(:)
real(r8), pointer :: m_livecrootc_storage_to_litter(:)
real(r8), pointer :: m_deadcrootc_storage_to_litter(:)
real(r8), pointer :: m_gresp_storage_to_litter(:)
real(r8), pointer :: m_leafc_xfer_to_litter(:)
real(r8), pointer :: m_frootc_xfer_to_litter(:)
real(r8), pointer :: m_livestemc_xfer_to_litter(:)
real(r8), pointer :: m_deadstemc_xfer_to_litter(:)
real(r8), pointer :: m_livecrootc_xfer_to_litter(:)
real(r8), pointer :: m_deadcrootc_xfer_to_litter(:)
real(r8), pointer :: m_gresp_xfer_to_litter(:)
real(r8), pointer :: m_leafn_to_litter(:)
real(r8), pointer :: m_frootn_to_litter(:)
real(r8), pointer :: m_livestemn_to_litter(:)
real(r8), pointer :: m_deadstemn_to_litter(:)
real(r8), pointer :: m_livecrootn_to_litter(:)
real(r8), pointer :: m_deadcrootn_to_litter(:)
real(r8), pointer :: m_retransn_to_litter(:)
real(r8), pointer :: m_leafn_storage_to_litter(:)
real(r8), pointer :: m_frootn_storage_to_litter(:)
real(r8), pointer :: m_livestemn_storage_to_litter(:)
real(r8), pointer :: m_deadstemn_storage_to_litter(:)
real(r8), pointer :: m_livecrootn_storage_to_litter(:)
real(r8), pointer :: m_deadcrootn_storage_to_litter(:)
real(r8), pointer :: m_leafn_xfer_to_litter(:)
real(r8), pointer :: m_frootn_xfer_to_litter(:)
real(r8), pointer :: m_livestemn_xfer_to_litter(:)
real(r8), pointer :: m_deadstemn_xfer_to_litter(:)
real(r8), pointer :: m_livecrootn_xfer_to_litter(:)
real(r8), pointer :: m_deadcrootn_xfer_to_litter(:)
!
! !OTHER LOCAL VARIABLES:
integer :: p ! pft index
integer :: fp ! pft filter index
real(r8):: am ! rate for fractional mortality (1/yr)
real(r8):: m ! rate for fractional mortality (1/s)
real(r8):: mort_max ! asymptotic max mortality rate (/yr)
real(r8), parameter :: k_mort = 0.3 !coeff of growth efficiency in mortality equation
!EOP
!-----------------------------------------------------------------------
! assign local pointers
woody => pftcon%woody
! assign local pointers to pft-level arrays
ivt => pft%itype
leafc => pcs%leafc
frootc => pcs%frootc
livestemc => pcs%livestemc
deadstemc => pcs%deadstemc
livecrootc => pcs%livecrootc
deadcrootc => pcs%deadcrootc
leafc_storage => pcs%leafc_storage
frootc_storage => pcs%frootc_storage
livestemc_storage => pcs%livestemc_storage
deadstemc_storage => pcs%deadstemc_storage
livecrootc_storage => pcs%livecrootc_storage
deadcrootc_storage => pcs%deadcrootc_storage
gresp_storage => pcs%gresp_storage
leafc_xfer => pcs%leafc_xfer
frootc_xfer => pcs%frootc_xfer
livestemc_xfer => pcs%livestemc_xfer
deadstemc_xfer => pcs%deadstemc_xfer
livecrootc_xfer => pcs%livecrootc_xfer
deadcrootc_xfer => pcs%deadcrootc_xfer
gresp_xfer => pcs%gresp_xfer
leafn => pns%leafn
frootn => pns%frootn
livestemn => pns%livestemn
deadstemn => pns%deadstemn
livecrootn => pns%livecrootn
deadcrootn => pns%deadcrootn
retransn => pns%retransn
leafn_storage => pns%leafn_storage
frootn_storage => pns%frootn_storage
livestemn_storage => pns%livestemn_storage
deadstemn_storage => pns%deadstemn_storage
livecrootn_storage => pns%livecrootn_storage
deadcrootn_storage => pns%deadcrootn_storage
leafn_xfer => pns%leafn_xfer
frootn_xfer => pns%frootn_xfer
livestemn_xfer => pns%livestemn_xfer
deadstemn_xfer => pns%deadstemn_xfer
livecrootn_xfer => pns%livecrootn_xfer
deadcrootn_xfer => pns%deadcrootn_xfer
m_leafc_to_litter => pcf%m_leafc_to_litter
m_frootc_to_litter => pcf%m_frootc_to_litter
m_livestemc_to_litter => pcf%m_livestemc_to_litter
m_deadstemc_to_litter => pcf%m_deadstemc_to_litter
m_livecrootc_to_litter => pcf%m_livecrootc_to_litter
m_deadcrootc_to_litter => pcf%m_deadcrootc_to_litter
m_leafc_storage_to_litter => pcf%m_leafc_storage_to_litter
m_frootc_storage_to_litter => pcf%m_frootc_storage_to_litter
m_livestemc_storage_to_litter => pcf%m_livestemc_storage_to_litter
m_deadstemc_storage_to_litter => pcf%m_deadstemc_storage_to_litter
m_livecrootc_storage_to_litter => pcf%m_livecrootc_storage_to_litter
m_deadcrootc_storage_to_litter => pcf%m_deadcrootc_storage_to_litter
m_gresp_storage_to_litter => pcf%m_gresp_storage_to_litter
m_leafc_xfer_to_litter => pcf%m_leafc_xfer_to_litter
m_frootc_xfer_to_litter => pcf%m_frootc_xfer_to_litter
m_livestemc_xfer_to_litter => pcf%m_livestemc_xfer_to_litter
m_deadstemc_xfer_to_litter => pcf%m_deadstemc_xfer_to_litter
m_livecrootc_xfer_to_litter => pcf%m_livecrootc_xfer_to_litter
m_deadcrootc_xfer_to_litter => pcf%m_deadcrootc_xfer_to_litter
m_gresp_xfer_to_litter => pcf%m_gresp_xfer_to_litter
m_leafn_to_litter => pnf%m_leafn_to_litter
m_frootn_to_litter => pnf%m_frootn_to_litter
m_livestemn_to_litter => pnf%m_livestemn_to_litter
m_deadstemn_to_litter => pnf%m_deadstemn_to_litter
m_livecrootn_to_litter => pnf%m_livecrootn_to_litter
m_deadcrootn_to_litter => pnf%m_deadcrootn_to_litter
m_retransn_to_litter => pnf%m_retransn_to_litter
m_leafn_storage_to_litter => pnf%m_leafn_storage_to_litter
m_frootn_storage_to_litter => pnf%m_frootn_storage_to_litter
m_livestemn_storage_to_litter => pnf%m_livestemn_storage_to_litter
m_deadstemn_storage_to_litter => pnf%m_deadstemn_storage_to_litter
m_livecrootn_storage_to_litter => pnf%m_livecrootn_storage_to_litter
m_deadcrootn_storage_to_litter => pnf%m_deadcrootn_storage_to_litter
m_leafn_xfer_to_litter => pnf%m_leafn_xfer_to_litter
m_frootn_xfer_to_litter => pnf%m_frootn_xfer_to_litter
m_livestemn_xfer_to_litter => pnf%m_livestemn_xfer_to_litter
m_deadstemn_xfer_to_litter => pnf%m_deadstemn_xfer_to_litter
m_livecrootn_xfer_to_litter => pnf%m_livecrootn_xfer_to_litter
m_deadcrootn_xfer_to_litter => pnf%m_deadcrootn_xfer_to_litter
greffic => pdgvs%greffic
heatstress => pdgvs%heatstress
! set the mortality rate based on annual rate
am = 0.02_r8
! pft loop
do fp = 1,num_soilp
p = filter_soilp(fp)
if (use_cndv) then
! Stress mortality from lpj's subr Mortality.
if (woody(ivt(p)) == 1._r8) then
if (ivt(p) == 8) then
mort_max = 0.03_r8 ! BDT boreal
else
mort_max = 0.01_r8 ! original value for all pfts
end if
! heatstress and greffic calculated in Establishment once/yr
! Mortality rate inversely related to growth efficiency
! (Prentice et al 1993)
am = mort_max / (1._r8 + k_mort * greffic(p))
am = min(1._r8, am + heatstress(p))
else ! lpj didn't set this for grasses; cn does
! set the mortality rate based on annual rate
am = 0.02_r8
end if
end if
m = am/(get_days_per_year() * secspday)
! pft-level gap mortality carbon fluxes
! displayed pools
m_leafc_to_litter(p) = leafc(p) * m
m_frootc_to_litter(p) = frootc(p) * m
m_livestemc_to_litter(p) = livestemc(p) * m
m_deadstemc_to_litter(p) = deadstemc(p) * m
m_livecrootc_to_litter(p) = livecrootc(p) * m
m_deadcrootc_to_litter(p) = deadcrootc(p) * m
! storage pools
m_leafc_storage_to_litter(p) = leafc_storage(p) * m
m_frootc_storage_to_litter(p) = frootc_storage(p) * m
m_livestemc_storage_to_litter(p) = livestemc_storage(p) * m
m_deadstemc_storage_to_litter(p) = deadstemc_storage(p) * m
m_livecrootc_storage_to_litter(p) = livecrootc_storage(p) * m
m_deadcrootc_storage_to_litter(p) = deadcrootc_storage(p) * m
m_gresp_storage_to_litter(p) = gresp_storage(p) * m
! transfer pools
m_leafc_xfer_to_litter(p) = leafc_xfer(p) * m
m_frootc_xfer_to_litter(p) = frootc_xfer(p) * m
m_livestemc_xfer_to_litter(p) = livestemc_xfer(p) * m
m_deadstemc_xfer_to_litter(p) = deadstemc_xfer(p) * m
m_livecrootc_xfer_to_litter(p) = livecrootc_xfer(p) * m
m_deadcrootc_xfer_to_litter(p) = deadcrootc_xfer(p) * m
m_gresp_xfer_to_litter(p) = gresp_xfer(p) * m
! pft-level gap mortality nitrogen fluxes
! displayed pools
m_leafn_to_litter(p) = leafn(p) * m
m_frootn_to_litter(p) = frootn(p) * m
m_livestemn_to_litter(p) = livestemn(p) * m
m_deadstemn_to_litter(p) = deadstemn(p) * m
m_livecrootn_to_litter(p) = livecrootn(p) * m
m_deadcrootn_to_litter(p) = deadcrootn(p) * m
m_retransn_to_litter(p) = retransn(p) * m
! storage pools
m_leafn_storage_to_litter(p) = leafn_storage(p) * m
m_frootn_storage_to_litter(p) = frootn_storage(p) * m
m_livestemn_storage_to_litter(p) = livestemn_storage(p) * m
m_deadstemn_storage_to_litter(p) = deadstemn_storage(p) * m
m_livecrootn_storage_to_litter(p) = livecrootn_storage(p) * m
m_deadcrootn_storage_to_litter(p) = deadcrootn_storage(p) * m
! transfer pools
m_leafn_xfer_to_litter(p) = leafn_xfer(p) * m
m_frootn_xfer_to_litter(p) = frootn_xfer(p) * m
m_livestemn_xfer_to_litter(p) = livestemn_xfer(p) * m
m_deadstemn_xfer_to_litter(p) = deadstemn_xfer(p) * m
m_livecrootn_xfer_to_litter(p) = livecrootn_xfer(p) * m
m_deadcrootn_xfer_to_litter(p) = deadcrootn_xfer(p) * m
end do ! end of pft loop
! gather all pft-level litterfall fluxes to the column
! for litter C and N inputs
call CNGapPftToColumn(num_soilc, filter_soilc)
end subroutine CNGapMortality
!-----------------------------------------------------------------------
!-----------------------------------------------------------------------
!BOP
!
! !IROUTINE: CNGapPftToColumn
!
! !INTERFACE:
subroutine CNGapPftToColumn (num_soilc, filter_soilc)
!
! !DESCRIPTION:
! called in the middle of CNGapMoratlity to gather all pft-level gap mortality fluxes
! to the column level and assign them to the three litter pools
!
! !USES:
use clmtype
use clm_varpar, only : maxpatch_pft
!
! !ARGUMENTS:
implicit none
integer, intent(in) :: num_soilc ! number of soil columns in filter
integer, intent(in) :: filter_soilc(:) ! soil column filter
!
! !CALLED FROM:
! subroutine CNphenology
!
! !REVISION HISTORY:
! 9/8/03: Created by Peter Thornton
!
! !LOCAL VARIABLES:
!
! local pointers to implicit in scalars
integer , pointer :: ivt(:) ! pft vegetation type
real(r8), pointer :: wtcol(:) ! pft weight relative to column (0-1)
real(r8), pointer :: pwtgcell(:) ! weight of pft relative to corresponding gridcell
real(r8), pointer :: lf_flab(:) ! leaf litter labile fraction
real(r8), pointer :: lf_fcel(:) ! leaf litter cellulose fraction
real(r8), pointer :: lf_flig(:) ! leaf litter lignin fraction
real(r8), pointer :: fr_flab(:) ! fine root litter labile fraction
real(r8), pointer :: fr_fcel(:) ! fine root litter cellulose fraction
real(r8), pointer :: fr_flig(:) ! fine root litter lignin fraction
integer , pointer :: npfts(:) ! number of pfts for each column
integer , pointer :: pfti(:) ! beginning pft index for each column
real(r8), pointer :: m_leafc_to_litter(:)
real(r8), pointer :: m_frootc_to_litter(:)
real(r8), pointer :: m_livestemc_to_litter(:)
real(r8), pointer :: m_deadstemc_to_litter(:)
real(r8), pointer :: m_livecrootc_to_litter(:)
real(r8), pointer :: m_deadcrootc_to_litter(:)
real(r8), pointer :: m_leafc_storage_to_litter(:)
real(r8), pointer :: m_frootc_storage_to_litter(:)
real(r8), pointer :: m_livestemc_storage_to_litter(:)
real(r8), pointer :: m_deadstemc_storage_to_litter(:)
real(r8), pointer :: m_livecrootc_storage_to_litter(:)
real(r8), pointer :: m_deadcrootc_storage_to_litter(:)
real(r8), pointer :: m_gresp_storage_to_litter(:)
real(r8), pointer :: m_leafc_xfer_to_litter(:)
real(r8), pointer :: m_frootc_xfer_to_litter(:)
real(r8), pointer :: m_livestemc_xfer_to_litter(:)
real(r8), pointer :: m_deadstemc_xfer_to_litter(:)
real(r8), pointer :: m_livecrootc_xfer_to_litter(:)
real(r8), pointer :: m_deadcrootc_xfer_to_litter(:)
real(r8), pointer :: m_gresp_xfer_to_litter(:)
real(r8), pointer :: m_leafn_to_litter(:)
real(r8), pointer :: m_frootn_to_litter(:)
real(r8), pointer :: m_livestemn_to_litter(:)
real(r8), pointer :: m_deadstemn_to_litter(:)
real(r8), pointer :: m_livecrootn_to_litter(:)
real(r8), pointer :: m_deadcrootn_to_litter(:)
real(r8), pointer :: m_retransn_to_litter(:)
real(r8), pointer :: m_leafn_storage_to_litter(:)
real(r8), pointer :: m_frootn_storage_to_litter(:)
real(r8), pointer :: m_livestemn_storage_to_litter(:)
real(r8), pointer :: m_deadstemn_storage_to_litter(:)
real(r8), pointer :: m_livecrootn_storage_to_litter(:)
real(r8), pointer :: m_deadcrootn_storage_to_litter(:)
real(r8), pointer :: m_leafn_xfer_to_litter(:)
real(r8), pointer :: m_frootn_xfer_to_litter(:)
real(r8), pointer :: m_livestemn_xfer_to_litter(:)
real(r8), pointer :: m_deadstemn_xfer_to_litter(:)
real(r8), pointer :: m_livecrootn_xfer_to_litter(:)
real(r8), pointer :: m_deadcrootn_xfer_to_litter(:)
!
! local pointers to implicit in/out arrays
real(r8), pointer :: m_leafc_to_litr1c(:)
real(r8), pointer :: m_leafc_to_litr2c(:)
real(r8), pointer :: m_leafc_to_litr3c(:)
real(r8), pointer :: m_frootc_to_litr1c(:)
real(r8), pointer :: m_frootc_to_litr2c(:)
real(r8), pointer :: m_frootc_to_litr3c(:)
real(r8), pointer :: m_livestemc_to_cwdc(:)
real(r8), pointer :: m_deadstemc_to_cwdc(:)
real(r8), pointer :: m_livecrootc_to_cwdc(:)
real(r8), pointer :: m_deadcrootc_to_cwdc(:)
real(r8), pointer :: m_leafc_storage_to_litr1c(:)
real(r8), pointer :: m_frootc_storage_to_litr1c(:)
real(r8), pointer :: m_livestemc_storage_to_litr1c(:)
real(r8), pointer :: m_deadstemc_storage_to_litr1c(:)
real(r8), pointer :: m_livecrootc_storage_to_litr1c(:)
real(r8), pointer :: m_deadcrootc_storage_to_litr1c(:)
real(r8), pointer :: m_gresp_storage_to_litr1c(:)
real(r8), pointer :: m_leafc_xfer_to_litr1c(:)
real(r8), pointer :: m_frootc_xfer_to_litr1c(:)
real(r8), pointer :: m_livestemc_xfer_to_litr1c(:)
real(r8), pointer :: m_deadstemc_xfer_to_litr1c(:)
real(r8), pointer :: m_livecrootc_xfer_to_litr1c(:)
real(r8), pointer :: m_deadcrootc_xfer_to_litr1c(:)
real(r8), pointer :: m_gresp_xfer_to_litr1c(:)
real(r8), pointer :: m_leafn_to_litr1n(:)
real(r8), pointer :: m_leafn_to_litr2n(:)
real(r8), pointer :: m_leafn_to_litr3n(:)
real(r8), pointer :: m_frootn_to_litr1n(:)
real(r8), pointer :: m_frootn_to_litr2n(:)
real(r8), pointer :: m_frootn_to_litr3n(:)
real(r8), pointer :: m_livestemn_to_cwdn(:)
real(r8), pointer :: m_deadstemn_to_cwdn(:)
real(r8), pointer :: m_livecrootn_to_cwdn(:)
real(r8), pointer :: m_deadcrootn_to_cwdn(:)
real(r8), pointer :: m_retransn_to_litr1n(:)
real(r8), pointer :: m_leafn_storage_to_litr1n(:)
real(r8), pointer :: m_frootn_storage_to_litr1n(:)
real(r8), pointer :: m_livestemn_storage_to_litr1n(:)
real(r8), pointer :: m_deadstemn_storage_to_litr1n(:)
real(r8), pointer :: m_livecrootn_storage_to_litr1n(:)
real(r8), pointer :: m_deadcrootn_storage_to_litr1n(:)
real(r8), pointer :: m_leafn_xfer_to_litr1n(:)
real(r8), pointer :: m_frootn_xfer_to_litr1n(:)
real(r8), pointer :: m_livestemn_xfer_to_litr1n(:)
real(r8), pointer :: m_deadstemn_xfer_to_litr1n(:)
real(r8), pointer :: m_livecrootn_xfer_to_litr1n(:)
real(r8), pointer :: m_deadcrootn_xfer_to_litr1n(:)
!
! local pointers to implicit out arrays
!
!
! !OTHER LOCAL VARIABLES:
integer :: fc,c,pi,p ! indices
!EOP
!-----------------------------------------------------------------------
! assign local pointers
lf_flab => pftcon%lf_flab
lf_fcel => pftcon%lf_fcel
lf_flig => pftcon%lf_flig
fr_flab => pftcon%fr_flab
fr_fcel => pftcon%fr_fcel
fr_flig => pftcon%fr_flig
! assign local pointers to column-level arrays
npfts => col%npfts
pfti => col%pfti
m_leafc_to_litr1c => ccf%m_leafc_to_litr1c
m_leafc_to_litr2c => ccf%m_leafc_to_litr2c
m_leafc_to_litr3c => ccf%m_leafc_to_litr3c
m_frootc_to_litr1c => ccf%m_frootc_to_litr1c
m_frootc_to_litr2c => ccf%m_frootc_to_litr2c
m_frootc_to_litr3c => ccf%m_frootc_to_litr3c
m_livestemc_to_cwdc => ccf%m_livestemc_to_cwdc
m_deadstemc_to_cwdc => ccf%m_deadstemc_to_cwdc
m_livecrootc_to_cwdc => ccf%m_livecrootc_to_cwdc
m_deadcrootc_to_cwdc => ccf%m_deadcrootc_to_cwdc
m_leafc_storage_to_litr1c => ccf%m_leafc_storage_to_litr1c
m_frootc_storage_to_litr1c => ccf%m_frootc_storage_to_litr1c
m_livestemc_storage_to_litr1c => ccf%m_livestemc_storage_to_litr1c
m_deadstemc_storage_to_litr1c => ccf%m_deadstemc_storage_to_litr1c
m_livecrootc_storage_to_litr1c => ccf%m_livecrootc_storage_to_litr1c
m_deadcrootc_storage_to_litr1c => ccf%m_deadcrootc_storage_to_litr1c
m_gresp_storage_to_litr1c => ccf%m_gresp_storage_to_litr1c
m_leafc_xfer_to_litr1c => ccf%m_leafc_xfer_to_litr1c
m_frootc_xfer_to_litr1c => ccf%m_frootc_xfer_to_litr1c
m_livestemc_xfer_to_litr1c => ccf%m_livestemc_xfer_to_litr1c
m_deadstemc_xfer_to_litr1c => ccf%m_deadstemc_xfer_to_litr1c
m_livecrootc_xfer_to_litr1c => ccf%m_livecrootc_xfer_to_litr1c
m_deadcrootc_xfer_to_litr1c => ccf%m_deadcrootc_xfer_to_litr1c
m_gresp_xfer_to_litr1c => ccf%m_gresp_xfer_to_litr1c
m_leafn_to_litr1n => cnf%m_leafn_to_litr1n
m_leafn_to_litr2n => cnf%m_leafn_to_litr2n
m_leafn_to_litr3n => cnf%m_leafn_to_litr3n
m_frootn_to_litr1n => cnf%m_frootn_to_litr1n
m_frootn_to_litr2n => cnf%m_frootn_to_litr2n
m_frootn_to_litr3n => cnf%m_frootn_to_litr3n
m_livestemn_to_cwdn => cnf%m_livestemn_to_cwdn
m_deadstemn_to_cwdn => cnf%m_deadstemn_to_cwdn
m_livecrootn_to_cwdn => cnf%m_livecrootn_to_cwdn
m_deadcrootn_to_cwdn => cnf%m_deadcrootn_to_cwdn
m_retransn_to_litr1n => cnf%m_retransn_to_litr1n
m_leafn_storage_to_litr1n => cnf%m_leafn_storage_to_litr1n
m_frootn_storage_to_litr1n => cnf%m_frootn_storage_to_litr1n
m_livestemn_storage_to_litr1n => cnf%m_livestemn_storage_to_litr1n
m_deadstemn_storage_to_litr1n => cnf%m_deadstemn_storage_to_litr1n
m_livecrootn_storage_to_litr1n => cnf%m_livecrootn_storage_to_litr1n
m_deadcrootn_storage_to_litr1n => cnf%m_deadcrootn_storage_to_litr1n
m_leafn_xfer_to_litr1n => cnf%m_leafn_xfer_to_litr1n
m_frootn_xfer_to_litr1n => cnf%m_frootn_xfer_to_litr1n
m_livestemn_xfer_to_litr1n => cnf%m_livestemn_xfer_to_litr1n
m_deadstemn_xfer_to_litr1n => cnf%m_deadstemn_xfer_to_litr1n
m_livecrootn_xfer_to_litr1n => cnf%m_livecrootn_xfer_to_litr1n
m_deadcrootn_xfer_to_litr1n => cnf%m_deadcrootn_xfer_to_litr1n
! assign local pointers to pft-level arrays
ivt => pft%itype
wtcol => pft%wtcol
pwtgcell => pft%wtgcell
m_leafc_to_litter => pcf%m_leafc_to_litter
m_frootc_to_litter => pcf%m_frootc_to_litter
m_livestemc_to_litter => pcf%m_livestemc_to_litter
m_deadstemc_to_litter => pcf%m_deadstemc_to_litter
m_livecrootc_to_litter => pcf%m_livecrootc_to_litter
m_deadcrootc_to_litter => pcf%m_deadcrootc_to_litter
m_leafc_storage_to_litter => pcf%m_leafc_storage_to_litter
m_frootc_storage_to_litter => pcf%m_frootc_storage_to_litter
m_livestemc_storage_to_litter => pcf%m_livestemc_storage_to_litter
m_deadstemc_storage_to_litter => pcf%m_deadstemc_storage_to_litter
m_livecrootc_storage_to_litter => pcf%m_livecrootc_storage_to_litter
m_deadcrootc_storage_to_litter => pcf%m_deadcrootc_storage_to_litter
m_gresp_storage_to_litter => pcf%m_gresp_storage_to_litter
m_leafc_xfer_to_litter => pcf%m_leafc_xfer_to_litter
m_frootc_xfer_to_litter => pcf%m_frootc_xfer_to_litter
m_livestemc_xfer_to_litter => pcf%m_livestemc_xfer_to_litter
m_deadstemc_xfer_to_litter => pcf%m_deadstemc_xfer_to_litter
m_livecrootc_xfer_to_litter => pcf%m_livecrootc_xfer_to_litter
m_deadcrootc_xfer_to_litter => pcf%m_deadcrootc_xfer_to_litter
m_gresp_xfer_to_litter => pcf%m_gresp_xfer_to_litter
m_leafn_to_litter => pnf%m_leafn_to_litter
m_frootn_to_litter => pnf%m_frootn_to_litter
m_livestemn_to_litter => pnf%m_livestemn_to_litter
m_deadstemn_to_litter => pnf%m_deadstemn_to_litter
m_livecrootn_to_litter => pnf%m_livecrootn_to_litter
m_deadcrootn_to_litter => pnf%m_deadcrootn_to_litter
m_retransn_to_litter => pnf%m_retransn_to_litter
m_leafn_storage_to_litter => pnf%m_leafn_storage_to_litter
m_frootn_storage_to_litter => pnf%m_frootn_storage_to_litter
m_livestemn_storage_to_litter => pnf%m_livestemn_storage_to_litter
m_deadstemn_storage_to_litter => pnf%m_deadstemn_storage_to_litter
m_livecrootn_storage_to_litter => pnf%m_livecrootn_storage_to_litter
m_deadcrootn_storage_to_litter => pnf%m_deadcrootn_storage_to_litter
m_leafn_xfer_to_litter => pnf%m_leafn_xfer_to_litter
m_frootn_xfer_to_litter => pnf%m_frootn_xfer_to_litter
m_livestemn_xfer_to_litter => pnf%m_livestemn_xfer_to_litter
m_deadstemn_xfer_to_litter => pnf%m_deadstemn_xfer_to_litter
m_livecrootn_xfer_to_litter => pnf%m_livecrootn_xfer_to_litter
m_deadcrootn_xfer_to_litter => pnf%m_deadcrootn_xfer_to_litter
do pi = 1,maxpatch_pft
do fc = 1,num_soilc
c = filter_soilc(fc)
if (pi <= npfts(c)) then
p = pfti(c) + pi - 1
if (pwtgcell(p)>0._r8) then
! leaf gap mortality carbon fluxes
m_leafc_to_litr1c(c) = m_leafc_to_litr1c(c) + &
m_leafc_to_litter(p) * lf_flab(ivt(p)) * wtcol(p)
m_leafc_to_litr2c(c) = m_leafc_to_litr2c(c) + &
m_leafc_to_litter(p) * lf_fcel(ivt(p)) * wtcol(p)
m_leafc_to_litr3c(c) = m_leafc_to_litr3c(c) + &
m_leafc_to_litter(p) * lf_flig(ivt(p)) * wtcol(p)
! fine root gap mortality carbon fluxes
m_frootc_to_litr1c(c) = m_frootc_to_litr1c(c) + &
m_frootc_to_litter(p) * fr_flab(ivt(p)) * wtcol(p)
m_frootc_to_litr2c(c) = m_frootc_to_litr2c(c) + &
m_frootc_to_litter(p) * fr_fcel(ivt(p)) * wtcol(p)
m_frootc_to_litr3c(c) = m_frootc_to_litr3c(c) + &
m_frootc_to_litter(p) * fr_flig(ivt(p)) * wtcol(p)
! wood gap mortality carbon fluxes
m_livestemc_to_cwdc(c) = m_livestemc_to_cwdc(c) + &
m_livestemc_to_litter(p) * wtcol(p)
m_deadstemc_to_cwdc(c) = m_deadstemc_to_cwdc(c) + &
m_deadstemc_to_litter(p) * wtcol(p)
m_livecrootc_to_cwdc(c) = m_livecrootc_to_cwdc(c) + &
m_livecrootc_to_litter(p) * wtcol(p)
m_deadcrootc_to_cwdc(c) = m_deadcrootc_to_cwdc(c) + &
m_deadcrootc_to_litter(p) * wtcol(p)
! storage gap mortality carbon fluxes
m_leafc_storage_to_litr1c(c) = m_leafc_storage_to_litr1c(c) + &
m_leafc_storage_to_litter(p) * wtcol(p)
m_frootc_storage_to_litr1c(c) = m_frootc_storage_to_litr1c(c) + &
m_frootc_storage_to_litter(p) * wtcol(p)
m_livestemc_storage_to_litr1c(c) = m_livestemc_storage_to_litr1c(c) + &
m_livestemc_storage_to_litter(p) * wtcol(p)
m_deadstemc_storage_to_litr1c(c) = m_deadstemc_storage_to_litr1c(c) + &
m_deadstemc_storage_to_litter(p) * wtcol(p)
m_livecrootc_storage_to_litr1c(c) = m_livecrootc_storage_to_litr1c(c) + &
m_livecrootc_storage_to_litter(p) * wtcol(p)
m_deadcrootc_storage_to_litr1c(c) = m_deadcrootc_storage_to_litr1c(c) + &
m_deadcrootc_storage_to_litter(p) * wtcol(p)
m_gresp_storage_to_litr1c(c) = m_gresp_storage_to_litr1c(c) + &
m_gresp_storage_to_litter(p) * wtcol(p)
! transfer gap mortality carbon fluxes
m_leafc_xfer_to_litr1c(c) = m_leafc_xfer_to_litr1c(c) + &
m_leafc_xfer_to_litter(p) * wtcol(p)
m_frootc_xfer_to_litr1c(c) = m_frootc_xfer_to_litr1c(c) + &
m_frootc_xfer_to_litter(p) * wtcol(p)
m_livestemc_xfer_to_litr1c(c) = m_livestemc_xfer_to_litr1c(c) + &
m_livestemc_xfer_to_litter(p) * wtcol(p)
m_deadstemc_xfer_to_litr1c(c) = m_deadstemc_xfer_to_litr1c(c) + &
m_deadstemc_xfer_to_litter(p) * wtcol(p)
m_livecrootc_xfer_to_litr1c(c) = m_livecrootc_xfer_to_litr1c(c) + &
m_livecrootc_xfer_to_litter(p) * wtcol(p)
m_deadcrootc_xfer_to_litr1c(c) = m_deadcrootc_xfer_to_litr1c(c) + &
m_deadcrootc_xfer_to_litter(p) * wtcol(p)
m_gresp_xfer_to_litr1c(c) = m_gresp_xfer_to_litr1c(c) + &
m_gresp_xfer_to_litter(p) * wtcol(p)
! leaf gap mortality nitrogen fluxes
m_leafn_to_litr1n(c) = m_leafn_to_litr1n(c) + &
m_leafn_to_litter(p) * lf_flab(ivt(p)) * wtcol(p)
m_leafn_to_litr2n(c) = m_leafn_to_litr2n(c) + &
m_leafn_to_litter(p) * lf_fcel(ivt(p)) * wtcol(p)
m_leafn_to_litr3n(c) = m_leafn_to_litr3n(c) + &
m_leafn_to_litter(p) * lf_flig(ivt(p)) * wtcol(p)
! fine root litter nitrogen fluxes
m_frootn_to_litr1n(c) = m_frootn_to_litr1n(c) + &
m_frootn_to_litter(p) * fr_flab(ivt(p)) * wtcol(p)
m_frootn_to_litr2n(c) = m_frootn_to_litr2n(c) + &
m_frootn_to_litter(p) * fr_fcel(ivt(p)) * wtcol(p)
m_frootn_to_litr3n(c) = m_frootn_to_litr3n(c) + &
m_frootn_to_litter(p) * fr_flig(ivt(p)) * wtcol(p)
! wood gap mortality nitrogen fluxes
m_livestemn_to_cwdn(c) = m_livestemn_to_cwdn(c) + &
m_livestemn_to_litter(p) * wtcol(p)
m_deadstemn_to_cwdn(c) = m_deadstemn_to_cwdn(c) + &
m_deadstemn_to_litter(p) * wtcol(p)
m_livecrootn_to_cwdn(c) = m_livecrootn_to_cwdn(c) + &
m_livecrootn_to_litter(p) * wtcol(p)
m_deadcrootn_to_cwdn(c) = m_deadcrootn_to_cwdn(c) + &
m_deadcrootn_to_litter(p) * wtcol(p)
! retranslocated N pool gap mortality fluxes
m_retransn_to_litr1n(c) = m_retransn_to_litr1n(c) + &
m_retransn_to_litter(p) * wtcol(p)
! storage gap mortality nitrogen fluxes
m_leafn_storage_to_litr1n(c) = m_leafn_storage_to_litr1n(c) + &
m_leafn_storage_to_litter(p) * wtcol(p)
m_frootn_storage_to_litr1n(c) = m_frootn_storage_to_litr1n(c) + &
m_frootn_storage_to_litter(p) * wtcol(p)
m_livestemn_storage_to_litr1n(c) = m_livestemn_storage_to_litr1n(c) + &
m_livestemn_storage_to_litter(p) * wtcol(p)
m_deadstemn_storage_to_litr1n(c) = m_deadstemn_storage_to_litr1n(c) + &
m_deadstemn_storage_to_litter(p) * wtcol(p)
m_livecrootn_storage_to_litr1n(c) = m_livecrootn_storage_to_litr1n(c) + &
m_livecrootn_storage_to_litter(p) * wtcol(p)
m_deadcrootn_storage_to_litr1n(c) = m_deadcrootn_storage_to_litr1n(c) + &
m_deadcrootn_storage_to_litter(p) * wtcol(p)
! transfer gap mortality nitrogen fluxes
m_leafn_xfer_to_litr1n(c) = m_leafn_xfer_to_litr1n(c) + &
m_leafn_xfer_to_litter(p) * wtcol(p)
m_frootn_xfer_to_litr1n(c) = m_frootn_xfer_to_litr1n(c) + &
m_frootn_xfer_to_litter(p) * wtcol(p)
m_livestemn_xfer_to_litr1n(c) = m_livestemn_xfer_to_litr1n(c) + &
m_livestemn_xfer_to_litter(p) * wtcol(p)
m_deadstemn_xfer_to_litr1n(c) = m_deadstemn_xfer_to_litr1n(c) + &
m_deadstemn_xfer_to_litter(p) * wtcol(p)
m_livecrootn_xfer_to_litr1n(c) = m_livecrootn_xfer_to_litr1n(c) + &
m_livecrootn_xfer_to_litter(p) * wtcol(p)
m_deadcrootn_xfer_to_litr1n(c) = m_deadcrootn_xfer_to_litr1n(c) + &
m_deadcrootn_xfer_to_litter(p) * wtcol(p)
end if
end if
end do
end do
end subroutine CNGapPftToColumn
!-----------------------------------------------------------------------
end module CNGapMortalityMod