Ignore:
Timestamp:
12/08/17 15:08:49 (6 years ago)
Author:
dubos
Message:

devel : introduced kernels for caldyn_vert (optional)

File:
1 edited

Legend:

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

    r614 r624  
    11   !-------------------------------------------------------------------------- 
    22   !---------------------------- caldyn_vert ---------------------------------- 
    3    !$OMP DO SCHEDULE(STATIC) 
    4    DO ij=1,primal_num 
    5       DO l = llm-1,1,-1 
    6          ! cumulate mass flux convergence from top to bottom 
    7          convm(l,ij) = convm(l,ij) + convm(l+1,ij) 
    8       END DO 
    9       l=1 
    10       dmass_col(ij) = convm(l,ij) 
    11       DO l = 2,llm 
    12          ! Compute vertical mass flux (l=1,llm+1 set to zero at init) 
    13          wflux(l,ij) = mass_bl(l,ij) * dmass_col(ij) - convm(l,ij) 
    14       END DO 
    15    END DO 
    16    !$OMP END DO 
    17    ! make sure wflux is up to date 
    18    !$OMP BARRIER 
    19    !$OMP DO SCHEDULE(STATIC) 
    20    DO edge = 1, edge_num 
    21       ij_left = left(edge) 
    22       ij_right = right(edge) 
    23       DO l = 2, llm 
    24          wwuu(l,edge) = .5*(wflux(l,ij_left)+wflux(l,ij_right))*(u(l,edge)-u(l-1,edge)) 
    25       END DO 
    26    END DO 
    27    !$OMP END DO 
    28    ! make sure wwuu is up to date 
    29    !$OMP BARRIER 
    30    !$OMP DO SCHEDULE(STATIC) 
    31    DO ij = 1, primal_num 
    32       DO l = 1, llm 
    33          convm(l,ij) = mass_dbk(l,ij) * dmass_col(ij) ! FIXME : we shoud prognose mass_col 
    34       END DO 
    35    END DO 
    36    !$OMP END DO 
    37    !$OMP DO SCHEDULE(STATIC) 
    38    DO edge = 1, edge_num 
    39       ij_left = left(edge) 
    40       ij_right = right(edge) 
    41       DO l = 1, llm 
    42          du(l,edge) = du(l,edge) - (wwuu(l,edge)+wwuu(l+1,edge)) / (rhodz(l,ij_left)+rhodz(l,ij_right)) 
    43       END DO 
    44    END DO 
    45    !$OMP END DO 
    463   DO iq=1,nqdyn 
    474      !$OMP DO SCHEDULE(STATIC) 
     
    6017      !$OMP END DO 
    6118   END DO 
     19   IF(caldyn_vert_variant == caldyn_vert_cons) THEN 
     20      ! conservative vertical transport of momentum : (F/m)du/deta = 1/m (d/deta(Fu)-u.dF/deta) 
     21      !$OMP DO SCHEDULE(STATIC) 
     22      DO edge = 1, edge_num 
     23         ij_left = left(edge) 
     24         ij_right = right(edge) 
     25         DO l = 2, llm 
     26            wwuu(l,edge) = .25*(wflux(l,ij_left)+wflux(l,ij_right))*(u(l,edge)+u(l-1,edge)) ! Fu 
     27         END DO 
     28      END DO 
     29      !$OMP END DO 
     30      ! make sure wwuu is up to date 
     31      !$OMP BARRIER 
     32      !$OMP DO SCHEDULE(STATIC) 
     33      DO edge = 1, edge_num 
     34         ij_left = left(edge) 
     35         ij_right = right(edge) 
     36         DO l = 1, llm 
     37            dFu_deta = wwuu(l+1,edge)-wwuu(l,edge) ! d/deta (F*u) 
     38            dF_deta = .5*(wflux(l+1,ij_left)+wflux(l+1,ij_right)-(wflux(l,ij_left)+wflux(l,ij_right))) ! d/deta(F) 
     39            du(l,edge) = du(l,edge) - (dFu_deta-u(l,edge)*dF_deta) / (.5*(rhodz(l,ij_left)+rhodz(l,ij_right))) ! (F/m)du/deta 
     40         END DO 
     41      END DO 
     42      !$OMP END DO 
     43   ELSE 
     44      !$OMP DO SCHEDULE(STATIC) 
     45      DO edge = 1, edge_num 
     46         ij_left = left(edge) 
     47         ij_right = right(edge) 
     48         DO l = 2, llm 
     49            wwuu(l,edge) = .5*(wflux(l,ij_left)+wflux(l,ij_right))*(u(l,edge)-u(l-1,edge)) 
     50         END DO 
     51      END DO 
     52      !$OMP END DO 
     53      ! make sure wwuu is up to date 
     54      !$OMP BARRIER 
     55      !$OMP DO SCHEDULE(STATIC) 
     56      DO edge = 1, edge_num 
     57         ij_left = left(edge) 
     58         ij_right = right(edge) 
     59         DO l = 1, llm 
     60            du(l,edge) = du(l,edge) - (wwuu(l,edge)+wwuu(l+1,edge)) / (rhodz(l,ij_left)+rhodz(l,ij_right)) 
     61         END DO 
     62      END DO 
     63      !$OMP END DO 
     64   END IF 
    6265   !---------------------------- caldyn_vert ---------------------------------- 
    6366   !-------------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.