GCC Code Coverage Report


Directory: ./
File: phys/press_coefoz_m.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 20 0.0%
Branches: 0 22 0.0%

Line Branch Exec Source
1 ! $Id$
2 module press_coefoz_m
3
4 implicit none
5
6 real, pointer, save:: plev(:)
7 ! (pressure level of Mobidic input data, converted to Pa, in strictly
8 ! ascending order)
9
10 real, allocatable, save:: press_in_edg(:)
11 ! (edges of pressure intervals for Mobidic input data, in Pa, in strictly
12 ! ascending order)
13
14 contains
15
16 ✗ subroutine press_coefoz
17
18 ! This procedure is called once per "gcm" run.
19 ! A single thread of the root process reads the pressure levels
20 ! from "coefoz_LMDZ.nc" and broadcasts them to the other processes.
21
22 ! We assume that, in "coefoz_LMDZ.nc", the pressure levels are in hPa
23 ! and in strictly ascending order.
24
25 use netcdf95, only: nf95_open, nf95_close, nf95_gw_var, nf95_inq_varid
26 use netcdf, only: nf90_nowrite
27
28 use mod_phys_lmdz_mpi_data, only: is_mpi_root
29 use mod_phys_lmdz_mpi_transfert, only: bcast_mpi ! broadcast
30
31 ! Variables local to the procedure:
32 integer ncid, varid ! for NetCDF
33 integer n_plev ! number of pressure levels in the input data
34 integer k
35
36 !---------------------------------------
37
38 !$omp single
39 ✗ print *, "Call sequence information: press_coefoz"
40
41 ✗ if (is_mpi_root) then
42 ✗ call nf95_open("coefoz_LMDZ.nc", nf90_nowrite, ncid)
43
44 ✗ call nf95_inq_varid(ncid, "plev", varid)
45 ✗ call nf95_gw_var(ncid, varid, plev)
46 ! Convert from hPa to Pa because "paprs" and "pplay" are in Pa:
47 ✗ plev = plev * 100.
48 ✗ n_plev = size(plev)
49
50 ✗ call nf95_close(ncid)
51 end if
52
53 ✗ call bcast_mpi(n_plev)
54 ✗ if (.not. is_mpi_root) allocate(plev(n_plev))
55 ✗ call bcast_mpi(plev)
56
57 ! Compute edges of pressure intervals:
58 ✗ allocate(press_in_edg(n_plev + 1))
59 ✗ if (is_mpi_root) then
60 ✗ press_in_edg(1) = 0.
61 ! We choose edges halfway in logarithm:
62 ✗ DO k = 2,n_plev
63 ✗ press_in_edg(k) = SQRT(plev(k - 1) * plev(k))
64 ENDDO
65 ✗ press_in_edg(n_plev + 1) = huge(0.)
66 ! (infinity, but any value guaranteed to be greater than the
67 ! surface pressure would do)
68 end if
69 ✗ call bcast_mpi(press_in_edg)
70 !$omp end single
71
72 ✗ end subroutine press_coefoz
73
74 end module press_coefoz_m
75