101 REAL(
sp),
POINTER,
DIMENSION(:) :: vec
102 REAL(
sp),
POINTER :: scl
103 CHARACTER(LEN=80) :: d_tit
104 CHARACTER(LEN=80) :: d_des
105 CHARACTER(LEN=80) :: var
106 CHARACTER(LEN=80) :: vname
107 CHARACTER(LEN=120) :: filename
110 INTERFACE ASSIGNMENT(=)
175 INTEGER,
INTENT(IN) :: N
179 ALLOCATE(probe(n),stat=status)
180 IF(status/=0)
CALL fatal_error(
"MOD_PROBE: COULD NOT ALLOCATE PROBE TYPE")
200 probe%FILENAME =
'none' 202 NULLIFY(probe(i)%SCL)
203 NULLIFY(probe(i)%VEC)
219 a%D_LOC_GL = b%D_LOC_GL
231 a%FILENAME = b%FILENAME
239 USE all_vars,
only:
xmc,
ymc,
h1,
h,
xm,
ym,
h,
lon,
lat,
lonc,
latc 242 REAL(SP),
ALLOCATABLE,
TARGET :: VEC(:)
243 CHARACTER(LEN=80):: cstr1,cstr2,cstr3
244 INTEGER :: I,J,IBND,PROCMAX
249 IF (probe%K_ONE /= -1 .or. probe%K_TWO /= -1)
CALL fatal_error&
250 &(
"ERROR IN PROBE SETUP: PROBE_LEVELS should not be set for vector variables",&
251 &
"Do not specify it in the PROBE Namelist object for "//trim(
probe_variable))
253 IF(probe%D_LOC_GL <1)
THEN 254 write(cstr1,
'(i8)') probe%D_LOC_GL
255 write(cstr2,
'(i8)')
ngl 258 &
'IS NOT IN GLOBAL DOMAIN: 1 --> '//trim(cstr2))
261 IF( ubound(vec,1) ==
nt)
THEN 263 IF(probe%D_LOC_GL >
ngl)
THEN 265 write(cstr1,
'(i8)') probe%D_LOC_GL
266 write(cstr2,
'(i8)')
ngl 269 &
'IS NOT IN GLOBAL DOMAIN: 1 --> '//trim(cstr2))
272 IF(
elid(probe%D_LOC_GL) /= 0)
THEN 274 probe%D_LOC =
elid(probe%D_LOC_GL)
278 probe%XLOC =
xmc(probe%D_LOC)
279 probe%YLOC =
ymc(probe%D_LOC)
281 probe%LONLOC =
lonc(probe%D_LOC)
282 probe%LATLOC =
latc(probe%D_LOC)
284 probe%DPTH =
h1(probe%D_LOC)
286 probe%SCL => vec(probe%D_LOC)
289 ELSE IF ( ubound(vec,1) ==
mt)
THEN 291 IF(probe%D_LOC_GL >
mgl)
THEN 292 write(cstr1,
'(i8)') probe%D_LOC_GL
293 write(cstr2,
'(i8)')
mgl 296 &
'IS NOT IN GLOBAL DOMAIN: 1 --> '//trim(cstr2))
300 IF(
nlid(probe%D_LOC_GL) == 0)
RETURN 302 IF(
nlid(probe%D_LOC_GL) > 0)
THEN 306 IF(
bn_lst(j) == probe%D_LOC_GL) ibnd = j
311 IF(
bn_ney(ibnd,j)==1)
THEN 312 IF(j < procmax) procmax = j
316 IF(procmax ==
myid)
THEN 318 probe%D_LOC =
nlid(probe%D_LOC_GL)
321 probe%XLOC =
xm(probe%D_LOC)
322 probe%YLOC =
ym(probe%D_LOC)
324 probe%LONLOC =
lon(probe%D_LOC)
325 probe%LATLOC =
lat(probe%D_LOC)
327 probe%DPTH =
h(probe%D_LOC)
329 probe%SCL => vec(probe%D_LOC)
333 probe%D_LOC =
nlid(probe%D_LOC_GL)
336 probe%XLOC =
xm(probe%D_LOC)
337 probe%YLOC =
ym(probe%D_LOC)
339 probe%LONLOC =
lon(probe%D_LOC)
340 probe%LATLOC =
lat(probe%D_LOC)
342 probe%DPTH =
h(probe%D_LOC)
344 probe%SCL => vec(probe%D_LOC)
351 CALL fatal_error(
'MYPROBE: INVALID VARIABLE SIZE (Not equal MT or NT?)'&
352 &,
'Variable:'//trim(probe%VAR))
359 USE all_vars,
only:
xmc,
ymc,
h1,
h,
xm,
ym,
h,
lon,
lat,
lonc,
latc 362 REAL(SP),
ALLOCATABLE,
TARGET :: ARR(:,:)
363 CHARACTER(LEN=80):: cstr1,cstr2,cstr3
364 INTEGER :: I,J,IBND,PROCMAX
369 IF(probe%K_ONE > ubound(arr,2) .or. probe%K_TWO > ubound(arr,2) )
THEN 371 &
'MAKE SURE PROBE LEVELS ARE LESS THAN OR EQUAL TO THE NUMBER OF MODEL LEVELS')
374 IF(probe%K_ONE < 1 .or. probe%K_TWO <1)
THEN 376 &
'MAKE SURE PROBE LEVELS ARE GREATER THAN OR EQUAL TO ONE')
382 &(
'ERROR IN PROBE SETUP: PROBE LEVEL RANGE NOT CORRECT FOR VARIABLE: '//trim(
probe_variable),&
383 &
'THE PROBE LEVEL INTERVAL MUST SPECIFY A VALID RANGE a:b')
387 IF(probe%D_LOC_GL <1)
THEN 388 write(cstr1,
'(i8)') probe%D_LOC_GL
389 write(cstr2,
'(i8)')
ngl 392 &
'IS NOT IN GLOBAL DOMAIN: 1 --> '//trim(cstr2))
395 IF( ubound(arr,1) ==
nt)
THEN 397 IF(probe%D_LOC_GL >
ngl)
THEN 399 write(cstr1,
'(i8)') probe%D_LOC_GL
400 write(cstr2,
'(i8)')
ngl 403 &
'IS NOT IN GLOBAL DOMAIN: 1 --> '//trim(cstr2))
406 IF(
elid(probe%D_LOC_GL) /= 0)
THEN 408 probe%D_LOC =
elid(probe%D_LOC_GL)
412 probe%XLOC =
xmc(probe%D_LOC)
413 probe%YLOC =
ymc(probe%D_LOC)
415 probe%LONLOC =
lonc(probe%D_LOC)
416 probe%LATLOC =
latc(probe%D_LOC)
418 probe%DPTH =
h1(probe%D_LOC)
420 probe%VEC => arr(probe%D_LOC,probe%K_ONE:probe%K_TWO)
424 ELSE IF ( ubound(arr,1) ==
mt)
THEN 426 IF(probe%D_LOC_GL >
mgl)
THEN 427 write(cstr1,
'(i8)') probe%D_LOC_GL
428 write(cstr2,
'(i8)')
mgl 431 &
'IS NOT IN GLOBAL DOMAIN: 1 --> '//trim(cstr2))
435 IF(
nlid(probe%D_LOC_GL) == 0)
RETURN 437 IF(
nlid(probe%D_LOC_GL) > 0)
THEN 441 IF(
bn_lst(j) == probe%D_LOC_GL) ibnd = j
446 IF(
bn_ney(ibnd,j)==1)
THEN 447 IF(j < procmax) procmax = j
451 IF(procmax ==
myid)
THEN 453 probe%D_LOC =
nlid(probe%D_LOC_GL)
456 probe%XLOC =
xm(probe%D_LOC)
457 probe%YLOC =
ym(probe%D_LOC)
459 probe%LONLOC =
lon(probe%D_LOC)
460 probe%LATLOC =
lat(probe%D_LOC)
462 probe%DPTH =
h(probe%D_LOC)
464 probe%VEC => arr(probe%D_LOC,probe%K_ONE:probe%K_TWO)
468 probe%D_LOC =
nlid(probe%D_LOC_GL)
471 probe%XLOC =
xm(probe%D_LOC)
472 probe%YLOC =
ym(probe%D_LOC)
474 probe%LONLOC =
lon(probe%D_LOC)
475 probe%LATLOC =
lat(probe%D_LOC)
477 probe%DPTH =
h(probe%D_LOC)
479 probe%VEC => arr(probe%D_LOC,probe%K_ONE:probe%K_TWO)
486 CALL fatal_error(
'MYPROBE: INVALID VARIABLE SIZE?'&
487 &,
'Variable:'//trim(probe%VAR))
505 LOGICAL,
INTENT(IN) :: P_ON
506 INTEGER,
INTENT(IN) :: NP
507 CHARACTER(LEN=*),
INTENT(IN):: FNM
509 CHARACTER(LEN=80):: cstr1,cstr2,cstr3
510 LOGICAL FEXIST,ISLOCAL
511 INTEGER :: I,J,IERR,IOS,STATUS, N_PROBE
512 INTEGER :: PROCMAX, IBND, charnum
513 CHARACTER(LEN=120) :: pathnfile
514 CHARACTER(LEN=4) :: OFLAG
516 INTEGER(ITIME) :: OSTEP
518 &
write(
ipt,*)
"START: SET_PROBES;" 528 &
write(
ipt,*)
"! Time Series Probes are off" 532 write(
ipt,*)
"! Time Series Probes are on" 533 write(
ipt,*)
"! Setting up Probes:" 541 &
CALL warning(
"PROBES FILE does not end in .nml", &
545 INQUIRE(file=pathnfile,exist=fexist)
567 READ(unit=
probeunit, nml=nml_probe,iostat=ios)
591 IF (oflag ==
'time')
THEN 594 ELSE IF(oflag ==
'step')
THEN 600 &(
'ERROR IN PROBE SETUP: Time series output interval is less than or equal to zero!')
620 write(
ipt,*)
"Bad NML_PROBE in the Name List!" 622 write(
ipt,*)
"But Found",n_probe,
"; Valid PROBE name list objects.(Printing Last)" 623 write(unit=
ipt,nml=nml_probe)
627 &(
'THE NUMBER OF PROBES SPECIFIED IN THE RUN FILE CAN',&
628 &
'NOT BE FOUND IN THE PROBE FILE:'//trim(
probes_file))
658 WRITE(
ipt,*)
'! TIME SERIES OBJECT DATA ' 659 WRITE(
ipt,*)
" OBJ# PROC GLOBAL LOCAL VAR FILENAME" 685 101
FORMAT(i5,i5,i8,i8,3x,a6,1x,a30)
705 CHARACTER(LEN=120) :: FNAME
706 CHARACTER(LEN=2 ) :: NAC
707 CHARACTER(LEN=3 ) :: APPEND
719 INQUIRE(file=fname,exist=fexist)
723 &(
"Please clean old time seris output in your results directory!")
724 WRITE(nac,
'(I2.2)')icnt
727 INQUIRE(file=fname,exist=fexist)
731 CALL fopen(iunit,fname,
'ofr')
737 WRITE(iunit,*)
' K1 K2 ' 739 WRITE(iunit,*)
' X(M) Y(M) DEPTH(M)' 741 WRITE(iunit,*)
' LON LAT DEPTH(M)' 744 WRITE(iunit,*)
'DATA FOLLOWS:' 745 WRITE(iunit,*)
'Time(days) Data...' 769 INTEGER I,K,K1,K2,IUNIT
785 OPEN(unit=iunit,file=
lcl_probe(i)%FILENAME,form=
'FORMATTED',position=
'APPEND')
793 ELSE IF(
ASSOCIATED(
lcl_probe(i)%SCL))
THEN 826 SELECT CASE(trim(probe%VAR))
862 &(
'VARIABLE: '//trim(probe%VAR)//
' HAS NOT BEEN SET UP',&
863 &
'FOR TIME SERIES OUTPUT (Did you use CAPITALS by mistake?)',&
864 &
'MODIFY MOD_PROBE TO ADD IT!')
real(sp), dimension(:,:), allocatable, target q2
real(sp), dimension(:,:), allocatable, target km
real(sp), dimension(:), allocatable, target va
subroutine dump_probe_data
character(len=80) probe_variable
subroutine probe_store(PROBE)
real(sp), dimension(:), allocatable, target h
integer, dimension(:), pointer elid
real(sp), dimension(:), allocatable, target el
real(sp), dimension(:,:), allocatable, target v
type(probe_obj), dimension(:), allocatable lcl_probe
logical function dbg_set(vrb)
real(sp), dimension(:,:), allocatable, target rho1
character(len=80) probe_var_name
real(sp), dimension(:,:), allocatable, target t1
real(sp), dimension(:,:), allocatable, target w
subroutine myprobe_arr(PROBE, ARR)
subroutine myprobe_vec(PROBE, VEC)
real(sp), dimension(:), allocatable, target ymc
type(time) function get_now()
integer, dimension(:), pointer nde_id
character(len=80) output_dir
real(sp), dimension(:), allocatable, target latc
subroutine print_real_time(mjd, IPT, char, TZONE)
character(len=80) probe_title
real(sp), dimension(:,:), allocatable, target ww
real(sp), dimension(:,:), allocatable, target q2l
subroutine assign_probe(A, B)
real(sp), dimension(:,:), allocatable, target u
real(sp), dimension(:,:), allocatable, target s1
integer, dimension(:), pointer nlid
character(len=80) probe_description
real(dp) function days(MJD)
real(sp), dimension(:), allocatable, target xmc
real(sp), dimension(:), allocatable, target lonc
subroutine alloc_probe(PROBE, N)
integer, dimension(:), pointer bn_lst
integer, parameter dbg_sbrio
subroutine warning(ER1, ER2, ER3, ER4)
subroutine fopen(IUNIT, INSTR, IOPT)
real(sp), dimension(:), allocatable, target xm
real(sp), dimension(:), allocatable, target ua
type(probe_obj), dimension(:), allocatable glb_probe
real(sp), dimension(:,:), allocatable, target l
real(sp), dimension(:,:), allocatable, target kh
integer, parameter probeunit
real(sp), dimension(:), allocatable, target lat
subroutine fatal_error(ER1, ER2, ER3, ER4)
real(sp), dimension(:), allocatable, target h1
real(sp), dimension(:), allocatable, target lon
subroutine ideal_time_string2time(string, flag, ntime, tstep)
subroutine init_nml_probe
character(len=80) input_dir
character(len=80) probes_file
integer, dimension(:,:), pointer bn_ney
integer, parameter dbg_sbr
subroutine set_probes(P_ON, NP, FNM)
real(sp), dimension(:,:), allocatable, target kq
integer, dimension(2) probe_levels
character(len=80) probe_interval
integer, parameter dbg_log
real(sp), dimension(:), allocatable, target ym