source: XIOS/trunk/src/test/test_diurnal_cycle.f90 @ 1627

Last change on this file since 1627 was 1275, checked in by ymipsl, 7 years ago

implement diurnal cycle transformation taken as a grid tranformation : scalar -> axis

YM

File size: 1.9 KB
Line 
1PROGRAM 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
96END PROGRAM test_diurnal_cycle
97
98
99
100
101
Note: See TracBrowser for help on using the repository browser.