CalculiX  2.13
A Free Software Three-Dimensional Structural Finite Element Program
mafillpmain.c File Reference
#include <unistd.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <pthread.h>
#include "CalculiX.h"
Include dependency graph for mafillpmain.c:

Go to the source code of this file.

Functions

void mafillpmain (ITG *nef, char *lakonf, ITG *ipnei, ITG *neifa, ITG *neiel, double *vfa, double *area, double *advfa, double *xlet, double *cosa, double *volume, double *au, double *ad, ITG *jq, ITG *irow, double *ap, ITG *ielfa, ITG *ifabou, double *xle, double *b, double *xxn, ITG *neq, ITG *nzs, double *hfa, double *gradpel, double *bp, double *xxi, ITG *neij, double *xlen, double *cosb, ITG *iatleastonepressurebc, ITG *iau6, double *xxicn)
 
void * mafillpmt (ITG *i)
 

Variables

static char * lakonf1
 
static ITG num_cpus
 
static ITGnef1
 
static ITGipnei1
 
static ITGneifa1
 
static ITGneiel1
 
static ITGjq1
 
static ITGirow1
 
static ITGielfa1
 
static ITGifabou1
 
static ITGneq1
 
static ITGnzs1
 
static ITGneij1
 
static ITGiau61
 
static double * vfa1
 
static double * area1
 
static double * advfa1
 
static double * xlet1
 
static double * cosa1
 
static double * volume1
 
static double * au1
 
static double * ad1
 
static double * ap1
 
static double * xle1
 
static double * b1
 
static double * xxn1
 
static double * hfa1
 
static double * gradpel1
 
static double * bp1
 
static double * xxi1
 
static double * xlen1
 
static double * cosb1
 
static double * xxicn1
 

Function Documentation

◆ mafillpmain()

