File: std_domain.h

package info (click to toggle)
dune-uggrid 2.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 4,712 kB
  • sloc: cpp: 64,245; ansic: 755; makefile: 5
file content (139 lines) | stat: -rw-r--r-- 5,399 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// vi: set et ts=4 sw=2 sts=2:
/** \defgroup std The Standard Domain
 * \ingroup dom
 */
/*! \file std_domain.h
 * \ingroup std
 */

/** \addtogroup std
 *
 * @{
 */

/****************************************************************************/
/*                                                                          */
/* File:      std_domain.h                                                  */
/*                                                                          */
/* Purpose:   standard domain declaration                                   */
/*                                                                          */
/* Author:    Peter Bastian/Klaus Johannsen                                 */
/*            Institut fuer Computeranwendungen III                         */
/*            Universitaet Stuttgart                                        */
/*            Pfaffenwaldring 27                                            */
/*            70550 Stuttgart                                               */
/*            email: ug@ica3.uni-stuttgart.de                               */
/*                                                                          */
/* History:   29.01.92 begin, ug version 2.0                                */
/*                                                                          */
/* Remarks:                                                                 */
/*                                                                          */
/****************************************************************************/


/****************************************************************************/
/*                                                                          */
/* auto include mechanism and other include files                           */
/*                                                                          */
/****************************************************************************/

#ifndef __STD_DOMAIN__
#define __STD_DOMAIN__

#include "domain.h"

#include "dimension.h"
#include "namespace.h"

START_UGDIM_NAMESPACE

#undef  CORNERS_OF_BND_SEG
#define CORNERS_OF_BND_SEG               2*DIM_OF_BND


/** \todo Please doc me! */
typedef struct {

  /** \brief Table subdomain to part */
  const INT *sd2part;

  /** \brief Table segment to part */
  const INT *sg2part;

# ifdef __THREEDIM__
  /** \brief Table line to part */
  const INT **ln2part;
# endif

  /** \brief Table point to part */
  const INT *pt2part;

} DOMAIN_PART_INFO;

/*----------- typedef for functions ----------------------------------------*/
/** \brief ???
 *
 * \todo Please doc me!
 */
typedef INT (*BndSegFuncPtr)(void *,DOUBLE *,DOUBLE *);

/** \brief ???
 *
 * \todo Please doc me!
 */
typedef INT (*BndCondProcPtr)(void *, void *, DOUBLE *, DOUBLE *, INT *);


/* --- public functions --- */


/* domain definition */
void                     *CreateDomainWithParts       (const char *name,
                                                       INT segments,
                                                       INT corners,
                                                       INT nParts, const DOMAIN_PART_INFO *dpi);

void                     *CreateDomain                        (const char *name,
                                                               INT segments,
                                                               INT corners);

void RemoveDomain(const char* name);

void   *CreateBoundarySegment       (const char *name, INT left, INT right,
                                     INT id, enum BoundaryType type,
                                     const INT *point,
                                     const DOUBLE *alpha, const DOUBLE *beta,
                                     BndSegFuncPtr BndSegFunc,
                                     void *data);

void *CreateLinearSegment (const char *name,
                           INT left, INT right,INT id,
                           INT n, const INT *point,
                           DOUBLE x[CORNERS_OF_BND_SEG][DIM]);

/** \brief Access the id of the segment (used by DUNE) */
UINT GetBoundarySegmentId(BNDS* boundarySegment);

/* problem definition */
void                    *CreateProblem                       (const char *domain, const char *name,
                                                              int id, ConfigProcPtr config,
                                                              int numOfCoefficients,
                                                              CoeffProcPtr coeffs[],
                                                              int numOfUserFct,
                                                              UserProcPtr userfct[]);

BVP   *CreateBoundaryValueProblem (const char *BVPname, BndCondProcPtr theBndCond,
                                   int numOfCoeffFct, CoeffProcPtr coeffs[],
                                   int numOfUserFct, UserProcPtr userfct[]);
BVP       *CreateBVP              (const char *BVP, const char *Domain, const char *Problem);
const char *GetBVP_DomainName     (const BVP *aBVP);
const char *GetBVP_ProblemName    (const BVP *aBVP);

BVP *CreateBVP_Problem (const char *BVPName, const char *DomainName, const char *ProblemName);

END_UGDIM_NAMESPACE

/** @} */

#endif