Neko-TOP
A portable framework for high-order spectral element flow toplogy optimization.
Loading...
Searching...
No Matches
simple_brinkman_source_term.f90
Go to the documentation of this file.
1! Copyright (c) 2023, 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!
34! a term in the form $\chi \mathbf{u}$
36 use num_types, only: rp
37 use field_list, only: field_list_t
38 use json_module, only: json_file
39 use json_utils, only: json_get, json_get_or_default
40 use source_term, only: source_term_t
41 use coefs, only: coef_t
42 use neko_config, only: neko_bcknd_device
43 use utils, only: neko_error
44 use field, only: field_t
45 use field_math, only: field_subcol3
46 implicit none
47 private
48
50 ! We have a source term of the form $\chi \mathbf{u}$
51 type, public, extends(source_term_t) :: simple_brinkman_source_term_t
53 type(field_t), pointer :: chi, u, v, w
54
55 contains
57 procedure, pass(this) :: init => &
60 procedure, pass(this) :: init_from_components => &
63 procedure, pass(this) :: free => simple_brinkman_source_term_free
65 procedure, pass(this) :: compute_ => simple_brinkman_source_term_compute
67
68contains
73 subroutine simple_brinkman_source_term_init_from_json(this, json, fields, &
74 coef)
75 class(simple_brinkman_source_term_t), intent(inout) :: this
76 type(json_file), intent(inout) :: json
77 type(field_list_t), intent(in), target :: fields
78 type(coef_t), intent(in), target :: coef
79
80
81 ! we shouldn't be initializing this from JSON
82 ! maybe throw an error?
83
84
86
93 f_x, f_y, f_z, chi, u, v, w, coef)
94 class(simple_brinkman_source_term_t), intent(inout) :: this
95 type(field_t), pointer, intent(in) :: f_x, f_y, f_z
96 type(field_list_t) :: fields
97 type(coef_t) :: coef
98 real(kind=rp) :: start_time
99 real(kind=rp) :: end_time
100 type(field_t), intent(in), target :: u, v, w
101 type(field_t), intent(in), target :: chi
102
103 ! I wish you didn't need a start time and end time...
104 ! but I'm just going to set a super big number...
105 start_time = 0.0_rp
106 end_time = 100000000.0_rp
107
108 call this%free()
109
110 ! this is copying the fluid source term init
111 ! We package the fields for the source term to operate on in a field list.
112 call fields%init(3)
113 call fields%assign(1, f_x)
114 call fields%assign(2, f_y)
115 call fields%assign(3, f_z)
116
117 call this%init_base(fields, coef, start_time, end_time)
118
119 ! point everything in the correct places
120 this%u => u
121 this%v => v
122 this%w => w
123 ! and get chi out of the design
124 this%chi => chi
125
127
130 class(simple_brinkman_source_term_t), intent(inout) :: this
131
132 call this%free_base()
134
138 subroutine simple_brinkman_source_term_compute(this, t, tstep)
139 class(simple_brinkman_source_term_t), intent(inout) :: this
140 real(kind=rp), intent(in) :: t
141 integer, intent(in) :: tstep
142 type(field_t), pointer :: fu, fv, fw
143
144 fu => this%fields%get_by_index(1)
145 fv => this%fields%get_by_index(2)
146 fw => this%fields%get_by_index(3)
147
148 call field_subcol3(fu, this%u, this%chi)
149 call field_subcol3(fv, this%v, this%chi)
150 call field_subcol3(fw, this%w, this%chi)
151
153
Implements the simple_brinkman_source_term_t type.
subroutine simple_brinkman_source_term_init_from_json(this, json, fields, coef)
The common constructor using a JSON object.
subroutine simple_brinkman_source_term_compute(this, t, tstep)
Computes the source term and adds the result to fields.
subroutine simple_brinkman_source_term_init_from_components(this, f_x, f_y, f_z, chi, u, v, w, coef)
The constructor from type components.
subroutine simple_brinkman_source_term_free(this)
Destructor.