LCOV - code coverage report
Current view: top level - configuration/driver - icedrv_forcing_bgc.F90 (source / functions) Hit Total Coverage
Test: 200704-015006:b1e41d9f12:3:base,travis,quick Lines: 25 57 43.86 %
Date: 2020-07-03 20:11:40 Functions: 4 4 100.00 %

          Line data    Source code
       1             : !=======================================================================
       2             : !
       3             : ! Reads and interpolates forcing data for biogeochemistry
       4             : !
       5             : ! authors: Nicole Jeffery, LANL
       6             : !          Elizabeth C. Hunke, LANL
       7             : !
       8             :       module icedrv_forcing_bgc
       9             : 
      10             :       use icedrv_kinds
      11             :       use icedrv_domain_size, only: nx
      12             :       use icedrv_calendar, only: secday
      13             :       use icedrv_constants, only: nu_forcing, nu_diag
      14             :       use icepack_intfc, only: icepack_max_algae, icepack_max_doc
      15             :       use icepack_intfc, only: icepack_max_dic
      16             :       use icepack_intfc, only: icepack_query_tracer_flags
      17             :       use icepack_intfc, only: icepack_warnings_flush, icepack_warnings_aborted
      18             :       use icedrv_system, only: icedrv_system_abort
      19             : 
      20             :       implicit none
      21             :       private
      22             :       public :: get_forcing_bgc, faero_default, fiso_default, init_forcing_bgc 
      23             : 
      24             :       real (kind=dbl_kind), dimension(365) :: & ! hardwired for now
      25             :          sil_data, nit_data
      26             : 
      27             : !=======================================================================
      28             : 
      29             :       contains
      30             : 
      31             : !=======================================================================
      32             : 
      33           5 :       subroutine init_forcing_bgc
      34             : 
      35             :         use icedrv_forcing, only: data_dir, bgc_data_type, bgc_data_file
      36             : 
      37             :         integer (kind=int_kind) :: &
      38             :            ntime, &
      39             :            i
      40             : 
      41             :         real (kind=dbl_kind), dimension(365) :: &
      42        1098 :            sil, &
      43        1098 :            nit
      44             : 
      45             :         character (char_len_long) filename
      46             : 
      47             :         character(len=*), parameter :: subname='(init_forcing_bgc)'
      48             :         
      49           5 :         if (trim(bgc_data_type) == 'ISPOL' .or. &
      50             :             trim(bgc_data_type) == 'NICE') then
      51             :           
      52           0 :            if (trim(bgc_data_type) == 'ISPOL') &
      53           0 :            filename = trim(data_dir)//'/ISPOL_2004/'//trim(bgc_data_file)
      54           0 :            if (trim(bgc_data_type) == 'NICE') &
      55           0 :            filename = trim(data_dir)//'/NICE_2015/'//trim(bgc_data_file)
      56             : 
      57           0 :           write (nu_diag,*) 'Reading ',filename
      58             : 
      59           0 :           ntime = 365 ! daily
      60             : 
      61           0 :           open (nu_forcing, file=filename, form='formatted')
      62           0 :           read (nu_forcing,*) sil
      63           0 :           read (nu_forcing,*) nit
      64           0 :           close(nu_forcing)
      65             : 
      66           0 :           do i = 1, ntime
      67           0 :              sil_data(i) = sil(i)
      68           0 :              nit_data(i) = nit(i)
      69             :           end do
      70             : 
      71             :         end if
      72             : 
      73           5 :       end subroutine init_forcing_bgc
      74             :         
      75             : !=======================================================================
      76             : !
      77             : ! Read and interpolate annual climatologies of silicate and nitrate.
      78             : ! Restore model quantities to data if desired.
      79             : !
      80             : ! author: Elizabeth C. Hunke, LANL
      81             : 
      82       22217 :       subroutine get_forcing_bgc
      83             : 
      84             :       use icedrv_arrays_column, only: ocean_bio_all
      85             :       use icedrv_calendar, only:  yday
      86             :       use icedrv_flux, only: sil, nit
      87             :       use icedrv_forcing, only: interp_coeff, bgc_data_type
      88             : 
      89             :       integer (kind=int_kind) :: &
      90             :          i,            & ! horizontal indices
      91             :          ixm,ixx,      & ! record numbers for neighboring months
      92             :          maxrec      , & ! maximum record number
      93             :          recslot     , & ! spline slot for current record
      94             :          recnum      , & ! record number
      95             :          dataloc     , & ! = 1 for data located in middle of time interval
      96             :                          ! = 2 for date located at end of time interval
      97             :          ks              ! bgc tracer index (bio_index_o)
      98             : 
      99             :       real (kind=dbl_kind) :: &
     100        6843 :           c1intp, c2intp
     101             : 
     102             :       logical (kind=log_kind) :: tr_bgc_Sil, tr_bgc_Nit
     103             : 
     104             :       character(len=*), parameter :: subname='(get_forcing_bgc)'
     105             : 
     106       22217 :       call icepack_query_tracer_flags(tr_bgc_Sil_out=tr_bgc_Sil, tr_bgc_Nit_out=tr_bgc_Nit)
     107       22217 :       call icepack_warnings_flush(nu_diag)
     108       22217 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     109           0 :           file=__FILE__,line= __LINE__)
     110             : 
     111       22217 :       if (trim(bgc_data_type) == 'ISPOL' .or. &
     112             :           trim(bgc_data_type) == 'NICE') then
     113             : 
     114           0 :         dataloc = 2                          ! data located at end of interval
     115           0 :         maxrec = 365                         ! 
     116             :         
     117             :         ! current record number
     118           0 :         recnum = int(yday)   
     119             :         
     120             :         ! Compute record numbers for surrounding data (2 on each side)
     121           0 :         ixm = mod(recnum+maxrec-2,maxrec) + 1
     122           0 :         ixx = mod(recnum-1,       maxrec) + 1
     123             :         
     124           0 :         recslot = 2
     125           0 :         call interp_coeff (recnum, recslot, secday, dataloc, c1intp, c2intp)
     126             :                  
     127           0 :         if (tr_bgc_Sil) then
     128           0 :            sil(:) =  c1intp * sil_data(ixm) + c2intp * sil_data(ixx)
     129             :         endif
     130             : 
     131           0 :         if (tr_bgc_Nit) then
     132           0 :            nit(:) =  c1intp * nit_data(ixm) + c2intp * nit_data(ixx)
     133             :         endif
     134             : 
     135           0 :         do i = 1, nx
     136           0 :            ks = 2*icepack_max_algae + icepack_max_doc + 3 + icepack_max_dic
     137           0 :            ocean_bio_all(i,ks) = sil(i)                       ! Sil
     138           0 :            ks =   icepack_max_algae + 1
     139           0 :            ocean_bio_all(i,ks) = nit(i)                       ! Nit
     140           0 :            ks = 2*icepack_max_algae + icepack_max_doc + 7 + icepack_max_dic
     141           0 :            ocean_bio_all(i,ks) = nit(i)                       ! PON
     142             :         enddo
     143             : 
     144             :       endif
     145             : 
     146       22217 :       end subroutine get_forcing_bgc
     147             : 
     148             : !=======================================================================
     149             : 
     150             : ! constant values for atmospheric aerosols
     151             : !
     152             : ! authors: Elizabeth Hunke, LANL
     153             : 
     154       35520 :       subroutine faero_default
     155             :         
     156             :       use icedrv_flux, only: faero_atm
     157             :       character(len=*), parameter :: subname='(faero_default)'
     158             :         
     159      177600 :       faero_atm(:,1) = 1.e-12_dbl_kind ! kg/m^2 s
     160      177600 :       faero_atm(:,2) = 1.e-13_dbl_kind
     161      177600 :       faero_atm(:,3) = 1.e-14_dbl_kind
     162      177600 :       faero_atm(:,4) = 1.e-14_dbl_kind
     163      177600 :       faero_atm(:,5) = 1.e-14_dbl_kind
     164      177600 :       faero_atm(:,6) = 1.e-14_dbl_kind
     165             :         
     166       35520 :       end subroutine faero_default
     167             :       
     168             : !=======================================================================
     169             : 
     170             : ! constant values for atmospheric water isotopes
     171             : !
     172             : ! authors: Elizabeth Hunke, LANL
     173             : 
     174       15372 :       subroutine fiso_default
     175             : 
     176             :       use icedrv_flux, only: fiso_atm
     177             :       character(len=*), parameter :: subname='(fiso_default)'
     178             : 
     179       76860 :       fiso_atm(:,1) = 1.e-12_dbl_kind ! kg/m^2 s
     180       76860 :       fiso_atm(:,2) = 1.e-13_dbl_kind
     181       76860 :       fiso_atm(:,3) = 1.e-14_dbl_kind
     182             : 
     183       15372 :       end subroutine fiso_default
     184             : 
     185             : !=======================================================================
     186             : 
     187             :       end module icedrv_forcing_bgc
     188             : 
     189             : !=======================================================================

Generated by: LCOV version 1.14-6-g40580cd