Ice Sheet System Model  4.18
Code documentation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Member Functions | Data Fields
Loads Class Reference

Declaration of Loads class. More...

#include <Loads.h>

Inheritance diagram for Loads:
DataSet

Public Member Functions

 Loads ()
 
 ~Loads ()
 
LoadsCopy ()
 
void Marshall (char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
 
void Configure (Elements *elements, Loads *loads, Nodes *nodes, Vertices *vertices, Materials *materials, Parameters *parameters)
 
bool IsPenalty ()
 
void Finalize ()
 
int MaxNumNodes ()
 
int NumberOfLoads ()
 
void ResetHooks ()
 
void SetCurrentConfiguration (Elements *elements, Loads *loads, Nodes *nodes, Vertices *vertices, Materials *materials, Parameters *parameters)
 
- Public Member Functions inherited from DataSet
 DataSet ()
 
 DataSet (int enum_type)
 
 ~DataSet ()
 
void Marshall (char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
 
int GetEnum ()
 
int GetEnum (int offset)
 
void Echo ()
 
void DeepEcho ()
 
int AddObject (Object *object)
 
int DeleteObject (int id)
 
int Size ()
 
void clear ()
 
ObjectGetObjectByOffset (int offset)
 
ObjectGetObjectById (int *poffset, int eid)
 
void Presort ()
 
void Sort ()
 
DataSetCopy (void)
 
int DeleteObject (Object *object)
 

Data Fields

int numrifts
 
int numpenalties
 
- Data Fields inherited from DataSet
std::vector< Object * > objects
 
int enum_type
 
int sorted
 
int presorted
 
int numsorted
 
int * sorted_ids
 
int * id_offsets
 

Detailed Description

Declaration of Loads class.

Declaration of Loads class. Loads are vector lists (Containers) of Load objects.

Definition at line 16 of file Loads.h.

Constructor & Destructor Documentation

◆ Loads()

Loads::Loads ( )

Definition at line 30 of file Loads.cpp.

30  {/*{{{*/
31  this->enum_type=LoadsEnum;
32  this->numrifts = 0;
33  this->numpenalties = 0;
34  return;
35 }

◆ ~Loads()

Loads::~Loads ( )

Definition at line 37 of file Loads.cpp.

37  {/*{{{*/
38  return;
39 }

Member Function Documentation

◆ Copy()

Loads * Loads::Copy ( void  )

Definition at line 42 of file Loads.cpp.

42  {/*{{{*/
43 
44  int num_proc = IssmComm::GetSize();
45 
46  /*Copy dataset*/
47  Loads* output=new Loads();
48  output->sorted=this->sorted;
49  output->numsorted=this->numsorted;
50  output->presorted=this->presorted;
51  for(vector<Object*>::iterator obj=this->objects.begin() ; obj < this->objects.end(); obj++ ){
52  output->AddObject((*obj)->copy());
53  }
54 
55  /*Build id_offsets and sorted_ids*/
56  int objsize = this->numsorted;
57  output->id_offsets=NULL;
58  output->sorted_ids=NULL;
59  if(this->sorted && objsize>0 && this->id_offsets){
60  output->id_offsets=xNew<int>(objsize);
61  xMemCpy<int>(output->id_offsets,this->id_offsets,objsize);
62  }
63  if(this->sorted && objsize>0 && this->sorted_ids){
64  output->sorted_ids=xNew<int>(objsize);
65  xMemCpy<int>(output->sorted_ids,this->sorted_ids,objsize);
66  }
67 
68  /*Copy other fields*/
69  output->numrifts = this->numrifts;
70  output->numpenalties = this->numpenalties;
71 
72  return output;
73 }

◆ Marshall()

void Loads::Marshall ( char **  pmarshalled_data,
int *  pmarshalled_data_size,
int  marshall_direction 
)

Definition at line 75 of file Loads.cpp.

75  { /*{{{*/
76 
77  int num_procs=IssmComm::GetSize();
78  int test = num_procs;
82 
83  DataSet::Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
84 }

◆ Configure()

void Loads::Configure ( Elements elements,
Loads loads,
Nodes nodes,
Vertices vertices,
Materials materials,
Parameters parameters 
)

Definition at line 88 of file Loads.cpp.

88  {/*{{{*/
89 
90  vector<Object*>::iterator object;
91  for(object=objects.begin() ; object < objects.end(); object++){
92  Load* load=xDynamicCast<Load*>(*object);
93  load->Configure(elements,loads,nodes,vertices,materials,parameters);
94  }
95 }

◆ IsPenalty()

bool Loads::IsPenalty ( void  )

Definition at line 124 of file Loads.cpp.

124  {/*{{{*/
125 
126  if(this->numpenalties>0)
127  return true;
128  else
129  return false;
130 }

◆ Finalize()

void Loads::Finalize ( )

Definition at line 97 of file Loads.cpp.

97  {/*{{{*/
98 
99  /*Count Rifts and penalties*/
100  int ispenalty=0;
101  int isrift=0;
102  int allcount;
103 
104  /*Now go through all loads, and get how many nodes they own, unless they are clone nodes: */
105  for(int i=0;i<this->Size();i++){
106  Load* load=xDynamicCast<Load*>(this->GetObjectByOffset(i));
107  if(load->IsPenalty()){
108  ispenalty++;
109  }
110  if(load->ObjectEnum()==RiftfrontEnum){
111  isrift++;
112  }
113  }
114 
115  /*Grab sum of all cpus: */
116  ISSM_MPI_Allreduce((void*)&ispenalty,(void*)&allcount,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
117  this->numpenalties = allcount;
118 
119  ISSM_MPI_Allreduce((void*)&isrift,(void*)&allcount,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
120  this->numrifts= allcount;
121 
122 }

◆ MaxNumNodes()

int Loads::MaxNumNodes ( void  )

Definition at line 132 of file Loads.cpp.

132  {/*{{{*/
133 
134  int max=0;
135  int allmax;
136 
137  /*Now go through all loads, and get how many nodes they own, unless they are clone nodes: */
138  for(int i=0;i<this->Size();i++){
139  Load* load=xDynamicCast<Load*>(this->GetObjectByOffset(i));
140  int numnodes=load->GetNumberOfNodes();
141  if(numnodes>max)max=numnodes;
142  }
143 
144  /*Grab max of all cpus: */
146  return allmax;
147 }

◆ NumberOfLoads()

int Loads::NumberOfLoads ( void  )

Definition at line 149 of file Loads.cpp.

149  {/*{{{*/
150 
151  int localloads;
152  int numberofloads;
153 
154  /*Get number of local loads*/
155  localloads=this->Size();
156 
157  /*figure out total number of loads combining all the cpus (no clones here)*/
158  ISSM_MPI_Reduce(&localloads,&numberofloads,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
159  ISSM_MPI_Bcast(&numberofloads,1,ISSM_MPI_INT,0,IssmComm::GetComm());
160 
161  return numberofloads;
162 }

◆ ResetHooks()

void Loads::ResetHooks ( )

Definition at line 164 of file Loads.cpp.

164  {/*{{{*/
165 
166  vector<Object*>::iterator object;
167  Load* load=NULL;
168 
169  for ( object=objects.begin() ; object < objects.end(); object++ ){
170 
171  load=xDynamicCast<Load*>((*object));
172  load->ResetHooks();
173 
174  }
175 
176 }

◆ SetCurrentConfiguration()

void Loads::SetCurrentConfiguration ( Elements elements,
Loads loads,
Nodes nodes,
Vertices vertices,
Materials materials,
Parameters parameters 
)

Definition at line 178 of file Loads.cpp.

178  {/*{{{*/
179 
180  vector<Object*>::iterator object;
181  Load* load=NULL;
182 
183  for ( object=objects.begin() ; object < objects.end(); object++ ){
184  load=xDynamicCast<Load*>(*object);
185  load->SetCurrentConfiguration(elements,loads,nodes,vertices,materials,parameters);
186  }
187 }

Field Documentation

◆ numrifts

int Loads::numrifts

Definition at line 20 of file Loads.h.

◆ numpenalties

int Loads::numpenalties

Definition at line 21 of file Loads.h.


The documentation for this class was generated from the following files:
DataSet::Size
int Size()
Definition: DataSet.cpp:399
LoadsEnum
@ LoadsEnum
Definition: EnumDefinitions.h:1145
ISSM_MPI_Allreduce
int ISSM_MPI_Allreduce(void *sendbuf, void *recvbuf, int count, ISSM_MPI_Datatype datatype, ISSM_MPI_Op op, ISSM_MPI_Comm comm)
Definition: issmmpi.cpp:116
DataSet::AddObject
int AddObject(Object *object)
Definition: DataSet.cpp:252
ISSM_MPI_SUM
#define ISSM_MPI_SUM
Definition: issmmpi.h:134
MARSHALLING_ENUM
#define MARSHALLING_ENUM(EN)
Definition: Marshalling.h:14
IssmComm::GetComm
static ISSM_MPI_Comm GetComm(void)
Definition: IssmComm.cpp:30
DataSet::objects
std::vector< Object * > objects
Definition: DataSet.h:19
ISSM_MPI_MAX
#define ISSM_MPI_MAX
Definition: issmmpi.h:131
Load
Definition: Load.h:22
DataSet::sorted_ids
int * sorted_ids
Definition: DataSet.h:28
Loads::numpenalties
int numpenalties
Definition: Loads.h:21
Loads::Loads
Loads()
Definition: Loads.cpp:30
ISSM_MPI_INT
#define ISSM_MPI_INT
Definition: issmmpi.h:127
Load::Configure
virtual void Configure(Elements *elements, Loads *loads, Nodes *nodes, Vertices *vertices, Materials *materials, Parameters *parameters)=0
Load::SetCurrentConfiguration
virtual void SetCurrentConfiguration(Elements *elements, Loads *loads, Nodes *nodes, Vertices *vertices, Materials *materials, Parameters *parameters)=0
DataSet::sorted
int sorted
Definition: DataSet.h:25
IssmComm::GetSize
static int GetSize(void)
Definition: IssmComm.cpp:46
MARSHALLING
#define MARSHALLING(FIELD)
Definition: Marshalling.h:29
Load::GetNumberOfNodes
virtual int GetNumberOfNodes(void)=0
DataSet::enum_type
int enum_type
Definition: DataSet.h:22
RiftfrontEnum
@ RiftfrontEnum
Definition: EnumDefinitions.h:1240
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
Loads::numrifts
int numrifts
Definition: Loads.h:20
Loads
Declaration of Loads class.
Definition: Loads.h:16
DataSet::GetObjectByOffset
Object * GetObjectByOffset(int offset)
Definition: DataSet.cpp:334
DataSet::numsorted
int numsorted
Definition: DataSet.h:27
Load::IsPenalty
virtual bool IsPenalty(void)=0
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
max
IssmDouble max(IssmDouble a, IssmDouble b)
Definition: extrema.cpp:24
DataSet::id_offsets
int * id_offsets
Definition: DataSet.h:29
Load::ResetHooks
virtual void ResetHooks()=0
DataSet::presorted
int presorted
Definition: DataSet.h:26
DataSet::Marshall
void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
Definition: DataSet.cpp:93