source: XMLIO_SERVER/trunk/src/XMLIO/mod_grid_group.f90 @ 17

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

Correction de bugs pour portage sur Mercure

File size: 4.8 KB
Line 
1MODULE mod_grid_group
2  USE mod_grid
3  USE mod_xmlio_parameters
4
5  IMPLICIT NONE
6
7  TYPE grid_group
8    CHARACTER(LEN=str_len)                    :: id
9    LOGICAL                                   :: has_id
10    TYPE(vector_grid_group), POINTER          :: groups
11    TYPE(vector_grid),POINTER                 :: grids     
12    TYPE(grid), POINTER                       :: default_attribut
13  END TYPE grid_group
14
15  INCLUDE "vector_grid_group_def.inc" 
16
17  TYPE(vector_grid_group),POINTER       :: grid_group_Ids
18  TYPE(sorted_list),POINTER,PRIVATE     :: Ids 
19
20CONTAINS
21
22  INCLUDE "vector_grid_group_contains.inc"
23
24  SUBROUTINE grid_group__init
25  IMPLICIT NONE
26   
27    ALLOCATE(grid_group_Ids)
28    ALLOCATE(Ids)
29   
30    CALL vector_grid_group__new(grid_group_Ids)
31    CALL sorted_list__new(Ids)
32   
33  END SUBROUTINE grid_group__init
34
35  SUBROUTINE grid_group__get(Id,Pt_gg)
36  USE string_function
37  IMPLICIT NONE
38    CHARACTER(LEN=*),INTENT(IN)     :: Id
39    TYPE(grid_group),POINTER        :: Pt_gg
40
41    INTEGER                         :: Pos
42    LOGICAL                         :: success
43   
44    CALL sorted_list__find(Ids,hash(Id),Pos,success)
45    IF (success) THEN
46      Pt_gg=>grid_group_ids%at(Pos)%Pt
47    ELSE
48      Pt_gg=>NULL()
49    ENDIF
50   
51  END SUBROUTINE grid_group__get
52   
53  RECURSIVE SUBROUTINE grid_group__new(Pt_gg,Id)
54  USE string_function
55  IMPLICIT NONE
56    TYPE(grid_group),POINTER                :: Pt_gg
57    CHARACTER(LEN=*),OPTIONAL,INTENT(IN)     :: Id
58   
59    INTEGER :: Pos
60   
61    ALLOCATE(Pt_gg%groups)
62    ALLOCATE(Pt_gg%grids)
63    ALLOCATE(Pt_gg%default_attribut)
64   
65    CALL vector_grid_group__new(Pt_gg%groups)
66    CALL vector_grid__new(Pt_gg%grids)
67    CALL grid__new(Pt_gg%default_attribut)
68    Pt_gg%has_id=.FALSE.
69     
70    IF (PRESENT(Id)) THEN
71      Pt_gg%id=TRIM(Id)
72      Pt_gg%has_id=.TRUE.
73      CALL vector_grid_group__set_new(grid_group_Ids,Pt_gg,Pos)
74      CALL sorted_list__Add(Ids,hash(id),Pos)
75    ENDIF
76
77  END SUBROUTINE grid_group__new
78
79     
80  SUBROUTINE grid_group__get_new_group(Pt_gg,Pt_gg_out,Id)
81  IMPLICIT NONE
82    TYPE(grid_group),POINTER             :: Pt_gg
83    TYPE(grid_group),POINTER             :: Pt_gg_out
84    CHARACTER(LEN=*),OPTIONAL            :: Id
85   
86    CALL vector_grid_group__get_new(Pt_gg%groups,Pt_gg_out)
87    CALL grid_group__new(Pt_gg_out)
88
89    IF (PRESENT(id)) THEN
90      CALL grid_group__new(Pt_gg_out,Id)
91    ELSE
92      CALL grid_group__new(Pt_gg_out)
93    ENDIF
94   
95  END SUBROUTINE grid_group__get_new_group
96
97 
98  SUBROUTINE grid_group__get_new_grid(Pt_gg,Pt_g_out,Id)
99  IMPLICIT NONE
100    TYPE(grid_group),POINTER            :: Pt_gg
101    TYPE(grid),POINTER                  :: Pt_g_out
102    CHARACTER(LEN=*),OPTIONAL      :: Id
103   
104    CALL vector_grid__get_new(Pt_gg%grids,Pt_g_out)
105   
106    IF (PRESENT(id)) THEN
107      CALL grid__new(Pt_g_out,Id)
108    ELSE
109      CALL grid__new(Pt_g_out)
110    ENDIF
111   
112  END SUBROUTINE grid_group__get_new_grid
113 
114 
115  SUBROUTINE grid_group__get_default_attrib(Pt_gg,Pt_g)
116  IMPLICIT NONE
117    TYPE(grid_group),POINTER  :: Pt_gg
118    TYPE(grid),POINTER        :: Pt_g
119   
120    Pt_g=>Pt_gg%default_attribut
121  END SUBROUTINE grid_group__get_default_attrib
122 
123  RECURSIVE SUBROUTINE grid_group__apply_default(Pt_gg,default)
124  IMPLICIT NONE
125    TYPE(grid_group),POINTER      :: Pt_gg
126    TYPE(grid),POINTER,OPTIONAL   :: default
127   
128    INTEGER :: i
129   
130    IF (PRESENT(default)) THEN
131      CALL grid__apply_default(default,Pt_gg%default_attribut,Pt_gg%default_attribut)
132    ENDIF
133     
134    DO i=1,Pt_gg%groups%size
135      CALL grid_group__apply_default(Pt_gg%groups%at(i)%pt,Pt_gg%default_attribut)
136    ENDDO
137   
138    DO i=1,Pt_gg%grids%size
139      CALL grid__apply_default(Pt_gg%default_attribut,Pt_gg%grids%at(i)%pt,Pt_gg%grids%at(i)%pt)
140    ENDDO
141 
142  END SUBROUTINE grid_group__apply_default
143
144  RECURSIVE SUBROUTINE grid_group__Process_domain(Pt_gg)
145  IMPLICIT NONE
146  TYPE(grid_group),POINTER  :: Pt_gg
147    INTEGER :: i
148   
149    DO i=1,pt_gg%groups%size
150      CALL grid_group__process_domain(pt_gg%groups%at(i)%pt)
151    ENDDO
152   
153    DO i=1,pt_gg%grids%size
154      CALL grid__process_domain(pt_gg%grids%at(i)%pt)
155    ENDDO
156   
157  END SUBROUTINE grid_group__Process_domain
158     
159
160  RECURSIVE SUBROUTINE grid_group__print(Pt_gg)
161  IMPLICIT NONE
162    TYPE(grid_group),POINTER  :: Pt_gg
163   
164    INTEGER :: i
165   
166    PRINT *,"--- GRID GROUP ---"
167    IF (pt_gg%has_id) THEN
168      PRINT *,"id  ",TRIM(pt_gg%id)
169    ELSE
170      PRINT *,"id undefined"
171    ENDIF
172   
173    PRINT *,"grid default attribut :"
174    CALL grid__print(Pt_gg%default_attribut)   
175
176    PRINT *,"owned grid groups : ",Pt_gg%groups%size     
177    DO i=1,Pt_gg%groups%size
178      CALL grid_group__print(Pt_gg%groups%at(i)%pt)
179    ENDDO
180
181    PRINT *,"owned grid : ",Pt_gg%grids%size     
182    DO i=1,Pt_gg%grids%size
183      CALL grid__print(Pt_gg%grids%at(i)%pt)
184    ENDDO
185    PRINT *,"------------"
186 
187  END SUBROUTINE grid_group__print
188     
189END MODULE mod_grid_group
Note: See TracBrowser for help on using the repository browser.