[614] | 1 | !-------------------------------------------------------------------------- |
---|
| 2 | !---------------------------- caldyn_fast ---------------------------------- |
---|
| 3 | ! |
---|
| 4 | SELECT CASE(caldyn_thermo) |
---|
| 5 | CASE(thermo_boussinesq) |
---|
| 6 | !$OMP DO SCHEDULE(STATIC) |
---|
| 7 | DO ij = 1, primal_num |
---|
[658] | 8 | !DIR$ SIMD |
---|
[614] | 9 | DO l = 1, llm |
---|
| 10 | berni(l,ij) = pk(l,ij) |
---|
| 11 | ! from now on pk contains the vertically-averaged geopotential |
---|
| 12 | pk(l,ij) = .5*(geopot(l,ij)+geopot(l+1,ij)) |
---|
| 13 | END DO |
---|
| 14 | END DO |
---|
| 15 | !$OMP END DO |
---|
| 16 | CASE(thermo_theta) |
---|
| 17 | !$OMP DO SCHEDULE(STATIC) |
---|
| 18 | DO ij = 1, primal_num |
---|
[658] | 19 | !DIR$ SIMD |
---|
[614] | 20 | DO l = 1, llm |
---|
[935] | 21 | Phi_ik = .5*(geopot(l,ij)+geopot(l+1,ij)) |
---|
| 22 | berni(l,ij) = Phi_ik |
---|
[614] | 23 | END DO |
---|
| 24 | END DO |
---|
| 25 | !$OMP END DO |
---|
| 26 | CASE(thermo_entropy) |
---|
| 27 | !$OMP DO SCHEDULE(STATIC) |
---|
| 28 | DO ij = 1, primal_num |
---|
[658] | 29 | !DIR$ SIMD |
---|
[614] | 30 | DO l = 1, llm |
---|
[935] | 31 | Phi_ik = .5*(geopot(l,ij)+geopot(l+1,ij)) |
---|
| 32 | berni(l,ij) = Phi_ik + pk(l,ij)*(cpp-theta(l,ij,1)) ! Gibbs = Cp.T-Ts = T(Cp-s) |
---|
[614] | 33 | END DO |
---|
| 34 | END DO |
---|
| 35 | !$OMP END DO |
---|
[837] | 36 | CASE(thermo_variable_Cp) |
---|
| 37 | !$OMP DO SCHEDULE(STATIC) |
---|
| 38 | DO ij = 1, primal_num |
---|
| 39 | !DIR$ SIMD |
---|
| 40 | DO l = 1, llm |
---|
[935] | 41 | Phi_ik = .5*(geopot(l,ij)+geopot(l+1,ij)) |
---|
| 42 | ! thermodynamics with variable Cp |
---|
| 43 | ! Cp(T) = Cp0 * (T/T0)^nu |
---|
| 44 | ! => h = Cp(T).T/(nu+1) |
---|
| 45 | cp_ik = cpp*(pk(ij,l)/Treff)**nu |
---|
| 46 | berni(l,ij) = Phi_ik + pk(l,ij)*(cp_ik/(nu+1.)-theta(l,ij,1)) ! Gibbs = h-Ts = T(Cp/(nu+1)-s) |
---|
[837] | 47 | END DO |
---|
| 48 | END DO |
---|
| 49 | !$OMP END DO |
---|
[614] | 50 | CASE DEFAULT |
---|
| 51 | PRINT *, 'Unsupported value of caldyn_thermo : ',caldyn_thermo ! FIXME |
---|
| 52 | STOP |
---|
| 53 | END SELECT |
---|
| 54 | ! |
---|
| 55 | !$OMP DO SCHEDULE(STATIC) |
---|
| 56 | DO edge = 1, edge_num |
---|
| 57 | ij_left = left(edge) |
---|
| 58 | ij_right = right(edge) |
---|
[658] | 59 | !DIR$ SIMD |
---|
[614] | 60 | DO l = 1, llm |
---|
| 61 | due = .5*(theta(l,ij_left,1)+theta(l,ij_right,1))*(pk(l,ij_right)-pk(l,ij_left)) + berni(l,ij_right)-berni(l,ij_left) |
---|
| 62 | du(l,edge) = du(l,edge) - 1.*due |
---|
| 63 | u(l,edge) = u(l,edge) + tau*du(l,edge) |
---|
| 64 | END DO |
---|
| 65 | END DO |
---|
| 66 | !$OMP END DO |
---|
| 67 | ! |
---|
| 68 | !---------------------------- caldyn_fast ---------------------------------- |
---|
| 69 | !-------------------------------------------------------------------------- |
---|