Ignore:
Timestamp:
Jul 6, 2020 3:56:08 PM (4 years ago)
Author:
raasch
Message:

files re-formatted to follow the PALM coding standard

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/shared_memory_io_mod.f90

    r4536 r4591  
    11!> @file shared_memory_io_mod.f90
    2 !------------------------------------------------------------------------------!
    3 ! This file is part of PALM.
    4 !
    5 ! PALM is free software: you can redistribute it and/or modify it under the
    6 ! terms of the GNU General Public License as published by the Free Software
    7 ! Foundation, either version 3 of the License, or (at your option) any later
    8 ! version.
    9 !
    10 ! PALM is distributed in the hope that it will be useful, but WITHOUT ANY
    11 ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
    12 ! A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
    13 !
    14 ! You should have received a copy of the GNU General Public License along with
    15 ! PALM. If not, see <http://www.gnu.org/licenses/>.
     2!--------------------------------------------------------------------------------------------------!
     3! This file is part of the PALM model system.
     4!
     5! PALM is free software: you can redistribute it and/or modify it under the terms of the GNU General
     6! Public License as published by the Free Software Foundation, either version 3 of the License, or
     7! (at your option) any later version.
     8!
     9! PALM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
     10! implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
     11! Public License for more details.
     12!
     13! You should have received a copy of the GNU General Public License along with PALM. If not, see
     14! <http://www.gnu.org/licenses/>.
    1615!
    1716! Copyright 1997-2020 Leibniz Universitaet Hannover
    18 !------------------------------------------------------------------------------!
     17!--------------------------------------------------------------------------------------------------!
     18!
    1919!
    2020! Current revisions:
    2121! -----------------
    22 ! 
    23 ! 
     22!
     23!
    2424! Former revisions:
    2525! $Id$
    2626!
     27! File re-formatted to follow the PALM coding standard
     28!
     29!
     30!
    2731! Initial version (Klaus Ketelsen)
    2832!
    29 ! 
    30 !
    31 ! Description:
    32 ! ------------
    33 !> handle MPI-IO or NetCDF-IO shared memory arrays.
    34 !> This module performs the organization of new communicators, adapted PE-grids
    35 !> and allocation of shared memory arrays. The IO itself is not done here.
    36 !------------------------------------------------------------------------------!
     33!
     34!
     35! Description:
     36! ------------
     37!> Handle MPI-IO or NetCDF-IO shared memory arrays.
     38!> This module performs the organization of new communicators, adapted PE-grids and allocation of
     39!> shared memory arrays. The IO itself is not done here.
     40!--------------------------------------------------------------------------------------------------!
    3741 MODULE shared_memory_io_mod
    3842
     
    4852
    4953    USE control_parameters,                                                                        &
    50         ONLY:  maximum_grid_level, mg_switch_to_pe0_level, message_string
     54        ONLY: maximum_grid_level,                                                                  &
     55              message_string,                                                                      &
     56              mg_switch_to_pe0_level
     57
    5158
    5259    USE indices,                                                                                   &
    53         ONLY: nbgp, nnx, nny, nnz, nx, nxl, nxlg, nxr, nxrg, ny, nyn, nyng, nys, nysg, nzb, nzt
     60        ONLY: nbgp,                                                                                &
     61              nnx,                                                                                 &
     62              nny,                                                                                 &
     63              nnz,                                                                                 &
     64              nx,                                                                                  &
     65              nxl,                                                                                 &
     66              nxlg,                                                                                &
     67              nxr,                                                                                 &
     68              nxrg,                                                                                &
     69              ny,                                                                                  &
     70              nyn,                                                                                 &
     71              nyng,                                                                                &
     72              nys,                                                                                 &
     73              nysg,                                                                                &
     74              nzb,                                                                                 &
     75              nzt
    5476
    5577    USE kinds,                                                                                     &
    56         ONLY: wp, iwp
     78        ONLY: iwp,                                                                                 &
     79              wp
     80
    5781
    5882    USE transpose_indices,                                                                         &
    59         ONLY:  nys_x, nyn_x, nys_z, nyn_z, nxl_z, nxr_z
     83        ONLY: nxl_z,                                                                               &
     84              nxr_z,                                                                               &
     85              nyn_x,                                                                               &
     86              nyn_z,                                                                               &
     87              nys_x,                                                                               &
     88              nys_z
     89
     90
    6091
    6192    USE pegrid,                                                                                    &
    62         ONLY: comm1dx, comm1dy, comm2d, ierr, myid, myidx, myidy, npex, npey, numprocs, pdims,     &
    63               pleft, pnorth, pright, psouth, sendrecvcount_xy
     93        ONLY: comm1dx,                                                                             &
     94              comm1dy,                                                                             &
     95              comm2d,                                                                              &
     96              ierr,                                                                                &
     97              myid,                                                                                &
     98              myidx,                                                                               &
     99              myidy,                                                                               &
     100              npex,                                                                                &
     101              npey,                                                                                &
     102              numprocs,                                                                            &
     103              pdims,                                                                               &
     104              pleft,                                                                               &
     105              pnorth,                                                                              &
     106              pright,                                                                              &
     107              psouth,                                                                              &
     108              sendrecvcount_xy
     109
    64110#if defined( __parallel )
    65111    USE pegrid,                                                                                    &
    66         ONLY: pcoord, reorder
     112        ONLY: pcoord,                                                                              &
     113              reorder
    67114#endif
    68115
     
    75122!
    76123!-- Type to store grid information
    77     TYPE, PUBLIC ::  local_boundaries
    78 
    79        INTEGER(iwp) ::  nxl
    80        INTEGER(iwp) ::  nxr
    81        INTEGER(iwp) ::  nys
    82        INTEGER(iwp) ::  nyn
    83        INTEGER(iwp) ::  nnx
    84        INTEGER(iwp) ::  nny
    85        INTEGER(iwp) ::  nx
    86        INTEGER(iwp) ::  ny
     124    TYPE, PUBLIC ::  local_boundaries  !<
     125
     126       INTEGER(iwp) ::  nnx  !<
     127       INTEGER(iwp) ::  nny  !<
     128       INTEGER(iwp) ::  nx   !<
     129       INTEGER(iwp) ::  nxl  !<
     130       INTEGER(iwp) ::  nxr  !<
     131       INTEGER(iwp) ::  ny   !<
     132       INTEGER(iwp) ::  nyn  !<
     133       INTEGER(iwp) ::  nys  !<
     134
     135
     136
    87137
    88138    END TYPE local_boundaries
     
    91141!-- Class definition for shared memory instances.
    92142!-- For every use of shared memory IO, one instance of this class is created.
    93     TYPE, PUBLIC ::  sm_class
    94 
    95        INTEGER(iwp)         :: nr_io_pe_per_node = 2   !< typical configuration, 2 sockets per node
    96        LOGICAL              :: no_shared_Memory_in_this_run
     143    TYPE, PUBLIC ::  sm_class  !<
     144
     145       INTEGER(iwp) ::  nr_io_pe_per_node = 2         !< typical configuration, 2 sockets per node
     146       LOGICAL      ::  no_shared_Memory_in_this_run  !<
    97147!
    98148!--    Variables for the shared memory communicator
    99        INTEGER(iwp), PUBLIC ::  comm_shared    !< Communicator for processes with shared array
    100        INTEGER(iwp), PUBLIC ::  sh_npes
    101        INTEGER(iwp), PUBLIC ::  sh_rank
     149       INTEGER(iwp), PUBLIC ::  comm_shared   !< Communicator for processes with shared array
     150       INTEGER(iwp), PUBLIC ::  sh_npes       !<
     151       INTEGER(iwp), PUBLIC ::  sh_rank       !<
    102152
    103153       LOGICAL, PUBLIC ::  iam_io_pe = .TRUE.  !< This PE is an IO-PE
    104154!
    105155!--    Variables for the I/O virtual grid
    106        INTEGER(iwp), PUBLIC ::  comm_io        !< Communicator for all IO processes
    107        INTEGER(iwp), PUBLIC ::  io_npes
    108        INTEGER(iwp), PUBLIC ::  io_rank
     156       INTEGER(iwp), PUBLIC ::  comm_io  !< Communicator for all IO processes
     157       INTEGER(iwp), PUBLIC ::  io_npes  !<
     158       INTEGER(iwp), PUBLIC ::  io_rank  !<
    109159
    110160       TYPE( local_boundaries ), PUBLIC ::  io_grid
     
    112162!
    113163!--    Variables for the node local communicator
    114        INTEGER(iwp)         ::  comm_node      !< Communicator for all processes of current node
    115        INTEGER(iwp)         ::  io_pe_global_rank
    116        INTEGER(iwp)         ::  n_npes
    117        INTEGER(iwp)         ::  n_rank
    118 
    119        CONTAINS
    120 
    121           PRIVATE
    122 
    123           PROCEDURE, PASS(this), PUBLIC ::  is_sm_active
    124           PROCEDURE, PASS(this), PUBLIC ::  sm_adjust_outer_boundary
    125           PROCEDURE, PASS(this), PUBLIC ::  sm_free_shared
    126           PROCEDURE, PASS(this), PUBLIC ::  sm_init_comm
    127           PROCEDURE, PASS(this), PUBLIC ::  sm_node_barrier
    128 #if defined( __parallel )
    129           PROCEDURE, PASS(this), PUBLIC ::  sm_allocate_shared_1d
    130           PROCEDURE, PASS(this), PUBLIC ::  sm_allocate_shared_2d
    131           PROCEDURE, PASS(this), PUBLIC ::  sm_allocate_shared_2di
    132           PROCEDURE, PASS(this), PUBLIC ::  sm_allocate_shared_3d
     164       INTEGER(iwp) ::  comm_node          !< Communicator for all processes of current node
     165       INTEGER(iwp) ::  io_pe_global_rank  !<
     166       INTEGER(iwp) ::  n_npes             !<
     167       INTEGER(iwp) ::  n_rank             !<
     168
     169 CONTAINS
     170
     171       PRIVATE
     172
     173          PROCEDURE, PASS(this), PUBLIC ::  is_sm_active              !<
     174          PROCEDURE, PASS(this), PUBLIC ::  sm_adjust_outer_boundary  !<
     175          PROCEDURE, PASS(this), PUBLIC ::  sm_free_shared            !<
     176          PROCEDURE, PASS(this), PUBLIC ::  sm_init_comm              !<
     177          PROCEDURE, PASS(this), PUBLIC ::  sm_node_barrier           !<
     178#if defined( __parallel )
     179          PROCEDURE, PASS(this), PUBLIC ::  sm_allocate_shared_1d   !<
     180          PROCEDURE, PASS(this), PUBLIC ::  sm_allocate_shared_2d   !<
     181          PROCEDURE, PASS(this), PUBLIC ::  sm_allocate_shared_2di  !<
     182          PROCEDURE, PASS(this), PUBLIC ::  sm_allocate_shared_3d   !<
    133183
    134184          GENERIC, PUBLIC ::  sm_allocate_shared =>  sm_allocate_shared_1d, sm_allocate_shared_2d, &
    135                                                      sm_allocate_shared_2di, sm_allocate_shared_3d
     185                                                  sm_allocate_shared_2di, sm_allocate_shared_3d  !<
    136186#endif
    137187    END TYPE sm_class
    138188
    139189
    140 CONTAINS
     190 CONTAINS
    141191
    142192
     
    154204
    155205#if defined( __parallel )
    156     INTEGER             :: color
    157     INTEGER             :: max_n_npes  !< Maximum number of PEs/node
     206    INTEGER ::  color       !<
     207    INTEGER :: max_n_npes  !< Maximum number of PEs/node
    158208#endif
    159209
     
    244294    IMPLICIT NONE
    245295
    246     INTEGER(iwp), INTENT(OUT) :: color
    247 
    248     INTEGER(iwp) ::  group_start
    249     INTEGER(iwp) ::  n
    250     INTEGER(iwp) ::  my_color
    251     INTEGER(iwp) ::  pe
    252     INTEGER(iwp) ::  sh_group_size
    253 
    254     INTEGER(iwp), DIMENSION(4,0:this%n_npes-1) ::  local_dim_s
    255     INTEGER(iwp), DIMENSION(4,0:this%n_npes-1) ::  local_dim_r
    256 
    257     TYPE(local_boundaries), DIMENSION(32) ::  node_grid
    258 
    259 !
    260 !-- Nn shared memory I/O on one node jobs
     296    INTEGER(iwp), INTENT(OUT) ::  color  !<
     297
     298    INTEGER(iwp) ::  group_start    !<
     299    INTEGER(iwp) ::  my_color       !<
     300    INTEGER(iwp) ::  n              !<
     301    INTEGER(iwp) ::  pe             !<
     302    INTEGER(iwp) ::  sh_group_size  !<
     303
     304    INTEGER(iwp), DIMENSION(4,0:this%n_npes-1) ::  local_dim_s   !<
     305    INTEGER(iwp), DIMENSION(4,0:this%n_npes-1) ::  local_dim_r   !<
     306
     307    TYPE(local_boundaries), DIMENSION(32) ::  node_grid  !<
     308
     309!
     310!-- No shared memory I/O on one node jobs
    261311    IF ( numprocs < this%n_npes )  THEN
    262312       this%no_shared_memory_in_this_run = .TRUE.
     
    337387!> Function to return if shared Memory IO is active.
    338388!--------------------------------------------------------------------------------------------------!
    339  FUNCTION is_sm_active( this) RESULT( ac )
    340 
    341     IMPLICIT NONE
    342 
    343     CLASS(sm_class), INTENT(inout) ::  this
    344 
    345     LOGICAL ::  ac
     389 FUNCTION is_sm_active( this ) RESULT( ac )
     390
     391    IMPLICIT NONE
     392
     393    CLASS(sm_class), INTENT(inout) ::  this  !<
     394
     395    LOGICAL ::  ac  !<
    346396
    347397    ac = .NOT. this%no_shared_memory_in_this_run
     
    360410    IMPLICIT NONE
    361411
    362     CLASS(sm_class), INTENT(inout)  ::  this
    363 
    364     INTEGER(iwp)                    ::  disp_unit
    365     INTEGER(iwp), INTENT(IN)        ::  d1
    366     INTEGER(iwp), INTENT(IN)        ::  d2
    367     INTEGER(iwp), SAVE              ::  pe_from = 0
    368     INTEGER(KIND=MPI_ADDRESS_KIND)  ::  rem_size
    369     INTEGER(iwp), INTENT(OUT)       ::  win
    370     INTEGER(KIND=MPI_ADDRESS_KIND)  ::  wsize
    371 
    372     INTEGER, DIMENSION(1)           ::  buf_shape
    373 
    374     REAL(wp), DIMENSION(:), POINTER ::  buf
    375     REAL(wp), DIMENSION(:), POINTER ::  p1
    376 
    377     TYPE(C_PTR), SAVE               ::  base_ptr
    378     TYPE(C_PTR), SAVE               ::  rem_ptr
     412    CLASS(sm_class), INTENT(inout) ::  this         !<
     413                                                    !<
     414    INTEGER(iwp)                   ::  disp_unit    !<
     415    INTEGER(iwp), INTENT(IN)       ::  d1           !<
     416    INTEGER(iwp), INTENT(IN)       ::  d2           !<
     417    INTEGER(iwp), SAVE             ::  pe_from = 0  !<
     418    INTEGER(KIND=MPI_ADDRESS_KIND) ::  rem_size     !<
     419    INTEGER(iwp), INTENT(OUT)      ::  win          !<
     420    INTEGER(KIND=MPI_ADDRESS_KIND) ::  wsize        !<
     421
     422    INTEGER, DIMENSION(1)           ::  buf_shape   !<
     423
     424    REAL(wp), DIMENSION(:), POINTER ::  buf         !<
     425    REAL(wp), DIMENSION(:), POINTER ::  p1          !<
     426
     427    TYPE(C_PTR), SAVE               ::  base_ptr    !<
     428    TYPE(C_PTR), SAVE               ::  rem_ptr     !<
    379429
    380430
     
    415465    IMPLICIT NONE
    416466
    417     CLASS(sm_class), INTENT(INOUT)    ::  this
    418 
    419     INTEGER(iwp)                      ::  disp_unit
    420     INTEGER(iwp), INTENT(IN)          ::  n_nxlg
    421     INTEGER(iwp), INTENT(IN)          ::  n_nxrg
    422     INTEGER(iwp), INTENT(IN)          ::  n_nyng
    423     INTEGER(iwp), INTENT(IN)          ::  n_nysg
    424     INTEGER(iwp), SAVE                ::  pe_from = 0
    425     INTEGER(KIND=MPI_ADDRESS_KIND)    ::  rem_size
    426     INTEGER(iwp), INTENT(OUT)         ::  win
    427     INTEGER(KIND=MPI_ADDRESS_KIND)    ::  wsize
    428 
    429     INTEGER(iwp), DIMENSION(2)        ::  buf_shape
    430 
    431     REAL(wp), DIMENSION(:,:), POINTER ::  buf
    432     REAL(wp), DIMENSION(:,:), POINTER ::  p2
    433 
    434     TYPE(C_PTR),SAVE                  ::  base_ptr
    435     TYPE(C_PTR),SAVE                  ::  rem_ptr
     467    CLASS(sm_class), INTENT(INOUT)    ::  this         !<
     468
     469    INTEGER(iwp)                      ::  disp_unit    !<
     470    INTEGER(iwp), INTENT(IN)          ::  n_nxlg       !<
     471    INTEGER(iwp), INTENT(IN)          ::  n_nxrg       !<
     472    INTEGER(iwp), INTENT(IN)          ::  n_nyng       !<
     473    INTEGER(iwp), INTENT(IN)          ::  n_nysg       !<
     474    INTEGER(iwp), SAVE                ::  pe_from = 0  !<
     475    INTEGER(KIND=MPI_ADDRESS_KIND)    ::  rem_size     !<
     476    INTEGER(iwp), INTENT(OUT)         ::  win          !<
     477    INTEGER(KIND=MPI_ADDRESS_KIND)    ::  wsize        !<
     478
     479    INTEGER(iwp), DIMENSION(2)        ::  buf_shape    !<
     480
     481    REAL(wp), DIMENSION(:,:), POINTER ::  buf          !<
     482    REAL(wp), DIMENSION(:,:), POINTER ::  p2           !<
     483
     484    TYPE(C_PTR),SAVE                  ::  base_ptr     !<
     485    TYPE(C_PTR),SAVE                  ::  rem_ptr      !<
    436486
    437487
     
    474524    IMPLICIT NONE
    475525
    476     CLASS(sm_class), INTENT(inout)      :: this
    477 
    478     INTEGER(iwp)                          ::  disp_unit
    479     INTEGER(iwp), INTENT(IN)              ::  n_nxlg
    480     INTEGER(iwp), INTENT(IN)              ::  n_nxrg
    481     INTEGER(iwp), INTENT(IN)              ::  n_nyng
    482     INTEGER(iwp), INTENT(IN)              ::  n_nysg
    483     INTEGER(iwp), SAVE                    ::  pe_from = 0
    484     INTEGER(kind=MPI_ADDRESS_KIND)        ::  rem_size
    485     INTEGER(iwp), INTENT(OUT)             ::  win
    486     INTEGER(kind=MPI_ADDRESS_KIND)        ::  wsize
    487 
    488     INTEGER(iwp), DIMENSION(2)            ::  buf_shape
    489 
    490     INTEGER(iwp), DIMENSION(:,:), POINTER ::  buf
    491     INTEGER(iwp), DIMENSION(:,:), POINTER ::  p2i
    492 
    493     TYPE(C_PTR),SAVE                      ::  base_ptr
    494     TYPE(C_PTR),SAVE                      ::  rem_ptr
     526    CLASS(sm_class), INTENT(inout)        ::  this         !<
     527
     528    INTEGER(iwp)                          ::  disp_unit    !<
     529    INTEGER(iwp), INTENT(IN)              ::  n_nxlg       !<
     530    INTEGER(iwp), INTENT(IN)              ::  n_nxrg       !<
     531    INTEGER(iwp), INTENT(IN)              ::  n_nyng       !<
     532    INTEGER(iwp), INTENT(IN)              ::  n_nysg       !<
     533    INTEGER(iwp), SAVE                    ::  pe_from = 0  !<
     534    INTEGER(kind=MPI_ADDRESS_KIND)        ::  rem_size     !<
     535    INTEGER(iwp), INTENT(OUT)             ::  win          !<
     536    INTEGER(kind=MPI_ADDRESS_KIND)        ::  wsize        !<
     537
     538    INTEGER(iwp), DIMENSION(2)            ::  buf_shape    !<
     539
     540    INTEGER(iwp), DIMENSION(:,:), POINTER ::  buf          !<
     541    INTEGER(iwp), DIMENSION(:,:), POINTER ::  p2i          !<
     542
     543    TYPE(C_PTR),SAVE                      ::  base_ptr     !<
     544    TYPE(C_PTR),SAVE                      ::  rem_ptr      !<
    495545
    496546
     
    533583    IMPLICIT NONE
    534584
    535     CLASS(sm_class), INTENT(inout)      ::  this
    536 
    537     INTEGER                             ::  disp_unit
    538     INTEGER, INTENT(IN)                 ::  d1e
    539     INTEGER, INTENT(IN)                 ::  d1s
    540     INTEGER, INTENT(IN)                 ::  d2e
    541     INTEGER, INTENT(IN)                 ::  d2s
    542     INTEGER, INTENT(IN)                 ::  d3e
    543     INTEGER, INTENT(IN)                 ::  d3s
    544     INTEGER, SAVE                       ::  pe_from = 0
    545     INTEGER(KIND=MPI_ADDRESS_KIND)      ::  rem_size
    546     INTEGER, INTENT(OUT)                ::  win
    547     INTEGER(KIND=MPI_ADDRESS_KIND)      ::  wsize
    548 
    549     INTEGER, DIMENSION(3)               ::  buf_shape
    550 
    551     REAL(wp), DIMENSION(:,:,:), POINTER ::  buf
    552     REAL(wp), DIMENSION(:,:,:), POINTER ::  p3
    553 
    554     TYPE(C_PTR), SAVE                   ::  base_ptr
    555     TYPE(C_PTR), SAVE                   ::  rem_ptr
     585    CLASS(sm_class), INTENT(inout)      ::  this         !<
     586
     587    INTEGER                             ::  disp_unit    !<
     588    INTEGER, INTENT(IN)                 ::  d1e          !<
     589    INTEGER, INTENT(IN)                 ::  d1s          !<
     590    INTEGER, INTENT(IN)                 ::  d2e          !<
     591    INTEGER, INTENT(IN)                 ::  d2s          !<
     592    INTEGER, INTENT(IN)                 ::  d3e          !<
     593    INTEGER, INTENT(IN)                 ::  d3s          !<
     594    INTEGER, SAVE                       ::  pe_from = 0  !<
     595    INTEGER(KIND=MPI_ADDRESS_KIND)      ::  rem_size     !<
     596    INTEGER, INTENT(OUT)                ::  win          !<
     597    INTEGER(KIND=MPI_ADDRESS_KIND)      ::  wsize        !<
     598
     599    INTEGER, DIMENSION(3)               ::  buf_shape    !<
     600
     601    REAL(wp), DIMENSION(:,:,:), POINTER ::  buf          !<
     602    REAL(wp), DIMENSION(:,:,:), POINTER ::  p3           !<
     603
     604    TYPE(C_PTR), SAVE                   ::  base_ptr     !<
     605    TYPE(C_PTR), SAVE                   ::  rem_ptr      !<
    556606
    557607
     
    596646    IMPLICIT NONE
    597647
    598     CLASS(sm_class), INTENT(inout) ::  this
     648    CLASS(sm_class), INTENT(inout) ::  this  !<
    599649
    600650
     
    640690    IMPLICIT NONE
    641691
    642     CLASS(sm_class), INTENT(inout) ::  this
    643 
    644     INTEGER(iwp), INTENT(INOUT)    ::  win
     692    CLASS(sm_class), INTENT(inout) ::  this  !<
     693
     694    INTEGER(iwp), INTENT(INOUT)    ::  win   !<
    645695
    646696    IF ( this%no_shared_memory_in_this_run  .OR.  win == -1234567890 )  RETURN
     
    662712    IMPLICIT NONE
    663713
    664     CLASS(sm_class), INTENT(inout)     :: this
     714    CLASS(sm_class), INTENT(inout) ::  this  !<
    665715
    666716
Note: See TracChangeset for help on using the changeset viewer.