/[lmdze]/trunk/phylmd/Mobidic/regr_lat_time_coefoz.f
ViewVC logotype

Diff of /trunk/phylmd/Mobidic/regr_lat_time_coefoz.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/libf/phylmd/Mobidic/regr_lat_time_coefoz.f90 revision 13 by guez, Fri Jul 25 19:59:34 2008 UTC trunk/phylmd/Mobidic/regr_lat_time_coefoz.f revision 265 by guez, Tue Mar 20 09:35:59 2018 UTC
# Line 1  Line 1 
1  module regr_lat_time_coefoz_m  module regr_lat_time_coefoz_m
2    
   ! This module is clean: no C preprocessor directive, no include line.  
3    ! Author: Lionel GUEZ    ! Author: Lionel GUEZ
4    
5    implicit none    implicit none
# Line 37  contains Line 36  contains
36      ! -- time increases from January to December (even though we do      ! -- time increases from January to December (even though we do
37      ! not use values of the input time coordinate).      ! not use values of the input time coordinate).
38    
39      use dimens_m, only: jjm      use dimensions, only: jjm
40      use comgeom, only: rlatv      use dynetat0_m, only: rlatv
41      use comconst, only: pi      use nr_util, only: pi
42      use regr1_step_av_m, only: regr1_step_av      use numer_rec_95, only: regr3_lint, regr1_conserv, slopes
43      use regr3_lint_m, only: regr3_lint      use netcdf95, only: nf95_open, nf95_gw_var, nf95_close, &
     use netcdf95, only: nf95_open, nf95_get_coord, nf95_close, &  
44           nf95_inq_varid, handle_err, nf95_put_var           nf95_inq_varid, handle_err, nf95_put_var
45      use netcdf, only: nf90_nowrite, nf90_get_var      use netcdf, only: nf90_nowrite, nf90_get_var
46    
# Line 52  contains Line 50  contains
50      integer n_plev ! number of pressure levels in the input data      integer n_plev ! number of pressure levels in the input data
51      integer n_lat! number of latitudes in the input data      integer n_lat! number of latitudes in the input data
52    
53      real, pointer:: latitude(:)      real, allocatable:: latitude(:)
54      ! (of input data, converted to rad, sorted in strictly increasing order)      ! (of input data, converted to rad, sorted in strictly increasing order)
55    
56      real, allocatable:: lat_in_edg(:)      real, allocatable:: lat_in_edg(:)
57      ! (edges of latitude intervals for input data, in rad, in strictly      ! (edges of latitude intervals for input data, in rad, in strictly
58      ! increasing order)      ! increasing order)
59    
60      real, pointer:: plev(:) ! pressure level of input data      real, allocatable:: plev(:) ! pressure level of input data
61      logical decr_lat ! decreasing latitude in the input file      logical decr_lat ! decreasing latitude in the input file
62    
63      real, allocatable:: o3_par_in(:, :, :) ! (n_lat, n_plev, 12)      real, allocatable:: o3_par_in(:, :, :) ! (n_lat, n_plev, 12)
# Line 98  contains Line 96  contains
96      ! (name of NetCDF primary variable in the output file)      ! (name of NetCDF primary variable in the output file)
97    
98      integer varid_in(n_o3_param), varid_out(n_o3_param), varid_plev, varid_time      integer varid_in(n_o3_param), varid_out(n_o3_param), varid_plev, varid_time
99      integer ncerr      integer ncerr, varid
100      ! (for NetCDF)      ! (for NetCDF)
101    
102      real, parameter:: tmidmonth(0:13) = (/(-15. + 30. * j, j = 0, 13)/)      real, parameter:: tmidmonth(0:13) = (/(-15. + 30. * j, j = 0, 13)/)
# Line 127  contains Line 125  contains
125      name_out(i_v) = "a2"      name_out(i_v) = "a2"
126    
127      i_v = i_v + 1      i_v = i_v + 1
128      name_in(i_v) = "r"      name_in(i_v) = "tro3"
129      name_out(i_v) = "r_Mob"      name_out(i_v) = "r_Mob"
130    
131      i_v = i_v + 1      i_v = i_v + 1
# Line 150  contains Line 148  contains
148      name_in(i_v) = "R_Het"      name_in(i_v) = "R_Het"
149      name_out(i_v) = "R_Het"      name_out(i_v) = "R_Het"
150    
151      call nf95_open("coefoz_v2_3.nc", nf90_nowrite, ncid_in)      call nf95_open("coefoz.nc", nf90_nowrite, ncid_in)
152    
153      ! Get coordinates from the input file:      ! Get coordinates from the input file:
154    
155      call nf95_get_coord(ncid_in, "latitude", latitude)      call nf95_inq_varid(ncid_in, "latitude", varid)
156        call nf95_gw_var(ncid_in, varid, latitude)
157      ! Convert from degrees to rad, because "rlatv" is in rad:      ! Convert from degrees to rad, because "rlatv" is in rad:
158      latitude = latitude / 180. * pi      latitude = latitude / 180. * pi
159      n_lat = size(latitude)      n_lat = size(latitude)
# Line 168  contains Line 167  contains
167      lat_in_edg(1) = - pi / 2      lat_in_edg(1) = - pi / 2
168      forall (j = 2:n_lat) lat_in_edg(j) = (latitude(j - 1) + latitude(j)) / 2      forall (j = 2:n_lat) lat_in_edg(j) = (latitude(j - 1) + latitude(j)) / 2
169      lat_in_edg(n_lat + 1) = pi / 2      lat_in_edg(n_lat + 1) = pi / 2
     deallocate(latitude) ! pointer  
