!-------------------------------------------------------------------------- !---------------------------- coriolis ---------------------------------- ! DO iq=1,nqdyn !$OMP DO SCHEDULE(STATIC) DO edge = 1, edge_num ij_left = left(edge) ij_right = right(edge) !DIR$ SIMD DO l = 1, llm Ftheta(l,edge) = .5*(theta(l,ij_left,iq)+theta(l,ij_right,iq))*hflux(l,edge) END DO END DO !$OMP END DO !$OMP DO SCHEDULE(STATIC) DO ij = 1, primal_num ! this VLOOP iterates over primal cell edges SELECT CASE(primal_deg(ij)) CASE(4) edge1 = primal_edge(1,ij) edge2 = primal_edge(2,ij) edge3 = primal_edge(3,ij) edge4 = primal_edge(4,ij) sign1 = primal_ne(1,ij) sign2 = primal_ne(2,ij) sign3 = primal_ne(3,ij) sign4 = primal_ne(4,ij) !DIR$ SIMD DO l = 1, llm divF=0. divF = divF + Ftheta(l,edge1)*sign1 divF = divF + Ftheta(l,edge2)*sign2 divF = divF + Ftheta(l,edge3)*sign3 divF = divF + Ftheta(l,edge4)*sign4 dtheta_rhodz(l,ij,iq) = -divF / Ai(ij) END DO CASE(5) edge1 = primal_edge(1,ij) edge2 = primal_edge(2,ij) edge3 = primal_edge(3,ij) edge4 = primal_edge(4,ij) edge5 = primal_edge(5,ij) sign1 = primal_ne(1,ij) sign2 = primal_ne(2,ij) sign3 = primal_ne(3,ij) sign4 = primal_ne(4,ij) sign5 = primal_ne(5,ij) !DIR$ SIMD DO l = 1, llm divF=0. divF = divF + Ftheta(l,edge1)*sign1 divF = divF + Ftheta(l,edge2)*sign2 divF = divF + Ftheta(l,edge3)*sign3 divF = divF + Ftheta(l,edge4)*sign4 divF = divF + Ftheta(l,edge5)*sign5 dtheta_rhodz(l,ij,iq) = -divF / Ai(ij) END DO CASE(6) edge1 = primal_edge(1,ij) edge2 = primal_edge(2,ij) edge3 = primal_edge(3,ij) edge4 = primal_edge(4,ij) edge5 = primal_edge(5,ij) edge6 = primal_edge(6,ij) sign1 = primal_ne(1,ij) sign2 = primal_ne(2,ij) sign3 = primal_ne(3,ij) sign4 = primal_ne(4,ij) sign5 = primal_ne(5,ij) sign6 = primal_ne(6,ij) !DIR$ SIMD DO l = 1, llm divF=0. divF = divF + Ftheta(l,edge1)*sign1 divF = divF + Ftheta(l,edge2)*sign2 divF = divF + Ftheta(l,edge3)*sign3 divF = divF + Ftheta(l,edge4)*sign4 divF = divF + Ftheta(l,edge5)*sign5 divF = divF + Ftheta(l,edge6)*sign6 dtheta_rhodz(l,ij,iq) = -divF / Ai(ij) END DO CASE DEFAULT !DIR$ SIMD DO l = 1, llm divF=0. DO iedge = 1, primal_deg(ij) edge = primal_edge(iedge,ij) divF = divF + Ftheta(l,edge)*primal_ne(iedge,ij) END DO dtheta_rhodz(l,ij,iq) = -divF / Ai(ij) END DO END SELECT END DO !$OMP END DO END DO ! iq ! !$OMP DO SCHEDULE(STATIC) DO ij = 1, primal_num ! this VLOOP iterates over primal cell edges SELECT CASE(primal_deg(ij)) CASE(4) edge1 = primal_edge(1,ij) edge2 = primal_edge(2,ij) edge3 = primal_edge(3,ij) edge4 = primal_edge(4,ij) sign1 = primal_ne(1,ij) sign2 = primal_ne(2,ij) sign3 = primal_ne(3,ij) sign4 = primal_ne(4,ij) !DIR$ SIMD DO l = 1, llm divF=0. divF = divF + hflux(l,edge1)*sign1 divF = divF + hflux(l,edge2)*sign2 divF = divF + hflux(l,edge3)*sign3 divF = divF + hflux(l,edge4)*sign4 convm(l,ij) = -divF / Ai(ij) END DO CASE(5) edge1 = primal_edge(1,ij) edge2 = primal_edge(2,ij) edge3 = primal_edge(3,ij) edge4 = primal_edge(4,ij) edge5 = primal_edge(5,ij) sign1 = primal_ne(1,ij) sign2 = primal_ne(2,ij) sign3 = primal_ne(3,ij) sign4 = primal_ne(4,ij) sign5 = primal_ne(5,ij) !DIR$ SIMD DO l = 1, llm divF=0. divF = divF + hflux(l,edge1)*sign1 divF = divF + hflux(l,edge2)*sign2 divF = divF + hflux(l,edge3)*sign3 divF = divF + hflux(l,edge4)*sign4 divF = divF + hflux(l,edge5)*sign5 convm(l,ij) = -divF / Ai(ij) END DO CASE(6) edge1 = primal_edge(1,ij) edge2 = primal_edge(2,ij) edge3 = primal_edge(3,ij) edge4 = primal_edge(4,ij) edge5 = primal_edge(5,ij) edge6 = primal_edge(6,ij) sign1 = primal_ne(1,ij) sign2 = primal_ne(2,ij) sign3 = primal_ne(3,ij) sign4 = primal_ne(4,ij) sign5 = primal_ne(5,ij) sign6 = primal_ne(6,ij) !DIR$ SIMD DO l = 1, llm divF=0. divF = divF + hflux(l,edge1)*sign1 divF = divF + hflux(l,edge2)*sign2 divF = divF + hflux(l,edge3)*sign3 divF = divF + hflux(l,edge4)*sign4 divF = divF + hflux(l,edge5)*sign5 divF = divF + hflux(l,edge6)*sign6 convm(l,ij) = -divF / Ai(ij) END DO CASE DEFAULT !DIR$ SIMD DO l = 1, llm divF=0. DO iedge = 1, primal_deg(ij) edge = primal_edge(iedge,ij) divF = divF + hflux(l,edge)*primal_ne(iedge,ij) END DO convm(l,ij) = -divF / Ai(ij) END DO END SELECT END DO !$OMP END DO ! !$OMP DO SCHEDULE(STATIC) DO edge = 1, edge_num ! this VLOOP iterates over the TRISK stencil SELECT CASE(trisk_deg(edge)) CASE(4) !DIR$ SIMD DO l = 1, llm du_trisk=0. itrisk = 1 edge_trisk = trisk(1,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) itrisk = 2 edge_trisk = trisk(2,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) itrisk = 3 edge_trisk = trisk(3,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) itrisk = 4 edge_trisk = trisk(4,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) du(l,edge) = du(l,edge) + .5*du_trisk END DO CASE(10) !DIR$ SIMD DO l = 1, llm du_trisk=0. itrisk = 1 edge_trisk = trisk(1,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) itrisk = 2 edge_trisk = trisk(2,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) itrisk = 3 edge_trisk = trisk(3,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) itrisk = 4 edge_trisk = trisk(4,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) itrisk = 5 edge_trisk = trisk(5,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) itrisk = 6 edge_trisk = trisk(6,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) itrisk = 7 edge_trisk = trisk(7,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) itrisk = 8 edge_trisk = trisk(8,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) itrisk = 9 edge_trisk = trisk(9,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) itrisk = 10 edge_trisk = trisk(10,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) du(l,edge) = du(l,edge) + .5*du_trisk END DO CASE DEFAULT !DIR$ SIMD DO l = 1, llm du_trisk=0. DO itrisk = 1, trisk_deg(edge) edge_trisk = trisk(itrisk,edge) du_trisk = du_trisk + wee(itrisk,edge)*hflux(l,edge_trisk)*(qu(l,edge)+qu(l,edge_trisk)) END DO du(l,edge) = du(l,edge) + .5*du_trisk END DO END SELECT END DO !$OMP END DO !---------------------------- coriolis ---------------------------------- !--------------------------------------------------------------------------