Changeset 8191 for branches/UKMO/dev_r5518_GO6_package_fix_rnf_MOCI_TEST_SUITE/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
- Timestamp:
- 2017-06-19T18:16:30+02:00 (7 years ago)
- 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 41 41 USE dianam ! build name of file 42 42 USE xios 43 USE iom_def, ONLY : max_rst_fields, rst_fields 43 44 # endif 44 45 USE ioipsl, ONLY : ju2ymds ! for calendar 45 46 USE crs ! Grid coarsening 47 USE lib_fortran 46 48 47 49 IMPLICIT NONE … … 62 64 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 63 65 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 64 67 # endif 65 68 … … 136 139 & start_date = xios_date(nyear,nmonth,nday,0,0,0) ) 137 140 END SELECT 141 138 142 #endif 139 143 ! horizontal grid definition … … 142 146 143 147 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 ) 148 152 CALL set_grid_znl( gphit ) 153 CALL set_grid("N",glamt, gphit, .FALSE.) ! not masked values 149 154 ! 150 IF( ln_cfmeta ) THEN ! Add additional grid metadata155 IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(rxios_context)) THEN ! Add additional grid metadata 151 156 CALL iom_set_domain_attr("grid_T", area = e12t(nldi:nlei, nldj:nlej)) 152 157 CALL iom_set_domain_attr("grid_U", area = e12u(nldi:nlei, nldj:nlej)) … … 163 168 CALL dom_grid_crs ! Save the parent grid information & Switch to coarse grid domain 164 169 ! 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 ) 169 174 CALL set_grid_znl( gphit_crs ) 170 175 ! 171 176 CALL dom_grid_glo ! Return to parent grid domain 172 177 ! 173 IF( ln_cfmeta ) THEN ! Add additional grid metadata178 IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(rxios_context)) THEN ! Add additional grid metadata 174 179 CALL iom_set_domain_attr("grid_T", area = e1e2t_crs(nldi:nlei, nldj:nlej)) 175 180 CALL iom_set_domain_attr("grid_U", area = e1u_crs(nldi:nlei, nldj:nlej) * e2u_crs(nldi:nlei, nldj:nlej)) … … 227 232 228 233 ! 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 230 242 231 243 CALL set_1point … … 244 256 END SUBROUTINE iom_init 245 257 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 246 396 247 397 SUBROUTINE iom_swap( cdname ) … … 687 837 ! value for the 2nd dimension (netcdf only) 688 838 ! 839 LOGICAL :: lxios ! local definition for XIOS read 689 840 LOGICAL :: llnoov ! local definition to read overlap 690 841 LOGICAL :: luse_jattr ! local definition to read open_ocean_jstart file attribute … … 713 864 !--------------------------------------------------------------------- 714 865 ! 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 ) 718 870 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 ) & 726 883 & CALL ctl_stop(trim(clinfo), 'kstart present needs kdom = jpdom_unknown or kdom = jpdom_autoglo_xy') 727 884 … … 925 1082 IF(lwp) WRITE(numout,"(10x,' read ',a,' (rec: ',i6,') in ',a,' ok')") TRIM(cdvar), itime, TRIM(iom_file(kiomid)%name) 926 1083 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 951 1144 !CDIR COLLAPSE 952 1145 IF( zscf /= 1.) pv_r2d(:,:) = pv_r2d(:,:) * zscf … … 957 1150 IF( zscf /= 1.) pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf 958 1151 !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 966 1154 END SUBROUTINE iom_get_123d 967 1155 … … 1367 1555 1368 1556 1369 SUBROUTINE set_grid( cdgrd, plon, plat )1557 SUBROUTINE set_grid( cdgrd, plon, plat, lmask ) 1370 1558 !!---------------------------------------------------------------------- 1371 1559 !! *** ROUTINE set_grid *** … … 1380 1568 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmask 1381 1569 INTEGER :: ni,nj 1570 LOGICAL :: lmask 1382 1571 1383 1572 ni=nlei-nldi+1 ; nj=nlej-nldj+1 … … 1392 1581 & latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /))) 1393 1582 1394 IF ( l n_mskland) THEN1583 IF ( lmask ) THEN 1395 1584 ! mask land points, keep values on coast line -> specific mask for U, V and W points 1396 1585 SELECT CASE ( cdgrd ) … … 1436 1625 ! Offset of coordinate representing bottom-left corner 1437 1626 SELECT CASE ( TRIM(cdgrd) ) 1438 CASE ('T', 'W' )1627 CASE ('T', 'W', 'N') 1439 1628 icnr = -1 ; jcnr = -1 1440 1629 CASE ('U')
Note: See TracChangeset
for help on using the changeset viewer.