Changeset 658 for codes/icosagcm/devel/src/kernels_unst/caldyn_slow_NH.k90
- Timestamp:
- 12/30/17 02:00:38 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/kernels_unst/caldyn_slow_NH.k90
r614 r658 7 7 l=1 8 8 w_il(l,ij) = 2.*W(l,ij)/rhodz(kup,ij) 9 !DIR$ SIMD 9 10 DO l = 2, llm 10 11 kdown = l-1 … … 34 35 v_el(l,edge) = .5*le_de(edge)*(u(kup,edge)+u(kdown,edge)) ! checked 35 36 G_el(l,edge) = v_el(l,edge)*W_el - DePhil(l,edge)*W2_el 37 !DIR$ SIMD 36 38 DO l = 2, llm 37 39 kdown = l-1 … … 64 66 !$OMP DO SCHEDULE(STATIC) 65 67 DO ij = 1, primal_num 66 DO l = 1, llm+1 67 gPhi2=0. 68 dP=0. 69 divG=0 70 DO iedge = 1, primal_deg(ij) 71 edge = primal_edge(iedge,ij) 72 gPhi2 = gPhi2 + le_de(edge)*DePhil(l,edge)**2 73 dP = dP + le_de(edge)*DePhil(l,edge)*v_el(l,edge) 74 divG = divG + primal_ne(iedge,ij)*G_el(l,edge) ! -div(G_el), G_el already has le_de 75 END DO 76 gradPhi2(l,ij) = 1./(2.*Ai(ij)) * gPhi2 77 dPhi(l,ij) = gradPhi2(l,ij)*w_il(l,ij) - 1./(2.*Ai(ij))*dP 78 dW(l,ij) = (-1./Ai(ij))*divG 79 END DO 68 ! this VLOOP iterates over primal cell edges 69 SELECT CASE(primal_deg(ij)) 70 CASE(4) 71 edge1 = primal_edge(1,ij) 72 edge2 = primal_edge(2,ij) 73 edge3 = primal_edge(3,ij) 74 edge4 = primal_edge(4,ij) 75 le_de1 = le_de(edge1) 76 le_de2 = le_de(edge2) 77 le_de3 = le_de(edge3) 78 le_de4 = le_de(edge4) 79 sign1 = primal_ne(1,ij) 80 sign2 = primal_ne(2,ij) 81 sign3 = primal_ne(3,ij) 82 sign4 = primal_ne(4,ij) 83 !DIR$ SIMD 84 DO l = 1, llm+1 85 gPhi2=0. 86 dP=0. 87 divG=0 88 gPhi2 = gPhi2 + le_de1*DePhil(l,edge1)**2 89 dP = dP + le_de1*DePhil(l,edge1)*v_el(l,edge1) 90 divG = divG + sign1*G_el(l,edge1) ! -div(G_el), G_el already has le_de 91 gPhi2 = gPhi2 + le_de2*DePhil(l,edge2)**2 92 dP = dP + le_de2*DePhil(l,edge2)*v_el(l,edge2) 93 divG = divG + sign2*G_el(l,edge2) ! -div(G_el), G_el already has le_de 94 gPhi2 = gPhi2 + le_de3*DePhil(l,edge3)**2 95 dP = dP + le_de3*DePhil(l,edge3)*v_el(l,edge3) 96 divG = divG + sign3*G_el(l,edge3) ! -div(G_el), G_el already has le_de 97 gPhi2 = gPhi2 + le_de4*DePhil(l,edge4)**2 98 dP = dP + le_de4*DePhil(l,edge4)*v_el(l,edge4) 99 divG = divG + sign4*G_el(l,edge4) ! -div(G_el), G_el already has le_de 100 gradPhi2(l,ij) = 1./(2.*Ai(ij)) * gPhi2 101 dPhi(l,ij) = gradPhi2(l,ij)*w_il(l,ij) - 1./(2.*Ai(ij))*dP 102 dW(l,ij) = (-1./Ai(ij))*divG 103 END DO 104 CASE(5) 105 edge1 = primal_edge(1,ij) 106 edge2 = primal_edge(2,ij) 107 edge3 = primal_edge(3,ij) 108 edge4 = primal_edge(4,ij) 109 edge5 = primal_edge(5,ij) 110 le_de1 = le_de(edge1) 111 le_de2 = le_de(edge2) 112 le_de3 = le_de(edge3) 113 le_de4 = le_de(edge4) 114 le_de5 = le_de(edge5) 115 sign1 = primal_ne(1,ij) 116 sign2 = primal_ne(2,ij) 117 sign3 = primal_ne(3,ij) 118 sign4 = primal_ne(4,ij) 119 sign5 = primal_ne(5,ij) 120 !DIR$ SIMD 121 DO l = 1, llm+1 122 gPhi2=0. 123 dP=0. 124 divG=0 125 gPhi2 = gPhi2 + le_de1*DePhil(l,edge1)**2 126 dP = dP + le_de1*DePhil(l,edge1)*v_el(l,edge1) 127 divG = divG + sign1*G_el(l,edge1) ! -div(G_el), G_el already has le_de 128 gPhi2 = gPhi2 + le_de2*DePhil(l,edge2)**2 129 dP = dP + le_de2*DePhil(l,edge2)*v_el(l,edge2) 130 divG = divG + sign2*G_el(l,edge2) ! -div(G_el), G_el already has le_de 131 gPhi2 = gPhi2 + le_de3*DePhil(l,edge3)**2 132 dP = dP + le_de3*DePhil(l,edge3)*v_el(l,edge3) 133 divG = divG + sign3*G_el(l,edge3) ! -div(G_el), G_el already has le_de 134 gPhi2 = gPhi2 + le_de4*DePhil(l,edge4)**2 135 dP = dP + le_de4*DePhil(l,edge4)*v_el(l,edge4) 136 divG = divG + sign4*G_el(l,edge4) ! -div(G_el), G_el already has le_de 137 gPhi2 = gPhi2 + le_de5*DePhil(l,edge5)**2 138 dP = dP + le_de5*DePhil(l,edge5)*v_el(l,edge5) 139 divG = divG + sign5*G_el(l,edge5) ! -div(G_el), G_el already has le_de 140 gradPhi2(l,ij) = 1./(2.*Ai(ij)) * gPhi2 141 dPhi(l,ij) = gradPhi2(l,ij)*w_il(l,ij) - 1./(2.*Ai(ij))*dP 142 dW(l,ij) = (-1./Ai(ij))*divG 143 END DO 144 CASE(6) 145 edge1 = primal_edge(1,ij) 146 edge2 = primal_edge(2,ij) 147 edge3 = primal_edge(3,ij) 148 edge4 = primal_edge(4,ij) 149 edge5 = primal_edge(5,ij) 150 edge6 = primal_edge(6,ij) 151 le_de1 = le_de(edge1) 152 le_de2 = le_de(edge2) 153 le_de3 = le_de(edge3) 154 le_de4 = le_de(edge4) 155 le_de5 = le_de(edge5) 156 le_de6 = le_de(edge6) 157 sign1 = primal_ne(1,ij) 158 sign2 = primal_ne(2,ij) 159 sign3 = primal_ne(3,ij) 160 sign4 = primal_ne(4,ij) 161 sign5 = primal_ne(5,ij) 162 sign6 = primal_ne(6,ij) 163 !DIR$ SIMD 164 DO l = 1, llm+1 165 gPhi2=0. 166 dP=0. 167 divG=0 168 gPhi2 = gPhi2 + le_de1*DePhil(l,edge1)**2 169 dP = dP + le_de1*DePhil(l,edge1)*v_el(l,edge1) 170 divG = divG + sign1*G_el(l,edge1) ! -div(G_el), G_el already has le_de 171 gPhi2 = gPhi2 + le_de2*DePhil(l,edge2)**2 172 dP = dP + le_de2*DePhil(l,edge2)*v_el(l,edge2) 173 divG = divG + sign2*G_el(l,edge2) ! -div(G_el), G_el already has le_de 174 gPhi2 = gPhi2 + le_de3*DePhil(l,edge3)**2 175 dP = dP + le_de3*DePhil(l,edge3)*v_el(l,edge3) 176 divG = divG + sign3*G_el(l,edge3) ! -div(G_el), G_el already has le_de 177 gPhi2 = gPhi2 + le_de4*DePhil(l,edge4)**2 178 dP = dP + le_de4*DePhil(l,edge4)*v_el(l,edge4) 179 divG = divG + sign4*G_el(l,edge4) ! -div(G_el), G_el already has le_de 180 gPhi2 = gPhi2 + le_de5*DePhil(l,edge5)**2 181 dP = dP + le_de5*DePhil(l,edge5)*v_el(l,edge5) 182 divG = divG + sign5*G_el(l,edge5) ! -div(G_el), G_el already has le_de 183 gPhi2 = gPhi2 + le_de6*DePhil(l,edge6)**2 184 dP = dP + le_de6*DePhil(l,edge6)*v_el(l,edge6) 185 divG = divG + sign6*G_el(l,edge6) ! -div(G_el), G_el already has le_de 186 gradPhi2(l,ij) = 1./(2.*Ai(ij)) * gPhi2 187 dPhi(l,ij) = gradPhi2(l,ij)*w_il(l,ij) - 1./(2.*Ai(ij))*dP 188 dW(l,ij) = (-1./Ai(ij))*divG 189 END DO 190 CASE DEFAULT 191 !DIR$ SIMD 192 DO l = 1, llm+1 193 gPhi2=0. 194 dP=0. 195 divG=0 196 DO iedge = 1, primal_deg(ij) 197 edge = primal_edge(iedge,ij) 198 gPhi2 = gPhi2 + le_de(edge)*DePhil(l,edge)**2 199 dP = dP + le_de(edge)*DePhil(l,edge)*v_el(l,edge) 200 divG = divG + primal_ne(iedge,ij)*G_el(l,edge) ! -div(G_el), G_el already has le_de 201 END DO 202 gradPhi2(l,ij) = 1./(2.*Ai(ij)) * gPhi2 203 dPhi(l,ij) = gradPhi2(l,ij)*w_il(l,ij) - 1./(2.*Ai(ij))*dP 204 dW(l,ij) = (-1./Ai(ij))*divG 205 END DO 206 END SELECT 80 207 END DO 81 208 !$OMP END DO … … 85 212 !$OMP DO SCHEDULE(STATIC) 86 213 DO ij = 1, primal_num 87 DO l = 1, llm 88 u2=0. 89 DO iedge = 1, primal_deg(ij) 90 edge = primal_edge(iedge,ij) 91 u2 = u2 + le_de(edge)*u(l,edge)**2 92 END DO 93 berni(l,ij) = 1./(4.*Ai(ij)) * u2 - .25*( gradPhi2(l,ij)*w_il(l,ij)**2 + gradPhi2(l+1,ij)*w_il(l+1,ij)**2 ) 94 END DO 214 ! this VLOOP iterates over primal cell edges 215 SELECT CASE(primal_deg(ij)) 216 CASE(4) 217 edge1 = primal_edge(1,ij) 218 edge2 = primal_edge(2,ij) 219 edge3 = primal_edge(3,ij) 220 edge4 = primal_edge(4,ij) 221 le_de1 = le_de(edge1) 222 le_de2 = le_de(edge2) 223 le_de3 = le_de(edge3) 224 le_de4 = le_de(edge4) 225 !DIR$ SIMD 226 DO l = 1, llm 227 u2=0. 228 u2 = u2 + le_de1*u(l,edge1)**2 229 u2 = u2 + le_de2*u(l,edge2)**2 230 u2 = u2 + le_de3*u(l,edge3)**2 231 u2 = u2 + le_de4*u(l,edge4)**2 232 berni(l,ij) = 1./(4.*Ai(ij)) * u2 - .25*( gradPhi2(l,ij)*w_il(l,ij)**2 + gradPhi2(l+1,ij)*w_il(l+1,ij)**2 ) 233 END DO 234 CASE(5) 235 edge1 = primal_edge(1,ij) 236 edge2 = primal_edge(2,ij) 237 edge3 = primal_edge(3,ij) 238 edge4 = primal_edge(4,ij) 239 edge5 = primal_edge(5,ij) 240 le_de1 = le_de(edge1) 241 le_de2 = le_de(edge2) 242 le_de3 = le_de(edge3) 243 le_de4 = le_de(edge4) 244 le_de5 = le_de(edge5) 245 !DIR$ SIMD 246 DO l = 1, llm 247 u2=0. 248 u2 = u2 + le_de1*u(l,edge1)**2 249 u2 = u2 + le_de2*u(l,edge2)**2 250 u2 = u2 + le_de3*u(l,edge3)**2 251 u2 = u2 + le_de4*u(l,edge4)**2 252 u2 = u2 + le_de5*u(l,edge5)**2 253 berni(l,ij) = 1./(4.*Ai(ij)) * u2 - .25*( gradPhi2(l,ij)*w_il(l,ij)**2 + gradPhi2(l+1,ij)*w_il(l+1,ij)**2 ) 254 END DO 255 CASE(6) 256 edge1 = primal_edge(1,ij) 257 edge2 = primal_edge(2,ij) 258 edge3 = primal_edge(3,ij) 259 edge4 = primal_edge(4,ij) 260 edge5 = primal_edge(5,ij) 261 edge6 = primal_edge(6,ij) 262 le_de1 = le_de(edge1) 263 le_de2 = le_de(edge2) 264 le_de3 = le_de(edge3) 265 le_de4 = le_de(edge4) 266 le_de5 = le_de(edge5) 267 le_de6 = le_de(edge6) 268 !DIR$ SIMD 269 DO l = 1, llm 270 u2=0. 271 u2 = u2 + le_de1*u(l,edge1)**2 272 u2 = u2 + le_de2*u(l,edge2)**2 273 u2 = u2 + le_de3*u(l,edge3)**2 274 u2 = u2 + le_de4*u(l,edge4)**2 275 u2 = u2 + le_de5*u(l,edge5)**2 276 u2 = u2 + le_de6*u(l,edge6)**2 277 berni(l,ij) = 1./(4.*Ai(ij)) * u2 - .25*( gradPhi2(l,ij)*w_il(l,ij)**2 + gradPhi2(l+1,ij)*w_il(l+1,ij)**2 ) 278 END DO 279 CASE DEFAULT 280 !DIR$ SIMD 281 DO l = 1, llm 282 u2=0. 283 DO iedge = 1, primal_deg(ij) 284 edge = primal_edge(iedge,ij) 285 u2 = u2 + le_de(edge)*u(l,edge)**2 286 END DO 287 berni(l,ij) = 1./(4.*Ai(ij)) * u2 - .25*( gradPhi2(l,ij)*w_il(l,ij)**2 + gradPhi2(l+1,ij)*w_il(l+1,ij)**2 ) 288 END DO 289 END SELECT 95 290 END DO 96 291 !$OMP END DO … … 99 294 ij_left = left(edge) 100 295 ij_right = right(edge) 296 !DIR$ SIMD 101 297 DO l = 1, llm 102 298 ! Compute mass flux and grad(berni)
Note: See TracChangeset
for help on using the changeset viewer.