xref: /phasta/phSolver/incompressible/itrdrv.f (revision ae8d68e4d684c42aa0a2054f5c5447188f991748)
159599516SKenneth E. Jansen      subroutine itrdrv (y,         ac,
259599516SKenneth E. Jansen     &                   uold,      x,
359599516SKenneth E. Jansen     &                   iBC,       BC,
459599516SKenneth E. Jansen     &                   iper,      ilwork,     shp,
559599516SKenneth E. Jansen     &                   shgl,      shpb,       shglb,
659599516SKenneth E. Jansen     &                   ifath,     velbar,     nsons )
759599516SKenneth E. Jansenc
859599516SKenneth E. Jansenc----------------------------------------------------------------------
959599516SKenneth E. Jansenc
1059599516SKenneth E. Jansenc This iterative driver is the semi-discrete, predictor multi-corrector
1159599516SKenneth E. Jansenc algorithm. It contains the Hulbert Generalized Alpha method which
1259599516SKenneth E. Jansenc is 2nd order accurate for Rho_inf from 0 to 1.  The method can be
1359599516SKenneth E. Jansenc made  first-order accurate by setting Rho_inf=-1. It uses CGP and
1459599516SKenneth E. Jansenc GMRES iterative solvers.
1559599516SKenneth E. Jansenc
1659599516SKenneth E. Jansenc working arrays:
1759599516SKenneth E. Jansenc  y      (nshg,ndof)           : Y variables
1859599516SKenneth E. Jansenc  x      (nshg,nsd)            : node coordinates
1959599516SKenneth E. Jansenc  iBC    (nshg)                : BC codes
2059599516SKenneth E. Jansenc  BC     (nshg,ndofBC)         : BC constraint parameters
2159599516SKenneth E. Jansenc  iper   (nshg)                : periodicity table
2259599516SKenneth E. Jansenc
2359599516SKenneth E. Jansenc
2459599516SKenneth E. Jansenc Zdenek Johan,  Winter 1991.  (Fortran 90)
2559599516SKenneth E. Jansenc Alberto Figueroa, Winter 2004.  CMM-FSI
2659599516SKenneth E. Jansenc Irene Vignon, Fall 2004. Impedance BC
2759599516SKenneth E. Jansenc----------------------------------------------------------------------
2859599516SKenneth E. Jansenc
2959599516SKenneth E. Jansen      use pvsQbi     !gives us splag (the spmass at the end of this run
3059599516SKenneth E. Jansen      use specialBC !gives us itvn
3159599516SKenneth E. Jansen      use timedata   !allows collection of time series
3259599516SKenneth E. Jansen      use convolImpFlow !for Imp bc
3359599516SKenneth E. Jansen      use convolRCRFlow !for RCR bc
3459599516SKenneth E. Jansen!MR CHANGE
3559599516SKenneth E. Jansen      use turbsa          ! used to access d2wall
3659599516SKenneth E. Jansen!MR CHANGE END
379071d3baSCameron Smith      use iso_c_binding
3859599516SKenneth E. Jansen
3959599516SKenneth E. Jansenc      use readarrays !reads in uold and acold
4059599516SKenneth E. Jansen
4159599516SKenneth E. Jansen        include "common.h"
4259599516SKenneth E. Jansen        include "mpif.h"
4359599516SKenneth E. Jansen        include "auxmpi.h"
44*ae8d68e4SKenneth E. Jansen        include "svLS.h"
4559599516SKenneth E. Jansenc
4659599516SKenneth E. Jansen
4759599516SKenneth E. Jansen
4859599516SKenneth E. Jansen        real*8    y(nshg,ndof),              ac(nshg,ndof),
4959599516SKenneth E. Jansen     &            yold(nshg,ndof),           acold(nshg,ndof),
5059599516SKenneth E. Jansen     &            u(nshg,nsd),               uold(nshg,nsd),
5159599516SKenneth E. Jansen     &            x(numnp,nsd),              solinc(nshg,ndof),
5259599516SKenneth E. Jansen     &            BC(nshg,ndofBC),           tf(nshg,ndof),
5359599516SKenneth E. Jansen     &            GradV(nshg,nsdsq)
5459599516SKenneth E. Jansen
5559599516SKenneth E. Jansenc
5659599516SKenneth E. Jansen        real*8    res(nshg,ndof)
5759599516SKenneth E. Jansenc
5859599516SKenneth E. Jansen        real*8    shp(MAXTOP,maxsh,MAXQPT),
5959599516SKenneth E. Jansen     &            shgl(MAXTOP,nsd,maxsh,MAXQPT),
6059599516SKenneth E. Jansen     &            shpb(MAXTOP,maxsh,MAXQPT),
6159599516SKenneth E. Jansen     &            shglb(MAXTOP,nsd,maxsh,MAXQPT)
6259599516SKenneth E. Jansenc
6359599516SKenneth E. Jansen        integer   rowp(nshg,nnz),         colm(nshg+1),
6459599516SKenneth E. Jansen     &            iBC(nshg),
6559599516SKenneth E. Jansen     &            ilwork(nlwork),
6659599516SKenneth E. Jansen     &            iper(nshg),            ifuncs(6)
6759599516SKenneth E. Jansen
6859599516SKenneth E. Jansen        real*8 vbc_prof(nshg,3)
6959599516SKenneth E. Jansen
7059599516SKenneth E. Jansen        integer stopjob
7159599516SKenneth E. Jansen        character*10 cname2
7259599516SKenneth E. Jansen        character*5  cname
7359599516SKenneth E. Jansenc
7459599516SKenneth E. Jansenc  stuff for dynamic model s.w.avg and wall model
7559599516SKenneth E. Jansenc
7659599516SKenneth E. Jansen        dimension ifath(numnp),    velbar(nfath,ndof),  nsons(nfath)
7759599516SKenneth E. Jansen
7859599516SKenneth E. Jansen        dimension wallubar(2),walltot(2)
7959599516SKenneth E. Jansenc
80*ae8d68e4SKenneth E. Jansenc.... For linear solver Library
8159599516SKenneth E. Jansenc
8259599516SKenneth E. Jansen        integer eqnType, prjFlag, presPrjFlag, verbose
8359599516SKenneth E. Jansenc
8459599516SKenneth E. Jansen        real*8, allocatable, dimension(:,:) :: aperm,  atemp, atempS
8559599516SKenneth E. Jansen        real*8, allocatable, dimension(:,:,:) :: apermS
8659599516SKenneth E. Jansen
8759599516SKenneth E. Jansen        real*8, allocatable, dimension(:,:) :: lhsP, lhsK, lhsS
8859599516SKenneth E. Jansen        real*8   almit, alfit, gamit
8959599516SKenneth E. Jansenc
9059599516SKenneth E. Jansen        character*1024    servername
9159599516SKenneth E. Jansen        character*20    fname1,fmt1
9259599516SKenneth E. Jansen        character*20    fname2,fmt2
9359599516SKenneth E. Jansen        character*60    fnamepold, fvarts
9459599516SKenneth E. Jansen        character*4     fname4c ! 4 characters
9559599516SKenneth E. Jansen        integer         iarray(50) ! integers for headers
9659599516SKenneth E. Jansen        integer         isgn(ndof), isgng(ndof)
9759599516SKenneth E. Jansen
9859599516SKenneth E. Jansen!MR CHANGE
9959599516SKenneth E. Jansen!        real*8 rerr(nshg,10), ybar(nshg,13) ! including 7 sq. terms with 3 cross terms of uv, uw and vw
10059599516SKenneth E. Jansen!        real*8 rerr(nshg,10), ybar(nshg,12) ! including 7 sq. terms with 3 cross terms of uv, uw and vw
10159599516SKenneth E. Jansen        real*8 rerr(nshg,10)
10259599516SKenneth E. Jansen        real*8, allocatable, dimension(:,:) :: ybar, strain, vorticity
10359599516SKenneth E. Jansen        real*8, allocatable, dimension(:,:) :: wallssVec, wallssVecbar
10459599516SKenneth E. Jansen!MR CHANGE
10559599516SKenneth E. Jansen
10659599516SKenneth E. Jansen        real*8 tcorecp(2), tcorecpscal(2)
10759599516SKenneth E. Jansen
10859599516SKenneth E. Jansen        integer, allocatable, dimension(:) :: ivarts
10959599516SKenneth E. Jansen        integer, allocatable, dimension(:) :: ivartsg
11059599516SKenneth E. Jansen        integer, allocatable, dimension(:) :: iv_rank
11159599516SKenneth E. Jansen        real*8, allocatable, dimension(:) :: vartssoln
11259599516SKenneth E. Jansen        real*8, allocatable, dimension(:) :: vartssolng
11359599516SKenneth E. Jansen        real*8, allocatable, dimension(:,:,:) :: yphbar
11459599516SKenneth E. Jansen        real*8 CFLworst(numel)
11559599516SKenneth E. Jansen
11659599516SKenneth E. Jansen!MR CHANGE
11759599516SKenneth E. Jansen        integer :: iv_rankpernode, iv_totnodes, iv_totcores
11859599516SKenneth E. Jansen        integer :: iv_node, iv_core, iv_thread
11959599516SKenneth E. Jansen!MR CHANGE
120*ae8d68e4SKenneth E. Jansen!--------------------------------------------------------------------
121*ae8d68e4SKenneth E. Jansen!     Setting up svLS
122*ae8d68e4SKenneth E. Jansen      INTEGER svLS_nFaces, gnNo, nNo, faIn, facenNo
123*ae8d68e4SKenneth E. Jansen      INTEGER, ALLOCATABLE :: ltg(:), gNodes(:)
124*ae8d68e4SKenneth E. Jansen      REAL*8, ALLOCATABLE :: sV(:,:)
125*ae8d68e4SKenneth E. Jansen
126*ae8d68e4SKenneth E. Jansen      CHARACTER*128 fileName
127*ae8d68e4SKenneth E. Jansen      TYPE(svLS_commuType) communicator
128*ae8d68e4SKenneth E. Jansen      TYPE(svLS_lhsType) svLS_lhs
129*ae8d68e4SKenneth E. Jansen      TYPE(svLS_lsType) svLS_ls
13059599516SKenneth E. Jansen
13159599516SKenneth E. Jansen        impistat = 0
13259599516SKenneth E. Jansen        impistat2 = 0
13359599516SKenneth E. Jansen        iISend = 0
13459599516SKenneth E. Jansen        iISendScal = 0
13559599516SKenneth E. Jansen        iIRecv = 0
13659599516SKenneth E. Jansen        iIRecvScal = 0
13759599516SKenneth E. Jansen        iWaitAll = 0
13859599516SKenneth E. Jansen        iWaitAllScal = 0
13959599516SKenneth E. Jansen        iAllR = 0
14059599516SKenneth E. Jansen        iAllRScal = 0
14159599516SKenneth E. Jansen        rISend = zero
14259599516SKenneth E. Jansen        rISendScal = zero
14359599516SKenneth E. Jansen        rIRecv = zero
14459599516SKenneth E. Jansen        rIRecvScal = zero
14559599516SKenneth E. Jansen        rWaitAll = zero
14659599516SKenneth E. Jansen        rWaitAllScal = zero
14759599516SKenneth E. Jansen        rAllR = zero
14859599516SKenneth E. Jansen        rAllRScal = zero
14959599516SKenneth E. Jansen        rCommu = zero
15059599516SKenneth E. Jansen        rCommuScal = zero
15159599516SKenneth E. Jansen
15259599516SKenneth E. Jansen        call initmemstat()
15359599516SKenneth E. Jansen
15459599516SKenneth E. Jansenc
15559599516SKenneth E. Jansenc  hack SA variable
15659599516SKenneth E. Jansenc
15759599516SKenneth E. JansencHack        BC(:,7)=BC(:,7)*0.001
15859599516SKenneth E. JansencHack        if(lstep.eq.0) y(:,6)=y(:,6)*0.001
159*ae8d68e4SKenneth E. Jansen!--------------------------------------------------------------------
160*ae8d68e4SKenneth E. Jansen!     Setting up svLS
161*ae8d68e4SKenneth E. Jansen
162*ae8d68e4SKenneth E. Jansen
163*ae8d68e4SKenneth E. Jansen      IF (svLSFlag .EQ. 1) THEN
164*ae8d68e4SKenneth E. Jansen         CALL svLS_LS_CREATE(svLS_ls, svLSType, dimKry=Kspace,
165*ae8d68e4SKenneth E. Jansen     2      relTol=epstol(8), relTolIn=(/epstol(1),epstol(7)/),
166*ae8d68e4SKenneth E. Jansen     3      maxItr=maxNSIters,
167*ae8d68e4SKenneth E. Jansen     4      maxItrIn=(/maxMomentumIters,maxContinuityIters/))
168*ae8d68e4SKenneth E. Jansen
169*ae8d68e4SKenneth E. Jansen         CALL svLS_COMMU_CREATE(communicator, MPI_COMM_WORLD)
170*ae8d68e4SKenneth E. Jansen
171*ae8d68e4SKenneth E. Jansen         IF (numpe .GT. 1) THEN
172*ae8d68e4SKenneth E. Jansen            WRITE(fileName,*) myrank
173*ae8d68e4SKenneth E. Jansen            fileName = "ltg.dat."//ADJUSTL(TRIM(fileName))
174*ae8d68e4SKenneth E. Jansen            OPEN(1,FILE=fileName)
175*ae8d68e4SKenneth E. Jansen            READ(1,*) gnNo
176*ae8d68e4SKenneth E. Jansen            READ(1,*) nNo
177*ae8d68e4SKenneth E. Jansen            ALLOCATE(ltg(nNo))
178*ae8d68e4SKenneth E. Jansen            READ(1,*) ltg
179*ae8d68e4SKenneth E. Jansen            CLOSE(1)
180*ae8d68e4SKenneth E. Jansen         ELSE
181*ae8d68e4SKenneth E. Jansen            gnNo = nshg
182*ae8d68e4SKenneth E. Jansen            nNo = nshg
183*ae8d68e4SKenneth E. Jansen            ALLOCATE(ltg(nNo))
184*ae8d68e4SKenneth E. Jansen            DO i=1, nNo
185*ae8d68e4SKenneth E. Jansen               ltg(i) = i
186*ae8d68e4SKenneth E. Jansen            END DO
187*ae8d68e4SKenneth E. Jansen         END IF
188*ae8d68e4SKenneth E. Jansen      ELSE
189*ae8d68e4SKenneth E. Jansen!--------------------------------------------------------------------
19059599516SKenneth E. Jansen        call SolverLicenseServer(servername)
191*ae8d68e4SKenneth E. Jansen      ENDIF
19259599516SKenneth E. Jansenc
19359599516SKenneth E. Jansenc only master should be verbose
19459599516SKenneth E. Jansenc
19559599516SKenneth E. Jansen
19659599516SKenneth E. Jansen        if(numpe.gt.0 .and. myrank.ne.master)iverbose=0
19759599516SKenneth E. Jansenc
19859599516SKenneth E. Jansen
19959599516SKenneth E. Jansen        lskeep=lstep
20059599516SKenneth E. Jansen
20159599516SKenneth E. Jansen        inquire(file='xyzts.dat',exist=exts)
20259599516SKenneth E. Jansen        if(exts) then
20359599516SKenneth E. Jansen
20459599516SKenneth E. Jansen           open(unit=626,file='xyzts.dat',status='old')
20559599516SKenneth E. Jansen           read(626,*) ntspts, freq, tolpt, iterat, varcod
20659599516SKenneth E. Jansen           call sTD             ! sets data structures
20759599516SKenneth E. Jansen
20859599516SKenneth E. Jansen           do jj=1,ntspts       ! read coordinate data where solution desired
20959599516SKenneth E. Jansen              read(626,*) ptts(jj,1),ptts(jj,2),ptts(jj,3)
21059599516SKenneth E. Jansen           enddo
21159599516SKenneth E. Jansen           close(626)
21259599516SKenneth E. Jansen
21359599516SKenneth E. Jansen           statptts(:,:) = 0
21459599516SKenneth E. Jansen           parptts(:,:) = zero
21559599516SKenneth E. Jansen           varts(:,:) = zero
21659599516SKenneth E. Jansen
21759599516SKenneth E. Jansen           allocate (ivarts(ntspts*ndof))
21859599516SKenneth E. Jansen           allocate (ivartsg(ntspts*ndof))
21959599516SKenneth E. Jansen           allocate (iv_rank(ntspts))
22059599516SKenneth E. Jansen           allocate (vartssoln(ntspts*ndof))
22159599516SKenneth E. Jansen           allocate (vartssolng(ntspts*ndof))
22259599516SKenneth E. Jansen
22359599516SKenneth E. Jansen           iv_rankpernode = iv_rankpercore*iv_corepernode
22459599516SKenneth E. Jansen           iv_totnodes = numpe/iv_rankpernode
22559599516SKenneth E. Jansen           iv_totcores = iv_corepernode*iv_totnodes
22659599516SKenneth E. Jansen           if (myrank .eq. 0) then
22759599516SKenneth E. Jansen             write(*,*) 'Info for probes:'
22859599516SKenneth E. Jansen             write(*,*) '  Ranks per core:',iv_rankpercore
22959599516SKenneth E. Jansen             write(*,*) '  Cores per node:',iv_corepernode
23059599516SKenneth E. Jansen             write(*,*) '  Ranks per node:',iv_rankpernode
23159599516SKenneth E. Jansen             write(*,*) '  Total number of nodes:',iv_totnodes
23259599516SKenneth E. Jansen             write(*,*) '  Total number of cores',iv_totcores
23359599516SKenneth E. Jansen           endif
23459599516SKenneth E. Jansen
23559599516SKenneth E. Jansen!           if (myrank .eq. numpe-1) then
23659599516SKenneth E. Jansen            do jj=1,ntspts
23759599516SKenneth E. Jansen
23859599516SKenneth E. Jansen               ! Compute the adequate rank which will take care of probe jj
23959599516SKenneth E. Jansen               jjm1 = jj-1
24059599516SKenneth E. Jansen               iv_node = (iv_totnodes-1)-mod(jjm1,iv_totnodes)
24159599516SKenneth E. Jansen               iv_core = (iv_corepernode-1) - mod((jjm1 -
24259599516SKenneth E. Jansen     &              mod(jjm1,iv_totnodes))/iv_totnodes,iv_corepernode)
24359599516SKenneth E. Jansen               iv_thread = (iv_rankpercore-1) - mod((jjm1-
24459599516SKenneth E. Jansen     &              (mod(jjm1,iv_totcores)))/iv_totcores,iv_rankpercore)
24559599516SKenneth E. Jansen               iv_rank(jj) = iv_node*iv_rankpernode
24659599516SKenneth E. Jansen     &                     + iv_core*iv_rankpercore
24759599516SKenneth E. Jansen     &                     + iv_thread
24859599516SKenneth E. Jansen
24959599516SKenneth E. Jansen               if(myrank == 0) then
25059599516SKenneth E. Jansen                 write(*,*) '  Probe', jj, 'handled by rank',
25159599516SKenneth E. Jansen     &                         iv_rank(jj), ' on node', iv_node
25259599516SKenneth E. Jansen               endif
25359599516SKenneth E. Jansen
25459599516SKenneth E. Jansen               ! Verification just in case
25559599516SKenneth E. Jansen               if(iv_rank(jj) .lt.0 .or. iv_rank(jj) .ge. numpe) then
25659599516SKenneth E. Jansen                 write(*,*) 'WARNING: iv_rank(',jj,') is ', iv_rank(jj),
25759599516SKenneth E. Jansen     &                      ' and reset to numpe-1'
25859599516SKenneth E. Jansen                 iv_rank(jj) = numpe-1
25959599516SKenneth E. Jansen               endif
26059599516SKenneth E. Jansen
26159599516SKenneth E. Jansen               ! Open the varts files
26259599516SKenneth E. Jansen               if(myrank == iv_rank(jj)) then
26359599516SKenneth E. Jansen                 fvarts='varts/varts'
26459599516SKenneth E. Jansen                 fvarts=trim(fvarts)//trim(cname2(jj))
26559599516SKenneth E. Jansen                 fvarts=trim(fvarts)//trim(cname2(lstep))
26659599516SKenneth E. Jansen                 fvarts=trim(fvarts)//'.dat'
26759599516SKenneth E. Jansen                 fvarts=trim(fvarts)
26859599516SKenneth E. Jansen                 open(unit=1000+jj, file=fvarts, status='unknown')
26959599516SKenneth E. Jansen               endif
27059599516SKenneth E. Jansen            enddo
27159599516SKenneth E. Jansen!           endif
27259599516SKenneth E. Jansen
27359599516SKenneth E. Jansen        endif
27459599516SKenneth E. Jansenc
27559599516SKenneth E. Jansenc.... open history and aerodynamic forces files
27659599516SKenneth E. Jansenc
27759599516SKenneth E. Jansen        if (myrank .eq. master) then
278c9a96f21SKenneth E. Jansen           open (unit=ihist,  file=fhist,  status='unknown')
27959599516SKenneth E. Jansen           open (unit=iforce, file=fforce, status='unknown')
28059599516SKenneth E. Jansen           open (unit=76, file="fort.76", status='unknown')
28159599516SKenneth E. Jansen           if(numImpSrfs.gt.0 .or. numRCRSrfs.gt.0) then
28259599516SKenneth E. Jansen              fnamepold = 'pold'
28359599516SKenneth E. Jansen              fnamepold = trim(fnamepold)//trim(cname2(lstep))
28459599516SKenneth E. Jansen              fnamepold = trim(fnamepold)//'.dat'
28559599516SKenneth E. Jansen              fnamepold = trim(fnamepold)
28659599516SKenneth E. Jansen              open (unit=8177, file=fnamepold, status='unknown')
28759599516SKenneth E. Jansen           endif
28859599516SKenneth E. Jansen        endif
28959599516SKenneth E. Jansenc
29059599516SKenneth E. Jansenc.... initialize
29159599516SKenneth E. Jansenc
29259599516SKenneth E. Jansen        ifuncs(:)  = 0              ! func. evaluation counter
29359599516SKenneth E. Jansen        istep  = 0
29459599516SKenneth E. Jansen        yold   = y
29559599516SKenneth E. Jansen        acold  = ac
29659599516SKenneth E. Jansen
29759599516SKenneth E. Jansen        rerr = zero
29859599516SKenneth E. Jansen
29959599516SKenneth E. Jansen        if(ierrcalc.eq.1 .or. ioybar.eq.1) then ! we need ybar for error too
30059599516SKenneth E. Jansen          if (ivort == 1) then
30159599516SKenneth E. Jansen            allocate(ybar(nshg,17)) ! more space for vorticity if requested
30259599516SKenneth E. Jansen          else
30359599516SKenneth E. Jansen            allocate(ybar(nshg,13))
30459599516SKenneth E. Jansen          endif
30559599516SKenneth E. Jansen          ybar = zero ! Initialize ybar to zero, which is essential
30659599516SKenneth E. Jansen        endif
30759599516SKenneth E. Jansen
30859599516SKenneth E. Jansen        if(ivort == 1) then
30959599516SKenneth E. Jansen          allocate(strain(nshg,6))
31059599516SKenneth E. Jansen          allocate(vorticity(nshg,5))
31159599516SKenneth E. Jansen        endif
31259599516SKenneth E. Jansen
31359599516SKenneth E. Jansen        if(abs(itwmod).ne.1 .and. iowflux.eq.1) then
31459599516SKenneth E. Jansen          allocate(wallssVec(nshg,3))
31559599516SKenneth E. Jansen          if (ioybar .eq. 1) then
31659599516SKenneth E. Jansen            allocate(wallssVecbar(nshg,3))
31759599516SKenneth E. Jansen            wallssVecbar = zero ! Initialization important if mean wss computed
31859599516SKenneth E. Jansen          endif
31959599516SKenneth E. Jansen        endif
32059599516SKenneth E. Jansen
32159599516SKenneth E. Jansen! both nstepsincycle and nphasesincycle needs to be set
32259599516SKenneth E. Jansen        if(nstepsincycle.eq.0) nphasesincycle = 0
32359599516SKenneth E. Jansen        if(nphasesincycle.ne.0) then
32459599516SKenneth E. Jansen!     &     allocate(yphbar(nshg,5,nphasesincycle))
32559599516SKenneth E. Jansen          if (ivort == 1) then
32659599516SKenneth E. Jansen            allocate(yphbar(nshg,15,nphasesincycle)) ! more space for vorticity
32759599516SKenneth E. Jansen          else
32859599516SKenneth E. Jansen            allocate(yphbar(nshg,11,nphasesincycle))
32959599516SKenneth E. Jansen          endif
33059599516SKenneth E. Jansen          yphbar = zero
33159599516SKenneth E. Jansen        endif
33259599516SKenneth E. Jansen
33359599516SKenneth E. Jansen!MR CHANGE END
33459599516SKenneth E. Jansen
33559599516SKenneth E. Jansen        vbc_prof(:,1:3) = BC(:,3:5)
33659599516SKenneth E. Jansen        if(iramp.eq.1) then
33759599516SKenneth E. Jansen          call BCprofileInit(vbc_prof,x)
33859599516SKenneth E. Jansen        endif
33959599516SKenneth E. Jansen
34059599516SKenneth E. Jansenc
341*ae8d68e4SKenneth E. Jansenc.... ---------------> initialize LesLib Library <---------------
34259599516SKenneth E. Jansenc
34359599516SKenneth E. Jansenc.... assign parameter values
34459599516SKenneth E. Jansenc
34559599516SKenneth E. Jansen        do i = 1, 100
34659599516SKenneth E. Jansen           numeqns(i) = i
34759599516SKenneth E. Jansen        enddo
34859599516SKenneth E. Jansen        nKvecs       = Kspace
34959599516SKenneth E. Jansen        prjFlag      = iprjFlag
35059599516SKenneth E. Jansen        presPrjFlag  = ipresPrjFlag
35159599516SKenneth E. Jansen        verbose      = iverbose
35259599516SKenneth E. Jansenc
35359599516SKenneth E. Jansenc.... determine how many scalar equations we are going to need to solve
35459599516SKenneth E. Jansenc
35559599516SKenneth E. Jansen      nsolt=mod(impl(1),2)      ! 1 if solving temperature
35659599516SKenneth E. Jansen      nsclrsol=nsolt+nsclr      ! total number of scalars solved At
35759599516SKenneth E. Jansen                                ! some point we probably want to create
35859599516SKenneth E. Jansen                                ! a map, considering stepseq(), to find
35959599516SKenneth E. Jansen                                ! what is actually solved and only
36059599516SKenneth E. Jansen                                ! dimension lhs to the appropriate
36159599516SKenneth E. Jansen                                ! size. (see 1.6.1 and earlier for a
36259599516SKenneth E. Jansen                                ! "failed" attempt at this).
36359599516SKenneth E. Jansen
36459599516SKenneth E. Jansen
36559599516SKenneth E. Jansen      nsolflow=mod(impl(1),100)/10  ! 1 if solving flow
36659599516SKenneth E. Jansen
36759599516SKenneth E. Jansenc
368*ae8d68e4SKenneth E. Jansenc.... Now, call lesNew routine to initialize
36959599516SKenneth E. Jansenc     memory space
37059599516SKenneth E. Jansenc
37159599516SKenneth E. Jansen      call genadj(colm, rowp, icnt )  ! preprocess the adjacency list
37259599516SKenneth E. Jansen
37359599516SKenneth E. Jansen      nnz_tot=icnt ! this is exactly the number of non-zero blocks on
37459599516SKenneth E. Jansen                   ! this proc
37559599516SKenneth E. Jansen
37659599516SKenneth E. Jansen      if (nsolflow.eq.1) then
37759599516SKenneth E. Jansen         lesId   = numeqns(1)
37859599516SKenneth E. Jansen         eqnType = 1
37959599516SKenneth E. Jansen         nDofs   = 4
380*ae8d68e4SKenneth E. Jansen
381*ae8d68e4SKenneth E. Jansen!--------------------------------------------------------------------
382*ae8d68e4SKenneth E. Jansen!     Rest of configuration of svLS is added here, where we have LHS
383*ae8d68e4SKenneth E. Jansen!     pointers
384*ae8d68e4SKenneth E. Jansen
385*ae8d68e4SKenneth E. Jansen         nPermDims = 1
386*ae8d68e4SKenneth E. Jansen         nTmpDims = 1
387*ae8d68e4SKenneth E. Jansen
388*ae8d68e4SKenneth E. Jansen         allocate (lhsP(4,nnz_tot))
389*ae8d68e4SKenneth E. Jansen         allocate (lhsK(9,nnz_tot))
390*ae8d68e4SKenneth E. Jansen
391*ae8d68e4SKenneth E. Jansen         IF (svLSFlag .EQ. 1) THEN
392*ae8d68e4SKenneth E. Jansen            IF  (ipvsq .GE. 2) THEN
393*ae8d68e4SKenneth E. Jansen
394*ae8d68e4SKenneth E. Jansen#if((VER_CORONARY == 1)&&(VER_CLOSEDLOOP == 1))
395*ae8d68e4SKenneth E. Jansen               svLS_nFaces = 1 + numResistSrfs + numNeumannSrfs
396*ae8d68e4SKenneth E. Jansen     2            + numImpSrfs + numRCRSrfs + numCORSrfs
397*ae8d68e4SKenneth E. Jansen#elif((VER_CORONARY == 1)&&(VER_CLOSEDLOOP == 0))
398*ae8d68e4SKenneth E. Jansen               svLS_nFaces = 1 + numResistSrfs
399*ae8d68e4SKenneth E. Jansen     2            + numImpSrfs + numRCRSrfs + numCORSrfs
400*ae8d68e4SKenneth E. Jansen#elif((VER_CORONARY == 0)&&(VER_CLOSEDLOOP == 1))
401*ae8d68e4SKenneth E. Jansen               svLS_nFaces = 1 + numResistSrfs + numNeumannSrfs
402*ae8d68e4SKenneth E. Jansen     2            + numImpSrfs + numRCRSrfs
403*ae8d68e4SKenneth E. Jansen#else
404*ae8d68e4SKenneth E. Jansen               svLS_nFaces = 1 + numResistSrfs
405*ae8d68e4SKenneth E. Jansen     2            + numImpSrfs + numRCRSrfs
406*ae8d68e4SKenneth E. Jansen#endif
407*ae8d68e4SKenneth E. Jansen
408*ae8d68e4SKenneth E. Jansen            ELSE
409*ae8d68e4SKenneth E. Jansen               svLS_nFaces = 1
410*ae8d68e4SKenneth E. Jansen            END IF
411*ae8d68e4SKenneth E. Jansen
412*ae8d68e4SKenneth E. Jansen            CALL svLS_LHS_CREATE(svLS_lhs, communicator, gnNo, nNo,
413*ae8d68e4SKenneth E. Jansen     2         nnz_tot, ltg, colm, rowp, svLS_nFaces)
414*ae8d68e4SKenneth E. Jansen
415*ae8d68e4SKenneth E. Jansen            faIn = 1
416*ae8d68e4SKenneth E. Jansen            facenNo = 0
417*ae8d68e4SKenneth E. Jansen            DO i=1, nshg
418*ae8d68e4SKenneth E. Jansen               IF (IBITS(iBC(i),3,3) .NE. 0)  facenNo = facenNo + 1
419*ae8d68e4SKenneth E. Jansen            END DO
420*ae8d68e4SKenneth E. Jansen            ALLOCATE(gNodes(facenNo), sV(nsd,facenNo))
421*ae8d68e4SKenneth E. Jansen            sV = 0D0
422*ae8d68e4SKenneth E. Jansen            j = 0
423*ae8d68e4SKenneth E. Jansen            DO i=1, nshg
424*ae8d68e4SKenneth E. Jansen               IF (IBITS(iBC(i),3,3) .NE. 0) THEN
425*ae8d68e4SKenneth E. Jansen                  j = j + 1
426*ae8d68e4SKenneth E. Jansen                  gNodes(j) = i
427*ae8d68e4SKenneth E. Jansen                  IF (.NOT.BTEST(iBC(i),3)) sV(1,j) = 1D0
428*ae8d68e4SKenneth E. Jansen                  IF (.NOT.BTEST(iBC(i),4)) sV(2,j) = 1D0
429*ae8d68e4SKenneth E. Jansen                  IF (.NOT.BTEST(iBC(i),5)) sV(3,j) = 1D0
430*ae8d68e4SKenneth E. Jansen               END IF
431*ae8d68e4SKenneth E. Jansen            END DO
432*ae8d68e4SKenneth E. Jansen            CALL svLS_BC_CREATE(svLS_lhs, faIn, facenNo,
433*ae8d68e4SKenneth E. Jansen     2         nsd, BC_TYPE_Dir, gNodes, sV)
434*ae8d68e4SKenneth E. Jansen
435*ae8d68e4SKenneth E. Jansen            IF  (ipvsq .GE. 2) THEN
436*ae8d68e4SKenneth E. Jansen               DO k = 1, numResistSrfs
437*ae8d68e4SKenneth E. Jansen                  faIn = faIn + 1
438*ae8d68e4SKenneth E. Jansen                  CALL AddNeumannBCTosvLS(nsrflistResist(k), faIn)
439*ae8d68e4SKenneth E. Jansen               END DO
440*ae8d68e4SKenneth E. Jansen
441*ae8d68e4SKenneth E. Jansen#if(VER_CLOSEDLOOP == 1)
442*ae8d68e4SKenneth E. Jansen               DO k = numDirichletSrfs+1, numCoupledSrfs
443*ae8d68e4SKenneth E. Jansen                  faIn = faIn + 1
444*ae8d68e4SKenneth E. Jansen                  CALL AddNeumannBCTosvLS(nsrflistCoupled(k), faIn)
445*ae8d68e4SKenneth E. Jansen               END DO
446*ae8d68e4SKenneth E. Jansen#endif
447*ae8d68e4SKenneth E. Jansen               DO k = 1, numImpSrfs
448*ae8d68e4SKenneth E. Jansen                  faIn = faIn + 1
449*ae8d68e4SKenneth E. Jansen                  CALL AddNeumannBCTosvLS(nsrflistImp(k), faIn)
450*ae8d68e4SKenneth E. Jansen               END DO
451*ae8d68e4SKenneth E. Jansen               DO k = 1, numRCRSrfs
452*ae8d68e4SKenneth E. Jansen                  faIn = faIn + 1
453*ae8d68e4SKenneth E. Jansen                  CALL AddNeumannBCTosvLS(nsrflistRCR(k), faIn)
454*ae8d68e4SKenneth E. Jansen               END DO
455*ae8d68e4SKenneth E. Jansen#if(VER_CORONARY == 1)
456*ae8d68e4SKenneth E. Jansen               DO k = 1, numCORSrfs
457*ae8d68e4SKenneth E. Jansen                  faIn = faIn + 1
458*ae8d68e4SKenneth E. Jansen                  CALL AddNeumannBCTosvLS(nsrflistCOR(k), faIn)
459*ae8d68e4SKenneth E. Jansen               END DO
460*ae8d68e4SKenneth E. Jansen#endif
461*ae8d68e4SKenneth E. Jansen            END IF
462*ae8d68e4SKenneth E. Jansen         ELSE
463*ae8d68e4SKenneth E. Jansen!--------------------------------------------------------------------
46459599516SKenneth E. Jansen         call myfLesNew( lesId,   41994,
46559599516SKenneth E. Jansen     &                 eqnType,
46659599516SKenneth E. Jansen     &                 nDofs,          minIters,       maxIters,
46759599516SKenneth E. Jansen     &                 nKvecs,         prjFlag,        nPrjs,
46859599516SKenneth E. Jansen     &                 presPrjFlag,    nPresPrjs,      epstol(1),
46959599516SKenneth E. Jansen     &                 prestol,        verbose,        statsflow,
47059599516SKenneth E. Jansen     &                 nPermDims,      nTmpDims,      servername  )
47159599516SKenneth E. Jansen
472*ae8d68e4SKenneth E. Jansen         END IF
47359599516SKenneth E. Jansen         allocate (aperm(nshg,nPermDims))
47459599516SKenneth E. Jansen         allocate (atemp(nshg,nTmpDims))
475*ae8d68e4SKenneth E. Jansen         IF (svLSFlag .NE. 1) THEN
47659599516SKenneth E. Jansen           call readLesRestart( lesId,  aperm, nshg, myrank, lstep,
47759599516SKenneth E. Jansen     &                        nPermDims )
478*ae8d68e4SKenneth E. Jansen         ENDIF
47959599516SKenneth E. Jansen
48059599516SKenneth E. Jansen      else
48159599516SKenneth E. Jansen         nPermDims = 0
48259599516SKenneth E. Jansen         nTempDims = 0
48359599516SKenneth E. Jansen      endif
48459599516SKenneth E. Jansen
48559599516SKenneth E. Jansen
48659599516SKenneth E. Jansen      if(nsclrsol.gt.0) then
48759599516SKenneth E. Jansen       do isolsc=1,nsclrsol
48859599516SKenneth E. Jansen         lesId       = numeqns(isolsc+1)
48959599516SKenneth E. Jansen         eqnType     = 2
49059599516SKenneth E. Jansen         nDofs       = 1
49159599516SKenneth E. Jansen         presPrjflag = 0
49259599516SKenneth E. Jansen         nPresPrjs   = 0
49359599516SKenneth E. Jansen         prjFlag     = 1
49459599516SKenneth E. Jansen         indx=isolsc+2-nsolt ! complicated to keep epstol(2) for
49559599516SKenneth E. Jansen                             ! temperature followed by scalars
49659599516SKenneth E. Jansen         call myfLesNew( lesId,            41994,
49759599516SKenneth E. Jansen     &                 eqnType,
49859599516SKenneth E. Jansen     &                 nDofs,          minIters,       maxIters,
49959599516SKenneth E. Jansen     &                 nKvecs,         prjFlag,        nPrjs,
50059599516SKenneth E. Jansen     &                 presPrjFlag,    nPresPrjs,      epstol(indx),
50159599516SKenneth E. Jansen     &                 prestol,        verbose,        statssclr,
50259599516SKenneth E. Jansen     &                 nPermDimsS,     nTmpDimsS,   servername )
50359599516SKenneth E. Jansen       enddo
50459599516SKenneth E. Jansenc
50559599516SKenneth E. Jansenc  Assume all scalars have the same size needs
50659599516SKenneth E. Jansenc
50759599516SKenneth E. Jansen       allocate (apermS(nshg,nPermDimsS,nsclrsol))
50859599516SKenneth E. Jansen       allocate (atempS(nshg,nTmpDimsS))  !they can all share this
50959599516SKenneth E. Jansen       allocate (lhsS(nnz_tot,nsclrsol))
51059599516SKenneth E. Jansenc
51159599516SKenneth E. Jansenc actually they could even share with atemp but leave that for later
51259599516SKenneth E. Jansenc
51359599516SKenneth E. Jansen      else
51459599516SKenneth E. Jansen         nPermDimsS = 0
51559599516SKenneth E. Jansen         nTmpDimsS  = 0
51659599516SKenneth E. Jansen      endif
51759599516SKenneth E. Jansenc
51859599516SKenneth E. Jansenc...  prepare lumped mass if needed
51959599516SKenneth E. Jansenc
52059599516SKenneth E. Jansen      if((flmpr.ne.0).or.(flmpl.ne.0)) call genlmass(x, shp,shgl)
52159599516SKenneth E. Jansenc
52259599516SKenneth E. Jansenc.... -----------------> End of initialization <-----------------
52359599516SKenneth E. Jansenc
52459599516SKenneth E. Jansenc.....open the necessary files to gather time series
52559599516SKenneth E. Jansenc
52659599516SKenneth E. Jansen      lstep0 = lstep+1
52759599516SKenneth E. Jansen      nsteprcr = nstep(1)+lstep
52859599516SKenneth E. Jansenc
52959599516SKenneth E. Jansenc.... loop through the time sequences
53059599516SKenneth E. Jansenc
53159599516SKenneth E. Jansen
53259599516SKenneth E. Jansen
53359599516SKenneth E. Jansen      do 3000 itsq = 1, ntseq
53459599516SKenneth E. Jansen         itseq = itsq
53559599516SKenneth E. Jansen
53659599516SKenneth E. JansenCAD         tcorecp1 = second(0)
53759599516SKenneth E. JansenCAD         tcorewc1 = second(-1)
53859599516SKenneth E. Jansenc
53959599516SKenneth E. Jansenc.... set up the time integration parameters
54059599516SKenneth E. Jansenc
54159599516SKenneth E. Jansen         nstp   = nstep(itseq)
54259599516SKenneth E. Jansen         nitr   = niter(itseq)
54359599516SKenneth E. Jansen         LCtime = loctim(itseq)
54459599516SKenneth E. Jansen         dtol(:)= deltol(itseq,:)
54559599516SKenneth E. Jansen
54659599516SKenneth E. Jansen         call itrSetup ( y, acold )
54759599516SKenneth E. Jansenc
54859599516SKenneth E. Jansenc...initialize the coefficients for the impedance convolution,
54959599516SKenneth E. Jansenc   which are functions of alphaf so need to do it after itrSetup
55059599516SKenneth E. Jansen         if(numImpSrfs.gt.zero) then
55159599516SKenneth E. Jansen            call calcImpConvCoef (numImpSrfs, ntimeptpT)
55259599516SKenneth E. Jansen         endif
55359599516SKenneth E. Jansenc
55459599516SKenneth E. Jansenc...initialize the initial condition P(0)-RQ(0)-Pd(0) for RCR BC
55559599516SKenneth E. Jansenc   need ndsurf so should be after initNABI
55659599516SKenneth E. Jansen         if(numRCRSrfs.gt.zero) then
55759599516SKenneth E. Jansen            call calcRCRic(y,nsrflistRCR,numRCRSrfs)
55859599516SKenneth E. Jansen         endif
55959599516SKenneth E. Jansenc
56059599516SKenneth E. Jansenc  find the last solve of the flow in the step sequence so that we will
56159599516SKenneth E. Jansenc         know when we are at/near end of step
56259599516SKenneth E. Jansenc
56359599516SKenneth E. Jansenc         ilast=0
56459599516SKenneth E. Jansen         nitr=0  ! count number of flow solves in a step (# of iterations)
56559599516SKenneth E. Jansen         do i=1,seqsize
56659599516SKenneth E. Jansen            if(stepseq(i).eq.0) nitr=nitr+1
56759599516SKenneth E. Jansen         enddo
56859599516SKenneth E. Jansen
56959599516SKenneth E. Jansen         if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
57059599516SKenneth E. Jansen         tcorecp(:) = zero ! used in solfar.f (solflow)
57159599516SKenneth E. Jansen         tcorecpscal(:) = zero ! used in solfar.f (solflow)
57259599516SKenneth E. Jansen         if(myrank.eq.0)  then
57359599516SKenneth E. Jansen            tcorecp1 = TMRC()
57459599516SKenneth E. Jansen         endif
57559599516SKenneth E. Jansen
57659599516SKenneth E. Jansenc
57759599516SKenneth E. Jansenc.... loop through the time steps
57859599516SKenneth E. Jansenc
57959599516SKenneth E. Jansen         istop=0
58059599516SKenneth E. Jansen         rmub=datmat(1,2,1)
58159599516SKenneth E. Jansen         if(rmutarget.gt.0) then
58259599516SKenneth E. Jansen            rmue=rmutarget
58359599516SKenneth E. Jansen         else
58459599516SKenneth E. Jansen            rmue=datmat(1,2,1) ! keep constant
58559599516SKenneth E. Jansen         endif
58659599516SKenneth E. Jansen
58759599516SKenneth E. Jansen        if(iramp.eq.1) then
58859599516SKenneth E. Jansen            call BCprofileScale(vbc_prof,BC,yold) ! fix the yold values to the reset BC
58959599516SKenneth E. Jansen            isclr=1 ! fix scalar
59059599516SKenneth E. Jansen            do isclr=1,nsclr
59159599516SKenneth E. Jansen               call itrBCSclr(yold,ac,iBC,BC,iper,ilwork)
59259599516SKenneth E. Jansen            enddo
59359599516SKenneth E. Jansen        endif
59459599516SKenneth E. Jansen
59559599516SKenneth E. Jansen         do 2000 istp = 1, nstp
59659599516SKenneth E. Jansen           if(iramp.eq.1)
59759599516SKenneth E. Jansen     &        call BCprofileScale(vbc_prof,BC,yold)
59859599516SKenneth E. Jansen
59959599516SKenneth E. Jansen           call rerun_check(stopjob)
60032eed141SKenneth E. Jansen           if(myrank.eq.master) write(*,*)
60132eed141SKenneth E. Jansen     &         'stopjob,lstep,istep', stopjob,lstep,istep
60232eed141SKenneth E. Jansen           if(stopjob.eq.lstep) then
60332eed141SKenneth E. Jansen              stopjob=-2 ! this is the code to finish
60432eed141SKenneth E. Jansen             if ((irs .ge. 1) .and. (mod(lstep, ntout) .eq. 0)) then
60532eed141SKenneth E. Jansen                if(myrank.eq.master) write(*,*)
60632eed141SKenneth E. Jansen     &         'line 473 says last step written so exit'
60732eed141SKenneth E. Jansen                goto 2002  ! the step was written last step so just exit
60832eed141SKenneth E. Jansen             else
60932eed141SKenneth E. Jansen                if(myrank.eq.master)
61032eed141SKenneth E. Jansen     &         write(*,*) 'line 473 says last step not written'
61132eed141SKenneth E. Jansen                istep=nstp  ! have to do this so that solution will be written
61232eed141SKenneth E. Jansen                goto 2001
61332eed141SKenneth E. Jansen             endif
61432eed141SKenneth E. Jansen           endif
61559599516SKenneth E. Jansen
61659599516SKenneth E. Jansen            xi=istp*1.0/nstp
61759599516SKenneth E. Jansen            datmat(1,2,1)=rmub*(1.0-xi)+xi*rmue
61859599516SKenneth E. Jansenc            write(*,*) "current mol. visc = ", datmat(1,2,1)
61959599516SKenneth E. Jansenc.... if we have time varying boundary conditions update the values of BC.
62059599516SKenneth E. Jansenc     these will be for time step n+1 so use lstep+1
62159599516SKenneth E. Jansenc
62259599516SKenneth E. Jansen            if(itvn.gt.0) call BCint((lstep+1)*Delt(1), shp, shgl,
62359599516SKenneth E. Jansen     &                               shpb, shglb, x, BC, iBC)
62459599516SKenneth E. Jansen
62559599516SKenneth E. Jansenc
62659599516SKenneth E. Jansenc ... calculate the pressure contribution that depends on the history for the Imp. BC
62759599516SKenneth E. Jansenc
62859599516SKenneth E. Jansen            if(numImpSrfs.gt.0) then
62959599516SKenneth E. Jansen               call pHist(poldImp,QHistImp,ImpConvCoef,
63059599516SKenneth E. Jansen     &                    ntimeptpT,numImpSrfs)
63159599516SKenneth E. Jansen               if (myrank.eq.master)
63259599516SKenneth E. Jansen     &             write(8177,*) (poldImp(n), n=1,numImpSrfs)
63359599516SKenneth E. Jansen            endif
63459599516SKenneth E. Jansenc
63559599516SKenneth E. Jansenc ... calc the pressure contribution that depends on the history for the RCR BC
63659599516SKenneth E. Jansenc
63759599516SKenneth E. Jansen            if(numRCRSrfs.gt.0) then
63859599516SKenneth E. Jansen               call CalcHopRCR (Delt(itseq), lstep, numRCRSrfs)
63959599516SKenneth E. Jansen               call CalcRCRConvCoef(lstep,numRCRSrfs)
64059599516SKenneth E. Jansen               call pHist(poldRCR,QHistRCR,RCRConvCoef,nsteprcr,
64159599516SKenneth E. Jansen     &              numRCRSrfs)
64259599516SKenneth E. Jansen               if (myrank.eq.master)
64359599516SKenneth E. Jansen     &             write(8177,*) (poldRCR(n), n=1,numRCRSrfs)
64459599516SKenneth E. Jansen            endif
64559599516SKenneth E. Jansenc
64659599516SKenneth E. Jansenc Decay of scalars
64759599516SKenneth E. Jansenc
64859599516SKenneth E. Jansen           if(nsclr.gt.0 .and. tdecay.ne.1) then
64959599516SKenneth E. Jansen              yold(:,6:ndof)=y(:,6:ndof)*tdecay
65059599516SKenneth E. Jansen              BC(:,7:6+nsclr)= BC(:,7:6+nsclr)*tdecay
65159599516SKenneth E. Jansen           endif
65259599516SKenneth E. Jansen
65359599516SKenneth E. Jansen           if(nosource.eq.1) BC(:,7:6+nsclr)= BC(:,7:6+nsclr)*0.8
65459599516SKenneth E. Jansen
65559599516SKenneth E. Jansen
65659599516SKenneth E. Jansen            if(iLES.gt.0) then  !complicated stuff has moved to
65759599516SKenneth E. Jansen                                        !routine below
65859599516SKenneth E. Jansen               call lesmodels(yold,  acold,     shgl,      shp,
65959599516SKenneth E. Jansen     &                        iper,  ilwork,    rowp,      colm,
66059599516SKenneth E. Jansen     &                        nsons, ifath,     x,
66159599516SKenneth E. Jansen     &                        iBC,   BC)
66259599516SKenneth E. Jansen
66359599516SKenneth E. Jansen
66459599516SKenneth E. Jansen            endif
66559599516SKenneth E. Jansen
66659599516SKenneth E. Jansenc.... set traction BCs for modeled walls
66759599516SKenneth E. Jansenc
66859599516SKenneth E. Jansen            if (itwmod.ne.0) then
66959599516SKenneth E. Jansen               call asbwmod(yold,   acold,   x,      BC,     iBC,
67059599516SKenneth E. Jansen     &                      iper,   ilwork,  ifath,  velbar)
67159599516SKenneth E. Jansen            endif
67259599516SKenneth E. Jansen
67359599516SKenneth E. Jansen!MR CHANGE
67459599516SKenneth E. Jansenc
67559599516SKenneth E. Jansenc.... Determine whether the vorticity field needs to be computed for this time step or not
67659599516SKenneth E. Jansenc
67759599516SKenneth E. Jansen            icomputevort = 0
67859599516SKenneth E. Jansen            if (ivort == 1) then ! Print vorticity = True in solver.inp
67959599516SKenneth E. Jansen              ! We then compute the vorticity only if we
68059599516SKenneth E. Jansen              ! 1) we write an intermediate checkpoint
68159599516SKenneth E. Jansen              ! 2) we reach the last time step and write the last checkpoint
68259599516SKenneth E. Jansen              ! 3) we accumulate statistics in ybar for every time step
68359599516SKenneth E. Jansen              ! BEWARE: we need here lstep+1 and istep+1 because the lstep and
68459599516SKenneth E. Jansen              ! istep gets incremened after the flowsolve, further below
68559599516SKenneth E. Jansen              if (((irs .ge. 1) .and. (mod(lstep+1, ntout) .eq. 0)) .or.
68659599516SKenneth E. Jansen     &                   istep+1.eq.nstep(itseq) .or. ioybar == 1) then
68759599516SKenneth E. Jansen                icomputevort = 1
68859599516SKenneth E. Jansen              endif
68959599516SKenneth E. Jansen            endif
69059599516SKenneth E. Jansen
69159599516SKenneth E. Jansen!            write(*,*) 'icomputevort: ',icomputevort, ' - istep: ',
69259599516SKenneth E. Jansen!     &                istep,' - nstep(itseq):',nstep(itseq),'- lstep:',
69359599516SKenneth E. Jansen!     &                lstep, '- ntout:', ntout
69459599516SKenneth E. Jansen!MR CHANGE
69559599516SKenneth E. Jansen
69659599516SKenneth E. Jansenc
69759599516SKenneth E. Jansenc.... -----------------------> predictor phase <-----------------------
69859599516SKenneth E. Jansenc
69959599516SKenneth E. Jansen            call itrPredict(yold, y,   acold,  ac ,  uold,  u, iBC)
70059599516SKenneth E. Jansen            call itrBC (y,  ac,  iBC,  BC,  iper,ilwork)
70159599516SKenneth E. Jansen
70259599516SKenneth E. Jansen            if(nsolt.eq.1) then
70359599516SKenneth E. Jansen               isclr=0
70459599516SKenneth E. Jansen               call itrBCSclr (y, ac,  iBC, BC, iper, ilwork)
70559599516SKenneth E. Jansen            endif
70659599516SKenneth E. Jansen            do isclr=1,nsclr
70759599516SKenneth E. Jansen               call itrBCSclr (y, ac,  iBC, BC, iper, ilwork)
70859599516SKenneth E. Jansen            enddo
70959599516SKenneth E. Jansen            iter=0
71059599516SKenneth E. Jansen            ilss=0  ! this is a switch thrown on first solve of LS redistance
71159599516SKenneth E. Jansen            do istepc=1,seqsize
71259599516SKenneth E. Jansen               icode=stepseq(istepc)
71359599516SKenneth E. Jansen               if(mod(icode,5).eq.0) then ! this is a solve
71459599516SKenneth E. Jansen                  isolve=icode/10
71559599516SKenneth E. Jansen                  if(icode.eq.0) then ! flow solve (encoded as 0)
71659599516SKenneth E. Jansenc
71759599516SKenneth E. Jansen                     iter   = iter+1
71859599516SKenneth E. Jansen                     ifuncs(1)  = ifuncs(1) + 1
71959599516SKenneth E. Jansenc
72059599516SKenneth E. Jansen                     Force(1) = zero
72159599516SKenneth E. Jansen                     Force(2) = zero
72259599516SKenneth E. Jansen                     Force(3) = zero
72359599516SKenneth E. Jansen                     HFlux    = zero
72459599516SKenneth E. Jansen                     lhs = 1 - min(1,mod(ifuncs(1)-1,LHSupd(1)))
72559599516SKenneth E. Jansen
72659599516SKenneth E. Jansen                     call SolFlow(y,          ac,        u,
72759599516SKenneth E. Jansen     &                         yold,          acold,     uold,
72859599516SKenneth E. Jansen     &                         x,             iBC,
72959599516SKenneth E. Jansen     &                         BC,            res,
73059599516SKenneth E. Jansen     &                         nPermDims,     nTmpDims,  aperm,
73159599516SKenneth E. Jansen     &                         atemp,         iper,
73259599516SKenneth E. Jansen     &                         ilwork,        shp,       shgl,
73359599516SKenneth E. Jansen     &                         shpb,          shglb,     rowp,
73459599516SKenneth E. Jansen     &                         colm,          lhsK,      lhsP,
73559599516SKenneth E. Jansen     &                         solinc,        rerr,      tcorecp,
736*ae8d68e4SKenneth E. Jansen     &                         GradV,      sumtime,
737*ae8d68e4SKenneth E. Jansen     &                         svLS_lhs,     svLS_ls,  svLS_nFaces)
73859599516SKenneth E. Jansen
73959599516SKenneth E. Jansen                  else          ! scalar type solve
74059599516SKenneth E. Jansen                     if (icode.eq.5) then ! Solve for Temperature
74159599516SKenneth E. Jansen                                ! (encoded as (nsclr+1)*10)
74259599516SKenneth E. Jansen                        isclr=0
74359599516SKenneth E. Jansen                        ifuncs(2)  = ifuncs(2) + 1
74459599516SKenneth E. Jansen                        j=1
74559599516SKenneth E. Jansen                     else       ! solve a scalar  (encoded at isclr*10)
74659599516SKenneth E. Jansen                        isclr=isolve
74759599516SKenneth E. Jansen                        ifuncs(isclr+2)  = ifuncs(isclr+2) + 1
74859599516SKenneth E. Jansen                        j=isclr+nsolt
74959599516SKenneth E. Jansen                        if((iLSet.eq.2).and.(ilss.eq.0)
75059599516SKenneth E. Jansen     &                       .and.(isclr.eq.2)) then
75159599516SKenneth E. Jansen                           ilss=1 ! throw switch (once per step)
75259599516SKenneth E. Jansen                           y(:,7)=y(:,6) ! redistance field initialized
75359599516SKenneth E. Jansen                           ac(:,7)   = zero
75459599516SKenneth E. Jansen                           call itrBCSclr (  y,  ac,  iBC,  BC, iper,
75559599516SKenneth E. Jansen     &                          ilwork)
75659599516SKenneth E. Jansenc
75759599516SKenneth E. Jansenc....store the flow alpha, gamma parameter values and assigm them the
75859599516SKenneth E. Jansenc....Backward Euler parameters to solve the second levelset scalar
75959599516SKenneth E. Jansenc
76059599516SKenneth E. Jansen                           alfit=alfi
76159599516SKenneth E. Jansen                           gamit=gami
76259599516SKenneth E. Jansen                           almit=almi
76359599516SKenneth E. Jansen                           Deltt=Delt(1)
76459599516SKenneth E. Jansen                           Dtglt=Dtgl
76559599516SKenneth E. Jansen                           alfi = 1
76659599516SKenneth E. Jansen                           gami = 1
76759599516SKenneth E. Jansen                           almi = 1
76859599516SKenneth E. Jansenc     Delt(1)= Deltt ! Give a pseudo time step
76959599516SKenneth E. Jansen                           Dtgl = one / Delt(1)
77059599516SKenneth E. Jansen                        endif  ! level set eq. 2
77159599516SKenneth E. Jansen                     endif ! deciding between temperature and scalar
77259599516SKenneth E. Jansen
77359599516SKenneth E. Jansen                     lhs = 1 - min(1,mod(ifuncs(isclr+2)-1,
77459599516SKenneth E. Jansen     &                                   LHSupd(isclr+2)))
77559599516SKenneth E. Jansen
77659599516SKenneth E. Jansen                     call SolSclr(y,          ac,        u,
77759599516SKenneth E. Jansen     &                         yold,          acold,     uold,
77859599516SKenneth E. Jansen     &                         x,             iBC,
77959599516SKenneth E. Jansen     &                         BC,            nPermDimsS,nTmpDimsS,
78059599516SKenneth E. Jansen     &                         apermS(1,1,j), atempS,    iper,
78159599516SKenneth E. Jansen     &                         ilwork,        shp,       shgl,
78259599516SKenneth E. Jansen     &                         shpb,          shglb,     rowp,
78359599516SKenneth E. Jansen     &                         colm,          lhsS(1,j),
78459599516SKenneth E. Jansen     &                         solinc(1,isclr+5), tcorecpscal)
78559599516SKenneth E. Jansen
78659599516SKenneth E. Jansen
78759599516SKenneth E. Jansen                  endif         ! end of scalar type solve
78859599516SKenneth E. Jansen
78959599516SKenneth E. Jansen               else ! this is an update  (mod did not equal zero)
79059599516SKenneth E. Jansen                  iupdate=icode/10  ! what to update
79159599516SKenneth E. Jansen                  if(icode.eq.1) then !update flow
79259599516SKenneth E. Jansen                     call itrCorrect ( y,    ac,    u,   solinc, iBC)
79359599516SKenneth E. Jansen                     call itrBC (y,  ac,  iBC,  BC, iper, ilwork)
79459599516SKenneth E. Jansen                  else  ! update scalar
79559599516SKenneth E. Jansen                     isclr=iupdate  !unless
79659599516SKenneth E. Jansen                     if(icode.eq.6) isclr=0
79759599516SKenneth E. Jansen                     if(iRANS.lt.-100)then  ! RANS
79859599516SKenneth E. Jansen                        call itrCorrectSclrPos(y,ac,solinc(1,isclr+5))
79959599516SKenneth E. Jansen                     else
80059599516SKenneth E. Jansen                        call itrCorrectSclr (y, ac, solinc(1,isclr+5))
80159599516SKenneth E. Jansen                     endif
80259599516SKenneth E. Jansen                     if (ilset.eq.2 .and. isclr.eq.2)  then
80359599516SKenneth E. Jansen                        if (ivconstraint .eq. 1) then
80459599516SKenneth E. Jansen                           call itrBCSclr (  y,  ac,  iBC,  BC, iper,
80559599516SKenneth E. Jansen     &                          ilwork)
80659599516SKenneth E. Jansenc
80759599516SKenneth E. Jansenc ... applying the volume constraint on second level set scalar
80859599516SKenneth E. Jansenc
80959599516SKenneth E. Jansen                           call solvecon (y,    x,      iBC,  BC,
81059599516SKenneth E. Jansen     &                          iper, ilwork, shp,  shgl)
81159599516SKenneth E. Jansenc
81259599516SKenneth E. Jansen                        endif   ! end of volume constraint calculations
81359599516SKenneth E. Jansen                     endif      ! end of redistance calculations
81459599516SKenneth E. Jansenc
81559599516SKenneth E. Jansen                        call itrBCSclr (  y,  ac,  iBC,  BC, iper,
81659599516SKenneth E. Jansen     &                       ilwork)
81759599516SKenneth E. Jansen                     endif      ! end of flow or scalar update
81859599516SKenneth E. Jansen                  endif         ! end of switch between solve or update
81959599516SKenneth E. Jansen               enddo            ! loop over sequence in step
82059599516SKenneth E. Jansenc
82159599516SKenneth E. Jansenc
82259599516SKenneth E. Jansenc.... obtain the time average statistics
82359599516SKenneth E. Jansenc
82459599516SKenneth E. Jansen            if (ioform .eq. 2) then
82559599516SKenneth E. Jansen
82659599516SKenneth E. Jansen               call stsGetStats( y,      yold,     ac,     acold,
82759599516SKenneth E. Jansen     &                           u,      uold,     x,
82859599516SKenneth E. Jansen     &                           shp,    shgl,     shpb,   shglb,
82959599516SKenneth E. Jansen     &                           iBC,    BC,       iper,   ilwork,
83059599516SKenneth E. Jansen     &                           rowp,   colm,     lhsK,   lhsP )
83159599516SKenneth E. Jansen            endif
83259599516SKenneth E. Jansen
83359599516SKenneth E. Jansenc
83459599516SKenneth E. Jansenc  Find the solution at the end of the timestep and move it to old
83559599516SKenneth E. Jansenc
83659599516SKenneth E. Jansenc
83759599516SKenneth E. Jansenc ...First to reassign the parameters for the original time integrator scheme
83859599516SKenneth E. Jansenc
83959599516SKenneth E. Jansen            if((iLSet.eq.2).and.(ilss.eq.1)) then
84059599516SKenneth E. Jansen               alfi =alfit
84159599516SKenneth E. Jansen               gami =gamit
84259599516SKenneth E. Jansen               almi =almit
84359599516SKenneth E. Jansen               Delt(1)=Deltt
84459599516SKenneth E. Jansen               Dtgl =Dtglt
84559599516SKenneth E. Jansen            endif
84659599516SKenneth E. Jansen            call itrUpdate( yold,  acold,   uold,  y,    ac,   u)
84759599516SKenneth E. Jansen            call itrBC (yold, acold,  iBC,  BC,  iper,ilwork)
84859599516SKenneth E. Jansen
84959599516SKenneth E. Jansen            istep = istep + 1
85059599516SKenneth E. Jansen            lstep = lstep + 1
85159599516SKenneth E. Jansenc
85259599516SKenneth E. Jansenc ..  Print memory consumption on BGQ
85359599516SKenneth E. Jansenc
85459599516SKenneth E. Jansen            call printmeminfo("itrdrv"//char(0))
85559599516SKenneth E. Jansen
85659599516SKenneth E. Jansenc
85759599516SKenneth E. Jansenc ..  Compute vorticity
85859599516SKenneth E. Jansenc
85959599516SKenneth E. Jansen            if ( icomputevort == 1) then
86059599516SKenneth E. Jansen
86159599516SKenneth E. Jansen              ! vorticity components and magnitude
86259599516SKenneth E. Jansen              vorticity(:,1) = GradV(:,8)-GradV(:,6) !omega_x
86359599516SKenneth E. Jansen              vorticity(:,2) = GradV(:,3)-GradV(:,7) !omega_y
86459599516SKenneth E. Jansen              vorticity(:,3) = GradV(:,4)-GradV(:,2) !omega_z
86559599516SKenneth E. Jansen              vorticity(:,4) = sqrt(   vorticity(:,1)*vorticity(:,1)
86659599516SKenneth E. Jansen     &                               + vorticity(:,2)*vorticity(:,2)
86759599516SKenneth E. Jansen     &                               + vorticity(:,3)*vorticity(:,3) )
86859599516SKenneth E. Jansen              ! Q
86959599516SKenneth E. Jansen              strain(:,1) = GradV(:,1)                  !S11
87059599516SKenneth E. Jansen              strain(:,2) = 0.5*(GradV(:,2)+GradV(:,4)) !S12
87159599516SKenneth E. Jansen              strain(:,3) = 0.5*(GradV(:,3)+GradV(:,7)) !S13
87259599516SKenneth E. Jansen              strain(:,4) = GradV(:,5)                  !S22
87359599516SKenneth E. Jansen              strain(:,5) = 0.5*(GradV(:,6)+GradV(:,8)) !S23
87459599516SKenneth E. Jansen              strain(:,6) = GradV(:,9)                  !S33
87559599516SKenneth E. Jansen
87659599516SKenneth E. Jansen              vorticity(:,5) = 0.25*( vorticity(:,4)*vorticity(:,4)  !Q
87759599516SKenneth E. Jansen     &                            - 2.0*(      strain(:,1)*strain(:,1)
87859599516SKenneth E. Jansen     &                                    + 2* strain(:,2)*strain(:,2)
87959599516SKenneth E. Jansen     &                                    + 2* strain(:,3)*strain(:,3)
88059599516SKenneth E. Jansen     &                                    +    strain(:,4)*strain(:,4)
88159599516SKenneth E. Jansen     &                                    + 2* strain(:,5)*strain(:,5)
88259599516SKenneth E. Jansen     &                                    +    strain(:,6)*strain(:,6)))
88359599516SKenneth E. Jansen
88459599516SKenneth E. Jansen            endif
88559599516SKenneth E. Jansenc
886f32d06b0SKenneth E. Jansenc .. write out the instantaneous solution
88759599516SKenneth E. Jansenc
88832eed141SKenneth E. Jansen2001    continue  ! we could get here by 2001 label if user requested stop
88959599516SKenneth E. Jansen        if (((irs .ge. 1) .and. (mod(lstep, ntout) .eq. 0)) .or.
89059599516SKenneth E. Jansen     &      istep.eq.nstep(itseq)) then
89132eed141SKenneth E. Jansen
89232eed141SKenneth E. Jansen!so that we can see progress in force file close it so that it flushes
89332eed141SKenneth E. Jansen!and  then reopen in append mode
89432eed141SKenneth E. Jansen
89532eed141SKenneth E. Jansen           close(iforce)
89632eed141SKenneth E. Jansen           open (unit=iforce, file=fforce, position='append')
89759599516SKenneth E. Jansen
89859599516SKenneth E. Jansen!              Call to restar() will open restart file in write mode (and not append mode)
89959599516SKenneth E. Jansen!              that is needed as other fields are written in append mode
90032eed141SKenneth E. Jansen
90159599516SKenneth E. Jansen           call restar ('out ',  yold  ,ac)
90259599516SKenneth E. Jansen           if(ideformwall == 1) then
9034c3261e2SCameron Smith             if(myrank.eq.master) then
9044c3261e2SCameron Smith               write(*,*) 'ideformwall is 1 and is a dead code path... exiting'
9054c3261e2SCameron Smith             endif
9064c3261e2SCameron Smith             stop
90759599516SKenneth E. Jansen           endif
90859599516SKenneth E. Jansen
90959599516SKenneth E. Jansen           if(ivort == 1) then
91059599516SKenneth E. Jansen             call write_field(myrank,'a','vorticity',9,vorticity,
91159599516SKenneth E. Jansen     &                       'd',nshg,5,lstep)
91259599516SKenneth E. Jansen           endif
91359599516SKenneth E. Jansen
91459599516SKenneth E. Jansen           call printmeminfo("itrdrv after checkpoint"//char(0))
91532eed141SKenneth E. Jansen         else if(stopjob.eq.-2) then
91632eed141SKenneth E. Jansen           if(myrank.eq.master) then
91732eed141SKenneth E. Jansen             write(*,*) 'line 755 says no write before stopping'
91832eed141SKenneth E. Jansen             write(*,*) 'istep,nstep,irs',istep,nstep(itseq),irs
91959599516SKenneth E. Jansen           endif
920f32d06b0SKenneth E. Jansen        endif  !just the instantaneous stuff for videos
92132eed141SKenneth E. Jansenc
92232eed141SKenneth E. Jansenc.... compute the consistent boundary flux
92332eed141SKenneth E. Jansenc
92432eed141SKenneth E. Jansen            if(abs(itwmod).ne.1 .and. iowflux.eq.1) then
92532eed141SKenneth E. Jansen               call Bflux ( yold,      acold,      uold,    x,
92632eed141SKenneth E. Jansen     &                      shp,       shgl,       shpb,
92732eed141SKenneth E. Jansen     &                      shglb,     ilwork,     iBC,
92832eed141SKenneth E. Jansen     &                      BC,        iper,       wallssVec)
92932eed141SKenneth E. Jansen            endif
93032eed141SKenneth E. Jansen
93132eed141SKenneth E. Jansen           if(stopjob.eq.-2) goto 2003
93232eed141SKenneth E. Jansen
93359599516SKenneth E. Jansen
93459599516SKenneth E. Jansenc
93559599516SKenneth E. Jansenc ... update the flow history for the impedance convolution, filter it and write it out
93659599516SKenneth E. Jansenc
93759599516SKenneth E. Jansen            if(numImpSrfs.gt.zero) then
93859599516SKenneth E. Jansen               call UpdHistConv(y,nsrflistImp,numImpSrfs) !uses Delt(1)
93959599516SKenneth E. Jansen            endif
94059599516SKenneth E. Jansen
94159599516SKenneth E. Jansenc
94259599516SKenneth E. Jansenc ... update the flow history for the RCR convolution
94359599516SKenneth E. Jansenc
94459599516SKenneth E. Jansen            if(numRCRSrfs.gt.zero) then
94559599516SKenneth E. Jansen               call UpdHistConv(y,nsrflistRCR,numRCRSrfs) !uses lstep
94659599516SKenneth E. Jansen            endif
94759599516SKenneth E. Jansen
94859599516SKenneth E. Jansen
94959599516SKenneth E. Jansenc...  dump TIME SERIES
95059599516SKenneth E. Jansen
95159599516SKenneth E. Jansen            if (exts) then
95259599516SKenneth E. Jansen               if (mod(lstep-1,freq).eq.0) then
95359599516SKenneth E. Jansen
95459599516SKenneth E. Jansen                  if (numpe > 1) then
95559599516SKenneth E. Jansen                     do jj = 1, ntspts
95659599516SKenneth E. Jansen                        vartssoln((jj-1)*ndof+1:jj*ndof)=varts(jj,:)
95759599516SKenneth E. Jansen                        ivarts=zero
95859599516SKenneth E. Jansen                     enddo
95959599516SKenneth E. Jansen                     do k=1,ndof*ntspts
96059599516SKenneth E. Jansen                        if(vartssoln(k).ne.zero) ivarts(k)=1
96159599516SKenneth E. Jansen                     enddo
96259599516SKenneth E. Jansen
96359599516SKenneth E. Jansen!                     call MPI_REDUCE(vartssoln, vartssolng, ndof*ntspts,
96459599516SKenneth E. Jansen!     &                    MPI_DOUBLE_PRECISION, MPI_SUM, master,
96559599516SKenneth E. Jansen!     &                    MPI_COMM_WORLD, ierr)
96659599516SKenneth E. Jansen
96759599516SKenneth E. Jansen                     call MPI_BARRIER(MPI_COMM_WORLD, ierr)
96859599516SKenneth E. Jansen                     call MPI_ALLREDUCE(vartssoln, vartssolng,
96959599516SKenneth E. Jansen     &                    ndof*ntspts,
97059599516SKenneth E. Jansen     &                    MPI_DOUBLE_PRECISION, MPI_SUM,
97159599516SKenneth E. Jansen     &                    MPI_COMM_WORLD, ierr)
97259599516SKenneth E. Jansen
97359599516SKenneth E. Jansen!                     call MPI_REDUCE(ivarts, ivartsg, ndof*ntspts,
97459599516SKenneth E. Jansen!     &                    MPI_INTEGER, MPI_SUM, master,
97559599516SKenneth E. Jansen!     &                    MPI_COMM_WORLD, ierr)
97659599516SKenneth E. Jansen
97759599516SKenneth E. Jansen                     call MPI_BARRIER(MPI_COMM_WORLD, ierr)
97859599516SKenneth E. Jansen                     call MPI_ALLREDUCE(ivarts, ivartsg, ndof*ntspts,
97959599516SKenneth E. Jansen     &                    MPI_INTEGER, MPI_SUM,
98059599516SKenneth E. Jansen     &                    MPI_COMM_WORLD, ierr)
98159599516SKenneth E. Jansen
98259599516SKenneth E. Jansen!                     if (myrank.eq.zero) then
98359599516SKenneth E. Jansen                     do jj = 1, ntspts
98459599516SKenneth E. Jansen
98559599516SKenneth E. Jansen                        if(myrank .eq. iv_rank(jj)) then
98659599516SKenneth E. Jansen                           ! No need to update all varts components, only the one treated by the expected rank
98759599516SKenneth E. Jansen                           ! Note: keep varts as a vector, as multiple probes could be treated by one rank
98859599516SKenneth E. Jansen                           indxvarts = (jj-1)*ndof
98959599516SKenneth E. Jansen                           do k=1,ndof
99059599516SKenneth E. Jansen                              if(ivartsg(indxvarts+k).ne.0) then ! none of the vartssoln(parts) were non zero
99159599516SKenneth E. Jansen                                 varts(jj,k)=vartssolng(indxvarts+k)/
99259599516SKenneth E. Jansen     &                                             ivartsg(indxvarts+k)
99359599516SKenneth E. Jansen                              endif
99459599516SKenneth E. Jansen                           enddo
99559599516SKenneth E. Jansen                       endif !only if myrank eq iv_rank(jj)
99659599516SKenneth E. Jansen                     enddo
99759599516SKenneth E. Jansen!                     endif !only on master
99859599516SKenneth E. Jansen                  endif !only if numpe > 1
99959599516SKenneth E. Jansen
100059599516SKenneth E. Jansen!                  if (myrank.eq.zero) then
100159599516SKenneth E. Jansen                  do jj = 1, ntspts
100259599516SKenneth E. Jansen                     if(myrank .eq. iv_rank(jj)) then
100359599516SKenneth E. Jansen                        ifile = 1000+jj
100459599516SKenneth E. Jansen                        write(ifile,555) lstep, (varts(jj,k),k=1,ndof) !Beware of format 555 - check ndof
100559599516SKenneth E. Jansenc                        call flush(ifile)
100659599516SKenneth E. Jansen                        if (((irs .ge. 1) .and.
100759599516SKenneth E. Jansen     &                       (mod(lstep, ntout) .eq. 0))) then
100859599516SKenneth E. Jansen                           close(ifile)
100959599516SKenneth E. Jansen                           fvarts='varts/varts'
101059599516SKenneth E. Jansen                           fvarts=trim(fvarts)//trim(cname2(jj))
101159599516SKenneth E. Jansen                           fvarts=trim(fvarts)//trim(cname2(lskeep))
101259599516SKenneth E. Jansen                           fvarts=trim(fvarts)//'.dat'
101359599516SKenneth E. Jansen                           fvarts=trim(fvarts)
101459599516SKenneth E. Jansen                           open(unit=ifile, file=fvarts,
101559599516SKenneth E. Jansen     &                          position='append')
101659599516SKenneth E. Jansen                        endif !only when dumping restart
101759599516SKenneth E. Jansen                     endif
101859599516SKenneth E. Jansen                  enddo
101959599516SKenneth E. Jansen!                  endif !only on master
102059599516SKenneth E. Jansen
102159599516SKenneth E. Jansen                  varts(:,:) = zero ! reset the array for next step
102259599516SKenneth E. Jansen
102359599516SKenneth E. Jansen
102459599516SKenneth E. Jansen!555              format(i6,5(2x,E12.5e2))
102559599516SKenneth E. Jansen555               format(i6,6(2x,E20.12e2)) !assuming ndof = 6 here
102659599516SKenneth E. Jansen
102759599516SKenneth E. Jansen               endif
102859599516SKenneth E. Jansen            endif
102959599516SKenneth E. Jansen
103059599516SKenneth E. Jansenc
103159599516SKenneth E. Jansenc.... update and the aerodynamic forces
103259599516SKenneth E. Jansenc
103359599516SKenneth E. Jansen            call forces ( yold,  ilwork )
103459599516SKenneth E. Jansen
103559599516SKenneth E. Jansen            if((irscale.ge.0).or.(itwmod.gt.0))
103659599516SKenneth E. Jansen     &           call getvel (yold,     ilwork, iBC,
103759599516SKenneth E. Jansen     &                        nsons,    ifath, velbar)
103859599516SKenneth E. Jansen
103959599516SKenneth E. Jansen            if((irscale.ge.0).and.(myrank.eq.master)) then
104059599516SKenneth E. Jansen               call genscale(yold,       x,       iper,
104159599516SKenneth E. Jansen     &                       iBC,     ifath,   velbar,
104259599516SKenneth E. Jansen     &                       nsons)
104359599516SKenneth E. Jansen            endif
104459599516SKenneth E. Jansenc
104559599516SKenneth E. Jansenc....  print out results.
104659599516SKenneth E. Jansenc
104759599516SKenneth E. Jansen            ntoutv=max(ntout,100)   ! velb is not needed so often
104859599516SKenneth E. Jansen            if ((irs .ge. 1) .and. (mod(lstep, ntout) .eq. 0)) then
104959599516SKenneth E. Jansen               if( (mod(lstep, ntoutv) .eq. 0) .and.
105059599516SKenneth E. Jansen     &              ((irscale.ge.0).or.(itwmod.gt.0) .or.
105159599516SKenneth E. Jansen     &              ((nsonmax.eq.1).and.(iLES.gt.0))))
105259599516SKenneth E. Jansen     &              call rwvelb  ('out ',  velbar  ,ifail)
105359599516SKenneth E. Jansen            endif
105459599516SKenneth E. Jansenc
105559599516SKenneth E. Jansenc.... end of the NSTEP and NTSEQ loops
105659599516SKenneth E. Jansenc
105759599516SKenneth E. Jansen
105859599516SKenneth E. Jansen
105959599516SKenneth E. Jansenc
106059599516SKenneth E. Jansenc.... -------------------> error calculation  <-----------------
106159599516SKenneth E. Jansenc
106259599516SKenneth E. Jansen            if(ierrcalc.eq.1 .or. ioybar.eq.1) then
106359599516SKenneth E. Jansenc$$$c
106459599516SKenneth E. Jansenc$$$c compute average
106559599516SKenneth E. Jansenc$$$c
106659599516SKenneth E. Jansenc$$$               tfact=one/istep
106759599516SKenneth E. Jansenc$$$               ybar =tfact*yold + (one-tfact)*ybar
106859599516SKenneth E. Jansen
106959599516SKenneth E. Jansenc compute average
107059599516SKenneth E. Jansenc ybar(:,1:3) are average velocity components
107159599516SKenneth E. Jansenc ybar(:,4) is average pressure
107259599516SKenneth E. Jansenc ybar(:,5) is average speed
107359599516SKenneth E. Jansenc ybar(:,6:8) is average of sq. of each vel. component
107459599516SKenneth E. Jansenc ybar(:,9) is average of sq. of pressure
107559599516SKenneth E. Jansenc ybar(:,10:12) is average of cross vel. components : uv, uw and vw
107659599516SKenneth E. Jansenc averaging procedure justified only for identical time step sizes
107759599516SKenneth E. Jansenc ybar(:,13) is average of eddy viscosity
107859599516SKenneth E. Jansenc ybar(:,14:16) is average vorticity components
107959599516SKenneth E. Jansenc ybar(:,17) is average vorticity magnitude
108059599516SKenneth E. Jansenc istep is number of time step
108159599516SKenneth E. Jansenc
108259599516SKenneth E. Jansen               icollectybar = 0
108359599516SKenneth E. Jansen          if(nphasesincycle.eq.0 .or.
108459599516SKenneth E. Jansen     &            istep.gt.ncycles_startphaseavg*nstepsincycle) then
108559599516SKenneth E. Jansen                 icollectybar = 1
108659599516SKenneth E. Jansen                  if((istep-1).eq.ncycles_startphaseavg*nstepsincycle)
108759599516SKenneth E. Jansen     &               istepsinybar = 0 ! init. to zero in first cycle in avg.
108859599516SKenneth E. Jansen               endif
108959599516SKenneth E. Jansen
109059599516SKenneth E. Jansen               if(icollectybar.eq.1) then
109159599516SKenneth E. Jansen                  istepsinybar = istepsinybar+1
109259599516SKenneth E. Jansen                  tfact=one/istepsinybar
109359599516SKenneth E. Jansen
109459599516SKenneth E. Jansen                  if(myrank.eq.master .and. nphasesincycle.ne.0 .and.
109559599516SKenneth E. Jansen     &               mod((istep-1),nstepsincycle).eq.0)
109659599516SKenneth E. Jansen     &               write(*,*)'nsamples in phase average:',istepsinybar
109759599516SKenneth E. Jansen
109859599516SKenneth E. Jansenc ybar to contain the averaged ((u,v,w),p)-fields
109959599516SKenneth E. Jansenc and speed average, i.e., sqrt(u^2+v^2+w^2)
110059599516SKenneth E. Jansenc and avg. of sq. terms including
110159599516SKenneth E. Jansenc u^2, v^2, w^2, p^2 and cross terms of uv, uw and vw
110259599516SKenneth E. Jansen
110359599516SKenneth E. Jansen                  ybar(:,1) = tfact*yold(:,1) + (one-tfact)*ybar(:,1)
110459599516SKenneth E. Jansen                  ybar(:,2) = tfact*yold(:,2) + (one-tfact)*ybar(:,2)
110559599516SKenneth E. Jansen                  ybar(:,3) = tfact*yold(:,3) + (one-tfact)*ybar(:,3)
110659599516SKenneth E. Jansen                  ybar(:,4) = tfact*yold(:,4) + (one-tfact)*ybar(:,4)
110759599516SKenneth E. Jansen                  ybar(:,5) = tfact*sqrt(yold(:,1)**2+yold(:,2)**2+
110859599516SKenneth E. Jansen     &                        yold(:,3)**2) + (one-tfact)*ybar(:,5)
110959599516SKenneth E. Jansen                  ybar(:,6) = tfact*yold(:,1)**2 +
111059599516SKenneth E. Jansen     &                        (one-tfact)*ybar(:,6)
111159599516SKenneth E. Jansen                  ybar(:,7) = tfact*yold(:,2)**2 +
111259599516SKenneth E. Jansen     &                        (one-tfact)*ybar(:,7)
111359599516SKenneth E. Jansen                  ybar(:,8) = tfact*yold(:,3)**2 +
111459599516SKenneth E. Jansen     &                        (one-tfact)*ybar(:,8)
111559599516SKenneth E. Jansen                  ybar(:,9) = tfact*yold(:,4)**2 +
111659599516SKenneth E. Jansen     &                        (one-tfact)*ybar(:,9)
111759599516SKenneth E. Jansen                  ybar(:,10) = tfact*yold(:,1)*yold(:,2) + !uv
111859599516SKenneth E. Jansen     &                         (one-tfact)*ybar(:,10)
111959599516SKenneth E. Jansen                  ybar(:,11) = tfact*yold(:,1)*yold(:,3) + !uw
112059599516SKenneth E. Jansen     &                         (one-tfact)*ybar(:,11)
112159599516SKenneth E. Jansen                  ybar(:,12) = tfact*yold(:,2)*yold(:,3) + !vw
112259599516SKenneth E. Jansen     &                         (one-tfact)*ybar(:,12)
112359599516SKenneth E. Jansen!MR CHANGE
112459599516SKenneth E. Jansen                  if(nsclr.gt.0) !nut
112559599516SKenneth E. Jansen     &             ybar(:,13) = tfact*yold(:,6) + (one-tfact)*ybar(:,13)
112659599516SKenneth E. Jansen
112759599516SKenneth E. Jansen                  if(ivort == 1) then !vorticity
112859599516SKenneth E. Jansen                    ybar(:,14) = tfact*vorticity(:,1) +
112959599516SKenneth E. Jansen     &                           (one-tfact)*ybar(:,14)
113059599516SKenneth E. Jansen                    ybar(:,15) = tfact*vorticity(:,2) +
113159599516SKenneth E. Jansen     &                           (one-tfact)*ybar(:,15)
113259599516SKenneth E. Jansen                    ybar(:,16) = tfact*vorticity(:,3) +
113359599516SKenneth E. Jansen     &                           (one-tfact)*ybar(:,16)
113459599516SKenneth E. Jansen                    ybar(:,17) = tfact*vorticity(:,4) +
113559599516SKenneth E. Jansen     &                           (one-tfact)*ybar(:,17)
113659599516SKenneth E. Jansen                  endif
113759599516SKenneth E. Jansen
113859599516SKenneth E. Jansen                  if(abs(itwmod).ne.1 .and. iowflux.eq.1) then
113959599516SKenneth E. Jansen                    wallssVecBar(:,1) = tfact*wallssVec(:,1)
114059599516SKenneth E. Jansen     &                                  +(one-tfact)*wallssVecBar(:,1)
114159599516SKenneth E. Jansen                    wallssVecBar(:,2) = tfact*wallssVec(:,2)
114259599516SKenneth E. Jansen     &                                  +(one-tfact)*wallssVecBar(:,2)
114359599516SKenneth E. Jansen                    wallssVecBar(:,3) = tfact*wallssVec(:,3)
114459599516SKenneth E. Jansen     &                                  +(one-tfact)*wallssVecBar(:,3)
114559599516SKenneth E. Jansen                  endif
114659599516SKenneth E. Jansen!MR CHANGE END
114759599516SKenneth E. Jansen               endif
114859599516SKenneth E. Jansenc
114959599516SKenneth E. Jansenc compute phase average
115059599516SKenneth E. Jansenc
115159599516SKenneth E. Jansen               if(nphasesincycle.ne.0 .and.
115259599516SKenneth E. Jansen     &            istep.gt.ncycles_startphaseavg*nstepsincycle) then
115359599516SKenneth E. Jansen
115459599516SKenneth E. Jansenc beginning of cycle is considered as ncycles_startphaseavg*nstepsincycle+1
115559599516SKenneth E. Jansen                  if((istep-1).eq.ncycles_startphaseavg*nstepsincycle)
115659599516SKenneth E. Jansen     &               icyclesinavg = 0 ! init. to zero in first cycle in avg.
115759599516SKenneth E. Jansen
115859599516SKenneth E. Jansen                  ! find number of steps between phases
115959599516SKenneth E. Jansen                  nstepsbtwphase = nstepsincycle/nphasesincycle ! integer value
116059599516SKenneth E. Jansen                  if(mod(istep-1,nstepsincycle).eq.0) then
116159599516SKenneth E. Jansen                     iphase = 1 ! init. to one in beginning of every cycle
116259599516SKenneth E. Jansen                     icyclesinavg = icyclesinavg + 1
116359599516SKenneth E. Jansen                  endif
116459599516SKenneth E. Jansen
116559599516SKenneth E. Jansen                  icollectphase = 0
116659599516SKenneth E. Jansen                  istepincycle = mod(istep,nstepsincycle)
116759599516SKenneth E. Jansen                  if(istepincycle.eq.0) istepincycle=nstepsincycle
116859599516SKenneth E. Jansen                  if(istepincycle.eq.iphase*nstepsbtwphase) then
116959599516SKenneth E. Jansen                     icollectphase = 1
117059599516SKenneth E. Jansen                     iphase = iphase+1 ! use 'iphase-1' below
117159599516SKenneth E. Jansen                  endif
117259599516SKenneth E. Jansen
117359599516SKenneth E. Jansen                  if(icollectphase.eq.1) then
117459599516SKenneth E. Jansen                     tfactphase = one/icyclesinavg
117559599516SKenneth E. Jansen
117659599516SKenneth E. Jansen                     if(myrank.eq.master) then
117759599516SKenneth E. Jansen                       write(*,*) 'nsamples in phase ',iphase-1,': ',
117859599516SKenneth E. Jansen     &                             icyclesinavg
117959599516SKenneth E. Jansen                     endif
118059599516SKenneth E. Jansen
118159599516SKenneth E. Jansen                     yphbar(:,1,iphase-1) = tfactphase*yold(:,1) +
118259599516SKenneth E. Jansen     &                          (one-tfactphase)*yphbar(:,1,iphase-1)
118359599516SKenneth E. Jansen                     yphbar(:,2,iphase-1) = tfactphase*yold(:,2) +
118459599516SKenneth E. Jansen     &                          (one-tfactphase)*yphbar(:,2,iphase-1)
118559599516SKenneth E. Jansen                     yphbar(:,3,iphase-1) = tfactphase*yold(:,3) +
118659599516SKenneth E. Jansen     &                          (one-tfactphase)*yphbar(:,3,iphase-1)
118759599516SKenneth E. Jansen                     yphbar(:,4,iphase-1) = tfactphase*yold(:,4) +
118859599516SKenneth E. Jansen     &                          (one-tfactphase)*yphbar(:,4,iphase-1)
118959599516SKenneth E. Jansen                     yphbar(:,5,iphase-1) = tfactphase*sqrt(yold(:,1)**2
119059599516SKenneth E. Jansen     &                          +yold(:,2)**2+yold(:,3)**2) +
119159599516SKenneth E. Jansen     &                          (one-tfactphase)*yphbar(:,5,iphase-1)
119259599516SKenneth E. Jansen!MR CHANGE
119359599516SKenneth E. Jansen                     yphbar(:,6,iphase-1) =
119459599516SKenneth E. Jansen     &                              tfactphase*yold(:,1)*yold(:,1)
119559599516SKenneth E. Jansen     &                           +(one-tfactphase)*yphbar(:,6,iphase-1)
119659599516SKenneth E. Jansen
119759599516SKenneth E. Jansen                     yphbar(:,7,iphase-1) =
119859599516SKenneth E. Jansen     &                              tfactphase*yold(:,1)*yold(:,2)
119959599516SKenneth E. Jansen     &                           +(one-tfactphase)*yphbar(:,7,iphase-1)
120059599516SKenneth E. Jansen
120159599516SKenneth E. Jansen                     yphbar(:,8,iphase-1) =
120259599516SKenneth E. Jansen     &                              tfactphase*yold(:,1)*yold(:,3)
120359599516SKenneth E. Jansen     &                           +(one-tfactphase)*yphbar(:,8,iphase-1)
120459599516SKenneth E. Jansen
120559599516SKenneth E. Jansen                     yphbar(:,9,iphase-1) =
120659599516SKenneth E. Jansen     &                              tfactphase*yold(:,2)*yold(:,2)
120759599516SKenneth E. Jansen     &                           +(one-tfactphase)*yphbar(:,9,iphase-1)
120859599516SKenneth E. Jansen
120959599516SKenneth E. Jansen                     yphbar(:,10,iphase-1) =
121059599516SKenneth E. Jansen     &                              tfactphase*yold(:,2)*yold(:,3)
121159599516SKenneth E. Jansen     &                           +(one-tfactphase)*yphbar(:,10,iphase-1)
121259599516SKenneth E. Jansen
121359599516SKenneth E. Jansen                     yphbar(:,11,iphase-1) =
121459599516SKenneth E. Jansen     &                              tfactphase*yold(:,3)*yold(:,3)
121559599516SKenneth E. Jansen     &                           +(one-tfactphase)*yphbar(:,11,iphase-1)
121659599516SKenneth E. Jansen
121759599516SKenneth E. Jansen                     if(ivort == 1) then
121859599516SKenneth E. Jansen                       yphbar(:,12,iphase-1) =
121959599516SKenneth E. Jansen     &                              tfactphase*vorticity(:,1)
122059599516SKenneth E. Jansen     &                           +(one-tfactphase)*yphbar(:,12,iphase-1)
122159599516SKenneth E. Jansen                       yphbar(:,13,iphase-1) =
122259599516SKenneth E. Jansen     &                              tfactphase*vorticity(:,2)
122359599516SKenneth E. Jansen     &                           +(one-tfactphase)*yphbar(:,13,iphase-1)
122459599516SKenneth E. Jansen                       yphbar(:,14,iphase-1) =
122559599516SKenneth E. Jansen     &                              tfactphase*vorticity(:,3)
122659599516SKenneth E. Jansen     &                           +(one-tfactphase)*yphbar(:,14,iphase-1)
122759599516SKenneth E. Jansen                       yphbar(:,15,iphase-1) =
122859599516SKenneth E. Jansen     &                              tfactphase*vorticity(:,4)
122959599516SKenneth E. Jansen     &                           +(one-tfactphase)*yphbar(:,15,iphase-1)
123059599516SKenneth E. Jansen                    endif
123159599516SKenneth E. Jansen!MR CHANGE END
123259599516SKenneth E. Jansen                  endif
123359599516SKenneth E. Jansen               endif
123459599516SKenneth E. Jansenc
123559599516SKenneth E. Jansenc compute rms
123659599516SKenneth E. Jansenc
123759599516SKenneth E. Jansen               if(icollectybar.eq.1) then
123859599516SKenneth E. Jansen                  rerr(:, 7)=rerr(:, 7)+(yold(:,1)-ybar(:,1))**2
123959599516SKenneth E. Jansen                  rerr(:, 8)=rerr(:, 8)+(yold(:,2)-ybar(:,2))**2
124059599516SKenneth E. Jansen                  rerr(:, 9)=rerr(:, 9)+(yold(:,3)-ybar(:,3))**2
124159599516SKenneth E. Jansen                  rerr(:,10)=rerr(:,10)+(yold(:,4)-ybar(:,4))**2
124259599516SKenneth E. Jansen               endif
124359599516SKenneth E. Jansen            endif
124432eed141SKenneth E. Jansen 2003       continue ! we get here if stopjob equals lstep and this jumped over
124532eed141SKenneth E. Jansen!           the statistics computation because we have no new data to average in
124632eed141SKenneth E. Jansen!           rather we are just trying to output the last state that was not already
124732eed141SKenneth E. Jansen!           written
124832eed141SKenneth E. Jansenc
124932eed141SKenneth E. Jansenc.... ---------------------->  Complete Restart  Processing  <----------------------
125032eed141SKenneth E. Jansenc
125132eed141SKenneth E. Jansen!   for now it is the same frequency but need to change this
125232eed141SKenneth E. Jansen!   soon.... but don't forget to change the field counter in
125332eed141SKenneth E. Jansen!  new_interface.cc
125432eed141SKenneth E. Jansen!
125532eed141SKenneth E. Jansen        if (((irs .ge. 1) .and. (mod(lstep, ntout) .eq. 0)) .or.
125632eed141SKenneth E. Jansen     &      istep.eq.nstep(itseq)) then
125732eed141SKenneth E. Jansen          if ((irs .ge. 1) .and. ((mod(lstep, ntout) .ne. 0) .or.
125832eed141SKenneth E. Jansen     &         (nstp .eq. 0))) then
125932eed141SKenneth E. Jansen             if(
126032eed141SKenneth E. Jansen     &          ((irscale.ge.0).or.(itwmod.gt.0) .or.
126132eed141SKenneth E. Jansen     &          ((nsonmax.eq.1).and.iLES.gt.0)))
126232eed141SKenneth E. Jansen     &          call rwvelb  ('out ',  velbar  ,ifail)
126332eed141SKenneth E. Jansen          endif
126459599516SKenneth E. Jansen
126532eed141SKenneth E. Jansen          lesId   = numeqns(1)
126632eed141SKenneth E. Jansen          if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
126732eed141SKenneth E. Jansen          if(myrank.eq.0)  then
126832eed141SKenneth E. Jansen            tcormr1 = TMRC()
126932eed141SKenneth E. Jansen          endif
1270c9a96f21SKenneth E. Jansen          if(nsolflow.eq.1) then
127132eed141SKenneth E. Jansen           call saveLesRestart( lesId,  aperm , nshg, myrank, lstep,
127232eed141SKenneth E. Jansen     &                    nPermDims )
127332eed141SKenneth E. Jansen           if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
127432eed141SKenneth E. Jansen           if(myrank.eq.0)  then
127532eed141SKenneth E. Jansen            tcormr2 = TMRC()
127632eed141SKenneth E. Jansen            write(6,*) 'call saveLesRestart for projection and'//
127732eed141SKenneth E. Jansen     &           'pressure projection vectors', tcormr2-tcormr1
127832eed141SKenneth E. Jansen           endif
1279c9a96f21SKenneth E. Jansen          endif
128032eed141SKenneth E. Jansen
128132eed141SKenneth E. Jansen          if(ierrcalc.eq.1) then
128232eed141SKenneth E. Jansenc
128332eed141SKenneth E. Jansenc.....smooth the error indicators
128432eed141SKenneth E. Jansenc
128532eed141SKenneth E. Jansen            do i=1,ierrsmooth
128632eed141SKenneth E. Jansen              call errsmooth( rerr, x, iper, ilwork, shp, shgl, iBC )
128732eed141SKenneth E. Jansen            end do
128832eed141SKenneth E. Jansen            if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
128932eed141SKenneth E. Jansen            if(myrank.eq.0)  then
129032eed141SKenneth E. Jansen              tcormr1 = TMRC()
129132eed141SKenneth E. Jansen            endif
129232eed141SKenneth E. Jansen            call write_error(myrank, lstep, nshg, 10, rerr )
129332eed141SKenneth E. Jansen            if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
129432eed141SKenneth E. Jansen            if(myrank.eq.0)  then
129532eed141SKenneth E. Jansen              tcormr2 = TMRC()
129632eed141SKenneth E. Jansen              write(6,*) 'Time to write the error fields to the disks',
129732eed141SKenneth E. Jansen     &            tcormr2-tcormr1
129832eed141SKenneth E. Jansen            endif
129932eed141SKenneth E. Jansen          endif ! ierrcalc
130032eed141SKenneth E. Jansen
130132eed141SKenneth E. Jansen          if(ioybar.eq.1) then
130232eed141SKenneth E. Jansen            if(ivort == 1) then
130332eed141SKenneth E. Jansen              call write_field(myrank,'a','ybar',4,
130432eed141SKenneth E. Jansen     &                  ybar,'d',nshg,17,lstep)
130532eed141SKenneth E. Jansen            else
130632eed141SKenneth E. Jansen              call write_field(myrank,'a','ybar',4,
130732eed141SKenneth E. Jansen     &                ybar,'d',nshg,13,lstep)
130832eed141SKenneth E. Jansen            endif
130932eed141SKenneth E. Jansen
131032eed141SKenneth E. Jansen            if(abs(itwmod).ne.1 .and. iowflux.eq.1) then
131132eed141SKenneth E. Jansen              call write_field(myrank,'a','wssbar',6,
131232eed141SKenneth E. Jansen     &             wallssVecBar,'d',nshg,3,lstep)
131332eed141SKenneth E. Jansen            endif
131432eed141SKenneth E. Jansen
131532eed141SKenneth E. Jansen            if(nphasesincycle .gt. 0) then
131632eed141SKenneth E. Jansen              if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
131732eed141SKenneth E. Jansen              if(myrank.eq.0)  then
131832eed141SKenneth E. Jansen                tcormr1 = TMRC()
131932eed141SKenneth E. Jansen              endif
132032eed141SKenneth E. Jansen              do iphase=1,nphasesincycle
132132eed141SKenneth E. Jansen                if(ivort == 1) then
132232eed141SKenneth E. Jansen                 call write_phavg2(myrank,'a','phase_average',13,iphase,
132332eed141SKenneth E. Jansen     &              nphasesincycle,yphbar(:,:,iphase),'d',nshg,15,lstep)
132432eed141SKenneth E. Jansen                else
132532eed141SKenneth E. Jansen                 call write_phavg2(myrank,'a','phase_average',13,iphase,
132632eed141SKenneth E. Jansen     &              nphasesincycle,yphbar(:,:,iphase),'d',nshg,11,lstep)
132732eed141SKenneth E. Jansen                endif
132832eed141SKenneth E. Jansen              end do
132932eed141SKenneth E. Jansen              if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
133032eed141SKenneth E. Jansen              if(myrank.eq.0)  then
133132eed141SKenneth E. Jansen                tcormr2 = TMRC()
133232eed141SKenneth E. Jansen                write(6,*) 'write all phase avg to the disks = ',
133332eed141SKenneth E. Jansen     &                tcormr2-tcormr1
133432eed141SKenneth E. Jansen              endif
133532eed141SKenneth E. Jansen            endif !nphasesincyle
133632eed141SKenneth E. Jansen          endif !ioybar
133732eed141SKenneth E. Jansen
133832eed141SKenneth E. Jansen          if ( ( ihessian .eq. 1 ) .and. ( numpe < 2 )  )then
133932eed141SKenneth E. Jansen            uhess = zero
134032eed141SKenneth E. Jansen            gradu = zero
134132eed141SKenneth E. Jansen            tf = zero
134232eed141SKenneth E. Jansen
134332eed141SKenneth E. Jansen            do ku=1,nshg
134432eed141SKenneth E. Jansen              tf(ku,1) = x(ku,1)**3
134532eed141SKenneth E. Jansen            end do
134632eed141SKenneth E. Jansen            call hessian( yold, x,     shp,  shgl,   iBC,
134732eed141SKenneth E. Jansen     &              shpb, shglb, iper, ilwork, uhess, gradu )
134832eed141SKenneth E. Jansen
134932eed141SKenneth E. Jansen            call write_hessian( uhess, gradu, nshg )
135032eed141SKenneth E. Jansen          endif
135132eed141SKenneth E. Jansen
135232eed141SKenneth E. Jansen          if(iRANS.lt.0) then
135332eed141SKenneth E. Jansen            if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
135432eed141SKenneth E. Jansen            if(myrank.eq.0)  then
135532eed141SKenneth E. Jansen              tcormr1 = TMRC()
135632eed141SKenneth E. Jansen            endif
135732eed141SKenneth E. Jansen            call write_field(myrank,'a','dwal',4,d2wall,'d',
135832eed141SKenneth E. Jansen     &                       nshg,1,lstep)
135932eed141SKenneth E. Jansen            if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
136032eed141SKenneth E. Jansen            if(myrank.eq.0)  then
136132eed141SKenneth E. Jansen              tcormr2 = TMRC()
136232eed141SKenneth E. Jansen              write(6,*) 'Time to write dwal to the disks = ',
136332eed141SKenneth E. Jansen     &        tcormr2-tcormr1
136432eed141SKenneth E. Jansen            endif
136532eed141SKenneth E. Jansen          endif !iRANS
136632eed141SKenneth E. Jansen
136732eed141SKenneth E. Jansen        endif ! write out complete restart state
136832eed141SKenneth E. Jansen        !next 2 lines are two ways to end early
136932eed141SKenneth E. Jansen        if(stopjob.eq.-2) goto 2002
137032eed141SKenneth E. Jansen        if(istop.eq.1000) goto 2002 ! stop when delta small (see rstatic)
137159599516SKenneth E. Jansen 2000 continue
137232eed141SKenneth E. Jansen 2002 continue
137332eed141SKenneth E. Jansen
1374f32d06b0SKenneth E. Jansen! done with time stepping so deallocate fields already written
137532eed141SKenneth E. Jansen!
137632eed141SKenneth E. Jansen          if(ioybar.eq.1) then
137732eed141SKenneth E. Jansen            deallocate(ybar)
137832eed141SKenneth E. Jansen            if(abs(itwmod).ne.1 .and. iowflux.eq.1) then
137932eed141SKenneth E. Jansen              deallocate(wallssVecbar)
138032eed141SKenneth E. Jansen            endif
138132eed141SKenneth E. Jansen            if(nphasesincycle .gt. 0) then
138232eed141SKenneth E. Jansen              deallocate(yphbar)
138332eed141SKenneth E. Jansen            endif !nphasesincyle
138432eed141SKenneth E. Jansen          endif !ioybar
138532eed141SKenneth E. Jansen          if(ivort == 1) then
138632eed141SKenneth E. Jansen            deallocate(strain,vorticity)
138732eed141SKenneth E. Jansen          endif
138832eed141SKenneth E. Jansen          if(abs(itwmod).ne.1 .and. iowflux.eq.1) then
138932eed141SKenneth E. Jansen            deallocate(wallssVec)
139032eed141SKenneth E. Jansen          endif
139132eed141SKenneth E. Jansen          if(iRANS.lt.0) then
139232eed141SKenneth E. Jansen            deallocate(d2wall)
139332eed141SKenneth E. Jansen          endif
139459599516SKenneth E. Jansen
139559599516SKenneth E. Jansen
139659599516SKenneth E. JansenCAD         tcorecp2 = second(0)
139759599516SKenneth E. JansenCAD         tcorewc2 = second(-1)
139859599516SKenneth E. Jansen
139959599516SKenneth E. JansenCAD         write(6,*) 'T(core) cpu-wallclock = ',tcorecp2-tcorecp1,
140059599516SKenneth E. JansenCAD     &                                        tcorewc2-tcorewc1
140159599516SKenneth E. Jansen
140259599516SKenneth E. Jansen         if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
140359599516SKenneth E. Jansen         if(myrank.eq.0)  then
140459599516SKenneth E. Jansen            tcorecp2 = TMRC()
140559599516SKenneth E. Jansen             write(6,*) 'T(core) cpu = ',tcorecp2-tcorecp1
140659599516SKenneth E. Jansen             write(6,*) '(Elm. form.',tcorecp(1),
140759599516SKenneth E. Jansen     &                    ',Lin. alg. sol.',tcorecp(2),')'
140859599516SKenneth E. Jansen             write(6,*) '(Elm. form. Scal.',tcorecpscal(1),
140959599516SKenneth E. Jansen     &                   ',Lin. alg. sol. Scal.',tcorecpscal(2),')'
141059599516SKenneth E. Jansen             write(6,*) ''
141159599516SKenneth E. Jansen
141259599516SKenneth E. Jansen         endif
141359599516SKenneth E. Jansen
141459599516SKenneth E. Jansen         call print_system_stats(tcorecp, tcorecpscal)
141559599516SKenneth E. Jansen         call print_mesh_stats()
141659599516SKenneth E. Jansen         call print_mpi_stats()
141759599516SKenneth E. Jansen         if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
141859599516SKenneth E. Jansen!         return
141959599516SKenneth E. Jansenc         call MPI_Finalize()
142059599516SKenneth E. Jansenc         call MPI_ABORT(MPI_COMM_WORLD, ierr)
142159599516SKenneth E. Jansen
142259599516SKenneth E. Jansen 3000 continue
142359599516SKenneth E. Jansen
142459599516SKenneth E. Jansen
142559599516SKenneth E. Jansenc
142659599516SKenneth E. Jansenc.... close history and aerodynamic forces files
142759599516SKenneth E. Jansenc
142859599516SKenneth E. Jansen      if (myrank .eq. master) then
142959599516SKenneth E. Jansen!         close (ihist)
143059599516SKenneth E. Jansen         close (iforce)
143159599516SKenneth E. Jansen         close(76)
143259599516SKenneth E. Jansen         if(numImpSrfs.gt.0 .or. numRCRSrfs.gt.0) then
143359599516SKenneth E. Jansen            close (8177)
143459599516SKenneth E. Jansen         endif
143559599516SKenneth E. Jansen      endif
143659599516SKenneth E. Jansenc
143759599516SKenneth E. Jansenc.... close varts file for probes
143859599516SKenneth E. Jansenc
143959599516SKenneth E. Jansen      if(exts) then
144059599516SKenneth E. Jansen        do jj=1,ntspts
144159599516SKenneth E. Jansen          if (myrank == iv_rank(jj)) then
144259599516SKenneth E. Jansen            close(1000+jj)
144359599516SKenneth E. Jansen          endif
144459599516SKenneth E. Jansen        enddo
144559599516SKenneth E. Jansen        deallocate (ivarts)
144659599516SKenneth E. Jansen        deallocate (ivartsg)
144759599516SKenneth E. Jansen        deallocate (iv_rank)
144859599516SKenneth E. Jansen        deallocate (vartssoln)
144959599516SKenneth E. Jansen        deallocate (vartssolng)
145059599516SKenneth E. Jansen      endif
145159599516SKenneth E. Jansen
145259599516SKenneth E. Jansen!MR CHANGE
145359599516SKenneth E. Jansen      if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
145459599516SKenneth E. Jansen      if(myrank.eq.0)  then
145559599516SKenneth E. Jansen          write(*,*) 'itrdrv - done with aerodynamic forces'
145659599516SKenneth E. Jansen      endif
145759599516SKenneth E. Jansen!MR CHANGE
145859599516SKenneth E. Jansen
145959599516SKenneth E. Jansen      do isrf = 0,MAXSURF
146059599516SKenneth E. Jansen!        if ( nsrflist(isrf).ne.0 ) then
146159599516SKenneth E. Jansen        if ( nsrflist(isrf).ne.0 .and.
146259599516SKenneth E. Jansen     &                     myrank.eq.irankfilesforce(isrf)) then
146359599516SKenneth E. Jansen          iunit=60+isrf
146459599516SKenneth E. Jansen          close(iunit)
146559599516SKenneth E. Jansen        endif
146659599516SKenneth E. Jansen      enddo
146759599516SKenneth E. Jansen
146859599516SKenneth E. Jansen!MR CHANGE
146959599516SKenneth E. Jansen      if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
147059599516SKenneth E. Jansen      if(myrank.eq.0)  then
147159599516SKenneth E. Jansen          write(*,*) 'itrdrv - done with MAXSURF'
147259599516SKenneth E. Jansen      endif
147359599516SKenneth E. Jansen!MR CHANGE
147459599516SKenneth E. Jansen
147559599516SKenneth E. Jansen
147659599516SKenneth E. Jansen 5    format(1X,F15.10,3X,F15.10,3X,F15.10,3X,F15.10)
147759599516SKenneth E. Jansen 444  format(6(2x,e14.7))
147859599516SKenneth E. Jansenc
147959599516SKenneth E. Jansenc.... end
148059599516SKenneth E. Jansenc
148159599516SKenneth E. Jansen      if(nsolflow.eq.1) then
148259599516SKenneth E. Jansen         deallocate (lhsK)
148359599516SKenneth E. Jansen         deallocate (lhsP)
1484*ae8d68e4SKenneth E. Jansen         IF (svLSFlag .NE. 1) THEN
148559599516SKenneth E. Jansen         deallocate (aperm)
148659599516SKenneth E. Jansen         deallocate (atemp)
1487*ae8d68e4SKenneth E. Jansen         ENDIF
148859599516SKenneth E. Jansen      endif
148959599516SKenneth E. Jansen      if(nsclrsol.gt.0) then
149059599516SKenneth E. Jansen         deallocate (lhsS)
149159599516SKenneth E. Jansen         deallocate (apermS)
149259599516SKenneth E. Jansen         deallocate (atempS)
149359599516SKenneth E. Jansen      endif
149459599516SKenneth E. Jansen
149559599516SKenneth E. Jansen      if(iabc==1) deallocate(acs)
149659599516SKenneth E. Jansen
149759599516SKenneth E. Jansen!MR CHANGE
149859599516SKenneth E. Jansen      if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr)
149959599516SKenneth E. Jansen      if(myrank.eq.0)  then
150059599516SKenneth E. Jansen          write(*,*) 'itrdrv - done - BACK TO process.f'
150159599516SKenneth E. Jansen      endif
150259599516SKenneth E. Jansen!MR CHANGE
150359599516SKenneth E. Jansen
150459599516SKenneth E. Jansen
150559599516SKenneth E. Jansen
150659599516SKenneth E. Jansen      return
150759599516SKenneth E. Jansen      end
150859599516SKenneth E. Jansen
150959599516SKenneth E. Jansen      subroutine lesmodels(y,     ac,        shgl,      shp,
151059599516SKenneth E. Jansen     &                     iper,  ilwork,    rowp,      colm,
151159599516SKenneth E. Jansen     &                     nsons, ifath,     x,
151259599516SKenneth E. Jansen     &                     iBC,   BC)
151359599516SKenneth E. Jansen
151459599516SKenneth E. Jansen      include "common.h"
151559599516SKenneth E. Jansen
151659599516SKenneth E. Jansen      real*8    y(nshg,ndof),              ac(nshg,ndof),
151759599516SKenneth E. Jansen     &            x(numnp,nsd),
151859599516SKenneth E. Jansen     &            BC(nshg,ndofBC)
151959599516SKenneth E. Jansen      real*8    shp(MAXTOP,maxsh,MAXQPT),
152059599516SKenneth E. Jansen     &            shgl(MAXTOP,nsd,maxsh,MAXQPT)
152159599516SKenneth E. Jansen
152259599516SKenneth E. Jansenc
152359599516SKenneth E. Jansen      integer   rowp(nshg,nnz),         colm(nshg+1),
152459599516SKenneth E. Jansen     &            iBC(nshg),
152559599516SKenneth E. Jansen     &            ilwork(nlwork),
152659599516SKenneth E. Jansen     &            iper(nshg)
152759599516SKenneth E. Jansen      dimension ifath(numnp),    nsons(nfath)
152859599516SKenneth E. Jansen
152959599516SKenneth E. Jansen      real*8, allocatable, dimension(:) :: fwr2,fwr3,fwr4
153059599516SKenneth E. Jansen      real*8, allocatable, dimension(:) :: stabdis,cdelsq1
153159599516SKenneth E. Jansen      real*8, allocatable, dimension(:,:) :: xavegt, xavegt2,xavegt3
153259599516SKenneth E. Jansen
153359599516SKenneth E. Jansen      if( (iLES.gt.1) )   then ! Allocate Stuff for advanced LES models
153459599516SKenneth E. Jansen         allocate (fwr2(nshg))
153559599516SKenneth E. Jansen         allocate (fwr3(nshg))
153659599516SKenneth E. Jansen         allocate (fwr4(nshg))
153759599516SKenneth E. Jansen         allocate (xavegt(nfath,12))
153859599516SKenneth E. Jansen         allocate (xavegt2(nfath,12))
153959599516SKenneth E. Jansen         allocate (xavegt3(nfath,12))
154059599516SKenneth E. Jansen         allocate (stabdis(nfath))
154159599516SKenneth E. Jansen      endif
154259599516SKenneth E. Jansen
154359599516SKenneth E. Jansenc.... get dynamic model coefficient
154459599516SKenneth E. Jansenc
154559599516SKenneth E. Jansen      ilesmod=iLES/10
154659599516SKenneth E. Jansenc
154759599516SKenneth E. Jansenc digit bit set filter rule, 10 bit set model
154859599516SKenneth E. Jansenc
154959599516SKenneth E. Jansen      if (ilesmod.eq.0) then    ! 0 < iLES< 10 => dyn. model calculated
155059599516SKenneth E. Jansen                                ! at nodes based on discrete filtering
155159599516SKenneth E. Jansen
155259599516SKenneth E. Jansen
155359599516SKenneth E. Jansen         if(isubmod.eq.2) then
155459599516SKenneth E. Jansen            call SUPGdis(y,      ac,        shgl,      shp,
155559599516SKenneth E. Jansen     &                   iper,   ilwork,
155659599516SKenneth E. Jansen     &                   nsons,  ifath,     x,
155759599516SKenneth E. Jansen     &                   iBC,    BC, stabdis, xavegt3)
155859599516SKenneth E. Jansen         endif
155959599516SKenneth E. Jansen
156059599516SKenneth E. Jansen         if( ((isubmod.eq.0).or.(isubmod.eq.2)))then ! If no
156159599516SKenneth E. Jansen                                                     ! sub-model
156259599516SKenneth E. Jansen                                                     ! or SUPG
156359599516SKenneth E. Jansen                                                     ! model wanted
156459599516SKenneth E. Jansen
156559599516SKenneth E. Jansen            if(i2filt.eq.0)then ! If simple filter
156659599516SKenneth E. Jansen
156759599516SKenneth E. Jansen               if(modlstats .eq. 0) then ! If no model stats wanted
156859599516SKenneth E. Jansen                  call getdmc (y,       shgl,      shp,
156959599516SKenneth E. Jansen     &                         iper,       ilwork,    nsons,
157059599516SKenneth E. Jansen     &                         ifath,      x)
157159599516SKenneth E. Jansen               else             ! else get model stats
157259599516SKenneth E. Jansen                  call stdfdmc (y,       shgl,      shp,
157359599516SKenneth E. Jansen     &                          iper,       ilwork,    nsons,
157459599516SKenneth E. Jansen     &                          ifath,      x)
157559599516SKenneth E. Jansen               endif            ! end of stats if statement
157659599516SKenneth E. Jansen
157759599516SKenneth E. Jansen            else                ! else if twice filtering
157859599516SKenneth E. Jansen
157959599516SKenneth E. Jansen               call widefdmc(y,       shgl,      shp,
158059599516SKenneth E. Jansen     &                       iper,       ilwork,    nsons,
158159599516SKenneth E. Jansen     &                       ifath,      x)
158259599516SKenneth E. Jansen
158359599516SKenneth E. Jansen
158459599516SKenneth E. Jansen            endif               ! end of simple filter if statement
158559599516SKenneth E. Jansen
158659599516SKenneth E. Jansen         endif                  ! end of SUPG or no sub-model if statement
158759599516SKenneth E. Jansen
158859599516SKenneth E. Jansen
158959599516SKenneth E. Jansen         if( (isubmod.eq.1) ) then ! If DFWR sub-model wanted
159059599516SKenneth E. Jansen            call cdelBHsq (y,       shgl,      shp,
159159599516SKenneth E. Jansen     &                     iper,       ilwork,    nsons,
159259599516SKenneth E. Jansen     &                     ifath,      x,         cdelsq1)
159359599516SKenneth E. Jansen            call FiltRat (y,       shgl,      shp,
159459599516SKenneth E. Jansen     &                    iper,       ilwork,    nsons,
159559599516SKenneth E. Jansen     &                    ifath,      x,         cdelsq1,
159659599516SKenneth E. Jansen     &                    fwr4,       fwr3)
159759599516SKenneth E. Jansen
159859599516SKenneth E. Jansen
159959599516SKenneth E. Jansen            if (i2filt.eq.0) then ! If simple filter wanted
160059599516SKenneth E. Jansen               call DFWRsfdmc(y,       shgl,      shp,
160159599516SKenneth E. Jansen     &                        iper,       ilwork,    nsons,
160259599516SKenneth E. Jansen     &                        ifath,      x,         fwr2, fwr3)
160359599516SKenneth E. Jansen            else                ! else if twice filtering wanted
160459599516SKenneth E. Jansen               call DFWRwfdmc(y,       shgl,      shp,
160559599516SKenneth E. Jansen     &                        iper,       ilwork,    nsons,
160659599516SKenneth E. Jansen     &                        ifath,      x,         fwr4, fwr4)
160759599516SKenneth E. Jansen            endif               ! end of simple filter if statement
160859599516SKenneth E. Jansen
160959599516SKenneth E. Jansen         endif                  ! end of DFWR sub-model if statement
161059599516SKenneth E. Jansen
161159599516SKenneth E. Jansen         if( (isubmod.eq.2) )then ! If SUPG sub-model wanted
161259599516SKenneth E. Jansen            call dmcSUPG (y,           ac,         shgl,
161359599516SKenneth E. Jansen     &                    shp,         iper,       ilwork,
161459599516SKenneth E. Jansen     &                    nsons,       ifath,      x,
161559599516SKenneth E. Jansen     &                    iBC,    BC,  rowp,       colm,
161659599516SKenneth E. Jansen     &                    xavegt2,    stabdis)
161759599516SKenneth E. Jansen         endif
161859599516SKenneth E. Jansen
161959599516SKenneth E. Jansen         if(idis.eq.1)then      ! If SUPG/Model dissipation wanted
162059599516SKenneth E. Jansen            call ediss (y,        ac,      shgl,
162159599516SKenneth E. Jansen     &                  shp,      iper,       ilwork,
162259599516SKenneth E. Jansen     &                  nsons,    ifath,      x,
162359599516SKenneth E. Jansen     &                  iBC,      BC,  xavegt)
162459599516SKenneth E. Jansen         endif
162559599516SKenneth E. Jansen
162659599516SKenneth E. Jansen      endif                     ! end of ilesmod
162759599516SKenneth E. Jansen
162859599516SKenneth E. Jansen      if (ilesmod .eq. 1) then  ! 10 < iLES < 20 => dynamic-mixed
162959599516SKenneth E. Jansen                                ! at nodes based on discrete filtering
163059599516SKenneth E. Jansen         call bardmc (y,       shgl,      shp,
163159599516SKenneth E. Jansen     &                iper,    ilwork,
163259599516SKenneth E. Jansen     &                nsons,   ifath,     x)
163359599516SKenneth E. Jansen      endif
163459599516SKenneth E. Jansen
163559599516SKenneth E. Jansen      if (ilesmod .eq. 2) then  ! 20 < iLES < 30 => dynamic at quad
163659599516SKenneth E. Jansen                                ! pts based on lumped projection filt.
163759599516SKenneth E. Jansen
163859599516SKenneth E. Jansen         if(isubmod.eq.0)then
163959599516SKenneth E. Jansen            call projdmc (y,       shgl,      shp,
164059599516SKenneth E. Jansen     &                    iper,       ilwork,    x)
164159599516SKenneth E. Jansen         else
164259599516SKenneth E. Jansen            call cpjdmcnoi (y,      shgl,      shp,
164359599516SKenneth E. Jansen     &                      iper,   ilwork,       x,
164459599516SKenneth E. Jansen     &                      rowp,   colm,
164559599516SKenneth E. Jansen     &                      iBC,    BC)
164659599516SKenneth E. Jansen         endif
164759599516SKenneth E. Jansen
164859599516SKenneth E. Jansen      endif
164959599516SKenneth E. Jansen
165059599516SKenneth E. Jansen      if( (iLES.gt.1) )   then ! Deallocate Stuff for advanced LES models
165159599516SKenneth E. Jansen         deallocate (fwr2)
165259599516SKenneth E. Jansen         deallocate (fwr3)
165359599516SKenneth E. Jansen         deallocate (fwr4)
165459599516SKenneth E. Jansen         deallocate (xavegt)
165559599516SKenneth E. Jansen         deallocate (xavegt2)
165659599516SKenneth E. Jansen         deallocate (xavegt3)
165759599516SKenneth E. Jansen         deallocate (stabdis)
165859599516SKenneth E. Jansen      endif
165959599516SKenneth E. Jansen      return
166059599516SKenneth E. Jansen      end
166159599516SKenneth E. Jansen
166259599516SKenneth E. Jansenc
166359599516SKenneth E. Jansenc...initialize the coefficients for the impedance convolution
166459599516SKenneth E. Jansenc
166559599516SKenneth E. Jansen      subroutine CalcImpConvCoef (numISrfs, numTpoints)
166659599516SKenneth E. Jansen
166759599516SKenneth E. Jansen      use convolImpFlow !uses flow history and impedance for convolution
166859599516SKenneth E. Jansen
166959599516SKenneth E. Jansen      include "common.h" !for alfi
167059599516SKenneth E. Jansen
167159599516SKenneth E. Jansen      integer numISrfs, numTpoints
167259599516SKenneth E. Jansen
167359599516SKenneth E. Jansen      allocate (ConvCoef(numTpoints+2,3)) !same time discret. for all imp. BC
167459599516SKenneth E. Jansen      do j=1,numTpoints+2
167559599516SKenneth E. Jansen         ConvCoef(j,:)=0.5/numTpoints !dt/2 divided by period T=N*dt
167659599516SKenneth E. Jansen         ConvCoef(j,1)=ConvCoef(j,1)*(1.0-alfi)*(1.0-alfi)
167759599516SKenneth E. Jansen         ConvCoef(j,2)=ConvCoef(j,2)*(1.0+2*alfi*(1.0-alfi))
167859599516SKenneth E. Jansen         ConvCoef(j,3)=ConvCoef(j,3)*alfi*alfi
167959599516SKenneth E. Jansen      enddo
168059599516SKenneth E. Jansen      ConvCoef(1,2)=zero
168159599516SKenneth E. Jansen      ConvCoef(1,3)=zero
168259599516SKenneth E. Jansen      ConvCoef(2,3)=zero
168359599516SKenneth E. Jansen      ConvCoef(numTpoints+1,1)=zero
168459599516SKenneth E. Jansen      ConvCoef(numTpoints+2,2)=zero
168559599516SKenneth E. Jansen      ConvCoef(numTpoints+2,1)=zero
168659599516SKenneth E. Jansenc
168759599516SKenneth E. Jansenc...calculate the coefficients for the impedance convolution
168859599516SKenneth E. Jansenc
168959599516SKenneth E. Jansen      allocate (ImpConvCoef(numTpoints+2,numISrfs))
169059599516SKenneth E. Jansen
169159599516SKenneth E. Jansenc..coefficients below assume Q linear in time step, Z constant
169259599516SKenneth E. Jansenc            do j=3,numTpoints
169359599516SKenneth E. Jansenc                ImpConvCoef(j,:) = ValueListImp(j-1,:)*ConvCoef(j,3)
169459599516SKenneth E. Jansenc     &                             + ValueListImp(j,:)*ConvCoef(j,2)
169559599516SKenneth E. Jansenc     &                             + ValueListImp(j+1,:)*ConvCoef(j,1)
169659599516SKenneth E. Jansenc            enddo
169759599516SKenneth E. Jansenc            ImpConvCoef(1,:) = ValueListImp(2,:)*ConvCoef(1,1)
169859599516SKenneth E. Jansenc            ImpConvCoef(2,:) = ValueListImp(2,:)*ConvCoef(2,2)
169959599516SKenneth E. Jansenc     &                       + ValueListImp(3,:)*ConvCoef(2,1)
170059599516SKenneth E. Jansenc            ImpConvCoef(numTpoints+1,:) =
170159599516SKenneth E. Jansenc     &           ValueListImp(numTpoints,:)*ConvCoef(numTpoints+1,3)
170259599516SKenneth E. Jansenc     &         + ValueListImp(numTpoints+1,:)*ConvCoef(numTpoints+1,2)
170359599516SKenneth E. Jansenc            ImpConvCoef(numTpoints+2,:) =
170459599516SKenneth E. Jansenc     &           ValueListImp(numTpoints+1,:)*ConvCoef(numTpoints+2,3)
170559599516SKenneth E. Jansen
170659599516SKenneth E. Jansenc..try easiest convolution Q and Z constant per time step
170759599516SKenneth E. Jansen      do j=3,numTpoints+1
170859599516SKenneth E. Jansen         ImpConvCoef(j,:) = ValueListImp(j-1,:)/numTpoints
170959599516SKenneth E. Jansen      enddo
171059599516SKenneth E. Jansen      ImpConvCoef(1,:) =zero
171159599516SKenneth E. Jansen      ImpConvCoef(2,:) =zero
171259599516SKenneth E. Jansen      ImpConvCoef(numTpoints+2,:) =
171359599516SKenneth E. Jansen     &           ValueListImp(numTpoints+1,:)/numTpoints
171459599516SKenneth E. Jansenc compensate for yalpha passed not y in Elmgmr()
171559599516SKenneth E. Jansen      ImpConvCoef(numTpoints+1,:)= ImpConvCoef(numTpoints+1,:)
171659599516SKenneth E. Jansen     &                  - ImpConvCoef(numTpoints+2,:)*(1.0-alfi)/alfi
171759599516SKenneth E. Jansen      ImpConvCoef(numTpoints+2,:)= ImpConvCoef(numTpoints+2,:)/alfi
171859599516SKenneth E. Jansen      return
171959599516SKenneth E. Jansen      end
172059599516SKenneth E. Jansen
172159599516SKenneth E. Jansenc
172259599516SKenneth E. Jansenc ... update the flow rate history for the impedance convolution, filter it and write it out
172359599516SKenneth E. Jansenc
172459599516SKenneth E. Jansen      subroutine UpdHistConv(y,nsrfIdList,numSrfs)
172559599516SKenneth E. Jansen
172659599516SKenneth E. Jansen      use convolImpFlow !brings ntimeptpT, QHistImp, QHistTry, QHistTryF, numImpSrfs
172759599516SKenneth E. Jansen      use convolRCRFlow !brings QHistRCR, numRCRSrfs
172859599516SKenneth E. Jansen
172959599516SKenneth E. Jansen      include "common.h"
173059599516SKenneth E. Jansen
173159599516SKenneth E. Jansen      integer   nsrfIdList(0:MAXSURF), numSrfs
173259599516SKenneth E. Jansen      character*20 fname1
173359599516SKenneth E. Jansen      character*10 cname2
173459599516SKenneth E. Jansen      character*5 cname
173559599516SKenneth E. Jansen      real*8    y(nshg,3) !velocity at time n+1
173659599516SKenneth E. Jansen      real*8    NewQ(0:MAXSURF) !temporary unknown for the flow rate
173759599516SKenneth E. Jansen                        !that needs to be added to the flow history
173859599516SKenneth E. Jansen
173959599516SKenneth E. Jansen      call GetFlowQ(NewQ,y,nsrfIdList,numSrfs) !new flow at time n+1
174059599516SKenneth E. Jansenc
174159599516SKenneth E. Jansenc... for imp BC: shift QHist, add new constribution, filter and write out
174259599516SKenneth E. Jansenc
174359599516SKenneth E. Jansen      if(numImpSrfs.gt.zero) then
174459599516SKenneth E. Jansen         do j=1, ntimeptpT
174559599516SKenneth E. Jansen            QHistImp(j,1:numSrfs)=QHistImp(j+1,1:numSrfs)
174659599516SKenneth E. Jansen         enddo
174759599516SKenneth E. Jansen         QHistImp(ntimeptpT+1,1:numSrfs) = NewQ(1:numSrfs)
174859599516SKenneth E. Jansen
174959599516SKenneth E. Jansenc
175059599516SKenneth E. Jansenc....filter the flow rate history
175159599516SKenneth E. Jansenc
175259599516SKenneth E. Jansen         cutfreq = 10           !hardcoded cutting frequency of the filter
175359599516SKenneth E. Jansen         do j=1, ntimeptpT
175459599516SKenneth E. Jansen            QHistTry(j,:)=QHistImp(j+1,:)
175559599516SKenneth E. Jansen         enddo
175659599516SKenneth E. Jansen         call Filter(QHistTryF,QHistTry,ntimeptpT,Delt(1),cutfreq)
175759599516SKenneth E. Jansenc.... if no filter applied then uncomment next three lines
175859599516SKenneth E. Jansenc         do j=1, ntimeptpT
175959599516SKenneth E. Jansenc            QHistTryF(j,:)=QHistTry(j,:)
176059599516SKenneth E. Jansenc         enddo
176159599516SKenneth E. Jansen
176259599516SKenneth E. Jansenc         QHistImp(1,:)=zero ! why do we do this? for beta(1,:) = zero it does not really matters
176359599516SKenneth E. Jansen         do j=1, ntimeptpT
176459599516SKenneth E. Jansen            QHistImp(j+1,:)=QHistTryF(j,:)
176559599516SKenneth E. Jansen         enddo
176659599516SKenneth E. Jansenc
176759599516SKenneth E. Jansenc.... write out the new history of flow rates to Qhistor.dat
176859599516SKenneth E. Jansenc
176959599516SKenneth E. Jansen         if (((irs .ge. 1) .and. ((mod(lstep, ntout) .eq. 0) .or.
177059599516SKenneth E. Jansen     &        (istep .eq. nstep(1)))) .and.
177159599516SKenneth E. Jansen     &        (myrank .eq. master)) then
177259599516SKenneth E. Jansen            open(unit=816, file='Qhistor.dat',status='replace')
177359599516SKenneth E. Jansen            write(816,*) ntimeptpT
177459599516SKenneth E. Jansen            do j=1,ntimeptpT+1
177559599516SKenneth E. Jansen               write(816,*) (QHistImp(j,n),n=1, numSrfs)
177659599516SKenneth E. Jansen            enddo
177759599516SKenneth E. Jansen            close(816)
177859599516SKenneth E. Jansenc... write out a copy with step number to be able to restart
177959599516SKenneth E. Jansen            fname1 = 'Qhistor'
178059599516SKenneth E. Jansen            fname1 = trim(fname1)//trim(cname2(lstep))//'.dat'
178159599516SKenneth E. Jansen            open(unit=8166,file=trim(fname1),status='unknown')
178259599516SKenneth E. Jansen            write(8166,*) ntimeptpT
178359599516SKenneth E. Jansen            do j=1,ntimeptpT+1
178459599516SKenneth E. Jansen               write(8166,*) (QHistImp(j,n),n=1, numSrfs)
178559599516SKenneth E. Jansen            enddo
178659599516SKenneth E. Jansen            close(8166)
178759599516SKenneth E. Jansen         endif
178859599516SKenneth E. Jansen      endif
178959599516SKenneth E. Jansen
179059599516SKenneth E. Jansenc
179159599516SKenneth E. Jansenc... for RCR bc just add the new contribution
179259599516SKenneth E. Jansenc
179359599516SKenneth E. Jansen      if(numRCRSrfs.gt.zero) then
179459599516SKenneth E. Jansen         QHistRCR(lstep+1,1:numSrfs) = NewQ(1:numSrfs)
179559599516SKenneth E. Jansenc
179659599516SKenneth E. Jansenc.... write out the new history of flow rates to Qhistor.dat
179759599516SKenneth E. Jansenc
179859599516SKenneth E. Jansen         if ((irs .ge. 1) .and. (myrank .eq. master)) then
179959599516SKenneth E. Jansen            if(istep.eq.1) then
180059599516SKenneth E. Jansen               open(unit=816,file='Qhistor.dat',status='unknown')
180159599516SKenneth E. Jansen            else
180259599516SKenneth E. Jansen               open(unit=816,file='Qhistor.dat',position='append')
180359599516SKenneth E. Jansen            endif
180459599516SKenneth E. Jansen            if(istep.eq.1) then
180559599516SKenneth E. Jansen               do j=1,lstep
180659599516SKenneth E. Jansen                  write(816,*) j, (QHistRCR(j,n),n=1,numSrfs) ! read from file of previous run
180759599516SKenneth E. Jansen               enddo
180859599516SKenneth E. Jansen            endif
180959599516SKenneth E. Jansen            write(816,*) lstep+1, (QHistRCR(lstep+1,n),n=1, numSrfs)
181059599516SKenneth E. Jansen            close(816)
181159599516SKenneth E. Jansenc... write out a copy with step number to be able to restart
181259599516SKenneth E. Jansen            if (((irs .ge. 1) .and. ((mod(lstep, ntout) .eq. 0) .or.
181359599516SKenneth E. Jansen     &           (istep .eq. nstep(1)))) .and.
181459599516SKenneth E. Jansen     &           (myrank .eq. master)) then
181559599516SKenneth E. Jansen               fname1 = 'Qhistor'
181659599516SKenneth E. Jansen               fname1 = trim(fname1)//trim(cname2(lstep))//'.dat'
181759599516SKenneth E. Jansen               open(unit=8166,file=trim(fname1),status='unknown')
181859599516SKenneth E. Jansen               write(8166,*) lstep+1
181959599516SKenneth E. Jansen               do j=1,lstep+1
182059599516SKenneth E. Jansen                  write(8166,*) (QHistRCR(j,n),n=1, numSrfs)
182159599516SKenneth E. Jansen               enddo
182259599516SKenneth E. Jansen               close(8166)
182359599516SKenneth E. Jansen            endif
182459599516SKenneth E. Jansen         endif
182559599516SKenneth E. Jansen      endif
182659599516SKenneth E. Jansen
182759599516SKenneth E. Jansen      return
182859599516SKenneth E. Jansen      end
182959599516SKenneth E. Jansen
183059599516SKenneth E. Jansenc
183159599516SKenneth E. Jansenc...calculate the time varying coefficients for the RCR convolution
183259599516SKenneth E. Jansenc
183359599516SKenneth E. Jansen      subroutine CalcRCRConvCoef (stepn, numSrfs)
183459599516SKenneth E. Jansen
183559599516SKenneth E. Jansen      use convolRCRFlow !brings in ValueListRCR, dtRCR
183659599516SKenneth E. Jansen
183759599516SKenneth E. Jansen      include "common.h" !brings alfi
183859599516SKenneth E. Jansen
183959599516SKenneth E. Jansen      integer numSrfs, stepn
184059599516SKenneth E. Jansen
184159599516SKenneth E. Jansen      RCRConvCoef = zero
184259599516SKenneth E. Jansen      if (stepn .eq. 0) then
184359599516SKenneth E. Jansen        RCRConvCoef(1,:) = ValueListRCR(1,:)*(1.0-alfi) +
184459599516SKenneth E. Jansen     &   ValueListRCR(3,:)*(-alfi + 1.0 + 1/dtRCR(:)
184559599516SKenneth E. Jansen     &     - exp(-alfi*dtRCR(:))*(1 + 1/dtRCR(:)))
184659599516SKenneth E. Jansen        RCRConvCoef(2,:) = ValueListRCR(1,:)*alfi
184759599516SKenneth E. Jansen     &     + ValueListRCR(3,:)
184859599516SKenneth E. Jansen     &     *(alfi - 1/dtRCR(:) + exp(-alfi*dtRCR(:))/dtRCR(:))
184959599516SKenneth E. Jansen      endif
185059599516SKenneth E. Jansen      if (stepn .ge. 1) then
185159599516SKenneth E. Jansen        RCRConvCoef(1,:) =-ValueListRCR(3,:)*exp(-dtRCR(:)*(stepn+alfi))
185259599516SKenneth E. Jansen     &        *(1 + (1 - exp(dtRCR(:)))/dtRCR(:))
185359599516SKenneth E. Jansen        RCRConvCoef(stepn+1,:) = ValueListRCR(1,:)*(1-alfi)
185459599516SKenneth E. Jansen     &     - ValueListRCR(3,:)*(alfi - 1 - 1/dtRCR(:)
185559599516SKenneth E. Jansen     &     + exp(-alfi*dtRCR(:))/dtRCR(:)*(2 - exp(-dtRCR(:))))
185659599516SKenneth E. Jansen        RCRConvCoef(stepn+2,:) = ValueListRCR(1,:)*alfi
185759599516SKenneth E. Jansen     &     + ValueListRCR(3,:)
185859599516SKenneth E. Jansen     &     *(alfi - 1/dtRCR(:) + exp(-alfi*dtRCR(:))/dtRCR(:))
185959599516SKenneth E. Jansen      endif
186059599516SKenneth E. Jansen      if (stepn .ge. 2) then
186159599516SKenneth E. Jansen        do j=2,stepn
186259599516SKenneth E. Jansen         RCRConvCoef(j,:) = ValueListRCR(3,:)/dtRCR(:)*
186359599516SKenneth E. Jansen     &        exp(-dtRCR(:)*(stepn + alfi + 2 - j))*
186459599516SKenneth E. Jansen     &        (1 - exp(dtRCR(:)))**2
186559599516SKenneth E. Jansen        enddo
186659599516SKenneth E. Jansen      endif
186759599516SKenneth E. Jansen
186859599516SKenneth E. Jansenc compensate for yalpha passed not y in Elmgmr()
186959599516SKenneth E. Jansen      RCRConvCoef(stepn+1,:)= RCRConvCoef(stepn+1,:)
187059599516SKenneth E. Jansen     &                  - RCRConvCoef(stepn+2,:)*(1.0-alfi)/alfi
187159599516SKenneth E. Jansen      RCRConvCoef(stepn+2,:)= RCRConvCoef(stepn+2,:)/alfi
187259599516SKenneth E. Jansen
187359599516SKenneth E. Jansen      return
187459599516SKenneth E. Jansen      end
187559599516SKenneth E. Jansen
187659599516SKenneth E. Jansenc
187759599516SKenneth E. Jansenc...calculate the time dependent H operator for the RCR convolution
187859599516SKenneth E. Jansenc
187959599516SKenneth E. Jansen      subroutine CalcHopRCR (timestepRCR, stepn, numSrfs)
188059599516SKenneth E. Jansen
188159599516SKenneth E. Jansen      use convolRCRFlow !brings in HopRCR, dtRCR
188259599516SKenneth E. Jansen
188359599516SKenneth E. Jansen      include "common.h"
188459599516SKenneth E. Jansen
188559599516SKenneth E. Jansen      integer numSrfs, stepn
188659599516SKenneth E. Jansen      real*8  PdistCur(0:MAXSURF), timestepRCR
188759599516SKenneth E. Jansen
188859599516SKenneth E. Jansen      HopRCR=zero
188959599516SKenneth E. Jansen      call RCRint(timestepRCR*(stepn + alfi),PdistCur)
189059599516SKenneth E. Jansen      HopRCR(1:numSrfs) = RCRic(1:numSrfs)
189159599516SKenneth E. Jansen     &     *exp(-dtRCR(1:numSrfs)*(stepn + alfi)) + PdistCur(1:numSrfs)
189259599516SKenneth E. Jansen      return
189359599516SKenneth E. Jansen      end
189459599516SKenneth E. Jansenc
189559599516SKenneth E. Jansenc ... initialize the influence of the initial conditions for the RCR BC
189659599516SKenneth E. Jansenc
189759599516SKenneth E. Jansen      subroutine calcRCRic(y,srfIdList,numSrfs)
189859599516SKenneth E. Jansen
189959599516SKenneth E. Jansen      use convolRCRFlow    !brings RCRic, ValueListRCR, ValuePdist
190059599516SKenneth E. Jansen
190159599516SKenneth E. Jansen      include "common.h"
190259599516SKenneth E. Jansen
190359599516SKenneth E. Jansen      integer   srfIdList(0:MAXSURF), numSrfs, irankCoupled
190459599516SKenneth E. Jansen      real*8    y(nshg,4) !need velocity and pressure
190559599516SKenneth E. Jansen      real*8    Qini(0:MAXSURF) !initial flow rate
190659599516SKenneth E. Jansen      real*8    PdistIni(0:MAXSURF) !initial distal pressure
190759599516SKenneth E. Jansen      real*8    Pini(0:MAXSURF),CoupleArea(0:MAXSURF) ! initial pressure
190859599516SKenneth E. Jansen      real*8    VelOnly(nshg,3), POnly(nshg)
190959599516SKenneth E. Jansen
191059599516SKenneth E. Jansen      allocate (RCRic(0:MAXSURF))
191159599516SKenneth E. Jansen
191259599516SKenneth E. Jansen      if(lstep.eq.0) then
191359599516SKenneth E. Jansen         VelOnly(:,1:3)=y(:,1:3)
191459599516SKenneth E. Jansen         call GetFlowQ(Qini,VelOnly,srfIdList,numSrfs) !get initial flow
191559599516SKenneth E. Jansen         QHistRCR(1,1:numSrfs)=Qini(1:numSrfs) !initialize QHistRCR
191659599516SKenneth E. Jansen         POnly(:)=y(:,4)        ! pressure
191759599516SKenneth E. Jansen         call integrScalar(Pini,POnly,srfIdList,numSrfs) !get initial pressure integral
191859599516SKenneth E. Jansen         POnly(:)=one           ! one to get area
191959599516SKenneth E. Jansen         call integrScalar(CoupleArea,POnly,srfIdList,numSrfs) !get surf area
192059599516SKenneth E. Jansen         Pini(1:numSrfs) = Pini(1:numSrfs)/CoupleArea(1:numSrfs)
192159599516SKenneth E. Jansen      else
192259599516SKenneth E. Jansen         Qini(1:numSrfs)=QHistRCR(1,1:numSrfs)
192359599516SKenneth E. Jansen         Pini(1:numSrfs)=zero    ! hack
192459599516SKenneth E. Jansen      endif
192559599516SKenneth E. Jansen      call RCRint(istep,PdistIni) !get initial distal P (use istep)
192659599516SKenneth E. Jansen      RCRic(1:numSrfs) = Pini(1:numSrfs)
192759599516SKenneth E. Jansen     &          - ValueListRCR(1,:)*Qini(1:numSrfs)-PdistIni(1:numSrfs)
192859599516SKenneth E. Jansen      return
192959599516SKenneth E. Jansen      end
193059599516SKenneth E. Jansen
193159599516SKenneth E. Jansenc.........function that integrates a scalar over a boundary
193259599516SKenneth E. Jansen      subroutine integrScalar(scalInt,scal,srfIdList,numSrfs)
193359599516SKenneth E. Jansen
193459599516SKenneth E. Jansen      use pvsQbi !brings ndsurf, NASC
193559599516SKenneth E. Jansen
193659599516SKenneth E. Jansen      include "common.h"
193759599516SKenneth E. Jansen      include "mpif.h"
193859599516SKenneth E. Jansen
193959599516SKenneth E. Jansen      integer   srfIdList(0:MAXSURF), numSrfs, irankCoupled, i, k
194059599516SKenneth E. Jansen      real*8    scal(nshg), scalInt(0:MAXSURF), scalIntProc(0:MAXSURF)
194159599516SKenneth E. Jansen
194259599516SKenneth E. Jansen      scalIntProc = zero
194359599516SKenneth E. Jansen      do i = 1,nshg
194459599516SKenneth E. Jansen        if(numSrfs.gt.zero) then
194559599516SKenneth E. Jansen          do k = 1,numSrfs
194659599516SKenneth E. Jansen            irankCoupled = 0
194759599516SKenneth E. Jansen            if (srfIdList(k).eq.ndsurf(i)) then
194859599516SKenneth E. Jansen              irankCoupled=k
194959599516SKenneth E. Jansen              scalIntProc(irankCoupled) = scalIntProc(irankCoupled)
195059599516SKenneth E. Jansen     &                            + NASC(i)*scal(i)
195159599516SKenneth E. Jansen              exit
195259599516SKenneth E. Jansen            endif
195359599516SKenneth E. Jansen          enddo
195459599516SKenneth E. Jansen        endif
195559599516SKenneth E. Jansen      enddo
195659599516SKenneth E. Jansenc
195759599516SKenneth E. Jansenc     at this point, each scalint has its "nodes" contributions to the scalar
195859599516SKenneth E. Jansenc     accumulated into scalIntProc. Note, because NASC is on processor this
195959599516SKenneth E. Jansenc     will NOT be the scalar for the surface yet
196059599516SKenneth E. Jansenc
196159599516SKenneth E. Jansenc.... reduce integrated scalar for each surface, push on scalInt
196259599516SKenneth E. Jansenc
196359599516SKenneth E. Jansen        npars=MAXSURF+1
196459599516SKenneth E. Jansen       call MPI_ALLREDUCE (scalIntProc, scalInt(:), npars,
196559599516SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
196659599516SKenneth E. Jansen
196759599516SKenneth E. Jansen      return
196859599516SKenneth E. Jansen      end
196959599516SKenneth E. Jansen
19709071d3baSCameron Smith      subroutine writeTimingMessage(key,iomode,timing)
19719071d3baSCameron Smith      use iso_c_binding
19729071d3baSCameron Smith      use phstr
19739071d3baSCameron Smith      implicit none
197459599516SKenneth E. Jansen
19759071d3baSCameron Smith      character(len=*) :: key
19769071d3baSCameron Smith      integer :: iomode
19779071d3baSCameron Smith      real*8 :: timing
1978da7d5714SCameron Smith      character(len=1024) :: timing_msg
197989625e43SCameron Smith      character(len=*), parameter ::
198089625e43SCameron Smith     &  streamModeString = c_char_"stream"//c_null_char,
198189625e43SCameron Smith     &  fileModeString = c_char_"disk"//c_null_char
198259599516SKenneth E. Jansen
1983da7d5714SCameron Smith      timing_msg = c_char_"Time to write "//c_null_char
19849071d3baSCameron Smith      call phstr_appendStr(timing_msg,key)
19859071d3baSCameron Smith      if ( iomode .eq. -1 ) then
19869071d3baSCameron Smith        call phstr_appendStr(timing_msg, streamModeString)
19879071d3baSCameron Smith      else
19889071d3baSCameron Smith        call phstr_appendStr(timing_msg, fileModeString)
19899071d3baSCameron Smith      endif
19909071d3baSCameron Smith      call phstr_appendStr(timing_msg, c_char_' = '//c_null_char)
19919071d3baSCameron Smith      call phstr_appendDbl(timing_msg, timing)
1992da7d5714SCameron Smith      write(6,*) trim(timing_msg)
19939071d3baSCameron Smith      return
19949071d3baSCameron Smith      end subroutine
199559599516SKenneth E. Jansen
1996