[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 | extern int my_rank;
|
---|
| 15 |
|
---|
| 16 | /*Intermediary*/
|
---|
| 17 | int numberofvertices,found;
|
---|
| 18 | Vec connectivity=NULL;
|
---|
| 19 | Vec fieldsum=NULL;
|
---|
[3372] | 20 | double* field_serial=NULL;
|
---|
| 21 |
|
---|
[3556] | 22 | /*Output*/
|
---|
| 23 | Vec field=NULL;
|
---|
| 24 |
|
---|
[3869] | 25 | /*Initialize intermediary*/
|
---|
[3703] | 26 | found=parameters->FindParam(&numberofvertices,NumberOfVerticesEnum);
|
---|
[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: */
|
---|
| 39 | nodes->FieldAverageOntoVertices(fieldsum,connectivity,field_serial);
|
---|
[3372] | 40 |
|
---|
[3556] | 41 | /*Assemble vectors: */
|
---|
| 42 | VecAssemblyBegin(connectivity);
|
---|
| 43 | VecAssemblyEnd(connectivity);
|
---|
| 44 | VecAssemblyBegin(fieldsum);
|
---|
| 45 | VecAssemblyEnd(fieldsum);
|
---|
[3372] | 46 |
|
---|
[3556] | 47 | /*Initialize output*/
|
---|
| 48 | field=NewVec(numberofvertices);
|
---|
| 49 |
|
---|
| 50 | /*Create Field = Fieldsum./connectivity */
|
---|
| 51 | VecPointwiseDivide(field,fieldsum,connectivity);
|
---|
| 52 |
|
---|
| 53 | /*Assign output pointer*/
|
---|
| 54 | VecFree(pfield);
|
---|
| 55 | *pfield=field;
|
---|
| 56 |
|
---|
[3372] | 57 | /*Free ressources:*/
|
---|
| 58 | xfree((void**)&field_serial);
|
---|
[3556] | 59 | VecFree(&connectivity);
|
---|
| 60 | VecFree(&fieldsum);
|
---|
[3372] | 61 |
|
---|
| 62 | }
|
---|