Changeset 295 for codes/icosagcm/trunk/src/dissip_gcm.f90
- Timestamp:
- 10/31/14 14:52:01 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/dissip_gcm.f90
r286 r295 71 71 USE time_mod 72 72 USE transfert_omp_mod 73 USE omp_para 73 74 IMPLICIT NONE 74 75 … … 100 101 CASE('none') 101 102 rayleigh_friction_type=0 102 IF (is_m pi_root) PRINT *, 'No Rayleigh friction'103 IF (is_master) PRINT *, 'No Rayleigh friction' 103 104 CASE('dcmip2_schaer_noshear') 104 105 rayleigh_friction_type=1 105 106 rayleigh_shear=0 106 IF (is_m pi_root) PRINT *, 'Rayleigh friction : Schaer-like mountain without shear DCMIP2.1'107 IF (is_master) PRINT *, 'Rayleigh friction : Schaer-like mountain without shear DCMIP2.1' 107 108 CASE('dcmip2_schaer_shear') 108 109 rayleigh_shear=1 109 110 rayleigh_friction_type=2 110 IF (is_m pi_root) PRINT *, 'Rayleigh friction : Schaer-like mountain with shear DCMIP2.2'111 IF (is_master) PRINT *, 'Rayleigh friction : Schaer-like mountain with shear DCMIP2.2' 111 112 CASE DEFAULT 112 IF (is_m pi_root) PRINT *, 'Bad selector : rayleigh_friction_type =', TRIM(rayleigh_friction_key), ' in dissip_gcm.f90/init_dissip'113 IF (is_master) PRINT *, 'Bad selector : rayleigh_friction_type =', TRIM(rayleigh_friction_key), ' in dissip_gcm.f90/init_dissip' 113 114 STOP 114 115 END SELECT … … 119 120 rayleigh_tau = rayleigh_tau / scale_factor 120 121 IF(rayleigh_tau<=0) THEN 121 IF (is_m pi_root) PRINT *, 'Forbidden : negative value for rayleigh_friction_tau =',rayleigh_tau122 IF (is_master) PRINT *, 'Forbidden : negative value for rayleigh_friction_tau =',rayleigh_tau 122 123 STOP 123 124 END IF … … 156 157 cdivgrad=-1 157 158 cgradrot=-1 158 159 160 !$OMP BARRIER 161 !$OMP MASTER 159 162 DO ind=1,ndomain 160 IF (.NOT. assigned_domain(ind)) CYCLE161 163 CALL swap_dimensions(ind) 162 164 CALL swap_geometry(ind) … … 175 177 ENDDO 176 178 ENDDO 177 178 179 !$OMP END MASTER 180 !$OMP BARRIER 179 181 180 182 DO it=1,20 … … 184 186 CALL transfert_request(f_u,req_e1_vect) 185 187 DO ind=1,ndomain 186 IF (.NOT. assigned_domain(ind) ) CYCLE188 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 187 189 CALL swap_dimensions(ind) 188 190 CALL swap_geometry(ind) … … 197 199 198 200 DO ind=1,ndomain 199 IF (.NOT. assigned_domain(ind) ) CYCLE201 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 200 202 CALL swap_dimensions(ind) 201 203 CALL swap_geometry(ind) … … 214 216 215 217 IF (using_mpi) THEN 216 CALL reduce_ sum_omp(dumax,dumax1)218 CALL reduce_max_omp(dumax,dumax1) 217 219 !$OMP MASTER 218 220 CALL MPI_ALLREDUCE(dumax1,dumax,1,MPI_REAL8,MPI_MAX,comm_icosa,ierr) … … 220 222 CALL bcast_omp(dumax) 221 223 ELSE 222 CALL allreduce_ sum_omp(dumax,dumax1)224 CALL allreduce_max_omp(dumax,dumax1) 223 225 dumax=dumax1 224 226 ENDIF 225 227 226 228 DO ind=1,ndomain 227 IF (.NOT. assigned_domain(ind) ) CYCLE229 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 228 230 CALL swap_dimensions(ind) 229 231 CALL swap_geometry(ind) … … 232 234 u=du/dumax 233 235 ENDDO 234 IF (is_m pi_root) PRINT *,"gradiv : it :",it ,": dumax",dumax236 IF (is_master) PRINT *,"gradiv : it :",it ,": dumax",dumax 235 237 236 238 ENDDO 237 IF (is_m pi_root) PRINT *,"gradiv : dumax",dumax238 IF (is_m pi_root) PRINT *, 'mean T-cell edge size (km)', 1.45*radius/iim_glo/1000., &239 IF (is_master) PRINT *,"gradiv : dumax",dumax 240 IF (is_master) PRINT *, 'mean T-cell edge size (km)', 1.45*radius/iim_glo/1000., & 239 241 'effective T-cell half-edge size (km)', dumax**(-.5/nitergdiv)/1000 240 IF (is_m pi_root) PRINT *, 'Max. time step assuming c=340 m/s and Courant number=2.8 :', &242 IF (is_master) PRINT *, 'Max. time step assuming c=340 m/s and Courant number=2.8 :', & 241 243 2.8/340.*dumax**(-.5/nitergdiv) 242 244 243 245 cgraddiv=dumax**(-1./nitergdiv) 244 IF (is_mpi_root) PRINT *,"cgraddiv : ",cgraddiv 245 246 IF (is_master) PRINT *,"cgraddiv : ",cgraddiv 247 248 !$OMP BARRIER 249 !$OMP MASTER 246 250 DO ind=1,ndomain 247 IF (.NOT. assigned_domain(ind)) CYCLE248 251 CALL swap_dimensions(ind) 249 252 CALL swap_geometry(ind) … … 262 265 ENDDO 263 266 ENDDO 267 !$OMP END MASTER 268 !$OMP BARRIER 264 269 265 270 … … 270 275 CALL transfert_request(f_u,req_e1_vect) 271 276 DO ind=1,ndomain 272 IF (.NOT. assigned_domain(ind) ) CYCLE277 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 273 278 CALL swap_dimensions(ind) 274 279 CALL swap_geometry(ind) … … 283 288 284 289 DO ind=1,ndomain 285 IF (.NOT. assigned_domain(ind) ) CYCLE290 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 286 291 CALL swap_dimensions(ind) 287 292 CALL swap_geometry(ind) … … 300 305 301 306 IF (using_mpi) THEN 302 CALL reduce_ sum_omp(dumax,dumax1)307 CALL reduce_max_omp(dumax,dumax1) 303 308 !$OMP MASTER 304 309 CALL MPI_ALLREDUCE(dumax1,dumax,1,MPI_REAL8,MPI_MAX,comm_icosa,ierr) … … 306 311 CALL bcast_omp(dumax) 307 312 ELSE 308 CALL allreduce_ sum_omp(dumax,dumax1)313 CALL allreduce_max_omp(dumax,dumax1) 309 314 dumax=dumax1 310 315 ENDIF … … 312 317 313 318 DO ind=1,ndomain 314 IF (.NOT. assigned_domain(ind) ) CYCLE319 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 315 320 CALL swap_dimensions(ind) 316 321 CALL swap_geometry(ind) … … 320 325 ENDDO 321 326 322 IF (is_m pi_root) PRINT *,"gradrot : it :",it ,": dumax",dumax327 IF (is_master) PRINT *,"gradrot : it :",it ,": dumax",dumax 323 328 324 329 ENDDO 325 IF (is_m pi_root) PRINT *,"gradrot : dumax",dumax330 IF (is_master) PRINT *,"gradrot : dumax",dumax 326 331 327 332 cgradrot=dumax**(-1./nitergrot) 328 IF (is_m pi_root) PRINT *,"cgradrot : ",cgradrot333 IF (is_master) PRINT *,"cgradrot : ",cgradrot 329 334 330 335 331 336 337 !$OMP BARRIER 338 !$OMP MASTER 332 339 DO ind=1,ndomain 333 IF (.NOT. assigned_domain(ind)) CYCLE334 340 CALL swap_dimensions(ind) 335 341 CALL swap_geometry(ind) … … 344 350 ENDDO 345 351 ENDDO 352 !$OMP END MASTER 353 !$OMP BARRIER 346 354 347 355 DO it=1,20 … … 351 359 CALL transfert_request(f_theta,req_i1) 352 360 DO ind=1,ndomain 353 IF (.NOT. assigned_domain(ind) ) CYCLE361 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 354 362 CALL swap_dimensions(ind) 355 363 CALL swap_geometry(ind) … … 364 372 365 373 DO ind=1,ndomain 366 IF (.NOT. assigned_domain(ind) ) CYCLE374 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 367 375 CALL swap_dimensions(ind) 368 376 CALL swap_geometry(ind) … … 379 387 380 388 IF (using_mpi) THEN 381 CALL reduce_ sum_omp(dthetamax ,dthetamax1)389 CALL reduce_max_omp(dthetamax ,dthetamax1) 382 390 !$OMP MASTER 383 391 CALL MPI_ALLREDUCE(dthetamax1,dthetamax,1,MPI_REAL8,MPI_MAX,comm_icosa,ierr) … … 385 393 CALL bcast_omp(dthetamax) 386 394 ELSE 387 CALL allreduce_ sum_omp(dthetamax,dthetamax1)395 CALL allreduce_max_omp(dthetamax,dthetamax1) 388 396 dumax=dumax1 389 397 ENDIF 390 398 391 IF (is_m pi_root) PRINT *,"divgrad : it :",it ,": dthetamax",dthetamax399 IF (is_master) PRINT *,"divgrad : it :",it ,": dthetamax",dthetamax 392 400 393 401 DO ind=1,ndomain 394 IF (.NOT. assigned_domain(ind) ) CYCLE402 IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE 395 403 CALL swap_dimensions(ind) 396 404 CALL swap_geometry(ind) … … 401 409 ENDDO 402 410 403 IF (is_m pi_root) PRINT *,"divgrad : divgrad",dthetamax411 IF (is_master) PRINT *,"divgrad : divgrad",dthetamax 404 412 405 413 cdivgrad=dthetamax**(-1./niterdivgrad) 406 IF (is_m pi_root) PRINT *,"cdivgrad : ",cdivgrad414 IF (is_master) PRINT *,"cdivgrad : ",cdivgrad 407 415 408 416 … … 431 439 dtdissip=itau_dissip*dt 432 440 ELSE 433 IF (is_m pi_root) PRINT *,"No dissipation time set, setting itau_dissip to 1000000000"441 IF (is_master) PRINT *,"No dissipation time set, setting itau_dissip to 1000000000" 434 442 itau_dissip=100000000 435 443 END IF 436 444 itau_dissip=MAX(1,itau_dissip) 437 IF (is_m pi_root) PRINT *,"mintau ",mintau,"itau_dissip",itau_dissip," dtdissip ",dtdissip445 IF (is_master) PRINT *,"mintau ",mintau,"itau_dissip",itau_dissip," dtdissip ",dtdissip 438 446 439 447 END SUBROUTINE init_dissip … … 713 721 714 722 CALL trace_start("divgrad") 715 723 716 724 DO ind=1,ndomain 717 725 IF (.NOT. assigned_domain(ind)) CYCLE
Note: See TracChangeset
for help on using the changeset viewer.