[6331] | 1 | MODULE write_all_fields |
---|
| 2 | ! |
---|
| 3 | USE netcdf |
---|
| 4 | IMPLICIT NONE |
---|
| 5 | ! |
---|
| 6 | ! |
---|
| 7 | CONTAINS |
---|
| 8 | ! |
---|
| 9 | !**************************************************************************************** |
---|
| 10 | SUBROUTINE write_field (nlon,nlat, & |
---|
| 11 | data_filename, field_name, w_unit, file_debug, & |
---|
| 12 | gridlon, gridlat, array) |
---|
| 13 | !************************************************************************************** |
---|
| 14 | ! |
---|
| 15 | INTEGER, PARAMETER :: wp = SELECTED_REAL_KIND(12,307) ! double |
---|
| 16 | ! |
---|
| 17 | INTEGER :: i,j,k,w_unit |
---|
| 18 | LOGICAL :: file_debug |
---|
| 19 | INTEGER :: il_file_id, il_array_id, il_lon_id, il_lat_id |
---|
| 20 | INTEGER :: LONID, LATID |
---|
| 21 | ! |
---|
| 22 | INTEGER, INTENT(in) :: nlon,nlat |
---|
| 23 | ! |
---|
| 24 | CHARACTER(len=30) :: data_filename,field_name |
---|
| 25 | ! |
---|
| 26 | INTEGER, DIMENSION(2) :: ila_dim |
---|
| 27 | INTEGER, DIMENSION(2) :: ila_what |
---|
| 28 | ! |
---|
| 29 | REAL (kind=wp), DIMENSION(nlon,nlat) :: gridlon,gridlat |
---|
| 30 | REAL (kind=wp), DIMENSION(nlon,nlat) :: array |
---|
| 31 | ! |
---|
| 32 | REAL (kind=wp) :: dl_missing_value, dl_FillValue |
---|
| 33 | ! |
---|
| 34 | ! Dimensions |
---|
| 35 | ! |
---|
| 36 | CALL hdlerr(NF90_CREATE(data_filename, NF90_CLOBBER, il_file_id), __LINE__ ) |
---|
| 37 | ! |
---|
| 38 | CALL hdlerr( NF90_DEF_DIM(il_file_id, "lon", nlon, LONID), __LINE__ ) |
---|
| 39 | CALL hdlerr( NF90_DEF_DIM(il_file_id, "lat", nlat, LATID), __LINE__ ) |
---|
| 40 | ! |
---|
| 41 | CALL hdlerr( NF90_DEF_VAR(il_file_id, "lon", NF90_DOUBLE, (/LONID, LATID/), il_lon_id), __LINE__ ) |
---|
| 42 | CALL hdlerr( NF90_PUT_ATT(il_file_id, il_lon_id, "units", "degrees_east"), __LINE__ ) |
---|
| 43 | CALL hdlerr( NF90_PUT_ATT(il_file_id, il_lon_id, "standard_name", "longitude"), __LINE__ ) |
---|
| 44 | CALL hdlerr( NF90_DEF_VAR(il_file_id, "lat", NF90_DOUBLE, (/LONID, LATID/), il_lat_id), __LINE__ ) |
---|
| 45 | CALL hdlerr( NF90_PUT_ATT(il_file_id, il_lat_id, "units", "degrees_north"), __LINE__ ) |
---|
| 46 | CALL hdlerr( NF90_PUT_ATT(il_file_id, il_lat_id, "standard_name", "latitude"), __LINE__ ) |
---|
| 47 | ! |
---|
| 48 | CALL hdlerr( NF90_DEF_VAR(il_file_id, TRIM(field_name), NF90_DOUBLE, (/LONID, LATID/), il_array_id), __LINE__ ) |
---|
| 49 | SELECT CASE (field_name) |
---|
| 50 | CASE ("FRECVANA") |
---|
| 51 | dl_missing_value = 10000.d0 |
---|
| 52 | dl_FillValue = 1.d+20 |
---|
| 53 | CASE ("error_interp") |
---|
| 54 | CALL hdlerr( NF90_PUT_ATT(il_file_id, il_array_id, "units", "%"), __LINE__ ) |
---|
| 55 | dl_missing_value = -10000.d0 |
---|
| 56 | dl_FillValue = -1.d+20 |
---|
| 57 | CASE DEFAULT |
---|
| 58 | dl_missing_value = -1.d+34 ! Ferret default missing value |
---|
| 59 | dl_FillValue = -1.d+34 |
---|
| 60 | END SELECT |
---|
| 61 | !gjoffCALL hdlerr( NF90_PUT_ATT(il_file_id, il_array_id, "missing_value", dl_missing_value),__LINE__ ) |
---|
| 62 | !gjoffCALL hdlerr( NF90_PUT_ATT(il_file_id, il_array_id, "_FillValue", dl_FillValue),__LINE__ ) |
---|
| 63 | ! |
---|
| 64 | CALL hdlerr( NF90_ENDDEF(il_file_id), __LINE__ ) |
---|
| 65 | ! |
---|
| 66 | ila_what(:)=1 |
---|
| 67 | ! |
---|
| 68 | ila_dim(1)=nlon |
---|
| 69 | ila_dim(2)=nlat |
---|
| 70 | ! |
---|
| 71 | ! Data |
---|
| 72 | ! |
---|
| 73 | CALL hdlerr( NF90_PUT_VAR (il_file_id, il_lon_id, gridlon, & |
---|
| 74 | ila_what, ila_dim), __LINE__ ) |
---|
| 75 | ! |
---|
| 76 | CALL hdlerr( NF90_PUT_VAR (il_file_id, il_lat_id, gridlat, & |
---|
| 77 | ila_what, ila_dim), __LINE__ ) |
---|
| 78 | ! |
---|
| 79 | CALL hdlerr( NF90_PUT_VAR (il_file_id, il_array_id, array, & |
---|
| 80 | ila_what, ila_dim), __LINE__ ) |
---|
| 81 | IF (file_debug) THEN |
---|
| 82 | WRITE(w_unit,*) 'Local fields writing done' |
---|
| 83 | CALL FLUSH(w_unit) |
---|
| 84 | ENDIF |
---|
| 85 | ! |
---|
| 86 | CALL hdlerr( NF90_CLOSE(il_file_id), __LINE__ ) |
---|
| 87 | ! |
---|
| 88 | IF (file_debug) THEN |
---|
| 89 | WRITE(w_unit,*) 'End of routine write field' |
---|
| 90 | CALL FLUSH(w_unit) |
---|
| 91 | ENDIF |
---|
| 92 | ! |
---|
| 93 | END SUBROUTINE write_field |
---|
| 94 | |
---|
| 95 | !**************************************************************************************** |
---|
| 96 | SUBROUTINE write_field_i2 (nlon,nlat, & |
---|
| 97 | data_filename, field_name, w_unit, file_debug, & |
---|
| 98 | gridlon, gridlat, array) |
---|
| 99 | !************************************************************************************** |
---|
| 100 | ! |
---|
| 101 | INTEGER, PARAMETER :: wp = SELECTED_REAL_KIND(12,307) ! double |
---|
| 102 | ! |
---|
| 103 | INTEGER :: i,j,k,w_unit |
---|
| 104 | LOGICAL :: file_debug |
---|
| 105 | INTEGER :: il_file_id, il_array_id, il_lon_id, il_lat_id |
---|
| 106 | INTEGER :: LONID, LATID |
---|
| 107 | ! |
---|
| 108 | INTEGER, INTENT(in) :: nlon,nlat |
---|
| 109 | ! |
---|
| 110 | CHARACTER(len=30) :: data_filename,field_name |
---|
| 111 | ! |
---|
| 112 | INTEGER, DIMENSION(2) :: ila_dim |
---|
| 113 | INTEGER, DIMENSION(2) :: ila_what |
---|
| 114 | ! |
---|
| 115 | REAL (kind=wp), DIMENSION(nlon,nlat) :: gridlon,gridlat |
---|
| 116 | INTEGER, DIMENSION(nlon,nlat) :: array |
---|
| 117 | ! |
---|
| 118 | ! Dimensions |
---|
| 119 | ! |
---|
| 120 | CALL hdlerr(NF90_CREATE(data_filename, NF90_CLOBBER, il_file_id), __LINE__ ) |
---|
| 121 | ! |
---|
| 122 | CALL hdlerr( NF90_DEF_DIM(il_file_id, "lon", nlon, LONID), __LINE__ ) |
---|
| 123 | CALL hdlerr( NF90_DEF_DIM(il_file_id, "lat", nlat, LATID), __LINE__ ) |
---|
| 124 | ! |
---|
| 125 | CALL hdlerr( NF90_DEF_VAR(il_file_id, "lon", NF90_DOUBLE, (/LONID, LATID/),il_lon_id), __LINE__ ) |
---|
| 126 | CALL hdlerr( NF90_PUT_ATT(il_file_id, il_lon_id, "units", "degrees_east"),__LINE__ ) |
---|
| 127 | CALL hdlerr( NF90_PUT_ATT(il_file_id, il_lon_id, "standard_name","longitude"), __LINE__ ) |
---|
| 128 | CALL hdlerr( NF90_DEF_VAR(il_file_id, "lat", NF90_DOUBLE, (/LONID, LATID/),il_lat_id), __LINE__ ) |
---|
| 129 | CALL hdlerr( NF90_PUT_ATT(il_file_id, il_lat_id, "units", "degrees_north"),__LINE__ ) |
---|
| 130 | CALL hdlerr( NF90_PUT_ATT(il_file_id, il_lat_id, "standard_name", "latitude"),__LINE__ ) |
---|
| 131 | ! |
---|
| 132 | CALL hdlerr( NF90_DEF_VAR(il_file_id, TRIM(field_name), NF90_INT, (/LONID,LATID/), il_array_id), __LINE__ ) |
---|
| 133 | ! |
---|
| 134 | CALL hdlerr( NF90_ENDDEF(il_file_id), __LINE__ ) |
---|
| 135 | ! |
---|
| 136 | ila_what(:)=1 |
---|
| 137 | ! |
---|
| 138 | ila_dim(1)=nlon |
---|
| 139 | ila_dim(2)=nlat |
---|
| 140 | ! |
---|
| 141 | ! Data |
---|
| 142 | ! |
---|
| 143 | CALL hdlerr( NF90_PUT_VAR (il_file_id, il_lon_id, gridlon, & |
---|
| 144 | ila_what, ila_dim), __LINE__ ) |
---|
| 145 | ! |
---|
| 146 | CALL hdlerr( NF90_PUT_VAR (il_file_id, il_lat_id, gridlat, & |
---|
| 147 | ila_what, ila_dim), __LINE__ ) |
---|
| 148 | ! |
---|
| 149 | CALL hdlerr( NF90_PUT_VAR (il_file_id, il_array_id, array, & |
---|
| 150 | ila_what, ila_dim), __LINE__ ) |
---|
| 151 | IF (file_debug) THEN |
---|
| 152 | WRITE(w_unit,*) 'Local fields writing done' |
---|
| 153 | CALL FLUSH(w_unit) |
---|
| 154 | ENDIF |
---|
| 155 | ! |
---|
| 156 | CALL hdlerr( NF90_CLOSE(il_file_id), __LINE__ ) |
---|
| 157 | ! |
---|
| 158 | IF (file_debug) THEN |
---|
| 159 | WRITE(w_unit,*) 'End of routine write field' |
---|
| 160 | CALL FLUSH(w_unit) |
---|
| 161 | ENDIF |
---|
| 162 | ! |
---|
| 163 | END SUBROUTINE write_field_i2 |
---|
| 164 | END MODULE write_all_fields |
---|