source: LMDZ5/branches/LMDZ5V2.0-dev/libf/dyn3dpar/disvert.F90 @ 5440

Last change on this file since 5440 was 1480, checked in by jghattas, 14 years ago

Put back modification done in revision 1472. This modification was done
to simplify the understanding of the code but it did also slightly change
the results. With this commit we got back the same results as in the revision
before 1472.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.6 KB
RevLine 
[1279]1! $Id: disvert.F90 1480 2011-01-31 21:29:58Z evignon $
[630]2
[1472]3SUBROUTINE disvert(pa, preff, ap, bp, dpres, presnivs, nivsigs, nivsig)
[630]4
[1472]5  ! Auteur : P. Le Van
[630]6
[1472]7  IMPLICIT NONE
[630]8
[1472]9  include "dimensions.h"
10  include "paramet.h"
11  include "iniprint.h"
12  include "logic.h"
[630]13
[1472]14  ! s = sigma ** kappa : coordonnee verticale
15  ! dsig(l) : epaisseur de la couche l ds la coord. s
16  ! sig(l) : sigma a l'interface des couches l et l-1
17  ! ds(l) : distance entre les couches l et l-1 en coord.s
[630]18
[1472]19  REAL pa, preff
20  REAL ap(llmp1), bp(llmp1), dpres(llm), nivsigs(llm), nivsig(llmp1)
21  REAL presnivs(llm)
[630]22
[1472]23  REAL sig(llm+1), dsig(llm)
24  real zk, zkm1, dzk1, dzk2, k0, k1
[630]25
[1472]26  INTEGER l
27  REAL dsigmin
28  REAL alpha, beta, deltaz, h
29  INTEGER iostat
30  REAL pi, x
[630]31
[1472]32  !-----------------------------------------------------------------------
33
34  pi = 2 * ASIN(1.)
35
36  OPEN(99, file='sigma.def', status='old', form='formatted', iostat=iostat)
37
38  IF (iostat == 0) THEN
39     ! cas 1 on lit les options dans sigma.def:
40     READ(99, *) h ! hauteur d'echelle 8.
41     READ(99, *) deltaz ! epaiseur de la premiere couche 0.04
42     READ(99, *) beta ! facteur d'acroissement en haut 1.3
43     READ(99, *) k0 ! nombre de couches dans la transition surf
44     READ(99, *) k1 ! nombre de couches dans la transition haute
45     CLOSE(99)
46     alpha=deltaz/(llm*h)
47     write(lunout, *)'h, alpha, k0, k1, beta'
48
49     alpha=deltaz/tanh(1./k0)*2.
50     zkm1=0.
51     sig(1)=1.
52     do l=1, llm
53        sig(l+1)=(cosh(l/k0))**(-alpha*k0/h) &
54             *exp(-alpha/h*tanh((llm-k1)/k0)*beta**(l-(llm-k1))/log(beta))
[630]55        zk=-h*log(sig(l+1))
56
57        dzk1=alpha*tanh(l/k0)
58        dzk2=alpha*tanh((llm-k1)/k0)*beta**(l-(llm-k1))/log(beta)
[1472]59        write(lunout, *)l, sig(l+1), zk, zk-zkm1, dzk1, dzk2
[630]60        zkm1=zk
[1472]61     enddo
[630]62
[1472]63     sig(llm+1)=0.
[630]64
[1472]65     DO l = 1, llm
66        dsig(l) = sig(l)-sig(l+1)
67     end DO
68  ELSE
69     if (ok_strato) then
70        if (llm==39) then
71           dsigmin=0.3
72        else if (llm==50) then
73           dsigmin=1.
74        else
75           WRITE(LUNOUT,*) 'ATTENTION discretisation z a ajuster'
76           dsigmin=1.
77        endif
78        WRITE(LUNOUT,*) 'Discretisation verticale DSIGMIN=',dsigmin
79     endif
[630]80
[1472]81     DO l = 1, llm
[1480]82        x = 2*asin(1.) * (l - 0.5) / (llm + 1)
[630]83
[1472]84        IF (ok_strato) THEN
85           dsig(l) =(dsigmin + 7. * SIN(x)**2) &
[1480]86                *(0.5*(1.-tanh(1.*(x-asin(1.))/asin(1.))))**2
[1472]87        ELSE
[1000]88           dsig(l) = 1.0 + 7.0 * SIN(x)**2
[1472]89        ENDIF
90     ENDDO
91     dsig = dsig / sum(dsig)
92     sig(llm+1) = 0.
93     DO l = llm, 1, -1
94        sig(l) = sig(l+1) + dsig(l)
95     ENDDO
96  ENDIF
[1000]97
[1472]98  DO l=1, llm
99     nivsigs(l) = REAL(l)
100  ENDDO
[630]101
[1472]102  DO l=1, llmp1
103     nivsig(l)= REAL(l)
104  ENDDO
[630]105
[1472]106  ! .... Calculs de ap(l) et de bp(l) ....
107  ! ..... pa et preff sont lus sur les fichiers start par lectba .....
[630]108
[1472]109  bp(llmp1) = 0.
[630]110
[1472]111  DO l = 1, llm
112     bp(l) = EXP( 1. -1./( sig(l)*sig(l)) )
113     ap(l) = pa * ( sig(l) - bp(l) )
114  ENDDO
[630]115
[1472]116  bp(1)=1.
117  ap(1)=0.
[630]118
[1472]119  ap(llmp1) = pa * ( sig(llmp1) - bp(llmp1) )
[630]120
[1472]121  write(lunout, *)' BP '
122  write(lunout, *) bp
123  write(lunout, *)' AP '
124  write(lunout, *) ap
[630]125
[1472]126  write(lunout, *) 'Niveaux de pressions approximatifs aux centres des'
127  write(lunout, *)'couches calcules pour une pression de surface =', preff
128  write(lunout, *) 'et altitudes equivalentes pour une hauteur d echelle de'
129  write(lunout, *)'8km'
130  DO l = 1, llm
131     dpres(l) = bp(l) - bp(l+1)
132     presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff )
133     write(lunout, *)'PRESNIVS(', l, ')=', presnivs(l), ' Z ~ ', &
134          log(preff/presnivs(l))*8. &
135          , ' DZ ~ ', 8.*log((ap(l)+bp(l)*preff)/ &
136          max(ap(l+1)+bp(l+1)*preff, 1.e-10))
137  ENDDO
[1279]138
[1472]139  write(lunout, *) 'PRESNIVS '
140  write(lunout, *) presnivs
[1279]141
[1472]142END SUBROUTINE disvert
Note: See TracBrowser for help on using the repository browser.