source: XMLIO_SERVER/trunk/src/XMLIO/mod_context.f90 @ 28

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

Feature : ajout des paramÚtres temporels dans les contexts

File size: 8.2 KB
Line 
1MODULE mod_context
2  USE mod_xmlio_parameters
3  USE mod_sorted_list
4  USE mod_field
5  USE mod_field_group
6  USE mod_field_definition
7  USE mod_file
8  USE mod_file_group
9  USE mod_file_definition
10  USE mod_grid
11  USE mod_grid_group
12  USE mod_grid_definition
13  USE mod_axis
14  USE mod_axis_group
15  USE mod_axis_definition
16  USE mod_dependency
17  USE mod_time_parameters
18
19
20  INTERFACE context__swap
21    MODULE PROCEDURE context__swap_id,context__swap_pt
22  END INTERFACE 
23 
24  TYPE, PUBLIC :: context
25    CHARACTER(len=str_len)         :: id
26    INTEGER                        :: number
27 
28    TYPE(vector_field),POINTER        :: field__field_Ids
29    TYPE(sorted_list),POINTER         :: field__Ids
30    TYPE(vector_field_group),POINTER  :: field_group__field_group_ids
31    TYPE(sorted_list),POINTER         :: field_group__Ids
32    TYPE(field_group),POINTER         :: field_definition__field_definition
33    TYPE(vector_file),POINTER         :: file__file_Ids
34    TYPE(sorted_list),POINTER         :: file__Ids
35    TYPE(vector_file_group),POINTER   :: file_group__file_group_Ids
36    TYPE(sorted_list),POINTER         :: file_group__Ids 
37    TYPE(file_group),POINTER          :: file_definition__file_definition 
38    TYPE(vector_grid),POINTER         :: grid__grid_Ids
39    TYPE(sorted_list),POINTER         :: grid__Ids 
40    TYPE(vector_grid_group),POINTER   :: grid_group__grid_group_Ids
41    TYPE(sorted_list),POINTER         :: grid_group__Ids 
42    TYPE(grid_group),POINTER          :: grid_definition__grid_definition
43    TYPE(vector_axis),POINTER         :: axis__axis_Ids
44    TYPE(sorted_list),POINTER         :: axis__Ids 
45    TYPE(vector_axis_group),POINTER   :: axis_group__axis_group_Ids
46    TYPE(sorted_list),POINTER         :: axis_group__Ids 
47    TYPE(axis_group),POINTER          :: axis_definition__axis_definition
48    TYPE(vector_file_dep),POINTER     :: dependency__file_enabled
49    TYPE(vector_field_out),POINTER    :: dependency__field_enabled 
50    TYPE(vector_field_dep),POINTER    :: dependency__field_id
51    TYPE(sorted_list),POINTER         :: dependency__sorted_id 
52    INTEGER,POINTER                   :: time_param__initial_timestep
53    REAL,POINTER                      :: time_param__initial_date
54    REAL,POINTER                      :: time_param__timestep_value 
55    INTEGER,POINTER                   :: time_param__timestep_number
56
57  END TYPE context
58 
59  INCLUDE 'vector_context_def.inc'
60  TYPE(vector_context),SAVE,POINTER  :: context_ids
61  TYPE(sorted_list),POINTER,SAVE,PRIVATE :: Ids
62
63 
64  CONTAINS
65    INCLUDE 'vector_context_contains.inc'
66   
67    SUBROUTINE context__init
68    IMPLICIT NONE
69
70      ALLOCATE(context_Ids)
71      ALLOCATE(Ids)
72
73      CALL vector_context__new(context_Ids)
74      CALL sorted_list__new(ids)
75
76    END SUBROUTINE context__init
77
78    SUBROUTINE context__get(Id,Pt_context)
79      USE string_function
80      IMPLICIT NONE
81      CHARACTER(LEN=*),INTENT(IN)     :: Id
82      TYPE(context),POINTER              :: Pt_context
83
84      INTEGER                         :: Pos
85      LOGICAL                         :: success
86   
87      CALL sorted_list__find(Ids,hash(Id),Pos,success)
88      IF (success) THEN
89        Pt_context=>context_ids%at(Pos)%Pt
90      ELSE
91        Pt_context=>NULL()
92      ENDIF
93   
94    END SUBROUTINE context__get
95
96    SUBROUTINE context__get_new(Id,pt_context)
97    USE string_function
98    IMPLICIT NONE
99      CHARACTER(LEN=*),INTENT(IN)     :: Id
100      TYPE(context),POINTER              :: Pt_context
101
102      INTEGER                         :: Pos
103      LOGICAL                         :: success
104     
105      CALL sorted_list__find(Ids,hash(Id),Pos,success)
106      IF (success) THEN
107        Pt_context=>context_ids%at(Pos)%Pt
108      ELSE
109        CALL vector_context__get_new(context_ids,pt_context,Pos)
110        pt_context%number=Pos
111        Pt_context%id=Id
112        CALL sorted_list__Add(Ids,hash(Id),Pos)
113       
114        ALLOCATE(pt_context%field__field_Ids )
115        ALLOCATE(pt_context%field__Ids )
116        ALLOCATE(pt_context%field_group__field_group_ids )
117        ALLOCATE(pt_context%field_group__field_group_ids )
118        ALLOCATE(pt_context%field_group__Ids )
119        ALLOCATE(pt_context%field_definition__field_definition )
120        ALLOCATE(pt_context%file__file_Ids)
121        ALLOCATE(pt_context%file__Ids)
122        ALLOCATE(pt_context%file_group__file_group_Ids)
123        ALLOCATE(pt_context%file_group__Ids) 
124        ALLOCATE(pt_context%file_definition__file_definition) 
125        ALLOCATE(pt_context%grid__grid_Ids)
126        ALLOCATE(pt_context%grid__Ids) 
127        ALLOCATE(pt_context%grid_group__grid_group_Ids)
128        ALLOCATE(pt_context%grid_group__Ids) 
129        ALLOCATE(pt_context%grid_definition__grid_definition)
130        ALLOCATE(pt_context%axis__axis_Ids)
131        ALLOCATE(pt_context%axis__Ids) 
132        ALLOCATE(pt_context%axis_group__axis_group_Ids)
133        ALLOCATE(pt_context%axis_group__Ids) 
134        ALLOCATE(pt_context%axis_definition__axis_definition)
135        ALLOCATE(pt_context%dependency__file_enabled)
136        ALLOCATE(pt_context%dependency__field_enabled) 
137        ALLOCATE(pt_context%dependency__field_id)
138        ALLOCATE(pt_context%dependency__sorted_id) 
139        ALLOCATE(pt_context%time_param__initial_timestep)
140        ALLOCATE(pt_context%time_param__initial_date)
141        ALLOCATE(pt_context%time_param__timestep_value) 
142        ALLOCATE(pt_context%time_param__timestep_number)
143
144        CALL context__swap(pt_context)
145       
146        CALL field__init
147        CALL field_group__Init
148        CALL field_definition__Init
149
150        CALL axis__init
151        CALL axis_group__Init
152        CALL axis_definition__Init
153
154        CALL grid__init
155        CALL grid_group__Init
156        CALL grid_definition__Init
157
158        CALL file__init
159        CALL file_group__Init
160        CALL file_definition__Init
161
162      ENDIF
163
164    END SUBROUTINE context__get_new
165
166
167    SUBROUTINE context__create(Id)
168    IMPLICIT NONE
169      CHARACTER(LEN=*),INTENT(IN)     :: Id
170     
171      TYPE(context),POINTER              :: Pt_context
172
173      CALL context__get(Id,Pt_context)
174      IF (.NOT. ASSOCIATED(Pt_context)) CALL context__get_new(Id,Pt_context)
175     
176!      CALL field__init
177!      CALL field_group__init
178!      CALL field_definition__init
179     
180     END SUBROUTINE context__create
181
182     
183    SUBROUTINE context__swap_id(Id)
184    USE mod_field
185      IMPLICIT NONE
186      CHARACTER(LEN=*),INTENT(IN)     :: Id
187      TYPE(context),POINTER       :: Pt_context
188
189      INTEGER :: number
190     
191      CALL context__get(Id,Pt_context)
192      IF (.NOT. ASSOCIATED(Pt_context)) THEN
193!!      error message
194      ENDIF
195     
196      CALL context__swap(pt_context) 
197
198    END SUBROUTINE context__swap_id
199
200    SUBROUTINE context__swap_pt(Pt_context)
201    USE mod_field
202      IMPLICIT NONE
203      TYPE(context),POINTER       :: Pt_context
204
205      CALL field__swap_context(Pt_context%field__field_Ids ,Pt_context%field__Ids)
206      CALL field_group__swap_context(Pt_context%field_group__field_group_ids ,Pt_context%field_group__Ids)
207      CALL field_definition__swap_context(Pt_context%field_definition__field_definition)
208      CALL file__swap_context(Pt_context%file__file_Ids,Pt_context%file__Ids)
209      CALL file_group__swap_context(Pt_context%file_group__file_group_Ids,Pt_context%file_group__Ids)
210      CALL file_definition__swap_context(Pt_context%file_definition__file_definition) 
211      CALL grid__swap_context(pt_context%grid__grid_Ids,pt_context%grid__Ids) 
212      CALL grid_group__swap_context(pt_context%grid_group__grid_group_Ids,pt_context%grid_group__Ids) 
213      CALL grid_definition__swap_context(pt_context%grid_definition__grid_definition)
214      CALL axis__swap_context(pt_context%axis__axis_Ids,pt_context%axis__Ids) 
215      CALL axis_group__swap_context(pt_context%axis_group__axis_group_Ids,pt_context%axis_group__Ids) 
216      CALL axis_definition__swap_context(pt_context%axis_definition__axis_definition)
217      CALL dependency__swap_context(pt_context%dependency__file_enabled,pt_context%dependency__field_enabled,  &
218                                    pt_context%dependency__field_id,pt_context%dependency__sorted_id)
219      CALL time_parameters__swap_context(pt_context%time_param__initial_timestep,pt_context%time_param__initial_date,  &
220                                         pt_context%time_param__timestep_value,pt_context%time_param__timestep_number)
221                                   
222    END SUBROUTINE context__swap_pt
223
224
225END MODULE mod_context
Note: See TracBrowser for help on using the repository browser.