source: codes/icosagcm/trunk/src/disvert_ncarl30.f90 @ 131

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

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

YM

File size: 4.1 KB
Line 
1MODULE disvert_ncarl30_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  USE mpipara
12  IMPLICIT NONE
13 
14    IF (llm/=30) STOP 'ERROR, the initialisation of this vertical discretisation must be done with 30 levels'
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
24  SUBROUTINE disvert(ap,bp,presnivs)
25  USE icosa
26  USE mpipara
27  IMPLICIT NONE
28  REAL(rstd),INTENT(OUT) :: ap(:)
29  REAL(rstd),INTENT(OUT) :: bp(:)
30  REAL(rstd),INTENT(OUT) :: presnivs(:)
31  INTEGER :: l
32  REAL(rstd) :: a(31)=(/ 0.00225523952394724, &
33                         0.00503169186413288, &
34                         0.0101579474285245 , &
35                         0.0185553170740604 , &
36                         0.0306691229343414 , &
37                         0.0458674766123295 , &
38                         0.0633234828710556 , &
39                         0.0807014182209969 , &
40                         0.0949410423636436 , &
41                         0.11169321089983   , &
42                         0.131401270627975  , &
43                         0.154586806893349  , &
44                         0.181863352656364  , &
45                         0.17459799349308   , &
46                         0.166050657629967  , &
47                         0.155995160341263  , &
48                         0.14416541159153   , &
49                         0.130248308181763  , &
50                         0.113875567913055  , &
51                         0.0946138575673103 , &
52                         0.0753444507718086 , &
53                         0.0576589405536652 , &
54                         0.0427346378564835 , &
55                         0.0316426791250706 , &
56                         0.0252212174236774 , &
57                         0.0191967375576496 , &
58                         0.0136180268600583 , &
59                         0.00853108894079924, &
60                         0.00397881818935275, &
61                         0.                 , &
62                         0. /) 
63                         
64  REAL(rstd) :: b(31)=(/ 0.                 , &
65                         0.                 , &
66                         0.                 , &
67                         0.                 , &
68                         0.                 , &
69                         0.                 , &
70                         0.                 , &
71                         0.                 , &
72                         0.                 , &
73                         0.                 , &
74                         0.                 , &
75                         0.                 , &
76                         0.                 , &
77                         0.0393548272550106 , &
78                         0.0856537595391273 , &
79                         0.140122056007385  , &
80                         0.204201176762581  , &
81                         0.279586911201477  , &
82                         0.368274360895157  , &
83                         0.47261056303978   , &
84                         0.576988518238068  , &
85                         0.672786951065063  , &
86                         0.753628432750702  , &
87                         0.813710987567902  , &
88                         0.848494648933411  , &
89                         0.881127893924713  , &
90                         0.911346435546875  , &
91                         0.938901245594025  , &
92                         0.963559806346893  , &
93                         0.985112190246582  , &
94                         1. /)                         
95                   
96    ap(:)=a(31:1:-1)*preff
97    bp(:)=b(31:1:-1) 
98    DO l = 1, llm
99      presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff )
100 
101     IF (is_mpi_root)  PRINT*, 'PRESNIVS(',l,')=',presnivs(l),'  Z ~ ',log(preff/presnivs(l))*8.,       &
102                               ' DZ ~ ',8.*log((ap(l)+bp(l)*preff)/ max(ap(l+1)+bp(l+1)*preff,1.e-10))
103    ENDDO
104 
105  END SUBROUTINE disvert
106 
107END MODULE disvert_ncarl30_mod
Note: See TracBrowser for help on using the repository browser.