31 real(kind=rp),
intent(in) :: t
32 integer,
intent(in) :: tstep
33 type(coef_t),
intent(inout) :: coef
34 type(json_file),
intent(inout) :: params
35 type(field_t),
intent(inout) :: u, v, w, p
36 type(field_t),
pointer :: brinkman, mapped_brinkman
37 type(field_t),
pointer :: work
38 integer :: temp_indices(2)
41 real(kind=rp) :: leakage, lift, drag
43 if (neko_field_registry%field_exists(
"brinkman_indicator"))
then
44 brinkman => neko_field_registry%get_field(
"brinkman_indicator")
45 mapped_brinkman => neko_field_registry%get_field(
"brinkman")
59 call neko_scratch_registry%request_field(work, temp_indices(1))
60 call field_col3(work, mapped_brinkman, u)
61 drag = glsc2(work%x, coef%B, ntot)
62 call field_col3(work, mapped_brinkman, v)
63 lift = glsc2(work%x, coef%B, ntot)
64 call neko_scratch_registry%relinquish_field(temp_indices)
67 leakage =
leak(brinkman%x, u%x, v%x, w%x, coef%b, ntot)
68 if (pe_rank .eq. 0)
then
69 print *,
'Leakage = ', leakage,
', ', t
70 print *,
'Lift = ', lift,
', ', t
71 print *,
'Drag = ', drag,
', ', t
99 type(field_t),
intent(inout) :: u
100 type(field_t),
intent(inout) :: v
101 type(field_t),
intent(inout) :: w
102 type(field_t),
intent(inout) :: p
103 type(json_file),
intent(inout) :: params
104 class(point_zone_t),
pointer :: zone
109 u%x(i,1,1,1) = sqrt(1.0_rp - 0.1_rp**2)
110 w%x(i,1,1,1) = 0.0_rp
113 if (abs(u%dof%y(i,1,1,1)) .lt. 4.0_rp)
then
114 v%x(i,1,1,1) = 0.1_rp
116 v%x(i,1,1,1) = 0.0_rp
123 if (neko_point_zone_registry%point_zone_exists(
"cylinder"))
then
124 zone => neko_point_zone_registry%get_point_zone(
"cylinder")
127 call cfill_mask(u%x, 0.0_rp, u%size(), zone%mask, zone%size)
128 call cfill_mask(v%x, 0.0_rp, v%size(), zone%mask, zone%size)
129 call cfill_mask(w%x, 0.0_rp, w%size(), zone%mask, zone%size)