Changeset 658 for codes/icosagcm/devel/src/kernels_unst/coriolis.k90
- Timestamp:
- 12/30/17 02:00:38 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/kernels_unst/coriolis.k90
r614 r658 7 7 ij_left = left(edge) 8 8 ij_right = right(edge) 9 !DIR$ SIMD 9 10 DO l = 1, llm 10 11 Ftheta(l,edge) = .5*(theta(l,ij_left,iq)+theta(l,ij_right,iq))*hflux(l,edge) … … 14 15 !$OMP DO SCHEDULE(STATIC) 15 16 DO ij = 1, primal_num 16 DO l = 1, llm 17 divF=0. 18 DO iedge = 1, primal_deg(ij) 19 edge = primal_edge(iedge,ij) 20 divF = divF + Ftheta(l,edge)*primal_ne(iedge,ij) 21 END DO 22 dtheta_rhodz(l,ij,iq) = -divF / Ai(ij) 23 END DO 17 ! this VLOOP iterates over primal cell edges 18 SELECT CASE(primal_deg(ij)) 19 CASE(4) 20 edge1 = primal_edge(1,ij) 21 edge2 = primal_edge(2,ij) 22 edge3 = primal_edge(3,ij) 23 edge4 = primal_edge(4,ij) 24 sign1 = primal_ne(1,ij) 25 sign2 = primal_ne(2,ij) 26 sign3 = primal_ne(3,ij) 27 sign4 = primal_ne(4,ij) 28 !DIR$ SIMD 29 DO l = 1, llm 30 divF=0. 31 divF = divF + Ftheta(l,edge1)*sign1 32 divF = divF + Ftheta(l,edge2)*sign2 33 divF = divF + Ftheta(l,edge3)*sign3 34 divF = divF + Ftheta(l,edge4)*sign4 35 dtheta_rhodz(l,ij,iq) = -divF / Ai(ij) 36 END DO 37 CASE(5) 38 edge1 = primal_edge(1,ij) 39 edge2 = primal_edge(2,ij) 40 edge3 = primal_edge(3,ij) 41 edge4 = primal_edge(4,ij) 42 edge5 = primal_edge(5,ij) 43 sign1 = primal_ne(1,ij) 44 sign2 = primal_ne(2,ij) 45 sign3 = primal_ne(3,ij) 46 sign4 = primal_ne(4,ij) 47 sign5 = primal_ne(5,ij) 48 !DIR$ SIMD 49 DO l = 1, llm 50 divF=0. 51 divF = divF + Ftheta(l,edge1)*sign1 52 divF = divF + Ftheta(l,edge2)*sign2 53 divF = divF + Ftheta(l,edge3)*sign3 54 divF = divF + Ftheta(l,edge4)*sign4 55 divF = divF + Ftheta(l,edge5)*sign5 56 dtheta_rhodz(l,ij,iq) = -divF / Ai(ij) 57 END DO 58 CASE(6) 59 edge1 = primal_edge(1,ij) 60 edge2 = primal_edge(2,ij) 61 edge3 = primal_edge(3,ij) 62 edge4 = primal_edge(4,ij) 63 edge5 = primal_edge(5,ij) 64 edge6 = primal_edge(6,ij) 65 sign1 = primal_ne(1,ij) 66 sign2 = primal_ne(2,ij) 67 sign3 = primal_ne(3,ij) 68 sign4 = primal_ne(4,ij) 69 sign5 = primal_ne(5,ij) 70 sign6 = primal_ne(6,ij) 71 !DIR$ SIMD 72 DO l = 1, llm 73 divF=0. 74 divF = divF + Ftheta(l,edge1)*sign1 75 divF = divF + Ftheta(l,edge2)*sign2 76 divF = divF + Ftheta(l,edge3)*sign3 77 divF = divF + Ftheta(l,edge4)*sign4 78 divF = divF + Ftheta(l,edge5)*sign5 79 divF = divF + Ftheta(l,edge6)*sign6 80 dtheta_rhodz(l,ij,iq) = -divF / Ai(ij) 81 END DO 82 CASE DEFAULT 83 !DIR$ SIMD 84 DO l = 1, llm 85 divF=0. 86 DO iedge = 1, primal_deg(ij) 87 edge = primal_edge(iedge,ij) 88 divF = divF + Ftheta(l,edge)*primal_ne(iedge,ij) 89 END DO 90 dtheta_rhodz(l,ij,iq) = -divF / Ai(ij) 91 END DO 92 END SELECT 24 93 END DO 25 94 !$OMP END DO … … 28 97 !$OMP DO SCHEDULE(STATIC) 29 98 DO ij = 1, primal_num 30 DO l = 1, llm 31 divF=0. 32 DO iedge = 1, primal_deg(ij) 33 edge = primal_edge(iedge,ij) 34 divF = divF + hflux(l,edge)*primal_ne(iedge,ij) 35 END DO 36 convm(l,ij) = -divF / Ai(ij) 37 END DO 99 ! this VLOOP iterates over primal cell edges 100 SELECT CASE(primal_deg(ij)) 101 CASE(4) 102 edge1 = primal_edge(1,ij) 103 edge2 = primal_edge(2,ij) 104 edge3 = primal_edge(3,ij) 105 edge4 = primal_edge(4,ij) 106 sign1 = primal_ne(1,ij) 107 sign2 = primal_ne(2,ij) 108 sign3 = primal_ne(3,ij) 109 sign4 = primal_ne(4,ij) 110 !DIR$ SIMD 111 DO l = 1, llm 112 divF=0. 113 divF = divF + hflux(l,edge1)*sign1 114 divF = divF + hflux(l,edge2)*sign2 115 divF = divF + hflux(l,edge3)*sign3 116 divF = divF + hflux(l,edge4)*sign4 117 convm(l,ij) = -divF / Ai(ij) 118 END DO 119 CASE(5) 120 edge1 = primal_edge(1,ij) 121 edge2 = primal_edge(2,ij) 122 edge3 = primal_edge(3,ij) 123 edge4 = primal_edge(4,ij) 124 edge5 = primal_edge(5,ij) 125 sign1 = primal_ne(1,ij) 126 sign2 = primal_ne(2,ij) 127 sign3 = primal_ne(3,ij) 128 sign4 = primal_ne(4,ij) 129 sign5 = primal_ne(5,ij) 130 !DIR$ SIMD 131 DO l = 1, llm 132 divF=0. 133 divF = divF + hflux(l,edge1)*sign1 134 divF = divF + hflux(l,edge2)*sign2 135 divF = divF + hflux(l,edge3)*sign3 136 divF = divF + hflux(l,edge4)*sign4 137 divF = divF + hflux(l,edge5)*sign5 138 convm(l,ij) = -divF / Ai(ij) 139 END DO 140 CASE(6) 141 edge1 = primal_edge(1,ij) 142 edge2 = primal_edge(2,ij) 143 edge3 = primal_edge(3,ij) 144 edge4 = primal_edge(4,ij) 145 edge5 = primal_edge(5,ij) 146 edge6 = primal_edge(6,ij) 147 sign1 = primal_ne(1,ij) 148 sign2 = primal_ne(2,ij) 149 sign3 = primal_ne(3,ij) 150 sign4 = primal_ne(4,ij) 151 sign5 = primal_ne(5,ij) 152 sign6 = primal_ne(6,ij) 153 !DIR$ SIMD 154 DO l = 1, llm 155 divF=0. 156 divF = divF + hflux(l,edge1)*sign1 157 divF = divF + hflux(l,edge2)*sign2 158 divF = divF + hflux(l,edge3)*sign3 159 divF = divF + hflux(l,edge4)*sign4 160 divF = divF + hflux(l,edge5)*sign5 161 divF = divF + hflux(l,edge6)*sign6 162 convm(l,ij) = -divF / Ai(ij) 163 END DO 164 CASE DEFAULT 165 !DIR$ SIMD 166 DO l = 1, llm 167 divF=0. 168 DO iedge = 1, primal_deg(ij) 169 edge = primal_edge(iedge,ij) 170 divF = divF + hflux(l,edge)*primal_ne(iedge,ij) 171 END DO 172 convm(l,ij) = -divF / Ai(ij) 173 END DO 174 END SELECT 38 175 END DO 39 176 !$OMP END DO … … 41 178 !$OMP DO SCHEDULE(STATIC) 42 179 DO edge = 1, edge_num 43 DO l = 1, llm 44 du_trisk=0. 45 DO itrisk = 1, trisk_deg(edge) 46 edge_trisk = trisk(itrisk,edge) 47 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 48 END DO 49 du(l,edge) = du(l,edge) + .5*du_trisk 50 END DO 180 ! this VLOOP iterates over the TRISK stencil 181 SELECT CASE(trisk_deg(edge)) 182 CASE(10) 183 !DIR$ SIMD 184 DO l = 1, llm 185 du_trisk=0. 186 itrisk = 1 187 edge_trisk = trisk(1,edge) 188 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 189 itrisk = 2 190 edge_trisk = trisk(2,edge) 191 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 192 itrisk = 3 193 edge_trisk = trisk(3,edge) 194 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 195 itrisk = 4 196 edge_trisk = trisk(4,edge) 197 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 198 itrisk = 5 199 edge_trisk = trisk(5,edge) 200 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 201 itrisk = 6 202 edge_trisk = trisk(6,edge) 203 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 204 itrisk = 7 205 edge_trisk = trisk(7,edge) 206 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 207 itrisk = 8 208 edge_trisk = trisk(8,edge) 209 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 210 itrisk = 9 211 edge_trisk = trisk(9,edge) 212 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 213 itrisk = 10 214 edge_trisk = trisk(10,edge) 215 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 216 du(l,edge) = du(l,edge) + .5*du_trisk 217 END DO 218 CASE(4) 219 !DIR$ SIMD 220 DO l = 1, llm 221 du_trisk=0. 222 itrisk = 1 223 edge_trisk = trisk(1,edge) 224 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 225 itrisk = 2 226 edge_trisk = trisk(2,edge) 227 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 228 itrisk = 3 229 edge_trisk = trisk(3,edge) 230 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 231 itrisk = 4 232 edge_trisk = trisk(4,edge) 233 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 234 du(l,edge) = du(l,edge) + .5*du_trisk 235 END DO 236 CASE DEFAULT 237 !DIR$ SIMD 238 DO l = 1, llm 239 du_trisk=0. 240 DO itrisk = 1, trisk_deg(edge) 241 edge_trisk = trisk(itrisk,edge) 242 du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) 243 END DO 244 du(l,edge) = du(l,edge) + .5*du_trisk 245 END DO 246 END SELECT 51 247 END DO 52 248 !$OMP END DO
Note: See TracChangeset
for help on using the changeset viewer.