Loading [MathJax]/jax/output/HTML-CSS/config.js
Neko 0.9.1
A portable framework for high-order spectral element flow simulations
All Classes Namespaces Files Functions Variables Typedefs Enumerator Macros Pages
field_writer.f90
Go to the documentation of this file.
1! Copyright (c) 2024, The Neko Authors
2! All rights reserved.
3!
4! Redistribution and use in source and binary forms, with or without
5! modification, are permitted provided that the following conditions
6! are met:
7!
8! * Redistributions of source code must retain the above copyright
9! notice, this list of conditions and the following disclaimer.
10!
11! * Redistributions in binary form must reproduce the above
12! copyright notice, this list of conditions and the following
13! disclaimer in the documentation and/or other materials provided
14! with the distribution.
15!
16! * Neither the name of the authors nor the names of its
17! contributors may be used to endorse or promote products derived
18! from this software without specific prior written permission.
19!
20! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21! "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22! LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23! FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24! COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25! INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26! BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27! LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28! CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29! LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30! ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31! POSSIBILITY OF SUCH DAMAGE.
32!
33!
35
37 use num_types, only : rp, dp, sp
38 use json_module, only : json_file
41 use field, only : field_t
42 use operators, only : curl
43 use case, only : case_t
46 implicit none
47 private
48
50 type, public, extends(simulation_component_t) :: field_writer_t
52 type(fld_file_output_t), private :: output
53
54 contains
56 procedure, pass(this) :: init => field_writer_init_from_json
58 procedure, pass(this) :: init_from_attributes => &
61 procedure, pass(this) :: free => field_writer_free
63 procedure, pass(this) :: compute_ => field_writer_compute
64 end type field_writer_t
65
66contains
67
71 subroutine field_writer_init_from_json(this, json, case)
72 class(field_writer_t), intent(inout) :: this
73 type(json_file), intent(inout) :: json
74 class(case_t), intent(inout), target :: case
75 character(len=:), allocatable :: filename
76 character(len=:), allocatable :: precision
77 character(len=20), allocatable :: fields(:)
78
79 call this%init_base(json, case)
80 call json_get(json, "fields", fields)
81
82 if (json%valid_path("output_filename")) then
83 call json_get(json, "output_filename", filename)
84 if (json%valid_path("output_precision")) then
85 call json_get(json, "output_precision", precision)
86 if (precision == "double") then
87 call field_writer_init_from_attributes(this, fields, filename, dp)
88 else
89 call field_writer_init_from_attributes(this, fields, filename, sp)
90 end if
91 else
92 call field_writer_init_from_attributes(this, fields, filename)
93 end if
94 else
95 call field_writer_init_from_attributes(this, fields)
96 end if
97 end subroutine field_writer_init_from_json
98
105 subroutine field_writer_init_from_attributes(this, fields, filename, precision)
106 class(field_writer_t), intent(inout) :: this
107 character(len=20), allocatable, intent(in) :: fields(:)
108 character(len=*), intent(in), optional :: filename
109 integer, intent(in), optional :: precision
110 character(len=20) :: fieldi
111 integer :: i
112
113 ! Regsiter fields if they don't exist.
114 do i=1, size(fields)
115 fieldi = trim(fields(i))
116 call neko_field_registry%add_field(this%case%fluid%dm_Xh, fieldi,&
117 ignore_existing=.true.)
118 end do
119
120 if (present(filename)) then
121 if (present(precision)) then
122 call this%output%init(precision, filename, size(fields))
123 else
124 call this%output%init(sp, filename, size(fields))
125 end if
126 do i=1, size(fields)
127 fieldi = trim(fields(i))
128 call this%output%fields%assign(i, neko_field_registry%get_field(fieldi))
129 end do
130
131 call this%case%output_controller%add(this%output, &
132 this%output_controller%control_value, &
133 this%output_controller%control_mode)
134 else
135 do i=1, size(fields)
136 fieldi = trim(fields(i))
137 call this%case%f_out%fluid%append(neko_field_registry%get_field(fieldi))
138 end do
139 end if
140
142
144 subroutine field_writer_free(this)
145 class(field_writer_t), intent(inout) :: this
146 call this%free_base()
147 end subroutine field_writer_free
148
152 subroutine field_writer_compute(this, t, tstep)
153 class(field_writer_t), intent(inout) :: this
154 real(kind=rp), intent(in) :: t
155 integer, intent(in) :: tstep
156
157 end subroutine field_writer_compute
158
159end module field_writer
Retrieves a parameter by name or assigns a provided default value. In the latter case also adds the m...
Retrieves a parameter by name or throws an error.
Defines a simulation case.
Definition case.f90:34
Defines a registry for storing solution fields.
type(field_registry_t), target, public neko_field_registry
Global field registry.
Implements the field_writer_t type.
subroutine field_writer_free(this)
Destructor.
subroutine field_writer_init_from_attributes(this, fields, filename, precision)
Actual constructor.
subroutine field_writer_init_from_json(this, json, case)
Constructor from json.
subroutine field_writer_compute(this, t, tstep)
Here to comply with the interface, does nothing.
Defines a field.
Definition field.f90:34
Implements fld_file_output_t.
Utilities for retrieving parameters from the case files.
integer, parameter, public dp
Definition num_types.f90:9
integer, parameter, public sp
Definition num_types.f90:8
integer, parameter, public rp
Global precision used in computations.
Definition num_types.f90:12
Operators.
Definition operators.f90:34
subroutine, public curl(w1, w2, w3, u1, u2, u3, work1, work2, coef)
Defines an output.
Definition output.f90:34
Simulation components are objects that encapsulate functionality that can be fit to a particular comp...
subroutine compute_(this, t, tstep)
Dummy compute function.
A simulation component that writes a 3d field to a file.
A simple output saving a list of fields to a .fld file.
Base abstract class for simulation components.