LoAdSG
norms.h
1//
2// Created by to35jepo on 5/11/23.
3//
4
5#ifndef RUN_NORMS_H
6#define RUN_NORMS_H
7
8
9#include "../extemp/extempAlg.h"
10
11template <class A>
12double L_infty ( const ExprSparseG<A>& a ) {
13 const A& ao ( a );
14
15 AdaptiveSparseGrid_Base* sparseGrid = ao.getSparseGrid();
16
17 unsigned long endIndex = ao.length;
18 //double* dataTable = sparseGrid->dataTable;
19 dataInteger* secondTable = sparseGrid->secondTable;
20 //unsigned int numberOfData = sparseGrid->numberOfData;
21
22
23 double maximum = 0.0;
24 if(ao.getDescription().isIndexNeeded()) {
25 for(unsigned long i = 0;i < endIndex; ++i) {
26 if(secondTable[i]!=0) {
27
28 //double x = ao.getValue(&dataTable[i * numberOfData],sparseGrid->getIndexOfTable(i));
29 double x = ao.getValue(i,sparseGrid->getIndexOfTable(i));
30
31 if(x < 0.0) x = x * (-1.0);
32 if(x>maximum) maximum = x;
33 }
34 }
35 return maximum;
36 }
37 else {
38 IndexDimension Idummy;
39 for(unsigned long i = 0;i < endIndex; ++i) {
40 if(secondTable[i]!=0) {
41
42
43 //int size1 = *(&dataTable[i*numberOfData] + 1) - dataTable[i*numberOfData];
44
45 //cout << "number " << ao.getNumber() << endl;
46 //cout <<"size of dataTable[i*numberOfData] " << size1 << endl;
47 //cout <<"size of dataTable[i*numberOfData] " << dataTable[i*numberOfData][1]<< endl;
48 //double x = ao.getValue(&dataTable[i * numberOfData],Idummy);
49 double x = ao.getValue(i,Idummy);
50
51 if(x < 0.0) x = x * (-1.0);
52 if(x>maximum) maximum = x;
53 }
54 }
55 return maximum;
56 }
57}
58
59
60template <class A>
61double L_2 ( const ExprSparseG<A>& a ) {
62 const A& ao ( a );
63
64 AdaptiveSparseGrid_Base* sparseGrid = ao.getSparseGrid();
65
66 unsigned long endIndex = sparseGrid->getMaximalOccupiedSecondTable();
67
68
69
70
71 double sum = 0.0;
72 int dofs = 0;
73 if(ao.getDescription().isIndexNeeded()) {
74 for(unsigned long i = 0;i < endIndex; ++i) {
75 if(sparseGrid->getActiveTable()[i]) {
76
77
78 //double x = ao.getValue(&dataTable[i * numberOfData],sparseGrid->getIndexOfTable(i));
79 double x = ao.getValue(i, sparseGrid->getIndexOfTable(i));
80
81 dofs++;
82 sum += (x * x);
83 }
84
85 }
86 return ::sqrt(sum/dofs);
87 }
88 else {
89 IndexDimension Idummy;
90 for(unsigned long i = 0;i < endIndex; ++i) {
91 if(sparseGrid->getActiveTable()[i]) {
92
93 double x = ao.getValue(i, Idummy);
94
95 dofs++;
96 sum += (x * x);
97 }
98
99 }
100 return ::sqrt(sum/dofs);
101 }
102}
103
104
105#endif //RUN_NORMS_H
Definition sparseGrid.h:86
IndexDimension getIndexOfTable(unsigned long i)
Definition sparseGrid.h:566
unsigned long * secondTable
‍0 means empty; v>0 means v-1 is array index
Definition sparseGrid.h:232