source: issm/trunk/src/c/classes/Elements/Elements.cpp@ 16560

Last change on this file since 16560 was 16560, checked in by Mathieu Morlighem, 11 years ago

merged trunk-jpl and trunk for revision 16554

File size: 2.7 KB
RevLine 
[14996]1/*
2 * \file Elements.cpp
3 * \brief: Implementation of Elements class, derived from DataSet class
4 */
5
6/*Headers: {{{*/
7#ifdef HAVE_CONFIG_H
8 #include <config.h>
9#else
10#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
11#endif
12
13#include "./Element.h"
14#include "./Elements.h"
15#include "../Params/Parameters.h"
16#include "../ExternalResults/Results.h"
17#include "../ExternalResults/GenericExternalResult.h"
[15051]18#include "../../toolkits/toolkits.h"
[15012]19#include "../../shared/shared.h"
[14996]20
21using namespace std;
22/*}}}*/
23
24/*Object constructors and destructor*/
25/*FUNCTION Elements::Elements(){{{*/
26Elements::Elements(){
27 enum_type=MeshElementsEnum;
28 return;
29}
30/*}}}*/
31/*FUNCTION Elements::~Elements(){{{*/
32Elements::~Elements(){
33 return;
34}
35/*}}}*/
36
37/*Object management*/
38/*FUNCTION Elements::Configure{{{*/
39void Elements::Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
40
41 vector<Object*>::iterator object;
42 Element* element=NULL;
43
44 for ( object=objects.begin() ; object < objects.end(); object++ ){
45
46 element=dynamic_cast<Element*>((*object));
47 element->Configure(elements,loads,nodes,vertices,materials,parameters);
48
49 }
50
51}
52/*}}}*/
53/*FUNCTION Elements::SetCurrentConfiguration{{{*/
54void Elements::SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
55
56 vector<Object*>::iterator object;
57 Element* element=NULL;
58
59 for ( object=objects.begin() ; object < objects.end(); object++ ){
60
61 element=dynamic_cast<Element*>((*object));
62 element->SetCurrentConfiguration(elements,loads,nodes,materials,parameters);
63
64 }
65
66}
67/*}}}*/
68/*FUNCTION Elements::MaxNumNodes{{{*/
69int Elements::MaxNumNodes(void){
70
71 int max=0;
72 int allmax;
73 int numnodes=0;
74
75 /*Now go through all elements, and get how many nodes they own, unless they are clone nodes: */
76 for(int i=0;i<this->Size();i++){
77
78 Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
79 numnodes=element->GetNumberOfNodes();
80 if(numnodes>max)max=numnodes;
81 }
82
83 /*Grab max of all cpus: */
[16137]84 ISSM_MPI_Allreduce((void*)&max,(void*)&allmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,IssmComm::GetComm());
[14996]85 max=allmax;
86
87 return max;
88}
89/*}}}*/
90/*FUNCTION Elements::NumberOfElements{{{*/
91int Elements::NumberOfElements(void){
92
93 int local_nelem;
94 int numberofelements;
95
96 local_nelem=this->Size();
[16560]97 ISSM_MPI_Allreduce((void*)&local_nelem,(void*)&numberofelements,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
[14996]98
99 return numberofelements;
100}
101/*}}}*/
[15375]102/*FUNCTION Elements::InputDuplicate{{{*/
[14996]103void Elements::InputDuplicate(int input_enum,int output_enum){
104
105 for(int i=0;i<this->Size();i++){
106 Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
107 element->InputDuplicate(input_enum,output_enum);
108 }
109}
110/*}}}*/
Note: See TracBrowser for help on using the repository browser.