LCOV - code coverage report
Current view: top level - configuration/driver - icedrv_restart_bgc.F90 (source / functions) Coverage Total Hit
Test: 250115-224328:3d8b76b919:4:base,io,travis,quick Lines: 72.60 % 281 204
Test Date: 2025-01-15 16:24:29 Functions: 100.00 % 2 2

            Line data    Source code
       1              : !=========================================================================
       2              : !
       3              : ! Restart routines for the column package.
       4              : !
       5              : ! author: Elizabeth C. Hunke, LANL
       6              : !
       7              :       module icedrv_restart_bgc
       8              : 
       9              :       use icedrv_kinds
      10              :       use icedrv_constants
      11              :       use icedrv_domain_size, only: ncat, nblyr, nx
      12              :       use icepack_intfc, only: icepack_max_algae, icepack_max_doc, icepack_max_don
      13              :       use icepack_intfc, only: icepack_max_dic, icepack_max_aero, icepack_max_fe
      14              :       use icepack_intfc, only: icepack_warnings_flush, icepack_warnings_aborted
      15              :       use icepack_intfc, only: icepack_query_parameters, icepack_query_tracer_sizes
      16              :       use icepack_intfc, only: icepack_query_tracer_flags, icepack_query_tracer_indices
      17              :       use icedrv_system, only: icedrv_system_abort
      18              : 
      19              :       implicit none
      20              : 
      21              :       private
      22              :       public ::  write_restart_bgc, &
      23              :                  read_restart_bgc
      24              : 
      25              : !=======================================================================
      26              : 
      27              :       contains
      28              : 
      29              : !=======================================================================
      30              : !
      31              : ! Dumps all values needed for a bgc restart
      32              : !
      33              : ! author Elizabeth C. Hunke, LANL
      34              : 
      35          268 :       subroutine write_restart_bgc()
      36              : 
      37              :       use icedrv_domain_size, only: n_algae, n_doc, n_dic
      38              :       use icedrv_domain_size, only: n_don, n_zaero, n_fed, n_fep
      39              :       use icedrv_flux, only: sss, nit, amm, sil, dmsp, dms, algalN
      40              :       use icedrv_flux, only: doc, don, dic, fed, fep, zaeros, hum
      41              :       use icedrv_state, only: trcrn
      42              :       use icedrv_restart, only:  write_restart_field
      43              : 
      44              :       ! local variables
      45              : 
      46              :       integer (kind=int_kind) :: &
      47              :        i, k             , & ! horizontal, vertical indices
      48              :        mm                   ! n_algae
      49              : 
      50              :       logical (kind=log_kind) :: skl_bgc, z_tracers
      51              : 
      52              :       integer (kind=int_kind) :: nbtrcr
      53              :       logical (kind=log_kind) :: tr_bgc_Nit, tr_bgc_Am, tr_bgc_Sil, tr_bgc_hum
      54              :       logical (kind=log_kind) :: tr_bgc_DMS, tr_bgc_PON, tr_bgc_N, tr_bgc_C
      55              :       logical (kind=log_kind) :: tr_bgc_DON, tr_bgc_Fe,  tr_zaero , tr_bgc_chl
      56              :       integer (kind=int_kind) :: nt_bgc_Nit, nt_bgc_AM, nt_bgc_Sil
      57              :       integer (kind=int_kind) :: nt_bgc_hum, nt_bgc_PON
      58              :       integer (kind=int_kind) :: nt_bgc_DMSPp, nt_bgc_DMSPd, nt_bgc_DMS
      59              :       integer (kind=int_kind) :: nt_zbgc_frac
      60              :       integer (kind=int_kind), dimension(icepack_max_algae) :: nt_bgc_N
      61              :       integer (kind=int_kind), dimension(icepack_max_algae) :: nt_bgc_chl
      62              :       integer (kind=int_kind), dimension(icepack_max_algae) :: nt_bgc_C
      63              :       integer (kind=int_kind), dimension(icepack_max_doc)   :: nt_bgc_DOC
      64              :       integer (kind=int_kind), dimension(icepack_max_don)   :: nt_bgc_DON
      65              :       integer (kind=int_kind), dimension(icepack_max_dic)   :: nt_bgc_DIC
      66              :       integer (kind=int_kind), dimension(icepack_max_aero)  :: nt_zaero
      67              :       integer (kind=int_kind), dimension(icepack_max_fe)    :: nt_bgc_Fed
      68              :       integer (kind=int_kind), dimension(icepack_max_fe)    :: nt_bgc_Fep
      69              : 
      70              :       character(len=*), parameter :: subname='(write_restart_bgc)'
      71              : 
      72              :       !-----------------------------------------------------------------
      73              :       ! query Icepack values
      74              :       !-----------------------------------------------------------------
      75              : 
      76           67 :       call icepack_query_parameters(skl_bgc_out=skl_bgc)
      77           67 :       call icepack_query_parameters(z_tracers_out=z_tracers)
      78           67 :       call icepack_query_tracer_sizes(nbtrcr_out=nbtrcr)
      79              :       call icepack_query_tracer_flags(tr_bgc_Nit_out=tr_bgc_Nit, &
      80              :          tr_bgc_Am_out=tr_bgc_Am, &
      81              :          tr_bgc_Sil_out=tr_bgc_Sil, tr_bgc_hum_out=tr_bgc_hum, &
      82              :          tr_bgc_DMS_out=tr_bgc_DMS, tr_bgc_PON_out=tr_bgc_PON, &
      83              :          tr_bgc_N_out=tr_bgc_N, tr_bgc_C_out=tr_bgc_C, &
      84              :          tr_bgc_DON_out=tr_bgc_DON, tr_bgc_Fe_out=tr_bgc_Fe,  &
      85           67 :          tr_zaero_out=tr_zaero, tr_bgc_chl_out=tr_bgc_chl)
      86              :       call icepack_query_tracer_indices( &
      87              :          nt_bgc_N_out=nt_bgc_N, nt_bgc_AM_out=nt_bgc_AM, &
      88              :          nt_bgc_chl_out=nt_bgc_chl, nt_bgc_C_out=nt_bgc_C, &
      89              :          nt_bgc_DOC_out=nt_bgc_DOC, &
      90              :          nt_bgc_DIC_out=nt_bgc_DIC, nt_bgc_Nit_out=nt_bgc_Nit, &
      91              :          nt_bgc_Sil_out=nt_bgc_Sil, nt_bgc_hum_out=nt_bgc_hum, &
      92              :          nt_bgc_DMSPp_out=nt_bgc_DMSPp, nt_bgc_DMSPd_out=nt_bgc_DMSPd, &
      93              :          nt_bgc_DMS_out=nt_bgc_DMS, nt_bgc_PON_out=nt_bgc_PON, &
      94              :          nt_bgc_DON_out=nt_bgc_DON, nt_bgc_Fed_out=nt_bgc_Fed, &
      95              :          nt_bgc_Fep_out=nt_bgc_Fep, nt_zbgc_frac_out=nt_zbgc_frac, &
      96           67 :          nt_zaero_out=nt_zaero)
      97           67 :       call icepack_warnings_flush(nu_diag)
      98           67 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
      99            0 :           file=__FILE__,line= __LINE__)
     100              : 
     101              :       !-----------------------------------------------------------------
     102              :       ! Skeletal layer BGC
     103              :       !-----------------------------------------------------------------
     104              : 
     105           67 :       if (skl_bgc) then
     106            0 :          do k = 1, n_algae
     107            0 :            call write_restart_field(nu_dump,trcrn(:,nt_bgc_N(k),:),ncat)
     108            0 :            if (tr_bgc_chl) &
     109            0 :            call write_restart_field(nu_dump,trcrn(:,nt_bgc_chl(k),:),ncat)
     110              :          enddo
     111            0 :          if (tr_bgc_C)  then
     112              : !           do k = 1, n_algae
     113              : !             call write_restart_field(nu_dump,trcrn(:,nt_bgc_C(k),:),ncat)
     114              : !           enddo
     115            0 :             do k = 1, n_doc
     116            0 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_DOC(k),:),ncat)
     117              :             enddo
     118            0 :             do k = 1, n_dic
     119            0 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_DIC(k),:),ncat)
     120              :             enddo
     121              :          endif
     122            0 :          if (tr_bgc_Nit) &
     123            0 :              call write_restart_field(nu_dump,trcrn(:,nt_bgc_Nit,:),ncat)
     124            0 :          if (tr_bgc_Am) &
     125            0 :              call write_restart_field(nu_dump,trcrn(:,nt_bgc_Am,:),ncat)
     126            0 :          if (tr_bgc_Sil) &
     127            0 :              call write_restart_field(nu_dump,trcrn(:,nt_bgc_Sil,:),ncat)
     128            0 :          if (tr_bgc_hum) &
     129            0 :              call write_restart_field(nu_dump,trcrn(:,nt_bgc_hum,:),ncat)
     130            0 :          if (tr_bgc_DMS) then
     131            0 :             call write_restart_field(nu_dump,trcrn(:,nt_bgc_DMSPp,:),ncat)
     132            0 :             call write_restart_field(nu_dump,trcrn(:,nt_bgc_DMSPd,:),ncat)
     133            0 :             call write_restart_field(nu_dump,trcrn(:,nt_bgc_DMS,:),ncat)
     134              :          endif
     135            0 :          if (tr_bgc_PON) &
     136            0 :              call write_restart_field(nu_dump,trcrn(:,nt_bgc_PON,:),ncat)
     137            0 :          if (tr_bgc_DON)  then
     138            0 :             do k = 1, n_don
     139            0 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_DON(k),:),ncat)
     140              :             enddo
     141              :          endif
     142            0 :          if (tr_bgc_Fe )  then
     143            0 :             do k = 1, n_fed
     144            0 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_Fed(k),:),ncat)
     145              :             enddo
     146            0 :             do k = 1, n_fep
     147            0 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_Fep(k),:),ncat)
     148              :             enddo
     149              :          endif
     150              : 
     151           67 :       elseif (z_tracers) then
     152              : 
     153              :       !-----------------------------------------------------------------
     154              :       ! Z layer BGC
     155              :       !-----------------------------------------------------------------
     156              : 
     157           67 :          if (tr_bgc_Nit) then
     158           45 :             write(nu_diag,*) 'z bgc restart: min/max Nitrate'
     159          495 :             do k = 1, nblyr+3
     160          495 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_Nit+k-1,:),ncat)
     161              :             enddo
     162              :          endif
     163           67 :          if (tr_bgc_N) then
     164          180 :             do mm = 1, n_algae
     165         1485 :                do k = 1, nblyr+3
     166         1485 :                   call write_restart_field(nu_dump,trcrn(:,nt_bgc_N(mm)+k-1,:),ncat)
     167              :                enddo
     168          180 :                if (tr_bgc_chl) then
     169            0 :                   do k = 1, nblyr+3
     170            0 :                      call write_restart_field(nu_dump,trcrn(:,nt_bgc_chl(mm)+k-1,:),ncat)
     171              :                   enddo
     172              :                endif
     173              :             enddo   ! n_algae
     174              :          endif      ! tr_bgc_N
     175           67 :          if (tr_bgc_C) then
     176              : ! algal C is not yet distinct from algal N
     177              : !           do mm = 1, n_algae
     178              : !           do k = 1, nblyr+3
     179              : !              call write_restart_field(nu_dump,trcrn(:,nt_bgc_C(mm)+k-1,:),ncat)
     180              : !           enddo
     181              : !           enddo
     182          135 :             do mm = 1, n_doc
     183         1035 :             do k = 1, nblyr+3
     184          990 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_DOC(mm)+k-1,:),ncat)
     185              :             enddo
     186              :             enddo
     187           90 :             do mm = 1, n_dic
     188          540 :             do k = 1, nblyr+3
     189          495 :               call write_restart_field(nu_dump,trcrn(:,nt_bgc_DIC(mm)+k-1,:),ncat)
     190              :             enddo
     191              :             enddo
     192              :          endif  !tr_bgc_C
     193           67 :          if (tr_bgc_Am) then
     194          495 :             do k = 1, nblyr+3
     195          495 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_Am+k-1,:),ncat)
     196              :             enddo
     197              :          endif
     198           67 :          if (tr_bgc_Sil) then
     199          495 :             do k = 1, nblyr+3
     200          495 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_Sil+k-1,:),ncat)
     201              :             enddo
     202              :          endif
     203           67 :          if (tr_bgc_hum) then
     204          495 :             do k = 1, nblyr+3
     205          495 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_hum+k-1,:),ncat)
     206              :             enddo
     207              :          endif
     208           67 :          if (tr_bgc_DMS) then
     209          495 :             do k = 1, nblyr+3
     210          450 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_DMSPp+k-1,:),ncat)
     211          450 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_DMSPd+k-1,:),ncat)
     212          495 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_DMS+k-1,:),ncat)
     213              :             enddo
     214              :          endif
     215           67 :          if (tr_bgc_PON) then
     216          495 :             do k = 1, nblyr+3
     217          495 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_PON+k-1,:),ncat)
     218              :             enddo
     219              :          endif
     220           67 :          if (tr_bgc_DON) then
     221           90 :             do mm = 1, n_don
     222          540 :             do k = 1, nblyr+3
     223          495 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_DON(mm)+k-1,:),ncat)
     224              :             enddo
     225              :             enddo
     226              :          endif
     227           67 :          if (tr_bgc_Fe ) then
     228           90 :             do mm = 1, n_fed
     229          540 :             do k = 1, nblyr+3
     230          495 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_Fed(mm)+k-1,:),ncat)
     231              :             enddo
     232              :             enddo
     233           90 :             do mm = 1, n_fep
     234          540 :             do k = 1, nblyr+3
     235          495 :                call write_restart_field(nu_dump,trcrn(:,nt_bgc_Fep(mm)+k-1,:),ncat)
     236              :             enddo
     237              :             enddo
     238              :          endif
     239           67 :          if (tr_zaero) then
     240          337 :             do mm = 1, n_zaero
     241         3037 :             do k = 1, nblyr+3
     242         2970 :                call write_restart_field(nu_dump,trcrn(:,nt_zaero(mm)+k-1,:),ncat)
     243              :             enddo
     244              :             enddo
     245              :          endif
     246           67 :          if (nbtrcr > 0) then
     247         1102 :             do mm = 1, nbtrcr
     248         1102 :                call write_restart_field(nu_dump,trcrn(:,nt_zbgc_frac+mm-1,:),ncat)
     249              :             enddo
     250              :          endif
     251              : 
     252              :       !-----------------------------------------------------------------
     253              :       ! Ocean BGC
     254              :       !-----------------------------------------------------------------
     255              : 
     256           67 :          if (tr_bgc_N) then
     257          180 :             do k = 1, n_algae
     258          180 :                call write_restart_field(nu_dump,algalN(:,k),1)
     259              :             enddo  ! k
     260              :          endif
     261           67 :          if (tr_bgc_C) then
     262          135 :             do k = 1, n_doc
     263          135 :                call write_restart_field(nu_dump,doc(:,k),1)
     264              :             enddo  ! k
     265           90 :             do k = 1, n_dic
     266           90 :                call write_restart_field(nu_dump,dic(:,k),1)
     267              :             enddo  ! k
     268              :          endif
     269           67 :          if (tr_bgc_Nit) &
     270           45 :              call write_restart_field(nu_dump,nit,1)
     271           67 :          if (tr_bgc_Am) &
     272           45 :              call write_restart_field(nu_dump,amm,1)
     273           67 :          if (tr_bgc_Sil) &
     274           45 :              call write_restart_field(nu_dump,sil,1)
     275           67 :          if (tr_bgc_hum) &
     276           45 :              call write_restart_field(nu_dump,hum,1)
     277           67 :          if (tr_bgc_DMS) then
     278           45 :              call write_restart_field(nu_dump,dmsp,1)
     279           45 :              call write_restart_field(nu_dump,dms,1)
     280              :          endif
     281           67 :          if (tr_bgc_DON) then
     282           90 :             do k = 1, n_don
     283           90 :                call write_restart_field(nu_dump,don(:,k),1)
     284              :             enddo  ! k
     285              :          endif
     286           67 :          if (tr_bgc_Fe ) then
     287           90 :             do k = 1, n_fed
     288           90 :                call write_restart_field(nu_dump,fed(:,k),1)
     289              :             enddo  ! k
     290           90 :             do k = 1, n_fep
     291           90 :                call write_restart_field(nu_dump,fep(:,k),1)
     292              :             enddo  ! k
     293              :          endif
     294           67 :          if (tr_zaero) then
     295          337 :             do k = 1, n_zaero
     296          337 :                call write_restart_field(nu_dump,zaeros(:,k),1)
     297              :             enddo  ! k
     298              :          endif
     299              : 
     300              :       endif  ! skl_bgc or z_tracers
     301              : 
     302           67 :       end subroutine write_restart_bgc
     303              : 
     304              : !=======================================================================
     305              : !
     306              : ! Reads all values needed for a bgc restart
     307              : !
     308              : ! author Elizabeth C. Hunke, LANL
     309              : 
     310           12 :       subroutine read_restart_bgc()
     311              : 
     312              :       use icedrv_domain_size, only: n_algae, n_doc, n_dic
     313              :       use icedrv_domain_size, only: n_don, n_zaero, n_fed, n_fep
     314              :       use icedrv_flux, only: sss, nit, amm, sil, dmsp, dms, algalN
     315              :       use icedrv_flux, only: doc, don, dic, fed, fep, zaeros, hum
     316              :       use icedrv_state, only: trcrn
     317              :       use icedrv_restart, only: read_restart_field
     318              : 
     319              :       ! local variables
     320              : 
     321              :       integer (kind=int_kind) :: &
     322              :          i, k, & ! indices
     323              :          mm      ! n_algae
     324              : 
     325              :       logical (kind=log_kind) :: skl_bgc, z_tracers
     326              : 
     327              :       integer (kind=int_kind) :: nbtrcr
     328              :       logical (kind=log_kind) :: tr_bgc_Nit, tr_bgc_Am, tr_bgc_Sil, tr_bgc_hum
     329              :       logical (kind=log_kind) :: tr_bgc_DMS, tr_bgc_PON, tr_bgc_N, tr_bgc_C
     330              :       logical (kind=log_kind) :: tr_bgc_DON, tr_bgc_Fe,  tr_zaero , tr_bgc_chl
     331              :       integer (kind=int_kind) :: nt_bgc_Nit, nt_bgc_AM, nt_bgc_Sil
     332              :       integer (kind=int_kind) :: nt_bgc_hum, nt_bgc_PON
     333              :       integer (kind=int_kind) :: nt_bgc_DMSPp, nt_bgc_DMSPd, nt_bgc_DMS
     334              :       integer (kind=int_kind) :: nt_zbgc_frac
     335              :       integer (kind=int_kind), dimension(icepack_max_algae) :: nt_bgc_N
     336              :       integer (kind=int_kind), dimension(icepack_max_algae) :: nt_bgc_chl
     337              :       integer (kind=int_kind), dimension(icepack_max_algae) :: nt_bgc_C
     338              :       integer (kind=int_kind), dimension(icepack_max_doc)   :: nt_bgc_DOC
     339              :       integer (kind=int_kind), dimension(icepack_max_don)   :: nt_bgc_DON
     340              :       integer (kind=int_kind), dimension(icepack_max_dic)   :: nt_bgc_DIC
     341              :       integer (kind=int_kind), dimension(icepack_max_aero)  :: nt_zaero
     342              :       integer (kind=int_kind), dimension(icepack_max_fe)    :: nt_bgc_Fed
     343              :       integer (kind=int_kind), dimension(icepack_max_fe)    :: nt_bgc_Fep
     344              : 
     345              :       character(len=*), parameter :: subname='(read_restart_bgc)'
     346              : 
     347              :       !-----------------------------------------------------------------
     348              :       ! query Icepack values
     349              :       !-----------------------------------------------------------------
     350              : 
     351            3 :       call icepack_query_parameters(skl_bgc_out=skl_bgc)
     352            3 :       call icepack_query_parameters(z_tracers_out=z_tracers)
     353            3 :       call icepack_query_tracer_sizes(nbtrcr_out=nbtrcr)
     354              : 
     355              : 
     356              :       call icepack_query_tracer_flags(tr_bgc_Nit_out=tr_bgc_Nit, &
     357              :          tr_bgc_Am_out=tr_bgc_Am, &
     358              :          tr_bgc_Sil_out=tr_bgc_Sil, tr_bgc_hum_out=tr_bgc_hum, &
     359              :          tr_bgc_DMS_out=tr_bgc_DMS, tr_bgc_PON_out=tr_bgc_PON, &
     360              :          tr_bgc_N_out=tr_bgc_N, tr_bgc_C_out=tr_bgc_C, &
     361              :          tr_bgc_DON_out=tr_bgc_DON, tr_bgc_Fe_out=tr_bgc_Fe,  &
     362            3 :          tr_zaero_out=tr_zaero, tr_bgc_chl_out=tr_bgc_chl)
     363              :       call icepack_query_tracer_indices( &
     364              :          nt_bgc_N_out=nt_bgc_N, nt_bgc_AM_out=nt_bgc_AM, &
     365              :          nt_bgc_chl_out=nt_bgc_chl, nt_bgc_C_out=nt_bgc_C, &
     366              :          nt_bgc_DOC_out=nt_bgc_DOC, &
     367              :          nt_bgc_DIC_out=nt_bgc_DIC, nt_bgc_Nit_out=nt_bgc_Nit, &
     368              :          nt_bgc_Sil_out=nt_bgc_Sil, nt_bgc_hum_out=nt_bgc_hum, &
     369              :          nt_bgc_DMSPp_out=nt_bgc_DMSPp, nt_bgc_DMSPd_out=nt_bgc_DMSPd, &
     370              :          nt_bgc_DMS_out=nt_bgc_DMS, nt_bgc_PON_out=nt_bgc_PON, &
     371              :          nt_bgc_DON_out=nt_bgc_DON, nt_bgc_Fed_out=nt_bgc_Fed, &
     372              :          nt_bgc_Fep_out=nt_bgc_Fep, nt_zbgc_frac_out=nt_zbgc_frac, &
     373            3 :          nt_zaero_out=nt_zaero)
     374            3 :       call icepack_warnings_flush(nu_diag)
     375            3 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     376            0 :           file=__FILE__,line= __LINE__)
     377              : 
     378              :       !-----------------------------------------------------------------
     379              :       ! Skeletal Layer BGC
     380              :       !-----------------------------------------------------------------
     381              : 
     382            3 :       if (skl_bgc) then
     383            0 :          write(nu_diag,*) 'skl bgc restart'
     384              : 
     385            0 :          write (nu_diag,*) 'min/max algal N, chl'
     386            0 :          do k = 1, n_algae
     387            0 :             call read_restart_field(nu_restart,trcrn(:,nt_bgc_N(k),:),ncat)
     388            0 :             if (tr_bgc_chl) &
     389            0 :             call read_restart_field(nu_restart,trcrn(:,nt_bgc_chl(k),:),ncat)
     390              :          enddo   ! k
     391            0 :          if (tr_bgc_C) then
     392              : ! algal C is not yet distinct from algal N
     393              : !           write (nu_diag,*) 'min/max algal C, DOC, DIC'
     394              : !           do k = 1, n_algae
     395              : !              call read_restart_field(nu_restart,trcrn(:,nt_bgc_C(k),:),ncat)
     396              : !           enddo
     397            0 :             write (nu_diag,*) 'min/max DOC, DIC'
     398            0 :             do k = 1, n_doc
     399            0 :                call read_restart_field(nu_restart,trcrn(:,nt_bgc_DOC(k),:),ncat)
     400              :             enddo
     401            0 :             do k = 1, n_dic
     402            0 :                call read_restart_field(nu_restart,trcrn(:,nt_bgc_DIC(k),:),ncat)
     403              :             enddo
     404              :          endif
     405            0 :          write (nu_diag,*) 'min/max Nit, Am, Sil, hum'
     406            0 :          if (tr_bgc_Nit) &
     407            0 :             call read_restart_field(nu_restart,trcrn(:,nt_bgc_Nit,:),ncat)
     408            0 :          if (tr_bgc_Am) &
     409            0 :             call read_restart_field(nu_restart,trcrn(:,nt_bgc_Am,:),ncat)
     410            0 :          if (tr_bgc_Sil) &
     411            0 :             call read_restart_field(nu_restart,trcrn(:,nt_bgc_Sil,:),ncat)
     412            0 :          if (tr_bgc_hum) &
     413            0 :             call read_restart_field(nu_restart,trcrn(:,nt_bgc_hum,:),ncat)
     414            0 :          if (tr_bgc_DMS) then
     415            0 :             write (nu_diag,*) 'min/max pDMSP, dDMSP, DMS'
     416            0 :             call read_restart_field(nu_restart,trcrn(:,nt_bgc_DMSPp,:),ncat)
     417            0 :             call read_restart_field(nu_restart,trcrn(:,nt_bgc_DMSPd,:),ncat)
     418            0 :             call read_restart_field(nu_restart,trcrn(:,nt_bgc_DMS,:),ncat)
     419              :          endif
     420            0 :          write (nu_diag,*) 'min/max PON'
     421            0 :          if (tr_bgc_PON) &
     422            0 :             call read_restart_field(nu_restart,trcrn(:,nt_bgc_PON,:),ncat)
     423            0 :          if (tr_bgc_DON) then
     424            0 :             write (nu_diag,*) 'min/max DON'
     425            0 :             do k = 1, n_don
     426            0 :                call read_restart_field(nu_restart,trcrn(:,nt_bgc_DON(k),:),ncat)
     427              :             enddo
     428              :          endif
     429            0 :          if (tr_bgc_Fe) then
     430            0 :             write (nu_diag,*) 'min/max dFe, pFe'
     431            0 :             do k = 1, n_fed
     432            0 :                call read_restart_field(nu_restart,trcrn(:,nt_bgc_Fed (k),:),ncat)
     433              :             enddo
     434            0 :             do k = 1, n_fep
     435            0 :                call read_restart_field(nu_restart,trcrn(:,nt_bgc_Fep (k),:),ncat)
     436              :             enddo
     437              :          endif
     438              : 
     439            3 :       elseif (z_tracers) then
     440              : 
     441              :       !-----------------------------------------------------------------
     442              :       ! Z Layer BGC
     443              :       !-----------------------------------------------------------------
     444              : 
     445            3 :          if (tr_bgc_Nit) then
     446            2 :             write(nu_diag,*) 'z bgc restart: min/max Nitrate'
     447           22 :             do k=1, nblyr+3
     448           22 :                call read_restart_field(nu_restart,trcrn(:,nt_bgc_Nit+k-1,:),ncat)
     449              :             enddo
     450              :          endif   ! Nit
     451            3 :          if (tr_bgc_N) then
     452            8 :             do mm = 1, n_algae
     453            6 :                write(nu_diag,*) ' min/max Algal N', n_algae
     454           66 :                do k=1, nblyr+3
     455           66 :                   call read_restart_field(nu_restart,trcrn(:,nt_bgc_N(mm)+k-1,:),ncat)
     456              :                enddo
     457            8 :                if (tr_bgc_chl) then
     458            0 :                   write(nu_diag,*) ' min/max Algal chla'
     459            0 :                   do k=1, nblyr+3
     460            0 :                      call read_restart_field(nu_restart,trcrn(:,nt_bgc_chl(mm)+k-1,:),ncat)
     461              :                   enddo
     462              :                endif   ! tr_bgc_chl
     463              :             enddo      ! n_algae
     464              :          endif         ! tr_bgc_N
     465            3 :          if (tr_bgc_C) then
     466              : ! algal C is not yet distinct from algal N
     467              : !           do mm = 1, n_algae
     468              : !              write(nu_diag,*) ' min/max algalC'
     469              : !              do k=1, nblyr+3
     470              : !                 call read_restart_field(nu_restart,trcrn(:,nt_bgc_C(mm)+k-1,:),ncat)
     471              : !              enddo
     472              : !           enddo  !mm
     473            6 :             do mm = 1, n_doc
     474            4 :                write(nu_diag,*) ' min/max DOC'
     475           46 :                do k=1, nblyr+3
     476           44 :                   call read_restart_field(nu_restart,trcrn(:,nt_bgc_DOC(mm)+k-1,:),ncat)
     477              :                enddo
     478              :             enddo  !mm
     479            4 :             do mm = 1, n_dic
     480            2 :                write(nu_diag,*) ' min/max DIC'
     481           24 :                do k=1, nblyr+3
     482           22 :                   call read_restart_field(nu_restart,trcrn(:,nt_bgc_DIC(mm)+k-1,:),ncat)
     483              :                enddo
     484              :             enddo  !mm
     485              :          endif  ! tr_bgc_C
     486            3 :          if (tr_bgc_Am) then
     487            2 :             write(nu_diag,*) ' min/max ammonium'
     488           22 :             do k=1, nblyr+3
     489           22 :                call read_restart_field(nu_restart,trcrn(:,nt_bgc_Am+k-1,:),ncat)
     490              :             enddo
     491              :          endif
     492            3 :          if (tr_bgc_Sil) then
     493            2 :             write(nu_diag,*) ' min/max silicate'
     494           22 :             do k=1, nblyr+3
     495           22 :                call read_restart_field(nu_restart,trcrn(:,nt_bgc_Sil+k-1,:),ncat)
     496              :             enddo
     497              :          endif
     498            3 :          if (tr_bgc_hum) then
     499            2 :             write(nu_diag,*) ' min/max humic material'
     500           22 :             do k=1, nblyr+3
     501           22 :                call read_restart_field(nu_restart,trcrn(:,nt_bgc_hum+k-1,:),ncat)
     502              :             enddo
     503              :          endif
     504            3 :          if (tr_bgc_DMS) then
     505            2 :             write (nu_diag,*) 'min/max pDMSP, dDMSP, DMS'
     506           22 :             do k=1, nblyr+3
     507           20 :                call read_restart_field(nu_restart,trcrn(:,nt_bgc_DMSPp+k-1,:),ncat)
     508           20 :                call read_restart_field(nu_restart,trcrn(:,nt_bgc_DMSPd+k-1,:),ncat)
     509           22 :                call read_restart_field(nu_restart,trcrn(:,nt_bgc_DMS+k-1,:),ncat)
     510              :             enddo
     511              :          endif
     512            3 :          if (tr_bgc_PON) then
     513            2 :             write(nu_diag,*) ' min/max PON'
     514           22 :             do k=1, nblyr+3
     515           22 :                call read_restart_field(nu_restart,trcrn(:,nt_bgc_PON+k-1,:),ncat)
     516              :             enddo
     517              :          endif
     518            3 :          if (tr_bgc_DON) then
     519            4 :             do mm = 1, n_don
     520            2 :                write(nu_diag,*) ' min/max DON'
     521           24 :                do k=1, nblyr+3
     522           22 :                   call read_restart_field(nu_restart,trcrn(:,nt_bgc_DON(mm)+k-1,:),ncat)
     523              :                enddo
     524              :             enddo  !mm
     525              :          endif
     526            3 :          if (tr_bgc_Fe) then
     527            4 :             do mm = 1, n_fed
     528            2 :                write(nu_diag,*) ' min/max dFe '
     529           24 :                do k=1, nblyr+3
     530           22 :                   call read_restart_field(nu_restart,trcrn(:,nt_bgc_Fed (mm)+k-1,:),ncat)
     531              :                enddo
     532              :             enddo  !mm
     533            4 :             do mm = 1, n_fep
     534            2 :                write(nu_diag,*) ' min/max pFe '
     535           24 :                do k=1, nblyr+3
     536           22 :                   call read_restart_field(nu_restart,trcrn(:,nt_bgc_Fep (mm)+k-1,:),ncat)
     537              :                enddo
     538              :             enddo  !mm
     539              :          endif
     540            3 :          if (tr_zaero) then
     541           15 :             do mm = 1, n_zaero
     542           12 :                write(nu_diag,*) ' min/max z aerosols'
     543          135 :                do k=1, nblyr+3
     544          132 :                   call read_restart_field(nu_restart,trcrn(:,nt_zaero(mm)+k-1,:),ncat)
     545              :                enddo
     546              :             enddo  !mm
     547              :          endif
     548            3 :          if (nbtrcr > 0) then
     549            3 :             write (nu_diag,*) 'min/max zbgc_frac'
     550           49 :             do mm = 1, nbtrcr
     551           49 :                call read_restart_field(nu_restart,trcrn(:,nt_zbgc_frac+mm-1,:),ncat)
     552              :             enddo
     553              :          endif
     554              : 
     555              :       !-----------------------------------------------------------------
     556              :       ! Ocean BGC
     557              :       !-----------------------------------------------------------------
     558              : 
     559            3 :          write(nu_diag,*) 'mixed layer ocean bgc restart'
     560            3 :          if (tr_bgc_N) then
     561            2 :             write (nu_diag,*) 'min/max algalN'
     562            8 :             do k = 1, n_algae
     563            8 :                call read_restart_field(nu_restart,algalN(:,k),1)
     564              :             enddo  ! k
     565              :          endif
     566            3 :          if (tr_bgc_C) then
     567            2 :             write (nu_diag,*) 'min/max DOC, DIC'
     568            6 :             do k = 1, n_doc
     569            6 :                call read_restart_field(nu_restart,doc(:,k),1)
     570              :             enddo  ! k
     571            4 :             do k = 1, n_dic
     572            4 :                call read_restart_field(nu_restart,dic(:,k),1)
     573              :             enddo  ! k
     574              :          endif  !tr_bgc_C
     575              : 
     576            3 :          write (nu_diag,*) 'min/max Nit, Am, Sil, hum, DMSP, DMS'
     577            3 :          if (tr_bgc_Nit) &
     578            2 :             call read_restart_field(nu_restart,nit,1)
     579            3 :          if (tr_bgc_Am) &
     580            2 :             call read_restart_field(nu_restart,amm ,1)
     581            3 :          if (tr_bgc_Sil) &
     582            2 :             call read_restart_field(nu_restart,sil,1)
     583            3 :          if (tr_bgc_hum) &
     584            2 :             call read_restart_field(nu_restart,hum,1)
     585            3 :          if (tr_bgc_DMS) then
     586            2 :             call read_restart_field(nu_restart,dmsp,1)
     587            2 :             call read_restart_field(nu_restart,dms,1)
     588              :          endif
     589            3 :          if (tr_bgc_DON) then
     590            2 :             write (nu_diag,*) 'min/max DON'
     591            4 :             do k = 1, n_don
     592            4 :                call read_restart_field(nu_restart,don(:,k),1)
     593              :             enddo  ! k
     594              :          endif
     595            3 :          if (tr_bgc_Fe ) then
     596            2 :             write (nu_diag,*) 'min/max dFe, pFe'
     597            4 :             do k = 1, n_fed
     598            4 :                call read_restart_field(nu_restart,fed(:,k),1)
     599              :             enddo  ! k
     600            4 :             do k = 1, n_fep
     601            4 :                call read_restart_field(nu_restart,fep(:,k),1)
     602              :             enddo  ! k
     603              :          endif
     604            3 :          if (tr_zaero) then
     605            3 :             write (nu_diag,*) 'min/max zaeros'
     606           15 :             do k = 1, n_zaero
     607           15 :                call read_restart_field(nu_restart,zaeros(:,k),1)
     608              :             enddo  ! k
     609              :          endif
     610              : 
     611              :       endif  ! skl_bgc or z_tracers
     612              : 
     613            3 :       end subroutine read_restart_bgc
     614              : 
     615              : !=======================================================================
     616              : 
     617              :       end module icedrv_restart_bgc
     618              : 
     619              : !=======================================================================
        

Generated by: LCOV version 2.0-1