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 | |
---|