LMDZ
o3cm.F90
Go to the documentation of this file.
1 
2 ! $Id: o3cm.F90 2311 2015-06-25 07:45:24Z emillour $
3 
4 SUBROUTINE o3cm(amb, bmb, sortie, ntab)
5  IMPLICIT NONE
6  ! ======================================================================
7  ! Auteur(s): Z.X. Li (LMD/CNRS) date: 19930818
8  ! Objet: Ce programme calcule le contenu en ozone "sortie"
9  ! (unite: cm.atm) entre deux niveaux "amb" et "bmb" (unite: mb)
10  ! "ntab" est le nombre d'intervalles pour l'integration, sa
11  ! valeur depend bien sur de l'epaisseur de la couche et de
12  ! la precision qu'on souhaite a obtenir
13  ! ======================================================================
14  REAL amb, bmb, sortie
15  INTEGER ntab
16  ! ======================================================================
17  INTEGER n
18  REAL xtab(500), xa, xb, ya, yb, xincr
19  ! ======================================================================
20  EXTERNAL mbtozm
21  CHARACTER (LEN=20) :: modname = ''
22  CHARACTER (LEN=80) :: abort_message
23  ! ======================================================================
24  ! la fonction en ligne w(x) donne le profil de l'ozone en fonction
25  ! de l'altitude (unite: cm.atm / km)
26  ! (Green 1964, Appl. Opt. 3: 203-208)
27  REAL wp, xp, h, x, w, con
28  parameter(wp=0.218, xp=23.25, h=4.63, con=1.0)
29 
30  w(x) = wp/h*exp((x-xp)/h)/(con+exp((x-xp)/h))**2
31  ! ======================================================================
32  IF (ntab>499) THEN
33  abort_message = 'BIG ntab'
34  CALL abort_physic(modname, abort_message, 1)
35  END IF
36  xincr = (bmb-amb)/real(ntab)
37  xtab(1) = amb
38  DO n = 2, ntab
39  xtab(n) = xtab(n-1) + xincr
40  END DO
41  xtab(ntab+1) = bmb
42  sortie = 0.0
43  DO n = 1, ntab
44  CALL mbtozm(xtab(n), xa)
45  CALL mbtozm(xtab(n+1), xb)
46  xa = xa/1000.
47  xb = xb/1000.
48  ya = w(xa)
49  yb = w(xb)
50  sortie = sortie + (ya+yb)/2.0*abs(xb-xa)
51  END DO
52  RETURN
53 END SUBROUTINE o3cm
54 SUBROUTINE mbtozm(rmb, zm)
55  IMPLICIT NONE
56  ! ======================================================================
57  ! Auteur(s): Z.X. Li (LMD/CNRS)
58  ! Objet: transformer une hauteur de mb (rmb) en metre (zm)
59  ! ======================================================================
60  REAL rmb, zm
61  ! ======================================================================
62  REAL gama, tzero, pzero, g, r
63  parameter(gama=6.5e-3, tzero=288., pzero=1013.25)
64  parameter(g=9.81, r=287.0)
65 
66  zm = tzero/gama*(1.-(rmb/pzero)**(r*gama/g))
67  RETURN
68 END SUBROUTINE mbtozm
subroutine o3cm(amb, bmb, sortie, ntab)
Definition: o3cm.F90:5
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
subroutine abort_physic(modname, message, ierr)
Definition: abort_physic.F90:3
subroutine mbtozm(rmb, zm)
Definition: o3cm.F90:55