1 | /*!\file FieldAverageOntoVerticesx
|
---|
2 | * \brief: average field throfieldh thickness
|
---|
3 | */
|
---|
4 |
|
---|
5 | #include "./FieldAverageOntoVerticesx.h"
|
---|
6 |
|
---|
7 | #include "../../shared/shared.h"
|
---|
8 | #include "../../include/include.h"
|
---|
9 | #include "../../toolkits/toolkits.h"
|
---|
10 | #include "../../EnumDefinitions/EnumDefinitions.h"
|
---|
11 |
|
---|
12 | void FieldAverageOntoVerticesx(Vec* pfield, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters){
|
---|
13 |
|
---|
14 | /*Intermediary*/
|
---|
15 | int i;
|
---|
16 | int numberofvertices,found;
|
---|
17 | Vec connectivity=NULL;
|
---|
18 | Vec fieldsum=NULL;
|
---|
19 | double* field_serial=NULL;
|
---|
20 | Node* node=NULL;
|
---|
21 |
|
---|
22 | /*Output*/
|
---|
23 | Vec field=NULL;
|
---|
24 |
|
---|
25 | /*Initialize intermediary*/
|
---|
26 | vertices->NumberOfVertices(&numberofvertices);
|
---|
27 | connectivity=NewVec(numberofvertices);
|
---|
28 | fieldsum =NewVec(numberofvertices);
|
---|
29 |
|
---|
30 | /*First, get elements and nodes configured: */
|
---|
31 | elements->Configure(elements,loads, nodes,vertices, materials,parameters);
|
---|
32 | nodes->Configure(elements,loads, nodes,vertices, materials,parameters);
|
---|
33 | parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
|
---|
34 |
|
---|
35 | /*Serialize field: */
|
---|
36 | VecToMPISerial(&field_serial,*pfield);
|
---|
37 |
|
---|
38 | /*Compute summ of connectivity and summ of values: */
|
---|
39 | for (i=0;i<nodes->Size();i++){
|
---|
40 | node=(Node*)nodes->GetObjectByOffset(i);
|
---|
41 | node->FieldAverageOntoVertices(fieldsum,connectivity,field_serial);
|
---|
42 | }
|
---|
43 |
|
---|
44 | /*Assemble vectors: */
|
---|
45 | VecAssemblyBegin(connectivity);
|
---|
46 | VecAssemblyEnd(connectivity);
|
---|
47 | VecAssemblyBegin(fieldsum);
|
---|
48 | VecAssemblyEnd(fieldsum);
|
---|
49 |
|
---|
50 | /*Initialize output*/
|
---|
51 | field=NewVec(numberofvertices);
|
---|
52 |
|
---|
53 | /*Create Field = Fieldsum./connectivity */
|
---|
54 | VecPointwiseDivide(field,fieldsum,connectivity);
|
---|
55 |
|
---|
56 | /*Assign output pointer*/
|
---|
57 | VecFree(pfield);
|
---|
58 | *pfield=field;
|
---|
59 |
|
---|
60 | /*Free ressources:*/
|
---|
61 | xfree((void**)&field_serial);
|
---|
62 | VecFree(&connectivity);
|
---|
63 | VecFree(&fieldsum);
|
---|
64 |
|
---|
65 | }
|
---|