source: XMLIO_SERVER/trunk/src/IOSERVER/mod_interface_ioipsl.f90 @ 8

Last change on this file since 8 was 8, checked in by ymipsl, 15 years ago

Importation des sources du serveur XMLIO

File size: 6.6 KB
Line 
1MODULE mod_interface_ioipsl
2
3  INTEGER,SAVE,PRIVATE  :: ini_timestep
4  REAL,SAVE,PRIVATE     :: zjulian
5  REAL,SAVE,PRIVATE     :: timestep 
6  INTEGER,SAVE,PRIVATE  :: timestep_nb
7 
8  INTEGER,PARAMETER     :: id_file=1
9
10
11CONTAINS
12
13  SUBROUTINE init_interface_ioipsl
14  USE xmlio
15  IMPLICIT NONE
16 
17   
18  END SUBROUTINE init_interface_ioipsl
19
20
21  SUBROUTINE set_time_parameters(ini_timestep0,zjulian0,timestep0)
22  IMPLICIT NONE
23    INTEGER :: ini_timestep0
24    REAL :: zjulian0, timestep0
25
26    timestep=timestep0
27    ini_timestep=ini_timestep0
28    zjulian=zjulian0
29
30  END SUBROUTINE set_time_parameters
31
32  SUBROUTINE Create_file_definition(nb_server,server_rank)
33  USE ioipsl
34  USE xmlio
35  IMPLICIT NONE
36    INTEGER,INTENT(IN)  :: nb_server
37    INTEGER,INTENT(IN)  :: server_rank
38   
39    TYPE(file_dep),POINTER :: pt_file_dep
40    TYPE(file),POINTER     :: pt_file
41    TYPE(field),POINTER    :: pt_field
42    TYPE(grid),POINTER     :: pt_grid
43    TYPE(axis),POINTER     :: pt_axis
44    TYPE(domain),POINTER   :: pt_domain
45
46    TYPE(sorted_list),POINTER :: axis_id
47    LOGICAL :: found                 
48    INTEGER :: ioipsl_axis_id
49    INTEGER :: ioipsl_file_id
50    INTEGER :: ioipsl_hori_id
51    INTEGER :: ioipsl_domain_id
52    INTEGER :: i,j
53     
54    CALL xmlio__close_definition 
55   
56    ALLOCATE(axis_id)
57   
58    DO i=1,file_enabled%size
59      CALL sorted_list__new(axis_id)
60     
61      pt_file_dep=>file_enabled%at(i)%pt
62      pt_file=>pt_file_dep%file
63     
64      pt_grid=>pt_file_dep%grids%at(1)%pt
65      pt_domain=>pt_grid%domain
66      CALL set_ioipsl_domain_id(pt_grid,nb_server,server_rank,ioipsl_domain_id)
67      CALL histbeg(TRIM(pt_file%name),pt_domain%ni,pt_domain%lon, pt_domain%nj, pt_domain%lat,  &
68                    1, pt_domain%ni, 1, pt_domain%nj,ini_timestep, zjulian, timestep,           &
69                   ioipsl_hori_id, ioipsl_file_id,domain_id=ioipsl_domain_id)                                             
70     
71      DO j=1,pt_file_dep%axis%size
72        pt_axis=>pt_file_dep%axis%at(j)%pt
73        CALL sorted_list__find(axis_id,hash(Pt_axis%name),ioipsl_axis_id,found)
74        IF (.NOT. found) THEN
75          IF (TRIM(pt_axis%name) /= "none") THEN
76            CALL histvert(ioipsl_file_id, TRIM(pt_axis%name),TRIM(pt_axis%description),    &
77                         TRIM(pt_axis%unit), pt_axis%size,pt_axis%values, ioipsl_axis_id)
78            CALL sorted_list__add(axis_id,hash(Pt_axis%name),ioipsl_axis_id)
79          ENDIF
80        ENDIF
81      ENDDO
82     
83      DO j=1,pt_file_dep%fields%size
84        pt_field=>pt_file_dep%fields%at(j)%pt
85        IF (pt_field%axis%name=="none") THEN
86          pt_field%internal(id_file)=ioipsl_file_id
87          CALL histdef(ioipsl_file_id, TRIM(pt_field%name), pt_field%description,            &
88                    &  pt_field%unit, pt_field%grid%domain%ni, pt_field%grid%domain%nj,      &
89                    &  ioipsl_hori_id, 1, 1, 1, -99, 32, pt_field%operation,                 &
90                    &  real(pt_field%freq_op), real(pt_file%output_freq) )
91        ELSE
92          pt_field%internal(id_file)=ioipsl_file_id
93          CALL sorted_list__find(axis_id,hash(Pt_field%axis%name),ioipsl_axis_id,found)
94          CALL histdef(ioipsl_file_id, TRIM(pt_field%name), pt_field%description,          &
95                     & pt_field%unit, pt_field%grid%domain%ni, pt_field%grid%domain%nj,    &
96                     & ioipsl_hori_id, pt_field%axis%size, 1, pt_field%axis%size,          &
97                     & ioipsl_axis_id, 32, pt_field%operation, real(pt_field%freq_op),     &
98                     & real(pt_file%output_freq) )
99        ENDIF
100      ENDDO
101      CALL histend(ioipsl_file_id)
102      CALL sorted_list__delete(axis_id)
103    ENDDO
104   
105    DEALLOCATE(axis_id)
106     
107  END SUBROUTINE Create_file_definition 
108
109
110
111   SUBROUTINE write_ioipsl_2d(varname,var)
112   USE ioipsl
113   USE xmlio
114   IMPLICIT NONE
115     CHARACTER(len=*),INTENT(IN) :: varname
116     REAL            ,INTENT(IN) :: var(:,:)
117     
118     TYPE(field_dep),POINTER :: pt_field_base
119     TYPE(field)    ,POINTER :: pt_field
120     INTEGER :: nindex(size(var))
121     INTEGER :: ioipsl_file_id
122     INTEGER :: pos
123     LOGICAL :: found
124     INTEGER :: i
125     
126     CALL sorted_list__find(sorted_id,hash(varname),pos,found)
127     IF (found) THEN
128       pt_field_base=>field_id%at(pos)%pt
129     
130       DO i=1,pt_field_base%field_out%size
131         pt_field=>pt_field_base%field_out%at(i)%pt%field
132         ioipsl_file_id=pt_field%internal(id_file)
133         CALL histwrite(ioipsl_file_id, TRIM(pt_field%name), timestep_nb, var, size(var), nindex)
134       ENDDO
135     ENDIF
136     
137   END SUBROUTINE write_ioipsl_2d
138       
139     
140   SUBROUTINE write_ioipsl_3d(varname,var)
141   USE ioipsl
142   USE xmlio
143   IMPLICIT NONE
144     CHARACTER(len=*),INTENT(IN) :: varname
145     REAL            ,INTENT(IN) :: var(:,:,:)
146     
147     TYPE(field_dep),POINTER :: pt_field_base
148     TYPE(field)    ,POINTER :: pt_field
149     INTEGER :: nindex(size(var))
150     INTEGER :: ioipsl_file_id
151     INTEGER :: pos
152     LOGICAL :: found
153     INTEGER :: i
154       
155     CALL sorted_list__find(sorted_id,hash(varname),pos,found)
156     pt_field_base=>field_id%at(pos)%pt
157     
158     DO i=1,pt_field_base%field_out%size
159       pt_field=>pt_field_base%field_out%at(i)%pt%field
160       ioipsl_file_id=pt_field%internal(id_file)
161       CALL histwrite(ioipsl_file_id, TRIM(pt_field%name), timestep_nb, var, size(var), nindex)
162     ENDDO
163     
164   END SUBROUTINE write_ioipsl_3d
165           
166
167  SUBROUTINE set_timestep(timestep_nb0)
168  IMPLICIT NONE
169    INTEGER,INTENT(IN) :: timestep_nb0
170     
171    timestep_nb=timestep_nb0
172
173  END SUBROUTINE set_timestep
174
175
176  SUBROUTINE set_ioipsl_domain_id(pt_grid, nb_server,server_rank,domain_id)
177  USE xmlio
178  USE mod_ioserver_para
179  USE ioipsl
180  IMPLICIT NONE
181    TYPE(grid), POINTER :: pt_grid
182    INTEGER,INTENT(IN)  :: nb_server
183    INTEGER,INTENT(IN)  :: server_rank
184    INTEGER,INTENT(OUT) :: domain_id
185    TYPE(domain), POINTER :: pt_domain
186               
187    INTEGER,DIMENSION(2) :: ddid
188    INTEGER,DIMENSION(2) :: dsg
189    INTEGER,DIMENSION(2) :: dsl
190    INTEGER,DIMENSION(2) :: dpf
191    INTEGER,DIMENSION(2) :: dpl
192    INTEGER,DIMENSION(2) :: dhs
193    INTEGER,DIMENSION(2) :: dhe 
194   
195    pt_domain=>pt_grid%domain
196
197    ddid = (/ 1,2 /)
198    dsg  = (/ pt_grid%ni, pt_grid%nj /)
199    dsl  = (/ pt_domain%ni, pt_domain%nj /)
200    dpf  = (/ pt_domain%ibegin,pt_domain%jbegin /)
201    dpl  = (/ pt_domain%iend, pt_domain%jend /)
202    dhs  = (/ 0,0 /)
203    dhe  = (/ 0,0 /)
204   
205    call flio_dom_set(nb_server,server_rank,ddid,dsg,dsl,dpf,dpl,dhs,dhe, &
206                      'BOX',domain_id)
207 
208  END SUBROUTINE set_ioipsl_domain_id
209
210
211  SUBROUTINE ioipsl_finalize
212  USE ioipsl
213  IMPLICIT NONE
214
215    CALL histclo
216   
217  END SUBROUTINE ioipsl_finalize
218 
219END MODULE mod_interface_ioipsl
Note: See TracBrowser for help on using the repository browser.