source: codes/icosagcm/trunk/src/disvert_ncar.f90 @ 17

Last change on this file since 17 was 17, checked in by ymipsl, 12 years ago

Merge advection scheme from sarvesh in standard version

YM

File size: 1.4 KB
Line 
1  MODULE disvert_ncar_mod
2  USE prec
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 grid_param
13  USE ioipsl
14  IMPLICIT NONE
15 
16    ALLOCATE(ap(llm+1))
17    ALLOCATE(bp(llm+1))
18    ALLOCATE(presnivs(llm))
19   
20    CALL disvert(ap,bp,presnivs)   
21
22  END SUBROUTINE init_disvert 
23
24
25  SUBROUTINE disvert(ap,bp,presnivs)
26  USE earth_const
27  USE math_const 
28  USE grid_param
29  IMPLICIT NONE
30  REAL(rstd),INTENT(OUT) :: ap(:)
31  REAL(rstd),INTENT(OUT) :: bp(:)
32  REAL(rstd),INTENT(OUT) :: presnivs(:)
33 
34  REAL(rstd) :: sig(llm+1)
35  REAL(rstd) :: sigtop
36  REAL(rstd),PARAMETER:: p0=100000.0 
37  INTEGER :: l,cindx
38  REAL(rstd) :: hdz, ehdz 
39
40
41         hdz = 400.*g/(300.*287.) 
42         ehdz = exp(-hdz) 
43
44    do l = 1,llm+1
45        sig(l) = ehdz**(l-1) 
46    end do 
47       
48       sigtop = sig(llm+1) 
49        cindx = 1 
50
51    bp(llm+1) =   0.
52    DO l = 1, llm
53      bp(l) = (sig(l) - sigtop)/(1 - sigtop)
54      bp(l) = bp(l)**cindx
55      ap(l) = p0 * ( sig(l) - bp(l) )
56    ENDDO
57    bp(1)=1.
58    ap(1)=0.
59    ap(llm+1) = p0 * ( sig(llm+1) - bp(llm+1) )
60 
61    DO l = 1, llm
62      presnivs(l) = 0.5 *( ap(l)+bp(l)*p0 + ap(l+1)+bp(l+1)*p0 )
63   ENDDO
64
65  END SUBROUTINE disvert
66
67END  MODULE disvert_ncar_mod
Note: See TracBrowser for help on using the repository browser.