Ice Sheet System Model  4.18
Code documentation
Functions
ProcessRiftsx.h File Reference

header file for ProcessRifts module More...

Go to the source code of this file.

Functions

void ProcessRiftsx (int **pindex, int *pnel, double **px, double **py, int *pnods, int **psegments, int **psegmentmarkers, int *pnum_seg, RiftStruct **priftstruct)
 

Detailed Description

header file for ProcessRifts module

Definition in file ProcessRiftsx.h.

Function Documentation

◆ ProcessRiftsx()

void ProcessRiftsx ( int **  pindex,
int *  pnel,
double **  px,
double **  py,
int *  pnods,
int **  psegments,
int **  psegmentmarkers,
int *  pnum_seg,
RiftStruct **  priftstruct 
)

Definition at line 10 of file ProcessRiftsx.cpp.

10  {
11 
12  /*Output*/
13  int numrifts,numrifts0;
14  int *riftsnumsegments = NULL;
15  int **riftssegments = NULL;
16  int *riftsnumpairs = NULL;
17  int **riftspairs = NULL;
18  int *riftstips = NULL;
19  double **riftspenaltypairs = NULL;
20  int *riftsnumpenaltypairs = NULL;
21 
22  /*Recover initial mesh*/
23  int nel = *pnel;
24  int *index = *pindex;
25  double *x = *px;
26  double *y = *py;
27  int nods = *pnods;
28  int *segments = *psegments;
29  int *segmentmarkers = *psegmentmarkers;
30  int num_seg = *pnum_seg;
31 
32  /*Intermediary*/
33  int riftflag;
34 
35  /*First, do some fixing on the existing mesh: we do not want any element belonging entirely to the segment list (ie:
36  *all the nodes of this element belong to the segments (tends to happen when there are corners: */
37  RemoveCornersFromRifts(&index,&nel,&x,&y,&nods,segments,segmentmarkers,num_seg);
38 
39  /*Figure out if we have rifts, and how many: */
40  IsRiftPresent(&riftflag,&numrifts0,segmentmarkers,num_seg);
41 
42  if(!riftflag) _error_("No rift present in mesh");
43 
44  /*Split mesh*/
45  SplitMeshForRifts(&nel,&index,&nods,&x,&y,&num_seg,&segments,&segmentmarkers);
46 
47  /*Order segments so that their normals point outside the domain: */
48  OrderSegments(&segments,num_seg, index,nel);
49 
50  /*We do not want to output segments mixed with rift segments: wring out the rifts from the segments, using the
51  *segmentmarkerlist:*/
52  SplitRiftSegments(&segments,&segmentmarkers,&num_seg,&numrifts,&riftsnumsegments,&riftssegments,numrifts0,nods,nel);
53 
54  /*Using rift segments, associate rift faces in pairs, each pair face representing opposite flanks of the rifts facing one another directly: */
55  PairRiftElements(&riftsnumpairs,&riftspairs,numrifts,riftsnumsegments,riftssegments,x,y);
56 
57  /*Order rifts so that they start from one tip, go to the other tip, and back: */
58  OrderRifts(&riftstips,riftssegments,riftspairs,numrifts,riftsnumsegments,x,y,nods,nel);
59 
60  /*Create penalty pairs, used by Imp: */
61  PenaltyPairs(&riftspenaltypairs,&riftsnumpenaltypairs,numrifts,riftssegments,riftsnumsegments,riftspairs,riftstips,x,y);
62 
63  /*Create Riftstruct*/
64  RiftStruct* riftstruct = new RiftStruct(numrifts,riftsnumsegments,riftssegments,riftsnumpairs,riftspairs,riftsnumpenaltypairs,riftspenaltypairs,riftstips);
65 
66  /*Assign output pointers for mesh*/
67  *pnel = nel;
68  *pindex = index;
69  *px = x;
70  *py = y;
71  *pnods = nods;
72  *psegments = segments;
73  *psegmentmarkers = segmentmarkers;
74  *pnum_seg = num_seg;
75 
76  /*Assign output pointers for rifts*/
77  *priftstruct = riftstruct;
78 }
IsRiftPresent
int IsRiftPresent(int *priftflag, int *pnumrifts, int *segmentmarkerlist, int nsegs)
Definition: TriangleUtils.cpp:482
OrderSegments
int OrderSegments(int **psegments, int nseg, int *index, int nel)
Definition: OrderSegments.cpp:7
SplitMeshForRifts
int SplitMeshForRifts(int *pnel, int **pindex, int *pnods, double **px, double **py, int *pnsegs, int **psegments, int **psegmentmarkerlist)
Definition: SplitMeshForRifts.cpp:7
RemoveCornersFromRifts
int RemoveCornersFromRifts(int **pindex, int *pnel, double **px, double **py, int *pnods, int *segments, int *segmentmarkers, int num_seg)
Definition: TriangleUtils.cpp:797
PairRiftElements
int PairRiftElements(int **priftsnumpairs, int ***priftspairs, int numrifts, int *riftsnumsegments, int **riftssegments, double *x, double *y)
Definition: TriangleUtils.cpp:436
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
SplitRiftSegments
int SplitRiftSegments(int **psegments, int **psegmentmarkerlist, int *pnumsegs, int *pnumrifts, int **priftsnumsegs, int ***priftssegments, int numrifts, int nods, int nels)
Definition: TriangleUtils.cpp:350
PenaltyPairs
int PenaltyPairs(double ***priftspenaltypairs, int **priftsnumpenaltypairs, int numrifts, int **riftssegments, int *riftsnumsegments, int **riftspairs, int *riftstips, double *x, double *y)
Definition: TriangleUtils.cpp:662
OrderRifts
int OrderRifts(int **priftstips, int **riftssegments, int **riftspairs, int numrifts, int *riftsnumsegments, double *x, double *y, int nods, int nels)
Definition: TriangleUtils.cpp:508
RiftStruct
Definition: RiftStruct.h:8