source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/libf/phystd/xios_output.F90 @ 253

Last change on this file since 253 was 253, checked in by ymipsl, 10 years ago

Adding xios output functionnalities

YM

File size: 3.1 KB
Line 
1MODULE xios_output_mod
2
3
4 INTEGER :: time_it
5 CHARACTER(LEN=*), PARAMETER :: context_id= "lmdz_physics"
6 
7 PRIVATE :: time_it
8
9 INTERFACE write_xios_field
10    MODULE PROCEDURE write_xios_field_2d,write_xios_field_3d
11  END INTERFACE
12 
13
14CONTAINS
15
16  SUBROUTINE initialize_xios_output
17  USE comgeomphy
18  USE xios
19  USE dimphy
20  USE mod_phys_lmdz_para
21  USE mod_grid_phy_lmdz
22 
23  IMPLICIT NONE
24    INCLUDE "comcstfi.h" 
25     
26    TYPE(xios_context) :: ctx_hdl
27    TYPE(xios_time)      :: dtime
28    REAL :: lev_value(klev)
29
30    REAL :: lon_mpi(klon_mpi)
31    REAL :: lat_mpi(klon_mpi)
32    REAL :: bounds_lon_mpi(klon_mpi,nvertex)
33    REAL :: bounds_lat_mpi(klon_mpi,nvertex)
34    INTEGER :: l
35
36    CALL gather_omp(rlond,lon_mpi)
37    CALL gather_omp(rlatd,lat_mpi)
38    CALL gather_omp(rbounds_lon,bounds_lon_mpi)
39    CALL gather_omp(rbounds_lat,bounds_lat_mpi)
40   
41!$OMP BARRIER   
42!$OMP MASTER
43    CALL xios_context_initialize(context_id,comm_lmdz_phy)
44    CALL xios_get_handle(context_id, ctx_hdl)
45    CALL xios_set_current_context(ctx_hdl)
46   
47    lev_value(:) = (/ (l,l=1,klev) /)     
48   
49    CALL xios_set_axis_attr("altitude",size=klev ,value=lev_value)
50   
51 
52    CALL xios_set_domain_attr("horiz_domain",ni_glo=klon_glo, ibegin=klon_mpi_begin, ni=klon_mpi)
53    CALL xios_set_domain_attr("horiz_domain", data_dim=1, type='unstructured' , nvertex=6)
54    CALL xios_set_domain_attr("horiz_domain", lonvalue=lon_mpi*180/Pi, latvalue=lat_mpi*180/Pi)
55    CALL xios_set_domain_attr("horiz_domain", bounds_lon=reshape(bounds_lon_mpi,(/nvertex,klon_mpi/),order=(/2,1/))*180./Pi )
56    CALL xios_set_domain_attr("horiz_domain", bounds_lat=reshape(bounds_lat_mpi,(/nvertex,klon_mpi/),order=(/2,1/))*180./Pi )
57 
58    dtime%second=dtphys
59    CALL xios_set_timestep(dtime)
60    time_it = 0 
61    CALL xios_close_context_definition()
62!$OMP END MASTER   
63!$OMP BARRIER   
64   
65  END SUBROUTINE initialize_xios_output
66
67  SUBROUTINE update_xios_timestep
68  USE xios
69  IMPLICIT NONE
70    CALL set_xios_context
71!$OMP MASTER
72    time_it=time_it+1
73    CALL xios_update_calendar(time_it)
74!$OMP END MASTER   
75  END SUBROUTINE update_xios_timestep
76
77
78  SUBROUTINE set_xios_context
79  USE XIOS
80  IMPLICIT NONE
81    TYPE(xios_context) :: ctx_hdl
82
83!$OMP MASTER
84    CALL xios_get_handle(context_id,ctx_hdl)
85    CALL xios_set_current_context(ctx_hdl)
86!$OMP END MASTER   
87  END SUBROUTINE set_xios_context
88
89
90 
91  SUBROUTINE write_xios_field_2d(field_id,field)
92  USE xios
93  USE mod_phys_lmdz_para
94  IMPLICIT NONE
95    CHARACTER(LEN=*) :: field_id
96    REAL,INTENT(IN)  :: field(:)
97    REAL             :: field_mpi(klon_mpi)
98 
99    CALL gather_omp(field,field_mpi)
100
101!$OMP MASTER
102    CALL xios_send_field(field_id,field_mpi)
103!$OMP END MASTER   
104   
105  END SUBROUTINE write_xios_field_2d
106
107  SUBROUTINE write_xios_field_3d(field_id,field)
108  USE xios
109  USE mod_phys_lmdz_para
110  IMPLICIT NONE
111    CHARACTER(LEN=*) :: field_id
112    REAL,INTENT(IN)  :: field(:,:)
113    REAL             :: field_mpi(klon_mpi,SIZE(field,2))
114 
115    CALL gather_omp(field,field_mpi)
116
117!$OMP MASTER
118    CALL xios_send_field(field_id,field_mpi)
119!$OMP END MASTER   
120   
121  END SUBROUTINE write_xios_field_3d
122 
123END MODULE xios_output_mod
124 
125 
Note: See TracBrowser for help on using the repository browser.