Changeset 953 for codes/icosagcm/trunk/src/transport/advect.F90
- Timestamp:
- 07/15/19 12:29:31 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/transport/advect.F90
r899 r953 49 49 !======================================================================================= 50 50 51 SUBROUTINE compute_gradq3d(qi,sqrt_leng,gradq3d,xyz_i, xyz_v)51 SUBROUTINE compute_gradq3d(qi,sqrt_leng,gradq3d,xyz_i, xyz_v) 52 52 USE trace 53 53 USE omp_para … … 68 68 REAL(rstd) :: x1,x2,x3 69 69 REAL(rstd) :: dq(3) 70 70 71 71 CALL trace_start("compute_gradq3d1") 72 72 … … 86 86 ! END DO 87 87 88 DO l = ll_begin,ll_end 88 !$acc data create(gradtri(:,:,:), arr(:), ar(:)) present(sqrt_leng(:), xyz_i(:,:), xyz_v(:,:), qi(:,:), gradq3d(:,:,:)) async 89 90 !$acc parallel loop collapse(2) async private(A, dq) 91 DO l = ll_begin,ll_end 89 92 !DIR$ SIMD 90 93 DO ij=ij_begin_ext,ij_end_ext … … 151 154 152 155 ENDDO 156 ENDDO 153 157 158 !$acc parallel loop collapse(2) async private(A, dq) 159 DO l = ll_begin,ll_end 154 160 DO ij=ij_begin_ext,ij_end_ext 155 161 … … 219 225 220 226 !DIR$ SIMD 227 !$acc parallel loop async 221 228 DO ij=ij_begin,ij_end 222 229 ar(ij) = arr(ij+z_up)+arr(ij+z_lup)+arr(ij+z_ldown)+arr(ij+z_down)+arr(ij+z_rdown)+arr(ij+z_rup)+1.e-50 … … 225 232 CALL trace_start2("compute_gradq3d2") 226 233 234 !$acc parallel loop collapse(3) async 227 235 DO k=1,3 228 236 DO l =ll_begin,ll_end … … 239 247 240 248 !============================================================================================= LIMITING 249 !$acc parallel loop collapse(2) async 241 250 DO l =ll_begin,ll_end 242 251 !DIR$ SIMD … … 251 260 minq = min(qi(ij,l),qi(ij+t_right,l),qi(ij+t_lup,l),qi(ij+t_rup,l),qi(ij+t_left,l), & 252 261 qi(ij+t_rdown,l),qi(ij+t_ldown,l)) 253 alphamx = (maxq - qi(ij,l)) ; alphamx = alphamx/(maxq_c - qi(ij,l) ) 254 alphamx = max(alphamx,0.0) 255 alphami = (minq - qi(ij,l)); alphami = alphami/(minq_c - qi(ij,l)) 256 alphami = max(alphami,0.0) 262 IF ((maxq_c - qi(ij,l)) /= 0.0) THEN 263 alphamx = (maxq - qi(ij,l)) ; alphamx = alphamx/(maxq_c - qi(ij,l) ) 264 alphamx = max(alphamx,0.0) 265 ELSE 266 alphamx = 0.0 267 ENDIF 268 IF ((minq_c - qi(ij,l)) /= 0.0) THEN 269 alphami = (minq - qi(ij,l)); alphami = alphami/(minq_c - qi(ij,l)) 270 alphami = max(alphami,0.0) 271 ELSE 272 alphami = 0.0 273 ENDIF 257 274 alpha = min(alphamx,alphami,1.0) 258 275 ! gradq3d(ij,l,:) = alpha*gradq3d(ij,l,:) … … 264 281 265 282 CALL trace_end("compute_gradq3d3") 283 284 !$acc end data 266 285 267 286 CONTAINS … … 329 348 330 349 ! Backward trajectories, for use with Miura approach 331 SUBROUTINE compute_backward_traj(normal,tangent,ue,tau, cc) 350 SUBROUTINE compute_backward_traj(normal,tangent,ue,tau,cc) 351 USE geometry, ONLY : xyz_e, de, wee, le 332 352 USE trace 333 353 USE omp_para … … 345 365 346 366 ! TODO : compute normal displacement ue*tau as hfluxt / mass(upwind) then reconstruct tangential displacement 347 367 368 !$acc data present(ue(:,:), cc(:,:,:), normal(:,:), tangent(:,:), xyz_e(:,:), de(:), wee(:,:,:), le(:)) async 369 348 370 ! reconstruct tangential wind then 3D wind at edge then cc = edge midpoint - u*tau 371 !$acc parallel loop private(up_e, v_e) collapse(2) gang vector async 349 372 DO l = ll_begin,ll_end 350 373 !DIR$ SIMD … … 397 420 ENDDO 398 421 END DO 399 422 !$acc end data 400 423 CALL trace_end("compute_backward_traj") 401 424 … … 404 427 ! Horizontal transport (S. Dubey, T. Dubos) 405 428 ! Slope-limited van Leer approach with hexagons 406 SUBROUTINE compute_advect_horiz(update_mass,diagflux_on, hfluxt,cc,gradq3d, mass, qi,qfluxt)429 SUBROUTINE compute_advect_horiz(update_mass,diagflux_on, hfluxt,cc,gradq3d, mass, qi, qfluxt) 407 430 USE trace 408 431 USE omp_para 432 USE abort_mod 433 USE geometry, only : Ai, xyz_i 409 434 IMPLICIT NONE 410 435 LOGICAL, INTENT(IN) :: update_mass, diagflux_on … … 415 440 REAL(rstd), INTENT(INOUT) :: qi(iim*jjm,llm) 416 441 REAL(rstd), INTENT(INOUT) :: qfluxt(3*iim*jjm,MERGE(llm,1,diagflux_on)) ! time-integrated tracer flux 417 418 REAL(rstd) :: dq,dmass,qe, newmass 442 ! metrics terms 443 444 REAL(rstd) :: dq,dmass,qe,newmass 419 445 REAL(rstd) :: qflux(3*iim*jjm,llm) 420 INTEGER :: ij,l 446 INTEGER :: ij,l,ij_tmp 447 448 IF(diagflux_on) CALL abort_acc("compute_advect_horiz : diagflux_on") 421 449 422 450 CALL trace_start("compute_advect_horiz") 423 451 #include "../kernels/advect_horiz.k90" 424 452 CALL trace_end("compute_advect_horiz") 453 425 454 END SUBROUTINE compute_advect_horiz 426 455
Note: See TracChangeset
for help on using the changeset viewer.