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

Last change on this file since 146 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
RevLine 
[115]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
[131]25  USE mpipara
[115]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)
[131]43  IF (is_mpi_root) PRINT *,'eta_top ->', eta_top
[115]44  do l = 1,llm+1
45     eta = (GG/Teq*exp(-N**2*(l-1)*ncar_dz/g)+1-GG/Teq)**(1./kappa)
[131]46     IF (is_mpi_root) PRINT *,'eta ->', eta
[115]47     bp(l) = ((eta - eta_top)/(1 - eta_top))**cindx
48     ap(l) = preff * ( eta - bp(l) )
49  ENDDO
[131]50  IF (is_mpi_root) PRINT *,'eta ->', eta
[115]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
[131]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 
[115]62
63END SUBROUTINE disvert
64
65END  MODULE disvert_dcmip31_mod
Note: See TracBrowser for help on using the repository browser.