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 8193 for branches/UKMO/dev_r5518_GO6_package_fix_rnf_MOCI_TEST_SUITE/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90 – NEMO

Ignore:
Timestamp:
2017-06-20T10:46:27+02:00 (7 years ago)
Author:
andmirek
Message:

ticket #1914 back to 8188

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GO6_package_fix_rnf_MOCI_TEST_SUITE/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90

    r8191 r8193  
    4141   USE dianam          ! build name of file 
    4242   USE xios 
    43    USE iom_def, ONLY : max_rst_fields, rst_fields 
    4443# endif 
    4544   USE ioipsl, ONLY :  ju2ymds    ! for calendar 
    4645   USE crs             ! Grid coarsening 
    47    USE lib_fortran  
    4846 
    4947   IMPLICIT NONE 
     
    6462   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 
    6563   PRIVATE set_grid, set_grid_bounds, set_scalar, set_xmlatt, set_mooring, iom_update_file_name, iom_sdate 
    66    PRIVATE set_rst_vars, set_rstr_active 
    6764# endif 
    6865 
     
    139136          &                                    start_date = xios_date(nyear,nmonth,nday,0,0,0) ) 
    140137      END SELECT 
    141  
    142138#endif 
    143139      ! horizontal grid definition 
     
    146142 
    147143      IF( TRIM(cdname) == TRIM(cxios_context) ) THEN   
    148          CALL set_grid( "T", glamt, gphit, ln_mskland )  
    149          CALL set_grid( "U", glamu, gphiu, ln_mskland ) 
    150          CALL set_grid( "V", glamv, gphiv, ln_mskland ) 
    151          CALL set_grid( "W", glamt, gphit, ln_mskland ) 
     144         CALL set_grid( "T", glamt, gphit )  
     145         CALL set_grid( "U", glamu, gphiu ) 
     146         CALL set_grid( "V", glamv, gphiv ) 
     147         CALL set_grid( "W", glamt, gphit ) 
    152148         CALL set_grid_znl( gphit ) 
    153          CALL set_grid("N",glamt, gphit, .FALSE.)        ! not masked values 
    154149         ! 
    155          IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(rxios_context)) THEN   ! Add additional grid metadata 
     150         IF( ln_cfmeta ) THEN   ! Add additional grid metadata 
    156151            CALL iom_set_domain_attr("grid_T", area = e12t(nldi:nlei, nldj:nlej)) 
    157152            CALL iom_set_domain_attr("grid_U", area = e12u(nldi:nlei, nldj:nlej)) 
     
    168163         CALL dom_grid_crs   ! Save the parent grid information  & Switch to coarse grid domain 
    169164         ! 
    170          CALL set_grid( "T", glamt_crs, gphit_crs, ln_mskland )  
    171          CALL set_grid( "U", glamu_crs, gphiu_crs, ln_mskland )  
    172          CALL set_grid( "V", glamv_crs, gphiv_crs, ln_mskland )  
    173          CALL set_grid( "W", glamt_crs, gphit_crs, ln_mskland )  
     165         CALL set_grid( "T", glamt_crs, gphit_crs )  
     166         CALL set_grid( "U", glamu_crs, gphiu_crs )  
     167         CALL set_grid( "V", glamv_crs, gphiv_crs )  
     168         CALL set_grid( "W", glamt_crs, gphit_crs )  
    174169         CALL set_grid_znl( gphit_crs ) 
    175170          ! 
    176171         CALL dom_grid_glo   ! Return to parent grid domain 
    177172         ! 
    178          IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(rxios_context)) THEN   ! Add additional grid metadata 
     173         IF( ln_cfmeta ) THEN   ! Add additional grid metadata 
    179174            CALL iom_set_domain_attr("grid_T", area = e1e2t_crs(nldi:nlei, nldj:nlej)) 
    180175            CALL iom_set_domain_attr("grid_U", area = e1u_crs(nldi:nlei, nldj:nlej) * e2u_crs(nldi:nlei, nldj:nlej)) 
     
    232227       
    233228      ! automatic definitions of some of the xml attributs 
    234       IF( TRIM(cdname) == TRIM(rxios_context)) THEN 
    235 !set names of the fields in restart file IF using XIOS to read/write data 
    236        CALL set_rst_vars() 
    237 !set which fields are to be read from restart file 
    238        CALL set_rstr_active() 
    239       ELSE 
    240        CALL set_xmlatt 
    241       ENDIF 
     229      CALL set_xmlatt 
    242230 
    243231      CALL set_1point 
     
    256244   END SUBROUTINE iom_init 
    257245 
    258     
    259    SUBROUTINE set_rst_vars() 
    260 !set names for variables in restart file 
    261  
    262         rst_fields(:)%vname="NO_NAME";         rst_fields(:)%grid="NO_GRID" 
    263  
    264         rst_fields(1)%vname="rdt";             rst_fields(1)% grid="grid_scalar" 
    265         rst_fields(2)%vname="rdttra1";         rst_fields(2)% grid="grid_scalar"       
    266         rst_fields(3)%vname="un";              rst_fields(3)% grid="grid_N_3D" 
    267         rst_fields(4)%vname="ub";              rst_fields(4)% grid="grid_N_3D" 
    268         rst_fields(5)%vname="vn";              rst_fields(5)% grid="grid_N_3D" 
    269         rst_fields(6)%vname="vb";              rst_fields(6)% grid="grid_N_3D"   
    270         rst_fields(7)%vname="tn";              rst_fields(7)% grid="grid_N_3D" 
    271         rst_fields(8)%vname="tb";              rst_fields(8)% grid="grid_N_3D" 
    272         rst_fields(9)%vname="sn";              rst_fields(9)% grid="grid_N_3D" 
    273         rst_fields(10)%vname="sb";             rst_fields(10)%grid="grid_N_3D" 
    274         rst_fields(11)%vname="sshn";           rst_fields(11)%grid="grid_N" 
    275         rst_fields(12)%vname="sshb";           rst_fields(12)%grid="grid_N" 
    276         rst_fields(13)%vname="hdivn";          rst_fields(13)%grid="grid_N_3D" 
    277         rst_fields(14)%vname="hdivb";          rst_fields(14)%grid="grid_N_3D" 
    278         rst_fields(15)%vname="rhop";           rst_fields(15)%grid="grid_N_3D" 
    279         rst_fields(16)%vname="rotn";           rst_fields(16)%grid="grid_N_3D" 
    280         rst_fields(17)%vname="rotb";           rst_fields(17)%grid="grid_N_3D" 
    281         rst_fields(18)%vname="kt";             rst_fields(18)%grid="grid_scalar" 
    282         rst_fields(19)%vname="ndastp";         rst_fields(19)%grid="grid_scalar" 
    283         rst_fields(20)%vname="adatrj";         rst_fields(20)%grid="grid_scalar" 
    284         rst_fields(21)%vname="utau_b";         rst_fields(21)%grid="grid_N" 
    285         rst_fields(22)%vname="vtau_b";         rst_fields(22)%grid="grid_N" 
    286         rst_fields(23)%vname="qns_b";          rst_fields(23)%grid="grid_N" 
    287         rst_fields(24)%vname="emp_b";          rst_fields(24)%grid="grid_N" 
    288         rst_fields(25)%vname="sfx_b";          rst_fields(25)%grid="grid_N" 
    289         rst_fields(26)%vname="en" ;            rst_fields(26)%grid="grid_N_3D"  
    290         rst_fields(27)%vname="avt";            rst_fields(27)%grid="grid_N_3D" 
    291         rst_fields(28)%vname="avm";            rst_fields(28)%grid="grid_N_3D" 
    292         rst_fields(29)%vname="avmu";           rst_fields(29)%grid="grid_N_3D" 
    293         rst_fields(30)%vname="avmv";           rst_fields(30)%grid="grid_N_3D" 
    294         rst_fields(31)%vname="dissl";          rst_fields(31)%grid="grid_N_3D" 
    295         rst_fields(32)%vname="sbc_hc_b";       rst_fields(32)%grid="grid_N" 
    296         rst_fields(33)%vname="sbc_sc_b";       rst_fields(33)%grid="grid_N" 
    297         rst_fields(34)%vname="qsr_hc_b";       rst_fields(34)%grid="grid_N_3D" 
    298         rst_fields(35)%vname="gcx";            rst_fields(35)%grid="grid_N" 
    299         rst_fields(36)%vname="gcxb";           rst_fields(36)%grid="grid_N" 
    300         rst_fields(37)%vname="fraqsr_1lev";    rst_fields(37)%grid="grid_N" 
    301         rst_fields(38)%vname="greenland_icesheet_mass" 
    302                                                rst_fields(38)%grid="grid_scalar" 
    303         rst_fields(39)%vname="greenland_icesheet_timelapsed" 
    304                                                rst_fields(39)%grid="grid_scalar" 
    305         rst_fields(40)%vname="greenland_icesheet_mass_roc" 
    306                                                rst_fields(40)%grid="grid_scalar" 
    307         rst_fields(41)%vname="antarctica_icesheet_mass" 
    308                                                rst_fields(41)%grid="grid_scalar" 
    309         rst_fields(42)%vname="antarctica_icesheet_timelapsed" 
    310                                                rst_fields(42)%grid="grid_scalar" 
    311         rst_fields(43)%vname="antarctica_icesheet_mass_roc" 
    312                                                rst_fields(43)%grid="grid_scalar" 
    313         rst_fields(44)%vname="rhd";            rst_fields(44)%grid="grid_N_3D" 
    314         rst_fields(45)%vname="frc_v";          rst_fields(45)%grid="grid_scalar" 
    315         rst_fields(46)%vname="frc_t";          rst_fields(46)%grid="grid_scalar" 
    316         rst_fields(47)%vname="frc_s";          rst_fields(47)%grid="grid_scalar" 
    317         rst_fields(48)%vname="frc_wn_t";       rst_fields(48)%grid="grid_scalar" 
    318         rst_fields(49)%vname="frc_wn_s";       rst_fields(49)%grid="grid_scalar" 
    319         rst_fields(50)%vname="ssh_ini";        rst_fields(50)%grid="grid_N" 
    320         rst_fields(51)%vname="e3t_ini";        rst_fields(51)%grid="grid_N_3D" 
    321         rst_fields(52)%vname="hc_loc_ini";     rst_fields(52)%grid="grid_N_3D" 
    322         rst_fields(53)%vname="sc_loc_ini";     rst_fields(53)%grid="grid_N_3D" 
    323         rst_fields(54)%vname="ssh_hc_loc_ini"; rst_fields(54)%grid="grid_N" 
    324         rst_fields(55)%vname="ssh_sc_loc_ini"; rst_fields(55)%grid="grid_N" 
    325         rst_fields(56)%vname="fse3t_b";        rst_fields(56)%grid="grid_N_3D" 
    326         rst_fields(57)%vname="fse3t_n";        rst_fields(57)%grid="grid_N_3D" 
    327         rst_fields(58)%vname="tilde_e3t_b";    rst_fields(58)%grid="grid_N" 
    328         rst_fields(59)%vname="tilde_e3t_n";    rst_fields(59)%grid="grid_N" 
    329         rst_fields(60)%vname="hdiv_lf";        rst_fields(60)%grid="grid_N" 
    330         rst_fields(61)%vname="ub2_b";          rst_fields(61)%grid="grid_N" 
    331         rst_fields(62)%vname="vb2_b";          rst_fields(62)%grid="grid_N" 
    332         rst_fields(63)%vname="sshbb_e";        rst_fields(63)%grid="grid_N" 
    333         rst_fields(64)%vname="ubb_e";          rst_fields(64)%grid="grid_N" 
    334         rst_fields(65)%vname="vbb_e";          rst_fields(65)%grid="grid_N" 
    335         rst_fields(66)%vname="sshb_e";         rst_fields(66)%grid="grid_N" 
    336         rst_fields(67)%vname="ub_e";           rst_fields(67)%grid="grid_N" 
    337         rst_fields(68)%vname="vb_e";           rst_fields(68)%grid="grid_N" 
    338         rst_fields(69)%vname="fwf_isf_b";      rst_fields(69)%grid="grid_N" 
    339         rst_fields(70)%vname="isf_sc_b";       rst_fields(70)%grid="grid_N" 
    340         rst_fields(71)%vname="isf_hc_b";       rst_fields(71)%grid="grid_N" 
    341         rst_fields(72)%vname="ssh_ibb";        rst_fields(72)%grid="grid_N" 
    342         rst_fields(73)%vname="rnf_b";          rst_fields(73)%grid="grid_N" 
    343         rst_fields(74)%vname="rnf_hc_b";       rst_fields(74)%grid="grid_N" 
    344         rst_fields(75)%vname="rnf_sc_b";       rst_fields(75)%grid="grid_N" 
    345         rst_fields(76)%vname="nn_fsbc";        rst_fields(76)%grid="grid_scalar" 
    346         rst_fields(77)%vname="ssu_m";          rst_fields(77)%grid="grid_N" 
    347         rst_fields(78)%vname="ssv_m";          rst_fields(78)%grid="grid_N" 
    348         rst_fields(79)%vname="sst_m";          rst_fields(79)%grid="grid_N" 
    349         rst_fields(80)%vname="sss_m";          rst_fields(80)%grid="grid_N" 
    350         rst_fields(81)%vname="ssh_m";          rst_fields(81)%grid="grid_N" 
    351         rst_fields(82)%vname="e3t_m";          rst_fields(82)%grid="grid_N" 
    352         rst_fields(83)%vname="frq_m";          rst_fields(83)%grid="grid_N" 
    353         rst_fields(84)%vname="avmb";           rst_fields(84)%grid="Vgrid" 
    354         rst_fields(85)%vname="avtb";           rst_fields(85)%grid="Vgrid" 
    355  
    356    END SUBROUTINE set_rst_vars 
    357  
    358  
    359    SUBROUTINE set_rstr_active() 
    360 !sets enabled = .TRUE. for each field in restart file 
    361 #if defined key_xios2 
    362    CHARACTER(len=256) :: rst_file 
    363    TYPE(xios_field) :: field_hdl 
    364    TYPE(xios_file) :: file_hdl 
    365    TYPE(xios_filegroup) :: filegroup_hdl 
    366    INTEGER :: i 
    367    CHARACTER(lc)  ::   clpath 
    368  
    369         clpath = TRIM(cn_ocerst_indir) 
    370         IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
    371         IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
    372            rst_file = TRIM(cn_ocerst_indir)//TRIM(cn_ocerst_in) 
    373         ELSE 
    374            rst_file = TRIM(cn_ocerst_indir)//'1_'//TRIM(cn_ocerst_in) 
    375         ENDIF 
    376 !set name of the restart file and enable available fields 
    377         if(lwp) WRITE(numout,*) 'Setting restart filename (for XIOS) to: ',rst_file 
    378         CALL xios_get_handle("file_definition", filegroup_hdl ) 
    379         CALL xios_add_child(filegroup_hdl, file_hdl, 'rrestart') 
    380         CALL xios_set_file_attr( "rrestart", name=trim(rst_file), type="one_file", & 
    381              par_access="collective", enabled=.TRUE., mode="read",                 & 
    382              output_freq=xios_timestep) 
    383 !defin files for restart context 
    384         DO i = 1, max_rst_fields 
    385          IF( TRIM(rst_fields(i)%vname) /= "NO_NAME") THEN 
    386            IF( iom_varid( numror, TRIM(rst_fields(i)%vname), ldstop = .FALSE. ) > 0 ) THEN 
    387                 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 
    388                 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_fields(i)%vname), & 
    389                      grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 
    390                 if(lwp) WRITE(numout,*) TRIM(rst_fields(i)%vname), ' enabled' 
    391            ENDIF 
    392          ENDIF 
    393         END DO 
    394 #endif 
    395    END SUBROUTINE set_rstr_active 
    396246 
    397247   SUBROUTINE iom_swap( cdname ) 
     
    837687                                                                           ! value for the 2nd dimension (netcdf only) 
    838688      ! 
    839       LOGICAL                        ::   lxios       ! local definition for XIOS read 
    840689      LOGICAL                        ::   llnoov      ! local definition to read overlap 
    841690      LOGICAL                        ::   luse_jattr  ! local definition to read open_ocean_jstart file attribute 
     
    864713      !--------------------------------------------------------------------- 
    865714      ! 
    866       REAL(wp)                       :: gma, gmi 
    867       lxios = .FALSE. 
    868       if(PRESENT(lrxios)) lxios = lrxios 
    869       idvar = iom_varid( kiomid, cdvar )  
     715      clname = iom_file(kiomid)%name   !   esier to read 
     716      clinfo = '          iom_get_123d, file: '//trim(clname)//', var: '//trim(cdvar) 
     717      ! local definition of the domain ? 
    870718      idom = kdom 
    871  
    872       IF(.NOT.lxios) THEN 
    873           clname = iom_file(kiomid)%name   !   esier to read 
    874           clinfo = '          iom_get_123d, file: '//trim(clname)//', var: '//trim(cdvar) 
    875           ! local definition of the domain ? 
    876           ! do we read the overlap  
    877           ! ugly patch SM+JMM+RB to overwrite global definition in some cases 
    878           llnoov = (jpni * jpnj ) == jpnij .AND. .NOT. lk_agrif  
    879           ! check kcount and kstart optionals parameters... 
    880           IF( PRESENT(kcount) .AND. (.NOT. PRESENT(kstart)) ) CALL ctl_stop(trim(clinfo), 'kcount present needs kstart present') 
    881           IF( PRESENT(kstart) .AND. (.NOT. PRESENT(kcount)) ) CALL ctl_stop(trim(clinfo), 'kstart present needs kcount present') 
    882           IF( PRESENT(kstart) .AND. idom /= jpdom_unknown .AND.  idom /= jpdom_autoglo_xy  ) & 
     719      ! do we read the overlap  
     720      ! ugly patch SM+JMM+RB to overwrite global definition in some cases 
     721      llnoov = (jpni * jpnj ) == jpnij .AND. .NOT. lk_agrif  
     722      ! check kcount and kstart optionals parameters... 
     723      IF( PRESENT(kcount) .AND. (.NOT. PRESENT(kstart)) ) CALL ctl_stop(trim(clinfo), 'kcount present needs kstart present') 
     724      IF( PRESENT(kstart) .AND. (.NOT. PRESENT(kcount)) ) CALL ctl_stop(trim(clinfo), 'kstart present needs kcount present') 
     725      IF( PRESENT(kstart) .AND. idom /= jpdom_unknown .AND.  idom /= jpdom_autoglo_xy  ) & 
    883726     &           CALL ctl_stop(trim(clinfo), 'kstart present needs kdom = jpdom_unknown or kdom = jpdom_autoglo_xy') 
    884727 
     
    1082925            IF(lwp) WRITE(numout,"(10x,' read ',a,' (rec: ',i6,') in ',a,' ok')") TRIM(cdvar), itime, TRIM(iom_file(kiomid)%name) 
    1083926           
    1084                 !--- overlap areas and extra hallows (mpp) 
    1085                 IF(     PRESENT(pv_r2d) .AND. idom /= jpdom_unknown ) THEN 
    1086                    CALL lbc_lnk( pv_r2d,'Z',-999.,'no0' ) 
    1087                 ELSEIF( PRESENT(pv_r3d) .AND. idom /= jpdom_unknown ) THEN 
    1088                    ! this if could be simplified with the new lbc_lnk that works with any size of the 3rd dimension 
    1089                    IF( icnt(3) == jpk ) THEN 
    1090                       CALL lbc_lnk( pv_r3d,'Z',-999.,'no0' ) 
    1091                    ELSE   ! put some arbitrary value (a call to lbc_lnk will be done later...) 
    1092                       DO jj = nlcj+1, jpj   ;   pv_r3d(1:nlci, jj, :) = pv_r3d(1:nlci, nlej, :)   ;   END DO 
    1093                       DO ji = nlci+1, jpi   ;   pv_r3d(ji    , : , :) = pv_r3d(nlei  , :   , :)   ;   END DO 
    1094                    ENDIF 
    1095                 ENDIF 
    1096                 ! 
    1097              ELSE 
    1098                 ! return if istop == nstop is false 
    1099                 RETURN 
    1100              ENDIF 
    1101           ELSE 
    1102              ! return if statment idvar > 0 .AND. istop == nstop is false 
    1103              RETURN 
    1104           ENDIF 
    1105           ! 
    1106        ELSE        ! read using XIOS. Only if KEY_IOMPUT is defined 
    1107 #if defined key_iomput 
    1108 !would be good to be able to check which context is active and swap only if current is not restart 
    1109           CALL iom_swap( TRIM(rxios_context) )  
    1110           IF( PRESENT(pv_r3d) ) THEN 
    1111              if(lwp) write(numout,*) 'XIOS RST READ (3D): ',trim(cdvar) 
    1112              CALL xios_recv_field( trim(cdvar), pv_r3d) 
    1113              IF(idom /= jpdom_unknown ) then 
    1114                  CALL lbc_lnk( pv_r3d,'Z',-999.,'no0' ) 
    1115              ENDIF 
    1116           ELSEIF( PRESENT(pv_r2d) ) THEN 
    1117              if(lwp) write(numout,*) 'XIOS RST READ (2D): ', trim(cdvar) 
    1118              CALL xios_recv_field( trim(cdvar), pv_r2d) 
    1119              IF(idom /= jpdom_unknown ) THEN 
    1120                  CALL lbc_lnk(pv_r2d,'Z',-999.,'no0') 
    1121              ENDIF 
    1122           ELSEIF( PRESENT(pv_r1d) ) THEN 
    1123              if(lwp) write(numout,*) 'XIOS RST READ (1D): ', trim(cdvar) 
    1124              CALL xios_recv_field( trim(cdvar), pv_r1d) 
    1125           ENDIF 
    1126           CALL iom_swap( TRIM(cxios_context) ) 
    1127 #else 
    1128           istop = istop + 1  
    1129           clinfo = 'Can not use XIOS in iom_get_123d, file: '//trim(clname)//', var:'//trim(cdvar) 
    1130 #endif 
    1131        ENDIF 
    1132 !some final adjustments 
    1133        ! C1D case : always call lbc_lnk to replicate the central value over the whole 3X3 domain 
    1134        IF( lk_c1d .AND. PRESENT(pv_r2d) )   CALL lbc_lnk( pv_r2d,'Z',1. ) 
    1135        IF( lk_c1d .AND. PRESENT(pv_r3d) )   CALL lbc_lnk( pv_r3d,'Z',1. ) 
    1136  
    1137        !--- Apply scale_factor and offset 
    1138        zscf = iom_file(kiomid)%scf(idvar)      ! scale factor 
    1139        zofs = iom_file(kiomid)%ofs(idvar)      ! offset 
    1140        IF(     PRESENT(pv_r1d) ) THEN 
    1141           IF( zscf /= 1. )   pv_r1d(:) = pv_r1d(:) * zscf  
    1142           IF( zofs /= 0. )   pv_r1d(:) = pv_r1d(:) + zofs 
    1143        ELSEIF( PRESENT(pv_r2d) ) THEN 
     927            !--- overlap areas and extra hallows (mpp) 
     928            IF(     PRESENT(pv_r2d) .AND. idom /= jpdom_unknown ) THEN 
     929               CALL lbc_lnk( pv_r2d,'Z',-999.,'no0' ) 
     930            ELSEIF( PRESENT(pv_r3d) .AND. idom /= jpdom_unknown ) THEN 
     931               ! this if could be simplified with the new lbc_lnk that works with any size of the 3rd dimension 
     932               IF( icnt(3) == jpk ) THEN 
     933                  CALL lbc_lnk( pv_r3d,'Z',-999.,'no0' ) 
     934               ELSE   ! put some arbitrary value (a call to lbc_lnk will be done later...) 
     935                  DO jj = nlcj+1, jpj   ;   pv_r3d(1:nlci, jj, :) = pv_r3d(1:nlci, nlej, :)   ;   END DO 
     936                  DO ji = nlci+1, jpi   ;   pv_r3d(ji    , : , :) = pv_r3d(nlei  , :   , :)   ;   END DO 
     937               ENDIF 
     938            ENDIF 
     939             
     940            ! C1D case : always call lbc_lnk to replicate the central value over the whole 3X3 domain 
     941            IF( lk_c1d .AND. PRESENT(pv_r2d) )   CALL lbc_lnk( pv_r2d,'Z',1. ) 
     942            IF( lk_c1d .AND. PRESENT(pv_r3d) )   CALL lbc_lnk( pv_r3d,'Z',1. ) 
     943     
     944            !--- Apply scale_factor and offset 
     945            zscf = iom_file(kiomid)%scf(idvar)      ! scale factor 
     946            zofs = iom_file(kiomid)%ofs(idvar)      ! offset 
     947            IF(     PRESENT(pv_r1d) ) THEN 
     948               IF( zscf /= 1. )   pv_r1d(:) = pv_r1d(:) * zscf  
     949               IF( zofs /= 0. )   pv_r1d(:) = pv_r1d(:) + zofs 
     950            ELSEIF( PRESENT(pv_r2d) ) THEN 
    1144951!CDIR COLLAPSE 
    1145952               IF( zscf /= 1.)   pv_r2d(:,:) = pv_r2d(:,:) * zscf 
     
    1150957               IF( zscf /= 1.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf 
    1151958!CDIR COLLAPSE 
    1152           IF( zofs /= 0.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs 
    1153        ENDIF 
     959               IF( zofs /= 0.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs 
     960            ENDIF 
     961            ! 
     962         ENDIF 
     963         ! 
     964      ENDIF 
     965      ! 
    1154966   END SUBROUTINE iom_get_123d 
    1155967 
     
    15551367 
    15561368 
    1557    SUBROUTINE set_grid( cdgrd, plon, plat, lmask ) 
     1369   SUBROUTINE set_grid( cdgrd, plon, plat ) 
    15581370      !!---------------------------------------------------------------------- 
    15591371      !!                     ***  ROUTINE set_grid  *** 
     
    15681380      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zmask 
    15691381      INTEGER  :: ni,nj 
    1570       LOGICAL :: lmask 
    15711382       
    15721383      ni=nlei-nldi+1 ; nj=nlej-nldj+1 
     
    15811392         &                                     latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /)))   
    15821393 
    1583       IF ( lmask ) THEN 
     1394      IF ( ln_mskland ) THEN 
    15841395         ! mask land points, keep values on coast line -> specific mask for U, V and W points 
    15851396         SELECT CASE ( cdgrd ) 
     
    16251436      ! Offset of coordinate representing bottom-left corner 
    16261437      SELECT CASE ( TRIM(cdgrd) ) 
    1627          CASE ('T', 'W', 'N') 
     1438         CASE ('T', 'W') 
    16281439            icnr = -1 ; jcnr = -1 
    16291440         CASE ('U') 
Note: See TracChangeset for help on using the changeset viewer.