- Timestamp:
- Jul 24, 2024, 4:23:34 PM (3 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/phylmd/regr_lat_time_coefoz_m.F90
r5116 r5117 33 33 ! -- the latitude is in degrees and strictly monotonic (as all 34 34 ! NetCDF coordinate variables should be); 35 ! -- time increases from January to December (even though we do35 ! -- time increases from January to December (even though we DO 36 36 ! not use values of the input time coordinate); 37 37 ! -- pressure is in hPa and in strictly ascending order (even … … 40 40 ! when we regrid in pressure). 41 41 42 uselmdz_grid_phy, ONLY: nbp_lat43 use regr_conserv_m, ONLY: regr_conserv44 use regr_lint_m, ONLY: regr_lint45 usenetcdf95, ONLY: nf95_open, nf95_close, nf95_inq_varid, nf95_get_var, &42 USE lmdz_grid_phy, ONLY: nbp_lat 43 USE lmdz_regr_conserv, ONLY: regr_conserv 44 USE lmdz_regr_lint, ONLY: regr_lint 45 USE netcdf95, ONLY: nf95_open, nf95_close, nf95_inq_varid, nf95_get_var, & 46 46 nf95_put_var, nf95_gw_var 47 usenetcdf, ONLY: nf90_nowrite48 use nrtype, ONLY: pi49 uselmdz_regular_lonlat, ONLY: boundslat_reg, south47 USE netcdf, ONLY: nf90_nowrite 48 USE lmdz_physical_constants, ONLY: pi 49 USE lmdz_regular_lonlat, ONLY: boundslat_reg, south 50 50 51 51 ! Variables local to the procedure: 52 52 53 integerncid_in, ncid_out ! NetCDF IDs for input and output files54 integern_plev ! number of pressure levels in the input data55 integern_lat! number of latitudes in the input data56 57 real, allocatable:: latitude(:)53 INTEGER ncid_in, ncid_out ! NetCDF IDs for input and output files 54 INTEGER n_plev ! number of pressure levels in the input data 55 INTEGER n_lat! number of latitudes in the input data 56 57 REAL, ALLOCATABLE:: latitude(:) 58 58 ! (of input data, converted to rad, sorted in strictly ascending order) 59 59 60 real, allocatable:: lat_in_edg(:)60 REAL, ALLOCATABLE:: lat_in_edg(:) 61 61 ! (edges of latitude intervals for input data, in rad, in strictly 62 62 ! ascending order) 63 63 64 real, allocatable:: plev(:) ! pressure level of input data65 logicaldesc_lat ! latitude in descending order in the input file66 67 real, allocatable:: o3_par_in(:, :, :) ! (n_lat, n_plev, 12)64 REAL, ALLOCATABLE:: plev(:) ! pressure level of input data 65 LOGICAL desc_lat ! latitude in descending order in the input file 66 67 REAL, ALLOCATABLE:: o3_par_in(:, :, :) ! (n_lat, n_plev, 12) 68 68 ! (ozone parameter from the input file) 69 69 ! ("o3_par_in(j, l, month)" is at latitude "latitude(j)" and pressure 70 70 ! level "plev(l)". "month" is between 1 and 12.) 71 71 72 real, allocatable:: v_regr_lat(:, :, :) ! (jjm + 1, n_plev, 0:13)72 REAL, ALLOCATABLE:: v_regr_lat(:, :, :) ! (jjm + 1, n_plev, 0:13) 73 73 ! (mean of a variable "v" over a latitude interval) 74 74 ! (First dimension is latitude interval. … … 84 84 ! Last dimension is month number.) 85 85 86 real, allocatable:: o3_par_out(:, :, :) ! (jjm + 1, n_plev, ndays)86 REAL, ALLOCATABLE:: o3_par_out(:, :, :) ! (jjm + 1, n_plev, ndays) 87 87 ! (regridded ozone parameter) 88 88 ! ("o3_par_out(j, l, day)" is at latitude "rlatu(j)", pressure … … 90 90 ! 360-day calendar.) 91 91 92 integerj93 integeri_v ! index of ozone parameter94 integer, parameter:: n_o3_param = 8 ! number of ozone parameters92 INTEGER j 93 INTEGER i_v ! index of ozone parameter 94 INTEGER, parameter:: n_o3_param = 8 ! number of ozone parameters 95 95 96 96 CHARACTER(LEN=11) name_in(n_o3_param) … … 100 100 ! (name of NetCDF primary variable in the output file) 101 101 102 integervarid_in(n_o3_param), varid_out(n_o3_param), varid_plev, varid_time103 integerncerr, varid102 INTEGER varid_in(n_o3_param), varid_out(n_o3_param), varid_plev, varid_time 103 INTEGER ncerr, varid 104 104 ! (for NetCDF) 105 105 106 real, parameter:: tmidmonth(0:13) = (/(-15. + 30. * j, j = 0, 13)/)106 REAL, parameter:: tmidmonth(0:13) = (/(-15. + 30. * j, j = 0, 13)/) 107 107 ! (time to middle of month, in days since January 1st 0h, in a 108 108 ! 360-day calendar) … … 110 110 ! interpolated between the December and the January value.) 111 111 112 real, parameter:: tmidday(360) = (/(j + 0.5, j = 0, 359)/)112 REAL, parameter:: tmidday(360) = (/(j + 0.5, j = 0, 359)/) 113 113 ! (time to middle of day, in days since January 1st 0h, in a 114 114 ! 360-day calendar) … … 165 165 ! ascending order, so invert order if necessary: 166 166 desc_lat = latitude(1) > latitude(n_lat) 167 if(desc_lat) latitude = latitude(n_lat:1:-1)167 IF (desc_lat) latitude = latitude(n_lat:1:-1) 168 168 169 169 ! Compute edges of latitude intervals: … … 202 202 203 203 CALL nf95_get_var(ncid_in, varid_in(i_v), o3_par_in) 204 if(desc_lat) o3_par_in = o3_par_in(n_lat:1:-1, :, :)204 IF (desc_lat) o3_par_in = o3_par_in(n_lat:1:-1, :, :) 205 205 206 206 ! Regrid in latitude: … … 240 240 ! dimensions and variables, and writes one of the coordinate variables. 241 241 242 uselmdz_grid_phy, ONLY: nbp_lat243 uselmdz_assert_eq, ONLY: assert_eq244 245 usenetcdf95, ONLY: nf95_create, nf95_def_dim, nf95_def_var, &242 USE lmdz_grid_phy, ONLY: nbp_lat 243 USE lmdz_assert_eq, ONLY: assert_eq 244 245 USE netcdf95, ONLY: nf95_create, nf95_def_dim, nf95_def_var, & 246 246 nf95_put_att, nf95_enddef, nf95_copy_att, nf95_put_var 247 usenetcdf, ONLY: nf90_clobber, nf90_float, nf90_copy_att, nf90_global248 use nrtype, ONLY: pi249 uselmdz_regular_lonlat, ONLY: lat_reg250 251 integer, intent(in):: ncid_in, varid_in(:), n_plev252 CHARACTER(LEN=*), intent(in):: name_out(:) ! of NetCDF variables253 integer, intent(out):: ncid_out, varid_out(:), varid_plev, varid_time247 USE netcdf, ONLY: nf90_clobber, nf90_float, nf90_copy_att, nf90_global 248 USE lmdz_physical_constants, ONLY: pi 249 USE lmdz_regular_lonlat, ONLY: lat_reg 250 251 INTEGER, INTENT(IN):: ncid_in, varid_in(:), n_plev 252 CHARACTER(LEN=*), INTENT(IN):: name_out(:) ! of NetCDF variables 253 INTEGER, INTENT(OUT):: ncid_out, varid_out(:), varid_plev, varid_time 254 254 255 255 ! Variables local to the procedure: 256 256 257 integerncerr258 integerdimid_rlatu, dimid_plev, dimid_time259 integervarid_rlatu260 integeri, n_o3_param257 INTEGER ncerr 258 INTEGER dimid_rlatu, dimid_plev, dimid_time 259 INTEGER varid_rlatu 260 INTEGER i, n_o3_param 261 261 262 262 !--------------------------- … … 328 328 SUBROUTINE handle_err_copy_att(att_name) 329 329 330 usenetcdf, ONLY: nf90_noerr, nf90_strerror331 332 CHARACTER(LEN=*), intent(in):: att_name330 USE netcdf, ONLY: nf90_noerr, nf90_strerror 331 332 CHARACTER(LEN=*), INTENT(IN):: att_name 333 333 334 334 !---------------------------------------- 335 335 336 if(ncerr /= nf90_noerr) THEN336 IF (ncerr /= nf90_noerr) THEN 337 337 print *, "prepare_out " // trim(name_out(i)) & 338 338 // " nf90_copy_att " // att_name // " -- " &
Note: See TracChangeset
for help on using the changeset viewer.