3 INTEGER, PARAMETER :: int_num_handles = 99
4 LOGICAL, DIMENSION(int_num_handles) :: okay_to_write, okay_to_read, &
5 opened_for_write, opened_for_update, &
7 int_handle_in_use, okay_to_commit
8 LOGICAL, DIMENSION(int_num_handles) :: mcel_grid_defined, mcel_finalized
9 INTEGER, DIMENSION(int_num_handles) :: int_num_bytes_to_write
10 INTEGER, DIMENSION(int_num_handles) :: usemask
11 CHARACTER*256, DIMENSION(int_num_handles) :: CurrentDateInFile
12 CHARACTER*8092, DIMENSION(int_num_handles) :: ListOfFields
13 REAL, POINTER :: int_local_output_buffer(:)
14 INTEGER :: int_local_output_cursor
15 INTEGER :: mcel_npglobal, mcel_mystart, mcel_mnproc, mcel_myproc
17 INTEGER, PARAMETER :: onebyte = 1
18 INTEGER comm_io_servers, iserver, hdrbufsize, obufsize
19 INTEGER itypesize, rtypesize, typesize
20 INTEGER, DIMENSION(512) :: hdrbuf
21 INTEGER, DIMENSION(int_num_handles) :: handle
22 INTEGER, DIMENSION(512, int_num_handles) :: open_file_descriptors
24 #include "intio_tags.h"
25 #include "wrf_io_flags.h"
26 #include "wrf_status_codes.h"
27 CHARACTER*80 LAT_R(int_num_handles), LON_R(int_num_handles), LANDMASK_I(int_num_handles)
29 REAL*8, ALLOCATABLE :: xlat(:,:), xlong(:,:)
30 REAL*8 :: deltax, deltay, dxm(2)
31 REAL*8 :: originx, originy, origin(2)
32 INTEGER, ALLOCATABLE :: mask(:,:)
33 REAL, ALLOCATABLE :: rmask(:,:)
34 DOUBLEPRECISION, ALLOCATABLE :: dmask(:,:)
36 CHARACTER*132 last_next_var
40 LOGICAL FUNCTION int_valid_handle( handle )
42 INTEGER, INTENT(IN) :: handle
43 int_valid_handle = ( handle .ge. 8 .and. handle .le. int_num_handles )
44 END FUNCTION int_valid_handle
46 SUBROUTINE int_get_fresh_handle( retval )
47 ! USE wrf_data, ONLY : wrf_data_handle
48 ! USE ext_ncd_support_routines, ONLY : allocHandle
49 ! type(wrf_data_handle),pointer :: DH
50 ! INTEGER i, retval, comm, Status
54 CALL allocHandle(retval,DH,Comm,Status)
58 ! dont use first 8 handles
59 DO i = 8, int_num_handles
60 IF ( .NOT. int_handle_in_use(i) ) THEN
66 IF ( retval < 0 ) THEN
67 CALL wrf_error_fatal("external/io_quilt/io_int.F90: int_get_fresh_handle() can not")
69 int_handle_in_use(retval) = .TRUE.
70 NULLIFY ( int_local_output_buffer )
71 END SUBROUTINE int_get_fresh_handle
73 ! parse comma separated list of VARIABLE=VALUE strings and return the
74 ! value for the matching variable if such exists, otherwise return
76 SUBROUTINE get_value ( varname , str , retval )
78 CHARACTER*(*) :: varname
80 CHARACTER*(*) :: retval
82 CHARACTER (128) varstr, tstr
84 LOGICAL nobreak, nobreakouter
86 varstr = TRIM(varname)//"="
87 varstrn = len(TRIM(varstr))
92 DO WHILE ( nobreakouter )
99 IF (str(i:i) .NE. ',' ) THEN
107 IF ( i .GT. n ) nobreakouter = .FALSE.
108 IF ( varstr(1:varstrn) .EQ. tstr(1:varstrn) ) THEN
109 retval(1:) = TRIM(tstr(varstrn+1:))
110 nobreakouter = .FALSE.
114 END SUBROUTINE get_value
118 SUBROUTINE init_module_ext_mcel
120 CALL wrf_sizeof_integer( itypesize )
121 CALL wrf_sizeof_real ( rtypesize )
122 END SUBROUTINE init_module_ext_mcel
124 END MODULE module_ext_mcel
126 SUBROUTINE copy_field_to_cache_r2r ( Field, cache, ips, ipe, jps, jpe, ims, ime, jms, jme )
128 INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
131 REAL cache(ips:ipe,jps:jpe)
134 idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
135 cache(i,j) = Field( idex )
138 END SUBROUTINE copy_field_to_cache_r2r
140 SUBROUTINE copy_field_to_cache_r2d ( Field, cache, ips, ipe, jps, jpe, ims, ime, jms, jme )
142 INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
145 DOUBLE PRECISION cache(ips:ipe,jps:jpe)
148 idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
149 cache(i,j) = Field( idex )
152 END SUBROUTINE copy_field_to_cache_r2d
154 SUBROUTINE copy_field_to_cache_d2r ( Field, cache, ips, ipe, jps, jpe, ims, ime, jms, jme )
156 INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
158 DOUBLE PRECISION Field(*)
159 REAL cache(ips:ipe,jps:jpe)
162 idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
163 cache(i,j) = Field( idex )
166 END SUBROUTINE copy_field_to_cache_d2r
168 SUBROUTINE copy_field_to_cache_d2d ( Field, cache, ips, ipe, jps, jpe, ims, ime, jms, jme )
170 INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
172 DOUBLE PRECISION Field(*)
173 DOUBLE PRECISION cache(ips:ipe,jps:jpe)
176 idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
177 cache(i,j) = Field( idex )
180 END SUBROUTINE copy_field_to_cache_d2d
182 SUBROUTINE copy_field_to_cache_int ( Field, cache, ips, ipe, jps, jpe, ims, ime, jms, jme )
184 INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
187 INTEGER cache(ips:ipe,jps:jpe)
190 idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
191 cache(i,j) = Field( idex )
194 END SUBROUTINE copy_field_to_cache_int
196 SUBROUTINE copy_cache_to_field_r2r ( cache, Field, ips, ipe, jps, jpe, ims, ime, jms, jme )
198 INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
200 REAL cache(ips:ipe,jps:jpe)
204 idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
205 Field( idex ) = cache(i,j)
208 END SUBROUTINE copy_cache_to_field_r2r
210 SUBROUTINE copy_cache_to_field_r2d ( cache, Field, ips, ipe, jps, jpe, ims, ime, jms, jme )
212 INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
214 REAL cache(ips:ipe,jps:jpe)
215 DOUBLEPRECISION Field(*)
218 idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
219 Field( idex ) = cache(i,j)
222 END SUBROUTINE copy_cache_to_field_r2d
224 SUBROUTINE copy_cache_to_field_d2r ( cache, Field, ips, ipe, jps, jpe, ims, ime, jms, jme )
226 INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
228 DOUBLEPRECISION cache(ips:ipe,jps:jpe)
232 idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
233 Field( idex ) = cache(i,j)
236 END SUBROUTINE copy_cache_to_field_d2r
238 SUBROUTINE copy_cache_to_field_d2d ( cache, Field, ips, ipe, jps, jpe, ims, ime, jms, jme )
240 INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
242 DOUBLEPRECISION cache(ips:ipe,jps:jpe)
243 DOUBLEPRECISION Field(*)
246 idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
247 Field( idex ) = cache(i,j)
250 END SUBROUTINE copy_cache_to_field_d2d
254 SUBROUTINE ext_mcel_ioinit( SysDepInfo, Status )
257 CHARACTER*(*), INTENT(IN) :: SysDepInfo
259 CALL init_module_ext_mcel
261 END SUBROUTINE ext_mcel_ioinit
264 SUBROUTINE ext_mcel_open_for_read ( FileName , Comm_compute, Comm_io, SysDepInfo, &
265 DataHandle , Status )
268 CHARACTER*(*) :: FileName
269 INTEGER , INTENT(IN) :: Comm_compute , Comm_io
270 CHARACTER*(*) :: SysDepInfo
271 INTEGER , INTENT(OUT) :: DataHandle
272 INTEGER , INTENT(OUT) :: Status
275 CALL int_get_fresh_handle(i)
276 okay_to_write(i) = .false.
278 CurrentDateInFile(i) = ""
279 Status = WRF_WARN_NOTSUPPORTED
282 END SUBROUTINE ext_mcel_open_for_read
286 SUBROUTINE ext_mcel_inquire_opened ( DataHandle, FileName , FileStatus, Status )
289 INTEGER , INTENT(IN) :: DataHandle
290 CHARACTER*(*) :: FileName
291 INTEGER , INTENT(OUT) :: FileStatus
292 INTEGER , INTENT(OUT) :: Status
296 FileStatus = WRF_FILE_NOT_OPENED
297 IF ( DataHandle .GE. 1 .AND. DataHandle .LE. int_num_handles ) THEN
298 IF ( int_handle_in_use( DataHandle ) .AND. opened_for_read ( DataHandle ) ) THEN
299 IF ( okay_to_read ( DataHandle ) ) THEN
300 FileStatus = WRF_FILE_OPENED_FOR_READ
302 FileStatus = WRF_FILE_OPENED_NOT_COMMITTED
304 ELSE IF ( int_handle_in_use( DataHandle ) .AND. opened_for_write ( DataHandle ) ) THEN
305 IF ( okay_to_write ( DataHandle ) ) THEN
306 FileStatus = WRF_FILE_OPENED_FOR_WRITE
308 FileStatus = WRF_FILE_OPENED_NOT_COMMITTED
315 END SUBROUTINE ext_mcel_inquire_opened
317 !--- inquire_filename
318 SUBROUTINE ext_mcel_inquire_filename ( DataHandle, FileName , FileStatus, Status )
321 INTEGER , INTENT(IN) :: DataHandle
322 CHARACTER*(*) :: FileName
323 INTEGER , INTENT(OUT) :: FileStatus
324 INTEGER , INTENT(OUT) :: Status
325 CHARACTER *80 SysDepInfo
327 FileStatus = WRF_FILE_NOT_OPENED
328 IF ( int_valid_handle( DataHandle ) ) THEN
329 IF ( int_handle_in_use( DataHandle ) ) THEN
330 IF ( opened_for_read ( DataHandle ) ) THEN
331 IF ( okay_to_read( DataHandle ) ) THEN
332 FileStatus = WRF_FILE_OPENED_FOR_READ
334 FileStatus = WRF_FILE_OPENED_NOT_COMMITTED
336 ELSE IF ( opened_for_write( DataHandle ) ) THEN
337 IF ( okay_to_write( DataHandle ) ) THEN
338 FileStatus = WRF_FILE_OPENED_FOR_WRITE
340 FileStatus = WRF_FILE_OPENED_NOT_COMMITTED
343 FileStatus = WRF_FILE_NOT_OPENED
348 END SUBROUTINE ext_mcel_inquire_filename
351 SUBROUTINE ext_mcel_iosync ( DataHandle, Status )
354 INTEGER , INTENT(IN) :: DataHandle
355 INTEGER , INTENT(OUT) :: Status
359 END SUBROUTINE ext_mcel_iosync
362 SUBROUTINE ext_mcel_ioclose ( DataHandle, Status )
365 INTEGER DataHandle, Status
367 IF ( int_valid_handle (DataHandle) ) THEN
368 IF ( int_handle_in_use( DataHandle ) ) THEN
376 END SUBROUTINE ext_mcel_ioclose
379 SUBROUTINE ext_mcel_ioexit( Status )
383 INTEGER , INTENT(OUT) :: Status
384 INTEGER :: DataHandle
389 END SUBROUTINE ext_mcel_ioexit
392 SUBROUTINE ext_mcel_get_next_time ( DataHandle, DateStr, Status )
395 INTEGER , INTENT(IN) :: DataHandle
396 CHARACTER*(*) :: DateStr
397 INTEGER , INTENT(OUT) :: Status
399 CHARACTER*132 locElement, dummyvar
403 INTEGER :: locDataHandle
404 CHARACTER*132 :: locDateStr
405 CHARACTER*132 :: locVarName
406 integer :: locFieldType
409 integer :: locDomainDesc
410 character*132 :: locMemoryOrder
411 character*132 :: locStagger
412 character*132 , dimension (3) :: locDimNames
413 integer ,dimension(3) :: locDomainStart, locDomainEnd
414 integer ,dimension(3) :: locMemoryStart, locMemoryEnd
415 integer ,dimension(3) :: locPatchStart, locPatchEnd
418 integer ii,jj,kk,myrank
419 INTEGER inttypesize, realtypesize
420 REAL, DIMENSION( 1 ) :: Field
422 IF ( .NOT. int_valid_handle( DataHandle ) ) THEN
423 CALL wrf_error_fatal("external/io_quilt/io_int.F90: ext_mcel_get_next_time: invalid data handle" )
425 IF ( .NOT. int_handle_in_use( DataHandle ) ) THEN
426 CALL wrf_error_fatal("external/io_quilt/io_int.F90: ext_mcel_get_next_time: DataHandle not opened" )
428 inttypesize = itypesize
429 realtypesize = rtypesize
431 Status = WRF_WARN_NOTSUPPORTED
434 END SUBROUTINE ext_mcel_get_next_time
437 SUBROUTINE ext_mcel_set_time ( DataHandle, DateStr, Status )
440 INTEGER , INTENT(IN) :: DataHandle
441 CHARACTER*(*) :: DateStr
442 INTEGER , INTENT(OUT) :: Status
444 Status = WRF_WARN_NOTSUPPORTED
446 END SUBROUTINE ext_mcel_set_time
449 SUBROUTINE ext_mcel_get_var_info ( DataHandle , VarName , NDim , MemoryOrder , Stagger , &
450 DomainStart , DomainEnd , WrfType, Status )
453 integer ,intent(in) :: DataHandle
454 character*(*) ,intent(in) :: VarName
455 integer ,intent(out) :: NDim
456 character*(*) ,intent(out) :: MemoryOrder
457 character*(*) ,intent(out) :: Stagger
458 integer ,dimension(*) ,intent(out) :: DomainStart, DomainEnd
459 integer ,intent(out) :: WrfType
460 integer ,intent(out) :: Status
463 INTEGER :: locDataHandle
464 CHARACTER*132 :: locDateStr
465 CHARACTER*132 :: locVarName
466 integer :: locFieldType
469 integer :: locDomainDesc
470 character*132 :: locMemoryOrder
471 character*132 :: locStagger
472 character*132 , dimension (3) :: locDimNames
473 integer ,dimension(3) :: locDomainStart, locDomainEnd
474 integer ,dimension(3) :: locMemoryStart, locMemoryEnd
475 integer ,dimension(3) :: locPatchStart, locPatchEnd
478 integer ii,jj,kk,myrank
479 INTEGER inttypesize, realtypesize, istat, code
480 REAL, DIMENSION( 1 ) :: Field
482 IF ( .NOT. int_valid_handle( DataHandle ) ) THEN
483 CALL wrf_error_fatal("external/io_quilt/io_int.F90: ext_mcel_get_var_info: invalid data handle" )
485 IF ( .NOT. int_handle_in_use( DataHandle ) ) THEN
486 CALL wrf_error_fatal("external/io_quilt/io_int.F90: ext_mcel_get_var_info: DataHandle not opened" )
488 inttypesize = itypesize
489 realtypesize = rtypesize
493 END SUBROUTINE ext_mcel_get_var_info
495 !--- get_next_var (not defined for IntIO)
496 SUBROUTINE ext_mcel_get_next_var ( DataHandle, VarName, Status )
499 INTEGER , INTENT(IN) :: DataHandle
500 CHARACTER*(*) :: VarName
501 INTEGER , INTENT(OUT) :: Status
504 INTEGER :: locDataHandle
505 CHARACTER*132 :: locDateStr
506 CHARACTER*132 :: locVarName
507 integer :: locFieldType
510 integer :: locDomainDesc
511 character*132 :: locMemoryOrder
512 character*132 :: locStagger
513 character*132 , dimension (3) :: locDimNames
514 integer ,dimension(3) :: locDomainStart, locDomainEnd
515 integer ,dimension(3) :: locMemoryStart, locMemoryEnd
516 integer ,dimension(3) :: locPatchStart, locPatchEnd
518 character*128 locElement, strData, dumstr
519 integer loccode, loccount
524 integer ii,jj,kk,myrank
525 INTEGER inttypesize, realtypesize, istat, code
526 REAL, DIMENSION( 1 ) :: Field
528 IF ( .NOT. int_valid_handle( DataHandle ) ) THEN
529 CALL wrf_error_fatal("external/io_quilt/io_int.F90: ext_mcel_get_next_var: invalid data handle" )
531 IF ( .NOT. int_handle_in_use( DataHandle ) ) THEN
532 CALL wrf_error_fatal("external/io_quilt/io_int.F90: ext_mcel_get_next_var: DataHandle not opened" )
534 inttypesize = itypesize
535 realtypesize = rtypesize
540 END SUBROUTINE ext_mcel_get_next_var
543 SUBROUTINE ext_mcel_get_dom_ti_real ( DataHandle,Element, Data, Count, Outcount, Status )
546 INTEGER , INTENT(IN) :: DataHandle
547 CHARACTER*(*) :: Element
548 real , INTENT(IN) :: Data(*)
549 INTEGER , INTENT(IN) :: Count
550 INTEGER , INTENT(OUT) :: Outcount
551 INTEGER , INTENT(OUT) :: Status
552 INTEGER loccount, code, istat, locDataHandle
553 CHARACTER*132 :: locElement, mess
559 END SUBROUTINE ext_mcel_get_dom_ti_real
562 SUBROUTINE ext_mcel_put_dom_ti_real ( DataHandle,Element, Data, Count, Status )
565 INTEGER , INTENT(IN) :: DataHandle
566 CHARACTER*(*) :: Element
567 real , INTENT(IN) :: Data(*)
568 INTEGER , INTENT(IN) :: Count
569 INTEGER , INTENT(OUT) :: Status
575 END SUBROUTINE ext_mcel_put_dom_ti_real
577 !--- get_dom_ti_double
578 SUBROUTINE ext_mcel_get_dom_ti_double ( DataHandle,Element, Data, Count, Outcount, Status )
580 INTEGER , INTENT(IN) :: DataHandle
581 CHARACTER*(*) :: Element
582 real*8 , INTENT(OUT) :: Data(*)
583 INTEGER , INTENT(IN) :: Count
584 INTEGER , INTENT(OUT) :: OutCount
585 INTEGER , INTENT(OUT) :: Status
586 CALL wrf_message('ext_mcel_get_dom_ti_double not supported yet')
588 END SUBROUTINE ext_mcel_get_dom_ti_double
590 !--- put_dom_ti_double
591 SUBROUTINE ext_mcel_put_dom_ti_double ( DataHandle,Element, Data, Count, Status )
593 INTEGER , INTENT(IN) :: DataHandle
594 CHARACTER*(*) :: Element
595 real*8 , INTENT(IN) :: Data(*)
596 INTEGER , INTENT(IN) :: Count
597 INTEGER , INTENT(OUT) :: Status
598 CALL wrf_message('ext_mcel_put_dom_ti_double not supported yet')
600 END SUBROUTINE ext_mcel_put_dom_ti_double
602 !--- get_dom_ti_integer
603 SUBROUTINE ext_mcel_get_dom_ti_integer ( DataHandle,Element, Data, Count, Outcount, Status )
606 INTEGER , INTENT(IN) :: DataHandle
607 CHARACTER*(*) :: Element
608 integer , INTENT(OUT) :: Data(*)
609 INTEGER , INTENT(IN) :: Count
610 INTEGER , INTENT(OUT) :: OutCount
611 INTEGER , INTENT(OUT) :: Status
612 INTEGER loccount, code, istat, locDataHandle
613 CHARACTER*132 locElement, mess
618 END SUBROUTINE ext_mcel_get_dom_ti_integer
620 !--- put_dom_ti_integer
621 SUBROUTINE ext_mcel_put_dom_ti_integer ( DataHandle,Element, Data, Count, Status )
624 INTEGER , INTENT(IN) :: DataHandle
625 CHARACTER*(*) :: Element
626 INTEGER , INTENT(IN) :: Data(*)
627 INTEGER , INTENT(IN) :: Count
628 INTEGER , INTENT(OUT) :: Status
633 END SUBROUTINE ext_mcel_put_dom_ti_integer
635 !--- get_dom_ti_logical
636 SUBROUTINE ext_mcel_get_dom_ti_logical ( DataHandle,Element, Data, Count, Outcount, Status )
638 INTEGER , INTENT(IN) :: DataHandle
639 CHARACTER*(*) :: Element
640 logical , INTENT(OUT) :: Data(*)
641 INTEGER , INTENT(IN) :: Count
642 INTEGER , INTENT(OUT) :: OutCount
643 INTEGER , INTENT(OUT) :: Status
644 CALL wrf_message('ext_mcel_get_dom_ti_logical not supported yet')
646 END SUBROUTINE ext_mcel_get_dom_ti_logical
648 !--- put_dom_ti_logical
649 SUBROUTINE ext_mcel_put_dom_ti_logical ( DataHandle,Element, Data, Count, Status )
651 INTEGER , INTENT(IN) :: DataHandle
652 CHARACTER*(*) :: Element
653 logical , INTENT(IN) :: Data(*)
654 INTEGER , INTENT(IN) :: Count
655 INTEGER , INTENT(OUT) :: Status
656 CALL wrf_message('ext_mcel_put_dom_ti_logical not supported yet')
658 END SUBROUTINE ext_mcel_put_dom_ti_logical
661 SUBROUTINE ext_mcel_get_dom_ti_char ( DataHandle,Element, Data, Status )
664 INTEGER , INTENT(IN) :: DataHandle
665 CHARACTER*(*) :: Element
666 CHARACTER*(*) :: Data
667 INTEGER , INTENT(OUT) :: Status
668 INTEGER istat, code, i
669 CHARACTER*79 dumstr, locElement
670 INTEGER locDataHandle
675 END SUBROUTINE ext_mcel_get_dom_ti_char
678 SUBROUTINE ext_mcel_put_dom_ti_char ( DataHandle, Element, Data, Status )
681 INTEGER , INTENT(IN) :: DataHandle
682 CHARACTER*(*) :: Element
683 CHARACTER*(*) :: Data
684 INTEGER , INTENT(OUT) :: Status
689 ! TBH: Not sure what this is doing here. 2004_11_15
690 ! JGM: You are right. It does not belong here. 2006_09_28
691 ! IF ( int_valid_handle ( Datahandle ) ) THEN
692 ! IF ( int_handle_in_use( DataHandle ) ) THEN
693 ! CALL int_gen_ti_header_char( hdrbuf, hdrbufsize, itypesize, &
694 ! DataHandle, Element, "", Data, int_dom_ti_char )
695 ! WRITE( unit=DataHandle ) hdrbuf
700 END SUBROUTINE ext_mcel_put_dom_ti_char
703 SUBROUTINE ext_mcel_get_dom_td_real ( DataHandle,Element, DateStr, Data, Count, Outcount, Status )
705 INTEGER , INTENT(IN) :: DataHandle
706 CHARACTER*(*) :: Element
707 CHARACTER*(*) :: DateStr
708 real , INTENT(OUT) :: Data(*)
709 INTEGER , INTENT(IN) :: Count
710 INTEGER , INTENT(OUT) :: OutCount
711 INTEGER , INTENT(OUT) :: Status
713 END SUBROUTINE ext_mcel_get_dom_td_real
716 SUBROUTINE ext_mcel_put_dom_td_real ( DataHandle,Element, DateStr, Data, Count, Status )
718 INTEGER , INTENT(IN) :: DataHandle
719 CHARACTER*(*) :: Element
720 CHARACTER*(*) :: DateStr
721 real , INTENT(IN) :: Data(*)
722 INTEGER , INTENT(IN) :: Count
723 INTEGER , INTENT(OUT) :: Status
725 END SUBROUTINE ext_mcel_put_dom_td_real
727 !--- get_dom_td_double
728 SUBROUTINE ext_mcel_get_dom_td_double ( DataHandle,Element, DateStr, Data, Count, Outcount, Status )
730 INTEGER , INTENT(IN) :: DataHandle
731 CHARACTER*(*) :: Element
732 CHARACTER*(*) :: DateStr
733 real*8 , INTENT(OUT) :: Data(*)
734 INTEGER , INTENT(IN) :: Count
735 INTEGER , INTENT(OUT) :: OutCount
736 INTEGER , INTENT(OUT) :: Status
738 END SUBROUTINE ext_mcel_get_dom_td_double
740 !--- put_dom_td_double
741 SUBROUTINE ext_mcel_put_dom_td_double ( DataHandle,Element, DateStr, Data, Count, Status )
743 INTEGER , INTENT(IN) :: DataHandle
744 CHARACTER*(*) :: Element
745 CHARACTER*(*) :: DateStr
746 real*8 , INTENT(IN) :: Data(*)
747 INTEGER , INTENT(IN) :: Count
748 INTEGER , INTENT(OUT) :: Status
750 END SUBROUTINE ext_mcel_put_dom_td_double
752 !--- get_dom_td_integer
753 SUBROUTINE ext_mcel_get_dom_td_integer ( DataHandle,Element, DateStr, Data, Count, Outcount, Status )
755 INTEGER , INTENT(IN) :: DataHandle
756 CHARACTER*(*) :: Element
757 CHARACTER*(*) :: DateStr
758 integer , INTENT(OUT) :: Data(*)
759 INTEGER , INTENT(IN) :: Count
760 INTEGER , INTENT(OUT) :: OutCount
761 INTEGER , INTENT(OUT) :: Status
763 END SUBROUTINE ext_mcel_get_dom_td_integer
765 !--- put_dom_td_integer
766 SUBROUTINE ext_mcel_put_dom_td_integer ( DataHandle,Element, DateStr, Data, Count, Status )
768 INTEGER , INTENT(IN) :: DataHandle
769 CHARACTER*(*) :: Element
770 CHARACTER*(*) :: DateStr
771 integer , INTENT(IN) :: Data(*)
772 INTEGER , INTENT(IN) :: Count
773 INTEGER , INTENT(OUT) :: Status
775 END SUBROUTINE ext_mcel_put_dom_td_integer
777 !--- get_dom_td_logical
778 SUBROUTINE ext_mcel_get_dom_td_logical ( DataHandle,Element, DateStr, Data, Count, Outcount, Status )
780 INTEGER , INTENT(IN) :: DataHandle
781 CHARACTER*(*) :: Element
782 CHARACTER*(*) :: DateStr
783 logical , INTENT(OUT) :: Data(*)
784 INTEGER , INTENT(IN) :: Count
785 INTEGER , INTENT(OUT) :: OutCount
786 INTEGER , INTENT(OUT) :: Status
788 END SUBROUTINE ext_mcel_get_dom_td_logical
790 !--- put_dom_td_logical
791 SUBROUTINE ext_mcel_put_dom_td_logical ( DataHandle,Element, DateStr, Data, Count, Status )
793 INTEGER , INTENT(IN) :: DataHandle
794 CHARACTER*(*) :: Element
795 CHARACTER*(*) :: DateStr
796 logical , INTENT(IN) :: Data(*)
797 INTEGER , INTENT(IN) :: Count
798 INTEGER , INTENT(OUT) :: Status
800 END SUBROUTINE ext_mcel_put_dom_td_logical
803 SUBROUTINE ext_mcel_get_dom_td_char ( DataHandle,Element, DateStr, Data, Status )
805 INTEGER , INTENT(IN) :: DataHandle
806 CHARACTER*(*) :: Element
807 CHARACTER*(*) :: DateStr
808 CHARACTER*(*) :: Data
809 INTEGER , INTENT(OUT) :: Status
811 END SUBROUTINE ext_mcel_get_dom_td_char
814 SUBROUTINE ext_mcel_put_dom_td_char ( DataHandle,Element, DateStr, Data, Status )
816 INTEGER , INTENT(IN) :: DataHandle
817 CHARACTER*(*) :: Element
818 CHARACTER*(*) :: DateStr
819 CHARACTER*(*) :: Data
820 INTEGER , INTENT(OUT) :: Status
822 END SUBROUTINE ext_mcel_put_dom_td_char
825 SUBROUTINE ext_mcel_get_var_ti_real ( DataHandle,Element, Varname, Data, Count, Outcount, Status )
827 INTEGER , INTENT(IN) :: DataHandle
828 CHARACTER*(*) :: Element
829 CHARACTER*(*) :: VarName
830 real , INTENT(OUT) :: Data(*)
831 INTEGER , INTENT(IN) :: Count
832 INTEGER , INTENT(OUT) :: OutCount
833 INTEGER , INTENT(OUT) :: Status
835 END SUBROUTINE ext_mcel_get_var_ti_real
838 SUBROUTINE ext_mcel_put_var_ti_real ( DataHandle,Element, Varname, Data, Count, Status )
840 INTEGER , INTENT(IN) :: DataHandle
841 CHARACTER*(*) :: Element
842 CHARACTER*(*) :: VarName
843 real , INTENT(IN) :: Data(*)
844 INTEGER , INTENT(IN) :: Count
845 INTEGER , INTENT(OUT) :: Status
847 END SUBROUTINE ext_mcel_put_var_ti_real
849 !--- get_var_ti_double
850 SUBROUTINE ext_mcel_get_var_ti_double ( DataHandle,Element, Varname, Data, Count, Outcount, Status )
852 INTEGER , INTENT(IN) :: DataHandle
853 CHARACTER*(*) :: Element
854 CHARACTER*(*) :: VarName
855 real*8 , INTENT(OUT) :: Data(*)
856 INTEGER , INTENT(IN) :: Count
857 INTEGER , INTENT(OUT) :: OutCount
858 INTEGER , INTENT(OUT) :: Status
860 END SUBROUTINE ext_mcel_get_var_ti_double
862 !--- put_var_ti_double
863 SUBROUTINE ext_mcel_put_var_ti_double ( DataHandle,Element, Varname, Data, Count, Status )
865 INTEGER , INTENT(IN) :: DataHandle
866 CHARACTER*(*) :: Element
867 CHARACTER*(*) :: VarName
868 real*8 , INTENT(IN) :: Data(*)
869 INTEGER , INTENT(IN) :: Count
870 INTEGER , INTENT(OUT) :: Status
872 END SUBROUTINE ext_mcel_put_var_ti_double
874 !--- get_var_ti_integer
875 SUBROUTINE ext_mcel_get_var_ti_integer ( DataHandle,Element, Varname, Data, Count, Outcount, Status )
877 INTEGER , INTENT(IN) :: DataHandle
878 CHARACTER*(*) :: Element
879 CHARACTER*(*) :: VarName
880 integer , INTENT(OUT) :: Data(*)
881 INTEGER , INTENT(IN) :: Count
882 INTEGER , INTENT(OUT) :: OutCount
883 INTEGER , INTENT(OUT) :: Status
885 END SUBROUTINE ext_mcel_get_var_ti_integer
887 !--- put_var_ti_integer
888 SUBROUTINE ext_mcel_put_var_ti_integer ( DataHandle,Element, Varname, Data, Count, Status )
890 INTEGER , INTENT(IN) :: DataHandle
891 CHARACTER*(*) :: Element
892 CHARACTER*(*) :: VarName
893 integer , INTENT(IN) :: Data(*)
894 INTEGER , INTENT(IN) :: Count
895 INTEGER , INTENT(OUT) :: Status
897 END SUBROUTINE ext_mcel_put_var_ti_integer
899 !--- get_var_ti_logical
900 SUBROUTINE ext_mcel_get_var_ti_logical ( DataHandle,Element, Varname, Data, Count, Outcount, Status )
902 INTEGER , INTENT(IN) :: DataHandle
903 CHARACTER*(*) :: Element
904 CHARACTER*(*) :: VarName
905 logical , INTENT(OUT) :: Data(*)
906 INTEGER , INTENT(IN) :: Count
907 INTEGER , INTENT(OUT) :: OutCount
908 INTEGER , INTENT(OUT) :: Status
910 END SUBROUTINE ext_mcel_get_var_ti_logical
912 !--- put_var_ti_logical
913 SUBROUTINE ext_mcel_put_var_ti_logical ( DataHandle,Element, Varname, Data, Count, Status )
915 INTEGER , INTENT(IN) :: DataHandle
916 CHARACTER*(*) :: Element
917 CHARACTER*(*) :: VarName
918 logical , INTENT(IN) :: Data(*)
919 INTEGER , INTENT(IN) :: Count
920 INTEGER , INTENT(OUT) :: Status
922 END SUBROUTINE ext_mcel_put_var_ti_logical
925 SUBROUTINE ext_mcel_get_var_ti_char ( DataHandle,Element, Varname, Data, Status )
928 INTEGER , INTENT(IN) :: DataHandle
929 CHARACTER*(*) :: Element
930 CHARACTER*(*) :: VarName
931 CHARACTER*(*) :: Data
932 INTEGER , INTENT(OUT) :: Status
933 INTEGER locDataHandle, code
934 CHARACTER*132 locElement, locVarName
937 END SUBROUTINE ext_mcel_get_var_ti_char
940 SUBROUTINE ext_mcel_put_var_ti_char ( DataHandle,Element, Varname, Data, Status )
943 INTEGER , INTENT(IN) :: DataHandle
944 CHARACTER*(*) :: Element
945 CHARACTER*(*) :: VarName
946 CHARACTER*(*) :: Data
947 INTEGER , INTENT(OUT) :: Status
952 END SUBROUTINE ext_mcel_put_var_ti_char
955 SUBROUTINE ext_mcel_get_var_td_real ( DataHandle,Element, DateStr,Varname, Data, Count, Outcount, Status )
957 INTEGER , INTENT(IN) :: DataHandle
958 CHARACTER*(*) :: Element
959 CHARACTER*(*) :: DateStr
960 CHARACTER*(*) :: VarName
961 real , INTENT(OUT) :: Data(*)
962 INTEGER , INTENT(IN) :: Count
963 INTEGER , INTENT(OUT) :: OutCount
964 INTEGER , INTENT(OUT) :: Status
966 END SUBROUTINE ext_mcel_get_var_td_real
969 SUBROUTINE ext_mcel_put_var_td_real ( DataHandle,Element, DateStr,Varname, Data, Count, Status )
971 INTEGER , INTENT(IN) :: DataHandle
972 CHARACTER*(*) :: Element
973 CHARACTER*(*) :: DateStr
974 CHARACTER*(*) :: VarName
975 real , INTENT(IN) :: Data(*)
976 INTEGER , INTENT(IN) :: Count
977 INTEGER , INTENT(OUT) :: Status
979 END SUBROUTINE ext_mcel_put_var_td_real
981 !--- get_var_td_double
982 SUBROUTINE ext_mcel_get_var_td_double ( DataHandle,Element, DateStr,Varname, Data, Count, Outcount, Status )
984 INTEGER , INTENT(IN) :: DataHandle
985 CHARACTER*(*) :: Element
986 CHARACTER*(*) :: DateStr
987 CHARACTER*(*) :: VarName
988 real*8 , INTENT(OUT) :: Data(*)
989 INTEGER , INTENT(IN) :: Count
990 INTEGER , INTENT(OUT) :: OutCount
991 INTEGER , INTENT(OUT) :: Status
993 END SUBROUTINE ext_mcel_get_var_td_double
995 !--- put_var_td_double
996 SUBROUTINE ext_mcel_put_var_td_double ( DataHandle,Element, DateStr,Varname, Data, Count, Status )
998 INTEGER , INTENT(IN) :: DataHandle
999 CHARACTER*(*) :: Element
1000 CHARACTER*(*) :: DateStr
1001 CHARACTER*(*) :: VarName
1002 real*8 , INTENT(IN) :: Data(*)
1003 INTEGER , INTENT(IN) :: Count
1004 INTEGER , INTENT(OUT) :: Status
1006 END SUBROUTINE ext_mcel_put_var_td_double
1008 !--- get_var_td_integer
1009 SUBROUTINE ext_mcel_get_var_td_integer ( DataHandle,Element, DateStr,Varname, Data, Count, Outcount, Status )
1011 INTEGER , INTENT(IN) :: DataHandle
1012 CHARACTER*(*) :: Element
1013 CHARACTER*(*) :: DateStr
1014 CHARACTER*(*) :: VarName
1015 integer , INTENT(OUT) :: Data(*)
1016 INTEGER , INTENT(IN) :: Count
1017 INTEGER , INTENT(OUT) :: OutCount
1018 INTEGER , INTENT(OUT) :: Status
1020 END SUBROUTINE ext_mcel_get_var_td_integer
1022 !--- put_var_td_integer
1023 SUBROUTINE ext_mcel_put_var_td_integer ( DataHandle,Element, DateStr,Varname, Data, Count, Status )
1025 INTEGER , INTENT(IN) :: DataHandle
1026 CHARACTER*(*) :: Element
1027 CHARACTER*(*) :: DateStr
1028 CHARACTER*(*) :: VarName
1029 integer , INTENT(IN) :: Data(*)
1030 INTEGER , INTENT(IN) :: Count
1031 INTEGER , INTENT(OUT) :: Status
1033 END SUBROUTINE ext_mcel_put_var_td_integer
1035 !--- get_var_td_logical
1036 SUBROUTINE ext_mcel_get_var_td_logical ( DataHandle,Element, DateStr,Varname, Data, Count, Outcount, Status )
1038 INTEGER , INTENT(IN) :: DataHandle
1039 CHARACTER*(*) :: Element
1040 CHARACTER*(*) :: DateStr
1041 CHARACTER*(*) :: VarName
1042 logical , INTENT(OUT) :: Data(*)
1043 INTEGER , INTENT(IN) :: Count
1044 INTEGER , INTENT(OUT) :: OutCount
1045 INTEGER , INTENT(OUT) :: Status
1047 END SUBROUTINE ext_mcel_get_var_td_logical
1049 !--- put_var_td_logical
1050 SUBROUTINE ext_mcel_put_var_td_logical ( DataHandle,Element, DateStr,Varname, Data, Count, Status )
1052 INTEGER , INTENT(IN) :: DataHandle
1053 CHARACTER*(*) :: Element
1054 CHARACTER*(*) :: DateStr
1055 CHARACTER*(*) :: VarName
1056 logical , INTENT(IN) :: Data(*)
1057 INTEGER , INTENT(IN) :: Count
1058 INTEGER , INTENT(OUT) :: Status
1060 END SUBROUTINE ext_mcel_put_var_td_logical
1062 !--- get_var_td_char
1063 SUBROUTINE ext_mcel_get_var_td_char ( DataHandle,Element, DateStr,Varname, Data, Status )
1065 INTEGER , INTENT(IN) :: DataHandle
1066 CHARACTER*(*) :: Element
1067 CHARACTER*(*) :: DateStr
1068 CHARACTER*(*) :: VarName
1069 CHARACTER*(*) :: Data
1070 INTEGER , INTENT(OUT) :: Status
1072 END SUBROUTINE ext_mcel_get_var_td_char
1074 !--- put_var_td_char
1075 SUBROUTINE ext_mcel_put_var_td_char ( DataHandle,Element, DateStr,Varname, Data, Status )
1077 INTEGER , INTENT(IN) :: DataHandle
1078 CHARACTER*(*) :: Element
1079 CHARACTER*(*) :: DateStr
1080 CHARACTER*(*) :: VarName
1081 CHARACTER*(*) :: Data
1082 INTEGER , INTENT(OUT) :: Status
1084 END SUBROUTINE ext_mcel_put_var_td_char
1086 SUBROUTINE ext_mcel_georegister( DataHandle, inlon, inlat, &
1087 MemoryStart , MemoryEnd , &
1088 PatchStart , PatchEnd , &
1092 integer ,intent(in) :: DataHandle
1093 integer ,intent(inout) :: Status
1094 integer ,dimension(*) ,intent(in) :: MemoryStart, MemoryEnd
1095 integer ,dimension(*) ,intent(in) :: PatchStart, PatchEnd
1096 REAL , DIMENSION(MemoryStart(1):MemoryEnd(1),MemoryStart(2):MemoryEnd(2)), INTENT(IN) :: inlon, inlat
1097 integer ips,ipe,jps,jpe
1098 integer ims,ime,jms,jme
1099 integer idex,ierr,i,j
1101 IF ( .NOT. int_valid_handle( DataHandle ) ) THEN
1102 CALL wrf_error_fatal("ext_mcel_georegister: invalid data handle" )
1104 IF ( .NOT. int_handle_in_use( DataHandle ) ) THEN
1105 CALL wrf_error_fatal("ext_mcel_georegister: DataHandle not opened" )
1107 IF ( mcel_finalized( DataHandle ) ) THEN
1108 CALL wrf_error_fatal( "ext_mcel_georegister: called after first read/write operation" ) ;
1111 ips = PatchStart(1) ; ipe = PatchEnd(1)
1112 jps = PatchStart(2) ; jpe = PatchEnd(2)
1113 ims = MemoryStart(1) ; ime = MemoryEnd(1)
1114 jms = MemoryStart(2) ; jme = MemoryEnd(2)
1116 IF ( ALLOCATED(xlat) ) THEN
1119 IF ( ALLOCATED(xlong) ) THEN
1122 ALLOCATE(xlat(ips:ipe,jps:jpe))
1125 idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
1126 xlat(i,j) = inlat( i,j) ! idex )
1129 ALLOCATE(xlong(ips:ipe,jps:jpe))
1132 idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
1133 xlong(i,j) = inlon( i,j ) ! idex )
1137 END SUBROUTINE ext_mcel_georegister
1139 SUBROUTINE ext_mcel_mask ( DataHandle, inmask, &
1140 MemoryStart , MemoryEnd , &
1141 PatchStart , PatchEnd , &
1145 integer ,intent(in) :: DataHandle
1146 integer ,intent(inout) :: Status
1147 integer ,dimension(*) ,intent(in) :: MemoryStart, MemoryEnd
1148 integer ,dimension(*) ,intent(in) :: PatchStart, PatchEnd
1149 INTEGER , DIMENSION(MemoryStart(1):MemoryEnd(1),MemoryStart(2):MemoryEnd(2)), INTENT(IN) :: inmask
1150 integer ips,ipe,jps,jpe
1151 integer ims,ime,jms,jme
1152 integer idex,ierr,i,j
1154 ips = PatchStart(1) ; ipe = PatchEnd(1)
1155 jps = PatchStart(2) ; jpe = PatchEnd(2)
1156 ims = MemoryStart(1) ; ime = MemoryEnd(1)
1157 jms = MemoryStart(2) ; jme = MemoryEnd(2)
1159 IF ( .NOT. int_valid_handle( DataHandle ) ) THEN
1160 CALL wrf_error_fatal("ext_mcel_mask: invalid data handle" )
1162 IF ( .NOT. int_handle_in_use( DataHandle ) ) THEN
1163 CALL wrf_error_fatal("ext_mcel_mask: DataHandle not opened" )
1165 IF ( mcel_finalized( DataHandle ) ) THEN
1166 CALL wrf_error_fatal( "ext_mcel_mask: called after first read/write operation" ) ;
1169 IF ( ALLOCATED(mask) ) THEN
1172 ALLOCATE(mask(ips:ipe,jps:jpe))
1175 idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
1176 mask(i,j) = inmask( i,j ) ! idex )
1180 END SUBROUTINE ext_mcel_mask
1182 INTEGER FUNCTION cast_to_int( a )
1186 END FUNCTION cast_to_int