Changeset 659


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

devel/codegen : update NH kernels

File:
1 edited

Legend:

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

    r615 r659  
    1414  g2=g*g 
    1515  gm2 = 1./g2 
     16  vreff = Treff*cpp/preff*kappa 
    1617  gamma = 1./(1.-kappa) 
    1718     
     
    3738    CASE(thermo_entropy) 
    3839      {% call() compute_p_and_Aik() %} 
    39         X_ij = Treff*exp(theta(CELL)/cpp) ! theta = Tref.exp(s/Cp) 
    40         X_ij = (cpp/preff)*kappa*X_ij*rho_ij 
    41         p_ik(CELL) = preff*(X_ij**gamma) 
     40        X_ij = log(vreff*rho_ij) + theta(CELL)/cpp 
     41        p_ik(CELL) = preff*exp(X_ij*gamma) 
    4242        c2_mik = gamma*p_ik(CELL)/(rho_ij*m_ik(CELL)) ! c^2 = gamma*R*T = gamma*p/rho 
    4343      {% endcall %} 
     
    125125END_BLOCK 
    126126 
    127 KERNEL(caldyn_solver) 
     127KERNEL(caldyn_mil) 
    128128  FORALL_CELLS_EXT('1', 'llm+1') 
    129129    ON_PRIMAL 
     
    133133    END_BLOCK 
    134134  END_BLOCK 
    135   ! 
    136   IF(tau>0) THEN ! solve implicit problem for geopotential 
    137     CALL compute_NH_geopot(tau,PHI_BOT_VAR, rhodz, m_il, theta, W, geopot) 
    138   END IF 
     135END_BLOCK 
     136 
     137KERNEL(caldyn_solver) 
    139138  !  
    140139  ! Compute pressure (pres) and Exner function (pk) 
     
    142141  ! 1-kappa = Cv/Cp 
    143142  ! Cp/Cv = 1/(1-kappa) 
    144   gamma = 1./(1.-kappa) 
     143  gamma    = 1./(1.-kappa) 
    145144  vreff    = Rd*Treff/preff ! reference specific volume 
    146   Cvd   = cpp-Rd 
     145  Cvd      = 1./(cpp-Rd) 
     146  Rd_preff = kappa*cpp/preff 
    147147  FORALL_CELLS_EXT() 
    148148    SELECT CASE(caldyn_thermo) 
    149149    CASE(thermo_theta) 
    150150      ON_PRIMAL 
    151         rho_ij = g*rhodz(CELL)/(geopot(UP(CELL))-geopot(CELL)) 
    152         X_ij = (cpp/preff)*kappa*theta(CELL,1)*rho_ij 
     151        rho_ij = 1./(geopot(UP(CELL))-geopot(CELL)) 
     152        rho_ij = rho_ij*g*rhodz(CELL) 
     153        X_ij = Rd_preff*theta(CELL,1)*rho_ij 
    153154        ! kappa.theta.rho = p/exner 
    154155        ! => X = (p/p0)/(exner/Cp) 
     
    161162    CASE(thermo_entropy) 
    162163      ON_PRIMAL 
    163         rho_ij = g*rhodz(CELL)/(geopot(UP(CELL))-geopot(CELL)) 
    164         T_ij = Treff*exp( (theta(CELL,1)+Rd*log(vreff*rho_ij))/Cvd ) 
     164        rho_ij = 1./(geopot(UP(CELL))-geopot(CELL)) 
     165        rho_ij = rho_ij*g*rhodz(CELL) 
     166        T_ij = Treff*exp( (theta(CELL,1)+Rd*log(vreff*rho_ij))*Cvd ) 
    165167        pres(CELL) = rho_ij*Rd*T_ij 
    166168        pk(CELL)   = T_ij 
Note: See TracChangeset for help on using the changeset viewer.