1# -*- coding: utf-8 -*-
2<%inherit file='base'/>
3<%namespace module='pyfr.backends.base.makoutil' name='pyfr'/>
4
5<%pyfr:kernel name='localerrest' ndim='2'
6              err='in fpdtype_t[${str(nvars)}]'
7              errprev='inout fpdtype_t[${str(nvars)}]'
8              dtau_upts='inout fpdtype_t[${str(nvars)}]'>
9    fpdtype_t ferr, ufac, vfac;
10
11% for i in range(nvars):
12    ferr = fabs(${1/atol}*err[${i}]);
13    ufac = pow(ferr, ${-expa}) * pow(errprev[${i}], ${expb});
14    vfac = min(${maxf}, max(${minf}, ${saff}*ufac));
15
16    // Compute the size of the next step
17    dtau_upts[${i}] = min(max(vfac*dtau_upts[${i}], ${dtau_min}), ${dtau_max});
18    errprev[${i}] = ferr;
19% endfor
20</%pyfr:kernel>
21