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/pvort_only.k90

    r614 r658  
    33   !$OMP DO SCHEDULE(STATIC) 
    44   DO ij = 1, dual_num 
    5       DO l = 1, llm 
    6          etav = 0.d0 
    7          DO iedge = 1, dual_deg(ij) 
    8             edge = dual_edge(iedge,ij) 
    9             etav = etav + dual_ne(iedge,ij)*u(l,edge) 
     5      ! this VLOOP iterates over dual cell edges 
     6      SELECT CASE(dual_deg(ij)) 
     7      CASE(3) 
     8         edge1 = dual_edge(1,ij) 
     9         edge2 = dual_edge(2,ij) 
     10         edge3 = dual_edge(3,ij) 
     11         sign1 = dual_ne(1,ij) 
     12         sign2 = dual_ne(2,ij) 
     13         sign3 = dual_ne(3,ij) 
     14         vertex1 = dual_vertex(1,ij) 
     15         vertex2 = dual_vertex(2,ij) 
     16         vertex3 = dual_vertex(3,ij) 
     17         !DIR$ SIMD 
     18         DO l = 1, llm 
     19            etav = 0.d0 
     20            etav = etav + sign1*u(l,edge1) 
     21            etav = etav + sign2*u(l,edge2) 
     22            etav = etav + sign3*u(l,edge3) 
     23            hv=0. 
     24            hv = hv + Riv2(1,ij)*rhodz(l,vertex1) 
     25            hv = hv + Riv2(2,ij)*rhodz(l,vertex2) 
     26            hv = hv + Riv2(3,ij)*rhodz(l,vertex3) 
     27            qv(l,ij) = (etav + fv(ij)*Av(ij) )/(hv*Av(ij)) 
    1028         END DO 
    11          hv=0. 
    12          DO ivertex = 1, dual_deg(ij) 
    13             vertex = dual_vertex(ivertex,ij) 
    14             hv = hv + Riv2(ivertex,ij)*rhodz(l,vertex) 
     29      CASE(4) 
     30         edge1 = dual_edge(1,ij) 
     31         edge2 = dual_edge(2,ij) 
     32         edge3 = dual_edge(3,ij) 
     33         edge4 = dual_edge(4,ij) 
     34         sign1 = dual_ne(1,ij) 
     35         sign2 = dual_ne(2,ij) 
     36         sign3 = dual_ne(3,ij) 
     37         sign4 = dual_ne(4,ij) 
     38         vertex1 = dual_vertex(1,ij) 
     39         vertex2 = dual_vertex(2,ij) 
     40         vertex3 = dual_vertex(3,ij) 
     41         vertex4 = dual_vertex(4,ij) 
     42         !DIR$ SIMD 
     43         DO l = 1, llm 
     44            etav = 0.d0 
     45            etav = etav + sign1*u(l,edge1) 
     46            etav = etav + sign2*u(l,edge2) 
     47            etav = etav + sign3*u(l,edge3) 
     48            etav = etav + sign4*u(l,edge4) 
     49            hv=0. 
     50            hv = hv + Riv2(1,ij)*rhodz(l,vertex1) 
     51            hv = hv + Riv2(2,ij)*rhodz(l,vertex2) 
     52            hv = hv + Riv2(3,ij)*rhodz(l,vertex3) 
     53            hv = hv + Riv2(4,ij)*rhodz(l,vertex4) 
     54            qv(l,ij) = (etav + fv(ij)*Av(ij) )/(hv*Av(ij)) 
    1555         END DO 
    16          qv(l,ij) = (etav + fv(ij)*Av(ij) )/(hv*Av(ij)) 
    17       END DO 
     56      CASE DEFAULT 
     57         !DIR$ SIMD 
     58         DO l = 1, llm 
     59            etav = 0.d0 
     60            DO iedge = 1, dual_deg(ij) 
     61               edge = dual_edge(iedge,ij) 
     62               etav = etav + dual_ne(iedge,ij)*u(l,edge) 
     63            END DO 
     64            hv=0. 
     65            DO ivertex = 1, dual_deg(ij) 
     66               vertex = dual_vertex(ivertex,ij) 
     67               hv = hv + Riv2(ivertex,ij)*rhodz(l,vertex) 
     68            END DO 
     69            qv(l,ij) = (etav + fv(ij)*Av(ij) )/(hv*Av(ij)) 
     70         END DO 
     71      END SELECT 
    1872   END DO 
    1973   !$OMP END DO 
     
    2276      ij_up = up(edge) 
    2377      ij_down = down(edge) 
     78      !DIR$ SIMD 
    2479      DO l = 1, llm 
    2580         qu(l,edge)=0.5d0*(qv(l,ij_down)+qv(l,ij_up)) 
Note: See TracChangeset for help on using the changeset viewer.