Neko 0.9.99
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
file.f90
Go to the documentation of this file.
1! Copyright (c) 2019-2024, The Neko Authors
2! All rights reserved.
3!
4! Redistribution and use in source and binary forms, with or without
5! modification, are permitted provided that the following conditions
6! are met:
7!
8! * Redistributions of source code must retain the above copyright
9! notice, this list of conditions and the following disclaimer.
10!
11! * Redistributions in binary form must reproduce the above
12! copyright notice, this list of conditions and the following
13! disclaimer in the documentation and/or other materials provided
14! with the distribution.
15!
16! * Neither the name of the authors nor the names of its
17! contributors may be used to endorse or promote products derived
18! from this software without specific prior written permission.
19!
20! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21! "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22! LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23! FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24! COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25! INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26! BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27! LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28! CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29! LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30! ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31! POSSIBILITY OF SUCH DAMAGE.
32!
34module file
36 use num_types, only : rp
38 use nmsh_file, only : nmsh_file_t
39 use chkp_file, only : chkp_file_t
40 use map_file, only : map_file_t
41 use rea_file, only : rea_file_t
42 use re2_file, only : re2_file_t
43 use fld_file, only : fld_file_t
45 use vtk_file, only : vtk_file_t
46 use stl_file, only : stl_file_t
47 use csv_file, only : csv_file_t
48 use hdf5_file, only : hdf5_file_t
49 implicit none
50
54 type file_t
55 class(generic_file_t), allocatable :: file_type
56 contains
58 procedure :: write => file_write
60 procedure :: read => file_read
62 procedure :: set_counter => file_set_counter
64 procedure :: set_start_counter => file_set_start_counter
66 procedure :: set_header => file_set_header
68 procedure :: set_precision => file_set_precision
70 final :: file_free
71 end type file_t
72
73 interface file_t
74 module procedure file_init
75 end interface file_t
76
77contains
78
81 function file_init(fname, header, precision) result(this)
82 character(len=*) :: fname
83 character(len=*), optional :: header
84 integer, optional :: precision
85 type(file_t), target :: this
86 character(len=80) :: suffix
87 class(generic_file_t), pointer :: q
88
89 call filename_suffix(fname, suffix)
90
91 if (allocated(this%file_type)) then
92 deallocate(this%file_type)
93 end if
94
95 if (suffix .eq. "rea") then
96 allocate(rea_file_t::this%file_type)
97 else if (suffix .eq. "re2") then
98 allocate(re2_file_t::this%file_type)
99 else if (suffix .eq. "map") then
100 allocate(map_file_t::this%file_type)
101 else if (suffix .eq. "vtk") then
102 allocate(vtk_file_t::this%file_type)
103 else if (suffix .eq. "nmsh") then
104 allocate(nmsh_file_t::this%file_type)
105 else if (suffix .eq. "fld") then
106 allocate(fld_file_t::this%file_type)
107 else if (suffix .eq. "chkp") then
108 allocate(chkp_file_t::this%file_type)
109 else if (suffix .eq. "stl") then
110 allocate(stl_file_t::this%file_type)
111 else if (suffix .eq. "csv") then
112 allocate(csv_file_t::this%file_type)
113 this%file_type%serial = .true.
114 else if ((suffix .eq. "hdf5") .or. (suffix .eq. "h5")) then
115 allocate(hdf5_file_t::this%file_type)
116 else
117 call neko_error('Unknown file format')
118 end if
119
120 call this%file_type%init(fname)
121
122 if (present(header)) then
123 call this%set_header(header)
124 end if
125
126 if (present(precision)) then
127 call this%set_precision(precision)
128 end if
129
130 end function file_init
131
133 subroutine file_free(this)
134 type(file_t), intent(inout) :: this
135
136 if (allocated(this%file_type)) then
137 deallocate(this%file_type)
138 end if
139
140 end subroutine file_free
141
144 subroutine file_write(this, data, t)
145 class(file_t), intent(inout) :: this
146 class(*), intent(inout) :: data
147 real(kind=rp), intent(in), optional :: t
148
149 if (present(t)) then
150 call this%file_type%write(data, t)
151 else
152 call this%file_type%write(data)
153 end if
154
155 end subroutine file_write
156
159 subroutine file_read(this, data)
160 class(file_t), intent(in) :: this
161 class(*), intent(inout) :: data
162
163 call this%file_type%read(data)
164
165 end subroutine file_read
166
168 subroutine file_set_counter(this, n)
169 class(file_t), intent(inout) :: this
170 integer, intent(in) :: n
171
172 select type(ft => this%file_type)
173 class is (generic_file_t)
174 call ft%set_counter(n)
175 end select
176
177 end subroutine file_set_counter
178
180 subroutine file_set_start_counter(this, n)
181 class(file_t), intent(inout) :: this
182 integer, intent(in) :: n
183
184 select type(ft => this%file_type)
185 class is (generic_file_t)
186 call ft%set_start_counter(n)
187 end select
188
189 end subroutine file_set_start_counter
190
192 subroutine file_set_header(this, hd)
193 class(file_t), intent(inout) :: this
194 character(len=*), intent(in) :: hd
195
196 character(len=80) :: suffix
197
198 select type(ft => this%file_type)
199 class is (csv_file_t)
200 call ft%set_header(hd)
201 class default
202 call filename_suffix(this%file_type%fname, suffix)
203 call neko_warning("No set_header defined for " // trim(suffix) // " yet!")
204 end select
205
206 end subroutine file_set_header
207
210 subroutine file_set_precision(this, precision)
211 class(file_t), intent(inout) :: this
212 integer, intent(in) :: precision
213
214 character(len=80) :: suffix
215
216 select type(ft => this%file_type)
217 type is (fld_file_t)
218 call ft%set_precision(precision)
219 class default
220 call filename_suffix(this%file_type%fname, suffix)
221 call neko_warning("No precision strategy defined for " // trim(suffix) //&
222 " files!")
223 end select
224
225 end subroutine file_set_precision
226
227end module file
Neko checkpoint file format.
Definition chkp_file.f90:35
File format for .csv files, used for any read/write operations involving floating point data.
Definition csv_file.f90:35
Module for file I/O operations.
Definition file.f90:34
subroutine file_set_header(this, hd)
Set a file's header.
Definition file.f90:193
subroutine file_set_start_counter(this, n)
Set a file's start counter.
Definition file.f90:181
subroutine file_set_counter(this, n)
Set a file's counter.
Definition file.f90:169
type(file_t) function, target file_init(fname, header, precision)
File reader/writer constructor.
Definition file.f90:82
subroutine file_read(this, data)
Read data from a file.
Definition file.f90:160
subroutine file_set_precision(this, precision)
Set a file's output precision.
Definition file.f90:211
subroutine file_free(this)
File operation destructor.
Definition file.f90:134
subroutine file_write(this, data, t)
Writes data to a file.
Definition file.f90:145
Simple module to handle fld file series. Provides an interface to the different fields sotred in a fl...
NEKTON fld file format.
Definition fld_file.f90:35
HDF5 file format.
Definition hdf5_file.F90:34
NEKTON map file.
Definition map_file.f90:35
Neko binary mesh data.
Definition nmsh_file.f90:34
integer, parameter, public rp
Global precision used in computations.
Definition num_types.f90:12
NEKTON mesh data in re2 format.
Definition re2_file.f90:35
NEKTON session data reader.
Definition rea_file.f90:35
Stereolithography (STL) file.
Definition stl_file.f90:34
Utilities.
Definition utils.f90:35
subroutine, public neko_warning(warning_msg)
Reports a warning to standard output.
Definition utils.f90:266
subroutine, public filename_suffix(fname, suffix)
Extract a filename's suffix.
Definition utils.f90:70
Legacy VTK file format.
Definition vtk_file.f90:35
Interface for Neko checkpoint files.
Definition chkp_file.f90:55
A wrapper around a polymorphic generic_file_t that handles its init. This is essentially a factory fo...
Definition file.f90:54
Interface for NEKTON fld files.
Definition fld_file.f90:64
A generic file handler.
Interface for HDF5 files.
Definition hdf5_file.F90:54
Interface for NEKTON map files.
Definition map_file.f90:44
Interface for Neko nmsh files.
Definition nmsh_file.f90:60
Interface for NEKTON re2 files.
Definition re2_file.f90:62
Interface for NEKTON ascii files.
Definition rea_file.f90:61
Interface for STL files.
Definition stl_file.f90:49
Interface for legacy VTK files.
Definition vtk_file.f90:51