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 5260 for branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/OPA_SRC/IOM – NEMO

Ignore:
Timestamp:
2015-05-12T12:37:15+02:00 (9 years ago)
Author:
deazer
Message:

Merged branch with Trunk at revision 5253.
Checked with SETTE, passes modified iodef.xml for AMM12 experiment

Location:
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/OPA_SRC/IOM
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90

    r4624 r5260  
    111111   INTEGER ::   numstp          =   -1      !: logical unit for time step 
    112112   INTEGER ::   numtime         =   -1      !: logical unit for timing 
    113    INTEGER ::   numout          =    6      !: logical unit for output print 
     113   INTEGER ::   numout          =    6      !: logical unit for output print; Set to stdout to ensure any early 
     114                                            !  output can be collected; do not change 
    114115   INTEGER ::   numnam_ref      =   -1      !: logical unit for reference namelist 
    115116   INTEGER ::   numnam_cfg      =   -1      !: logical unit for configuration specific namelist 
    116    INTEGER ::   numond          =    7      !: logical unit for Output Namelist Dynamics 
     117   INTEGER ::   numond          =   -1      !: logical unit for Output Namelist Dynamics 
    117118   INTEGER ::   numnam_ice_ref  =   -1      !: logical unit for ice reference namelist 
    118119   INTEGER ::   numnam_ice_cfg  =   -1      !: logical unit for ice reference namelist 
    119    INTEGER ::   numoni          =    8      !: logical unit for Output Namelist Ice 
     120   INTEGER ::   numoni          =   -1      !: logical unit for Output Namelist Ice 
    120121   INTEGER ::   numevo_ice      =   -1      !: logical unit for ice variables (temp. evolution) 
    121122   INTEGER ::   numsol          =   -1      !: logical unit for solver statistics 
  • branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90

    r4650 r5260  
    3232   USE trc_oce, ONLY :   nn_dttrc        !  !: frequency of step on passive tracers 
    3333   USE icb_oce, ONLY :   nclasses, class_num       !  !: iceberg classes 
     34#if defined key_lim3 
     35   USE ice    , ONLY :   jpl 
     36#elif defined key_lim2 
     37   USE par_ice_2 
     38#endif 
    3439   USE domngb          ! ocean space and time domain 
    3540   USE phycst          ! physical constants 
     
    4954#endif 
    5055   PUBLIC iom_init, iom_swap, iom_open, iom_close, iom_setkt, iom_varid, iom_get, iom_gettime, iom_rstput, iom_put 
    51    PUBLIC iom_getatt, iom_context_finalize 
     56   PUBLIC iom_getatt, iom_use, iom_context_finalize 
    5257 
    5358   PRIVATE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d 
     
    143148      CALL iom_set_axis_attr( "nfloat", (/ (REAL(ji,wp), ji=1,nfloat) /) ) 
    144149# endif 
     150#if defined key_lim3 || defined key_lim2 
     151      CALL iom_set_axis_attr( "ncatice", (/ (REAL(ji,wp), ji=1,jpl) /) ) 
     152#endif 
    145153      CALL iom_set_axis_attr( "icbcla", class_num ) 
    146154       
     
    535543   END SUBROUTINE iom_g1d 
    536544 
    537    SUBROUTINE iom_g2d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount ) 
     545   SUBROUTINE iom_g2d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr ) 
    538546      INTEGER         , INTENT(in   )                           ::   kiomid    ! Identifier of the file 
    539547      INTEGER         , INTENT(in   )                           ::   kdom      ! Type of domain to be read 
     
    543551      INTEGER         , INTENT(in   ), DIMENSION(2)  , OPTIONAL ::   kstart    ! start axis position of the reading  
    544552      INTEGER         , INTENT(in   ), DIMENSION(2)  , OPTIONAL ::   kcount    ! number of points in each axis 
     553      LOGICAL         , INTENT(in   )                , OPTIONAL ::   lrowattr  ! logical flag telling iom_get to 
     554                                                                               ! look for and use a file attribute 
     555                                                                               ! called open_ocean_jstart to set the start 
     556                                                                               ! value for the 2nd dimension (netcdf only) 
    545557      ! 
    546558      IF( kiomid > 0 ) THEN 
    547559         IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom       , cdvar        , pv_r2d=pvar,   & 
    548               &                                                     ktime=ktime, kstart=kstart, kcount=kcount ) 
     560              &                                                     ktime=ktime, kstart=kstart, kcount=kcount, & 
     561              &                                                     lrowattr=lrowattr ) 
    549562      ENDIF 
    550563   END SUBROUTINE iom_g2d 
    551564 
    552    SUBROUTINE iom_g3d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount ) 
     565   SUBROUTINE iom_g3d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr ) 
    553566      INTEGER         , INTENT(in   )                             ::   kiomid    ! Identifier of the file 
    554567      INTEGER         , INTENT(in   )                             ::   kdom      ! Type of domain to be read 
     
    558571      INTEGER         , INTENT(in   ), DIMENSION(3)    , OPTIONAL ::   kstart    ! start axis position of the reading  
    559572      INTEGER         , INTENT(in   ), DIMENSION(3)    , OPTIONAL ::   kcount    ! number of points in each axis 
     573      LOGICAL         , INTENT(in   )                  , OPTIONAL ::   lrowattr  ! logical flag telling iom_get to 
     574                                                                                 ! look for and use a file attribute 
     575                                                                                 ! called open_ocean_jstart to set the start 
     576                                                                                 ! value for the 2nd dimension (netcdf only) 
    560577      ! 
    561578      IF( kiomid > 0 ) THEN 
    562579         IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom       , cdvar        , pv_r3d=pvar,   & 
    563               &                                                     ktime=ktime, kstart=kstart, kcount=kcount ) 
     580              &                                                     ktime=ktime, kstart=kstart, kcount=kcount, & 
     581              &                                                     lrowattr=lrowattr ) 
    564582      ENDIF 
    565583   END SUBROUTINE iom_g3d 
     
    568586   SUBROUTINE iom_get_123d( kiomid, kdom  , cdvar ,   & 
    569587         &                  pv_r1d, pv_r2d, pv_r3d,   & 
    570          &                  ktime , kstart, kcount  ) 
     588         &                  ktime , kstart, kcount,   & 
     589         &                  lrowattr                ) 
    571590      !!----------------------------------------------------------------------- 
    572591      !!                  ***  ROUTINE  iom_get_123d  *** 
     
    585604      INTEGER , DIMENSION(:)     , INTENT(in   ), OPTIONAL ::   kstart     ! start position of the reading in each axis  
    586605      INTEGER , DIMENSION(:)     , INTENT(in   ), OPTIONAL ::   kcount     ! number of points to be read in each axis 
     606      LOGICAL                    , INTENT(in   ), OPTIONAL ::   lrowattr   ! logical flag telling iom_get to 
     607                                                                           ! look for and use a file attribute 
     608                                                                           ! called open_ocean_jstart to set the start 
     609                                                                           ! value for the 2nd dimension (netcdf only) 
    587610      ! 
    588611      LOGICAL                        ::   llnoov      ! local definition to read overlap 
     612      LOGICAL                        ::   luse_jattr  ! local definition to read open_ocean_jstart file attribute 
     613      INTEGER                        ::   jstartrow   ! start point for 2nd dimension optionally set by file attribute 
    589614      INTEGER                        ::   jl          ! loop on number of dimension  
    590615      INTEGER                        ::   idom        ! type of domain 
     
    596621      INTEGER                        ::   ix1, ix2, iy1, iy2   ! subdomain indexes 
    597622      INTEGER                        ::   ji, jj      ! loop counters 
    598       INTEGER                        ::   irankpv       !  
     623      INTEGER                        ::   irankpv     !  
    599624      INTEGER                        ::   ind1, ind2  ! substring index 
    600625      INTEGER, DIMENSION(jpmax_dims) ::   istart      ! starting point to read for each axis 
     
    620645      IF( PRESENT(kstart) .AND. (.NOT. PRESENT(kcount)) ) CALL ctl_stop(trim(clinfo), 'kstart present needs kcount present') 
    621646      IF( PRESENT(kstart) .AND. idom /= jpdom_unknown   ) CALL ctl_stop(trim(clinfo), 'kstart present needs kdom = jpdom_unknown') 
     647 
     648      luse_jattr = .false. 
     649      IF( PRESENT(lrowattr) ) THEN 
     650         IF( lrowattr .AND. idom /= jpdom_data   ) CALL ctl_stop(trim(clinfo), 'lrowattr present and true needs kdom = jpdom_data') 
     651         IF( lrowattr .AND. idom == jpdom_data   ) luse_jattr = .true. 
     652      ENDIF 
     653      IF( luse_jattr ) THEN 
     654         SELECT CASE (iom_file(kiomid)%iolib) 
     655         CASE (jpioipsl, jprstdimg ) 
     656             CALL ctl_warn(trim(clinfo), 'lrowattr present and true but this only works with netcdf (jpnf90)') 
     657             luse_jattr = .false. 
     658         CASE (jpnf90   )    
     659             ! Ok 
     660         CASE DEFAULT     
     661            CALL ctl_stop( TRIM(clinfo)//' accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 
     662         END SELECT 
     663      ENDIF 
    622664 
    623665      ! Search for the variable in the data base (eventually actualize data) 
     
    693735            ELSE  
    694736               IF( .NOT. PRESENT(pv_r1d) ) THEN   !   not a 1D array 
    695                   IF(     idom == jpdom_data    ) THEN ; istart(1:2) = (/ mig(1), mjg(1) /)  ! icnt(1:2) done bellow 
    696                   ELSEIF( idom == jpdom_global  ) THEN ; istart(1:2) = (/ nimpp , njmpp  /)  ! icnt(1:2) done bellow 
     737                  IF(     idom == jpdom_data    ) THEN 
     738                     jstartrow = 1 
     739                     IF( luse_jattr ) THEN 
     740                        CALL iom_getatt(kiomid, 'open_ocean_jstart', jstartrow ) ! -999 is returned if the attribute is not found 
     741                        jstartrow = MAX(1,jstartrow) 
     742                     ENDIF 
     743                     istart(1:2) = (/ mig(1), mjg(1) + jstartrow - 1 /)  ! icnt(1:2) done below 
     744                  ELSEIF( idom == jpdom_global  ) THEN ; istart(1:2) = (/ nimpp , njmpp  /)  ! icnt(1:2) done below 
    697745                  ENDIF 
    698746                  ! we do not read the overlap                     -> we start to read at nldi, nldj 
     
    10151063      CHARACTER(LEN=*), INTENT(in) ::   cdname 
    10161064      REAL(wp)        , INTENT(in) ::   pfield0d 
     1065      REAL(wp)        , DIMENSION(jpi,jpj) ::   zz     ! masson 
    10171066#if defined key_iomput 
    1018       CALL xios_send_field(cdname, (/pfield0d/)) 
     1067      zz(:,:)=pfield0d 
     1068      CALL xios_send_field(cdname, zz) 
     1069      !CALL xios_send_field(cdname, (/pfield0d/))  
    10191070#else 
    10201071      IF( .FALSE. )   WRITE(numout,*) cdname, pfield0d   ! useless test to avoid compilation warnings 
     
    11551206   SUBROUTINE iom_context_finalize( cdname ) 
    11561207      CHARACTER(LEN=*), INTENT(in) :: cdname 
    1157       !      
    1158       CALL iom_swap( cdname )   ! swap to cdname context 
    1159       CALL xios_context_finalize() ! finalize the context 
    1160       IF( cdname /= "nemo" ) CALL iom_swap( "nemo" )   ! return back to nemo context 
     1208      ! 
     1209      IF( xios_is_valid_context(cdname) ) THEN 
     1210         CALL iom_swap( cdname )   ! swap to cdname context 
     1211         CALL xios_context_finalize() ! finalize the context 
     1212         IF( cdname /= "nemo" ) CALL iom_swap( "nemo" )   ! return back to nemo context 
     1213      ENDIF 
    11611214      ! 
    11621215   END SUBROUTINE iom_context_finalize 
     
    11891242         CASE('T')   ;   zmask(:,:,:)       = tmask(:,:,:) 
    11901243         CASE('U')   ;   zmask(2:jpim1,:,:) = tmask(2:jpim1,:,:) + tmask(3:jpi,:,:)   ;   CALL lbc_lnk( zmask, 'U', 1. ) 
    1191          CASE('V')   ;   zmask(:,2:jpjm1,:) = tmask(:,2:jpjm1,:) + tmask(:,3:jpi,:)   ;   CALL lbc_lnk( zmask, 'V', 1. ) 
     1244         CASE('V')   ;   zmask(:,2:jpjm1,:) = tmask(:,2:jpjm1,:) + tmask(:,3:jpj,:)   ;   CALL lbc_lnk( zmask, 'V', 1. ) 
    11921245         CASE('W')   ;   zmask(:,:,2:jpk  ) = tmask(:,:,1:jpkm1) + tmask(:,:,2:jpk)   ;   zmask(:,:,1) = tmask(:,:,1) 
    11931246         END SELECT 
     
    12071260      !! 
    12081261      !!---------------------------------------------------------------------- 
    1209       REAL(wp), DIMENSION(1,1) ::   zz = 1. 
     1262      REAL(wp), DIMENSION(1) ::   zz = 1. 
    12101263      !!---------------------------------------------------------------------- 
    12111264      CALL iom_set_domain_attr('scalarpoint', ni_glo=jpnij, nj_glo=1, ibegin=narea, jbegin=1, ni=1, nj=1) 
    1212       CALL iom_set_domain_attr('scalarpoint', data_dim=1) 
    1213       CALL iom_set_domain_attr('scalarpoint', lonvalue=(/ zz /), latvalue=(/ zz /)) 
     1265      CALL iom_set_domain_attr('scalarpoint', data_dim=2, data_ibegin = 1, data_ni = 1, data_jbegin = 1, data_nj = 1) 
     1266      zz=REAL(narea,wp) 
     1267      CALL iom_set_domain_attr('scalarpoint', lonvalue=zz, latvalue=zz) 
    12141268 
    12151269   END SUBROUTINE set_scalar 
     
    12261280      CHARACTER(len=256)             ::   clsuff                   ! suffix name 
    12271281      CHARACTER(len=1)               ::   cl1                      ! 1 character 
    1228       CHARACTER(len=2)               ::   cl2                      ! 1 character 
     1282      CHARACTER(len=2)               ::   cl2                      ! 2 characters 
     1283      CHARACTER(len=3)               ::   cl3                      ! 3 characters 
    12291284      INTEGER                        ::   ji, jg                   ! loop counters 
    12301285      INTEGER                        ::   ix, iy                   ! i-,j- index 
     
    12521307         WRITE(cl2,'(i2.2)') ji  
    12531308         CALL iom_update_file_name('file'//cl2) 
     1309      END DO 
     1310      DO ji = 1, 999 
     1311         WRITE(cl3,'(i3.3)') ji  
     1312         CALL iom_update_file_name('file'//cl3) 
    12541313      END DO 
    12551314 
     
    12771336      zlatpira = (/ -19.0, -14.0,  -8.0, 0.0, 4.0, 8.0, 12.0, 15.0, 20.0 /) 
    12781337      CALL set_mooring( zlonpira, zlatpira ) 
     1338 
     1339      ! diaptr : zonal mean  
     1340      CALL dom_ngb( 180., 90., ix, iy, 'T' ) !  i-line that passes near the North Pole : Reference latitude (used in plots) 
     1341      CALL iom_set_domain_attr ('ptr', zoom_ibegin=ix, zoom_nj=jpjglo) 
     1342      CALL iom_update_file_name('ptr') 
     1343      ! 
    12791344       
    12801345   END SUBROUTINE set_xmlatt 
     
    14991564 
    15001565#endif 
     1566 
     1567   LOGICAL FUNCTION iom_use( cdname ) 
     1568      CHARACTER(LEN=*), INTENT(in) ::   cdname 
     1569#if defined key_iomput 
     1570      iom_use = xios_field_is_active( cdname ) 
     1571#else 
     1572      iom_use = .FALSE. 
     1573#endif 
     1574   END FUNCTION iom_use 
    15011575    
    15021576   !!====================================================================== 
  • branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/OPA_SRC/IOM/iom_nf90.F90

    r4292 r5260  
    217217         CALL iom_nf90_check(NF90_Inquire_Variable(if90id, ivarid, dimids = idimid(1:i_nvd)), clinfo)   ! dimensions ids 
    218218         iom_file(kiomid)%luld(kiv) = .FALSE.   ! default value 
    219          iom_file(kiomid)%dimsz(:,kiv) = 0   ! reset dimsz in case previously used 
     219         iom_file(kiomid)%dimsz(:,kiv) = 0      ! reset dimsz in case previously used 
    220220         DO ji = 1, i_nvd                       ! dimensions size 
    221221            CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, idimid(ji), len = iom_file(kiomid)%dimsz(ji,kiv)), clinfo)    
  • branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/OPA_SRC/IOM/prtctl.F90

    r4520 r5260  
    164164         ENDIF 
    165165 
    166          IF ( clinfo3 == 'tra' )  THEN 
    167              zvctl1 = t_ctll(jn) 
    168              zvctl2 = s_ctll(jn) 
    169          ELSEIF ( clinfo3 == 'dyn' )   THEN 
    170              zvctl1 = u_ctll(jn) 
    171              zvctl2 = v_ctll(jn) 
     166         IF( PRESENT(clinfo3)) THEN 
     167            IF ( clinfo3 == 'tra' )  THEN 
     168               zvctl1 = t_ctll(jn) 
     169               zvctl2 = s_ctll(jn) 
     170            ELSEIF ( clinfo3 == 'dyn' )   THEN 
     171               zvctl1 = u_ctll(jn) 
     172               zvctl2 = v_ctll(jn) 
     173            ENDIF 
    172174         ENDIF 
    173175 
  • branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90

    r4334 r5260  
    2222   USE iom             ! I/O module 
    2323   USE eosbn2          ! equation of state            (eos bn2 routine) 
    24    USE trdmld_oce      ! ocean active mixed layer tracers trends variables 
     24   USE trdmxl_oce      ! ocean active mixed layer tracers trends variables 
    2525   USE divcur          ! hor. divergence and curl      (div & cur routines) 
    2626   USE sbc_ice, ONLY : lk_lim3 
     
    120120                     CALL iom_rstput( kt, nitrst, numrow, 'hdivb'  , hdivb     ) 
    121121                     CALL iom_rstput( kt, nitrst, numrow, 'sshb'   , sshb      ) 
     122                     ! 
     123      IF( lk_lim3 )  CALL iom_rstput( kt, nitrst, numrow, 'fse3t_b', fse3t_b(:,:,:) ) 
    122124                     ! 
    123125                     CALL iom_rstput( kt, nitrst, numrow, 'un'     , un        )     ! now fields 
     
    133135#endif 
    134136                  IF( lk_lim3 ) THEN 
    135                      CALL iom_rstput( kt, nitrst, numrow, 'iatte'  , iatte     ) !clem modif 
    136                      CALL iom_rstput( kt, nitrst, numrow, 'oatte'  , oatte     ) !clem modif 
     137                     CALL iom_rstput( kt, nitrst, numrow, 'fraqsr_1lev'  , fraqsr_1lev     ) !clem modif 
    137138                  ENDIF 
    138139      IF( kt == nitrst ) THEN 
    139140         CALL iom_close( numrow )     ! close the restart file (only at last time step) 
    140          IF( .NOT. lk_trdmld )   lrst_oce = .FALSE. 
     141!!gm         IF( .NOT. lk_trdmld )   lrst_oce = .FALSE. 
     142!!gm  not sure what to do here   ===>>>  ask to Sebastian 
     143         lrst_oce = .FALSE. 
    141144      ENDIF 
    142145      ! 
    143146   END SUBROUTINE rst_write 
     147 
    144148 
    145149   SUBROUTINE rst_read_open 
     
    155159      LOGICAL  ::   llok 
    156160      !!---------------------------------------------------------------------- 
    157  
    158       IF( numror .LE. 0 ) THEN 
     161      ! 
     162      IF( numror <= 0 ) THEN 
    159163         IF(lwp) THEN                                             ! Contol prints 
    160164            WRITE(numout,*) 
     
    210214         CALL iom_get( numror, jpdom_autoglo, 'hdivb'  , hdivb   ) 
    211215         CALL iom_get( numror, jpdom_autoglo, 'sshb'   , sshb    ) 
     216         IF( lk_lim3 )   CALL iom_get( numror, jpdom_autoglo, 'fse3t_b', fse3t_b(:,:,:) ) 
    212217      ELSE 
    213218         neuler = 0 
     
    245250         hdivb(:,:,:)   = hdivn(:,:,:) 
    246251         sshb (:,:)     = sshn (:,:) 
    247       ENDIF 
    248       ! 
    249       IF( lk_lim3 ) THEN  
    250          CALL iom_get( numror, jpdom_autoglo, 'iatte' , iatte ) ! clem modif 
    251          CALL iom_get( numror, jpdom_autoglo, 'oatte' , oatte ) ! clem modif 
     252 
     253         IF( lk_vvl ) THEN 
     254            DO jk = 1, jpk 
     255               fse3t_b(:,:,jk) = fse3t_n(:,:,jk) 
     256            END DO 
     257         ENDIF 
     258 
     259         IF( lk_lim3 .AND. .NOT. lk_vvl ) THEN 
     260            DO jk = 1, jpk 
     261               fse3t_b(:,:,jk) = fse3t_n(:,:,jk) 
     262            END DO 
     263         ENDIF 
     264 
     265      ENDIF 
     266      ! 
     267      IF( lk_lim3 ) THEN 
     268         CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev' , fraqsr_1lev ) 
    252269      ENDIF 
    253270      ! 
Note: See TracChangeset for help on using the changeset viewer.