CalculiX  2.8
A Free Software Three-Dimensional Structural Finite Element Program
 All Classes Files Functions Variables Macros
dfdbj.c File Reference
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "CalculiX.h"
Include dependency graph for dfdbj.c:

Go to the source code of this file.

Functions

void dfdbj (double *bcont, double **dbcontp, ITG *neq, ITG *nope, ITG *konl, ITG *nactdof, double *s, double *z, ITG *ikmpc, ITG *ilmpc, ITG *ipompc, ITG *nodempc, ITG *nmpc, double *coefmpc, double *fnl, ITG *nev, ITG **ikactcontp, ITG **ilactcontp, ITG *nactcont, ITG *nactcont_, ITG *mi, ITG *cyclicsymmetry, ITG *izdof, ITG *nzdof)
 

Function Documentation

void dfdbj ( double *  bcont,
double **  dbcontp,
ITG neq,
ITG nope,
ITG konl,
ITG nactdof,
double *  s,
double *  z,
ITG ikmpc,
ITG ilmpc,
ITG ipompc,
ITG nodempc,
ITG nmpc,
double *  coefmpc,
double *  fnl,
ITG nev,
ITG **  ikactcontp,
ITG **  ilactcontp,
ITG nactcont,
ITG nactcont_,
ITG mi,
ITG cyclicsymmetry,
ITG izdof,
ITG nzdof 
)

Definition at line 28 of file dfdbj.c.

