- Timestamp:
- 2016-04-07T16:32:24+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_GC3p0_package/NEMOGCM/TOOLS/SIREN/src/attribute.f90
r5037 r6440 81 81 ! REVISION HISTORY: 82 82 !> @date November, 2013 - Initial Version 83 !> @date November, 2014 - Fix memory leaks bug 83 !> @date November, 2014 84 !> - Fix memory leaks bug 85 !> @date September, 2015 86 !> - manage useless (dummy) attributes 84 87 ! 85 88 !> @note Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 97 100 PUBLIC :: TATT !< attribute structure 98 101 102 PRIVATE :: cm_dumatt !< dummy attribute array 103 99 104 ! function and subroutine 100 105 PUBLIC :: att_init !< initialize attribute structure … … 104 109 PUBLIC :: att_get_index !< get attribute index, in an array of attribute structure 105 110 PUBLIC :: att_get_id !< get attribute id, read from file 111 PUBLIC :: att_get_dummy !< fill dummy attribute array 112 PUBLIC :: att_is_dummy !< check if attribute is defined as dummy attribute 106 113 107 114 PRIVATE :: att__clean_unit ! clean attribute strcuture … … 130 137 INTEGER(i4) :: i_type = 0 !< attribute type 131 138 INTEGER(i4) :: i_len = 0 !< number of value store in attribute 132 CHARACTER(LEN=lc) :: c_value = "none"!< attribute value if type CHAR139 CHARACTER(LEN=lc) :: c_value = 'none' !< attribute value if type CHAR 133 140 REAL(dp), DIMENSION(:), POINTER :: d_value => NULL() !< attribute value if type SHORT,INT,FLOAT or DOUBLE 134 141 END TYPE TATT 135 142 143 CHARACTER(LEN=lc), DIMENSION(ip_maxdum), SAVE :: cm_dumatt !< dummy attribute 144 136 145 INTERFACE att_init 137 MODULE PROCEDURE att__init_c 146 MODULE PROCEDURE att__init_c 138 147 MODULE PROCEDURE att__init_dp 139 148 MODULE PROCEDURE att__init_dp_0d … … 181 190 !> @date November, 2013 - Initial Version 182 191 !> @date November, 2014 183 !> 192 !> - use function instead of overload assignment operator 184 193 !> (to avoid memory leak) 185 194 ! … … 234 243 235 244 ! local variable 236 REAL(dp) , DIMENSION(:), ALLOCATABLE :: dl_value245 REAL(dp) , DIMENSION(:), ALLOCATABLE :: dl_value 237 246 !---------------------------------------------------------------- 238 247 … … 300 309 !> @author J.Paul 301 310 !> @date November, 2013 - Initial Version 302 !> @date September, 2014 - bug fix with use of id read from attribute structure 303 ! 311 !> @date September, 2014 312 !> - bug fix with use of id read from attribute structure 313 !> 304 314 !> @param[in] td_att array of attribute structure 305 315 !> @param[in] cd_name attribute name … … 355 365 356 366 att__init_c%c_name=TRIM(ADJUSTL(cd_name)) 357 358 367 att__init_c%i_type=NF90_CHAR 368 359 369 att__init_c%c_value=TRIM(ADJUSTL(cd_value)) 360 370 att__init_c%i_len=LEN( TRIM(ADJUSTL(cd_value)) ) … … 368 378 !> 369 379 !> @author J.Paul 370 !> @d tae November, 2013 - Initial Version380 !> @date November, 2013 - Initial Version 371 381 ! 372 382 !> @param[in] cd_name attribute name … … 1068 1078 !> @author J.Paul 1069 1079 !> @date November, 2013 - Initial Version 1070 !> @date September, 2014 - take into account type of attribute. 1080 !> @date September, 2014 1081 !> - take into account type of attribute. 1071 1082 ! 1072 1083 !> @param[in] td_att attribute structure … … 1114 1125 1115 1126 CASE(NF90_CHAR) 1127 1116 1128 cl_value=td_att%c_value 1117 1129 … … 1247 1259 1248 1260 END SUBROUTINE att__clean_arr 1261 !------------------------------------------------------------------- 1262 !> @brief This subroutine fill dummy attribute array 1263 ! 1264 !> @author J.Paul 1265 !> @date September, 2015 - Initial Version 1266 !> @date Marsh, 2016 1267 !> - close file (bugfix) 1268 ! 1269 !> @param[in] cd_dummy dummy configuration file 1270 !------------------------------------------------------------------- 1271 SUBROUTINE att_get_dummy( cd_dummy ) 1272 IMPLICIT NONE 1273 ! Argument 1274 CHARACTER(LEN=*), INTENT(IN) :: cd_dummy 1275 1276 ! local variable 1277 INTEGER(i4) :: il_fileid 1278 INTEGER(i4) :: il_status 1279 1280 LOGICAL :: ll_exist 1281 1282 ! loop indices 1283 ! namelist 1284 CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumvar 1285 CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumdim 1286 CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumatt 1287 1288 !---------------------------------------------------------------- 1289 NAMELIST /namdum/ & !< dummy namelist 1290 & cn_dumvar, & !< variable name 1291 & cn_dumdim, & !< dimension name 1292 & cn_dumatt !< attribute name 1293 !---------------------------------------------------------------- 1294 1295 ! init 1296 cm_dumatt(:)='' 1297 1298 ! read namelist 1299 INQUIRE(FILE=TRIM(cd_dummy), EXIST=ll_exist) 1300 IF( ll_exist )THEN 1301 1302 il_fileid=fct_getunit() 1303 1304 OPEN( il_fileid, FILE=TRIM(cd_dummy), & 1305 & FORM='FORMATTED', & 1306 & ACCESS='SEQUENTIAL', & 1307 & STATUS='OLD', & 1308 & ACTION='READ', & 1309 & IOSTAT=il_status) 1310 CALL fct_err(il_status) 1311 IF( il_status /= 0 )THEN 1312 CALL logger_fatal("DIM GET DUMMY: opening "//TRIM(cd_dummy)) 1313 ENDIF 1314 1315 READ( il_fileid, NML = namdum ) 1316 cm_dumatt(:)=cn_dumatt(:) 1317 1318 CLOSE( il_fileid ) 1319 1320 ENDIF 1321 1322 END SUBROUTINE att_get_dummy 1323 !------------------------------------------------------------------- 1324 !> @brief This function check if attribute is defined as dummy attribute 1325 !> in configuraton file 1326 !> 1327 !> @author J.Paul 1328 !> @date September, 2015 - Initial Version 1329 ! 1330 !> @param[in] td_att attribute structure 1331 !> @return true if attribute is dummy attribute 1332 !------------------------------------------------------------------- 1333 FUNCTION att_is_dummy(td_att) 1334 IMPLICIT NONE 1335 1336 ! Argument 1337 TYPE(TATT), INTENT(IN) :: td_att 1338 1339 ! function 1340 LOGICAL :: att_is_dummy 1341 1342 ! loop indices 1343 INTEGER(i4) :: ji 1344 !---------------------------------------------------------------- 1345 1346 att_is_dummy=.FALSE. 1347 DO ji=1,ip_maxdum 1348 IF( fct_lower(td_att%c_name) == fct_lower(cm_dumatt(ji)) )THEN 1349 att_is_dummy=.TRUE. 1350 EXIT 1351 ENDIF 1352 ENDDO 1353 1354 END FUNCTION att_is_dummy 1249 1355 END MODULE att 1250 1356
Note: See TracChangeset
for help on using the changeset viewer.