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

Last change on this file since 156 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
RevLine 
[33]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
[131]11  USE mpipara
[33]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
[131]26  USE mpipara
[33]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                   
[66]96    ap(:)=a(31:1:-1)*preff
97    bp(:)=b(31:1:-1) 
[33]98    DO l = 1, llm
99      presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff )
100 
[131]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))
[33]103    ENDDO
104 
105  END SUBROUTINE disvert
106 
107END MODULE disvert_ncarl30_mod
Note: See TracBrowser for help on using the repository browser.