33  {
34 
35  ITG j,j1,jdof,kdof,k,k1,l,id,index,ist,id1,ist1,index1,id2,ist2,index2,
36  jdbcontcol,i1,i3,i4,mt=mi[1]+1,im,*ikactcont=*ikactcontp,
37  *ilactcont=*ilactcontp,kdofm1;
38 
39  double d1,sl,*dbcont=*dbcontp;
40 
41  for(j=0; j<*nope; j++){
42  i1=mt*(konl[j]-1)+1;
43  for(j1=0; j1<3; j1++){
44  jdof=nactdof[i1+j1];
45  if(jdof!=0){
46  jdof--;
47  FORTRAN(nident,(ikactcont,&jdof,nactcont,&id));
48  do{
49  if(id>0){
50  if(ikactcont[id-1]==jdof){
51  jdbcontcol=ilactcont[id-1];
52  break;
53  }
54  }
55  (*nactcont)++;
56  if(*nactcont>*nactcont_){
57  *nactcont_=(ITG)(1.1**nactcont_);
58  RENEW(ikactcont,ITG,*nactcont_);
59  RENEW(ilactcont,ITG,*nactcont_);
60  RENEW(dbcont,double,*nev**nactcont_);
61  }
62  k=*nactcont-1;
63  l=k-1;
64  while(k>id){
65  ikactcont[k]=ikactcont[l];
66  ilactcont[k--]=ilactcont[l--];
67  }
68  jdbcontcol=*nactcont;
69  ikactcont[id]=jdof;
70  ilactcont[id]=*nactcont;
71 // memset(&dbcont[(*nactcont-1)**nev],0,sizeof(double)**nev);
72  DMEMSET(dbcont,(*nactcont-1)**nev,*nactcont**nev,0.);
73  break;
74  }while(1);
75  bcont[jdof]-=fnl[j*3+j1];
76  i4=(jdbcontcol-1)**nev;
77  i3=(3*j+j1);
78  for(k=0; k<*nope; k++){
79  for(k1=0; k1<3; k1++){
80  sl=s[(3*k+k1)*100+i3];
81  kdof=nactdof[mt*(konl[k]-1)+k1+1];
82  if(kdof!=0){
83  if(!(*cyclicsymmetry)){
84  for(l=0; l<*nev; l++){
85  dbcont[i4+l]-=sl*z[(long long)l**neq+kdof-1];
86  }
87  }else{
88  kdofm1=kdof-1;
89  FORTRAN(nident,(izdof,&kdofm1,nzdof,&id));
90  if(id!=0){
91  if(izdof[id-1]==kdofm1){
92  for(l=0; l<*nev; l++){
93  dbcont[i4+l]-=sl*z[l**nzdof+id-1];
94  }
95  }else{printf("*ERROR in dfdbj\n");FORTRAN(stop,());}
96  }else{printf("*ERROR in dfdbj\n");FORTRAN(stop,());}
97  }
98  }
99  else{
100  kdof=8*(konl[k]-1)+k1+1;
101  FORTRAN(nident,(ikmpc,&kdof,nmpc,&id));
102  if(id>0){
103  id--;
104  if(ikmpc[id]==kdof){
105  id=ilmpc[id];
106  ist=ipompc[id-1];
107  ist--;
108  index=nodempc[ist*3+2];
109  if(index==0) continue;
110  index--;
111  do{
112  kdof=nactdof[mt*(nodempc[index*3]-1)+nodempc[index*3+1]];
113  d1=sl*coefmpc[index]/coefmpc[ist];
114  if(kdof!=0){
115  if(!(*cyclicsymmetry)){
116  for(l=0; l<*nev; l++){
117  dbcont[i4+l]+=d1*z[(long long)l**neq+kdof-1];
118  }
119  }
120  }else{
121  kdofm1=kdof-1;
122  FORTRAN(nident,(izdof,&kdofm1,nzdof,&id));
123  if(id!=0){
124  if(izdof[id-1]==kdofm1){
125  for(l=0; l<*nev; l++){
126  dbcont[i4+l]+=d1*z[l**nzdof+id-1];
127  }
128  }else{printf("*ERROR in dfdbj\n");FORTRAN(stop,());}
129  }else{printf("*ERROR in dfdbj\n");FORTRAN(stop,());}
130  }
131  index=nodempc[index*3+2];
132  if(index==0) break;
133  index--;
134  }while(1);
135  }
136  }
137  }
138  }
139  }
140  }
141  else{
142  jdof=8*(konl[j]-1)+j1+1;
143  FORTRAN(nident,(ikmpc,&jdof,nmpc,&id1));
144  if(id1>0){
145  id1--;
146  if(ikmpc[id1]==jdof){
147  id1=ilmpc[id1];
148  ist1=ipompc[id1-1];
149  ist1--;
150  index1=nodempc[ist1*3+2];
151  if(index1==0) continue;
152  index1--;
153  do{
154  jdof=nactdof[mt*(nodempc[index1*3]-1)+nodempc[index1*3+1]];
155  if(jdof!=0){
156  jdof--;
157  FORTRAN(nident,(ikactcont,&jdof,nactcont,&id));
158  do{
159  if(id>0){
160  if(ikactcont[id-1]==jdof){
161  jdbcontcol=ilactcont[id-1];
162  }
163  }
164  (*nactcont)++;
165  if(*nactcont>*nactcont_){
166  *nactcont_=(ITG)(1.1**nactcont_);
167  RENEW(ikactcont,ITG,*nactcont_);
168  RENEW(ilactcont,ITG,*nactcont_);
169  RENEW(dbcont,double,*nev**nactcont_);
170  }
171  k=*nactcont-1;
172  l=k-1;
173  do{
174  ikactcont[k]=ikactcont[l];
175  ilactcont[k--]=ilactcont[l--];
176  }while(k>id);
177  jdbcontcol=*nactcont;
178  ikactcont[id]=jdof;
179  ilactcont[id]=*nactcont;
180 // memset(&dbcont[(*nactcont-1)**nev],0,sizeof(double)**nev);
181  DMEMSET(dbcont,(*nactcont-1)**nev,*nactcont**nev,0.);
182  break;
183  }while(1);
184  bcont[jdof]+=coefmpc[index1]*fnl[j*3+j1]/coefmpc[ist1];
185  i4=(jdbcontcol-1)**nev;
186  i3=(3*j+j1);
187  for(k=0; k<*nope; k++){
188  for(k1=0; k1<3; k1++){
189  sl=s[(3*k+k1)*100+i3];
190  kdof=nactdof[mt*(konl[k]-1)+k1+1];
191  if(kdof!=0){
192  d1=sl*coefmpc[index1]/coefmpc[ist1];
193  if(!(*cyclicsymmetry)){
194  for(l=0; l<*nev; l++){
195  dbcont[i4+l]+=d1*z[(long long)l**neq+kdof-1];
196  }
197  }else{
198  kdofm1=kdof-1;
199  FORTRAN(nident,(izdof,&kdofm1,nzdof,&id));
200  if(id!=0){
201  if(izdof[id-1]==kdofm1){
202  for(l=0; l<*nev; l++){
203  dbcont[i4+l]+=d1*z[l**nzdof+id-1];
204  }
205  }else{printf("*ERROR in dfdbj\n");FORTRAN(stop,());}
206  }else{printf("*ERROR in dfdbj\n");FORTRAN(stop,());}
207  }
208  }
209  else{
210  kdof=8*(konl[k]-1)+k1+1;
211  FORTRAN(nident,(ikmpc,&kdof,nmpc,&id2));
212  if(id2>0){
213  id2--;
214  if(ikmpc[id2]==kdof){
215  id2=ilmpc[id2];
216  ist2=ipompc[id2-1];
217  ist2--;
218  index2=nodempc[ist2*3+2];
219  if(index2==0) continue;
220  index2--;
221  do{
222  kdof=nactdof[mt*(nodempc[index2*3]-1)+nodempc[index2*3+1]];
223  if(kdof!=0){
224  d1=sl*coefmpc[index1]*coefmpc[index2]/(coefmpc[ist1]*coefmpc[ist2]);
225  if(!(*cyclicsymmetry)){
226  for(l=0; l<*nev; l++){
227  dbcont[i4+l]-=d1*z[(long long)l**neq+kdof-1];
228  }
229  }else{
230  kdofm1=kdof-1;
231  FORTRAN(nident,(izdof,&kdofm1,nzdof,&id));
232  if(id!=0){
233  if(izdof[id-1]==kdofm1){
234  for(l=0; l<*nev; l++){
235  dbcont[i4+l]-=d1*z[l**nzdof+id-1];
236  }
237  }else{printf("*ERROR in dfdbj\n");FORTRAN(stop,());}
238  }else{printf("*ERROR in dfdbj\n");FORTRAN(stop,());}
239  }
240  }
241  index2=nodempc[index2*3+2];
242  if(index2==0) break;
243  index2--;
244  }while(1);
245  }
246  }
247  }
248  }
249  }
250  }
251  index1=nodempc[index1*3+2];
252  if(index1==0) break;
253  index1--;
254  }while(1);
255  }
256  }
257  }
258  }
259  }
260  *dbcontp=dbcont;
261  *ikactcontp=ikactcont;
262  *ilactcontp=ilactcont;
263 }
void FORTRAN(addimdnodecload,(ITG *nodeforc, ITG *i, ITG *imdnode, ITG *nmdnode, double *xforc, ITG *ikmpc, ITG *ilmpc, ITG *ipompc, ITG *nodempc, ITG *nmpc, ITG *imddof, ITG *nmddof, ITG *nactdof, ITG *mi, ITG *imdmpc, ITG *nmdmpc, ITG *imdboun, ITG *nmdboun, ITG *ikboun, ITG *nboun, ITG *ilboun, ITG *ithermal))
#define DMEMSET(a, b, c, d)
Definition: CalculiX.h:45
subroutine stop()
Definition: stop.f:19
#define RENEW(a, b, c)
Definition: CalculiX.h:40
subroutine nident(x, px, n, id)
Definition: nident.f:25
#define ITG
Definition: CalculiX.h:51
Hosted by OpenAircraft.com, (Michigan UAV, LLC)