source: XIOS/trunk/src/test/test_unstruct.f90 @ 449

Last change on this file since 449 was 449, checked in by ymipsl, 11 years ago

Add unstructured grid management.

YM

File size: 5.3 KB
Line 
1PROGRAM test_client
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_time)      :: dtime
14  TYPE(xios_context) :: ctx_hdl
15  INTEGER,PARAMETER :: ni_glo=100
16  INTEGER,PARAMETER :: nj_glo=100 
17  INTEGER,PARAMETER :: llm=5 
18  DOUBLE PRECISION  :: lval(llm)=1
19  TYPE(xios_field) :: field_hdl
20  TYPE(xios_fieldgroup) :: fieldgroup_hdl
21  TYPE(xios_file) :: file_hdl
22  LOGICAL :: ok
23 
24  DOUBLE PRECISION,DIMENSION(ni_glo,nj_glo) :: lon_glo,lat_glo
25  DOUBLE PRECISION,DIMENSION(4,ni_glo,nj_glo) :: bounds_lon_glo,bounds_lat_glo
26  DOUBLE PRECISION :: field_A_glo(ni_glo,nj_glo,llm)
27  DOUBLE PRECISION,ALLOCATABLE :: lon(:,:),lat(:,:),field_A(:,:,:), lonvalue(:) ;
28  DOUBLE PRECISION,ALLOCATABLE :: bounds_lon(:,:,:),bounds_lat(:,:,:) ;
29  INTEGER :: ni,ibegin,iend,nj,jbegin,jend
30  INTEGER :: i,j,l,ts,n
31
32  CALL xios_initialize(id,return_comm=comm)
33! CALL MPI_INIT(ierr)
34  CALL MPI_COMM_RANK(comm,rank,ierr)
35  CALL MPI_COMM_SIZE(comm,size,ierr)
36 
37  CALL init_wait
38 
39 
40  DO j=1,nj_glo
41    DO i=1,ni_glo
42      lon_glo(i,j)=(i-1)+(j-1)*ni_glo
43      lat_glo(i,j)=1000+(i-1)+(j-1)*ni_glo
44      bounds_lat_glo(1,i,j)=lat_glo(i,j)-0.5
45      bounds_lat_glo(2,i,j)=lat_glo(i,j)-0.5
46      bounds_lat_glo(3,i,j)=lat_glo(i,j)+0.5
47      bounds_lat_glo(4,i,j)=lat_glo(i,j)+0.5
48      bounds_lon_glo(1,i,j)=lon_glo(i,j)-0.5
49      bounds_lon_glo(2,i,j)=lon_glo(i,j)-0.5
50      bounds_lon_glo(3,i,j)=lon_glo(i,j)+0.5
51      bounds_lon_glo(4,i,j)=lon_glo(i,j)+0.5
52      DO l=1,llm
53        field_A_glo(i,j,l)=(i-1)+(j-1)*ni_glo+10000*l
54      ENDDO
55    ENDDO
56  ENDDO
57  ni=ni_glo ; ibegin=1
58
59  jbegin=1
60  DO n=0,size-1
61    nj=nj_glo/size
62    IF (n<MOD(nj_glo,size)) nj=nj+1
63    IF (n==rank) exit
64    jbegin=jbegin+nj
65  ENDDO
66 
67  iend=ibegin+ni-1 ; jend=jbegin+nj-1
68
69  ALLOCATE(lon(ni,nj),lat(ni,nj),field_A(ni,nj,llm),lonvalue(ni*nj))
70  ALLOCATE(bounds_lon(4,ni,nj),bounds_lat(4,ni,nj))
71  lon(:,:)=lon_glo(ibegin:iend,jbegin:jend)
72  lat(:,:)=lat_glo(ibegin:iend,jbegin:jend)
73  bounds_lon(:,:,:)=bounds_lon_glo(:,ibegin:iend,jbegin:jend)
74  bounds_lat(:,:,:)=bounds_lat_glo(:,ibegin:iend,jbegin:jend)
75  field_A(1:ni,1:nj,:)=field_A_glo(ibegin:iend,jbegin:jend,:)
76 
77
78  CALL xios_context_initialize("test",comm)
79  CALL xios_get_handle("test",ctx_hdl)
80  CALL xios_set_current_context(ctx_hdl)
81 
82  CALL xios_set_context_attr("test",calendar_type="Gregorian") 
83  CALL xios_set_context_attr("test",calendar_type="Gregorian") 
84  CALL xios_set_context_attr("test",calendar_type="Gregorian") 
85!  CALL xios_set_context_attr("test",start_date="01/01/2000 - 00:00:00")
86  CALL xios_set_context_attr("test",calendar_type="Gregorian") 
87  CALL xios_set_axis_attr("axis_A",size=llm ,value=lval) ;
88!  CALL xios_set_domain_attr("domain_A",ni_glo=1, nj_glo=nj_glo*nj_glo, ibegin=1, ni=1,jbegin=(jbegin-1)*ni_glo+1,nj=nj*ni_glo)
89  CALL xios_set_domain_attr("domain_A",ni_glo=ni_glo*nj_glo, ibegin=(jbegin-1)*ni_glo+1, ni=nj*ni_glo)
90  !CALL xios_set_domain_attr("domain_A",zoom_ni=3,zoom_ibegin=3,zoom_nj=3,zoom_jbegin=6)
91  CALL xios_set_domain_attr("domain_A",data_dim=1,type='unstructured')
92  CALL xios_set_domain_attr("domain_A",lonvalue=RESHAPE(lon,(/ni*nj/)),latvalue=RESHAPE(lat,(/ni*nj/)))
93  CALL xios_set_domain_attr("domain_A", bounds_lon=RESHAPE(bounds_lon,(/4,ni*nj/)) )
94  CALL xios_set_domain_attr("domain_A",bounds_lat=RESHAPE(bounds_lat,(/4,ni*nj/)) )
95  CALL xios_set_fieldgroup_attr("field_definition",enabled=.TRUE.)
96 
97  CALL xios_get_handle("field_definition",fieldgroup_hdl)
98  CALL xios_add_child(fieldgroup_hdl,field_hdl,"field_B")
99  CALL xios_set_attr(field_hdl,field_ref="field_A",name="field_B")
100 
101  CALL xios_get_handle("output",file_hdl)
102  CALL xios_add_child(file_hdl,field_hdl,"field_C")
103  CALL xios_set_attr(field_hdl,field_ref="field_A",name="field_C")
104   
105 
106    dtime%second=3600
107    CALL xios_set_timestep(dtime) 
108   
109!    ni=0 ; lonvalue(:)=0
110!    CALL xios_get_domain_attr("domain_A",ni=ni,lonvalue=lonvalue)
111   
112!    print *,"ni",ni
113!    print *,"lonvalue",lonvalue ;
114
115    CALL xios_is_defined_field_attr("field_A",enabled=ok)
116    PRINT *,"field_A : attribute enabled is defined ? ",ok
117    IF (ok) THEN
118      CALL xios_get_field_attr("field_A",enabled=ok)
119      PRINT *,"field_A : attribute enabled = ",ok
120    ENDIF
121    CALL xios_is_defined_field_attr("field_C",enabled=ok)
122    PRINT *,"field_C : attribute enabled is defined ? ",ok
123    IF (ok) THEN
124      CALL xios_get_field_attr("field_C",enabled=ok)
125      PRINT *,"field_C : attribute enabled = ",ok
126    ENDIF
127     
128    CALL xios_solve_inheritance()
129    CALL xios_is_defined_field_attr("field_C",enabled=ok)
130    PRINT *,"field_C : attribute enabled is defined ? ",ok
131    IF (ok) THEN
132      CALL xios_get_field_attr("field_C",enabled=ok)
133      PRINT *,"field_C : attribute enabled = ",ok
134    ENDIF
135    CALL xios_close_context_definition()
136   
137    PRINT*,"field field_A is active ? ",xios_field_is_active("field_A")
138    DO ts=1,24*10
139      field_A=field_A+100000
140      CALL xios_update_calendar(ts)
141      CALL xios_send_field("field_A",RESHAPE(field_A,(/ni*nj,llm/)))
142      if (ts==12) CALL xios_send_field("field_once",RESHAPE(field_A,(/ni*nj,llm/)))
143!      field_A=field_A+100000
144!     CALL wait_us(5000) ;
145    ENDDO
146 
147    CALL xios_context_finalize()
148    CALL xios_finalize()
149 
150!  CALL MPI_FINALIZE(ierr)
151 
152END PROGRAM test_client
153
154
155 
156
157 
Note: See TracBrowser for help on using the repository browser.