170    
171      call nf95_get_coord(ncid_in, "plev", plev)      call nf95_inq_varid(ncid_in, "plev", varid)
172        call nf95_gw_var(ncid_in, varid, plev)
173      n_plev = size(plev)      n_plev = size(plev)
174      ! (We only need the pressure coordinate to copy it to the output file.)      ! (We only need the pressure coordinate to copy it to the output file.)
175    
# Line 187  contains Line 186  contains
186      call nf95_put_var(ncid_out, varid_time, tmidday)      call nf95_put_var(ncid_out, varid_time, tmidday)
187      call nf95_put_var(ncid_out, varid_plev, plev)      call nf95_put_var(ncid_out, varid_plev, plev)
188    
     deallocate(plev) ! pointer  
   
189      allocate(o3_par_in(n_lat, n_plev, 12))      allocate(o3_par_in(n_lat, n_plev, 12))
190      allocate(v_regr_lat(jjm + 1, n_plev, 0:13))      allocate(v_regr_lat(jjm + 1, n_plev, 0:13))
191      allocate(o3_par_out(jjm + 1, n_plev, 360))      allocate(o3_par_out(jjm + 1, n_plev, 360))
# Line 204  contains Line 201  contains
201         ! Regrid in latitude:         ! Regrid in latitude:
202         ! We average with respect to sine of latitude, which is         ! We average with respect to sine of latitude, which is
203         ! equivalent to weighting by cosine of latitude:         ! equivalent to weighting by cosine of latitude:
204         v_regr_lat(jjm+1:1:-1, :, 1:12) = regr1_step_av(o3_par_in, &         call regr1_conserv(o3_par_in, &
205              xs=sin(lat_in_edg), xt=sin((/- pi / 2, rlatv(jjm:1:-1), pi / 2/)))              xs = sin(lat_in_edg), xt = (/- 1., sin(rlatv(jjm:1:-1)), 1./), &
206                slope = slopes(o3_par_in, sin(lat_in_edg)), &
207                vt = v_regr_lat(jjm + 1:1:- 1, :, 1:12))
208         ! (invert order of indices in "v_regr_lat" because "rlatu" is         ! (invert order of indices in "v_regr_lat" because "rlatu" is
209         ! decreasing)         ! decreasing)
210    
# Line 236  contains Line 235  contains
235      ! This subroutine creates the NetCDF output file, defines      ! This subroutine creates the NetCDF output file, defines
236      ! dimensions and variables, and writes one of the coordinate variables.      ! dimensions and variables, and writes one of the coordinate variables.
237    
238      use dimens_m, only: jjm      use dimensions, only: jjm
239      use comgeom, only: rlatu      use dynetat0_m, only: rlatu
240      use comconst, only: pi      use netcdf, only: nf90_clobber, nf90_float, nf90_copy_att, nf90_global
     use numer_rec, only: assert_eq  
   
241      use netcdf95, only: nf95_create, nf95_def_dim, nf95_def_var, &      use netcdf95, only: nf95_create, nf95_def_dim, nf95_def_var, &
242           nf95_put_att, nf95_enddef, nf95_copy_att, nf95_put_var           nf95_put_att, nf95_enddef, nf95_copy_att, nf95_put_var
243      use netcdf, only: nf90_clobber, nf90_float, nf90_copy_att, nf90_global      use nr_util, only: assert_eq, pi
244    
245      integer, intent(in):: ncid_in, varid_in(:), n_plev      integer, intent(in):: ncid_in, varid_in(:), n_plev
246      character(len=*), intent(in):: name_out(:) ! of NetCDF variables      character(len=*), intent(in):: name_out(:) ! of NetCDF variables

Legend:
Removed from v.13  
changed lines
  Added in v.265

  ViewVC Help
Powered by ViewVC 1.1.21