GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: phylmd/o3cm.F90 Lines: 0 22 0.0 %
Date: 2023-06-30 12:56:34 Branches: 0 6 0.0 %

Line Branch Exec Source
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