Changeset 394
- Timestamp:
- 06/02/16 18:57:23 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/xios_mod.F90
r342 r394 21 21 SUBROUTINE xios_init 22 22 USE getin_mod 23 USE xios 24 USE mpipara 23 25 IMPLICIT NONE 24 25 using_xios=.TRUE. 26 TYPE(xios_context) :: ctx_hdl 27 28 using_xios=.TRUE. 29 CALL xios_context_initialize("icosagcm",comm_icosa) 30 CALL xios_get_handle("icosagcm",ctx_hdl) 31 CALL xios_set_current_context(ctx_hdl) 26 32 27 33 END SUBROUTINE xios_init … … 41 47 IMPLICIT NONE 42 48 TYPE(xios_context) :: ctx_hdl 43 TYPE(xios_ time) :: dtime49 TYPE(xios_duration) :: dtime 44 50 REAL(rstd) :: lev_value(llm) 45 51 REAL(rstd) :: lev_valuep1(llm+1) … … 51 57 !$OMP BARRIER 52 58 !$OMP MASTER 53 CALL xios_context_initialize("icosagcm",comm_icosa)59 ! CALL xios_context_initialize("icosagcm",comm_icosa) 54 60 CALL xios_get_handle("icosagcm",ctx_hdl) 55 61 CALL xios_set_current_context(ctx_hdl) 56 62 lev_value(:) = (/ (l,l=1,llm) /) 57 63 lev_valuep1(:) = (/ (l,l=1,llm+1) /) 58 CALL xios_set_axis_attr("lev", size=llm ,value=lev_value) ;59 CALL xios_set_axis_attr("levp1", size=llm+1 ,value=lev_valuep1) ;64 CALL xios_set_axis_attr("lev",n_glo=llm ,value=lev_value) ; 65 CALL xios_set_axis_attr("levp1",n_glo=llm+1 ,value=lev_valuep1) ; 60 66 61 67 ncell=0 … … 104 110 105 111 106 CALL xios_set_domain _attr("i",ni_glo=ncell_tot, ibegin=displ+1, ni=ncell)107 CALL xios_set_domain _attr("i", data_dim=1, type='unstructured' , nvertex=6)108 CALL xios_set_domain _attr("i",lonvalue=lon, latvalue=lat, bounds_lon=bounds_lon, bounds_lat=bounds_lat)112 CALL xios_set_domaingroup_attr("i",ni_glo=ncell_tot, ibegin=displ, ni=ncell) 113 CALL xios_set_domaingroup_attr("i", data_dim=1, type='unstructured' , nvertex=6) 114 CALL xios_set_domaingroup_attr("i",lonvalue_1d=lon, latvalue_1d=lat, bounds_lon_1d=bounds_lon, bounds_lat_1d=bounds_lat) 109 115 110 116 DEALLOCATE(lon, lat, bounds_lon, bounds_lat) … … 183 189 184 190 185 CALL xios_set_domain_attr("v",ni_glo=ncell_tot, ibegin=displ +1, ni=ncell)191 CALL xios_set_domain_attr("v",ni_glo=ncell_tot, ibegin=displ, ni=ncell) 186 192 CALL xios_set_domain_attr("v", data_dim=1, type='unstructured' , nvertex=3) 187 CALL xios_set_domain_attr("v",lonvalue =lon, latvalue=lat, bounds_lon=bounds_lon, bounds_lat=bounds_lat)193 CALL xios_set_domain_attr("v",lonvalue_1d=lon, latvalue_1d=lat, bounds_lon_1d=bounds_lon, bounds_lat_1d=bounds_lat) 188 194 189 195 … … 239 245 240 246 END SUBROUTINE xios_write_field 247 248 SUBROUTINE xios_read_field(name,field) 249 USE field_mod 250 IMPLICIT NONE 251 CHARACTER(LEN=*),INTENT(IN) :: name 252 TYPE(t_field), POINTER :: field(:) 253 CHARACTER(LEN=10) :: str_number 254 INTEGER :: iq 255 256 !$OMP BARRIER 257 !$OMP MASTER 258 259 IF (Field(1)%field_type==field_T) THEN 260 IF (field(1)%ndim==2) THEN 261 CALL xios_read_field_scalar(name,field,1) 262 ELSE IF (field(1)%ndim==3) THEN 263 CALL xios_read_field_scalar(name,field,size(field(1)%rval3d,2)) 264 ELSE IF (field(1)%ndim==4) THEN 265 DO iq=1,size(field(1)%rval4d,3) 266 WRITE(str_number,'(i10)') iq 267 CALL xios_read_field_scalar(name//TRIM(ADJUSTL(str_number)),field,size(field(1)%rval4d,2),iq) 268 ENDDO 269 ELSE 270 PRINT *, "xios_write_field : dimension > 4 are not supported for now" 271 ENDIF 272 ELSE IF (Field(1)%field_type==field_Z) THEN 273 IF (field(1)%ndim==2) THEN 274 CALL xios_read_field_vort(name,field,1) 275 ELSE IF (field(1)%ndim==3) THEN 276 CALL xios_read_field_vort(name,field,size(field(1)%rval3d,2)) 277 ELSE IF (field(1)%ndim==4) THEN 278 DO iq=1,size(field(1)%rval4d,3) 279 WRITE(str_number,'(i10)') iq 280 CALL xios_read_field_vort(name//TRIM(ADJUSTL(str_number)),field,size(field(1)%rval4d,2),iq) 281 ENDDO 282 ELSE 283 PRINT *, "xios_write_field : dimension > 4 are not supported for now" 284 ENDIF 285 ENDIF 286 !$OMP END MASTER 287 !$OMP BARRIER 288 289 END SUBROUTINE xios_read_field 290 291 241 292 242 293 SUBROUTINE xios_write_field_scalar(name,field,nlev,iq) … … 309 360 310 361 CALL xios_send_field(name,field_tmp) 311 362 312 363 END SUBROUTINE xios_write_field_scalar 364 365 366 SUBROUTINE xios_read_field_scalar(name,field,nlev,iq) 367 USE genmod 368 USE mpipara 369 USE xios 370 USE grid_param 371 USE domain_mod 372 USE dimensions 373 USE spherical_geom_mod 374 USE geometry 375 USE mpi_mod 376 IMPLICIT NONE 377 CHARACTER(LEN=*),INTENT(IN) :: name 378 TYPE(t_field), POINTER :: field(:) 379 INTEGER,INTENT(IN) :: nlev 380 INTEGER,INTENT(IN),OPTIONAL :: iq 381 382 REAL(rstd) :: field_tmp(ncell_i,nlev) 383 TYPE(t_domain),POINTER :: d 384 INTEGER :: n,i,j,ij,ind 385 386 CALL xios_recv_field(name,field_tmp) 387 388 IF (field(1)%ndim==2) THEN 389 n=0 390 DO ind=1,ndomain 391 392 d=>domain(ind) 393 394 DO j=d%jj_begin,d%jj_end 395 DO i=d%ii_begin,d%ii_end 396 IF (d%own(i,j)) THEN 397 n=n+1 398 ij=d%iim*(j-1)+i 399 field(ind)%rval2d(ij)=field_tmp(n,1) 400 ENDIF 401 ENDDO 402 ENDDO 403 ENDDO 404 ELSE IF (field(1)%ndim==3) THEN 405 n=0 406 DO ind=1,ndomain 407 d=>domain(ind) 408 409 DO j=d%jj_begin,d%jj_end 410 DO i=d%ii_begin,d%ii_end 411 IF (d%own(i,j)) THEN 412 n=n+1 413 ij=d%iim*(j-1)+i 414 field(ind)%rval3d(ij,:)=field_tmp(n,:) 415 ENDIF 416 ENDDO 417 ENDDO 418 ENDDO 419 ELSE IF (field(1)%ndim==4) THEN 420 n=0 421 DO ind=1,ndomain 422 d=>domain(ind) 423 424 DO j=d%jj_begin,d%jj_end 425 DO i=d%ii_begin,d%ii_end 426 IF (d%own(i,j)) THEN 427 n=n+1 428 ij=d%iim*(j-1)+i 429 field(ind)%rval4d(ij,:,iq)=field_tmp(n,:) 430 ENDIF 431 ENDDO 432 ENDDO 433 ENDDO 434 ENDIF 435 436 END SUBROUTINE xios_read_field_scalar 437 438 313 439 314 440 SUBROUTINE xios_write_field_vort(name,field,nlev,iq) … … 409 535 410 536 END SUBROUTINE xios_write_field_vort 537 538 SUBROUTINE xios_read_field_vort(name,field,nlev,iq) 539 USE genmod 540 USE mpipara 541 USE xios 542 USE grid_param 543 USE domain_mod 544 USE dimensions 545 USE spherical_geom_mod 546 USE geometry 547 USE mpi_mod 548 IMPLICIT NONE 549 CHARACTER(LEN=*),INTENT(IN) :: name 550 TYPE(t_field), POINTER :: field(:) 551 INTEGER,INTENT(IN) :: nlev 552 INTEGER,INTENT(IN),OPTIONAL :: iq 553 554 REAL(rstd) :: field_tmp(ncell_v,nlev) 555 TYPE(t_domain),POINTER :: d 556 INTEGER :: n,i,j,ij,ind 557 558 CALL xios_recv_field(name,field_tmp) 559 560 561 IF (field(1)%ndim==2) THEN 562 n=0 563 DO ind=1,ndomain 564 d=>domain(ind) 565 CALL swap_dimensions(ind) 566 567 DO j=d%jj_begin+1,d%jj_end 568 DO i=d%ii_begin,d%ii_end-1 569 n=n+1 570 ij=iim*(j-1)+i 571 field(ind)%rval2d(ij+z_down)=Field_tmp(n,1) 572 ENDDO 573 ENDDO 574 575 DO j=d%jj_begin,d%jj_end-1 576 DO i=d%ii_begin+1,d%ii_end 577 n=n+1 578 ij=iim*(j-1)+i 579 Field_tmp(n,1)=field(ind)%rval2d(ij+z_up) 580 field(ind)%rval2d(ij+z_up)=Field_tmp(n,1) 581 ENDDO 582 ENDDO 583 584 ENDDO 585 586 ELSE IF (field(1)%ndim==3) THEN 587 n=0 588 DO ind=1,ndomain 589 d=>domain(ind) 590 CALL swap_dimensions(ind) 591 592 DO j=d%jj_begin+1,d%jj_end 593 DO i=d%ii_begin,d%ii_end-1 594 n=n+1 595 ij=iim*(j-1)+i 596 field(ind)%rval3d(ij+z_down,:)=Field_tmp(n,:) 597 ENDDO 598 ENDDO 599 600 DO j=d%jj_begin,d%jj_end-1 601 DO i=d%ii_begin+1,d%ii_end 602 n=n+1 603 ij=iim*(j-1)+i 604 field(ind)%rval3d(ij+z_up,:)=Field_tmp(n,:) 605 ENDDO 606 ENDDO 607 608 ENDDO 609 610 ELSE IF (field(1)%ndim==4) THEN 611 n=0 612 DO ind=1,ndomain 613 d=>domain(ind) 614 CALL swap_dimensions(ind) 615 616 DO j=d%jj_begin+1,d%jj_end 617 DO i=d%ii_begin,d%ii_end-1 618 n=n+1 619 ij=iim*(j-1)+i 620 field(ind)%rval4d(ij+z_down,:,iq)=Field_tmp(n,:) 621 ENDDO 622 ENDDO 623 624 DO j=d%jj_begin,d%jj_end-1 625 DO i=d%ii_begin+1,d%ii_end 626 n=n+1 627 ij=iim*(j-1)+i 628 field(ind)%rval4d(ij+z_up,:,iq)=Field_tmp(n,:) 629 ENDDO 630 ENDDO 631 632 ENDDO 633 634 ENDIF 635 636 END SUBROUTINE xios_read_field_vort 637 638 639 640 411 641 412 642 SUBROUTINE xios_write_field_finalize
Note: See TracChangeset
for help on using the changeset viewer.