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

Ignore:
Timestamp:
2017-06-19T18:16:30+02:00 (7 years ago)
Author:
andmirek
Message:

merge with XIOS restart read branch

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

    r7750 r8191  
    4141   USE dianam          ! build name of file 
    4242   USE xios 
     43   USE iom_def, ONLY : max_rst_fields, rst_fields 
    4344# endif 
    4445   USE ioipsl, ONLY :  ju2ymds    ! for calendar 
    4546   USE crs             ! Grid coarsening 
     47   USE lib_fortran  
    4648 
    4749   IMPLICIT NONE 
     
    6264   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 
    6365   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 
    6467# endif 
    6568 
     
    136139          &                                    start_date = xios_date(nyear,nmonth,nday,0,0,0) ) 
    137140      END SELECT 
     141 
    138142#endif 
    139143      ! horizontal grid definition 
     
    142146 
    143147      IF( TRIM(cdname) == TRIM(cxios_context) ) THEN   
    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 ) 
     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 ) 
    148152         CALL set_grid_znl( gphit ) 
     153         CALL set_grid("N",glamt, gphit, .FALSE.)        ! not masked values 
    149154         ! 
    150          IF( ln_cfmeta ) THEN   ! Add additional grid metadata 
     155         IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(rxios_context)) THEN   ! Add additional grid metadata 
    151156            CALL iom_set_domain_attr("grid_T", area = e12t(nldi:nlei, nldj:nlej)) 
    152157            CALL iom_set_domain_attr("grid_U", area = e12u(nldi:nlei, nldj:nlej)) 
     
    163168         CALL dom_grid_crs   ! Save the parent grid information  & Switch to coarse grid domain 
    164169         ! 
    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 )  
     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 )  
    169174         CALL set_grid_znl( gphit_crs ) 
    170175          ! 
    171176         CALL dom_grid_glo   ! Return to parent grid domain 
    172177         ! 
    173          IF( ln_cfmeta ) THEN   ! Add additional grid metadata 
     178         IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(rxios_context)) THEN   ! Add additional grid metadata 
    174179            CALL iom_set_domain_attr("grid_T", area = e1e2t_crs(nldi:nlei, nldj:nlej)) 
    175180            CALL iom_set_domain_attr("grid_U", area = e1u_crs(nldi:nlei, nldj:nlej) * e2u_crs(nldi:nlei, nldj:nlej)) 
     
    227232       
    228233      ! automatic definitions of some of the xml attributs 
    229       CALL set_xmlatt 
     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 
    230242 
    231243      CALL set_1point 
     
    244256   END SUBROUTINE iom_init 
    245257 
     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 
    246396 
    247397   SUBROUTINE iom_swap( cdname ) 
     
    687837                                                                           ! value for the 2nd dimension (netcdf only) 
    688838      ! 
     839      LOGICAL                        ::   lxios       ! local definition for XIOS read 
    689840      LOGICAL                        ::   llnoov      ! local definition to read overlap 
    690841      LOGICAL                        ::   luse_jattr  ! local definition to read open_ocean_jstart file attribute 
     
    713864      !--------------------------------------------------------------------- 
    714865      ! 
    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 ? 
     866      REAL(wp)                       :: gma, gmi 
     867      lxios = .FALSE. 
     868      if(PRESENT(lrxios)) lxios = lrxios 
     869      idvar = iom_varid( kiomid, cdvar )  
    718870      idom = kdom 
    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  ) & 
     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  ) & 
    726883     &           CALL ctl_stop(trim(clinfo), 'kstart present needs kdom = jpdom_unknown or kdom = jpdom_autoglo_xy') 
    727884 
     
    9251082            IF(lwp) WRITE(numout,"(10x,' read ',a,' (rec: ',i6,') in ',a,' ok')") TRIM(cdvar), itime, TRIM(iom_file(kiomid)%name) 
    9261083           
    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 
     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 
    9511144!CDIR COLLAPSE 
    9521145               IF( zscf /= 1.)   pv_r2d(:,:) = pv_r2d(:,:) * zscf 
     
    9571150               IF( zscf /= 1.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf 
    9581151!CDIR COLLAPSE 
    959                IF( zofs /= 0.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs 
    960             ENDIF 
    961             ! 
    962          ENDIF 
    963          ! 
    964       ENDIF 
    965       ! 
     1152          IF( zofs /= 0.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs 
     1153       ENDIF 
    9661154   END SUBROUTINE iom_get_123d 
    9671155 
     
    13671555 
    13681556 
    1369    SUBROUTINE set_grid( cdgrd, plon, plat ) 
     1557   SUBROUTINE set_grid( cdgrd, plon, plat, lmask ) 
    13701558      !!---------------------------------------------------------------------- 
    13711559      !!                     ***  ROUTINE set_grid  *** 
     
    13801568      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zmask 
    13811569      INTEGER  :: ni,nj 
     1570      LOGICAL :: lmask 
    13821571       
    13831572      ni=nlei-nldi+1 ; nj=nlej-nldj+1 
     
    13921581         &                                     latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /)))   
    13931582 
    1394       IF ( ln_mskland ) THEN 
     1583      IF ( lmask ) THEN 
    13951584         ! mask land points, keep values on coast line -> specific mask for U, V and W points 
    13961585         SELECT CASE ( cdgrd ) 
     
    14361625      ! Offset of coordinate representing bottom-left corner 
    14371626      SELECT CASE ( TRIM(cdgrd) ) 
    1438          CASE ('T', 'W') 
     1627         CASE ('T', 'W', 'N') 
    14391628            icnr = -1 ; jcnr = -1 
    14401629         CASE ('U') 
Note: See TracChangeset for help on using the changeset viewer.