Changeset 4106 for palm/trunk/SOURCE/data_output_binary_module.f90
- Timestamp:
- Jul 19, 2019 8:54:42 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/data_output_binary_module.f90
r4070 r4106 20 20 ! Current revisions: 21 21 ! ------------------ 22 ! 23 ! 22 ! 23 ! 24 24 ! Former revisions: 25 25 ! ----------------- … … 36 36 !> Binary output module to write output data into binary files. 37 37 !> 38 !> @todo Think of removing 'is_init' as its value can be derived from the return 39 !> value of 'return_value'. 40 !> @todo Get return value of write statements. 38 !> @todo Get iostat value of write statements. 41 39 !--------------------------------------------------------------------------------------------------! 42 40 MODULE data_output_binary_module … … 57 55 58 56 CHARACTER(LEN=*), PARAMETER :: config_file_name = 'BINARY_TO_NETCDF_CONFIG' !< name of config file 57 CHARACTER(LEN=*), PARAMETER :: mode_binary = 'binary' !< string to select operation mode of module 59 58 CHARACTER(LEN=*), PARAMETER :: prefix = 'BIN_' !< file prefix for binary files 60 59 … … 156 155 !> Open binary file. 157 156 !--------------------------------------------------------------------------------------------------! 158 SUBROUTINE binary_open_file( filename, file_id, return_value )157 SUBROUTINE binary_open_file( mode, filename, file_id, return_value ) 159 158 160 159 CHARACTER(LEN=charlen) :: bin_filename = '' !< actual name of binary file 161 160 CHARACTER(LEN=charlen), INTENT(IN) :: filename !< name of file 162 161 CHARACTER(LEN=7) :: myid_char !< string containing value of myid with leading zeros 162 CHARACTER(LEN=*), INTENT(IN) :: mode !< operation mode 163 163 164 164 CHARACTER(LEN=*), PARAMETER :: routine_name = 'binary_open_file' !< name of this routine … … 180 180 WRITE( myid_char, '("_",I6.6)' ) myid 181 181 ELSE 182 CALL internal_message( 'debug', routine_name // ' MPI_COMM_RANK error' )182 CALL internal_message( 'debug', routine_name // ': MPI_COMM_RANK error' ) 183 183 ENDIF 184 184 #else … … 186 186 myid_char = '_' // REPEAT('0', 6) 187 187 #endif 188 189 !-- Check mode (not required, added for compatibility reasons) 190 IF ( TRIM( mode ) == mode_binary ) CONTINUE 188 191 189 192 !-- Open binary config file for combining script … … 356 359 return_value = 1 357 360 CALL internal_message( 'error', TRIM( routine_name ) // & 358 361 ': attribute "' // TRIM( att_name ) // '": no value given' ) 359 362 ENDIF 360 363 … … 367 370 !> values to be later written to file. 368 371 !--------------------------------------------------------------------------------------------------! 369 SUBROUTINE binary_init_dimension( file_id, dim_id, var_id, &370 dim_name, dim_type, dim_length, is_init,return_value )372 SUBROUTINE binary_init_dimension( mode, file_id, dim_id, var_id, & 373 dim_name, dim_type, dim_length, return_value ) 371 374 372 375 CHARACTER(LEN=charlen), INTENT(IN) :: dim_name !< name of dimension 373 376 CHARACTER(LEN=charlen), INTENT(IN) :: dim_type !< data type of dimension 374 377 CHARACTER(LEN=charlen) :: out_str !< output string 378 CHARACTER(LEN=*), INTENT(IN) :: mode !< operation mode 375 379 376 380 CHARACTER(LEN=*), PARAMETER :: routine_name = 'binary_init_dimension' !< name of this routine … … 382 386 INTEGER(iwp), INTENT(OUT) :: var_id !< variable ID 383 387 384 LOGICAL, INTENT(OUT) :: is_init !< true if dimension is initialized385 386 388 387 389 return_value = 0 388 390 389 391 CALL internal_message( 'debug', routine_name // ': init dimension ' // TRIM( dim_name ) ) 392 393 !-- Check mode (not required, added for compatibility reasons only) 394 IF ( TRIM( mode ) == mode_binary ) CONTINUE 390 395 391 396 !-- Assign dimension ID … … 402 407 403 408 !-- Define variable associated with dimension 404 CALL binary_init_variable( file_id, var_id, dim_name, dim_type, &405 (/dim_id/), is_init, .TRUE.,return_value )409 CALL binary_init_variable( mode, file_id, var_id, dim_name, dim_type, (/dim_id/), & 410 is_global=.TRUE., return_value=return_value ) 406 411 IF ( return_value /= 0 ) THEN 407 is_init = .FALSE.408 412 CALL internal_message( 'error', routine_name // & 409 413 ': init dimension "' // TRIM( dim_name ) // '"' ) … … 417 421 !> Initialize variable. Write information of variable into file header. 418 422 !--------------------------------------------------------------------------------------------------! 419 SUBROUTINE binary_init_variable( file_id, var_id, var_name, var_type, &420 var_dim_ids, is_ init, is_global, return_value )423 SUBROUTINE binary_init_variable( mode, file_id, var_id, var_name, var_type, & 424 var_dim_ids, is_global, return_value ) 421 425 422 426 CHARACTER(LEN=charlen) :: out_str !< output string 423 427 CHARACTER(LEN=charlen), INTENT(IN) :: var_name !< name of variable 424 428 CHARACTER(LEN=charlen), INTENT(IN) :: var_type !< data type of variable 429 CHARACTER(LEN=*), INTENT(IN) :: mode !< operation mode 425 430 426 431 CHARACTER(LEN=*), PARAMETER :: routine_name = 'binary_init_variable' !< name of this routine … … 433 438 434 439 LOGICAL, INTENT(IN) :: is_global !< true if variable is global (same on all PE) 435 LOGICAL, INTENT(OUT) :: is_init !< true if variable is initialized436 440 437 441 … … 440 444 CALL internal_message( 'debug', routine_name // ': init variable ' // TRIM( var_name ) ) 441 445 442 IF ( is_global ) CONTINUE ! reqired to prevent compiler warning 446 !-- Check mode (not required, added for compatibility reasons only) 447 IF ( TRIM( mode ) == mode_binary ) CONTINUE 448 449 !-- Check if variable is global (not required, added for compatibility reasons only) 450 IF ( is_global ) CONTINUE 443 451 444 452 !-- Assign variable ID … … 454 462 WRITE( file_id ) SIZE( var_dim_ids ) 455 463 WRITE( file_id ) var_dim_ids 456 457 !-- Variable is initialised458 is_init = return_value == 0459 464 460 465 END SUBROUTINE binary_init_variable … … 504 509 return_value ) 505 510 511 CHARACTER(LEN=charlen) :: out_str !< output string 512 506 513 CHARACTER(LEN=*), PARAMETER :: routine_name = 'binary_write_variable' !< name of this routine 507 514 … … 567 574 !-- 8bit integer output 568 575 IF ( PRESENT( var_int8_0d ) ) THEN 576 out_str = 'int8' 577 WRITE( file_id ) out_str 569 578 WRITE( file_id ) var_int8_0d 570 579 ELSEIF ( PRESENT( var_int8_1d ) ) THEN 580 out_str = 'int8' 581 WRITE( file_id ) out_str 571 582 WRITE( file_id ) var_int8_1d 572 583 ELSEIF ( PRESENT( var_int8_2d ) ) THEN 584 out_str = 'int8' 585 WRITE( file_id ) out_str 573 586 WRITE( file_id ) var_int8_2d 574 587 ELSEIF ( PRESENT( var_int8_3d ) ) THEN 588 out_str = 'int8' 589 WRITE( file_id ) out_str 575 590 WRITE( file_id ) var_int8_3d 576 591 !-- 16bit integer output 577 592 ELSEIF ( PRESENT( var_int16_0d ) ) THEN 593 out_str = 'int16' 594 WRITE( file_id ) out_str 578 595 WRITE( file_id ) var_int16_0d 579 596 ELSEIF ( PRESENT( var_int16_1d ) ) THEN 597 out_str = 'int16' 598 WRITE( file_id ) out_str 580 599 WRITE( file_id ) var_int16_1d 581 600 ELSEIF ( PRESENT( var_int16_2d ) ) THEN 601 out_str = 'int16' 602 WRITE( file_id ) out_str 582 603 WRITE( file_id ) var_int16_2d 583 604 ELSEIF ( PRESENT( var_int16_3d ) ) THEN 605 out_str = 'int16' 606 WRITE( file_id ) out_str 584 607 WRITE( file_id ) var_int16_3d 585 608 !-- 32bit integer output 586 609 ELSEIF ( PRESENT( var_int32_0d ) ) THEN 610 out_str = 'int32' 611 WRITE( file_id ) out_str 587 612 WRITE( file_id ) var_int32_0d 588 613 ELSEIF ( PRESENT( var_int32_1d ) ) THEN 614 out_str = 'int32' 615 WRITE( file_id ) out_str 589 616 WRITE( file_id ) var_int32_1d 590 617 ELSEIF ( PRESENT( var_int32_2d ) ) THEN 618 out_str = 'int32' 619 WRITE( file_id ) out_str 591 620 WRITE( file_id ) var_int32_2d 592 621 ELSEIF ( PRESENT( var_int32_3d ) ) THEN 622 out_str = 'int32' 623 WRITE( file_id ) out_str 593 624 WRITE( file_id ) var_int32_3d 594 625 !-- working-precision integer output 595 626 ELSEIF ( PRESENT( var_intwp_0d ) ) THEN 627 out_str = 'intwp' 628 WRITE( file_id ) out_str 596 629 WRITE( file_id ) var_intwp_0d 597 630 ELSEIF ( PRESENT( var_intwp_1d ) ) THEN 631 out_str = 'intwp' 632 WRITE( file_id ) out_str 598 633 WRITE( file_id ) var_intwp_1d 599 634 ELSEIF ( PRESENT( var_intwp_2d ) ) THEN 635 out_str = 'intwp' 636 WRITE( file_id ) out_str 600 637 WRITE( file_id ) var_intwp_2d 601 638 ELSEIF ( PRESENT( var_intwp_3d ) ) THEN 639 out_str = 'intwp' 640 WRITE( file_id ) out_str 602 641 WRITE( file_id ) var_intwp_3d 603 642 !-- 32bit real output 604 643 ELSEIF ( PRESENT( var_real32_0d ) ) THEN 644 out_str = 'real32' 645 WRITE( file_id ) out_str 605 646 WRITE( file_id ) var_real32_0d 606 647 ELSEIF ( PRESENT( var_real32_1d ) ) THEN 648 out_str = 'real32' 649 WRITE( file_id ) out_str 607 650 WRITE( file_id ) var_real32_1d 608 651 ELSEIF ( PRESENT( var_real32_2d ) ) THEN 652 out_str = 'real32' 653 WRITE( file_id ) out_str 609 654 WRITE( file_id ) var_real32_2d 610 655 ELSEIF ( PRESENT( var_real32_3d ) ) THEN 656 out_str = 'real32' 657 WRITE( file_id ) out_str 611 658 WRITE( file_id ) var_real32_3d 612 659 !-- 64bit real output 613 660 ELSEIF ( PRESENT( var_real64_0d ) ) THEN 661 out_str = 'real64' 662 WRITE( file_id ) out_str 614 663 WRITE( file_id ) var_real64_0d 615 664 ELSEIF ( PRESENT( var_real64_1d ) ) THEN 665 out_str = 'real64' 666 WRITE( file_id ) out_str 616 667 WRITE( file_id ) var_real64_1d 617 668 ELSEIF ( PRESENT( var_real64_2d ) ) THEN 669 out_str = 'real64' 670 WRITE( file_id ) out_str 618 671 WRITE( file_id ) var_real64_2d 619 672 ELSEIF ( PRESENT( var_real64_3d ) ) THEN 673 out_str = 'real64' 674 WRITE( file_id ) out_str 620 675 WRITE( file_id ) var_real64_3d 621 676 !-- working-precision real output 622 677 ELSEIF ( PRESENT( var_realwp_0d ) ) THEN 678 out_str = 'realwp' 679 WRITE( file_id ) out_str 623 680 WRITE( file_id ) var_realwp_0d 624 681 ELSEIF ( PRESENT( var_realwp_1d ) ) THEN 682 out_str = 'realwp' 683 WRITE( file_id ) out_str 625 684 WRITE( file_id ) var_realwp_1d 626 685 ELSEIF ( PRESENT( var_realwp_2d ) ) THEN 686 out_str = 'realwp' 687 WRITE( file_id ) out_str 627 688 WRITE( file_id ) var_realwp_2d 628 689 ELSEIF ( PRESENT( var_realwp_3d ) ) THEN 690 out_str = 'realwp' 691 WRITE( file_id ) out_str 629 692 WRITE( file_id ) var_realwp_3d 630 693 ELSE 631 694 return_value = 1 632 WRITE( temp_string, '(": variable_id=",I6,", file_id=",I6)' ) var_id, file_id 633 CALL internal_message( 'error', routine_name // & 634 TRIM( temp_string ) // ': no values given' ) 695 CALL internal_message( 'error', routine_name // ': no values given' ) 635 696 ENDIF 636 697 … … 706 767 IF ( TRIM( level ) == 'error' ) THEN 707 768 708 WRITE( internal_error_message, '(A,A)' ) ' DOM ERROR: ', string769 WRITE( internal_error_message, '(A,A)' ) ': ', string 709 770 710 771 ELSEIF ( TRIM( level ) == 'debug' .AND. print_debug_output ) THEN
Note: See TracChangeset
for help on using the changeset viewer.