source: codes/icosagcm/devel/src/initial/etat0_dcmip2016_cyclone.f90 @ 732

Last change on this file since 732 was 732, checked in by dubos, 6 years ago

devel : more cleanup and reorganization in dynamics/

File size: 1.9 KB
Line 
1MODULE 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
10CONTAINS
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
70END MODULE etat0_dcmip2016_cyclone_mod
Note: See TracBrowser for help on using the repository browser.