Changeset 658 for codes/icosagcm/devel/src/kernels_unst/caldyn_solver.k90
- Timestamp:
- 12/30/17 02:00:38 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/kernels_unst/caldyn_solver.k90
r614 r658 1 1 !-------------------------------------------------------------------------- 2 2 !---------------------------- caldyn_solver ---------------------------------- 3 !$OMP DO SCHEDULE(STATIC)4 DO ij = 1, primal_num5 l=16 m_il(l,ij) = .5*rhodz(l,ij)7 DO l = 2, llm8 m_il(l,ij) = .5*(rhodz(l,ij)+rhodz(l-1,ij))9 END DO10 l=llm+111 m_il(l,ij) = .5*rhodz(l-1,ij)12 END DO13 !$OMP END DO14 !15 IF(tau>0) THEN ! solve implicit problem for geopotential16 CALL compute_NH_geopot(tau,PHI_BOT_VAR, rhodz, m_il, theta, W, geopot)17 END IF18 3 ! 19 4 ! Compute pressure (pres) and Exner function (pk) … … 23 8 gamma = 1./(1.-kappa) 24 9 vreff = Rd*Treff/preff ! reference specific volume 25 Cvd = cpp-Rd 10 Cvd = 1./(cpp-Rd) 11 Rd_preff = kappa*cpp/preff 26 12 SELECT CASE(caldyn_thermo) 27 13 CASE(thermo_theta) 28 14 !$OMP DO SCHEDULE(STATIC) 29 15 DO ij = 1, primal_num 16 !DIR$ SIMD 30 17 DO l = 1, llm 31 rho_ij = g*rhodz(l,ij)/(geopot(l+1,ij)-geopot(l,ij)) 32 X_ij = (cpp/preff)*kappa*theta(l,ij,1)*rho_ij 18 rho_ij = 1./(geopot(l+1,ij)-geopot(l,ij)) 19 rho_ij = rho_ij*g*rhodz(l,ij) 20 X_ij = Rd_preff*theta(l,ij,1)*rho_ij 33 21 ! kappa.theta.rho = p/exner 34 22 ! => X = (p/p0)/(exner/Cp) … … 44 32 !$OMP DO SCHEDULE(STATIC) 45 33 DO ij = 1, primal_num 34 !DIR$ SIMD 46 35 DO l = 1, llm 47 rho_ij = g*rhodz(l,ij)/(geopot(l+1,ij)-geopot(l,ij)) 48 T_ij = Treff*exp( (theta(l,ij,1)+Rd*log(vreff*rho_ij))/Cvd ) 36 rho_ij = 1./(geopot(l+1,ij)-geopot(l,ij)) 37 rho_ij = rho_ij*g*rhodz(l,ij) 38 T_ij = Treff*exp( (theta(l,ij,1)+Rd*log(vreff*rho_ij))*Cvd ) 49 39 pres(l,ij) = rho_ij*Rd*T_ij 50 40 pk(l,ij) = T_ij … … 64 54 W(l,ij) = W(l,ij)+tau*dW(l,ij) ! update W 65 55 dPhi(l,ij) = g*g*W(l,ij)/m_il(l,ij) 56 !DIR$ SIMD 66 57 DO l = 2, llm 67 58 dW(l,ij) = (1./g)*(pres(l-1,ij)-pres(l,ij)) - m_il(l,ij) … … 80 71 !$OMP DO SCHEDULE(STATIC) 81 72 DO ij = 1, primal_num 73 !DIR$ SIMD 82 74 DO l = 1, llm 83 75 ! compute du = -0.5*g^2.grad(w^2) … … 90 82 ij_left = left(edge) 91 83 ij_right = right(edge) 84 !DIR$ SIMD 92 85 DO l = 1, llm 93 86 du(l,edge) = 1.*(berni(l,ij_left)-berni(l,ij_right))
Note: See TracChangeset
for help on using the changeset viewer.