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

devel/unstructured : updated kernels

File:
1 edited

Legend:

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

    r614 r658  
    33   !$OMP DO SCHEDULE(STATIC) 
    44   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) 
    1028         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 
    1396   END DO 
    1497   !$OMP END DO 
Note: See TracChangeset for help on using the changeset viewer.