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 6392 for branches/2015/nemo_v3_6_STABLE/NEMOGCM/TOOLS/SIREN/src/variable.f90 – NEMO

Ignore:
Timestamp:
2016-03-17T10:15:57+01:00 (8 years ago)
Author:
jpaul
Message:

commit changes/bugfix/... for SIREN; see ticket #1700

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/TOOLS/SIREN/src/variable.f90

    r5616 r6392  
    285285!> @date July, 2015  
    286286!> - add subroutine var_chg_unit to change unit of output variable 
     287!> @date Spetember, 2015 
     288!> - manage useless (dummy) variable 
    287289! 
    288290!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    305307 
    306308   PUBLIC :: tg_varextra !< array of variable structure with extra information. 
     309 
     310   PRIVATE :: cm_dumvar  !< dummy variable array 
    307311 
    308312   ! function and subroutine 
     
    334338   PUBLIC :: var_chg_extra     !< read variable namelist information, and modify extra information. 
    335339   PUBLIC :: var_check_dim     !< check variable dimension expected 
     340   PUBLIC :: var_get_dummy     !< fill dummy variable array 
     341   PUBLIC :: var_is_dummy      !< check if variable is defined as dummy variable 
    336342 
    337343   PRIVATE :: var__init          ! initialize variable structure without array of value 
     
    445451                                                        !< fill when running var_def_extra()  
    446452 
     453   CHARACTER(LEN=lc), DIMENSION(ip_maxdum), SAVE :: cm_dumvar !< dummy variable 
     454 
    447455   INTERFACE var_init 
    448456      MODULE PROCEDURE var__init       ! initialize variable structure without array of value 
     
    66986706   !> given variable name or standard name.  
    66996707   !> 
    6700    !> @warning only variable read from file, have an id. 
    6701    !> 
    67026708   !> @author J.Paul 
    67036709   !> @date November, 2013 - Initial Version 
     6710   !> @date July, 2015 
     6711   !> - check long name 
    67046712   ! 
    67056713   !> @param[in] td_var       array of variable structure 
     
    67356743         ELSE IF( fct_lower(td_var(ji)%c_stdname) == fct_lower(cd_name) .AND.& 
    67366744         &    TRIM(fct_lower(td_var(ji)%c_stdname)) /= '' )THEN 
     6745             
     6746            var_get_id=td_var(ji)%i_id 
     6747            EXIT 
     6748 
     6749         ! look for variable long name 
     6750         ELSE IF( fct_lower(td_var(ji)%c_longname) == fct_lower(cd_name) .AND.& 
     6751         &    TRIM(fct_lower(td_var(ji)%c_longname)) /= '' )THEN 
    67376752             
    67386753            var_get_id=td_var(ji)%i_id 
     
    67756790      IF( ASSOCIATED(td_var%d_value) )THEN 
    67766791 
    6777          CALL logger_trace( "VAR GET MASK: create mask from variable "//& 
    6778          &               TRIM(td_var%c_name) ) 
     6792         CALL logger_debug( "VAR GET MASK: create mask from variable "//& 
     6793         &               TRIM(td_var%c_name)//", FillValue ="//& 
     6794         &               TRIM(fct_str(td_var%d_fill))) 
    67796795         var_get_mask(:,:,:)=1 
    67806796         WHERE( td_var%d_value(:,:,:,1) == td_var%d_fill ) 
     
    72797295 
    72807296      ! local variable 
     7297      CHARACTER(LEN=lc) :: cl_tmp 
     7298 
    72817299      INTEGER(i4)       :: il_ind 
     7300       
    72827301      TYPE(TATT)        :: tl_att 
    72837302 
    72847303      ! loop indices 
     7304      INTEGER(i4)       :: ji 
    72857305      !---------------------------------------------------------------- 
    72867306 
     
    73357355               td_var%c_axis=TRIM(tg_varextra(il_ind)%c_axis) 
    73367356               ! create attibute 
    7337                tl_att=att_init('axis',TRIM(td_var%c_axis)) 
    7338                CALL var_move_att(td_var, tl_att)                
     7357               IF( TRIM(fct_upper(td_var%c_name)) == TRIM(td_var%c_axis) )THEN 
     7358                  tl_att=att_init('axis',TRIM(td_var%c_axis)) 
     7359               ELSE 
     7360                  cl_tmp="" 
     7361                  DO ji=LEN(TRIM(td_var%c_axis)),1,-1 
     7362                     cl_tmp=TRIM(cl_tmp)//" "//TRIM(td_var%c_axis(ji:ji)) 
     7363                  ENDDO 
     7364                  tl_att=att_init('associate',TRIM(ADJUSTL(cl_tmp))) 
     7365               ENDIF 
     7366               CALL var_move_att(td_var, tl_att) 
    73397367            ENDIF 
    73407368 
     
    74027430            ENDIF 
    74037431 
     7432         ELSE 
     7433            CALL logger_warn("VAR GET EXTRA: no extra information on "//& 
     7434               &  "variable "//TRIM(td_var%c_name)//". you should define it"//& 
     7435               &  " (see variable.cfg).") 
    74047436         ENDIF 
    74057437 
     
    74257457   !> - change way to get information in namelist,  
    74267458   !> value follows string "min =" 
     7459   !> @date Feb, 2016 
     7460   !> - check character just after keyword 
    74277461   ! 
    74287462   !> @param[in] cd_name      variable name 
     
    74477481      ! loop indices 
    74487482      INTEGER(i4) :: ji 
     7483      INTEGER(i4) :: jj 
    74497484      !---------------------------------------------------------------- 
    74507485      ! init 
     
    74577492         il_ind=INDEX(TRIM(cl_tmp),'min') 
    74587493         IF( il_ind /= 0 )THEN 
    7459             cl_min=fct_split(cl_tmp,2,'=') 
    7460             EXIT 
     7494            ! check character just after 
     7495            jj=il_ind+LEN('min') 
     7496            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     7497            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     7498               cl_min=fct_split(cl_tmp,2,'=') 
     7499               EXIT 
     7500            ENDIF 
    74617501         ENDIF 
    74627502         ji=ji+1 
     
    74707510            &  TRIM(fct_str(var__get_min))//" for variable "//TRIM(cd_name) ) 
    74717511         ELSE 
    7472             CALL logger_error("VAR GET MIN: invalid minimum value for "//& 
    7473             &  "variable "//TRIM(cd_name)//". check namelist." ) 
     7512            CALL logger_error("VAR GET MIN: invalid minimum value ("//& 
     7513               & TRIM(cl_min)//") for variable "//TRIM(cd_name)//& 
     7514               & ". check namelist." ) 
    74747515         ENDIF 
    74757516      ENDIF 
     
    74897530   !> - change way to get information in namelist,  
    74907531   !> value follows string "max =" 
     7532   !> @date Feb, 2016 
     7533   !> - check character just after keyword 
    74917534   ! 
    74927535   !> @param[in] cd_name      variable name 
     
    75117554      ! loop indices 
    75127555      INTEGER(i4) :: ji 
     7556      INTEGER(i4) :: jj 
    75137557      !---------------------------------------------------------------- 
    75147558      ! init 
     
    75217565         il_ind=INDEX(TRIM(cl_tmp),'max') 
    75227566         IF( il_ind /= 0 )THEN 
    7523             cl_max=fct_split(cl_tmp,2,'=') 
    7524             EXIT 
     7567            ! check character just after 
     7568            jj=il_ind+LEN('max') 
     7569            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     7570            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     7571               cl_max=fct_split(cl_tmp,2,'=') 
     7572               EXIT 
     7573            ENDIF 
    75257574         ENDIF 
    75267575         ji=ji+1 
     
    75507599   !> @author J.Paul 
    75517600   !> @date June, 2015 - Initial Version 
     7601   !> @date Feb, 2016 
     7602   !> - check character just after keyword 
    75527603   ! 
    75537604   !> @param[in] cd_name      variable name 
     
    75747625      ! loop indices 
    75757626      INTEGER(i4) :: ji 
     7627      INTEGER(i4) :: jj 
    75767628      !---------------------------------------------------------------- 
    75777629      ! init 
     
    75847636         il_ind=INDEX(TRIM(cl_tmp),'unf') 
    75857637         IF( il_ind /= 0 )THEN 
    7586             cl_unf=fct_split(cl_tmp,2,'=') 
    7587             EXIT 
     7638            ! check character just after 
     7639            jj=il_ind+LEN('unf') 
     7640            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     7641            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     7642               cl_unf=fct_split(cl_tmp,2,'=') 
     7643               EXIT 
     7644            ENDIF 
    75887645         ENDIF 
    75897646         ji=ji+1 
     
    76267683   !> - change way to get information in namelist,  
    76277684   !> value follows string "int =" 
     7685   !> @date Feb, 2016 
     7686   !> - check character just after keyword 
    76287687   ! 
    76297688   !> @param[in] cd_name      variable name 
     
    76637722         il_ind=INDEX(TRIM(cl_tmp),'int') 
    76647723         IF( il_ind /= 0 )THEN 
    7665             cl_int=fct_split(cl_tmp,2,'=') 
    7666             EXIT 
     7724            ! check character just after 
     7725            jj=il_ind+LEN('int') 
     7726            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     7727            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     7728               cl_int=fct_split(cl_tmp,2,'=') 
     7729               EXIT 
     7730            ENDIF 
    76677731         ENDIF 
    76687732         ji=ji+1 
     
    77467810   !> - change way to get information in namelist,  
    77477811   !> value follows string "ext =" 
     7812   !> @date Feb, 2016 
     7813   !> - check character just after keyword 
    77487814   ! 
    77497815   !> @param[in] cd_name      variable name 
     
    77787844         il_ind=INDEX(TRIM(cl_tmp),'ext') 
    77797845         IF( il_ind /= 0 )THEN 
    7780             cl_ext=fct_split(cl_tmp,2,'=') 
    7781             EXIT 
     7846            ! check character just after 
     7847            jj=il_ind+LEN('ext') 
     7848            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     7849            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     7850               cl_ext=fct_split(cl_tmp,2,'=') 
     7851               EXIT 
     7852            ENDIF 
    77827853         ENDIF 
    77837854         ji=ji+1 
     
    78227893   !> - change way to get information in namelist,  
    78237894   !> value follows string "flt =" 
     7895   !> @date Feb, 2016 
     7896   !> - check character just after keyword 
    78247897   !> 
    78257898   !> @param[in] cd_name      variable name 
     
    78527925         il_ind=INDEX(TRIM(cl_tmp),'flt') 
    78537926         IF( il_ind /= 0 )THEN 
    7854             cl_flt=fct_split(cl_tmp,2,'=') 
    7855             EXIT 
     7927            ! check character just after 
     7928            jj=il_ind+LEN('flt') 
     7929            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     7930            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     7931               cl_flt=fct_split(cl_tmp,2,'=') 
     7932               EXIT 
     7933            ENDIF 
    78567934         ENDIF 
    78577935         ji=ji+1 
     
    79258003   !> @author J.Paul 
    79268004   !> @date June, 2015 - Initial Version 
     8005   !> @date Feb, 2016 
     8006   !> - check character just after keyword 
    79278007   ! 
    79288008   !> @param[in] cd_name      variable name 
     
    79468026      ! loop indices 
    79478027      INTEGER(i4) :: ji 
     8028      INTEGER(i4) :: jj 
    79488029      !---------------------------------------------------------------- 
    79498030 
     
    79558036         il_ind=INDEX(TRIM(cl_tmp),'unt') 
    79568037         IF( il_ind /= 0 )THEN 
    7957             var__get_unt=fct_split(cl_tmp,2,'=') 
    7958             EXIT 
     8038            ! check character just after 
     8039            jj=il_ind+LEN('unt') 
     8040            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     8041            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     8042               var__get_unt=fct_split(cl_tmp,2,'=') 
     8043               EXIT 
     8044            ENDIF 
    79598045         ENDIF 
    79608046         ji=ji+1 
     
    81018187 
    81028188            !- change scale factor and offset to avoid mistake 
    8103             tl_att=att_init('scale_factor',1) 
     8189            tl_att=att_init('scale_factor',1._dp) 
    81048190            CALL var_move_att(td_var, tl_att) 
    81058191 
    8106             tl_att=att_init('add_offset',0) 
     8192            tl_att=att_init('add_offset',0._dp) 
    81078193            CALL var_move_att(td_var, tl_att) 
    81088194         ENDIF 
     
    83568442 
    83578443   END FUNCTION var_to_date 
     8444   !------------------------------------------------------------------- 
     8445   !> @brief This subroutine fill dummy variable array 
     8446   ! 
     8447   !> @author J.Paul 
     8448   !> @date September, 2015 - Initial Version 
     8449   ! 
     8450   !> @param[in] cd_dummy dummy configuration file 
     8451   !------------------------------------------------------------------- 
     8452   SUBROUTINE var_get_dummy( cd_dummy ) 
     8453      IMPLICIT NONE 
     8454      ! Argument 
     8455      CHARACTER(LEN=*), INTENT(IN) :: cd_dummy 
     8456 
     8457      ! local variable 
     8458      INTEGER(i4)   :: il_fileid 
     8459      INTEGER(i4)   :: il_status 
     8460 
     8461      LOGICAL       :: ll_exist 
     8462 
     8463      ! loop indices 
     8464      ! namelist 
     8465      CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumvar 
     8466      CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumdim 
     8467      CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumatt 
     8468 
     8469      !---------------------------------------------------------------- 
     8470      NAMELIST /namdum/ &   !< dummy namelist 
     8471      &  cn_dumvar, &       !< variable  name 
     8472      &  cn_dumdim, &       !< dimension name 
     8473      &  cn_dumatt          !< attribute name 
     8474      !---------------------------------------------------------------- 
     8475 
     8476      ! init 
     8477      cm_dumvar(:)='' 
     8478 
     8479      ! read namelist 
     8480      INQUIRE(FILE=TRIM(cd_dummy), EXIST=ll_exist) 
     8481      IF( ll_exist )THEN 
     8482     
     8483         il_fileid=fct_getunit() 
     8484    
     8485         OPEN( il_fileid, FILE=TRIM(cd_dummy), & 
     8486         &                FORM='FORMATTED',       & 
     8487         &                ACCESS='SEQUENTIAL',    & 
     8488         &                STATUS='OLD',           & 
     8489         &                ACTION='READ',          & 
     8490         &                IOSTAT=il_status) 
     8491         CALL fct_err(il_status) 
     8492         IF( il_status /= 0 )THEN 
     8493            CALL logger_fatal("DIM GET DUMMY: opening "//TRIM(cd_dummy)) 
     8494         ENDIF 
     8495    
     8496         READ( il_fileid, NML = namdum ) 
     8497         cm_dumvar(:)=cn_dumvar(:) 
     8498 
     8499         CLOSE( il_fileid ) 
     8500 
     8501      ENDIF 
     8502    
     8503   END SUBROUTINE var_get_dummy 
     8504   !------------------------------------------------------------------- 
     8505   !> @brief This function check if variable is defined as dummy variable 
     8506   !> in configuraton file 
     8507   !> 
     8508   !> @author J.Paul 
     8509   !> @date September, 2015 - Initial Version 
     8510   ! 
     8511   !> @param[in] td_var variable structure 
     8512   !> @return true if variable is dummy variable  
     8513   !------------------------------------------------------------------- 
     8514   FUNCTION var_is_dummy(td_var) 
     8515      IMPLICIT NONE 
     8516 
     8517      ! Argument       
     8518      TYPE(TVAR), INTENT(IN) :: td_var 
     8519       
     8520      ! function 
     8521      LOGICAL :: var_is_dummy 
     8522       
     8523      ! loop indices 
     8524      INTEGER(i4) :: ji 
     8525      !---------------------------------------------------------------- 
     8526 
     8527      var_is_dummy=.FALSE. 
     8528      DO ji=1,ip_maxdum 
     8529         IF( fct_lower(td_var%c_name) == fct_lower(cm_dumvar(ji)) )THEN 
     8530            var_is_dummy=.TRUE. 
     8531            EXIT 
     8532         ENDIF 
     8533      ENDDO 
     8534 
     8535   END FUNCTION var_is_dummy 
    83588536END MODULE var 
    83598537 
Note: See TracChangeset for help on using the changeset viewer.