source: codes/icosagcm/trunk/src/disvert_std.f90 @ 78

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

Simplify the management of the module.

YM

File size: 1.7 KB
Line 
1MODULE disvert_std_mod
2  USE icosa
3  REAL(rstd), SAVE, ALLOCATABLE,TARGET :: ap(:)
4  REAL(rstd), SAVE, ALLOCATABLE,TARGET :: bp(:)
5  REAL(rstd), SAVE, ALLOCATABLE,TARGET :: presnivs(:)
6
7CONTAINS
8
9  SUBROUTINE init_disvert
10  USE icosa
11  IMPLICIT NONE
12 
13    ALLOCATE(ap(llm+1))
14    ALLOCATE(bp(llm+1))
15    ALLOCATE(presnivs(llm))
16
17    CALL disvert(ap,bp,presnivs)   
18
19  END SUBROUTINE init_disvert 
20
21
22  SUBROUTINE disvert(ap,bp,presnivs)
23  USE icosa
24  IMPLICIT NONE
25  REAL(rstd),INTENT(OUT) :: ap(:)
26  REAL(rstd),INTENT(OUT) :: bp(:)
27  REAL(rstd),INTENT(OUT) :: presnivs(:)
28 
29  REAL(rstd) :: dsig(llm)
30  REAL(rstd) :: sig(llm+1)
31  REAL(rstd) :: snorm
32  INTEGER :: l
33 
34    snorm  = 0.
35    DO l = 1, llm
36      dsig(l) = 1.0 + 7.0 * SIN( Pi*(l-0.5)/(llm+1) )**2
37      snorm = snorm + dsig(l)
38    ENDDO   
39   
40    DO l = 1, llm
41      dsig(l) = dsig(l)/snorm
42    ENDDO
43
44    sig(llm+1) = 0.
45    DO l = llm, 1, -1
46      sig(l) = sig(l+1) + dsig(l)
47    ENDDO
48
49    bp(llm+1) =   0.
50    DO l = 1, llm
51      bp(l) = EXP( 1. -1./( sig(l)*sig(l)) )
52      ap(l) = pa * ( sig(l) - bp(l) )
53    ENDDO
54    bp(1)=1.
55    ap(1)=0.
56    ap(llm+1) = pa * ( sig(llm+1) - bp(llm+1) )
57   
58    PRINT*,'ap',ap
59    PRINT*,'bp',bp
60   
61    PRINT*, 'Niveaux de pressions approximatifs aux centres des'
62    PRINT*, 'couches calcules pour une pression de surface =', preff
63    PRINT*, 'et altitudes equivalentes pour une hauteur d echelle de'
64    PRINT*, '8km'
65   
66    DO l = 1, llm
67      presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff )
68 
69      PRINT*, 'PRESNIVS(',l,')=',presnivs(l),'  Z ~ ',log(preff/presnivs(l))*8.,       &
70              ' DZ ~ ',8.*log((ap(l)+bp(l)*preff)/ max(ap(l+1)+bp(l+1)*preff,1.e-10))
71    ENDDO
72 
73  END SUBROUTINE disvert
74 
75END MODULE disvert_std_mod
Note: See TracBrowser for help on using the repository browser.