programmer's documentation
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
cs_base_fortran.h
Go to the documentation of this file.
1 #ifndef __CS_BASE_FORTRAN_H__
2 #define __CS_BASE_FORTRAN_H__
3 
4 /*============================================================================
5  * Initializtion and handling of Fortran-related mechanisms
6  *============================================================================*/
7 
8 /*
9  This file is part of Code_Saturne, a general-purpose CFD tool.
10 
11  Copyright (C) 1998-2014 EDF S.A.
12 
13  This program is free software; you can redistribute it and/or modify it under
14  the terms of the GNU General Public License as published by the Free Software
15  Foundation; either version 2 of the License, or (at your option) any later
16  version.
17 
18  This program is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
20  FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
21  details.
22 
23  You should have received a copy of the GNU General Public License along with
24  this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
25  Street, Fifth Floor, Boston, MA 02110-1301, USA.
26 */
27 
28 /*----------------------------------------------------------------------------*/
29 
30 /*----------------------------------------------------------------------------
31  * Local headers
32  *----------------------------------------------------------------------------*/
33 
34 #include "cs_base.h"
35 
36 /*----------------------------------------------------------------------------*/
37 
39 
40 /*=============================================================================
41  * Macro definitions
42  *============================================================================*/
43 
44 /*============================================================================
45  * Type definitions
46  *============================================================================*/
47 
48 /*============================================================================
49  * Static global variables
50  *============================================================================*/
51 
52 /*============================================================================
53  * Public function prototypes for Fortran API
54  *============================================================================*/
55 
56 /*----------------------------------------------------------------------------
57  * Call exit routine from Fortran code
58  *
59  * Fortran interface:
60  *
61  * subroutine csexit (status)
62  * *****************
63  *
64  * integer status : <-- : 0 for success, 1+ for error
65  *----------------------------------------------------------------------------*/
66 
67 void CS_PROCF (csexit, CSEXIT)
68 (
69  const cs_int_t *status
70 );
71 
72 /*----------------------------------------------------------------------------
73  * Elapsed time since execution start
74  *
75  * Fortran interface:
76  *
77  * subroutine dmtmps (tw)
78  * *****************
79  *
80  * double precision tw : <-- : elapsed time
81  *----------------------------------------------------------------------------*/
82 
83 void CS_PROCF (dmtmps, DMTMPS)
84 (
85  cs_real_t *tw
86 );
87 
88 /*----------------------------------------------------------------------------
89  * Create a directory, or check it exists.
90  *
91  * Fortran interface
92  *
93  * subroutine csmkdr (dirnam, dirlen)
94  * *****************
95  *
96  * character* dirnam : --> : Directory name
97  * integer dirlen : --> : Directory name length
98  *----------------------------------------------------------------------------*/
99 
100 void CS_PROCF (csmkdr, CSMKDR)
101 (
102  const char *dirnam,
103  const cs_int_t *dirlen
104 );
105 
106 /*----------------------------------------------------------------------------
107  * Compute the gamma function of x.
108  *
109  * Fortran interface
110  *
111  * subroutine csgamma (x, g)
112  * ******************
113  *
114  * double precision x : <-- : input value
115  * double precision gamma : --> : output value
116  *----------------------------------------------------------------------------*/
117 
118 void CS_PROCF (csgamma, CSGAMMA)
119 (
120  const cs_real_t *x,
121  cs_real_t *gamma
122  );
123 
124 /*----------------------------------------------------------------------------
125  * Compute the erf function of x.
126  *
127  * Fortran interface
128  *
129  * subroutine cserf (x, g)
130  * ******************
131  *
132  * double precision x : <-- : input value
133  * double precision ferf : --> : output value
134  *----------------------------------------------------------------------------*/
135 
136 void CS_PROCF (cserf, CSERF)
137 (
138  const cs_real_t *x,
139  cs_real_t *ferf
140  );
141 
142 /*----------------------------------------------------------------------------
143  * Copy a Fortan string buffer to a C string buffer
144  *
145  * The aim of this function is to aviod issues with Fortran array bounds
146  * checking when compilers such as icc 11 consider a character array from C
147  * as an array of 1-character length strings.
148  *
149  * Fortran interface
150  *
151  * subroutine cssf2c (len, cstr, fstr)
152  * *****************
153  *
154  * integer len : <-- : String length
155  * character* fstr : <-- : Fortran string
156  * character* cstr : --> : C string
157  *----------------------------------------------------------------------------*/
158 
159 void CS_PROCF (cssf2c, CSSF2C)
160 (
161  const cs_int_t *len,
162  const char *fstr,
163  char *cstr
164  CS_ARGF_SUPP_CHAINE /* (possible 'length' arguments added
165  by many Fortran compilers) */
166 );
167 
168 /*----------------------------------------------------------------------------
169  * Get log name file information.
170  *
171  * When log file output is suppressed, it returns the name of the
172  * bit buck file ("/dev/null")
173  *
174  * Fortran interface
175  *
176  * subroutine cslogname (len, name)
177  * ********************
178  *
179  * integer len : <-- : maximum string length
180  * character* name : --> : Fortran string
181  *----------------------------------------------------------------------------*/
182 
183 void CS_PROCF (cslogname, CSLOGNAME)
184 (
185  const cs_int_t *len,
186  char *dir
187  CS_ARGF_SUPP_CHAINE /* (possible 'length' arguments added
188  by many Fortran compilers) */
189 );
190 
191 /*----------------------------------------------------------------------------
192  * Get package data path information.
193  *
194  * The aim of this function is to aviod issues with Fortran array bounds
195  * checking when compilers such as icc 11 consider a character array from C
196  * as an array of 1-character length strings.
197  *
198  * Fortran interface
199  *
200  * subroutine csdatadir (len, dir)
201  * ********************
202  *
203  * integer len : <-- : maximum string length
204  * character* dir : --> : Fortran string
205  *----------------------------------------------------------------------------*/
206 
207 void CS_PROCF (csdatadir, CSDATADIR)
208 (
209  const cs_int_t *len,
210  char *dir
211  CS_ARGF_SUPP_CHAINE /* (possible 'length' arguments added
212  by many Fortran compilers) */
213 );
214 
215 /*=============================================================================
216  * Public function prototypes
217  *============================================================================*/
218 
219 /*----------------------------------------------------------------------------
220  * Replace default bft_printf() mechanism with internal mechanism.
221  *
222  * This variant is designed to allow switching from C to Fortran output,
223  * whithout disabling regular C stdout output when switched to Fortran.
224  *
225  * This allows redirecting or suppressing logging for different ranks.
226  *
227  * parameters:
228  * log_name <-- base file name for log, or NULL for stdout
229  * r0_log_flag <-- redirection for rank 0 log;
230  * 0: not redirected; 1: redirected to <log_name> file
231  * rn_log_flag <-- redirection for ranks > 0 log:
232  * 0: not redirected; 1: redirected to <log_name>_n*" file;
233  * 2: redirected to "/dev/null" (suppressed)
234  *----------------------------------------------------------------------------*/
235 
236 void
237 cs_base_fortran_bft_printf_set(const char *log_name,
238  int r0_log_flag,
239  int rn_log_flag);
240 
241 /*----------------------------------------------------------------------------
242  * Switch bft_printf() mechanism to C output.
243  *
244  * This function may only be called after cs_base_fortran_bft_printf_set()
245  *----------------------------------------------------------------------------*/
246 
247 void
249 
250 /*----------------------------------------------------------------------------
251  * Switch bft_printf() mechanism to Fortran output.
252  *
253  * This function may only be called after cs_base_fortran_bft_printf_set()
254  *----------------------------------------------------------------------------*/
255 
256 void
258 
259 /*----------------------------------------------------------------------------*/
260 
262 
263 #endif /* __CS_BASE_FORTRAN_H__ */
void dmtmps(cs_real_t *tw)
Definition: cs_base_fortran.c:249
void csdatadir(const cs_int_t *len, char *dir CS_ARGF_SUPP_CHAINE)
Definition: cs_base_fortran.c:434
void cs_base_fortran_bft_printf_to_c(void)
Definition: cs_base_fortran.c:551
#define BEGIN_C_DECLS
Definition: cs_defs.h:405
int cs_int_t
Fortran-compatible integer.
Definition: cs_defs.h:295
void csexit(const cs_int_t *status)
Definition: cs_base_fortran.c:230
void cslogname(const cs_int_t *len, char *dir CS_ARGF_SUPP_CHAINE)
Definition: cs_base_fortran.c:386
#define CS_ARGF_SUPP_CHAINE
Definition: cs_defs.h:434
void csmkdr(const char *dirnam, const cs_int_t *dirlen)
Definition: cs_base_fortran.c:269
void cssf2c(const cs_int_t *len, const char *fstr, char *cstr CS_ARGF_SUPP_CHAINE)
Definition: cs_base_fortran.c:359
void cs_base_fortran_bft_printf_set(const char *log_name, int r0_log_flag, int rn_log_flag)
Definition: cs_base_fortran.c:479
#define END_C_DECLS
Definition: cs_defs.h:406
double cs_real_t
Definition: cs_defs.h:296
void csgamma(const cs_real_t *x, cs_real_t *gamma)
Definition: cs_base_fortran.c:302
#define CS_PROCF(x, y)
Definition: cs_defs.h:419
void cserf(const cs_real_t *x, cs_real_t *ferf)
Definition: cs_base_fortran.c:328
void cs_base_fortran_bft_printf_to_f(void)
Definition: cs_base_fortran.c:585