1 | MODULE etat0_dcmip2016_cyclone_mod |
---|
2 | USE icosa |
---|
3 | USE caldyn_vars_mod |
---|
4 | IMPLICIT NONE |
---|
5 | PRIVATE |
---|
6 | |
---|
7 | |
---|
8 | PUBLIC getin_etat0, compute_etat0 |
---|
9 | |
---|
10 | CONTAINS |
---|
11 | |
---|
12 | SUBROUTINE getin_etat0 |
---|
13 | USE mpipara, ONLY : is_mpi_root |
---|
14 | |
---|
15 | IF(nqtot<5) THEN |
---|
16 | IF (is_mpi_root) THEN |
---|
17 | PRINT *, "nqtot must be at least 5 for test case DCMIP2016 tropical cyclone" |
---|
18 | END IF |
---|
19 | STOP |
---|
20 | END IF |
---|
21 | |
---|
22 | END SUBROUTINE getin_etat0 |
---|
23 | |
---|
24 | SUBROUTINE compute_etat0(ngrid,lon,lat, phis, ps, Temp, ulon, ulat, q) |
---|
25 | USE disvert_mod |
---|
26 | USE omp_para |
---|
27 | USE dcmip2016_cyclone_mod, ONLY : tropical_cyclone_test |
---|
28 | USE terminator, ONLY: initial_value_Terminator |
---|
29 | IMPLICIT NONE |
---|
30 | INTEGER, INTENT(IN) :: ngrid |
---|
31 | REAL(rstd),INTENT(IN) :: lon(ngrid) |
---|
32 | REAL(rstd),INTENT(IN) :: lat(ngrid) |
---|
33 | REAL(rstd),INTENT(OUT) :: ps(ngrid) |
---|
34 | REAL(rstd),INTENT(OUT) :: phis(ngrid) |
---|
35 | REAL(rstd),INTENT(OUT) :: Temp(ngrid,llm) |
---|
36 | REAL(rstd),INTENT(OUT) :: ulon(ngrid,llm) |
---|
37 | REAL(rstd),INTENT(OUT) :: ulat(ngrid,llm) |
---|
38 | REAL(rstd),INTENT(OUT) :: q(ngrid,llm,nqtot) |
---|
39 | |
---|
40 | INTEGER :: zcoords |
---|
41 | REAL :: p,z |
---|
42 | REAL :: rho, thetav |
---|
43 | INTEGER :: l,ij |
---|
44 | |
---|
45 | |
---|
46 | DO ij=1,ngrid |
---|
47 | z=0. |
---|
48 | zcoords=1 |
---|
49 | CALL tropical_cyclone_test(lon(ij),lat(ij),p,z,zcoords,ulon(ij,1),ulat(ij,1), & |
---|
50 | temp(ij,1),thetav,phis(ij),ps(ij),rho,q(ij,1,1)) |
---|
51 | |
---|
52 | zcoords=0 |
---|
53 | DO l=ll_begin,ll_end |
---|
54 | p=0.5*(ap(l)+ap(l+1) + (bp(l)+bp(l+1)) * ps(ij)) |
---|
55 | CALL tropical_cyclone_test(lon(ij),lat(ij),p,z,zcoords,ulon(ij,l),ulat(ij,l), & |
---|
56 | temp(ij,l),thetav,phis(ij),ps(ij),rho,q(ij,l,1)) |
---|
57 | |
---|
58 | IF (physics_thermo==thermo_fake_moist) temp(ij,l)=Temp(ij,l)*(1+0.608*q(ij,l,1)) |
---|
59 | q(ij,l,2)=0. |
---|
60 | q(ij,l,3)=0. |
---|
61 | CALL initial_value_Terminator(lat(ij),lon(ij),q(ij,l,4),q(ij,l,5)) |
---|
62 | END DO |
---|
63 | ENDDO |
---|
64 | |
---|
65 | |
---|
66 | END SUBROUTINE compute_etat0 |
---|
67 | |
---|
68 | |
---|
69 | |
---|
70 | END MODULE etat0_dcmip2016_cyclone_mod |
---|