55 character(len=*),
intent(in) :: fname
57 suffix_pos = scan(trim(fname),
'.', back=.true.)
62 character(len=*),
intent(in) :: fname
64 tslash_pos = scan(trim(fname),
'/', back=.true.)
69 character(len=*) :: fname
70 character(len=*) :: suffix
76 character(len=*) :: fname
77 character(len=*) :: new_fname
78 character(len=*) :: new_suffix
82 new_fname = trim(fname(1:suffix_pos))//new_suffix
89 character(len=*) :: string
90 character(len=*) :: delimiter
91 character(len=100),
allocatable :: split_str(:)
92 integer :: length, i, i2,offset, j
96 if (len(trim(string)) .eq. 0)
then
97 allocate(split_str(1))
98 split_str(1) = trim(string)
102 i = scan(string(offset:), delimiter, back=.false.)
108 allocate(split_str(length))
113 i2 = scan(trim(string(offset:)), delimiter, back=.false.)
115 split_str(j) = trim(string(offset:))
118 split_str(j) = trim(string(offset:offset+i2-2))
130 integer,
intent(in) :: i, j, k, l, lx, ly, lz
133 index = (i + lx * ((j - 1) + ly * ((k - 1) + lz * ((l - 1)))))
137 integer,
intent(in) :: i, j, k, lx, ly, lz, facet
143 if (i .eq. 1) is_on = .true.
145 if (i .eq. lx) is_on = .true.
147 if (j .eq. 1) is_on = .true.
149 if (j .eq. ly) is_on = .true.
151 if (k .eq. 1) is_on = .true.
153 if (k .eq. lz) is_on = .true.
167 index(4) = lin_idx/(lx*ly*lz)
168 index(3) = (lin_idx-(lx*ly*lz)*index(4))/(lx*ly)
169 index(2) = (lin_idx-(lx*ly*lz)*index(4)-(lx*ly)*index(3))/lx
170 index(1) = (lin_idx-(lx*ly*lz)*index(4)-(lx*ly)*index(3)-lx*index(2))
171 index(1) = index(1) + 1
172 index(2) = index(2) + 1
173 index(3) = index(3) + 1
174 index(4) = index(4) + 1
179 integer,
optional :: error_code
181 if (
present(error_code))
then
182 write(*,*)
'*** ERROR ***', error_code
185 write(*,*)
'*** ERROR ***'
192 character(len=*) :: error_msg
193 write(*,*)
'*** ERROR: ', error_msg,
' ***'
198 character(len=*) :: warning_msg
199 write(*,*)
'*** WARNING: ', warning_msg,
' ***'
208 character(len=*),
intent(in) :: array(:)
209 character(len=*),
intent(in) :: sep
210 logical,
intent(in) :: prepend
211 character(:),
allocatable :: result
214 result = trim(array(1))
216 result = result // sep // trim(array(i))
219 if (prepend .eqv. .true.)
then
220 result = sep // result
__device__ void nonlinear_index(const int idx, const int lx, int *index)
character(:) function, allocatable, public concat_string_array(array, sep, prepend)
Concatenate an array of strings into one string with array items separated by spaces.
character(len=100) function, dimension(:), allocatable, public split_string(string, delimiter)
Split a string based on delimiter (tokenizer) OBS: very hacky, this should really be improved,...
pure logical function, public index_is_on_facet(i, j, k, lx, ly, lz, facet)
subroutine neko_error_msg(error_msg)
pure integer function, public linear_index(i, j, k, l, lx, ly, lz)
Compute the address of a (i,j,k,l) array with sizes (1:lx, 1:ly, 1:lz, :)
integer, parameter, public neko_fname_len
subroutine, public neko_warning(warning_msg)
subroutine, public filename_chsuffix(fname, new_fname, new_suffix)
Change a filename's suffix.
subroutine, public filename_suffix(fname, suffix)
Extract a filename's suffix.
pure integer function, public filename_tslash_pos(fname)
Find position (in the string) of a filename's trailing slash.
subroutine neko_error_plain(error_code)
pure integer function, public filename_suffix_pos(fname)
Find position (in the string) of a filename's suffix.