source: codes/icosagcm/trunk/src/disvert_dcmip3.f90 @ 176

Last change on this file since 176 was 131, checked in by ymipsl, 11 years ago

Some operations must be only done by the mpi master task.

YM

File size: 2.0 KB
Line 
1  MODULE disvert_dcmip31_mod
2  USE icosa
3 
4  REAL(rstd), SAVE, ALLOCATABLE,TARGET :: ap(:)
5  REAL(rstd), SAVE, ALLOCATABLE,TARGET :: bp(:)
6  REAL(rstd), SAVE, ALLOCATABLE,TARGET :: presnivs(:)
7
8CONTAINS
9!=========================================================================
10
11  SUBROUTINE init_disvert
12  USE icosa
13  IMPLICIT NONE
14 
15    ALLOCATE(ap(llm+1))
16    ALLOCATE(bp(llm+1))
17    ALLOCATE(presnivs(llm))
18   
19    CALL disvert(ap,bp,presnivs)   
20
21  END SUBROUTINE init_disvert 
22
23  SUBROUTINE disvert(ap,bp,presnivs)
24  USE icosa
25  USE mpipara
26  IMPLICIT NONE
27  REAL(rstd),INTENT(OUT) :: ap(:)
28  REAL(rstd),INTENT(OUT) :: bp(:)
29  REAL(rstd),INTENT(OUT) :: presnivs(:)
30  ! reads from run.def : ncar_dz, ncar_T0, ncar_p0, ncar_disvert_c
31  INTEGER :: l,cindx
32  REAL(rstd) :: GG, eta_top, eta
33  REAL(rstd),PARAMETER :: N=0.01         ! Brunt-Vaisala frequency (s-1)
34  REAL(rstd),PARAMETER :: Teq=300.       ! Surface temperature at the equator (K)
35  REAL(rstd),PARAMETER :: Peq=1e5        ! Reference surface pressure at the equator (hPa)
36
37  ncar_dz=400 ; CALL getin('ncar_dz',ncar_dz);
38  cindx=1 ; CALL getin('ncar_disvert_c',cindx)
39
40  GG=(g/N)**2/cpp
41 
42  eta_top = (GG/Teq*exp(-N**2*llm*ncar_dz/g)+1-GG/Teq)**(1./kappa)
43  IF (is_mpi_root) PRINT *,'eta_top ->', eta_top
44  do l = 1,llm+1
45     eta = (GG/Teq*exp(-N**2*(l-1)*ncar_dz/g)+1-GG/Teq)**(1./kappa)
46     IF (is_mpi_root) PRINT *,'eta ->', eta
47     bp(l) = ((eta - eta_top)/(1 - eta_top))**cindx
48     ap(l) = preff * ( eta - bp(l) )
49  ENDDO
50  IF (is_mpi_root) PRINT *,'eta ->', eta
51  bp(1)=1.
52  ap(1)=0.
53  bp(llm+1) = 0
54 
55  DO l = 1, llm
56     presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff )
57  ENDDO
58
59  IF (is_mpi_root) PRINT *, 'Vertical placement of model levels according to DCMIP Appendix E.3'
60  IF (is_mpi_root) PRINT *, 'Parameters : ncar_dz=', ncar_dz, '  ncar_p0=',ncar_p0, '  ncar_disvert_c=',cindx
61  IF (is_mpi_root) PRINT *, 'Isothermal amtosphere with ncar_T0=',ncar_T0 
62
63END SUBROUTINE disvert
64
65END  MODULE disvert_dcmip31_mod
Note: See TracBrowser for help on using the repository browser.