copyright (C) 2001 MSC-RPN COMM %%%MC2%%%
***s/r nest_intt -- Linear interpolation in time of nesting data
*
subroutine nest_intt (stepno,trname,ntrname,dtf,whenby1) 1,26
implicit none
*
logical whenby1
integer stepno,ntrname
character*8 trname(ntrname)
real dtf
*
*ARGUMENTS
* NAMES I/O TYPE A/S DESCRIPTION
* stepno I I S numero du pas de temps en cours
*
*IMPLICIT
#include "dynmem.cdk"
#include "bcsdim.cdk"
#include "bcsmem.cdk"
#include "bcsgrds.cdk"
#include "ifd.cdk"
#include "lun.cdk"
#include "cdate.cdk"
#include "nesting.cdk"
#include "partopo.cdk"
#include "yomdyn.cdk"
#include "yomdyn1.cdk"
#include "halo.cdk"
#include "nbcpu.cdk"
*
**
integer bcs_ftype
external bcs_ftype
character*16 datev
character*22 root_filename,filename
character*256 fn
logical nav
integer i,j,k,n,pniterp,nia,nja,nka,open_bmf,i0,in,j0,jn,unf,err,
$ errft(3)
integer yy,mo,dd,hh,mm,ss,dum,ifb,id
real, dimension (:), allocatable :: pa,ua,va,wa,ba,hua,tra
real*8 a,b,dayfrac,tx,dt,pt5,one,sid,rsid
parameter(pt5=0.5d0, one=1.0d0, sid=86400.0d0)
common /DUMMY1/ rsid,dt,tx,dayfrac
*-----------------------------------------------------------------------
*
!$omp single
rsid=one/sid
dt = dble(grdt)
dayfrac = dble(stepno)*abs(dt)*rsid
call incdatsd
(datev,gcrunstrt,dayfrac)
call prsdate
(yy,mo,dd,hh,mm,ss,dum,datev)
call pdfjdate2
(tx,yy,mo,dd,hh,mm,ss)
*
if (datev.gt.current_nest) then
*
dtf = (tx-tf_nest) * sid / dt
dayfrac = dble(Pil_nesdt)*rsid
call incdatsd
(datev,current_nest,dayfrac)
current_nest = datev
call prsdate
(yy,mo,dd,hh,mm,ss,dum,current_nest)
call pdfjdate2
(tf_nest,yy,mo,dd,hh,mm,ss)
*
if (stepno.gt.1) then
do i=1,(ntr+6)*bcs_sz+bcs_sz/gnk
bcs_pp(i) = bcs_ppa(i)
end do
else
if (pazta.gt.0) ifd_ftype = '3DF'
endif
*
errft = 0
unf = 76
nav = .false.
err = bcs_ftype
(ifd_ftype,errft,datev(1:15),nav,unf)
*
if ((ifd_ftype.eq.'BCS').or.(ifd_ftype.eq.'3DF')) then
*
if (ifd_ftype.eq.'3DF') then
call casc_bcs
(trname,datev(1:15),unf)
else if (ifd_ftype.eq.'BCS') then
call casc_bcsh
(trname,datev(1:15),unf)
else
write (6,1001)
call mc2stop
(-1)
endif
*
else
*
allocate (pa(dim3d+dim2d), ua(dim3d),va(dim3d),wa(dim3d),
$ ba(dim3d),hua(dim3d),tra(dim3d*ntr))
root_filename='../bm'//datev(1:15)//'_'
err = 0
*
if (south_L) then
filename = root_filename(1:21)//'s'
err = open_bmf
(filename,nia,nja,nka,gngalsig,halo)
call s_rdvint
(ua,va,wa,ba,hua,
$ pa,tra,trname,ntrname,datev,
$ minx,maxx,miny,maxy,gnk,nia,nja,nka,1)
endif
*
if (north_L) then
filename = root_filename(1:21)//'n'
err = open_bmf
(filename,nia,nja,nka,gngalsig,halo)
call s_rdvint
(ua,va,wa,ba,hua,
$ pa,tra,trname,ntrname,datev,
$ minx,maxx,miny,maxy,gnk,nia,nja,nka,2)
endif
*
if (west_L) then
filename = root_filename(1:21)//'w'
err = open_bmf
(filename,nia,nja,nka,gngalsig,halo)
call s_rdvint
(ua,va,wa,ba,hua,
$ pa,tra,trname,ntrname,datev,
$ minx,maxx,miny,maxy,gnk,nia,nja,nka,3)
endif
*
if (east_L) then
filename = root_filename(1:21)//'e'
err = open_bmf
(filename,nia,nja,nka,gngalsig,halo)
call s_rdvint
(ua,va,wa,ba,hua,
$ pa,tra,trname,ntrname,datev,
$ minx,maxx,miny,maxy,gnk,nia,nja,nka,4)
endif
*
call mc2stop
(min(err,0))
*
call trnes
(ua,bcs_uua(bcs_is),bcs_uua(bcs_in),
$ bcs_uua(bcs_iw),bcs_uua(bcs_ie),minx,maxx,miny,maxy,
$ minxs,maxxs,minys,maxys,minxw,maxxw,minyw,maxyw,gnk)
call trnes
(va,bcs_vva(bcs_is),bcs_vva(bcs_in),
$ bcs_vva(bcs_iw),bcs_vva(bcs_ie),minx,maxx,miny,maxy,
$ minxs,maxxs,minys,maxys,minxw,maxxw,minyw,maxyw,gnk)
call trnes
(wa,bcs_wwa(bcs_is),bcs_wwa(bcs_in),
$ bcs_wwa(bcs_iw),bcs_wwa(bcs_ie),minx,maxx,miny,maxy,
$ minxs,maxxs,minys,maxys,minxw,maxxw,minyw,maxyw,gnk)
call trnes
(ba,bcs_bba(bcs_is),bcs_bba(bcs_in),
$ bcs_bba(bcs_iw),bcs_bba(bcs_ie),minx,maxx,miny,maxy,
$ minxs,maxxs,minys,maxys,minxw,maxxw,minyw,maxyw,gnk)
call trnes
(pa,bcs_ppa(bcs_is),bcs_ppa(bcs_inq),
$ bcs_ppa(bcs_iwq),bcs_ppa(bcs_ieq),minx,maxx,miny,maxy,
$ minxs,maxxs,minys,maxys,minxw,maxxw,minyw,maxyw,gnk+1)
call trnes
(hua,bcs_hua(bcs_is),bcs_hua(bcs_in),
$ bcs_hua(bcs_iw),bcs_hua(bcs_ie),minx,maxx,miny,maxy,
$ minxs,maxxs,minys,maxys,minxw,maxxw,minyw,maxyw,gnk)
do n = 1, ntr
id = (n-1)*bcs_sz+1
call trnes
(tra((n-1)*dim3d+1),bcs_tra(id),
$ bcs_tra(id+bcs_in-1),bcs_tra(id+bcs_iw-1),
$ bcs_tra(id+bcs_ie-1),minx,maxx,miny,maxy,
$ minxs,maxxs,minys,maxys,minxw,maxxw,minyw,maxyw,gnk)
end do
*
deallocate (pa,ua,va,wa,ba,hua,tra)
endif
whenby1 = .true.
else
*
dtf = 1.0
*
endif
!$omp end single
!$omp barrier
*
a = (tf_nest-tx)/ (tf_nest - tx + (dble(dtf)*dt * rsid) )
b = one - a
*
do i=1,(ntr+6)*bcs_sz+bcs_sz/gnk
bcs_pp(i) = a*bcs_pp(i) + b*bcs_ppa(i)
end do
*
1001 format (/' WORNG ifd_ftype in nest_intt: --- ABORT ---'/)
*-----------------------------------------------------------------------
return
end