- Timestamp:
- Apr 22, 2015, 6:28:50 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
dynamico_lmdz/aquaplanet/LMDZ5/libf/phylmd/regr_pr_o3_m.F90
r3816 r3819 25 25 ! hPa and strictly increasing. 26 26 27 use dimphy, ONLY : klon, klev 28 use mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 27 29 use netcdf95, only: nf95_open, nf95_close, nf95_inq_varid, handle_err 28 30 use netcdf, only: nf90_nowrite, nf90_get_var … … 37 39 ! for interface "l") 38 40 39 real, intent(out):: o3_mob_regr(:, :, :) ! ( iim + 1, jjm + 1, llm)41 real, intent(out):: o3_mob_regr(:, :, :) ! (nbp_lon + 1, nbp_lat + 1, klev) 40 42 ! (ozone mole fraction from Mobidic adapted to the LMDZ grid) 41 43 ! ("o3_mob_regr(i, j, l)" is at longitude "rlonv(i)", latitude … … 44 46 ! Variables local to the procedure: 45 47 46 include "dimensions.h"47 48 48 49 integer ncid, varid, ncerr ! for NetCDF 49 50 integer i, j 50 51 51 real r_mob( jjm + 1, size(press_in_edg) - 1)52 real r_mob(nbp_lat, size(press_in_edg) - 1) 52 53 ! (ozone mole fraction from Mobidic at day "dayref") 53 54 ! (r_mob(j, k) is at latitude "rlatu(j)", in pressure interval … … 57 58 58 59 print *, "Call sequence information: regr_pr_o3" 59 call assert(shape(o3_mob_regr) == (/ iim + 1, jjm + 1, llm/), &60 call assert(shape(o3_mob_regr) == (/nbp_lon + 1, nbp_lat, klev/), & 60 61 "regr_pr_o3 o3_mob_regr") 61 call assert(shape(p3d) == (/ iim + 1, jjm + 1, llm+ 1/), "regr_pr_o3 p3d")62 call assert(shape(p3d) == (/nbp_lon + 1, nbp_lat, klev + 1/), "regr_pr_o3 p3d") 62 63 63 64 call nf95_open("coefoz_LMDZ.nc", nf90_nowrite, ncid) … … 69 70 ! Latitudes are in ascending order in the input file while 70 71 ! "rlatu" is in descending order so we need to invert order: 71 r_mob = r_mob( jjm+1:1:-1, :)72 r_mob = r_mob(nbp_lat:1:-1, :) 72 73 73 74 call nf95_close(ncid) … … 76 77 77 78 ! Poles: 78 do j = 1, jjm + 1, jjm79 o3_mob_regr(1, j, llm:1:-1) &80 = regr1_step_av(r_mob(j, :), press_in_edg, p3d(1, j, llm+1:1:-1))79 do j = 1, nbp_lat, nbp_lat-1 80 o3_mob_regr(1, j, klev:1:-1) & 81 = regr1_step_av(r_mob(j, :), press_in_edg, p3d(1, j, klev+1:1:-1)) 81 82 ! (invert order of indices because "p3d" is in descending order) 82 83 end do 83 84 84 85 ! Other latitudes: 85 do j = 2, jjm86 do i = 1, iim87 o3_mob_regr(i, j, llm:1:-1) &86 do j = 2, nbp_lat-1 87 do i = 1, nbp_lon 88 o3_mob_regr(i, j, klev:1:-1) & 88 89 = regr1_step_av(r_mob(j, :), press_in_edg, & 89 p3d(i, j, llm+1:1:-1))90 p3d(i, j, klev+1:1:-1)) 90 91 ! (invert order of indices because "p3d" is in descending order) 91 92 end do … … 93 94 94 95 ! Duplicate pole values on all longitudes: 95 o3_mob_regr(2:, 1, :) = spread(o3_mob_regr(1, 1, :), dim=1, ncopies= iim)96 o3_mob_regr(2:, jjm + 1, :) &97 = spread(o3_mob_regr(1, jjm + 1, :), dim=1, ncopies=iim)96 o3_mob_regr(2:, 1, :) = spread(o3_mob_regr(1, 1, :), dim=1, ncopies=nbp_lon) 97 o3_mob_regr(2:, nbp_lat, :) & 98 = spread(o3_mob_regr(1, nbp_lat, :), dim=1, ncopies=nbp_lon) 98 99 99 100 ! Duplicate first longitude to last longitude: 100 o3_mob_regr( iim + 1, 2:jjm, :) = o3_mob_regr(1, 2:jjm, :)101 o3_mob_regr(nbp_lon + 1, 2:nbp_lat-1, :) = o3_mob_regr(1, 2:nbp_lat-1, :) 101 102 102 103 end subroutine regr_pr_o3
Note: See TracChangeset
for help on using the changeset viewer.