LCOV - code coverage report
Current view: top level - common - mo_common_types.F90 (source / functions) Hit Total Coverage
Test: mHM coverage Lines: 0 1 0.0 %
Date: 2024-04-15 17:48:09 Functions: 0 7 0.0 %

          Line data    Source code
       1             : !> \file mo_common_types.F90
       2             : !> \brief \copybrief mo_common_types
       3             : !> \details \copydetails mo_common_types
       4             : 
       5             : !> \brief Provides common types needed by mHM, mRM and/or mpr.
       6             : !> \changelog
       7             : !! - Stephan Thober  Nov 2016
       8             : !!   - moved processdescription from mo_global_variables to here
       9             : !! - Robert Schweppe Dec 2017
      10             : !!   - merged more duplicated variables from mhm and mrm global variables
      11             : !! - Robert Schweppe Jun 2018
      12             : !!   - refactoring and reformatting
      13             : !! - Sebastian Müller Mar 2023
      14             : !!   - moving types to a separate module
      15             : !> \authors Stephan Thober
      16             : !> \date Sep 2015
      17             : !> \authors Sebastian Müller
      18             : !> \date Mar 2023
      19             : !> \copyright Copyright 2005-\today, the mHM Developers, Luis Samaniego, Sabine Attinger: All rights reserved.
      20             : !! mHM is released under the LGPLv3+ license \license_note
      21             : !> \ingroup f_common
      22             : module mo_common_types
      23             : 
      24             :   use mo_kind, only : i4, dp
      25             : #ifdef MPI
      26             :   USE mpi_f08
      27             : #endif
      28             :   implicit none
      29             : 
      30             :   ! -------------------------------------------------------------------
      31             :   ! PERIOD description
      32             :   ! -------------------------------------------------------------------
      33             :   !> \class   period
      34             :   !> \brief   period description
      35             :   type, public :: period
      36             :     integer(i4) :: dStart      !< first day
      37             :     integer(i4) :: mStart      !< first month
      38             :     integer(i4) :: yStart      !< first year
      39             :     integer(i4) :: dEnd        !< last  day
      40             :     integer(i4) :: mEnd        !< last  month
      41             :     integer(i4) :: yEnd        !< last  year
      42             :     integer(i4) :: julStart    !< first julian day
      43             :     integer(i4) :: julEnd      !< last  julian day
      44             :     integer(i4) :: nObs        !< total number of observations
      45             :   end type period
      46             : 
      47             :   ! -------------------------------------------------------------------
      48             :   ! GRID description
      49             :   ! -------------------------------------------------------------------
      50             :   !> \class   grid
      51             :   !> \brief   grid description
      52             :   type, public :: grid
      53             :     ! general domain information
      54             :     integer(i4) :: ncols     !< Number of columns
      55             :     integer(i4) :: nrows     !< Number of rows
      56             :     integer(i4) :: nCells    !< Number of cells in mask
      57             :     real(dp) :: xllcorner    !< x coordinate of the lowerleft corner
      58             :     real(dp) :: yllcorner    !< y coordinate of the lowerleft corner
      59             :     real(dp) :: cellsize     !< Cellsize x = cellsize y
      60             :     real(dp) :: nodata_value !< Code to define the mask
      61             :     real(dp), dimension(:, :), allocatable :: x  !< 2d longitude array (unmasked version is needed for output anyway)
      62             :     real(dp), dimension(:, :), allocatable :: y  !< 2d latitude  array (unmasked version is needed for output anyway)
      63             :     logical, dimension(:, :), allocatable :: mask  !< the mask for valid cells in the original grid (nrows*ncols)
      64             :     ! for referencing values in the nValidCells vector
      65             :     integer(i4) :: iStart          !< Starting cell index of a given domain
      66             :     integer(i4) :: iEnd            !< Ending cell index of a given domain
      67             :     ! dimension(nCells, (x,y) )
      68             :     integer(i4), dimension(:, :), allocatable :: CellCoor  !< this is only used for mRM
      69             :     real(dp), dimension(:), allocatable :: CellArea  !< area of the cell in sq m
      70             :     integer(i4), dimension(:), allocatable :: Id !< id
      71             : 
      72             :   end type grid
      73             : 
      74             :   !> \class   gridremapper
      75             :   !> \brief   grid remapper
      76             :   type, public :: gridremapper
      77             :     type(Grid), pointer :: high_res_grid !< high resolution grid
      78             :     type(Grid), pointer :: low_res_grid !< low resolution grid
      79             : 
      80             :     ! dimension nCells
      81             :     integer(i4), dimension(:), allocatable :: lower_bound  !< 1d index of lower side subgrid
      82             :     integer(i4), dimension(:), allocatable :: upper_bound  !< 1d index of upper side subgrid
      83             :     integer(i4), dimension(:), allocatable :: left_bound   !< 1d index of left side subgrid
      84             :     integer(i4), dimension(:), allocatable :: right_bound  !< 1d index of right side subgrid
      85             :     integer(i4), dimension(:), allocatable :: n_subcells   !< 1d numberof valid subgrid cells
      86             :     integer(i4), dimension(:, :), allocatable :: lowres_id_on_highres   !< 2d index array of lowres id
      87             : 
      88             :   end type gridremapper
      89             : 
      90             :   ! -------------------------------------------------------------------
      91             :   ! DOMAIN general description
      92             :   ! -------------------------------------------------------------------
      93             :   !> \class   domain_meta
      94             :   !> \brief   DOMAIN general description
      95             :   type, public :: domain_meta
      96             :     integer(i4)                            :: nDomains !< number of domains
      97             :     integer(i4)                            :: overallNumberOfDomains  !< Number of domains for multi-domain optimization
      98             :     integer(i4), dimension(:), allocatable :: indices !< indices
      99             :     integer(i4), dimension(:), allocatable :: L0DataFrom !< index of associated level-0 domain
     100             :     ! optidata saves for each domain which optional data is assigned to it
     101             :     ! (0) default: the program decides. If you are confused, choose 0
     102             :     ! (1) runoff
     103             :     ! (2) sm
     104             :     ! (3) tws
     105             :     ! (4) neutons
     106             :     ! (5) et
     107             :     ! (6) et & tws
     108             :     integer(i4), dimension(:), allocatable :: optidata !< optidata flag (0-6)
     109             :     logical,     dimension(:), allocatable :: doRouting !< flag to indicate if routing is done
     110             : #ifdef MPI
     111             :     logical                                :: isMasterInComLocal  !< true if the process is master proc in comLocal
     112             :     !> the communicater the domains are using to send messages to each other here are all processes wich have rank 0 in comLocal
     113             :     type(MPI_Comm)                         :: comMaster
     114             :     type(MPI_Comm)                         :: comLocal  !< the communicater the domain internal communication takes place
     115             : #endif
     116             :   end type domain_meta
     117             : 
     118           0 : end module mo_common_types

Generated by: LCOV version 1.16