xref: /phasta/phSolver/common/restar.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine restar (code,  q, ac)
2*59599516SKenneth E. Jansenc
3*59599516SKenneth E. Jansenc----------------------------------------------------------------------
4*59599516SKenneth E. Jansenc  This routine is the restart option.
5*59599516SKenneth E. Jansenc
6*59599516SKenneth E. Jansenc input:
7*59599516SKenneth E. Jansenc  code                 : restart option on the primitive variables
8*59599516SKenneth E. Jansenc                          eq. 'in  ', read from [restar.inp]
9*59599516SKenneth E. Jansenc                          eq. 'out ', write to  [restar.out]
10*59599516SKenneth E. Jansenc
11*59599516SKenneth E. Jansenc input or output:
12*59599516SKenneth E. Jansenc  q     (nshg,ndof)   : the variables to be read/written
13*59599516SKenneth E. Jansenc
14*59599516SKenneth E. Jansenc
15*59599516SKenneth E. Jansenc Farzin Shakib, Summer 1985.
16*59599516SKenneth E. Jansenc----------------------------------------------------------------------
17*59599516SKenneth E. Jansenc
18*59599516SKenneth E. Jansen        use readarrays          ! used to access qold, acold
19*59599516SKenneth E. Jansen        include "common.h"
20*59599516SKenneth E. Jansen        include "mpif.h"
21*59599516SKenneth E. Jansenc
22*59599516SKenneth E. Jansen        character*4 code
23*59599516SKenneth E. Jansen        character*8 mach2
24*59599516SKenneth E. Jansen        character*20 fname1,  fmt1
25*59599516SKenneth E. Jansen        character*5  cname
26*59599516SKenneth E. Jansen
27*59599516SKenneth E. Jansenc
28*59599516SKenneth E. Jansen        dimension q(nshg,ndof),ac(nshg,ndof)
29*59599516SKenneth E. Jansenc arrays in the following 1 line are now dimensioned in readnblk
30*59599516SKenneth E. Jansenc        real*8    qold(nshg,ndof),acold(nshg,ndof)
31*59599516SKenneth E. Jansenc
32*59599516SKenneth E. Jansenc.... -------------------------->  'in  '  <---------------------------
33*59599516SKenneth E. Jansenc
34*59599516SKenneth E. Jansen        if (code .eq. 'in  ') then
35*59599516SKenneth E. Jansenc
36*59599516SKenneth E. Jansenc incompressible orders velocity, pressure, temperature unlike compressible
37*59599516SKenneth E. Jansenc which is what we have our files set up for
38*59599516SKenneth E. Jansenc
39*59599516SKenneth E. Jansen          q(:,1:3)=qold(:,2:4)
40*59599516SKenneth E. Jansen          q(:,4)=qold(:,1)
41*59599516SKenneth E. Jansen          if(ndof.gt.4)  q(:,5:ndof)=qold(:,5:ndof)
42*59599516SKenneth E. Jansen
43*59599516SKenneth E. Jansen          ac(:,1:3)=acold(:,2:4)
44*59599516SKenneth E. Jansen          ac(:,4)=acold(:,1)
45*59599516SKenneth E. Jansen          if(ndof.gt.4)  ac(:,5:ndof)=acold(:,5:ndof)
46*59599516SKenneth E. Jansen
47*59599516SKenneth E. Jansen          deallocate(qold)
48*59599516SKenneth E. Jansen          deallocate(acold)
49*59599516SKenneth E. Jansen          return
50*59599516SKenneth E. Jansen        endif
51*59599516SKenneth E. Jansenc
52*59599516SKenneth E. Jansenc.... -------------------------->  'out '  <---------------------------
53*59599516SKenneth E. Jansenc
54*59599516SKenneth E. Jansen        if (code .eq. 'out ') then
55*59599516SKenneth E. Jansen
56*59599516SKenneth E. Jansenc$$$        ttim(75) = ttim(75) - tmr()
57*59599516SKenneth E. Jansen           allocate( qold(nshg,ndof) )
58*59599516SKenneth E. Jansen           allocate( acold(nshg,ndof) )
59*59599516SKenneth E. Jansen           acold=0
60*59599516SKenneth E. Jansenc           itmp = 1
61*59599516SKenneth E. Jansenc           if (lstep .gt. 0) itmp = int(log10(float(lstep)))+1
62*59599516SKenneth E. Jansenc           write (fmt1,"('(''restart.'',i',i1,',1x)')") itmp
63*59599516SKenneth E. Jansenc           write (fname1,fmt1) lstep
64*59599516SKenneth E. Jansenc
65*59599516SKenneth E. Jansenc           fname1 = trim(fname1) // cname(myrank+1)
66*59599516SKenneth E. Jansen
67*59599516SKenneth E. Jansenc           open (unit=irstou, file=fname1, status='unknown',
68*59599516SKenneth E. Jansenc     &                                    form='unformatted', err=996)
69*59599516SKenneth E. Jansen
70*59599516SKenneth E. Jansenc           write (irstou) machin, nshg, lstep
71*59599516SKenneth E. Jansenc incompressible orders velocity, pressure, temperature unlike compressible
72*59599516SKenneth E. Jansenc which is what we have our files set up for
73*59599516SKenneth E. Jansenc
74*59599516SKenneth E. Jansen           qold(:,2:4) = q(:,1:3)
75*59599516SKenneth E. Jansen           qold(:,1)   = q(:,4)
76*59599516SKenneth E. Jansen           if(ndof.gt.4) qold(:,5:ndof)   = q(:,5:ndof)
77*59599516SKenneth E. Jansenc
78*59599516SKenneth E. Jansen           acold(:,2:4) = ac(:,1:3)
79*59599516SKenneth E. Jansen           acold(:,1)   = ac(:,4)
80*59599516SKenneth E. Jansen           if(ndof.gt.4) acold(:,5:ndof)   = ac(:,5:ndof)
81*59599516SKenneth E. Jansenc
82*59599516SKenneth E. Jansen           iqoldsiz=nshg*ndof
83*59599516SKenneth E. Jansen           call write_restart(myrank, lstep, nshg, ndof,
84*59599516SKenneth E. Jansen     &          qold, acold)
85*59599516SKenneth E. Jansenc           write (irstou) qold
86*59599516SKenneth E. Jansenc           write (irstou) acold  ! note that this is dYdt (reordered)
87*59599516SKenneth E. Jansenc           close (irstou)
88*59599516SKenneth E. Jansen
89*59599516SKenneth E. Jansenc$$$      open(unit=79,file="fort.79")
90*59599516SKenneth E. Jansenc$$$      do i=1,nshg
91*59599516SKenneth E. Jansenc$$$         write(79,78)(qold(i,j),j=1,5)
92*59599516SKenneth E. Jansenc$$$      enddo
93*59599516SKenneth E. Jansenc$$$      do i=1,nshg
94*59599516SKenneth E. Jansenc$$$         write(79,78)(acold(i,j),j=1,5)
95*59599516SKenneth E. Jansenc$$$      enddo
96*59599516SKenneth E. Jansenc$$$ 78   format(5(2x,e12.5))
97*59599516SKenneth E. Jansenc$$$      close(79)
98*59599516SKenneth E. Jansen
99*59599516SKenneth E. Jansen           if (myrank.eq.master) then
100*59599516SKenneth E. Jansen              open(unit=72,file='numstart.dat',status='old')
101*59599516SKenneth E. Jansen              write(72,*) lstep
102*59599516SKenneth E. Jansen              close(72)
103*59599516SKenneth E. Jansen           endif
104*59599516SKenneth E. Jansen           deallocate(qold)
105*59599516SKenneth E. Jansen           deallocate(acold)
106*59599516SKenneth E. Jansenc$$$          ttim(75) = ttim(75) + tmr()
107*59599516SKenneth E. Jansen           return
108*59599516SKenneth E. Jansen        endif
109*59599516SKenneth E. Jansenc
110*59599516SKenneth E. Jansenc.... ---------------------->  Error Handling  <-----------------------
111*59599516SKenneth E. Jansenc
112*59599516SKenneth E. Jansenc.... Error handling
113*59599516SKenneth E. Jansenc
114*59599516SKenneth E. Jansen        call error ('restar  ',code//'    ',0)
115*59599516SKenneth E. Jansenc
116*59599516SKenneth E. Jansenc.... file error handling
117*59599516SKenneth E. Jansenc
118*59599516SKenneth E. Jansen995     call error ('restar  ','opening ', irstin)
119*59599516SKenneth E. Jansen996     call error ('restar  ','opening ', irstou)
120*59599516SKenneth E. Jansenc
121*59599516SKenneth E. Jansenc.... end
122*59599516SKenneth E. Jansenc
123*59599516SKenneth E. Jansen        end
124