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 6440 for branches/UKMO/dev_r5518_GC3p0_package/NEMOGCM/TOOLS/SIREN/src/attribute.f90 – NEMO

Ignore:
Timestamp:
2016-04-07T16:32:24+02:00 (8 years ago)
Author:
dancopsey
Message:

Merged in nemo_v3_6_STABLE_copy up to revision 6436.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GC3p0_package/NEMOGCM/TOOLS/SIREN/src/attribute.f90

    r5037 r6440  
    8181! REVISION HISTORY: 
    8282!> @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 
    8487! 
    8588!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    97100   PUBLIC :: TATT       !< attribute structure 
    98101 
     102   PRIVATE :: cm_dumatt !< dummy attribute array 
     103 
    99104   ! function and subroutine 
    100105   PUBLIC :: att_init       !< initialize attribute structure 
     
    104109   PUBLIC :: att_get_index  !< get attribute index, in an array of attribute structure 
    105110   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 
    106113 
    107114   PRIVATE :: att__clean_unit ! clean attribute strcuture 
     
    130137      INTEGER(i4)       :: i_type = 0        !< attribute type 
    131138      INTEGER(i4)       :: i_len  = 0        !< number of value store in attribute 
    132       CHARACTER(LEN=lc) :: c_value = "none"  !< attribute value if type CHAR 
     139      CHARACTER(LEN=lc) :: c_value = 'none'  !< attribute value if type CHAR 
    133140      REAL(dp), DIMENSION(:), POINTER :: d_value => NULL() !< attribute value if type SHORT,INT,FLOAT or DOUBLE 
    134141   END TYPE TATT 
    135142 
     143   CHARACTER(LEN=lc), DIMENSION(ip_maxdum), SAVE :: cm_dumatt !< dummy attribute 
     144 
    136145   INTERFACE att_init 
    137       MODULE PROCEDURE att__init_c 
     146      MODULE PROCEDURE att__init_c     
    138147      MODULE PROCEDURE att__init_dp 
    139148      MODULE PROCEDURE att__init_dp_0d 
     
    181190   !> @date November, 2013 - Initial Version 
    182191   !> @date November, 2014 
    183    !>    - use function instead of overload assignment operator  
     192   !> - use function instead of overload assignment operator  
    184193   !> (to avoid memory leak)  
    185194   ! 
     
    234243 
    235244      ! local variable 
    236       REAL(dp), DIMENSION(:), ALLOCATABLE :: dl_value 
     245      REAL(dp)         , DIMENSION(:), ALLOCATABLE :: dl_value 
    237246      !---------------------------------------------------------------- 
    238247 
     
    300309   !> @author J.Paul 
    301310   !> @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   !> 
    304314   !> @param[in] td_att    array of attribute structure 
    305315   !> @param[in] cd_name   attribute name 
     
    355365 
    356366      att__init_c%c_name=TRIM(ADJUSTL(cd_name)) 
    357  
    358367      att__init_c%i_type=NF90_CHAR 
     368 
    359369      att__init_c%c_value=TRIM(ADJUSTL(cd_value)) 
    360370      att__init_c%i_len=LEN( TRIM(ADJUSTL(cd_value)) ) 
     
    368378   !> 
    369379   !> @author J.Paul 
    370    !> @dtae November, 2013 - Initial Version 
     380   !> @date November, 2013 - Initial Version 
    371381   ! 
    372382   !> @param[in] cd_name   attribute name 
     
    10681078   !> @author J.Paul 
    10691079   !> @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. 
    10711082   ! 
    10721083   !> @param[in] td_att attribute structure 
     
    11141125 
    11151126            CASE(NF90_CHAR) 
     1127 
    11161128               cl_value=td_att%c_value 
    11171129 
     
    12471259 
    12481260   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 
    12491355END MODULE att 
    12501356 
Note: See TracChangeset for help on using the changeset viewer.