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