xref: /phasta/phSolver/common/gendat.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine gendat (y,       ac,       x,      iBC,     BC,
2*59599516SKenneth E. Jansen     &                     iper,    ilwork,
3*59599516SKenneth E. Jansen     &                     shp,     shgl,    shpb,    shglb,
4*59599516SKenneth E. Jansen     &                     ifath,   velbar,   nsons )
5*59599516SKenneth E. Jansenc
6*59599516SKenneth E. Jansenc----------------------------------------------------------------------
7*59599516SKenneth E. Jansenc
8*59599516SKenneth E. Jansenc This routine inputs the geometry and the boundary conditions.
9*59599516SKenneth E. Jansenc
10*59599516SKenneth E. Jansenc
11*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
12*59599516SKenneth E. Jansenc----------------------------------------------------------------------
13*59599516SKenneth E. Jansenc
14*59599516SKenneth E. Jansen
15*59599516SKenneth E. Jansen        use readarrays          ! used to acess nBC
16*59599516SKenneth E. Jansen        use dtnmod
17*59599516SKenneth E. Jansen        use pointer_data
18*59599516SKenneth E. Jansen        include "common.h"
19*59599516SKenneth E. Jansen        include "mpif.h"
20*59599516SKenneth E. Jansen
21*59599516SKenneth E. Jansenc
22*59599516SKenneth E. Jansenc arrays in the following line are now dimensioned in readnblk
23*59599516SKenneth E. Jansenc        dimension nBC(nshg)
24*59599516SKenneth E. Jansenc
25*59599516SKenneth E. Jansen        dimension y(nshg,ndof),      ac(nshg,ndof),
26*59599516SKenneth E. Jansen     &            x(numnp,nsd),      iBC(nshg),
27*59599516SKenneth E. Jansen     &            BC(nshg,ndofBC),
28*59599516SKenneth E. Jansen     &            nodflx(numflx),    ilwork(nlwork),
29*59599516SKenneth E. Jansen     &            iper(nshg)
30*59599516SKenneth E. Jansenc
31*59599516SKenneth E. Jansenc.... shape function declarations
32*59599516SKenneth E. Jansenc
33*59599516SKenneth E. Jansen        dimension shp(MAXTOP,maxsh,MAXQPT),
34*59599516SKenneth E. Jansen     &            shgl(MAXTOP,nsd,maxsh,MAXQPT),
35*59599516SKenneth E. Jansen     &            shpb(MAXTOP,maxsh,MAXQPT),
36*59599516SKenneth E. Jansen     &            shglb(MAXTOP,nsd,maxsh,MAXQPT)
37*59599516SKenneth E. Jansenc
38*59599516SKenneth E. Jansenc  stuff for dynamic model s.w.avg and wall model
39*59599516SKenneth E. Jansenc
40*59599516SKenneth E. Jansen        dimension ifath(numnp),    velbar(nfath,nflow), nsons(nfath)
41*59599516SKenneth E. Jansenc
42*59599516SKenneth E. Jansenc.... start the timer
43*59599516SKenneth E. Jansenc
44*59599516SKenneth E. Jansen
45*59599516SKenneth E. JansenCAD        call timer ('PrProces')
46*59599516SKenneth E. Jansen
47*59599516SKenneth E. Jansenc
48*59599516SKenneth E. Jansenc  put a barrier here so that all of the files are done reading
49*59599516SKenneth E. Jansenc  This SHOULD shield any mpi_profile information from io bottlenecks
50*59599516SKenneth E. Jansenc
51*59599516SKenneth E. Jansen        call MPI_BARRIER (MPI_COMM_WORLD,ierr)
52*59599516SKenneth E. Jansen
53*59599516SKenneth E. Jansenc
54*59599516SKenneth E. Jansenc.... ---------------------------->  Nodes  <--------------------------
55*59599516SKenneth E. Jansenc
56*59599516SKenneth E. Jansenc.... compute length scales
57*59599516SKenneth E. Jansenc
58*59599516SKenneth E. Jansen        call xyzbound(x)
59*59599516SKenneth E. Jansenc
60*59599516SKenneth E. Jansenc.... echo the coordinates
61*59599516SKenneth E. Jansenc
62*59599516SKenneth E. Jansen        if ((necho .lt. 2).and.(myrank.eq.master)) then
63*59599516SKenneth E. Jansen          do n = 1, numnp
64*59599516SKenneth E. Jansen            if (mod(n,50) .eq. 1) write (iecho,1000) ititle,(i,i=1,nsd)
65*59599516SKenneth E. Jansen            write (iecho,1100) n, (x(n,i),i=1,nsd)
66*59599516SKenneth E. Jansen          enddo
67*59599516SKenneth E. Jansen        endif
68*59599516SKenneth E. Jansenc
69*59599516SKenneth E. Jansenc.... prepare periodic boundary conditions
70*59599516SKenneth E. Jansenc
71*59599516SKenneth E. Jansen        do i = 1,nshg
72*59599516SKenneth E. Jansen          if (iper(i) .ne. 0) then
73*59599516SKenneth E. Jansen            nshg0 = nshg0 - 1
74*59599516SKenneth E. Jansen          else
75*59599516SKenneth E. Jansen            iper(i) = i
76*59599516SKenneth E. Jansen          endif
77*59599516SKenneth E. Jansen        enddo
78*59599516SKenneth E. Jansenc
79*59599516SKenneth E. Jansenc.... ---------------------->  Interior Elements  <--------------------
80*59599516SKenneth E. Jansenc
81*59599516SKenneth E. Jansen        ibound = 0
82*59599516SKenneth E. Jansenc
83*59599516SKenneth E. Jansenc.... generate the interior nodal mapping
84*59599516SKenneth E. Jansenc
85*59599516SKenneth E. Jansen        call genshp ( shp, shgl, nshape, nelblk)
86*59599516SKenneth E. Jansenc
87*59599516SKenneth E. Jansenc.... --------------------->  Boundary Conditions  <-------------------
88*59599516SKenneth E. Jansenc
89*59599516SKenneth E. Jansenc.... read and generate the boundary condition codes (iBC array)
90*59599516SKenneth E. Jansenc
91*59599516SKenneth E. Jansen        call geniBC (iBC)
92*59599516SKenneth E. Jansenc
93*59599516SKenneth E. Jansenc.... read and generate the essential boundary conditions (BC array)
94*59599516SKenneth E. Jansenc
95*59599516SKenneth E. Jansen        call genBC  (iBC,   BC,   point2x,
96*59599516SKenneth E. Jansen     &               point2ilwork, point2iper)
97*59599516SKenneth E. Jansen        deallocate(nBC)
98*59599516SKenneth E. Jansenc
99*59599516SKenneth E. Jansenc.... ---------------------->  Boundary Elements  <--------------------
100*59599516SKenneth E. Jansenc
101*59599516SKenneth E. Jansen        ibound = 1
102*59599516SKenneth E. Jansen        call gtnods
103*59599516SKenneth E. Jansenc
104*59599516SKenneth E. Jansenc  We now take care of Direchlet to Neumann BC's.  It had to move here
105*59599516SKenneth E. Jansenc  so that the IBC array was of size nshg and ready to be marked.
106*59599516SKenneth E. Jansenc
107*59599516SKenneth E. Jansen
108*59599516SKenneth E. Jansen        if(nsclr.gt.0) then
109*59599516SKenneth E. Jansen           call initDtN         ! Dirichlet to Neumann module:
110*59599516SKenneth E. Jansen                                     ! initialize this once only
111*59599516SKenneth E. Jansen           do iblk = 1, nelblb  ! number of blocks
112*59599516SKenneth E. Jansen              iel    = lcblkb(1,iblk)
113*59599516SKenneth E. Jansen              npro   = lcblkb(1,iblk+1) - iel
114*59599516SKenneth E. Jansenc
115*59599516SKenneth E. Jansenc  for the DtN BC we need to mark all of the nodes that are involved.
116*59599516SKenneth E. Jansenc
117*59599516SKenneth E. Jansen              do i=1,npro
118*59599516SKenneth E. Jansenc
119*59599516SKenneth E. Jansenc if this element has the BCB AND it has not been found yet then mark it
120*59599516SKenneth E. Jansenc
121*59599516SKenneth E. Jansen                 if(miBCB(iblk)%p(i,2).lt.0) then
122*59599516SKenneth E. Jansen                    idtn = 1    !set the flag for dtn bc's
123*59599516SKenneth E. Jansen                    do j=1,nshapeb
124*59599516SKenneth E. Jansen                       do isclr=1,nsclr
125*59599516SKenneth E. Jansen                          ignd=mienb(iblk)%p(i,j)
126*59599516SKenneth E. Jansen                             ifeature(ignd) = abs(miBCB(iblk)%p(i,2))
127*59599516SKenneth E. Jansen                             iBC(ignd)=ior(iBC(ignd),2**13)
128*59599516SKenneth E. Jansen                                ! must mark this as a Neumann BC now
129*59599516SKenneth E. Jansen                             miBCB(iblk)%p(i,1)=
130*59599516SKenneth E. Jansen     &                       ior(miBCB(iblk)%p(i,1),2**(4+isclr))
131*59599516SKenneth E. Jansen                       end do
132*59599516SKenneth E. Jansen                    end do
133*59599516SKenneth E. Jansen                 endif
134*59599516SKenneth E. Jansen              end do
135*59599516SKenneth E. Jansen           end do
136*59599516SKenneth E. Jansen        endif
137*59599516SKenneth E. Jansenc
138*59599516SKenneth E. Jansenc.... generate the boundary element shape functions
139*59599516SKenneth E. Jansenc
140*59599516SKenneth E. Jansen        call genshpb ( shpb, shglb, nshapeb, nelblb)
141*59599516SKenneth E. Jansenc.... Evaluate the shape funcs. and their gradients at the desired quadrature
142*59599516SKenneth E. Jansenc.... for filtering. Save these evaluations using a module
143*59599516SKenneth E. Jansenc
144*59599516SKenneth E. Jansenc KEJ moved them to this point because cdelsq now passed with module
145*59599516SKenneth E. Jansenc     and it is read in with velb.<stepnum>.<proc#> now
146*59599516SKenneth E. Jansenc
147*59599516SKenneth E. Jansen        if (iLES .gt. 0) then
148*59599516SKenneth E. Jansen
149*59599516SKenneth E. Jansen           call setfilt         ! For setting quad. rule to use for integrating
150*59599516SKenneth E. Jansen           call filtprep        ! the hat filter.
151*59599516SKenneth E. Jansen           if(iLES/10 .eq. 2) then
152*59599516SKenneth E. Jansen              call setave       ! For averaging cdelsq computed at quad pts
153*59599516SKenneth E. Jansen              call aveprep(shp,x)
154*59599516SKenneth E. Jansen           endif
155*59599516SKenneth E. Jansen        endif
156*59599516SKenneth E. Jansenc
157*59599516SKenneth E. Jansenc User sets request pzero in solver.inp now
158*59599516SKenneth E. Jansenc
159*59599516SKenneth E. Jansenc        call genpzero(iBC,iper)
160*59599516SKenneth E. Jansenc
161*59599516SKenneth E. Jansen      if((myrank.eq.master).and.(irscale.ge.0)) then
162*59599516SKenneth E. Jansen         call setSPEBC(numnp,nsd)
163*59599516SKenneth E. Jansen	 call eqn_plane(point2x, iBC)
164*59599516SKenneth E. Jansen      endif
165*59599516SKenneth E. Jansenc
166*59599516SKenneth E. Jansenc.... --------------------->  Initial Conditions  <--------------------
167*59599516SKenneth E. Jansenc
168*59599516SKenneth E. Jansenc.... generate the initial conditions and initialize time varying BC
169*59599516SKenneth E. Jansenc
170*59599516SKenneth E. Jansen        call genini (iBC,      BC,         y,
171*59599516SKenneth E. Jansen     &               ac,       iper,
172*59599516SKenneth E. Jansen     &               ilwork,   ifath,      velbar,
173*59599516SKenneth E. Jansen     &               nsons,    x,
174*59599516SKenneth E. Jansen     &               shp,     shgl,    shpb,    shglb)
175*59599516SKenneth E. Jansenc
176*59599516SKenneth E. Jansenc.... close the geometry, boundary condition and material files
177*59599516SKenneth E. Jansenc
178*59599516SKenneth E. Jansen!MR CHANGE
179*59599516SKenneth E. Jansen!        close (igeom)
180*59599516SKenneth E. Jansen!MR CHANGE END
181*59599516SKenneth E. Jansen        close (ibndc)
182*59599516SKenneth E. Jansen        if (mexist) close (imat)
183*59599516SKenneth E. Jansenc
184*59599516SKenneth E. Jansenc.... return
185*59599516SKenneth E. Jansenc
186*59599516SKenneth E. JansenCAD        call timer ('Back    ')
187*59599516SKenneth E. Jansen        return
188*59599516SKenneth E. Jansenc
189*59599516SKenneth E. Jansenc.... end of file error handling
190*59599516SKenneth E. Jansenc
191*59599516SKenneth E. Jansen999     call error ('gendat  ','end file',igeom)
192*59599516SKenneth E. Jansenc
193*59599516SKenneth E. Jansen1000    format(a80,//,
194*59599516SKenneth E. Jansen     &  ' N o d a l   C o o r d i n a t e s                  ',//,
195*59599516SKenneth E. Jansen     &  '    Node     ',12x,3('x',i1,:,17x))
196*59599516SKenneth E. Jansen1100    format(1p,2x,i5,13x,3(1e12.5,7x))
197*59599516SKenneth E. Jansen2000    format(a80,//,
198*59599516SKenneth E. Jansen     &  ' B o u n d a r y   F l u x   N o d e s              '//,
199*59599516SKenneth E. Jansen     &  '   index          Node          ')
200*59599516SKenneth E. Jansen2100    format(1x,i5,5x,i10)
201*59599516SKenneth E. Jansenc
202*59599516SKenneth E. Jansen        end
203*59599516SKenneth E. Jansen
204*59599516SKenneth E. Jansen
205*59599516SKenneth E. Jansen        subroutine xyzbound(x)
206*59599516SKenneth E. Jansen
207*59599516SKenneth E. Jansen        include "common.h"
208*59599516SKenneth E. Jansen        include "mpif.h"
209*59599516SKenneth E. Jansen        include "auxmpi.h"
210*59599516SKenneth E. Jansen
211*59599516SKenneth E. Jansen        dimension x(numnp,3)
212*59599516SKenneth E. Jansen
213*59599516SKenneth E. Jansen        real*8   Forout(3), Forin(3)
214*59599516SKenneth E. Jansen
215*59599516SKenneth E. Jansen        xlngth=maxval(x(:,1))
216*59599516SKenneth E. Jansen        ylngth=maxval(x(:,2))
217*59599516SKenneth E. Jansen        zlngth=maxval(x(:,3))
218*59599516SKenneth E. Jansen        if(numpe. gt. 1) then
219*59599516SKenneth E. Jansen           Forin=(/xlngth,ylngth,zlngth/)
220*59599516SKenneth E. Jansen           call MPI_ALLREDUCE (Forin, Forout, 3,
221*59599516SKenneth E. Jansen     &       MPI_DOUBLE_PRECISION,MPI_MAX, MPI_COMM_WORLD,ierr)
222*59599516SKenneth E. Jansen           xmax = Forout(1)
223*59599516SKenneth E. Jansen           ymax = Forout(2)
224*59599516SKenneth E. Jansen           zmax = Forout(3)
225*59599516SKenneth E. Jansen        else
226*59599516SKenneth E. Jansen           xmax = xlngth
227*59599516SKenneth E. Jansen           ymax = ylngth
228*59599516SKenneth E. Jansen           zmax = zlngth
229*59599516SKenneth E. Jansen        endif
230*59599516SKenneth E. Jansen        xlngth=minval(x(:,1))
231*59599516SKenneth E. Jansen        ylngth=minval(x(:,2))
232*59599516SKenneth E. Jansen        zlngth=minval(x(:,3))
233*59599516SKenneth E. Jansen        if(numpe .gt. 1) then
234*59599516SKenneth E. Jansen           Forin=(/xlngth,ylngth,zlngth/)
235*59599516SKenneth E. Jansen           call MPI_ALLREDUCE (Forin, Forout, 3,
236*59599516SKenneth E. Jansen     &       MPI_DOUBLE_PRECISION,MPI_MIN, MPI_COMM_WORLD,ierr)
237*59599516SKenneth E. Jansen        else
238*59599516SKenneth E. Jansen           Forout(1) = xlngth
239*59599516SKenneth E. Jansen           Forout(2) = ylngth
240*59599516SKenneth E. Jansen           Forout(3) = zlngth
241*59599516SKenneth E. Jansen        endif
242*59599516SKenneth E. Jansen
243*59599516SKenneth E. Jansen        xlngth = xmax-Forout(1)
244*59599516SKenneth E. Jansen        ylngth = ymax-Forout(2)
245*59599516SKenneth E. Jansen        zlngth = zmax-Forout(3)
246*59599516SKenneth E. Jansen
247*59599516SKenneth E. Jansen        if(myrank.eq.master) then
248*59599516SKenneth E. Jansen           print 108,  xlngth,ylngth,zlngth
249*59599516SKenneth E. Jansen        endif
250*59599516SKenneth E. Jansen 108    format(' Domain size (x,y,z):',2x,3f15.10)
251*59599516SKenneth E. Jansen        return
252*59599516SKenneth E. Jansen        end
253