PPL Logo

libs/ck-libs/ifem/ifem.C File Reference

Go to the source code of this file.

Data Structures

class  IFEM_Solve_shared_comm
 Interface between the basic "matrix-style" interface expected by the ILSI solvers, the FEM framework, and the local matrix-multiply function passed in by the user. More...
class  BCapplier
 Wrapper for user matrix-vector multiply that applies "essential" boundary conditions. More...

Functions

double localDotProduct (int nRecords, int nFields, const unsigned char *goodRecord, const double *a, const double *b)
 Implicit FEM: C- and fortran-callable interface.
CLINKAGE void IFEM_Solve_shared (ILSI_Solver s, ILSI_Param *p, int fem_mesh, int fem_entity, int length, int width, IFEM_Matrix_product_c A, void *ptr, const double *b, double *x)
 Solve the matrix equation A x = b for the unknown node value x.
FLINKAGE void FTN_NAME (IFEM_SOLVE_SHARED, ifem_solve_shared)
void BCapplier_multiply (void *ptr, int length, int width, const double *src, double *dest)
CLINKAGE void IFEM_Solve_shared_bc (ILSI_Solver s, ILSI_Param *p, int fem_mesh, int fem_entity, int length, int width, int bcCount, const int *bcDOF, const double *bcValue, IFEM_Matrix_product_c A, void *ptr, const double *b, double *x)
 Solve the matrix equation A x = b for the unknown node value x, with the given values as known-x boundary conditions.
FLINKAGE void FTN_NAME (IFEM_SOLVE_SHARED_BC, ifem_solve_shared_bc)


Function Documentation

double localDotProduct ( int  nRecords,
int  nFields,
const unsigned char *  goodRecord,
const double *  a,
const double *  b 
)

Implicit FEM: C- and fortran-callable interface.

Orion Sky Lawlor, olawlor@acm.org, 1/17/2003 Sum the dot product of the fields of a and b marked with 1's in goodRecords

Definition at line 15 of file ifem.C.

References r.

Referenced by IFEM_Solve_shared_comm::dotProduct().

Here is the caller graph for this function:

CLINKAGE void IFEM_Solve_shared ( ILSI_Solver  s,
ILSI_Param p,
int  fem_mesh,
int  fem_entity,
int  length,
int  width,
IFEM_Matrix_product_c  A,
void *  ptr,
const double *  b,
double *  x 
)

Solve the matrix equation A x = b for the unknown node value x.

The matrix is assumed to be partitioned by element, and the unknown and known vectors are listed by node.

This version uses the shared-node solution formulation; so the matrix-product function takes a vector of local node values and returns a vector of local node values.

Parameters:
s The solver to use (e.g., ILSI_CG_Solver)
param Assorted input and output parameters for the solver.
fem_mesh Readable FEM mesh object to solve over.
fem_entity FEM mesh entity to solve over (typically FEM_NODE).
length The number of shared entities.
width The number of unknowns per shared entity. b and x must have length*width entries.
A The user function that applies the matrix.
ptr User-defined pointer value passed to A.
b The local part of the known vector. Never modified.
x On input, the initial guess for the solution. During execution, the intermediate solution values. On output, the final solution.

Definition at line 97 of file ifem.C.

References comm, n, and IFEM_Solve_shared_comm::set_c().

Referenced by BCapplier::solve().

Here is the call graph for this function:

Here is the caller graph for this function:

FLINKAGE void FTN_NAME ( IFEM_SOLVE_SHARED  ,
ifem_solve_shared   
)

Definition at line 110 of file ifem.C.

References PUP::b, comm, length, n, p, PUP::s, IFEM_Solve_shared_comm::set_f(), width(), and x.

Here is the call graph for this function:

void BCapplier_multiply ( void *  ptr,
int  length,
int  width,
const double *  src,
double *  dest 
)

Definition at line 196 of file ifem.C.

References BCapplier::multiply().

Referenced by BCapplier::solve().

Here is the call graph for this function:

Here is the caller graph for this function:

CLINKAGE void IFEM_Solve_shared_bc ( ILSI_Solver  s,
ILSI_Param p,
int  fem_mesh,
int  fem_entity,
int  length,
int  width,
int  bcCount,
const int bcDOF,
const double *  bcValue,
IFEM_Matrix_product_c  A,
void *  ptr,
const double *  b,
double *  x 
)

Solve the matrix equation A x = b for the unknown node value x, with the given values as known-x boundary conditions.

The matrix is assumed to be partitioned by element, and the unknown and known vectors are listed by node.

Parameters:
s The solver to use (e.g., ILSI_CG_Solver)
param Assorted input and output parameters for the solver.
fem_mesh Readable FEM mesh object to solve over.
fem_entity FEM mesh entity to solve over (typically FEM_NODE).
length The number of shared entities.
width The number of unknowns per shared entity. b and x must have length*width entries.
bcCount Number of essential boundary conditions to apply. bcDOF and bcValues must have bcCount entries.
bcDOF Degree of freedom to impose unknown value on.
bcValue Value to impose on this DOF--i.e., x[bcDOF[i]]=bcValue[i].
A The user function that applies the matrix.
ptr User-defined pointer value passed to A.
b The local part of the known vector. Never modified.
x On input, the initial guess for the solution. During execution, the intermediate solution values. On output, the final solution, including boundary conditions.

Definition at line 237 of file ifem.C.

References BCapplier::set_c(), and BCapplier::solve().

Here is the call graph for this function:

FLINKAGE void FTN_NAME ( IFEM_SOLVE_SHARED_BC  ,
ifem_solve_shared_bc   
)

Definition at line 249 of file ifem.C.

References PUP::b, BCapplier::bcCount, BCapplier::bcDOF, BCapplier::bcValue, length, p, BCapplier::ptr, PUP::s, BCapplier::set_f(), BCapplier::solve(), width(), and x.

Here is the call graph for this function:


Generated on Mon Sep 21 08:07:30 2020 for Charm++ by  doxygen 1.5.5