Loading [MathJax]/extensions/tex2jax.js
Neko 0.9.99
A portable framework for high-order spectral element flow simulations
All Classes Namespaces Files Functions Variables Typedefs Enumerator Macros Pages
neko.f90
Go to the documentation of this file.
1! Copyright (c) 2019-2025, 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 neko
35 use num_types, only : rp, sp, dp, qp
36 use comm
37 use utils
38 use logger
39 use math, only : abscmp, rzero, izero, row_zero, rone, copy, cmult, cadd, &
46 use speclib
47 use dofmap, only : dofmap_t
48 use space, only : space_t, gl, gll, gj
49 use htable
50 use uset
51 use stack
52 use tuple
53 use mesh, only : mesh_t
54 use point, only : point_t
55 use mesh_field, only : mesh_fld_t
56 use map
57 use mxm_wrapper, only : mxm
59 use file
60 use field, only : field_t, field_ptr_t
63 use krylov
64 use coefs, only : coef_t
65 use bc, only : bc_t
67 use bc_list, only : bc_list_t
68 use dirichlet, only : dirichlet_t
69 use ax_product, only : ax_t, ax_helm_factory
71 use neko_config
72 use case, only : case_t, case_init, case_free
74 use output, only : output_t
75 use simulation, only : neko_solve
76 use operators, only : dudxyz, opgrad, ortho, cdtp, conv1, curl, cfl,&
79 use projection
80 use user_intf
81 use signal
84 use device
94 use map_1d, only : map_1d_t
95 use map_2d, only : map_2d_t
96 use cpr, only : cpr_t, cpr_init, cpr_free
97 use fluid_stats, only : fluid_stats_t
98 use field_list, only : field_list_t
101 use vector, only : vector_t, vector_ptr_t
102 use matrix, only : matrix_t
103 use tensor
106 use probes, only : probes_t
116 use point_zone, only: point_zone_t
122 use runtime_stats, only : neko_rt_stats
123 use json_module, only : json_file
125 use bc_list, only : bc_list_t
126 use, intrinsic :: iso_fortran_env
127 !$ use omp_lib
128 implicit none
129
130contains
131
133 subroutine neko_init(C)
134 type(case_t), target, intent(inout), optional :: C
135 character(len=NEKO_FNAME_LEN) :: case_file, args
136 character(len=LOG_SIZE) :: log_buf
137 character(len=10) :: suffix
138 character(10) :: time
139 character(8) :: date
140 integer :: argc, i
141
142 call date_and_time(time = time, date = date)
143
144 call comm_init
146 call jobctrl_init
147 call device_init
148
149 call neko_log%init()
150 call neko_field_registry%init()
151
153
154 if (present(c)) then
155
156 argc = command_argument_count()
157
158 if (argc .lt. 1) then
159 if (pe_rank .eq. 0) write(*,*) 'Usage: ./neko <case file>'
160 stop
161 end if
162
163 call get_command_argument(1, case_file)
164
165 call filename_suffix(case_file, suffix)
166
167 if (trim(suffix) .ne. 'case' .and. trim(suffix) .ne. 'json') then
168 call neko_error('Invalid case file')
169 end if
170
171 ! Check the device count against the number of MPI ranks
172 if (neko_bcknd_device .eq. 1) then
173 if (device_count() .ne. 1) then
174 call neko_error('Only one device is supported per MPI rank')
175 end if
176 end if
177
178 if (argc .gt. 1) then
179 write(log_buf, '(a)') 'Running with command line arguments: '
180 call neko_log%message(log_buf, neko_log_quiet)
181 do i = 2,argc
182 call get_command_argument(i, args)
183 call neko_log%message(args, neko_log_quiet)
184 end do
185 end if
186 !
187 ! Job information
188 !
189 call neko_job_info(date, time)
190
191 !
192 ! Create case
193 !
194 call case_init(c, case_file)
195
196 !
197 ! Setup runtime statistics
198 !
199 call neko_rt_stats%init(c%params)
200
201
202 !
203 ! Create simulation components
204 !
205 call neko_simcomps%init(c)
206
207 end if
208
209 end subroutine neko_init
210
212 subroutine neko_finalize(C)
213 type(case_t), intent(inout), optional :: C
214
215 call neko_rt_stats%report()
216 call neko_rt_stats%free()
217
218 call neko_scratch_registry%free()
219
220 if (present(c)) then
221 call case_free(c)
222 end if
223
224 call neko_field_registry%free()
225 call device_finalize
227 call comm_free
228 end subroutine neko_finalize
229
230
233 subroutine neko_job_info(date, time)
234 character(10), optional, intent(in) :: time
235 character(8), optional, intent(in) :: date
236 character(len=LOG_SIZE) :: log_buf
237 integer :: nthrds, rw, sw
238
239 call neko_log%section("Job Information")
240
241 if (present(time) .and. present(date)) then
242 write(log_buf, '(A,A,A,A,1x,A,1x,A,A,A,A,A)') 'Start time: ', &
243 time(1:2), ':', time(3:4), &
244 '/', date(1:4), '-', date(5:6), '-', date(7:8)
245 call neko_log%message(log_buf, neko_log_quiet)
246 end if
247 write(log_buf, '(a)') 'Running on: '
248 sw = 10
249 if (pe_size .lt. 1e1) then
250 write(log_buf(13:), '(i1,a)') pe_size, ' MPI '
251 if (pe_size .eq. 1) then
252 write(log_buf(19:), '(a)') 'rank'
253 sw = 9
254 else
255 write(log_buf(19:), '(a)') 'ranks'
256 end if
257 rw = 1
258 else if (pe_size .lt. 1e2) then
259 write(log_buf(13:), '(i2,a)') pe_size, ' MPI ranks'
260 rw = 2
261 else if (pe_size .lt. 1e3) then
262 write(log_buf(13:), '(i3,a)') pe_size, ' MPI ranks'
263 rw = 3
264 else if (pe_size .lt. 1e4) then
265 write(log_buf(13:), '(i4,a)') pe_size, ' MPI ranks'
266 rw = 4
267 else if (pe_size .lt. 1e5) then
268 write(log_buf(13:), '(i5,a)') pe_size, ' MPI ranks'
269 rw = 5
270 else
271 write(log_buf(13:), '(i6,a)') pe_size, ' MPI ranks'
272 rw = 6
273 end if
274 nthrds = 1
275 !$omp parallel
276 !$omp master
277 !$ nthrds = omp_get_num_threads()
278 !$omp end master
279 !$omp end parallel
280 if (nthrds .gt. 1) then
281 if (nthrds .lt. 1e1) then
282 write(log_buf(13 + rw + sw:), '(a,i1,a)') ', using ', &
283 nthrds, ' thrds each'
284 else if (nthrds .lt. 1e2) then
285 write(log_buf(13 + rw + sw:), '(a,i2,a)') ', using ', &
286 nthrds, ' thrds each'
287 else if (nthrds .lt. 1e3) then
288 write(log_buf(13 + rw + sw:), '(a,i3,a)') ', using ', &
289 nthrds, ' thrds each'
290 else if (nthrds .lt. 1e4) then
291 write(log_buf(13 + rw + sw:), '(a,i4,a)') ', using ', &
292 nthrds, ' thrds each'
293 end if
294 end if
295 call neko_log%message(log_buf, neko_log_quiet)
296
297 write(log_buf, '(a)') 'CPU type : '
298 call system_cpu_name(log_buf(13:))
299 call neko_log%message(log_buf, neko_log_quiet)
300
301 write(log_buf, '(a)') 'Bcknd type: '
302 if (neko_bcknd_sx .eq. 1) then
303 write(log_buf(13:), '(a)') 'SX-Aurora'
304 else if (neko_bcknd_xsmm .eq. 1) then
305 write(log_buf(13:), '(a)') 'CPU (libxsmm)'
306 else if (neko_bcknd_cuda .eq. 1) then
307 write(log_buf(13:), '(a)') 'Accelerator (CUDA)'
308 else if (neko_bcknd_hip .eq. 1) then
309 write(log_buf(13:), '(a)') 'Accelerator (HIP)'
310 else if (neko_bcknd_opencl .eq. 1) then
311 write(log_buf(13:), '(a)') 'Accelerator (OpenCL)'
312 else
313 write(log_buf(13:), '(a)') 'CPU'
314 end if
315 call neko_log%message(log_buf, neko_log_quiet)
316
317 if (neko_bcknd_hip .eq. 1 .or. neko_bcknd_cuda .eq. 1 .or. &
318 neko_bcknd_opencl .eq. 1) then
319 write(log_buf, '(a)') 'Dev. name : '
320 call device_name(log_buf(13:))
321 call neko_log%message(log_buf, neko_log_quiet)
322 end if
323 write(log_buf, '(a)') 'Real type : '
324 select case (rp)
325 case (real32)
326 write(log_buf(13:), '(a)') 'single precision'
327 case (real64)
328 write(log_buf(13:), '(a)') 'double precision'
329 case (real128)
330 write(log_buf(13:), '(a)') 'quad precision'
331 end select
332 call neko_log%message(log_buf, neko_log_quiet)
333 call neko_log%end()
334 end subroutine neko_job_info
335end module neko
Retrieves a parameter by name or assigns a provided default value. In the latter case also adds the m...
Retrieves a parameter by name or throws an error.
Interface to a C function to retrieve the CPU name (type).
Definition system.f90:44
Defines a Matrix-vector product.
Definition ax.f90:34
Defines a list of bc_t.
Definition bc_list.f90:34
Defines a boundary condition.
Definition bc.f90:34
Defines a simulation case.
Definition case.f90:34
subroutine, public case_free(this)
Deallocate a case.
Definition case.f90:435
Coefficients.
Definition coef.f90:34
Definition comm.F90:1
integer pe_rank
MPI rank.
Definition comm.F90:50
subroutine comm_free
Definition comm.F90:132
integer pe_size
MPI size of communicator.
Definition comm.F90:53
subroutine comm_init
Definition comm.F90:60
Compression.
Definition cpr.f90:34
subroutine, public cpr_free(cpr)
Deallocate coefficients.
Definition cpr.f90:109
Implements type data_streamer_t.
subroutine, public device_add2(a_d, b_d, n)
Vector addition .
subroutine, public device_addcol3(a_d, b_d, c_d, n)
Returns .
subroutine, public device_col2(a_d, b_d, n)
Vector multiplication .
subroutine, public device_add2s1(a_d, b_d, c1, n)
subroutine, public device_rzero(a_d, n)
Zero a real vector.
real(kind=rp) function, public device_vlsc3(u_d, v_d, w_d, n)
Compute multiplication sum .
subroutine, public device_rone(a_d, n)
Set all elements to one.
subroutine, public device_add2s2(a_d, b_d, c1, n)
Vector addition with scalar multiplication (multiplication on first argument)
subroutine, public device_invcol1(a_d, n)
Invert a vector .
subroutine, public device_col3(a_d, b_d, c_d, n)
Vector multiplication with 3 vectors .
subroutine, public device_cadd(a_d, c, n)
Add a scalar to vector .
subroutine, public device_vdot3(dot_d, u1_d, u2_d, u3_d, v1_d, v2_d, v3_d, n)
Compute a dot product (3-d version) assuming vector components etc.
subroutine, public device_cmult2(a_d, b_d, c, n)
Multiplication by constant c .
subroutine, public device_cmult(a_d, c, n)
Multiplication by constant c .
subroutine, public device_absval(a_d, n)
subroutine, public device_masked_copy(a_d, b_d, mask_d, n, m)
Copy a masked vector .
subroutine, public device_add2s2_many(y_d, x_d_d, a_d, j, n)
subroutine, public device_cfill_mask(a_d, c, size, mask_d, mask_size)
Fill a constant to a masked vector. .
real(kind=rp) function, public device_glsc2(a_d, b_d, n)
Weighted inner product .
subroutine, public device_sub3(a_d, b_d, c_d, n)
Vector subtraction .
real(kind=rp) function, public device_glsc3(a_d, b_d, c_d, n)
Weighted inner product .
subroutine, public device_add3(a_d, b_d, c_d, n)
Vector addition .
real(kind=rp) function, public device_glsum(a_d, n)
Sum a vector of length n.
subroutine, public device_cadd2(a_d, b_d, c, n)
Add a scalar to vector .
subroutine, public device_copy(a_d, b_d, n)
Copy a vector .
subroutine, public device_add3s2(a_d, b_d, c_d, c1, c2, n)
Returns .
subroutine, public device_subcol3(a_d, b_d, c_d, n)
Returns .
subroutine, public device_glsc3_many(h, w_d, v_d_d, mult_d, j, n)
subroutine, public device_sub2(a_d, b_d, n)
Vector substraction .
subroutine, public device_cfill(a_d, c, n)
Set all elements to a constant c .
subroutine, public device_addcol4(a_d, b_d, c_d, d_d, n)
Returns .
subroutine, public device_invcol2(a_d, b_d, n)
Vector division .
subroutine, public device_addsqr2s2(a_d, b_d, c1, n)
Returns .
Device abstraction, common interface for various accelerators.
Definition device.F90:34
subroutine, public device_finalize
Definition device.F90:137
integer function, public device_count()
Return the number of available devices.
Definition device.F90:166
subroutine, public device_name(name)
Definition device.F90:153
subroutine, public device_init
Definition device.F90:122
Defines a dirichlet boundary condition.
Definition dirichlet.f90:34
Defines a mapping of the degrees of freedom.
Definition dofmap.f90:35
subroutine, public drag_torque_zone(dgtq, tstep, zone, center, s11, s22, s33, s12, s13, s23, p, coef, visc)
Some functions to calculate the lift/drag and torque Calculation can be done on a zone,...
subroutine, public drag_torque_facet(dgtq, xm0, ym0, zm0, center, s11, s22, s33, s12, s13, s23, pm1, visc, f, e, coef, xh)
Calculate drag and torque over a facet.
subroutine, public drag_torque_pt(dgtq, x, y, z, center, s11, s22, s33, s12, s13, s23, p, n1, n2, n3, v)
Calculate drag and torque from one point.
Defines inflow dirichlet conditions.
Defines user dirichlet condition for a scalar field.
Defines a registry for storing solution fields.
type(field_registry_t), target, public neko_field_registry
Global field registry.
Defines a field.
Definition field.f90:34
Module for file I/O operations.
Definition file.f90:34
Computes various statistics for the fluid fields. We use the Reynolds decomposition for a field u = ...
Implements the fluid_user_source_term_t type.
Gather-scatter.
Implements global_interpolation given a dofmap.
Implements a hash table ADT.
Definition htable.f90:36
Job control.
Definition jobctrl.f90:34
logical function, public jobctrl_time_limit()
Check if the job's time limit has been reached.
Definition jobctrl.f90:107
real(kind=rp) function, public jobctrl_jobtime()
Returns a job's time in seconds relative to the first call.
Definition jobctrl.f90:126
subroutine, public jobctrl_init()
Initialize jobctrl.
Definition jobctrl.f90:55
Utilities for retrieving parameters from the case files.
Implements the base abstract type for Krylov solvers plus helper types.
Definition krylov.f90:34
Logging routines.
Definition log.f90:34
integer, parameter, public neko_log_quiet
Always logged.
Definition log.f90:67
type(log_t), public neko_log
Global log stream.
Definition log.f90:65
Creates a 1d GLL point map along a specified direction based on the connectivity in the mesh.
Definition map_1d.f90:3
Maps a 3D dofmap to a 2D spectral element grid.
Definition map_2d.f90:3
NEKTON map.
Definition map.f90:3
Definition math.f90:60
subroutine, public cmult(a, c, n)
Multiplication by constant c .
Definition math.f90:310
subroutine, public cmult2(a, b, c, n)
Multiplication by constant c .
Definition math.f90:700
subroutine, public row_zero(a, m, n, e)
Sets row e to 0 in matrix a.
Definition math.f90:216
subroutine, public invcol2(a, b, n)
Vector division .
Definition math.f90:714
real(kind=rp) function, public vlsc2(u, v, n)
Compute multiplication sum .
Definition math.f90:572
real(kind=rp), parameter, public pi
Definition math.f90:75
real(kind=rp) function, public glsc3(a, b, c, n)
Weighted inner product .
Definition math.f90:894
subroutine, public ascol5(a, b, c, d, e, n)
Returns .
Definition math.f90:829
subroutine, public invers2(a, b, n)
Compute inverted vector .
Definition math.f90:499
subroutine, public cadd2(a, b, s, n)
Add a scalar to vector .
Definition math.f90:334
subroutine, public cadd(a, s, n)
Add a scalar to vector .
Definition math.f90:322
subroutine, public addsqr2s2(a, b, c1, n)
Returns .
Definition math.f90:686
real(kind=rp) function, public glsc4(a, b, c, d, n)
Definition math.f90:913
subroutine, public add2s1(a, b, c1, n)
Vector addition with scalar multiplication (multiplication on first argument)
Definition math.f90:657
real(kind=rp) function, public glsc2(a, b, n)
Weighted inner product .
Definition math.f90:875
subroutine, public subcol3(a, b, c, n)
Returns .
Definition math.f90:755
subroutine, public rone(a, n)
Set all elements to one.
Definition math.f90:227
subroutine, public x_update(a, b, c, c1, c2, n)
Returns .
Definition math.f90:860
subroutine, public add3(a, b, c, n)
Vector addition .
Definition math.f90:599
integer function, public glimin(a, n)
Min of an integer vector of length n.
Definition math.f90:421
real(kind=rp) function, public glsum(a, n)
Sum a vector of length n.
Definition math.f90:359
subroutine, public sub3(a, b, c, n)
Vector subtraction .
Definition math.f90:641
subroutine, public addcol4(a, b, c, d, n)
Returns .
Definition math.f90:814
subroutine, public add2(a, b, n)
Vector addition .
Definition math.f90:586
subroutine, public cfill(a, c, n)
Set all elements to a constant c .
Definition math.f90:347
subroutine, public absval(a, n)
Take the absolute value of an array.
Definition math.f90:1178
subroutine, public invcol3(a, b, c, n)
Invert a vector .
Definition math.f90:486
subroutine, public add3s2(a, b, c, c1, c2, n)
Returns .
Definition math.f90:769
subroutine, public subcol4(a, b, c, d, n)
Returns .
Definition math.f90:785
subroutine, public addcol3(a, b, c, n)
Returns .
Definition math.f90:800
subroutine, public invcol1(a, n)
Invert a vector .
Definition math.f90:474
subroutine, public masked_copy(a, b, mask, n, m)
Copy a masked vector .
Definition math.f90:257
subroutine, public chsign(a, n)
Change sign of vector .
Definition math.f90:439
subroutine, public col2(a, b, n)
Vector multiplication .
Definition math.f90:728
subroutine, public izero(a, n)
Zero an integer vector.
Definition math.f90:205
real(kind=rp) function, public glmax(a, n)
Max of a vector of length n.
Definition math.f90:376
subroutine, public copy(a, b, n)
Copy a vector .
Definition math.f90:238
subroutine, public add4(a, b, c, d, n)
Vector addition .
Definition math.f90:613
subroutine, public col3(a, b, c, n)
Vector multiplication with 3 vectors .
Definition math.f90:741
subroutine, public vdot3(dot, u1, u2, u3, v1, v2, v3, n)
Compute a dot product (3-d version) assuming vector components etc.
Definition math.f90:544
subroutine, public rzero(a, n)
Zero a real vector.
Definition math.f90:194
subroutine, public vdot2(dot, u1, u2, v1, v2, n)
Compute a dot product (2-d version) assuming vector components etc.
Definition math.f90:530
real(kind=rp) function, public vlmin(vec, n)
minimun value of a vector of length n
Definition math.f90:462
real(kind=rp) function, public vlmax(vec, n)
maximum value of a vector of length n
Definition math.f90:451
integer function, public glimax(a, n)
Max of an integer vector of length n.
Definition math.f90:391
subroutine, public sub2(a, b, n)
Vector substraction .
Definition math.f90:628
subroutine, public cfill_mask(a, c, size, mask, mask_size)
Fill a constant to a masked vector. .
Definition math.f90:296
subroutine, public add2s2(a, b, c1, n)
Vector addition with scalar multiplication (multiplication on second argument)
Definition math.f90:672
real(kind=rp) function, public glmin(a, n)
Min of a vector of length n.
Definition math.f90:406
subroutine, public vcross(u1, u2, u3, v1, v2, v3, w1, w2, w3, n)
Compute a cross product assuming vector components etc.
Definition math.f90:513
real(kind=rp) function, public vlsc3(u, v, w, n)
Compute multiplication sum .
Definition math.f90:558
subroutine, public p_update(a, b, c, c1, c2, n)
Returns .
Definition math.f90:845
Collection of vector field operations operating on and . Note that in general the indices and ....
Definition mathops.f90:65
subroutine, public opcolv(a1, a2, a3, c, gdim, n)
Definition mathops.f90:97
subroutine, public opadd2col(a1, a2, a3, b1, b2, b3, c, n, gdim)
Definition mathops.f90:165
subroutine, public opchsign(a1, a2, a3, gdim, n)
for and .
Definition mathops.f90:76
subroutine, public opadd2cm(a1, a2, a3, b1, b2, b3, c, n, gdim)
Definition mathops.f90:142
subroutine, public opcolv3c(a1, a2, a3, b1, b2, b3, c, d, n, gdim)
Definition mathops.f90:119
Defines a matrix.
Definition matrix.f90:34
Defines a mesh field.
Defines a mesh.
Definition mesh.f90:34
Wrapper for all matrix-matrix product implementations.
subroutine, public mxm(a, n1, b, n2, c, n3)
Compute matrix-matrix product for contiguously packed matrices A,B, and C.
Build configurations.
integer, parameter neko_bcknd_sx
integer, parameter neko_bcknd_hip
character(len=80), parameter neko_build_info
character(len=10), parameter neko_version
integer, parameter neko_bcknd_device
integer, parameter neko_bcknd_opencl
integer, parameter neko_bcknd_cuda
integer, parameter neko_bcknd_xsmm
MPI derived types.
Definition mpi_types.f90:34
subroutine, public neko_mpi_types_init
Define all MPI derived types.
Definition mpi_types.f90:86
subroutine, public neko_mpi_types_free
Deallocate all derived MPI types.
Master module.
Definition neko.f90:34
subroutine neko_finalize(c)
Finalize Neko.
Definition neko.f90:213
subroutine neko_job_info(date, time)
Display job information, number of MPI ranks, CPU type and selected hardware backend.
Definition neko.f90:234
subroutine neko_init(c)
Initialise Neko.
Definition neko.f90:134
integer, parameter, public qp
Definition num_types.f90:10
integer, parameter, public dp
Definition num_types.f90:9
integer, parameter, public sp
Definition num_types.f90:8
integer, parameter, public rp
Global precision used in computations.
Definition num_types.f90:12
Operators.
Definition operators.f90:34
subroutine, public ortho(x, glb_n_points, n)
Othogonalize with regard to vector (1,1,1,1,1,1...,1)^T.
real(kind=rp) function, public cfl(dt, u, v, w, xh, coef, nelv, gdim)
subroutine, public opgrad(ux, uy, uz, u, coef, es, ee)
Compute the weak gradient of a scalar field, i.e. the gradient multiplied by the mass matrix.
subroutine, public div(res, ux, uy, uz, coef)
Compute the divergence of a vector field.
subroutine, public conv1(du, u, vx, vy, vz, xh, coef, es, ee)
Compute the advection term.
subroutine, public grad(ux, uy, uz, u, coef)
Compute the gradient of a scalar field.
subroutine, public curl(w1, w2, w3, u1, u2, u3, work1, work2, coef, event)
subroutine, public strain_rate(s11, s22, s33, s12, s13, s23, u, v, w, coef)
Compute the strain rate tensor, i.e 0.5 * du_i/dx_j + du_j/dx_i.
subroutine, public lambda2op(lambda2, u, v, w, coef)
Compute the Lambda2 field for a given velocity field.
subroutine, public cdtp(dtx, x, dr, ds, dt, coef, es, ee)
Apply D^T to a scalar field, where D is the derivative matrix.
subroutine, public dudxyz(du, u, dr, ds, dt, coef)
Compute derivative of a scalar field along a single direction.
Definition operators.f90:78
Implements output_controller_t
Defines an output.
Definition output.f90:34
Interface to ParMETIS.
Definition parmetis.F90:34
subroutine, public parmetis_partmeshkway(msh, parts, weights, nprts)
Compute a k-way partitioning of a mesh msh.
Definition parmetis.F90:111
subroutine, public parmetis_partgeom(msh, parts)
Compute a k-way partitioning of a mesh msh using a coordinated-based space-filing curves method.
Definition parmetis.F90:182
Routines to interpolate fields on a given element on a point in that element with given r,...
type(point_zone_registry_t), target, public neko_point_zone_registry
Global point_zone registry.
Implements a point.
Definition point.f90:35
Implements probes.
Definition probes.F90:37
Project x onto X, the space of old solutions and back again.
Runtime statistics.
type(runtime_stats_t), public neko_rt_stats
Implements the scalar_user_source_term_t type.
Defines a registry for storing and requesting temporary fields This can be used when you have a funct...
type(scratch_registry_t), target, public neko_scratch_registry
Global scratch registry.
Interface to signal handler.
Definition signal.f90:34
Contains the simcomp_executor_t type.
type(simcomp_executor_t), target, public neko_simcomps
Global variable for the simulation component driver.
Simulation components are objects that encapsulate functionality that can be fit to a particular comp...
Simulation driver.
subroutine, public neko_solve(c)
Main driver to solve a case C.
Defines a function space.
Definition space.f90:34
integer, parameter, public gll
Definition space.f90:48
integer, parameter, public gj
Definition space.f90:48
integer, parameter, public gl
Definition space.f90:48
LIBRARY ROUTINES FOR SPECTRAL METHODS.
Definition speclib.f90:148
Implements type spectral_error_t.
Implements a dynamic stack ADT.
Definition stack.f90:35
Interface to system information routines.
Definition system.f90:34
subroutine, public system_cpu_name(name)
Retrieve the system's CPU name (type)
Definition system.f90:59
Tensor operations.
Definition tensor.f90:61
Implements type time_interpolator_t.
Implements a n-tuple.
Definition tuple.f90:34
Interfaces for user interaction with NEKO.
Definition user_intf.f90:34
Implements an unordered set ADT.
Definition uset.f90:35
Utilities.
Definition utils.f90:35
subroutine, public filename_suffix(fname, suffix)
Extract a filename's suffix.
Definition utils.f90:70
Defines a vector.
Definition vector.f90:34
Defines a zero-valued Dirichlet boundary condition.
Base type for a matrix-vector product providing .
Definition ax.f90:43
Base type for a boundary condition.
Definition bc.f90:57
A list of allocatable `bc_t`. Follows the standard interface of lists.
Definition bc_list.f90:47
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
Definition coef.f90:55
include information needed for compressing fields
Definition cpr.f90:51
Provides access to data streaming by interfacing with c++ ADIOS2 subroutines.
Generic Dirichlet boundary condition on .
Definition dirichlet.f90:47
field_ptr_t, To easily obtain a pointer to a field
Definition field.f90:81
User defined dirichlet condition, for which the user can work with an entire field....
Extension of the user defined dirichlet condition field_dirichlet
field_list_t, To be able to group fields together
Type that encapsulates a mapping from each gll point in the mesh to its corresponding (global) GLL po...
Definition map_1d.f90:25
Abstract type defining an output type.
Definition output.f90:41
Centralized controller for a list of outputs.
A point in with coordinates .
Definition point.f90:43
Field interpolator to arbitrary points within an element. Tailored for experimentation,...
Base abstract type for point zones.
Base abstract class for simulation components.
A helper type that is needed to have an array of polymorphic objects.
The function space for the SEM solution fields.
Definition space.f90:62
Provides a tool to perform interpolation in time.
Zero-valued Dirichlet boundary condition. Used for no-slip walls, but also for various auxillary cond...