source: codes/icosagcm/devel/src/dynamics/compute_theta.F90 @ 851

Last change on this file since 851 was 831, checked in by dubos, 5 years ago

devel : separate module for compute_theta

File size: 1.2 KB
Line 
1MODULE compute_theta_mod
2  USE grid_param, ONLY : llm
3  IMPLICIT NONE
4  PRIVATE
5
6  PUBLIC :: compute_theta
7
8CONTAINS
9
10  SUBROUTINE compute_theta(ps,theta_rhodz, rhodz,theta)
11    USE icosa
12    USE trace, ONLY : trace_start, trace_end
13    USE omp_para, ONLY : ll_begin, ll_end
14    USE disvert_mod, ONLY : mass_dak, mass_dbk, caldyn_eta, eta_mass, ptop
15    REAL(rstd),INTENT(IN)    :: ps(iim*jjm)
16    REAL(rstd),INTENT(IN)    :: theta_rhodz(iim*jjm,llm,nqdyn)
17    REAL(rstd),INTENT(INOUT) :: rhodz(iim*jjm,llm)
18    REAL(rstd),INTENT(OUT)   :: theta(iim*jjm,llm,nqdyn)
19    INTEGER :: ij,l,iq
20    REAL(rstd) :: m
21    CALL trace_start("compute_theta")
22
23    IF(caldyn_eta==eta_mass) THEN ! Compute mass
24       DO l = ll_begin,ll_end
25          !DIR$ SIMD
26          DO ij=ij_begin_ext,ij_end_ext
27             m = mass_dak(l)+(ps(ij)*g+ptop)*mass_dbk(l) ! ps is actually Ms
28             rhodz(ij,l) = m/g
29          END DO
30       END DO
31    END IF
32
33    DO l = ll_begin,ll_end
34       DO iq=1,nqdyn
35          !DIR$ SIMD
36          DO ij=ij_begin_ext,ij_end_ext
37             theta(ij,l,iq) = theta_rhodz(ij,l,iq)/rhodz(ij,l)
38          END DO
39       END DO
40    END DO
41
42    CALL trace_end("compute_theta")
43  END SUBROUTINE compute_theta
44 
45END MODULE compute_theta_mod
Note: See TracBrowser for help on using the repository browser.