source: issm/trunk/src/c/modules/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp@ 4185

Last change on this file since 4185 was 4185, checked in by Mathieu Morlighem, 15 years ago

fixed parallel: id must be renumbered correctly

File size: 1.8 KB
RevLine 
[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]12void 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}
Note: See TracBrowser for help on using the repository browser.