NEML2 2.0.0
Loading...
Searching...
No Matches
Interpolation.h
1// Copyright 2024, 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/Model.h"
28
29namespace neml2
30{
31class Scalar;
32
33std::tuple<Scalar, Scalar, Scalar> parametric_coordinates(const Scalar & X, const Scalar & x);
34
35template <typename T>
36T
37apply_mask(const T & a, const Scalar & m, std::size_t mdim)
38{
39 const auto B = utils::broadcast_dynamic_sizes({a, m});
40 auto I = utils::broadcast_sizes(a.intmd_sizes(), m.intmd_sizes());
41 const auto am = T(a.batch_expand(B, I).index({m.batch_expand(B, I)}), 0);
42 I.erase(I.end() - mdim, I.end()); // Remove the last mdim dimensions
43 return am.batch_reshape(B, I);
44}
45
62template <typename T>
63class Interpolation : public Model
64{
65public:
67
68 Interpolation(const OptionSet & options);
69
70protected:
72 const T & _Y;
73
76};
77} // namespace neml2
The base class for interpolated variable.
Definition Interpolation.h:64
Variable< T > & _p
The interpolated value.
Definition Interpolation.h:75
const T & _Y
The ordinate values of the interpolant.
Definition Interpolation.h:72
static OptionSet expected_options()
Definition Interpolation.cxx:49
Interpolation(const OptionSet &options)
Definition Interpolation.cxx:70
The base class for all constitutive models.
Definition Model.h:70
A custom map-like data structure. The keys are strings, and the values can be nonhomogeneously typed.
Definition OptionSet.h:51
Scalar.
Definition Scalar.h:38
TensorShapeRef intmd_sizes() const
Definition TensorBaseImpl.h:217
Concrete definition of a variable.
Definition VariableStore.h:41
TensorShape broadcast_sizes(const T &... shapes)
Return the broadcast shape of all the shapes.
Definition shape_utils.h:233
TraceableTensorShape broadcast_dynamic_sizes(const std::vector< Tensor > &tensors)
Find the broadcast dynamic shape of all the tensors The returned dynamic shape will be traceable.
Definition Tensor.cxx:46
Definition DiagnosticsInterface.cxx:30
std::tuple< Scalar, Scalar, Scalar > parametric_coordinates(const Scalar &X, const Scalar &x)
Definition Interpolation.cxx:32
T apply_mask(const T &a, const Scalar &m, std::size_t mdim)
Definition Interpolation.h:37