SPEED
MAKE_INTERNAL_FORCE.f90
Go to the documentation of this file.
1! Copyright (C) 2012 The SPEED FOUNDATION
2! Author: Ilario Mazzieri
3!
4! This file is part of SPEED.
5!
6! SPEED is free software; you can redistribute it and/or modify it
7! under the terms of the GNU Affero General Public License as
8! published by the Free Software Foundation, either version 3 of the
9! License, or (at your option) any later version.
10!
11! SPEED is distributed in the hope that it will be useful, but
12! WITHOUT ANY WARRANTY; without even the implied warranty of
13! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14! Affero General Public License for more details.
15!
16! You should have received a copy of the GNU Affero General Public License
17! along with SPEED. If not, see <http://wqw.gnu.org/licenses/>.
18
60
61 subroutine make_internal_force(nn,xq,wq,dd,&
62 AA11,AA12,AA13,AA21,AA22,AA23,&
63 AA31,AA32,AA33,BB11,BB12,BB13,&
64 BB21,BB22,BB23,BB31,BB32,BB33,&
65 GG1,GG2,GG3,DD1,DD2,DD3,&
66 sxx,syy,szz,syz,szx,sxy,fx,fy,fz)
67
68 implicit none
69
70 integer*4 :: nn
71 integer*4 :: i,j,k,p,q,r
72
73 real*8 :: aa11,aa12,aa13,aa21,aa22,aa23,aa31,aa32,aa33
74 real*8 :: bb11,bb12,bb13,bb21,bb22,bb23,bb31,bb32,bb33
75 real*8 :: gg1,gg2,gg3,dd1,dd2,dd3
76 real*8 :: dxdx,dxdy,dxdz,dydx,dydy,dydz,dzdx,dzdy,dzdz,det_j
77 real*8 :: duxdx,duxdy,duxdz,duydx,duydy,duydz,duzdx,duzdy,duzdz
78 real*8 :: t1ux,t2ux,t3ux,t1uy,t2uy,t3uy,t1uz,t2uz,t3uz
79
80 real*8, dimension(nn) :: xq,wq
81
82 real*8, dimension(nn,nn) :: dd
83
84 real*8, dimension(nn,nn,nn) :: sxx,syy,szz,syz,szx,sxy
85 real*8, dimension(nn,nn,nn) :: fx,fy,fz
86
87! FORCE CALCULATION
88
89 do r = 1,nn
90 do q = 1,nn
91 do p = 1,nn
92 t1ux = 0.d0; t1uy = 0.d0; t1uz = 0.d0
93 t2ux = 0.d0; t2uy = 0.d0; t2uz = 0.d0
94 t3ux = 0.d0; t3uy = 0.d0; t3uz = 0.d0
95
96 do i = 1,nn
97 dxdy = aa12 + bb11*xq(r) + bb13*xq(i) + gg1*xq(r)*xq(i)
98 dydy = aa22 + bb21*xq(r) + bb23*xq(i) + gg2*xq(r)*xq(i)
99 dzdy = aa32 + bb31*xq(r) + bb33*xq(i) + gg3*xq(r)*xq(i)
100
101 dxdz = aa13 + bb11*xq(q) + bb12*xq(i) + gg1*xq(i)*xq(q)
102 dydz = aa23 + bb21*xq(q) + bb22*xq(i) + gg2*xq(i)*xq(q)
103 dzdz = aa33 + bb31*xq(q) + bb32*xq(i) + gg3*xq(i)*xq(q)
104
105 t1ux = t1ux + wq(i)*wq(q)*wq(r) * dd(i,p) * &
106 ((dydy*dzdz - dydz*dzdy) * sxx(i,q,r) + &
107 (dzdy*dxdz - dzdz*dxdy) * sxy(i,q,r) + &
108 (dxdy*dydz - dxdz*dydy) * szx(i,q,r))
109 t1uy = t1uy + wq(i)*wq(q)*wq(r) * dd(i,p) * &
110 ((dydy*dzdz - dydz*dzdy) * sxy(i,q,r) + &
111 (dzdy*dxdz - dzdz*dxdy) * syy(i,q,r) + &
112 (dxdy*dydz - dxdz*dydy) * syz(i,q,r))
113 t1uz = t1uz + wq(i)*wq(q)*wq(r) * dd(i,p) * &
114 ((dydy*dzdz - dydz*dzdy) * szx(i,q,r) + &
115 (dzdy*dxdz - dzdz*dxdy) * syz(i,q,r) + &
116 (dxdy*dydz - dxdz*dydy) * szz(i,q,r))
117 enddo
118
119 do j = 1,nn
120 dxdx = aa11 + bb12*xq(r) + bb13*xq(j) + gg1*xq(j)*xq(r)
121 dydx = aa21 + bb22*xq(r) + bb23*xq(j) + gg2*xq(j)*xq(r)
122 dzdx = aa31 + bb32*xq(r) + bb33*xq(j) + gg3*xq(j)*xq(r)
123
124 dxdz = aa13 + bb11*xq(j) + bb12*xq(p) + gg1*xq(p)*xq(j)
125 dydz = aa23 + bb21*xq(j) + bb22*xq(p) + gg2*xq(p)*xq(j)
126 dzdz = aa33 + bb31*xq(j) + bb32*xq(p) + gg3*xq(p)*xq(j)
127
128 t2ux = t2ux + wq(p)*wq(j)*wq(r) * dd(j,q) * &
129 ((dydz*dzdx - dydx*dzdz) * sxx(p,j,r) + &
130 (dzdz*dxdx - dzdx*dxdz) * sxy(p,j,r) + &
131 (dxdz*dydx - dxdx*dydz) * szx(p,j,r))
132 t2uy = t2uy + wq(p)*wq(j)*wq(r) * dd(j,q) * &
133 ((dydz*dzdx - dydx*dzdz) * sxy(p,j,r) + &
134 (dzdz*dxdx - dzdx*dxdz) * syy(p,j,r) + &
135 (dxdz*dydx - dxdx*dydz) * syz(p,j,r))
136 t2uz = t2uz + wq(p)*wq(j)*wq(r) * dd(j,q) * &
137 ((dydz*dzdx - dydx*dzdz) * szx(p,j,r) + &
138 (dzdz*dxdx - dzdx*dxdz) * syz(p,j,r) + &
139 (dxdz*dydx - dxdx*dydz) * szz(p,j,r))
140 enddo
141
142 do k = 1,nn
143 dxdx = aa11 + bb12*xq(k) + bb13*xq(q) + gg1*xq(q)*xq(k)
144 dydx = aa21 + bb22*xq(k) + bb23*xq(q) + gg2*xq(q)*xq(k)
145 dzdx = aa31 + bb32*xq(k) + bb33*xq(q) + gg3*xq(q)*xq(k)
146
147 dxdy = aa12 + bb11*xq(k) + bb13*xq(p) + gg1*xq(k)*xq(p)
148 dydy = aa22 + bb21*xq(k) + bb23*xq(p) + gg2*xq(k)*xq(p)
149 dzdy = aa32 + bb31*xq(k) + bb33*xq(p) + gg3*xq(k)*xq(p)
150
151 t3ux = t3ux + wq(p)*wq(q)*wq(k) * dd(k,r) * &
152 ((dydx*dzdy - dydy*dzdx) * sxx(p,q,k) + &
153 (dzdx*dxdy - dzdy*dxdx) * sxy(p,q,k) + &
154 (dxdx*dydy - dxdy*dydx) * szx(p,q,k))
155 t3uy = t3uy + wq(p)*wq(q)*wq(k) * dd(k,r) * &
156 ((dydx*dzdy - dydy*dzdx) * sxy(p,q,k) + &
157 (dzdx*dxdy - dzdy*dxdx) * syy(p,q,k) + &
158 (dxdx*dydy - dxdy*dydx) * syz(p,q,k))
159 t3uz = t3uz + wq(p)*wq(q)*wq(k) * dd(k,r) * &
160 ((dydx*dzdy - dydy*dzdx) * szx(p,q,k) + &
161 (dzdx*dxdy - dzdy*dxdx) * syz(p,q,k) + &
162 (dxdx*dydy - dxdy*dydx) * szz(p,q,k))
163 enddo
164
165 fx(p,q,r) = t1ux + t2ux + t3ux
166 fy(p,q,r) = t1uy + t2uy + t3uy
167 fz(p,q,r) = t1uz + t2uz + t3uz
168 enddo
169 enddo
170 enddo
171
172
173 return
174
175 end subroutine make_internal_force
176
subroutine make_internal_force(nn, xq, wq, dd, aa11, aa12, aa13, aa21, aa22, aa23, aa31, aa32, aa33, bb11, bb12, bb13, bb21, bb22, bb23, bb31, bb32, bb33, gg1, gg2, gg3, dd1, dd2, dd3, sxx, syy, szz, syz, szx, sxy, fx, fy, fz)
Makes internal forces.