- Timestamp:
- 2018-10-29T15:20:26+01:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/TOOLS/SIREN/src/dimension.f90
r10248 r10251 78 78 !> 79 79 !> This subroutine filled dimension structure with unused dimension, 80 !> then switch from " disordered" dimension to "ordered" dimension.<br/>80 !> then switch from "unordered" dimension to "ordered" dimension.<br/> 81 81 !> The dimension structure return will be:<br/> 82 82 !> tl_dim(1) => 'X', i_len=10, l_use=T, l_uld=F<br/> … … 94 94 !> - cl_neworder : character(len=4) (example: 'yxzt') 95 95 !> 96 !> to switch dimension array from ordered dimension to disordered96 !> to switch dimension array from ordered dimension to unordered 97 97 !> dimension:<br/> 98 98 !> @code 99 !> CALL dim_ disorder(tl_dim(:))99 !> CALL dim_unorder(tl_dim(:)) 100 100 !> @endcode 101 101 !> … … 111 111 !> CALL dim_reshape_2xyzt(tl_dim(:), value(:,:,:,:)) 112 112 !> @endcode 113 !> - value must be a 4D array of real(8) value " disordered"114 !> 115 !> to reshape array of value in " disordered" dimension:<br/>113 !> - value must be a 4D array of real(8) value "unordered" 114 !> 115 !> to reshape array of value in "unordered" dimension:<br/> 116 116 !> @code 117 117 !> CALL dim_reshape_xyzt2(tl_dim(:), value(:,:,:,:)) … … 123 123 !> CALL dim_reorder_2xyzt(tl_dim(:), tab(:)) 124 124 !> @endcode 125 !> - tab must be a 1D array with 4 elements " disordered".125 !> - tab must be a 1D array with 4 elements "unordered". 126 126 !> It could be composed of character, integer(4), or logical 127 127 !> 128 !> to reorder a 1D array of 4 elements in " disordered" dimension:<br/>129 !> @code 130 !> CALL dim_reorder_ xyzt2(tl_dim(:), tab(:))128 !> to reorder a 1D array of 4 elements in "unordered" dimension:<br/> 129 !> @code 130 !> CALL dim_reorder_2xyzt(tl_dim(:), tab(:)) 131 131 !> @endcode 132 132 !> - tab must be a 1D array with 4 elements "ordered". … … 173 173 PUBLIC :: dim_print !< print dimension information 174 174 PUBLIC :: dim_copy !< copy dimension structure 175 PUBLIC :: dim_reorder !< filled dimension structure to switch from disordered to ordered dimension176 PUBLIC :: dim_ disorder !< switch dimension array from ordered to disordered dimension175 PUBLIC :: dim_reorder !< filled dimension structure to switch from unordered to ordered dimension 176 PUBLIC :: dim_unorder !< switch dimension array from ordered to unordered dimension 177 177 PUBLIC :: dim_fill_unused !< filled dimension structure with unused dimension 178 178 PUBLIC :: dim_reshape_2xyzt !< reshape array dimension to ('x','y','z','t') … … 321 321 !> @author J.Paul 322 322 !> @date November, 2013 - Initial Version 323 !> @date September, 2014 324 !> - do not check if dimension used 323 !> @date September, 2014 - do not check if dimension used 325 324 !> 326 325 !> @param[in] td_dim array of dimension structure … … 503 502 !> Optionally length could be inform, as well as short name and if dimension 504 503 !> is unlimited or not.<br/> 505 !> By default, define dimension is supposed to be used. 506 !> Optionally you could force a defined dimension to be unused. 507 !> 508 !> @author J.Paul 509 !> @date November, 2013 - Initial Version 510 !> @date February, 2015 511 !> - add optional argument to define dimension unused 512 !> @date July, 2015 513 !> - Bug fix: inform order to disorder table instead of disorder to order 514 !> table 504 !> define dimension is supposed to be used. 505 !> 506 !> @author J.Paul 507 !> @date November, 2013 - Initial Version 515 508 ! 516 509 !> @param[in] cd_name dimension name … … 518 511 !> @param[in] ld_uld dimension unlimited 519 512 !> @param[in] cd_sname dimension short name 520 !> @param[in] ld_uld dimension use or not521 513 !> @return dimension structure 522 514 !------------------------------------------------------------------- 523 TYPE(TDIM) FUNCTION dim_init( cd_name, id_len, ld_uld, cd_sname , ld_use)515 TYPE(TDIM) FUNCTION dim_init( cd_name, id_len, ld_uld, cd_sname) 524 516 IMPLICIT NONE 525 517 … … 529 521 LOGICAL, INTENT(IN), OPTIONAL :: ld_uld 530 522 CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: cd_sname 531 LOGICAL, INTENT(IN), OPTIONAL :: ld_use532 523 533 524 ! local variable … … 552 543 553 544 ! define dimension is supposed to be used 554 IF( PRESENT(ld_use) )THEN 555 dim_init%l_use=ld_use 556 ELSE 557 dim_init%l_use=.TRUE. 558 ENDIF 545 dim_init%l_use=.TRUE. 559 546 560 547 IF( PRESENT(cd_sname) )THEN … … 603 590 ENDIF 604 591 605 ! get dimension order indices606 dim_init%i_ xyzt2=SCAN(TRIM(cp_dimorder),TRIM(dim_init%c_sname))592 ! get dimension orderer index 593 dim_init%i_2xyzt=SCAN(TRIM(cp_dimorder),TRIM(dim_init%c_sname)) 607 594 608 595 END FUNCTION dim_init … … 668 655 !> @author J.Paul 669 656 !> @date November, 2013 - Initial Version 670 !> @date July, 2015671 !> - Bug fix: use order to disorder table (see dim_init)672 657 !> 673 658 !> @param[in] td_dim array of dimension structure … … 701 686 ! search missing dimension 702 687 IF( INDEX(cl_dimin,TRIM(fct_lower(cp_dimorder(ji:ji)))) == 0 )THEN 703 ! search first empty dimension (see dim_init)704 il_ind(:)=MINLOC( tl_dim(:)%i_ xyzt2, tl_dim(:)%i_xyzt2== 0 )688 ! search first empty dimension 689 il_ind(:)=MINLOC( tl_dim(:)%i_2xyzt, tl_dim(:)%i_2xyzt == 0 ) 705 690 706 691 ! put missing dimension instead of empty one … … 708 693 ! update output structure 709 694 tl_dim(il_ind(1))%c_name=fct_lower(cp_dimorder(ji:ji)) 710 tl_dim(il_ind(1))%i_ xyzt2=ji695 tl_dim(il_ind(1))%i_2xyzt=ji 711 696 tl_dim(il_ind(1))%i_len=1 712 697 tl_dim(il_ind(1))%l_use=.FALSE. … … 726 711 !> This subroutine switch element of an array (4 elts) of dimension 727 712 !> structure 728 !> from disordered dimension to ordered dimension <br/>713 !> from unordered dimension to ordered dimension <br/> 729 714 !> 730 715 !> @details … … 737 722 !> @author J.Paul 738 723 !> @date November, 2013 - Initial Version 739 !> @date September, 2014 740 !> - allow to choose ordered dimension to be output 724 !> @date September, 2014 - allow to choose ordered dimension to be output 741 725 !> 742 726 !> @param[inout] td_dim array of dimension structure … … 827 811 !------------------------------------------------------------------- 828 812 !> @brief This subroutine switch dimension array from ordered dimension ('x','y','z','t') 829 !> to disordered dimension. <br/>813 !> to unordered dimension. <br/> 830 814 !> @details 831 815 !> Example: (/'x','y','z','t'/) => (/'z','x','t','y'/)<br/> … … 838 822 !> @param[inout] td_dim array of dimension structure 839 823 !------------------------------------------------------------------- 840 SUBROUTINE dim_ disorder(td_dim)824 SUBROUTINE dim_unorder(td_dim) 841 825 IMPLICIT NONE 842 826 ! Argument … … 851 835 852 836 IF( SIZE(td_dim(:)) /= ip_maxdim )THEN 853 CALL logger_error("DIM DISORDER: invalid dimension of array dimension.")837 CALL logger_error("DIM UNORDER: invalid dimension of array dimension.") 854 838 ELSE 855 839 ! add dummy xyzt2 id to unused dimension … … 884 868 ENDIF 885 869 886 END SUBROUTINE dim_ disorder870 END SUBROUTINE dim_unorder 887 871 !------------------------------------------------------------------- 888 872 !> @brief This function reshape real(8) 4D array … … 924 908 925 909 IF( SIZE(td_dim(:)) /= ip_maxdim )THEN 926 CALL logger_error("DIM RESHAPE 2 XYZT: invalid dimension of "//& 927 & "array dimension.") 910 CALL logger_error("DIM RESHAPE 2 XYZT: invalid dimension of array dimension.") 928 911 ELSE 929 912 … … 931 914 932 915 CALL logger_fatal( & 933 & " DIM RESHAPE 2 XYZT: you should have run dim_reorder "//&934 & "before running RESHAPE" )916 & " DIM RESHAPE 2 XYZT: you should have run dim_reorder & 917 & before running RESHAPE" ) 935 918 936 919 ENDIF … … 989 972 !------------------------------------------------------------------- 990 973 !> @brief This function reshape ordered real(8) 4D array with dimension 991 !> (/'x','y','z','t'/) to an " disordered" array.<br/>974 !> (/'x','y','z','t'/) to an "unordered" array.<br/> 992 975 !> @details 993 976 !> Example: (/'x','y','z','t'/) => (/'z','x','t','y'/) … … 1026 1009 1027 1010 IF( SIZE(td_dim(:)) /= ip_maxdim )THEN 1028 CALL logger_error("DIM RESHAPE XYZT 2: invalid dimension of "//& 1029 & "array dimension.") 1011 CALL logger_error("DIM RESHAPE XYZT 2: invalid dimension of array dimension.") 1030 1012 ELSE 1031 1013 … … 1033 1015 1034 1016 CALL logger_fatal( & 1035 & " DIM RESHAPE XYZT 2: you should have run dim_reorder "//&1036 & "before running RESHAPE" )1017 & " DIM RESHAPE XYZT 2: you should have run dim_reorder & 1018 & before running RESHAPE" ) 1037 1019 1038 1020 ENDIF … … 1122 1104 1123 1105 CALL logger_error( & 1124 & " DIM REORDER 2 XYZT: you should have run dim_reorder "//&1125 & "before running REORDER" )1106 & " DIM REORDER 2 XYZT: you should have run dim_reorder & 1107 & before running REORDER" ) 1126 1108 1127 1109 ENDIF … … 1134 1116 END FUNCTION dim__reorder_2xyzt_i4 1135 1117 !------------------------------------------------------------------- 1136 !> @brief This function disordered integer(4) 1D array to be suitable with1118 !> @brief This function unordered integer(4) 1D array to be suitable with 1137 1119 !> initial dimension order (ex: dimension read in file). 1138 1120 !> @note you must have run dim_reorder before use this subroutine … … 1161 1143 IF( SIZE(td_dim(:)) /= ip_maxdim .OR. & 1162 1144 & SIZE(id_arr(:)) /= ip_maxdim )THEN 1163 CALL logger_error("DIM REORDER XYZT 2: invalid dimension of "//&1164 & "array dimensionor of array of value.")1145 CALL logger_error("DIM REORDER XYZT 2: invalid dimension of array dimension"//& 1146 & " or of array of value.") 1165 1147 ELSE 1166 1148 IF( ANY(td_dim(:)%i_xyzt2==0) )THEN 1167 1149 1168 1150 CALL logger_error( & 1169 & " DIM REORDER XYZT 2: you should have run dim_reorder "//&1170 & "before running REORDER" )1151 & " DIM REORDER XYZT 2: you should have run dim_reorder & 1152 & before running REORDER" ) 1171 1153 1172 1154 ENDIF … … 1184 1166 ! 1185 1167 !> @author J.Paul 1186 !> @date Nov ember, 2013 - Initial Version1168 !> @date Nov, 2013 - Initial Version 1187 1169 ! 1188 1170 !> @param[in] td_dim array of dimension structure … … 1211 1193 1212 1194 CALL logger_error( & 1213 & " DIM REORDER 2 XYZT: you should have run dim_reorder "//&1214 & "before running REORDER" )1195 & " DIM REORDER 2 XYZT: you should have run dim_reorder & 1196 & before running REORDER" ) 1215 1197 1216 1198 ENDIF … … 1223 1205 END FUNCTION dim__reorder_2xyzt_l 1224 1206 !------------------------------------------------------------------- 1225 !> @brief This function disordered logical 1D array to be suitable with1207 !> @brief This function unordered logical 1D array to be suitable with 1226 1208 !> initial dimension order (ex: dimension read in file). 1227 1209 !> @note you must have run dim_reorder before use this subroutine … … 1256 1238 1257 1239 CALL logger_error( & 1258 & " DIM REORDER XYZT 2: you should have run dim_reorder "//&1259 & "before running REORDER" )1240 & " DIM REORDER XYZT 2: you should have run dim_reorder & 1241 & before running REORDER" ) 1260 1242 1261 1243 ENDIF … … 1312 1294 END FUNCTION dim__reorder_2xyzt_c 1313 1295 !------------------------------------------------------------------- 1314 !> @brief This function disordered string 1D array to be suitable with1296 !> @brief This function unordered string 1D array to be suitable with 1315 1297 !> initial dimension order (ex: dimension read in file). 1316 1298 !> @note you must have run dim_reorder before use this subroutine 1317 1299 ! 1318 1300 !> @author J.Paul 1319 !> @date Nov ember, 2013 - Initial Version1301 !> @date Nov, 2013 - Initial Version 1320 1302 ! 1321 1303 !> @param[in] td_dim array of dimension structure … … 1344 1326 IF( ANY(td_dim(:)%i_xyzt2==0) )THEN 1345 1327 CALL logger_error( & 1346 & " DIM REORDER XYZT 2: you should have run dim_reorder "//&1347 & "before running REORDER" )1328 & " DIM REORDER XYZT 2: you should have run dim_reorder & 1329 & before running REORDER" ) 1348 1330 1349 1331 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.