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

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

Corectly finalize xios context in standard physics when simulation is finished.

YM

File size: 3.3 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 finalize_xios_output
68  USE xios
69
70!$OMP BARRIER   
71!$OMP MASTER
72    CALL xios_context_finalize
73!$OMP END MASTER   
74!$OMP BARRIER   
75 
76  END SUBROUTINE finalize_xios_output
77
78
79  SUBROUTINE update_xios_timestep
80  USE xios
81  IMPLICIT NONE
82    CALL set_xios_context
83!$OMP MASTER
84    time_it=time_it+1
85    CALL xios_update_calendar(time_it)
86!$OMP END MASTER   
87  END SUBROUTINE update_xios_timestep
88
89
90  SUBROUTINE set_xios_context
91  USE XIOS
92  IMPLICIT NONE
93    TYPE(xios_context) :: ctx_hdl
94
95!$OMP MASTER
96    CALL xios_get_handle(context_id,ctx_hdl)
97    CALL xios_set_current_context(ctx_hdl)
98!$OMP END MASTER   
99  END SUBROUTINE set_xios_context
100
101
102 
103  SUBROUTINE write_xios_field_2d(field_id,field)
104  USE xios
105  USE mod_phys_lmdz_para
106  IMPLICIT NONE
107    CHARACTER(LEN=*) :: field_id
108    REAL,INTENT(IN)  :: field(:)
109    REAL             :: field_mpi(klon_mpi)
110 
111    CALL gather_omp(field,field_mpi)
112
113!$OMP MASTER
114    CALL xios_send_field(field_id,field_mpi)
115!$OMP END MASTER   
116   
117  END SUBROUTINE write_xios_field_2d
118
119  SUBROUTINE write_xios_field_3d(field_id,field)
120  USE xios
121  USE mod_phys_lmdz_para
122  IMPLICIT NONE
123    CHARACTER(LEN=*) :: field_id
124    REAL,INTENT(IN)  :: field(:,:)
125    REAL             :: field_mpi(klon_mpi,SIZE(field,2))
126 
127    CALL gather_omp(field,field_mpi)
128
129!$OMP MASTER
130    CALL xios_send_field(field_id,field_mpi)
131!$OMP END MASTER   
132   
133  END SUBROUTINE write_xios_field_3d
134 
135END MODULE xios_output_mod
136 
137 
Note: See TracBrowser for help on using the repository browser.