Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
dune-common
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Timo Koch
dune-common
Commits
e06f3c34
Commit
e06f3c34
authored
19 years ago
by
Robert Klöfkorn
Browse files
Options
Downloads
Patches
Plain Diff
now localfunctions wrapper used as local function.
[[Imported from SVN: r3240]]
parent
ec761b9a
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
fem/discfuncarray.hh
+46
-26
46 additions, 26 deletions
fem/discfuncarray.hh
fem/discfuncarray/discfuncarray.cc
+28
-54
28 additions, 54 deletions
fem/discfuncarray/discfuncarray.cc
with
74 additions
and
80 deletions
fem/discfuncarray.hh
+
46
−
26
View file @
e06f3c34
...
...
@@ -24,7 +24,8 @@ namespace Dune {
struct
DiscFuncArrayTraits
{
typedef
DiscreteFunctionSpaceImp
DiscreteFunctionSpaceType
;
typedef
DiscFuncArray
<
DiscreteFunctionSpaceImp
>
DiscreteFunctionType
;
typedef
LocalFunctionArray
<
DiscreteFunctionSpaceImp
>
LocalFunctionType
;
typedef
LocalFunctionArray
<
DiscreteFunctionSpaceImp
>
LocalFunctionImp
;
typedef
LocalFunctionWrapper
<
DiscreteFunctionType
>
LocalFunctionType
;
typedef
DofIteratorArray
<
typename
DiscreteFunctionSpaceImp
::
RangeFieldType
>
DofIteratorType
;
typedef
ConstDofIteratorDefault
<
DofIteratorType
>
ConstDofIteratorType
;
};
...
...
@@ -45,9 +46,14 @@ namespace Dune {
typedef
DiscreteFunctionDefault
<
DiscFuncArrayTraits
<
DiscreteFunctionSpaceType
>
>
DiscreteFunctionDefaultType
;
friend
class
DiscreteFunctionDefault
<
DiscFuncArrayTraits
<
DiscreteFunctionSpaceType
>
>
;
enum
{
myId_
=
0
};
public
:
//! my type
typedef
DiscFuncArray
<
DiscreteFunctionSpaceType
>
DiscreteFunctionType
;
//! Type of the range field
typedef
typename
DiscreteFunctionSpaceType
::
RangeFieldType
RangeFieldType
;
...
...
@@ -60,8 +66,14 @@ namespace Dune {
//! the MyType
typedef
DiscFuncArray
<
DiscreteFunctionSpaceType
>
DiscreteFunctionType
;
//! the local function type
typedef
LocalFunctionArray
<
DiscreteFunctionSpaceType
>
LocalFunctionType
;
//! the local function implementation e
typedef
LocalFunctionArray
<
DiscreteFunctionSpaceType
>
LocalFunctionImp
;
//! LocalFunctionType is the exported lf type
typedef
LocalFunctionWrapper
<
DiscreteFunctionType
>
LocalFunctionType
;
// the storage of the local functions
typedef
LocalFunctionStorage
<
DiscreteFunctionType
>
LocalFunctionStorageType
;
//! the dof iterator type of this function
typedef
DofIteratorArray
<
typename
DiscreteFunctionSpaceType
::
RangeFieldType
>
DofIteratorType
;
...
...
@@ -73,6 +85,9 @@ namespace Dune {
//! our traits, like DofIterator etc.
typedef
DiscFuncArrayTraits
<
DiscreteFunctionSpaceType
>
Traits
;
//! the type of the unknowns
typedef
RangeFieldType
DofType
;
//! Constructor makes Discrete Function
DiscFuncArray
(
const
DiscreteFunctionSpaceType
&
f
)
;
...
...
@@ -88,7 +103,15 @@ namespace Dune {
// *********** Interface *************************
//! return object of type LocalFunctionType
LocalFunctionArray
<
DiscreteFunctionSpaceType
>
newLocalFunction
();
LocalFunctionType
newLocalFunction
()
DUNE_DEPRECATED
;
//! return local function for given entity
template
<
class
EntityType
>
LocalFunctionType
localFunction
(
const
EntityType
&
en
);
//! update LocalFunction to given Entity en
template
<
class
EntityType
>
void
localFunction
(
const
EntityType
&
en
,
LocalFunctionType
&
lf
)
DUNE_DEPRECATED
;
//! return reference to this
//! this methods is only to fullfill the interface as parameter classes
...
...
@@ -102,11 +125,6 @@ namespace Dune {
//! this methods is only to fullfill the interface as parameter classes
DiscreteFunctionType
&
destination
()
{
return
*
this
;
}
//! update LocalFunction to given Entity en
template
<
class
EntityType
>
void
localFunction
(
const
EntityType
&
en
,
LocalFunctionArray
<
DiscreteFunctionSpaceType
>
&
lf
);
//! we use the default implementation
DofIteratorType
dbegin
();
...
...
@@ -123,6 +141,9 @@ namespace Dune {
//! Return the name of the discrete function
const
std
::
string
&
name
()
const
{
return
name_
;}
//! return size of this discrete function
int
size
()
const
{
return
dofVec_
.
size
();
}
//! set all dofs to zero
void
clear
(
);
...
...
@@ -176,7 +197,15 @@ namespace Dune {
//! read function data from pgm fromat file
bool
read_pgm
(
const
char
*
filename
);
//! return pointer to internal array for use of BLAS routines
DofType
*
leakPointer
()
{
return
&
(
dofVec_
[
0
]);
};
//! return pointer to internal array for use of BLAS routines
const
DofType
*
leakPointer
()
const
{
return
&
(
dofVec_
[
0
]);
};
private
:
//! return object pointer of type LocalFunctionImp
LocalFunctionImp
*
newLocalFunctionObject
();
// get memory for discrete function
void
getMemory
();
...
...
@@ -186,13 +215,8 @@ namespace Dune {
//! true if memory was allocated
bool
built_
;
//! pointer to next free local function object
//! if this pointer is NULL, new object is created at the class of
//! localFunction
LocalFunctionType
*
freeLocalFunc_
;
//! hold one object for addLocal and setLocal and so on
LocalFunction
Type
localFunc_
;
LocalFunction
Imp
localFunc_
;
//! the dofs stored in an array
Array
<
RangeFieldType
>
dofVec_
;
...
...
@@ -222,6 +246,7 @@ namespace Dune {
typedef
typename
DiscreteFunctionSpaceType
::
JacobianRangeType
JacobianRangeType
;
friend
class
DiscFuncArray
<
DiscreteFunctionSpaceType
>
;
friend
class
LocalFunctionWrapper
<
DiscFuncArray
<
DiscreteFunctionSpaceType
>
>
;
public
:
//! Constructor
LocalFunctionArray
(
const
DiscreteFunctionSpaceType
&
f
,
Array
<
RangeFieldType
>
&
dofVec
);
...
...
@@ -236,7 +261,10 @@ namespace Dune {
const
RangeFieldType
&
operator
[]
(
int
num
)
const
;
//! return number of degrees of freedom
int
numberOfDofs
()
const
;
int
numberOfDofs
()
const
DUNE_DEPRECATED
;
//! return number of degrees of freedom
int
numDofs
()
const
;
//! sum over all local base functions
template
<
class
EntityType
>
...
...
@@ -248,13 +276,8 @@ namespace Dune {
protected
:
//! update local function for given Entity
template
<
class
EntityType
>
bool
init
(
const
EntityType
&
en
)
const
;
//! get pointer to next LocalFunction
MyType
*
getNext
()
const
;
//! set pointer to next LocalFunction
void
setNext
(
MyType
*
n
);
template
<
class
EntityType
>
void
init
(
const
EntityType
&
en
)
const
;
//! the corresponding function space which provides the base function set
const
DiscreteFunctionSpaceType
&
fSpace_
;
...
...
@@ -265,9 +288,6 @@ namespace Dune {
//! Array holding pointers to the local dofs
mutable
Array
<
RangeFieldType
*
>
values_
;
//! remember pointer to next LocalFunction
MyType
*
next_
;
//! diffVar for evaluate, is empty
const
DiffVariable
<
0
>::
Type
diffVar
;
...
...
This diff is collapsed.
Click to expand it.
fem/discfuncarray/discfuncarray.cc
+
28
−
54
View file @
e06f3c34
...
...
@@ -12,7 +12,6 @@ namespace Dune
DiscFuncArray
(
const
DiscreteFunctionSpaceType
&
f
)
:
DiscreteFunctionDefaultType
(
f
)
,
name_
(
"no name"
)
,
freeLocalFunc_
(
0
)
,
localFunc_
(
f
,
dofVec_
)
{
getMemory
();
...
...
@@ -24,7 +23,6 @@ namespace Dune
DiscFuncArray
(
const
char
*
name
,
const
DiscreteFunctionSpaceType
&
f
)
:
DiscreteFunctionDefaultType
(
f
)
,
name_
(
name
)
,
freeLocalFunc_
(
0
)
,
localFunc_
(
f
,
dofVec_
)
{
getMemory
();
...
...
@@ -33,12 +31,12 @@ namespace Dune
template
<
class
DiscreteFunctionSpaceType
>
inline
DiscFuncArray
<
DiscreteFunctionSpaceType
>::
DiscFuncArray
(
const
DiscFuncArray
<
DiscreteFunctionSpaceType
>
&
df
)
:
DiscreteFunctionDefaultType
(
df
.
functionSpace_
)
,
localFunc_
(
df
.
localFunc_
)
DiscreteFunctionDefaultType
(
df
.
functionSpace_
)
,
localFunc_
(
df
.
localFunc_
)
{
name_
=
df
.
name_
;
built_
=
df
.
built_
;
freeLocalFunc_
=
0
;
dofVec_
=
df
.
dofVec_
;
}
...
...
@@ -56,9 +54,7 @@ namespace Dune
template
<
class
DiscreteFunctionSpaceType
>
inline
DiscFuncArray
<
DiscreteFunctionSpaceType
>::
~
DiscFuncArray
()
{
if
(
freeLocalFunc_
)
delete
freeLocalFunc_
;
}
{}
template
<
class
DiscreteFunctionSpaceType
>
...
...
@@ -91,46 +87,33 @@ namespace Dune
template
<
class
DiscreteFunctionSpaceType
>
template
<
class
EntityType
>
inline
void
DiscFuncArray
<
DiscreteFunctionSpaceType
>::
localFunction
(
const
EntityType
&
en
,
LocalFunction
Array
<
DiscreteFunctionSpace
Type
>
&
lf
)
localFunction
(
const
EntityType
&
en
,
LocalFunctionType
&
lf
)
{
lf
.
init
(
en
);
}
template
<
class
DiscreteFunctionSpaceType
>
inline
LocalFunctionArray
<
DiscreteFunctionSpaceType
>
DiscFuncArray
<
DiscreteFunctionSpaceType
>::
newLocalFunction
()
template
<
class
DiscreteFunctionSpaceType
>
template
<
class
EntityType
>
inline
typename
DiscFuncArray
<
DiscreteFunctionSpaceType
>::
LocalFunctionType
DiscFuncArray
<
DiscreteFunctionSpaceType
>::
localFunction
(
const
EntityType
&
en
)
{
LocalFunctionArray
<
DiscreteFunctionSpaceType
>
tmp
(
this
->
functionSpace_
,
dofVec_
);
return
tmp
;
return
LocalFunctionType
(
en
,
*
this
);
}
#if 0
template
<
class
DiscreteFunctionSpaceType
>
inline typename DiscFuncArray<DiscreteFunctionSpaceType>::LocalFunctionType *
DiscFuncArray< DiscreteFunctionSpaceType >::getLocalFunction ()
inline
typename
DiscFuncArray
<
DiscreteFunctionSpaceType
>::
LocalFunctionImp
*
DiscFuncArray
<
DiscreteFunctionSpaceType
>::
newLocalFunctionObject
()
{
if(!freeLocalFunc_)
{
LocalFunctionType *lf = new LocalFunctionType (functionSpace_,dofVec_);
return lf;
}
else
{
LocalFunctionType *lf = freeLocalFunc_;
freeLocalFunc_ = lf->getNext();
return lf;
}
return
new
LocalFunctionArray
<
DiscreteFunctionSpaceType
>
(
this
->
functionSpace_
,
dofVec_
);
}
template
<
class
DiscreteFunctionSpaceType
>
inline
void
DiscFuncArray< DiscreteFunctionSpaceType >::
freeLocalFunction ( typename
DiscFuncArray<DiscreteFunctionSpaceType>::LocalFunction
Type *lf
)
inline
typename
DiscFuncArray
<
DiscreteFunctionSpaceType
>::
LocalFunctionType
DiscFuncArray
<
DiscreteFunctionSpaceType
>::
new
LocalFunction
(
)
{
lf->setNext(freeLocalFunc_);
freeLocalFunc_ = lf;
return
LocalFunctionType
(
*
this
);
}
#endif
template
<
class
DiscreteFunctionSpaceType
>
inline
typename
DiscFuncArray
<
DiscreteFunctionSpaceType
>::
DofIteratorType
...
...
@@ -417,14 +400,12 @@ namespace Dune
inline
LocalFunctionArray
<
DiscreteFunctionSpaceType
>::
LocalFunctionArray
(
const
DiscreteFunctionSpaceType
&
f
,
Array
<
RangeFieldType
>
&
dofVec
)
:
fSpace_
(
f
),
dofVec_
(
dofVec
)
,
next_
(
0
)
:
fSpace_
(
f
),
dofVec_
(
dofVec
)
,
uniform_
(
true
),
init_
(
false
)
{}
template
<
class
DiscreteFunctionSpaceType
>
inline
LocalFunctionArray
<
DiscreteFunctionSpaceType
>::~
LocalFunctionArray
()
{
if
(
next_
)
delete
next_
;
}
{}
template
<
class
DiscreteFunctionSpaceType
>
inline
typename
LocalFunctionArray
<
DiscreteFunctionSpaceType
>::
RangeFieldType
&
...
...
@@ -447,6 +428,13 @@ namespace Dune
return
numOfDof_
;
}
template
<
class
DiscreteFunctionSpaceType
>
inline
int
LocalFunctionArray
<
DiscreteFunctionSpaceType
>::
numDofs
()
const
{
return
numOfDof_
;
}
template
<
class
DiscreteFunctionSpaceType
>
template
<
class
EntityType
>
inline
void
LocalFunctionArray
<
DiscreteFunctionSpaceType
>::
evaluate
(
EntityType
&
en
,
const
DomainType
&
x
,
RangeType
&
ret
)
const
...
...
@@ -496,28 +484,14 @@ namespace Dune
}
}
template
<
class
DiscreteFunctionSpaceType
>
inline
LocalFunctionArray
<
DiscreteFunctionSpaceType
>
*
LocalFunctionArray
<
DiscreteFunctionSpaceType
>::
getNext
()
const
{
return
next_
;
}
template
<
class
DiscreteFunctionSpaceType
>
inline
void
LocalFunctionArray
<
DiscreteFunctionSpaceType
>::
setNext
(
LocalFunctionArray
<
DiscreteFunctionSpaceType
>
*
n
)
{
next_
=
n
;
}
template
<
class
DiscreteFunctionSpaceType
>
template
<
class
EntityType
>
inline
bool
LocalFunctionArray
<
DiscreteFunctionSpaceType
>::
inline
void
LocalFunctionArray
<
DiscreteFunctionSpaceType
>::
init
(
const
EntityType
&
en
)
const
{
if
(
!
uniform_
||
!
init_
)
{
numOfDof_
=
fSpace_
.
getBaseFunctionSet
(
en
).
getNumberOf
BaseFunctions
();
fSpace_
.
getBaseFunctionSet
(
en
).
num
BaseFunctions
();
numOfDifferentDofs_
=
fSpace_
.
getBaseFunctionSet
(
en
).
getNumberOfDiffBaseFuncs
();
...
...
@@ -529,7 +503,7 @@ namespace Dune
for
(
int
i
=
0
;
i
<
numOfDof_
;
i
++
)
values_
[
i
]
=
&
(
dofVec_
[
fSpace_
.
mapToGlobal
(
en
,
i
)]);
return
true
;
return
;
}
//**********************************************************************
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment