Ice Sheet System Model  4.18
Code documentation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Data Structures | Functions
Nodalvalue.h File Reference

: header file for Nodalvalue object More...

#include "./Definition.h"
#include "./FemModel.h"

Go to the source code of this file.

Data Structures

class  Nodalvalue
 

Functions

void NodalValuex (IssmDouble *pnodalvalue, int natureofdataenum, Elements *elements, Nodes *nodes, Vertices *vertices, Loads *loads, Materials *materials, Parameters *parameters)
 
IssmDouble OutputDefinitionsResponsex (FemModel *femmodel, int output_enum)
 

Detailed Description

: header file for Nodalvalue object

Definition in file Nodalvalue.h.

Function Documentation

◆ NodalValuex()

void NodalValuex ( IssmDouble pnodalvalue,
int  natureofdataenum,
Elements elements,
Nodes nodes,
Vertices vertices,
Loads loads,
Materials materials,
Parameters parameters 
)

Definition at line 10 of file NodalValuex.cpp.

10  {
11 
12  IssmDouble value;
13  int index;
14  int found,sumfound,cpu_found,cpu;
15 
16  /*retrieve element we are interested in: */
17  parameters->FindParam(&index,IndexEnum);
18 
19  /*This is the vertex id for which we want to collect the data. Go through elements, and for each
20  *element, figure out if they hold the vertex, and the data. If so, return it: */
21  cpu_found=-1;
22  found=0;
23 
24  for(int i=0;i<elements->Size();i++){
25  Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
26  found=element->NodalValue(&value,index,natureofdataenum);
27  if(found){
28  cpu_found=IssmComm::GetRank();
29  break;
30  }
31  }
32 
33  /*Broadcast whether we found the element: */
35  if(!sumfound)_error_("could not find element with vertex with id " << index << " to compute nodal value " << EnumToStringx(natureofdataenum));
36 
37  /*Broadcast and plug into response: */
40 
41  *pnodalvalue=value;
42 }

◆ OutputDefinitionsResponsex()

IssmDouble OutputDefinitionsResponsex ( FemModel femmodel,
int  output_enum 
)

Definition at line 38 of file OutputDefinitionsResponsex.cpp.

38  {
39 
40  /*Ok, go find the output definitions dataset in the parameters, where our responses are hiding: */
42 
43  /*Now, go through the output definitions, and retrieve the object which corresponds to our requested response, output_enum: */
44  for(int i=0;i<output_definitions->Size();i++){
45 
46  //Definition* definition=xDynamicCast<Definition*>(output_definitions->GetObjectByOffset(i));
47  Definition* definition=dynamic_cast<Definition*>(output_definitions->GetObjectByOffset(i));
48 
49  int en = definition->DefinitionEnum();
50  if(en==output_enum){
51 
52  /*This is the object that we have been chasing for. compute the response and return: */
53  IssmDouble return_value=definition->Response(femmodel);
54 
55  /*return:*/
56  return return_value;
57  }
58  }
59 
60  /*If we are here, did not find the definition for this response, not good!: */
61  _error_("Could not find the response for output definition " << EnumToStringx(output_enum)
62  <<" ("<<output_enum<<")"
63  << " because could not find the definition itself!");
64 }
DataSet::Size
int Size()
Definition: DataSet.cpp:399
Definition::Response
virtual IssmDouble Response(FemModel *)=0
IndexEnum
@ IndexEnum
Definition: EnumDefinitions.h:201
IssmDouble
double IssmDouble
Definition: types.h:37
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
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
ISSM_MPI_MAX
#define ISSM_MPI_MAX
Definition: issmmpi.h:131
OutputdefinitionEnum
@ OutputdefinitionEnum
Definition: EnumDefinitions.h:285
Element::NodalValue
virtual int NodalValue(IssmDouble *pvalue, int index, int natureofdataenum)=0
Element
Definition: Element.h:41
ISSM_MPI_DOUBLE
#define ISSM_MPI_DOUBLE
Definition: issmmpi.h:125
ISSM_MPI_INT
#define ISSM_MPI_INT
Definition: issmmpi.h:127
EnumToStringx
const char * EnumToStringx(int enum_in)
Definition: EnumToStringx.cpp:15
Definition
Definition: Definition.h:10
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
DataSetParam
Definition: DataSetParam.h:20
Definition::DefinitionEnum
virtual int DefinitionEnum()=0
IssmComm::GetRank
static int GetRank(void)
Definition: IssmComm.cpp:34
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
DataSet::GetObjectByOffset
Object * GetObjectByOffset(int offset)
Definition: DataSet.cpp:334
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
Parameters::FindParamObject
Param * FindParamObject(int enum_type)
Definition: Parameters.cpp:588
DataSet
Declaration of DataSet class.
Definition: DataSet.h:14
femmodel
FemModel * femmodel
Definition: esmfbinders.cpp:16