CalculiX  2.13
A Free Software Three-Dimensional Structural Finite Element Program
filter.f File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine filter (dgdxglob, nobject, nk, nodedesi, ndesi, objectset, xo, yo, zo, x, y, z, nx, ny, nz, neighbor, r, ndesia, ndesib)
 

Function/Subroutine Documentation

◆ filter()

subroutine filter ( real*8, dimension(2,nk,nobject)  dgdxglob,
integer  nobject,
integer  nk,
integer, dimension(*)  nodedesi,
integer  ndesi,
character*81, dimension(4,*)  objectset,
real*8, dimension(ndesi)  xo,
real*8, dimension(ndesi)  yo,
real*8, dimension(ndesi)  zo,
real*8, dimension(ndesi)  x,
real*8, dimension(ndesi)  y,
real*8, dimension(ndesi)  z,
integer, dimension(ndesi)  nx,
integer, dimension(ndesi)  ny,
integer, dimension(ndesi)  nz,
integer, dimension(ndesi+6)  neighbor,
real*8, dimension(ndesi+6)  r,
integer  ndesia,
integer  ndesib 
)
22 !
23 ! Filtering of sensitivities
24 !
25  implicit none
26 !
27  character*81 objectset(4,*)
28 
29  integer nobject,nk,nodedesi(*),nnodesinside,i,
30  & ndesi,j,m,neighbor(ndesi+6),nx(ndesi),
31  & ny(ndesi),nz(ndesi),istat,ndesia,ndesib
32 !
33  real*8 dgdxglob(2,nk,nobject),xo(ndesi),yo(ndesi),zo(ndesi),
34  & x(ndesi),y(ndesi),z(ndesi),filterrad,r(ndesi+6),
35  & filterval(ndesi),nominator,denominator
36 !
37 ! Calculate filtered sensitivities
38 !
39 ! Assign filter radius (taken from first defined object function)
40 !
41  read(objectset(2,1)(21:40),'(f20.0)',iostat=istat) filterrad
42 !
43  do j=ndesia,ndesib
44 !
45  call near3d_se(xo,yo,zo,x,y,z,nx,ny,nz,xo(j),yo(j),zo(j),
46  & ndesi,neighbor,r,nnodesinside,filterrad)
47 !
48 ! Calculate function value of the filterfunction (linear)
49 !
50  if(objectset(2,1)(1:6).eq.'LINEAR') then
51  do i=1,nnodesinside
52  filterval(i)=filterrad-dsqrt(r(i))
53  enddo
54 !
55 ! Calculate function value of the filterfunction (gauss)
56 !
57  elseif(objectset(2,1)(1:5).eq.'GAUSS') then
58  do i=1,nnodesinside
59  filterval(i)=dexp(-(2*r(i)/filterrad**2))
60  enddo
61 !
62 ! Calculate function value of the filterfunction (cubic)
63 !
64  elseif(objectset(2,1)(1:5).eq.'CUBIC') then
65  do i=1,nnodesinside
66  filterval(i)=filterrad-(1/filterrad**2)*dsqrt(r(i))**3
67  enddo
68  endif
69 !
70 ! Calculate filtered sensitivity
71 
72  do m=1,nobject
73  if(objectset(1,m)(1:9).eq.'THICKNESS') cycle
74  nominator=0.d0
75  denominator=0.d0
76  do i=1,nnodesinside
77  nominator=nominator+filterval(i)*
78  & dgdxglob(1,nodedesi(neighbor(i)),m)
79  denominator=denominator+filterval(i)
80  enddo
81  dgdxglob(2,nodedesi(j),m)=nominator/denominator
82  enddo
83  enddo
84 !
85  return
subroutine near3d_se(xo, yo, zo, x, y, z, nx, ny, nz, xp, yp, zp, n, ir, r, nr, radius)
Definition: near3d_se.f:21
Hosted by OpenAircraft.com, (Michigan UAV, LLC)