source: XIOS/dev/dev_olga/src/interface/fortran/ifield.F90 @ 1158

Last change on this file since 1158 was 1158, checked in by oabramkina, 7 years ago

Two server levels: merging with trunk r1137.
There are bugs.

  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
File size: 5.8 KB
Line 
1#include "xios_fortran_prefix.hpp"
2
3MODULE IFIELD
4   USE, INTRINSIC :: ISO_C_BINDING
5   USE FIELD_INTERFACE
6   USE FIELDGROUP_INTERFACE
7!   USE IFIELD_ATTR
8!   USE IFIELDGROUP_ATTR
9   USE IDURATION
10   USE IDOMAIN
11   USE IAXIS
12   USE ISCALAR
13   
14   TYPE txios(field)
15      INTEGER(kind = C_INTPTR_T) :: daddr
16   END TYPE txios(field)
17   
18   TYPE txios(fieldgroup)
19      INTEGER(kind = C_INTPTR_T) :: daddr
20   END TYPE txios(fieldgroup)
21
22   CONTAINS ! Fonctions disponibles pour les utilisateurs.
23
24   SUBROUTINE xios(get_field_handle)(idt, ret)
25      IMPLICIT NONE
26      CHARACTER(len = *), INTENT(IN)   :: idt     
27      TYPE(txios(field)), INTENT(OUT) :: ret
28      CALL cxios_field_handle_create(ret%daddr, idt, len(idt))           
29   END SUBROUTINE xios(get_field_handle)
30   
31   SUBROUTINE xios(get_fieldgroup_handle)(idt,ret)
32      IMPLICIT NONE
33      CHARACTER(len = *)     , INTENT(IN) :: idt     
34      TYPE(txios(fieldgroup)), INTENT(OUT):: ret
35
36      CALL cxios_fieldgroup_handle_create(ret%daddr, idt, len(idt))           
37
38   END SUBROUTINE xios(get_fieldgroup_handle)
39   
40   SUBROUTINE xios(field_id_get_domain_handle)(field_id, ret, idx)
41      IMPLICIT NONE
42      CHARACTER(len  = *)     , INTENT(IN)  :: field_id
43      INTEGER, OPTIONAL       , INTENT(IN)  :: idx
44      TYPE(txios(domain)), INTENT(OUT) :: ret
45      TYPE(txios(field))      :: field_hdl
46      INTEGER                 :: index
47      index = 0
48      IF (PRESENT(idx)) THEN
49        index = idx
50      ENDIF
51
52      CALL xios(get_field_handle)(field_id,field_hdl)
53      CALL xios(field_get_domain_handle(field_hdl, ret, index))
54   END SUBROUTINE xios(field_id_get_domain_handle)
55
56   SUBROUTINE xios(field_get_domain_handle)(field_hdl, ret, idx)
57      IMPLICIT NONE
58      TYPE(txios(field))      , INTENT(IN)  :: field_hdl
59      INTEGER, OPTIONAL       , INTENT(IN)  :: idx
60      TYPE(txios(domain)), INTENT(OUT) :: ret
61      INTEGER :: index
62      index = 0
63      IF (PRESENT(idx)) THEN
64        index = idx
65      ENDIF
66      CALL cxios_field_get_domain_handle(ret%daddr, field_hdl%daddr, index)
67   END SUBROUTINE xios(field_get_domain_handle)
68
69   SUBROUTINE xios(field_id_get_axis_handle)(field_id, ret, idx)
70      IMPLICIT NONE
71      CHARACTER(len  = *)   , INTENT(IN)  :: field_id
72      INTEGER, OPTIONAL     , INTENT(IN)  :: idx
73      TYPE(txios(axis)), INTENT(OUT) :: ret
74      TYPE(txios(field))     :: field_hdl
75      INTEGER                :: index
76      index = 0
77      IF (PRESENT(idx)) THEN
78        index = idx
79      ENDIF
80      CALL xios(get_field_handle)(field_id,field_hdl)
81      CALL xios(field_get_axis_handle(field_hdl, ret, index))
82   END SUBROUTINE xios(field_id_get_axis_handle)
83
84   SUBROUTINE xios(field_get_axis_handle)(field_hdl, ret, idx)
85      IMPLICIT NONE
86      TYPE(txios(field))    , INTENT(IN)  :: field_hdl
87      INTEGER, OPTIONAL     , INTENT(IN)  :: idx
88      TYPE(txios(axis)), INTENT(OUT) :: ret
89      INTEGER :: index
90      index = 0
91      IF (PRESENT(idx)) THEN
92        index = idx
93      ENDIF
94      CALL cxios_field_get_axis_handle(ret%daddr, field_hdl%daddr, index)
95   END SUBROUTINE xios(field_get_axis_handle)
96
97   SUBROUTINE xios(field_id_get_scalar_handle)(field_id, ret, idx)
98      IMPLICIT NONE
99      CHARACTER(len  = *)     , INTENT(IN)  :: field_id
100      INTEGER, OPTIONAL       , INTENT(IN)  :: idx
101      TYPE(txios(scalar)), INTENT(OUT) :: ret
102      TYPE(txios(field))     :: field_hdl
103      INTEGER                :: index
104      index = 0
105      IF (PRESENT(idx)) THEN
106        index = idx
107      ENDIF
108      CALL xios(get_field_handle)(field_id,field_hdl)
109      CALL xios(field_get_scalar_handle(field_hdl, ret, index))
110   END SUBROUTINE xios(field_id_get_scalar_handle)
111
112   SUBROUTINE xios(field_get_scalar_handle)(field_hdl, ret, idx)
113      IMPLICIT NONE
114      TYPE(txios(field))      , INTENT(IN)  :: field_hdl
115      INTEGER, OPTIONAL       , INTENT(IN)  :: idx
116      TYPE(txios(scalar)), INTENT(OUT) :: ret
117      INTEGER :: index
118      index = 0
119      IF (PRESENT(idx)) THEN
120        index = idx
121      ENDIF
122      CALL cxios_field_get_axis_handle(ret%daddr, field_hdl%daddr, index)
123   END SUBROUTINE xios(field_get_scalar_handle)
124
125   LOGICAL FUNCTION xios(is_valid_field)(idt)
126      IMPLICIT NONE
127      CHARACTER(len  = *)    , INTENT(IN) :: idt
128      LOGICAL  (kind = 1)                 :: val
129     
130      CALL cxios_field_valid_id(val, idt, len(idt));
131      xios(is_valid_field) = val
132
133   END FUNCTION  xios(is_valid_field)
134
135   LOGICAL FUNCTION xios(is_valid_fieldgroup)(idt)
136      IMPLICIT NONE
137      CHARACTER(len  = *)    , INTENT(IN) :: idt
138      LOGICAL  (kind = 1)                 :: val
139      CALL cxios_fieldgroup_valid_id(val, idt, len(idt));
140      xios(is_valid_fieldgroup) = val
141
142   END FUNCTION  xios(is_valid_fieldgroup)
143   
144  LOGICAL FUNCTION xios(field_is_active_id)(field_id, at_current_timestep_arg)
145      IMPLICIT NONE
146      CHARACTER(len  = *) , INTENT(IN) :: field_id
147      LOGICAL, OPTIONAL   , INTENT(IN) :: at_current_timestep_arg
148      TYPE(txios(field))               :: field_hdl
149
150      CALL xios(get_field_handle)(field_id,field_hdl)
151      xios(field_is_active_id) = xios(field_is_active_hdl)(field_hdl, at_current_timestep_arg)
152
153   END FUNCTION xios(field_is_active_id)
154
155   LOGICAL FUNCTION xios(field_is_active_hdl)(field_hdl, at_current_timestep_arg)
156      IMPLICIT NONE
157      TYPE(txios(field)) , INTENT(IN) :: field_hdl
158      LOGICAL, OPTIONAL  , INTENT(IN) :: at_current_timestep_arg
159      LOGICAL(kind = C_BOOL)          :: at_current_timestep
160      LOGICAL(kind = C_BOOL)          :: ret
161
162      IF (PRESENT(at_current_timestep_arg)) THEN
163         at_current_timestep = at_current_timestep_arg
164      ELSE
165         at_current_timestep = .FALSE.
166      ENDIF
167
168      CALL cxios_field_is_active(field_hdl%daddr, at_current_timestep, ret);
169      xios(field_is_active_hdl) = ret
170     
171   END FUNCTION xios(field_is_active_hdl)
172 
173END MODULE IFIELD
Note: See TracBrowser for help on using the repository browser.