source: XIOS/xios_training/hands-on-5/answer/test_tp5.f90_3 @ 2046

Last change on this file since 2046 was 2046, checked in by ymipsl, 3 years ago
File size: 3.8 KB
Line 
1PROGRAM test_tp5
2
3  USE XIOS
4  IMPLICIT NONE
5  INCLUDE "mpif.h"
6  INTEGER :: rank
7  INTEGER :: size
8  INTEGER :: ierr
9
10  INTEGER :: comm
11  TYPE(xios_duration) :: dtime
12
13  TYPE(xios_date) :: dorigin
14  CHARACTER(len=20) :: dorigin_str
15
16  TYPE(xios_date) :: dstart
17  CHARACTER(len=20) :: dstart_str
18
19  INTEGER :: axis_size
20  DOUBLE PRECISION, ALLOCATABLE :: axis_value(:)
21
22  CHARACTER(len=20) :: domain_type
23  INTEGER :: ni_glo, nj_glo
24  DOUBLE PRECISION, ALLOCATABLE :: lonvalue(:), latvalue(:)
25 
26  INTEGER :: i, j
27 
28  DOUBLE PRECISION, ALLOCATABLE :: field_A(:,:,:)
29  DOUBLE PRECISION, ALLOCATABLE :: field_B(:,:,:)
30  DOUBLE PRECISION, ALLOCATABLE :: field_C(:,:,:)
31  DOUBLE PRECISION, ALLOCATABLE :: field_read(:,:,:)
32 
33  INTEGER :: ts
34 
35  INTEGER :: ni, nj, ibegin, jbegin
36 
37  CALL MPI_INIT(ierr)
38
39  CALL xios_initialize("client",return_comm=comm)
40
41  CALL MPI_COMM_RANK(comm,rank,ierr)
42  CALL MPI_COMM_SIZE(comm,size,ierr)
43 
44  print*, "Hello XIOS from proc", rank
45 
46  CALL xios_context_initialize("test",comm)
47
48  !CALL xios_define_calendar(type="Gregorian")
49  !We define the calendar type in xml
50
51  CALL xios_get_time_origin(dorigin)
52  CALL xios_date_convert_to_string(dorigin, dorigin_str)
53  if (rank .EQ. 0) print*, "calendar time_origin = ", dorigin_str
54
55  CALL xios_get_start_date(dstart)
56  CALL xios_date_convert_to_string(dstart, dstart_str)
57  if (rank .EQ. 0) print*, "calendar start_date = ", dstart_str
58
59  dtime%second = 3600
60  CALL xios_set_timestep(dtime)
61
62  CALL xios_get_axis_attr("axis_A", n_glo = axis_size)
63  ALLOCATE(axis_value(axis_size))
64  CALL xios_get_axis_attr("axis_A", value = axis_value)
65  if (rank .EQ. 0) print*, "axis value = ", axis_value(:)
66
67  CALL xios_get_domain_attr("domain_A", type = domain_type)
68  CALL xios_get_domain_attr("domain_A", ni_glo = ni_glo, nj_glo=nj_glo)
69  if(rank.EQ.0) print*, "domain type = ", domain_type
70  if(rank.EQ.0) print*, "domain size = ", ni_glo, "*", nj_glo
71
72  ni=ni_glo/size
73  nj=nj_glo
74
75  ibegin=ni*rank
76  jbegin=0
77
78  CALL xios_set_domain_attr("domain_A", ni=ni, nj=nj, ibegin=ibegin,jbegin=jbegin)
79  print*, "Proc ",rank, "occupies subdomain",ibegin,"->",ibegin+ni,"X",jbegin,"->",jbegin+nj
80
81
82  ALLOCATE(lonvalue(ni))
83  ALLOCATE(latvalue(nj))
84
85  DO i=1,ni
86    lonvalue(i) = -180 + (rank*ni+i) * 360/ni_glo
87  ENDDO
88
89  DO j=1,nj
90    latvalue(j) = -90 + j * 180/nj_glo
91  ENDDO
92
93  CALL xios_set_domain_attr("domain_A", lonvalue_1d=lonvalue,latvalue_1d=latvalue)
94 
95  !--- Case 2 ---!
96  ! CALL xios_set_domain_attr("domain_A", data_dim=2, data_ibegin=-1, data_ni=ni+2, data_jbegin=-1, data_nj=nj+2)
97 
98  !--- Case 3 ---!
99  !CALL xios_set_domain_attr("domain_A", data_dim=2, data_ibegin=1, data_ni=ni-2, data_jbegin=0, data_nj=nj/2)
100
101  CALL xios_set_domain_attr("domain_read", type="curvilinear", ni_glo=10, nj_glo=10)
102  CALL xios_set_domain_attr("domain_read", ni=10, ibegin=0, nj=10,jbegin=0)
103 
104  CALL xios_close_context_definition()
105
106  !--- Case 1 ---!
107  ALLOCATE(field_A(ni, nj, axis_size))
108  field_A(:,:,:)=rank
109
110  !--- Case 2 ---!
111  ! ALLOCATE(field_A(ni+2, nj+2, axis_size))
112  ! field_A(:,:,:)=rank
113
114  !--- Case 3 ---!
115  ! ALLOCATE(field_A(ni-2, nj/2, axis_size))
116  ! field_A(:,:,:)=rank
117
118  ALLOCATE(field_B(ni, nj, axis_size))
119  ALLOCATE(field_C(ni, nj, axis_size))
120  field_B(:,:,:)=-1 * rank
121  field_C(:,:,:)=rank*rank
122 
123  ALLOCATE(field_read(10,10,5))
124
125  DO ts=1,4
126    CALL xios_update_calendar(ts)
127    CALL xios_send_field("field_A", field_A)
128    CALL xios_send_field("field_B", field_B)
129    CALL xios_send_field("field_C", field_C)
130    CALL xios_recv_field("field_read", field_read)
131    CALL xios_send_field("field_copy", field_read)
132  ENDDO
133
134  CALL xios_context_finalize()
135
136  DEALLOCATE(axis_value)
137  DEALLOCATE(lonvalue, latvalue)
138  DEALLOCATE(field_A)
139  DEALLOCATE(field_B)
140  DEALLOCATE(field_C)
141  DEALLOCATE(field_read)
142
143  CALL MPI_COMM_FREE(comm, ierr)
144
145  CALL xios_finalize()
146
147  CALL MPI_FINALIZE(ierr)
148
149END PROGRAM test_tp5
150
Note: See TracBrowser for help on using the repository browser.