36 use num_types,
only: rp
37 use field_math,
only: field_copy, field_cmult, field_cadd
39 use num_types,
only: rp
40 use json_module,
only: json_file
41 use field,
only: field_t
42 use coefs,
only: coef_t
43 use json_utils,
only: json_get, json_get_or_default
50 real(kind=rp) :: f_min
52 real(kind=rp) :: f_max
56 procedure, pass(this) :: init => linear_mapping_init_from_json
58 procedure, pass(this) :: init_from_attributes => &
59 linear_mapping_init_from_attributes
61 procedure, pass(this) :: free => linear_mapping_free
63 procedure, pass(this) :: forward_mapping => linear_forward_mapping
65 procedure, pass(this) :: backward_mapping => &
66 linear_backward_mapping
72 subroutine linear_mapping_init_from_json(this, json, coef)
74 type(json_file),
intent(inout) :: json
75 type(coef_t),
intent(inout) :: coef
76 real(kind=rp) :: f_min, f_max
78 call json_get_or_default(json,
'f_min', f_min, 0.0_rp)
79 call json_get(json,
'f_max', f_max)
81 call this%init_base(json, coef)
82 call linear_mapping_init_from_attributes(this, coef, f_min, f_max)
84 end subroutine linear_mapping_init_from_json
87 subroutine linear_mapping_init_from_attributes(this, coef, f_min, f_max)
89 type(coef_t),
intent(inout) :: coef
90 real(kind=rp),
intent(in) :: f_min, f_max
95 end subroutine linear_mapping_init_from_attributes
98 subroutine linear_mapping_free(this)
101 call this%free_base()
103 end subroutine linear_mapping_free
109 subroutine linear_forward_mapping(this, X_out, X_in)
111 type(field_t),
intent(in) :: X_in
112 type(field_t),
intent(inout) :: X_out
115 call field_copy(x_out, x_in)
116 call field_cmult(x_out, this%f_max - this%f_min)
117 call field_cadd(x_out, this%f_min)
119 end subroutine linear_forward_mapping
127 subroutine linear_backward_mapping(this, sens_out, sens_in, X_in)
129 type(field_t),
intent(in) :: X_in
130 type(field_t),
intent(in) :: sens_in
131 type(field_t),
intent(inout) :: sens_out
137 call field_copy(sens_out, sens_in)
138 call field_cmult(sens_out, this%f_max - this%f_min)
140 end subroutine linear_backward_mapping
A linear mapping of coefficients.
Mappings to be applied to a scalar field.
A linear mapping of coefficients $f(x) = f_{min} + (f_{max} - f_{min}) x$.
Base abstract class for mapping.