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 911 for trunk/NEMO/OPA_SRC/IOM – NEMO

Changeset 911 for trunk/NEMO/OPA_SRC/IOM


Ignore:
Timestamp:
2008-04-28T11:31:32+02:00 (16 years ago)
Author:
ctlod
Message:

Implementation of the BDY package, see ticket: #126

Location:
trunk/NEMO/OPA_SRC/IOM
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/IOM/iom.F90

    r752 r911  
    66   !! History :  9.0  ! 05 12  (J. Belier) Original code 
    77   !!            9.0  ! 06 02  (S. Masson) Adaptation to NEMO 
     8   !!             "   ! 07 07  (D. Storkey) Changes to iom_gettime 
    89   !!-------------------------------------------------------------------- 
    910   !!gm  caution add !DIR nec: improved performance to be checked as well as no result changes 
     
    646647 
    647648 
    648    SUBROUTINE iom_gettime( kiomid, cdvar, ptime ) 
     649   SUBROUTINE iom_gettime( kiomid, ptime, cdvar, kntime, cdunits, cdcalendar ) 
    649650      !!-------------------------------------------------------------------- 
    650651      !!                   ***  SUBROUTINE iom_gettime  *** 
     
    652653      !! ** Purpose : read the time axis cdvar in the file  
    653654      !!-------------------------------------------------------------------- 
    654       INTEGER               , INTENT(in   ) ::   kiomid   ! file Identifier 
    655       CHARACTER(len=*)      , INTENT(in   ) ::   cdvar    ! time axis name 
    656       REAL(wp), DIMENSION(:), INTENT(  out) ::   ptime    ! the time axis 
    657       ! 
     655      INTEGER                    , INTENT(in   ) ::   kiomid     ! file Identifier 
     656      REAL(wp), DIMENSION(:)     , INTENT(  out) ::   ptime      ! the time axis 
     657      CHARACTER(len=*), OPTIONAL , INTENT(in   ) ::   cdvar      ! time axis name 
     658      INTEGER         , OPTIONAL , INTENT(  out) ::   kntime     ! number of times in file 
     659      CHARACTER(len=*), OPTIONAL , INTENT(  out) ::   cdunits    ! units attribute of time coordinate 
     660      CHARACTER(len=*), OPTIONAL , INTENT(  out) ::   cdcalendar ! calendar attribute of  
     661      ! 
     662      INTEGER, DIMENSION(1) :: kdimsz 
    658663      INTEGER            ::   idvar    ! id of the variable 
     664      CHARACTER(LEN=32)  ::   tname    ! local name of time coordinate 
    659665      CHARACTER(LEN=100) ::   clinfo   ! info character 
    660666      !--------------------------------------------------------------------- 
    661667      ! 
    662       IF( kiomid > 0 ) THEN 
    663          clinfo = 'iom_gettime, file: '//trim(iom_file(kiomid)%name)//', var: '//trim(cdvar) 
    664          idvar = iom_varid( kiomid, cdvar ) 
     668      IF ( PRESENT(cdvar) ) THEN 
     669         tname = cdvar 
     670      ELSE 
     671         tname = iom_file(kiomid)%uldname 
     672      ENDIF 
     673      IF( kiomid > 0 ) THEN 
     674         clinfo = 'iom_gettime, file: '//trim(iom_file(kiomid)%name)//', var: '//trim(tname) 
     675         IF ( PRESENT(kntime) ) THEN 
     676            idvar  = iom_varid( kiomid, tname, kdimsz = kdimsz ) 
     677            kntime = kdimsz(1) 
     678         ELSE 
     679            idvar = iom_varid( kiomid, tname ) 
     680         ENDIF 
    665681         ! 
    666682         ptime(:) = 0. ! default definition 
     
    670686                  IF( iom_file(kiomid)%dimsz(1,idvar) == size(ptime) ) THEN 
    671687                     SELECT CASE (iom_file(kiomid)%iolib) 
    672                      CASE (jpioipsl )   ;   CALL iom_ioipsl_gettime( kiomid, idvar, ptime ) 
    673                      CASE (jpnf90   )   ;   CALL iom_nf90_gettime(   kiomid, idvar, ptime ) 
     688                     CASE (jpioipsl )   ;   CALL iom_ioipsl_gettime( kiomid, idvar, ptime, cdunits, cdcalendar ) 
     689                     CASE (jpnf90   )   ;   CALL iom_nf90_gettime(   kiomid, idvar, ptime, cdunits, cdcalendar ) 
    674690                     CASE (jprstdimg)   ;   CALL ctl_stop( TRIM(clinfo)//' case IO library == jprstdimg not coded...' ) 
    675691                     CASE DEFAULT     
  • trunk/NEMO/OPA_SRC/IOM/iom_def.F90

    r839 r911  
    55   !!==================================================================== 
    66   !! History :  9.0  ! 06 09  (S. Masson) Original code 
     7   !!             "   ! 07 07  (D. Storkey) Add uldname 
    78   !!-------------------------------------------------------------------- 
    89   !!--------------------------------------------------------------------------------- 
     
    5758      INTEGER                                   ::   iduld    !: id of the unlimited dimension 
    5859      INTEGER                                   ::   irec     !: writing record position   
     60      CHARACTER(LEN=32)                         ::   uldname  !: name of the unlimited dimension 
    5961      CHARACTER(LEN=32), DIMENSION(jpmax_vars)  ::   cn_var   !: names of the variables 
    6062      INTEGER, DIMENSION(jpmax_vars)            ::   nvid     !: id of the variables 
  • trunk/NEMO/OPA_SRC/IOM/iom_ioipsl.F90

    r745 r911  
    66   !! History :  9.0  ! 05 12  (J. Belier) Original code 
    77   !!            9.0  ! 06 02  (S. Masson) Adaptation to NEMO 
     8   !!             "   ! 07 07  (D. Storkey) Changes to iom_ioipsl_gettime 
    89   !!-------------------------------------------------------------------- 
    910   !!gm  caution add !DIR nec: improved performance to be checked as well as no result changes 
     
    254255 
    255256 
    256    SUBROUTINE iom_ioipsl_gettime( kiomid, kvid, ptime ) 
     257   SUBROUTINE iom_ioipsl_gettime( kiomid, kvid, ptime, cdunits, cdcalendar ) 
    257258      !!-------------------------------------------------------------------- 
    258259      !!                   ***  SUBROUTINE iom_gettime  *** 
     
    260261      !! ** Purpose : read the time axis kvid in the file with IOIPSL (only fliocom module) 
    261262      !!-------------------------------------------------------------------- 
    262       INTEGER               , INTENT(in   ) ::   kiomid   ! file Identifier 
    263       INTEGER               , INTENT(in   ) ::   kvid     ! variable id 
    264       REAL(wp), DIMENSION(:), INTENT(  out) ::   ptime    ! the time axis 
     263      INTEGER                   , INTENT(in   ) ::   kiomid     ! file Identifier 
     264      INTEGER                   , INTENT(in   ) ::   kvid       ! variable id 
     265      REAL(wp), DIMENSION(:)    , INTENT(  out) ::   ptime      ! the time axis 
     266      CHARACTER(len=*), OPTIONAL, INTENT(  out) ::   cdunits    ! units attribute 
     267      CHARACTER(len=*), OPTIONAL, INTENT(  out) ::   cdcalendar ! calendar attribute 
    265268      !--------------------------------------------------------------------- 
    266269      ! 
    267270      CALL fliogetv( iom_file(kiomid)%nfid, TRIM(iom_file(kiomid)%cn_var(kvid)), ptime(:),   & 
    268271            &         start=(/ 1 /), count=(/ iom_file(kiomid)%dimsz(1, kvid) /) ) 
     272      IF ( PRESENT(cdunits) ) THEN  
     273         CALL fliogeta( iom_file(kiomid)%nfid, TRIM(iom_file(kiomid)%cn_var(kvid)), "units", cdunits ) 
     274      ENDIF 
     275      IF ( PRESENT(cdcalendar) ) THEN  
     276         CALL fliogeta( iom_file(kiomid)%nfid, TRIM(iom_file(kiomid)%cn_var(kvid)), "calendar", cdcalendar ) 
     277      ENDIF 
    269278      ! 
    270279   END SUBROUTINE iom_ioipsl_gettime 
  • trunk/NEMO/OPA_SRC/IOM/iom_nf90.F90

    r745 r911  
    66   !! History :  9.0  ! 05 12  (J. Belier) Original code 
    77   !!            9.0  ! 06 02  (S. Masson) Adaptation to NEMO 
     8   !!             "   ! 07 07  (D. Storkey) Changes to iom_nf90_gettime 
    89   !!-------------------------------------------------------------------- 
    910   !!gm  caution add !DIR nec: improved performance to be checked as well as no result changes 
     
    121122         iom_file(kiomid)%irec   = -1   ! useless for NetCDF files, used to know if the file is in define mode  
    122123         CALL iom_nf90_check(NF90_Inquire(if90id, unlimitedDimId = iom_file(kiomid)%iduld), clinfo) 
     124         IF ( iom_file(kiomid)%iduld .GE. 0 ) THEN 
     125           CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, iom_file(kiomid)%iduld,   & 
     126        &                                               name = iom_file(kiomid)%uldname), clinfo) 
     127         ENDIF 
    123128         IF(lwp) WRITE(numout,*) '                   ---> '//TRIM(cdname)//' OK' 
    124129      ELSE 
     
    272277 
    273278 
    274    SUBROUTINE iom_nf90_gettime( kiomid, kvid, ptime ) 
     279   SUBROUTINE iom_nf90_gettime( kiomid, kvid, ptime, cdunits, cdcalendar ) 
    275280      !!-------------------------------------------------------------------- 
    276281      !!                   ***  SUBROUTINE iom_gettime  *** 
     
    278283      !! ** Purpose : read the time axis kvid in the file with NF90 
    279284      !!-------------------------------------------------------------------- 
    280       INTEGER               , INTENT(in   ) ::   kiomid   ! file Identifier 
    281       INTEGER               , INTENT(in   ) ::   kvid     ! variable id 
    282       REAL(wp), DIMENSION(:), INTENT(  out) ::   ptime    ! the time axis 
     285      INTEGER                   , INTENT(in   ) ::   kiomid     ! file Identifier 
     286      INTEGER                   , INTENT(in   ) ::   kvid       ! variable id 
     287      REAL(wp), DIMENSION(:)    , INTENT(  out) ::   ptime      ! the time axis 
     288      CHARACTER(len=*), OPTIONAL, INTENT(  out) ::   cdunits    ! units attribute 
     289      CHARACTER(len=*), OPTIONAL, INTENT(  out) ::   cdcalendar ! calendar attribute 
    283290      ! 
    284291      CHARACTER(LEN=100) ::   clinfo     ! info character 
     
    287294      CALL iom_nf90_check(NF90_GET_VAR(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), ptime(:),   & 
    288295            &                           start=(/ 1 /), count=(/ iom_file(kiomid)%dimsz(1, kvid) /)), clinfo) 
     296      IF ( PRESENT(cdunits) ) THEN  
     297         CALL iom_nf90_check(NF90_GET_ATT(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), "units", & 
     298            &                           values=cdunits), clinfo) 
     299      ENDIF 
     300      IF ( PRESENT(cdcalendar) ) THEN  
     301         CALL iom_nf90_check(NF90_GET_ATT(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), "calendar", & 
     302            &                           values=cdcalendar), clinfo) 
     303      ENDIF 
    289304      ! 
    290305   END SUBROUTINE iom_nf90_gettime 
Note: See TracChangeset for help on using the changeset viewer.