New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
mod_axis_group.f90 in branches/nemo_v3_3_beta/NEMOGCM/EXTERNAL/XMLIO_SERVER/src/XMLIO – NEMO

source: branches/nemo_v3_3_beta/NEMOGCM/EXTERNAL/XMLIO_SERVER/src/XMLIO/mod_axis_group.f90 @ 2281

Last change on this file since 2281 was 2281, checked in by smasson, 14 years ago

set proper svn properties to all files...

  • Property svn:keywords set to Id
File size: 6.3 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
20  INTERFACE axis_group__set_attribut
21    MODULE PROCEDURE axis_group__set_attribut_id,axis_group__set_attribut_pt
22  END INTERFACE
23
24CONTAINS
25
26  INCLUDE "vector_axis_group_contains.inc"
27
28  SUBROUTINE axis_group__swap_context(saved_axis_group_Ids,saved_ids)
29  IMPLICIT NONE
30  TYPE(vector_axis_group),POINTER       :: saved_axis_group_Ids
31  TYPE(sorted_list),POINTER             :: saved_Ids 
32   
33   axis_group_ids=>saved_axis_group_ids
34   ids=>saved_ids
35   
36  END SUBROUTINE axis_group__swap_context
37
38  SUBROUTINE axis_group__init
39  IMPLICIT NONE
40   
41    CALL vector_axis_group__new(axis_group_Ids)
42    CALL sorted_list__new(Ids)
43   
44  END SUBROUTINE axis_group__init
45
46  SUBROUTINE axis_group__get(Id,Pt_ag)
47  USE string_function
48  IMPLICIT NONE
49    CHARACTER(LEN=*),INTENT(IN)     :: Id
50    TYPE(axis_group),POINTER        :: Pt_ag
51
52    INTEGER                         :: Pos
53    LOGICAL                         :: success
54   
55    CALL sorted_list__find(Ids,hash(Id),Pos,success)
56    IF (success) THEN
57      Pt_ag=>axis_group_ids%at(Pos)%Pt
58    ELSE
59      Pt_ag=>NULL()
60    ENDIF
61   
62  END SUBROUTINE axis_group__get
63
64
65  SUBROUTINE axis_group__set_attribut_id(id,attrib,Ok)
66  USE mod_attribut
67  USE error_msg
68  IMPLICIT NONE
69    CHARACTER(LEN=*),INTENT(IN) :: id
70    TYPE(attribut),INTENT(IN) :: attrib
71    LOGICAL,OPTIONAL,INTENT(out)  :: Ok
72   
73    TYPE(axis_group),POINTER             :: Pt_ag
74    INTEGER                         :: Pos
75    LOGICAL                         :: success
76   
77    CALL sorted_list__find(Ids,hash(Id),Pos,success)
78    IF (success) THEN
79      Pt_ag=>axis_group_ids%at(Pos)%Pt
80      CALL axis_group__set_attribut(Pt_ag,attrib)
81      IF (PRESENT(OK)) ok=.TRUE.
82    ELSE
83      IF (.NOT.PRESENT(OK)) THEN
84        WRITE(message,*) 'axis group id :',id,'is undefined'
85        CALL error('mod_axis_group::axis_group__set_attribut')
86      ELSE
87        OK=.FALSE.
88      ENDIF
89    ENDIF
90   
91  END SUBROUTINE axis_group__set_attribut_id
92 
93  SUBROUTINE axis_group__set_attribut_pt(pt_ag,attrib)
94  USE mod_attribut
95  USE mod_object
96  IMPLICIT NONE
97    TYPE(axis_group),POINTER :: Pt_ag
98    TYPE(attribut),INTENT(IN) :: attrib
99     
100    IF (attrib%object==axis_object) THEN
101      CALL axis__set_attribut(pt_ag%default_attribut,attrib)
102    ENDIF
103   
104  END SUBROUTINE axis_group__set_attribut_pt
105     
106  RECURSIVE SUBROUTINE axis_group__new(Pt_ag,Id)
107  USE string_function
108  IMPLICIT NONE
109    TYPE(axis_group),POINTER                :: Pt_ag
110    CHARACTER(LEN=*),OPTIONAL,INTENT(IN)     :: Id
111   
112    INTEGER :: Pos
113   
114    ALLOCATE(Pt_ag%groups)
115    ALLOCATE(Pt_ag%axis)
116    ALLOCATE(Pt_ag%default_attribut)
117   
118    CALL vector_axis_group__new(Pt_ag%groups)
119    CALL vector_axis__new(Pt_ag%axis)
120    CALL axis__new(Pt_ag%default_attribut)
121    Pt_ag%has_id=.FALSE.
122     
123    IF (PRESENT(Id)) THEN
124      Pt_ag%id=TRIM(Id)
125      Pt_ag%has_id=.TRUE.
126      CALL vector_axis_group__set_new(axis_group_Ids,Pt_ag,Pos)
127      CALL sorted_list__Add(Ids,hash(id),Pos)
128    ENDIF
129
130  END SUBROUTINE axis_group__new
131
132     
133  SUBROUTINE axis_group__get_new_group(Pt_ag,Pt_ag_out,Id)
134  IMPLICIT NONE
135    TYPE(axis_group),POINTER             :: Pt_ag
136    TYPE(axis_group),POINTER             :: Pt_ag_out
137    CHARACTER(LEN=*),OPTIONAL      :: Id
138   
139    CALL vector_axis_group__get_new(Pt_ag%groups,Pt_ag_out)
140    CALL axis_group__new(Pt_ag_out)
141
142    IF (PRESENT(id)) THEN
143      CALL axis_group__new(Pt_ag_out,Id)
144    ELSE
145      CALL axis_group__new(Pt_ag_out)
146    ENDIF
147   
148  END SUBROUTINE axis_group__get_new_group
149
150 
151  SUBROUTINE axis_group__get_new_axis(Pt_ag,Pt_a_out,Id)
152  IMPLICIT NONE
153    TYPE(axis_group),POINTER            :: Pt_ag
154    TYPE(axis),POINTER                  :: Pt_a_out
155    CHARACTER(LEN=*),OPTIONAL      :: Id
156   
157    CALL vector_axis__get_new(Pt_ag%axis,Pt_a_out)
158   
159    IF (PRESENT(id)) THEN
160      CALL axis__new(Pt_a_out,Id)
161    ELSE
162      CALL axis__new(Pt_a_out)
163    ENDIF
164   
165  END SUBROUTINE axis_group__get_new_axis
166 
167 
168  SUBROUTINE axis_group__get_default_attrib(Pt_ag,Pt_a)
169  IMPLICIT NONE
170    TYPE(axis_group),POINTER  :: Pt_ag
171    TYPE(axis),POINTER        :: Pt_a
172   
173    Pt_a=>Pt_ag%default_attribut
174  END SUBROUTINE axis_group__get_default_attrib
175 
176  RECURSIVE SUBROUTINE axis_group__apply_default(Pt_ag,default)
177  IMPLICIT NONE
178    TYPE(axis_group),POINTER           :: Pt_ag
179    TYPE(axis),POINTER,OPTIONAL        :: default
180    INTEGER :: i
181   
182    IF (PRESENT(default)) THEN
183      CALL axis__apply_default(default,Pt_ag%default_attribut,Pt_ag%default_attribut)
184    ENDIF
185     
186    DO i=1,Pt_ag%groups%size
187      CALL axis_group__apply_default(Pt_ag%groups%at(i)%pt,Pt_ag%default_attribut)
188    ENDDO
189   
190    DO i=1,Pt_ag%axis%size
191      CALL axis__apply_default(Pt_ag%default_attribut,Pt_ag%axis%at(i)%pt,Pt_ag%axis%at(i)%pt)
192    ENDDO
193 
194  END SUBROUTINE axis_group__apply_default
195
196  RECURSIVE SUBROUTINE axis_group__print(Pt_ag)
197  IMPLICIT NONE
198    TYPE(axis_group),POINTER  :: Pt_ag
199   
200    INTEGER :: i
201   
202    PRINT *,"--- AXIS GROUP ---"
203    IF (pt_ag%has_id) THEN
204      PRINT *,"id = ",TRIM(pt_ag%id)
205    ELSE
206      PRINT *,"id undefined"
207    ENDIF
208   
209    PRINT *,"axis default attribut :"
210    CALL axis__print(Pt_ag%default_attribut)   
211
212    PRINT *,"owned axis groups :",Pt_ag%groups%size     
213    DO i=1,Pt_ag%groups%size
214      CALL axis_group__print(Pt_ag%groups%at(i)%pt)
215    ENDDO
216
217    PRINT *,"owned axis :",Pt_ag%axis%size     
218    DO i=1,Pt_ag%axis%size
219      CALL axis__print(Pt_ag%axis%at(i)%pt)
220    ENDDO
221    PRINT *,"------------"
222   
223  END SUBROUTINE axis_group__print
224
225  RECURSIVE SUBROUTINE axis_group__Check(Pt_ag)
226  IMPLICIT NONE
227 
228    TYPE(axis_group),POINTER  :: Pt_ag
229    INTEGER :: i
230   
231    DO i=1,Pt_ag%groups%size
232      CALL axis_group__check(pt_ag%groups%at(i)%pt)
233    ENDDO
234
235    DO i=1,Pt_ag%axis%size
236      CALL axis__check(pt_ag%axis%at(i)%pt)
237    ENDDO
238 
239  END SUBROUTINE axis_group__check     
240   
241END MODULE mod_axis_group
242
Note: See TracBrowser for help on using the repository browser.