!-------------------------------------------------------------------------- !---------------------------- curl_laplacian ---------------------------------- !$OMP DO SCHEDULE(STATIC) DO ij = 1, dual_num ! this VLOOP iterates over dual cell edges SELECT CASE(dual_deg(ij)) CASE(3) edge1 = dual_edge(1,ij) edge2 = dual_edge(2,ij) edge3 = dual_edge(3,ij) sign1 = dual_ne(1,ij) sign2 = dual_ne(2,ij) sign3 = dual_ne(3,ij) !DIR$ SIMD DO l = 1, llm etav = 0.d0 etav = etav + sign1*u(l,edge1) etav = etav + sign2*u(l,edge2) etav = etav + sign3*u(l,edge3) qv(l,ij) = etav/Av(ij) END DO CASE(4) edge1 = dual_edge(1,ij) edge2 = dual_edge(2,ij) edge3 = dual_edge(3,ij) edge4 = dual_edge(4,ij) sign1 = dual_ne(1,ij) sign2 = dual_ne(2,ij) sign3 = dual_ne(3,ij) sign4 = dual_ne(4,ij) !DIR$ SIMD DO l = 1, llm etav = 0.d0 etav = etav + sign1*u(l,edge1) etav = etav + sign2*u(l,edge2) etav = etav + sign3*u(l,edge3) etav = etav + sign4*u(l,edge4) qv(l,ij) = etav/Av(ij) END DO CASE DEFAULT !DIR$ SIMD DO l = 1, llm etav = 0.d0 DO iedge = 1, dual_deg(ij) edge = dual_edge(iedge,ij) etav = etav + dual_ne(iedge,ij)*u(l,edge) END DO qv(l,ij) = etav/Av(ij) END DO END SELECT END DO !$OMP END DO !$OMP DO SCHEDULE(STATIC) DO edge = 1, edge_num ij_up = up(edge) ij_down = down(edge) !DIR$ SIMD DO l = 1, llm curlcurl(l,edge) = 1.*(qv(l,ij_down)-qv(l,ij_up))*(1./le_de(edge)) END DO END DO !$OMP END DO !---------------------------- curl_laplacian ---------------------------------- !--------------------------------------------------------------------------