source: LMDZ4/branches/LMDZ4-dev-20091210/libf/bibio/nf95_def_var_m.F90 @ 5071

Last change on this file since 5071 was 1263, checked in by lguez, 15 years ago

1) Reactivated ability to read ozone (that was deactivated because of
dependency on version of IOIPSL). Added ability to read a pressure
coordinate in Pa in "regr_lat_time_climoz".

2) Added the ability to read a second ozone climatology, corresponding to
daylight ozone:

-- "read_climoz" is now an integer variable, instead of a logical
variable.

-- Added argument "read_climoz" to "phys_state_var_init",
"phys_output_open" and "regr_lat_time_climoz".

-- Created new variable "ozone_daylight" for "hist*.nc" output files.

-- Added a third dimension to variable "wo" in module
"phys_state_var_mod" and variable "POZON" in "radlwsw": index 1 for
average day-night ozone, index 2 for daylight ozone.

-- Added a fourth dimension to variables "o3_in", "o3_regr_lat" and
"o3_out" in "regr_lat_time_climoz": index 1 for average day-night
ozone, index 2 for daylight ozone.

-- In "physiq", moved call to "conf_phys" before call to
"phys_state_var_init". Thus, "conf_phys" is now inside the block "if
(first)" instead of "IF (debut)". There were definitions of "bl95_b0"
and "bl95_b1" that were useless because the variables were overwritten
by "conf_phys". Removed those definitions.

-- In "radlwsw", we pass the average day-night ozone to "LW_LMDAR4"
and the daylight ozone, if we have it, to "SW_LMDAR4" or
"SW_AEROAR4". If we do not have a specific field for daylight ozone
then "SW_LMDAR4" or "SW_AEROAR4" just get the average day-night ozone.

-- "regr_lat_time_climoz" now manages latitudes where the input ozone
field is missing at all levels (polar night).

-- Encapsulated "radlwsw" in a module.

3) Modifications to make sequential and parallel versions of
"create_etat0_limit" almost identical:

-- In "dyn3dpar/create_etat0_limit.F". No need to call
"phys_state_var_init", removed "use phys_state_var_mod" statement. No
need for "clesphys.h", removed "include" statement.

-- In "dyn3dpar/etat0_netcdf.F". Added argument "tau_ratqs" in call to
"conf_phys" (this bug was already corrected in "dyn3d"). Moved call to
"inifilr" after call to "infotrac_init" (as in "dyn3d").

4) Other peripheral modifications:

-- Added procedures "nf95_get_att" and "nf95_def_var_scalar" in
NetCDF95 interface. Overloaded "nf95_put_var" with three more
procedures: "nf95_put_var_FourByteReal", "nf95_put_var_FourByteInt",
"nf95_put_var_1D_FourByteInt".

-- Overloaded "regr1_step_av" with one more procedure:
"regr14_step_av". Overloaded "regr3_lint" with one more procedure:
"regr34_lint".

-- Corrected call to "Init_Phys_lmdz" in "dyn3d/create_etat0_limit.F":
the last argument should be an array, not a scalar.

-- Encapsulated "conf_phys" in a module.

-- Splitted module "regr_pr" into "regr_pr_av_m" and "regr_pr_int_m".

5) Tests:

This revision was compared to revision 1259, with optimization options
"debug" and "dev", parallelization options "none", "mpi", "omp" and
"mpi_omp", 1 and 2 MPI processes, 1 and 2 OpenMP threads, with the
compiler "FORTRAN90/SX Version 2.0 for SX-8". Both programs
"create_etat0_limit" and "gcm" were tested. In all cases,
parallelization does not change the results. With "read_climoz = 0" in
the ".def" files, the results of revision 1259 and of this revision
are the same.

File size: 2.8 KB
Line 
1! $Id$
2module nf95_def_var_m
3
4  ! The generic procedure name "nf90_def_var" applies to
5  ! "nf90_def_var_Scalar" but we cannot apply the generic procedure name
6  ! "nf95_def_var" to "nf95_def_var_scalar" because of the additional
7  ! optional argument.
8  ! "nf95_def_var_scalar" cannot be distinguished from "nf95_def_var_oneDim".
9
10  implicit none
11
12  interface nf95_def_var
13    module procedure nf95_def_var_oneDim, nf95_def_var_ManyDims
14  end interface
15
16  private
17  public nf95_def_var, nf95_def_var_scalar
18
19contains
20
21  subroutine nf95_def_var_scalar(ncid, name, xtype, varid, ncerr)
22
23    use netcdf, only: nf90_def_var
24    use handle_err_m, only: handle_err
25
26    integer,               intent( in) :: ncid
27    character (len = *),   intent( in) :: name
28    integer,               intent( in) :: xtype
29    integer,               intent(out) :: varid
30    integer, intent(out), optional:: ncerr
31
32    ! Variable local to the procedure:
33    integer ncerr_not_opt
34
35    !-------------------
36
37    ncerr_not_opt = nf90_def_var(ncid, name, xtype, varid)
38    if (present(ncerr)) then
39       ncerr = ncerr_not_opt
40    else
41       call handle_err("nf95_def_var_scalar " // name, ncerr_not_opt, ncid)
42    end if
43
44  end subroutine nf95_def_var_scalar
45
46  !***********************
47
48  subroutine nf95_def_var_oneDim(ncid, name, xtype, dimids, varid, ncerr)
49
50    use netcdf, only: nf90_def_var
51    use handle_err_m, only: handle_err
52
53    integer,               intent( in) :: ncid
54    character (len = *),   intent( in) :: name
55    integer,               intent( in) :: xtype
56    integer,               intent( in) :: dimids
57    integer,               intent(out) :: varid
58    integer, intent(out), optional:: ncerr
59
60    ! Variable local to the procedure:
61    integer ncerr_not_opt
62
63    !-------------------
64
65    ncerr_not_opt = nf90_def_var(ncid, name, xtype, dimids, varid)
66    if (present(ncerr)) then
67       ncerr = ncerr_not_opt
68    else
69       call handle_err("nf95_def_var_oneDim " // name, ncerr_not_opt, ncid)
70    end if
71
72  end subroutine nf95_def_var_oneDim
73
74  !***********************
75
76  subroutine nf95_def_var_ManyDims(ncid, name, xtype, dimids, varid, ncerr)
77
78    use netcdf, only: nf90_def_var
79    use handle_err_m, only: handle_err
80
81    integer,               intent( in) :: ncid
82    character (len = *),   intent( in) :: name
83    integer,               intent( in) :: xtype
84    integer, dimension(:), intent( in) :: dimids
85    integer,               intent(out) :: varid
86    integer, intent(out), optional:: ncerr
87
88    ! Variable local to the procedure:
89    integer ncerr_not_opt
90
91    !-------------------
92
93    ncerr_not_opt = nf90_def_var(ncid, name, xtype, dimids, varid)
94    if (present(ncerr)) then
95       ncerr = ncerr_not_opt
96    else
97       call handle_err("nf95_def_var_ManyDims " // name, ncerr_not_opt, ncid)
98    end if
99
100  end subroutine nf95_def_var_ManyDims
101
102end module nf95_def_var_m
Note: See TracBrowser for help on using the repository browser.