void mafillpmain ( ITG nef,
char *  lakonf,
ITG ipnei,
ITG neifa,
ITG neiel,
double *  vfa,
double *  area,
double *  advfa,
double *  xlet,
double *  cosa,
double *  volume,
double *  au,
double *  ad,
ITG jq,
ITG irow,
double *  ap,
ITG ielfa,
ITG ifabou,
double *  xle,
double *  b,
double *  xxn,
ITG neq,
ITG nzs,
double *  hfa,
double *  gradpel,
double *  bp,
double *  xxi,
ITG neij,
double *  xlen,
double *  cosb,
ITG iatleastonepressurebc,
ITG iau6,
double *  xxicn 
)
40  {
41 
42  ITG i,j;
43 
44  /* variables for multithreading procedure */
45 
46  ITG sys_cpus,*ithread=NULL;
47  char *env,*envloc,*envsys;
48 
49  num_cpus = 0;
50  sys_cpus=0;
51 
52  /* explicit user declaration prevails */
53 
54  envsys=getenv("NUMBER_OF_CPUS");
55  if(envsys){
56  sys_cpus=atoi(envsys);
57  if(sys_cpus<0) sys_cpus=0;
58  }
59 
60  /* automatic detection of available number of processors */
61 
62  if(sys_cpus==0){
63  sys_cpus = getSystemCPUs();
64  if(sys_cpus<1) sys_cpus=1;
65  }
66 
67  /* local declaration prevails, if strictly positive */
68 
69  envloc = getenv("CCX_NPROC_CFD");
70  if(envloc){
71  num_cpus=atoi(envloc);
72  if(num_cpus<0){
73  num_cpus=0;
74  }else if(num_cpus>sys_cpus){
75  num_cpus=sys_cpus;
76  }
77 
78  }
79 
80  /* else global declaration, if any, applies */
81 
82  env = getenv("OMP_NUM_THREADS");
83  if(num_cpus==0){
84  if (env)
85  num_cpus = atoi(env);
86  if (num_cpus < 1) {
87  num_cpus=1;
88  }else if(num_cpus>sys_cpus){
89  num_cpus=sys_cpus;
90  }
91  }
92 
93 // next line is to be inserted in a similar way for all other paralell parts
94 
95  if(*nef<num_cpus) num_cpus=*nef;
96 
97  pthread_t tid[num_cpus];
98 
99  /* calculating the stiffness and/or mass matrix
100  (symmetric part) */
101 
102  nef1=nef;lakonf1=lakonf;ipnei1=ipnei;neifa1=neifa;neiel1=neiel;
103  vfa1=vfa;area1=area;advfa1=advfa;xlet1=xlet,cosa1=cosa;volume1=volume;
104  jq1=jq;irow1=irow;ap1=ap;ielfa1=ielfa;ifabou1=ifabou;xle1=xle;
105  xxn1=xxn;neq1=neq;nzs1=nzs;hfa1=hfa;gradpel1=gradpel;bp1=bp;xxi1=xxi;
106  neij1=neij;xlen1=xlen;cosb1=cosb;iau61=iau6;ad1=ad;au1=au;b1=b;
107  xxicn1=xxicn;
108 
109  /* create threads and wait */
110 
111  NNEW(ithread,ITG,num_cpus);
112  for(i=0; i<num_cpus; i++) {
113  ithread[i]=i;
114  pthread_create(&tid[i], NULL, (void *)mafillpmt, (void *)&ithread[i]);
115  }
116  for(i=0; i<num_cpus; i++) pthread_join(tid[i], NULL);
117 
118  SFREE(ithread);
119 
120  FORTRAN(mafillpbc,(nef,au,ad,jq,irow,b,iatleastonepressurebc,nzs));
121 
122  return;
123 
124 }
static double * xxi1
Definition: mafillpmain.c:30
static ITG * ielfa1
Definition: mafillpmain.c:27
static ITG * jq1
Definition: mafillpmain.c:27
static double * hfa1
Definition: mafillpmain.c:30
static ITG * neiel1
Definition: mafillpmain.c:27
int pthread_create(pthread_t *thread_id, const pthread_attr_t *attributes, void *(*thread_function)(void *), void *arguments)
static double * xxicn1
Definition: mafillpmain.c:30
static double * advfa1
Definition: mafillpmain.c:30
static double * xlen1
Definition: mafillpmain.c:30
void * mafillpmt(ITG *i)
Definition: mafillpmain.c:128
void FORTRAN(actideacti,(char *set, ITG *nset, ITG *istartset, ITG *iendset, ITG *ialset, char *objectset, ITG *ipkon, ITG *ibject, ITG *ne))
static double * vfa1
Definition: mafillpmain.c:30
static double * volume1
Definition: mafillpmain.c:30
static double * xlet1
Definition: mafillpmain.c:30
static double * ap1
Definition: mafillpmain.c:30
static double * b1
Definition: mafillpmain.c:30
ITG getSystemCPUs()
Definition: getSystemCPUs.c:40
static double * au1
Definition: mafillpmain.c:30
static double * gradpel1
Definition: mafillpmain.c:30
static double * xxn1
Definition: mafillpmain.c:30
static double * bp1
Definition: mafillpmain.c:30
static ITG * nef1
Definition: mafillpmain.c:27
static ITG * neifa1
Definition: mafillpmain.c:27
static char * lakonf1
Definition: mafillpmain.c:25
#define SFREE(a)
Definition: CalculiX.h:41
static double * cosa1
Definition: mafillpmain.c:30
static ITG * ipnei1
Definition: mafillpmain.c:27
static double * area1
Definition: mafillpmain.c:30
static double * xle1
Definition: mafillpmain.c:30
static double * ad1
Definition: mafillpmain.c:30
subroutine mafillpbc(nef, au, ad, jq, irow, b, iatleastonepressurebc, nzs)
Definition: mafillpbc.f:21
static ITG * nzs1
Definition: mafillpmain.c:27
static ITG num_cpus
Definition: mafillpmain.c:27
int pthread_join(pthread_t thread, void **status_ptr)
static ITG * irow1
Definition: mafillpmain.c:27
#define ITG
Definition: CalculiX.h:51
static ITG * ifabou1
Definition: mafillpmain.c:27
static double * cosb1
Definition: mafillpmain.c:30
static ITG * iau61
Definition: mafillpmain.c:27
#define NNEW(a, b, c)
Definition: CalculiX.h:39
static ITG * neq1
Definition: mafillpmain.c:27
static ITG * neij1
Definition: mafillpmain.c:27

◆ mafillpmt()

