141 IF(type_tsobc == 4)
THEN 167 IF(type_tsobc == 4)
THEN 194 REAL(SP),
PARAMETER :: APT_ATMO = 0.0113_sp
195 REAL(DP),
PARAMETER :: ALFA_ATMO = 112.0_sp*
pi2/360.0_sp
196 REAL(SP),
PARAMETER :: S2PERIOD = 43200.0_sp
199 TYPE(
time):: TIME_ELAPSED
200 REAL(DP):: TIME_FLT,PHAI_IJ
204 & (
"ELEVATION_ATMO: ILLEGAL ATTEMPT TO USE ATMOSPHERIC TIDE IN CARTESIAN MODE",&
205 &
"YOU MUST BE USING PROJ4 TO DO THIS",&
206 &
"THE POLICE HAVE BEEN NOTIFIED AND WILL BE THERE SHORTLY")
229 time_flt =
seconds(time_elapsed *
pi2/s2period)
232 phai_ij =
lon(i)*
pi2/360.0_sp
233 force = apt_atmo*dcos(time_flt+2.0_dp*phai_ij-alfa_atmo)
271 TYPE(
time):: TIME_ELAPSED
272 REAL(DP):: TIME_FLT,PHAI_IJ
274 REAL(SP),
ALLOCATABLE :: BND_ELV(:)
277 ALLOCATE(bnd_elv(
iobcn))
318 phai_ij =
phai(i,j)*
pi2/360.0_sp
321 force =
apt(i,j)*dcos(time_flt -phai_ij) + force
323 force = force +
emean(i)
330 CALL fatal_error(
"BCOND_ASL: INVALID TIDE FORCING TYPE ?")
377 INTEGER :: I1,I2,J,JN,K_RK
378 REAL(SP):: CC,CP,ALPHA_RK_TMP
412 INTEGER :: I1,I2,J,JN,K_RK
413 REAL(SP):: CC,CP,ALPHA_RK_TMP
447 INTEGER :: I1,I2,I3,J,JN
459 ELSE IF(cl > 0.0 .AND. cl < 1.0)
THEN 465 elf(i1)=(
elm1(i1)*(1.0-mu)+2.0*mu*
el(i2))/(1.0+mu)
481 INTEGER :: I,I1,I2,NCNT,IERR,J
482 INTEGER,
ALLOCATABLE :: TEMP1(:),TEMP2(:),TEMP3(:),TEMP4(:),TEMP5(:),TEMP6(:),TEMP7(:),ITEMP(:)
503 WRITE(
ipt,*)
'! BCOND TYPE : TOTAL BC NODES; BC NODES IN EACH DOMAIN' 514 DEALLOCATE(temp1,temp2,temp3,temp4,temp5,temp6,temp7)
517 100
FORMAT(1x,a26,i6,
" =>",2x,4(i5,1h,))
534 INTEGER :: I,I1,I2,I3,I4,I5,II,J
597 REAL(SP) :: DXC,DYC,DXN,DYN,CROSS,E1,E2,DOTMAX,DOT,DX,DY,DXN_TMP,DYN_TMP
598 INTEGER :: I,J,JJ,INODE,JNODE,I1,I2,IC,N1,N2,N3
601 REAL(SP),
ALLOCATABLE :: NXOBC_TMP(:),NYOBC_TMP(:)
618 jnode =
nbsn(inode,j)
619 IF(
isonb(jnode) == 2 .AND. inode /= jnode)
THEN 628 WRITE(*,*)
'NO ADJACENT NODE FOUND FOR BOUNDARY NODE',i
629 WRITE(*,*)
'IN PROCESSOR',myid
641 ALLOCATE(nxobc_tmp(
iobcn)) ; nxobc_tmp = 0
642 ALLOCATE(nyobc_tmp(
iobcn)) ; nyobc_tmp = 0
651 n1 =
nv(ic,1) ; n2 =
nv(ic,2) ; n3 =
nv(ic,3)
652 IF( n1-i2 == 0 .OR. n2-i2 == 0 .OR. n3-i2 == 0)
THEN 653 dxn =
vx(i2)-
vx(i1) ; dyn =
vy(i2)-
vy(i1)
654 dxc =
xc(ic)-
vx(i1) ; dyc =
yc(ic)-
vy(i1)
655 cross = sign(1.0_sp,dxc*dyn - dyc*dxn)
656 nxobc_tmp(i) = cross*dyn/sqrt(dxn**2 +dyn**2)
657 nyobc_tmp(i) = -cross*dxn/sqrt(dxn**2 +dyn**2)
658 nxobc(i) = nxobc_tmp(i)
659 nyobc(i) = nyobc_tmp(i)
673 n1 =
nv(ic,1) ; n2 =
nv(ic,2) ; n3 =
nv(ic,3)
674 IF( n1-i2 == 0 .OR. n2-i2 == 0 .OR. n3-i2 == 0)
THEN 675 dxn =
vx(i2)-
vx(i1) ; dyn =
vy(i2)-
vy(i1)
676 dxc =
xc(ic)-
vx(i1) ; dyc =
yc(ic)-
vy(i1)
677 cross = sign(1.0_sp,dxc*dyn - dyc*dxn)
678 nxobc_tmp(i) = nxobc_tmp(i) + cross*dyn/sqrt(dxn**2 +dyn**2)
679 nyobc_tmp(i) = nyobc_tmp(i) - cross*dxn/sqrt(dxn**2 +dyn**2)
680 nxobc(i) = nxobc_tmp(i)/sqrt(nxobc_tmp(i)**2 + nyobc_tmp(i)**2)
681 nyobc(i) = nyobc_tmp(i)/sqrt(nxobc_tmp(i)**2 + nyobc_tmp(i)**2)
694 DEALLOCATE(nxobc_tmp,nyobc_tmp)
710 e1 = sqrt( (
vx(n1)-
vx(n2))**2 + (
vy(n1)-
vy(n2))**2)
711 e2 = sqrt( (
vx(n1)-
vx(n3))**2 + (
vy(n1)-
vy(n3))**2)
726 jnode =
nbsn(inode,j)
727 IF(
isonb(jnode) /= 2 .AND. inode /= jnode)
THEN 728 dxn_tmp =
vx(jnode)-
vx(inode)
729 dyn_tmp =
vy(jnode)-
vy(inode)
730 dxn = dxn_tmp/sqrt(dxn_tmp**2 + dyn_tmp**2)
731 dyn = dyn_tmp/sqrt(dxn_tmp**2 + dyn_tmp**2)
748 jnode =
nbsn(inode,j)
749 IF(
isonb(jnode) /= 2)
THEN 750 dxn_tmp =
vx(jnode)-
vx(inode)
751 dyn_tmp =
vy(jnode)-
vy(inode)
752 dxn = dxn_tmp/(sqrt(dxn_tmp**2 + dyn_tmp**2) + 1.0e-9_sp)
753 dyn = dyn_tmp/(sqrt(dxn_tmp**2 + dyn_tmp**2) + 1.0e-9_sp)
833 INTEGER,
INTENT(IN) :: K
877 INTEGER :: I,J,J1,J2,K
878 REAL(SP):: CC,CP,MU,CL
879 REAL(SP):: PERT_NEXT,PERT,T2D_NEXT,T2D
880 REAL(SP):: T2D_NEXT1,TM12D_NEXT2,TM12D_NEXT1,TM22D_NEXT1
881 REAL(SP):: TTMP(IOBCN,KBM1)
883 SELECT CASE(type_tsobc)
887 ttmp(i,k) =
tf1(j1,k) - t2d_next
893 pert_next =
tf1(j1,k) - t2d_next
895 ttmp(i,k) = (cc*pert_next + pert)/cp
901 pert_next =
tf1(j1,k) - t2d_next
903 ttmp(i,k) = (cc*pert_next + pert*(1.0_sp -
dti/10800.0_sp))/cp
912 t2d_next1 =t2d_next1 +
t1(j1,k)*
dz(j1,k)
913 tm12d_next2=tm12d_next2+
t1m1(j2,k)*
dz(j2,k)
914 tm12d_next1=tm12d_next1+
t1m1(j,k)*
dz(j,k)
915 tm22d_next1=tm22d_next1+
t1m2(j1,k)*
dz(j1,k)
919 cl = ((
t1m2(j1,k)-tm22d_next1)-(
t1(j1,k)-t2d_next1))/ &
920 ((
t1(j1,k)-t2d_next1)+(
t1m2(j1,k)-tm22d_next1) &
921 -2.0*(
t1m1(j2,k)-tm12d_next2))
924 ELSE IF(cl > 0.0 .AND. cl < 1.0)
THEN 930 ttmp(i,k)=((
t1m1(j,k)-tm12d_next1)*(1.0-mu) &
931 +2.0*mu*(
t1(j1,k)-t2d_next1))/(1.0+mu)
935 CALL fatal_error(
"INVALID OBC_TS_TYPE IN NML_OPEN_BOUNDARY_CONTROL"&
955 INTEGER :: I,J,J1,J2,K
956 REAL(SP):: CC,CP,MU,CL
957 REAL(SP):: PERT_NEXT,PERT,S2D_NEXT,S2D
958 REAL(SP):: S2D_NEXT1,SM12D_NEXT2,SM12D_NEXT1,SM22D_NEXT1
959 REAL(SP):: STMP(IOBCN,KBM1)
961 SELECT CASE(type_tsobc)
965 stmp(i,k) =
sf1(j1,k) - s2d_next
971 pert_next =
sf1(j1,k) - s2d_next
973 stmp(i,k) = (cc*pert_next + pert)/cp
979 pert_next =
sf1(j1,k) - s2d_next
981 stmp(i,k) = (cc*pert_next + pert*(1.0_sp -
dti/10800.0_sp))/cp
990 s2d_next1 =s2d_next1 +
s1(j1,k)*
dz(j1,k)
991 sm12d_next2=sm12d_next2+
s1m1(j2,k)*
dz(j2,k)
992 sm12d_next1=sm12d_next1+
s1m1(j,k)*
dz(j,k)
993 sm22d_next1=sm22d_next1+
s1m2(j1,k)*
dz(j1,k)
997 cl = ((
s1m2(j1,k)-sm22d_next1)-(
s1(j1,k)-s2d_next1))/ &
998 ((
s1(j1,k)-s2d_next1)+(
s1m2(j1,k)-sm22d_next1) &
999 -2.0*(
s1m1(j2,k)-sm12d_next2))
1002 ELSE IF(cl > 0.0 .AND. cl < 1.0)
THEN 1008 stmp(i,k)=((
s1m1(j,k)-sm12d_next1)*(1.0-mu) &
1009 +2.0*mu*(
s1(j1,k)-s2d_next1))/(1.0+mu)
1013 CALL fatal_error(
"INVALID OBC_TS_TYPE IN NML_OPEN_BOUNDARY_CONTROL"&
1014 &,
"See mod_obcs.F")
1022 SUBROUTINE gday1(IDD,IMM,IYY,ICC,KD)
1041 integer idd, imm, iyy, icc, kd
1044 data ndp/0,31,59,90,120,151,181,212,243,273,304,334,365/
1045 data ndm/31,28,31,30,31,30,31,31,30,31,30,31/
1052 if(iyy.lt.0.or.iyy.gt.99)
then 1056 if(imm.le.0.or.imm.gt.12)
then 1064 if(imm.ne.2.and.idd.gt.ndm(imm))
then 1068 if(imm.eq.2.and.idd.gt.29)
then 1072 if(imm.eq.2.and.idd.gt.28.and.((iyy/4)*4-iyy.ne.0.or.(iyy.eq.0.and.(icc/4)*4-icc.ne.0)))
then 1076 5000
format(
' input error. icc = ',i7)
1077 5010
format(
' input error. iyy = ',i7)
1078 5020
format(
' input error. imm = ',i7)
1079 5030
format(
' input error. idd = ',i7)
1082 kd = icc*36524 + (icc+3)/4
1085 kd = kd + iyy*365 + (iyy+3)/4
1090 if(iyy.gt.0.and.(icc-(icc/4)*4).ne.0) kd=kd-1
1097 if(imm.gt.2.and.((iyy/4)*4-iyy).eq.0.and.((iyy.ne.0).or.(((icc/4)*4-icc).eq.0))) kd=kd+1
1105 END SUBROUTINE gday1 1107 subroutine astro(d1,h,pp,s,p,np,dh,dpp,ds,dp,dnp)
1123 implicit real*8(a-h,o-z)
1128 h=279.696678d0+.9856473354d0*d1+.00002267d0*d2*d2
1129 pp=281.220833d0+.0000470684d0*d1+.0000339d0*d2*d2+.00000007d0*d2**3
1130 s=270.434164d0+13.1763965268d0*d1-.000085d0*d2*d2+.000000039d0*d2**3
1131 p=334.329556d0+.1114040803d0*d1-.0007739d0*d2*d2-.00000026d0*d2**3
1132 np=-259.183275d0+.0529539222d0*d1-.0001557d0*d2*d2-.00000005d0*d2**3
1143 dh=.9856473354d0+2.d-8*.00002267d0*d1
1144 dpp=.0000470684d0+2.d-8*.0000339d0*d1+3.d-12*.00000007d0*d1**2
1145 ds=13.1763965268d0-2.d-8*.000085d0*d1+3.d-12*.000000039d0*d1**2
1146 dp=.1114040803d0-2.d-8*.0007739d0*d1-3.d-12*.00000026d0*d1**2
1147 dnp=+.0529539222d0-2.d-8*.0001557d0*d1-3.d-12*.00000005d0*d1**2
1154 end subroutine astro integer, dimension(:), allocatable, target ntsn
subroutine astro(d1, h, pp, s, p, np, dh, dpp, ds, dp, dnp)
integer, dimension(:), allocatable nadjc_obc
real(sp), dimension(:,:), allocatable fluxf_obc
subroutine bcond_t_perturbation(T2D_NEXT, T2D, TTMP, I, J, J1)
real(dp), dimension(4), parameter alpha_rk
real(sp), dimension(:), allocatable dltn_obc
real(sp), dimension(:), allocatable, target elrk
real(sp), dimension(:), allocatable, target h
real(sp), dimension(:), allocatable emean
real(sp), dimension(:), allocatable, target el
integer, dimension(:), allocatable nfluxf_obc
integer, dimension(:), allocatable type_obc
real(sp), dimension(:,:), allocatable s1m1
logical function dbg_set(vrb)
integer, dimension(:,:), allocatable adjn_obc
integer, dimension(:), allocatable nadjn_obc
real(sp), dimension(:), allocatable, target art1
real(sp), dimension(:), allocatable, target yc
integer, public tide_forcing_type
real(sp), dimension(:,:), allocatable, target t1
real(sp), dimension(:), allocatable elm2
integer, dimension(:,:), allocatable obc_lst
real(sp), dimension(:), allocatable iucp
subroutine elevation_atmo
real(sp), dimension(:), allocatable nyobc
real(sp), dimension(:,:), allocatable xflux_obc
integer, parameter, public tide_forcing_timeseries
integer, dimension(:), allocatable next_obc2
real(sp), dimension(:,:), allocatable s1m2
real(sp), dimension(:,:), allocatable apt
real(sp), dimension(:,:), allocatable, target s1
integer, parameter, public tide_forcing_spectral
real(sp), dimension(:,:), allocatable temp_obc
integer, dimension(:), allocatable next_obc
real(sp), dimension(:), allocatable period
real(sp), dimension(:), allocatable, target vx
real(sp), dimension(:), allocatable nxobc
real(sp), dimension(:,:), allocatable, target tf1
real(sp), dimension(:), allocatable uard_obcn
subroutine gday1(IDD, IMM, IYY, ICC, KD)
real(sp), dimension(:), allocatable, target vy
integer, dimension(:), allocatable, target ntve
subroutine, public update_tide(NOW, BND_ELV)
integer, dimension(:), allocatable i_obc_n
real(sp), dimension(:), allocatable elm1
real(sp), dimension(:,:), allocatable, target sf1
real(sp), dimension(:), allocatable, target elf
real(sp), dimension(:), allocatable xflux_obcn
integer, dimension(:,:), allocatable, target nv
integer, dimension(5) ibcn
integer, dimension(5) ibcn_gl
real(sp), dimension(:,:), allocatable t1m2
integer, dimension(:,:), allocatable adjc_obc
real(sp), dimension(:,:), allocatable, target dz
subroutine assign_elm1_to_elm2
real(sp), dimension(:), allocatable, target elf_atmo
real(dp) function seconds(MJD)
integer, dimension(:), allocatable type_obc_gl
subroutine bcond_bki(K_RK)
real(sp), dimension(:), allocatable fluxobn
integer, dimension(:,:), allocatable, target nbve
subroutine fatal_error(ER1, ER2, ER3, ER4)
real(sp), dimension(:), allocatable, target lon
real(sp), dimension(:), allocatable, target xc
real(sp), dimension(:,:), allocatable phai
subroutine bcond_gwi(K_RK)
real(sp), dimension(:), allocatable, target grav_n
integer, dimension(:,:), allocatable, target nbsn
subroutine setup_obctypes
integer, dimension(:), allocatable, target isonb
real(sp), dimension(:,:), allocatable t1m1
subroutine bcond_s_perturbation(S2D_NEXT, S2D, STMP, I, J, J1)
real(sp), dimension(:,:), allocatable salt_obc
subroutine alloc_obc_data
integer, parameter dbg_log