source: XMLIO_SERVER/trunk/src/XMLIO/mod_axis.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.1 KB
Line 
1MODULE mod_axis
2
3  USE mod_xmlio_parameters
4  USE mod_sorted_list
5
6 
7  IMPLICIT NONE
8
9  TYPE, PUBLIC :: axis
10    CHARACTER(len=str_len)      :: id
11    LOGICAL                     :: has_id
12    CHARACTER(len=str_len)      :: name
13    LOGICAL                     :: has_name
14    INTEGER                     :: size
15    LOGICAL                     :: has_size
16    CHARACTER(len=str_len)      :: description
17    LOGICAL                     :: has_description
18    CHARACTER(len=str_len)      :: unit
19    LOGICAL                     :: has_unit
20    REAL, DIMENSION(:), POINTER :: values
21    LOGICAL                     :: has_values
22
23  END TYPE axis
24
25  INCLUDE 'vector_axis_def.inc'
26 
27  TYPE(vector_axis),POINTER,SAVE             :: axis_Ids
28  TYPE(sorted_list),POINTER,SAVE,PRIVATE     :: Ids 
29
30CONTAINS
31  INCLUDE 'vector_axis_contains.inc'
32
33  SUBROUTINE axis__init
34  IMPLICIT NONE
35   
36    ALLOCATE(axis_Ids)
37    ALLOCATE(Ids)
38   
39    CALL vector_axis__new(axis_Ids)
40    CALL sorted_list__new(Ids)
41   
42  END SUBROUTINE axis__init
43 
44  SUBROUTINE axis__get(Id,Pt_axis)
45  USE string_function
46  IMPLICIT NONE
47    CHARACTER(LEN=*),INTENT(IN)     :: Id
48    TYPE(axis),POINTER              :: Pt_axis
49
50    INTEGER                         :: Pos
51    LOGICAL                         :: success
52   
53    CALL sorted_list__find(Ids,hash(Id),Pos,success)
54    IF (success) THEN
55      Pt_axis=>axis_ids%at(Pos)%Pt
56    ELSE
57      Pt_axis=>NULL()
58    ENDIF
59   
60  END SUBROUTINE axis__get
61 
62  SUBROUTINE axis__new(pt_axis,Id)
63  USE string_function
64  IMPLICIT NONE
65   TYPE(axis), POINTER           :: pt_axis
66   CHARACTER(LEN=*),OPTIONAL     :: Id
67   INTEGER                       :: Pos
68   
69   pt_axis%has_id         = .FALSE.
70   pt_axis%has_name        = .FALSE.
71   pt_axis%has_size        = .FALSE.
72   pt_axis%has_description = .FALSE.
73   pt_axis%has_unit        = .FALSE.
74   pt_axis%has_values      = .FALSE.
75   
76   IF (PRESENT(Id)) THEN
77     Pt_axis%id=TRIM(ADJUSTL(Id))
78     Pt_axis%has_id=.TRUE.
79     CALL vector_axis__set_new(axis_Ids,Pt_axis,Pos)
80     CALL sorted_list__Add(Ids,hash(id),Pos)
81   ENDIF
82
83 END SUBROUTINE axis__new
84
85  SUBROUTINE axis__set(pt_axis, name, description, unit, a_size, values)
86  IMPLICIT NONE
87    TYPE(axis), POINTER         :: pt_axis
88    CHARACTER(len=*)  ,OPTIONAL :: name
89    CHARACTER(len=*)  ,OPTIONAL :: description
90    CHARACTER(len=*)  ,OPTIONAL :: unit
91    INTEGER           ,OPTIONAL :: a_size
92    REAL, DIMENSION(:),OPTIONAL :: values
93
94    IF (PRESENT(name)) THEN
95        pt_axis%name=TRIM(ADJUSTL(name))
96        pt_axis%has_name = .TRUE.
97    ENDIF
98
99    IF (PRESENT(description)) THEN
100        pt_axis%description=TRIM(ADJUSTL(description))
101        pt_axis%has_description = .TRUE.
102    ENDIF
103 
104    IF (PRESENT(unit)) then
105        pt_axis%unit=TRIM(ADJUSTL(unit))
106        pt_axis%has_unit = .TRUE.
107    ENDIF
108
109    IF (PRESENT(a_size)) then
110        pt_axis%size=a_size
111        pt_axis%has_size = .TRUE.
112    ENDIF
113   
114    IF (PRESENT(values)) then
115        IF (pt_axis%has_values) DEALLOCATE(pt_axis%values) 
116        ALLOCATE(pt_axis%values(size(values)))
117        pt_axis%values(:)=values(:)
118        pt_axis%has_values = .TRUE.
119    ENDIF
120
121  END SUBROUTINE axis__set
122
123  SUBROUTINE axis__print(pt_axis)
124  IMPLICIT NONE
125    TYPE(axis), POINTER         :: pt_axis
126
127    PRINT *,"---- AXIS ----"
128    IF (pt_axis%has_id) THEN
129      PRINT *,"id = ",TRIM(pt_axis%id)
130    ELSE
131      PRINT *,"id undefined"
132    ENDIF
133   
134    IF (pt_axis%has_name) THEN
135      PRINT *,"name = ",TRIM(pt_axis%name)
136    ELSE
137      PRINT *,"name undefined"
138    ENDIF
139   
140    IF (pt_axis%has_description) THEN
141      PRINT *,"description = ",TRIM(pt_axis%description)
142    ELSE
143      PRINT *,"description undefined"
144    ENDIF
145 
146    IF (pt_axis%has_unit) THEN
147      PRINT *,"unit = ",TRIM(pt_axis%unit)
148    ELSE
149      PRINT *,"unit undefined"
150    ENDIF
151
152    IF (pt_axis%has_size) THEN
153      PRINT *,"size = ",pt_axis%size
154    ELSE
155      PRINT *,"size undefined"
156    ENDIF
157
158    IF (pt_axis%has_values) THEN
159      PRINT *,"values = ",pt_axis%values
160    ELSE
161      PRINT *,"values undefined"
162    ENDIF
163
164  END SUBROUTINE axis__print
165
166
167  SUBROUTINE axis__apply_default(pt_axis_default, pt_axis_in, pt_axis_out)
168
169    TYPE(axis), POINTER :: pt_axis_default, pt_axis_in, pt_axis_out
170
171    IF (pt_axis_in%has_name) THEN
172        pt_axis_out%name=pt_axis_in%name
173        pt_axis_out%has_name=.TRUE.
174    ELSE IF ( pt_axis_default%has_name) THEN
175        pt_axis_out%name=pt_axis_default%name
176        pt_axis_out%has_name=.TRUE.
177    ELSE
178        pt_axis_out%has_name=.FALSE.
179    ENDIF
180       
181    IF (pt_axis_in%has_description) THEN
182        pt_axis_out%description=pt_axis_in%description
183        pt_axis_out%has_description=.TRUE.
184    ELSE IF ( pt_axis_default%has_description ) THEN
185        pt_axis_out%description=pt_axis_default%description
186        pt_axis_out%has_description=.TRUE.
187    ELSE
188        pt_axis_out%has_description=.FALSE.
189    ENDIF
190
191    IF (pt_axis_in%has_unit) THEN
192        pt_axis_out%unit=pt_axis_in%unit
193        pt_axis_out%has_unit=.TRUE.
194    ELSE IF ( pt_axis_default%has_unit ) THEN
195        pt_axis_out%unit=pt_axis_default%unit
196        pt_axis_out%has_unit=.TRUE.
197    ELSE
198        pt_axis_out%has_unit=.FALSE.
199    ENDIF
200
201    IF (pt_axis_in%has_size) THEN
202        pt_axis_out%size=pt_axis_in%size
203        pt_axis_out%has_size=.TRUE.
204    ELSE IF ( pt_axis_default%has_size ) THEN
205        pt_axis_out%size=pt_axis_default%size
206        pt_axis_out%has_size=.TRUE.
207    ELSE
208        pt_axis_out%has_size=.FALSE.
209    ENDIF
210
211    IF (pt_axis_in%has_values) THEN
212        pt_axis_out%values(:)=pt_axis_in%values(:)
213        pt_axis_out%has_values=.TRUE.
214    ELSE IF ( pt_axis_default%has_values ) THEN
215        pt_axis_out%values(:)=pt_axis_default%values(:)
216        pt_axis_out%has_values=.TRUE.
217    ELSE
218        pt_axis_out%has_values=.FALSE.
219    ENDIF
220   
221  END SUBROUTINE axis__apply_default
222
223  SUBROUTINE axis__check(pt_axis)
224  USE error_msg
225  IMPLICIT NONE
226    TYPE(axis), POINTER :: pt_axis
227     
228    IF (.NOT. pt_axis%has_name) THEN
229      IF (pt_axis%has_id) THEN
230        pt_axis%name=TRIM(pt_axis%id)
231      ELSE
232        WRITE(message,*) "Axis has no name and no id" 
233        CALL error("mod_axis::axis__check")
234      ENDIF
235    ENDIF
236 
237 END SUBROUTINE axis__Check
238
239END MODULE mod_axis
Note: See TracBrowser for help on using the repository browser.