source: XMLIO_SERVER/trunk/src/XMLIO/mod_field_group.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: 5.9 KB
Line 
1MODULE mod_field_group
2
3  USE mod_field
4  USE mod_xmlio_parameters
5
6  IMPLICIT NONE
7
8  TYPE field_group
9    CHARACTER(LEN=str_len)                    :: id
10    LOGICAL                                   :: has_id
11    TYPE(vector_field_group), POINTER         :: groups
12    TYPE(vector_field),POINTER                :: fields     
13    TYPE(field), POINTER                      :: default_attribut
14  END TYPE field_group
15
16  INCLUDE "vector_field_group_def.inc" 
17
18  TYPE(vector_field_group),POINTER      :: field_group_Ids
19  TYPE(sorted_list),POINTER,PRIVATE     :: Ids 
20
21CONTAINS
22
23  INCLUDE "vector_field_group_contains.inc"
24
25  SUBROUTINE field_group__init
26  IMPLICIT NONE
27   
28    ALLOCATE(field_group_Ids)
29    ALLOCATE(Ids)
30   
31    CALL vector_field_group__new(field_group_Ids)
32    CALL sorted_list__new(Ids)
33   
34  END SUBROUTINE field_group__init
35
36  SUBROUTINE field_group__get(Id,Pt_fg)
37  USE string_function
38  IMPLICIT NONE
39    CHARACTER(LEN=*),INTENT(IN)     :: Id
40    TYPE(field_group),POINTER       :: Pt_fg
41
42    INTEGER                         :: Pos
43    LOGICAL                         :: success
44   
45    CALL sorted_list__find(Ids,hash(Id),Pos,success)
46    IF (success) THEN
47      Pt_fg=>field_group_ids%at(Pos)%Pt
48    ELSE
49      Pt_fg=>NULL()
50    ENDIF
51   
52  END SUBROUTINE field_group__get
53   
54  RECURSIVE SUBROUTINE field_group__new(Pt_fg,Id)
55  USE string_function
56  IMPLICIT NONE
57    TYPE(field_group),POINTER                :: Pt_fg
58    CHARACTER(LEN=*),OPTIONAL,INTENT(IN)     :: Id
59   
60    INTEGER :: Pos
61   
62    ALLOCATE(Pt_fg%groups)
63    ALLOCATE(Pt_fg%fields)
64    ALLOCATE(Pt_fg%default_attribut)
65   
66    CALL vector_field_group__new(Pt_fg%groups)
67    CALL vector_field__new(Pt_fg%fields)
68    CALL field__new(Pt_fg%default_attribut)
69    Pt_fg%has_id=.FALSE.
70     
71    IF (PRESENT(Id)) THEN
72      Pt_fg%id=TRIM(Id)
73      Pt_fg%has_id=.TRUE.
74      CALL vector_field_group__set_new(field_group_Ids,Pt_fg,Pos)
75      CALL sorted_list__Add(Ids,hash(id),Pos)
76    ENDIF
77
78  END SUBROUTINE field_group__new
79
80     
81  SUBROUTINE field_group__get_new_group(Pt_fg,Pt_fg_out,Id)
82  IMPLICIT NONE
83    TYPE(field_group),POINTER            :: Pt_fg
84    TYPE(field_group),POINTER            :: Pt_fg_out
85    CHARACTER(LEN=*),OPTIONAL      :: Id
86   
87    CALL vector_field_group__get_new(Pt_fg%groups,Pt_fg_out)
88 
89    IF (PRESENT(id)) THEN
90      CALL field_group__new(Pt_fg_out,Id)
91    ELSE
92      CALL field_group__new(Pt_fg_out)
93    ENDIF
94   
95  END SUBROUTINE field_group__get_new_group
96
97 
98  SUBROUTINE field_group__get_new_field(Pt_fg,Pt_f_out,Id)
99  IMPLICIT NONE
100    TYPE(field_group),POINTER            :: Pt_fg
101    TYPE(field),POINTER                  :: Pt_f_out
102    CHARACTER(LEN=*),OPTIONAL      :: Id
103   
104    CALL vector_field__get_new(Pt_fg%fields,Pt_f_out)
105   
106    IF (PRESENT(id)) THEN
107      CALL field__new(Pt_f_out,Id)
108    ELSE
109      CALL field__new(Pt_f_out)
110    ENDIF
111   
112  END SUBROUTINE field_group__get_new_field
113 
114 
115  SUBROUTINE field_group__get_default_attribut(Pt_fg,Pt_f)
116  IMPLICIT NONE
117    TYPE(field_group),POINTER  :: Pt_fg
118    TYPE(field),POINTER        :: Pt_f
119   
120    Pt_f=>Pt_fg%default_attribut
121  END SUBROUTINE field_group__get_default_attribut
122
123 
124  RECURSIVE SUBROUTINE field_group__apply_default(Pt_fg,default)
125  IMPLICIT NONE
126    TYPE(field_group),POINTER           :: Pt_fg
127    TYPE(field),POINTER,OPTIONAL        :: default
128   
129    INTEGER :: i
130   
131    IF (PRESENT(default)) THEN
132      CALL field__apply_default(default,Pt_fg%default_attribut,Pt_fg%default_attribut)
133    ENDIF
134     
135    DO i=1,Pt_fg%groups%size
136      CALL field_group__apply_default(Pt_fg%groups%at(i)%pt,Pt_fg%default_attribut)
137    ENDDO
138   
139    DO i=1,Pt_fg%fields%size
140      CALL field__apply_default(Pt_fg%default_attribut,Pt_fg%fields%at(i)%pt,Pt_fg%fields%at(i)%pt)
141    ENDDO
142 
143  END SUBROUTINE field_group__apply_default
144 
145  SUBROUTINE field_group__solve_ref(pt_fg)
146  IMPLICIT NONE
147    TYPE(field_group),POINTER  :: Pt_fg
148
149    CALL field_group__solve_field_ref(Pt_fg)
150    CALL field_group__solve_axis_ref(Pt_fg)
151    CALL field_group__solve_grid_ref(Pt_fg)
152
153  END SUBROUTINE  field_group__solve_ref
154     
155  RECURSIVE SUBROUTINE field_group__solve_field_ref(Pt_fg)
156  IMPLICIT NONE
157    TYPE(field_group),POINTER  :: Pt_fg
158   
159    INTEGER :: i
160
161    DO i=1,Pt_fg%groups%size
162      CALL field_group__solve_field_ref(Pt_fg%groups%at(i)%pt)
163    ENDDO
164   
165    DO i=1,Pt_fg%fields%size
166      CALL field__solve_field_ref(Pt_fg%fields%at(i)%pt)
167    ENDDO
168 
169  END SUBROUTINE field_group__solve_field_ref
170
171  RECURSIVE SUBROUTINE field_group__solve_axis_ref(Pt_fg)
172  IMPLICIT NONE
173    TYPE(field_group),POINTER  :: Pt_fg
174   
175    INTEGER :: i
176
177    DO i=1,Pt_fg%groups%size
178      CALL field_group__solve_axis_ref(Pt_fg%groups%at(i)%pt)
179    ENDDO
180   
181    DO i=1,Pt_fg%fields%size
182      CALL field__solve_axis_ref(Pt_fg%fields%at(i)%pt)
183    ENDDO
184 
185  END SUBROUTINE field_group__solve_axis_ref
186
187  RECURSIVE SUBROUTINE field_group__solve_grid_ref(Pt_fg)
188  IMPLICIT NONE
189    TYPE(field_group),POINTER  :: Pt_fg
190     
191    INTEGER :: i
192 
193    DO i=1,Pt_fg%groups%size
194      CALL field_group__solve_grid_ref(Pt_fg%groups%at(i)%pt)
195    ENDDO
196       
197    DO i=1,Pt_fg%fields%size
198      CALL field__solve_grid_ref(Pt_fg%fields%at(i)%pt)
199    ENDDO
200 
201  END SUBROUTINE field_group__solve_grid_ref
202 
203  RECURSIVE SUBROUTINE field_group__print(Pt_fg)
204  IMPLICIT NONE
205    TYPE(field_group),POINTER  :: Pt_fg
206   
207    INTEGER :: i
208   
209    PRINT *,"--- FIELD GROUP ---"
210    IF (Pt_fg%has_id) THEN
211      PRINT *,"id :",TRIM(Pt_fg%id)
212    ELSE
213      PRINT *,"id undefined"
214    ENDIF
215   
216    PRINT *,"field default attribut :"
217    CALL field__print(Pt_fg%default_attribut)   
218
219    PRINT *,"owned field groups :",Pt_fg%groups%size     
220    DO i=1,Pt_fg%groups%size
221      CALL field_group__print(Pt_fg%groups%at(i)%pt)
222    ENDDO
223
224    PRINT *,"owned field :",Pt_fg%fields%size     
225    DO i=1,Pt_fg%fields%size
226      CALL field__print(Pt_fg%fields%at(i)%pt)
227    ENDDO
228   
229    PRINT *,"------------"
230   
231  END SUBROUTINE field_group__print     
232
233END MODULE mod_field_group
Note: See TracBrowser for help on using the repository browser.