[6328] | 1 | !**************************************************************************************** |
---|
| 2 | SUBROUTINE read_dimgrid (nlon,nlat,data_filename,w_unit,grid_name) |
---|
| 3 | !************************************************************************************** |
---|
| 4 | USE netcdf |
---|
| 5 | IMPLICIT NONE |
---|
| 6 | ! |
---|
| 7 | INTEGER :: i,j,k,w_unit |
---|
| 8 | ! |
---|
| 9 | INTEGER :: il_file_id,il_grid_id,il_lon_id, & |
---|
| 10 | il_lat_id,il_indice_id, & |
---|
| 11 | lon_dims,lat_dims,imask_dims |
---|
| 12 | ! |
---|
| 13 | INTEGER, DIMENSION(NF90_MAX_VAR_DIMS) :: lon_dims_ids,lat_dims_ids,& |
---|
| 14 | imask_dims_ids,lon_dims_len,& |
---|
| 15 | lat_dims_len,imask_dims_len |
---|
| 16 | ! |
---|
| 17 | INTEGER, INTENT(out) :: nlon,nlat |
---|
| 18 | ! |
---|
| 19 | CHARACTER(len=30) :: data_filename |
---|
| 20 | CHARACTER(len=4) :: grid_name |
---|
| 21 | CHARACTER(len=8) :: cl_nam_lon, cl_nam_lat, cl_nam_msk |
---|
| 22 | ! |
---|
| 23 | ! Dimensions |
---|
| 24 | ! |
---|
| 25 | cl_nam_lon=grid_name//".lon" |
---|
| 26 | cl_nam_lat=grid_name//".lat" |
---|
| 27 | cl_nam_msk=grid_name//".msk" |
---|
| 28 | write(w_unit,*) 'cl_nam_lon :',cl_nam_lon |
---|
| 29 | call flush(w_unit) |
---|
| 30 | ! |
---|
| 31 | CALL hdlerr(NF90_OPEN(data_filename, NF90_NOWRITE, il_file_id), __LINE__ ) |
---|
| 32 | ! |
---|
| 33 | CALL hdlerr( NF90_INQ_VARID(il_file_id, cl_nam_lon, il_lon_id), __LINE__ ) |
---|
| 34 | CALL hdlerr( NF90_INQ_VARID(il_file_id, cl_nam_lat, il_lat_id), __LINE__ ) |
---|
| 35 | CALL hdlerr( NF90_INQ_VARID(il_file_id, cl_nam_msk, il_indice_id), __LINE__ ) |
---|
| 36 | ! |
---|
| 37 | CALL hdlerr( NF90_INQUIRE_VARIABLE(il_file_id, varid=il_lon_id, ndims=lon_dims, dimids=lon_dims_ids), __LINE__ ) |
---|
| 38 | ! |
---|
| 39 | ! The value lon_dims_len(i) is obtained thanks to the lon_dims_ids ID already obtained from the file |
---|
| 40 | DO i=1,lon_dims |
---|
| 41 | CALL hdlerr( NF90_INQUIRE_DIMENSION(ncid=il_file_id,dimid=lon_dims_ids(i),len=lon_dims_len(i)), __LINE__ ) |
---|
| 42 | ENDDO |
---|
| 43 | ! |
---|
| 44 | nlon=lon_dims_len(1) |
---|
| 45 | nlat=lon_dims_len(2) |
---|
| 46 | !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
---|
| 47 | ! |
---|
| 48 | CALL hdlerr( NF90_INQUIRE_VARIABLE(ncid=il_file_id, varid=il_lat_id, ndims=lat_dims, dimids=lat_dims_ids), __LINE__ ) |
---|
| 49 | ! |
---|
| 50 | ! The value lat_dims_len(i) is obtained thanks to the lat_dims_ids ID already obtained from the file |
---|
| 51 | DO i=1,lat_dims |
---|
| 52 | CALL hdlerr( NF90_INQUIRE_DIMENSION(ncid=il_file_id,dimid=lat_dims_ids(i),len=lat_dims_len(i)), __LINE__ ) |
---|
| 53 | ENDDO |
---|
| 54 | ! |
---|
| 55 | IF ( (lat_dims_len(1) .NE. lon_dims_len(1)).OR.(lat_dims_len(2) .NE. lon_dims_len(2)) ) THEN |
---|
| 56 | WRITE(w_unit,*) 'Problem model1 in read_dimgrid' |
---|
| 57 | WRITE(w_unit,*) 'Dimensions of the latitude are not the same as the ones of the longitude' |
---|
| 58 | CALL flush(w_unit) |
---|
| 59 | STOP |
---|
| 60 | ENDIF |
---|
| 61 | !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
---|
| 62 | ! |
---|
| 63 | CALL hdlerr( NF90_INQUIRE_VARIABLE(ncid=il_file_id, varid=il_indice_id, ndims=imask_dims, dimids=imask_dims_ids), __LINE__ ) |
---|
| 64 | ! |
---|
| 65 | ! The value imask_dims_len(i) is obtained thanks to the imask_dims_ids ID already obtained from the file |
---|
| 66 | DO i=1,imask_dims |
---|
| 67 | CALL hdlerr( NF90_INQUIRE_DIMENSION(ncid=il_file_id,dimid=imask_dims_ids(i),len=imask_dims_len(i)), __LINE__ ) |
---|
| 68 | ENDDO |
---|
| 69 | ! |
---|
| 70 | CALL hdlerr(NF90_CLOSE(il_file_id), __LINE__ ) |
---|
| 71 | ! |
---|
| 72 | WRITE(w_unit,*) 'Reading input file ',data_filename |
---|
| 73 | WRITE(w_unit,*) 'Global dimensions nlon=',nlon,' nlat=',nlat |
---|
| 74 | CALL FLUSH(w_unit) |
---|
| 75 | ! |
---|
| 76 | ! |
---|
| 77 | END SUBROUTINE read_dimgrid |
---|