LMDZ
Main Page
Modules
Data Types List
Files
File List
File Members
press_coefoz_m.F90
Go to the documentation of this file.
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
mod_phys_lmdz_mpi_transfert
Definition:
mod_phys_lmdz_mpi_transfert.F90:4
netcdf95
Definition:
netcdf95.F90:2
press_coefoz_m::press_in_edg
real, dimension(:), allocatable, save press_in_edg
Definition:
press_coefoz_m.F90:10
mod_phys_lmdz_mpi_transfert::bcast_mpi
Definition:
mod_phys_lmdz_mpi_transfert.F90:7
mod_phys_lmdz_mpi_data::is_mpi_root
logical, save is_mpi_root
Definition:
mod_phys_lmdz_mpi_data.F90:39
press_coefoz_m
Definition:
press_coefoz_m.F90:2
press_coefoz_m::press_coefoz
subroutine press_coefoz
Definition:
press_coefoz_m.F90:17
press_coefoz_m::plev
real, dimension(:), pointer, save plev
Definition:
press_coefoz_m.F90:6
mod_phys_lmdz_mpi_data
Definition:
mod_phys_lmdz_mpi_data.F90:4
libf
phylmd
press_coefoz_m.F90
Generated on Wed Dec 2 2015 16:27:09 for LMDZ by
1.8.9.1