LCOV - code coverage report
Current view: top level - utils - excitations.hpp (source / functions) Coverage Total Hit
Test: Palace Coverage Report Lines: 0.0 % 31 0
Test Date: 2025-10-23 22:45:05 Functions: 0.0 % 3 0
Legend: Lines: hit not hit

            Line data    Source code
       1              : // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
       2              : // SPDX-License-Identifier: Apache-2.0
       3              : 
       4              : #ifndef PALACE_UTILS_EXCITATIONS_HPP
       5              : #define PALACE_UTILS_EXCITATIONS_HPP
       6              : 
       7              : #include <cmath>
       8              : 
       9              : namespace palace::excitations
      10              : {
      11              : 
      12              : //
      13              : // Define temporal excitation functions for transient simulations.
      14              : //
      15              : 
      16              : inline double pulse_sinusoidal(double t, double omega, double t0)
      17              : {
      18              :   // g(t) = sin(ω*(t-t0))
      19            0 :   return std::sin(omega * (t - t0));
      20              : }
      21              : 
      22              : inline double dpulse_sinusoidal(double t, double omega, double t0)
      23              : {
      24              :   // g(t) = sin(ω*(t-t0))
      25            0 :   return omega * std::cos(omega * (t - t0));
      26              : }
      27              : 
      28              : inline double pulse_gaussian(double t, double tau, double t0)
      29              : {
      30              :   // g(t) = exp(-0.5*(t-t0)²/τ²)
      31            0 :   double ts = t - t0;
      32            0 :   return std::exp(-0.5 * ts * ts / (tau * tau));
      33              : }
      34              : 
      35              : inline double dpulse_gaussian(double t, double tau, double t0)
      36              : {
      37              :   // g(t) = exp(-0.5*(t-t0)²/τ²)
      38            0 :   double ootau2 = 1.0 / (tau * tau);
      39            0 :   double ts = t - t0;
      40            0 :   return -ts * ootau2 * std::exp(-0.5 * ts * ts * ootau2);
      41              : }
      42              : 
      43              : inline double pulse_gaussian_diff(double t, double tau, double t0)
      44              : {
      45              :   // g(t) = -(t-t0)/τ²*exp(-0.5*(t-t0)²/τ²)
      46            0 :   double ootau2 = 1.0 / (tau * tau);
      47            0 :   double ts = t - t0;
      48            0 :   return -ts * ootau2 * std::exp(-0.5 * ts * ts * ootau2);
      49              : }
      50              : 
      51            0 : inline double dpulse_gaussian_diff(double t, double tau, double t0)
      52              : {
      53              :   // g(t) = -(t-t0)/τ²*exp(-0.5*(t-t0)²/τ²)
      54            0 :   double ootau2 = 1.0 / (tau * tau);
      55            0 :   double ts = t - t0;
      56            0 :   double ts2 = ts * ts;
      57            0 :   return -ootau2 * (1.0 - ts2 * ootau2) * std::exp(-0.5 * ts2 * ootau2);
      58              : }
      59              : 
      60            0 : inline double pulse_gaussian_mod(double t, double omega, double tau, double t0)
      61              : {
      62              :   // g(t) = sin(ω*(t-t0))*exp(-0.5*(t-t0)²/τ²)
      63            0 :   double ts = t - t0;
      64            0 :   return std::sin(omega * ts) * std::exp(-0.5 * ts * ts / (tau * tau));
      65              : }
      66              : 
      67            0 : inline double dpulse_gaussian_mod(double t, double omega, double tau, double t0)
      68              : {
      69              :   // g(t) = sin(ω*(t-t0))*exp(-0.5*(t-t0)²/τ²)
      70            0 :   double ootau2 = 1.0 / (tau * tau);
      71            0 :   double ts = t - t0;
      72            0 :   return (-ts * ootau2 * std::sin(omega * ts) + omega * std::cos(omega * ts)) *
      73            0 :          std::exp(-0.5 * ts * ts * ootau2);
      74              : }
      75              : 
      76              : inline double pulse_ramp(double t, double tau, double t0)
      77              : {
      78              :   // g(t) = 0, t <= t0
      79              :   //        (t-t0)/τ, t0 < t <= τ
      80              :   //        1, t > τ+t0
      81            0 :   return (t <= t0) ? 0.0 : ((t - t0 >= tau) ? 1.0 : (t - t0) / tau);
      82              : }
      83              : 
      84              : inline double dpulse_ramp(double t, double tau, double t0)
      85              : {
      86              :   // g(t) = 0, t <= t0
      87              :   //        (t-t0)/τ, t0 < t <= τ
      88              :   //        1, t > τ
      89            0 :   return (t <= t0) ? 0.0 : ((t - t0 >= tau) ? 0.0 : 1.0 / tau);
      90              : }
      91              : 
      92              : inline double pulse_smootherstep(double t, double tau, double t0)
      93              : {
      94              :   // g(t) = 0, t <= t0
      95              :   //        6*((t-t0)/τ)⁵-15*((t-t0)/τ)⁴+10*((t-t0)/τ)³, t0 < t <= τ+t0
      96              :   //        1, t > τ+t0
      97            0 :   double ts = (t <= t0) ? 0.0 : ((t - t0 >= tau) ? 1.0 : (t - t0) / tau);
      98            0 :   double ts2 = ts * ts;
      99            0 :   return ts * ts2 * (6.0 * ts2 - 15.0 * ts + 10.0);
     100              : }
     101              : 
     102              : inline double dpulse_smootherstep(double t, double tau, double t0)
     103              : {
     104              :   // g(t) = 0, t <= t0
     105              :   //        6*((t-t0)/τ)⁵-15*((t-t0)/τ)⁴+10*((t-t0)/τ)³, t0 < t <= τ
     106              :   //        1, t > τ
     107            0 :   double ts = (t <= t0) ? 0.0 : ((t - t0 >= tau) ? 1.0 : (t - t0) / tau);
     108            0 :   double ts2 = ts * ts;
     109            0 :   return ts2 / tau * (30.0 * ts2 - 60.0 * ts + 30.0);
     110              : }
     111              : 
     112              : }  // namespace palace::excitations
     113              : 
     114              : #endif  // PALACE_UTILS_EXCITATIONS_HPP
        

Generated by: LCOV version 2.0-1