PageRenderTime 46ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/wrfv2_fire/external/io_mcel/io_mcel.F90

http://github.com/jbeezley/wrf-fire
FORTRAN Modern | 1187 lines | 993 code | 120 blank | 74 comment | 0 complexity | f0f815a4b888db19b4ed0e12fac73382 MD5 | raw file
Possible License(s): AGPL-1.0
  1. MODULE module_ext_mcel
  2. INTEGER, PARAMETER :: int_num_handles = 99
  3. LOGICAL, DIMENSION(int_num_handles) :: okay_to_write, okay_to_read, &
  4. opened_for_write, opened_for_update, &
  5. opened_for_read, &
  6. int_handle_in_use, okay_to_commit
  7. LOGICAL, DIMENSION(int_num_handles) :: mcel_grid_defined, mcel_finalized
  8. INTEGER, DIMENSION(int_num_handles) :: int_num_bytes_to_write
  9. INTEGER, DIMENSION(int_num_handles) :: usemask
  10. CHARACTER*256, DIMENSION(int_num_handles) :: CurrentDateInFile
  11. CHARACTER*8092, DIMENSION(int_num_handles) :: ListOfFields
  12. REAL, POINTER :: int_local_output_buffer(:)
  13. INTEGER :: int_local_output_cursor
  14. INTEGER :: mcel_npglobal, mcel_mystart, mcel_mnproc, mcel_myproc
  15. INTEGER, PARAMETER :: onebyte = 1
  16. INTEGER comm_io_servers, iserver, hdrbufsize, obufsize
  17. INTEGER itypesize, rtypesize, typesize
  18. INTEGER, DIMENSION(512) :: hdrbuf
  19. INTEGER, DIMENSION(int_num_handles) :: handle
  20. INTEGER, DIMENSION(512, int_num_handles) :: open_file_descriptors
  21. INCLUDE "MCEL.inc"
  22. #include "intio_tags.h"
  23. #include "wrf_io_flags.h"
  24. #include "wrf_status_codes.h"
  25. CHARACTER*80 LAT_R(int_num_handles), LON_R(int_num_handles), LANDMASK_I(int_num_handles)
  26. REAL*8, ALLOCATABLE :: xlat(:,:), xlong(:,:)
  27. REAL*8 :: deltax, deltay, dxm(2)
  28. REAL*8 :: originx, originy, origin(2)
  29. INTEGER, ALLOCATABLE :: mask(:,:)
  30. REAL, ALLOCATABLE :: rmask(:,:)
  31. DOUBLEPRECISION, ALLOCATABLE :: dmask(:,:)
  32. CHARACTER*132 last_next_var
  33. CONTAINS
  34. LOGICAL FUNCTION int_valid_handle( handle )
  35. IMPLICIT NONE
  36. INTEGER, INTENT(IN) :: handle
  37. int_valid_handle = ( handle .ge. 8 .and. handle .le. int_num_handles )
  38. END FUNCTION int_valid_handle
  39. SUBROUTINE int_get_fresh_handle( retval )
  40. ! USE wrf_data, ONLY : wrf_data_handle
  41. ! USE ext_ncd_support_routines, ONLY : allocHandle
  42. ! type(wrf_data_handle),pointer :: DH
  43. ! INTEGER i, retval, comm, Status
  44. INTEGER i, retval
  45. #if 0
  46. CALL allocHandle(retval,DH,Comm,Status)
  47. #endif
  48. retval = -1
  49. ! dont use first 8 handles
  50. DO i = 8, int_num_handles
  51. IF ( .NOT. int_handle_in_use(i) ) THEN
  52. retval = i
  53. GOTO 33
  54. ENDIF
  55. ENDDO
  56. 33 CONTINUE
  57. IF ( retval < 0 ) THEN
  58. CALL wrf_error_fatal("external/io_quilt/io_int.F90: int_get_fresh_handle() can not")
  59. ENDIF
  60. int_handle_in_use(retval) = .TRUE.
  61. NULLIFY ( int_local_output_buffer )
  62. END SUBROUTINE int_get_fresh_handle
  63. ! parse comma separated list of VARIABLE=VALUE strings and return the
  64. ! value for the matching variable if such exists, otherwise return
  65. ! the empty string
  66. SUBROUTINE get_value ( varname , str , retval )
  67. IMPLICIT NONE
  68. CHARACTER*(*) :: varname
  69. CHARACTER*(*) :: str
  70. CHARACTER*(*) :: retval
  71. CHARACTER (128) varstr, tstr
  72. INTEGER i,j,n,varstrn
  73. LOGICAL nobreak, nobreakouter
  74. varstr = TRIM(varname)//"="
  75. varstrn = len(TRIM(varstr))
  76. n = len(TRIM(str))
  77. retval = ""
  78. i = 1
  79. nobreakouter = .TRUE.
  80. DO WHILE ( nobreakouter )
  81. j = 1
  82. nobreak = .TRUE.
  83. tstr = ""
  84. DO WHILE ( nobreak )
  85. nobreak = .FALSE.
  86. IF ( i .LE. n ) THEN
  87. IF (str(i:i) .NE. ',' ) THEN
  88. tstr(j:j) = str(i:i)
  89. nobreak = .TRUE.
  90. ENDIF
  91. ENDIF
  92. j = j + 1
  93. i = i + 1
  94. ENDDO
  95. IF ( i .GT. n ) nobreakouter = .FALSE.
  96. IF ( varstr(1:varstrn) .EQ. tstr(1:varstrn) ) THEN
  97. retval(1:) = TRIM(tstr(varstrn+1:))
  98. nobreakouter = .FALSE.
  99. ENDIF
  100. ENDDO
  101. RETURN
  102. END SUBROUTINE get_value
  103. !--- ioinit
  104. SUBROUTINE init_module_ext_mcel
  105. IMPLICIT NONE
  106. CALL wrf_sizeof_integer( itypesize )
  107. CALL wrf_sizeof_real ( rtypesize )
  108. END SUBROUTINE init_module_ext_mcel
  109. END MODULE module_ext_mcel
  110. SUBROUTINE copy_field_to_cache_r2r ( Field, cache, ips, ipe, jps, jpe, ims, ime, jms, jme )
  111. USE module_ext_mcel
  112. INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
  113. INTEGER idex, i, j
  114. REAL Field(*)
  115. REAL cache(ips:ipe,jps:jpe)
  116. DO j = jps, jpe
  117. DO i = ips, ipe
  118. idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
  119. cache(i,j) = Field( idex )
  120. ENDDO
  121. ENDDO
  122. END SUBROUTINE copy_field_to_cache_r2r
  123. SUBROUTINE copy_field_to_cache_r2d ( Field, cache, ips, ipe, jps, jpe, ims, ime, jms, jme )
  124. USE module_ext_mcel
  125. INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
  126. INTEGER idex, i, j
  127. REAL Field(*)
  128. DOUBLE PRECISION cache(ips:ipe,jps:jpe)
  129. DO j = jps, jpe
  130. DO i = ips, ipe
  131. idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
  132. cache(i,j) = Field( idex )
  133. ENDDO
  134. ENDDO
  135. END SUBROUTINE copy_field_to_cache_r2d
  136. SUBROUTINE copy_field_to_cache_d2r ( Field, cache, ips, ipe, jps, jpe, ims, ime, jms, jme )
  137. USE module_ext_mcel
  138. INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
  139. INTEGER idex, i, j
  140. DOUBLE PRECISION Field(*)
  141. REAL cache(ips:ipe,jps:jpe)
  142. DO j = jps, jpe
  143. DO i = ips, ipe
  144. idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
  145. cache(i,j) = Field( idex )
  146. ENDDO
  147. ENDDO
  148. END SUBROUTINE copy_field_to_cache_d2r
  149. SUBROUTINE copy_field_to_cache_d2d ( Field, cache, ips, ipe, jps, jpe, ims, ime, jms, jme )
  150. USE module_ext_mcel
  151. INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
  152. INTEGER idex, i, j
  153. DOUBLE PRECISION Field(*)
  154. DOUBLE PRECISION cache(ips:ipe,jps:jpe)
  155. DO j = jps, jpe
  156. DO i = ips, ipe
  157. idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
  158. cache(i,j) = Field( idex )
  159. ENDDO
  160. ENDDO
  161. END SUBROUTINE copy_field_to_cache_d2d
  162. SUBROUTINE copy_field_to_cache_int ( Field, cache, ips, ipe, jps, jpe, ims, ime, jms, jme )
  163. USE module_ext_mcel
  164. INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
  165. INTEGER idex, i, j
  166. INTEGER Field(*)
  167. INTEGER cache(ips:ipe,jps:jpe)
  168. DO j = jps, jpe
  169. DO i = ips, ipe
  170. idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
  171. cache(i,j) = Field( idex )
  172. ENDDO
  173. ENDDO
  174. END SUBROUTINE copy_field_to_cache_int
  175. SUBROUTINE copy_cache_to_field_r2r ( cache, Field, ips, ipe, jps, jpe, ims, ime, jms, jme )
  176. USE module_ext_mcel
  177. INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
  178. INTEGER idex, i, j
  179. REAL cache(ips:ipe,jps:jpe)
  180. REAL Field(*)
  181. DO j = jps, jpe
  182. DO i = ips, ipe
  183. idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
  184. Field( idex ) = cache(i,j)
  185. ENDDO
  186. ENDDO
  187. END SUBROUTINE copy_cache_to_field_r2r
  188. SUBROUTINE copy_cache_to_field_r2d ( cache, Field, ips, ipe, jps, jpe, ims, ime, jms, jme )
  189. USE module_ext_mcel
  190. INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
  191. INTEGER idex, i, j
  192. REAL cache(ips:ipe,jps:jpe)
  193. DOUBLEPRECISION Field(*)
  194. DO j = jps, jpe
  195. DO i = ips, ipe
  196. idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
  197. Field( idex ) = cache(i,j)
  198. ENDDO
  199. ENDDO
  200. END SUBROUTINE copy_cache_to_field_r2d
  201. SUBROUTINE copy_cache_to_field_d2r ( cache, Field, ips, ipe, jps, jpe, ims, ime, jms, jme )
  202. USE module_ext_mcel
  203. INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
  204. INTEGER idex, i, j
  205. DOUBLEPRECISION cache(ips:ipe,jps:jpe)
  206. REAL Field(*)
  207. DO j = jps, jpe
  208. DO i = ips, ipe
  209. idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
  210. Field( idex ) = cache(i,j)
  211. ENDDO
  212. ENDDO
  213. END SUBROUTINE copy_cache_to_field_d2r
  214. SUBROUTINE copy_cache_to_field_d2d ( cache, Field, ips, ipe, jps, jpe, ims, ime, jms, jme )
  215. USE module_ext_mcel
  216. INTEGER FieldType, ips, ipe, jps, jpe, ims, ime, jms, jme
  217. INTEGER idex, i, j
  218. DOUBLEPRECISION cache(ips:ipe,jps:jpe)
  219. DOUBLEPRECISION Field(*)
  220. DO j = jps, jpe
  221. DO i = ips, ipe
  222. idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
  223. Field( idex ) = cache(i,j)
  224. ENDDO
  225. ENDDO
  226. END SUBROUTINE copy_cache_to_field_d2d
  227. !--------------
  228. SUBROUTINE ext_mcel_ioinit( SysDepInfo, Status )
  229. USE module_ext_mcel
  230. IMPLICIT NONE
  231. CHARACTER*(*), INTENT(IN) :: SysDepInfo
  232. INTEGER Status
  233. CALL init_module_ext_mcel
  234. Status = 0
  235. END SUBROUTINE ext_mcel_ioinit
  236. !--- open_for_read
  237. SUBROUTINE ext_mcel_open_for_read ( FileName , Comm_compute, Comm_io, SysDepInfo, &
  238. DataHandle , Status )
  239. USE module_ext_mcel
  240. IMPLICIT NONE
  241. CHARACTER*(*) :: FileName
  242. INTEGER , INTENT(IN) :: Comm_compute , Comm_io
  243. CHARACTER*(*) :: SysDepInfo
  244. INTEGER , INTENT(OUT) :: DataHandle
  245. INTEGER , INTENT(OUT) :: Status
  246. INTEGER i
  247. CALL int_get_fresh_handle(i)
  248. okay_to_write(i) = .false.
  249. DataHandle = i
  250. CurrentDateInFile(i) = ""
  251. Status = WRF_WARN_NOTSUPPORTED
  252. RETURN
  253. END SUBROUTINE ext_mcel_open_for_read
  254. !--- inquire_opened
  255. SUBROUTINE ext_mcel_inquire_opened ( DataHandle, FileName , FileStatus, Status )
  256. USE module_ext_mcel
  257. IMPLICIT NONE
  258. INTEGER , INTENT(IN) :: DataHandle
  259. CHARACTER*(*) :: FileName
  260. INTEGER , INTENT(OUT) :: FileStatus
  261. INTEGER , INTENT(OUT) :: Status
  262. Status = 0
  263. FileStatus = WRF_FILE_NOT_OPENED
  264. IF ( DataHandle .GE. 1 .AND. DataHandle .LE. int_num_handles ) THEN
  265. IF ( int_handle_in_use( DataHandle ) .AND. opened_for_read ( DataHandle ) ) THEN
  266. IF ( okay_to_read ( DataHandle ) ) THEN
  267. FileStatus = WRF_FILE_OPENED_FOR_READ
  268. ELSE
  269. FileStatus = WRF_FILE_OPENED_NOT_COMMITTED
  270. ENDIF
  271. ELSE IF ( int_handle_in_use( DataHandle ) .AND. opened_for_write ( DataHandle ) ) THEN
  272. IF ( okay_to_write ( DataHandle ) ) THEN
  273. FileStatus = WRF_FILE_OPENED_FOR_WRITE
  274. ELSE
  275. FileStatus = WRF_FILE_OPENED_NOT_COMMITTED
  276. ENDIF
  277. ENDIF
  278. ENDIF
  279. Status = 0
  280. RETURN
  281. END SUBROUTINE ext_mcel_inquire_opened
  282. !--- inquire_filename
  283. SUBROUTINE ext_mcel_inquire_filename ( DataHandle, FileName , FileStatus, Status )
  284. USE module_ext_mcel
  285. IMPLICIT NONE
  286. INTEGER , INTENT(IN) :: DataHandle
  287. CHARACTER*(*) :: FileName
  288. INTEGER , INTENT(OUT) :: FileStatus
  289. INTEGER , INTENT(OUT) :: Status
  290. CHARACTER *80 SysDepInfo
  291. Status = 0
  292. FileStatus = WRF_FILE_NOT_OPENED
  293. IF ( int_valid_handle( DataHandle ) ) THEN
  294. IF ( int_handle_in_use( DataHandle ) ) THEN
  295. IF ( opened_for_read ( DataHandle ) ) THEN
  296. IF ( okay_to_read( DataHandle ) ) THEN
  297. FileStatus = WRF_FILE_OPENED_FOR_READ
  298. ELSE
  299. FileStatus = WRF_FILE_OPENED_NOT_COMMITTED
  300. ENDIF
  301. ELSE IF ( opened_for_write( DataHandle ) ) THEN
  302. IF ( okay_to_write( DataHandle ) ) THEN
  303. FileStatus = WRF_FILE_OPENED_FOR_WRITE
  304. ELSE
  305. FileStatus = WRF_FILE_OPENED_NOT_COMMITTED
  306. ENDIF
  307. ELSE
  308. FileStatus = WRF_FILE_NOT_OPENED
  309. ENDIF
  310. ENDIF
  311. ENDIF
  312. Status = 0
  313. END SUBROUTINE ext_mcel_inquire_filename
  314. !--- sync
  315. SUBROUTINE ext_mcel_iosync ( DataHandle, Status )
  316. USE module_ext_mcel
  317. IMPLICIT NONE
  318. INTEGER , INTENT(IN) :: DataHandle
  319. INTEGER , INTENT(OUT) :: Status
  320. Status = 0
  321. RETURN
  322. END SUBROUTINE ext_mcel_iosync
  323. !--- close
  324. SUBROUTINE ext_mcel_ioclose ( DataHandle, Status )
  325. USE module_ext_mcel
  326. IMPLICIT NONE
  327. INTEGER DataHandle, Status
  328. IF ( int_valid_handle (DataHandle) ) THEN
  329. IF ( int_handle_in_use( DataHandle ) ) THEN
  330. CLOSE ( DataHandle )
  331. ENDIF
  332. ENDIF
  333. Status = 0
  334. RETURN
  335. END SUBROUTINE ext_mcel_ioclose
  336. !--- ioexit
  337. SUBROUTINE ext_mcel_ioexit( Status )
  338. USE module_ext_mcel
  339. IMPLICIT NONE
  340. INTEGER , INTENT(OUT) :: Status
  341. INTEGER :: DataHandle
  342. INTEGER i,ierr
  343. REAL dummy
  344. RETURN
  345. END SUBROUTINE ext_mcel_ioexit
  346. !--- get_next_time
  347. SUBROUTINE ext_mcel_get_next_time ( DataHandle, DateStr, Status )
  348. USE module_ext_mcel
  349. IMPLICIT NONE
  350. INTEGER , INTENT(IN) :: DataHandle
  351. CHARACTER*(*) :: DateStr
  352. INTEGER , INTENT(OUT) :: Status
  353. INTEGER code
  354. CHARACTER*132 locElement, dummyvar
  355. INTEGER istat
  356. !local
  357. INTEGER :: locDataHandle
  358. CHARACTER*132 :: locDateStr
  359. CHARACTER*132 :: locVarName
  360. integer :: locFieldType
  361. integer :: locComm
  362. integer :: locIOComm
  363. integer :: locDomainDesc
  364. character*132 :: locMemoryOrder
  365. character*132 :: locStagger
  366. character*132 , dimension (3) :: locDimNames
  367. integer ,dimension(3) :: locDomainStart, locDomainEnd
  368. integer ,dimension(3) :: locMemoryStart, locMemoryEnd
  369. integer ,dimension(3) :: locPatchStart, locPatchEnd
  370. character*132 mess
  371. integer ii,jj,kk,myrank
  372. INTEGER inttypesize, realtypesize
  373. REAL, DIMENSION( 1 ) :: Field
  374. IF ( .NOT. int_valid_handle( DataHandle ) ) THEN
  375. CALL wrf_error_fatal("external/io_quilt/io_int.F90: ext_mcel_get_next_time: invalid data handle" )
  376. ENDIF
  377. IF ( .NOT. int_handle_in_use( DataHandle ) ) THEN
  378. CALL wrf_error_fatal("external/io_quilt/io_int.F90: ext_mcel_get_next_time: DataHandle not opened" )
  379. ENDIF
  380. inttypesize = itypesize
  381. realtypesize = rtypesize
  382. Status = WRF_WARN_NOTSUPPORTED
  383. RETURN
  384. END SUBROUTINE ext_mcel_get_next_time
  385. !--- set_time
  386. SUBROUTINE ext_mcel_set_time ( DataHandle, DateStr, Status )
  387. USE module_ext_mcel
  388. IMPLICIT NONE
  389. INTEGER , INTENT(IN) :: DataHandle
  390. CHARACTER*(*) :: DateStr
  391. INTEGER , INTENT(OUT) :: Status
  392. Status = WRF_WARN_NOTSUPPORTED
  393. RETURN
  394. END SUBROUTINE ext_mcel_set_time
  395. !--- get_var_info
  396. SUBROUTINE ext_mcel_get_var_info ( DataHandle , VarName , NDim , MemoryOrder , Stagger , &
  397. DomainStart , DomainEnd , WrfType, Status )
  398. USE module_ext_mcel
  399. IMPLICIT NONE
  400. integer ,intent(in) :: DataHandle
  401. character*(*) ,intent(in) :: VarName
  402. integer ,intent(out) :: NDim
  403. character*(*) ,intent(out) :: MemoryOrder
  404. character*(*) ,intent(out) :: Stagger
  405. integer ,dimension(*) ,intent(out) :: DomainStart, DomainEnd
  406. integer ,intent(out) :: WrfType
  407. integer ,intent(out) :: Status
  408. !local
  409. INTEGER :: locDataHandle
  410. CHARACTER*132 :: locDateStr
  411. CHARACTER*132 :: locVarName
  412. integer :: locFieldType
  413. integer :: locComm
  414. integer :: locIOComm
  415. integer :: locDomainDesc
  416. character*132 :: locMemoryOrder
  417. character*132 :: locStagger
  418. character*132 , dimension (3) :: locDimNames
  419. integer ,dimension(3) :: locDomainStart, locDomainEnd
  420. integer ,dimension(3) :: locMemoryStart, locMemoryEnd
  421. integer ,dimension(3) :: locPatchStart, locPatchEnd
  422. character*132 mess
  423. integer ii,jj,kk,myrank
  424. INTEGER inttypesize, realtypesize, istat, code
  425. REAL, DIMENSION( 1 ) :: Field
  426. IF ( .NOT. int_valid_handle( DataHandle ) ) THEN
  427. CALL wrf_error_fatal("external/io_quilt/io_int.F90: ext_mcel_get_var_info: invalid data handle" )
  428. ENDIF
  429. IF ( .NOT. int_handle_in_use( DataHandle ) ) THEN
  430. CALL wrf_error_fatal("external/io_quilt/io_int.F90: ext_mcel_get_var_info: DataHandle not opened" )
  431. ENDIF
  432. inttypesize = itypesize
  433. realtypesize = rtypesize
  434. Status = 0
  435. RETURN
  436. END SUBROUTINE ext_mcel_get_var_info
  437. !--- get_next_var (not defined for IntIO)
  438. SUBROUTINE ext_mcel_get_next_var ( DataHandle, VarName, Status )
  439. USE module_ext_mcel
  440. IMPLICIT NONE
  441. INTEGER , INTENT(IN) :: DataHandle
  442. CHARACTER*(*) :: VarName
  443. INTEGER , INTENT(OUT) :: Status
  444. !local
  445. INTEGER :: locDataHandle
  446. CHARACTER*132 :: locDateStr
  447. CHARACTER*132 :: locVarName
  448. integer :: locFieldType
  449. integer :: locComm
  450. integer :: locIOComm
  451. integer :: locDomainDesc
  452. character*132 :: locMemoryOrder
  453. character*132 :: locStagger
  454. character*132 , dimension (3) :: locDimNames
  455. integer ,dimension(3) :: locDomainStart, locDomainEnd
  456. integer ,dimension(3) :: locMemoryStart, locMemoryEnd
  457. integer ,dimension(3) :: locPatchStart, locPatchEnd
  458. character*128 locElement, strData, dumstr
  459. integer loccode, loccount
  460. integer idata(128)
  461. real rdata(128)
  462. character*132 mess
  463. integer ii,jj,kk,myrank
  464. INTEGER inttypesize, realtypesize, istat, code
  465. REAL, DIMENSION( 1 ) :: Field
  466. IF ( .NOT. int_valid_handle( DataHandle ) ) THEN
  467. CALL wrf_error_fatal("external/io_quilt/io_int.F90: ext_mcel_get_next_var: invalid data handle" )
  468. ENDIF
  469. IF ( .NOT. int_handle_in_use( DataHandle ) ) THEN
  470. CALL wrf_error_fatal("external/io_quilt/io_int.F90: ext_mcel_get_next_var: DataHandle not opened" )
  471. ENDIF
  472. inttypesize = itypesize
  473. realtypesize = rtypesize
  474. Status = 0
  475. RETURN
  476. END SUBROUTINE ext_mcel_get_next_var
  477. !--- get_dom_ti_real
  478. SUBROUTINE ext_mcel_get_dom_ti_real ( DataHandle,Element, Data, Count, Outcount, Status )
  479. USE module_ext_mcel
  480. IMPLICIT NONE
  481. INTEGER , INTENT(IN) :: DataHandle
  482. CHARACTER*(*) :: Element
  483. real , INTENT(IN) :: Data(*)
  484. INTEGER , INTENT(IN) :: Count
  485. INTEGER , INTENT(OUT) :: Outcount
  486. INTEGER , INTENT(OUT) :: Status
  487. INTEGER loccount, code, istat, locDataHandle
  488. CHARACTER*132 :: locElement, mess
  489. LOGICAL keepgoing
  490. Status = 0
  491. RETURN
  492. END SUBROUTINE ext_mcel_get_dom_ti_real
  493. !--- put_dom_ti_real
  494. SUBROUTINE ext_mcel_put_dom_ti_real ( DataHandle,Element, Data, Count, Status )
  495. USE module_ext_mcel
  496. IMPLICIT NONE
  497. INTEGER , INTENT(IN) :: DataHandle
  498. CHARACTER*(*) :: Element
  499. real , INTENT(IN) :: Data(*)
  500. INTEGER , INTENT(IN) :: Count
  501. INTEGER , INTENT(OUT) :: Status
  502. REAL dummy
  503. !
  504. Status = 0
  505. RETURN
  506. END SUBROUTINE ext_mcel_put_dom_ti_real
  507. !--- get_dom_ti_double
  508. SUBROUTINE ext_mcel_get_dom_ti_double ( DataHandle,Element, Data, Count, Outcount, Status )
  509. IMPLICIT NONE
  510. INTEGER , INTENT(IN) :: DataHandle
  511. CHARACTER*(*) :: Element
  512. real*8 , INTENT(OUT) :: Data(*)
  513. INTEGER , INTENT(IN) :: Count
  514. INTEGER , INTENT(OUT) :: OutCount
  515. INTEGER , INTENT(OUT) :: Status
  516. CALL wrf_message('ext_mcel_get_dom_ti_double not supported yet')
  517. RETURN
  518. END SUBROUTINE ext_mcel_get_dom_ti_double
  519. !--- put_dom_ti_double
  520. SUBROUTINE ext_mcel_put_dom_ti_double ( DataHandle,Element, Data, Count, Status )
  521. IMPLICIT NONE
  522. INTEGER , INTENT(IN) :: DataHandle
  523. CHARACTER*(*) :: Element
  524. real*8 , INTENT(IN) :: Data(*)
  525. INTEGER , INTENT(IN) :: Count
  526. INTEGER , INTENT(OUT) :: Status
  527. CALL wrf_message('ext_mcel_put_dom_ti_double not supported yet')
  528. RETURN
  529. END SUBROUTINE ext_mcel_put_dom_ti_double
  530. !--- get_dom_ti_integer
  531. SUBROUTINE ext_mcel_get_dom_ti_integer ( DataHandle,Element, Data, Count, Outcount, Status )
  532. USE module_ext_mcel
  533. IMPLICIT NONE
  534. INTEGER , INTENT(IN) :: DataHandle
  535. CHARACTER*(*) :: Element
  536. integer , INTENT(OUT) :: Data(*)
  537. INTEGER , INTENT(IN) :: Count
  538. INTEGER , INTENT(OUT) :: OutCount
  539. INTEGER , INTENT(OUT) :: Status
  540. INTEGER loccount, code, istat, locDataHandle
  541. CHARACTER*132 locElement, mess
  542. LOGICAL keepgoing
  543. Status = 0
  544. RETURN
  545. END SUBROUTINE ext_mcel_get_dom_ti_integer
  546. !--- put_dom_ti_integer
  547. SUBROUTINE ext_mcel_put_dom_ti_integer ( DataHandle,Element, Data, Count, Status )
  548. USE module_ext_mcel
  549. IMPLICIT NONE
  550. INTEGER , INTENT(IN) :: DataHandle
  551. CHARACTER*(*) :: Element
  552. INTEGER , INTENT(IN) :: Data(*)
  553. INTEGER , INTENT(IN) :: Count
  554. INTEGER , INTENT(OUT) :: Status
  555. REAL dummy
  556. !
  557. Status = 0
  558. RETURN
  559. END SUBROUTINE ext_mcel_put_dom_ti_integer
  560. !--- get_dom_ti_logical
  561. SUBROUTINE ext_mcel_get_dom_ti_logical ( DataHandle,Element, Data, Count, Outcount, Status )
  562. IMPLICIT NONE
  563. INTEGER , INTENT(IN) :: DataHandle
  564. CHARACTER*(*) :: Element
  565. logical , INTENT(OUT) :: Data(*)
  566. INTEGER , INTENT(IN) :: Count
  567. INTEGER , INTENT(OUT) :: OutCount
  568. INTEGER , INTENT(OUT) :: Status
  569. CALL wrf_message('ext_mcel_get_dom_ti_logical not supported yet')
  570. RETURN
  571. END SUBROUTINE ext_mcel_get_dom_ti_logical
  572. !--- put_dom_ti_logical
  573. SUBROUTINE ext_mcel_put_dom_ti_logical ( DataHandle,Element, Data, Count, Status )
  574. IMPLICIT NONE
  575. INTEGER , INTENT(IN) :: DataHandle
  576. CHARACTER*(*) :: Element
  577. logical , INTENT(IN) :: Data(*)
  578. INTEGER , INTENT(IN) :: Count
  579. INTEGER , INTENT(OUT) :: Status
  580. CALL wrf_message('ext_mcel_put_dom_ti_logical not supported yet')
  581. RETURN
  582. END SUBROUTINE ext_mcel_put_dom_ti_logical
  583. !--- get_dom_ti_char
  584. SUBROUTINE ext_mcel_get_dom_ti_char ( DataHandle,Element, Data, Status )
  585. USE module_ext_mcel
  586. IMPLICIT NONE
  587. INTEGER , INTENT(IN) :: DataHandle
  588. CHARACTER*(*) :: Element
  589. CHARACTER*(*) :: Data
  590. INTEGER , INTENT(OUT) :: Status
  591. INTEGER istat, code, i
  592. CHARACTER*79 dumstr, locElement
  593. INTEGER locDataHandle
  594. LOGICAL keepgoing
  595. Status = 0
  596. RETURN
  597. END SUBROUTINE ext_mcel_get_dom_ti_char
  598. !--- put_dom_ti_char
  599. SUBROUTINE ext_mcel_put_dom_ti_char ( DataHandle, Element, Data, Status )
  600. USE module_ext_mcel
  601. IMPLICIT NONE
  602. INTEGER , INTENT(IN) :: DataHandle
  603. CHARACTER*(*) :: Element
  604. CHARACTER*(*) :: Data
  605. INTEGER , INTENT(OUT) :: Status
  606. INTEGER i
  607. REAL dummy
  608. INTEGER :: Count
  609. ! TBH: Not sure what this is doing here. 2004_11_15
  610. ! JGM: You are right. It does not belong here. 2006_09_28
  611. ! IF ( int_valid_handle ( Datahandle ) ) THEN
  612. ! IF ( int_handle_in_use( DataHandle ) ) THEN
  613. ! CALL int_gen_ti_header_char( hdrbuf, hdrbufsize, itypesize, &
  614. ! DataHandle, Element, "", Data, int_dom_ti_char )
  615. ! WRITE( unit=DataHandle ) hdrbuf
  616. ! ENDIF
  617. ! ENDIF
  618. Status = 0
  619. RETURN
  620. END SUBROUTINE ext_mcel_put_dom_ti_char
  621. !--- get_dom_td_real
  622. SUBROUTINE ext_mcel_get_dom_td_real ( DataHandle,Element, DateStr, Data, Count, Outcount, Status )
  623. IMPLICIT NONE
  624. INTEGER , INTENT(IN) :: DataHandle
  625. CHARACTER*(*) :: Element
  626. CHARACTER*(*) :: DateStr
  627. real , INTENT(OUT) :: Data(*)
  628. INTEGER , INTENT(IN) :: Count
  629. INTEGER , INTENT(OUT) :: OutCount
  630. INTEGER , INTENT(OUT) :: Status
  631. RETURN
  632. END SUBROUTINE ext_mcel_get_dom_td_real
  633. !--- put_dom_td_real
  634. SUBROUTINE ext_mcel_put_dom_td_real ( DataHandle,Element, DateStr, Data, Count, Status )
  635. IMPLICIT NONE
  636. INTEGER , INTENT(IN) :: DataHandle
  637. CHARACTER*(*) :: Element
  638. CHARACTER*(*) :: DateStr
  639. real , INTENT(IN) :: Data(*)
  640. INTEGER , INTENT(IN) :: Count
  641. INTEGER , INTENT(OUT) :: Status
  642. RETURN
  643. END SUBROUTINE ext_mcel_put_dom_td_real
  644. !--- get_dom_td_double
  645. SUBROUTINE ext_mcel_get_dom_td_double ( DataHandle,Element, DateStr, Data, Count, Outcount, Status )
  646. IMPLICIT NONE
  647. INTEGER , INTENT(IN) :: DataHandle
  648. CHARACTER*(*) :: Element
  649. CHARACTER*(*) :: DateStr
  650. real*8 , INTENT(OUT) :: Data(*)
  651. INTEGER , INTENT(IN) :: Count
  652. INTEGER , INTENT(OUT) :: OutCount
  653. INTEGER , INTENT(OUT) :: Status
  654. RETURN
  655. END SUBROUTINE ext_mcel_get_dom_td_double
  656. !--- put_dom_td_double
  657. SUBROUTINE ext_mcel_put_dom_td_double ( DataHandle,Element, DateStr, Data, Count, Status )
  658. IMPLICIT NONE
  659. INTEGER , INTENT(IN) :: DataHandle
  660. CHARACTER*(*) :: Element
  661. CHARACTER*(*) :: DateStr
  662. real*8 , INTENT(IN) :: Data(*)
  663. INTEGER , INTENT(IN) :: Count
  664. INTEGER , INTENT(OUT) :: Status
  665. RETURN
  666. END SUBROUTINE ext_mcel_put_dom_td_double
  667. !--- get_dom_td_integer
  668. SUBROUTINE ext_mcel_get_dom_td_integer ( DataHandle,Element, DateStr, Data, Count, Outcount, Status )
  669. IMPLICIT NONE
  670. INTEGER , INTENT(IN) :: DataHandle
  671. CHARACTER*(*) :: Element
  672. CHARACTER*(*) :: DateStr
  673. integer , INTENT(OUT) :: Data(*)
  674. INTEGER , INTENT(IN) :: Count
  675. INTEGER , INTENT(OUT) :: OutCount
  676. INTEGER , INTENT(OUT) :: Status
  677. RETURN
  678. END SUBROUTINE ext_mcel_get_dom_td_integer
  679. !--- put_dom_td_integer
  680. SUBROUTINE ext_mcel_put_dom_td_integer ( DataHandle,Element, DateStr, Data, Count, Status )
  681. IMPLICIT NONE
  682. INTEGER , INTENT(IN) :: DataHandle
  683. CHARACTER*(*) :: Element
  684. CHARACTER*(*) :: DateStr
  685. integer , INTENT(IN) :: Data(*)
  686. INTEGER , INTENT(IN) :: Count
  687. INTEGER , INTENT(OUT) :: Status
  688. RETURN
  689. END SUBROUTINE ext_mcel_put_dom_td_integer
  690. !--- get_dom_td_logical
  691. SUBROUTINE ext_mcel_get_dom_td_logical ( DataHandle,Element, DateStr, Data, Count, Outcount, Status )
  692. IMPLICIT NONE
  693. INTEGER , INTENT(IN) :: DataHandle
  694. CHARACTER*(*) :: Element
  695. CHARACTER*(*) :: DateStr
  696. logical , INTENT(OUT) :: Data(*)
  697. INTEGER , INTENT(IN) :: Count
  698. INTEGER , INTENT(OUT) :: OutCount
  699. INTEGER , INTENT(OUT) :: Status
  700. RETURN
  701. END SUBROUTINE ext_mcel_get_dom_td_logical
  702. !--- put_dom_td_logical
  703. SUBROUTINE ext_mcel_put_dom_td_logical ( DataHandle,Element, DateStr, Data, Count, Status )
  704. IMPLICIT NONE
  705. INTEGER , INTENT(IN) :: DataHandle
  706. CHARACTER*(*) :: Element
  707. CHARACTER*(*) :: DateStr
  708. logical , INTENT(IN) :: Data(*)
  709. INTEGER , INTENT(IN) :: Count
  710. INTEGER , INTENT(OUT) :: Status
  711. RETURN
  712. END SUBROUTINE ext_mcel_put_dom_td_logical
  713. !--- get_dom_td_char
  714. SUBROUTINE ext_mcel_get_dom_td_char ( DataHandle,Element, DateStr, Data, Status )
  715. IMPLICIT NONE
  716. INTEGER , INTENT(IN) :: DataHandle
  717. CHARACTER*(*) :: Element
  718. CHARACTER*(*) :: DateStr
  719. CHARACTER*(*) :: Data
  720. INTEGER , INTENT(OUT) :: Status
  721. RETURN
  722. END SUBROUTINE ext_mcel_get_dom_td_char
  723. !--- put_dom_td_char
  724. SUBROUTINE ext_mcel_put_dom_td_char ( DataHandle,Element, DateStr, Data, Status )
  725. IMPLICIT NONE
  726. INTEGER , INTENT(IN) :: DataHandle
  727. CHARACTER*(*) :: Element
  728. CHARACTER*(*) :: DateStr
  729. CHARACTER*(*) :: Data
  730. INTEGER , INTENT(OUT) :: Status
  731. RETURN
  732. END SUBROUTINE ext_mcel_put_dom_td_char
  733. !--- get_var_ti_real
  734. SUBROUTINE ext_mcel_get_var_ti_real ( DataHandle,Element, Varname, Data, Count, Outcount, Status )
  735. IMPLICIT NONE
  736. INTEGER , INTENT(IN) :: DataHandle
  737. CHARACTER*(*) :: Element
  738. CHARACTER*(*) :: VarName
  739. real , INTENT(OUT) :: Data(*)
  740. INTEGER , INTENT(IN) :: Count
  741. INTEGER , INTENT(OUT) :: OutCount
  742. INTEGER , INTENT(OUT) :: Status
  743. RETURN
  744. END SUBROUTINE ext_mcel_get_var_ti_real
  745. !--- put_var_ti_real
  746. SUBROUTINE ext_mcel_put_var_ti_real ( DataHandle,Element, Varname, Data, Count, Status )
  747. IMPLICIT NONE
  748. INTEGER , INTENT(IN) :: DataHandle
  749. CHARACTER*(*) :: Element
  750. CHARACTER*(*) :: VarName
  751. real , INTENT(IN) :: Data(*)
  752. INTEGER , INTENT(IN) :: Count
  753. INTEGER , INTENT(OUT) :: Status
  754. RETURN
  755. END SUBROUTINE ext_mcel_put_var_ti_real
  756. !--- get_var_ti_double
  757. SUBROUTINE ext_mcel_get_var_ti_double ( DataHandle,Element, Varname, Data, Count, Outcount, Status )
  758. IMPLICIT NONE
  759. INTEGER , INTENT(IN) :: DataHandle
  760. CHARACTER*(*) :: Element
  761. CHARACTER*(*) :: VarName
  762. real*8 , INTENT(OUT) :: Data(*)
  763. INTEGER , INTENT(IN) :: Count
  764. INTEGER , INTENT(OUT) :: OutCount
  765. INTEGER , INTENT(OUT) :: Status
  766. RETURN
  767. END SUBROUTINE ext_mcel_get_var_ti_double
  768. !--- put_var_ti_double
  769. SUBROUTINE ext_mcel_put_var_ti_double ( DataHandle,Element, Varname, Data, Count, Status )
  770. IMPLICIT NONE
  771. INTEGER , INTENT(IN) :: DataHandle
  772. CHARACTER*(*) :: Element
  773. CHARACTER*(*) :: VarName
  774. real*8 , INTENT(IN) :: Data(*)
  775. INTEGER , INTENT(IN) :: Count
  776. INTEGER , INTENT(OUT) :: Status
  777. RETURN
  778. END SUBROUTINE ext_mcel_put_var_ti_double
  779. !--- get_var_ti_integer
  780. SUBROUTINE ext_mcel_get_var_ti_integer ( DataHandle,Element, Varname, Data, Count, Outcount, Status )
  781. IMPLICIT NONE
  782. INTEGER , INTENT(IN) :: DataHandle
  783. CHARACTER*(*) :: Element
  784. CHARACTER*(*) :: VarName
  785. integer , INTENT(OUT) :: Data(*)
  786. INTEGER , INTENT(IN) :: Count
  787. INTEGER , INTENT(OUT) :: OutCount
  788. INTEGER , INTENT(OUT) :: Status
  789. RETURN
  790. END SUBROUTINE ext_mcel_get_var_ti_integer
  791. !--- put_var_ti_integer
  792. SUBROUTINE ext_mcel_put_var_ti_integer ( DataHandle,Element, Varname, Data, Count, Status )
  793. IMPLICIT NONE
  794. INTEGER , INTENT(IN) :: DataHandle
  795. CHARACTER*(*) :: Element
  796. CHARACTER*(*) :: VarName
  797. integer , INTENT(IN) :: Data(*)
  798. INTEGER , INTENT(IN) :: Count
  799. INTEGER , INTENT(OUT) :: Status
  800. RETURN
  801. END SUBROUTINE ext_mcel_put_var_ti_integer
  802. !--- get_var_ti_logical
  803. SUBROUTINE ext_mcel_get_var_ti_logical ( DataHandle,Element, Varname, Data, Count, Outcount, Status )
  804. IMPLICIT NONE
  805. INTEGER , INTENT(IN) :: DataHandle
  806. CHARACTER*(*) :: Element
  807. CHARACTER*(*) :: VarName
  808. logical , INTENT(OUT) :: Data(*)
  809. INTEGER , INTENT(IN) :: Count
  810. INTEGER , INTENT(OUT) :: OutCount
  811. INTEGER , INTENT(OUT) :: Status
  812. RETURN
  813. END SUBROUTINE ext_mcel_get_var_ti_logical
  814. !--- put_var_ti_logical
  815. SUBROUTINE ext_mcel_put_var_ti_logical ( DataHandle,Element, Varname, Data, Count, Status )
  816. IMPLICIT NONE
  817. INTEGER , INTENT(IN) :: DataHandle
  818. CHARACTER*(*) :: Element
  819. CHARACTER*(*) :: VarName
  820. logical , INTENT(IN) :: Data(*)
  821. INTEGER , INTENT(IN) :: Count
  822. INTEGER , INTENT(OUT) :: Status
  823. RETURN
  824. END SUBROUTINE ext_mcel_put_var_ti_logical
  825. !--- get_var_ti_char
  826. SUBROUTINE ext_mcel_get_var_ti_char ( DataHandle,Element, Varname, Data, Status )
  827. USE module_ext_mcel
  828. IMPLICIT NONE
  829. INTEGER , INTENT(IN) :: DataHandle
  830. CHARACTER*(*) :: Element
  831. CHARACTER*(*) :: VarName
  832. CHARACTER*(*) :: Data
  833. INTEGER , INTENT(OUT) :: Status
  834. INTEGER locDataHandle, code
  835. CHARACTER*132 locElement, locVarName
  836. Status = 0
  837. RETURN
  838. END SUBROUTINE ext_mcel_get_var_ti_char
  839. !--- put_var_ti_char
  840. SUBROUTINE ext_mcel_put_var_ti_char ( DataHandle,Element, Varname, Data, Status )
  841. USE module_ext_mcel
  842. IMPLICIT NONE
  843. INTEGER , INTENT(IN) :: DataHandle
  844. CHARACTER*(*) :: Element
  845. CHARACTER*(*) :: VarName
  846. CHARACTER*(*) :: Data
  847. INTEGER , INTENT(OUT) :: Status
  848. REAL dummy
  849. INTEGER :: Count
  850. Status = 0
  851. RETURN
  852. END SUBROUTINE ext_mcel_put_var_ti_char
  853. !--- get_var_td_real
  854. SUBROUTINE ext_mcel_get_var_td_real ( DataHandle,Element, DateStr,Varname, Data, Count, Outcount, Status )
  855. IMPLICIT NONE
  856. INTEGER , INTENT(IN) :: DataHandle
  857. CHARACTER*(*) :: Element
  858. CHARACTER*(*) :: DateStr
  859. CHARACTER*(*) :: VarName
  860. real , INTENT(OUT) :: Data(*)
  861. INTEGER , INTENT(IN) :: Count
  862. INTEGER , INTENT(OUT) :: OutCount
  863. INTEGER , INTENT(OUT) :: Status
  864. RETURN
  865. END SUBROUTINE ext_mcel_get_var_td_real
  866. !--- put_var_td_real
  867. SUBROUTINE ext_mcel_put_var_td_real ( DataHandle,Element, DateStr,Varname, Data, Count, Status )
  868. IMPLICIT NONE
  869. INTEGER , INTENT(IN) :: DataHandle
  870. CHARACTER*(*) :: Element
  871. CHARACTER*(*) :: DateStr
  872. CHARACTER*(*) :: VarName
  873. real , INTENT(IN) :: Data(*)
  874. INTEGER , INTENT(IN) :: Count
  875. INTEGER , INTENT(OUT) :: Status
  876. RETURN
  877. END SUBROUTINE ext_mcel_put_var_td_real
  878. !--- get_var_td_double
  879. SUBROUTINE ext_mcel_get_var_td_double ( DataHandle,Element, DateStr,Varname, Data, Count, Outcount, Status )
  880. IMPLICIT NONE
  881. INTEGER , INTENT(IN) :: DataHandle
  882. CHARACTER*(*) :: Element
  883. CHARACTER*(*) :: DateStr
  884. CHARACTER*(*) :: VarName
  885. real*8 , INTENT(OUT) :: Data(*)
  886. INTEGER , INTENT(IN) :: Count
  887. INTEGER , INTENT(OUT) :: OutCount
  888. INTEGER , INTENT(OUT) :: Status
  889. RETURN
  890. END SUBROUTINE ext_mcel_get_var_td_double
  891. !--- put_var_td_double
  892. SUBROUTINE ext_mcel_put_var_td_double ( DataHandle,Element, DateStr,Varname, Data, Count, Status )
  893. IMPLICIT NONE
  894. INTEGER , INTENT(IN) :: DataHandle
  895. CHARACTER*(*) :: Element
  896. CHARACTER*(*) :: DateStr
  897. CHARACTER*(*) :: VarName
  898. real*8 , INTENT(IN) :: Data(*)
  899. INTEGER , INTENT(IN) :: Count
  900. INTEGER , INTENT(OUT) :: Status
  901. RETURN
  902. END SUBROUTINE ext_mcel_put_var_td_double
  903. !--- get_var_td_integer
  904. SUBROUTINE ext_mcel_get_var_td_integer ( DataHandle,Element, DateStr,Varname, Data, Count, Outcount, Status )
  905. IMPLICIT NONE
  906. INTEGER , INTENT(IN) :: DataHandle
  907. CHARACTER*(*) :: Element
  908. CHARACTER*(*) :: DateStr
  909. CHARACTER*(*) :: VarName
  910. integer , INTENT(OUT) :: Data(*)
  911. INTEGER , INTENT(IN) :: Count
  912. INTEGER , INTENT(OUT) :: OutCount
  913. INTEGER , INTENT(OUT) :: Status
  914. RETURN
  915. END SUBROUTINE ext_mcel_get_var_td_integer
  916. !--- put_var_td_integer
  917. SUBROUTINE ext_mcel_put_var_td_integer ( DataHandle,Element, DateStr,Varname, Data, Count, Status )
  918. IMPLICIT NONE
  919. INTEGER , INTENT(IN) :: DataHandle
  920. CHARACTER*(*) :: Element
  921. CHARACTER*(*) :: DateStr
  922. CHARACTER*(*) :: VarName
  923. integer , INTENT(IN) :: Data(*)
  924. INTEGER , INTENT(IN) :: Count
  925. INTEGER , INTENT(OUT) :: Status
  926. RETURN
  927. END SUBROUTINE ext_mcel_put_var_td_integer
  928. !--- get_var_td_logical
  929. SUBROUTINE ext_mcel_get_var_td_logical ( DataHandle,Element, DateStr,Varname, Data, Count, Outcount, Status )
  930. IMPLICIT NONE
  931. INTEGER , INTENT(IN) :: DataHandle
  932. CHARACTER*(*) :: Element
  933. CHARACTER*(*) :: DateStr
  934. CHARACTER*(*) :: VarName
  935. logical , INTENT(OUT) :: Data(*)
  936. INTEGER , INTENT(IN) :: Count
  937. INTEGER , INTENT(OUT) :: OutCount
  938. INTEGER , INTENT(OUT) :: Status
  939. RETURN
  940. END SUBROUTINE ext_mcel_get_var_td_logical
  941. !--- put_var_td_logical
  942. SUBROUTINE ext_mcel_put_var_td_logical ( DataHandle,Element, DateStr,Varname, Data, Count, Status )
  943. IMPLICIT NONE
  944. INTEGER , INTENT(IN) :: DataHandle
  945. CHARACTER*(*) :: Element
  946. CHARACTER*(*) :: DateStr
  947. CHARACTER*(*) :: VarName
  948. logical , INTENT(IN) :: Data(*)
  949. INTEGER , INTENT(IN) :: Count
  950. INTEGER , INTENT(OUT) :: Status
  951. RETURN
  952. END SUBROUTINE ext_mcel_put_var_td_logical
  953. !--- get_var_td_char
  954. SUBROUTINE ext_mcel_get_var_td_char ( DataHandle,Element, DateStr,Varname, Data, Status )
  955. IMPLICIT NONE
  956. INTEGER , INTENT(IN) :: DataHandle
  957. CHARACTER*(*) :: Element
  958. CHARACTER*(*) :: DateStr
  959. CHARACTER*(*) :: VarName
  960. CHARACTER*(*) :: Data
  961. INTEGER , INTENT(OUT) :: Status
  962. RETURN
  963. END SUBROUTINE ext_mcel_get_var_td_char
  964. !--- put_var_td_char
  965. SUBROUTINE ext_mcel_put_var_td_char ( DataHandle,Element, DateStr,Varname, Data, Status )
  966. IMPLICIT NONE
  967. INTEGER , INTENT(IN) :: DataHandle
  968. CHARACTER*(*) :: Element
  969. CHARACTER*(*) :: DateStr
  970. CHARACTER*(*) :: VarName
  971. CHARACTER*(*) :: Data
  972. INTEGER , INTENT(OUT) :: Status
  973. RETURN
  974. END SUBROUTINE ext_mcel_put_var_td_char
  975. SUBROUTINE ext_mcel_georegister( DataHandle, inlon, inlat, &
  976. MemoryStart , MemoryEnd , &
  977. PatchStart , PatchEnd , &
  978. Status )
  979. USE module_ext_mcel
  980. IMPLICIT NONE
  981. integer ,intent(in) :: DataHandle
  982. integer ,intent(inout) :: Status
  983. integer ,dimension(*) ,intent(in) :: MemoryStart, MemoryEnd
  984. integer ,dimension(*) ,intent(in) :: PatchStart, PatchEnd
  985. REAL , DIMENSION(MemoryStart(1):MemoryEnd(1),MemoryStart(2):MemoryEnd(2)), INTENT(IN) :: inlon, inlat
  986. integer ips,ipe,jps,jpe
  987. integer ims,ime,jms,jme
  988. integer idex,ierr,i,j
  989. IF ( .NOT. int_valid_handle( DataHandle ) ) THEN
  990. CALL wrf_error_fatal("ext_mcel_georegister: invalid data handle" )
  991. ENDIF
  992. IF ( .NOT. int_handle_in_use( DataHandle ) ) THEN
  993. CALL wrf_error_fatal("ext_mcel_georegister: DataHandle not opened" )
  994. ENDIF
  995. IF ( mcel_finalized( DataHandle ) ) THEN
  996. CALL wrf_error_fatal( "ext_mcel_georegister: called after first read/write operation" ) ;
  997. ENDIF
  998. ips = PatchStart(1) ; ipe = PatchEnd(1)
  999. jps = PatchStart(2) ; jpe = PatchEnd(2)
  1000. ims = MemoryStart(1) ; ime = MemoryEnd(1)
  1001. jms = MemoryStart(2) ; jme = MemoryEnd(2)
  1002. IF ( ALLOCATED(xlat) ) THEN
  1003. DEALLOCATE(xlat)
  1004. ENDIF
  1005. IF ( ALLOCATED(xlong) ) THEN
  1006. DEALLOCATE(xlong)
  1007. ENDIF
  1008. ALLOCATE(xlat(ips:ipe,jps:jpe))
  1009. DO j = jps, jpe
  1010. DO i = ips, ipe
  1011. idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
  1012. xlat(i,j) = inlat( i,j) ! idex )
  1013. ENDDO
  1014. ENDDO
  1015. ALLOCATE(xlong(ips:ipe,jps:jpe))
  1016. DO j = jps, jpe
  1017. DO i = ips, ipe
  1018. idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
  1019. xlong(i,j) = inlon( i,j ) ! idex )
  1020. ENDDO
  1021. ENDDO
  1022. RETURN
  1023. END SUBROUTINE ext_mcel_georegister
  1024. SUBROUTINE ext_mcel_mask ( DataHandle, inmask, &
  1025. MemoryStart , MemoryEnd , &
  1026. PatchStart , PatchEnd , &
  1027. Status )
  1028. USE module_ext_mcel
  1029. IMPLICIT NONE
  1030. integer ,intent(in) :: DataHandle
  1031. integer ,intent(inout) :: Status
  1032. integer ,dimension(*) ,intent(in) :: MemoryStart, MemoryEnd
  1033. integer ,dimension(*) ,intent(in) :: PatchStart, PatchEnd
  1034. INTEGER , DIMENSION(MemoryStart(1):MemoryEnd(1),MemoryStart(2):MemoryEnd(2)), INTENT(IN) :: inmask
  1035. integer ips,ipe,jps,jpe
  1036. integer ims,ime,jms,jme
  1037. integer idex,ierr,i,j
  1038. ips = PatchStart(1) ; ipe = PatchEnd(1)
  1039. jps = PatchStart(2) ; jpe = PatchEnd(2)
  1040. ims = MemoryStart(1) ; ime = MemoryEnd(1)
  1041. jms = MemoryStart(2) ; jme = MemoryEnd(2)
  1042. IF ( .NOT. int_valid_handle( DataHandle ) ) THEN
  1043. CALL wrf_error_fatal("ext_mcel_mask: invalid data handle" )
  1044. ENDIF
  1045. IF ( .NOT. int_handle_in_use( DataHandle ) ) THEN
  1046. CALL wrf_error_fatal("ext_mcel_mask: DataHandle not opened" )
  1047. ENDIF
  1048. IF ( mcel_finalized( DataHandle ) ) THEN
  1049. CALL wrf_error_fatal( "ext_mcel_mask: called after first read/write operation" ) ;
  1050. ENDIF
  1051. IF ( ALLOCATED(mask) ) THEN
  1052. DEALLOCATE(mask)
  1053. ENDIF
  1054. ALLOCATE(mask(ips:ipe,jps:jpe))
  1055. DO j = jps, jpe
  1056. DO i = ips, ipe
  1057. idex = i+ips-ims + (j+jps-jms-1)*(ime-ims+1)
  1058. mask(i,j) = inmask( i,j ) ! idex )
  1059. ENDDO
  1060. ENDDO
  1061. RETURN
  1062. END SUBROUTINE ext_mcel_mask
  1063. INTEGER FUNCTION cast_to_int( a )
  1064. INTEGER a
  1065. cast_to_int = a
  1066. RETURN
  1067. END FUNCTION cast_to_int