Ignore:
Timestamp:
12/30/17 02:00:38 (7 years ago)
Author:
dubos
Message:

devel/unstructured : updated kernels

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/src/kernels_unst/caldyn_slow_hydro.k90

    r614 r658  
    55      ij_left = left(edge) 
    66      ij_right = right(edge) 
     7      !DIR$ SIMD 
    78      DO l = 1, llm 
    89         uu = .5*(rhodz(l,ij_left)+rhodz(l,ij_right))*u(l,edge) 
     
    1314   !$OMP DO SCHEDULE(STATIC) 
    1415   DO ij = 1, primal_num 
    15       DO l = 1, llm 
    16          ke=0.d0 
    17          DO iedge = 1, primal_deg(ij) 
    18             edge = primal_edge(iedge,ij) 
    19             ke = ke + le_de(edge)*u(l,edge)**2 
     16      ! this VLOOP iterates over primal cell edges 
     17      SELECT CASE(primal_deg(ij)) 
     18      CASE(4) 
     19         edge1 = primal_edge(1,ij) 
     20         edge2 = primal_edge(2,ij) 
     21         edge3 = primal_edge(3,ij) 
     22         edge4 = primal_edge(4,ij) 
     23         le_de1 = le_de(edge1) 
     24         le_de2 = le_de(edge2) 
     25         le_de3 = le_de(edge3) 
     26         le_de4 = le_de(edge4) 
     27         !DIR$ SIMD 
     28         DO l = 1, llm 
     29            ke=0.d0 
     30            ke = ke + le_de1*u(l,edge1)**2 
     31            ke = ke + le_de2*u(l,edge2)**2 
     32            ke = ke + le_de3*u(l,edge3)**2 
     33            ke = ke + le_de4*u(l,edge4)**2 
     34            BERNI(l,ij)=ke*(.25/Ai(ij)) 
    2035         END DO 
    21          BERNI(l,ij)=ke*(.25/Ai(ij)) 
    22       END DO 
     36      CASE(5) 
     37         edge1 = primal_edge(1,ij) 
     38         edge2 = primal_edge(2,ij) 
     39         edge3 = primal_edge(3,ij) 
     40         edge4 = primal_edge(4,ij) 
     41         edge5 = primal_edge(5,ij) 
     42         le_de1 = le_de(edge1) 
     43         le_de2 = le_de(edge2) 
     44         le_de3 = le_de(edge3) 
     45         le_de4 = le_de(edge4) 
     46         le_de5 = le_de(edge5) 
     47         !DIR$ SIMD 
     48         DO l = 1, llm 
     49            ke=0.d0 
     50            ke = ke + le_de1*u(l,edge1)**2 
     51            ke = ke + le_de2*u(l,edge2)**2 
     52            ke = ke + le_de3*u(l,edge3)**2 
     53            ke = ke + le_de4*u(l,edge4)**2 
     54            ke = ke + le_de5*u(l,edge5)**2 
     55            BERNI(l,ij)=ke*(.25/Ai(ij)) 
     56         END DO 
     57      CASE(6) 
     58         edge1 = primal_edge(1,ij) 
     59         edge2 = primal_edge(2,ij) 
     60         edge3 = primal_edge(3,ij) 
     61         edge4 = primal_edge(4,ij) 
     62         edge5 = primal_edge(5,ij) 
     63         edge6 = primal_edge(6,ij) 
     64         le_de1 = le_de(edge1) 
     65         le_de2 = le_de(edge2) 
     66         le_de3 = le_de(edge3) 
     67         le_de4 = le_de(edge4) 
     68         le_de5 = le_de(edge5) 
     69         le_de6 = le_de(edge6) 
     70         !DIR$ SIMD 
     71         DO l = 1, llm 
     72            ke=0.d0 
     73            ke = ke + le_de1*u(l,edge1)**2 
     74            ke = ke + le_de2*u(l,edge2)**2 
     75            ke = ke + le_de3*u(l,edge3)**2 
     76            ke = ke + le_de4*u(l,edge4)**2 
     77            ke = ke + le_de5*u(l,edge5)**2 
     78            ke = ke + le_de6*u(l,edge6)**2 
     79            BERNI(l,ij)=ke*(.25/Ai(ij)) 
     80         END DO 
     81      CASE DEFAULT 
     82         !DIR$ SIMD 
     83         DO l = 1, llm 
     84            ke=0.d0 
     85            DO iedge = 1, primal_deg(ij) 
     86               edge = primal_edge(iedge,ij) 
     87               ke = ke + le_de(edge)*u(l,edge)**2 
     88            END DO 
     89            BERNI(l,ij)=ke*(.25/Ai(ij)) 
     90         END DO 
     91      END SELECT 
    2392   END DO 
    2493   !$OMP END DO 
     
    2897         ij_left = left(edge) 
    2998         ij_right = right(edge) 
     99         !DIR$ SIMD 
    30100         DO l = 1, llm 
    31101            du(l,edge) = 1.*(berni(l,ij_left)-berni(l,ij_right)) ! minus gradient 
     
    38108         ij_left = left(edge) 
    39109         ij_right = right(edge) 
     110         !DIR$ SIMD 
    40111         DO l = 1, llm 
    41112            du(l,edge) = du(l,edge) + 1.*(berni(l,ij_left)-berni(l,ij_right)) ! minus gradient 
Note: See TracChangeset for help on using the changeset viewer.