NEML2 1.4.0
Loading...
Searching...
No Matches
LinearInterpolation.h
1// Copyright 2023, UChicago Argonne, LLC
2// All Rights Reserved
3// Software Name: NEML2 -- the New Engineering material Model Library, version 2
4// By: Argonne National Laboratory
5// OPEN SOURCE LICENSE (MIT)
6//
7// Permission is hereby granted, free of charge, to any person obtaining a copy
8// of this software and associated documentation files (the "Software"), to deal
9// in the Software without restriction, including without limitation the rights
10// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11// copies of the Software, and to permit persons to whom the Software is
12// furnished to do so, subject to the following conditions:
13//
14// The above copyright notice and this permission notice shall be included in
15// all copies or substantial portions of the Software.
16//
17// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23// THE SOFTWARE.
24
25#pragma once
26
27#include "neml2/models/Interpolation.h"
28
29namespace neml2
30{
74template <typename T>
76{
77public:
79
81
82protected:
83 void set_value(bool out, bool dout_din, bool d2out_din2) override;
84
85private:
96 template <typename T2>
97 T2 mask(const T2 & in, const torch::Tensor & m) const;
98
100 const TorchShape _interp_batch_sizes;
102 const Scalar & _X0;
104 const Scalar & _X1;
106 const T & _Y0;
108 const T & _slope;
109};
110
111template <typename T>
112template <typename T2>
113T2
114LinearInterpolation<T>::mask(const T2 & in, const torch::Tensor & m) const
115{
116 auto in_expand = in.batch_expand(m.sizes());
117 auto in_mask = in_expand.index({m});
118 return in_mask.reshape(utils::add_shapes(
119 in_expand.batch_sizes().slice(0, in_expand.batch_dim() - 1), in.base_sizes()));
120}
121
122#define LINEARINTERPOLATION_TYPEDEF_FIXEDDIMTENSOR(T) \
123 typedef LinearInterpolation<T> T##LinearInterpolation
124FOR_ALL_FIXEDDIMTENSOR(LINEARINTERPOLATION_TYPEDEF_FIXEDDIMTENSOR);
125} // namespace neml2
The wrapper (decorator) for cross-referencing unresolved values at parse time.
Definition CrossRef.h:52
CrossRef()=default
The base class for interpolated nonlinear parameter.
Definition Interpolation.h:49
Linearly interpolate the parameter along a single axis.
Definition LinearInterpolation.h:76
LinearInterpolation(const OptionSet &options)
Definition LinearInterpolation.cxx:45
static OptionSet expected_options()
Definition LinearInterpolation.cxx:37
void set_value(bool out, bool dout_din, bool d2out_din2) override
The map between input -> output, and optionally its derivatives.
Definition LinearInterpolation.cxx:63
const torch::TensorOptions & options() const
This model's tensor options.
Definition Model.h:116
A custom map-like data structure. The keys are strings, and the values can be nonhomogeneously typed.
Definition OptionSet.h:59
The (logical) scalar.
Definition Scalar.h:38
TorchShape add_shapes(S &&... shape)
Definition utils.h:294
Definition CrossRef.cxx:32
std::vector< TorchSize > TorchShape
Definition types.h:36