source: issm/trunk/src/c/modules/ModelProcessorx/FacesPartitioning.cpp

Last change on this file was 24313, checked in by Mathieu Morlighem, 5 years ago

merged trunk-jpl and trunk for revision 24310

File size: 1.6 KB
Line 
1/*!\file: FacesPartitioning.cpp
2 * \brief: partition elements and nodes and vertices
3 */
4
5#include <string.h>
6#include "../../classes/classes.h"
7#include "../../shared/shared.h"
8#include "./ModelProcessorx.h"
9
10void FacesPartitioning(IoModel* iomodel){
11
12 /*If faces are already present, exit*/
13 if(iomodel->my_faces) return;
14
15 /*Get faces and elements*/
16 CreateFaces(iomodel);
17 _assert_(iomodel->elementtofaceconnectivity);
18
19 /*Mesh dependent variables*/
20 int elementnbf;
21 if(iomodel->domaintype==Domain2DhorizontalEnum){
22 elementnbf = 3;
23 }
24 else if(iomodel->domaintype==Domain2DverticalEnum){
25 elementnbf = 3;
26 }
27 else if(iomodel->domaintype==Domain3DEnum){
28 elementnbf = 5;
29 }
30 else{
31 _error_("mesh dimension not supported yet");
32 }
33 /*output: */
34 iomodel->my_faces=xNewZeroInit<bool>(iomodel->numberoffaces);
35
36 for(int i=0;i<iomodel->numberofelements;i++){
37 if(iomodel->my_elements[i]){
38 for(int j=0;j<elementnbf;j++){
39 _assert_(iomodel->elementtofaceconnectivity[i*elementnbf+j] >= 0);
40 _assert_(iomodel->elementtofaceconnectivity[i*elementnbf+j] < iomodel->numberoffaces);
41 iomodel->my_faces[iomodel->elementtofaceconnectivity[i*elementnbf+j]] = true;
42 }
43 }
44 }
45
46 if(iomodel->meshelementtype==PentaEnum){
47 iomodel->my_vfaces = xNewZeroInit<bool>(iomodel->numberofverticalfaces);
48 for(int i=0;i<iomodel->numberofelements;i++){
49 if(iomodel->my_elements[i]){
50 for(int j=0;j<3;j++){
51 _assert_(iomodel->elementtoverticalfaceconnectivity[i*3+j]<iomodel->numberofverticalfaces);
52 iomodel->my_vfaces[iomodel->elementtoverticalfaceconnectivity[i*3+j]] = true;
53 }
54 }
55 }
56 }
57}
Note: See TracBrowser for help on using the repository browser.