FrontISTR  6.0.0
Large-scale structural analysis program with finit element method
heat_mat_ass_bc_FILM.f90
Go to the documentation of this file.
1 !-------------------------------------------------------------------------------
2 ! Copyright (c) 2019 FrontISTR Commons
3 ! This software is released under the MIT License, see LICENSE.txt
4 !-------------------------------------------------------------------------------
8 contains
9  !C
10  !C***
11  !C*** MAT_ASS_FILM
12  !C***
13  !C
14  subroutine heat_mat_ass_bc_film( hecMESH, hecMAT, fstrSOLID, fstrHEAT, CTIME )
15 
16  use m_fstr
18  use m_heat_lib_film
19 
20  implicit none
21  integer(kind=kint) :: k, icel, isuf, iam1, iam2, ic_type, isect, nn, is, j, mm, m, ic, ip
22  integer(kind=kint) :: inod, jp, jnod, isU, ieU, ik, isL, ieL
23  real(kind=kreal) :: ctime, qq, hh, sink, thick
24  type(fstr_solid) :: fstrsolid
25  type(fstr_heat) :: fstrHEAT
26  type(hecmwst_matrix) :: hecMAT
27  type(hecmwst_local_mesh) :: hecMESH
28 
29  real(kind=kreal) :: xx(20), yy(20), zz(20)
30  real(kind=kreal) :: term1(64), term2(20), stiff(8,8)
31  integer(kind=kint) :: nodLocal(20), nsuf(8), nodSurf(8)
32 
33 !C
34  !$omp parallel default(none), &
35  !$omp& private(k,icel,isuf,iam1,iam2,QQ,HH,SINK,ic_type,isect,nn,is,j,nodLocal, &
36  !$omp& xx,yy,zz,thick,mm,term1,term2,stiff,nsuf,nodSurf,ip,inod,jnod,ic,isU,ieU,ik,jp,isL,ieL), &
37  !$omp& shared(fstrSOLID,fstrHEAT,CTIME,hecMAT,hecMESH)
38  !$omp do
39  do k = 1, fstrheat%H_SUF_tot
40  icel = fstrheat%H_SUF_elem(k)
41  if( fstrsolid%elements(icel)%elemact_flag == kelact_inactive ) cycle
42 
43  isuf = fstrheat%H_SUF_surf(k)
44  iam1 = fstrheat%H_SUF_ampl(k,1)
45  iam2 = fstrheat%H_SUF_ampl(k,2)
46  call heat_get_amplitude ( fstrheat, iam1, ctime, qq )
47  hh = fstrheat%H_SUF_val (k,1) * qq
48  if( dabs(hh) < 1.d-16 ) cycle
49  call heat_get_amplitude ( fstrheat, iam2, ctime, qq )
50  sink = fstrheat%H_SUF_val (k,2) * qq
51  ic_type = hecmesh%elem_type(icel)
52  if( ic_type == 761 ) ic_type = 731
53  if( ic_type == 781 ) ic_type = 741
54  isect = hecmesh%section_ID(icel)
55  !C**
56  nn = hecmw_get_max_node(ic_type)
57  !C**
58  is = hecmesh%elem_node_index(icel-1)
59  do j = 1, nn
60  nodlocal(j) = hecmesh%elem_node_item(is+j)
61  xx(j) = hecmesh%node( 3*nodlocal(j)-2 )
62  yy(j) = hecmesh%node( 3*nodlocal(j)-1 )
63  zz(j) = hecmesh%node( 3*nodlocal(j) )
64  enddo
65  !C**
66  if ( ic_type.eq.231 ) then
67  is = hecmesh%section%sect_R_index(isect)
68  thick = hecmesh%section%sect_R_item(is)
69  mm = 2
70  call heat_film_231(nn,xx,yy,thick,isuf,hh,sink,mm,term1,term2,nsuf)
71  elseif( ic_type.eq.232 ) then
72  is = hecmesh%section%sect_R_index(isect)
73  thick = hecmesh%section%sect_R_item(is)
74  mm = 3
75  call heat_film_232(nn,xx,yy,thick,isuf,hh,sink,mm,term1,term2,nsuf)
76  elseif( ic_type.eq.241 ) then
77  is = hecmesh%section%sect_R_index(isect)
78  thick = hecmesh%section%sect_R_item(is)
79  mm = 2
80  call heat_film_241(nn,xx,yy,thick,isuf,hh,sink,mm,term1,term2,nsuf)
81  elseif( ic_type.eq.242 ) then
82  is = hecmesh%section%sect_R_index(isect)
83  thick = hecmesh%section%sect_R_item(is)
84  mm = 3
85  call heat_film_242(nn,xx,yy,thick,isuf,hh,sink,mm,term1,term2,nsuf)
86  elseif( ic_type.eq.341 ) then
87  mm = 3
88  call heat_film_341(nn,xx,yy,zz,isuf,hh,sink,mm,term1,term2,nsuf)
89  elseif( ic_type.eq.342 ) then
90  mm = 6
91  call heat_film_342(nn,xx,yy,zz,isuf,hh,sink,mm,term1,term2,nsuf)
92  elseif( ic_type.eq.351 ) then
93  mm = 4
94  if( isuf.eq.1 .or. isuf.eq.2 ) mm = 3
95  call heat_film_351(nn,xx,yy,zz,isuf,hh,sink,mm,term1,term2,nsuf)
96  elseif( ic_type.eq.352 ) then
97  mm = 8
98  if( isuf.eq.1 .or. isuf.eq.2 ) mm = 6
99  call heat_film_352(nn,xx,yy,zz,isuf,hh,sink,mm,term1,term2,nsuf)
100  elseif( ic_type.eq.361 ) then
101  mm = 4
102  call heat_film_361(nn,xx,yy,zz,isuf,hh,sink,mm,term1,term2,nsuf)
103  elseif( ic_type.eq.362 ) then
104  mm = 8
105  call heat_film_362(nn,xx,yy,zz,isuf,hh,sink,mm,term1,term2,nsuf)
106  elseif( ic_type.eq.731 ) then
107  mm = 3
108  call heat_film_731(nn,xx,yy,zz,hh,sink,term1,term2)
109  do m = 1, mm
110  nsuf(m) = m
111  enddo
112 
113  elseif( ic_type.eq.741 ) then
114  mm = 4
115  call heat_film_741(nn,xx,yy,zz,hh,sink,term1,term2)
116  do m = 1, mm
117  nsuf(m) = m
118  enddo
119 
120  endif
121  !C
122 
123  do ip = 1, mm
124  nodsurf(ip) = nodlocal(nsuf(ip))
125  end do
126 
127  ic = 0
128  stiff = 0.d0
129  do ip = 1, mm
130  do jp = 1, mm
131  ic = ic + 1
132  stiff(ip,jp) = -term1(ic)
133  enddo
134  enddo
135 
136  call hecmw_mat_ass_elem(hecmat, mm, nodsurf, stiff)
137 
138  do ip = 1, mm
139  !$omp atomic
140  hecmat%B(nodsurf(ip)) = hecmat%B(nodsurf(ip)) - term2(ip)
141  end do
142 
143  !C
144  !C
145  enddo
146  !$omp end do
147  !$omp end parallel
148 
149  end subroutine heat_mat_ass_bc_film
150 end module m_heat_mat_ass_bc_film
This module defines common data and basic structures for analysis.
Definition: m_fstr.F90:15
This module provide a function to get amplitude definition.
subroutine heat_get_amplitude(fstrHEAT, id, TT, QQ, OutOfRange)
This module provides subroutines to generate heat transfer boundary.
subroutine heat_film_342(NN, XX, YY, ZZ, LTYPE, HH, SINK, MM, TERM1, TERM2, NOD)
subroutine heat_film_352(NN, XX, YY, ZZ, LTYPE, HH, SINK, MM, TERM1, TERM2, NOD)
subroutine heat_film_232(NN, XX, YY, THICK, LTYPE, HH, SINK, MM, TERM1, TERM2, NOD)
subroutine heat_film_341(NN, XX, YY, ZZ, LTYPE, HH, SINK, MM, TERM1, TERM2, NOD)
subroutine heat_film_731(NN, XX, YY, ZZ, HH, SINK, TERM1, TERM2)
subroutine heat_film_351(NN, XX, YY, ZZ, LTYPE, HH, SINK, MM, TERM1, TERM2, NOD)
subroutine heat_film_741(NN, XX, YY, ZZ, HH, SINK, TERM1, TERM2)
subroutine heat_film_242(NN, XX, YY, THICK, LTYPE, HH, SINK, MM, TERM1, TERM2, NOD)
subroutine heat_film_241(NN, XX, YY, THICK, LTYPE, HH, SINK, MM, TERM1, TERM2, NOD)
subroutine heat_film_231(NN, XX, YY, THICK, LTYPE, HH, SINK, MM, TERM1, TERM2, NOD)
subroutine heat_film_362(NN, XX, YY, ZZ, LTYPE, HH, SINK, MM, TERM1, TERM2, NOD)
subroutine heat_film_361(NN, XX, YY, ZZ, LTYPE, HH, SINK, MM, TERM1, TERM2, NOD)
This module provides a subroutine for setting heat transfer boundary conditions.
subroutine heat_mat_ass_bc_film(hecMESH, hecMAT, fstrSOLID, fstrHEAT, CTIME)
Data for HEAT ANSLYSIS (fstrHEAT)
Definition: m_fstr.F90:440