xref: /phasta/phSolver/common/gendat.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
159599516SKenneth E. Jansen        subroutine gendat (y,       ac,       x,      iBC,     BC,
259599516SKenneth E. Jansen     &                     iper,    ilwork,
359599516SKenneth E. Jansen     &                     shp,     shgl,    shpb,    shglb,
459599516SKenneth E. Jansen     &                     ifath,   velbar,   nsons )
559599516SKenneth E. Jansenc
659599516SKenneth E. Jansenc----------------------------------------------------------------------
759599516SKenneth E. Jansenc
859599516SKenneth E. Jansenc This routine inputs the geometry and the boundary conditions.
959599516SKenneth E. Jansenc
1059599516SKenneth E. Jansenc
1159599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
1259599516SKenneth E. Jansenc----------------------------------------------------------------------
1359599516SKenneth E. Jansenc
1459599516SKenneth E. Jansen
1559599516SKenneth E. Jansen        use readarrays          ! used to acess nBC
1659599516SKenneth E. Jansen        use dtnmod
1759599516SKenneth E. Jansen        use pointer_data
18*513954efSKenneth E. Jansen        use wallData            ! give access to wnorm, findWallNOrm
1959599516SKenneth E. Jansen        include "common.h"
2059599516SKenneth E. Jansen        include "mpif.h"
2159599516SKenneth E. Jansen
2259599516SKenneth E. Jansenc
2359599516SKenneth E. Jansenc arrays in the following line are now dimensioned in readnblk
2459599516SKenneth E. Jansenc        dimension nBC(nshg)
2559599516SKenneth E. Jansenc
2659599516SKenneth E. Jansen        dimension y(nshg,ndof),      ac(nshg,ndof),
2759599516SKenneth E. Jansen     &            x(numnp,nsd),      iBC(nshg),
2859599516SKenneth E. Jansen     &            BC(nshg,ndofBC),
2959599516SKenneth E. Jansen     &            nodflx(numflx),    ilwork(nlwork),
3059599516SKenneth E. Jansen     &            iper(nshg)
3159599516SKenneth E. Jansenc
3259599516SKenneth E. Jansenc.... shape function declarations
3359599516SKenneth E. Jansenc
3459599516SKenneth E. Jansen        dimension shp(MAXTOP,maxsh,MAXQPT),
3559599516SKenneth E. Jansen     &            shgl(MAXTOP,nsd,maxsh,MAXQPT),
3659599516SKenneth E. Jansen     &            shpb(MAXTOP,maxsh,MAXQPT),
3759599516SKenneth E. Jansen     &            shglb(MAXTOP,nsd,maxsh,MAXQPT)
3859599516SKenneth E. Jansenc
3959599516SKenneth E. Jansenc  stuff for dynamic model s.w.avg and wall model
4059599516SKenneth E. Jansenc
4159599516SKenneth E. Jansen        dimension ifath(numnp),    velbar(nfath,nflow), nsons(nfath)
42*513954efSKenneth E. Jansen
43*513954efSKenneth E. Jansen! Hack to get suction right on part boundaries
44*513954efSKenneth E. Jansen!       dimension BC3(numnp,5)
45*513954efSKenneth E. Jansen
46*513954efSKenneth E. Jansenc... Duct
47*513954efSKenneth E. Jansen        integer iTurbWall(nshg)
48*513954efSKenneth E. Jansen        integer nTopNodes
49*513954efSKenneth E. Jansen        integer TopSurface(nshg)
50*513954efSKenneth E. Jansen
51*513954efSKenneth E. Jansenc...
52*513954efSKenneth E. Jansen
5359599516SKenneth E. Jansenc.... start the timer
5459599516SKenneth E. Jansenc
5559599516SKenneth E. Jansen
5659599516SKenneth E. JansenCAD        call timer ('PrProces')
5759599516SKenneth E. Jansen
5859599516SKenneth E. Jansenc
5959599516SKenneth E. Jansenc  put a barrier here so that all of the files are done reading
6059599516SKenneth E. Jansenc  This SHOULD shield any mpi_profile information from io bottlenecks
6159599516SKenneth E. Jansenc
6259599516SKenneth E. Jansen        call MPI_BARRIER (MPI_COMM_WORLD,ierr)
6359599516SKenneth E. Jansen
64*513954efSKenneth E. Jansenc... updated, truly useful things for Duct.........
65*513954efSKenneth E. Jansen         if(isetInitial_Duct.gt.0)then
66*513954efSKenneth E. Jansen            call setInitial_Duct(x)    ! in INIprofile.f
67*513954efSKenneth E. Jansen         endif
68*513954efSKenneth E. Jansen
6959599516SKenneth E. Jansenc
7059599516SKenneth E. Jansenc.... ---------------------------->  Nodes  <--------------------------
7159599516SKenneth E. Jansenc
7259599516SKenneth E. Jansenc.... compute length scales
7359599516SKenneth E. Jansenc
7459599516SKenneth E. Jansen        call xyzbound(x)
7559599516SKenneth E. Jansenc
7659599516SKenneth E. Jansenc.... echo the coordinates
7759599516SKenneth E. Jansenc
7859599516SKenneth E. Jansen        if ((necho .lt. 2).and.(myrank.eq.master)) then
7959599516SKenneth E. Jansen          do n = 1, numnp
8059599516SKenneth E. Jansen            if (mod(n,50) .eq. 1) write (iecho,1000) ititle,(i,i=1,nsd)
8159599516SKenneth E. Jansen            write (iecho,1100) n, (x(n,i),i=1,nsd)
8259599516SKenneth E. Jansen          enddo
8359599516SKenneth E. Jansen        endif
8459599516SKenneth E. Jansenc
8559599516SKenneth E. Jansenc.... prepare periodic boundary conditions
8659599516SKenneth E. Jansenc
8759599516SKenneth E. Jansen        do i = 1,nshg
8859599516SKenneth E. Jansen          if (iper(i) .ne. 0) then
8959599516SKenneth E. Jansen            nshg0 = nshg0 - 1
9059599516SKenneth E. Jansen          else
9159599516SKenneth E. Jansen            iper(i) = i
9259599516SKenneth E. Jansen          endif
9359599516SKenneth E. Jansen        enddo
9459599516SKenneth E. Jansenc
9559599516SKenneth E. Jansenc.... ---------------------->  Interior Elements  <--------------------
9659599516SKenneth E. Jansenc
9759599516SKenneth E. Jansen        ibound = 0
9859599516SKenneth E. Jansenc
9959599516SKenneth E. Jansenc.... generate the interior nodal mapping
10059599516SKenneth E. Jansenc
10159599516SKenneth E. Jansen        call genshp ( shp, shgl, nshape, nelblk)
10259599516SKenneth E. Jansenc
10359599516SKenneth E. Jansenc.... --------------------->  Boundary Conditions  <-------------------
10459599516SKenneth E. Jansenc
10559599516SKenneth E. Jansenc.... read and generate the boundary condition codes (iBC array)
10659599516SKenneth E. Jansenc
10759599516SKenneth E. Jansen        call geniBC (iBC)
10859599516SKenneth E. Jansenc
10959599516SKenneth E. Jansenc.... read and generate the essential boundary conditions (BC array)
11059599516SKenneth E. Jansenc
11159599516SKenneth E. Jansen        call genBC  (iBC,   BC,   point2x,
11259599516SKenneth E. Jansen     &               point2ilwork, point2iper)
11359599516SKenneth E. Jansen        deallocate(nBC)
114*513954efSKenneth E. Jansen
115*513954efSKenneth E. Jansenc=========================================================================================
116*513954efSKenneth E. Jansenc Yi Chen
117*513954efSKenneth E. Jansenc Duct geometry8
118*513954efSKenneth E. Jansenc... updated, truly useful things.........
119*513954efSKenneth E. Jansen
120*513954efSKenneth E. Jansen
121*513954efSKenneth E. Jansenc===== specify outlet pressure
122*513954efSKenneth E. Jansen         if(isetOutletID .gt. 0)then
123*513954efSKenneth E. Jansen           call SetUniOutPres(BC)     ! in BCprofile2.f
124*513954efSKenneth E. Jansen         endif
125*513954efSKenneth E. Jansen
126*513954efSKenneth E. Jansenc==== specify inlet boundary conditions
127*513954efSKenneth E. Jansenc         if(isetInlet_Duct.gt.0)then
128*513954efSKenneth E. Jansenc           call setInlet_Duct(x,BC,iTurbWall) ! in BCprofile2.f
129*513954efSKenneth E. Jansenc         endif
130*513954efSKenneth E. Jansen
131*513954efSKenneth E. Jansenc==== specify blowing conditions
132*513954efSKenneth E. Jansen         if(isetBlowing_Duct.gt.0)then
133*513954efSKenneth E. Jansen            if (ifixBlowingVel_Duct.eq.0)then
134*513954efSKenneth E. Jansen              call setBlowing_Duct(BC,iTurbWall)
135*513954efSKenneth E. Jansen            else
136*513954efSKenneth E. Jansen              call setBlowing_Duct3(x,BC,iTurbWall) ! in setBlowing_Duct3.f, fixed jet inlet velocity
137*513954efSKenneth E. Jansen            endif
138*513954efSKenneth E. Jansen         endif
139*513954efSKenneth E. Jansen
140*513954efSKenneth E. Jansenc====== specify wall conditions
141*513954efSKenneth E. Jansen         call findTurbWall(iTurbWall)
142*513954efSKenneth E. Jansen
143*513954efSKenneth E. Jansenc==== apply suction patch on sides
144*513954efSKenneth E. Jansenc suction is applied at the end so it will overwrite the velocity at any nodes shared by the no-slip walls
145*513954efSKenneth E. Jansen         call findWallNorm(x,iBC,ilwork,iper)
146*513954efSKenneth E. Jansen         if(isetSuctionID_Duct.gt.0)then
147*513954efSKenneth E. Jansen            call setSuction_Duct3(x, BC, y, ilwork)
148*513954efSKenneth E. Jansen         endif
149*513954efSKenneth E. Jansen
150*513954efSKenneth E. Jansenc====
151*513954efSKenneth E. Jansen         call MPI_BARRIER(MPI_COMM_WORLD,ierr)
152*513954efSKenneth E. Jansenc.... Yi Chen
153*513954efSKenneth E. Jansenc==========================================================================================
15459599516SKenneth E. Jansenc
15559599516SKenneth E. Jansenc.... ---------------------->  Boundary Elements  <--------------------
15659599516SKenneth E. Jansenc
15759599516SKenneth E. Jansen        ibound = 1
15859599516SKenneth E. Jansen        call gtnods
15959599516SKenneth E. Jansenc
16059599516SKenneth E. Jansenc  We now take care of Direchlet to Neumann BC's.  It had to move here
16159599516SKenneth E. Jansenc  so that the IBC array was of size nshg and ready to be marked.
16259599516SKenneth E. Jansenc
16359599516SKenneth E. Jansen
16459599516SKenneth E. Jansen        if(nsclr.gt.0) then
16559599516SKenneth E. Jansen           call initDtN         ! Dirichlet to Neumann module:
16659599516SKenneth E. Jansen                                     ! initialize this once only
16759599516SKenneth E. Jansen           do iblk = 1, nelblb  ! number of blocks
16859599516SKenneth E. Jansen              iel    = lcblkb(1,iblk)
16959599516SKenneth E. Jansen              npro   = lcblkb(1,iblk+1) - iel
17059599516SKenneth E. Jansenc
17159599516SKenneth E. Jansenc  for the DtN BC we need to mark all of the nodes that are involved.
17259599516SKenneth E. Jansenc
17359599516SKenneth E. Jansen              do i=1,npro
17459599516SKenneth E. Jansenc
17559599516SKenneth E. Jansenc if this element has the BCB AND it has not been found yet then mark it
17659599516SKenneth E. Jansenc
17759599516SKenneth E. Jansen                 if(miBCB(iblk)%p(i,2).lt.0) then
17859599516SKenneth E. Jansen                    idtn = 1    !set the flag for dtn bc's
17959599516SKenneth E. Jansen                    do j=1,nshapeb
18059599516SKenneth E. Jansen                       do isclr=1,nsclr
18159599516SKenneth E. Jansen                          ignd=mienb(iblk)%p(i,j)
18259599516SKenneth E. Jansen                             ifeature(ignd) = abs(miBCB(iblk)%p(i,2))
18359599516SKenneth E. Jansen                             iBC(ignd)=ior(iBC(ignd),2**13)
18459599516SKenneth E. Jansen                                ! must mark this as a Neumann BC now
18559599516SKenneth E. Jansen                             miBCB(iblk)%p(i,1)=
18659599516SKenneth E. Jansen     &                       ior(miBCB(iblk)%p(i,1),2**(4+isclr))
18759599516SKenneth E. Jansen                       end do
18859599516SKenneth E. Jansen                    end do
18959599516SKenneth E. Jansen                 endif
19059599516SKenneth E. Jansen              end do
19159599516SKenneth E. Jansen           end do
19259599516SKenneth E. Jansen        endif
19359599516SKenneth E. Jansenc
19459599516SKenneth E. Jansenc.... generate the boundary element shape functions
19559599516SKenneth E. Jansenc
19659599516SKenneth E. Jansen        call genshpb ( shpb, shglb, nshapeb, nelblb)
19759599516SKenneth E. Jansenc.... Evaluate the shape funcs. and their gradients at the desired quadrature
19859599516SKenneth E. Jansenc.... for filtering. Save these evaluations using a module
19959599516SKenneth E. Jansenc
20059599516SKenneth E. Jansenc KEJ moved them to this point because cdelsq now passed with module
20159599516SKenneth E. Jansenc     and it is read in with velb.<stepnum>.<proc#> now
20259599516SKenneth E. Jansenc
20359599516SKenneth E. Jansen        if (iLES .gt. 0) then
20459599516SKenneth E. Jansen
20559599516SKenneth E. Jansen           call setfilt         ! For setting quad. rule to use for integrating
20659599516SKenneth E. Jansen           call filtprep        ! the hat filter.
20759599516SKenneth E. Jansen           if(iLES/10 .eq. 2) then
20859599516SKenneth E. Jansen              call setave       ! For averaging cdelsq computed at quad pts
20959599516SKenneth E. Jansen              call aveprep(shp,x)
21059599516SKenneth E. Jansen           endif
21159599516SKenneth E. Jansen        endif
21259599516SKenneth E. Jansenc
21359599516SKenneth E. Jansenc User sets request pzero in solver.inp now
21459599516SKenneth E. Jansenc
21559599516SKenneth E. Jansenc        call genpzero(iBC,iper)
21659599516SKenneth E. Jansenc
21759599516SKenneth E. Jansen      if((myrank.eq.master).and.(irscale.ge.0)) then
21859599516SKenneth E. Jansen         call setSPEBC(numnp,nsd)
21959599516SKenneth E. Jansen         call eqn_plane(point2x, iBC)
22059599516SKenneth E. Jansen      endif
22159599516SKenneth E. Jansenc
22259599516SKenneth E. Jansenc.... --------------------->  Initial Conditions  <--------------------
22359599516SKenneth E. Jansenc
22459599516SKenneth E. Jansenc.... generate the initial conditions and initialize time varying BC
22559599516SKenneth E. Jansenc
22659599516SKenneth E. Jansen        call genini (iBC,      BC,         y,
22759599516SKenneth E. Jansen     &               ac,       iper,
22859599516SKenneth E. Jansen     &               ilwork,   ifath,      velbar,
22959599516SKenneth E. Jansen     &               nsons,    x,
23059599516SKenneth E. Jansen     &               shp,     shgl,    shpb,    shglb)
23159599516SKenneth E. Jansenc
23259599516SKenneth E. Jansenc.... close the geometry, boundary condition and material files
23359599516SKenneth E. Jansenc
23459599516SKenneth E. Jansen!MR CHANGE
23559599516SKenneth E. Jansen!        close (igeom)
23659599516SKenneth E. Jansen!MR CHANGE END
23759599516SKenneth E. Jansen        close (ibndc)
23859599516SKenneth E. Jansen        if (mexist) close (imat)
23959599516SKenneth E. Jansenc
24059599516SKenneth E. Jansenc.... return
24159599516SKenneth E. Jansenc
24259599516SKenneth E. JansenCAD        call timer ('Back    ')
24359599516SKenneth E. Jansen        return
24459599516SKenneth E. Jansenc
24559599516SKenneth E. Jansenc.... end of file error handling
24659599516SKenneth E. Jansenc
24759599516SKenneth E. Jansen999     call error ('gendat  ','end file',igeom)
24859599516SKenneth E. Jansenc
24959599516SKenneth E. Jansen1000    format(a80,//,
25059599516SKenneth E. Jansen     &  ' N o d a l   C o o r d i n a t e s                  ',//,
25159599516SKenneth E. Jansen     &  '    Node     ',12x,3('x',i1,:,17x))
25259599516SKenneth E. Jansen1100    format(1p,2x,i5,13x,3(1e12.5,7x))
25359599516SKenneth E. Jansen2000    format(a80,//,
25459599516SKenneth E. Jansen     &  ' B o u n d a r y   F l u x   N o d e s              '//,
25559599516SKenneth E. Jansen     &  '   index          Node          ')
25659599516SKenneth E. Jansen2100    format(1x,i5,5x,i10)
25759599516SKenneth E. Jansenc
25859599516SKenneth E. Jansen        end
25959599516SKenneth E. Jansen
26059599516SKenneth E. Jansen
26159599516SKenneth E. Jansen        subroutine xyzbound(x)
26259599516SKenneth E. Jansen
26359599516SKenneth E. Jansen        include "common.h"
26459599516SKenneth E. Jansen        include "mpif.h"
26559599516SKenneth E. Jansen        include "auxmpi.h"
26659599516SKenneth E. Jansen
26759599516SKenneth E. Jansen        dimension x(numnp,3)
26859599516SKenneth E. Jansen
26959599516SKenneth E. Jansen        real*8   Forout(3), Forin(3)
27059599516SKenneth E. Jansen
27159599516SKenneth E. Jansen        xlngth=maxval(x(:,1))
27259599516SKenneth E. Jansen        ylngth=maxval(x(:,2))
27359599516SKenneth E. Jansen        zlngth=maxval(x(:,3))
27459599516SKenneth E. Jansen        if(numpe. gt. 1) then
27559599516SKenneth E. Jansen           Forin=(/xlngth,ylngth,zlngth/)
27659599516SKenneth E. Jansen           call MPI_ALLREDUCE (Forin, Forout, 3,
27759599516SKenneth E. Jansen     &       MPI_DOUBLE_PRECISION,MPI_MAX, MPI_COMM_WORLD,ierr)
27859599516SKenneth E. Jansen           xmax = Forout(1)
27959599516SKenneth E. Jansen           ymax = Forout(2)
28059599516SKenneth E. Jansen           zmax = Forout(3)
28159599516SKenneth E. Jansen        else
28259599516SKenneth E. Jansen           xmax = xlngth
28359599516SKenneth E. Jansen           ymax = ylngth
28459599516SKenneth E. Jansen           zmax = zlngth
28559599516SKenneth E. Jansen        endif
28659599516SKenneth E. Jansen        xlngth=minval(x(:,1))
28759599516SKenneth E. Jansen        ylngth=minval(x(:,2))
28859599516SKenneth E. Jansen        zlngth=minval(x(:,3))
28959599516SKenneth E. Jansen        if(numpe .gt. 1) then
29059599516SKenneth E. Jansen           Forin=(/xlngth,ylngth,zlngth/)
29159599516SKenneth E. Jansen           call MPI_ALLREDUCE (Forin, Forout, 3,
29259599516SKenneth E. Jansen     &       MPI_DOUBLE_PRECISION,MPI_MIN, MPI_COMM_WORLD,ierr)
29359599516SKenneth E. Jansen        else
29459599516SKenneth E. Jansen           Forout(1) = xlngth
29559599516SKenneth E. Jansen           Forout(2) = ylngth
29659599516SKenneth E. Jansen           Forout(3) = zlngth
29759599516SKenneth E. Jansen        endif
29859599516SKenneth E. Jansen
29959599516SKenneth E. Jansen        xlngth = xmax-Forout(1)
30059599516SKenneth E. Jansen        ylngth = ymax-Forout(2)
30159599516SKenneth E. Jansen        zlngth = zmax-Forout(3)
30259599516SKenneth E. Jansen
30359599516SKenneth E. Jansen        if(myrank.eq.master) then
30459599516SKenneth E. Jansen           print 108,  xlngth,ylngth,zlngth
30559599516SKenneth E. Jansen        endif
30659599516SKenneth E. Jansen 108    format(' Domain size (x,y,z):',2x,3f15.10)
30759599516SKenneth E. Jansen        return
30859599516SKenneth E. Jansen        end
309