[1275] | 1 | PROGRAM test_diurnal_cycle |
---|
| 2 | |
---|
| 3 | USE xios |
---|
| 4 | USE mod_wait |
---|
| 5 | IMPLICIT NONE |
---|
| 6 | INCLUDE "mpif.h" |
---|
| 7 | INTEGER :: rank |
---|
| 8 | INTEGER :: size |
---|
| 9 | INTEGER :: ierr |
---|
| 10 | |
---|
| 11 | CHARACTER(len=*),PARAMETER :: id="client" |
---|
| 12 | INTEGER :: comm |
---|
| 13 | TYPE(xios_duration) :: dtime |
---|
| 14 | TYPE(xios_context) :: ctx_hdl |
---|
| 15 | INTEGER,PARAMETER :: llm=10 |
---|
| 16 | DOUBLE PRECISION :: value_glo(0:llm-1) |
---|
| 17 | DOUBLE PRECISION,ALLOCATABLE :: axisValue(:) |
---|
| 18 | DOUBLE PRECISION,ALLOCATABLE :: field_A(:,:) |
---|
| 19 | INTEGER :: i,j,l,ts,nl,begin |
---|
| 20 | |
---|
| 21 | !!! MPI Initialization |
---|
| 22 | |
---|
| 23 | CALL MPI_INIT(ierr) |
---|
| 24 | CALL MPI_COMM_RANK(MPI_COMM_WORLD,rank,ierr) |
---|
| 25 | |
---|
| 26 | IF (rank>3) THEN |
---|
| 27 | CALL xios_init_server |
---|
| 28 | ELSE |
---|
| 29 | |
---|
| 30 | CALL init_wait |
---|
| 31 | |
---|
| 32 | !!! XIOS Initialization (get the local communicator) |
---|
| 33 | |
---|
| 34 | CALL xios_initialize(id,return_comm=comm) |
---|
| 35 | |
---|
| 36 | CALL MPI_COMM_RANK(comm,rank,ierr) |
---|
| 37 | CALL MPI_COMM_SIZE(comm,size,ierr) |
---|
| 38 | |
---|
| 39 | CALL xios_context_initialize("test",comm) |
---|
| 40 | CALL xios_get_handle("test",ctx_hdl) |
---|
| 41 | CALL xios_set_current_context(ctx_hdl) |
---|
| 42 | |
---|
| 43 | nl=llm/size |
---|
| 44 | |
---|
| 45 | IF (rank<MOD(llm,size)) THEN |
---|
| 46 | nl=nl+1 |
---|
| 47 | begin=rank*nl |
---|
| 48 | ELSE |
---|
| 49 | begin=(nl+1)*MOD(llm,size) + nl*(rank-MOD(llm,size)) |
---|
| 50 | ENDIF |
---|
| 51 | DO i=0,llm-1 |
---|
| 52 | value_glo(i)=i |
---|
| 53 | ENDDO |
---|
| 54 | |
---|
| 55 | |
---|
| 56 | IF (rank==0) THEN |
---|
| 57 | begin=0 ; nl=6 |
---|
| 58 | ELSE IF (rank==1) THEN |
---|
| 59 | begin=0 ; nl=6 |
---|
| 60 | ELSE IF (rank==2) THEN |
---|
| 61 | begin=0 ; nl=6 |
---|
| 62 | ELSE IF (rank==3) THEN |
---|
| 63 | begin=6 ; nl=4 |
---|
| 64 | ENDIF |
---|
| 65 | |
---|
| 66 | ALLOCATE(axisValue(0:nl-1)) |
---|
| 67 | ALLOCATE(field_A(0:nl-1,0:llm-1)) |
---|
| 68 | axisValue(:)=value_glo(begin:begin+nl-1) |
---|
| 69 | DO i=0,llm-1 |
---|
| 70 | field_A(:,i)=10*i+value_glo(begin:begin+nl-1) |
---|
| 71 | ENDDO |
---|
| 72 | |
---|
| 73 | CALL xios_set_axis_attr("axis_A",n_glo=llm , begin=begin, n=nl,value=axisValue) ; |
---|
| 74 | |
---|
| 75 | dtime%second = 3600 |
---|
| 76 | CALL xios_set_timestep(dtime) |
---|
| 77 | CALL xios_close_context_definition() |
---|
| 78 | |
---|
| 79 | DO ts=1,8 |
---|
| 80 | CALL xios_update_calendar(ts) |
---|
| 81 | CALL xios_send_field("field_A",field_A(:,:)) |
---|
| 82 | field_A=field_A+100 |
---|
| 83 | CALL wait_us(5000) ; |
---|
| 84 | ENDDO |
---|
| 85 | |
---|
| 86 | CALL xios_context_finalize() |
---|
| 87 | |
---|
| 88 | CALL MPI_COMM_FREE(comm, ierr) |
---|
| 89 | |
---|
| 90 | CALL xios_finalize() |
---|
| 91 | |
---|
| 92 | ENDIF |
---|
| 93 | |
---|
| 94 | CALL MPI_FINALIZE(ierr) |
---|
| 95 | |
---|
| 96 | END PROGRAM test_diurnal_cycle |
---|
| 97 | |
---|
| 98 | |
---|
| 99 | |
---|
| 100 | |
---|
| 101 | |
---|