New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 10251 for branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/TOOLS/SIREN/src/dimension.f90 – NEMO

Ignore:
Timestamp:
2018-10-29T15:20:26+01:00 (5 years ago)
Author:
kingr
Message:

Rolled back to r10247 - i.e., undid merge of pkg br and 3.6_stable br

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/TOOLS/SIREN/src/dimension.f90

    r10248 r10251  
    7878!> 
    7979!>    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/> 
    8181!>    The dimension structure return will be:<br/> 
    8282!>    tl_dim(1) => 'X', i_len=10, l_use=T, l_uld=F<br/> 
     
    9494!>    - cl_neworder : character(len=4) (example: 'yxzt') 
    9595!> 
    96 !>    to switch dimension array from ordered dimension to disordered 
     96!>    to switch dimension array from ordered dimension to unordered 
    9797!> dimension:<br/> 
    9898!> @code 
    99 !>    CALL dim_disorder(tl_dim(:)) 
     99!>    CALL dim_unorder(tl_dim(:)) 
    100100!> @endcode 
    101101!> 
     
    111111!>    CALL dim_reshape_2xyzt(tl_dim(:), value(:,:,:,:)) 
    112112!> @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/> 
    116116!> @code 
    117117!>    CALL dim_reshape_xyzt2(tl_dim(:), value(:,:,:,:)) 
     
    123123!>    CALL dim_reorder_2xyzt(tl_dim(:), tab(:)) 
    124124!> @endcode 
    125 !>       - tab must be a 1D array with 4 elements "disordered". 
     125!>       - tab must be a 1D array with 4 elements "unordered". 
    126126!>       It could be composed of character, integer(4), or logical 
    127127!>  
    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(:)) 
    131131!> @endcode 
    132132!>       - tab must be a 1D array with 4 elements "ordered". 
     
    173173   PUBLIC :: dim_print         !< print dimension information 
    174174   PUBLIC :: dim_copy          !< copy dimension structure 
    175    PUBLIC :: dim_reorder       !< filled dimension structure to switch from disordered to ordered dimension 
    176    PUBLIC :: dim_disorder      !< switch dimension array from ordered to disordered dimension 
     175   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 
    177177   PUBLIC :: dim_fill_unused   !< filled dimension structure with unused dimension  
    178178   PUBLIC :: dim_reshape_2xyzt !< reshape array dimension to ('x','y','z','t') 
     
    321321   !> @author J.Paul 
    322322   !> @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 
    325324   !> 
    326325   !> @param[in] td_dim    array of dimension structure 
     
    503502   !> Optionally length could be inform, as well as short name and if dimension 
    504503   !> 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 
    515508   ! 
    516509   !> @param[in] cd_name   dimension name 
     
    518511   !> @param[in] ld_uld    dimension unlimited 
    519512   !> @param[in] cd_sname  dimension short name 
    520    !> @param[in] ld_uld    dimension use or not 
    521513   !> @return dimension structure 
    522514   !------------------------------------------------------------------- 
    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) 
    524516      IMPLICIT NONE 
    525517 
     
    529521      LOGICAL,          INTENT(IN), OPTIONAL :: ld_uld 
    530522      CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: cd_sname 
    531       LOGICAL,          INTENT(IN), OPTIONAL :: ld_use 
    532523 
    533524      ! local variable 
     
    552543 
    553544      ! 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. 
    559546 
    560547      IF( PRESENT(cd_sname) )THEN 
     
    603590      ENDIF 
    604591       
    605       ! get dimension order indices 
    606       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)) 
    607594 
    608595   END FUNCTION dim_init 
     
    668655   !> @author J.Paul 
    669656   !> @date November, 2013 - Initial Version 
    670    !> @date July, 2015  
    671    !> - Bug fix: use order to disorder table (see dim_init) 
    672657   !> 
    673658   !> @param[in] td_dim array of dimension structure 
     
    701686         ! search missing dimension 
    702687         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 ) 
    705690 
    706691            ! put missing dimension instead of empty one 
     
    708693            ! update output structure 
    709694            tl_dim(il_ind(1))%c_name=fct_lower(cp_dimorder(ji:ji)) 
    710             tl_dim(il_ind(1))%i_xyzt2=ji 
     695            tl_dim(il_ind(1))%i_2xyzt=ji 
    711696            tl_dim(il_ind(1))%i_len=1 
    712697            tl_dim(il_ind(1))%l_use=.FALSE. 
     
    726711   !> This subroutine switch element of an array (4 elts) of dimension  
    727712   !> structure  
    728    !> from disordered dimension to ordered dimension <br/> 
     713   !> from unordered dimension to ordered dimension <br/> 
    729714   !> 
    730715   !> @details 
     
    737722   !> @author J.Paul 
    738723   !> @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 
    741725   !> 
    742726   !> @param[inout] td_dim    array of dimension structure 
     
    827811   !------------------------------------------------------------------- 
    828812   !> @brief This subroutine switch dimension array from ordered dimension ('x','y','z','t') 
    829    !> to disordered dimension. <br/> 
     813   !> to unordered dimension. <br/> 
    830814   !> @details 
    831815   !> Example: (/'x','y','z','t'/) => (/'z','x','t','y'/)<br/> 
     
    838822   !> @param[inout] td_dim array of dimension structure 
    839823   !------------------------------------------------------------------- 
    840    SUBROUTINE dim_disorder(td_dim) 
     824   SUBROUTINE dim_unorder(td_dim) 
    841825      IMPLICIT NONE 
    842826      ! Argument       
     
    851835 
    852836      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.") 
    854838      ELSE       
    855839         ! add dummy xyzt2 id to unused dimension 
     
    884868      ENDIF 
    885869 
    886    END SUBROUTINE dim_disorder 
     870   END SUBROUTINE dim_unorder 
    887871   !------------------------------------------------------------------- 
    888872   !> @brief This function reshape real(8) 4D array    
     
    924908 
    925909      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.") 
    928911      ELSE       
    929912 
     
    931914 
    932915            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" ) 
    935918 
    936919         ENDIF 
     
    989972   !------------------------------------------------------------------- 
    990973   !> @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/> 
    992975   !> @details 
    993976   !> Example: (/'x','y','z','t'/) => (/'z','x','t','y'/) 
     
    10261009 
    10271010      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.") 
    10301012      ELSE 
    10311013 
     
    10331015 
    10341016            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" ) 
    10371019 
    10381020         ENDIF         
     
    11221104 
    11231105            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" ) 
    11261108 
    11271109         ENDIF         
     
    11341116   END FUNCTION dim__reorder_2xyzt_i4 
    11351117   !------------------------------------------------------------------- 
    1136    !> @brief This function disordered integer(4) 1D array to be suitable with 
     1118   !> @brief This function unordered integer(4) 1D array to be suitable with 
    11371119   !> initial dimension order (ex: dimension read in file). 
    11381120   !> @note you must have run dim_reorder before use this subroutine 
     
    11611143      IF( SIZE(td_dim(:)) /= ip_maxdim .OR. & 
    11621144      &   SIZE(id_arr(:)) /= ip_maxdim )THEN 
    1163          CALL logger_error("DIM REORDER XYZT 2: invalid dimension of "//& 
    1164             &  "array dimension or of array of value.") 
     1145         CALL logger_error("DIM REORDER XYZT 2: invalid dimension of array dimension"//& 
     1146         &              " or of array of value.") 
    11651147      ELSE       
    11661148         IF( ANY(td_dim(:)%i_xyzt2==0) )THEN 
    11671149 
    11681150            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" ) 
    11711153 
    11721154         ENDIF         
     
    11841166   ! 
    11851167   !> @author J.Paul 
    1186    !> @date November, 2013 - Initial Version 
     1168   !> @date Nov, 2013 - Initial Version 
    11871169   ! 
    11881170   !> @param[in] td_dim array of dimension structure 
     
    12111193 
    12121194            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" ) 
    12151197 
    12161198         ENDIF         
     
    12231205   END FUNCTION dim__reorder_2xyzt_l 
    12241206   !------------------------------------------------------------------- 
    1225    !> @brief This function disordered logical 1D array to be suitable with 
     1207   !> @brief This function unordered logical 1D array to be suitable with 
    12261208   !> initial dimension order (ex: dimension read in file). 
    12271209   !> @note you must have run dim_reorder before use this subroutine 
     
    12561238 
    12571239            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" ) 
    12601242 
    12611243         ENDIF         
     
    13121294   END FUNCTION dim__reorder_2xyzt_c 
    13131295   !------------------------------------------------------------------- 
    1314    !> @brief This function disordered string 1D array to be suitable with 
     1296   !> @brief This function unordered string 1D array to be suitable with 
    13151297   !> initial dimension order (ex: dimension read in file). 
    13161298   !> @note you must have run dim_reorder before use this subroutine 
    13171299   ! 
    13181300   !> @author J.Paul 
    1319    !> @date November, 2013 - Initial Version 
     1301   !> @date Nov, 2013 - Initial Version 
    13201302   ! 
    13211303   !> @param[in] td_dim array of dimension structure 
     
    13441326         IF( ANY(td_dim(:)%i_xyzt2==0) )THEN 
    13451327            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" ) 
    13481330 
    13491331         ENDIF         
Note: See TracChangeset for help on using the changeset viewer.