Changeset 5653


Ignore:
Timestamp:
2015-07-30T18:15:19+02:00 (5 years ago)
Author:
timgraham
Message:

Merge head of trunk (r5643) into branch

Location:
branches/2014/dev_r4765_CNRS_agrif/NEMOGCM
Files:
52 edited
2 copied

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/BDY/bdyvol.F90

    r5581 r5653  
    9191      ! Calculate the cumulate surface Flux z_cflxemp (m3/s) over all the domain 
    9292      ! ----------------------------------------------------------------------- 
    93       z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:)+rdivisf*fwfisf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) ) / rau0 
     93      z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:)+fwfisf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) ) / rau0 
    9494      IF( lk_mpp )   CALL mpp_sum( z_cflxemp )     ! sum over the global domain 
    9595 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/DIA/diaharm.F90

    r5581 r5653  
    196196                  DO ji = 1,jpi 
    197197                     ! Elevation 
    198                      ana_temp(ji,jj,nhc,1) = ana_temp(ji,jj,nhc,1) + ztemp*sshn(ji,jj)           *tmask_i(ji,jj)         
    199 #if defined key_dynspg_ts 
    200                      ana_temp(ji,jj,nhc,2) = ana_temp(ji,jj,nhc,2) + ztemp*un_b(ji,jj)*hur(ji,jj)*umask_i(ji,jj) 
    201                      ana_temp(ji,jj,nhc,3) = ana_temp(ji,jj,nhc,3) + ztemp*vn_b(ji,jj)*hvr(ji,jj)*vmask_i(ji,jj) 
    202 #endif 
     198                     ana_temp(ji,jj,nhc,1) = ana_temp(ji,jj,nhc,1) + ztemp*sshn(ji,jj)*tmask_i(ji,jj)         
     199                     ana_temp(ji,jj,nhc,2) = ana_temp(ji,jj,nhc,2) + ztemp*un_b(ji,jj)*umask_i(ji,jj) 
     200                     ana_temp(ji,jj,nhc,3) = ana_temp(ji,jj,nhc,3) + ztemp*vn_b(ji,jj)*vmask_i(ji,jj) 
    203201                  END DO 
    204202               END DO 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90

    r5581 r5653  
    9393      ! 1 - Trends due to forcing ! 
    9494      ! ------------------------- ! 
    95       z_frc_trd_v = r1_rau0 * glob_sum( - ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) ) * surf(:,:) ) ! volume fluxes 
     95      z_frc_trd_v = r1_rau0 * glob_sum( - ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) * surf(:,:) ) ! volume fluxes 
    9696      z_frc_trd_t =           glob_sum( sbc_tsc(:,:,jp_tem) * surf(:,:) )                               ! heat fluxes 
    9797      z_frc_trd_s =           glob_sum( sbc_tsc(:,:,jp_sal) * surf(:,:) )                               ! salt fluxes 
     
    101101      ! Add ice shelf heat & salt input 
    102102      IF( nn_isf .GE. 1 )  THEN 
    103           z_frc_trd_t = z_frc_trd_t & 
    104               &   + glob_sum( ( risf_tsc(:,:,jp_tem) - rdivisf * fwfisf(:,:) * (-1.9) * r1_rau0 ) * surf(:,:) ) 
    105           z_frc_trd_s = z_frc_trd_s + (1.0_wp - rdivisf) * glob_sum( risf_tsc(:,:,jp_sal) * surf(:,:) ) 
     103          z_frc_trd_t = z_frc_trd_t + glob_sum( risf_tsc(:,:,jp_tem) * surf(:,:) ) 
     104          z_frc_trd_s = z_frc_trd_s + glob_sum( risf_tsc(:,:,jp_sal) * surf(:,:) ) 
    106105      ENDIF 
    107106 
     
    200199!      ENDIF 
    201200!!gm end 
    202  
    203201 
    204202      IF( lk_vvl ) THEN 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/DOM/domwri.F90

    r5581 r5653  
    215215         CALL iom_rstput( 0, 0, inum4, 'gdept_1d' , gdept_1d )  !    ! stretched system 
    216216         CALL iom_rstput( 0, 0, inum4, 'gdepw_1d' , gdepw_1d ) 
     217         CALL iom_rstput( 0, 0, inum4, 'gdept_0', gdept_0, ktype = jp_r4 )      
     218         CALL iom_rstput( 0, 0, inum4, 'gdepw_0', gdepw_0, ktype = jp_r4 ) 
    217219      ENDIF 
    218220       
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90

    r5581 r5653  
    266266               ! Add volume filter correction: compatibility with tracer advection scheme 
    267267               ! => time filter + conservation correction (only at the first level) 
    268                fse3t_b(:,:,1) = fse3t_b(:,:,1) - atfp * rdt * r1_rau0 * ( emp_b(:,:) - emp(:,:) & 
    269                               &                                          -rnf_b(:,:) + rnf(:,:) ) * tmask(:,:,1) 
     268               IF ( nn_isf == 0) THEN   ! if no ice shelf melting 
     269                  fse3t_b(:,:,1) = fse3t_b(:,:,1) - atfp * rdt * r1_rau0 * ( emp_b(:,:) - emp(:,:) & 
     270                                 &                                          -rnf_b(:,:) + rnf(:,:) ) * tmask(:,:,1) 
     271               ELSE                     ! if ice shelf melting 
     272                  DO jj = 1,jpj 
     273                     DO ji = 1,jpi 
     274                        jk = mikt(ji,jj) 
     275                        fse3t_b(ji,jj,jk) = fse3t_b(ji,jj,jk) - atfp * rdt * r1_rau0                       & 
     276                                          &                          * ( (emp_b(ji,jj)    - emp(ji,jj)   ) & 
     277                                          &                            - (rnf_b(ji,jj)    - rnf(ji,jj)   ) & 
     278                                          &                            + (fwfisf_b(ji,jj) - fwfisf(ji,jj)) ) * tmask(ji,jj,jk) 
     279                     END DO 
     280                  END DO 
     281               END IF 
    270282            ENDIF 
    271283            ! 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r5581 r5653  
    454454      !                                         ! Surface net water flux and rivers 
    455455      IF (ln_bt_fw) THEN 
    456          zssh_frc(:,:) = zraur * ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) ) 
     456         zssh_frc(:,:) = zraur * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) 
    457457      ELSE 
    458458         zssh_frc(:,:) = zraur * z1_2 * (  emp(:,:) + emp_b(:,:) - rnf(:,:) - rnf_b(:,:)   & 
    459                 &                        + rdivisf * ( fwfisf(:,:) + fwfisf_b(:,:) )       ) 
     459                &                        + fwfisf(:,:) + fwfisf_b(:,:)                     ) 
    460460      ENDIF 
    461461#if defined key_asminc 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90

    r5581 r5653  
    267267      ELSE                                         !** Leap-Frog time-stepping: Asselin filter + swap 
    268268         sshb(:,:) = sshn(:,:) + atfp * ( sshb(:,:) - 2 * sshn(:,:) + ssha(:,:) )     ! before <-- now filtered 
    269          IF( lk_vvl ) sshb(:,:) = sshb(:,:) - atfp * rdt / rau0 * ( emp_b(:,:) - emp(:,:) - rnf_b(:,:) + rnf(:,:) ) * ssmask(:,:) 
     269         IF( lk_vvl ) sshb(:,:) = sshb(:,:) - atfp * rdt / rau0 * ( emp_b(:,:)    - emp(:,:)    & 
     270                                &                                 - rnf_b(:,:)    + rnf(:,:)    & 
     271                                &                                 + fwfisf_b(:,:) - fwfisf(:,:) ) * ssmask(:,:) 
    270272         sshn(:,:) = ssha(:,:)                           ! now <-- after 
    271273      ENDIF 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90

    r5581 r5653  
    403403         CALL iom_put( "qsr_oce" ,   qsr  )                 ! output downward solar heat over the ocean 
    404404         CALL iom_put( "qt_oce"  ,   qns+qsr )              ! output total downward heat over the ocean 
     405         tprecip(:,:) = sf(jp_prec)%fnow(:,:,1) * rn_pfac   ! output total precipitation [kg/m2/s] 
     406         sprecip(:,:) = sf(jp_snow)%fnow(:,:,1) * rn_pfac   ! output solid precipitation [kg/m2/s] 
     407         CALL iom_put( 'snowpre', sprecip * 86400. )        ! Snow 
     408         CALL iom_put( 'precip' , tprecip * 86400. )        ! Total precipitation 
    405409      ENDIF 
    406410      ! 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/SBC/sbcfwb.F90

    r5581 r5653  
    108108         ! 
    109109         IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 
    110             z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) - snwice_fmass(:,:) ) ) / area   ! sum over the global domain 
     110            z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) - snwice_fmass(:,:) ) ) / area   ! sum over the global domain 
    111111            zcoef = z_fwf * rcp 
    112112            emp(:,:) = emp(:,:) - z_fwf              * tmask(:,:,1) 
     
    162162            zsurf_pos = glob_sum( e1e2t(:,:)*ztmsk_pos(:,:) ) 
    163163            !                                                  ! fwf global mean (excluding ocean to ice/snow exchanges)  
    164             z_fwf     = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) - snwice_fmass(:,:) ) ) / area 
     164            z_fwf     = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) - snwice_fmass(:,:) ) ) / area 
    165165            !             
    166166            IF( z_fwf < 0._wp ) THEN         ! spread out over >0 erp area to increase evaporation 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90

    r5594 r5653  
    8585    REAL(wp)                     ::   rmin 
    8686    REAL(wp)                     ::   zhk 
    87     CHARACTER(len=256)           ::   cfisf, cvarzisf, cvarhisf   ! name for isf file 
     87    REAL(wp)                     ::   zt_frz, zpress 
     88    CHARACTER(len=256)           ::   cfisf , cvarzisf, cvarhisf   ! name for isf file 
    8889    CHARACTER(LEN=256)           :: cnameis                     ! name of iceshelf file 
    8990    CHARACTER (LEN=32)           :: cvarLeff                    ! variable name for efficient Length scale 
     
    263264         END IF 
    264265         ! compute tsc due to isf 
    265          ! WARNING water add at temp = 0C, correction term is added in trasbc, maybe better here but need a 3D variable). 
    266          risf_tsc(:,:,jp_tem) = qisf(:,:) * r1_rau0_rcp ! 
     266         ! WARNING water add at temp = 0C, correction term is added, maybe better here but need a 3D variable). 
     267!         zpress = grav*rau0*fsdept(ji,jj,jk)*1.e-04 
     268         zt_frz = -1.9 !eos_fzp( tsn(ji,jj,jk,jp_sal), zpress ) 
     269         risf_tsc(:,:,jp_tem) = qisf(:,:) * r1_rau0_rcp - rdivisf * fwfisf(:,:) * zt_frz * r1_rau0 ! 
    267270          
    268271         ! salt effect already take into account in vertical advection 
    269272         risf_tsc(:,:,jp_sal) = (1.0_wp-rdivisf) * fwfisf(:,:) * stbl(:,:) * r1_rau0 
    270            
     273 
     274         ! output 
     275         IF( iom_use('qisf'  ) )   CALL iom_put('qisf'  , qisf) 
     276         IF( iom_use('fwfisf') )   CALL iom_put('fwfisf', fwfisf * stbl(:,:) / soce ) 
     277 
     278         ! if apply only on the trend and not as a volume flux (rdivisf = 0), fwfisf have to be set to 0 now 
     279         fwfisf(:,:) = rdivisf * fwfisf(:,:)          
     280  
    271281         ! lbclnk 
    272282         CALL lbc_lnk(risf_tsc(:,:,jp_tem),'T',1.) 
     
    288298         ENDIF 
    289299         !  
    290          ! output 
    291          CALL iom_put('qisf'  , qisf) 
    292          IF( iom_use('fwfisf') )   CALL iom_put('fwfisf', fwfisf * stbl(:,:) / soce ) 
    293300      END IF 
    294301   
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r5581 r5653  
    181181      IF( nn_isf .EQ. 0 ) THEN                      ! variable initialisation if no ice shelf  
    182182         IF( sbc_isf_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_isf arrays' ) 
    183          fwfisf  (:,:) = 0.0_wp 
    184          fwfisf_b(:,:) = 0.0_wp 
     183         fwfisf  (:,:)   = 0.0_wp ; fwfisf_b  (:,:)   = 0.0_wp 
     184         risf_tsc(:,:,:) = 0.0_wp ; risf_tsc_b(:,:,:) = 0.0_wp 
    185185         rdivisf       = 0.0_wp 
    186186      END IF 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90

    r5581 r5653  
    2828   USE sbc_oce         ! surface boundary condition: ocean 
    2929   USE sbcrnf          ! river runoffs 
     30   USE sbcisf          ! ice shelf melting/freezing 
    3031   USE zdf_oce         ! ocean vertical mixing 
    3132   USE domvvl          ! variable volume 
     
    274275 
    275276      !!      
    276       LOGICAL  ::   ll_tra_hpg, ll_traqsr, ll_rnf   ! local logical 
     277      LOGICAL  ::   ll_tra_hpg, ll_traqsr, ll_rnf, ll_isf   ! local logical 
    277278      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices 
    278279      REAL(wp) ::   zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
     
    290291         ll_traqsr  = ln_traqsr        ! active  tracers case  and  solar penetration 
    291292         ll_rnf     = ln_rnf           ! active  tracers case  and  river runoffs 
     293         IF (nn_isf .GE. 1) THEN  
     294            ll_isf = .TRUE.            ! active  tracers case  and  ice shelf melting/freezing 
     295         ELSE 
     296            ll_isf = .FALSE. 
     297         END IF 
    292298      ELSE                           
    293299         ll_tra_hpg = .FALSE.          ! passive tracers case or NO semi-implicit hpg 
    294300         ll_traqsr  = .FALSE.          ! active  tracers case and NO solar penetration 
    295301         ll_rnf     = .FALSE.          ! passive tracers or NO river runoffs 
     302         ll_isf     = .FALSE.          ! passive tracers or NO ice shelf melting/freezing 
    296303      ENDIF 
    297304      ! 
     
    316323                  ztc_f  = ztc_n  + atfp * ztc_d 
    317324                  ! 
    318                   IF( jk == 1 ) THEN           ! first level  
    319                      ze3t_f = ze3t_f - zfact2 * ( emp_b(ji,jj) - emp(ji,jj) + rnf(ji,jj) - rnf_b(ji,jj) ) 
     325                  IF( jk == mikt(ji,jj) ) THEN           ! first level  
     326                     ze3t_f = ze3t_f - zfact2 * ( (emp_b(ji,jj)    - emp(ji,jj)   )  & 
     327                            &                   - (rnf_b(ji,jj)    - rnf(ji,jj)   )  & 
     328                            &                   + (fwfisf_b(ji,jj) - fwfisf(ji,jj))  ) 
    320329                     ztc_f  = ztc_f  - zfact1 * ( psbc_tc(ji,jj,jn) - psbc_tc_b(ji,jj,jn) ) 
    321330                  ENDIF 
    322331 
    323                   IF( ll_traqsr .AND. jn == jp_tem .AND. jk <= nksr )   &     ! solar penetration (temperature only) 
     332                  ! solar penetration (temperature only) 
     333                  IF( ll_traqsr .AND. jn == jp_tem .AND. jk <= nksr )                            &  
    324334                     &     ztc_f  = ztc_f  - zfact1 * ( qsr_hc(ji,jj,jk) - qsr_hc_b(ji,jj,jk) )  
    325335 
    326                   IF( ll_rnf .AND. jk <= nk_rnf(ji,jj) )   &            ! river runoffs 
     336                  ! river runoff 
     337                  IF( ll_rnf .AND. jk <= nk_rnf(ji,jj) )                                          & 
    327338                     &     ztc_f  = ztc_f  - zfact1 * ( rnf_tsc(ji,jj,jn) - rnf_tsc_b(ji,jj,jn) ) &  
    328339                     &                              * fse3t_n(ji,jj,jk) / h_rnf(ji,jj) 
     340 
     341                  ! ice shelf 
     342                  IF( ll_isf ) THEN 
     343                     ! level fully include in the Losch_2008 ice shelf boundary layer 
     344                     IF ( jk >= misfkt(ji,jj) .AND. jk < misfkb(ji,jj) )                          & 
     345                        ztc_f  = ztc_f  - zfact1 * ( risf_tsc(ji,jj,jn) - risf_tsc_b(ji,jj,jn) )  & 
     346                               &                 * fse3t_n(ji,jj,jk) * r1_hisf_tbl (ji,jj) 
     347                     ! level partially include in Losch_2008 ice shelf boundary layer  
     348                     IF ( jk == misfkb(ji,jj) )                                                   & 
     349                        ztc_f  = ztc_f  - zfact1 * ( risf_tsc(ji,jj,jn) - risf_tsc_b(ji,jj,jn) )  & 
     350                               &                 * fse3t_n(ji,jj,jk) * r1_hisf_tbl (ji,jj) * ralpha(ji,jj) 
     351                  END IF 
    329352 
    330353                  ze3t_f = 1.e0 / ze3t_f 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90

    r5581 r5653  
    120120      REAL(wp) ::   zfact, z1_e3t, zdep 
    121121      REAL(wp) ::   zalpha, zhk 
    122       REAL(wp) ::  zt_frz, zpress 
    123122      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrdt, ztrds 
    124123      !!---------------------------------------------------------------------- 
     
    232231               DO jk = ikt, ikb - 1 
    233232               ! compute tfreez for the temperature correction (we add water at freezing temperature) 
    234 !                  zpress = grav*rau0*fsdept(ji,jj,jk)*1.e-04 
    235                   zt_frz = -1.9 !eos_fzp( tsn(ji,jj,jk,jp_sal), zpress ) 
    236233               ! compute trend 
    237234                  tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)                                          & 
    238                      &           + zfact * (risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem)          & 
    239                      &               - rdivisf * (fwfisf(ji,jj) + fwfisf_b(ji,jj)) * zt_frz * r1_rau0) & 
    240                      &           * r1_hisf_tbl(ji,jj) 
     235                     &           + zfact * (risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem)) * r1_hisf_tbl(ji,jj) 
    241236                  tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal)                                          & 
    242237                     &           + zfact * (risf_tsc_b(ji,jj,jp_sal) + risf_tsc(ji,jj,jp_sal)) * r1_hisf_tbl(ji,jj) 
     
    245240               ! level partially include in ice shelf boundary layer  
    246241               ! compute tfreez for the temperature correction (we add water at freezing temperature) 
    247 !               zpress = grav*rau0*fsdept(ji,jj,ikb)*1.e-04 
    248                zt_frz = -1.9 !eos_fzp( tsn(ji,jj,ikb,jp_sal), zpress ) 
    249242               ! compute trend 
    250243               tsa(ji,jj,ikb,jp_tem) = tsa(ji,jj,ikb,jp_tem)                                           & 
    251                   &              + zfact * (risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem)          & 
    252                   &                  - rdivisf * (fwfisf(ji,jj) + fwfisf_b(ji,jj)) * zt_frz * r1_rau0) &  
    253                   &              * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) 
     244                  &              + zfact * (risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem)) * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) 
    254245               tsa(ji,jj,ikb,jp_sal) = tsa(ji,jj,ikb,jp_sal)                                           & 
    255246                  &              + zfact * (risf_tsc_b(ji,jj,jp_sal) + risf_tsc(ji,jj,jp_sal)) * r1_hisf_tbl(ji,jj) * ralpha(ji,jj)  
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90

    r5581 r5653  
    322322      !  
    323323      ! One level below 
    324       en(:,:,2) = rc02r * ustars2(:,:) * (1._wp + rsbc_tke1 * ((zhsro(:,:)+fsdepw(:,:,2))/zhsro(:,:) )**(1.5_wp*ra_sf))**(2._wp/3._wp) 
     324      en(:,:,2) = rc02r * ustars2(:,:) * (1._wp + rsbc_tke1 * ((zhsro(:,:)+fsdepw(:,:,2)) & 
     325         &               / zhsro(:,:) )**(1.5_wp*ra_sf))**(2._wp/3._wp) 
    325326      en(:,:,2) = MAX(en(:,:,2), rn_emin ) 
    326327      z_elem_a(:,:,2) = 0._wp  
     
    343344      z_elem_a(:,:,2) = 0._wp 
    344345      zkar(:,:)       = (rl_sf + (vkarmn-rl_sf)*(1.-exp(-rtrans*fsdept(:,:,1)/zhsro(:,:)) )) 
    345       zflxs(:,:)      = rsbc_tke2 * ustars2(:,:)**1.5_wp * zkar(:,:) * ((zhsro(:,:)+fsdept(:,:,1))/zhsro(:,:) )**(1.5_wp*ra_sf) 
     346      zflxs(:,:)      = rsbc_tke2 * ustars2(:,:)**1.5_wp * zkar(:,:) & 
     347          &                       * ((zhsro(:,:)+fsdept(:,:,1)) / zhsro(:,:) )**(1.5_wp*ra_sf) 
    346348 
    347349      en(:,:,2) = en(:,:,2) + zflxs(:,:)/fse3w(:,:,2) 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/trcice_pisces.F90

    r5581 r5653  
    5858 
    5959                                        !--- Dummy variables 
    60       REAL(wp), DIMENSION(jptra,2) & 
    61                ::  zratio            ! effective ice-ocean tracer cc ratio 
     60      REAL(wp), DIMENSION(jp_pisces,2)  :: zratio  ! effective ice-ocean tracer cc ratio 
     61      REAL(wp), DIMENSION(jp_pisces,4)  :: zpisc   ! prescribes concentration  
     62      !                                            !  1:global, 2:Arctic, 3:Antarctic, 4:Baltic 
     63 
    6264      REAL(wp), DIMENSION(2) :: zrs  ! ice-ocean salinity ratio, 1 - global, 2- Baltic 
    6365      REAL(wp) :: zsice_bal          ! prescribed ice salinity in the Baltic 
     
    8082      ! fluxes 
    8183 
    82       !--- Global case  
    83       IF ( cn_trc_o(jpdic) == 'GL ' ) trc_o(:,:,jpdic) =  1.99e-3_wp  
    84       IF ( cn_trc_o(jpdoc) == 'GL ' ) trc_o(:,:,jpdoc) =  2.04e-5_wp  
    85       IF ( cn_trc_o(jptal) == 'GL ' ) trc_o(:,:,jptal) =  2.31e-3_wp  
    86       IF ( cn_trc_o(jpoxy) == 'GL ' ) trc_o(:,:,jpoxy) =  2.47e-4_wp 
    87       IF ( cn_trc_o(jpcal) == 'GL ' ) trc_o(:,:,jpcal) =  1.04e-8_wp 
    88       IF ( cn_trc_o(jppo4) == 'GL ' ) trc_o(:,:,jppo4) =  5.77e-7_wp / po4r  
    89       IF ( cn_trc_o(jppoc) == 'GL ' ) trc_o(:,:,jppoc) =  1.27e-6_wp   
    90 #  if ! defined key_kriest 
    91       IF ( cn_trc_o(jpgoc) == 'GL ' ) trc_o(:,:,jpgoc) =  5.23e-8_wp   
    92       IF ( cn_trc_o(jpbfe) == 'GL ' ) trc_o(:,:,jpbfe) =  9.84e-13_wp  
    93 #  else 
    94       IF ( cn_trc_o(jpnum) == 'GL ' ) trc_o(:,:,jpnum) = 0. ! could not get this value since did not use it 
    95 #  endif 
    96       IF ( cn_trc_o(jpsil) == 'GL ' ) trc_o(:,:,jpsil) =  7.36e-6_wp   
    97       IF ( cn_trc_o(jpdsi) == 'GL ' ) trc_o(:,:,jpdsi) =  1.07e-7_wp  
    98       IF ( cn_trc_o(jpgsi) == 'GL ' ) trc_o(:,:,jpgsi) =  1.53e-8_wp 
    99       IF ( cn_trc_o(jpphy) == 'GL ' ) trc_o(:,:,jpphy) =  9.57e-8_wp 
    100       IF ( cn_trc_o(jpdia) == 'GL ' ) trc_o(:,:,jpdia) =  4.24e-7_wp 
    101       IF ( cn_trc_o(jpzoo) == 'GL ' ) trc_o(:,:,jpzoo) =  6.07e-7_wp 
    102       IF ( cn_trc_o(jpmes) == 'GL ' ) trc_o(:,:,jpmes) =  3.44e-7_wp 
    103       IF ( cn_trc_o(jpfer) == 'GL ' ) trc_o(:,:,jpfer) =  4.06e-10_wp 
    104       IF ( cn_trc_o(jpsfe) == 'GL ' ) trc_o(:,:,jpsfe) =  2.51e-11_wp 
    105       IF ( cn_trc_o(jpdfe) == 'GL ' ) trc_o(:,:,jpdfe) =  6.57e-12_wp 
    106       IF ( cn_trc_o(jpnfe) == 'GL ' ) trc_o(:,:,jpnfe) =  1.76e-11_wp 
    107       IF ( cn_trc_o(jpnch) == 'GL ' ) trc_o(:,:,jpnch) =  1.67e-7_wp 
    108       IF ( cn_trc_o(jpdch) == 'GL ' ) trc_o(:,:,jpdch) =  1.02e-7_wp 
    109       IF ( cn_trc_o(jpno3) == 'GL ' ) trc_o(:,:,jpno3) =  5.79e-6_wp / rno3  
    110       IF ( cn_trc_o(jpnh4) == 'GL ' ) trc_o(:,:,jpnh4) =  3.22e-7_wp / rno3 
     84      !--- Global values 
     85      zpisc(jpdic,1) =  1.99e-3_wp  
     86      zpisc(jpdoc,1) =  2.04e-5_wp  
     87      zpisc(jptal,1) =  2.31e-3_wp  
     88      zpisc(jpoxy,1) =  2.47e-4_wp 
     89      zpisc(jpcal,1) =  1.04e-8_wp 
     90      zpisc(jppo4,1) =  5.77e-7_wp / po4r  
     91      zpisc(jppoc,1) =  1.27e-6_wp   
     92#  if ! defined key_kriest 
     93      zpisc(jpgoc,1) =  5.23e-8_wp   
     94      zpisc(jpbfe,1) =  9.84e-13_wp  
     95#  else 
     96      zpisc(jpnum,1) = 0. ! could not get this value since did not use it 
     97#  endif 
     98      zpisc(jpsil,1) =  7.36e-6_wp   
     99      zpisc(jpdsi,1) =  1.07e-7_wp  
     100      zpisc(jpgsi,1) =  1.53e-8_wp 
     101      zpisc(jpphy,1) =  9.57e-8_wp 
     102      zpisc(jpdia,1) =  4.24e-7_wp 
     103      zpisc(jpzoo,1) =  6.07e-7_wp 
     104      zpisc(jpmes,1) =  3.44e-7_wp 
     105      zpisc(jpfer,1) =  4.06e-10_wp 
     106      zpisc(jpsfe,1) =  2.51e-11_wp 
     107      zpisc(jpdfe,1) =  6.57e-12_wp 
     108      zpisc(jpnfe,1) =  1.76e-11_wp 
     109      zpisc(jpnch,1) =  1.67e-7_wp 
     110      zpisc(jpdch,1) =  1.02e-7_wp 
     111      zpisc(jpno3,1) =  5.79e-6_wp / rno3  
     112      zpisc(jpnh4,1) =  3.22e-7_wp / rno3 
    111113 
    112114      !--- Arctic specificities (dissolved inorganic & DOM) 
    113       IF ( cn_trc_o(jpdic) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdic) =  1.98e-3_wp  ; END WHERE ; ENDIF 
    114       IF ( cn_trc_o(jpdoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdoc) =  6.00e-6_wp  ; END WHERE ; ENDIF 
    115       IF ( cn_trc_o(jptal) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jptal) =  2.13e-3_wp  ; END WHERE ; ENDIF 
    116       IF ( cn_trc_o(jpoxy) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpoxy) =  3.65e-4_wp  ; END WHERE ; ENDIF 
    117       IF ( cn_trc_o(jpcal) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpcal) =  1.50e-9_wp  ; END WHERE ; ENDIF 
    118       IF ( cn_trc_o(jppo4) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jppo4) =  4.09e-7_wp / po4r ; END WHERE ; ENDIF 
    119       IF ( cn_trc_o(jppoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jppoc) =  4.05e-7_wp  ; END WHERE ; ENDIF 
    120 #  if ! defined key_kriest 
    121       IF ( cn_trc_o(jpgoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpgoc) =  2.84e-8_wp  ; END WHERE ; ENDIF 
    122       IF ( cn_trc_o(jpbfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpbfe) =  7.03e-13_wp ; END WHERE ; ENDIF 
    123 #  else 
    124       IF ( cn_trc_o(jpnum) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpnum) =  0.00e-00_wp ; END WHERE ; ENDIF 
    125 #  endif 
    126       IF ( cn_trc_o(jpsil) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpsil) =  6.87e-6_wp  ; END WHERE ; ENDIF 
    127       IF ( cn_trc_o(jpdsi) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdsi) =  1.73e-7_wp  ; END WHERE ; ENDIF 
    128       IF ( cn_trc_o(jpgsi) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpgsi) =  7.93e-9_wp  ; END WHERE ; ENDIF 
    129       IF ( cn_trc_o(jpphy) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpphy) =  5.25e-7_wp  ; END WHERE ; ENDIF 
    130       IF ( cn_trc_o(jpdia) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdia) =  7.75e-7_wp  ; END WHERE ; ENDIF 
    131       IF ( cn_trc_o(jpzoo) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpzoo) =  3.34e-7_wp  ; END WHERE ; ENDIF 
    132       IF ( cn_trc_o(jpmes) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpmes) =  2.49e-7_wp  ; END WHERE ; ENDIF 
    133       IF ( cn_trc_o(jpfer) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpfer) =  1.43e-9_wp  ; END WHERE ; ENDIF 
    134       IF ( cn_trc_o(jpsfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpsfe) =  2.21e-11_wp ; END WHERE ; ENDIF 
    135       IF ( cn_trc_o(jpdfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdfe) =  2.04e-11_wp ; END WHERE ; ENDIF 
    136       IF ( cn_trc_o(jpnfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpnfe) =  1.75e-11_wp ; END WHERE ; ENDIF 
    137       IF ( cn_trc_o(jpnch) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpnch) =  1.46e-07_wp ; END WHERE ; ENDIF 
    138       IF ( cn_trc_o(jpdch) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdch) =  2.36e-07_wp ; END WHERE ; ENDIF 
    139       IF ( cn_trc_o(jpno3) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpno3) =  3.51e-06_wp / rno3 ; END WHERE ; ENDIF 
    140       IF ( cn_trc_o(jpnh4) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpnh4) =  6.15e-08_wp / rno3 ; END WHERE ; ENDIF 
     115      zpisc(jpdic,2) =  1.98e-3_wp  
     116      zpisc(jpdoc,2) =  6.00e-6_wp  
     117      zpisc(jptal,2) =  2.13e-3_wp  
     118      zpisc(jpoxy,2) =  3.65e-4_wp   
     119      zpisc(jpcal,2) =  1.50e-9_wp   
     120      zpisc(jppo4,2) =  4.09e-7_wp / po4r  
     121      zpisc(jppoc,2) =  4.05e-7_wp   
     122#  if ! defined key_kriest 
     123      zpisc(jpgoc,2) =  2.84e-8_wp   
     124      zpisc(jpbfe,2) =  7.03e-13_wp  
     125#  else 
     126      zpisc(jpnum,2) =  0.00e-00_wp  
     127#  endif 
     128      zpisc(jpsil,2) =  6.87e-6_wp   
     129      zpisc(jpdsi,2) =  1.73e-7_wp  
     130      zpisc(jpgsi,2) =  7.93e-9_wp 
     131      zpisc(jpphy,2) =  5.25e-7_wp   
     132      zpisc(jpdia,2) =  7.75e-7_wp  
     133      zpisc(jpzoo,2) =  3.34e-7_wp 
     134      zpisc(jpmes,2) =  2.49e-7_wp   
     135      zpisc(jpfer,2) =  1.43e-9_wp  
     136      zpisc(jpsfe,2) =  2.21e-11_wp  
     137      zpisc(jpdfe,2) =  2.04e-11_wp  
     138      zpisc(jpnfe,2) =  1.75e-11_wp  
     139      zpisc(jpnch,2) =  1.46e-07_wp  
     140      zpisc(jpdch,2) =  2.36e-07_wp  
     141      zpisc(jpno3,2) =  3.51e-06_wp / rno3  
     142      zpisc(jpnh4,2) =  6.15e-08_wp / rno3  
    141143 
    142144      !--- Antarctic specificities (dissolved inorganic & DOM) 
    143       IF ( cn_trc_o(jpdic) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpdic) =  2.20e-3_wp  ; END WHERE ; ENDIF 
    144       IF ( cn_trc_o(jpdoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpdoc) =  7.02e-6_wp  ; END WHERE ; ENDIF 
    145       IF ( cn_trc_o(jptal) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jptal) =  2.37e-3_wp  ; END WHERE ; ENDIF 
    146       IF ( cn_trc_o(jpoxy) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpoxy) =  3.42e-4_wp  ; END WHERE ; ENDIF 
    147       IF ( cn_trc_o(jpcal) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpcal) =  3.17e-9_wp  ; END WHERE ; ENDIF 
    148       IF ( cn_trc_o(jppo4) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jppo4) =  1.88e-6_wp / po4r  ; END WHERE ; ENDIF 
    149       IF ( cn_trc_o(jppoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jppoc) =  1.13e-6_wp  ; END WHERE ; ENDIF 
    150 #  if ! defined key_kriest 
    151       IF ( cn_trc_o(jpgoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpgoc) =  2.89e-8_wp  ; END WHERE ; ENDIF 
    152       IF ( cn_trc_o(jpbfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpbfe) =  5.63e-13_wp ; END WHERE ; ENDIF 
    153 #  else 
    154       IF ( cn_trc_o(jpnum) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpnum) =  0.00e-00_wp ; END WHERE ; ENDIF 
    155 #  endif 
    156       IF ( cn_trc_o(jpsil) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpsil) =  4.96e-5_wp  ; END WHERE ; ENDIF 
    157       IF ( cn_trc_o(jpdsi) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpdsi) =  5.63e-7_wp  ; END WHERE ; ENDIF 
    158       IF ( cn_trc_o(jpgsi) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpgsi) =  5.35e-8_wp  ; END WHERE ; ENDIF 
    159       IF ( cn_trc_o(jpphy) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpphy) =  8.10e-7_wp  ; END WHERE ; ENDIF 
    160       IF ( cn_trc_o(jpdia) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpdia) =  5.77e-7_wp  ; END WHERE ; ENDIF 
    161       IF ( cn_trc_o(jpzoo) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpzoo) =  6.68e-7_wp  ; END WHERE ; ENDIF 
    162       IF ( cn_trc_o(jpmes) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpmes) =  3.55e-7_wp  ; END WHERE ; ENDIF 
    163       IF ( cn_trc_o(jpfer) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpfer) =  1.62e-10_wp ; END WHERE ; ENDIF 
    164       IF ( cn_trc_o(jpsfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpsfe) =  2.29e-11_wp ; END WHERE ; ENDIF 
    165       IF ( cn_trc_o(jpdfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpdfe) =  8.75e-12_wp ; END WHERE ; ENDIF 
    166       IF ( cn_trc_o(jpnfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpnfe) =  1.48e-11_wp ; END WHERE ; ENDIF 
    167       IF ( cn_trc_o(jpnch) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpnch) =  2.02e-7_wp  ; END WHERE ; ENDIF 
    168       IF ( cn_trc_o(jpdch) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpdch) =  1.60e-7_wp  ; END WHERE ; ENDIF 
    169       IF ( cn_trc_o(jpno3) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpno3) =  2.64e-5_wp / rno3  ; END WHERE ; ENDIF 
    170       IF ( cn_trc_o(jpnh4) == 'AA ' ) THEN ; WHERE( gphit(:,:) <  00._wp ) ; trc_o(:,:,jpnh4) =  3.39e-7_wp / rno3  ; END WHERE ; ENDIF 
     145      zpisc(jpdic,3) =  2.20e-3_wp   
     146      zpisc(jpdoc,3) =  7.02e-6_wp   
     147      zpisc(jptal,3) =  2.37e-3_wp   
     148      zpisc(jpoxy,3) =  3.42e-4_wp   
     149      zpisc(jpcal,3) =  3.17e-9_wp   
     150      zpisc(jppo4,3) =  1.88e-6_wp / po4r   
     151      zpisc(jppoc,3) =  1.13e-6_wp   
     152#  if ! defined key_kriest 
     153      zpisc(jpgoc,3) =  2.89e-8_wp   
     154      zpisc(jpbfe,3) =  5.63e-13_wp  
     155#  else 
     156      zpisc(jpnum,3) =  0.00e-00_wp  
     157#  endif 
     158      zpisc(jpsil,3) =  4.96e-5_wp   
     159      zpisc(jpdsi,3) =  5.63e-7_wp  
     160      zpisc(jpgsi,3) =  5.35e-8_wp 
     161      zpisc(jpphy,3) =  8.10e-7_wp   
     162      zpisc(jpdia,3) =  5.77e-7_wp  
     163      zpisc(jpzoo,3) =  6.68e-7_wp 
     164      zpisc(jpmes,3) =  3.55e-7_wp   
     165      zpisc(jpfer,3) =  1.62e-10_wp 
     166      zpisc(jpsfe,3) =  2.29e-11_wp  
     167      zpisc(jpdfe,3) =  8.75e-12_wp 
     168      zpisc(jpnfe,3) =  1.48e-11_wp  
     169      zpisc(jpnch,3) =  2.02e-7_wp   
     170      zpisc(jpdch,3) =  1.60e-7_wp   
     171      zpisc(jpno3,3) =  2.64e-5_wp / rno3   
     172      zpisc(jpnh4,3) =  3.39e-7_wp / rno3   
    171173 
    172174      !--- Baltic Sea particular case for ORCA configurations 
    173       IF( cp_cfg == "orca" ) THEN            ! Baltic mask 
    174          WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND.    & 
    175                 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) 
    176          trc_o(:,:,jpdic) = 1.14e-3_wp 
    177          trc_o(:,:,jpdoc) = 1.06e-5_wp 
    178          trc_o(:,:,jptal) = 1.16e-3_wp 
    179          trc_o(:,:,jpoxy) = 3.71e-4_wp 
    180          trc_o(:,:,jpcal) = 1.51e-9_wp 
    181          trc_o(:,:,jppo4) = 2.85e-9_wp / po4r 
    182          trc_o(:,:,jppoc) = 4.84e-7_wp 
    183 #  if ! defined key_kriest 
    184          trc_o(:,:,jpgoc) = 1.05e-8_wp 
    185          trc_o(:,:,jpbfe) = 4.97e-13_wp 
    186 #  else 
    187          trc_o(:,:,jpnum) = 0. ! could not get this value 
    188 #  endif 
    189          trc_o(:,:,jpsil) = 4.91e-5_wp 
    190          trc_o(:,:,jpdsi) = 3.25e-7_wp 
    191          trc_o(:,:,jpgsi) = 1.93e-8_wp 
    192          trc_o(:,:,jpphy) = 6.64e-7_wp 
    193          trc_o(:,:,jpdia) = 3.41e-7_wp 
    194          trc_o(:,:,jpzoo) = 3.83e-7_wp 
    195          trc_o(:,:,jpmes) = 0.225e-6_wp 
    196          trc_o(:,:,jpfer) = 2.45e-9_wp 
    197          trc_o(:,:,jpsfe) = 3.89e-11_wp 
    198          trc_o(:,:,jpdfe) = 1.33e-11_wp 
    199          trc_o(:,:,jpnfe) = 2.62e-11_wp 
    200          trc_o(:,:,jpnch) = 1.17e-7_wp 
    201          trc_o(:,:,jpdch) = 9.69e-8_wp 
    202          trc_o(:,:,jpno3) = 5.36e-5_wp / rno3 
    203          trc_o(:,:,jpnh4) = 7.18e-7_wp / rno3 
    204          END WHERE 
    205       ENDIF ! cfg 
     175      zpisc(jpdic,4) = 1.14e-3_wp 
     176      zpisc(jpdoc,4) = 1.06e-5_wp 
     177      zpisc(jptal,4) = 1.16e-3_wp 
     178      zpisc(jpoxy,4) = 3.71e-4_wp 
     179      zpisc(jpcal,4) = 1.51e-9_wp 
     180      zpisc(jppo4,4) = 2.85e-9_wp / po4r 
     181      zpisc(jppoc,4) = 4.84e-7_wp 
     182#  if ! defined key_kriest 
     183      zpisc(jpgoc,4) = 1.05e-8_wp 
     184      zpisc(jpbfe,4) = 4.97e-13_wp 
     185#  else 
     186      zpisc(jpnum,4) = 0. ! could not get this value 
     187#  endif 
     188      zpisc(jpsil,4) = 4.91e-5_wp 
     189      zpisc(jpdsi,4) = 3.25e-7_wp 
     190      zpisc(jpgsi,4) = 1.93e-8_wp 
     191      zpisc(jpphy,4) = 6.64e-7_wp 
     192      zpisc(jpdia,4) = 3.41e-7_wp 
     193      zpisc(jpzoo,4) = 3.83e-7_wp 
     194      zpisc(jpmes,4) = 0.225e-6_wp 
     195      zpisc(jpfer,4) = 2.45e-9_wp 
     196      zpisc(jpsfe,4) = 3.89e-11_wp 
     197      zpisc(jpdfe,4) = 1.33e-11_wp 
     198      zpisc(jpnfe,4) = 2.62e-11_wp 
     199      zpisc(jpnch,4) = 1.17e-7_wp 
     200      zpisc(jpdch,4) = 9.69e-8_wp 
     201      zpisc(jpno3,4) = 5.36e-5_wp / rno3 
     202      zpisc(jpnh4,4) = 7.18e-7_wp / rno3 
     203  
     204      DO jn = jp_pcs0, jp_pcs1 
     205         IF( cn_trc_o(jn) == 'GL ' ) trc_o(:,:,jn) = zpisc(jn,1)  ! Global case 
     206         IF( cn_trc_o(jn) == 'AA ' ) THEN  
     207            WHERE( gphit(:,:) >= 0._wp ) ; trc_o(:,:,jn) = zpisc(jn,2) ; END WHERE ! Arctic  
     208            WHERE( gphit(:,:) <  0._wp ) ; trc_o(:,:,jn) = zpisc(jn,3) ; END WHERE ! Antarctic  
     209         ENDIF 
     210         IF( cp_cfg == "orca" ) THEN     !  Baltic Sea particular case for ORCA configurations 
     211             WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND.    & 
     212                    54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) 
     213                    trc_o(:,:,jn) = zpisc(jn,4) 
     214            END WHERE 
     215         ENDIF  
     216      ENDDO 
     217 
     218 
    206219 
    207220      !----------------------------- 
     
    217230 
    218231      DO jn = jp_pcs0, jp_pcs1 
    219          IF ( trc_ice_ratio(jn) >= 0._wp )  zratio(jn,:) = trc_ice_ratio(jn) 
    220          IF ( trc_ice_ratio(jn) == -1._wp ) zratio(jn,:) = zrs(:) 
    221          IF ( trc_ice_ratio(jn) == -2._wp ) zratio(jn,:) = -9999.99_wp 
     232         IF( trc_ice_ratio(jn) >= 0._wp )  zratio(jn,:) = trc_ice_ratio(jn) 
     233         IF( trc_ice_ratio(jn) == -1._wp ) zratio(jn,:) = zrs(:) 
     234         IF( trc_ice_ratio(jn) == -2._wp ) zratio(jn,:) = -9999.99_wp 
    222235      END DO 
    223236 
     
    227240      DO jn = jp_pcs0, jp_pcs1 
    228241         !-- Everywhere but in the Baltic 
    229          IF ( trc_ice_ratio(jn) >= -1._wp ) THEN !! no prescribed concentration 
    230                                               !! (typically everything but iron)  
     242         IF ( trc_ice_ratio(jn) >= -1._wp ) THEN ! no prescribed conc. ; typically everything but iron)  
    231243            trc_i(:,:,jn) = zratio(jn,1) * trc_o(:,:,jn)  
    232          ELSE                                 !! prescribed concentration 
     244         ELSE                                    ! prescribed concentration 
    233245            trc_i(:,:,jn) = trc_ice_prescr(jn) 
    234246         ENDIF 
    235247        
    236248         !-- Baltic 
    237          IF( cp_cfg == "orca" ) THEN !! Baltic treated seperately for ORCA configs 
    238             IF ( trc_ice_ratio(jn) >= - 1._wp ) THEN !! no prescribed concentration 
    239                                                  !! (typically everything but iron)  
     249         IF( cp_cfg == "orca" ) THEN  ! Baltic treated seperately for ORCA configs 
     250            IF ( trc_ice_ratio(jn) >= - 1._wp ) THEN ! no prescribed conc. ; typically everything but iron)  
    240251               WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND.    & 
    241252                      54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) 
    242253                     trc_i(:,:,jn) = zratio(jn,2) * trc_o(:,:,jn)  
    243254               END WHERE 
    244             ELSE                                 !! prescribed tracer concentration in ice 
     255            ELSE                                 ! prescribed tracer concentration in ice 
    245256               WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND.    & 
    246257                   54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/SETTE/sette.sh

    r5581 r5653  
    140140# SAS             :11 & 12 
    141141# ISOMIP          :13 & 14 
    142 # ORCA2_LIM_OBS:   15 
    143 # ORCA2_AGRIF_LIM :16 
     142# ORCA2_LIM_OBS   :15 
     143# ORCA2_AGRIF_LIM :16 & 17  
     144#                  18 & 19  
    144145for config in  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 
    145146 
     
    12371238    set_namelist namelist_cfg jpnj 2 
    12381239    set_namelist namelist_cfg jpnij 2 
     1240# 
    12391241    set_namelist 1_namelist_cfg nn_it000 1 
    12401242    set_namelist 1_namelist_cfg nn_itend 150 
    12411243    set_namelist 1_namelist_cfg ln_ctl .false. 
    12421244    set_namelist 1_namelist_cfg ln_clobber .true. 
     1245 
    12431246    if [ ${USING_MPMD} == "yes" ] ; then 
    12441247       set_xio_using_server iodef.xml true 
     
    12521255fi 
    12531256 
     1257# test code corruption with AGRIF 
     1258# Compile and run with or without AGRIF ORCA2_LIM 
     1259if [ ${config} -eq 17 ] ;  then 
     1260    # First run same as 16 but without zoom 
     1261    export TEST_NAME="SHORT_NOZOOM" 
     1262    cd ${CONFIG_DIR} 
     1263    . ./makenemo -m ${CMP_NAM} -n ORCA2AGUL_2_2 -r ORCA2_LIM -j 8 add_key "key_mpp_rep key_agrif" del_key "key_zdftmx" del_key ${DEL_KEYS} 
     1264    cd ${SETTE_DIR} 
     1265    . ./param.cfg 
     1266    . ./all_functions.sh 
     1267    . ./prepare_exe_dir.sh 
     1268    JOB_FILE=${EXE_DIR}/run_job.sh 
     1269    NPROC=4 
     1270    if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 
     1271    cd ${EXE_DIR} 
     1272    set_namelist namelist_cfg nn_it000 1 
     1273    set_namelist namelist_cfg nn_itend 75 
     1274    set_namelist namelist_cfg ln_ctl .false. 
     1275    set_namelist namelist_cfg ln_clobber .true. 
     1276    set_namelist namelist_cfg nn_fwb 0 
     1277    set_namelist namelist_cfg jpni 2 
     1278    set_namelist namelist_cfg jpnj 2 
     1279    set_namelist namelist_cfg jpnij 4 
     1280#  
     1281#   Set the number of fine grids to zero:     
     1282    sed -i "1s/.*/0/" ${EXE_DIR}/AGRIF_FixedGrids.in 
     1283 
     1284    if [ ${USING_MPMD} == "yes" ] ; then 
     1285       set_xio_using_server iodef.xml true 
     1286    else 
     1287       set_xio_using_server iodef.xml false 
     1288    fi 
     1289    cd ${SETTE_DIR} 
     1290    . ./prepare_job.sh input_ORCA2_LIM_AGRIF.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 
     1291    cd ${SETTE_DIR} 
     1292    . ./fcm_job.sh $NPROC ${JOB_FILE} ${INTERACT_FLAG} ${MPIRUN_FLAG} 
     1293 
     1294    export TEST_NAME="SHORT_NOAGRIF" 
     1295    cd ${CONFIG_DIR} 
     1296    . ./makenemo -m ${CMP_NAM} -n ORCA2AGUL_2_2_NAG -r ORCA2_LIM -j 8 add_key "key_mpp_rep" del_key "key_zdftmx" del_key ${DEL_KEYS} 
     1297    cd ${SETTE_DIR} 
     1298    . ./param.cfg 
     1299    . ./all_functions.sh 
     1300    . ./prepare_exe_dir.sh 
     1301    JOB_FILE=${EXE_DIR}/run_job.sh 
     1302    NPROC=4 
     1303    if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 
     1304    cd ${EXE_DIR} 
     1305    set_namelist namelist_cfg nn_it000 1 
     1306    set_namelist namelist_cfg nn_itend 75 
     1307    set_namelist namelist_cfg ln_ctl .false. 
     1308    set_namelist namelist_cfg ln_clobber .true. 
     1309    set_namelist namelist_cfg nn_fwb 0 
     1310    set_namelist namelist_cfg jpni 2 
     1311    set_namelist namelist_cfg jpnj 2 
     1312    set_namelist namelist_cfg jpnij 4 
     1313# 
     1314    if [ ${USING_MPMD} == "yes" ] ; then 
     1315       set_xio_using_server iodef.xml true 
     1316    else 
     1317       set_xio_using_server iodef.xml false 
     1318    fi 
     1319    cd ${SETTE_DIR} 
     1320    . ./prepare_job.sh input_ORCA2_LIM_AGRIF.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 
     1321    cd ${SETTE_DIR} 
     1322    . ./fcm_job.sh $NPROC ${JOB_FILE} ${INTERACT_FLAG} ${MPIRUN_FLAG} 
     1323 
     1324fi 
     1325 
     1326## Restartability tests for ORCA2_LIM_AGRIF  
     1327if [ ${config} -eq 18 ] ;  then 
     1328    export TEST_NAME="LONG" 
     1329    cd ${CONFIG_DIR} 
     1330    . ./makenemo -m ${CMP_NAM} -n ORCA2AGUL_LONG -r ORCA2_LIM -j 8 add_key "key_mpp_rep key_agrif" del_key "key_zdftmx" del_key ${DEL_KEYS} 
     1331    cd ${SETTE_DIR} 
     1332    . ./param.cfg 
     1333    . ./all_functions.sh 
     1334    . ./prepare_exe_dir.sh 
     1335    JOB_FILE=${EXE_DIR}/run_job.sh 
     1336    NPROC=4 
     1337    if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 
     1338    cd ${EXE_DIR} 
     1339    set_namelist namelist_cfg cn_exp \"O2LP_LONG\" 
     1340    set_namelist namelist_cfg nn_it000 1 
     1341    set_namelist namelist_cfg nn_itend 150 
     1342    set_namelist namelist_cfg nn_stock 75 
     1343    set_namelist namelist_cfg ln_clobber .true. 
     1344    set_namelist namelist_cfg nn_fwb 0 
     1345    set_namelist namelist_cfg jpni 2 
     1346    set_namelist namelist_cfg jpnj 2 
     1347    set_namelist namelist_cfg jpnij 4 
     1348    set_namelist namelist_cfg nn_solv 2 
     1349# 
     1350    set_namelist 1_namelist_cfg cn_exp \"O2LP_LONG\" 
     1351    set_namelist 1_namelist_cfg nn_it000 1 
     1352    set_namelist 1_namelist_cfg nn_itend 300 
     1353    set_namelist 1_namelist_cfg nn_stock 150 
     1354    set_namelist 1_namelist_cfg ln_ctl .false. 
     1355    set_namelist 1_namelist_cfg ln_clobber .true. 
     1356# 
     1357    if [ ${USING_MPMD} == "yes" ] ; then 
     1358       set_xio_using_server iodef.xml true 
     1359    else 
     1360       set_xio_using_server iodef.xml false 
     1361    fi 
     1362    cd ${SETTE_DIR} 
     1363    . ./prepare_job.sh input_ORCA2_LIM_AGRIF.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 
     1364     
     1365    cd ${SETTE_DIR} 
     1366    export TEST_NAME="SHORT" 
     1367    . ./prepare_exe_dir.sh 
     1368    cd ${EXE_DIR} 
     1369    set_namelist namelist_cfg cn_exp \"O2LP_SHORT\" 
     1370    set_namelist namelist_cfg nn_it000 76 
     1371    set_namelist namelist_cfg nn_itend 150 
     1372    set_namelist namelist_cfg nn_stock 75 
     1373    set_namelist namelist_cfg ln_rstart .true. 
     1374    set_namelist namelist_cfg nn_rstctl 2 
     1375    set_namelist namelist_cfg ln_clobber .true. 
     1376    set_namelist namelist_cfg nn_fwb 0 
     1377    set_namelist namelist_cfg jpni 2 
     1378    set_namelist namelist_cfg jpnj 2 
     1379 
     1380    set_namelist namelist_cfg jpnij 4 
     1381    set_namelist namelist_cfg nn_solv 2 
     1382    set_namelist 1_namelist_cfg cn_exp \"O2LP_SHORT\" 
     1383    set_namelist 1_namelist_cfg nn_it000 151 
     1384    set_namelist 1_namelist_cfg nn_itend 300 
     1385    set_namelist 1_namelist_cfg nn_stock 150 
     1386    set_namelist 1_namelist_cfg ln_rstart .true. 
     1387    set_namelist 1_namelist_cfg nn_rstctl 2 
     1388    set_namelist 1_namelist_cfg ln_clobber .true. 
     1389    set_namelist namelist_cfg cn_ocerst_in \"O2LP_LONG_00000075_restart\" 
     1390    set_namelist namelist_ice_cfg cn_icerst_in \"O2LP_LONG_00000075_restart_ice\" 
     1391 
     1392    set_namelist 1_namelist_cfg cn_ocerst_in \"O2LP_LONG_00000150_restart\" 
     1393 
     1394    for (( i=1; i<=$NPROC; i++)) ; do 
     1395        L_NPROC=$(( $i - 1 )) 
     1396        L_NPROC=`printf "%04d\n" ${L_NPROC}` 
     1397        ln -sf ../LONG/O2LP_LONG_00000075_restart_${L_NPROC}.nc . 
     1398        ln -sf ../LONG/O2LP_LONG_00000075_restart_ice_${L_NPROC}.nc . 
     1399        ln -sf ../LONG/1_O2LP_LONG_00000150_restart_${L_NPROC}.nc . 
     1400    done 
     1401    if [ ${USING_MPMD} == "yes" ] ; then 
     1402       set_xio_using_server iodef.xml true 
     1403    else 
     1404       set_xio_using_server iodef.xml false 
     1405    fi 
     1406    cd ${SETTE_DIR} 
     1407    . ./prepare_job.sh input_ORCA2_LIM_AGRIF.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 
     1408    cd ${SETTE_DIR} 
     1409    . ./fcm_job.sh $NPROC ${JOB_FILE} ${INTERACT_FLAG} ${MPIRUN_FLAG} 
     1410fi 
     1411 
     1412## Reproducibility tests for ORCA2_LIM_AGRIF 
     1413if [ ${config} -eq 19 ] ;  then 
     1414    export TEST_NAME="REPRO_4_4" 
     1415    cd ${CONFIG_DIR} 
     1416    . ./makenemo -m ${CMP_NAM} -n ORCA2AGUL_16 -r ORCA2_LIM -j 8 add_key "key_mpp_rep key_agrif" del_key "key_zdftmx" del_key ${DEL_KEYS} 
     1417    cd ${SETTE_DIR} 
     1418    . ./param.cfg 
     1419    . ./all_functions.sh 
     1420    . ./prepare_exe_dir.sh 
     1421    JOB_FILE=${EXE_DIR}/run_job.sh 
     1422    NPROC=16 
     1423    if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 
     1424    cd ${EXE_DIR} 
     1425    set_namelist namelist_cfg nn_it000 1 
     1426    set_namelist namelist_cfg nn_itend 75 
     1427    set_namelist namelist_cfg ln_ctl .false. 
     1428    set_namelist namelist_cfg ln_clobber .true. 
     1429    set_namelist namelist_cfg nn_fwb 0 
     1430    set_namelist namelist_cfg jpni 4 
     1431    set_namelist namelist_cfg jpnj 4 
     1432    set_namelist namelist_cfg jpnij 16 
     1433    set_namelist namelist_cfg nn_solv 2 
     1434# 
     1435    set_namelist 1_namelist_cfg nn_it000 1 
     1436    set_namelist 1_namelist_cfg nn_itend 150 
     1437    set_namelist 1_namelist_cfg ln_ctl .false. 
     1438    set_namelist 1_namelist_cfg ln_clobber .true. 
     1439 
     1440    if [ ${USING_MPMD} == "yes" ] ; then 
     1441       set_xio_using_server iodef.xml true 
     1442    else 
     1443       set_xio_using_server iodef.xml false 
     1444    fi 
     1445    cd ${SETTE_DIR} 
     1446    . ./prepare_job.sh input_ORCA2_LIM_AGRIF.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 
     1447    cd ${SETTE_DIR} 
     1448    . ./fcm_job.sh $NPROC ${JOB_FILE} ${INTERACT_FLAG} ${MPIRUN_FLAG} 
     1449 
     1450    cd ${SETTE_DIR} 
     1451    export TEST_NAME="REPRO_2_8" 
     1452    . ./prepare_exe_dir.sh 
     1453    JOB_FILE=${EXE_DIR}/run_job.sh 
     1454    NPROC=16 
     1455    if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 
     1456    cd ${EXE_DIR} 
     1457    set_namelist namelist_cfg nn_it000 1 
     1458    set_namelist namelist_cfg nn_itend 75 
     1459    set_namelist namelist_cfg ln_ctl .false. 
     1460    set_namelist namelist_cfg ln_clobber .true. 
     1461    set_namelist namelist_cfg nn_fwb 0 
     1462    set_namelist namelist_cfg jpni 2 
     1463    set_namelist namelist_cfg jpnj 8 
     1464    set_namelist namelist_cfg jpnij 16 
     1465    set_namelist namelist_cfg nn_solv 2 
     1466# 
     1467    set_namelist 1_namelist_cfg nn_it000 1 
     1468    set_namelist 1_namelist_cfg nn_itend 150 
     1469    set_namelist 1_namelist_cfg ln_ctl .false. 
     1470    set_namelist 1_namelist_cfg ln_clobber .true. 
     1471 
     1472    if [ ${USING_MPMD} == "yes" ] ; then 
     1473       set_xio_using_server iodef.xml true 
     1474    else 
     1475       set_xio_using_server iodef.xml false 
     1476    fi 
     1477    cd ${SETTE_DIR} 
     1478    . ./prepare_job.sh input_ORCA2_LIM_AGRIF.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 
     1479    cd ${SETTE_DIR} 
     1480    . ./fcm_job.sh $NPROC ${JOB_FILE} ${INTERACT_FLAG} ${MPIRUN_FLAG} 
     1481fi 
     1482 
    12541483done 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/SETTE/sette_rpt

    r5581 r5653  
    440440  endif 
    441441 
     442 
     443  if ( -d ./WORCA2AGUL_LONG ) then 
     444    set dorv = `ls -1rtd ./WORCA2AGUL_LONG/{$mach}/* | tail -1l ` 
     445    set dorv = $dorv:t 
     446    set f1o = ./WORCA2AGUL_LONG/{$mach}/{$dorv}/LONG/ocean.output 
     447    set f1s = ./WORCA2AGUL_LONG/{$mach}/{$dorv}/LONG/solver.stat 
     448    set f2o = ./WORCA2AGUL_LONG/{$mach}/{$dorv}/SHORT/ocean.output 
     449    set f2s = ./WORCA2AGUL_LONG/{$mach}/{$dorv}/SHORT/solver.stat 
     450   
     451    set nl = `wc -l $f2s` 
     452    tail -$nl[1] $f1s > f1.tmp$$ 
     453    cmp -s f1.tmp$$ $f2s 
     454    if ( $status == 0 ) then 
     455      echo "ORCA2_LIM_AGRIF restartability  passed" 
     456    else 
     457      echo "ORCA2_LIM_AGRIF restartability  FAILED" 
     458      if ( $pass == 1 ) then 
     459        echo "<return> to view solver.stat differences" 
     460        set y = $< 
     461        sdiff f1.tmp$$ $f2s 
     462        echo "<return> to view ocean.output differences" 
     463        set y = $< 
     464        sdiff $f1o $f2o | grep "|" 
     465        echo "<return> to continue" 
     466        set y = $< 
     467      endif 
     468    endif 
     469    rm f1.tmp$$ 
     470  endif 
     471 
     472  if ( -d ./WORCA2AGUL_16 ) then 
     473    set dorv = `ls -1rtd ./WORCA2AGUL_16/{$mach}/* | tail -1l ` 
     474    set dorv = $dorv:t 
     475    set f1o = ./WORCA2AGUL_16/{$mach}/{$dorv}/REPRO_2_8/ocean.output 
     476    set f1s = ./WORCA2AGUL_16/{$mach}/{$dorv}/REPRO_2_8/solver.stat 
     477    set f2o = ./WORCA2AGUL_16/{$mach}/{$dorv}/REPRO_4_4/ocean.output 
     478    set f2s = ./WORCA2AGUL_16/{$mach}/{$dorv}/REPRO_4_4/solver.stat 
     479   
     480    cmp -s $f1s $f2s 
     481    if ( $status == 0 ) then 
     482      echo "ORCA2_LIM_AGRIF reproducibility passed" 
     483    else 
     484      echo "ORCA2_LIM_AGRIF reproducibility FAILED" 
     485      if ( $pass == 1 ) then 
     486        echo "<return> to view solver.stat differences" 
     487        set y = $< 
     488        sdiff $f1s $f2s 
     489        echo "<return> to view ocean.output differences" 
     490        set y = $< 
     491        sdiff $f1o $f2o | grep "|" 
     492        echo "<return> to continue" 
     493        set y = $< 
     494      endif 
     495    endif 
     496  endif 
     497 
     498  if ( -d ./WORCA2AGUL_2_2_NAG ) then 
     499    set dorv = `ls -1rtd ./WORCA2AGUL_2_2_NAG/{$mach}/* | tail -1l ` 
     500    set dorv = $dorv:t 
     501    set f1o = ./WORCA2AGUL_2_2_NAG/{$mach}/{$dorv}/SHORT_NOAGRIF/ocean.output 
     502    set f1s = ./WORCA2AGUL_2_2_NAG/{$mach}/{$dorv}/SHORT_NOAGRIF/solver.stat 
     503    set dorv = `ls -1rtd ./WORCA2AGUL_2_2/{$mach}/* | tail -1l ` 
     504    set dorv = $dorv:t 
     505    set f2o = ./WORCA2AGUL_2_2/{$mach}/{$dorv}/SHORT_NOZOOM/ocean.output 
     506    set f2s = ./WORCA2AGUL_2_2/{$mach}/{$dorv}/SHORT_NOZOOM/solver.stat 
     507   
     508    cmp -s $f1s $f2s 
     509    if ( $status == 0 ) then 
     510      echo "ORCA2_LIM_AGRIF code corruption test passed" 
     511    else 
     512      echo "ORCA2_LIM_AGRIF code corruption test FAILED" 
     513      if ( $pass == 1 ) then 
     514        echo "<return> to view solver.stat differences" 
     515        set y = $< 
     516        sdiff $f1s $f2s 
     517        echo "<return> to view ocean.output differences" 
     518        set y = $< 
     519        sdiff $f1o $f2o | grep "|" 
     520        echo "<return> to continue" 
     521        set y = $< 
     522      endif 
     523    endif 
     524  endif 
     525 
    442526  echo "<return> for second (more detailed) pass (y/n)" 
    443527  set y = $< 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/SIREN/cfg/variable.cfg

    r5581 r5653  
    1 # name       | units          | axis | point | standard name                | long name          | interpolation 
    2 X            | 1              | X    |   | projection_x_coordinate          |                    |                       
    3 Y            | 1              | Y    |   | projection_y_coordinate          |                    |                       
    4 Z            | 1              | Z    |   | projection_z_coordinate          |                    |                       
    5 T            | 1              | T    |   | projection_t_coordinate          |                    |                       
    6 nav_lon      | degrees_east   | XY   | T | longitude                        | Longitude          | cubic                       
    7 nav_lat      | degrees_north  | XY   | T | latitude                         | Latitude           | cubic          
    8 nav_lev      | model_levels   | Z    | T |                                  | Model levels       | cubic         
    9 deptht       | m              | Z    | T | depth                            | Vertical T levels  | 
    10 time_counter |                | T    |   | time                             | Time axis          |  
    11 Bathymetry   | m              | XY   | T | bathymetry                       | Bathymetry         | cubic          
    12 votemper     | degree_Celsius | XYZT | T | sea_water_potential_temperature  | Temperature        | cubic          
    13 vozocrtx     | m s-1          | XYZT | U |                                  | Zonal velocity     | cubic          
    14 vomecrty     | m s-1          | XYZT | V |                                  | Meridional velocity| cubic          
    15 vosaline     | PSU            | XYZT | T | sea_water_salinity               | Salinity           | cubic          
    16 sossheig     | m              | XYT  | T | sea_surface_height               | Sea Surface Height | cubic          
    17 glamt        | degrees_east   | XY   | T |                                  | Longitude_T        | cubic 
    18 glamu        | degrees_east   | XY   | U |                                  | Longitude_U        | cubic             
    19 glamv        | degrees_east   | XY   | V |                                  | Longitude_V        | cubic           
    20 glamf        | degrees_east   | XY   | F |                                  | Longitude_F        | cubic          
    21 gphit        | degrees_north  | XY   | T |                                  | Latitude_T         | cubic          
    22 gphiu        | degrees_north  | XY   | U |                                  | Latitude_U         | cubic         
    23 gphiv        | degrees_north  | XY   | V |                                  | Latitude_V         | cubic         
    24 gphif        | degrees_north  | XY   | F |                                  | Latitude_F         | cubic         
    25 e1t          | m              | XY   | T |                                  |                    | cubic/rhoi     
    26 e1u          | m              | XY   | U |                                  |                    | cubic/rhoi      
    27 e1v          | m              | XY   | V |                                  |                    | cubic/rhoi       
    28 e1f          | m              | XY   | F |                                  |                    | cubic/rhoi     
    29 e2t          | m              | XY   | T |                                  |                    | cubic/rhoj       
    30 e2u          | m              | XY   | U |                                  |                    | cubic/rhoj       
    31 e2v          | m              | XY   | V |                                  |                    | cubic/rhoj      
    32 e2f          | m              | XY   | F |                                  |                    | cubic/rhoj       
    33 tmask        |                | XYZ  | T |                                  |                    | nearest        
    34 umask        |                | XYZ  | U |                                  |                    | nearest        
    35 vmask        |                | XYZ  | V |                                  |                    | nearest        
    36 fmask        |                | XYZ  | F |                                  |                    | nearest        
    37 weight       |                | XY   | T |                                  |                    |                
    38 kt           |                |      |   |                                  |                    |                
    39 ndastp       |                |      |   |                                  |                    |                
    40 adatrj       |                |      |   |                                  |                    |                
    41 kt           |                |      |   |                                  |                    |                
    42 rdt          |                |      |   |                                  |                    |                
    43 rdttra1      |                |      |   |                                  |                    |                
    44 utau_b       |                | XYT  | U |surface_downward_eastward_stress  |                    |                
    45 vtau_b       |                | XYT  | V |surface_downward_northward_stress |                    |                
    46 qns_b        |                | XYT  | T |                                  |                    |                
    47 emp_b        |                | XYT  | T |                                  |                    |                
    48 sfx_b        |                | XYT  | T |                                  |                    |                
    49 en           |                | XYZT | T |                                  |                    |                
    50 avt          |                | XYZT | T |                                  |                    |                
    51 avm          |                | XYZT | T |                                  |                    |                
    52 avmu         |                | XYZT | T |                                  |                    |                
    53 avmv         |                | XYZT | T |                                  |                    |                
    54 dissl        |                | XYZT | T |                                  |                    |                
    55 sbc_hc_b     |                | XYT  | T |                                  |                    |                
    56 sbc_sc_b     |                | XYT  | T |                                  |                    |                
    57 gcx          |                | XYT  | T |                                  |                    |                
    58 gcxb         |                | XYT  | T |                                  |                    |                
    59 ub           |                | XYZT | U |                                  |                    |                
    60 vb           |                | XYZT | V |                                  |                    |                
    61 tb           |                | XYZT | T |                                  |                    |                
    62 sb           |                | XYZT | T |                                  |                    |                
    63 rotb         |                | XYZT | T |                                  |                    |                
    64 hdivb        |                | XYZT | T |                                  |                    |                
    65 sshb         |                | XYT  | T |                                  |                    |                
    66 un           |                | XYZT | U |                                  |                    |                
    67 vn           |                | XYZT | V |                                  |                    |                
    68 tn           |                | XYZT | T |                                  |                    |                
    69 sn           |                | XYZT | T |                                  |                    |                
    70 rotn         |                | XYZT | T |                                  |                    |                
    71 hdivn        |                | XYZT | T |                                  |                    |                
    72 sshn         |                | XYT  | T |                                  |                    |                
    73 rhop         |                | XYZT | T |                                  |                    |                
     1# name       | units          | axis | pt| interpolation   | long name                             | standard name                                   
     2X            | 1              | X    |   |                 |                                       | projection_x_coordinate                
     3Y            | 1              | Y    |   |                 |                                       | projection_y_coordinate                
     4Z            | 1              | Z    |   |                 |                                       | projection_z_coordinate                
     5T            | 1              | T    |   |                 |                                       | projection_t_coordinate                
     6nav_lon      | degrees_east   | XY   | T | cubic           | Longitude                             | longitude                                    
     7nav_lat      | degrees_north  | XY   | T | cubic           | Latitude                              | latitude                          
     8nav_lev      | model_levels   | Z    | T | cubic           | Model levels                          |                                   
     9deptht       | m              | Z    | T |                 | Vertical T levels                     | depth                             
     10time_counter |                | T    |   |                 | Time axis                             | time                              
     11Bathymetry   | m              | XY   | T | cubic           | Bathymetry                            | bathymetry                        
     12votemper     | degree_Celsius | XYZT | T | cubic           | Temperature                           | sea_water_potential_temperature   
     13vozocrtx     | m s-1          | XYZT | U | cubic           | Zonal velocity                        |                                   
     14vomecrty     | m s-1          | XYZT | V | cubic           | Meridional velocity                   |                                   
     15vosaline     | PSU            | XYZT | T | cubic           | Salinity                              | sea_water_salinity                
     16sossheig     | m              | XYT  | T | cubic           | Sea Surface Height                    | sea_surface_height                
     17sotemper     | m              | XYT  | T | cubic           |                                       |                                   
     18sossheig     | m              | XYT  | T | cubic           |                                       |                                   
     19glamt        | degrees_east   | XY   | T | cubic           | Longitude_T                           |                                   
     20glamu        | degrees_east   | XY   | U | cubic           | Longitude_U                           |                                    
     21glamv        | degrees_east   | XY   | V | cubic           | Longitude_V                           |                                   
     22glamf        | degrees_east   | XY   | F | cubic           | Longitude_F                           |                                   
     23gphit        | degrees_north  | XY   | T | cubic           | Latitude_T                            |                                   
     24gphiu        | degrees_north  | XY   | U | cubic           | Latitude_U                            |                                   
     25gphiv        | degrees_north  | XY   | V | cubic           | Latitude_V                            |                                   
     26gphif        | degrees_north  | XY   | F | cubic           | Latitude_F                            |                                   
     27e1t          | m              | XY   | T | cubic/rhoi      |                                       |                                   
     28e1u          | m              | XY   | U | cubic/rhoi      |                                       |                                   
     29e1v          | m              | XY   | V | cubic/rhoi      |                                       |                                   
     30e1f          | m              | XY   | F | cubic/rhoi      |                                       |                                   
     31e2t          | m              | XY   | T | cubic/rhoj      |                                       |                                   
     32e2u          | m              | XY   | U | cubic/rhoj      |                                       |                                   
     33e2v          | m              | XY   | V | cubic/rhoj      |                                       |                                   
     34e2f          | m              | XY   | F | cubic/rhoj      |                                       |                                   
     35tmask        |                | XYZ  | T | nearest         |                                       |                                   
     36umask        |                | XYZ  | U | nearest         |                                       |                                   
     37vmask        |                | XYZ  | V | nearest         |                                       |                                   
     38fmask        |                | XYZ  | F | nearest         |                                       |                                   
     39weight       |                | XY   | T |                 |                                       |                                   
     40kt           |                |      |   |                 |                                       |                                   
     41ndastp       |                |      |   |                 |                                       |                                   
     42adatrj       |                |      |   |                 |                                       |                                   
     43kt           |                |      |   |                 |                                       |                                   
     44rdt          |                |      |   |                 |                                       |                                   
     45rdttra1      |                |      |   |                 |                                       |                                   
     46utau_b       |                | XY   | U |                 |                                       |surface_downward_eastward_stress   
     47vtau_b       |                | XY   | V |                 |                                       |surface_downward_northward_stress  
     48qns_b        |                | XY   | T |                 |                                       |                                   
     49emp_b        |                | XY   | T |                 |                                       |                                   
     50sfx_b        |                | XY   | T |                 |                                       |                                   
     51en           |                | XYZ  | T |                 |                                       |                                   
     52avt          |                | XYZ  | T |                 | vertical eddy diffusivity             |                                   
     53avm          |                | XYZ  | T |                 | vertical eddy viscosity               |                                   
     54avmu         |                | XYZ  | T |                 |                                       |                                   
     55avmv         |                | XYZ  | T |                 |                                       |                                   
     56dissl        |                | XYZ  | T |                 |                                       |                                   
     57sbc_hc_b     |                | XY   | T |                 |                                       |                                   
     58sbc_sc_b     |                | XY   | T |                 |                                       |                                   
     59gcx          |                | XY   | T |                 |                                       |                                   
     60gcxb         |                | XY   | T |                 |                                       |                                   
     61ub           |                | XYZ  | U |                 |                                       |                                   
     62vb           |                | XYZ  | V |                 |                                       |                                   
     63tb           |                | XYZ  | T |                 |                                       |                                   
     64sb           |                | XYZ  | T |                 |                                       |                                   
     65rotb         |                | XYZ  | T |                 |                                       |                                   
     66hdivb        |                | XYZ  | T |                 |                                       |                                   
     67sshb         |                | XY   | T |                 |                                       |                                   
     68un           |                | XYZ  | U |                 |                                       |                                   
     69vn           |                | XYZ  | V |                 |                                       |                                   
     70tn           |                | XYZ  | T |                 |                                       |                                   
     71sn           |                | XYZ  | T |                 |                                       |                                   
     72rotn         |                | XYZ  | T |                 |                                       |                                   
     73hdivn        |                | XYZ  | T |                 |                                       |                                   
     74sshn         |                | XYT  | T |                 |                                       |                                   
     75rhop         |                | XYZ  | T |                 |                                       |                                   
     76dic          |                | XYZT | T |                 | Dissolved Inorganic Carbon            | mole_concentration_of_dissolved_inorganic_caron_in_sea_water 
     77alkalini     |                | XYZT | T |                 | Total Alkalinity                      | sea_water_alkalinity_expressed_as_mole_equivalent 
     78o2           |                | XYZT | T |                 | Dissolved Oxygen                      | mole_concentration_of_dissolved_molecular_oxygen_in_sea_water 
     79caco3        |                | XYZT | T |                 | Calcite                               |                                   
     80po4          |                | XYZT | T |                 | Phosphate                             | mole_concentration_of_phosphate_in_sea_water 
     81poc          |                | XYZT | T |                 | Small Particulate Organic Carbon      |                                   
     82si           |                | XYZT | T |                 | Dissolved Silicate                    | mole_concentration_of_silicate_in_sea_water 
     83phy          |                | XYZT | T |                 | Nanophytoplankton                     |                                   
     84zoo          |                | XYZT | T |                 | Microzooplankton                      | mole_concentration_of_microzooplankton_expressed_as_carbon_in_sea_water 
     85doc          |                | XYZT | T |                 | Dissolved Organic Carbon              |                                   
     86phy2         |                | XYZT | T |                 | Diatoms                               |                                   
     87zoo2         |                | XYZT | T |                 | Mesozooplankton                       | mole_concentration_of_mesozooplankton_expressed_as_carbon_in_sea_water 
     88gsi          |                | XYZT | T |                 | Sinking biogenic Silica               |                                   
     89fer          |                | XYZT | T |                 | Dissolved Iron                        | mole_concentration_of_dissolved_iron_in_sea_water 
     90bfe          |                | XYZT | T |                 | Iron in the big particles             |                                   
     91goc          |                | XYZT | T |                 | Big Particulate Organic Carbon        |                                   
     92sfe          |                | XYZT | T |                 | Iron in the small particles           |                                   
     93dfe          |                | XYZT | T |                 | Iron content of the Diatoms           |                                   
     94dsi          |                | XYZT | T |                 | Silicon content of the Diatoms        |                                   
     95nfe          |                | XYZT | T |                 | Iron content of the Nanophytoplankton |                                   
     96nchl         |                | XYZT | T |                 | Chlorophyll of the Nanophytoplankton  |                                   
     97dchl         |                | XYZT | T |                 | Chlorophyll of the Diatoms            |                                   
     98no3          |                | XYZT | T |                 | Nitrate                               | mole_concentration_of_nitrate_in_sea_water 
     99nh4          |                | XYZT | T |                 | Ammonium                              | mole_concentration_of_ammonium_in_sea_water 
     100ppd          |                | XYZT | T |                 |                                       |                                   
     101ppn          |                | XYZT | T |                 |                                       |                                   
     102ph           |                | XYZT | T |                 |                                       |                                   
     103cflx         |                | XYZT | T |                 |                                       |                                   
     104oflx         |                | XYZT | T |                 |                                       |                                   
     105kg           |                | XYZT | T |                 |                                       |                                   
     106dpco2        |                | XYZT | T |                 |                                       |                                   
     107heup         |                | XYZT | T |                 |                                       |                                   
     108kz           |                | XYZT | T |                 |                                       |                                   
     109irondep      |                | XYZT | T |                 |                                       |                                   
     110kt_ice       |                |      |   |                 |                                       |                                   
     111hicif        |                |      |   |                 |                                       |                                   
     112hsnif        |                |      |   |                 |                                       |                                   
     113frld         |                |      |   |                 |                                       |                                   
     114sist         |                |      |   |                 |                                       |                                   
     115tbif1        |                |      |   |                 |                                       |                                   
     116tbif2        |                |      |   |                 |                                       |                                   
     117tbif3        |                |      |   |                 |                                       |                                   
     118ui_ice       |                |      |   |                 |                                       |                                   
     119vi_ice       |                |      |   |                 |                                       |                                   
     120qstoif       |                |      |   |                 |                                       |                                   
     121fsbbq        |                |      |   |                 |                                       |                                   
     122stress1_i    |                |      |   |                 |                                       |                                   
     123stress2_i    |                |      |   |                 |                                       |                                   
     124stress12_i   |                |      |   |                 |                                       |                                   
     125sxice        |                |      |   |                 |                                       |                                   
     126syice        |                |      |   |                 |                                       |                                   
     127sxxice       |                |      |   |                 |                                       |                                   
     128syyice       |                |      |   |                 |                                       |                                   
     129sxyice       |                |      |   |                 |                                       |                                   
     130sxsn         |                |      |   |                 |                                       |                                   
     131sysn         |                |      |   |                 |                                       |                                   
     132sxxsn        |                |      |   |                 |                                       |                                   
     133syysn        |                |      |   |                 |                                       |                                   
     134sxysn        |                |      |   |                 |                                       |                                   
     135sxa          |                |      |   |                 |                                       |                                   
     136sya          |                |      |   |                 |                                       |                                   
     137sxxa         |                |      |   |                 |                                       |                                   
     138syya         |                |      |   |                 |                                       |                                   
     139sxya         |                |      |   |                 |                                       |                                   
     140sxc0         |                |      |   |                 |                                       |                                   
     141syc0         |                |      |   |                 |                                       |                                   
     142sxxc0        |                |      |   |                 |                                       |                                   
     143syyc0        |                |      |   |                 |                                       |                                   
     144sxyc0        |                |      |   |                 |                                       |                                   
     145sxc1         |                |      |   |                 |                                       |                                   
     146syc1         |                |      |   |                 |                                       |                                   
     147sxxc1        |                |      |   |                 |                                       |                                   
     148syyc1        |                |      |   |                 |                                       |                                   
     149sxyc1        |                |      |   |                 |                                       |                                   
     150sxc2         |                |      |   |                 |                                       |                                   
     151syc2         |                |      |   |                 |                                       |                                   
     152sxxc2        |                |      |   |                 |                                       |                                   
     153syyc2        |                |      |   |                 |                                       |                                   
     154sxyc2        |                |      |   |                 |                                       |                                   
     155sxst         |                |      |   |                 |                                       |                                   
     156syst         |                |      |   |                 |                                       |                                   
     157sxxst        |                |      |   |                 |                                       |                                   
     158syyst        |                |      |   |                 |                                       |                                   
     159sxyst        |                |      |   |                 |                                       |                                   
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/SIREN/src/attribute.f90

    r5581 r5653  
    8181! REVISION HISTORY: 
    8282!> @date November, 2013 - Initial Version 
    83 !> @date November, 2014 - Fix memory leaks bug 
     83!> @date November, 2014  
     84!> - Fix memory leaks bug 
    8485! 
    8586!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    130131      INTEGER(i4)       :: i_type = 0        !< attribute type 
    131132      INTEGER(i4)       :: i_len  = 0        !< number of value store in attribute 
    132       CHARACTER(LEN=lc) :: c_value = "none"  !< attribute value if type CHAR 
     133      CHARACTER(LEN=lc) :: c_value = 'none'  !< attribute value if type CHAR 
    133134      REAL(dp), DIMENSION(:), POINTER :: d_value => NULL() !< attribute value if type SHORT,INT,FLOAT or DOUBLE 
    134135   END TYPE TATT 
    135136 
    136137   INTERFACE att_init 
    137       MODULE PROCEDURE att__init_c 
     138      MODULE PROCEDURE att__init_c     
    138139      MODULE PROCEDURE att__init_dp 
    139140      MODULE PROCEDURE att__init_dp_0d 
     
    181182   !> @date November, 2013 - Initial Version 
    182183   !> @date November, 2014 
    183    !>    - use function instead of overload assignment operator  
     184   !> - use function instead of overload assignment operator  
    184185   !> (to avoid memory leak)  
    185186   ! 
     
    234235 
    235236      ! local variable 
    236       REAL(dp), DIMENSION(:), ALLOCATABLE :: dl_value 
     237      REAL(dp)         , DIMENSION(:), ALLOCATABLE :: dl_value 
    237238      !---------------------------------------------------------------- 
    238239 
     
    300301   !> @author J.Paul 
    301302   !> @date November, 2013 - Initial Version 
    302    !> @date September, 2014 - bug fix with use of id read from attribute structure 
    303    ! 
     303   !> @date September, 2014  
     304   !> - bug fix with use of id read from attribute structure 
     305   !> 
    304306   !> @param[in] td_att    array of attribute structure 
    305307   !> @param[in] cd_name   attribute name 
     
    355357 
    356358      att__init_c%c_name=TRIM(ADJUSTL(cd_name)) 
    357  
    358359      att__init_c%i_type=NF90_CHAR 
     360 
    359361      att__init_c%c_value=TRIM(ADJUSTL(cd_value)) 
    360362      att__init_c%i_len=LEN( TRIM(ADJUSTL(cd_value)) ) 
     
    368370   !> 
    369371   !> @author J.Paul 
    370    !> @dtae November, 2013 - Initial Version 
     372   !> @date November, 2013 - Initial Version 
    371373   ! 
    372374   !> @param[in] cd_name   attribute name 
     
    10681070   !> @author J.Paul 
    10691071   !> @date November, 2013 - Initial Version 
    1070    !> @date September, 2014 - take into account type of attribute. 
     1072   !> @date September, 2014  
     1073   !> - take into account type of attribute. 
    10711074   ! 
    10721075   !> @param[in] td_att attribute structure 
     
    11141117 
    11151118            CASE(NF90_CHAR) 
     1119 
    11161120               cl_value=td_att%c_value 
    11171121 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/SIREN/src/boundary.f90

    r5581 r5653  
    2626!>       - ld_west  is logical to force used of north boundary [optional] 
    2727!>       - cd_north is string character description of north boundary [optional] 
    28 !>       - cd_south is string character description of north boundary [optional] 
    29 !>       - cd_east  is string character description of north boundary [optional] 
    30 !>       - cd_west  is string character description of north boundary [optional] 
     28!>       - cd_south is string character description of south boundary [optional] 
     29!>       - cd_east  is string character description of east boundary [optional] 
     30!>       - cd_west  is string character description of west boundary [optional] 
    3131!>       - ld_oneseg is logical to force to use only one segment for each boundary [optional] 
    3232!> 
     
    3636!>    to know if boundary is use:<br/> 
    3737!>    - tl_bdy\%l_use 
     38!> 
     39!>    to know if boundary come from namelist (cn_north,..):<br/> 
     40!>    - tl_bdy\%l_nam 
    3841!> 
    3942!>    to get the number of segment in boundary:<br/> 
     
    105108! REVISION HISTORY: 
    106109!> @date November, 2013 - Initial Version 
    107 !> @date September, 2014 - add boundary description 
    108 !> @date November, 2014 - Fix memory leaks bug 
     110!> @date September, 2014  
     111!> - add boundary description 
     112!> @date November, 2014  
     113!> - Fix memory leaks bug 
     114!> @date February, 2015  
     115!> - Do not change indices read from namelist 
     116!> - Change string character format of boundary read from namelist,  
     117!>  see boundary__get_info 
    109118!>  
    110119!> @todo add schematic to boundary structure description 
     
    157166   PRIVATE :: seg__init       ! initialise segment structure 
    158167   PRIVATE :: seg__clean      ! clean segment structure 
    159    PRIVATE :: seg__clean_unit ! clean segment structure 
     168   PRIVATE :: seg__clean_unit ! clean one segment structure 
    160169   PRIVATE :: seg__clean_arr  ! clean array of segment structure 
    161170   PRIVATE :: seg__copy       ! copy segment structure in another 
     
    173182      CHARACTER(LEN=lc) :: c_card = ''          !< boundary cardinal 
    174183      LOGICAL           :: l_use  = .FALSE.     !< boundary use or not  
     184      LOGICAL           :: l_nam  = .FALSE.     !< boundary get from namelist 
    175185      INTEGER(i4)       :: i_nseg = 0           !< number of segment in boundary 
    176186      TYPE(TSEG), DIMENSION(:), POINTER :: t_seg => NULL() !<  array of segment structure 
    177187   END TYPE TBDY 
    178188 
     189   ! module variable 
    179190   INTEGER(i4), PARAMETER :: im_width=10 
    180191 
     
    223234   !> @date November, 2013 - Initial Version 
    224235   !> @date November, 2014 
    225    !>    - use function instead of overload assignment operator  
     236   !> - use function instead of overload assignment operator  
    226237   !> (to avoid memory leak) 
    227238   ! 
     
    260271   !> @date November, 2013 - Initial Version 
    261272   !> @date November, 2014 
    262    !>    - use function instead of overload assignment operator  
     273   !> - use function instead of overload assignment operator  
    263274   !> (to avoid memory leak) 
    264275   ! 
     
    353364   END SUBROUTINE boundary__clean_arr 
    354365   !-------------------------------------------------------------------  
    355    !> @brief This function put cardinal name inside file name. 
     366   !> @brief This function put cardinal name and date inside file name. 
    356367   !  
    357368   !> @details  
    358    !  
     369   !>    Examples : 
     370   !>       cd_file="boundary.nc" 
     371   !>       cd_card="west"  
     372   !>       id_seg =2 
     373   !>       cd_date=y2015m07d16 
     374   !>  
     375   !>       function return "boundary_west_2_y2015m07d16.nc" 
     376   !>  
     377   !>       cd_file="boundary.nc" 
     378   !>       cd_card="west"  
     379   !>  
     380   !>       function return "boundary_west.nc" 
     381   !>  
    359382   !> @author J.Paul  
    360383   !> @date November, 2013 - Initial Version  
     
    385408      CHARACTER(LEN=lc) :: cl_date 
    386409      CHARACTER(LEN=lc) :: cl_name 
     410 
     411      INTEGER(i4)       :: il_ind 
     412      INTEGER(i4)       :: il_indend 
     413 
    387414      ! loop indices  
    388415      !----------------------------------------------------------------  
     
    400427         cl_suffix=fct_split(TRIM(cl_basename),2,'.') 
    401428          
     429         ! add segment number 
    402430         IF( PRESENT(id_seg) )THEN 
    403             cl_segnum="_"//TRIM(fct_str(id_seg))//"_" 
     431            cl_segnum="_"//TRIM(fct_str(id_seg)) 
    404432         ELSE 
    405433            cl_segnum="" 
    406434         ENDIF 
    407435 
     436         ! add date 
    408437         IF( PRESENT(cd_date) )THEN 
    409             cl_date=TRIM(ADJUSTL(cd_date)) 
     438            cl_date="_"//TRIM(ADJUSTL(cd_date)) 
    410439         ELSE 
    411440            cl_date="" 
    412441         ENDIF 
    413442 
    414          cl_name=TRIM(cl_base)//"_"//TRIM(cd_card)//TRIM(cl_segnum)//& 
    415          &        TRIM(cl_date)//"."//TRIM(cl_suffix) 
     443         ! special case for obcdta 
     444         il_ind=INDEX(cl_base,'_obcdta_') 
     445         IF( il_ind/=0 )THEN 
     446            il_ind=il_ind-1+8 
     447            il_indend=LEN_TRIM(cl_base) 
     448 
     449            cl_name=TRIM(cl_base(1:il_ind))//TRIM(cd_card)//& 
     450               &     TRIM(cl_segnum)//"_"//TRIM(cl_base(il_ind+1:il_indend))//& 
     451               &     TRIM(cl_date)//"."//TRIM(cl_suffix) 
     452         ELSE 
     453            cl_name=TRIM(cl_base)//"_"//TRIM(cd_card)//TRIM(cl_segnum)//& 
     454               &     TRIM(cl_date)//"."//TRIM(cl_suffix) 
     455         ENDIF 
    416456 
    417457         boundary_set_filename=TRIM(cl_dirname)//"/"//TRIM(cl_name) 
     
    442482   !> ex : cn_north='index1,first1,last1(width)|index2,first2,last2' 
    443483   !> 
    444    !> @note boundaries are compute on T point. change will be done to get data 
    445    !> on other point when need be.  
     484   !> @note Boundaries are compute on T point, but expressed on U,V point. 
     485   !> change will be done to get data on other point when need be.  
    446486   !> 
    447487   !> @author J.Paul  
     
    581621 
    582622               ! get namelist information 
    583                tl_tmp=boundary__get_info(cl_card(jk)) 
     623               tl_tmp=boundary__get_info(cl_card(jk),jk) 
     624 
     625               ! get segments indices 
    584626               DO ji=1,tl_tmp%i_nseg 
    585627                  CALL boundary__add_seg(tl_bdy(jk),tl_tmp%t_seg(ji)) 
    586628               ENDDO 
     629               ! indices from namelist or not 
     630               tl_bdy(jk)%l_nam=tl_tmp%l_nam 
     631 
    587632               CALL boundary_clean(tl_tmp) 
    588633 
     
    642687   !> @return boundary structure 
    643688   !-------------------------------------------------------------------  
    644    FUNCTION boundary__init( cd_card, ld_use, td_seg )  
     689   FUNCTION boundary__init( cd_card, ld_use, ld_nam, td_seg )  
    645690      IMPLICIT NONE  
    646691      ! Argument 
    647692      CHARACTER(LEN=*), INTENT(IN) :: cd_card 
    648693      LOGICAL         , INTENT(IN), OPTIONAL :: ld_use  
     694      LOGICAL         , INTENT(IN), OPTIONAL :: ld_nam  
    649695      TYPE(TSEG)      , INTENT(IN), OPTIONAL :: td_seg 
    650696 
     
    664710            boundary__init%l_use=.TRUE. 
    665711            IF( PRESENT(ld_use) ) boundary__init%l_use=ld_use 
     712 
     713            boundary__init%l_nam=.FALSE. 
     714            IF( PRESENT(ld_nam) ) boundary__init%l_nam=ld_nam 
    666715 
    667716            IF( PRESENT(td_seg) )THEN 
     
    778827   !> orthogonal index, first and last indices, of each segment.  
    779828   !> And also the width of all segments of this boundary. 
    780    !>   cn_north='index1,first1,last1(width)|index2,first2,last2' 
     829   !>   cn_north='index1,first1:last1(width)|index2,first2:last2' 
    781830   !>  
    782831   !> @author J.Paul  
    783832   !> @date November, 2013 - Initial Version  
     833   !> @date february, 2015  
     834   !> - do not change indices read from namelist 
     835   !> - change format cn_north 
    784836   !  
    785837   !> @param[in] cd_card   boundary description 
     838   !> @param[in] id_jcard  boundary index 
    786839   !> @return boundary structure 
    787840   !-------------------------------------------------------------------  
    788    FUNCTION boundary__get_info(cd_card)  
     841   FUNCTION boundary__get_info(cd_card, id_jcard)  
    789842      IMPLICIT NONE  
    790843      ! Argument  
    791844      CHARACTER(LEN=lc), INTENT(IN) :: cd_card 
     845      INTEGER(i4)      , INTENT(IN) :: id_jcard 
    792846 
    793847      ! function  
     
    802856      CHARACTER(LEN=lc) :: cl_index 
    803857      CHARACTER(LEN=lc) :: cl_width 
     858      CHARACTER(LEN=lc) :: cl_tmp 
    804859      CHARACTER(LEN=lc) :: cl_first 
    805860      CHARACTER(LEN=lc) :: cl_last  
     
    818873      ! width should be the same for all segment of one boundary 
    819874      IF( TRIM(cl_seg)   /= '' )THEN 
     875 
     876         ! initialise boundary 
     877         ! temporaty boundary, so it doesn't matter which caridnal is used 
     878         boundary__get_info=boundary__init('north',ld_nam=.TRUE.) 
     879 
    820880         il_ind1=SCAN(fct_lower(cl_seg),'(') 
    821881         IF( il_ind1 /=0 )THEN 
     
    831891            ENDIF 
    832892         ENDIF 
     893 
    833894      ENDIF  
    834895 
     
    839900         il_ind1=SCAN(fct_lower(cl_index),'(') 
    840901         IF( il_ind1 /=0 )THEN 
    841             il_ind2=SCAN(fct_lower(cl_index),'(') 
     902            il_ind2=SCAN(fct_lower(cl_index),')') 
    842903            IF( il_ind2 /=0 )THEN 
    843904               cl_index=TRIM(cl_index(:il_ind1-1))//TRIM(cl_index(il_ind2+1:)) 
     
    848909         ENDIF 
    849910       
    850          cl_first=fct_split(cl_seg,2,',') 
     911          
     912         cl_tmp=fct_split(cl_seg,2,',') 
     913 
     914 
     915         cl_first=fct_split(cl_tmp,1,':') 
    851916         ! remove potential width information 
    852917         il_ind1=SCAN(fct_lower(cl_first),'(') 
    853918         IF( il_ind1 /=0 )THEN 
    854             il_ind2=SCAN(fct_lower(cl_first),'(') 
     919            il_ind2=SCAN(fct_lower(cl_first),')') 
    855920            IF( il_ind2 /=0 )THEN 
    856921               cl_first=TRIM(cl_first(:il_ind1-1))//TRIM(cl_first(il_ind2+1:)) 
     
    861926         ENDIF          
    862927          
    863          cl_last =fct_split(cl_seg,3,',') 
     928         cl_last =fct_split(cl_tmp,2,':') 
    864929         ! remove potential width information 
    865930         il_ind1=SCAN(fct_lower(cl_last),'(') 
    866931         IF( il_ind1 /=0 )THEN 
    867             il_ind2=SCAN(fct_lower(cl_last),'(') 
     932            il_ind2=SCAN(fct_lower(cl_last),')') 
    868933            IF( il_ind2 /=0 )THEN 
    869934               cl_last=TRIM(cl_last(:il_ind1-1))//TRIM(cl_last(il_ind2+1:)) 
     
    879944         IF( TRIM(cl_first) /= '' ) READ(cl_first,*) tl_seg%i_first 
    880945         IF( TRIM(cl_last)  /= '' ) READ(cl_last ,*) tl_seg%i_last 
     946 
     947         ! index expressed on U,V point, move on T point. 
     948         SELECT CASE(id_jcard) 
     949            CASE(jp_north, jp_east) 
     950               tl_seg%i_index=tl_seg%i_index+1 
     951         END SELECT 
    881952 
    882953         IF( (tl_seg%i_first == 0 .AND.  tl_seg%i_last == 0) .OR. & 
     
    9431014 
    9441015      DO jk=1,ip_ncard 
    945          IF( .NOT. td_bdy(jk)%l_use .OR. td_bdy(jk)%i_nseg > 1 )THEN 
     1016         IF( .NOT. td_bdy(jk)%l_use .OR. td_bdy(jk)%l_nam )THEN 
    9461017            ! nothing to be done 
    9471018         ELSE 
     
    14801551      il_max(jp_east )=td_var%t_dim(2)%i_len 
    14811552      il_max(jp_west )=td_var%t_dim(2)%i_len 
    1482        
     1553  
    14831554      il_maxindex(jp_north)=td_var%t_dim(2)%i_len-ip_ghost 
    14841555      il_maxindex(jp_south)=td_var%t_dim(2)%i_len-ip_ghost 
     
    15151586         ENDIF 
    15161587      ENDDO 
    1517        
     1588  
    15181589      CALL boundary_check_corner(td_bdy, td_var) 
    15191590 
     
    16501721   !> @date November, 2013 - Initial Version 
    16511722   !> @date November, 2014 
    1652    !>    - use function instead of overload assignment operator  
     1723   !> - use function instead of overload assignment operator  
    16531724   !> (to avoid memory leak) 
    16541725   ! 
     
    16871758   !> @date November, 2013 - Initial Version 
    16881759   !> @date November, 2014 
    1689    !>    - use function instead of overload assignment operator  
     1760   !> - use function instead of overload assignment operator  
    16901761   !> (to avoid memory leak) 
    16911762   ! 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/SIREN/src/create_bathy.f90

    r5581 r5653  
    2020!>    ./SIREN/bin/create_bathy create_bathy.nam 
    2121!> @endcode 
    22 !>     
     22!> <br/>     
     23!> \image html  bathy_40.png  
     24!> \image latex bathy_30.png 
     25!> 
     26!> @note  
     27!>    you could find a template of the namelist in templates directory. 
     28!> 
    2329!>    create_bathy.nam comprise 7 namelists:<br/> 
    2430!>       - logger namelist (namlog) 
     
    3743!>       - cn_logfile   : log filename 
    3844!>       - cn_verbosity : verbosity ('trace','debug','info', 
    39 !> 'warning','error','fatal') 
     45!> 'warning','error','fatal','none') 
    4046!>       - in_maxerror  : maximum number of error allowed 
    4147!> 
     
    5258!>       - cn_coord1 : coordinate file 
    5359!>       - in_perio1 : periodicity index 
    54 !>       - ln_fillclosed : fill closed sea or not 
     60!>       - ln_fillclosed : fill closed sea or not (default is .TRUE.) 
    5561!> 
    5662!>    * _variable namelist (namvar)_:<br/> 
    5763!>       - cn_varinfo : list of variable and extra information about request(s)  
    5864!>       to be used.<br/> 
    59 !>          each elements of *cn_varinfo* is a string character.<br/> 
     65!>          each elements of *cn_varinfo* is a string character 
     66!>          (separated by ',').<br/> 
    6067!>          it is composed of the variable name follow by ':',  
    6168!>          then request(s) to be used on this variable.<br/>  
    6269!>          request could be: 
    63 !>             - interpolation method 
    64 !>             - extrapolation method 
    65 !>             - filter method 
    66 !>             - > minimum value 
    67 !>             - < maximum value 
     70!>             - int = interpolation method 
     71!>             - ext = extrapolation method 
     72!>             - flt = filter method 
     73!>             - min = minimum value 
     74!>             - max = maximum value 
     75!>             - unt = new units 
     76!>             - unf = unit scale factor (linked to new units) 
    6877!> 
    6978!>                requests must be separated by ';'.<br/> 
     
    7281!>          informations about available method could be find in @ref interp, 
    7382!>          @ref extrap and @ref filter modules.<br/> 
    74 !>          Example: 'Bathymetry: 2*hamming(2,3); > 0' 
     83!>          Example: 'Bathymetry: flt=2*hamming(2,3); min=0' 
    7584!>          @note  
    7685!>             If you do not specify a method which is required,  
     
    9099!>                - ',' for line 
    91100!>                - '/' for row 
    92 !>                - '\' for level<br/> 
    93101!>                Example:<br/> 
    94102!>                   3,2,3/1,4,5  =>  @f$ \left( \begin{array}{ccc} 
     
    99107!>             - 'Bathymetry:gridT.nc' 
    100108!>             - 'Bathymetry:5000,5000,5000/5000,3000,5000/5000,5000,5000' 
    101 !> 
    102 !>          \image html  bathy_40.png  
    103 !>          \image latex bathy_30.png 
    104109!> 
    105110!>    * _nesting namelist (namnst)_:<br/> 
     
    119124!> - add header for user 
    120125!> - Bug fix, compute offset depending of grid point 
     126!> @date June, 2015 
     127!> - extrapolate all land points. 
     128!> - allow to change unit. 
    121129! 
     130!> @todo 
     131!> - use create_bathy_check_depth as in create_boundary 
     132!> - use create_bathy_check_time  as in create_boundary 
     133!> - check tl_multi is not empty 
     134!> 
    122135!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    123136!---------------------------------------------------------------------- 
     
    482495   ENDIF 
    483496 
     497   ! use additional request 
    484498   DO jk=1,tl_multi%i_nvar 
     499 
     500         ! change unit and apply factor 
     501         CALL var_chg_unit(tl_var(jk)) 
     502 
    485503         ! forced min and max value 
    486504         CALL var_limit_value(tl_var(jk)) 
     
    557575 
    558576   ! add other variables 
    559    DO jk=1,tl_multi%i_nvar 
     577   DO jk=tl_multi%i_nvar,1,-1 
    560578      CALL file_add_var(tl_fileout, tl_var(jk)) 
    561579      CALL var_clean(tl_var(jk)) 
     
    623641   !> 
    624642   !> @author J.Paul 
    625    !> - November, 2013- Initial Version 
     643   !> @date November, 2013 - Initial Version 
    626644   !> 
    627645   !> @param[in] td_var    variable structure  
     
    759777   !>  
    760778   !> @author J.Paul 
    761    !> - November, 2013- Initial Version 
     779   !> @date November, 2013 - Initial Version 
    762780   !> 
    763781   !> @param[in] td_var    variable structure  
     
    878896   !>  
    879897   !> @author J.Paul 
    880    !> - November, 2013- Initial Version 
     898   !> @date November, 2013 - Initial Version 
    881899   !> 
    882900   !> @param[in] td_var    variable structure 
     
    897915      IMPLICIT NONE 
    898916      ! Argument 
    899       TYPE(TVAR) , INTENT(IN) :: td_var   
    900       TYPE(TMPP) , INTENT(IN) :: td_mpp  
    901       INTEGER(i4), INTENT(IN) :: id_imin 
    902       INTEGER(i4), INTENT(IN) :: id_imax 
    903       INTEGER(i4), INTENT(IN) :: id_jmin 
    904       INTEGER(i4), INTENT(IN) :: id_jmax 
     917      TYPE(TVAR)                 , INTENT(IN) :: td_var   
     918      TYPE(TMPP)                 , INTENT(IN) :: td_mpp  
     919      INTEGER(i4)                , INTENT(IN) :: id_imin 
     920      INTEGER(i4)                , INTENT(IN) :: id_imax 
     921      INTEGER(i4)                , INTENT(IN) :: id_jmin 
     922      INTEGER(i4)                , INTENT(IN) :: id_jmax 
    905923      INTEGER(i4), DIMENSION(:,:), INTENT(IN) :: id_offset 
    906924      INTEGER(i4), DIMENSION(:)  , INTENT(IN) :: id_rho 
     
    9891007   !>  
    9901008   !> @author J.Paul 
    991    !> - November, 2013- Initial Version 
     1009   !> @date November, 2013 - Initial Version 
    9921010   !> 
    9931011   !> @param[inout] td_var variable structure  
     
    10731091 
    10741092      ! extrapolate variable 
    1075       CALL extrap_fill_value( td_var, id_offset=id_offset(:,:), & 
    1076       &                               id_rho=id_rho(:),         & 
    1077       &                               id_iext=il_iext, id_jext=il_jext ) 
     1093      CALL extrap_fill_value( td_var ) 
    10781094 
    10791095      ! interpolate Bathymetry 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/SIREN/src/create_boundary.f90

    r5581 r5653  
    2323!>    ./SIREN/bin/create_boundary create_boundary.nam 
    2424!> @endcode 
    25 !>     
     25!>  <br/>  
     26!> \image html  boundary_NEATL36_70.png  
     27!> \image latex boundary_NEATL36_70.png 
     28!> 
     29!> @note  
     30!>    you could find a template of the namelist in templates directory. 
     31!> 
    2632!>    create_boundary.nam comprise 9 namelists:<br/> 
    2733!>       - logger namelist (namlog) 
     
    4248!>       - cn_logfile   : log filename 
    4349!>       - cn_verbosity : verbosity ('trace','debug','info', 
    44 !> 'warning','error','fatal') 
     50!> 'warning','error','fatal','none') 
    4551!>       - in_maxerror  : maximum number of error allowed 
    4652!> 
     
    7985!>    * _variable namelist (namvar)_:<br/> 
    8086!>       - cn_varinfo : list of variable and extra information about request(s) 
    81 !> to be used.<br/> 
     87!>          to be used (separated by ',').<br/> 
    8288!>          each elements of *cn_varinfo* is a string character.<br/> 
    8389!>          it is composed of the variable name follow by ':',  
    8490!>          then request(s) to be used on this variable.<br/>  
    8591!>          request could be: 
    86 !>             - interpolation method 
    87 !>             - extrapolation method 
    88 !>             - filter method 
     92!>             - int = interpolation method 
     93!>             - ext = extrapolation method 
     94!>             - flt = filter method 
     95!>             - unt = new units 
     96!>             - unf = unit scale factor (linked to new units) 
    8997!> 
    9098!>                requests must be separated by ';'.<br/> 
     
    94102!>          @ref extrap and @ref filter.<br/> 
    95103!> 
    96 !>          Example: 'votemper:linear;hann;dist_weight', 'vosaline:cubic' 
     104!>          Example: 'votemper:int=linear;flt=hann;ext=dist_weight', 'vosaline:int=cubic' 
    97105!>          @note  
    98106!>             If you do not specify a method which is required,  
     
    136144!>          segments are separated by '|'.<br/> 
    137145!>          each segments of the boundary is composed of: 
    138 !>             - orthogonal indice (.ie. for north boundary, 
    139 !>             J-indice where boundary are).  
    140 !>             - first indice of boundary (I-indice for north boundary)  
    141 !>             - last  indice of boundary (I-indice for north boundary)<br/> 
    142 !>                indices must be separated by ',' .<br/> 
     146!>             - indice of velocity (orthogonal to boundary .ie.  
     147!>                for north boundary, J-indice).  
     148!>             - indice of segemnt start (I-indice for north boundary)  
     149!>             - indice of segment end  (I-indice for north boundary)<br/> 
     150!>                indices must be separated by ':' .<br/> 
    143151!>             - optionally, boundary size could be added between '(' and ')'  
    144152!>             in the first segment defined. 
     
    147155!> 
    148156!>          Examples: 
    149 !>             - cn_north='index1,first1,last1(width)' 
    150 !>             - cn_north='index1(width),first1,last1|index2,first2,last2' 
    151 !> 
    152 !>          \image html  boundary_50.png  
    153 !>          \image latex boundary_50.png 
    154 !> 
     157!>             - cn_north='index1,first1:last1(width)' 
     158!>             - cn_north='index1(width),first1:last1|index2,first2:last2' 
     159!>             \image html  boundary_50.png  
     160!>             \image latex boundary_50.png 
    155161!>       - cn_south  : south boundary indices on fine grid 
    156162!>       - cn_east   : east  boundary indices on fine grid 
    157163!>       - cn_west   : west  boundary indices on fine grid 
    158164!>       - ln_oneseg : use only one segment for each boundary or not 
    159 !>       - in_extrap : number of mask point to be extrapolated 
    160 !> 
    161 !>   * _output namelist (namout)_:<br/> 
     165!> 
     166!>    * _output namelist (namout)_:<br/> 
    162167!>       - cn_fileout : fine grid boundary basename 
    163168!>         (cardinal and segment number will be automatically added) 
     169!>       - dn_dayofs  : date offset in day (change only ouput file name) 
     170!>       - ln_extrap  : extrapolate land point or not 
     171!> 
     172!>          Examples:  
     173!>             - cn_fileout=boundary.nc<br/> 
     174!>                if time_counter (16/07/2015 00h) is read on input file (see varfile),  
     175!>                west boundary will be named boundary_west_y2015m07d16 
     176!>             - dn_dayofs=-2.<br/> 
     177!>                if you use day offset you get boundary_west_y2015m07d14 
     178!>        
    164179!> 
    165180!> @author J.Paul 
     
    169184!> - add header for user 
    170185!> - take into account grid point to compue boundaries 
    171 !> - reorder output dimension for north and south boundaries  
     186!> - reorder output dimension for north and south boundaries 
     187!> @date June, 2015 
     188!> - extrapolate all land points, and add ln_extrap in namelist. 
     189!> - allow to change unit. 
     190!> @date July, 2015 
     191!> - add namelist parameter to shift date of output file name.   
    172192!> 
    173193!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    191211   USE dom                             ! domain manager 
    192212   USE grid                            ! grid manager 
    193    USE vgrid                           ! vartical grid manager 
     213   USE vgrid                           ! vertical grid manager 
    194214   USE extrap                          ! extrapolation manager 
    195215   USE interp                          ! interpolation manager 
     
    213233   INTEGER(i4)                                        :: il_status 
    214234   INTEGER(i4)                                        :: il_fileid 
    215    INTEGER(i4)                                        :: il_dim 
    216235   INTEGER(i4)                                        :: il_imin0 
    217236   INTEGER(i4)                                        :: il_imax0 
     
    239258 
    240259   TYPE(TDIM)       , DIMENSION(ip_maxdim)            :: tl_dim 
     260 
     261   TYPE(TDATE)                                        :: tl_date 
    241262    
    242263   TYPE(TBDY)       , DIMENSION(ip_ncard)             :: tl_bdy 
     
    265286   ! namelist variable 
    266287   ! namlog 
    267    CHARACTER(LEN=lc)                       :: cn_logfile = 'create_boundary.log'  
    268    CHARACTER(LEN=lc)                       :: cn_verbosity = 'warning'  
    269    INTEGER(i4)                             :: in_maxerror = 5 
     288   CHARACTER(LEN=lc)  :: cn_logfile = 'create_boundary.log'  
     289   CHARACTER(LEN=lc)  :: cn_verbosity = 'warning'  
     290   INTEGER(i4)        :: in_maxerror = 5 
    270291 
    271292   ! namcfg 
    272    CHARACTER(LEN=lc)                       :: cn_varcfg = 'variable.cfg'  
     293   CHARACTER(LEN=lc)  :: cn_varcfg = 'variable.cfg'  
    273294 
    274295   ! namcrs 
    275    CHARACTER(LEN=lc)                       :: cn_coord0 = ''  
    276    INTEGER(i4)                             :: in_perio0 = -1 
     296   CHARACTER(LEN=lc)  :: cn_coord0 = ''  
     297   INTEGER(i4)        :: in_perio0 = -1 
    277298 
    278299   ! namfin 
    279    CHARACTER(LEN=lc)                       :: cn_coord1 = ''  
    280    CHARACTER(LEN=lc)                       :: cn_bathy1 = ''  
    281    INTEGER(i4)                             :: in_perio1 = -1 
     300   CHARACTER(LEN=lc)  :: cn_coord1 = ''  
     301   CHARACTER(LEN=lc)  :: cn_bathy1 = ''  
     302   INTEGER(i4)        :: in_perio1 = -1 
    282303 
    283304   !namzgr 
    284    INTEGER(i4)                             :: in_nlevel = 75 
     305   REAL(dp)          :: dn_pp_to_be_computed = 0._dp 
     306   REAL(dp)          :: dn_ppsur     = -3958.951371276829_dp 
     307   REAL(dp)          :: dn_ppa0      =   103.9530096000000_dp 
     308   REAL(dp)          :: dn_ppa1      =     2.4159512690000_dp 
     309   REAL(dp)          :: dn_ppa2      =   100.7609285000000_dp 
     310   REAL(dp)          :: dn_ppkth     =    15.3510137000000_dp 
     311   REAL(dp)          :: dn_ppkth2    =    48.0298937200000_dp 
     312   REAL(dp)          :: dn_ppacr     =     7.0000000000000_dp 
     313   REAL(dp)          :: dn_ppacr2    =    13.000000000000_dp 
     314   REAL(dp)          :: dn_ppdzmin   = 6._dp 
     315   REAL(dp)          :: dn_pphmax    = 5750._dp 
     316   INTEGER(i4)       :: in_nlevel    = 75 
     317 
     318   !namzps 
     319   REAL(dp)          :: dn_e3zps_min = 25._dp 
     320   REAL(dp)          :: dn_e3zps_rat = 0.2_dp 
    285321 
    286322   ! namvar 
     
    289325 
    290326   ! namnst 
    291    INTEGER(i4)                             :: in_rhoi  = 0 
    292    INTEGER(i4)                             :: in_rhoj  = 0 
     327   INTEGER(i4)       :: in_rhoi  = 0 
     328   INTEGER(i4)       :: in_rhoj  = 0 
    293329 
    294330   ! nambdy 
    295    LOGICAL                                 :: ln_north   = .TRUE. 
    296    LOGICAL                                 :: ln_south   = .TRUE. 
    297    LOGICAL                                 :: ln_east    = .TRUE. 
    298    LOGICAL                                 :: ln_west    = .TRUE. 
    299    CHARACTER(LEN=lc)                       :: cn_north   = '' 
    300    CHARACTER(LEN=lc)                       :: cn_south   = '' 
    301    CHARACTER(LEN=lc)                       :: cn_east    = '' 
    302    CHARACTER(LEN=lc)                       :: cn_west    = '' 
    303    LOGICAL                                 :: ln_oneseg  = .TRUE. 
    304    INTEGER(i4)                             :: in_extrap  = 0 
     331   LOGICAL           :: ln_north   = .TRUE. 
     332   LOGICAL           :: ln_south   = .TRUE. 
     333   LOGICAL           :: ln_east    = .TRUE. 
     334   LOGICAL           :: ln_west    = .TRUE. 
     335   CHARACTER(LEN=lc) :: cn_north   = '' 
     336   CHARACTER(LEN=lc) :: cn_south   = '' 
     337   CHARACTER(LEN=lc) :: cn_east    = '' 
     338   CHARACTER(LEN=lc) :: cn_west    = '' 
     339   LOGICAL           :: ln_oneseg  = .TRUE. 
    305340 
    306341   ! namout 
    307    CHARACTER(LEN=lc)                       :: cn_fileout = 'boundary.nc'  
     342   CHARACTER(LEN=lc) :: cn_fileout = 'boundary.nc'  
     343   REAL(dp)          :: dn_dayofs  = 0._dp 
     344   LOGICAL           :: ln_extrap  = .FALSE. 
    308345   !------------------------------------------------------------------- 
    309346 
     
    319356   &  cn_coord0,     &  !< coordinate file 
    320357   &  in_perio0         !< periodicity index 
    321     
     358  
    322359   NAMELIST /namfin/ &  !< fine grid namelist 
    323360   &  cn_coord1,     &  !< coordinate file 
     
    326363  
    327364   NAMELIST /namzgr/ & 
    328    &  in_nlevel 
     365   &  dn_pp_to_be_computed, & 
     366   &  dn_ppsur,     & 
     367   &  dn_ppa0,      & 
     368   &  dn_ppa1,      & 
     369   &  dn_ppa2,      & 
     370   &  dn_ppkth,     & 
     371   &  dn_ppkth2,    & 
     372   &  dn_ppacr,     & 
     373   &  dn_ppacr2,    & 
     374   &  dn_ppdzmin,   & 
     375   &  dn_pphmax,    & 
     376   &  in_nlevel         !< number of vertical level 
     377 
     378   NAMELIST /namzps/ & 
     379   &  dn_e3zps_min, & 
     380   &  dn_e3zps_rat 
    329381 
    330382   NAMELIST /namvar/ &  !< variable namelist 
    331383   &  cn_varinfo,    &  !< list of variable and method to apply on. (ex: 'votemper:linear','vosaline:cubic' ) 
    332384   &  cn_varfile        !< list of variable and file where find it. (ex: 'votemper:GLORYS_gridT.nc' )  
    333     
     385  
    334386   NAMELIST /namnst/ &  !< nesting namelist 
    335387   &  in_rhoi,       &  !< refinement factor in i-direction 
     
    345397   &  cn_east ,      &  !< east  boundary indices on fine grid 
    346398   &  cn_west ,      &  !< west  boundary indices on fine grid 
    347    &  ln_oneseg,     &  !< use only one segment for each boundary or not 
    348    &  in_extrap         !< number of mask point to be extrapolated 
     399   &  ln_oneseg         !< use only one segment for each boundary or not 
    349400 
    350401   NAMELIST /namout/ &  !< output namelist 
    351    &  cn_fileout    !< fine grid boundary file basename    
     402   &  cn_fileout,    &  !< fine grid boundary file basename    
     403   &  dn_dayofs,     &  !< date offset in day (change only ouput file name) 
     404   &  ln_extrap         !< extrapolate or not 
    352405   !------------------------------------------------------------------- 
    353406 
     
    448501   ! check 
    449502   ! check output file do not already exist 
     503   ! WARNING: do not work when use time to create output file name 
    450504   DO jk=1,ip_ncard 
    451505      cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
    452506      &                                TRIM(cp_card(jk)), 1 ) 
     507      INQUIRE(FILE=TRIM(cl_bdyout), EXIST=ll_exist) 
     508      IF( ll_exist )THEN 
     509         CALL logger_fatal("CREATE BOUNDARY: output file "//TRIM(cl_bdyout)//& 
     510         &  " already exist.") 
     511      ENDIF 
     512 
     513      cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
     514      &                                TRIM(cp_card(jk)) ) 
    453515      INQUIRE(FILE=TRIM(cl_bdyout), EXIST=ll_exist) 
    454516      IF( ll_exist )THEN 
     
    490552 
    491553   CALL iom_mpp_open(tl_bathy1) 
    492     
     554  
    493555   tl_var1=iom_mpp_read_var(tl_bathy1,'Bathymetry') 
    494     
     556  
    495557   CALL iom_mpp_close(tl_bathy1) 
    496558 
     559   ! get boundaries indices 
    497560   tl_bdy(:)=boundary_init(tl_var1, ln_north, ln_south, ln_east, ln_west, & 
    498561   &                                cn_north, cn_south, cn_east, cn_west, & 
     
    505568   tl_level(:)=vgrid_get_level(tl_bathy1, cl_namelist ) 
    506569 
    507    ! get coordinate on each segment of each boundary 
     570   ! get coordinate for each segment of each boundary 
    508571   ALLOCATE( tl_segdom1(ip_npoint,ip_maxseg,ip_ncard) ) 
    509572   ALLOCATE( tl_seglvl1(ip_npoint,ip_maxseg,ip_ncard) ) 
    510     
     573  
    511574   DO jl=1,ip_ncard 
    512575      IF( tl_bdy(jl)%l_use )THEN 
     
    516579            tl_segdom1(:,jk,jl)=create_boundary_get_dom( tl_bathy1, & 
    517580            &                                            tl_bdy(jl), jk ) 
     581 
     582            IF( .NOT. ln_extrap )THEN 
     583               ! get fine grid level 
     584               tl_seglvl1(:,jk,jl)= & 
     585                  & create_boundary_get_level( tl_level(:), & 
     586                  &                            tl_segdom1(:,jk,jl)) 
     587            ENDIF 
    518588 
    519589            ! add extra band to fine grid domain (if possible) 
     
    523593               &                  il_rho(jp_I), il_rho(jp_J)) 
    524594            ENDDO 
    525  
    526             ! get fine grid level 
    527             tl_seglvl1(:,jk,jl)=create_boundary_get_level( tl_level(:), & 
    528                                                            tl_segdom1(:,jk,jl)) 
    529595 
    530596         ENDDO 
     
    594660                        &                          in_nlevel ) 
    595661 
    596                         ! use mask 
    597                         CALL create_boundary_use_mask( tl_segvar1(jvar,jk,jl), & 
    598                         &                         tl_seglvl1(jpoint,jk,jl)) 
    599  
    600662                        !del extra 
    601663                        CALL dom_del_extra( tl_segvar1(jvar,jk,jl), & 
     
    654716                  IF( tl_bdy(jl)%l_use )THEN 
    655717                      
    656                      WRITE(*,'(2x,a,a)') 'work on '//TRIM(tl_bdy(jl)%c_card)//' boundary' 
     718                     WRITE(*,'(2x,a,a)') 'work on '//TRIM(tl_bdy(jl)%c_card)//& 
     719                        &  ' boundary' 
    657720                     DO jk=1,tl_bdy(jl)%i_nseg 
    658721                        ! compute domain on fine grid 
     
    662725                            
    663726                           cl_name=tl_multi%t_mpp(ji)%t_proc(1)%t_var(jj)%c_name 
    664                            WRITE(*,'(4x,a,a)') "work on variable "//TRIM(cl_name) 
     727                           WRITE(*,'(4x,a,a)') "work on (extract) variable "//& 
     728                              &  TRIM(cl_name) 
    665729 
    666730                           cl_point=tl_multi%t_mpp(ji)%t_proc(1)%t_var(jj)%c_point 
     
    678742 
    679743                           tl_dom1=dom_copy(tl_segdom1(jpoint,jk,jl)) 
    680                            tl_lvl1=var_copy(tl_seglvl1(jpoint,jk,jl)) 
    681744 
    682745                           ! open mpp files 
     
    687750                           &                     tl_mpp, TRIM(cl_name), tl_dom1) 
    688751 
    689                            ! use mask 
    690                            CALL create_boundary_use_mask( & 
    691                            &                 tl_segvar1(jvar+jj,jk,jl), tl_lvl1) 
    692  
    693752                           ! del extra point 
    694753                           CALL dom_del_extra( tl_segvar1(jvar+jj,jk,jl), & 
     
    699758 
    700759                           ! add attribute to variable 
    701                            tl_att=att_init('src_file',TRIM(fct_basename(tl_mpp%c_name))) 
     760                           tl_att=att_init('src_file', & 
     761                              &  TRIM(fct_basename(tl_mpp%c_name))) 
    702762                           CALL var_move_att(tl_segvar1(jvar+jj,jk,jl), tl_att) 
    703763 
    704                            tl_att=att_init('src_i_indices',(/tl_dom1%i_imin, tl_dom1%i_imax/)) 
     764                           tl_att=att_init('src_i_indices', & 
     765                              &  (/tl_dom1%i_imin, tl_dom1%i_imax/)) 
    705766                           CALL var_move_att(tl_segvar1(jvar+jj,jk,jl), tl_att) 
    706767 
    707                            tl_att=att_init('src_j_indices',(/tl_dom1%i_jmin, tl_dom1%i_jmax/)) 
     768                           tl_att=att_init('src_j_indices', & 
     769                              &  (/tl_dom1%i_jmin, tl_dom1%i_jmax/)) 
    708770                           CALL var_move_att(tl_segvar1(jvar+jj,jk,jl), tl_att) 
    709771 
     
    736798                  IF( tl_bdy(jl)%l_use )THEN 
    737799 
    738                      WRITE(*,'(2x,a,a)') 'work on '//TRIM(tl_bdy(jl)%c_card)//' boundary' 
     800                     WRITE(*,'(2x,a,a)') 'work on '//TRIM(tl_bdy(jl)%c_card)//& 
     801                        &  ' boundary' 
    739802                     DO jk=1,tl_bdy(jl)%i_nseg 
    740803                         
    741804                        ! for each variable of this file 
    742805                        DO jj=1,tl_multi%t_mpp(ji)%t_proc(1)%i_nvar 
    743                             
    744                            WRITE(*,'(4x,a,a)') "work on variable "//& 
     806  
     807                           WRITE(*,'(4x,a,a)') "work on (interp) variable "//& 
    745808                           &  TRIM(tl_multi%t_mpp(ji)%t_proc(1)%t_var(jj)%c_name) 
    746809 
     
    759822 
    760823                           tl_dom1=dom_copy(tl_segdom1(jpoint,jk,jl)) 
    761                            tl_lvl1=var_copy(tl_seglvl1(jpoint,jk,jl)) 
    762824 
    763825                           CALL create_boundary_get_coord( tl_coord1, tl_dom1, & 
     
    795857                           &                 il_jmin0, il_jmax0 ) 
    796858 
    797                            ! add extra band (if possible) to compute interpolation 
     859                           ! add extra band (if possible) to compute  
     860                           ! interpolation 
    798861                           CALL dom_add_extra(tl_dom0) 
    799862 
     
    815878                           CALL dom_del_extra( tl_segvar1(jvar+jj,jk,jl), & 
    816879                           &                   tl_dom0, il_rho(:) ) 
    817  
    818                            ! use mask 
    819                            CALL create_boundary_use_mask( & 
    820                            &     tl_segvar1(jvar+jj,jk,jl), tl_lvl1) 
    821880 
    822881                           ! del extra point on fine grid 
     
    889948 
    890949   IF( jvar /= tl_multi%i_nvar )THEN 
    891       CALL logger_error("CREATE BOUNDARY: it seems some variable can not be read") 
     950      CALL logger_error("CREATE BOUNDARY: it seems some variable "//& 
     951         &  "can not be read") 
    892952   ENDIF 
    893  
    894    CALL var_clean(tl_seglvl1(:,:,:)) 
    895    DEALLOCATE( tl_seglvl1 ) 
    896953 
    897954   ! write file for each segment of each boundary 
    898955   DO jl=1,ip_ncard 
    899956      IF( tl_bdy(jl)%l_use )THEN 
    900  
    901          SELECT CASE(TRIM(tl_bdy(jk)%c_card)) 
    902          CASE('north','south') 
    903             il_dim=1 
    904          CASE('east','west') 
    905             il_dim=2 
    906          END SELECT    
    907957 
    908958         DO jk=1,tl_bdy(jl)%i_nseg 
     
    911961            &                               'T', tl_lon1, tl_lat1 ) 
    912962 
     963            ! force to use nav_lon, nav_lat as variable name 
     964            tl_lon1%c_name='nav_lon' 
     965            tl_lat1%c_name='nav_lat' 
     966 
    913967            ! del extra point on fine grid 
    914968            CALL dom_del_extra( tl_lon1, tl_segdom1(jp_T,jk,jl) ) 
     
    924978            CALL boundary_swap(tl_lat1, tl_bdy(jl)) 
    925979            DO jvar=1,tl_multi%i_nvar 
    926                CALL boundary_swap(tl_segvar1(jvar,jk,jl), tl_bdy(jl)) 
    927980 
    928981               ! use additional request 
     982               ! change unit and apply factor 
     983               CALL var_chg_unit(tl_segvar1(jvar,jk,jl)) 
     984 
    929985               ! forced min and max value 
    930986               CALL var_limit_value(tl_segvar1(jvar,jk,jl)) 
     
    933989               CALL filter_fill_value(tl_segvar1(jvar,jk,jl)) 
    934990 
    935                ! extrapolate 
    936                CALL extrap_fill_value( tl_segvar1(jvar,jk,jl), & 
    937                &                       id_iext=in_extrap,      & 
    938                &                       id_jext=in_extrap,      & 
    939                &                       id_kext=in_extrap ) 
     991               IF( .NOT. ln_extrap )THEN 
     992                  ! use mask 
     993                  SELECT CASE(TRIM(tl_segvar1(jvar,jk,jl)%c_point)) 
     994                  CASE DEFAULT !'T' 
     995                     jpoint=jp_T 
     996                  CASE('U') 
     997                     jpoint=jp_U 
     998                  CASE('V') 
     999                     jpoint=jp_V 
     1000                  CASE('F') 
     1001                     jpoint=jp_F 
     1002                  END SELECT 
     1003 
     1004                  CALL create_boundary_use_mask(tl_segvar1(jvar,jk,jl), & 
     1005                  &                             tl_seglvl1(jpoint,jk,jl)) 
     1006               ENDIF 
     1007 
     1008               ! swap dimension order 
     1009               CALL boundary_swap(tl_segvar1(jvar,jk,jl), tl_bdy(jl)) 
    9401010 
    9411011            ENDDO 
     
    9441014            ! create file structure 
    9451015            ! set file namearray of level variable structure 
    946             IF( ASSOCIATED(tl_time%d_value) )THEN 
    947                cl_fmt="('y',i0.4,'m',i0.2,'d',i0.2)" 
    948                cl_date=date_print( var_to_date(tl_time), cl_fmt )  
    949  
    950                cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
    951                &                                TRIM(tl_bdy(jl)%c_card), jk, TRIM(cl_date) ) 
     1016            IF( tl_bdy(jl)%i_nseg > 1 )THEN 
     1017               IF( ASSOCIATED(tl_time%d_value) )THEN 
     1018                  cl_fmt="('y',i0.4,'m',i0.2,'d',i0.2)" 
     1019                  tl_date=var_to_date(tl_time) 
     1020                  tl_date=tl_date+dn_dayofs 
     1021                  cl_date=date_print( tl_date, cl_fmt )  
     1022 
     1023                  cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
     1024                  &                                TRIM(tl_bdy(jl)%c_card), jk,& 
     1025                  &                                cd_date=TRIM(cl_date) ) 
     1026               ELSE 
     1027                  cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
     1028                  &                                TRIM(tl_bdy(jl)%c_card), jk ) 
     1029               ENDIF 
    9521030            ELSE 
    953                cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
    954                &                                TRIM(tl_bdy(jl)%c_card), jk ) 
     1031               IF( ASSOCIATED(tl_time%d_value) )THEN 
     1032                  cl_fmt="('y',i0.4,'m',i0.2,'d',i0.2)" 
     1033                  tl_date=var_to_date(tl_time) 
     1034                  tl_date=tl_date+dn_dayofs 
     1035                  cl_date=date_print( tl_date, cl_fmt ) 
     1036 
     1037                  cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
     1038                  &                                TRIM(tl_bdy(jl)%c_card), & 
     1039                  &                                cd_date=TRIM(cl_date) ) 
     1040               ELSE 
     1041                  cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
     1042                  &                                TRIM(tl_bdy(jl)%c_card) ) 
     1043               ENDIF 
    9551044            ENDIF 
    9561045            !  
     
    9601049            tl_dim(:)=var_max_dim(tl_segvar1(:,jk,jl)) 
    9611050 
    962             CALL dim_unorder(tl_dim(:)) 
    9631051            SELECT CASE(TRIM(tl_bdy(jl)%c_card)) 
    9641052               CASE DEFAULT ! 'north','south' 
    9651053                  cl_dimorder='xyzt' 
    966                   CALL dim_reorder(tl_dim(:),TRIM(cl_dimorder)) 
    9671054               CASE('east','west') 
    9681055                  cl_dimorder='yxzt' 
    969                   CALL dim_reorder(tl_dim(:),TRIM(cl_dimorder)) 
    970                   ! reorder coordinates dimension 
    971                   CALL var_reorder(tl_lon1,TRIM(cl_dimorder)) 
    972                   CALL var_reorder(tl_lat1,TRIM(cl_dimorder)) 
    973                   ! reorder other variable dimension 
    974                   DO jvar=1,tl_multi%i_nvar 
    975                      CALL var_reorder(tl_segvar1(jvar,jk,jl),TRIM(cl_dimorder)) 
    976                   ENDDO 
    9771056            END SELECT 
    9781057 
     
    9921071            ENDIF 
    9931072             
     1073 
     1074 
    9941075            IF( tl_dim(3)%l_use )THEN 
    995                ! add depth 
    996                CALL file_add_var(tl_fileout, tl_depth) 
     1076               IF( ASSOCIATED(tl_depth%d_value) )THEN 
     1077                  ! add depth 
     1078                  CALL file_add_var(tl_fileout, tl_depth) 
     1079               ENDIF 
    9971080            ENDIF 
    9981081 
    9991082            IF( tl_dim(4)%l_use )THEN 
    1000                ! add time 
    1001                CALL file_add_var(tl_fileout, tl_time) 
     1083               IF( ASSOCIATED(tl_time%d_value) )THEN 
     1084                  ! add time 
     1085                  CALL file_add_var(tl_fileout, tl_time) 
     1086               ENDIF 
    10021087            ENDIF 
    10031088 
    10041089            ! add other variable 
    1005             DO jvar=1,tl_multi%i_nvar 
     1090            DO jvar=tl_multi%i_nvar,1,-1 
    10061091               CALL file_add_var(tl_fileout, tl_segvar1(jvar,jk,jl)) 
    10071092               CALL var_clean(tl_segvar1(jvar,jk,jl)) 
     
    10481133 
    10491134            ! write file 
    1050             CALL iom_write_file(tl_fileout) 
     1135            CALL iom_write_file(tl_fileout, cl_dimorder) 
    10511136 
    10521137            ! close file 
     
    10661151   DEALLOCATE( tl_segdom1 ) 
    10671152   DEALLOCATE( tl_segvar1 ) 
     1153   CALL var_clean(tl_seglvl1(:,:,:)) 
     1154   DEALLOCATE( tl_seglvl1 ) 
     1155 
    10681156 
    10691157   CALL mpp_clean(tl_coord1) 
     
    10821170   !>  
    10831171   !> @author J.Paul 
    1084    !> - November, 2013- Initial Version 
     1172   !> @date November, 2013 - Initial Version 
    10851173   !> @date September, 2014 
    10861174   !> - take into account grid point to compute boundary indices 
     
    11861274   !------------------------------------------------------------------- 
    11871275   !> @brief 
    1188    !> This subroutine get coordinates over boudnary domain 
     1276   !> This subroutine get coordinates over boundary domain 
    11891277   !>  
    11901278   !> @author J.Paul 
    1191    !> - November, 2013- Initial Version 
    1192    !> @date September, 2014 - take into account grid point 
     1279   !> @date November, 2013 - Initial Version 
     1280   !> @date September, 2014  
     1281   !> - take into account grid point 
    11931282   !> 
    11941283   !> @param[in] td_coord1 coordinates file structure 
     
    12371326   !------------------------------------------------------------------- 
    12381327   !> @brief 
    1239    !> This subroutine interpolate variable over boundary 
     1328   !> This subroutine interpolate variable on boundary 
    12401329   !>  
    12411330   !> @details  
    12421331   !> 
    12431332   !> @author J.Paul 
    1244    !> - Nov, 2013- Initial Version 
     1333   !> @date November, 2013 - Initial Version 
    12451334   !> 
    12461335   !> @param[inout] td_var variable structure  
     
    12961385 
    12971386      ! extrapolate variable 
    1298       CALL extrap_fill_value( td_var, id_iext=il_iext, id_jext=il_jext ) 
     1387      CALL extrap_fill_value( td_var ) 
    12991388 
    13001389      ! interpolate Bathymetry 
     
    13031392 
    13041393      ! remove extraband 
    1305       CALL extrap_del_extrabands(td_var, il_iext*id_rho(jp_I), il_jext*id_rho(jp_J)) 
     1394      CALL extrap_del_extrabands(td_var, il_iext*id_rho(jp_I), & 
     1395         &                               il_jext*id_rho(jp_J)) 
    13061396 
    13071397   END SUBROUTINE create_boundary_interp 
     
    13171407   !> 
    13181408   !> @author J.Paul 
    1319    !> - November, 2013- Initial Version 
     1409   !> @date November, 2013 - Initial Version 
    13201410   !> 
    13211411   !> @param[in] td_var    variable structure  
     
    14221512   !> 
    14231513   !> @author J.Paul 
    1424    !> - November, 2013- Initial Version 
     1514   !> @date November, 2013 - Initial Version 
    14251515   !> 
    14261516   !> @param[inout] td_var variable structure  
     
    14751565   !> 
    14761566   !> @author J.Paul 
    1477    !> - November, 2013- Initial Version 
     1567   !> @date November, 2013 - Initial Version 
    14781568   !> 
    14791569   !> @param[in] td_level  array of level variable structure 
     
    15371627   !> 
    15381628   !> @author J.Paul 
    1539    !> - November, 2014- Initial Version 
     1629   !> @date November, 2014 - Initial Version 
    15401630   !> 
    15411631   !> @param[in] td_mpp       mpp structure 
     
    15881678   !> 
    15891679   !> @author J.Paul 
    1590    !> - November, 2014- Initial Version 
     1680   !> @date November, 2014 - Initial Version 
    15911681   !> 
    15921682   !> @param[in] td_mpp      mpp structure 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/SIREN/src/create_coord.f90

    r5581 r5653  
    2424!> @endcode 
    2525!>     
     26!> @note  
     27!>    you could find a template of the namelist in templates directory. 
     28!> 
    2629!>    create_coord.nam comprise 6 namelists:<br/> 
    2730!>       - logger namelist (namlog) 
     
    3942!>       - cn_logfile   : log filename 
    4043!>       - cn_verbosity : verbosity ('trace','debug','info', 
    41 !> 'warning','error','fatal') 
     44!> 'warning','error','fatal','none') 
    4245!>       - in_maxerror  : maximum number of error allowed 
    4346!> 
     
    5457!>       - cn_varinfo : list of variable and extra information about request(s) 
    5558!> to be used.<br/> 
    56 !>          each elements of *cn_varinfo* is a string character.<br/> 
     59!>          each elements of *cn_varinfo* is a string character  
     60!>          (separated by ',').<br/> 
    5761!>          it is composed of the variable name follow by ':',  
    5862!>          then request(s) to be used on this variable.<br/>  
    5963!>          request could be: 
    60 !>             - interpolation method 
    61 !>             - extrapolation method 
    62 !>             - filter method 
     64!>             - int = interpolation method 
     65!>             - ext = extrapolation method 
     66!>             - flt = filter method 
    6367!>  
    6468!>                requests must be separated by ';' .<br/> 
     
    6872!>          @ref extrap and @ref filter modules.<br/> 
    6973!> 
    70 !>          Example: 'votemper: linear; hann(2,3); dist_weight',  
    71 !>          'vosaline: cubic'<br/> 
     74!>          Example: 'votemper: int=linear; flt=hann(2,3); ext=dist_weight',  
     75!>          'vosaline: int=cubic'<br/> 
    7276!>          @note  
    7377!>             If you do not specify a method which is required,  
     
    9094!> 
    9195!>    * _output namelist (namout)_: 
    92 !>       - cn_fileout : output coordinate file 
     96!>       - cn_fileout : output coordinate file name 
    9397!> 
    9498!> @author J.Paul 
     
    152156   TYPE(TFILE)                                          :: tl_fileout 
    153157 
    154    ! check  
    155 !   INTEGER(i4)                                          :: il_imin0 
    156 !   INTEGER(i4)                                          :: il_imax0 
    157 !   INTEGER(i4)                                          :: il_jmin0 
    158 !   INTEGER(i4)                                          :: il_jmax0 
    159 !   INTEGER(i4)      , DIMENSION(2,2)                    :: il_ind2 
    160 !   TYPE(TMPP)                                           :: tl_mppout 
    161  
    162158   ! loop indices 
    163159   INTEGER(i4) :: ji 
     
    165161 
    166162   ! namelist variable 
     163   ! namlog 
    167164   CHARACTER(LEN=lc) :: cn_logfile = 'create_coord.log'  
    168165   CHARACTER(LEN=lc) :: cn_verbosity = 'warning'  
    169166   INTEGER(i4)       :: in_maxerror = 5 
    170167 
     168   ! namcfg 
     169   CHARACTER(LEN=lc) :: cn_varcfg = '../cfg/variable.cfg'  
     170 
     171   ! namcrs 
    171172   CHARACTER(LEN=lc) :: cn_coord0 = ''  
    172173   INTEGER(i4)       :: in_perio0 = -1 
    173174 
    174    CHARACTER(LEN=lc) :: cn_varcfg = '../cfg/variable.cfg'  
    175  
     175   ! namvar 
    176176   CHARACTER(LEN=lc), DIMENSION(ip_maxvar) :: cn_varinfo = '' 
    177177 
     178   !namnst 
    178179   INTEGER(i4)       :: in_imin0 = 0 
    179180   INTEGER(i4)       :: in_imax0 = 0 
     
    183184   INTEGER(i4)       :: in_rhoj  = 1 
    184185 
     186   !namout 
    185187   CHARACTER(LEN=lc) :: cn_fileout= 'coord_fine.nc' 
    186188   !------------------------------------------------------------------- 
     
    305307 
    306308      il_offset(:,:,:)=create_coord_get_offset(il_rho(:)) 
    307  
    308309   ENDIF 
    309310 
     
    348349      CALL dom_del_extra( tl_var(ji), tl_dom, il_rho(:), .true. ) 
    349350 
    350       ! do not add ghost cell.  
    351       ! ghost cell already replace by value for coordinates  
    352       ! CALL grid_add_ghost(tl_var(ji),tl_dom%i_ghost(:,:)) 
    353  
    354351      ! filter 
    355352      CALL filter_fill_value(tl_var(ji))       
     
    375372 
    376373   ! add variables 
    377    DO ji=1,il_nvar 
     374   DO ji=il_nvar,1,-1 
    378375      CALL file_add_var(tl_fileout, tl_var(ji)) 
     376      CALL var_clean(tl_var(ji)) 
    379377   ENDDO 
    380  
    381    ! recompute some attribute 
    382378 
    383379   ! add some attribute 
     
    440436 
    441437   CALL file_clean(tl_fileout) 
    442  
    443 !   ! check domain 
    444 !   tl_coord0=mpp_init( file_init(TRIM(cn_coord0)), id_perio=in_perio0) 
    445 !   tl_mppout=mpp_init( file_init(TRIM(cn_fileout)) ) 
    446 !   CALL grid_get_info(tl_coord0) 
    447 !   CALL iom_mpp_open(tl_mppout) 
    448 ! 
    449 !   il_ind2(:,:)=grid_get_coarse_index( tl_coord0, tl_mppout, & 
    450 !   &                                   id_rho=il_rho(:) ) 
    451 ! 
    452 !   il_imin0=il_ind2(1,1) ; il_imax0=il_ind2(1,2) 
    453 !   il_jmin0=il_ind2(2,1) ; il_jmax0=il_ind2(2,2) 
    454 ! 
    455 !   IF( il_imin0 /= in_imin0 .OR. & 
    456 !   &   il_imax0 /= in_imax0 .OR. & 
    457 !   &   il_jmin0 /= in_jmin0 .OR. & 
    458 !   &   il_jmax0 /= in_jmax0 )THEN 
    459 !      CALL logger_debug("CREATE COORD: output indices ("//& 
    460 !      &                 TRIM(fct_str(il_imin0))//","//& 
    461 !      &                 TRIM(fct_str(il_imax0))//") ("//& 
    462 !      &                 TRIM(fct_str(il_jmin0))//","//& 
    463 !      &                 TRIM(fct_str(il_jmax0))//")" )  
    464 !      CALL logger_debug("CREATE COORD: input indices ("//& 
    465 !      &                 TRIM(fct_str(in_imin0))//","//& 
    466 !      &                 TRIM(fct_str(in_imax0))//") ("//& 
    467 !      &                 TRIM(fct_str(in_jmin0))//","//& 
    468 !      &                 TRIM(fct_str(in_jmax0))//")" )  
    469 !      CALL logger_fatal("CREATE COORD: output domain not confrom "//& 
    470 !      &                 "with input indices") 
    471 !   ENDIF 
    472 ! 
    473 !   CALL iom_mpp_close(tl_coord0) 
    474 !   CALL iom_mpp_close(tl_mppout) 
    475438 
    476439   ! close log file 
     
    539502   !> @param[in] id_iext   number of points to be extrapolated in i-direction 
    540503   !> @param[in] id_jext   number of points to be extrapolated in j-direction 
     504   !> 
     505   !> @todo check if mask is really needed 
    541506   !------------------------------------------------------------------- 
    542507   SUBROUTINE create_coord_interp( td_var,          & 
     
    626591 
    627592         ! extrapolate variable 
    628          CALL extrap_fill_value( td_var, id_iext=il_iext, id_jext=il_jext ) 
     593         CALL extrap_fill_value( td_var ) 
    629594 
    630595         ! interpolate variable 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/SIREN/src/create_restart.f90

    r5581 r5653  
    2525!> @endcode 
    2626!>     
     27!> @note  
     28!>    you could find a template of the namelist in templates directory. 
     29!> 
    2730!>    create_restart.nam comprise 9 namelists:<br/> 
    2831!>       - logger namelist (namlog) 
     
    4346!>       - cn_logfile   : log filename 
    4447!>       - cn_verbosity : verbosity ('trace','debug','info', 
    45 !> 'warning','error','fatal') 
     48!> 'warning','error','fatal','none') 
    4649!>       - in_maxerror  : maximum number of error allowed 
    4750!> 
     
    5962!>       - cn_bathy1 : bathymetry file 
    6063!>       - in_perio1 : NEMO periodicity index 
    61 !>       - in_extrap : number of land point to be extrapolated  
    62 !>       before writing file 
    6364!> 
    6465!>    * _vertical grid namelist (namzgr)_:<br/> 
     
    8384!>       - cn_varinfo : list of variable and extra information about request(s)  
    8485!>       to be used.<br/> 
    85 !>          each elements of *cn_varinfo* is a string character.<br/> 
     86!>          each elements of *cn_varinfo* is a string character 
     87!>          (separated by ',').<br/> 
    8688!>          it is composed of the variable name follow by ':',  
    8789!>          then request(s) to be used on this variable.<br/>  
    8890!>          request could be: 
    89 !>             - interpolation method 
    90 !>             - extrapolation method 
    91 !>             - filter method 
    92 !>             - > minimum value 
    93 !>             - < maximum value 
     91!>             - int = interpolation method 
     92!>             - ext = extrapolation method 
     93!>             - flt = filter method 
     94!>             - min = minimum value 
     95!>             - max = maximum value 
     96!>             - unt = new units 
     97!>             - unf = unit scale factor (linked to new units) 
    9498!> 
    9599!>             requests must be separated by ';'.<br/> 
     
    98102!>          informations about available method could be find in @ref interp, 
    99103!>          @ref extrap and @ref filter.<br/> 
    100 !>          Example: 'votemper: linear; hann; dist_weight','vosaline: cubic' 
     104!>          Example: 'votemper: int=linear; flt=hann; ext=dist_weight','vosaline: int=cubic' 
    101105!>          @note  
    102106!>             If you do not specify a method which is required,  
     
    136140!>    * _output namelist (namout)_:<br/> 
    137141!>       - cn_fileout : output file 
    138 !>       - in_nproc  : total number of processor to be used 
     142!>       - ln_extrap : extrapolate land point or not 
    139143!>       - in_niproc : i-direction number of processor 
    140144!>       - in_njproc : j-direction numebr of processor 
     145!>       - in_nproc  : total number of processor to be used 
    141146!>       - cn_type   : output format ('dimg', 'cdf') 
    142147!> 
     
    148153!> - offset computed considering grid point 
    149154!> - add attributes in output variable 
     155!> @date June, 2015 
     156!> - extrapolate all land points, and add ln_extrap in namelist. 
     157!> - allow to change unit. 
    150158!> 
    151159!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    165173   USE iom                             ! I/O manager 
    166174   USE grid                            ! grid manager 
    167    USE vgrid                           ! vertical grid manager 
     175   USE vgrid                            ! vertical grid manager 
    168176   USE extrap                          ! extrapolation manager 
    169177   USE interp                          ! interpolation manager 
     
    249257   CHARACTER(LEN=lc) :: cn_bathy1 = '' 
    250258   INTEGER(i4)       :: in_perio1 = -1 
    251    INTEGER(i4)       :: in_extrap = 0 
    252259 
    253260   !namzgr 
     
    279286   ! namout 
    280287   CHARACTER(LEN=lc) :: cn_fileout = 'restart.nc'  
     288   LOGICAL           :: ln_extrap  = .FALSE. 
    281289   INTEGER(i4)       :: in_nproc   = 0 
    282290   INTEGER(i4)       :: in_niproc  = 0 
     
    301309   &  cn_coord1,   &    !< coordinate file 
    302310   &  cn_bathy1,   &    !< bathymetry file 
    303    &  in_perio1,   &    !< periodicity index 
    304    &  in_extrap 
     311   &  in_perio1         !< periodicity index 
    305312  
    306313   NAMELIST /namzgr/ & 
     
    332339   NAMELIST /namout/ &  !< output namlist 
    333340   &  cn_fileout, &     !< fine grid bathymetry file 
    334    &  in_nproc,   &     !< number of processor to be used 
     341   &  ln_extrap,  &     !< extrapolate or not 
    335342   &  in_niproc,  &     !< i-direction number of processor 
    336343   &  in_njproc,  &     !< j-direction numebr of processor 
     344   &  in_nproc,   &     !< number of processor to be used 
    337345   &  cn_type           !< output type format (dimg, cdf) 
    338346   !------------------------------------------------------------------- 
     
    347355      CALL GET_COMMAND_ARGUMENT(1,cl_namelist) !f03 intrinsec 
    348356   ENDIF 
    349     
     357 
    350358   ! read namelist 
    351359   INQUIRE(FILE=TRIM(cl_namelist), EXIST=ll_exist) 
     
    434442   ! check 
    435443   ! check output file do not already exist 
    436    cl_fileout=file_rename(cn_fileout,1) 
     444   IF( in_nproc > 0 )THEN 
     445      cl_fileout=file_rename(cn_fileout,1) 
     446   ELSE 
     447      cl_fileout=file_rename(cn_fileout) 
     448   ENDIF 
    437449   INQUIRE(FILE=TRIM(cl_fileout), EXIST=ll_exist) 
    438450   IF( ll_exist )THEN 
     
    468480   &                            il_rho(:) ) 
    469481 
    470    ! compute level 
    471    ALLOCATE(tl_level(ip_npoint)) 
    472    tl_level(:)=vgrid_get_level(tl_bathy1, cl_namelist ) 
    473  
    474    ! remove ghost cell 
     482   ! fine grid ghost cell 
    475483   il_xghost(:,:)=grid_get_ghost(tl_bathy1) 
    476    DO ji=1,ip_npoint 
    477       CALL grid_del_ghost(tl_level(ji), il_xghost(:,:)) 
    478    ENDDO 
    479  
    480    ! clean 
    481    CALL mpp_clean(tl_bathy1) 
    482484 
    483485   ! work on variables 
     
    514516               tl_var(jvar) = create_restart_matrix( & 
    515517               &  tl_multi%t_mpp(ji)%t_proc(1)%t_var(jj), tl_coord1, & 
    516                &  in_nlevel, tl_level(:) ) 
     518               &  in_nlevel, il_xghost(:,:) ) 
     519 
     520               ! add ghost cell 
     521               CALL grid_add_ghost(tl_var(jvar), il_xghost(:,:)) 
    517522 
    518523            ENDDO 
     
    535540            ! open mpp file 
    536541            CALL iom_mpp_open(tl_mpp) 
     542 
    537543 
    538544            ! get or check depth value 
     
    579585               DO jj=1,tl_multi%t_mpp(ji)%t_proc(1)%i_nvar 
    580586 
    581                   WRITE(*,'(2x,a,a)') "work on variable "//& 
     587                  WRITE(*,'(2x,a,a)') "work on (extract) variable "//& 
    582588                  &  TRIM(tl_multi%t_mpp(ji)%t_proc(1)%t_var(jj)%c_name) 
    583589 
     
    600606                  CALL att_clean(tl_att) 
    601607 
    602                   ! use mask 
    603                   CALL create_restart_mask(tl_var(jvar), tl_level(:)) 
    604  
    605608                  ! add ghost cell 
    606                   CALL grid_add_ghost( tl_var(jvar), tl_dom1%i_ghost(:,:) ) 
     609                  CALL grid_add_ghost(tl_var(jvar), tl_dom1%i_ghost(:,:)) 
    607610 
    608611               ENDDO 
     
    631634               DO jj=1,tl_multi%t_mpp(ji)%t_proc(1)%i_nvar 
    632635 
    633                   WRITE(*,'(2x,a,a)') "work on variable "//& 
     636                  WRITE(*,'(2x,a,a)') "work on (interp) variable "//& 
    634637                  &  TRIM(tl_multi%t_mpp(ji)%t_proc(1)%t_var(jj)%c_name) 
    635638 
     
    646649                  &                                   id_rho=il_rho(:), & 
    647650                  &                                   cd_point=TRIM(tl_var(jvar)%c_point)) 
    648                    
    649651 
    650652                  ! interpolate variable 
    651                   CALL create_restart_interp(tl_var(jvar), tl_level(:), & 
     653                  CALL create_restart_interp(tl_var(jvar), &  
    652654                  &                          il_rho(:), & 
    653655                  &                          id_offset=il_offset(:,:)) 
     
    675677                  CALL att_clean(tl_att) 
    676678 
    677                   ! use mask 
    678                   CALL create_restart_mask(tl_var(jvar), tl_level(:)) 
    679  
    680679                  ! add ghost cell 
    681                   CALL grid_add_ghost( tl_var(jvar), il_xghost(:,:) ) 
    682  
    683  
     680                  CALL grid_add_ghost(tl_var(jvar), il_xghost(:,:)) 
    684681               ENDDO 
    685682 
     
    705702   CALL mpp_clean(tl_coord0) 
    706703 
     704   IF( .NOT. ln_extrap )THEN 
     705      ! compute level 
     706      ALLOCATE(tl_level(ip_npoint)) 
     707      tl_level(:)=vgrid_get_level(tl_bathy1, cl_namelist ) 
     708   ENDIF 
     709 
     710   ! clean 
     711   CALL mpp_clean(tl_bathy1) 
     712 
    707713   ! use additional request 
    708714   DO jvar=1,il_nvar 
    709715 
     716      ! change unit and apply factor 
     717      CALL var_chg_unit(tl_var(jvar)) 
     718 
    710719      ! forced min and max value 
    711720      CALL var_limit_value(tl_var(jvar)) 
     
    714723      CALL filter_fill_value(tl_var(jvar)) 
    715724 
    716       ! extrapolate 
    717       CALL extrap_fill_value(tl_var(jvar), id_iext=in_extrap, & 
    718       &                                    id_jext=in_extrap, & 
    719       &                                    id_kext=in_extrap) 
     725      IF( .NOT. ln_extrap )THEN 
     726         ! use mask 
     727         CALL create_restart_mask(tl_var(jvar), tl_level(:)) 
     728      ENDIF 
    720729 
    721730   ENDDO 
     
    724733   IF( in_niproc == 0 .AND. & 
    725734   &   in_njproc == 0 .AND. & 
    726    &   in_nproc  == 0 )THEN 
     735   &   in_nproc == 0 )THEN 
    727736      in_niproc = 1 
    728737      in_njproc = 1 
     
    782791         CALL mpp_add_var(tl_mppout, tl_depth) 
    783792      ELSE 
    784          CALL logger_error("CREATE RESTART: no value for depth variable.") 
     793         CALL logger_warn("CREATE RESTART: no value for depth variable.") 
    785794      ENDIF 
    786795   ENDIF 
     
    792801         CALL mpp_add_var(tl_mppout, tl_time) 
    793802      ELSE 
    794          CALL logger_error("CREATE RESTART: no value for time variable.") 
     803         CALL logger_warn("CREATE RESTART: no value for time variable.") 
    795804      ENDIF 
    796805   ENDIF 
     
    798807 
    799808   ! add other variable 
    800    DO jvar=1,il_nvar 
     809   DO jvar=il_nvar,1,-1 
    801810      ! check if variable already add 
    802811      il_index=var_get_index(tl_mppout%t_proc(1)%t_var(:), tl_var(jvar)%c_name) 
     
    807816   ENDDO 
    808817 
    809 !   DO ji=1,4 
    810 !      CALL grid_add_ghost( tl_level(ji), il_xghost(:,:) ) 
    811 !      CALL var_clean(tl_level(ji)) 
    812 !   ENDDO 
    813  
    814818   ! add some attribute 
    815819   tl_att=att_init("Created_by","SIREN create_restart") 
     
    839843   ENDIF 
    840844 
     845   ! print 
     846   CALL mpp_print(tl_mppout) 
     847 
    841848   ! create file 
    842849   CALL iom_mpp_create(tl_mppout) 
     
    847854   CALL iom_mpp_close(tl_mppout) 
    848855 
    849    ! print 
    850    CALL mpp_print(tl_mppout) 
    851  
    852856   ! clean 
    853857   CALL att_clean(tl_att) 
    854858   CALL var_clean(tl_var(:)) 
    855859   DEALLOCATE(tl_var) 
    856    CALL var_clean(tl_level(:)) 
    857    DEALLOCATE(tl_level) 
     860   IF( .NOT. ln_extrap )THEN 
     861      CALL var_clean(tl_level(:)) 
     862      DEALLOCATE(tl_level) 
     863   ENDIF 
    858864 
    859865   CALL mpp_clean(tl_mppout) 
     
    876882   !> 
    877883   !> @author J.Paul 
    878    !> - November, 2013- Initial Version 
     884   !> @date November, 2013 - Initial Version 
     885   !> @date June, 2015 
     886   !> - do not use level anymore  
    879887   !> 
    880888   !> @param[in] td_var    variable structure  
    881889   !> @param[in] td_coord  coordinate file structure  
    882890   !> @param[in] id_nlevel number of vertical level   
    883    !> @param[in] td_level  array of level on T,U,V,F point (variable structure)  
     891   !> @param[in] id_xghost ghost cell array 
    884892   !> @return variable structure  
    885893   !------------------------------------------------------------------- 
    886    FUNCTION create_restart_matrix(td_var, td_coord, id_nlevel, td_level) 
     894   FUNCTION create_restart_matrix(td_var, td_coord, id_nlevel, id_xghost) 
    887895      IMPLICIT NONE 
    888896      ! Argument 
    889       TYPE(TVAR)              , INTENT(IN) :: td_var 
    890       TYPE(TMPP)              , INTENT(IN) :: td_coord 
    891       INTEGER(i4)             , INTENT(IN) :: id_nlevel 
    892       TYPE(TVAR), DIMENSION(:), INTENT(IN) :: td_level 
     897      TYPE(TVAR)                 , INTENT(IN) :: td_var 
     898      TYPE(TMPP)                 , INTENT(IN) :: td_coord 
     899      INTEGER(i4)                , INTENT(IN) :: id_nlevel 
     900      INTEGER(i4), DIMENSION(:,:), INTENT(IN) :: id_xghost 
    893901 
    894902      ! function 
     
    899907      INTEGER(i4)      , DIMENSION(3)                    :: il_size 
    900908      INTEGER(i4)      , DIMENSION(3)                    :: il_rest 
    901       INTEGER(i4)      , DIMENSION(2,2)                  :: il_xghost 
    902909 
    903910      INTEGER(i4)      , DIMENSION(:)      , ALLOCATABLE :: il_ishape 
     
    915922      !---------------------------------------------------------------- 
    916923 
    917       ! look for ghost cell 
    918       il_xghost(:,:)=grid_get_ghost( td_coord ) 
    919  
    920924      ! write value on grid 
    921925      ! get matrix dimension 
     
    929933 
    930934      ! remove ghost cell 
    931       tl_dim(jp_I)%i_len=tl_dim(jp_I)%i_len - SUM(il_xghost(jp_I,:))*ip_ghost 
    932       tl_dim(jp_J)%i_len=tl_dim(jp_J)%i_len - SUM(il_xghost(jp_J,:))*ip_ghost 
     935      tl_dim(jp_I)%i_len=tl_dim(jp_I)%i_len - SUM(id_xghost(jp_I,:))*ip_ghost 
     936      tl_dim(jp_J)%i_len=tl_dim(jp_J)%i_len - SUM(id_xghost(jp_J,:))*ip_ghost 
    933937 
    934938      ! split output domain in N subdomain depending of matrix dimension  
     
    992996      DEALLOCATE(dl_value) 
    993997 
    994       ! use mask 
    995       CALL create_restart_mask(create_restart_matrix, td_level(:)) 
    996  
    997       ! add ghost cell 
    998       CALL grid_add_ghost( create_restart_matrix, il_xghost(:,:) ) 
    999  
    1000998      ! clean  
    1001999      DEALLOCATE(il_ishape) 
     
    10091007   !>  
    10101008   !> @author J.Paul 
    1011    !> - November, 2013- Initial Version 
     1009   !> @date November, 2013 - Initial Version 
    10121010   !> 
    10131011   !> @param[inout] td_var variable structure 
     
    10711069   !>  
    10721070   !> @author J.Paul 
    1073    !> - Nov, 2013- Initial Version 
     1071   !> @date November, 2013 - Initial Version 
     1072   !> @date June, 2015 
     1073   !> - do not use level anymore (for extrapolation) 
    10741074   !> 
    10751075   !> @param[inout] td_var    variable structure  
    1076    !> @param[inout] td_level  fine grid level, array of variable structure 
    10771076   !> @param[in] id_rho       array of refinment factor 
    10781077   !> @param[in] id_offset    array of offset between fine and coarse grid 
     
    10801079   !> @param[in] id_jext      j-direction size of extra bands (default=im_minext) 
    10811080   !------------------------------------------------------------------- 
    1082    SUBROUTINE create_restart_interp( td_var, td_level,& 
     1081   SUBROUTINE create_restart_interp( td_var, &  
    10831082   &                                 id_rho,          & 
    10841083   &                                 id_offset,       & 
     
    10891088      ! Argument 
    10901089      TYPE(TVAR) ,                 INTENT(INOUT) :: td_var 
    1091       TYPE(TVAR) , DIMENSION(:)  , INTENT(INOUT) :: td_level 
    10921090      INTEGER(i4), DIMENSION(:)  , INTENT(IN   ) :: id_rho 
    10931091      INTEGER(i4), DIMENSION(:,:), INTENT(IN   ) :: id_offset 
     
    11191117         il_jext=2 
    11201118      ENDIF 
    1121  
    11221119      ! work on variable 
    11231120      ! add extraband 
     
    11251122 
    11261123      ! extrapolate variable 
    1127       CALL extrap_fill_value( td_var, td_level(:),    & 
    1128       &                               id_offset(:,:), & 
    1129       &                               id_rho(:),      & 
    1130       &                               id_iext=il_iext, id_jext=il_jext ) 
     1124      CALL extrap_fill_value( td_var ) 
    11311125 
    11321126      ! interpolate variable 
     
    11461140   !> 
    11471141   !> @author J.Paul 
    1148    !> - November, 2014- Initial Version 
     1142   !> @date November, 2014 - Initial Version 
    11491143   !> 
    11501144   !> @param[in] td_mpp       mpp structure 
     
    11971191   !> 
    11981192   !> @author J.Paul 
    1199    !> - November, 2014- Initial Version 
     1193   !> @date November, 2014 - Initial Version 
    12001194   !> 
    12011195   !> @param[in] td_mpp      mpp structure 
     
    12201214 
    12211215      ! get or check depth value 
     1216 
    12221217      IF( td_mpp%t_proc(1)%i_timeid /= 0 )THEN 
    12231218 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/SIREN/src/dimension.f90

    r5581 r5653  
    7878!> 
    7979!>    This subroutine filled dimension structure with unused dimension,  
    80 !>    then switch from "unordered" dimension to "ordered" dimension.<br/> 
     80!>    then switch from "disordered" 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 unordered 
     96!>    to switch dimension array from ordered dimension to disordered 
    9797!> dimension:<br/> 
    9898!> @code 
    99 !>    CALL dim_unorder(tl_dim(:)) 
     99!>    CALL dim_disorder(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 "unordered" 
    114 !> 
    115 !>    to reshape array of value in "unordered" dimension:<br/> 
     113!>       - value must be a 4D array of real(8) value "disordered" 
     114!> 
     115!>    to reshape array of value in "disordered" 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 "unordered". 
     125!>       - tab must be a 1D array with 4 elements "disordered". 
    126126!>       It could be composed of character, integer(4), or logical 
    127127!>  
    128 !>    to reorder a 1D array of 4 elements in "unordered" dimension:<br/> 
    129 !> @code 
    130 !>    CALL dim_reorder_2xyzt(tl_dim(:), tab(:)) 
     128!>    to reorder a 1D array of 4 elements in "disordered" dimension:<br/> 
     129!> @code 
     130!>    CALL dim_reorder_xyzt2(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 unordered to ordered dimension 
    176    PUBLIC :: dim_unorder       !< switch dimension array from ordered to unordered dimension 
     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 
    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 - do not check if dimension used 
     323   !> @date September, 2014  
     324   !> - do not check if dimension used 
    324325   !> 
    325326   !> @param[in] td_dim    array of dimension structure 
     
    502503   !> Optionally length could be inform, as well as short name and if dimension 
    503504   !> is unlimited or not.<br/> 
    504    !> define dimension is supposed to be used. 
    505    !> 
    506    !> @author J.Paul 
    507    !> @date November, 2013 - Initial Version 
     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 
    508515   ! 
    509516   !> @param[in] cd_name   dimension name 
     
    511518   !> @param[in] ld_uld    dimension unlimited 
    512519   !> @param[in] cd_sname  dimension short name 
     520   !> @param[in] ld_uld    dimension use or not 
    513521   !> @return dimension structure 
    514522   !------------------------------------------------------------------- 
    515    TYPE(TDIM) FUNCTION dim_init( cd_name, id_len, ld_uld, cd_sname) 
     523   TYPE(TDIM) FUNCTION dim_init( cd_name, id_len, ld_uld, cd_sname, ld_use) 
    516524      IMPLICIT NONE 
    517525 
     
    521529      LOGICAL,          INTENT(IN), OPTIONAL :: ld_uld 
    522530      CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: cd_sname 
     531      LOGICAL,          INTENT(IN), OPTIONAL :: ld_use 
    523532 
    524533      ! local variable 
     
    543552 
    544553      ! define dimension is supposed to be used 
    545       dim_init%l_use=.TRUE. 
     554      IF( PRESENT(ld_use) )THEN 
     555         dim_init%l_use=ld_use 
     556      ELSE 
     557         dim_init%l_use=.TRUE. 
     558      ENDIF 
    546559 
    547560      IF( PRESENT(cd_sname) )THEN 
     
    590603      ENDIF 
    591604       
    592       ! get dimension orderer index 
    593       dim_init%i_2xyzt=SCAN(TRIM(cp_dimorder),TRIM(dim_init%c_sname)) 
     605      ! get dimension order indices 
     606      dim_init%i_xyzt2=SCAN(TRIM(cp_dimorder),TRIM(dim_init%c_sname)) 
    594607 
    595608   END FUNCTION dim_init 
     
    655668   !> @author J.Paul 
    656669   !> @date November, 2013 - Initial Version 
     670   !> @date July, 2015  
     671   !> - Bug fix: use order to disorder table (see dim_init) 
    657672   !> 
    658673   !> @param[in] td_dim array of dimension structure 
     
    686701         ! search missing dimension 
    687702         IF( INDEX(cl_dimin,TRIM(fct_lower(cp_dimorder(ji:ji)))) == 0 )THEN 
    688             ! search first empty dimension 
    689             il_ind(:)=MINLOC( tl_dim(:)%i_2xyzt, tl_dim(:)%i_2xyzt == 0 ) 
     703            ! search first empty dimension (see dim_init) 
     704            il_ind(:)=MINLOC( tl_dim(:)%i_xyzt2, tl_dim(:)%i_xyzt2 == 0 ) 
    690705 
    691706            ! put missing dimension instead of empty one 
     
    693708            ! update output structure 
    694709            tl_dim(il_ind(1))%c_name=fct_lower(cp_dimorder(ji:ji)) 
    695             tl_dim(il_ind(1))%i_2xyzt=ji 
     710            tl_dim(il_ind(1))%i_xyzt2=ji 
    696711            tl_dim(il_ind(1))%i_len=1 
    697712            tl_dim(il_ind(1))%l_use=.FALSE. 
     
    711726   !> This subroutine switch element of an array (4 elts) of dimension  
    712727   !> structure  
    713    !> from unordered dimension to ordered dimension <br/> 
     728   !> from disordered dimension to ordered dimension <br/> 
    714729   !> 
    715730   !> @details 
     
    722737   !> @author J.Paul 
    723738   !> @date November, 2013 - Initial Version 
    724    !> @date September, 2014 - allow to choose ordered dimension to be output 
     739   !> @date September, 2014  
     740   !> - allow to choose ordered dimension to be output 
    725741   !> 
    726742   !> @param[inout] td_dim    array of dimension structure 
     
    811827   !------------------------------------------------------------------- 
    812828   !> @brief This subroutine switch dimension array from ordered dimension ('x','y','z','t') 
    813    !> to unordered dimension. <br/> 
     829   !> to disordered dimension. <br/> 
    814830   !> @details 
    815831   !> Example: (/'x','y','z','t'/) => (/'z','x','t','y'/)<br/> 
     
    822838   !> @param[inout] td_dim array of dimension structure 
    823839   !------------------------------------------------------------------- 
    824    SUBROUTINE dim_unorder(td_dim) 
     840   SUBROUTINE dim_disorder(td_dim) 
    825841      IMPLICIT NONE 
    826842      ! Argument       
     
    835851 
    836852      IF( SIZE(td_dim(:)) /= ip_maxdim )THEN 
    837          CALL logger_error("DIM UNORDER: invalid dimension of array dimension.") 
     853         CALL logger_error("DIM DISORDER: invalid dimension of array dimension.") 
    838854      ELSE       
    839855         ! add dummy xyzt2 id to unused dimension 
     
    868884      ENDIF 
    869885 
    870    END SUBROUTINE dim_unorder 
     886   END SUBROUTINE dim_disorder 
    871887   !------------------------------------------------------------------- 
    872888   !> @brief This function reshape real(8) 4D array    
     
    908924 
    909925      IF( SIZE(td_dim(:)) /= ip_maxdim )THEN 
    910          CALL logger_error("DIM RESHAPE 2 XYZT: invalid dimension of array dimension.") 
     926         CALL logger_error("DIM RESHAPE 2 XYZT: invalid dimension of "//& 
     927            &  "array dimension.") 
    911928      ELSE       
    912929 
     
    914931 
    915932            CALL logger_fatal( & 
    916             &  "  DIM RESHAPE 2 XYZT: you should have run dim_reorder & 
    917             &     before running RESHAPE" ) 
     933            &  "  DIM RESHAPE 2 XYZT: you should have run dim_reorder"// & 
     934            &  "   before running RESHAPE" ) 
    918935 
    919936         ENDIF 
     
    972989   !------------------------------------------------------------------- 
    973990   !> @brief This function reshape ordered real(8) 4D array with dimension  
    974    !> (/'x','y','z','t'/) to an "unordered" array.<br/> 
     991   !> (/'x','y','z','t'/) to an "disordered" array.<br/> 
    975992   !> @details 
    976993   !> Example: (/'x','y','z','t'/) => (/'z','x','t','y'/) 
     
    10091026 
    10101027      IF( SIZE(td_dim(:)) /= ip_maxdim )THEN 
    1011          CALL logger_error("DIM RESHAPE XYZT 2: invalid dimension of array dimension.") 
     1028         CALL logger_error("DIM RESHAPE XYZT 2: invalid dimension of "//& 
     1029            &  "array dimension.") 
    10121030      ELSE 
    10131031 
     
    10151033 
    10161034            CALL logger_fatal( & 
    1017             &  "  DIM RESHAPE XYZT 2: you should have run dim_reorder & 
    1018             &     before running RESHAPE" ) 
     1035            &  "  DIM RESHAPE XYZT 2: you should have run dim_reorder"// & 
     1036            &  "   before running RESHAPE" ) 
    10191037 
    10201038         ENDIF         
     
    11041122 
    11051123            CALL logger_error( & 
    1106             &  "  DIM REORDER 2 XYZT: you should have run dim_reorder & 
    1107             &     before running REORDER" ) 
     1124            &  "  DIM REORDER 2 XYZT: you should have run dim_reorder"//& 
     1125            &  "   before running REORDER" ) 
    11081126 
    11091127         ENDIF         
     
    11161134   END FUNCTION dim__reorder_2xyzt_i4 
    11171135   !------------------------------------------------------------------- 
    1118    !> @brief This function unordered integer(4) 1D array to be suitable with 
     1136   !> @brief This function disordered integer(4) 1D array to be suitable with 
    11191137   !> initial dimension order (ex: dimension read in file). 
    11201138   !> @note you must have run dim_reorder before use this subroutine 
     
    11431161      IF( SIZE(td_dim(:)) /= ip_maxdim .OR. & 
    11441162      &   SIZE(id_arr(:)) /= ip_maxdim )THEN 
    1145          CALL logger_error("DIM REORDER XYZT 2: invalid dimension of array dimension"//& 
    1146          &              " or of array of value.") 
     1163         CALL logger_error("DIM REORDER XYZT 2: invalid dimension of "//& 
     1164            &  "array dimension or of array of value.") 
    11471165      ELSE       
    11481166         IF( ANY(td_dim(:)%i_xyzt2==0) )THEN 
    11491167 
    11501168            CALL logger_error( & 
    1151             &  "  DIM REORDER XYZT 2: you should have run dim_reorder & 
    1152             &     before running REORDER" ) 
     1169            &  "  DIM REORDER XYZT 2: you should have run dim_reorder"// & 
     1170            &  "   before running REORDER" ) 
    11531171 
    11541172         ENDIF         
     
    11661184   ! 
    11671185   !> @author J.Paul 
    1168    !> @date Nov, 2013 - Initial Version 
     1186   !> @date November, 2013 - Initial Version 
    11691187   ! 
    11701188   !> @param[in] td_dim array of dimension structure 
     
    11931211 
    11941212            CALL logger_error( & 
    1195             &  "  DIM REORDER 2 XYZT: you should have run dim_reorder & 
    1196             &     before running REORDER" ) 
     1213            &  "  DIM REORDER 2 XYZT: you should have run dim_reorder"// & 
     1214            &  "   before running REORDER" ) 
    11971215 
    11981216         ENDIF         
     
    12051223   END FUNCTION dim__reorder_2xyzt_l 
    12061224   !------------------------------------------------------------------- 
    1207    !> @brief This function unordered logical 1D array to be suitable with 
     1225   !> @brief This function disordered logical 1D array to be suitable with 
    12081226   !> initial dimension order (ex: dimension read in file). 
    12091227   !> @note you must have run dim_reorder before use this subroutine 
     
    12381256 
    12391257            CALL logger_error( & 
    1240             &  "  DIM REORDER XYZT 2: you should have run dim_reorder & 
    1241             &     before running REORDER" ) 
     1258            &  "  DIM REORDER XYZT 2: you should have run dim_reorder"//& 
     1259            &  "  before running REORDER" ) 
    12421260 
    12431261         ENDIF         
     
    12941312   END FUNCTION dim__reorder_2xyzt_c 
    12951313   !------------------------------------------------------------------- 
    1296    !> @brief This function unordered string 1D array to be suitable with 
     1314   !> @brief This function disordered string 1D array to be suitable with 
    12971315   !> initial dimension order (ex: dimension read in file). 
    12981316   !> @note you must have run dim_reorder before use this subroutine 
    12991317   ! 
    13001318   !> @author J.Paul 
    1301    !> @date Nov, 2013 - Initial Version 
     1319   !> @date November, 2013 - Initial Version 
    13021320   ! 
    13031321   !> @param[in] td_dim array of dimension structure 
     
    13261344         IF( ANY(td_dim(:)%i_xyzt2==0) )THEN 
    13271345            CALL logger_error( & 
    1328             &  "  DIM REORDER XYZT 2: you should have run dim_reorder & 
    1329             &     before running REORDER" ) 
     1346            &  "  DIM REORDER XYZT 2: you should have run dim_reorder"// & 
     1347            &  "   before running REORDER" ) 
    13301348 
    13311349         ENDIF         
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/SIREN/src/docsrc/1_install.md

    r5037 r5653  
    1313# Fortran Compiler 
    1414   SIREN codes were succesfully tested with : 
    15    - ifort (version 12.0.4) 
    16    - gfortran (version 4.7.2 20121109) 
     15   - ifort (version 15.0.1) 
     16   - gfortran (version 4.8.2 20140120)  
    1717<!--   - pgf95 (version 13.9-0) --> 
    1818 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/SIREN/src/docsrc/3_codingRules.md

    r5037 r5653  
    8080 
    8181# Implicit none {#implicit} 
    82 All subroutines and functions will include an IMPLICTI NONE statement. 
     82All subroutines and functions will include an IMPLICIT NONE statement. 
    8383 
    8484# Header {#header} 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/SIREN/src/domain.f90

    r5581 r5653  
    246246   ! 
    247247   !> @author J.Paul 
    248    !> - Nov, 2013- Initial Version 
     248   !> @date November, 2013 - Initial Version 
    249249   ! 
    250250   !> @param[inout] td_dom dom structure 
     
    294294   ! 
    295295   !> @author J.Paul 
    296    !> - June, 2013- Initial Version 
     296   !> @date June, 2013 - Initial Version 
    297297   !> @date September, 2014 
    298298   !> - add boundary index 
     
    362362 
    363363         IF( td_mpp%i_perio < 0 .OR. td_mpp%i_perio > 6 )THEN 
    364             CALL logger_error("DOM INIT: invalid grid periodicity. "//& 
    365             &  "you should use grid_get_perio to compute it") 
     364            CALL logger_error("DOM INIT: invalid grid periodicity ("//& 
     365            &  TRIM(fct_str(td_mpp%i_perio))//& 
     366            &  ") you should use grid_get_perio to compute it") 
    366367         ELSE 
    367368            dom__init_mpp%i_perio0=td_mpp%i_perio 
     
    424425   ! 
    425426   !> @author J.Paul 
    426    !> - June, 2013- Initial Version 
     427   !> @date June, 2013 - Initial Version 
    427428   !> @date September, 2014 
    428429   !> - add boundary index 
     
    489490 
    490491         IF( td_file%i_perio < 0 .OR. td_file%i_perio > 6 )THEN 
    491             CALL logger_error("DOM INIT: invalid grid periodicity. "//& 
    492             &  "you should use grid_get_perio to compute it") 
     492            CALL logger_error("DOM INIT: invalid grid periodicity ("//& 
     493            &  TRIM(fct_str(td_file%i_perio))//& 
     494            &  ") you should use grid_get_perio to compute it") 
    493495         ELSE 
    494496            dom__init_file%i_perio0=td_file%i_perio 
     
    548550   !> 
    549551   !> @author J.Paul 
    550    !> - November, 2013- Subroutine written 
     552   !> @date November, 2013 - Initial version 
    551553   ! 
    552554   !> @param[inout] td_dom domain structure 
     
    653655   !> 
    654656   !> @author J.Paul 
    655    !> - November, 2013- Subroutine written 
     657   !> @date November, 2013 - Initial version 
    656658   !> @date September, 2014 
    657659   !> - use zero indice to defined cyclic or global domain 
     
    721723   !> 
    722724   !> @author J.Paul 
    723    !> - November, 2013- Subroutine written 
     725   !> @date November, 2013 - Initial verison 
    724726   ! 
    725727   !> @param[inout] td_dom domain strcuture 
     
    755757   !> 
    756758   !> @author J.Paul 
    757    !> - November, 2013- Subroutine written 
     759   !> @date November, 2013 - Initial version 
    758760   ! 
    759761   !> @param[inout] td_dom domain strcuture 
     
    774776   !> 
    775777   !> @author J.Paul 
    776    !> - November, 2013- Subroutine written 
     778   !> @date November, 2013 - Initial version 
    777779   ! 
    778780   !> @param[inout] td_dom domain strcuture 
     
    806808   !> 
    807809   !> @author J.Paul 
    808    !> - November, 2013- Subroutine written 
     810   !> @date November, 2013 - Initial version 
    809811   ! 
    810812   !> @param[inout] td_dom domain strcuture 
     
    824826   !> 
    825827   !> @author J.Paul 
    826    !> - November, 2013- Subroutine written 
     828   !> @date November, 2013 - Initial version 
    827829   ! 
    828830   !> @param[inout] td_dom domain strcuture 
     
    862864   !> 
    863865   !> @author J.Paul 
    864    !> - November, 2013- Subroutine written 
     866   !> @date November, 2013 - Initial version 
    865867   ! 
    866868   !> @param[inout] td_dom domain strcuture 
     
    912914   !> 
    913915   !> @author J.Paul 
    914    !> - November, 2013- Subroutine written 
     916   !> @date November, 2013 - Initial version 
    915917   ! 
    916918   !> @param[inout] td_dom domain strcuture 
     
    951953   !> 
    952954   !> @author J.Paul 
    953    !> - April, 2013- Subroutine written 
     955   !> @date April, 2013 - Initial version 
    954956   ! 
    955957   !> @param[inout] td_dom domain strcuture 
     
    979981   !> 
    980982   !> @author J.Paul 
    981    !> - November, 2013- Subroutine written 
     983   !> @date November, 2013 - Initial version 
    982984   ! 
    983985   !> @param[inout] td_dom domain strcuture 
     
    10411043   !> 
    10421044   !> @author J.Paul 
    1043    !> - November, 2013- Subroutine written 
     1045   !> @date November, 2013 - Initial version 
    10441046   ! 
    10451047   !> @param[inout] td_dom domain strcuture 
     
    10821084   !> 
    10831085   !> @author J.Paul 
    1084    !> - November, 2013- Subroutine written 
     1086   !> @date November, 2013 - Initial version 
    10851087   ! 
    10861088   !> @param[inout] td_dom domain strcuture 
     
    11801182   !> 
    11811183   !> @author J.Paul 
    1182    !> - November, 2013- Subroutine written 
     1184   !> @date November, 2013 - Initial version 
    11831185   ! 
    11841186   !> @param[inout] td_dom domain strcuture 
     
    12921294   !> 
    12931295   !> @author J.Paul 
    1294    !> @date November, 2013 
     1296   !> @date November, 2013 - Initial version 
    12951297   !> @date September, 2014 
    12961298   !> - take into account number of ghost cell 
     
    14331435   ! 
    14341436   !> @author J.Paul 
    1435    !> @date November, 2013 
     1437   !> @date November, 2013 - Initial version 
    14361438   ! 
    14371439   !> @param[inout] td_dom domain strcuture 
     
    14761478   !>  
    14771479   !> @author J.Paul 
    1478    !> @date November, 2013 
     1480   !> @date November, 2013 - Initial version 
    14791481   !> @date September, 2014 
    14801482   !> - take into account boundary for one point size domain 
     
    17151717   ! 
    17161718   !> @author J.Paul 
    1717    !> @date November, 2013 
     1719   !> @date November, 2013 - Initial version 
    17181720   ! 
    17191721   !> @param[inout] td_dom domain strcuture 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/SIREN/src/extrap.f90

    r5581 r5653  
    1919!>    defining string character _cn\_varinfo_. By default _dist_weight_.<br/> 
    2020!>    Example: 
    21 !>       - cn_varinfo='varname1:dist_weight', 'varname2:min_error' 
     21!>       - cn_varinfo='varname1:ext=dist_weight', 'varname2:ext=min_error' 
    2222!> 
    2323!>    to detect point to be extrapolated:<br/> 
    2424!> @code 
    25 !>    il_detect(:,:,:)=extrap_detect(td_var, [td_level], [id_offset,] [id_rho,] [id_ext])  
     25!>    il_detect(:,:,:)=extrap_detect(td_var) 
    2626!> @endcode 
    2727!>       - il_detect(:,:,:) is 3D array of point to be extrapolated 
    2828!>       - td_var  is coarse grid variable to be extrapolated 
    29 !>       - td_level is fine grid array of level (see vgrid_get_level) [optional] 
    30 !>       - id_offset is array of offset between fine and coarse grid [optional] 
    31 !>       - id_rho    is array of refinment factor [optional] 
    32 !>       - id_ext    is array of number of points to be extrapolated [optional] 
    3329!> 
    3430!>    to extrapolate variable:<br/> 
    3531!> @code 
    36 !>    CALL extrap_fill_value( td_var, [td_level], [id_offset], [id_rho], [id_iext], [id_jext], [id_kext], [id_radius], [id_maxiter]) 
     32!>    CALL extrap_fill_value( td_var, [id_radius]) 
    3733!> @endcode 
    3834!>       - td_var  is coarse grid variable to be extrapolated 
    39 !>       - td_level is fine grid array of level (see vgrid_get_level) [optional] 
    40 !>       - id_offset is array of offset between fine and coarse grid [optional] 
    41 !>       - id_rho    is array of refinment factor [optional] 
    42 !>       - id_iext   is number of points to be extrapolated in i-direction [optional] 
    43 !>       - id_jext   is number of points to be extrapolated in j-direction [optional] 
    44 !>       - id_kext   is number of points to be extrapolated in k-direction [optional] 
    4535!>       - id_radius is radius of the halo used to compute extrapolation [optional] 
    46 !>       - id_maxiter is maximum number of iteration [optional] 
    4736!> 
    4837!>    to add extraband to the variable (to be extrapolated):<br/> 
     
    6251!>       - id_jsize : j-direction size of extra bands [optional] 
    6352!> 
    64 !>    to compute first derivative of 1D array:<br/> 
    65 !> @code 
    66 !>    dl_value(:)=extrap_deriv_1D( dd_value(:), dd_fill, [ld_discont] ) 
    67 !> @endcode 
    68 !>       - dd_value is 1D array of variable 
    69 !>       - dd_fill is FillValue of variable 
    70 !>       - ld_discont is logical to take into account longitudinal East-West discontinuity [optional] 
    71 !> 
    72 !>    to compute first derivative of 2D array:<br/> 
    73 !> @code 
    74 !>    dl_value(:,:)=extrap_deriv_2D( dd_value(:,:), dd_fill, cd_dim, [ld_discont] ) 
    75 !> @endcode 
    76 !>       - dd_value is 2D array of variable 
    77 !>       - dd_fill is FillValue of variable 
    78 !>       - cd_dim is character to compute derivative on first (I) or second (J) dimension 
    79 !>       - ld_discont is logical to take into account longitudinal East-West discontinuity [optional] 
    80 !> 
    81 !>    to compute first derivative of 3D array:<br/> 
    82 !> @code 
    83 !>    dl_value(:,:,:)=extrap_deriv_3D( dd_value(:,:,:), dd_fill, cd_dim, [ld_discont] ) 
    84 !> @endcode 
    85 !>       - dd_value is 3D array of variable 
    86 !>       - dd_fill is FillValue of variable 
    87 !>       - cd_dim is character to compute derivative on first (I), second (J), or third (K) dimension 
    88 !>       - ld_discont is logical to take into account longitudinal East-West discontinuity [optional] 
    89 !> 
    9053!> @warning _FillValue must not be zero (use var_chg_FillValue()) 
    9154!> 
     
    9356!> J.Paul 
    9457! REVISION HISTORY: 
    95 !> @date Nov, 2013 - Initial Version 
     58!> @date November, 2013 - Initial Version 
    9659!> @date September, 2014 
    9760!> - add header 
     61!> @date June, 2015 
     62!> - extrapolate all land points (_FillValue) 
     63!> - move deriv function to math module 
     64!> @date July, 2015 
     65!> - compute extrapolation from north west to south east,  
     66!> and from south east to north west 
    9867!> 
    9968!> @todo 
    10069!> - create module for each extrapolation method 
     70!> - smooth extrapolated points 
    10171!> 
    10272!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    11080   USE date                            ! date manager 
    11181   USE logger                          ! log file manager 
     82   USE math                            ! mathematical function 
    11283   USE att                             ! attribute manager 
    11384   USE dim                             ! dimension manager 
     
    11889 
    11990   ! type and variable 
    120    PRIVATE :: im_maxiter   !< default maximum number of iteration  
    12191   PRIVATE :: im_minext    !< default minumum number of point to extrapolate 
    12292   PRIVATE :: im_mincubic  !< default minumum number of point to extrapolate for cubic interpolation 
     
    12797   PUBLIC :: extrap_add_extrabands !< add extraband to the variable (to be extrapolated)  
    12898   PUBLIC :: extrap_del_extrabands !< delete extraband of the variable  
    129    PUBLIC :: extrap_deriv_1D       !< compute first derivative of 1D array  
    130    PUBLIC :: extrap_deriv_2D       !< compute first derivative of 2D array  
    131    PUBLIC :: extrap_deriv_3D       !< compute first derivative of 3D array 
    13299 
    133100   PRIVATE :: extrap__detect_wrapper      ! detected point to be extrapolated wrapper 
     
    141108   PRIVATE :: extrap__3D_dist_weight_fill !  
    142109 
    143    INTEGER(i4), PARAMETER :: im_maxiter = 10 !< default maximum number of iteration 
    144110   INTEGER(i4), PARAMETER :: im_minext  = 2  !< default minumum number of point to extrapolate 
    145111   INTEGER(i4), PARAMETER :: im_mincubic= 4  !< default minumum number of point to extrapolate for cubic interpolation 
     
    171137   !>  
    172138   !> @author J.Paul 
    173    !> - November, 2013- Initial Version 
     139   !> @date November, 2013 - Initial Version 
     140   !> @date June, 2015 
     141   !> - do not use level to select points to be extrapolated 
    174142   ! 
    175143   !> @param[in] td_var0   coarse grid variable to extrapolate 
    176    !> @param[in] td_level1 fine grid array of level 
    177    !> @param[in] id_offset array of offset between fine and coarse grid  
    178    !> @param[in] id_rho    array of refinment factor  
    179    !> @param[in] id_ext    array of number of points to be extrapolated 
    180144   !> @return array of point to be extrapolated 
    181145   !------------------------------------------------------------------- 
    182    FUNCTION extrap__detect( td_var0, td_level1, & 
    183    &                        id_offset, id_rho, id_ext ) 
     146   FUNCTION extrap__detect( td_var0 )  
    184147      IMPLICIT NONE 
    185148      ! Argument 
    186149      TYPE(TVAR) ,                 INTENT(IN   ) :: td_var0 
    187       TYPE(TVAR) , DIMENSION(:)  , INTENT(IN   ), OPTIONAL :: td_level1 
    188       INTEGER(i4), DIMENSION(:,:), INTENT(IN   ), OPTIONAL :: id_offset 
    189       INTEGER(i4), DIMENSION(:)  , INTENT(IN   ), OPTIONAL :: id_rho 
    190       INTEGER(i4), DIMENSION(:)  , INTENT(IN   ), OPTIONAL :: id_ext 
    191150 
    192151      ! function 
     
    196155 
    197156      ! local variable 
    198       CHARACTER(LEN=lc)                                :: cl_level 
    199  
    200       INTEGER(i4)                                      :: il_ind 
    201       INTEGER(i4)      , DIMENSION(:,:,:), ALLOCATABLE :: il_detect 
    202       INTEGER(i4)      , DIMENSION(:,:,:), ALLOCATABLE :: il_tmp 
    203       INTEGER(i4)      , DIMENSION(:,:)  , ALLOCATABLE :: il_offset 
    204       INTEGER(i4)      , DIMENSION(:,:)  , ALLOCATABLE :: il_level1 
    205       INTEGER(i4)      , DIMENSION(:,:)  , ALLOCATABLE :: il_level1_G0 
    206       INTEGER(i4)      , DIMENSION(:,:)  , ALLOCATABLE :: il_extra 
    207       INTEGER(i4)      , DIMENSION(:)    , ALLOCATABLE :: il_ext 
    208       INTEGER(i4)      , DIMENSION(:)    , ALLOCATABLE :: il_rho 
    209       INTEGER(i4)      , DIMENSION(:)    , ALLOCATABLE :: il_dim0 
    210  
    211       TYPE(TVAR)                                       :: tl_var1 
    212  
    213157      ! loop indices 
    214158      INTEGER(i4) :: ji0 
    215159      INTEGER(i4) :: jj0 
    216160      INTEGER(i4) :: jk0 
    217       INTEGER(i4) :: ji1 
    218       INTEGER(i4) :: jj1 
    219       INTEGER(i4) :: ji1m 
    220       INTEGER(i4) :: jj1m 
    221       INTEGER(i4) :: ji1p 
    222       INTEGER(i4) :: jj1p 
    223161      !---------------------------------------------------------------- 
    224162 
    225       ! init 
    226       extrap__detect(:,:,:)=0 
    227  
    228       ALLOCATE( il_dim0(3) ) 
    229       il_dim0(:)=td_var0%t_dim(1:3)%i_len 
    230  
    231       ! optional argument 
    232       ALLOCATE( il_rho(ip_maxdim) ) 
    233       il_rho(:)=1 
    234       IF( PRESENT(id_rho) ) il_rho(1:SIZE(id_rho(:)))=id_rho(:) 
    235  
    236       ALLOCATE( il_offset(ip_maxdim,2) ) 
    237       il_offset(:,:)=0 
    238       IF( PRESENT(id_offset) )THEN 
    239          il_offset(1:SIZE(id_offset(:,:),DIM=1),& 
    240          &         1:SIZE(id_offset(:,:),DIM=2) )= id_offset(:,:) 
    241       ELSE 
    242          il_offset(jp_I,:)=FLOOR(REAL(il_rho(jp_I)-1,dp)*0.5) 
    243          il_offset(jp_J,:)=FLOOR(REAL(il_rho(jp_J)-1,dp)*0.5) 
    244       ENDIF 
    245  
    246       ALLOCATE( il_ext(ip_maxdim) ) 
    247       il_ext(:)=im_minext 
    248       IF( PRESENT(id_ext) ) il_ext(1:SIZE(id_ext(:)))=id_ext(:) 
    249  
    250       ALLOCATE( il_detect(il_dim0(1),& 
    251       &                   il_dim0(2),& 
    252       &                   il_dim0(3)) ) 
    253       il_detect(:,:,:)=0 
    254  
    255       ! select point already inform 
    256       DO jk0=1,td_var0%t_dim(3)%i_len 
    257          DO jj0=1,td_var0%t_dim(2)%i_len 
    258             DO ji0=1,td_var0%t_dim(1)%i_len 
    259                IF( td_var0%d_value(ji0,jj0,jk0,1) /= td_var0%d_fill ) il_detect(ji0,jj0,jk0)=1 
    260             ENDDO 
    261          ENDDO 
    262       ENDDO 
    263   
    264       IF( PRESENT(td_level1) )THEN 
    265          SELECT CASE(TRIM(td_var0%c_point)) 
    266             CASE DEFAULT !'T' 
    267                cl_level='tlevel' 
    268             CASE('U') 
    269                cl_level='ulevel' 
    270             CASE('V') 
    271                cl_level='vlevel' 
    272             CASE('F') 
    273                cl_level='flevel' 
    274          END SELECT 
    275  
    276          il_ind=var_get_index(td_level1(:),TRIM(cl_level)) 
    277          IF( il_ind == 0 )THEN 
    278             CALL logger_error("EXTRAP DETECT: can not compute point to be "//& 
    279             &     "extrapolated for variable "//TRIM(td_var0%c_name)//& 
    280             &      ". can not find "//& 
    281             &     "level for variable point "//TRIM(TRIM(td_var0%c_point))) 
    282          ELSE 
    283             tl_var1=var_copy(td_level1(il_ind)) 
    284  
    285             ALLOCATE( il_level1_G0( il_dim0(1), il_dim0(2)) ) 
    286             IF( ALL(tl_var1%t_dim(1:2)%i_len == il_dim0(1:2)) )THEN 
    287  
    288                ! variable to be extrapolated use same resolution than level 
    289                il_level1_G0(:,:)=INT(tl_var1%d_value(:,:,1,1),i4) 
    290                 
    291             ELSE 
    292                ! variable to be extrapolated do not use same resolution than level 
    293                ALLOCATE( il_level1(tl_var1%t_dim(1)%i_len, & 
    294                &                   tl_var1%t_dim(2)%i_len) ) 
    295                ! match fine grid vertical level with coarse grid 
    296                il_level1(:,:)=INT(tl_var1%d_value(:,:,1,1),i4)/il_rho(jp_K) 
    297  
    298                ALLOCATE( il_extra(ip_maxdim,2) ) 
    299                ! coarsening fine grid level 
    300                il_extra(jp_I,1)=CEILING(REAL(il_rho(jp_I)-1,dp)*0.5_dp) 
    301                il_extra(jp_I,2)=FLOOR(REAL(il_rho(jp_I)-1,dp)*0.5_dp) 
    302  
    303                il_extra(jp_J,1)=CEILING(REAL(il_rho(jp_J)-1,dp)*0.5_dp) 
    304                il_extra(jp_J,2)=FLOOR(REAL(il_rho(jp_J)-1,dp)*0.5_dp) 
    305  
    306                DO jj0=1,td_var0%t_dim(2)%i_len 
    307                    
    308                   jj1=(jj0-1)*il_rho(jp_J)+1-il_offset(jp_J,1) 
    309  
    310                   jj1m=MAX( jj1-il_extra(jp_J,1), 1 ) 
    311                   jj1p=MIN( jj1+il_extra(jp_J,2), & 
    312                   &         tl_var1%t_dim(2)%i_len-il_offset(jp_J,2) ) 
    313                    
    314                   DO ji0=1,td_var0%t_dim(1)%i_len 
    315  
    316                      ji1=(ji0-1)*il_rho(jp_I)+1-id_offset(jp_I,1) 
    317  
    318                      ji1m=MAX( ji1-il_extra(jp_I,1), 1 ) 
    319                      ji1p=MIN( ji1+il_extra(jp_I,2), & 
    320                      &         tl_var1%t_dim(1)%i_len-id_offset(jp_I,2) ) 
    321                 
    322                      il_level1_G0(ji0,jj0)=MAXVAL(il_level1(ji1m:ji1p,jj1m:jj1p)) 
    323  
    324                   ENDDO 
    325                ENDDO 
    326  
    327                ! clean 
    328                DEALLOCATE( il_extra ) 
    329                DEALLOCATE( il_level1 ) 
    330  
    331             ENDIF 
    332  
    333             ! look for sea point 
    334             DO jk0=1,td_var0%t_dim(3)%i_len 
    335                WHERE( il_level1_G0(:,:) >= jk0) 
    336                   il_detect(:,:,jk0)=1 
    337                END WHERE 
    338             ENDDO 
    339  
    340             ! clean 
    341             DEALLOCATE( il_level1_G0 ) 
    342             CALL var_clean(tl_var1) 
    343  
    344          ENDIF 
    345       ENDIF 
    346  
    347       ! clean 
    348       DEALLOCATE( il_offset ) 
    349   
    350       ALLOCATE( il_tmp(il_dim0(1),& 
    351       &                il_dim0(2),& 
    352       &                il_dim0(3)) ) 
    353       il_tmp(:,:,:)=il_detect(:,:,:) 
    354       ! select extra point depending on interpolation method 
    355       ! compute point near grid point already inform 
    356       DO jk0=1,il_dim0(3) 
    357          DO jj0=1,il_dim0(2) 
    358             DO ji0=1,il_dim0(1) 
    359  
    360                IF( il_tmp(ji0,jj0,jk0) == 1 )THEN 
    361                   il_detect( & 
    362                   &  MAX(1,ji0-il_ext(jp_I)):MIN(ji0+il_ext(jp_I),il_dim0(1)),& 
    363                   &  MAX(1,jj0-il_ext(jp_J)):MIN(jj0+il_ext(jp_J),il_dim0(2)),& 
    364                   &  MAX(1,jk0-il_ext(jp_K)):MIN(jk0+il_ext(jp_K),il_dim0(3)) & 
    365                   &  ) = 1  
    366                ENDIF 
    367  
    368             ENDDO 
    369          ENDDO 
    370       ENDDO 
    371        
    372       ! clean 
    373       DEALLOCATE( il_tmp ) 
     163      ! force to extrapolated all points 
     164      extrap__detect(:,:,:)=1 
    374165 
    375166      ! do not compute grid point already inform 
     
    377168         DO jj0=1,td_var0%t_dim(2)%i_len 
    378169            DO ji0=1,td_var0%t_dim(1)%i_len 
    379                IF( td_var0%d_value(ji0,jj0,jk0,1) /= td_var0%d_fill ) il_detect(ji0,jj0,jk0)=0 
     170               IF( td_var0%d_value(ji0,jj0,jk0,1) /= td_var0%d_fill )THEN 
     171                  extrap__detect(ji0,jj0,jk0)=0 
     172               ENDIF 
    380173            ENDDO 
    381174         ENDDO 
    382175      ENDDO 
    383  
    384       ! save result 
    385       extrap__detect(:,:,:)=il_detect(:,:,:) 
    386  
    387       ! clean 
    388       DEALLOCATE( il_dim0 ) 
    389       DEALLOCATE( il_ext ) 
    390       DEALLOCATE( il_detect ) 
    391       DEALLOCATE( il_rho ) 
    392176 
    393177   END FUNCTION extrap__detect 
     
    398182   !>  
    399183   !> @author J.Paul 
    400    !> - November, 2013- Initial Version 
     184   !> @date November, 2013 - Initial Version 
     185   !> @date June, 2015 
     186   !> - select all land points for extrapolation 
    401187   !> 
    402188   !> @param[in] td_var    coarse grid variable to extrapolate 
    403    !> @param[in] td_level  fine grid array of level 
    404    !> @param[in] id_offset array of offset between fine and coarse grid  
    405    !> @param[in] id_rho    array of refinment factor  
    406    !> @param[in] id_ext    array of number of points to be extrapolated 
    407189   !> @return 3D array of point to be extrapolated 
    408190   !------------------------------------------------------------------- 
    409    FUNCTION extrap__detect_wrapper( td_var, td_level, & 
    410    &                                id_offset, id_rho, id_ext ) 
     191   FUNCTION extrap__detect_wrapper( td_var ) 
    411192 
    412193      IMPLICIT NONE 
    413194      ! Argument 
    414195      TYPE(TVAR) ,                 INTENT(IN   ) :: td_var 
    415       TYPE(TVAR) , DIMENSION(:)  , INTENT(IN   ), OPTIONAL :: td_level 
    416       INTEGER(i4), DIMENSION(:,:), INTENT(IN   ), OPTIONAL :: id_offset 
    417       INTEGER(i4), DIMENSION(:)  , INTENT(IN   ), OPTIONAL :: id_rho 
    418       INTEGER(i4), DIMENSION(:)  , INTENT(IN   ), OPTIONAL :: id_ext 
    419196 
    420197      ! function 
     
    439216         &              " for variable "//TRIM(td_var%c_name) ) 
    440217          
    441          extrap__detect_wrapper(:,:,:)=extrap__detect( td_var, td_level, & 
    442          &                                             id_offset, & 
    443          &                                             id_rho,    & 
    444          &                                             id_ext     ) 
     218         extrap__detect_wrapper(:,:,:)=extrap__detect( td_var ) 
    445219 
    446220      ELSE IF( ALL(td_var%t_dim(1:2)%l_use) )THEN 
     
    450224         &              " for variable "//TRIM(td_var%c_name) ) 
    451225          
    452          extrap__detect_wrapper(:,:,1:1)=extrap__detect( td_var , td_level,& 
    453          &                                               id_offset, & 
    454          &                                               id_rho,    & 
    455          &                                               id_ext     ) 
     226         extrap__detect_wrapper(:,:,1:1)=extrap__detect( td_var ) 
    456227 
    457228      ELSE IF( td_var%t_dim(3)%l_use )THEN 
     
    461232         &              " for variable "//TRIM(td_var%c_name) ) 
    462233          
    463          extrap__detect_wrapper(1:1,1:1,:)=extrap__detect( td_var , td_level, & 
    464          &                                                 id_offset, & 
    465          &                                                 id_rho,    & 
    466          &                                                 id_ext     ) 
     234         extrap__detect_wrapper(1:1,1:1,:)=extrap__detect( td_var ) 
    467235 
    468236      ENDIF               
     
    489257   !> 
    490258   !> @author J.Paul 
    491    !> - Nov, 2013- Initial Version 
     259   !> @date November, 2013 - Initial Version 
     260   !> @date June, 2015 
     261   !> - select all land points for extrapolation 
    492262   ! 
    493263   !> @param[inout] td_var    variable structure 
    494    !> @param[in] td_level     fine grid array of level 
    495    !> @param[in] id_offset    array of offset between fine and coarse grid  
    496    !> @param[in] id_rho       array of refinment factor  
    497    !> @param[in] id_iext      number of points to be extrapolated in i-direction 
    498    !> @param[in] id_jext      number of points to be extrapolated in j-direction 
    499    !> @param[in] id_kext      number of points to be extrapolated in k-direction 
    500264   !> @param[in] id_radius    radius of the halo used to compute extrapolation  
    501    !> @param[in] id_maxiter   maximum number of iteration 
    502    !------------------------------------------------------------------- 
    503    SUBROUTINE extrap__fill_value_wrapper( td_var, td_level, & 
    504    &                                      id_offset,        & 
    505    &                                      id_rho,           & 
    506    &                                      id_iext, id_jext, id_kext, & 
    507    &                                      id_radius, id_maxiter ) 
     265   !------------------------------------------------------------------- 
     266   SUBROUTINE extrap__fill_value_wrapper( td_var, &  
     267   &                                      id_radius ) 
    508268      IMPLICIT NONE 
    509269      ! Argument 
    510270      TYPE(TVAR) ,                  INTENT(INOUT) :: td_var 
    511       TYPE(TVAR) ,  DIMENSION(:)  , INTENT(IN   ), OPTIONAL :: td_level 
    512       INTEGER(i4),  DIMENSION(:,:), INTENT(IN   ), OPTIONAL :: id_offset 
    513       INTEGER(i4),  DIMENSION(:)  , INTENT(IN   ), OPTIONAL :: id_rho 
    514       INTEGER(i4),                  INTENT(IN   ), OPTIONAL :: id_iext 
    515       INTEGER(i4),                  INTENT(IN   ), OPTIONAL :: id_jext 
    516       INTEGER(i4),                  INTENT(IN   ), OPTIONAL :: id_kext 
    517271      INTEGER(i4),                  INTENT(IN   ), OPTIONAL :: id_radius 
    518       INTEGER(i4),                  INTENT(IN   ), OPTIONAL :: id_maxiter 
    519272 
    520273      ! local variable 
    521       INTEGER(i4) :: il_iext 
    522       INTEGER(i4) :: il_jext 
    523       INTEGER(i4) :: il_kext 
    524274      INTEGER(i4) :: il_radius 
    525       INTEGER(i4) :: il_maxiter 
    526275 
    527276      CHARACTER(LEN=lc) :: cl_method 
     
    544293         END SELECT 
    545294 
    546          il_iext=im_minext 
    547          IF( PRESENT(id_iext) ) il_iext=id_iext 
    548          il_jext=im_minext 
    549          IF( PRESENT(id_jext) ) il_jext=id_jext 
    550          il_kext=0 
    551          IF( PRESENT(id_kext) ) il_kext=id_kext 
    552  
    553          IF( TRIM(td_var%c_interp(1)) == 'cubic')THEN 
    554             IF( il_iext > 0 .AND. il_iext < im_mincubic ) il_iext=im_mincubic 
    555             IF( il_jext > 0 .AND. il_jext < im_mincubic ) il_jext=im_mincubic 
     295         ! number of point use to compute box 
     296         il_radius=1 
     297         IF( PRESENT(id_radius) ) il_radius=id_radius 
     298         IF( il_radius < 0 )THEN 
     299            CALL logger_error("EXTRAP FILL VALUE: invalid "//& 
     300            &  " radius of the box used to compute extrapolation "//& 
     301            &  "("//TRIM(fct_str(il_radius))//")") 
    556302         ENDIF 
    557303 
    558          IF( il_iext < 0 )THEN 
    559             CALL logger_error("EXTRAP FILL VALUE: invalid "//& 
    560             &  " number of points to be extrapolated in i-direction "//& 
    561             &  "("//TRIM(fct_str(il_iext))//")") 
    562          ENDIF 
    563  
    564          IF( il_jext < 0 )THEN 
    565             CALL logger_error("EXTRAP FILL VALUE: invalid "//& 
    566             &  " number of points to be extrapolated in j-direction "//& 
    567             &  "("//TRIM(fct_str(il_jext))//")") 
    568          ENDIF 
    569  
    570          IF( il_kext < 0 )THEN 
    571             CALL logger_error("EXTRAP FILL VALUE: invalid "//& 
    572             &  " number of points to be extrapolated in k-direction "//& 
    573             &  "("//TRIM(fct_str(il_kext))//")") 
    574          ENDIF 
    575  
    576          IF( (il_iext /= 0 .AND. td_var%t_dim(1)%l_use) .OR. & 
    577          &   (il_jext /= 0 .AND. td_var%t_dim(2)%l_use) .OR. & 
    578          &   (il_kext /= 0 .AND. td_var%t_dim(3)%l_use) )THEN 
    579  
    580             ! number of point use to compute box 
    581             il_radius=1 
    582             IF( PRESENT(id_radius) ) il_radius=id_radius 
    583             IF( il_radius < 0 )THEN 
    584                CALL logger_error("EXTRAP FILL VALUE: invalid "//& 
    585                &  " radius of the box used to compute extrapolation "//& 
    586                &  "("//TRIM(fct_str(il_radius))//")") 
    587             ENDIF 
    588  
    589             ! maximum number of iteration 
    590             il_maxiter=im_maxiter 
    591             IF( PRESENT(id_maxiter) ) il_maxiter=id_maxiter 
    592             IF( il_maxiter < 0 )THEN 
    593                CALL logger_error("EXTRAP FILL VALUE: invalid "//& 
    594                &  " maximum nuber of iteration "//& 
    595                &  "("//TRIM(fct_str(il_maxiter))//")") 
    596             ENDIF 
    597  
    598             CALL logger_info("EXTRAP FILL: extrapolate "//TRIM(td_var%c_name)//& 
    599             &  " using "//TRIM(cl_method)//" method." ) 
    600  
    601             CALL extrap__fill_value( td_var, cl_method, & 
    602             &                        il_iext, il_jext, il_kext,   & 
    603             &                        il_radius, il_maxiter,       & 
    604             &                        td_level,                    & 
    605             &                        id_offset, id_rho ) 
    606   
    607          ENDIF 
     304         CALL logger_info("EXTRAP FILL: extrapolate "//TRIM(td_var%c_name)//& 
     305         &  " using "//TRIM(cl_method)//" method." ) 
     306 
     307         CALL extrap__fill_value( td_var, cl_method, & 
     308         &                        il_radius ) 
    608309  
    609310      ENDIF 
     
    621322   !> 
    622323   !> @author J.Paul 
    623    !> - November, 2013- Initial Version 
     324   !> @date November, 2013 - Initial Version 
     325   !> @date June, 2015 
     326   !> - select all land points for extrapolation 
    624327   ! 
    625328   !> @param[inout] td_var    variable structure 
    626329   !> @param[in] cd_method    extrapolation method 
    627    !> @param[in] id_iext      number of points to be extrapolated in i-direction 
    628    !> @param[in] id_jext      number of points to be extrapolated in j-direction 
    629    !> @param[in] id_kext      number of points to be extrapolated in k-direction 
    630330   !> @param[in] id_radius    radius of the halo used to compute extrapolation 
    631    !> @param[in] id_maxiter   maximum number of iteration 
    632    !> @param[in] td_level     fine grid array of level 
    633    !> @param[in] id_offset    array of offset between fine and coarse grid  
    634    !> @param[in] id_rho       array of refinment factor 
    635331   !------------------------------------------------------------------- 
    636332   SUBROUTINE extrap__fill_value( td_var, cd_method, & 
    637    &                              id_iext, id_jext, id_kext, & 
    638    &                              id_radius, id_maxiter, & 
    639    &                              td_level,          & 
    640    &                              id_offset,         & 
    641    &                              id_rho ) 
     333   &                              id_radius ) 
    642334      IMPLICIT NONE 
    643335      ! Argument 
    644336      TYPE(TVAR)      ,                 INTENT(INOUT) :: td_var 
    645337      CHARACTER(LEN=*),                 INTENT(IN   ) :: cd_method 
    646       INTEGER(i4)     ,                 INTENT(IN   ) :: id_iext 
    647       INTEGER(i4)     ,                 INTENT(IN   ) :: id_jext 
    648       INTEGER(i4)     ,                 INTENT(IN   ) :: id_kext 
    649338      INTEGER(i4)     ,                 INTENT(IN   ) :: id_radius 
    650       INTEGER(i4)     ,                 INTENT(IN   ) :: id_maxiter 
    651       TYPE(TVAR)      , DIMENSION(:)  , INTENT(IN   ), OPTIONAL :: td_level 
    652       INTEGER(i4)     , DIMENSION(:,:), INTENT(IN   ), OPTIONAL :: id_offset 
    653       INTEGER(i4)     , DIMENSION(:)  , INTENT(IN   ), OPTIONAL :: id_rho 
    654339 
    655340      ! local variable 
     
    668353      &                    td_var%t_dim(3)%i_len) ) 
    669354 
    670       il_detect(:,:,:) = extrap_detect( td_var, td_level, & 
    671       &                                 id_offset,        & 
    672       &                                 id_rho,           & 
    673       &                                 id_ext=(/id_iext, id_jext, id_kext/) ) 
     355      il_detect(:,:,:) = extrap_detect( td_var ) 
     356 
    674357      !2- add attribute to variable 
    675358      cl_extrap=fct_concat(td_var%c_extrap(:)) 
     
    679362      CALL att_clean(tl_att) 
    680363 
    681       CALL logger_info(" EXTRAP FILL: "//& 
    682          &              TRIM(fct_str(SUM(il_detect(:,:,:))))//& 
    683          &              " point(s) to extrapolate " ) 
    684  
    685       !3- extrapolate 
    686       CALL extrap__3D(td_var%d_value(:,:,:,:), td_var%d_fill,    & 
    687       &               il_detect(:,:,:),                           & 
    688       &               cd_method, id_radius, id_maxiter  ) 
     364      IF( ALL(il_detect(:,:,:)==1) )THEN 
     365         CALL logger_warn(" EXTRAP FILL: "//& 
     366            &  " can not extrapolate "//TRIM(td_var%c_name)//& 
     367            &  ". no value inform." ) 
     368      ELSE 
     369         CALL logger_info(" EXTRAP FILL: "//& 
     370            &              TRIM(fct_str(SUM(il_detect(:,:,:))))//& 
     371            &              " point(s) to extrapolate " ) 
     372 
     373         CALL logger_info(" EXTRAP FILL: method "//& 
     374            &  TRIM(cd_method) ) 
     375 
     376         !3- extrapolate 
     377         CALL extrap__3D(td_var%d_value(:,:,:,:), td_var%d_fill, & 
     378         &               il_detect(:,:,:),                       & 
     379         &               cd_method, id_radius ) 
     380      ENDIF 
    689381 
    690382      DEALLOCATE(il_detect) 
     
    705397   !> 
    706398   !> @author J.Paul 
    707    !> - Nov, 2013- Initial Version 
     399   !> @date November, 2013 - Initial Version 
     400   !> @date July, 2015  
     401   !> - compute coef indices to be used 
     402   !> - bug fix: force coef indice to 1, for dimension lenth equal to 1 
    708403   ! 
    709404   !> @param[inout] dd_value  3D array of variable to be extrapolated 
     
    714409   !------------------------------------------------------------------- 
    715410   SUBROUTINE extrap__3D( dd_value, dd_fill, id_detect,& 
    716    &                      cd_method, id_radius, id_maxiter ) 
     411   &                      cd_method, id_radius ) 
    717412      IMPLICIT NONE 
    718413      ! Argument 
    719414      REAL(dp)   , DIMENSION(:,:,:,:), INTENT(INOUT) :: dd_value 
    720       REAL(dp)   ,                   INTENT(IN   ) :: dd_fill 
    721       INTEGER(i4), DIMENSION(:,:,:), INTENT(INOUT) :: id_detect 
    722       CHARACTER(LEN=*),              INTENT(IN   ) :: cd_method 
    723       INTEGER(i4),                   INTENT(IN   ) :: id_radius 
    724       INTEGER(i4),                   INTENT(IN   ) :: id_maxiter 
     415      REAL(dp)   ,                     INTENT(IN   ) :: dd_fill 
     416      INTEGER(i4), DIMENSION(:,:,:)  , INTENT(INOUT) :: id_detect 
     417      CHARACTER(LEN=*),                INTENT(IN   ) :: cd_method 
     418      INTEGER(i4),                     INTENT(IN   ) :: id_radius 
    725419 
    726420      ! local variable 
    727       INTEGER(i4) :: il_imin 
    728       INTEGER(i4) :: il_imax 
    729       INTEGER(i4) :: il_jmin 
    730       INTEGER(i4) :: il_jmax 
    731       INTEGER(i4) :: il_kmin 
    732       INTEGER(i4) :: il_kmax 
    733       INTEGER(i4) :: il_iter 
    734       INTEGER(i4) :: il_radius 
    735  
    736       INTEGER(i4), DIMENSION(4) :: il_shape 
    737       INTEGER(i4), DIMENSION(3) :: il_dim 
     421      INTEGER(i4)                                :: il_imin 
     422      INTEGER(i4)                                :: il_imax 
     423      INTEGER(i4)                                :: il_jmin 
     424      INTEGER(i4)                                :: il_jmax 
     425      INTEGER(i4)                                :: il_kmin 
     426      INTEGER(i4)                                :: il_kmax 
     427      INTEGER(i4)                                :: il_iter 
     428      INTEGER(i4)                                :: il_radius 
     429      INTEGER(i4)                                :: il_i1 
     430      INTEGER(i4)                                :: il_i2 
     431      INTEGER(i4)                                :: il_j1 
     432      INTEGER(i4)                                :: il_j2 
     433      INTEGER(i4)                                :: il_k1 
     434      INTEGER(i4)                                :: il_k2 
     435 
     436      INTEGER(i4), DIMENSION(4)                  :: il_shape 
     437      INTEGER(i4), DIMENSION(3)                  :: il_dim 
    738438 
    739439      INTEGER(i4), DIMENSION(:,:,:), ALLOCATABLE :: il_detect 
     
    743443      REAL(dp)   , DIMENSION(:,:,:), ALLOCATABLE :: dl_dfdz 
    744444      REAL(dp)   , DIMENSION(:,:,:), ALLOCATABLE :: dl_coef 
     445 
     446      LOGICAL                                    :: ll_iter 
    745447 
    746448      ! loop indices 
     
    765467            DO WHILE( ANY(il_detect(:,:,:)==1) ) 
    766468               ! change extend value to minimize number of iteration 
    767                il_radius=id_radius+(il_iter/id_maxiter) 
     469               il_radius=id_radius+(il_iter-1) 
     470               ll_iter=.TRUE. 
    768471 
    769472               ALLOCATE( dl_dfdx(il_shape(1), il_shape(2), il_shape(3)) )  
     
    774477               dl_dfdx(:,:,:)=dd_fill 
    775478               IF( il_shape(1) > 1 )THEN 
    776                   dl_dfdx(:,:,:)=extrap_deriv_3D( dd_value(:,:,:,jl), dd_fill, 'I' ) 
     479                  dl_dfdx(:,:,:)=math_deriv_3D( dd_value(:,:,:,jl), & 
     480                     &                          dd_fill, 'I' ) 
    777481               ENDIF 
    778482 
     
    780484               dl_dfdy(:,:,:)=dd_fill 
    781485               IF( il_shape(2) > 1 )THEN 
    782                   dl_dfdy(:,:,:)=extrap_deriv_3D( dd_value(:,:,:,jl), dd_fill, 'J' ) 
     486                  dl_dfdy(:,:,:)=math_deriv_3D( dd_value(:,:,:,jl), & 
     487                     &                          dd_fill, 'J' ) 
    783488               ENDIF 
    784489  
     
    786491               dl_dfdz(:,:,:)=dd_fill 
    787492               IF( il_shape(3) > 1 )THEN 
    788                   dl_dfdz(:,:,:)=extrap_deriv_3D( dd_value(:,:,:,jl), dd_fill, 'K' ) 
     493                  dl_dfdz(:,:,:)=math_deriv_3D( dd_value(:,:,:,jl), & 
     494                     &                          dd_fill, 'K' ) 
    789495               ENDIF 
    790496  
     
    804510 
    805511               DO jk=1,il_shape(3)