Changeset 1015 for palm/trunk/SOURCE/coriolis.f90
- Timestamp:
- Sep 27, 2012 9:23:24 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/coriolis.f90
r392 r1015 4 4 ! Current revisions: 5 5 ! ----------------- 6 ! 7 ! 6 ! accelerator version (*_acc) added 8 7 ! 9 8 ! Former revisions: … … 36 35 37 36 PRIVATE 38 PUBLIC coriolis 37 PUBLIC coriolis, coriolis_acc 39 38 40 39 INTERFACE coriolis … … 42 41 MODULE PROCEDURE coriolis_ij 43 42 END INTERFACE coriolis 43 44 INTERFACE coriolis_acc 45 MODULE PROCEDURE coriolis_acc 46 END INTERFACE coriolis_acc 44 47 45 48 CONTAINS … … 116 119 117 120 END SUBROUTINE coriolis 121 122 123 !------------------------------------------------------------------------------! 124 ! Call for all grid points - accelerator version 125 !------------------------------------------------------------------------------! 126 SUBROUTINE coriolis_acc( component ) 127 128 USE arrays_3d 129 USE control_parameters 130 USE indices 131 USE pegrid 132 133 IMPLICIT NONE 134 135 INTEGER :: component, i, j, k 136 137 138 ! 139 !-- Compute Coriolis terms for the three velocity components 140 SELECT CASE ( component ) 141 142 ! 143 !-- u-component 144 CASE ( 1 ) 145 !$acc kernels present( nzb_u_inner, tend, v, vg, w ) 146 !$acc loop 147 DO i = nxlu, nxr 148 DO j = nys, nyn 149 !$acc loop vector( 32 ) 150 DO k = 1, nzt 151 IF ( k > nzb_u_inner(j,i) ) THEN 152 tend(k,j,i) = tend(k,j,i) + f * ( 0.25 * & 153 ( v(k,j,i-1) + v(k,j,i) + v(k,j+1,i-1) + & 154 v(k,j+1,i) ) - vg(k) ) & 155 - fs * ( 0.25 * & 156 ( w(k-1,j,i-1) + w(k-1,j,i) + w(k,j,i-1) & 157 + w(k,j,i) ) & 158 ) 159 ENDIF 160 ENDDO 161 ENDDO 162 ENDDO 163 !$acc end kernels 164 165 ! 166 !-- v-component 167 CASE ( 2 ) 168 !$acc kernels present( nzb_v_inner, tend, u, ug ) 169 !$acc loop 170 DO i = nxl, nxr 171 DO j = nysv, nyn 172 !$acc loop vector( 32 ) 173 DO k = 1, nzt 174 IF ( k > nzb_v_inner(j,i) ) THEN 175 tend(k,j,i) = tend(k,j,i) - f * ( 0.25 * & 176 ( u(k,j-1,i) + u(k,j,i) + u(k,j-1,i+1) + & 177 u(k,j,i+1) ) - ug(k) ) 178 ENDIF 179 ENDDO 180 ENDDO 181 ENDDO 182 !$acc end kernels 183 184 ! 185 !-- w-component 186 CASE ( 3 ) 187 !$acc kernels present( nzb_w_inner, tend, u ) 188 !$acc loop 189 DO i = nxl, nxr 190 DO j = nys, nyn 191 !$acc loop vector( 32 ) 192 DO k = 1, nzt 193 IF ( k > nzb_w_inner(j,i) ) THEN 194 tend(k,j,i) = tend(k,j,i) + fs * 0.25 * & 195 ( u(k,j,i) + u(k+1,j,i) + u(k,j,i+1) + & 196 u(k+1,j,i+1) ) 197 ENDIF 198 ENDDO 199 ENDDO 200 ENDDO 201 !$acc end kernels 202 203 CASE DEFAULT 204 205 WRITE( message_string, * ) ' wrong component: ', component 206 CALL message( 'coriolis', 'PA0173', 1, 2, 0, 6, 0 ) 207 208 END SELECT 209 210 END SUBROUTINE coriolis_acc 118 211 119 212
Note: See TracChangeset
for help on using the changeset viewer.