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