Ignore:
Timestamp:
Mar 8, 2017 3:55:25 PM (7 years ago)
Author:
knoop
Message:

Bugfix: parallel random number generator

File:
1 edited

Legend:

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

    r2145 r2172  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Bugfix: added global initialization routine and removed global array
    2323!
    2424! Former revisions:
     
    6767   PRIVATE
    6868   PUBLIC random_number_parallel, random_seed_parallel, random_dummy,          &
    69           id_random_array, seq_random_array
     69          id_random_array, seq_random_array, init_parallel_random_generator
    7070   
    7171   INTEGER(isp), SAVE :: lenran=0             !<
     
    9696   REAL(wp) :: random_dummy=0.0   !<
    9797   
     98   INTERFACE init_parallel_random_generator
     99      MODULE PROCEDURE init_parallel_random_generator
     100   END INTERFACE
     101   
    98102   INTERFACE random_number_parallel
    99103      MODULE PROCEDURE ran0_s
     
    117121
    118122 CONTAINS
     123 
     124!------------------------------------------------------------------------------!
     125! Description:
     126! ------------
     127!> Initialize the parallel random number generator for a specific subdomain
     128!------------------------------------------------------------------------------!
     129   SUBROUTINE init_parallel_random_generator(nx, ny, nys, nyn, nxl, nxr)
     130
     131      USE kinds
     132
     133      USE control_parameters,                                                  &
     134          ONLY: ensemble_member_nr
     135
     136      IMPLICIT NONE
     137
     138      INTEGER(isp), INTENT(IN) ::  nx    !<
     139      INTEGER(isp), INTENT(IN) ::  ny    !<
     140      INTEGER(isp), INTENT(IN) ::  nys   !<
     141      INTEGER(isp), INTENT(IN) ::  nyn   !<
     142      INTEGER(isp), INTENT(IN) ::  nxl   !<
     143      INTEGER(isp), INTENT(IN) ::  nxr   !<
     144
     145      INTEGER(iwp) ::  i   !<
     146      INTEGER(iwp) ::  j   !<
     147
     148!--   Allocate ID-array and state-space-array
     149      ALLOCATE ( seq_random_array(5,nys:nyn,nxl:nxr) )
     150      ALLOCATE ( id_random_array(nys:nyn,nxl:nxr) )
     151      seq_random_array = 0
     152      id_random_array  = 0
     153
     154!--       Asigning an ID to every vertical gridpoint column
     155!--       dependig on the ensemble run number.
     156          DO i=nxl, nxr
     157             DO j=nys, nyn
     158                id_random_array(j,i) = j*(nx+1.0_wp) + i + 1.0_wp + 1E6 * &
     159                                       ( ensemble_member_nr - 1000 )
     160             ENDDO
     161          ENDDO
     162!--       Initializing with random_seed_parallel for every vertical
     163!--       gridpoint column.
     164          random_dummy=0
     165          DO i = nxl, nxr
     166             DO j = nys, nyn
     167                CALL random_seed_parallel (random_sequence=id_random_array(j, i))
     168                CALL random_number_parallel (random_dummy)
     169                CALL random_seed_parallel (get=seq_random_array(:, j, i))
     170             ENDDO
     171          ENDDO
     172
     173   END SUBROUTINE init_parallel_random_generator
    119174 
    120175!------------------------------------------------------------------------------!
Note: See TracChangeset for help on using the changeset viewer.