- Timestamp:
- 2014-03-27T09:56:56+01:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_v3_4_STABLE_2012/NEMOGCM/NEMO/OPATAM_SRC/mt19937ar.f90
r3611 r4598 59 59 !-----------------------------------------------------------------------! 60 60 USE par_kind, ONLY : wp 61 USE dom_oce , ONLY : nproc 62 USE lib_mpp , ONLY : get_unit 63 61 64 PRIVATE 62 65 INTEGER, PARAMETER :: jpn = 624 ! period parameters … … 85 88 & mtrand_real53,& 86 89 & init_by_array,& 87 & init_mtrand 90 & init_mtrand, & 91 & mtrand_seeddump, & 92 & mtrand_seedread 88 93 CONTAINS 89 94 SUBROUTINE init_mtrand(ks) … … 93 98 INTEGER :: ks 94 99 ! 95 mt(0) = IAND(INT(ks,kind=8),jpall) 96 DO mti = 1, jpn-1 97 mt(mti) = 1812433253 * IEOR(mt(mti-1),ISHFT(mt(mti-1),-30)) + mti 98 ! See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. 99 ! In the previous versions, MSBs of the seed affect 100 ! only MSBs of the array mt[]. 101 ! modified by Makoto Matsumoto 102 mt(mti) = IAND(mt(mti),jpall) 103 ! for >32 bit machines 104 END DO 105 l_mtinit = .TRUE. 106 ! 100 IF (.NOT.l_mtinit) THEN 101 mt(0) = IAND(INT(ks,kind=8),jpall) 102 DO mti = 1, jpn-1 103 mt(mti) = 1812433253 * IEOR(mt(mti-1),ISHFT(mt(mti-1),-30)) + mti 104 ! See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. 105 ! In the previous versions, MSBs of the seed affect 106 ! only MSBs of the array mt[]. 107 ! modified by Makoto Matsumoto 108 mt(mti) = IAND(mt(mti),jpall) 109 ! for >32 bit machines 110 END DO 111 l_mtinit = .TRUE. 112 ENDIF 107 113 END SUBROUTINE init_mtrand 114 108 115 SUBROUTINE init_by_array(kinit_key,key_length) 109 116 !----------------------------------------------------------------------- … … 231 238 mtrand_res53 = ( za * 67108864._wp + zb ) / 9007199254740992._wp 232 239 END FUNCTION mtrand_res53 240 241 242 SUBROUTINE mtrand_seeddump(cdfile) 243 !----------------------------------------------------------------------- 244 ! Dumps the seed in a restart file. 245 !----------------------------------------------------------------------- 246 CHARACTER(len=*) :: cdfile 247 INTEGER :: iunit 248 249 iunit = get_unit() 250 OPEN( unit=iunit, file = TRIM(cdfile), form = 'unformatted', & 251 & access = 'sequential', status = 'new' ) 252 WRITE( iunit ) mt 253 WRITE( iunit ) mti 254 CLOSE( iunit ) 255 256 END SUBROUTINE mtrand_seeddump 257 258 SUBROUTINE mtrand_seedread(cdfile) 259 !----------------------------------------------------------------------- 260 ! Reads the seed from a restart file. 261 !----------------------------------------------------------------------- 262 CHARACTER(len=*) :: cdfile 263 INTEGER :: iunit 264 265 iunit = get_unit() 266 OPEN( unit=iunit, file = TRIM(cdfile), form = 'unformatted', & 267 & access = 'sequential', status = 'old' ) 268 READ( iunit ) mt 269 READ( iunit ) mti 270 CLOSE( iunit ) 271 l_mtinit = .TRUE. 272 273 END SUBROUTINE mtrand_seedre 274 233 275 END MODULE mt19937ar
Note: See TracChangeset
for help on using the changeset viewer.