LCOV - code coverage report
Current view: top level - src - mo_smi_global_variables.f90 (source / functions) Hit Total Coverage
Test: SMI coverage Lines: 20 21 95.2 %
Date: 2024-04-30 09:16:25 Functions: 1 3 33.3 %

          Line data    Source code
       1             : !> \file mo_smi_global_variables.f90
       2             : !> \brief   \copybrief mo_smi_global_variables
       3             : !> \details \copydetails mo_smi_global_variables
       4             : 
       5             : !> \brief Global variables for SMI
       6             : !> \copyright Copyright 2005-\today, the CHS Developers, Luis Samaniego, Sabine Attinger: All rights reserved.
       7             : !! SMI is released under the LGPLv3+ license \license_note
       8             : module mo_smi_global_variables
       9             :   !
      10             :   use mo_kind, only: i4, dp
      11             : 
      12             :   implicit none
      13             : 
      14             :   public
      15             : 
      16             :   !> \brief date definition for starting and end dates
      17             :   type period
      18             :     integer(i4) :: y_start, m_start, d_start
      19             :     integer(i4) :: y_end, m_end, d_end
      20             :     real(dp)    :: j_start, j_end
      21             :     integer(i4) :: n_years, n_months, n_days
      22             :     integer(i4) :: n_leap_days
      23             :     character(256) :: unit
      24             :     integer(i4) , allocatable :: time_points(:)
      25             :   end type period
      26             : 
      27             : contains
      28             : 
      29             :   !> \brief initialize object date and calculate derived variables from:
      30             :   !!        y_start, m_start, d_start, y_end, m_end, d_end
      31          20 :   type (period) function period_init(y_start, m_start, d_start, y_end, m_end, d_end, time_points, unit, nCalendarStepYears)
      32             : 
      33             :     use mo_julian, only: date2dec, dec2date
      34             : 
      35             :     implicit none
      36             : 
      37             :     integer(i4), intent(in) :: y_start, m_start, d_start
      38             :     integer(i4), intent(in) :: y_end, m_end, d_end
      39             :     integer(i4), intent(in) :: time_points(:)
      40             :     character(len=*), intent(in) :: unit
      41             :     integer(i4), intent(in) :: nCalendarStepYears
      42             :     integer(i4)             :: ii, day, month
      43             : 
      44          10 :     period_init%y_start = y_start
      45          10 :     period_init%m_start = m_start
      46          10 :     period_init%d_start = d_start
      47          10 :     period_init%y_end = y_end
      48          10 :     period_init%m_end = m_end
      49          10 :     period_init%d_end = d_end
      50       36813 :     period_init%time_points = time_points
      51          10 :     period_init%unit = trim(unit)
      52             : 
      53             : 
      54          10 :     period_init%j_start = date2dec(period_init%d_start, period_init%m_start, period_init%y_start)
      55          10 :     period_init%j_end = date2dec(period_init%d_end, period_init%m_end, period_init%y_end)
      56             : 
      57          10 :     period_init%n_years = period_init%y_end - period_init%y_start + 1_i4
      58          10 :     period_init%n_days = period_init%j_end - period_init%j_start + 1_i4
      59             :     period_init%n_months = (12_i4 - period_init%m_start + 1_i4) &
      60             :         + (period_init%y_end - period_init%y_start - 1_i4) * 12_i4 &
      61          10 :         + period_init%m_end
      62             : 
      63             :     ! count number of leap days
      64          10 :     period_init%n_leap_days = 0
      65       36813 :     do ii = 1, size(period_init%time_points)
      66       36803 :       call dec2date(real(period_init%j_start + period_init%time_points(ii) - 1, dp), dd=day, mm=month)
      67       36803 :       if ((month .eq. 2) .and. (day .eq. 29) .and. (nCalendarStepYears .ne. 12)) &
      68          33 :            period_init%n_leap_days = period_init%n_leap_days + 1_i4
      69             :     end do
      70             : 
      71          10 :   end function period_init
      72             : 
      73           0 : end module mo_smi_global_variables

Generated by: LCOV version 1.16