- Timestamp:
- 2017-11-23T16:52:17+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
r8800 r8801 41 41 USE dianam ! build name of file 42 42 USE xios 43 USE iom_def, ONLY : max_rst_fields, rst_ fields43 USE iom_def, ONLY : max_rst_fields, rst_rfields, rst_wfields, RST_FIELD 44 44 # endif 45 45 USE ioipsl, ONLY : ju2ymds ! for calendar 46 46 USE crs ! Grid coarsening 47 47 USE lib_fortran 48 USE diurnal_bulk, ONLY : ln_diurnal_only, ln_diurnal 48 49 49 50 IMPLICIT NONE … … 65 66 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 66 67 PRIVATE set_grid, set_grid_bounds, set_scalar, set_xmlatt, set_mooring, iom_update_file_name, iom_sdate 67 PRIVATE set_rst_vars, set_rstr_active, set_rst_context 68 PRIVATE iom_set_rst_context, iom_set_rstw_active, iom_set_rstr_active 69 PUBLIC iom_set_rstw_var_active, iom_set_rst_vars 68 70 # endif 69 71 … … 92 94 CONTAINS 93 95 94 SUBROUTINE iom_init( cdname )96 SUBROUTINE iom_init( cdname, fname ) 95 97 !!---------------------------------------------------------------------- 96 98 !! *** ROUTINE *** … … 100 102 !!---------------------------------------------------------------------- 101 103 CHARACTER(len=*), INTENT(in) :: cdname 104 CHARACTER(len=*), OPTIONAL, INTENT(in) :: fname 102 105 #if defined key_iomput 103 106 104 107 TYPE(xios_duration) :: dtime = xios_duration(0, 0, 0, 0, 0, 0) 105 108 TYPE(xios_date) :: start_date 106 CHARACTER(len= 10) :: clname109 CHARACTER(len=lc) :: clname 107 110 INTEGER :: ji, jkmin 108 111 LOGICAL :: llrst_context ! is context related to restart … … 117 120 CALL xios_context_initialize(TRIM(clname), mpi_comm_opa) 118 121 CALL iom_swap( cdname ) 119 llrst_context = (TRIM(cdname) == TRIM(crxios_context) )122 llrst_context = (TRIM(cdname) == TRIM(crxios_context) .OR. TRIM(cdname) == TRIM(cwxios_context)) 120 123 121 124 ! Calendar type is now defined in xml file … … 162 165 CALL dom_grid_glo ! Return to parent grid domain 163 166 ! 164 IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(crxios_context)) THEN ! Add additional grid metadata167 IF( ln_cfmeta .AND. .NOT. llrst_context) THEN ! Add additional grid metadata 165 168 CALL iom_set_domain_attr("grid_T", area = e1e2t_crs(nldi:nlei, nldj:nlej)) 166 169 CALL iom_set_domain_attr("grid_U", area = e1u_crs(nldi:nlei, nldj:nlej) * e2u_crs(nldi:nlei, nldj:nlej)) … … 206 209 ENDIF 207 210 ! automatic definitions of some of the xml attributs 208 IF( llrst_context) THEN209 !set names of the fields in restart file IF using XIOS to read /writedata210 CALL set_rst_context()211 CALL set_rst_vars()211 IF( TRIM(cdname) == TRIM(crxios_context) ) THEN 212 !set names of the fields in restart file IF using XIOS to read data 213 CALL iom_set_rst_context() 214 CALL iom_set_rst_vars(rst_rfields) 212 215 !set which fields are to be read from restart file 213 CALL set_rstr_active() 216 CALL iom_set_rstr_active() 217 ELSE IF( TRIM(cdname) == TRIM(cwxios_context) ) THEN 218 !set names of the fields in restart file IF using XIOS to write data 219 CALL iom_set_rst_context() 220 CALL iom_set_rst_vars(rst_wfields) 221 !set which fields are to be read from restart file 222 CALL iom_set_rstw_active(fname) 214 223 ELSE 215 224 CALL set_xmlatt … … 229 238 END SUBROUTINE iom_init 230 239 231 232 SUBROUTINE set_rst_vars() 233 !set names for variables in restart file 240 SUBROUTINE iom_set_rstw_var_active(field) 241 CHARACTER(len = *), INTENT(IN) :: field 234 242 INTEGER :: i 235 rst_fields(:)%vname="NO_NAME"; rst_fields(:)%grid="NO_GRID" 236 i = 0 237 i = i + 1; rst_fields(i)%vname="rdt"; rst_fields(i)% grid="grid_scalar" 238 i = i + 1; rst_fields(i)%vname="un"; rst_fields(i)% grid="grid_N_3D" 239 i = i + 1; rst_fields(i)%vname="ub"; rst_fields(i)% grid="grid_N_3D" 240 i = i + 1; rst_fields(i)%vname="vn"; rst_fields(i)% grid="grid_N_3D" 241 i = i + 1; rst_fields(i)%vname="vb"; rst_fields(i)% grid="grid_N_3D" 242 i = i + 1; rst_fields(i)%vname="tn"; rst_fields(i)% grid="grid_N_3D" 243 i = i + 1; rst_fields(i)%vname="tb"; rst_fields(i)% grid="grid_N_3D" 244 i = i + 1; rst_fields(i)%vname="sn"; rst_fields(i)% grid="grid_N_3D" 245 i = i + 1; rst_fields(i)%vname="sb"; rst_fields(i)%grid="grid_N_3D" 246 i = i + 1; rst_fields(i)%vname="sshn"; rst_fields(i)%grid="grid_N" 247 i = i + 1; rst_fields(i)%vname="sshb"; rst_fields(i)%grid="grid_N" 248 i = i + 1; rst_fields(i)%vname="rhop"; rst_fields(i)%grid="grid_N_3D" 249 i = i + 1; rst_fields(i)%vname="kt"; rst_fields(i)%grid="grid_scalar" 250 i = i + 1; rst_fields(i)%vname="ndastp"; rst_fields(i)%grid="grid_scalar" 251 i = i + 1; rst_fields(i)%vname="adatrj"; rst_fields(i)%grid="grid_scalar" 252 i = i + 1; rst_fields(i)%vname="utau_b"; rst_fields(i)%grid="grid_N" 253 i = i + 1; rst_fields(i)%vname="vtau_b"; rst_fields(i)%grid="grid_N" 254 i = i + 1; rst_fields(i)%vname="qns_b"; rst_fields(i)%grid="grid_N" 255 i = i + 1; rst_fields(i)%vname="emp_b"; rst_fields(i)%grid="grid_N" 256 i = i + 1; rst_fields(i)%vname="sfx_b"; rst_fields(i)%grid="grid_N" 257 i = i + 1; rst_fields(i)%vname="en" ; rst_fields(i)%grid="grid_N_3D" 258 i = i + 1; rst_fields(i)%vname="avt"; rst_fields(i)%grid="grid_N_3D" 259 i = i + 1; rst_fields(i)%vname="avm"; rst_fields(i)%grid="grid_N_3D" 260 i = i + 1; rst_fields(i)%vname="avmu"; rst_fields(i)%grid="grid_N_3D" 261 i = i + 1; rst_fields(i)%vname="avmv"; rst_fields(i)%grid="grid_N_3D" 262 i = i + 1; rst_fields(i)%vname="dissl"; rst_fields(i)%grid="grid_N_3D" 263 i = i + 1; rst_fields(i)%vname="sbc_hc_b"; rst_fields(i)%grid="grid_N" 264 i = i + 1; rst_fields(i)%vname="sbc_sc_b"; rst_fields(i)%grid="grid_N" 265 i = i + 1; rst_fields(i)%vname="qsr_hc_b"; rst_fields(i)%grid="grid_N_3D" 266 i = i + 1; rst_fields(i)%vname="fraqsr_1lev"; rst_fields(i)%grid="grid_N" 267 i = i + 1; rst_fields(i)%vname="greenland_icesheet_mass" 268 rst_fields(i)%grid="grid_scalar" 269 i = i + 1; rst_fields(i)%vname="greenland_icesheet_timelapsed" 270 rst_fields(i)%grid="grid_scalar" 271 i = i + 1; rst_fields(i)%vname="greenland_icesheet_mass_roc" 272 rst_fields(i)%grid="grid_scalar" 273 i = i + 1; rst_fields(i)%vname="antarctica_icesheet_mass" 274 rst_fields(i)%grid="grid_scalar" 275 i = i + 1; rst_fields(i)%vname="antarctica_icesheet_timelapsed" 276 rst_fields(i)%grid="grid_scalar" 277 i = i + 1; rst_fields(i)%vname="antarctica_icesheet_mass_roc" 278 rst_fields(i)%grid="grid_scalar" 279 i = i + 1; rst_fields(i)%vname="frc_v"; rst_fields(i)%grid="grid_scalar" 280 i = i + 1; rst_fields(i)%vname="frc_t"; rst_fields(i)%grid="grid_scalar" 281 i = i + 1; rst_fields(i)%vname="frc_s"; rst_fields(i)%grid="grid_scalar" 282 i = i + 1; rst_fields(i)%vname="frc_wn_t"; rst_fields(i)%grid="grid_scalar" 283 i = i + 1; rst_fields(i)%vname="frc_wn_s"; rst_fields(i)%grid="grid_scalar" 284 i = i + 1; rst_fields(i)%vname="ssh_ini"; rst_fields(i)%grid="grid_N" 285 i = i + 1; rst_fields(i)%vname="e3t_ini"; rst_fields(i)%grid="grid_N_3D" 286 i = i + 1; rst_fields(i)%vname="hc_loc_ini"; rst_fields(i)%grid="grid_N_3D" 287 i = i + 1; rst_fields(i)%vname="sc_loc_ini"; rst_fields(i)%grid="grid_N_3D" 288 i = i + 1; rst_fields(i)%vname="ssh_hc_loc_ini"; rst_fields(i)%grid="grid_N" 289 i = i + 1; rst_fields(i)%vname="ssh_sc_loc_ini"; rst_fields(i)%grid="grid_N" 290 i = i + 1; rst_fields(i)%vname="tilde_e3t_b"; rst_fields(i)%grid="grid_N" 291 i = i + 1; rst_fields(i)%vname="tilde_e3t_n"; rst_fields(i)%grid="grid_N" 292 i = i + 1; rst_fields(i)%vname="hdiv_lf"; rst_fields(i)%grid="grid_N" 293 i = i + 1; rst_fields(i)%vname="ub2_b"; rst_fields(i)%grid="grid_N" 294 i = i + 1; rst_fields(i)%vname="vb2_b"; rst_fields(i)%grid="grid_N" 295 i = i + 1; rst_fields(i)%vname="sshbb_e"; rst_fields(i)%grid="grid_N" 296 i = i + 1; rst_fields(i)%vname="ubb_e"; rst_fields(i)%grid="grid_N" 297 i = i + 1; rst_fields(i)%vname="vbb_e"; rst_fields(i)%grid="grid_N" 298 i = i + 1; rst_fields(i)%vname="sshb_e"; rst_fields(i)%grid="grid_N" 299 i = i + 1; rst_fields(i)%vname="ub_e"; rst_fields(i)%grid="grid_N" 300 i = i + 1; rst_fields(i)%vname="vb_e"; rst_fields(i)%grid="grid_N" 301 i = i + 1; rst_fields(i)%vname="fwf_isf_b"; rst_fields(i)%grid="grid_N" 302 i = i + 1; rst_fields(i)%vname="isf_sc_b"; rst_fields(i)%grid="grid_N" 303 i = i + 1; rst_fields(i)%vname="isf_hc_b"; rst_fields(i)%grid="grid_N" 304 i = i + 1; rst_fields(i)%vname="ssh_ibb"; rst_fields(i)%grid="grid_N" 305 i = i + 1; rst_fields(i)%vname="rnf_b"; rst_fields(i)%grid="grid_N" 306 i = i + 1; rst_fields(i)%vname="rnf_hc_b"; rst_fields(i)%grid="grid_N" 307 i = i + 1; rst_fields(i)%vname="rnf_sc_b"; rst_fields(i)%grid="grid_N" 308 i = i + 1; rst_fields(i)%vname="nn_fsbc"; rst_fields(i)%grid="grid_scalar" 309 i = i + 1; rst_fields(i)%vname="ssu_m"; rst_fields(i)%grid="grid_N" 310 i = i + 1; rst_fields(i)%vname="ssv_m"; rst_fields(i)%grid="grid_N" 311 i = i + 1; rst_fields(i)%vname="sst_m"; rst_fields(i)%grid="grid_N" 312 i = i + 1; rst_fields(i)%vname="sss_m"; rst_fields(i)%grid="grid_N" 313 i = i + 1; rst_fields(i)%vname="ssh_m"; rst_fields(i)%grid="grid_N" 314 i = i + 1; rst_fields(i)%vname="e3t_m"; rst_fields(i)%grid="grid_N" 315 i = i + 1; rst_fields(i)%vname="frq_m"; rst_fields(i)%grid="grid_N" 316 i = i + 1; rst_fields(i)%vname="avmb"; rst_fields(i)%grid="grid_vector" 317 i = i + 1; rst_fields(i)%vname="avtb"; rst_fields(i)%grid="grid_vector" 318 i = i + 1; rst_fields(i)%vname="ub2_i_b"; rst_fields(i)%grid="grid_N" 319 i = i + 1; rst_fields(i)%vname="vb2_i_b"; rst_fields(i)%grid="grid_N" 320 i = i + 1; rst_fields(i)%vname="ntime"; rst_fields(i)%grid="grid_scalar" 321 i = i + 1; rst_fields(i)%vname="Dsst"; rst_fields(i)%grid="grid_scalar" 322 i = i + 1; rst_fields(i)%vname="tmask"; rst_fields(i)%grid="grid_N_3D" 323 i = i + 1; rst_fields(i)%vname="umask"; rst_fields(i)%grid="grid_N_3D" 324 i = i + 1; rst_fields(i)%vname="vmask"; rst_fields(i)%grid="grid_N_3D" 325 i = i + 1; rst_fields(i)%vname="smask"; rst_fields(i)%grid="grid_N_3D" 326 i = i + 1; rst_fields(i)%vname="gdepw_n"; rst_fields(i)%grid="grid_N_3D" 327 i = i + 1; rst_fields(i)%vname="e3t_n"; rst_fields(i)%grid="grid_N_3D" 328 i = i + 1; rst_fields(i)%vname="e3u_n"; rst_fields(i)%grid="grid_N_3D" 329 i = i + 1; rst_fields(i)%vname="e3v_n"; rst_fields(i)%grid="grid_N_3D" 330 i = i + 1; rst_fields(i)%vname="surf_ini"; rst_fields(i)%grid="grid_N" 331 i = i + 1; rst_fields(i)%vname="e3t_b"; rst_fields(i)%grid="grid_N_3D" 332 i = i + 1; rst_fields(i)%vname="e3t_n"; rst_fields(i)%grid="grid_N_3D" 333 i = i + 1; rst_fields(i)%vname="mxln"; rst_fields(i)%grid="grid_N_3D" 334 i = i + 1; rst_fields(i)%vname="e3t_m"; rst_fields(i)%grid="grid_N_3D" 335 END SUBROUTINE set_rst_vars 336 337 338 SUBROUTINE set_rstr_active() 243 LOGICAL :: llis_set 244 245 llis_set = .FALSE. 246 247 DO i = 1, max_rst_fields 248 IF(TRIM(rst_wfields(i)%vname) == field) THEN 249 rst_wfields(i)%active = .TRUE. 250 llis_set = .TRUE. 251 EXIT 252 ENDIF 253 ENDDO 254 !Warn if variable is not in defined in rst_wfields 255 IF(.NOT.llis_set) THEN 256 IF(lwp) THEN 257 write(numout,cform_err) 258 write(numout,*) 'iom_set_rstw_var_active: variable ', field ,' is available for writing but not defined' 259 ENDIF 260 nstop = nstop + 1 261 ENDIF 262 263 END SUBROUTINE iom_set_rstw_var_active 264 265 SUBROUTINE iom_set_rstr_active() 339 266 !sets enabled = .TRUE. for each field in restart file 340 267 CHARACTER(len=256) :: rst_file … … 361 288 !defin files for restart context 362 289 DO i = 1, max_rst_fields 363 IF( TRIM(rst_ fields(i)%vname) /= "NO_NAME") THEN364 IF( iom_varid( numror, TRIM(rst_ fields(i)%vname), ldstop = .FALSE. ) > 0 ) THEN365 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_ fields(i)%vname))366 SELECT CASE (TRIM(rst_ fields(i)%grid))290 IF( TRIM(rst_rfields(i)%vname) /= "NO_NAME") THEN 291 IF( iom_varid( numror, TRIM(rst_rfields(i)%vname), ldstop = .FALSE. ) > 0 ) THEN 292 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_rfields(i)%vname)) 293 SELECT CASE (TRIM(rst_rfields(i)%grid)) 367 294 CASE ("grid_N_3D") 368 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_ fields(i)%vname), &295 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 369 296 domain_ref="grid_N", axis_ref="deptht", operation = "instant") 370 297 CASE ("grid_N") 371 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_ fields(i)%vname), &298 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 372 299 domain_ref="grid_N", operation = "instant") 373 300 CASE ("grid_vector") 374 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_ fields(i)%vname), &301 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 375 302 axis_ref="deptht", operation = "instant") 376 303 CASE ("grid_scalar") 377 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_ fields(i)%vname), &304 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 378 305 scalar_ref = "grid_scalar", operation = "instant") 379 306 END SELECT 380 IF(lwp) WRITE(numout,*) 'XIOS read: ', TRIM(rst_ fields(i)%vname), ' enabled in ', TRIM(rst_file)307 IF(lwp) WRITE(numout,*) 'XIOS read: ', TRIM(rst_rfields(i)%vname), ' enabled in ', TRIM(rst_file) 381 308 ENDIF 382 309 ENDIF 383 310 END DO 384 END SUBROUTINE set_rstr_active 385 386 SUBROUTINE set_rst_context( ) 311 END SUBROUTINE iom_set_rstr_active 312 313 SUBROUTINE iom_set_rstw_core() 314 !from restart.F90 315 CALL iom_set_rstw_var_active("rdt") 316 IF ( .NOT. ln_diurnal_only ) THEN 317 CALL iom_set_rstw_var_active('ub' ) 318 CALL iom_set_rstw_var_active('vb' ) 319 CALL iom_set_rstw_var_active('tb' ) 320 CALL iom_set_rstw_var_active('sb' ) 321 CALL iom_set_rstw_var_active('sshb') 322 ! 323 CALL iom_set_rstw_var_active('un' ) 324 CALL iom_set_rstw_var_active('vn' ) 325 CALL iom_set_rstw_var_active('tn' ) 326 CALL iom_set_rstw_var_active('sn' ) 327 CALL iom_set_rstw_var_active('sshn') 328 CALL iom_set_rstw_var_active('rhop') 329 ! extra variable needed for the ice sheet coupling 330 IF ( ln_iscpl ) THEN 331 CALL iom_set_rstw_var_active('tmask') 332 CALL iom_set_rstw_var_active('umask') 333 CALL iom_set_rstw_var_active('vmask') 334 CALL iom_set_rstw_var_active('smask') 335 CALL iom_set_rstw_var_active('e3t_n') 336 CALL iom_set_rstw_var_active('e3u_n') 337 CALL iom_set_rstw_var_active('e3v_n') 338 CALL iom_set_rstw_var_active('gdepw_n') 339 END IF 340 ENDIF 341 IF(ln_diurnal) CALL iom_set_rstw_var_active('Dsst') 342 !from trasbc.F90 343 CALL iom_set_rstw_var_active('sbc_hc_b') 344 CALL iom_set_rstw_var_active('sbc_sc_b') 345 END SUBROUTINE iom_set_rstw_core 346 347 SUBROUTINE iom_set_rst_vars(fields) 348 !set names for variables in restart file 349 TYPE(RST_FIELD), INTENT(INOUT) :: fields(max_rst_fields) 350 INTEGER :: i 351 i = 0 352 i = i + 1; fields(i)%vname="rdt"; fields(i)%grid="grid_scalar" 353 i = i + 1; fields(i)%vname="un"; fields(i)%grid="grid_N_3D" 354 i = i + 1; fields(i)%vname="ub"; fields(i)%grid="grid_N_3D" 355 i = i + 1; fields(i)%vname="vn"; fields(i)%grid="grid_N_3D" 356 i = i + 1; fields(i)%vname="vb"; fields(i)%grid="grid_N_3D" 357 i = i + 1; fields(i)%vname="tn"; fields(i)%grid="grid_N_3D" 358 i = i + 1; fields(i)%vname="tb"; fields(i)%grid="grid_N_3D" 359 i = i + 1; fields(i)%vname="sn"; fields(i)%grid="grid_N_3D" 360 i = i + 1; fields(i)%vname="sb"; fields(i)%grid="grid_N_3D" 361 i = i + 1; fields(i)%vname="sshn"; fields(i)%grid="grid_N" 362 i = i + 1; fields(i)%vname="sshb"; fields(i)%grid="grid_N" 363 i = i + 1; fields(i)%vname="rhop"; fields(i)%grid="grid_N_3D" 364 i = i + 1; fields(i)%vname="kt"; fields(i)%grid="grid_scalar" 365 i = i + 1; fields(i)%vname="ndastp"; fields(i)%grid="grid_scalar" 366 i = i + 1; fields(i)%vname="adatrj"; fields(i)%grid="grid_scalar" 367 i = i + 1; fields(i)%vname="utau_b"; fields(i)%grid="grid_N" 368 i = i + 1; fields(i)%vname="vtau_b"; fields(i)%grid="grid_N" 369 i = i + 1; fields(i)%vname="qns_b"; fields(i)%grid="grid_N" 370 i = i + 1; fields(i)%vname="emp_b"; fields(i)%grid="grid_N" 371 i = i + 1; fields(i)%vname="sfx_b"; fields(i)%grid="grid_N" 372 i = i + 1; fields(i)%vname="en" ; fields(i)%grid="grid_N_3D" 373 i = i + 1; fields(i)%vname="avt"; fields(i)%grid="grid_N_3D" 374 i = i + 1; fields(i)%vname="avm"; fields(i)%grid="grid_N_3D" 375 i = i + 1; fields(i)%vname="avmu"; fields(i)%grid="grid_N_3D" 376 i = i + 1; fields(i)%vname="avmv"; fields(i)%grid="grid_N_3D" 377 i = i + 1; fields(i)%vname="dissl"; fields(i)%grid="grid_N_3D" 378 i = i + 1; fields(i)%vname="sbc_hc_b"; fields(i)%grid="grid_N" 379 i = i + 1; fields(i)%vname="sbc_sc_b"; fields(i)%grid="grid_N" 380 i = i + 1; fields(i)%vname="qsr_hc_b"; fields(i)%grid="grid_N_3D" 381 i = i + 1; fields(i)%vname="fraqsr_1lev"; fields(i)%grid="grid_N" 382 i = i + 1; fields(i)%vname="greenland_icesheet_mass" 383 fields(i)%grid="grid_scalar" 384 i = i + 1; fields(i)%vname="greenland_icesheet_timelapsed" 385 fields(i)%grid="grid_scalar" 386 i = i + 1; fields(i)%vname="greenland_icesheet_mass_roc" 387 fields(i)%grid="grid_scalar" 388 i = i + 1; fields(i)%vname="antarctica_icesheet_mass" 389 fields(i)%grid="grid_scalar" 390 i = i + 1; fields(i)%vname="antarctica_icesheet_timelapsed" 391 fields(i)%grid="grid_scalar" 392 i = i + 1; fields(i)%vname="antarctica_icesheet_mass_roc" 393 fields(i)%grid="grid_scalar" 394 i = i + 1; fields(i)%vname="frc_v"; fields(i)%grid="grid_scalar" 395 i = i + 1; fields(i)%vname="frc_t"; fields(i)%grid="grid_scalar" 396 i = i + 1; fields(i)%vname="frc_s"; fields(i)%grid="grid_scalar" 397 i = i + 1; fields(i)%vname="frc_wn_t"; fields(i)%grid="grid_scalar" 398 i = i + 1; fields(i)%vname="frc_wn_s"; fields(i)%grid="grid_scalar" 399 i = i + 1; fields(i)%vname="ssh_ini"; fields(i)%grid="grid_N" 400 i = i + 1; fields(i)%vname="e3t_ini"; fields(i)%grid="grid_N_3D" 401 i = i + 1; fields(i)%vname="hc_loc_ini"; fields(i)%grid="grid_N_3D" 402 i = i + 1; fields(i)%vname="sc_loc_ini"; fields(i)%grid="grid_N_3D" 403 i = i + 1; fields(i)%vname="ssh_hc_loc_ini"; fields(i)%grid="grid_N" 404 i = i + 1; fields(i)%vname="ssh_sc_loc_ini"; fields(i)%grid="grid_N" 405 i = i + 1; fields(i)%vname="tilde_e3t_b"; fields(i)%grid="grid_N" 406 i = i + 1; fields(i)%vname="tilde_e3t_n"; fields(i)%grid="grid_N" 407 i = i + 1; fields(i)%vname="hdiv_lf"; fields(i)%grid="grid_N" 408 i = i + 1; fields(i)%vname="ub2_b"; fields(i)%grid="grid_N" 409 i = i + 1; fields(i)%vname="vb2_b"; fields(i)%grid="grid_N" 410 i = i + 1; fields(i)%vname="sshbb_e"; fields(i)%grid="grid_N" 411 i = i + 1; fields(i)%vname="ubb_e"; fields(i)%grid="grid_N" 412 i = i + 1; fields(i)%vname="vbb_e"; fields(i)%grid="grid_N" 413 i = i + 1; fields(i)%vname="sshb_e"; fields(i)%grid="grid_N" 414 i = i + 1; fields(i)%vname="ub_e"; fields(i)%grid="grid_N" 415 i = i + 1; fields(i)%vname="vb_e"; fields(i)%grid="grid_N" 416 i = i + 1; fields(i)%vname="fwf_isf_b"; fields(i)%grid="grid_N" 417 i = i + 1; fields(i)%vname="isf_sc_b"; fields(i)%grid="grid_N" 418 i = i + 1; fields(i)%vname="isf_hc_b"; fields(i)%grid="grid_N" 419 i = i + 1; fields(i)%vname="ssh_ibb"; fields(i)%grid="grid_N" 420 i = i + 1; fields(i)%vname="rnf_b"; fields(i)%grid="grid_N" 421 i = i + 1; fields(i)%vname="rnf_hc_b"; fields(i)%grid="grid_N" 422 i = i + 1; fields(i)%vname="rnf_sc_b"; fields(i)%grid="grid_N" 423 i = i + 1; fields(i)%vname="nn_fsbc"; fields(i)%grid="grid_scalar" 424 i = i + 1; fields(i)%vname="ssu_m"; fields(i)%grid="grid_N" 425 i = i + 1; fields(i)%vname="ssv_m"; fields(i)%grid="grid_N" 426 i = i + 1; fields(i)%vname="sst_m"; fields(i)%grid="grid_N" 427 i = i + 1; fields(i)%vname="sss_m"; fields(i)%grid="grid_N" 428 i = i + 1; fields(i)%vname="ssh_m"; fields(i)%grid="grid_N" 429 i = i + 1; fields(i)%vname="e3t_m"; fields(i)%grid="grid_N" 430 i = i + 1; fields(i)%vname="frq_m"; fields(i)%grid="grid_N" 431 i = i + 1; fields(i)%vname="avmb"; fields(i)%grid="grid_vector" 432 i = i + 1; fields(i)%vname="avtb"; fields(i)%grid="grid_vector" 433 i = i + 1; fields(i)%vname="ub2_i_b"; fields(i)%grid="grid_N" 434 i = i + 1; fields(i)%vname="vb2_i_b"; fields(i)%grid="grid_N" 435 i = i + 1; fields(i)%vname="ntime"; fields(i)%grid="grid_scalar" 436 i = i + 1; fields(i)%vname="Dsst"; fields(i)%grid="grid_scalar" 437 i = i + 1; fields(i)%vname="tmask"; fields(i)%grid="grid_N_3D" 438 i = i + 1; fields(i)%vname="umask"; fields(i)%grid="grid_N_3D" 439 i = i + 1; fields(i)%vname="vmask"; fields(i)%grid="grid_N_3D" 440 i = i + 1; fields(i)%vname="smask"; fields(i)%grid="grid_N_3D" 441 i = i + 1; fields(i)%vname="gdepw_n"; fields(i)%grid="grid_N_3D" 442 i = i + 1; fields(i)%vname="e3t_n"; fields(i)%grid="grid_N_3D" 443 i = i + 1; fields(i)%vname="e3u_n"; fields(i)%grid="grid_N_3D" 444 i = i + 1; fields(i)%vname="e3v_n"; fields(i)%grid="grid_N_3D" 445 i = i + 1; fields(i)%vname="surf_ini"; fields(i)%grid="grid_N" 446 i = i + 1; fields(i)%vname="e3t_b"; fields(i)%grid="grid_N_3D" 447 i = i + 1; fields(i)%vname="mxln"; fields(i)%grid="grid_N_3D" 448 449 IF( i-1 > max_rst_fields) THEN 450 IF(lwp) write(numout,*) 'E R R O R : iom_set_rst_vars SIZE of RST_FIELD array is too small' 451 nstop = nstop + 1 452 ENDIF 453 454 END SUBROUTINE iom_set_rst_vars 455 456 457 SUBROUTINE iom_set_rstw_active(cdrst_file) 458 !sets enabled = .TRUE. for each field in restart file 459 CHARACTER(len=*) :: cdrst_file 460 #if defined key_iomput 461 TYPE(xios_field) :: field_hdl 462 TYPE(xios_file) :: file_hdl 463 TYPE(xios_filegroup) :: filegroup_hdl 464 INTEGER :: i 465 CHARACTER(lc) :: clpath 466 467 !set name of the restart file and enable available fields 468 IF(lwp) WRITE(numout,*) 'Setting restart filename (for XIOS write) to: ',cdrst_file 469 CALL xios_get_handle("file_definition", filegroup_hdl ) 470 CALL xios_add_child(filegroup_hdl, file_hdl, 'wrestart') 471 IF(nxioso.eq.1) THEN 472 CALL xios_set_file_attr( "wrestart", type="one_file", enabled=.TRUE.,& 473 mode="write", output_freq=xios_timestep) 474 if(lwp) write(numout,*) 'OPEN ', trim(cdrst_file), ' in one_file mode' 475 ELSE 476 CALL xios_set_file_attr( "wrestart", type="multiple_file", enabled=.TRUE.,& 477 mode="write", output_freq=xios_timestep) 478 if(lwp) write(numout,*) 'OPEN ', trim(cdrst_file), ' in multiple_file mode' 479 ENDIF 480 CALL xios_set_file_attr( "wrestart", name=trim(cdrst_file)) 481 !defin files for restart context 482 DO i = 1, max_rst_fields 483 IF( rst_wfields(i)%active ) THEN 484 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_wfields(i)%vname)) 485 SELECT CASE (TRIM(rst_wfields(i)%grid)) 486 CASE ("grid_N_3D") 487 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 488 domain_ref="grid_N", axis_ref="deptht", prec = 8, operation = "instant") 489 CASE ("grid_N") 490 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 491 domain_ref="grid_N", prec = 8, operation = "instant") 492 CASE ("grid_vector") 493 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 494 axis_ref="deptht", prec = 8, operation = "instant") 495 CASE ("grid_scalar") 496 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 497 scalar_ref = "grid_scalar", prec = 8, operation = "instant") 498 END SELECT 499 ENDIF 500 END DO 501 #endif 502 END SUBROUTINE iom_set_rstw_active 503 504 SUBROUTINE iom_set_rst_context( ) 387 505 #if defined key_iomput 388 506 TYPE(xios_domaingroup) :: domaingroup_hdl … … 407 525 CALL xios_add_child(scalargroup_hdl, scalar_hdl, "grid_scalar") 408 526 #endif 409 END SUBROUTINE set_rst_context527 END SUBROUTINE iom_set_rst_context 410 528 411 529 SUBROUTINE iom_swap( cdname ) … … 418 536 #if defined key_iomput 419 537 TYPE(xios_context) :: nemo_hdl 420 421 538 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 422 539 CALL xios_get_handle(TRIM(cdname),nemo_hdl) … … 1363 1480 !! INTERFACE iom_rstput 1364 1481 !!---------------------------------------------------------------------- 1365 SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype )1482 SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 1366 1483 INTEGER , INTENT(in) :: kt ! ocean time-step 1367 1484 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1370 1487 REAL(wp) , INTENT(in) :: pvar ! written field 1371 1488 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1489 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1490 LOGICAL :: llx ! local xios write flag 1372 1491 INTEGER :: ivid ! variable id 1373 IF( kiomid > 0 ) THEN 1374 IF( iom_file(kiomid)%nfid > 0 ) THEN 1375 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1376 SELECT CASE (iom_file(kiomid)%iolib) 1377 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1378 CASE DEFAULT 1379 CALL ctl_stop( 'iom_rp0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1380 END SELECT 1492 1493 llx = .FALSE. 1494 IF(PRESENT(ldxios)) llx = ldxios 1495 IF( llx ) THEN 1496 #ifdef key_iomput 1497 IF( kt == kwrite ) THEN 1498 IF(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 1499 CALL xios_send_field(trim(cdvar), pvar) 1500 ENDIF 1501 #endif 1502 ELSE 1503 IF( kiomid > 0 ) THEN 1504 IF( iom_file(kiomid)%nfid > 0 ) THEN 1505 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1506 SELECT CASE (iom_file(kiomid)%iolib) 1507 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1508 CASE DEFAULT 1509 CALL ctl_stop( 'iom_rp0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1510 END SELECT 1511 ENDIF 1381 1512 ENDIF 1382 1513 ENDIF 1383 1514 END SUBROUTINE iom_rp0d 1384 1515 1385 SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype )1516 SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 1386 1517 INTEGER , INTENT(in) :: kt ! ocean time-step 1387 1518 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1390 1521 REAL(wp) , INTENT(in), DIMENSION( :) :: pvar ! written field 1391 1522 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1523 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1524 LOGICAL :: llx ! local xios write flag 1392 1525 INTEGER :: ivid ! variable id 1393 IF( kiomid > 0 ) THEN 1394 IF( iom_file(kiomid)%nfid > 0 ) THEN 1395 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1396 SELECT CASE (iom_file(kiomid)%iolib) 1397 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1398 CASE DEFAULT 1399 CALL ctl_stop( 'iom_rp1d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1400 END SELECT 1526 1527 llx = .FALSE. 1528 IF(PRESENT(ldxios)) llx = ldxios 1529 IF( llx ) THEN 1530 #ifdef key_iomput 1531 IF( kt == kwrite ) THEN 1532 IF(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 1533 CALL xios_send_field(trim(cdvar), pvar) 1534 ENDIF 1535 #endif 1536 ELSE 1537 IF( kiomid > 0 ) THEN 1538 IF( iom_file(kiomid)%nfid > 0 ) THEN 1539 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1540 SELECT CASE (iom_file(kiomid)%iolib) 1541 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1542 CASE DEFAULT 1543 CALL ctl_stop( 'iom_rp1d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1544 END SELECT 1545 ENDIF 1401 1546 ENDIF 1402 1547 ENDIF 1403 1548 END SUBROUTINE iom_rp1d 1404 1549 1405 SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype )1550 SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 1406 1551 INTEGER , INTENT(in) :: kt ! ocean time-step 1407 1552 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1410 1555 REAL(wp) , INTENT(in), DIMENSION(:, : ) :: pvar ! written field 1411 1556 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1557 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1558 LOGICAL :: llx 1412 1559 INTEGER :: ivid ! variable id 1413 IF( kiomid > 0 ) THEN 1414 IF( iom_file(kiomid)%nfid > 0 ) THEN 1415 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1416 SELECT CASE (iom_file(kiomid)%iolib) 1417 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1418 CASE DEFAULT 1419 CALL ctl_stop( 'iom_rp2d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1420 END SELECT 1560 1561 llx = .FALSE. 1562 IF(PRESENT(ldxios)) llx = ldxios 1563 IF( llx ) THEN 1564 #ifdef key_iomput 1565 IF( kt == kwrite ) THEN 1566 IF(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 1567 CALL xios_send_field(trim(cdvar), pvar) 1568 ENDIF 1569 #endif 1570 ELSE 1571 IF( kiomid > 0 ) THEN 1572 IF( iom_file(kiomid)%nfid > 0 ) THEN 1573 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1574 SELECT CASE (iom_file(kiomid)%iolib) 1575 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1576 CASE DEFAULT 1577 CALL ctl_stop( 'iom_rp2d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1578 END SELECT 1579 ENDIF 1421 1580 ENDIF 1422 1581 ENDIF 1423 1582 END SUBROUTINE iom_rp2d 1424 1583 1425 SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype )1584 SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 1426 1585 INTEGER , INTENT(in) :: kt ! ocean time-step 1427 1586 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1430 1589 REAL(wp) , INTENT(in), DIMENSION(:,:,:) :: pvar ! written field 1431 1590 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1591 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1592 LOGICAL :: llx ! local xios write flag 1432 1593 INTEGER :: ivid ! variable id 1433 IF( kiomid > 0 ) THEN 1434 IF( iom_file(kiomid)%nfid > 0 ) THEN 1435 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1436 SELECT CASE (iom_file(kiomid)%iolib) 1437 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1438 CASE DEFAULT 1439 CALL ctl_stop( 'iom_rp3d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1440 END SELECT 1594 1595 llx = .FALSE. 1596 IF(PRESENT(ldxios)) llx = ldxios 1597 IF( llx ) THEN 1598 #ifdef key_iomput 1599 IF( kt == kwrite ) THEN 1600 IF(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 1601 CALL xios_send_field(trim(cdvar), pvar) 1602 ENDIF 1603 #endif 1604 ELSE 1605 IF( kiomid > 0 ) THEN 1606 IF( iom_file(kiomid)%nfid > 0 ) THEN 1607 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1608 SELECT CASE (iom_file(kiomid)%iolib) 1609 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1610 CASE DEFAULT 1611 CALL ctl_stop( 'iom_rp3d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1612 END SELECT 1613 ENDIF 1441 1614 ENDIF 1442 1615 ENDIF … … 1616 1789 SUBROUTINE iom_context_finalize( cdname ) 1617 1790 CHARACTER(LEN=*), INTENT(in) :: cdname 1618 ! 1619 IF( xios_is_valid_context(cdname) ) THEN 1791 CHARACTER(LEN=120) :: clname 1792 ! 1793 clname = cdname 1794 IF( TRIM(Agrif_CFixed()) .NE. '0' ) clname = TRIM(Agrif_CFixed())//"_"//clname 1795 1796 IF( xios_is_valid_context(clname) ) THEN 1620 1797 CALL iom_swap( cdname ) ! swap to cdname context 1621 1798 CALL xios_context_finalize() ! finalize the context … … 1645 1822 CALL iom_set_domain_attr("grid_"//cdgrd, ni_glo=jpiglo, nj_glo=jpjglo, ibegin=nimpp+nldi-2, jbegin=njmpp+nldj-2, ni=ni, nj=nj) 1646 1823 CALL iom_set_domain_attr("grid_"//cdgrd, data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 1647 CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)), &1824 if(.NOT.ldxios) CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)), & 1648 1825 & latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /))) 1649 1826
Note: See TracChangeset
for help on using the changeset viewer.