source: XIOS/trunk/src/interface/fortran/oasis_interface.F90 @ 475

Last change on this file since 475 was 475, checked in by aclsce, 7 years ago

Modified to use Oasis-MCT coupler in coupled mode.

File size: 3.3 KB
Line 
1SUBROUTINE fxios_oasis_init(server_id,str_len) BIND(C,NAME="fxios_oasis_init")
2  USE, INTRINSIC :: ISO_C_BINDING
3#ifdef USE_OASIS
4  USE mod_prism_proto
5#endif
6#ifdef USE_OMCT
7  USE mod_prism
8#endif
9    CHARACTER(kind = C_CHAR),DIMENSION(*) :: server_id
10    INTEGER(kind = C_INT),VALUE   :: str_len
11   
12    INTEGER                :: comp_id
13    CHARACTER(len=str_len) :: oasis_server_id
14    INTEGER                :: ierr
15    INTEGER :: i
16   
17    DO i=1,str_len
18      oasis_server_id(i:i)=server_id(i)
19    ENDDO
20
21#if defined USE_OASIS || defined USE_OMCT
22     CALL prism_init_comp_proto (comp_id, oasis_server_id, ierr)
23#endif
24    PRINT *,"---> prism_init",oasis_server_id,ierr
25
26END SUBROUTINE fxios_oasis_init
27
28SUBROUTINE fxios_oasis_enddef() BIND(C,NAME="fxios_oasis_enddef")
29  USE, INTRINSIC :: ISO_C_BINDING
30#ifdef USE_OMCT
31  USE mod_prism
32#endif
33  IMPLICIT NONE
34  INTEGER :: ierr
35#ifdef USE_OMCT
36     CALL prism_enddef_proto(ierr)
37#endif
38
39END SUBROUTINE fxios_oasis_enddef
40
41SUBROUTINE fxios_oasis_finalize() BIND(C,NAME="fxios_oasis_finalize")
42  USE, INTRINSIC :: ISO_C_BINDING
43#ifdef USE_OASIS
44  USE mod_prism_proto
45#endif
46#ifdef USE_OMCT
47  USE mod_prism
48#endif
49  IMPLICIT NONE
50  INTEGER :: ierr
51 
52#if defined USE_OASIS || defined USE_OMCT
53    CALL prism_terminate_proto(ierr)
54#endif
55   
56END SUBROUTINE fxios_oasis_finalize
57
58
59SUBROUTINE fxios_oasis_get_localcomm(f_comm) BIND(C,NAME="fxios_oasis_get_localcomm")
60  USE, INTRINSIC :: ISO_C_BINDING
61#ifdef USE_OASIS
62  USE mod_prism_get_localcomm_proto 
63#endif
64#ifdef USE_OMCT
65  USE mod_prism
66#endif
67  IMPLICIT NONE
68  INTEGER(kind=C_INT) :: f_comm
69 
70  INTEGER :: comm
71  INTEGER :: ierr
72   
73#if defined USE_OASIS || defined USE_OMCT
74    CALL prism_get_localcomm_proto(comm,ierr)
75#endif
76    f_comm=comm
77
78END SUBROUTINE fxios_oasis_get_localcomm
79
80
81
82
83SUBROUTINE fxios_oasis_get_intracomm(f_comm_client_server,client_id,str_len) BIND(C,NAME="fxios_oasis_get_intracomm")
84  USE, INTRINSIC :: ISO_C_BINDING
85#ifdef USE_OASIS
86  USE mod_prism_get_comm 
87#endif
88#ifdef USE_OMCT
89  USE mod_prism
90#endif
91  IMPLICIT NONE
92  INTEGER(kind=C_INT) :: f_comm_client_server
93  CHARACTER,DIMENSION(*) :: client_id
94  INTEGER,VALUE          :: str_len
95 
96  INTEGER :: comm_client_server
97  CHARACTER(len=str_len) :: oasis_client_id
98  INTEGER :: ierr
99  INTEGER :: i
100   
101    DO i=1,str_len
102      oasis_client_id(i:i)=client_id(i)
103    ENDDO
104   
105#if defined USE_OASIS || defined USE_OMCT
106    CALL prism_get_intracomm(comm_client_server,oasis_client_id,ierr)
107#endif
108
109    f_comm_client_server=comm_client_server
110
111END SUBROUTINE fxios_oasis_get_intracomm
112
113SUBROUTINE fxios_oasis_get_intercomm(f_comm_client_server,client_id,str_len) BIND(C,NAME="fxios_oasis_get_intercomm")
114  USE, INTRINSIC :: ISO_C_BINDING
115#ifdef USE_OASIS
116  USE mod_prism_get_comm 
117#endif
118#ifdef USE_OMCT
119  USE mod_prism
120#endif
121  IMPLICIT NONE
122  INTEGER(kind=C_INT) :: f_comm_client_server
123  CHARACTER,DIMENSION(*) :: client_id
124  INTEGER,VALUE          :: str_len
125 
126  INTEGER :: comm_client_server
127  CHARACTER(len=str_len) :: oasis_client_id
128  INTEGER :: ierr
129  INTEGER :: i
130   
131    DO i=1,str_len
132      oasis_client_id(i:i)=client_id(i)
133    ENDDO
134   
135#if defined USE_OASIS || defined USE_OMCT
136    CALL prism_get_intercomm(comm_client_server,oasis_client_id,ierr)
137#endif
138
139    f_comm_client_server=comm_client_server
140
141END SUBROUTINE fxios_oasis_get_intercomm
Note: See TracBrowser for help on using the repository browser.