Changeset 658 for codes/icosagcm/devel/src/kernels_unst/div.k90
- Timestamp:
- 12/30/17 02:00:38 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/kernels_unst/div.k90
r614 r658 3 3 !$OMP DO SCHEDULE(STATIC) 4 4 DO ij = 1, primal_num 5 DO l = 1, llm 6 div_ij=0. 7 DO iedge = 1, primal_deg(ij) 8 edge = primal_edge(iedge,ij) 9 div_ij = div_ij + primal_ne(iedge,ij)*le_de(edge)*u(l,edge) 5 ! this VLOOP iterates over primal cell edges 6 SELECT CASE(primal_deg(ij)) 7 CASE(4) 8 edge1 = primal_edge(1,ij) 9 edge2 = primal_edge(2,ij) 10 edge3 = primal_edge(3,ij) 11 edge4 = primal_edge(4,ij) 12 le_de1 = le_de(edge1) 13 le_de2 = le_de(edge2) 14 le_de3 = le_de(edge3) 15 le_de4 = le_de(edge4) 16 sign1 = primal_ne(1,ij) 17 sign2 = primal_ne(2,ij) 18 sign3 = primal_ne(3,ij) 19 sign4 = primal_ne(4,ij) 20 !DIR$ SIMD 21 DO l = 1, llm 22 div_ij=0. 23 div_ij = div_ij + sign1*le_de1*u(l,edge1) 24 div_ij = div_ij + sign2*le_de2*u(l,edge2) 25 div_ij = div_ij + sign3*le_de3*u(l,edge3) 26 div_ij = div_ij + sign4*le_de4*u(l,edge4) 27 divu(l,ij) = div_ij / Ai(ij) 10 28 END DO 11 divu(l,ij) = div_ij / Ai(ij) 12 END DO 29 CASE(5) 30 edge1 = primal_edge(1,ij) 31 edge2 = primal_edge(2,ij) 32 edge3 = primal_edge(3,ij) 33 edge4 = primal_edge(4,ij) 34 edge5 = primal_edge(5,ij) 35 le_de1 = le_de(edge1) 36 le_de2 = le_de(edge2) 37 le_de3 = le_de(edge3) 38 le_de4 = le_de(edge4) 39 le_de5 = le_de(edge5) 40 sign1 = primal_ne(1,ij) 41 sign2 = primal_ne(2,ij) 42 sign3 = primal_ne(3,ij) 43 sign4 = primal_ne(4,ij) 44 sign5 = primal_ne(5,ij) 45 !DIR$ SIMD 46 DO l = 1, llm 47 div_ij=0. 48 div_ij = div_ij + sign1*le_de1*u(l,edge1) 49 div_ij = div_ij + sign2*le_de2*u(l,edge2) 50 div_ij = div_ij + sign3*le_de3*u(l,edge3) 51 div_ij = div_ij + sign4*le_de4*u(l,edge4) 52 div_ij = div_ij + sign5*le_de5*u(l,edge5) 53 divu(l,ij) = div_ij / Ai(ij) 54 END DO 55 CASE(6) 56 edge1 = primal_edge(1,ij) 57 edge2 = primal_edge(2,ij) 58 edge3 = primal_edge(3,ij) 59 edge4 = primal_edge(4,ij) 60 edge5 = primal_edge(5,ij) 61 edge6 = primal_edge(6,ij) 62 le_de1 = le_de(edge1) 63 le_de2 = le_de(edge2) 64 le_de3 = le_de(edge3) 65 le_de4 = le_de(edge4) 66 le_de5 = le_de(edge5) 67 le_de6 = le_de(edge6) 68 sign1 = primal_ne(1,ij) 69 sign2 = primal_ne(2,ij) 70 sign3 = primal_ne(3,ij) 71 sign4 = primal_ne(4,ij) 72 sign5 = primal_ne(5,ij) 73 sign6 = primal_ne(6,ij) 74 !DIR$ SIMD 75 DO l = 1, llm 76 div_ij=0. 77 div_ij = div_ij + sign1*le_de1*u(l,edge1) 78 div_ij = div_ij + sign2*le_de2*u(l,edge2) 79 div_ij = div_ij + sign3*le_de3*u(l,edge3) 80 div_ij = div_ij + sign4*le_de4*u(l,edge4) 81 div_ij = div_ij + sign5*le_de5*u(l,edge5) 82 div_ij = div_ij + sign6*le_de6*u(l,edge6) 83 divu(l,ij) = div_ij / Ai(ij) 84 END DO 85 CASE DEFAULT 86 !DIR$ SIMD 87 DO l = 1, llm 88 div_ij=0. 89 DO iedge = 1, primal_deg(ij) 90 edge = primal_edge(iedge,ij) 91 div_ij = div_ij + primal_ne(iedge,ij)*le_de(edge)*u(l,edge) 92 END DO 93 divu(l,ij) = div_ij / Ai(ij) 94 END DO 95 END SELECT 13 96 END DO 14 97 !$OMP END DO
Note: See TracChangeset
for help on using the changeset viewer.