1*59599516SKenneth E. Jansen module aveall 2*59599516SKenneth E. Jansen 3*59599516SKenneth E. Jansen real*8, allocatable :: ylist(:) 4*59599516SKenneth E. Jansen integer, allocatable :: ifathe(:,:) 5*59599516SKenneth E. Jansen 6*59599516SKenneth E. Jansen end module 7*59599516SKenneth E. Jansen 8*59599516SKenneth E. Jansenc------------------------------------------------------------------------------ 9*59599516SKenneth E. Jansen 10*59599516SKenneth E. Jansen subroutine setave 11*59599516SKenneth E. Jansen 12*59599516SKenneth E. Jansen use aveall 13*59599516SKenneth E. Jansen 14*59599516SKenneth E. Jansen include "common.h" 15*59599516SKenneth E. Jansen 16*59599516SKenneth E. Jansen idim = numel*intg(1,1) 17*59599516SKenneth E. Jansen allocate ( ylist(idim) ) 18*59599516SKenneth E. Jansen allocate ( ifathe(numel,maxsh) ) 19*59599516SKenneth E. Jansen 20*59599516SKenneth E. Jansenc.... return 21*59599516SKenneth E. Jansen 22*59599516SKenneth E. Jansen return 23*59599516SKenneth E. Jansen end 24*59599516SKenneth E. Jansen 25*59599516SKenneth E. Jansenc------------------------------------------------------------------------------ 26*59599516SKenneth E. Jansen 27*59599516SKenneth E. Jansen subroutine aveprep(shp,x) 28*59599516SKenneth E. Jansen 29*59599516SKenneth E. Jansen use pointer_data 30*59599516SKenneth E. Jansen use aveall 31*59599516SKenneth E. Jansen 32*59599516SKenneth E. Jansen include "common.h" 33*59599516SKenneth E. Jansen 34*59599516SKenneth E. Jansen dimension shp(MAXTOP,maxsh,MAXQPT) 35*59599516SKenneth E. Jansen dimension x(numnp,3) 36*59599516SKenneth E. Jansen integer nlist 37*59599516SKenneth E. Jansen 38*59599516SKenneth E. Jansen nlist = 0 39*59599516SKenneth E. Jansen ylist = zero 40*59599516SKenneth E. Jansen lfathe = 0 41*59599516SKenneth E. Jansen do iblk = 1,nelblk 42*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 43*59599516SKenneth E. Jansen iel = lcblk(1,iblk) !Element number where this block begins 44*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 45*59599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 46*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) 47*59599516SKenneth E. Jansen nshl = lcblk(10,iblk) 48*59599516SKenneth E. Jansen inum = iel + npro - 1 49*59599516SKenneth E. Jansen 50*59599516SKenneth E. Jansen ngauss = nint(lcsyst) 51*59599516SKenneth E. Jansen 52*59599516SKenneth E. Jansen call getylist( ylist, ifathe(iel:inum,:), shp(lcsyst,1:nshl,:), 53*59599516SKenneth E. Jansen & x, mien(iblk)%p) 54*59599516SKenneth E. Jansen 55*59599516SKenneth E. Jansen 56*59599516SKenneth E. Jansen enddo 57*59599516SKenneth E. Jansen 58*59599516SKenneth E. Jansen return 59*59599516SKenneth E. Jansen end 60*59599516SKenneth E. Jansen 61*59599516SKenneth E. Jansen 62*59599516SKenneth E. Jansen 63*59599516SKenneth E. Jansen 64*59599516SKenneth E. Jansen 65*59599516SKenneth E. Jansen 66*59599516SKenneth E. Jansen 67*59599516SKenneth E. Jansen 68*59599516SKenneth E. Jansen 69*59599516SKenneth E. Jansen 70*59599516SKenneth E. Jansen 71*59599516SKenneth E. Jansen 72*59599516SKenneth E. Jansen 73*59599516SKenneth E. Jansen 74*59599516SKenneth E. Jansen 75*59599516SKenneth E. Jansen subroutine getnu (ien, strl, xmudmi, cdelsq, lfathe) 76*59599516SKenneth E. Jansen 77*59599516SKenneth E. Jansen include "common.h" 78*59599516SKenneth E. Jansen 79*59599516SKenneth E. Jansen dimension ien(npro,nshl), strl(npro,ngauss), 80*59599516SKenneth E. Jansen & xmudmi(npro,ngauss), cdelsq(nlist), 81*59599516SKenneth E. Jansen & lfathe(npro,ngauss) 82*59599516SKenneth E. Jansen 83*59599516SKenneth E. Jansen do intp = 1, ngauss 84*59599516SKenneth E. Jansen do iel = 1, npro 85*59599516SKenneth E. Jansen 86*59599516SKenneth E. Jansen xmudmi(iel,intp) = cdelsq( lfathe(iel,intp) )* 87*59599516SKenneth E. Jansen & strl(iel,intp) 88*59599516SKenneth E. Jansen 89*59599516SKenneth E. Jansen enddo 90*59599516SKenneth E. Jansen enddo 91*59599516SKenneth E. Jansen 92*59599516SKenneth E. Jansenc 93*59599516SKenneth E. Jansenc local clipping 94*59599516SKenneth E. Jansenc 95*59599516SKenneth E. Jansen rmu=datmat(1,2,1) 96*59599516SKenneth E. Jansencc xmudmi=min(xmudmi,1000.0*rmu) !don't let it get larger than 1000 mu 97*59599516SKenneth E. Jansencc xmudmi=max(xmudmi, -rmu) ! don't let (xmudmi + mu) < 0 98*59599516SKenneth E. Jansen 99*59599516SKenneth E. Jansen do int = 1, ngauss 100*59599516SKenneth E. Jansen xmudmi(:,int) = 101*59599516SKenneth E. Jansen & min(xmudmi(:,int),1000.0*rmu) !don't let it get larger than 1000 mu 102*59599516SKenneth E. Jansen xmudmi(:,int) = 103*59599516SKenneth E. Jansen & max(xmudmi(:,int), -rmu) ! don't let (xmudmi + mu) < 0 104*59599516SKenneth E. Jansen enddo 105*59599516SKenneth E. Jansen 106*59599516SKenneth E. Jansen return 107*59599516SKenneth E. Jansen end 108*59599516SKenneth E. Jansen subroutine getxnut (fres, xden, xnum, ien, shp) 109*59599516SKenneth E. Jansen 110*59599516SKenneth E. Jansen include "common.h" 111*59599516SKenneth E. Jansen 112*59599516SKenneth E. Jansen dimension ien(npro,nshl), fres(nshg,22), 113*59599516SKenneth E. Jansen & shp(nshl,maxsh), fresli(npro,22), 114*59599516SKenneth E. Jansen & fresl(npro,nshl,22), strnrmi(npro), 115*59599516SKenneth E. Jansen & xnutl(npro), fwr(npro), 116*59599516SKenneth E. Jansen & xmij(npro,6), xlij(npro,6), 117*59599516SKenneth E. Jansen & xdenli(npro), xnumli(npro), 118*59599516SKenneth E. Jansen & xdenl(npro), xnuml(npro), 119*59599516SKenneth E. Jansen & xden(1), xnum(1) 120*59599516SKenneth E. Jansen 121*59599516SKenneth E. Jansen 122*59599516SKenneth E. Jansen call local (fres, fresl, ien, 22, 'gather ') 123*59599516SKenneth E. Jansen 124*59599516SKenneth E. Jansen xnuml = zero 125*59599516SKenneth E. Jansen xdenl = zero 126*59599516SKenneth E. Jansen 127*59599516SKenneth E. Jansen do intp = 1, ngauss 128*59599516SKenneth E. Jansen 129*59599516SKenneth E. Jansen fresli = zero 130*59599516SKenneth E. Jansen do i = 1, nenl 131*59599516SKenneth E. Jansen do j = 1, 22 132*59599516SKenneth E. Jansen fresli(:,j) = fresli(:,j) + shp(i,intp)*fresl(:,i,j) 133*59599516SKenneth E. Jansen enddo 134*59599516SKenneth E. Jansen enddo 135*59599516SKenneth E. Jansen 136*59599516SKenneth E. Jansen strnrmi(:) = sqrt( 137*59599516SKenneth E. Jansen & two * (fresli(:,10)**2 + fresli(:,11)**2 + fresli(:,12)**2) 138*59599516SKenneth E. Jansen & + four * ( fresli(:,13)**2 + fresli(:,14)**2 + 139*59599516SKenneth E. Jansen & fresli(:,15)**2 ) ) 140*59599516SKenneth E. Jansen 141*59599516SKenneth E. Jansen fwr = fwr1 * fresli(:,22) * strnrmi(:) 142*59599516SKenneth E. Jansen 143*59599516SKenneth E. Jansen xmij(:,1) = -fwr 144*59599516SKenneth E. Jansen & * fresli(:,10) + fresli(:,16) 145*59599516SKenneth E. Jansen 146*59599516SKenneth E. Jansen xmij(:,2) = -fwr 147*59599516SKenneth E. Jansen & * fresli(:,11) + fresli(:,17) 148*59599516SKenneth E. Jansen 149*59599516SKenneth E. Jansen xmij(:,3) = -fwr 150*59599516SKenneth E. Jansen & * fresli(:,12) + fresli(:,18) 151*59599516SKenneth E. Jansen 152*59599516SKenneth E. Jansen xmij(:,4) = -fwr * fresli(:,13) + fresli(:,19) 153*59599516SKenneth E. Jansen xmij(:,5) = -fwr * fresli(:,14) + fresli(:,20) 154*59599516SKenneth E. Jansen xmij(:,6) = -fwr * fresli(:,15) + fresli(:,21) 155*59599516SKenneth E. Jansen 156*59599516SKenneth E. Jansen fresli(:,22) = one/fresli(:,22) 157*59599516SKenneth E. Jansen 158*59599516SKenneth E. Jansen xlij(:,1) = fresli(:,4) - fresli(:,1) * 159*59599516SKenneth E. Jansen & fresli(:,1) * fresli(:,22) 160*59599516SKenneth E. Jansen xlij(:,2) = fresli(:,5) - fresli(:,2) * 161*59599516SKenneth E. Jansen & fresli(:,2) * fresli(:,22) 162*59599516SKenneth E. Jansen xlij(:,3) = fresli(:,6) - fresli(:,3) * 163*59599516SKenneth E. Jansen & fresli(:,3) * fresli(:,22) 164*59599516SKenneth E. Jansen xlij(:,4) = fresli(:,7) - fresli(:,1) * 165*59599516SKenneth E. Jansen & fresli(:,2) * fresli(:,22) 166*59599516SKenneth E. Jansen xlij(:,5) = fresli(:,8) - fresli(:,1) * 167*59599516SKenneth E. Jansen & fresli(:,3) * fresli(:,22) 168*59599516SKenneth E. Jansen xlij(:,6) = fresli(:,9) - fresli(:,2) * 169*59599516SKenneth E. Jansen & fresli(:,3) * fresli(:,22) 170*59599516SKenneth E. Jansen 171*59599516SKenneth E. Jansen xnumli(:) = xlij(:,1) * xmij(:,1) 172*59599516SKenneth E. Jansen & + xlij(:,2) * xmij(:,2) 173*59599516SKenneth E. Jansen & + xlij(:,3) * xmij(:,3) 174*59599516SKenneth E. Jansen & + two * (xlij(:,4) * xmij(:,4) 175*59599516SKenneth E. Jansen & + xlij(:,5) * xmij(:,5) 176*59599516SKenneth E. Jansen & + xlij(:,6) * xmij(:,6)) 177*59599516SKenneth E. Jansen xdenli(:) = xmij(:,1) * xmij(:,1) 178*59599516SKenneth E. Jansen & + xmij(:,2) * xmij(:,2) 179*59599516SKenneth E. Jansen & + xmij(:,3) * xmij(:,3) 180*59599516SKenneth E. Jansen & + two * (xmij(:,4) * xmij(:,4) 181*59599516SKenneth E. Jansen & + xmij(:,5) * xmij(:,5) 182*59599516SKenneth E. Jansen & + xmij(:,6) * xmij(:,6)) 183*59599516SKenneth E. Jansen 184*59599516SKenneth E. Jansenc xdenli = xdenli 185*59599516SKenneth E. Jansen 186*59599516SKenneth E. Jansen xdenl(:) = xdenl(:) + xdenli(:) 187*59599516SKenneth E. Jansen xnuml(:) = xnuml(:) + xnumli(:) 188*59599516SKenneth E. Jansen 189*59599516SKenneth E. Jansen enddo 190*59599516SKenneth E. Jansen 191*59599516SKenneth E. Jansen do nel = 1, npro 192*59599516SKenneth E. Jansen xden(1) = xden(1) + xdenl(nel) 193*59599516SKenneth E. Jansen xnum(1) = xnum(1) + xnuml(nel) 194*59599516SKenneth E. Jansen enddo 195*59599516SKenneth E. Jansen 196*59599516SKenneth E. Jansen return 197*59599516SKenneth E. Jansen 198*59599516SKenneth E. Jansen end 199*59599516SKenneth E. Jansen 200*59599516SKenneth E. Jansen 201*59599516SKenneth E. Jansen 202*59599516SKenneth E. Jansen 203*59599516SKenneth E. Jansen 204*59599516SKenneth E. Jansen 205*59599516SKenneth E. Jansen 206*59599516SKenneth E. Jansen 207*59599516SKenneth E. Jansen 208*59599516SKenneth E. Jansen subroutine getylist (ylist, lfathe, shp, x, ien) 209*59599516SKenneth E. Jansen 210*59599516SKenneth E. Jansen include "common.h" 211*59599516SKenneth E. Jansen 212*59599516SKenneth E. Jansen dimension lfathe(npro,maxsh), shp(nshl,maxsh), 213*59599516SKenneth E. Jansen & x(numnp,3), ien(npro,nshl), 214*59599516SKenneth E. Jansen & xl(npro,nenl,nsd), ylist(idim) 215*59599516SKenneth E. Jansen 216*59599516SKenneth E. Jansen integer intp 217*59599516SKenneth E. Jansen 218*59599516SKenneth E. Jansen call localx (x, xl, ien, 3, 'gather ') 219*59599516SKenneth E. Jansen 220*59599516SKenneth E. Jansen 221*59599516SKenneth E. Jansen do nel = 1, npro 222*59599516SKenneth E. Jansen do intp = 1, ngauss 223*59599516SKenneth E. Jansen 224*59599516SKenneth E. Jansenc... Compute the y-coordinate of the current quad. pt. and call it yint. 225*59599516SKenneth E. Jansen 226*59599516SKenneth E. Jansen yint = zero 227*59599516SKenneth E. Jansen xint = zero 228*59599516SKenneth E. Jansen zint = zero 229*59599516SKenneth E. Jansen do n = 1, nenl 230*59599516SKenneth E. Jansen yint = yint + xl(nel,n,2)*shp(n,intp) 231*59599516SKenneth E. Jansen xint = xint + xl(nel,n,1)*shp(n,intp) 232*59599516SKenneth E. Jansen zint = zint + xl(nel,n,3)*shp(n,intp) 233*59599516SKenneth E. Jansen enddo 234*59599516SKenneth E. Jansen 235*59599516SKenneth E. Jansenc... Check ylist to see if yint is already included in ylist. 236*59599516SKenneth E. Jansen 237*59599516SKenneth E. Jansen if(nlist .eq. 0)then ! In this case yint is definitely not in ylist. 238*59599516SKenneth E. Jansen nlist = nlist + 1 239*59599516SKenneth E. Jansen ylist(nlist) = yint 240*59599516SKenneth E. Jansen lfathe(nel,intp) = nlist 241*59599516SKenneth E. Jansen 242*59599516SKenneth E. Jansen else 243*59599516SKenneth E. Jansen 244*59599516SKenneth E. Jansen do ilist = 1, nlist 245*59599516SKenneth E. Jansen imatch = ilist 246*59599516SKenneth E. Jansen if( abs(yint-ylist(ilist)) .lt. 0.00001 ) then 247*59599516SKenneth E. Jansen lfathe(nel,intp) = imatch 248*59599516SKenneth E. Jansen goto 5 249*59599516SKenneth E. Jansen endif 250*59599516SKenneth E. Jansen enddo 251*59599516SKenneth E. Jansen 252*59599516SKenneth E. Jansen nlist = nlist + 1 253*59599516SKenneth E. Jansen ylist(nlist) = yint 254*59599516SKenneth E. Jansen lfathe(nel,intp) = nlist 255*59599516SKenneth E. Jansen 256*59599516SKenneth E. Jansen endif 257*59599516SKenneth E. Jansen 258*59599516SKenneth E. Jansen 5 yint = zero 259*59599516SKenneth E. Jansen 260*59599516SKenneth E. Jansenc if( nlist .eq. 5)then 261*59599516SKenneth E. Jansenc write(*,*)'ylist yint=',ylist(4),ylist(5) 262*59599516SKenneth E. Jansenc stop 263*59599516SKenneth E. Jansenc endif 264*59599516SKenneth E. Jansen 265*59599516SKenneth E. Jansen enddo ! End loop over quad. pts. 266*59599516SKenneth E. Jansen enddo ! End loop over elements in current block. 267*59599516SKenneth E. Jansen 268*59599516SKenneth E. Jansen return 269*59599516SKenneth E. Jansen end 270*59599516SKenneth E. Jansen subroutine projdmc (y, shgl, shp, 271*59599516SKenneth E. Jansen & iper, ilwork, x) 272*59599516SKenneth E. Jansen 273*59599516SKenneth E. Jansen use pointer_data 274*59599516SKenneth E. Jansen 275*59599516SKenneth E. Jansen use aveall ! This module helps us average cdelsq computed at quad pts 276*59599516SKenneth E. Jansen 277*59599516SKenneth E. Jansen use quadfilt ! This module gives us shglf(maxtp,nsd,maxsh,ngaussf), 278*59599516SKenneth E. Jansenc shpf(maxtp,maxsh,ngaussf), and Qwtf(maxtp,ngaussf). 279*59599516SKenneth E. Jansenc Shpf and shglf are the shape funciotns and their 280*59599516SKenneth E. Jansenc gradient evaluated using the quadrature rule desired 281*59599516SKenneth E. Jansenc for computing the dmod. Qwt contains the weights of the 282*59599516SKenneth E. Jansenc quad. points. 283*59599516SKenneth E. Jansen 284*59599516SKenneth E. Jansen include "common.h" 285*59599516SKenneth E. Jansen include "mpif.h" 286*59599516SKenneth E. Jansen include "auxmpi.h" 287*59599516SKenneth E. Jansen 288*59599516SKenneth E. Jansenc 289*59599516SKenneth E. Jansen dimension fres(nshg,24), fwr(nshg), 290*59599516SKenneth E. Jansen & strnrm(nshg), cdelsq(nshg), 291*59599516SKenneth E. Jansen & strl(numel,ngauss), 292*59599516SKenneth E. Jansen & y(nshg,5), yold(nshg,5), 293*59599516SKenneth E. Jansen & iper(nshg), 294*59599516SKenneth E. Jansen & ilwork(nlwork), 295*59599516SKenneth E. Jansen & x(numnp,3), 296*59599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), shp(MAXTOP,maxsh,MAXQPT), 297*59599516SKenneth E. Jansen & xden(idim), xnum(idim), 298*59599516SKenneth E. Jansen & xdent(idim), xnumt(idim) 299*59599516SKenneth E. Jansen 300*59599516SKenneth E. Jansen fres = zero 301*59599516SKenneth E. Jansen yold(:,1)=y(:,4) 302*59599516SKenneth E. Jansen yold(:,2:4)=y(:,1:3) 303*59599516SKenneth E. Jansenc 304*59599516SKenneth E. Jansenc hack in an interesting velocity field (uncomment to test dmod) 305*59599516SKenneth E. Jansenc 306*59599516SKenneth E. Jansenc yold(:,5) = 1.0 307*59599516SKenneth E. Jansenc yold(:,2) = 2.0*x(:,1) - 3*x(:,2) 308*59599516SKenneth E. Jansenc yold(:,3) = 3.0*x(:,1) + 4.0*x(:,2) 309*59599516SKenneth E. Jansenc yold(:,4) = 4.0*x(:,1) + x(:,2) + x(:,3) 310*59599516SKenneth E. Jansenc yold(:,1) = Rgas * yold(:,5) ! Necessary to make model suitable 311*59599516SKenneth E. Jansenc suitable for the 312*59599516SKenneth E. Jansen 313*59599516SKenneth E. Jansen 314*59599516SKenneth E. Jansen intrul=intg(1,itseq) 315*59599516SKenneth E. Jansen intind=intpt(intrul) 316*59599516SKenneth E. Jansen 317*59599516SKenneth E. Jansen do iblk = 1,nelblk 318*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 319*59599516SKenneth E. Jansen iel = lcblk(1,iblk) !Element number where this block begins 320*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 321*59599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 322*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) 323*59599516SKenneth E. Jansen nshl = lcblk(10,iblk) 324*59599516SKenneth E. Jansen inum = iel + npro - 1 325*59599516SKenneth E. Jansen 326*59599516SKenneth E. Jansen ngauss = nint(lcsyst) 327*59599516SKenneth E. Jansen ngaussf = nintf(lcsyst) 328*59599516SKenneth E. Jansen 329*59599516SKenneth E. Jansen call asithf (yold, x, strl(iel:inum,:), mien(iblk)%p, fres, 330*59599516SKenneth E. Jansen & shglf(lcsyst,:,1:nshl,:), 331*59599516SKenneth E. Jansen & shpf(lcsyst,1:nshl,:),Qwtf(lcsyst,1:ngaussf)) 332*59599516SKenneth E. Jansen 333*59599516SKenneth E. Jansen enddo 334*59599516SKenneth E. Jansenc 335*59599516SKenneth E. Jansen 336*59599516SKenneth E. Jansen if(numpe>1) call commu (fres, ilwork, 24, 'in ') 337*59599516SKenneth E. Jansenc 338*59599516SKenneth E. Jansenc account for periodicity in filtered variables 339*59599516SKenneth E. Jansenc 340*59599516SKenneth E. Jansen do j = 1,nshg 341*59599516SKenneth E. Jansen i = iper(j) 342*59599516SKenneth E. Jansen if (i .ne. j) then 343*59599516SKenneth E. Jansen fres(i,:) = fres(i,:) + fres(j,:) 344*59599516SKenneth E. Jansen endif 345*59599516SKenneth E. Jansen enddo 346*59599516SKenneth E. Jansen 347*59599516SKenneth E. Jansen do j = 1,nshg 348*59599516SKenneth E. Jansen i = iper(j) 349*59599516SKenneth E. Jansen if (i .ne. j) then 350*59599516SKenneth E. Jansen fres(j,:) = fres(i,:) 351*59599516SKenneth E. Jansen endif 352*59599516SKenneth E. Jansen enddo 353*59599516SKenneth E. Jansen 354*59599516SKenneth E. Jansen if(numpe>1)then 355*59599516SKenneth E. Jansen call commu (fres, ilwork, 24, 'out') 356*59599516SKenneth E. Jansen endif 357*59599516SKenneth E. Jansen 358*59599516SKenneth E. Jansen fres(:,23) = one / fres(:,23) 359*59599516SKenneth E. Jansen do j = 1,22 360*59599516SKenneth E. Jansen fres(:,j) = fres(:,j) * fres(:,23) 361*59599516SKenneth E. Jansen enddo 362*59599516SKenneth E. Jansen 363*59599516SKenneth E. Jansen xden = zero 364*59599516SKenneth E. Jansen xdent = zero 365*59599516SKenneth E. Jansen xnum = zero 366*59599516SKenneth E. Jansen xnumt = zero 367*59599516SKenneth E. Jansen 368*59599516SKenneth E. Jansen do iblk = 1,nelblk 369*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 370*59599516SKenneth E. Jansen iel = lcblk(1,iblk) !Element number where this block begins 371*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 372*59599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 373*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) 374*59599516SKenneth E. Jansen inum = iel + npro - 1 375*59599516SKenneth E. Jansen ngauss = nint(lcsyst) 376*59599516SKenneth E. Jansen call smagcoeff (fres(:,1:22), xden, xnum, mien(iblk)%p, 377*59599516SKenneth E. Jansen & shp(lcsyst,1:nshl,:), ifathe(iel:inum,:)) 378*59599516SKenneth E. Jansen 379*59599516SKenneth E. Jansen enddo 380*59599516SKenneth E. Jansen 381*59599516SKenneth E. Jansen if(numpe.gt.1)then 382*59599516SKenneth E. Jansen call drvAllreduce( xden, xdent, idim ) 383*59599516SKenneth E. Jansen call drvAllreduce( xnum, xnumt, idim ) 384*59599516SKenneth E. Jansen else 385*59599516SKenneth E. Jansen xdent = xden 386*59599516SKenneth E. Jansen xnumt = xnum 387*59599516SKenneth E. Jansen endif 388*59599516SKenneth E. Jansen 389*59599516SKenneth E. Jansen do i = 1, nlist 390*59599516SKenneth E. Jansen cdelsq(i) = pt5*xnumt(i)/xdent(i) 391*59599516SKenneth E. Jansen enddo 392*59599516SKenneth E. Jansen 393*59599516SKenneth E. Jansenc... Uncomment for averaging over all directions 394*59599516SKenneth E. Jansen 395*59599516SKenneth E. Jansenc sumc1 = 0.0 396*59599516SKenneth E. Jansenc sumc2 = 0.0 397*59599516SKenneth E. Jansenc do i = 1, nlist 398*59599516SKenneth E. Jansenc sumc1 = sumc1 + xnumt(i) 399*59599516SKenneth E. Jansenc sumc2 = sumc2 + xdent(i) 400*59599516SKenneth E. Jansenc enddo 401*59599516SKenneth E. Jansenc xfact = pt5*sumc1/sumc2 402*59599516SKenneth E. Jansenc cdelsq(:) = xfact 403*59599516SKenneth E. Jansenc if(myrank .eq. master)then 404*59599516SKenneth E. Jansenc write(22,*)cdelsq(1) 405*59599516SKenneth E. Jansenc endif 406*59599516SKenneth E. Jansen 407*59599516SKenneth E. Jansenc... End of averaging over all directions. 408*59599516SKenneth E. Jansen 409*59599516SKenneth E. Jansen do iblk = 1,nelblk 410*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 411*59599516SKenneth E. Jansen iel = lcblk(1,iblk) !Element number where this block begins 412*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 413*59599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 414*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) 415*59599516SKenneth E. Jansen nshl = lcblk(10,iblk) 416*59599516SKenneth E. Jansen inum = iel + npro - 1 417*59599516SKenneth E. Jansen 418*59599516SKenneth E. Jansen ngauss = nint(lcsyst) 419*59599516SKenneth E. Jansen ngaussf = nintf(lcsyst) 420*59599516SKenneth E. Jansen 421*59599516SKenneth E. Jansen if (ngauss .ne. ngaussf) then 422*59599516SKenneth E. Jansen call getstrl (yold, x, mien(iblk)%p, 423*59599516SKenneth E. Jansen & strl(iel:inum,:), shgl(lcsyst,:,1:nshl,:), 424*59599516SKenneth E. Jansen & shp(lcsyst,1:nshl,:)) 425*59599516SKenneth E. Jansen endif 426*59599516SKenneth E. Jansen 427*59599516SKenneth E. Jansen enddo 428*59599516SKenneth E. Jansen 429*59599516SKenneth E. Jansen do iblk = 1,nelblk 430*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 431*59599516SKenneth E. Jansen iel = lcblk(1,iblk) 432*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 433*59599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 434*59599516SKenneth E. Jansen inum = iel + npro - 1 435*59599516SKenneth E. Jansen 436*59599516SKenneth E. Jansen ngauss = nint(lcsyst) 437*59599516SKenneth E. Jansen 438*59599516SKenneth E. Jansen call getnu (mien(iblk)%p, strl(iel:inum,:), 439*59599516SKenneth E. Jansen & mxmudmi(iblk)%p,cdelsq,ifathe(iel:inum,:)) 440*59599516SKenneth E. Jansen enddo 441*59599516SKenneth E. Jansen 442*59599516SKenneth E. Jansen 443*59599516SKenneth E. Jansen return 444*59599516SKenneth E. Jansen end 445*59599516SKenneth E. Jansen 446*59599516SKenneth E. Jansen 447*59599516SKenneth E. Jansen 448*59599516SKenneth E. Jansen subroutine smagcoeff (fres, xden, xnum, ien, shp, lfathe) 449*59599516SKenneth E. Jansen 450*59599516SKenneth E. Jansen include "common.h" 451*59599516SKenneth E. Jansen 452*59599516SKenneth E. Jansen dimension ien(npro,nshl), fres(nshg,22), 453*59599516SKenneth E. Jansen & shp(nshl,maxsh), fresli(npro,22), 454*59599516SKenneth E. Jansen & fresl(npro,nshl,22), strnrmi(npro), 455*59599516SKenneth E. Jansen & xnutl(npro), fwr(npro), 456*59599516SKenneth E. Jansen & xmij(npro,6), xlij(npro,6), 457*59599516SKenneth E. Jansen & xdenli(npro,ngauss), xnumli(npro,ngauss), 458*59599516SKenneth E. Jansen & xden(idim), xnum(idim), 459*59599516SKenneth E. Jansen & lfathe(npro,maxsh) 460*59599516SKenneth E. Jansen 461*59599516SKenneth E. Jansen call local (fres, fresl, ien, 22, 'gather ') 462*59599516SKenneth E. Jansen 463*59599516SKenneth E. Jansen do intp = 1, ngauss 464*59599516SKenneth E. Jansen 465*59599516SKenneth E. Jansen fresli = zero 466*59599516SKenneth E. Jansen do i = 1, nenl 467*59599516SKenneth E. Jansen do j = 1, 22 468*59599516SKenneth E. Jansen fresli(:,j) = fresli(:,j) + shp(i,intp)*fresl(:,i,j) 469*59599516SKenneth E. Jansen enddo 470*59599516SKenneth E. Jansen enddo 471*59599516SKenneth E. Jansen 472*59599516SKenneth E. Jansen strnrmi(:) = sqrt( 473*59599516SKenneth E. Jansen & two * (fresli(:,10)**2 + fresli(:,11)**2 + fresli(:,12)**2) 474*59599516SKenneth E. Jansen & + four * ( fresli(:,13)**2 + fresli(:,14)**2 + 475*59599516SKenneth E. Jansen & fresli(:,15)**2 ) ) 476*59599516SKenneth E. Jansen 477*59599516SKenneth E. Jansen fwr = fwr1 * fresli(:,22) * strnrmi(:) 478*59599516SKenneth E. Jansen 479*59599516SKenneth E. Jansen xmij(:,1) = -fwr 480*59599516SKenneth E. Jansen & * fresli(:,10) + fresli(:,16) 481*59599516SKenneth E. Jansen 482*59599516SKenneth E. Jansen xmij(:,2) = -fwr 483*59599516SKenneth E. Jansen & * fresli(:,11) + fresli(:,17) 484*59599516SKenneth E. Jansen 485*59599516SKenneth E. Jansen xmij(:,3) = -fwr 486*59599516SKenneth E. Jansen & * fresli(:,12) + fresli(:,18) 487*59599516SKenneth E. Jansen 488*59599516SKenneth E. Jansen xmij(:,4) = -fwr * fresli(:,13) + fresli(:,19) 489*59599516SKenneth E. Jansen xmij(:,5) = -fwr * fresli(:,14) + fresli(:,20) 490*59599516SKenneth E. Jansen xmij(:,6) = -fwr * fresli(:,15) + fresli(:,21) 491*59599516SKenneth E. Jansen 492*59599516SKenneth E. Jansen fresli(:,22) = one/fresli(:,22) 493*59599516SKenneth E. Jansen 494*59599516SKenneth E. Jansen xlij(:,1) = fresli(:,4) - fresli(:,1) * 495*59599516SKenneth E. Jansen & fresli(:,1) * fresli(:,22) 496*59599516SKenneth E. Jansen xlij(:,2) = fresli(:,5) - fresli(:,2) * 497*59599516SKenneth E. Jansen & fresli(:,2) * fresli(:,22) 498*59599516SKenneth E. Jansen xlij(:,3) = fresli(:,6) - fresli(:,3) * 499*59599516SKenneth E. Jansen & fresli(:,3) * fresli(:,22) 500*59599516SKenneth E. Jansen xlij(:,4) = fresli(:,7) - fresli(:,1) * 501*59599516SKenneth E. Jansen & fresli(:,2) * fresli(:,22) 502*59599516SKenneth E. Jansen xlij(:,5) = fresli(:,8) - fresli(:,1) * 503*59599516SKenneth E. Jansen & fresli(:,3) * fresli(:,22) 504*59599516SKenneth E. Jansen xlij(:,6) = fresli(:,9) - fresli(:,2) * 505*59599516SKenneth E. Jansen & fresli(:,3) * fresli(:,22) 506*59599516SKenneth E. Jansen 507*59599516SKenneth E. Jansen xnumli(:,intp) = xlij(:,1) * xmij(:,1) 508*59599516SKenneth E. Jansen & + xlij(:,2) * xmij(:,2) 509*59599516SKenneth E. Jansen & + xlij(:,3) * xmij(:,3) 510*59599516SKenneth E. Jansen & + two * (xlij(:,4) * xmij(:,4) 511*59599516SKenneth E. Jansen & + xlij(:,5) * xmij(:,5) 512*59599516SKenneth E. Jansen & + xlij(:,6) * xmij(:,6)) 513*59599516SKenneth E. Jansen xdenli(:,intp) = xmij(:,1) * xmij(:,1) 514*59599516SKenneth E. Jansen & + xmij(:,2) * xmij(:,2) 515*59599516SKenneth E. Jansen & + xmij(:,3) * xmij(:,3) 516*59599516SKenneth E. Jansen & + two * (xmij(:,4) * xmij(:,4) 517*59599516SKenneth E. Jansen & + xmij(:,5) * xmij(:,5) 518*59599516SKenneth E. Jansen & + xmij(:,6) * xmij(:,6)) 519*59599516SKenneth E. Jansen 520*59599516SKenneth E. Jansen 521*59599516SKenneth E. Jansen enddo ! End loop over quad pts 522*59599516SKenneth E. Jansen 523*59599516SKenneth E. Jansenc... For debugging 524*59599516SKenneth E. Jansen 525*59599516SKenneth E. Jansenc do nel = 1, npro 526*59599516SKenneth E. Jansenc do intp = 1, ngauss 527*59599516SKenneth E. Jansen 528*59599516SKenneth E. Jansenc if ( mod(lfathe(nel,intp),2) .eq. 0 )then 529*59599516SKenneth E. Jansenc xnumli(nel,intp) = 2.0 530*59599516SKenneth E. Jansenc xdenli(nel,intp) = 3.0 531*59599516SKenneth E. Jansenc else 532*59599516SKenneth E. Jansenc xnumli(nel,intp) = 5.0 533*59599516SKenneth E. Jansenc xdenli(nel,intp) = 2.5 534*59599516SKenneth E. Jansenc endif 535*59599516SKenneth E. Jansen 536*59599516SKenneth E. Jansenc enddo 537*59599516SKenneth E. Jansenc enddo 538*59599516SKenneth E. Jansen 539*59599516SKenneth E. Jansenc... End of debugging stuff. 540*59599516SKenneth E. Jansen 541*59599516SKenneth E. Jansen 542*59599516SKenneth E. Jansen do intp = 1, ngauss 543*59599516SKenneth E. Jansen do nel = 1, npro 544*59599516SKenneth E. Jansen 545*59599516SKenneth E. Jansen xden( lfathe(nel,intp) ) = xden( lfathe(nel,intp) ) + 546*59599516SKenneth E. Jansen & xdenli(nel,intp) 547*59599516SKenneth E. Jansen 548*59599516SKenneth E. Jansen xnum( lfathe(nel,intp) ) = xnum( lfathe(nel,intp) ) + 549*59599516SKenneth E. Jansen & xnumli(nel,intp) 550*59599516SKenneth E. Jansen 551*59599516SKenneth E. Jansen enddo 552*59599516SKenneth E. Jansen enddo 553*59599516SKenneth E. Jansen 554*59599516SKenneth E. Jansen return 555*59599516SKenneth E. Jansen 556*59599516SKenneth E. Jansen end 557*59599516SKenneth E. Jansen 558*59599516SKenneth E. Jansen 559*59599516SKenneth E. Jansen 560*59599516SKenneth E. Jansen 561*59599516SKenneth E. Jansen 562*59599516SKenneth E. Jansen 563*59599516SKenneth E. Jansen 564*59599516SKenneth E. Jansen 565*59599516SKenneth E. Jansen 566