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 4193 for branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90 – NEMO

Ignore:
Timestamp:
2013-11-14T12:04:31+01:00 (11 years ago)
Author:
cbricaud
Message:

Merge branch with revision 4119

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90

    r3771 r4193  
    3131   USE sbc_oce, ONLY :   nn_fsbc         ! ocean space and time domain 
    3232   USE trc_oce, ONLY :   nn_dttrc        !  !: frequency of step on passive tracers 
     33   USE icb_oce, ONLY :   class_num       !  !: iceberg classes 
    3334   USE domngb          ! ocean space and time domain 
    3435   USE phycst          ! physical constants 
     
    3637   USE xios 
    3738# endif 
     39   USE ioipsl, ONLY :  ju2ymds    ! for calendar 
    3840 
    3941   IMPLICIT NONE 
     
    5254   PRIVATE iom_p1d, iom_p2d, iom_p3d 
    5355#if defined key_iomput 
    54    PRIVATE iom_set_domain_attr, iom_set_axis_attr, iom_set_field_attr, iom_set_file_attr, iom_set_grid_attr 
    55    PRIVATE set_grid, set_scalar, set_xmlatt, set_mooring 
     56   PRIVATE iom_set_domain_attr, iom_set_axis_attr, iom_set_field_attr, iom_set_file_attr, iom_get_file_attr, iom_set_grid_attr 
     57   PRIVATE set_grid, set_scalar, set_xmlatt, set_mooring, iom_update_file_name, iom_sdate 
    5658# endif 
    5759 
     
    98100      clname = "nemo" 
    99101      IF( TRIM(Agrif_CFixed()) /= '0' )   clname = TRIM(Agrif_CFixed())//"_"//TRIM(clname) 
     102# if defined key_mpp_mpi 
    100103      CALL xios_context_initialize(TRIM(clname), mpi_comm_opa) 
     104# else 
     105      CALL xios_context_initialize(TRIM(clname), 0) 
     106# endif 
    101107      CALL iom_swap 
    102108 
     
    123129      CALL iom_set_axis_attr( "depthw", gdepw_0 ) 
    124130# if defined key_floats 
    125       CALL iom_set_axis_attr( "nfloat", (ji, ji=1,nfloat) ) 
     131      CALL iom_set_axis_attr( "nfloat", (/ (REAL(ji,wp), ji=1,nfloat) /) ) 
    126132# endif 
     133      CALL iom_set_axis_attr( "icbcla", class_num ) 
    127134       
    128135      ! automatic definitions of some of the xml attributs 
     
    130137 
    131138      ! end file definition 
    132        dtime%second=rdt 
    133        CALL xios_set_timestep(dtime) 
    134        CALL xios_close_context_definition() 
    135  
    136        CALL xios_update_calendar(0) 
     139      dtime%second = rdt 
     140      CALL xios_set_timestep(dtime) 
     141      CALL xios_close_context_definition() 
     142       
     143      CALL xios_update_calendar(0) 
    137144#endif 
    138  
     145       
    139146   END SUBROUTINE iom_init 
    140147 
     
    174181      LOGICAL         , INTENT(in   ), OPTIONAL ::   ldiof    ! Interp On the Fly, needed for AGRIF (default = .FALSE.) 
    175182 
    176       CHARACTER(LEN=100)    ::   clname    ! the name of the file based on cdname [[+clcpu]+clcpu] 
    177       CHARACTER(LEN=100)    ::   cltmpn    ! tempory name to store clname (in writting mode) 
     183      CHARACTER(LEN=256)    ::   clname    ! the name of the file based on cdname [[+clcpu]+clcpu] 
     184      CHARACTER(LEN=256)    ::   cltmpn    ! tempory name to store clname (in writting mode) 
    178185      CHARACTER(LEN=10)     ::   clsuffix  ! ".nc" or ".dimg" 
    179186      CHARACTER(LEN=15)     ::   clcpu     ! the cpu number (max jpmax_digits digits) 
    180       CHARACTER(LEN=100)    ::   clinfo    ! info character 
     187      CHARACTER(LEN=256)    ::   clinfo    ! info character 
    181188      LOGICAL               ::   llok      ! check the existence  
    182189      LOGICAL               ::   llwrt     ! local definition of ldwrt 
     
    561568      REAL(wp)                       ::   zscf, zofs  ! sacle_factor and add_offset 
    562569      INTEGER                        ::   itmp        ! temporary integer 
    563       CHARACTER(LEN=100)             ::   clinfo      ! info character 
    564       CHARACTER(LEN=100)             ::   clname      ! file name 
     570      CHARACTER(LEN=256)             ::   clinfo      ! info character 
     571      CHARACTER(LEN=256)             ::   clname      ! file name 
    565572      CHARACTER(LEN=1)               ::   clrankpv, cldmspc      !  
    566573      !--------------------------------------------------------------------- 
     
    10101017   !!---------------------------------------------------------------------- 
    10111018 
    1012  
    10131019#if defined key_iomput 
    10141020 
    1015    SUBROUTINE iom_set_domain_attr( cdname, ni_glo, nj_glo, ibegin, jbegin, ni, nj, zoom_ibegin, zoom_jbegin, zoom_ni, zoom_nj,   & 
     1021   SUBROUTINE iom_set_domain_attr( cdid, ni_glo, nj_glo, ibegin, jbegin, ni, nj, zoom_ibegin, zoom_jbegin, zoom_ni, zoom_nj,   & 
    10161022      &                                    data_dim, data_ibegin, data_ni, data_jbegin, data_nj, lonvalue, latvalue, mask ) 
    1017       CHARACTER(LEN=*)                 , INTENT(in) ::   cdname 
     1023      CHARACTER(LEN=*)                 , INTENT(in) ::   cdid 
    10181024      INTEGER                , OPTIONAL, INTENT(in) ::   ni_glo, nj_glo, ibegin, jbegin, ni, nj 
    10191025      INTEGER                , OPTIONAL, INTENT(in) ::   data_dim, data_ibegin, data_ni, data_jbegin, data_nj 
     
    10221028      LOGICAL, DIMENSION(:,:), OPTIONAL, INTENT(in) ::   mask 
    10231029 
    1024       IF ( xios_is_valid_domain     (cdname) ) THEN 
    1025          CALL xios_set_domain_attr     ( cdname, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj,   & 
    1026             &    data_dim=data_dim, data_ibegin=data_ibegin, data_ni=data_ni, data_jbegin=data_jbegin, data_nj=data_nj   ,   & 
    1027             &    zoom_ibegin=zoom_ibegin, zoom_jbegin=zoom_jbegin, zoom_ni=zoom_ni, zoom_nj=zoom_nj,                         & 
     1030      IF ( xios_is_valid_domain     (cdid) ) THEN 
     1031         CALL xios_set_domain_attr     ( cdid, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj,   & 
     1032            &    data_dim=data_dim, data_ibegin=data_ibegin, data_ni=data_ni, data_jbegin=data_jbegin, data_nj=data_nj ,   & 
     1033            &    zoom_ibegin=zoom_ibegin, zoom_jbegin=zoom_jbegin, zoom_ni=zoom_ni, zoom_nj=zoom_nj,                       & 
    10281034            &    lonvalue=lonvalue, latvalue=latvalue,mask=mask ) 
    10291035      ENDIF 
    10301036 
    1031       IF ( xios_is_valid_domaingroup(cdname) ) THEN 
    1032          CALL xios_set_domaingroup_attr( cdname, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj,   & 
    1033             &    data_dim=data_dim, data_ibegin=data_ibegin, data_ni=data_ni, data_jbegin=data_jbegin, data_nj=data_nj   ,   & 
    1034             &    zoom_ibegin=zoom_ibegin, zoom_jbegin=zoom_jbegin, zoom_ni=zoom_ni, zoom_nj=zoom_nj,                         & 
     1037      IF ( xios_is_valid_domaingroup(cdid) ) THEN 
     1038         CALL xios_set_domaingroup_attr( cdid, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj,   & 
     1039            &    data_dim=data_dim, data_ibegin=data_ibegin, data_ni=data_ni, data_jbegin=data_jbegin, data_nj=data_nj ,   & 
     1040            &    zoom_ibegin=zoom_ibegin, zoom_jbegin=zoom_jbegin, zoom_ni=zoom_ni, zoom_nj=zoom_nj,                       & 
    10351041            &    lonvalue=lonvalue, latvalue=latvalue,mask=mask ) 
    10361042      ENDIF 
     1043      CALL xios_solve_inheritance() 
    10371044 
    10381045   END SUBROUTINE iom_set_domain_attr 
    10391046 
    10401047 
    1041    SUBROUTINE iom_set_axis_attr( cdname, paxis ) 
    1042       CHARACTER(LEN=*)      , INTENT(in) ::   cdname 
     1048   SUBROUTINE iom_set_axis_attr( cdid, paxis ) 
     1049      CHARACTER(LEN=*)      , INTENT(in) ::   cdid 
    10431050      REAL(wp), DIMENSION(:), INTENT(in) ::   paxis 
    1044       IF ( xios_is_valid_axis     (cdname) )   CALL xios_set_axis_attr     ( cdname, size=size(paxis),value=paxis ) 
    1045       IF ( xios_is_valid_axisgroup(cdname) )   CALL xios_set_axisgroup_attr( cdname, size=size(paxis),value=paxis ) 
     1051      IF ( xios_is_valid_axis     (cdid) )   CALL xios_set_axis_attr     ( cdid, size=size(paxis),value=paxis ) 
     1052      IF ( xios_is_valid_axisgroup(cdid) )   CALL xios_set_axisgroup_attr( cdid, size=size(paxis),value=paxis ) 
     1053      CALL xios_solve_inheritance() 
    10461054   END SUBROUTINE iom_set_axis_attr 
    10471055 
    10481056 
    1049    SUBROUTINE iom_set_field_attr( cdname, freq_op) 
    1050       CHARACTER(LEN=*)          , INTENT(in) ::   cdname 
     1057   SUBROUTINE iom_set_field_attr( cdid, freq_op, freq_offset ) 
     1058      CHARACTER(LEN=*)          , INTENT(in) ::   cdid 
    10511059      CHARACTER(LEN=*),OPTIONAL , INTENT(in) ::   freq_op 
    1052       IF ( xios_is_valid_field     (cdname) )   CALL xios_set_field_attr     ( cdname, freq_op=freq_op ) 
    1053       IF ( xios_is_valid_fieldgroup(cdname) )   CALL xios_set_fieldgroup_attr( cdname, freq_op=freq_op ) 
     1060      CHARACTER(LEN=*),OPTIONAL , INTENT(in) ::   freq_offset 
     1061      IF ( xios_is_valid_field     (cdid) )   CALL xios_set_field_attr     ( cdid, freq_op=freq_op, freq_offset=freq_offset ) 
     1062      IF ( xios_is_valid_fieldgroup(cdid) )   CALL xios_set_fieldgroup_attr( cdid, freq_op=freq_op, freq_offset=freq_offset ) 
     1063      CALL xios_solve_inheritance() 
    10541064   END SUBROUTINE iom_set_field_attr 
    10551065 
    10561066 
    1057    SUBROUTINE iom_set_file_attr( cdname, name, name_suffix ) 
    1058       CHARACTER(LEN=*)          , INTENT(in) ::   cdname 
     1067   SUBROUTINE iom_set_file_attr( cdid, name, name_suffix ) 
     1068      CHARACTER(LEN=*)          , INTENT(in) ::   cdid 
    10591069      CHARACTER(LEN=*),OPTIONAL , INTENT(in) ::   name, name_suffix 
    1060       IF ( xios_is_valid_file     (cdname) )   CALL xios_set_file_attr     ( cdname, name=name, name_suffix=name_suffix ) 
    1061       IF ( xios_is_valid_filegroup(cdname) )   CALL xios_set_filegroup_attr( cdname, name=name, name_suffix=name_suffix ) 
     1070      IF ( xios_is_valid_file     (cdid) )   CALL xios_set_file_attr     ( cdid, name=name, name_suffix=name_suffix ) 
     1071      IF ( xios_is_valid_filegroup(cdid) )   CALL xios_set_filegroup_attr( cdid, name=name, name_suffix=name_suffix ) 
     1072      CALL xios_solve_inheritance() 
    10621073   END SUBROUTINE iom_set_file_attr 
    10631074 
    10641075 
    1065    SUBROUTINE iom_set_grid_attr( cdname, mask ) 
    1066       CHARACTER(LEN=*)                   , INTENT(in) ::   cdname 
     1076   SUBROUTINE iom_get_file_attr( cdid, name, name_suffix, output_freq ) 
     1077      CHARACTER(LEN=*)          , INTENT(in ) ::   cdid 
     1078      CHARACTER(LEN=*),OPTIONAL , INTENT(out) ::   name, name_suffix, output_freq 
     1079      LOGICAL                                 ::   llexist1,llexist2,llexist3 
     1080      !--------------------------------------------------------------------- 
     1081      IF( PRESENT( name        ) )   name = ''          ! default values 
     1082      IF( PRESENT( name_suffix ) )   name_suffix = '' 
     1083      IF( PRESENT( output_freq ) )   output_freq = '' 
     1084      IF ( xios_is_valid_file     (cdid) ) THEN 
     1085         CALL xios_solve_inheritance() 
     1086         CALL xios_is_defined_file_attr     ( cdid, name = llexist1, name_suffix = llexist2, output_freq = llexist3) 
     1087         IF(llexist1)   CALL xios_get_file_attr     ( cdid, name = name ) 
     1088         IF(llexist2)   CALL xios_get_file_attr     ( cdid, name_suffix = name_suffix ) 
     1089         IF(llexist3)   CALL xios_get_file_attr     ( cdid, output_freq = output_freq ) 
     1090      ENDIF 
     1091      IF ( xios_is_valid_filegroup(cdid) ) THEN 
     1092         CALL xios_solve_inheritance() 
     1093         CALL xios_is_defined_filegroup_attr( cdid, name = llexist1, name_suffix = llexist2, output_freq = llexist3) 
     1094         IF(llexist1)   CALL xios_get_filegroup_attr( cdid, name = name ) 
     1095         IF(llexist2)   CALL xios_get_filegroup_attr( cdid, name_suffix = name_suffix ) 
     1096         IF(llexist3)   CALL xios_get_filegroup_attr( cdid, output_freq = output_freq ) 
     1097      ENDIF 
     1098   END SUBROUTINE iom_get_file_attr 
     1099 
     1100 
     1101   SUBROUTINE iom_set_grid_attr( cdid, mask ) 
     1102      CHARACTER(LEN=*)                   , INTENT(in) ::   cdid 
    10671103      LOGICAL, DIMENSION(:,:,:), OPTIONAL, INTENT(in) ::   mask 
    1068       IF ( xios_is_valid_grid     (cdname) )   CALL xios_set_grid_attr     ( cdname, mask=mask ) 
    1069       IF ( xios_is_valid_gridgroup(cdname) )   CALL xios_set_gridgroup_attr( cdname, mask=mask ) 
     1104      IF ( xios_is_valid_grid     (cdid) )   CALL xios_set_grid_attr     ( cdid, mask=mask ) 
     1105      IF ( xios_is_valid_gridgroup(cdid) )   CALL xios_set_gridgroup_attr( cdid, mask=mask ) 
     1106      CALL xios_solve_inheritance() 
    10701107   END SUBROUTINE iom_set_grid_attr 
    10711108 
     
    10731110   SUBROUTINE set_grid( cdgrd, plon, plat ) 
    10741111      !!---------------------------------------------------------------------- 
    1075       !!                     ***  ROUTINE   *** 
     1112      !!                     ***  ROUTINE set_grid  *** 
    10761113      !! 
    10771114      !! ** Purpose :   define horizontal grids 
     
    11011138         END SELECT 
    11021139         ! 
    1103          CALL iom_set_domain_attr( "grid_"//cdgrd       , mask = zmask(:,:,1) /= 0. ) 
    1104          CALL iom_set_grid_attr  ( "grid_"//cdgrd//"_3D", mask = zmask(:,:,:) /= 0. ) 
     1140         CALL iom_set_domain_attr( "grid_"//cdgrd       , mask = RESHAPE(zmask(nldi:nlei,nldj:nlej,1),(/ni,nj    /)) /= 0. ) 
     1141         CALL iom_set_grid_attr  ( "grid_"//cdgrd//"_3D", mask = RESHAPE(zmask(nldi:nlei,nldj:nlej,:),(/ni,nj,jpk/)) /= 0. ) 
    11051142      ENDIF 
    11061143       
     
    11101147   SUBROUTINE set_scalar 
    11111148      !!---------------------------------------------------------------------- 
    1112       !!                     ***  ROUTINE   *** 
     1149      !!                     ***  ROUTINE set_scalar  *** 
    11131150      !! 
    11141151      !! ** Purpose :   define fake grids for scalar point 
     
    11261163   SUBROUTINE set_xmlatt 
    11271164      !!---------------------------------------------------------------------- 
    1128       !!                     ***  ROUTINE   *** 
     1165      !!                     ***  ROUTINE set_xmlatt  *** 
    11291166      !! 
    11301167      !! ** Purpose :   automatic definitions of some of the xml attributs... 
    11311168      !! 
    11321169      !!---------------------------------------------------------------------- 
    1133       CHARACTER(len=6),DIMENSION( 8) ::   clsuff                   ! suffix name 
    11341170      CHARACTER(len=1),DIMENSION( 3) ::   clgrd                    ! suffix name 
    1135       CHARACTER(len=50)              ::   clname                   ! file name 
     1171      CHARACTER(len=256)             ::   clsuff                   ! suffix name 
    11361172      CHARACTER(len=1)               ::   cl1                      ! 1 character 
    11371173      CHARACTER(len=2)               ::   cl2                      ! 1 character 
    1138       CHARACTER(len=255)             ::   tfo 
    1139       INTEGER                        ::   idt                      ! time-step in seconds 
    1140       INTEGER                        ::   iddss, ihhss             ! number of seconds in 1 day, 1 hour and 1 year 
    1141       INTEGER                        ::   iyymo                    ! number of months in 1 year 
    1142       INTEGER                        ::   jg, jh, jd, jm, jy       ! loop counters 
     1174      INTEGER                        ::   ji, jg                   ! loop counters 
    11431175      INTEGER                        ::   ix, iy                   ! i-,j- index 
    11441176      REAL(wp)        ,DIMENSION(11) ::   zlontao                  ! longitudes of tao    moorings 
     
    11501182      !!---------------------------------------------------------------------- 
    11511183      !  
    1152       idt   = NINT( rdttra(1)     ) 
    1153       iddss = NINT( rday          )                                         ! number of seconds in 1 day 
    1154       ihhss = NINT( rmmss * rhhmm )                                         ! number of seconds in 1 hour 
    1155       iyymo = NINT( raamo         )                                         ! number of months in 1 year 
    1156  
    11571184      ! frequency of the call of iom_put (attribut: freq_op) 
    1158       tfo = TRIM(i2str(idt))//'s' 
    1159       CALL iom_set_field_attr('field_definition', freq_op=tfo) 
    1160       CALL iom_set_field_attr('SBC'   , freq_op=TRIM(i2str(idt* nn_fsbc ))//'s') 
    1161       CALL iom_set_field_attr('ptrc_T', freq_op=TRIM(i2str(idt* nn_dttrc))//'s') 
    1162       CALL iom_set_field_attr('diad_T', freq_op=TRIM(i2str(idt* nn_dttrc))//'s') 
     1185      WRITE(cl1,'(i1)')        1   ;   CALL iom_set_field_attr('field_definition', freq_op = cl1//'ts', freq_offset='0ts') 
     1186      WRITE(cl1,'(i1)')  nn_fsbc   ;   CALL iom_set_field_attr('SBC'             , freq_op = cl1//'ts', freq_offset='0ts') 
     1187      WRITE(cl1,'(i1)') nn_dttrc   ;   CALL iom_set_field_attr('ptrc_T'          , freq_op = cl1//'ts', freq_offset='0ts') 
     1188      WRITE(cl1,'(i1)') nn_dttrc   ;   CALL iom_set_field_attr('diad_T'          , freq_op = cl1//'ts', freq_offset='0ts') 
    11631189        
    11641190      ! output file names (attribut: name) 
    1165       clsuff(:) = (/ 'grid_T', 'grid_U', 'grid_V', 'grid_W', 'icemod', 'ptrc_T', 'diad_T', 'scalar' /)       
    1166       DO jg = 1, SIZE(clsuff)                                                                  ! grid type 
    1167          DO jh = 1, 24                                                                         ! 1-24 hours 
    1168             WRITE(cl2,'(i2)') jh  
    1169             CALL dia_nam( clname, jh * ihhss, clsuff(jg), ldfsec = .TRUE. ) 
    1170             CALL iom_set_file_attr(TRIM(ADJUSTL(cl2))//'h_'//clsuff(jg), name=TRIM(clname)) 
    1171          END DO 
    1172          DO jd = 1, 30                                                                         ! 1-30 days 
    1173             WRITE(cl1,'(i1)') jd  
    1174             CALL dia_nam( clname, jd * iddss, clsuff(jg), ldfsec = .TRUE. ) 
    1175             CALL iom_set_file_attr(cl1//'d_'//clsuff(jg), name=TRIM(clname)) 
    1176          END DO 
    1177          DO jm = 1, 11                                                                         ! 1-11 months 
    1178             WRITE(cl1,'(i1)') jm  
    1179             CALL dia_nam( clname, -jm, clsuff(jg) ) 
    1180             CALL iom_set_file_attr(cl1//'m_'//clsuff(jg), name=TRIM(clname)) 
    1181          END DO 
    1182          DO jy = 1, 50                                                                         ! 1-50 years   
    1183             WRITE(cl2,'(i2)') jy  
    1184             CALL dia_nam( clname, -jy * iyymo, clsuff(jg) ) 
    1185             CALL iom_set_file_attr(TRIM(ADJUSTL(cl2))//'y_'//clsuff(jg), name=TRIM(clname)) 
    1186          END DO 
     1191      DO ji = 1, 9 
     1192         WRITE(cl1,'(i1)') ji  
     1193         CALL iom_update_file_name('file'//cl1) 
     1194      END DO 
     1195      DO ji = 1, 99 
     1196         WRITE(cl2,'(i2.2)') ji  
     1197         CALL iom_update_file_name('file'//cl2) 
    11871198      END DO 
    11881199 
     
    11931204         ! Equatorial section (attributs: jbegin, ni, name_suffix) 
    11941205         CALL dom_ngb( 0., 0., ix, iy, cl1 ) 
    1195          CALL iom_set_domain_attr('Eq'//cl1, zoom_jbegin=iy, zoom_ni=jpiglo) 
    1196          CALL iom_set_file_attr('Eq'//cl1, name_suffix= '_Eq') 
     1206         CALL iom_set_domain_attr ('Eq'//cl1, zoom_jbegin=iy, zoom_ni=jpiglo) 
     1207         CALL iom_get_file_attr   ('Eq'//cl1, name_suffix = clsuff             ) 
     1208         CALL iom_set_file_attr   ('Eq'//cl1, name_suffix = TRIM(clsuff)//'_Eq') 
     1209         CALL iom_update_file_name('Eq'//cl1) 
    11971210      END DO 
    11981211      ! TAO moorings (attributs: ibegin, jbegin, name_suffix) 
     
    12141227   SUBROUTINE set_mooring( plon, plat) 
    12151228      !!---------------------------------------------------------------------- 
    1216       !!                     ***  ROUTINE   *** 
     1229      !!                     ***  ROUTINE set_mooring  *** 
    12171230      !! 
    12181231      !! ** Purpose :   automatic definitions of moorings xml attributs... 
     
    12231236!!$      CHARACTER(len=1),DIMENSION(4) ::   clgrd = (/ 'T', 'U', 'V', 'W' /)   ! suffix name 
    12241237      CHARACTER(len=1),DIMENSION(1) ::   clgrd = (/ 'T' /)        ! suffix name 
    1225       CHARACTER(len=50)             ::   clname                   ! file name 
     1238      CHARACTER(len=256)            ::   clname                   ! file name 
     1239      CHARACTER(len=256)            ::   clsuff                   ! suffix name 
    12261240      CHARACTER(len=1)              ::   cl1                      ! 1 character 
    12271241      CHARACTER(len=6)              ::   clon,clat                ! name of longitude, latitude 
     
    12691283               ENDIF 
    12701284               clname = TRIM(ADJUSTL(clat))//TRIM(ADJUSTL(clon)) 
    1271                CALL iom_set_domain_attr(TRIM(clname)//cl1, zoom_ibegin= ix, zoom_jbegin= iy) 
    1272                CALL iom_set_file_attr(TRIM(clname)//cl1, name_suffix= '_'//TRIM(clname)) 
     1285               CALL iom_set_domain_attr (TRIM(clname)//cl1, zoom_ibegin= ix, zoom_jbegin= iy) 
     1286               CALL iom_get_file_attr   (TRIM(clname)//cl1, name_suffix = clsuff                         ) 
     1287               CALL iom_set_file_attr   (TRIM(clname)//cl1, name_suffix = TRIM(clsuff)//'_'//TRIM(clname)) 
     1288               CALL iom_update_file_name(TRIM(clname)//cl1) 
    12731289            END DO 
    12741290         END DO 
     
    12771293   END SUBROUTINE set_mooring 
    12781294 
     1295    
     1296   SUBROUTINE iom_update_file_name( cdid ) 
     1297      !!---------------------------------------------------------------------- 
     1298      !!                     ***  ROUTINE iom_update_file_name  *** 
     1299      !! 
     1300      !! ** Purpose :    
     1301      !! 
     1302      !!---------------------------------------------------------------------- 
     1303      CHARACTER(LEN=*)          , INTENT(in) ::   cdid 
     1304      ! 
     1305      CHARACTER(LEN=256) ::   clname 
     1306      CHARACTER(LEN=20)  ::   clfreq 
     1307      CHARACTER(LEN=20)  ::   cldate 
     1308      INTEGER            ::   idx 
     1309      INTEGER            ::   jn 
     1310      INTEGER            ::   itrlen 
     1311      INTEGER            ::   iyear, imonth, iday, isec 
     1312      REAL(wp)           ::   zsec 
     1313      LOGICAL            ::   llexist 
     1314      !!---------------------------------------------------------------------- 
     1315 
     1316      DO jn = 1,2 
     1317 
     1318         IF( jn == 1 )   CALL iom_get_file_attr( cdid, name        = clname, output_freq = clfreq ) 
     1319         IF( jn == 2 )   CALL iom_get_file_attr( cdid, name_suffix = clname ) 
     1320 
     1321         IF ( TRIM(clname) /= '' ) THEN  
     1322 
     1323            idx = INDEX(clname,'@expname@') + INDEX(clname,'@EXPNAME@') 
     1324            DO WHILE ( idx /= 0 )  
     1325               clname = clname(1:idx-1)//TRIM(cexper)//clname(idx+9:LEN_TRIM(clname)) 
     1326               idx = INDEX(clname,'@expname@') + INDEX(clname,'@EXPNAME@') 
     1327            END DO 
     1328 
     1329            idx = INDEX(clname,'@freq@') + INDEX(clname,'@FREQ@') 
     1330            DO WHILE ( idx /= 0 )  
     1331               IF ( TRIM(clfreq) /= '' ) THEN 
     1332                  itrlen = LEN_TRIM(clfreq) 
     1333                  IF ( clfreq(itrlen-1:itrlen) == 'mo' ) clfreq = clfreq(1:itrlen-1) 
     1334                  clname = clname(1:idx-1)//TRIM(clfreq)//clname(idx+6:LEN_TRIM(clname)) 
     1335               ELSE 
     1336                  CALL ctl_stop('error in the name of file id '//TRIM(cdid),   & 
     1337                     & ' attribute output_freq is undefined -> cannot replace @freq@ in '//TRIM(clname) ) 
     1338               ENDIF 
     1339               idx = INDEX(clname,'@freq@') + INDEX(clname,'@FREQ@') 
     1340            END DO 
     1341 
     1342            idx = INDEX(clname,'@startdate@') + INDEX(clname,'@STARTDATE@') 
     1343            DO WHILE ( idx /= 0 )  
     1344               cldate = iom_sdate( fjulday - rdttra(1) / rday ) 
     1345               clname = clname(1:idx-1)//TRIM(cldate)//clname(idx+11:LEN_TRIM(clname)) 
     1346               idx = INDEX(clname,'@startdate@') + INDEX(clname,'@STARTDATE@') 
     1347            END DO 
     1348 
     1349            idx = INDEX(clname,'@startdatefull@') + INDEX(clname,'@STARTDATEFULL@') 
     1350            DO WHILE ( idx /= 0 )  
     1351               cldate = iom_sdate( fjulday - rdttra(1) / rday, ldfull = .TRUE. ) 
     1352               clname = clname(1:idx-1)//TRIM(cldate)//clname(idx+15:LEN_TRIM(clname)) 
     1353               idx = INDEX(clname,'@startdatefull@') + INDEX(clname,'@STARTDATEFULL@') 
     1354            END DO 
     1355 
     1356            idx = INDEX(clname,'@enddate@') + INDEX(clname,'@ENDDATE@') 
     1357            DO WHILE ( idx /= 0 )  
     1358               cldate = iom_sdate( fjulday + rdttra(1) / rday * REAL( nitend - nit000, wp ), ld24 = .TRUE. ) 
     1359               clname = clname(1:idx-1)//TRIM(cldate)//clname(idx+9:LEN_TRIM(clname)) 
     1360               idx = INDEX(clname,'@enddate@') + INDEX(clname,'@ENDDATE@') 
     1361            END DO 
     1362 
     1363            idx = INDEX(clname,'@enddatefull@') + INDEX(clname,'@ENDDATEFULL@') 
     1364            DO WHILE ( idx /= 0 )  
     1365               cldate = iom_sdate( fjulday + rdttra(1) / rday * REAL( nitend - nit000, wp ), ld24 = .TRUE., ldfull = .TRUE. ) 
     1366               clname = clname(1:idx-1)//TRIM(cldate)//clname(idx+13:LEN_TRIM(clname)) 
     1367               idx = INDEX(clname,'@enddatefull@') + INDEX(clname,'@ENDDATEFULL@') 
     1368            END DO 
     1369 
     1370            IF( jn == 1 )   CALL iom_set_file_attr( cdid, name        = clname ) 
     1371            IF( jn == 2 )   CALL iom_set_file_attr( cdid, name_suffix = clname ) 
     1372 
     1373         ENDIF 
     1374 
     1375      END DO 
     1376 
     1377   END SUBROUTINE iom_update_file_name 
     1378 
     1379 
     1380   FUNCTION iom_sdate( pjday, ld24, ldfull ) 
     1381      !!---------------------------------------------------------------------- 
     1382      !!                     ***  ROUTINE iom_sdate  *** 
     1383      !! 
     1384      !! ** Purpose :   send back the date corresponding to the given julian day 
     1385      !! 
     1386      !!---------------------------------------------------------------------- 
     1387      REAL(wp), INTENT(in   )           ::   pjday         ! julian day 
     1388      LOGICAL , INTENT(in   ), OPTIONAL ::   ld24          ! true to force 24:00 instead of 00:00 
     1389      LOGICAL , INTENT(in   ), OPTIONAL ::   ldfull        ! true to get the compleate date: yyyymmdd_hh:mm:ss 
     1390      ! 
     1391      CHARACTER(LEN=20) ::   iom_sdate 
     1392      CHARACTER(LEN=50) ::   clfmt                         !  format used to write the date  
     1393      INTEGER           ::   iyear, imonth, iday, ihour, iminute, isec 
     1394      REAL(wp)          ::   zsec 
     1395      LOGICAL           ::   ll24, llfull 
     1396      ! 
     1397      IF( PRESENT(ld24) ) THEN   ;   ll24 = ld24 
     1398      ELSE                       ;   ll24 = .FALSE. 
     1399      ENDIF 
     1400 
     1401      IF( PRESENT(ldfull) ) THEN   ;   llfull = ldfull 
     1402      ELSE                         ;   llfull = .FALSE. 
     1403      ENDIF 
     1404 
     1405      CALL ju2ymds( pjday, iyear, imonth, iday, zsec ) 
     1406      isec = NINT(zsec) 
     1407 
     1408      IF ( ll24 .AND. isec == 0 ) THEN   ! 00:00 of the next day -> move to 24:00 of the current day 
     1409         CALL ju2ymds( pjday - 1., iyear, imonth, iday, zsec ) 
     1410         isec = 86400 
     1411      ENDIF 
     1412 
     1413      IF( iyear < 10000 ) THEN   ;   clfmt = "i4.4,2i2.2"                ! format used to write the date  
     1414      ELSE                       ;   WRITE(clfmt, "('i',i1,',2i2.2')") INT(LOG10(REAL(iyear,wp))) + 1 
     1415      ENDIF 
     1416       
     1417      IF( llfull ) THEN  
     1418         clfmt = TRIM(clfmt)//",'_',i2.2,':',i2.2,':',i2.2" 
     1419         ihour   = isec / 3600 
     1420         isec    = MOD(isec, 3600) 
     1421         iminute = isec / 60 
     1422         isec    = MOD(isec, 60) 
     1423         WRITE(iom_sdate, '('//TRIM(clfmt)//')') iyear, imonth, iday, ihour, iminute, isec    ! date of the end of run 
     1424      ELSE 
     1425         WRITE(iom_sdate, '('//TRIM(clfmt)//')') iyear, imonth, iday                          ! date of the end of run 
     1426      ENDIF 
     1427 
     1428   END FUNCTION iom_sdate 
     1429 
    12791430#else 
    12801431 
     
    12851436 
    12861437#endif 
    1287  
    1288    FUNCTION i2str(int) 
    1289    IMPLICIT NONE 
    1290       INTEGER, INTENT(IN) :: int 
    1291       CHARACTER(LEN=255) :: i2str 
    1292  
    1293       WRITE(i2str,*) int 
    1294        
    1295    END FUNCTION i2str   
    12961438    
    12971439   !!====================================================================== 
Note: See TracChangeset for help on using the changeset viewer.