source: XMLIO_SERVER/trunk/src/XMLIO/mod_axis_group.f90 @ 26

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

Mise à jour importante :

  • ajout de la grille type LMDZ
  • ajout des context
  • ajout de namelist pour parametrer l'utilisation du server : avec/sans MPI, en utlisant ou pas OASIS
File size: 5.0 KB
Line 
1MODULE mod_axis_group
2  USE mod_axis
3  USE mod_xmlio_parameters
4
5  IMPLICIT NONE
6
7  TYPE axis_group
8    CHARACTER(LEN=str_len)                    :: id
9    LOGICAL                                   :: has_id
10    TYPE(vector_axis_group), POINTER          :: groups
11    TYPE(vector_axis),POINTER                 :: axis     
12    TYPE(axis), POINTER                       :: default_attribut
13  END TYPE axis_group
14
15  INCLUDE "vector_axis_group_def.inc" 
16
17  TYPE(vector_axis_group),POINTER       :: axis_group_Ids
18  TYPE(sorted_list),POINTER,PRIVATE     :: Ids 
19
20CONTAINS
21
22  INCLUDE "vector_axis_group_contains.inc"
23
24  SUBROUTINE axis_group__swap_context(saved_axis_group_Ids,saved_ids)
25  IMPLICIT NONE
26  TYPE(vector_axis_group),POINTER       :: saved_axis_group_Ids
27  TYPE(sorted_list),POINTER             :: saved_Ids 
28   
29   axis_group_ids=>saved_axis_group_ids
30   ids=>saved_ids
31   
32  END SUBROUTINE axis_group__swap_context
33
34  SUBROUTINE axis_group__init
35  IMPLICIT NONE
36   
37    CALL vector_axis_group__new(axis_group_Ids)
38    CALL sorted_list__new(Ids)
39   
40  END SUBROUTINE axis_group__init
41
42  SUBROUTINE axis_group__get(Id,Pt_ag)
43  USE string_function
44  IMPLICIT NONE
45    CHARACTER(LEN=*),INTENT(IN)     :: Id
46    TYPE(axis_group),POINTER        :: Pt_ag
47
48    INTEGER                         :: Pos
49    LOGICAL                         :: success
50   
51    CALL sorted_list__find(Ids,hash(Id),Pos,success)
52    IF (success) THEN
53      Pt_ag=>axis_group_ids%at(Pos)%Pt
54    ELSE
55      Pt_ag=>NULL()
56    ENDIF
57   
58  END SUBROUTINE axis_group__get
59   
60  RECURSIVE SUBROUTINE axis_group__new(Pt_ag,Id)
61  USE string_function
62  IMPLICIT NONE
63    TYPE(axis_group),POINTER                :: Pt_ag
64    CHARACTER(LEN=*),OPTIONAL,INTENT(IN)     :: Id
65   
66    INTEGER :: Pos
67   
68    ALLOCATE(Pt_ag%groups)
69    ALLOCATE(Pt_ag%axis)
70    ALLOCATE(Pt_ag%default_attribut)
71   
72    CALL vector_axis_group__new(Pt_ag%groups)
73    CALL vector_axis__new(Pt_ag%axis)
74    CALL axis__new(Pt_ag%default_attribut)
75    Pt_ag%has_id=.FALSE.
76     
77    IF (PRESENT(Id)) THEN
78      Pt_ag%id=TRIM(Id)
79      Pt_ag%has_id=.TRUE.
80      CALL vector_axis_group__set_new(axis_group_Ids,Pt_ag,Pos)
81      CALL sorted_list__Add(Ids,hash(id),Pos)
82    ENDIF
83
84  END SUBROUTINE axis_group__new
85
86     
87  SUBROUTINE axis_group__get_new_group(Pt_ag,Pt_ag_out,Id)
88  IMPLICIT NONE
89    TYPE(axis_group),POINTER             :: Pt_ag
90    TYPE(axis_group),POINTER             :: Pt_ag_out
91    CHARACTER(LEN=*),OPTIONAL      :: Id
92   
93    CALL vector_axis_group__get_new(Pt_ag%groups,Pt_ag_out)
94    CALL axis_group__new(Pt_ag_out)
95
96    IF (PRESENT(id)) THEN
97      CALL axis_group__new(Pt_ag_out,Id)
98    ELSE
99      CALL axis_group__new(Pt_ag_out)
100    ENDIF
101   
102  END SUBROUTINE axis_group__get_new_group
103
104 
105  SUBROUTINE axis_group__get_new_axis(Pt_ag,Pt_a_out,Id)
106  IMPLICIT NONE
107    TYPE(axis_group),POINTER            :: Pt_ag
108    TYPE(axis),POINTER                  :: Pt_a_out
109    CHARACTER(LEN=*),OPTIONAL      :: Id
110   
111    CALL vector_axis__get_new(Pt_ag%axis,Pt_a_out)
112   
113    IF (PRESENT(id)) THEN
114      CALL axis__new(Pt_a_out,Id)
115    ELSE
116      CALL axis__new(Pt_a_out)
117    ENDIF
118   
119  END SUBROUTINE axis_group__get_new_axis
120 
121 
122  SUBROUTINE axis_group__get_default_attrib(Pt_ag,Pt_a)
123  IMPLICIT NONE
124    TYPE(axis_group),POINTER  :: Pt_ag
125    TYPE(axis),POINTER        :: Pt_a
126   
127    Pt_a=>Pt_ag%default_attribut
128  END SUBROUTINE axis_group__get_default_attrib
129 
130  RECURSIVE SUBROUTINE axis_group__apply_default(Pt_ag,default)
131  IMPLICIT NONE
132    TYPE(axis_group),POINTER           :: Pt_ag
133    TYPE(axis),POINTER,OPTIONAL        :: default
134    INTEGER :: i
135   
136    IF (PRESENT(default)) THEN
137      CALL axis__apply_default(default,Pt_ag%default_attribut,Pt_ag%default_attribut)
138    ENDIF
139     
140    DO i=1,Pt_ag%groups%size
141      CALL axis_group__apply_default(Pt_ag%groups%at(i)%pt,Pt_ag%default_attribut)
142    ENDDO
143   
144    DO i=1,Pt_ag%axis%size
145      CALL axis__apply_default(Pt_ag%default_attribut,Pt_ag%axis%at(i)%pt,Pt_ag%axis%at(i)%pt)
146    ENDDO
147 
148  END SUBROUTINE axis_group__apply_default
149
150  RECURSIVE SUBROUTINE axis_group__print(Pt_ag)
151  IMPLICIT NONE
152    TYPE(axis_group),POINTER  :: Pt_ag
153   
154    INTEGER :: i
155   
156    PRINT *,"--- AXIS GROUP ---"
157    IF (pt_ag%has_id) THEN
158      PRINT *,"id = ",TRIM(pt_ag%id)
159    ELSE
160      PRINT *,"id undefined"
161    ENDIF
162   
163    PRINT *,"axis default attribut :"
164    CALL axis__print(Pt_ag%default_attribut)   
165
166    PRINT *,"owned axis groups :",Pt_ag%groups%size     
167    DO i=1,Pt_ag%groups%size
168      CALL axis_group__print(Pt_ag%groups%at(i)%pt)
169    ENDDO
170
171    PRINT *,"owned axis :",Pt_ag%axis%size     
172    DO i=1,Pt_ag%axis%size
173      CALL axis__print(Pt_ag%axis%at(i)%pt)
174    ENDDO
175    PRINT *,"------------"
176   
177  END SUBROUTINE axis_group__print
178
179  RECURSIVE SUBROUTINE axis_group__Check(Pt_ag)
180  IMPLICIT NONE
181 
182    TYPE(axis_group),POINTER  :: Pt_ag
183    INTEGER :: i
184   
185    DO i=1,Pt_ag%groups%size
186      CALL axis_group__check(pt_ag%groups%at(i)%pt)
187    ENDDO
188
189    DO i=1,Pt_ag%axis%size
190      CALL axis__check(pt_ag%axis%at(i)%pt)
191    ENDDO
192 
193  END SUBROUTINE axis_group__check     
194   
195END MODULE mod_axis_group
196
Note: See TracBrowser for help on using the repository browser.