New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 6625 for branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/TOOLS/SIREN/src/attribute.f90 – NEMO

Ignore:
Timestamp:
2016-05-26T11:08:07+02:00 (8 years ago)
Author:
kingr
Message:

Rolled back to r6613

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/TOOLS/SIREN/src/attribute.f90

    r6617 r6625  
    8181! REVISION HISTORY: 
    8282!> @date November, 2013 - Initial Version 
    83 !> @date November, 2014  
    84 !> - Fix memory leaks bug 
    85 !> @date September, 2015 
    86 !> - manage useless (dummy) attributes 
     83!> @date November, 2014 - Fix memory leaks bug 
    8784! 
    8885!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    10097   PUBLIC :: TATT       !< attribute structure 
    10198 
    102    PRIVATE :: cm_dumatt !< dummy attribute array 
    103  
    10499   ! function and subroutine 
    105100   PUBLIC :: att_init       !< initialize attribute structure 
     
    109104   PUBLIC :: att_get_index  !< get attribute index, in an array of attribute structure 
    110105   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 
    113106 
    114107   PRIVATE :: att__clean_unit ! clean attribute strcuture 
     
    137130      INTEGER(i4)       :: i_type = 0        !< attribute type 
    138131      INTEGER(i4)       :: i_len  = 0        !< number of value store in attribute 
    139       CHARACTER(LEN=lc) :: c_value = 'none'  !< attribute value if type CHAR 
     132      CHARACTER(LEN=lc) :: c_value = "none"  !< attribute value if type CHAR 
    140133      REAL(dp), DIMENSION(:), POINTER :: d_value => NULL() !< attribute value if type SHORT,INT,FLOAT or DOUBLE 
    141134   END TYPE TATT 
    142135 
    143    CHARACTER(LEN=lc), DIMENSION(ip_maxdum), SAVE :: cm_dumatt !< dummy attribute 
    144  
    145136   INTERFACE att_init 
    146       MODULE PROCEDURE att__init_c     
     137      MODULE PROCEDURE att__init_c 
    147138      MODULE PROCEDURE att__init_dp 
    148139      MODULE PROCEDURE att__init_dp_0d 
     
    190181   !> @date November, 2013 - Initial Version 
    191182   !> @date November, 2014 
    192    !> - use function instead of overload assignment operator  
     183   !>    - use function instead of overload assignment operator  
    193184   !> (to avoid memory leak)  
    194185   ! 
     
    243234 
    244235      ! local variable 
    245       REAL(dp)         , DIMENSION(:), ALLOCATABLE :: dl_value 
     236      REAL(dp), DIMENSION(:), ALLOCATABLE :: dl_value 
    246237      !---------------------------------------------------------------- 
    247238 
     
    309300   !> @author J.Paul 
    310301   !> @date November, 2013 - Initial Version 
    311    !> @date September, 2014  
    312    !> - bug fix with use of id read from attribute structure 
    313    !> 
     302   !> @date September, 2014 - bug fix with use of id read from attribute structure 
     303   ! 
    314304   !> @param[in] td_att    array of attribute structure 
    315305   !> @param[in] cd_name   attribute name 
     
    365355 
    366356      att__init_c%c_name=TRIM(ADJUSTL(cd_name)) 
     357 
    367358      att__init_c%i_type=NF90_CHAR 
    368  
    369359      att__init_c%c_value=TRIM(ADJUSTL(cd_value)) 
    370360      att__init_c%i_len=LEN( TRIM(ADJUSTL(cd_value)) ) 
     
    378368   !> 
    379369   !> @author J.Paul 
    380    !> @date November, 2013 - Initial Version 
     370   !> @dtae November, 2013 - Initial Version 
    381371   ! 
    382372   !> @param[in] cd_name   attribute name 
     
    10781068   !> @author J.Paul 
    10791069   !> @date November, 2013 - Initial Version 
    1080    !> @date September, 2014  
    1081    !> - take into account type of attribute. 
     1070   !> @date September, 2014 - take into account type of attribute. 
    10821071   ! 
    10831072   !> @param[in] td_att attribute structure 
     
    11251114 
    11261115            CASE(NF90_CHAR) 
    1127  
    11281116               cl_value=td_att%c_value 
    11291117 
     
    12591247 
    12601248   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 
    13551249END MODULE att 
    13561250 
Note: See TracChangeset for help on using the changeset viewer.