MCPcopy Create free account
hub / github.com/NGSolve/ngsolve / DiffJacobi

Method DiffJacobi

fem/coefficient.cpp:4774–4806  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4772
4773
4774 shared_ptr<CoefficientFunction> DiffJacobi (const CoefficientFunction * var, T_DJC & cache) const override
4775 {
4776 auto thisptr = const_pointer_cast<CoefficientFunction>(this->shared_from_this());
4777 if (cache.find(thisptr) != cache.end())
4778 return cache[thisptr];
4779
4780 if (this == var)
4781 return IdentityCF(Dimensions());
4782
4783 Array<int> dimres { this->Dimensions() };
4784 dimres += var->Dimensions();
4785
4786 auto diffc1 = c1->DiffJacobi (var, cache);
4787
4788 int vardim = var->Dimension();
4789 Array<int> vardims = Array<int> (var->Dimensions());
4790 Array<int> dist(vardims.Size());
4791 int prod = 1;
4792 for (int i = dist.Size()-1; i >= 0; i--)
4793 {
4794 dist[i] = prod;
4795 prod *= vardims[i];
4796 }
4797 Array<int> firstdist { this -> dist };
4798 for (auto & fd : firstdist)
4799 fd *= vardim;
4800
4801 Array<int> alldist { firstdist + dist };
4802
4803 auto res = MakeSubTensorCoefficientFunction(diffc1, first*vardim, std::move(dimres), std::move(alldist));
4804 cache[thisptr] = res;
4805 return res;
4806 }
4807
4808
4809 virtual void NonZeroPattern (const class ProxyUserData & ud,

Callers

nothing calls this directly

Calls 10

IdentityCFFunction · 0.85
DimensionsFunction · 0.85
findMethod · 0.80
DimensionsMethod · 0.80
shared_from_thisMethod · 0.45
endMethod · 0.45
DiffJacobiMethod · 0.45
DimensionMethod · 0.45
SizeMethod · 0.45

Tested by

no test coverage detected