Ignore:
Timestamp:
06/21/19 01:01:34 (5 years ago)
Author:
dubos
Message:

devel : separate modules for caldyn_vert and caldyn_vert_NH

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/Python/src/kernels_caldyn_hevi.jin

    r878 r928  
    1 KERNEL(caldyn_wflux) 
    2   SEQUENCE_C0 
    3     BODY('llm-1,1,-1') 
    4       ! cumulate mass flux convergence from top to bottom 
    5       convm(CELL) = convm(CELL) + convm(UP(CELL)) 
    6     END_BLOCK 
    7     EPILOGUE(1) 
    8       dmass_col(HIDX(CELL)) = convm(CELL) 
    9     END_BLOCK 
    10     BODY('2,llm') 
    11       ! Compute vertical mass flux (l=1,llm+1 set to zero at init) 
    12       wflux(CELL) = mass_bl(CELL) * dmass_col(HIDX(CELL)) - convm(CELL)  
    13     END_BLOCK 
    14   END_BLOCK 
    15   ! make sure wflux is up to date 
    16   BARRIER 
    17 END_BLOCK 
    18  
    19 KERNEL(caldyn_dmass) 
    20   FORALL_CELLS() 
    21     ON_PRIMAL 
    22       convm(CELL) = mass_dbk(CELL) * dmass_col(HIDX(CELL)) 
    23     END_BLOCK 
    24   END_BLOCK 
    25 END_BLOCK 
    26  
    27 KERNEL(caldyn_vert) 
    28  
    29   DO iq=1,nqdyn 
    30     FORALL_CELLS('2', 'llm') 
    31       ON_PRIMAL 
    32         dtheta_rhodz(CELL,iq) = dtheta_rhodz(CELL,iq) + 0.5*(theta(CELL,iq)+theta(DOWN(CELL),iq))*wflux(CELL)   
    33       END_BLOCK 
    34     END_BLOCK 
    35     FORALL_CELLS('1', 'llm-1') 
    36       ON_PRIMAL 
    37         dtheta_rhodz(CELL,iq) = dtheta_rhodz(CELL,iq) - 0.5*(theta(CELL,iq)+theta(UP(CELL),iq))*wflux(UP(CELL))   
    38       END_BLOCK 
    39     END_BLOCK 
    40   END DO 
    41  
    42   IF(caldyn_vert_variant == caldyn_vert_cons) THEN 
    43     ! conservative vertical transport of momentum : (F/m)du/deta = 1/m (d/deta(Fu)-u.dF/deta) 
    44     FORALL_CELLS('2','llm') 
    45       ON_EDGES 
    46         wwuu(EDGE) = .25*(wflux(CELL1)+wflux(CELL2))*(u(EDGE)+u(DOWN(EDGE))) ! Fu 
    47       END_BLOCK 
    48     END_BLOCK 
    49     ! make sure wwuu is up to date 
    50     BARRIER 
    51  
    52     FORALL_CELLS() 
    53       ON_EDGES 
    54         dFu_deta = wwuu(UP(EDGE))-wwuu(EDGE)                                          ! d/deta (F*u) 
    55         dF_deta  = .5*(wflux(UP(CELL1))+wflux(UP(CELL2))-(wflux(CELL1)+wflux(CELL2))) ! d/deta(F) 
    56         du(EDGE) = du(EDGE) - (dFu_deta-u(EDGE)*dF_deta) / (.5*(rhodz(CELL1)+rhodz(CELL2)))  ! (F/m)du/deta 
    57       END_BLOCK 
    58     END_BLOCK 
    59   ELSE   
    60     FORALL_CELLS('2','llm') 
    61       ON_EDGES 
    62         wwuu(EDGE) = .5*(wflux(CELL1)+wflux(CELL2))*(u(EDGE)-u(DOWN(EDGE))) 
    63       END_BLOCK 
    64     END_BLOCK 
    65  
    66     ! make sure wwuu is up to date 
    67     BARRIER 
    68  
    69     FORALL_CELLS() 
    70       ON_EDGES 
    71         du(EDGE) = du(EDGE) - (wwuu(EDGE)+wwuu(UP(EDGE))) / (rhodz(CELL1)+rhodz(CELL2)) 
    72       END_BLOCK 
    73     END_BLOCK 
    74   END IF 
    75  
    76 END_BLOCK 
    77  
    781KERNEL(gradient) 
    792  FORALL_CELLS_EXT() 
     
    9518  END_BLOCK 
    9619END_BLOCK 
    97  
    98  
Note: See TracChangeset for help on using the changeset viewer.