Ice Sheet System Model  4.18
Code documentation
Functions
ConstraintsStatex.cpp File Reference
#include "./ConstraintsStatex.h"
#include "./ConstraintsStateLocal.h"
#include "../../shared/shared.h"
#include "../../toolkits/toolkits.h"

Go to the source code of this file.

Functions

void ConstraintsStatex (int *pconverged, int *pnum_unstable_constraints, FemModel *femmodel)
 

Function Documentation

◆ ConstraintsStatex()

void ConstraintsStatex ( int *  pconverged,
int *  pnum_unstable_constraints,
FemModel femmodel 
)

Definition at line 10 of file ConstraintsStatex.cpp.

10  {
11 
12  /*Early return if no rift and no penalties*/
13  if(femmodel->loads->numrifts == 0 && femmodel->loads->numpenalties == 0){
14  *pconverged = 0;
15  *pnum_unstable_constraints = 0;
16  return;
17  }
18 
19  /*output: */
20  int converged = 1;
21  int num_unstable_constraints = 0;
22  int min_mechanical_constraints = 0;
23  int unstable = 0;
24  int sum_num_unstable_constraints = 0;
25  int analysis_type;
26 
27  /*Display message*/
28  if(VerboseModule()) _printf0_(" Constraining penalties\n");
29 
30  /*recover parameters: */
33 
34  /*Rift penalties first*/
35  if(femmodel->loads->numrifts){
36  RiftConstraintsState(&converged,&num_unstable_constraints,femmodel->loads,min_mechanical_constraints,analysis_type);
37  }
38 
39  /*Deal with pengrid*/
41  for(int i=0;i<femmodel->loads->Size();i++){
43  if(load->ObjectEnum()==PengridEnum){
44  Pengrid* pengrid=(Pengrid*)load;
45  pengrid->ConstraintActivate(&unstable);
46  num_unstable_constraints += unstable;
47  }
48  }
49  }
50 
51  ISSM_MPI_Reduce(&num_unstable_constraints,&sum_num_unstable_constraints,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
52  ISSM_MPI_Bcast(&sum_num_unstable_constraints,1,ISSM_MPI_INT,0,IssmComm::GetComm());
53  num_unstable_constraints=sum_num_unstable_constraints;
54 
55  /*Have we converged? : */
56  if(num_unstable_constraints) converged=0;
57 
58  /*Assign output pointers: */
59  *pconverged = converged;
60  *pnum_unstable_constraints = num_unstable_constraints;
61 }
DataSet::Size
int Size()
Definition: DataSet.cpp:399
PengridEnum
@ PengridEnum
Definition: EnumDefinitions.h:1229
Pengrid::ConstraintActivate
void ConstraintActivate(int *punstable)
Definition: Pengrid.cpp:332
_printf0_
#define _printf0_(StreamArgs)
Definition: Print.h:29
ISSM_MPI_SUM
#define ISSM_MPI_SUM
Definition: issmmpi.h:134
FemModel::parameters
Parameters * parameters
Definition: FemModel.h:46
IssmComm::GetComm
static ISSM_MPI_Comm GetComm(void)
Definition: IssmComm.cpp:30
Load
Definition: Load.h:22
StressbalanceRiftPenaltyThresholdEnum
@ StressbalanceRiftPenaltyThresholdEnum
Definition: EnumDefinitions.h:413
VerboseModule
bool VerboseModule(void)
Definition: Verbosity.cpp:23
Loads::numpenalties
int numpenalties
Definition: Loads.h:21
ISSM_MPI_INT
#define ISSM_MPI_INT
Definition: issmmpi.h:127
Pengrid
Definition: Pengrid.h:21
FemModel::loads
Loads * loads
Definition: FemModel.h:54
ISSM_MPI_Bcast
int ISSM_MPI_Bcast(void *buffer, int count, ISSM_MPI_Datatype datatype, int root, ISSM_MPI_Comm comm)
Definition: issmmpi.cpp:162
Object::ObjectEnum
virtual int ObjectEnum()=0
RiftConstraintsState
void RiftConstraintsState(int *pconverged, int *pnum_unstable_constraints, Loads *loads, int min_mechanical_constraints, int analysis_type)
Definition: RiftConstraintsState.cpp:9
Loads::numrifts
int numrifts
Definition: Loads.h:20
DataSet::GetObjectByOffset
Object * GetObjectByOffset(int offset)
Definition: DataSet.cpp:334
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
AnalysisTypeEnum
@ AnalysisTypeEnum
Definition: EnumDefinitions.h:36
ISSM_MPI_Reduce
int ISSM_MPI_Reduce(void *sendbuf, void *recvbuf, int count, ISSM_MPI_Datatype datatype, ISSM_MPI_Op op, int root, ISSM_MPI_Comm comm)
Definition: issmmpi.cpp:373
femmodel
FemModel * femmodel
Definition: esmfbinders.cpp:16