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

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

Feature : ajout des paramÚtres temporels dans les contexts

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