1!! Copyright (C) 2003-2006 M. Marques, A.
Castro, A.
Rubio, G. Bertsch
4!! it under the terms of the GNU General Public License as published by
8!! This
program is distributed in the hope that it will be useful,
9!! but WITHOUT ANY
WARRANTY; without even the implied warranty of
10!! MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the
11!! GNU General Public License
for more details.
13!! You should have received
a copy of the GNU General Public License
14!! along with
this program;
if not, write to the Free Software
23! If the compiler accepts
long Fortran
lines, it is better to use that
24! capacity, and build all the preprocessor definitions in one line. In
25!
this way, the debuggers will provide the right line numbers.
30# define _newline_ \newline
31# define _anl_ & \newline
35! If the compiler accepts line number
markers, then
"CARDINAL" and
"ACARDINAL"
38! put immedialty before
a line where
a compilation error might occur and at the
40! Note that the
"cardinal" and
"newline" words are substituted by the
program
41! preprocess.pl by the ampersand and by
a real
new line just before compilation.
46# if defined(F90_ACCEPTS_LINE_NUMBERS)
47# define CARDINAL _newline_\cardinal __LINE__ __FILE__ _newline_
48# define ACARDINAL _anl_\cardinal __LINE__ __FILE__ _newline_
50# define CARDINAL _newline_
51# define ACARDINAL _anl_
56! The assertions are ignored
if the
code is compiled in
not-debug
mode (NDEBUG
58! prints out the assertion
string, the
file, and the line. The subroutine
59! assert_die is in the global_m module.
61# define ASSERT(expr) \
62 if(.not.(expr)) ACARDINAL \
63 call assert_die(TOSTRING(expr), ACARDINAL __FILE__, ACARDINAL __LINE__) \
71! Some compilers will
not have the
sizeof intrinsic.
73# define FC_SIZEOF(x) sizeof(x)
75# define FC_SIZEOF(x) 1
79!
a helpful error
if the allocation
or deallocation
fails. They also take care of
80! calling the memory profiler. The
"MY_DEALLOCATE" macro is only used in
this file;
84! provided to allocate
a polymorphic variable. This is necessary because of the
85! special Fortran syntax
"type::var".
87# define SAFE_ALLOCATE(x) allocate(x)
89# define SAFE_ALLOCATE_TYPE(type, x) allocate(type::x)
91# define SAFE_ALLOCATE_TYPE_ARRAY(type, x, bounds) allocate(type::x bounds)
93# define SAFE_ALLOCATE_SOURCE(x, y) \
94 allocate(x, source=y); CARDINAL \
97# define SAFE_ALLOCATE_SOURCE_A(x, y) \
98 if(allocated(y)) then; CARDINAL \
99 allocate(x, source=y); CARDINAL \
103# define SAFE_ALLOCATE_SOURCE_P(x, y) \
104 if(associated(y)) then; CARDINAL \
105 allocate(x, source=y); CARDINAL \
107 nullify(x); CARDINAL \
111# define SAFE_DEALLOCATE_P(x) \
112 if(associated(x)) then; CARDINAL \
113 deallocate(x); CARDINAL \
114 nullify(x); CARDINAL \
117# define SAFE_DEALLOCATE_A(x) \
118 if(allocated(x)) then; CARDINAL \
119 deallocate(x); CARDINAL \
124# define SAFE_ALLOCATE_PROFILE(x) \
125 if(not_in_openmp() .and. iand(prof_vars%mode, PROFILING_MEMORY).ne.0 .or. global_alloc_err.ne.0) ACARDINAL \
126 global_sizeof = FC_SIZEOF( ACARDINAL x ACARDINAL ); CARDINAL \
127 if(iand(prof_vars%mode, PROFILING_MEMORY).ne.0) ACARDINAL \
128 call profiling_memory_allocate(ACARDINAL TOSTRING(x), ACARDINAL __FILE__, ACARDINAL __LINE__, ACARDINAL global_sizeof); CARDINAL \
129 if(global_alloc_err.ne.0) ACARDINAL \
130 call alloc_error(global_sizeof, ACARDINAL __FILE__, ACARDINAL __LINE__); \
133# define SAFE_ALLOCATE(x) \
134 allocate( ACARDINAL x, ACARDINAL stat=global_alloc_err); CARDINAL \
135 SAFE_ALLOCATE_PROFILE(x)
137# define SAFE_ALLOCATE_TYPE(type, x) \
138 allocate( ACARDINAL type::x, ACARDINAL stat=global_alloc_err); CARDINAL \
139 SAFE_ALLOCATE_PROFILE(x)
141! Some versions of GCC have
a bug in the
sizeof() function such that the compiler crashes with
a ICE
142! when passing
a polymorphic variable to the function and
explicit array bounds are given.
146 if(not_in_openmp() .and. iand(prof_vars%
mode, PROFILING_MEMORY).ne.0 .or. global_alloc_err.ne.0) ACARDINAL \
148 if(iand(prof_vars%
mode, PROFILING_MEMORY).ne.0) ACARDINAL \
154# define SAFE_ALLOCATE_SOURCE_P(x, y) \
155 if(associated(y)) then; CARDINAL \
156 allocate( ACARDINAL x, ACARDINAL source=y, ACARDINAL stat=global_alloc_err); CARDINAL \
157 SAFE_ALLOCATE_PROFILE(x); CARDINAL \
159 nullify(x); CARDINAL \
163# define SAFE_ALLOCATE_SOURCE_A(x, y) \
164 if(allocated(y)) then; CARDINAL \
165 allocate( ACARDINAL x, ACARDINAL source=y, ACARDINAL stat=global_alloc_err); CARDINAL \
166 SAFE_ALLOCATE_PROFILE(x); CARDINAL \
170# define SAFE_ALLOCATE_SOURCE(x, y) \
171 allocate( ACARDINAL x, ACARDINAL source=y, ACARDINAL stat=global_alloc_err); CARDINAL \
172 SAFE_ALLOCATE_PROFILE(x); CARDINAL \
175# define MY_DEALLOCATE(x) \
176 global_sizeof = FC_SIZEOF(x) ; \
178 deallocate(x, stat=global_alloc_err, errmsg=global_alloc_errmsg); CARDINAL \
179 if(not_in_openmp() .and. iand(prof_vars%mode, PROFILING_MEMORY).ne.0) ACARDINAL \
180 call profiling_memory_deallocate(TOSTRING(x), ACARDINAL __FILE__, ACARDINAL __LINE__, ACARDINAL global_sizeof); CARDINAL \
181 if(global_alloc_err.ne.0) then; CARDINAL \
182 write(stderr,'(a)') global_alloc_errmsg; CARDINAL \
183 call dealloc_error(global_sizeof, ACARDINAL __FILE__, ACARDINAL __LINE__); CARDINAL \
187# define SAFE_DEALLOCATE_P(x) \
188 if(associated(x)) then; CARDINAL \
189 MY_DEALLOCATE(x); CARDINAL \
190 nullify(x); CARDINAL \
194# define SAFE_DEALLOCATE_A(x) \
195 if(allocated(x)) then; CARDINAL \
196 MY_DEALLOCATE(x); CARDINAL \
204#define SAFE_TOL(x, tol) sign(max(abs(x),tol),x)
207! the
TOSTRING macro converts
a macro into
a string
209#define STRINGIFY(x) #x
210#define TOSTRING(x) STRINGIFY(x)
213! Whenever
a procedure is
not called too many times, one should start it
215! pieces of
code that call the push_sub and pop_sub routines defined
216! in the messages_m module.
218#define PUSH_SUB(routine) \
219 if(debug%trace .or. debug%instrument) then; if(not_in_openmp()) then; CARDINAL \
220 call debug_push_sub(__FILE__+"." ACARDINAL +TOSTRING(routine)); CARDINAL \
223#define POP_SUB(routine) \
224 if(debug%trace .or. debug%instrument) then; if(not_in_openmp()) then; CARDINAL \
225 call debug_pop_sub(__FILE__+"." ACARDINAL +TOSTRING(routine)); CARDINAL \
229#define PUSH_SUB(routine)
230#define POP_SUB(routine)
233! push_pop_mismatch: begin ignore
234#define PUSH_SUB_WITH_PROFILE(routine) \
235 PUSH_SUB(routine) CARDINAL \
236 call profiling_in(TOSTRING(routine)); CARDINAL
237#define POP_SUB_WITH_PROFILE(routine) \
238 call profiling_out(TOSTRING(routine)); CARDINAL \
239 POP_SUB(routine) CARDINAL
240! push_pop_mismatch: end ignore
#define LONG_LINES
Definition: config.h:41
#define HAVE_FC_SIZEOF
Definition: config.h:44
void fint fint fint fint * type
Definition: cufft.cc:163
if write to the Free Software Franklin Fifth USA !If the compiler accepts long Fortran lines
Definition: global.h:23
!The assertions are ignored if the code is compiled in not debug when !prints out the assertion the file
Definition: global.h:58
#define POP_SUB(routine)
Definition: global.h:223
!The assertions are ignored if the code is compiled in not debug when !prints out the assertion string
Definition: global.h:58
!In one should normally use the SAFE_(DE) ALLOCATE macros below
#define FC_SIZEOF(x)
Definition: global.h:75
#define ACARDINAL
Definition: global.h:51
!In octopus
Definition: global.h:78
if write to the Free Software Franklin Street
Definition: global.h:15
!The assertions are ignored if the code is compiled in not debug when fails
Definition: global.h:57
!If the compiler accepts line number markers
Definition: global.h:35
A A G Bertsch !This program is free software
Definition: global.h:3
A A Rubio
Definition: global.h:1
#define SAFE_ALLOCATE(x)
Definition: global.h:133
!Some versions of GCC have a bug in the one should start it !and finish it with the PUSH_SUB and POP_SUB macros
Definition: global.h:214
#define SAFE_ALLOCATE_TYPE_ARRAY(type, x, bounds)
#define CARDINAL
Definition: global.h:50
if write to the Free Software Franklin Fifth Boston
Definition: global.h:15
you can redistribute it and or modify !it under the terms of the GNU General Public License as published by !the Free Software Foundation
Definition: global.h:5
without even the implied warranty of !MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE See the !GNU General Public License for more details !You should have received a copy of the GNU General Public License !along with this program
Definition: global.h:14
#define PUSH_SUB(routine)
Definition: global.h:218
if write to the Free Software Inc
Definition: global.h:15
!The assertions are ignored if the code is compiled in not debug mode(NDEBUG ! is defined). Otherwise it is merely a logical assertion that
A Castro
Definition: global.h:1
!in the code
Definition: global.h:81
if write to the Free Software Franklin Fifth USA !If the compiler accepts long Fortran it is better to use that and build all the preprocessor definitions in one line In !this way
Definition: global.h:25
!If the compiler accepts line number then CARDINAL and ACARDINAL !will put them Otherwise
Definition: global.h:36
if write to the Free Software Franklin Fifth MA
Definition: global.h:16
either or(at your option) !! any later version. !! !! This program is distributed in the hope that it will be useful
#define SAFE_ALLOCATE_TYPE(type, x)
Definition: global.h:137
#define SAFE_DEALLOCATE_A(x)
if write to the Free Software Franklin Fifth Floor
Definition: global.h:15
either !but WITHOUT ANY WARRANTY
Definition: global.h:9
if not
Definition: global.h:14
#define SAFE_DEALLOCATE_P(x)
either version
Definition: global.h:5
if(it==(*map) ->end())
Definition: iihash_low.cc:52
void fint * array
Definition: sort_low.cc:65
void const double * x
Definition: spline_low.cc:50
double const double * a
Definition: spline_low.cc:120