void* mafillpmt ( ITG i)
128  {
129 
130  ITG nefa,nefb,nefdelta;
131 
132 // ceil -> floor
133 
134  nefdelta=(ITG)floor(*nef1/(double)num_cpus);
135  nefa=*i*nefdelta+1;
136  nefb=(*i+1)*nefdelta;
137 // next line! -> all parallel sections
138  if((*i==num_cpus-1)&&(nefb<*nef1)) nefb=*nef1;
139 
143  hfa1,gradpel1,bp1,xxi1,neij1,xlen1,cosb1,&nefa,&nefb,
144  iau61,xxicn1));
145 
146  return NULL;
147 }
static double * xxi1
Definition: mafillpmain.c:30
static ITG * ielfa1
Definition: mafillpmain.c:27
static ITG * jq1
Definition: mafillpmain.c:27
static double * hfa1
Definition: mafillpmain.c:30
static ITG * neiel1
Definition: mafillpmain.c:27
static double * xxicn1
Definition: mafillpmain.c:30
static double * advfa1
Definition: mafillpmain.c:30
static double * xlen1
Definition: mafillpmain.c:30
void FORTRAN(actideacti,(char *set, ITG *nset, ITG *istartset, ITG *iendset, ITG *ialset, char *objectset, ITG *ipkon, ITG *ibject, ITG *ne))
static double * vfa1
Definition: mafillpmain.c:30
static double * volume1
Definition: mafillpmain.c:30
static double * xlet1
Definition: mafillpmain.c:30
static double * ap1
Definition: mafillpmain.c:30
static double * b1
Definition: mafillpmain.c:30
static double * au1
Definition: mafillpmain.c:30
static double * gradpel1
Definition: mafillpmain.c:30
static double * xxn1
Definition: mafillpmain.c:30
static double * bp1
Definition: mafillpmain.c:30
static ITG * nef1
Definition: mafillpmain.c:27
static ITG * neifa1
Definition: mafillpmain.c:27
static char * lakonf1
Definition: mafillpmain.c:25
static double * cosa1
Definition: mafillpmain.c:30
static ITG * ipnei1
Definition: mafillpmain.c:27
static double * area1
Definition: mafillpmain.c:30
static double * xle1
Definition: mafillpmain.c:30
static double * ad1
Definition: mafillpmain.c:30
subroutine mafillp(nef, lakonf, ipnei, neifa, neiel, vfa, area, advfa, xlet, cosa, volume, au, ad, jq, irow, ap, ielfa, ifabou, xle, b, xxn, neq, nzs, hfa, gradpel, bp, xxi, neij, xlen, cosb, nefa, nefb, iau6, xxicn)
Definition: mafillp.f:23
static ITG * nzs1
Definition: mafillpmain.c:27
static ITG num_cpus
Definition: mafillpmain.c:27
static ITG * irow1
Definition: mafillpmain.c:27
#define ITG
Definition: CalculiX.h:51
static ITG * ifabou1
Definition: mafillpmain.c:27
static double * cosb1
Definition: mafillpmain.c:30
static ITG * iau61
Definition: mafillpmain.c:27
static ITG * neq1
Definition: mafillpmain.c:27
static ITG * neij1
Definition: mafillpmain.c:27

Variable Documentation

◆ ad1

double * ad1
static

◆ advfa1

double * advfa1
static

◆ ap1

double * ap1
static

◆ area1

double * area1
static

◆ au1

double * au1
static

◆ b1

double * b1
static

◆ bp1

double * bp1
static

◆ cosa1

double * cosa1
static

◆ cosb1

double * cosb1
static

◆ gradpel1

double * gradpel1
static

◆ hfa1

double * hfa1
static

◆ iau61

ITG * iau61
static

◆ ielfa1

ITG * ielfa1
static

◆ ifabou1

ITG * ifabou1
static

◆ ipnei1

ITG * ipnei1
static

◆ irow1

ITG * irow1
static

◆ jq1

ITG * jq1
static

◆ lakonf1

char* lakonf1
static

◆ nef1

ITG * nef1
static

◆ neiel1

ITG * neiel1
static

◆ neifa1

ITG * neifa1
static

◆ neij1

ITG * neij1
static

◆ neq1

ITG * neq1
static

◆ num_cpus

ITG num_cpus
static

◆ nzs1

ITG * nzs1
static

◆ vfa1

double* vfa1
static

◆ volume1

double * volume1
static

◆ xle1

double * xle1
static

◆ xlen1

double * xlen1
static

◆ xlet1

double * xlet1
static

◆ xxi1

double * xxi1
static

◆ xxicn1

double * xxicn1
static

◆ xxn1

double * xxn1
static
Hosted by OpenAircraft.com, (Michigan UAV, LLC)