Changeset 2587 for branches/TAM_V3_0/NEMOTAM/OPATAM_SRC/ran_num.F90
- Timestamp:
- 2011-02-15T12:58:59+01:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/TAM_V3_0/NEMOTAM/OPATAM_SRC/ran_num.F90
r1885 r2587 13 13 USE dom_oce ! Domain variables 14 14 USE in_out_manager ! I/O stuff 15 USE mt19937ar, ONLY : & 16 & init_mtrand, & 17 & mtrand_real1 15 18 16 19 IMPLICIT NONE … … 118 121 119 122 END FUNCTION gausva 120 121 FUNCTION psrandom( kdum )122 !!----------------------------------------------------------------------123 !! *** ROUTINE psrandom ***124 !!125 !! ** Purpose : Pseudo-Random number generator.126 !!127 !! ** Method : Returns a pseudo-random number from a uniform distribution128 !! between 0 and 1129 !! Call with kdum a negative integer to initialize.130 !! Thereafter, do not alter kdum between successive deviates131 !! in sequence.132 !!133 !! ** Action :134 !!135 !! History :136 !! ! 10-02 (F. Vigilant) Original code137 !!----------------------------------------------------------------------138 !! * Function return139 REAL(wp) :: &140 & psrandom141 !! * Arguments142 INTEGER, INTENT(INOUT) :: &143 & kdum ! Seed144 LOGICAL, SAVE :: &145 & llinit = .FALSE.146 147 ! Initialization148 IF ( .NOT. llinit ) THEN149 150 CALL srand( kdum )151 llinit = .TRUE.152 153 ENDIF154 155 CALL rand(psrandom)156 157 END FUNCTION psrandom158 159 123 160 124 FUNCTION gaustb_2d( ki, kj, kseed, pamp, pmean ) … … 241 205 IF ( niset(ki,kj) == 0 ) THEN 242 206 243 zv1 = 2.0_wp * psrandom _2d( ki, kj, kdum) - 1.0_wp244 zv2 = 2.0_wp * psrandom _2d( ki, kj, kdum) - 1.0_wp207 zv1 = 2.0_wp * psrandom( kdum(ki,kj) ) - 1.0_wp 208 zv2 = 2.0_wp * psrandom( kdum(ki,kj) ) - 1.0_wp 245 209 zrsq = zv1**2 + zv2**2 246 210 247 211 DO WHILE ( ( zrsq >= 1.0_wp ) .OR. ( zrsq == 0.0_wp ) ) 248 212 249 zv1 = 2.0_wp * psrandom _2d( ki, kj, kdum) - 1.0_wp250 zv2 = 2.0_wp * psrandom _2d( ki, kj, kdum) - 1.0_wp213 zv1 = 2.0_wp * psrandom( kdum(ki,kj) ) - 1.0_wp 214 zv2 = 2.0_wp * psrandom( kdum(ki,kj) ) - 1.0_wp 251 215 zrsq = zv1**2 + zv2**2 252 216 … … 267 231 END FUNCTION gausva_2d 268 232 269 FUNCTION psrandom _2d( ki, kj, kdum )270 !!---------------------------------------------------------------------- 271 !! *** ROUTINE psrandom _2d***272 !! 273 !! ** Purpose : Random number generator.233 FUNCTION psrandom( kdum ) 234 !!---------------------------------------------------------------------- 235 !! *** ROUTINE psrandom *** 236 !! 237 !! ** Purpose : Pseudo-Random number generator. 274 238 !! 275 239 !! ** Method : Returns a pseudo-random number from a uniform distribution … … 286 250 !! * Function return 287 251 REAL(wp) :: & 288 & psrandom_2d 289 !! * Arguments 290 INTEGER, INTENT(IN) :: & 291 & ki, & ! Indices in seed array 292 & kj 293 INTEGER, INTENT(INOUT), DIMENSION(jpi,jpj) :: & 252 & psrandom 253 !! * Arguments 254 INTEGER, INTENT(INOUT) :: & 294 255 & kdum ! Seed 295 256 LOGICAL, SAVE :: & 296 257 & llinit = .FALSE. 258 INTEGER :: & 259 & kdum1, & 260 & kdum2 297 261 298 262 ! Initialization 299 263 IF ( .NOT. llinit ) THEN 300 301 CALL srand( kdum( ki,kj ) ) 264 kdum2 = 596035 265 kdum1 = kdum + nproc * kdum2 266 CALL init_mtrand(kdum) 302 267 llinit = .TRUE. 303 304 ENDIF 305 306 CALL rand(psrandom_2d) 268 ENDIF 269 270 psrandom = mtrand_real1() 307 271 308 END FUNCTION psrandom_2d 272 END FUNCTION psrandom 273 309 274 310 275 END MODULE ran_num
Note: See TracChangeset
for help on using the changeset viewer.