• R/O
  • SSH

ateles: コミット

Adaptive Tree based Efficient and Lithe Equation Solver | DG solver of APES


コミットメタ情報

リビジョンff93ce333570683160fcf9d63f766ca78de9e932 (tree)
日時2019-09-05 23:48:13
作者Harald Klimach <harald.klimach@uni-...>
コミッターHarald Klimach

ログメッセージ

Bugfix for 3D Navier-Stokes with oversampling.

There was a bug in the viscous fluxes, when oversampling was larger than 1.
This should be fixed now.

変更サマリ

差分

diff -r 238480729f8a -r ff93ce333570 .hgsubstate
--- a/.hgsubstate Fri Aug 23 05:46:53 2019 +0200
+++ b/.hgsubstate Thu Sep 05 16:48:13 2019 +0200
@@ -1,2 +1,2 @@
1-fc902328e5b172cf0656e7f195fa436afd818e64 polynomials
2-9a79a2b03f048ac173bc5b9e6408869bf9adc9d9 treelm
1+f69c17182fb8f6149ce4b0273290562c59141345 polynomials
2+7b3e371c26eb7b6a967cef0482c4f628c013c6b3 treelm
diff -r 238480729f8a -r ff93ce333570 recheck.py
--- a/recheck.py Fri Aug 23 05:46:53 2019 +0200
+++ b/recheck.py Thu Sep 05 16:48:13 2019 +0200
@@ -1640,3 +1640,48 @@
16401640 val_output_filename = 'matml_reflected_pulse_microphone_p00000.res',
16411641 )
16421642 )
1643+
1644+### ATELES JOB 54
1645+shepherd_jobs.append(
1646+ dict(
1647+ executable = None,
1648+ mail = False,
1649+ template = fluiddir + 'shear-layer/hyperfun.lua',
1650+ extension = 'lua',
1651+ run_exec = False,
1652+ abort_failure = abort,
1653+ prefix = 'shearlayer_modg_P8_valid',
1654+ label = 'shearlayer_modg_P8_valid_hyperfun',
1655+ )
1656+)
1657+shepherd_jobs.append(
1658+ dict(
1659+ executable = seeder_exe,
1660+ template = fluiddir + 'shear-layer/seeder.lua',
1661+ extension = 'lua',
1662+ run_exec = True,
1663+ abort_failure = abort,
1664+ create_subdir = ['mesh'],
1665+ depend = ['shearlayer_modg_P8_valid_hyperfun'],
1666+ label = 'shearlayer_modg_P8_valid_seeder',
1667+ mail = False
1668+ )
1669+)
1670+shepherd_jobs.append(
1671+ dict(
1672+ executable = ateles_exe,
1673+ solver_name = 'ateles',
1674+ template = fluiddir + 'shear-layer/ateles_modg_P8.lua',
1675+ extension = 'lua',
1676+ run_exec = True,
1677+ abort_failure = abort,
1678+ additional_params = dict(testsuite_path=atldir),
1679+ depend = ['shearlayer_modg_P8_valid_seeder'],
1680+ label = 'shearlayer_modg_P8_valid_ateles',
1681+ attachment = True,
1682+ validation = True,
1683+ val_method = 'difference',
1684+ val_ref_path = fluiddir + 'shear-layer/ref_shear_layer_modg_probe_momentum_P8_p00000.res',
1685+ val_output_filename = 'shear_layer_modg_probe_momentum_P8_p00000.res',
1686+ )
1687+)
diff -r 238480729f8a -r ff93ce333570 source/atl_initialize_module.f90
--- a/source/atl_initialize_module.f90 Fri Aug 23 05:46:53 2019 +0200
+++ b/source/atl_initialize_module.f90 Thu Sep 05 16:48:13 2019 +0200
@@ -85,7 +85,8 @@
8585 use atl_varSys_module, only: atl_varSys_solverData_type, &
8686 & atl_init_varSys_solverData, &
8787 & atl_set_stFun_getElement, &
88- & atl_create_fortranVar
88+ & atl_create_fortranVar, &
89+ & atl_varSys_load_user
8990 use atl_operator_module, only: atl_set_opVar_getElement
9091 use atl_boundary_module, only: atl_fill_BCIndex
9192 use atl_penalization_module, only: atl_init_penalization
@@ -294,9 +295,10 @@
294295 !
295296 ! Load the user defined variables from the configuration file and store them
296297 ! in a temporary list.
297- call tem_variable_load( me = userVars, &
298- & conf = params%general%solver%conf(1), &
299- & vError = vError )
298+ call tem_variable_load( me = userVars, &
299+ & conf = params%general%solver%conf(1), &
300+ & load_solvervar = atl_varSys_load_user, &
301+ & vError = vError )
300302
301303 ! take the temporary list with the lua variables and try to add them to the
302304 ! variable system.
diff -r 238480729f8a -r ff93ce333570 source/atl_legpolyvar_module.f90
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/source/atl_legpolyvar_module.f90 Thu Sep 05 16:48:13 2019 +0200
@@ -0,0 +1,360 @@
1+! Copyright (c) 2019 Harald Klimach <harald.klimach@uni-siegen.de>
2+!
3+! Permission to use, copy, modify, and distribute this software for any
4+! purpose with or without fee is hereby granted, provided that the above
5+! copyright notice and this permission notice appear in all copies.
6+!
7+! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
8+! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9+! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
10+! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11+! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12+! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13+! OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14+! **************************************************************************** !
15+
16+!> Definition of a spatial function based on a polynomial description.
17+!!
18+!! This module provides a variable that can be used to describe a function with
19+!! a Legendre series, as found in single elements of the solver.
20+!! The Legendre modes are read from a file in restart format, but only a single
21+!! polynomial can be considered (not a mesh).
22+module atl_legpolyvar_module
23+ use iso_c_binding, only: c_ptr, c_null_ptr, c_f_pointer, c_loc
24+ use mpi
25+ use aotus_module, only: flu_State, aot_get_val
26+
27+ use env_module, only: rk, rk_mpi, pathLen, labelLen, newunit
28+ use tem_aux_module, only: tem_abort
29+ use tem_logging_module, only: logUnit
30+ use tem_operation_var_module, only: tem_get_new_varSys_data_ptr, &
31+ & tem_free_varSys_data_ptr
32+ use tem_variable_module, only: tem_variable_type
33+ use tem_varSys_module, only: tem_varSys_type, &
34+ & tem_varSys_solverData_evalElem_type, &
35+ & tem_varSys_proc_point, &
36+ & tem_varSys_proc_element, &
37+ & tem_varSys_proc_setParams, &
38+ & tem_varSys_proc_getParams, &
39+ & tem_varSys_proc_setupIndices, &
40+ & tem_varSys_proc_getValOfIndex, &
41+ & tem_varSys_append_derVar
42+
43+ use ply_dof_module, only: Q_space, P_space, ply_degree_2dof
44+
45+ implicit none
46+
47+ private
48+
49+ !> Configuration for a legpolyvar.
50+ !!
51+ !! The legpolyvar lets you describe a spatial function with the help of a
52+ !! multidimensional Legendre polynomial series, as found as basis functions
53+ !! in the solver elements.
54+ !!
55+ !! The Legendre modes are read from a file in restart format (all modes
56+ !! written unformatted consecutively into a file).
57+ type, public :: atl_legpolyvar_type
58+ !> Polynomial space of the multidimensional polynomial (Q or P)
59+ integer :: poly_space
60+
61+ !> Dimensionality of the polynomial (needs to be between 1 and 3).
62+ !!
63+ !! onedimensional polynomial series only vary in X,
64+ !! twodimensional in X and Y.
65+ integer :: nDims
66+
67+ !> Maximal polynomial degree in the polynomial series.
68+ integer :: degree
69+
70+ !> State component in the given file for the data to read.
71+ !!
72+ !! The polynomial definition in the file may contain multiple quantities.
73+ !! iComp specifies, which of them to use for this function.
74+ integer :: iComp
75+
76+ !> Position of the origin corner for the box, the Legendre polynomials
77+ !! are to live in.
78+ real(kind=rk) :: origin(3)
79+
80+ !> Extent of the box the Legendre polynomial series is defined in.
81+ real(kind=rk) :: extent
82+
83+ !> Name of the file to read the polynomial coefficients from.
84+ !!
85+ !! This file needs to contain the polynomial data in the same format as
86+ !! in the Ateles restart files, but only a single element is considered.
87+ !! Layout of the data is given by poly_space, nDims and degree.
88+ character(len=pathLen) :: filename
89+ end type atl_legpolyvar_type
90+
91+ public :: atl_legpolyvar_load
92+ public :: atl_legpolyvar_append
93+
94+
95+ ! Private parts
96+
97+ type polydata_type
98+ !> Maximal polynomial degree in the polynomial series.
99+ integer :: degree
100+
101+ !> Position of the origin corner for the box, the Legendre polynomials
102+ !! are to live in.
103+ real(kind=rk) :: origin(3)
104+
105+ !> Extent of the box the Legendre polynomial series is defined in.
106+ real(kind=rk) :: extent
107+
108+ !> Legendre modes.
109+ real(kind=rk), allocatable :: modes(:)
110+ end type polydata_type
111+
112+
113+contains
114+
115+
116+ ! ************************************************************************* !
117+ !> Load the definition of a Legendre polynomial variable from a Lua script.
118+ subroutine atl_legpolyvar_load(L, parent, legpolyvar)
119+ !> Lua script to load the polyvar definition from.
120+ type(flu_State) :: L
121+
122+ !> Parent table in the Lua script to read the variable data from.
123+ integer, intent(in) :: parent
124+
125+ !> Resulting Legendre polynomial description to fill.
126+ type(atl_legpolyvar_type), intent(out) :: legpolyvar
127+ ! --------------------------------------------------------------------- !
128+ integer :: iError
129+ integer :: vError(3)
130+ character :: poly_space_char
131+ ! --------------------------------------------------------------------- !
132+
133+ call aot_get_val( L = L, &
134+ & thandle = parent, &
135+ & key = 'ndims', &
136+ & val = legpolyvar%nDims, &
137+ & ErrCode = iError )
138+
139+ if (iError /= 0) then
140+ write(logUnit(1),*) 'Could not read ndims for legpolyvar.'
141+ call tem_abort('ERROR in reading legpolyvar definition.')
142+ end if
143+
144+ call aot_get_val( L = L, &
145+ & thandle = parent, &
146+ & key = 'degree', &
147+ & val = legpolyvar%degree, &
148+ & ErrCode = iError )
149+
150+ if (iError /= 0) then
151+ write(logUnit(1),*) 'Could not read degree for legpolyvar.'
152+ call tem_abort('ERROR in reading legpolyvar definition.')
153+ end if
154+
155+ call aot_get_val( L = L, &
156+ & thandle = parent, &
157+ & key = 'poly_space', &
158+ & val = poly_space_char, &
159+ & ErrCode = iError )
160+
161+ if (iError /= 0) then
162+ write(logUnit(1),*) 'Could not read poly_space for legpolyvar.'
163+ call tem_abort('ERROR in reading legpolyvar definition.')
164+ end if
165+
166+ select case(poly_space_char)
167+ case ('q','Q')
168+ legpolyvar%poly_space = Q_space
169+ case ('p','P')
170+ legpolyvar%poly_space = P_space
171+ case default
172+ write(logUnit(1),*) 'Unknown polynomial space: ', poly_space_char
173+ write(logUnit(1),*) 'Should be either Q or P!'
174+ call tem_abort('ERROR in reading legpolyvar definition.')
175+ end select
176+
177+ call aot_get_val( L = L, &
178+ & thandle = parent, &
179+ & key = 'component', &
180+ & val = legpolyvar%iComp, &
181+ & ErrCode = iError )
182+
183+ if (iError /= 0) then
184+ write(logUnit(1),*) 'Could not read component for legpolyvar.'
185+ call tem_abort('ERROR in reading legpolyvar definition.')
186+ end if
187+
188+ call aot_get_val( L = L, &
189+ & thandle = parent, &
190+ & key = 'origin', &
191+ & val = legpolyvar%origin, &
192+ & default = [0.0_rk, 0.0_rk, 0.0_rk], &
193+ & ErrCode = vError )
194+
195+ if (any(vError(:legpolyvar%nDims) /= 0)) then
196+ write(logUnit(1),*) 'Could not read origin for legpolyvar.'
197+ call tem_abort('ERROR in reading legpolyvar definition.')
198+ end if
199+
200+ call aot_get_val( L = L, &
201+ & thandle = parent, &
202+ & key = 'extent', &
203+ & val = legpolyvar%extent, &
204+ & ErrCode = iError )
205+
206+ if (iError /= 0) then
207+ write(logUnit(1),*) 'Could not read extent for legpolyvar.'
208+ call tem_abort('ERROR in reading legpolyvar definition.')
209+ end if
210+
211+ call aot_get_val( L = L, &
212+ & thandle = parent, &
213+ & key = 'filename', &
214+ & val = legpolyvar%filename, &
215+ & ErrCode = iError )
216+
217+ if (iError /= 0) then
218+ write(logUnit(1),*) 'Could not read filename for legpolyvar.'
219+ call tem_abort('ERROR in reading legpolyvar definition.')
220+ end if
221+
222+
223+ end subroutine atl_legpolyvar_load
224+
225+
226+ subroutine atl_legpolyvar_append(var, varSys, pos, solverData_evalElem)
227+ !> Data describing the variable to append (needs to be a legpolyvar).
228+ class(tem_variable_type), intent(in) :: var
229+
230+ !> Variable system to append the variable to.
231+ type(tem_varSys_type), intent(inout) :: varsys
232+
233+ !> Position of the appended variable in the system.
234+ integer, optional, intent(out) :: pos
235+
236+ !> A setter to allow the caller to define a routine for the construction
237+ !! of an element representation.
238+ type(tem_varSys_solverData_evalElem_type), &
239+ & optional, intent(in) :: solverData_evalElem
240+ ! -------------------------------------------------------------------- !
241+ procedure(tem_varSys_proc_point), pointer :: get_point => NULL()
242+ procedure(tem_varSys_proc_element), pointer :: get_element => NULL()
243+ procedure(tem_varSys_proc_setParams), pointer :: set_params => NULL()
244+ procedure(tem_varSys_proc_getParams), pointer :: get_params => NULL()
245+ procedure(tem_varSys_proc_setupIndices), pointer :: &
246+ & setup_indices => NULL()
247+ procedure(tem_varSys_proc_getValOfIndex), pointer :: &
248+ & get_valOfIndex => NULL()
249+ type(atl_legpolyvar_type), pointer :: legpolyvar
250+ type(polydata_type), pointer :: polydat
251+ type(c_ptr) :: method_data = c_null_ptr
252+ type(c_ptr) :: c_polydat = c_null_ptr
253+ character(len=labelLen) :: input_varname(0)
254+ integer :: input_varIndex(0)
255+ integer :: addedPos
256+ logical :: wasAdded
257+ ! -------------------------------------------------------------------- !
258+
259+ call c_f_pointer(var%solver_specifics, legpolyvar)
260+
261+ polydat%degree = legpolyvar%degree
262+ polydat%origin = legpolyvar%origin
263+ polydat%extent = legpolyvar%extent
264+
265+ c_polydat = c_loc(polydat)
266+
267+ method_data = tem_get_new_varSys_data_ptr(c_polydat)
268+
269+ call tem_varSys_append_derVar( &
270+ & me = varSys, &
271+ & varname = var%label, &
272+ & opertype = var%opertype, &
273+ & nComponents = 1, &
274+ & input_varname = input_varname, &
275+ & input_varIndex = input_varIndex, &
276+ & method_data = method_data, &
277+ & get_point = get_point, &
278+ & get_element = get_element, &
279+ & set_params = set_params, &
280+ & get_params = get_params, &
281+ & setup_indices = setup_indices, &
282+ & get_valOfIndex = get_valOfIndex, &
283+ & pos = addedPos, &
284+ & wasAdded = wasAdded )
285+
286+ if (wasAdded) then
287+ call read_legpolyvar_modes( legpolyvar = legpolyvar, &
288+ & modes = polydat%modes )
289+ if (present(solverData_evalElem)) then
290+ call solverData_evalElem%opVar_setter(varSys%method%val(addedPos))
291+ end if
292+ write(logUnit(8),*) 'Successfully appended variable "' &
293+ & // trim(var%label) // '" to the variable system'
294+ else
295+ deallocate(polydat)
296+ call tem_free_varSys_data_ptr(method_data)
297+ if (addedPos < 1) then
298+ write(logUnit(7),*) 'WARNING: variable '//trim(var%label)// &
299+ & ' is not added to the variable system!'
300+ end if
301+ end if
302+
303+ if (present(pos)) pos = addedPos
304+ end subroutine atl_legpolyvar_append
305+
306+
307+ ! Private parts
308+
309+ subroutine read_legpolyvar_modes( legpolyvar, modes )
310+ type(atl_legpolyvar_type), intent(in) :: legpolyvar
311+ real(kind=rk), allocatable, intent(out) :: modes(:)
312+ ! -------------------------------------------------------------------- !
313+ integer :: iError
314+ integer :: myrank
315+ integer :: funit
316+ integer :: polyrecl
317+ integer :: ndofs
318+ ! -------------------------------------------------------------------- !
319+
320+ call MPI_Comm_rank(MPI_COMM_WORLD, myrank, iError)
321+
322+ ndofs = ply_degree_2dof( deg = legpolyvar%degree, &
323+ & space = legpolyvar%poly_space, &
324+ & ndims = legpolyvar%ndims )
325+ allocate(modes(ndofs))
326+
327+ if (myrank == 0) then
328+ inquire(iolength=polyrecl) modes
329+ funit = newunit()
330+ open( file = trim(legpolyvar%filename), &
331+ & unit = funit, &
332+ & access = 'DIRECT', &
333+ & action = 'READ', &
334+ & form = 'UNFORMATTED', &
335+ & recl = polyrecl, &
336+ & iostat = iError )
337+
338+ if (iError == 0) then
339+ read(unit=funit, rec=legpolyvar%iComp, iostat=iError) modes
340+ if (iError /= 0) then
341+ write(*,*) 'ERROR while trying to read ', ndofs, ' modes from ' &
342+ & // trim(legpolyvar%filename)
343+ write(*,*) 'Attempted to read record ', legpolyvar%iComp
344+ end if
345+ else
346+ write(*,*) 'ERROR in opening file '//trim(legpolyvar%filename)
347+ end if
348+
349+ if (iError /= 0) then
350+ call tem_abort('ERROR while reading data for legpolyvar from file.')
351+ end if
352+
353+ close(funit)
354+ end if
355+
356+ call MPI_Bcast(modes, ndofs, rk_mpi, 0, MPI_COMM_WORLD, iError)
357+
358+ end subroutine read_legpolyvar_modes
359+
360+end module atl_legpolyvar_module
diff -r 238480729f8a -r ff93ce333570 source/atl_varSys_module.fpp
--- a/source/atl_varSys_module.fpp Fri Aug 23 05:46:53 2019 +0200
+++ b/source/atl_varSys_module.fpp Thu Sep 05 16:48:13 2019 +0200
@@ -1,6 +1,6 @@
11 ! Copyright (c) 2014-2018 Peter Vitt <peter.vitt2@uni-siegen.de>
22 ! Copyright (c) 2014-2016 Nikhil Anand <nikhil.anand@uni-siegen.de>
3-! Copyright (c) 2014, 2016, 2018 Harald Klimach <harald.klimach@uni-siegen.de>
3+! Copyright (c) 2014, 2016, 2018-2019 Harald Klimach <harald.klimach@uni-siegen.de>
44 ! Copyright (c) 2016-2017 Kannan Masilamani <kannan.masilamani@uni-siegen.de>
55 ! Copyright (c) 2016-2017 Verena Krupp <verena.krupp@uni-siegen.de>
66 ! Copyright (c) 2016-2017 Tobias Girresser <tobias.girresser@student.uni-siegen.de>
@@ -26,8 +26,10 @@
2626 module atl_varSys_module
2727
2828
29- use, intrinsic :: iso_c_binding, only: c_ptr, c_f_pointer, c_loc
30- use env_module, only: rk, long_k
29+ use, intrinsic :: iso_c_binding, only: c_ptr, c_f_pointer, c_loc, c_null_ptr
30+ use env_module, only: rk, long_k, labelLen
31+
32+ use aotus_module, only: flu_State, aot_get_val
3133
3234 use tem_logging_module, only: logUnit, lldebug
3335 use tem_varSys_module, only: tem_varSys_type, &
@@ -42,7 +44,8 @@
4244 use tem_topology_module, only: tem_IdOfCoord, &
4345 & tem_levelOf
4446 use tem_shape_module, only: tem_global_shape
45- use tem_variable_module, only: tem_variable_type
47+ use tem_variable_module, only: tem_variable_type, &
48+ & tem_append_solverVar_method
4649 use tem_aux_module, only: tem_abort
4750 use tem_grow_array_module, only: grw_intArray_type, &
4851 & append, init, truncate, destroy
@@ -69,6 +72,9 @@
6972 use atl_cube_elem_module, only: atl_cube_elem_type
7073 use atl_reference_element_module, only: atl_ref_in_elempos
7174 use atl_timer_module, only: atl_cpl_elemTimers
75+ use atl_legpolyvar_module, only: atl_legpolyvar_type, &
76+ & atl_legpolyvar_load, &
77+ & atl_legpolyvar_append
7278
7379 implicit none
7480
@@ -80,6 +86,7 @@
8086 public :: atl_varSys_getStateForPoint
8187 public :: atl_varSys_setupStateIndices
8288 public :: atl_varSys_getStateValofIndex
89+ public :: atl_varSys_load_user
8390 public :: atl_init_varSys_solverData
8491 public :: atl_get_new_varSys_data_ptr
8592 public :: atl_create_fortranVar
@@ -116,9 +123,15 @@
116123 type(treelmesh_type), pointer :: tree => null()
117124 end type atl_varSys_solverData_type
118125
126+ type atl_varSys_solverVar_type
127+ character(len=labelLen) :: vartype
128+ type(atl_legpolyvar_type) :: legpolyvar
129+ end type atl_varSys_solverVar_type
130+
119131
120132 contains
121133
134+
122135 ! ************************************************************************ !
123136 !> Routine to get a pointer to a new instance of atl_varSys_data_type to be
124137 !! used as method data for a variable in the variable system.
@@ -1087,4 +1100,55 @@
10871100 end subroutine atl_generic_fromConst_getElement
10881101 ! ************************************************************************ !
10891102
1103+
1104+ ! ************************************************************************ !
1105+ !> Method to load user defined variables from the configuration.
1106+ !!
1107+ !! This adds the possibility to load ateles specific variable types.
1108+ subroutine atl_varSys_load_user(L, parent, specifics, appender, iError)
1109+ !> Lua script to load the variable data from.
1110+ type(flu_State) :: L
1111+
1112+ !> Parent table in the Lua script to read the variable from.
1113+ integer, intent(in) :: parent
1114+
1115+ !> Data to read for the solver specific variable
1116+ type(c_ptr), intent(out) :: specifics
1117+
1118+ !> Function pointer to use for appending the solver variable.
1119+ procedure(tem_append_solverVar_method), pointer :: appender
1120+
1121+ !> Indication whether the attempted reading was successful.
1122+ integer, intent(out) :: iError
1123+ ! -------------------------------------------------------------------- !
1124+ type(atl_varSys_solverVar_type), pointer :: user_var
1125+ ! -------------------------------------------------------------------- !
1126+
1127+ appender => NULL()
1128+ specifics = c_null_ptr
1129+ allocate(user_var)
1130+
1131+ call aot_get_val( L = L, &
1132+ & thandle = parent, &
1133+ & val = user_var%varType, &
1134+ & ErrCode = iError, &
1135+ & default = 'none', &
1136+ & key = 'vartype' )
1137+
1138+ if (iError==0) then
1139+ select case (trim(user_var%varType))
1140+ case('legpoly')
1141+ call atl_legpolyvar_load( L = L, &
1142+ & parent = parent, &
1143+ & legpolyvar = user_var%legpolyvar )
1144+ appender => atl_legpolyvar_append
1145+ specifics = c_loc(user_var)
1146+ case default
1147+ deallocate(user_var)
1148+ iError = 1
1149+ end select
1150+ end if
1151+
1152+ end subroutine atl_varSys_load_user
1153+
10901154 end module atl_varSys_module
diff -r 238480729f8a -r ff93ce333570 source/filter/atl_stabilize_module.f90
--- a/source/filter/atl_stabilize_module.f90 Fri Aug 23 05:46:53 2019 +0200
+++ b/source/filter/atl_stabilize_module.f90 Thu Sep 05 16:48:13 2019 +0200
@@ -48,21 +48,16 @@
4848 & atl_cons_positivity_preserv_prp, &
4949 & atl_cheb_spectral_visc_prp, &
5050 & atl_covolume_prp
51- use atl_spectral_viscosity_module, only: atl_spectral_visc_type, &
52- & atl_exp_spectral_visc_prp, atl_poly_spectral_visc_prp
51+ use atl_spectral_viscosity_module, only: atl_spectral_visc_type, &
52+ & atl_exp_spectral_visc_prp, &
53+ & atl_poly_spectral_visc_prp
5354 use atl_positivity_preserv_module, only: atl_positivity_preserv_type
5455 use atl_cons_positivity_preserv_module, &
5556 & only: atl_cons_positivity_preserv_type
5657 use atl_equation_module, only: atl_equations_type
5758 use atl_eqn_euler_module, only: atl_euler_type
58- use ply_poly_project_module, only: ply_poly_project_type, &
59- & ply_poly_project_n2m, &
60- & ply_poly_project_m2n
61- use ply_oversample_module, only: ply_convert2oversample, &
62- & ply_convertFromoversample
63- use ply_polyBaseExc_module, only: ply_fpt_exec_striped, &
64- & assignment(=)
65- use atl_boundary_module, only: atl_level_boundary_type
59+ use atl_boundary_module, only: atl_level_boundary_type, &
60+ & atl_get_numBndElems
6661 use atl_bc_header_module, only: atl_boundary_type
6762 use atl_covolume_module, only: atl_covolume_type
6863 use atl_covolume_boundary_module, only: atl_set_covolume_bnd
@@ -81,6 +76,18 @@
8176 use atl_timer_module, only: atl_timerHandles
8277 use atl_materialPrp_module, only: atl_material_type
8378
79+ ! Polynomials modules
80+ use ply_poly_project_module, only: ply_poly_project_type, &
81+ & ply_poly_project_n2m, &
82+ & ply_poly_project_m2n
83+ use ply_oversample_module, only: ply_convert2oversample, &
84+ & ply_convertFromoversample
85+ use ply_polyBaseExc_module, only: ply_fpt_exec_striped, &
86+ & assignment(=)
87+ use ply_dof_module, only: ply_change_poly_space, &
88+ & Q_space, &
89+ & P_space
90+
8491 implicit none
8592 private
8693
@@ -129,7 +136,8 @@
129136 integer,intent(inout) :: commStateTimer
130137 type(atl_material_type), intent (in) :: material_list(minlevel:maxlevel)
131138 ! --------------------------------------------------------------------------
132- integer :: iLevel, iStab, nStabs, nElems
139+ integer :: iLevel, iStab, iDir
140+ integer :: nStabs, nElems, nScalars, nDofs, nTotal
133141 real(kind=rk) :: ref_order, recovery_order
134142 real(kind=rk) :: pressure, mach
135143 real(kind=rk), allocatable :: velocity(:)
@@ -137,6 +145,10 @@
137145 type(atl_adaptive_orders_type) :: adaptive_orders(minlevel:maxlevel)
138146 real(kind=rk), allocatable :: modalCoeffs(:,:)
139147 real(kind=rk), allocatable :: pointVal(:,:)
148+ type(atl_statedata_type), allocatable :: Q_statedata_list(:)
149+ type(atl_statedata_type), allocatable :: Q_statedata_stab_list(:,:)
150+ integer :: nBndStabElems(minLevel:maxLevel,1:3)
151+ integer :: maxPolyDeg
140152 ! --------------------------------------------------------------------------
141153
142154 call tem_startTimer( timerHandle = atl_timerHandles%stabalize )
@@ -570,43 +582,162 @@
570582 end do
571583
572584 case(atl_covolume_prp)
573- if(scheme_list(minlevel)%stabilization(iStab)%covolume%isAdaptive) then
574- call atl_covolume( &
575- & minlevel = minlevel, &
576- & maxlevel = maxlevel, &
577- & state = statedata_list, &
578- & state_stab = statedata_stab_list, &
579- & mesh = mesh_list, &
580- & filter = scheme_list(minlevel)%stabilization(iStab)&
581- & %covolume, &
582- & adaptive_orders = adaptive_orders, &
583- & scheme = scheme_list, &
584- & equation = equation, &
585- & tree = tree, &
586- & poly_proj = poly_proj_list, &
587- & poly_proj_pos = poly_proj_pos, &
588- & bc = bc, &
589- & boundary = boundary, &
590- & general = general, &
591- & commStateTimer = commStateTimer )
592- else
593- call atl_covolume( &
594- & minlevel = minlevel, &
595- & maxlevel = maxlevel, &
596- & state = statedata_list, &
597- & state_stab = statedata_stab_list, &
598- & mesh = mesh_list, &
599- & filter = scheme_list(minlevel)%stabilization(iStab)&
600- & %covolume, &
601- & scheme = scheme_list, &
602- & equation = equation, &
603- & tree = tree, &
604- & poly_proj = poly_proj_list, &
605- & poly_proj_pos = poly_proj_pos, &
606- & bc = bc, &
607- & boundary = boundary, &
608- & general = general, &
609- & commStateTimer = commStateTimer )
585+ if(scheme_list(minlevel)%modg%basisType .eq. Q_space) then !Q_space
586+ if(scheme_list(minlevel)%stabilization(iStab)%covolume%isAdaptive) then
587+ call atl_covolume( &
588+ & minlevel = minlevel, &
589+ & maxlevel = maxlevel, &
590+ & state = statedata_list, &
591+ & state_stab = statedata_stab_list, &
592+ & mesh = mesh_list, &
593+ & filter = scheme_list(minlevel)%stabilization(iStab)&
594+ & %covolume, &
595+ & adaptive_orders = adaptive_orders, &
596+ & scheme = scheme_list, &
597+ & equation = equation, &
598+ & tree = tree, &
599+ & poly_proj = poly_proj_list, &
600+ & poly_proj_pos = poly_proj_pos, &
601+ & bc = bc, &
602+ & boundary = boundary, &
603+ & general = general, &
604+ & commStateTimer = commStateTimer )
605+ else
606+ call atl_covolume( &
607+ & minlevel = minlevel, &
608+ & maxlevel = maxlevel, &
609+ & state = statedata_list, &
610+ & state_stab = statedata_stab_list, &
611+ & mesh = mesh_list, &
612+ & filter = scheme_list(minlevel)%stabilization(iStab)&
613+ & %covolume, &
614+ & scheme = scheme_list, &
615+ & equation = equation, &
616+ & tree = tree, &
617+ & poly_proj = poly_proj_list, &
618+ & poly_proj_pos = poly_proj_pos, &
619+ & bc = bc, &
620+ & boundary = boundary, &
621+ & general = general, &
622+ & commStateTimer = commStateTimer )
623+ end if
624+ else !P_space
625+
626+ ! If co-volume filter is used with P-polynomials we just
627+ ! project the state, which is given in P-space, to
628+ ! a temporary state in Q-space format and perform the
629+ ! filtering on this temporary state. After the filtering is done
630+ ! we can simply project the filtered state back to P-space.
631+ ! In this way we can not benefit from the performance advantages
632+ ! that come with P-polynomials but we can use the same subroutines
633+ ! for both cases.
634+
635+ ! Allocate and initialize the temporary state and the
636+ ! stab-state in Q-space
637+ allocate(Q_statedata_list(minlevel:maxlevel))
638+ allocate(Q_statedata_stab_list(minlevel:maxlevel,3))
639+
640+ nScalars = equation%varSys%nScalars
641+
642+ do iLevel = minlevel, maxlevel
643+ maxPolyDeg = scheme_list(iLevel)%modg%maxPolyDegree
644+ nDofs = (maxPolyDeg+1)**3
645+ nElems = mesh_list(ilevel)%descriptor%elem%nElems(eT_fluid)
646+
647+ allocate(Q_statedata_list(iLevel)%state( nElems, &
648+ & nDoFs, &
649+ & nScalars) )
650+ Q_statedata_list(iLevel)%local_time = &
651+ & statedata_list(maxlevel)%local_time
652+ Q_statedata_list(iLevel)%state = 0.0_rk
653+
654+ ! Projection of the state from P-space to Q-space
655+ ! Higher modes in the Q-space will be filled with zeros.
656+ call ply_change_poly_space( &
657+ & inspace = P_space, &
658+ & instate = statedata_list(iLevel)%state, &
659+ & outstate = Q_statedata_list(iLevel)%state, &
660+ & maxPolyDeg = maxPolydeg, &
661+ & nElems = nElems, &
662+ & nVars = nScalars )
663+
664+ nBndStabElems = atl_get_numBndElems( &
665+ & minLevel = minLevel, &
666+ & maxLevel = maxLevel, &
667+ & boundary_list = boundary )
668+
669+ ! Allocate the stab-state in Q-space and prepare it for the
670+ ! dim-by-dim procedure performed in the co-volume filtering.
671+ do iDir=1,3
672+ nTotal = mesh_list(iLevel)%faces%dimByDimDesc(iDir)%nElems &
673+ & + nBndStabElems(iLevel,iDir)
674+
675+ allocate(Q_statedata_stab_list(iLevel,iDir)%state( nTotal, &
676+ & nDoFs, &
677+ & nScalars) )
678+ Q_statedata_stab_list(iLevel,iDir)%local_time = &
679+ & statedata_stab_list(maxlevel)%local_time
680+ Q_statedata_stab_list(iLevel,iDir)%state = 0.0_rk
681+ end do
682+
683+ end do
684+
685+ ! Apply the covolume filtering to the temporary states in Q-space
686+ ! just like normal.
687+ if(scheme_list(minlevel)%stabilization(iStab)%covolume%isAdaptive) then
688+ call atl_covolume( &
689+ & minlevel = minlevel, &
690+ & maxlevel = maxlevel, &
691+ & state = Q_statedata_list, &
692+ & state_stab = Q_statedata_stab_list, &
693+ & mesh = mesh_list, &
694+ & filter = scheme_list(minlevel)%stabilization(iStab)&
695+ & %covolume, &
696+ & adaptive_orders = adaptive_orders, &
697+ & scheme = scheme_list, &
698+ & equation = equation, &
699+ & tree = tree, &
700+ & poly_proj = poly_proj_list, &
701+ & poly_proj_pos = poly_proj_pos, &
702+ & bc = bc, &
703+ & boundary = boundary, &
704+ & general = general, &
705+ & commStateTimer = commStateTimer )
706+ else
707+ call atl_covolume( &
708+ & minlevel = minlevel, &
709+ & maxlevel = maxlevel, &
710+ & state = Q_statedata_list, &
711+ & state_stab = Q_statedata_stab_list, &
712+ & mesh = mesh_list, &
713+ & filter = scheme_list(minlevel)%stabilization(iStab)&
714+ & %covolume, &
715+ & scheme = scheme_list, &
716+ & equation = equation, &
717+ & tree = tree, &
718+ & poly_proj = poly_proj_list, &
719+ & poly_proj_pos = poly_proj_pos, &
720+ & bc = bc, &
721+ & boundary = boundary, &
722+ & general = general, &
723+ & commStateTimer = commStateTimer )
724+ end if
725+
726+ ! Projection of the stab-state back from Q-space to P-space.
727+ ! This is done by cutting off the higher modes.
728+ do iLevel = minlevel, maxlevel
729+ call ply_change_poly_space( &
730+ & inspace = Q_space, &
731+ & instate = Q_statedata_stab_list(iLevel,3)%state, &
732+ & outstate = statedata_stab_list(iLevel)%state, &
733+ & maxPolyDeg = maxPolydeg, &
734+ & nElems = nElems, &
735+ & nVars = nScalars )
736+ end do
737+
738+ deallocate(Q_statedata_list)
739+ deallocate(Q_statedata_stab_list)
740+
610741 end if
611742
612743 case default
@@ -712,7 +843,6 @@
712843 if(tmpPressure < my_eps) then
713844 ! Intersection point of mean value state and admissible set G
714845 ! (see paper Shu, et al)
715-!! write(*,*) 'iPoint', iPoint, 'tmpPressure', tmpPressure
716846 t_vec(iPoint) = solve_admissible_state( euler%isen_coef, &
717847 & my_eps, &
718848 & mean, &
@@ -1304,7 +1434,7 @@
13041434 integer :: maxPolyDeg
13051435 integer :: left_neighbor, right_neighbor
13061436 integer :: iside, iLevel
1307- integer :: nElems_fluid
1437+ integer :: nElems_fluid, nDofs
13081438 real(kind=rk), allocatable :: leftCovolume(:,:), rightCovolume(:,:), &
13091439 & prev_state(:,:), modalCoeff(:,:), &
13101440 & leftModalCoeff(:,:), rightModalCoeff(:,:)
@@ -1331,16 +1461,15 @@
13311461
13321462 do iLevel = minLevel, maxLevel
13331463
1464+ maxPolyDeg = scheme(iLevel)%modg%maxPolyDegree
1465+ nDofs = (maxPolyDeg+1)**3
13341466
1335- allocate( leftCovolume(scheme(iLevel)%nDofs, equation%varSys%nScalars) )
1336- allocate( rightCovolume(scheme(iLevel)%nDofs, equation%varSys%nScalars) )
1337- allocate( prev_state( scheme(iLevel)%nDofs, equation%varSys%nScalars) )
1338- allocate( modalCoeff( scheme(iLevel)%nDofs, equation%varSys%nScalars) )
1339- allocate( leftModalCoeff( scheme(iLevel)%nDofs, equation%varSys%nScalars) )
1340- allocate( rightModalCoeff(scheme(iLevel)%nDofs, equation%varSys%nScalars) )
1341-
1342- maxPolyDeg = scheme(iLevel)%modg%maxPolyDegree
1343-
1467+ allocate( leftCovolume( nDofs, equation%varSys%nScalars) )
1468+ allocate( rightCovolume( nDofs, equation%varSys%nScalars) )
1469+ allocate( prev_state( nDofs, equation%varSys%nScalars) )
1470+ allocate( modalCoeff( nDofs, equation%varSys%nScalars) )
1471+ allocate( leftModalCoeff( nDofs, equation%varSys%nScalars) )
1472+ allocate( rightModalCoeff( nDofs, equation%varSys%nScalars) )
13441473
13451474 ! Project onto the co-volume
13461475 nElems_fluid = mesh(iLevel)%faces_stab &
diff -r 238480729f8a -r ff93ce333570 source/scheme/modg/atl_modg_euler_kernel_module.f90
--- a/source/scheme/modg/atl_modg_euler_kernel_module.f90 Fri Aug 23 05:46:53 2019 +0200
+++ b/source/scheme/modg/atl_modg_euler_kernel_module.f90 Thu Sep 05 16:48:13 2019 +0200
@@ -525,27 +525,27 @@
525525 & nodal_data = nodalNumFlux, &
526526 & modal_data = numFluxBuffer )
527527
528- ! Store the modal coefficients of the numerical flux. For the left
529- ! element we have calculated the flux on the right face and vice versa.
530- !oversampling loop
531- call ply_convertFromOversample( &
532- & modalCoeffs = numFluxBuffer, &
533- & poly_proj = poly_proj, &
534- & nDim = 2, &
535- & state = faceFlux(left_neighbor,:,1:equation%varSys%nScalars,2), &
536- & nScalars = equation%varSys%nScalars )
528+ ! Store the modal coefficients of the numerical flux. For the left
529+ ! element we have calculated the flux on the right face and vice versa.
530+ !oversampling loop
531+ call ply_convertFromOversample( &
532+ & modalCoeffs = numFluxBuffer, &
533+ & poly_proj = poly_proj, &
534+ & nDim = 2, &
535+ & state = faceFlux(left_neighbor,:,1:equation%varSys%nScalars,2), &
536+ & nScalars = equation%varSys%nScalars )
537537
538- ! Set the left flux to the right flux and rotate the state back according
539- ! to the varRotation.
540- ! We are basically using the one flux copy as a buffer, and replace it
541- ! finally by the rotated state. Doing the rotation here is potentially
542- ! cheaper, as only the not oversampled state needs to be copied.
543- ! In case equation%nDerivatives = 1 the size of faceFlux(:,:,2*nScalars,2)
544- ! so the first nScalar values need to be swapped
545- faceFlux(right_neighbor,:,varRotation,1) &
546- & = faceFlux(left_neighbor,:,1:equation%varSys%nScalars,2)
547- faceFlux(left_neighbor,:,1:equation%varSys%nScalars,2) &
548- & = faceFlux(right_neighbor,:,1:equation%varSys%nScalars,1)
538+ ! Set the left flux to the right flux and rotate the state back according
539+ ! to the varRotation.
540+ ! We are basically using the one flux copy as a buffer, and replace it
541+ ! finally by the rotated state. Doing the rotation here is potentially
542+ ! cheaper, as only the not oversampled state needs to be copied.
543+ ! In case equation%nDerivatives = 1 the size of faceFlux(:,:,2*nScalars,2)
544+ ! so the first nScalar values need to be swapped
545+ faceFlux(right_neighbor,:,varRotation,1) &
546+ & = faceFlux(left_neighbor,:,1:equation%varSys%nScalars,2)
547+ faceFlux(left_neighbor,:,1:equation%varSys%nScalars,2) &
548+ & = faceFlux(right_neighbor,:,1:equation%varSys%nScalars,1)
549549
550550 end do FaceLoop
551551
@@ -678,26 +678,26 @@
678678 & nodal_data = nodalNumFlux, &
679679 & modal_data = numFluxBuffer )
680680
681- ! Store the modal coefficients of the numerical flux. For the left
682- ! element we have calculated the flux on the right face and vice versa.
683- !oversampling loop
684- call ply_convertFromOversample( &
685- & modalCoeffs = numFluxBuffer, &
686- & poly_proj = poly_proj, &
687- & nDim = 2, &
688- & state = faceFlux(left_neighbor,:,1:equation%varSys%nScalars,2), &
689- & nScalars = equation%varSys%nScalars )
681+ ! Store the modal coefficients of the numerical flux. For the left
682+ ! element we have calculated the flux on the right face and vice versa.
683+ !oversampling loop
684+ call ply_convertFromOversample( &
685+ & modalCoeffs = numFluxBuffer, &
686+ & poly_proj = poly_proj, &
687+ & nDim = 2, &
688+ & state = faceFlux(left_neighbor,:,1:equation%varSys%nScalars,2), &
689+ & nScalars = equation%varSys%nScalars )
690690
691- ! Set the left flux to the right flux and rotate the state back according
692- ! to the varRotation.
693- ! We are basically using the one flux copy as a buffer, and replace it
694- ! finally by the rotated state. Doing the rotation here is potentially
695- ! cheaper, as only the not oversampled state needs to be copied.
691+ ! Set the left flux to the right flux and rotate the state back according
692+ ! to the varRotation.
693+ ! We are basically using the one flux copy as a buffer, and replace it
694+ ! finally by the rotated state. Doing the rotation here is potentially
695+ ! cheaper, as only the not oversampled state needs to be copied.
696696
697- faceFlux(right_neighbor,:,varRotation,1) = &
698- & faceFlux(left_neighbor,:,1:equation%varSys%nScalars,2)
699- faceFlux(left_neighbor,:,1:equation%varSys%nScalars,2) = &
700- & faceFlux(right_neighbor,:,1:equation%varSys%nScalars,1)
697+ faceFlux(right_neighbor,:,varRotation,1) = &
698+ & faceFlux(left_neighbor,:,1:equation%varSys%nScalars,2)
699+ faceFlux(left_neighbor,:,1:equation%varSys%nScalars,2) = &
700+ & faceFlux(right_neighbor,:,1:equation%varSys%nScalars,1)
701701
702702 end do FaceLoop
703703
diff -r 238480729f8a -r ff93ce333570 source/scheme/modg/atl_modg_navierstokes_kernel_module.f90
--- a/source/scheme/modg/atl_modg_navierstokes_kernel_module.f90 Fri Aug 23 05:46:53 2019 +0200
+++ b/source/scheme/modg/atl_modg_navierstokes_kernel_module.f90 Thu Sep 05 16:48:13 2019 +0200
@@ -34,7 +34,8 @@
3434 & assignment(=), &
3535 & ply_poly_project_m2n, &
3636 & ply_poly_project_n2m
37- use ply_oversample_module, only: ply_convertFromOversample
37+ use ply_oversample_module, only: ply_convert2oversample, &
38+ & ply_convertFromoversample
3839
3940 use atl_equation_module, only: atl_equations_type
4041 use atl_cube_elem_module, only: atl_cube_elem_type
@@ -587,67 +588,69 @@
587588 ! for the left element, we have to access the right face values
588589 ! and for the right, we have to acess the left face values.
589590 ! --> modal space
590- ! do d=lbound(leftModalCoeff,2),ubound(leftModalCoeff,2)
591- leftModalCoeff(:,:) = 0.0_rk
592- ! do e=lbound(rightModalCoeff,2),ubound(rightModalCoeff,2)
593- rightModalCoeff(:,:) = 0.0_rk
594- ! do f=lbound(leftModalCoeff_gradX,2),ubound(leftModalCoeff_gradX,2)
595- leftModalCoeff_gradX(:,:) = 0.0_rk
596- ! do g=lbound(rightModalCoeff_gradX,2),ubound(rightModalCoeff_gradX,2)
597- rightModalCoeff_gradX(:,:) = 0.0_rk
598- ! do h=lbound(leftModalCoeff_gradY,2),ubound(leftModalCoeff_gradY,2)
599- leftModalCoeff_gradY(:,:) = 0.0_rk
600- ! do i=lbound(rightModalCoeff_gradY,2),ubound(rightModalCoeff_gradY,2)
601- rightModalCoeff_gradY(:,:) = 0.0_rk
602- ! do j=lbound(leftModalCoeff_gradZ,2),ubound(leftModalCoeff_gradZ,2)
603- leftModalCoeff_gradZ(:,:) = 0.0_rk
604- ! do m=lbound(rightModalCoeff_gradZ,2),ubound(rightModalCoeff_gradZ,2)
605- rightModalCoeff_gradZ(:,:) = 0.0_rk
606- ! end do
607- ! end do
608- ! end do
609- ! end do
610- ! end do
611- ! end do
612- ! end do
613- ! end do
614-
615- do iVP = 1, nPVars
616- ! (poly_proj%min_degree+1)**2) could be saved
617- iVar = (iVP-1)/((poly_proj%min_degree+1)**2) + 1
618- iPoint = iVP - (iVar-1)*((poly_proj%min_degree+1)**2)
591+ ! Modal coeffs of the state (left and right)
592+ call ply_convert2oversample( &
593+ & state = facedata%faceRep(faceDir) &
594+ & %dat(left_neighbor, :, 1:nScalars, 2), &
595+ & poly_proj = poly_proj, &
596+ & nDim = 2, &
597+ & modalCoeffs = leftModalCoeff, &
598+ & nScalars = nScalars )
599+ call ply_convert2oversample( &
600+ & state = facedata%faceRep(faceDir) &
601+ & %dat(right_neighbor, :, 1:nScalars, 1), &
602+ & poly_proj = poly_proj, &
603+ & nDim = 2, &
604+ & modalCoeffs = rightModalCoeff, &
605+ & nScalars = nScalars )
619606
620- ! Modal coeffs of the state (left and right)
621- leftModalCoeff(iPoint, iVar) &
622- & = facedata%faceRep(faceDir)%dat(left_neighbor, iPoint, iVar, 2)
623- rightModalCoeff(iPoint, iVar) &
624- & = facedata%faceRep(faceDir)%dat(right_neighbor, iPoint, iVar, 1)
625-
626- ! Modal coeffs of the gradient in x direction (left and right)
627- leftModalCoeff_gradX(iPoint, iVar) &
628- & = facedata%faceRep(faceDir) &
629- & %dat(left_neighbor, iPoint, iVar+nScalars, 2)
630- rightModalCoeff_gradX(iPoint, iVar) &
631- & = facedata%faceRep(faceDir) &
632- & %dat(right_neighbor, iPoint, iVar+nScalars, 1)
607+ ! Modal coeffs of the gradient in x direction (left and right)
608+ call ply_convert2oversample( &
609+ & state = facedata%faceRep(faceDir) &
610+ & %dat(left_neighbor, :, nScalars+1:2*nScalars, 2), &
611+ & poly_proj = poly_proj, &
612+ & nDim = 2, &
613+ & modalCoeffs = leftModalCoeff_gradX, &
614+ & nScalars = nScalars )
615+ call ply_convert2oversample( &
616+ & state = facedata%faceRep(faceDir) &
617+ & %dat(right_neighbor, :, nScalars+1:2*nScalars, 1), &
618+ & poly_proj = poly_proj, &
619+ & nDim = 2, &
620+ & modalCoeffs = rightModalCoeff_gradX, &
621+ & nScalars = nScalars )
633622
634- ! Modal coeffs of the gradient in y direction (left and right)
635- leftModalCoeff_gradY(iPoint, iVar) &
636- & = facedata%faceRep(faceDir) &
637- & %dat(left_neighbor, iPoint, iVar+2*nScalars, 2)
638- rightModalCoeff_gradY(iPoint, iVar) &
639- & = facedata%faceRep(faceDir) &
640- & %dat(right_neighbor, iPoint, iVar+2*nScalars, 1)
623+ ! Modal coeffs of the gradient in y direction (left and right)
624+ call ply_convert2oversample( &
625+ & state = facedata%faceRep(faceDir) &
626+ & %dat(left_neighbor, :, 2*nScalars+1:3*nScalars, 2), &
627+ & poly_proj = poly_proj, &
628+ & nDim = 2, &
629+ & modalCoeffs = leftModalCoeff_gradY, &
630+ & nScalars = nScalars )
631+ call ply_convert2oversample( &
632+ & state = facedata%faceRep(faceDir) &
633+ & %dat(right_neighbor, :, 2*nScalars+1:3*nScalars, 1), &
634+ & poly_proj = poly_proj, &
635+ & nDim = 2, &
636+ & modalCoeffs = rightModalCoeff_gradY, &
637+ & nScalars = nScalars )
641638
642- ! Modal coeffs of the gradient in z direction (left and right)
643- leftModalCoeff_gradZ(iPoint, iVar) &
644- & = facedata%faceRep(faceDir) &
645- & %dat(left_neighbor, iPoint, iVar+3*nScalars, 2)
646- rightModalCoeff_gradZ(iPoint, iVar) &
647- & = facedata%faceRep(faceDir) &
648- & %dat(right_neighbor, iPoint, iVar+3*nScalars, 1)
649-
650- end do
639+ ! Modal coeffs of the gradient in z direction (left and right)
640+ call ply_convert2oversample( &
641+ & state = facedata%faceRep(faceDir) &
642+ & %dat(left_neighbor, :, 3*nScalars+1:4*nScalars, 2), &
643+ & poly_proj = poly_proj, &
644+ & nDim = 2, &
645+ & modalCoeffs = leftModalCoeff_gradZ, &
646+ & nScalars = nScalars )
647+ call ply_convert2oversample( &
648+ & state = facedata%faceRep(faceDir) &
649+ & %dat(right_neighbor, :, 3*nScalars+1:4*nScalars, 1), &
650+ & poly_proj = poly_proj, &
651+ & nDim = 2, &
652+ & modalCoeffs = rightModalCoeff_gradZ, &
653+ & nScalars = nScalars )
651654 ! --> oversamp modal space
652655
653656 ! transform the 2D modal representation to nodal surface points
diff -r 238480729f8a -r ff93ce333570 source/scheme/modg_2d/atl_modg_2d_navierstokes_kernel_module.f90
--- a/source/scheme/modg_2d/atl_modg_2d_navierstokes_kernel_module.f90 Fri Aug 23 05:46:53 2019 +0200
+++ b/source/scheme/modg_2d/atl_modg_2d_navierstokes_kernel_module.f90 Thu Sep 05 16:48:13 2019 +0200
@@ -1,5 +1,5 @@
11 ! Copyright (c) 2014 Jens Zudrop <j.zudrop@grs-sim.de>
2-! Copyright (c) 2014-2018 Harald Klimach <harald.klimach@uni-siegen.de>
2+! Copyright (c) 2014-2019 Harald Klimach <harald.klimach@uni-siegen.de>
33 ! Copyright (c) 2014-2016 Nikhil Anand <nikhil.anand@uni-siegen.de>
44 ! Copyright (c) 2014-2017, 2019 Peter Vitt <peter.vitt2@uni-siegen.de>
55 ! Copyright (c) 2014 Timo Stentenbach
@@ -530,7 +530,7 @@
530530 real(kind=rk), allocatable :: numFluxBuffer(:,:)
531531
532532 ! Loop over variables (due to single variable FPTs)
533- integer :: iVar, i, j, k, l, m, n
533+ integer :: iVar
534534
535535 integer :: nquadpoints, oversamp_dofs
536536 integer :: iVP, nPVars, nScalars
@@ -554,6 +554,18 @@
554554 & leftModalCoeff_gradY(oversamp_dofs, nScalars), &
555555 & rightModalCoeff_gradY(oversamp_dofs, nScalars) )
556556
557+ ! Initialize oversampled modal coefficients with 0 to make sure that higher
558+ ! modes are properly filled.
559+ ! (Only possible if transformation is not 3D, as the modes would otherwise
560+ ! be used and modified by the transformation.)
561+ leftModalCoeff = 0.0_rk
562+ leftModalCoeff_gradX = 0.0_rk
563+ leftModalCoeff_gradY = 0.0_rk
564+
565+ rightModalCoeff = 0.0_rk
566+ rightModalCoeff_gradX = 0.0_rk
567+ rightModalCoeff_gradY = 0.0_rk
568+
557569 allocate( numFluxBuffer(oversamp_dofs, nScalars) )
558570 allocate( nodalNumFlux(nQuadPoints, nScalars) )
559571
@@ -569,8 +581,6 @@
569581 & - equation%varRotation(faceDir)%derTransformIndices(1)
570582
571583
572-
573-
574584 ! Loop over all fluid the faces in x direction
575585 FaceLoop: do iside = 1, size(faces%leftPos)
576586 ! Get the fluid neighbors for this face.
@@ -581,30 +591,6 @@
581591 ! and for the right, we have to acess the left face values.
582592
583593 ! --> modal space
584- do i = lbound(leftModalCoeff, 2), ubound(leftModalCoeff, 2)
585- leftModalCoeff(:,i) = 0.0_rk
586- do j = lbound(rightModalCoeff, 2), ubound(rightModalCoeff, 2)
587- rightModalCoeff(:,j) = 0.0_rk
588- do k = lbound(leftModalCoeff_gradX, 2), &
589- & ubound(leftModalCoeff_gradX, 2)
590- leftModalCoeff_gradX(:,k) = 0.0_rk
591- do l = lbound(rightModalCoeff_gradX, 2), &
592- & ubound(rightModalCoeff_gradX, 2)
593- rightModalCoeff_gradX(:,l) = 0.0_rk
594- do m = lbound(leftModalCoeff_gradY, 2), &
595- & ubound(leftModalCoeff_gradY, 2)
596- leftModalCoeff_gradY(:,m) = 0.0_rk
597- do n = lbound(rightModalCoeff_gradY, 2), &
598- & ubound(rightModalCoeff_gradY, 2)
599- rightModalCoeff_gradY(:,n) = 0.0_rk
600- end do
601- end do
602- end do
603- end do
604- end do
605- end do
606-
607-
608594 do iVP = 1, nPVars
609595 iVar = (iVP-1)/(poly_proj%min_degree+1) + 1
610596 iPoint = iVP - (iVar-1)*(poly_proj%min_degree+1)
diff -r 238480729f8a -r ff93ce333570 testsuite/fluid/shear-cos/xdir/common.lua
--- a/testsuite/fluid/shear-cos/xdir/common.lua Fri Aug 23 05:46:53 2019 +0200
+++ b/testsuite/fluid/shear-cos/xdir/common.lua Thu Sep 05 16:48:13 2019 +0200
@@ -1,1 +1,135 @@
1-../common.lua
\ No newline at end of file
1+-- Shear hat configuration: --
2+-- A small setup with a flow in y-direction and a hat function variation
3+-- of the -y velocity in x-direction.
4+--
5+-- This is the common configuration for 2D and 3D.
6+sim_name = 'shear-parabola'
7+sim_control = {
8+ time_control = {
9+ max = { iter = 400 },
10+ min = 0.0,
11+ interval = { iter = 1 },
12+ }
13+}
14+
15+degree = 5
16+mach = 0.1
17+dx = 1.0e-4
18+cfl = 0.8
19+cfl_visc = 0.4
20+
21+-- Material:
22+isen = 1.4
23+boltz = 287.0
24+rho = 1.4
25+p = 1.0
26+conducT = 0.5
27+mu = 2.0
28+
29+-- Interior penalization parameter:
30+c2 = 8./3.
31+
32+-- Equation definitions
33+equation = {
34+ name = 'navier_stokes',
35+ isen_coef = isen,
36+ r = boltz,
37+ -- Viscous parameters
38+ therm_cond = conducT,
39+ mu = mu,
40+ ip_param = c2*3*(degree+2)/(2*(degree+3)),
41+ material = {
42+ characteristic = 0.0,
43+ relax_velocity = {0.0, 0.0, 0.0},
44+ relax_temperature = 0.0
45+ }
46+}
47+-- (cv) heat capacity and (r) ideal gas constant
48+equation["cv"] = equation["r"] / (equation["isen_coef"] - 1.0)
49+
50+
51+-- Mesh:
52+mesh = {
53+ predefined = 'cube',
54+ origin = { -0.5*dx, -0.5*dx, -0.5*dx },
55+ length = dx,
56+ refinementLevel = 0
57+}
58+
59+-- Definition of velocity field.
60+mean_velocity = mach * math.sqrt(isen * p / rho )
61+max_dv = 0.5*mean_velocity
62+
63+waves = function(x,y)
64+ -- A parabola defined by the mean velocity, and the maximal
65+ -- deviation from that mean velocity (max_dv).
66+ xi = 2*math.pi*x/dx
67+ eta = 2*math.pi*y/dx
68+ return mean_velocity + max_dv * math.cos(xi)*math.cos(eta)
69+end
70+
71+-- Spatial function to describe the y-velocity profile
72+velX = function(x,y,z)
73+ return waves(y,z)
74+end
75+velY = function(x,y,z)
76+ return waves(z,x)
77+end
78+velZ = function(x,y,z)
79+ return waves(x,y)
80+end
81+
82+-- Scheme definitions --
83+scheme = {
84+ spatial = {
85+ name = 'modg',
86+ m = degree
87+ },
88+ temporal = {
89+ name = 'explicitRungeKutta',
90+ steps = 4,
91+ control = {
92+ name = 'cfl',
93+ cfl = cfl,
94+ cfl_visc = cfl_visc
95+ }
96+ }
97+}
98+
99+projection = {
100+ kind = 'fpt',
101+ factor = 1.0
102+}
103+
104+
105+-- Tracking
106+ply_sampling = {
107+ nlevels = 5,
108+ tolerance = 0.01,
109+ dof_reduction = 1
110+}
111+
112+tracking = {
113+ label = 'track_shearparabola',
114+ folder = './',
115+ variable = {'momentum', 'density', 'energy', 'velocity'},
116+ shape = {kind = 'all'},
117+ time_control = {
118+ min = 0,
119+ max = sim_control.time_control.max,
120+ interval = {iter = 1}
121+ },
122+ output = { format = 'vtk' }
123+}
124+--tracking = {
125+-- label = 'track_shearparabola',
126+-- folder = './',
127+-- variable = {'momentum','density','energy'},
128+-- shape = {kind = 'canoND', object= { origin ={0., 0., 0.} } },
129+-- time_control = {
130+-- min = 0,
131+-- max = sim_control.time_control.max,
132+-- interval = {iter = 10}
133+-- },
134+-- output = { format = 'vtu', ndofs = 1, use_get_point = true }
135+--}
diff -r 238480729f8a -r ff93ce333570 testsuite/fluid/shear-cos/ydir/common.lua
--- a/testsuite/fluid/shear-cos/ydir/common.lua Fri Aug 23 05:46:53 2019 +0200
+++ b/testsuite/fluid/shear-cos/ydir/common.lua Thu Sep 05 16:48:13 2019 +0200
@@ -1,1 +1,135 @@
1-../common.lua
\ No newline at end of file
1+-- Shear hat configuration: --
2+-- A small setup with a flow in y-direction and a hat function variation
3+-- of the -y velocity in x-direction.
4+--
5+-- This is the common configuration for 2D and 3D.
6+sim_name = 'shear-parabola'
7+sim_control = {
8+ time_control = {
9+ max = { iter = 400 },
10+ min = 0.0,
11+ interval = { iter = 1 },
12+ }
13+}
14+
15+degree = 5
16+mach = 0.1
17+dx = 1.0e-4
18+cfl = 0.8
19+cfl_visc = 0.4
20+
21+-- Material:
22+isen = 1.4
23+boltz = 287.0
24+rho = 1.4
25+p = 1.0
26+conducT = 0.5
27+mu = 2.0
28+
29+-- Interior penalization parameter:
30+c2 = 8./3.
31+
32+-- Equation definitions
33+equation = {
34+ name = 'navier_stokes',
35+ isen_coef = isen,
36+ r = boltz,
37+ -- Viscous parameters
38+ therm_cond = conducT,
39+ mu = mu,
40+ ip_param = c2*3*(degree+2)/(2*(degree+3)),
41+ material = {
42+ characteristic = 0.0,
43+ relax_velocity = {0.0, 0.0, 0.0},
44+ relax_temperature = 0.0
45+ }
46+}
47+-- (cv) heat capacity and (r) ideal gas constant
48+equation["cv"] = equation["r"] / (equation["isen_coef"] - 1.0)
49+
50+
51+-- Mesh:
52+mesh = {
53+ predefined = 'cube',
54+ origin = { -0.5*dx, -0.5*dx, -0.5*dx },
55+ length = dx,
56+ refinementLevel = 0
57+}
58+
59+-- Definition of velocity field.
60+mean_velocity = mach * math.sqrt(isen * p / rho )
61+max_dv = 0.5*mean_velocity
62+
63+waves = function(x,y)
64+ -- A parabola defined by the mean velocity, and the maximal
65+ -- deviation from that mean velocity (max_dv).
66+ xi = 2*math.pi*x/dx
67+ eta = 2*math.pi*y/dx
68+ return mean_velocity + max_dv * math.cos(xi)*math.cos(eta)
69+end
70+
71+-- Spatial function to describe the y-velocity profile
72+velX = function(x,y,z)
73+ return waves(y,z)
74+end
75+velY = function(x,y,z)
76+ return waves(z,x)
77+end
78+velZ = function(x,y,z)
79+ return waves(x,y)
80+end
81+
82+-- Scheme definitions --
83+scheme = {
84+ spatial = {
85+ name = 'modg',
86+ m = degree
87+ },
88+ temporal = {
89+ name = 'explicitRungeKutta',
90+ steps = 4,
91+ control = {
92+ name = 'cfl',
93+ cfl = cfl,
94+ cfl_visc = cfl_visc
95+ }
96+ }
97+}
98+
99+projection = {
100+ kind = 'fpt',
101+ factor = 1.0
102+}
103+
104+
105+-- Tracking
106+ply_sampling = {
107+ nlevels = 5,
108+ tolerance = 0.01,
109+ dof_reduction = 1
110+}
111+
112+tracking = {
113+ label = 'track_shearparabola',
114+ folder = './',
115+ variable = {'momentum', 'density', 'energy', 'velocity'},
116+ shape = {kind = 'all'},
117+ time_control = {
118+ min = 0,
119+ max = sim_control.time_control.max,
120+ interval = {iter = 1}
121+ },
122+ output = { format = 'vtk' }
123+}
124+--tracking = {
125+-- label = 'track_shearparabola',
126+-- folder = './',
127+-- variable = {'momentum','density','energy'},
128+-- shape = {kind = 'canoND', object= { origin ={0., 0., 0.} } },
129+-- time_control = {
130+-- min = 0,
131+-- max = sim_control.time_control.max,
132+-- interval = {iter = 10}
133+-- },
134+-- output = { format = 'vtu', ndofs = 1, use_get_point = true }
135+--}
diff -r 238480729f8a -r ff93ce333570 testsuite/fluid/shear-cos/zdir/common.lua
--- a/testsuite/fluid/shear-cos/zdir/common.lua Fri Aug 23 05:46:53 2019 +0200
+++ b/testsuite/fluid/shear-cos/zdir/common.lua Thu Sep 05 16:48:13 2019 +0200
@@ -1,1 +1,135 @@
1-../common.lua
\ No newline at end of file
1+-- Shear hat configuration: --
2+-- A small setup with a flow in y-direction and a hat function variation
3+-- of the -y velocity in x-direction.
4+--
5+-- This is the common configuration for 2D and 3D.
6+sim_name = 'shear-parabola'
7+sim_control = {
8+ time_control = {
9+ max = { iter = 400 },
10+ min = 0.0,
11+ interval = { iter = 1 },
12+ }
13+}
14+
15+degree = 5
16+mach = 0.1
17+dx = 1.0e-4
18+cfl = 0.8
19+cfl_visc = 0.4
20+
21+-- Material:
22+isen = 1.4
23+boltz = 287.0
24+rho = 1.4
25+p = 1.0
26+conducT = 0.5
27+mu = 2.0
28+
29+-- Interior penalization parameter:
30+c2 = 8./3.
31+
32+-- Equation definitions
33+equation = {
34+ name = 'navier_stokes',
35+ isen_coef = isen,
36+ r = boltz,
37+ -- Viscous parameters
38+ therm_cond = conducT,
39+ mu = mu,
40+ ip_param = c2*3*(degree+2)/(2*(degree+3)),
41+ material = {
42+ characteristic = 0.0,
43+ relax_velocity = {0.0, 0.0, 0.0},
44+ relax_temperature = 0.0
45+ }
46+}
47+-- (cv) heat capacity and (r) ideal gas constant
48+equation["cv"] = equation["r"] / (equation["isen_coef"] - 1.0)
49+
50+
51+-- Mesh:
52+mesh = {
53+ predefined = 'cube',
54+ origin = { -0.5*dx, -0.5*dx, -0.5*dx },
55+ length = dx,
56+ refinementLevel = 0
57+}
58+
59+-- Definition of velocity field.
60+mean_velocity = mach * math.sqrt(isen * p / rho )
61+max_dv = 0.5*mean_velocity
62+
63+waves = function(x,y)
64+ -- A parabola defined by the mean velocity, and the maximal
65+ -- deviation from that mean velocity (max_dv).
66+ xi = 2*math.pi*x/dx
67+ eta = 2*math.pi*y/dx
68+ return mean_velocity + max_dv * math.cos(xi)*math.cos(eta)
69+end
70+
71+-- Spatial function to describe the y-velocity profile
72+velX = function(x,y,z)
73+ return waves(y,z)
74+end
75+velY = function(x,y,z)
76+ return waves(z,x)
77+end
78+velZ = function(x,y,z)
79+ return waves(x,y)
80+end
81+
82+-- Scheme definitions --
83+scheme = {
84+ spatial = {
85+ name = 'modg',
86+ m = degree
87+ },
88+ temporal = {
89+ name = 'explicitRungeKutta',
90+ steps = 4,
91+ control = {
92+ name = 'cfl',
93+ cfl = cfl,
94+ cfl_visc = cfl_visc
95+ }
96+ }
97+}
98+
99+projection = {
100+ kind = 'fpt',
101+ factor = 1.0
102+}
103+
104+
105+-- Tracking
106+ply_sampling = {
107+ nlevels = 5,
108+ tolerance = 0.01,
109+ dof_reduction = 1
110+}
111+
112+tracking = {
113+ label = 'track_shearparabola',
114+ folder = './',
115+ variable = {'momentum', 'density', 'energy', 'velocity'},
116+ shape = {kind = 'all'},
117+ time_control = {
118+ min = 0,
119+ max = sim_control.time_control.max,
120+ interval = {iter = 1}
121+ },
122+ output = { format = 'vtk' }
123+}
124+--tracking = {
125+-- label = 'track_shearparabola',
126+-- folder = './',
127+-- variable = {'momentum','density','energy'},
128+-- shape = {kind = 'canoND', object= { origin ={0., 0., 0.} } },
129+-- time_control = {
130+-- min = 0,
131+-- max = sim_control.time_control.max,
132+-- interval = {iter = 10}
133+-- },
134+-- output = { format = 'vtu', ndofs = 1, use_get_point = true }
135+--}
diff -r 238480729f8a -r ff93ce333570 testsuite/fluid/shear-hat/2D/common.lua
--- a/testsuite/fluid/shear-hat/2D/common.lua Fri Aug 23 05:46:53 2019 +0200
+++ b/testsuite/fluid/shear-hat/2D/common.lua Thu Sep 05 16:48:13 2019 +0200
@@ -1,1 +1,74 @@
1-../common.lua
\ No newline at end of file
1+-- Shear hat configuration: --
2+-- A small setup with a flow in y-direction and a hat function variation
3+-- of the -y velocity in x-direction.
4+--
5+-- This is the common configuration for 2D and 3D.
6+sim_name = 'shear-hat'
7+sim_control = {
8+ time_control = {
9+ max = { iter = 400 },
10+ min = 0.0,
11+ interval = { iter = 1 },
12+ }
13+}
14+
15+degree = 3
16+mach = 0.1
17+dx = 1.0e-4
18+cfl = 0.8
19+cfl_visc = 0.4
20+
21+-- Material:
22+isen = 1.4
23+boltz = 287.0
24+rho = 1.4
25+p = 1.0
26+conducT = 0.5
27+mu = 2.0
28+
29+-- Interior penalization parameter:
30+c2 = 8./3.
31+
32+-- Mesh:
33+mesh = {
34+ predefined = 'line',
35+ origin = { -dx, -0.5*dx, -0.5*dx },
36+ length = 2*dx,
37+ element_count = 2
38+}
39+
40+-- Spatial function to describe the y-velocity profile
41+vel = function (x,y,z)
42+ if x > 0 then
43+ return mach * math.sqrt(isen * p / rho ) * (1. - (x-0.5*dx)/dx)
44+ else
45+ return mach * math.sqrt(isen * p / rho ) * (1. + (x+0.5*dx)/dx)
46+ end
47+end
48+
49+
50+projection = {
51+ kind = 'fpt',
52+ factor = 1.0
53+}
54+
55+initial_condition = {
56+ density = rho,
57+ pressure = p,
58+ velocityX = 0.0,
59+ velocityY = vel
60+}
61+
62+-- Tracking
63+tracking = {
64+ label = 'track_shearhat',
65+ folder = './',
66+ variable = {'momentum','density','energy'},
67+ shape = {kind = 'canoND', object= { origin ={0.01*dx, 0., 0.} } },
68+ time_control = {
69+ min = 0,
70+ max = sim_control.time_control.max,
71+ interval = {iter = 10}
72+ },
73+ output = { format = 'ascii', ndofs = 1, use_get_point = true }
74+}
diff -r 238480729f8a -r ff93ce333570 testsuite/fluid/shear-hat/3D/common.lua
--- a/testsuite/fluid/shear-hat/3D/common.lua Fri Aug 23 05:46:53 2019 +0200
+++ b/testsuite/fluid/shear-hat/3D/common.lua Thu Sep 05 16:48:13 2019 +0200
@@ -1,1 +1,74 @@
1-../common.lua
\ No newline at end of file
1+-- Shear hat configuration: --
2+-- A small setup with a flow in y-direction and a hat function variation
3+-- of the -y velocity in x-direction.
4+--
5+-- This is the common configuration for 2D and 3D.
6+sim_name = 'shear-hat'
7+sim_control = {
8+ time_control = {
9+ max = { iter = 400 },
10+ min = 0.0,
11+ interval = { iter = 1 },
12+ }
13+}
14+
15+degree = 3
16+mach = 0.1
17+dx = 1.0e-4
18+cfl = 0.8
19+cfl_visc = 0.4
20+
21+-- Material:
22+isen = 1.4
23+boltz = 287.0
24+rho = 1.4
25+p = 1.0
26+conducT = 0.5
27+mu = 2.0
28+
29+-- Interior penalization parameter:
30+c2 = 8./3.
31+
32+-- Mesh:
33+mesh = {
34+ predefined = 'line',
35+ origin = { -dx, -0.5*dx, -0.5*dx },
36+ length = 2*dx,
37+ element_count = 2
38+}
39+
40+-- Spatial function to describe the y-velocity profile
41+vel = function (x,y,z)
42+ if x > 0 then
43+ return mach * math.sqrt(isen * p / rho ) * (1. - (x-0.5*dx)/dx)
44+ else
45+ return mach * math.sqrt(isen * p / rho ) * (1. + (x+0.5*dx)/dx)
46+ end
47+end
48+
49+
50+projection = {
51+ kind = 'fpt',
52+ factor = 1.0
53+}
54+
55+initial_condition = {
56+ density = rho,
57+ pressure = p,
58+ velocityX = 0.0,
59+ velocityY = vel
60+}
61+
62+-- Tracking
63+tracking = {
64+ label = 'track_shearhat',
65+ folder = './',
66+ variable = {'momentum','density','energy'},
67+ shape = {kind = 'canoND', object= { origin ={0.01*dx, 0., 0.} } },
68+ time_control = {
69+ min = 0,
70+ max = sim_control.time_control.max,
71+ interval = {iter = 10}
72+ },
73+ output = { format = 'ascii', ndofs = 1, use_get_point = true }
74+}
diff -r 238480729f8a -r ff93ce333570 testsuite/fluid/shear-layer/ateles_modg_P8.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testsuite/fluid/shear-layer/ateles_modg_P8.lua Thu Sep 05 16:48:13 2019 +0200
@@ -0,0 +1,182 @@
1+-- Configuration file for Ateles --
2+require 'hyperfun'
3+
4+
5+-- ...the length of the cube
6+cubeLength = 2.0
7+
8+
9+-- global simulation options
10+simulation_name = 'shear_layer_modg' -- the name of the simualtion
11+sim_control = {
12+ time_control = {
13+ min = 0.0,
14+ max = 1.0e-05
15+ }
16+ }
17+
18+
19+-- Mesh definitions --
20+mesh = './mesh/'
21+
22+
23+-- Restart settings
24+--restart = {
25+-- write = './restart/',
26+-- time_control = {
27+-- min = 0,
28+-- max = sim_control.time_control.max,
29+-- interval = sim_control.time_control.max/2.0
30+-- }
31+-- }
32+
33+-- Tracking
34+tracking = {
35+ label = 'probe_momentum_P8',
36+ folder = './',
37+ variable = {'momentum'},
38+ shape = {kind = 'canoND', object= { origin ={0., 0., 0.} } },
39+ time_control = {
40+ min = 0,
41+ max = sim_control.time_control.max,
42+ interval = sim_control.time_control.max/2.0
43+ },
44+ output = { format = 'ascii', ndofs = 1 }, -- 'asciiSpatial', 'harvester', 'convergence'
45+ }
46+
47+-- the filename of the timing results i.e. output for performance measurements
48+timing_file = 'timing.res'
49+
50+characteristic = 0.0
51+function relax_velocity(x,y,z,t)
52+ return {0.0,0.0,0.0}
53+end
54+relax_temperature = 0.0
55+
56+
57+variable = {
58+ -- This is the global material fur Euler 3D. It consists of three different
59+ -- components, characteristics with one scalar, relax_velocity with three
60+ -- scalars and relax_temperature with one scalar, this we need five scalars
61+ -- for this equation system.
62+ -- As this is the global fallback material, we define each material to be a
63+ -- neutral term, which in this case is 0.
64+
65+ {
66+ name = 'characteristic',
67+ ncomponents = 1,
68+ vartype = "st_fun",
69+ st_fun = characteristic
70+
71+ },
72+
73+ {
74+ name = 'relax_velocity',
75+ ncomponents = 3,
76+ vartype = "st_fun",
77+ st_fun = relax_velocity
78+
79+ },
80+
81+ {
82+ name = 'relax_temperature',
83+ ncomponents = 1,
84+ vartype = "st_fun",
85+ st_fun = relax_temperature
86+
87+ },
88+
89+
90+}
91+
92+-- Equation definitions --
93+equation = {
94+ name = 'euler',
95+ therm_cond = 2.555e-02,
96+ isen_coef = 1.4,
97+ r = 296.0,
98+ material = {
99+ characteristic = 'characteristic',
100+ relax_velocity = 'relax_velocity',
101+ relax_temperature = 'relax_temperature'
102+
103+ }
104+}
105+-- (cv) heat capacity and (r) ideal gas constant
106+equation["cv"] = equation["r"] / (equation["isen_coef"] - 1.0)
107+
108+-- Scheme definitions --
109+scheme = {
110+ -- the spatial discretization scheme
111+ spatial = {
112+ name = 'modg', -- we use the modal discontinuous Galerkin scheme
113+ space = 'P', -- Polynomial space is P
114+ m = 7, -- the maximal polynomial degree for each spatial direction
115+ dealiasFactor = 1.0, -- factor to remove aliases: 1.0 means no additional dealiasing
116+ blocksize = 32,
117+ },
118+ -- the temporal discretization scheme
119+ temporal = {
120+ name = 'explicitRungeKutta', --'explicitEuler',
121+ steps = 4,
122+ -- how to control the timestep
123+ control = {
124+ name = 'cfl', -- the name of the timestep control mechanism
125+ cfl = 0.6, -- CourantÐFriedrichsÐLewy number
126+ },
127+ },
128+}
129+
130+width = 0.07
131+xDist = 0.1
132+vel = 50.0
133+periods=2
134+function iniVelX(x,y,z)
135+ center = math.sin(periods*math.pi*x)*xDist
136+ return vel*tanh((y-center)/width)
137+end
138+
139+projection = {
140+ kind = 'fpt', -- 'fpt' or 'l2p', default 'l2p'
141+ -- for fpt the nodes are automatically 'chebyshev'
142+ -- for lep the nodes are automatically 'gauss-legendre'
143+ -- lobattoPoints = false -- if lobatto points should be used, default = false
144+ factor = 1.0, -- dealising factpr for fpt, oversampling factor for l2p, float, default 1.0
145+ -- blocksize = 32, -- for fpt, default -1
146+ -- fftMultiThread = false -- for fpt, logical, default false
147+ }
148+
149+
150+-- This is a very simple example to define constant boundary condtions.
151+initial_condition = { density = 1.225,
152+ pressure = 100000,
153+ velocityX = iniVelX,
154+ velocityY = 0.0,
155+ velocityZ = 0.0,
156+ -- projOverSampling = 1,
157+ -- useFpt = true,
158+ }
159+
160+-- Boundary definitions
161+boundary_condition = {
162+ {
163+ label = 'slipSouth',
164+ kind = 'slipwall',
165+ }
166+ ,
167+ {
168+ label = 'slipNorth',
169+ kind = 'slipwall',
170+ }
171+ ,
172+ {
173+ label = 'slipTop',
174+ kind = 'slipwall',
175+ }
176+ ,
177+ {
178+ label = 'slipBottom',
179+ kind = 'slipwall',
180+ }
181+ ,
182+ }
diff -r 238480729f8a -r ff93ce333570 testsuite/fluid/shear-layer/ref_shear_layer_modg_probe_momentum_P8_p00000.res
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testsuite/fluid/shear-layer/ref_shear_layer_modg_probe_momentum_P8_p00000.res Thu Sep 05 16:48:13 2019 +0200
@@ -0,0 +1,5 @@
1+# Rank of the process: 0
2+# time momentum_01 momentum_02 momentum_03
3+ 0.0000000000000000E+000 0.1652036621219080E+002 0.0000000000000000E+000 0.0000000000000000E+000
4+ 0.6039621312389672E-005 0.1655911935441632E+002 0.3853978612808426E-002 0.0000000000000000E+000
5+ 0.1000000000000000E-004 0.1658424414741227E+002 0.1057746453818758E-001 0.0000000000000000E+000
diff -r 238480729f8a -r ff93ce333570 testsuite/fluid/shear-parabola/xdir/common.lua
--- a/testsuite/fluid/shear-parabola/xdir/common.lua Fri Aug 23 05:46:53 2019 +0200
+++ b/testsuite/fluid/shear-parabola/xdir/common.lua Thu Sep 05 16:48:13 2019 +0200
@@ -1,1 +1,134 @@
1-../common.lua
\ No newline at end of file
1+-- Shear hat configuration: --
2+-- A small setup with a flow in y-direction and a hat function variation
3+-- of the -y velocity in x-direction.
4+--
5+-- This is the common configuration for 2D and 3D.
6+sim_name = 'shear-parabola'
7+sim_control = {
8+ time_control = {
9+ max = { iter = 400 },
10+ min = 0.0,
11+ interval = { iter = 1 },
12+ }
13+}
14+
15+degree = 5
16+mach = 0.1
17+dx = 1.0e-4
18+cfl = 0.8
19+cfl_visc = 0.4
20+
21+-- Material:
22+isen = 1.4
23+boltz = 287.0
24+rho = 1.4
25+p = 1.0
26+conducT = 0.5
27+mu = 2.0
28+
29+-- Interior penalization parameter:
30+c2 = 8./3.
31+
32+-- Equation definitions
33+equation = {
34+ name = 'navier_stokes',
35+ isen_coef = isen,
36+ r = boltz,
37+ -- Viscous parameters
38+ therm_cond = conducT,
39+ mu = mu,
40+ ip_param = c2*3*(degree+2)/(2*(degree+3)),
41+ material = {
42+ characteristic = 0.0,
43+ relax_velocity = {0.0, 0.0, 0.0},
44+ relax_temperature = 0.0
45+ }
46+}
47+-- (cv) heat capacity and (r) ideal gas constant
48+equation["cv"] = equation["r"] / (equation["isen_coef"] - 1.0)
49+
50+
51+-- Mesh:
52+mesh = {
53+ predefined = 'cube',
54+ origin = { -0.5*dx, -0.5*dx, -0.5*dx },
55+ length = dx,
56+ refinementLevel = 0
57+}
58+
59+-- Definition of velocity field.
60+mean_velocity = mach * math.sqrt(isen * p / rho )
61+max_dv = 0.5*mean_velocity
62+
63+parabola = function(x)
64+ -- A parabola defined by the mean velocity, and the maximal
65+ -- deviation from that mean velocity (max_dv).
66+ xi = 2*x/dx
67+ return mean_velocity - max_dv * 0.5 * (3*xi*xi - 1)
68+end
69+
70+-- Spatial function to describe the y-velocity profile
71+velX = function(x,y,z)
72+ return parabola(x)
73+end
74+velY = function(x,y,z)
75+ return parabola(y)
76+end
77+velZ = function(x,y,z)
78+ return parabola(z)
79+end
80+
81+-- Scheme definitions --
82+scheme = {
83+ spatial = {
84+ name = 'modg',
85+ m = degree
86+ },
87+ temporal = {
88+ name = 'explicitRungeKutta',
89+ steps = 4,
90+ control = {
91+ name = 'cfl',
92+ cfl = cfl,
93+ cfl_visc = cfl_visc
94+ }
95+ }
96+}
97+
98+projection = {
99+ kind = 'fpt',
100+ factor = 1.0
101+}
102+
103+
104+-- Tracking
105+ply_sampling = {
106+ nlevels = 5,
107+ tolerance = 0.01,
108+ dof_reduction = 1
109+}
110+
111+tracking = {
112+ label = 'track_shearparabola',
113+ folder = './',
114+ variable = {'momentum', 'density', 'energy', 'velocity'},
115+ shape = {kind = 'all'},
116+ time_control = {
117+ min = 0,
118+ max = sim_control.time_control.max,
119+ interval = {iter = 1}
120+ },
121+ output = { format = 'vtk' }
122+}
123+--tracking = {
124+-- label = 'track_shearparabola',
125+-- folder = './',
126+-- variable = {'momentum','density','energy'},
127+-- shape = {kind = 'canoND', object= { origin ={0., 0., 0.} } },
128+-- time_control = {
129+-- min = 0,
130+-- max = sim_control.time_control.max,
131+-- interval = {iter = 10}
132+-- },
133+-- output = { format = 'vtu', ndofs = 1, use_get_point = true }
134+--}
diff -r 238480729f8a -r ff93ce333570 testsuite/fluid/shear-parabola/ydir/common.lua
--- a/testsuite/fluid/shear-parabola/ydir/common.lua Fri Aug 23 05:46:53 2019 +0200
+++ b/testsuite/fluid/shear-parabola/ydir/common.lua Thu Sep 05 16:48:13 2019 +0200
@@ -1,1 +1,134 @@
1-../common.lua
\ No newline at end of file
1+-- Shear hat configuration: --
2+-- A small setup with a flow in y-direction and a hat function variation
3+-- of the -y velocity in x-direction.
4+--
5+-- This is the common configuration for 2D and 3D.
6+sim_name = 'shear-parabola'
7+sim_control = {
8+ time_control = {
9+ max = { iter = 400 },
10+ min = 0.0,
11+ interval = { iter = 1 },
12+ }
13+}
14+
15+degree = 5
16+mach = 0.1
17+dx = 1.0e-4
18+cfl = 0.8
19+cfl_visc = 0.4
20+
21+-- Material:
22+isen = 1.4
23+boltz = 287.0
24+rho = 1.4
25+p = 1.0
26+conducT = 0.5
27+mu = 2.0
28+
29+-- Interior penalization parameter:
30+c2 = 8./3.
31+
32+-- Equation definitions
33+equation = {
34+ name = 'navier_stokes',
35+ isen_coef = isen,
36+ r = boltz,
37+ -- Viscous parameters
38+ therm_cond = conducT,
39+ mu = mu,
40+ ip_param = c2*3*(degree+2)/(2*(degree+3)),
41+ material = {
42+ characteristic = 0.0,
43+ relax_velocity = {0.0, 0.0, 0.0},
44+ relax_temperature = 0.0
45+ }
46+}
47+-- (cv) heat capacity and (r) ideal gas constant
48+equation["cv"] = equation["r"] / (equation["isen_coef"] - 1.0)
49+
50+
51+-- Mesh:
52+mesh = {
53+ predefined = 'cube',
54+ origin = { -0.5*dx, -0.5*dx, -0.5*dx },
55+ length = dx,
56+ refinementLevel = 0
57+}
58+
59+-- Definition of velocity field.
60+mean_velocity = mach * math.sqrt(isen * p / rho )
61+max_dv = 0.5*mean_velocity
62+
63+parabola = function(x)
64+ -- A parabola defined by the mean velocity, and the maximal
65+ -- deviation from that mean velocity (max_dv).
66+ xi = 2*x/dx
67+ return mean_velocity - max_dv * 0.5 * (3*xi*xi - 1)
68+end
69+
70+-- Spatial function to describe the y-velocity profile
71+velX = function(x,y,z)
72+ return parabola(x)
73+end
74+velY = function(x,y,z)
75+ return parabola(y)
76+end
77+velZ = function(x,y,z)
78+ return parabola(z)
79+end
80+
81+-- Scheme definitions --
82+scheme = {
83+ spatial = {
84+ name = 'modg',
85+ m = degree
86+ },
87+ temporal = {
88+ name = 'explicitRungeKutta',
89+ steps = 4,
90+ control = {
91+ name = 'cfl',
92+ cfl = cfl,
93+ cfl_visc = cfl_visc
94+ }
95+ }
96+}
97+
98+projection = {
99+ kind = 'fpt',
100+ factor = 1.0
101+}
102+
103+
104+-- Tracking
105+ply_sampling = {
106+ nlevels = 5,
107+ tolerance = 0.01,
108+ dof_reduction = 1
109+}
110+
111+tracking = {
112+ label = 'track_shearparabola',
113+ folder = './',
114+ variable = {'momentum', 'density', 'energy', 'velocity'},
115+ shape = {kind = 'all'},
116+ time_control = {
117+ min = 0,
118+ max = sim_control.time_control.max,
119+ interval = {iter = 1}
120+ },
121+ output = { format = 'vtk' }
122+}
123+--tracking = {
124+-- label = 'track_shearparabola',
125+-- folder = './',
126+-- variable = {'momentum','density','energy'},
127+-- shape = {kind = 'canoND', object= { origin ={0., 0., 0.} } },
128+-- time_control = {
129+-- min = 0,
130+-- max = sim_control.time_control.max,
131+-- interval = {iter = 10}
132+-- },
133+-- output = { format = 'vtu', ndofs = 1, use_get_point = true }
134+--}
diff -r 238480729f8a -r ff93ce333570 testsuite/fluid/shear-parabola/zdir/common.lua
--- a/testsuite/fluid/shear-parabola/zdir/common.lua Fri Aug 23 05:46:53 2019 +0200
+++ b/testsuite/fluid/shear-parabola/zdir/common.lua Thu Sep 05 16:48:13 2019 +0200
@@ -1,1 +1,134 @@
1-../common.lua
\ No newline at end of file
1+-- Shear hat configuration: --
2+-- A small setup with a flow in y-direction and a hat function variation
3+-- of the -y velocity in x-direction.
4+--
5+-- This is the common configuration for 2D and 3D.
6+sim_name = 'shear-parabola'
7+sim_control = {
8+ time_control = {
9+ max = { iter = 400 },
10+ min = 0.0,
11+ interval = { iter = 1 },
12+ }
13+}
14+
15+degree = 5
16+mach = 0.1
17+dx = 1.0e-4
18+cfl = 0.8
19+cfl_visc = 0.4
20+
21+-- Material:
22+isen = 1.4
23+boltz = 287.0
24+rho = 1.4
25+p = 1.0
26+conducT = 0.5
27+mu = 2.0
28+
29+-- Interior penalization parameter:
30+c2 = 8./3.
31+
32+-- Equation definitions
33+equation = {
34+ name = 'navier_stokes',
35+ isen_coef = isen,
36+ r = boltz,
37+ -- Viscous parameters
38+ therm_cond = conducT,
39+ mu = mu,
40+ ip_param = c2*3*(degree+2)/(2*(degree+3)),
41+ material = {
42+ characteristic = 0.0,
43+ relax_velocity = {0.0, 0.0, 0.0},
44+ relax_temperature = 0.0
45+ }
46+}
47+-- (cv) heat capacity and (r) ideal gas constant
48+equation["cv"] = equation["r"] / (equation["isen_coef"] - 1.0)
49+
50+
51+-- Mesh:
52+mesh = {
53+ predefined = 'cube',
54+ origin = { -0.5*dx, -0.5*dx, -0.5*dx },
55+ length = dx,
56+ refinementLevel = 0
57+}
58+
59+-- Definition of velocity field.
60+mean_velocity = mach * math.sqrt(isen * p / rho )
61+max_dv = 0.5*mean_velocity
62+
63+parabola = function(x)
64+ -- A parabola defined by the mean velocity, and the maximal
65+ -- deviation from that mean velocity (max_dv).
66+ xi = 2*x/dx
67+ return mean_velocity - max_dv * 0.5 * (3*xi*xi - 1)
68+end
69+
70+-- Spatial function to describe the y-velocity profile
71+velX = function(x,y,z)
72+ return parabola(x)
73+end
74+velY = function(x,y,z)
75+ return parabola(y)
76+end
77+velZ = function(x,y,z)
78+ return parabola(z)
79+end
80+
81+-- Scheme definitions --
82+scheme = {
83+ spatial = {
84+ name = 'modg',
85+ m = degree
86+ },
87+ temporal = {
88+ name = 'explicitRungeKutta',
89+ steps = 4,
90+ control = {
91+ name = 'cfl',
92+ cfl = cfl,
93+ cfl_visc = cfl_visc
94+ }
95+ }
96+}
97+
98+projection = {
99+ kind = 'fpt',
100+ factor = 1.0
101+}
102+
103+
104+-- Tracking
105+ply_sampling = {
106+ nlevels = 5,
107+ tolerance = 0.01,
108+ dof_reduction = 1
109+}
110+
111+tracking = {
112+ label = 'track_shearparabola',
113+ folder = './',
114+ variable = {'momentum', 'density', 'energy', 'velocity'},
115+ shape = {kind = 'all'},
116+ time_control = {
117+ min = 0,
118+ max = sim_control.time_control.max,
119+ interval = {iter = 1}
120+ },
121+ output = { format = 'vtk' }
122+}
123+--tracking = {
124+-- label = 'track_shearparabola',
125+-- folder = './',
126+-- variable = {'momentum','density','energy'},
127+-- shape = {kind = 'canoND', object= { origin ={0., 0., 0.} } },
128+-- time_control = {
129+-- min = 0,
130+-- max = sim_control.time_control.max,
131+-- interval = {iter = 10}
132+-- },
133+-- output = { format = 'vtu', ndofs = 1, use_get_point = true }
134+--}
diff -r 238480729f8a -r ff93ce333570 testsuite/fluid/shear-tube/ref_shear_tube_track_momentum_p00000.res
--- a/testsuite/fluid/shear-tube/ref_shear_tube_track_momentum_p00000.res Fri Aug 23 05:46:53 2019 +0200
+++ b/testsuite/fluid/shear-tube/ref_shear_tube_track_momentum_p00000.res Thu Sep 05 16:48:13 2019 +0200
@@ -1,103 +1,103 @@
11 # Rank of the process: 0
22 # time momentum_01 momentum_02 momentum_03
33 0.0000000000000000E+000 0.0000000000000000E+000 0.0000000000000000E+000 0.0000000000000000E+000
4- 0.2500000000000000E-003 0.6146904823261729E-004 0.5553016690437863E-005 0.5553016690437863E-005
5- 0.5000000000000000E-003 0.2290752556786768E-003 0.2282399111435256E-004 0.2282399111463509E-004
6- 0.7500000000000000E-003 0.4883126446892276E-003 0.5194927417682872E-004 0.5194927418175550E-004
7- 0.1000000000000000E-002 0.8260855037275132E-003 0.9294264345659938E-004 0.9294264348100969E-004
8- 0.1250000000000000E-002 0.1230618529271000E-002 0.1457027291001263E-003 0.1457027291753860E-003
9- 0.1500000000000000E-002 0.1691361404111037E-002 0.2100238838417910E-003 0.2100238840205883E-003
10- 0.1750000000000000E-002 0.2198896027391388E-002 0.2856091084318405E-003 0.2856091087912747E-003
11- 0.2000000000000000E-002 0.2744841302808833E-002 0.3720834140967946E-003 0.3720834147397758E-003
12- 0.2250000000000000E-002 0.3321761636006525E-002 0.4690071178359747E-003 0.4690071188910345E-003
13- 0.2500000000000000E-002 0.3923077476864374E-002 0.5758883503883759E-003 0.5758883520085859E-003
14- 0.2750000000000001E-002 0.4542989772806819E-002 0.6921950448192482E-003 0.6921950471800186E-003
15- 0.3000000000000001E-002 0.5176403949278349E-002 0.8173655777262718E-003 0.8173655810222856E-003
16- 0.3250000000000001E-002 0.5818859893041043E-002 0.9508182160310238E-003 0.9508182204733065E-003
17- 0.3500000000000001E-002 0.6466466810086154E-002 0.1091959324678697E-002 0.1091959330491427E-002
18- 0.3750000000000002E-002 0.7115852975921952E-002 0.1240190827700763E-002 0.1240190835111868E-002
19- 0.4000000000000002E-002 0.7764105300086761E-002 0.1394915758610418E-002 0.1394915767848015E-002
20- 0.4250000000000002E-002 0.8408713053547947E-002 0.1555542800757907E-002 0.1555542812045700E-002
21- 0.4500000000000002E-002 0.9047530672267816E-002 0.1721490635110094E-002 0.1721490648662894E-002
22- 0.4750000000000002E-002 0.9678737566436266E-002 0.1892191071023643E-002 0.1892191087043841E-002
23- 0.5000000000000003E-002 0.1030080162238038E-001 0.2067091420114215E-002 0.2067091438788976E-002
24- 0.5250000000000003E-002 0.1091244637822873E-001 0.2245656211864417E-002 0.2245656233363623E-002
25- 0.5500000000000003E-002 0.1151262273993960E-001 0.2427368358207494E-002 0.2427368382683187E-002
26- 0.5750000000000003E-002 0.1210048052166739E-001 0.2611729795970681E-002 0.2611729823554886E-002
27- 0.6000000000000004E-002 0.1267534518945360E-001 0.2798261691748826E-002 0.2798261722551920E-002
28- 0.6250000000000004E-002 0.1323669637985251E-001 0.2986504349443678E-002 0.2986504383555343E-002
29- 0.6500000000000004E-002 0.1378414799682469E-001 0.3176016871425213E-002 0.3176016908913067E-002
30- 0.6750000000000004E-002 0.1431743209399618E-001 0.3366376564285896E-002 0.3366376605199188E-002
31- 0.7000000000000004E-002 0.1483638222230923E-001 0.3557178214123767E-002 0.3557178258492294E-002
32- 0.7250000000000005E-002 0.1534091988903674E-001 0.3748033216030735E-002 0.3748033263867110E-002
33- 0.7500000000000005E-002 0.1583105888747338E-001 0.3938567644964249E-002 0.3938567696260629E-002
34- 0.7750000000000005E-002 0.1630687794718923E-001 0.4128421977087750E-002 0.4128422031820917E-002
35- 0.8000000000000005E-002 0.1676849240823419E-001 0.4317251269290494E-002 0.4317251327421461E-002
36- 0.8250000000000006E-002 0.1721606023628226E-001 0.4504723678286877E-002 0.4504723739762215E-002
37- 0.8500000000000006E-002 0.1764977708313843E-001 0.4690519459369144E-002 0.4690519524122080E-002
38- 0.8750000000000006E-002 0.1806986959081637E-001 0.4874330165981370E-002 0.4874330233932802E-002
39- 0.9000000000000006E-002 0.1847658938921660E-001 0.5055857928250019E-002 0.5055857999309679E-002
40- 0.9250000000000006E-002 0.1887020782332232E-001 0.5234814811975701E-002 0.5234814886042397E-002
41- 0.9500000000000007E-002 0.1925101167932849E-001 0.5410922261547455E-002 0.5410922338510527E-002
42- 0.9750000000000007E-002 0.1961929955239329E-001 0.5583910649537820E-002 0.5583910729277660E-002
43- 0.1000000000000001E-001 0.1997537829234169E-001 0.5753518936589106E-002 0.5753519018977773E-002
44- 0.1025000000000001E-001 0.2031955997843448E-001 0.5919494425075083E-002 0.5919494509976846E-002
45- 0.1050000000000001E-001 0.2065215944028495E-001 0.6081592607975959E-002 0.6081592695247765E-002
46- 0.1075000000000001E-001 0.2097349107658072E-001 0.6239577127238758E-002 0.6239577216732565E-002
47- 0.1100000000000001E-001 0.2128386643302631E-001 0.6393219815474771E-002 0.6393219907033245E-002
48- 0.1125000000000001E-001 0.2158359537510275E-001 0.6542300716802474E-002 0.6542300810220246E-002
49- 0.1150000000000001E-001 0.2187298613133428E-001 0.6686608186441722E-002 0.6686608281556593E-002
50- 0.1175000000000001E-001 0.2215234226235225E-001 0.6825939277016996E-002 0.6825939373659245E-002
51- 0.1200000000000001E-001 0.2242196191018119E-001 0.6960100065219136E-002 0.6960100163213060E-002
52- 0.1225000000000001E-001 0.2268213716404092E-001 0.7088906028641146E-002 0.7088906127805092E-002
53- 0.1250000000000001E-001 0.2293315377870854E-001 0.7212182450290476E-002 0.7212182550436716E-002
54- 0.1275000000000001E-001 0.2317529084511862E-001 0.7329764870988173E-002 0.7329764971922594E-002
55- 0.1300000000000001E-001 0.2340882103699116E-001 0.7441499502647326E-002 0.7441499604169951E-002
56- 0.1325000000000001E-001 0.2363400935622931E-001 0.7547243862895560E-002 0.7547243964800840E-002
57- 0.1350000000000001E-001 0.2385111260450265E-001 0.7646867370152241E-002 0.7646867472228701E-002
58- 0.1375000000000001E-001 0.2406038110703572E-001 0.7740251556653852E-002 0.7740251658680088E-002
59- 0.1400000000000001E-001 0.2426205819369745E-001 0.7827290735879120E-002 0.7827290837635411E-002
60- 0.1425000000000001E-001 0.2445637956477853E-001 0.7907892673355794E-002 0.7907892774612610E-002
61- 0.1450000000000001E-001 0.2464357410338238E-001 0.7981978749281330E-002 0.7981978849801036E-002
62- 0.1475000000000001E-001 0.2482386388770498E-001 0.8049484189170793E-002 0.8049484288710877E-002
63- 0.1500000000000001E-001 0.2499746503258954E-001 0.8110358830867170E-002 0.8110358929182505E-002
64- 0.1525000000000001E-001 0.2516458811459920E-001 0.8164567634390848E-002 0.8164567731231198E-002
65- 0.1550000000000001E-001 0.2532543773868931E-001 0.8212090458612278E-002 0.8212090553726263E-002
66- 0.1575000000000001E-001 0.2548021317002884E-001 0.8252922519647236E-002 0.8252922612778343E-002
67- 0.1600000000000001E-001 0.2562910858181799E-001 0.8287074579882753E-002 0.8287074670769758E-002
68- 0.1625000000000001E-001 0.2577231326392645E-001 0.8314572979139543E-002 0.8314573067517546E-002
69- 0.1650000000000001E-001 0.2591001192198016E-001 0.8335459775323876E-002 0.8335459860923655E-002
70- 0.1675000000000001E-001 0.2604238491789257E-001 0.8349792736303608E-002 0.8349792818851978E-002
71- 0.1700000000000001E-001 0.2616960849849881E-001 0.8357645270853314E-002 0.8357645350073451E-002
72- 0.1725000000000001E-001 0.2629185498239136E-001 0.8359106278780049E-002 0.8359106354391816E-002
73- 0.1750000000000001E-001 0.2640929297853570E-001 0.8354279952262806E-002 0.8354280023983104E-002
74- 0.1775000000000001E-001 0.2652208757644237E-001 0.8343285506547171E-002 0.8343285574090299E-002
75- 0.1800000000000001E-001 0.2663040052535415E-001 0.8326256848378481E-002 0.8326256911456512E-002
76- 0.1825000000000001E-001 0.2673439035890169E-001 0.8303342131199404E-002 0.8303342189522249E-002
77- 0.1850000000000001E-001 0.2683421256777468E-001 0.8274703341405815E-002 0.8274703394681976E-002
78- 0.1875000000000001E-001 0.2693001974259819E-001 0.8240515817631877E-002 0.8240515865569134E-002
79- 0.1900000000000001E-001 0.2702196165615520E-001 0.8200967634693161E-002 0.8200967676998600E-002
80- 0.1925000000000001E-001 0.2711018534091663E-001 0.8156258962894250E-002 0.8156258999274725E-002
81- 0.1950000000000001E-001 0.2719483515162235E-001 0.8106601384381157E-002 0.8106601414543722E-002
82- 0.1975000000000001E-001 0.2727605282445829E-001 0.8052217161554187E-002 0.8052217185206488E-002
83- 0.2000000000000001E-001 0.2735397752143217E-001 0.7993338461897859E-002 0.7993338478748578E-002
84- 0.2025000000000001E-001 0.2742874586459920E-001 0.7930206544749924E-002 0.7930206554509212E-002
85- 0.2050000000000001E-001 0.2750049195497960E-001 0.7863070912022844E-002 0.7863070914402691E-002
86- 0.2075000000000001E-001 0.2756934750541181E-001 0.7792188433087203E-002 0.7792188427801817E-002
87- 0.2100000000000002E-001 0.2763544192016223E-001 0.7717822462120015E-002 0.7717822448886032E-002
88- 0.2125000000000002E-001 0.2769890259433497E-001 0.7640241932434264E-002 0.7640241910970519E-002
89- 0.2150000000000002E-001 0.2775985403159191E-001 0.7559720413833651E-002 0.7559720383862018E-002
90- 0.2175000000000002E-001 0.2781841776494237E-001 0.7476535165930648E-002 0.7476535127176970E-002
91- 0.2200000000000002E-001 0.2787471266488019E-001 0.7390966139118217E-002 0.7390966091312726E-002
92- 0.2225000000000002E-001 0.2792885451392270E-001 0.7303294953546551E-002 0.7303294896424255E-002
93- 0.2250000000000002E-001 0.2798095630421332E-001 0.7213803906554067E-002 0.7213803839855139E-002
94- 0.2275000000000002E-001 0.2803112839624099E-001 0.7122775001234952E-002 0.7122774924704742E-002
95- 0.2300000000000002E-001 0.2807947898696207E-001 0.7030489053261893E-002 0.7030488966650997E-002
96- 0.2325000000000002E-001 0.2812611324585980E-001 0.6937224793407632E-002 0.6937224696472580E-002
97- 0.2350000000000002E-001 0.2817113277858640E-001 0.6843257880459483E-002 0.6843257772963358E-002
98- 0.2375000000000002E-001 0.2821463621500663E-001 0.6748859933356852E-002 0.6748859815069625E-002
99- 0.2400000000000002E-001 0.2825671922107902E-001 0.6654297658167796E-002 0.6654297528866602E-002
100- 0.2425000000000002E-001 0.2829747444168065E-001 0.6559831995744520E-002 0.6559831855213936E-002
101- 0.2450000000000002E-001 0.2833699145167333E-001 0.6465717319165390E-002 0.6465717167197681E-002
102- 0.2475000000000002E-001 0.2837535670890491E-001 0.6372200662189022E-002 0.6372200498584346E-002
103- 0.2500000000000002E-001 0.2841265350737404E-001 0.6279520974757272E-002 0.6279520799323871E-002
4+ 0.2500000000000000E-003 0.6149290047155642E-004 0.5554781749246063E-005 0.5554781749247840E-005
5+ 0.5000000000000000E-003 0.2291774161622855E-003 0.2282931498225865E-004 0.2282931497184592E-004
6+ 0.7500000000000000E-003 0.4885507274614538E-003 0.5195864774687701E-004 0.5195864770458734E-004
7+ 0.1000000000000000E-002 0.8265179447085613E-003 0.9295564196835210E-004 0.9295564184311564E-004
8+ 0.1250000000000000E-002 0.1231302671233677E-002 0.1457183440364434E-003 0.1457183437252033E-003
9+ 0.1500000000000000E-002 0.1692351989052180E-002 0.2100407875722642E-003 0.2100407869710988E-003
10+ 0.1750000000000000E-002 0.2200244037434082E-002 0.2856258498554606E-003 0.2856258490189485E-003
11+ 0.2000000000000000E-002 0.2746593110262728E-002 0.3720985519053182E-003 0.3720985509136430E-003
12+ 0.2250000000000000E-002 0.3323958386613649E-002 0.4690192993352976E-003 0.4690192982957974E-003
13+ 0.2500000000000000E-002 0.3925754756944267E-002 0.5758963510887350E-003 0.5758963501198739E-003
14+ 0.2750000000000001E-002 0.4546177424896474E-002 0.6921977749617708E-003 0.6921977741994297E-003
15+ 0.3000000000000001E-002 0.5180126041725149E-002 0.8173620668814908E-003 0.8173620666006788E-003
16+ 0.3250000000000001E-002 0.5823134795062111E-002 0.9508075841739979E-003 0.9508075835347245E-003
17+ 0.3500000000000001E-002 0.6471307327392122E-002 0.1091940742553314E-002 0.1091940739668593E-002
18+ 0.3750000000000002E-002 0.7121266517439104E-002 0.1240163476537962E-002 0.1240163472143911E-002
19+ 0.4000000000000002E-002 0.7770094419799219E-002 0.1394878806454322E-002 0.1394878801201449E-002
20+ 0.4250000000000002E-002 0.8415275850865316E-002 0.1555495374698918E-002 0.1555495369182773E-002
21+ 0.4500000000000002E-002 0.9054661006766494E-002 0.1721431793537365E-002 0.1721431788300830E-002
22+ 0.4750000000000002E-002 0.9686425489636278E-002 0.1892119791109028E-002 0.1892119786637939E-002
23+ 0.5000000000000003E-002 0.1030903377416860E-001 0.2067006593888750E-002 0.2067006590612811E-002
24+ 0.5250000000000003E-002 0.1092120638133195E-001 0.2245556651331526E-002 0.2245556649637829E-002
25+ 0.5500000000000003E-002 0.1152189161659333E-001 0.2427252807831549E-002 0.2427252808037959E-002
26+ 0.5750000000000003E-002 0.1211023702669540E-001 0.2611596955539276E-002 0.2611596957915765E-002
27+ 0.6000000000000004E-002 0.1268556614352558E-001 0.2798110245391933E-002 0.2798110250172046E-002
28+ 0.6250000000000004E-002 0.1324735704860030E-001 0.2986332997620066E-002 0.2986333004992620E-002
29+ 0.6500000000000004E-002 0.1379522241601838E-001 0.3175824367947258E-002 0.3175824378690567E-002
30+ 0.6750000000000004E-002 0.1432889337682052E-001 0.3366161756917107E-002 0.3366161771065823E-002
31+ 0.7000000000000004E-002 0.1484820283951341E-001 0.3556940085191555E-002 0.3556940102866647E-002
32+ 0.7250000000000005E-002 0.1535307196592979E-001 0.3747770920919501E-002 0.3747770942099155E-002
33+ 0.7500000000000005E-002 0.1584351437241124E-001 0.3938280555327970E-002 0.3938280580000019E-002
34+ 0.7750000000000005E-002 0.1631960872239788E-001 0.4128109724859084E-002 0.4128109752966347E-002
35+ 0.8000000000000005E-002 0.1678147053500449E-001 0.4316913779165894E-002 0.4316913810623340E-002
36+ 0.8250000000000006E-002 0.1722925816349602E-001 0.4504361196623417E-002 0.4504361231329690E-002
37+ 0.8500000000000006E-002 0.1766316778819375E-001 0.4690132580958003E-002 0.4690132618800687E-002
38+ 0.8750000000000006E-002 0.1808342672823268E-001 0.4873919854345339E-002 0.4873919895383246E-002
39+ 0.9000000000000006E-002 0.1849028737944484E-001 0.5055425532052607E-002 0.5055425576080182E-002
40+ 0.9250000000000006E-002 0.1888402194548738E-001 0.5234362074103197E-002 0.5234362120790446E-002
41+ 0.9500000000000007E-002 0.1926491813232206E-001 0.5410451322018176E-002 0.5410451371254961E-002
42+ 0.9750000000000007E-002 0.1963327553185280E-001 0.5583424041613419E-002 0.5583424093268912E-002
43+ 0.1000000000000001E-001 0.1998940203985208E-001 0.5753019576739471E-002 0.5753019630683368E-002
44+ 0.1025000000000001E-001 0.2033361081708373E-001 0.5918985596730129E-002 0.5918985652834545E-002
45+ 0.1050000000000001E-001 0.2066621779099592E-001 0.6081077938498665E-002 0.6081077997377379E-002
46+ 0.1075000000000001E-001 0.2098753846159174E-001 0.6239060560585791E-002 0.6239060621840192E-002
47+ 0.1100000000000001E-001 0.2129788550395540E-001 0.6392705579982116E-002 0.6392705642996207E-002
48+ 0.1125000000000001E-001 0.2159756988862618E-001 0.6541793286178542E-002 0.6541793350714514E-002
49+ 0.1150000000000001E-001 0.2188690093104244E-001 0.6686112238440942E-002 0.6686112304419448E-002
50+ 0.1175000000000001E-001 0.2216618327107767E-001 0.6825459647199055E-002 0.6825459714537758E-002
51+ 0.1200000000000001E-001 0.2243571611267192E-001 0.6959641698113805E-002 0.6959641766738956E-002
52+ 0.1225000000000001E-001 0.2269579259113305E-001 0.7088473925564190E-002 0.7088473995407064E-002
53+ 0.1250000000000001E-001 0.2294669943572319E-001 0.7211781620647603E-002 0.7211781691645588E-002
54+ 0.1275000000000001E-001 0.2318871652135415E-001 0.7329400299165362E-002 0.7329400371266330E-002
55+ 0.1300000000000001E-001 0.2342211756157218E-001 0.7441176061988761E-002 0.7441176135139643E-002
56+ 0.1325000000000001E-001 0.2364716861742442E-001 0.7546966250506444E-002 0.7546966324662854E-002
57+ 0.1350000000000001E-001 0.2386412731915863E-001 0.7646640073603413E-002 0.7646640148729296E-002
58+ 0.1375000000000001E-001 0.2407324481803923E-001 0.7740078800140451E-002 0.7740078876209935E-002
59+ 0.1400000000000001E-001 0.2427476518739784E-001 0.7827176439892098E-002 0.7827176516863694E-002
60+ 0.1425000000000001E-001 0.2446892491031850E-001 0.7907840388120341E-002 0.7907840465945448E-002
61+ 0.1450000000000001E-001 0.2465595355370145E-001 0.7981991619660593E-002 0.7981991698318062E-002
62+ 0.1475000000000001E-001 0.2483607382711750E-001 0.8049564914705768E-002 0.8049564994164947E-002
63+ 0.1500000000000001E-001 0.2500950244599797E-001 0.8110509631367238E-002 0.8110509711571345E-002
64+ 0.1525000000000001E-001 0.2517645055942833E-001 0.8164790217616114E-002 0.8164790298577917E-002
65+ 0.1550000000000001E-001 0.2533712329593580E-001 0.8212385987417204E-002 0.8212386069052823E-002
66+ 0.1575000000000001E-001 0.2549172041441622E-001 0.8253291595167637E-002 0.8253291677396931E-002
67+ 0.1600000000000001E-001 0.2564043654408355E-001 0.8287517222442085E-002 0.8287517306660653E-002
68+ 0.1625000000000001E-001 0.2578346139458306E-001 0.8315088617487030E-002 0.8315088703309097E-002
69+ 0.1650000000000001E-001 0.2592098005869548E-001 0.8336047239596822E-002 0.8336047326724709E-002
70+ 0.1675000000000001E-001 0.2605317325294002E-001 0.8350450256196101E-002 0.8350450344340971E-002
71+ 0.1700000000000001E-001 0.2618021754858302E-001 0.8358370479099765E-002 0.8358370567981180E-002
72+ 0.1725000000000001E-001 0.2630228555943862E-001 0.8359896219859476E-002 0.8359896309201061E-002
73+ 0.1750000000000001E-001 0.2641954616272303E-001 0.8355131096136335E-002 0.8355131185665242E-002
74+ 0.1775000000000001E-001 0.2653216469114389E-001 0.8344193767228655E-002 0.8344193856673772E-002
75+ 0.1800000000000001E-001 0.2664030311348545E-001 0.8327217605921002E-002 0.8327217695768189E-002
76+ 0.1825000000000001E-001 0.2674412016029048E-001 0.8304350260256102E-002 0.8304350349920650E-002
77+ 0.1850000000000001E-001 0.2684377150053514E-001 0.8275753243676340E-002 0.8275753332341845E-002
78+ 0.1875000000000001E-001 0.2693940988701004E-001 0.8241601457904152E-002 0.8241601545296538E-002
79+ 0.1900000000000001E-001 0.2703118523298575E-001 0.8202082579729875E-002 0.8202082665568577E-002
80+ 0.1925000000000001E-001 0.2711924470174170E-001 0.8157396422821978E-002 0.8157396506819948E-002
81+ 0.1950000000000001E-001 0.2720373276488861E-001 0.8107754257719832E-002 0.8107754339582702E-002
82+ 0.1975000000000001E-001 0.2728479126310755E-001 0.8053378082647531E-002 0.8053378162073020E-002
83+ 0.2000000000000001E-001 0.2736255945176727E-001 0.7994499850340106E-002 0.7994499927017321E-002
84+ 0.2025000000000001E-001 0.2743717403691234E-001 0.7931360656669467E-002 0.7931360730277989E-002
85+ 0.2050000000000001E-001 0.2750876919385201E-001 0.7864209891981942E-002 0.7864209962193967E-002
86+ 0.2075000000000001E-001 0.2757747670301580E-001 0.7793304369444923E-002 0.7793304435917048E-002
87+ 0.2100000000000002E-001 0.2764342600030606E-001 0.7718907438534909E-002 0.7718907500904021E-002
88+ 0.2125000000000002E-001 0.2770674456903070E-001 0.7641288083222742E-002 0.7641288141115124E-002
89+ 0.2150000000000002E-001 0.2776755700991862E-001 0.7560719974633187E-002 0.7560720027676862E-002
90+ 0.2175000000000002E-001 0.2782598490247719E-001 0.7477480526867997E-002 0.7477480574666334E-002
91+ 0.2200000000000002E-001 0.2788214714659764E-001 0.7391849895513800E-002 0.7391849937664128E-002
92+ 0.2225000000000002E-001 0.2793615954168953E-001 0.7304109954215807E-002 0.7304109990327200E-002
93+ 0.2250000000000002E-001 0.2798813510714174E-001 0.7214543301709800E-002 0.7214543331384386E-002
94+ 0.2275000000000002E-001 0.2803818421328595E-001 0.7123432288978964E-002 0.7123432311802256E-002
95+ 0.2300000000000002E-001 0.2808641509722202E-001 0.7031058123603493E-002 0.7031058139153988E-002
96+ 0.2325000000000002E-001 0.2813293296789226E-001 0.6937699966191493E-002 0.6937699974053134E-002
97+ 0.2350000000000002E-001 0.2817783943791888E-001 0.6843633942383348E-002 0.6843633942138641E-002
98+ 0.2375000000000002E-001 0.2822123315033543E-001 0.6749132172475348E-002 0.6749132163704085E-002
99+ 0.2400000000000002E-001 0.2826320978192013E-001 0.6654461893843347E-002 0.6654461876123519E-002
100+ 0.2425000000000002E-001 0.2830386198643437E-001 0.6559884606223913E-002 0.6559884579133007E-002
101+ 0.2450000000000002E-001 0.2834327934548519E-001 0.6465655265277273E-002 0.6465655228393616E-002
102+ 0.2475000000000002E-001 0.2838154832109738E-001 0.6372021506199550E-002 0.6372021459103258E-002
103+ 0.2500000000000002E-001 0.2841875220903303E-001 0.6279222895983399E-002 0.6279222838257445E-002
旧リポジトリブラウザで表示