- Timestamp:
- 2019-09-19T11:18:03+02:00 (5 years ago)
- Location:
- NEMO/branches/2019/dev_r11233_AGRIF-05_jchanut_vert_coord_interp/src/OCE/IOM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11233_AGRIF-05_jchanut_vert_coord_interp/src/OCE/IOM/in_out_manager.F90
r10817 r11573 80 80 INTEGER :: nleapy !: Leap year calendar flag (0/1 or 30) 81 81 INTEGER :: ninist !: initial state output flag (0/1) 82 INTEGER :: nwrite !: model standard output frequency83 INTEGER :: nstock !: restart file frequency84 INTEGER, DIMENSION(10) :: nstocklist !: restart dump times85 82 86 83 !!---------------------------------------------------------------------- … … 167 164 CHARACTER(lc) :: ctmp7, ctmp8, ctmp9 !: temporary characters 7 to 9 168 165 CHARACTER(lc) :: ctmp10 !: temporary character 10 169 CHARACTER(lc) :: cform_err = "(/,' ===>>> : E R R O R', /,' ===========',/)" !:170 CHARACTER(lc) :: cform_war = "(/,' ===>>> : W A R N I N G', /,' ===============',/)" !:171 166 LOGICAL :: lwm = .FALSE. !: boolean : true on the 1st processor only (always) 172 167 LOGICAL :: lwp = .FALSE. !: boolean : true on the 1st processor only .OR. ln_ctl -
NEMO/branches/2019/dev_r11233_AGRIF-05_jchanut_vert_coord_interp/src/OCE/IOM/iom.F90
r10817 r11573 58 58 PUBLIC iom_init, iom_swap, iom_open, iom_close, iom_setkt, iom_varid, iom_get 59 59 PUBLIC iom_chkatt, iom_getatt, iom_putatt, iom_getszuld, iom_rstput, iom_delay_rst, iom_put 60 PUBLIC iom_use, iom_context_finalize 60 PUBLIC iom_use, iom_context_finalize, iom_miss_val 61 61 62 62 PRIVATE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d … … 212 212 CALL iom_set_axis_attr( "depthv", bounds=zw_bnds ) 213 213 CALL iom_set_axis_attr( "depthw", bounds=zt_bnds ) 214 !215 # if defined key_floats216 214 CALL iom_set_axis_attr( "nfloat", (/ (REAL(ji,wp), ji=1,jpnfl) /) ) 217 # endif218 215 # if defined key_si3 219 216 CALL iom_set_axis_attr( "ncatice", (/ (REAL(ji,wp), ji=1,jpl) /) ) … … 697 694 clname = trim(cdname) 698 695 IF ( .NOT. Agrif_Root() .AND. .NOT. lliof ) THEN 699 iln = INDEX(clname,'/') 696 !FUS iln = INDEX(clname,'/') 697 iln = INDEX(clname,'/',BACK=.true.) ! FUS: to insert the nest index at the right location within the string, the last / has to be found (search from the right to left) 700 698 cltmpn = clname(1:iln) 701 699 clname = clname(iln+1:LEN_TRIM(clname)) … … 835 833 836 834 837 FUNCTION iom_varid ( kiomid, cdvar, kdimsz, kndims, ld stop )835 FUNCTION iom_varid ( kiomid, cdvar, kdimsz, kndims, lduld, ldstop ) 838 836 !!----------------------------------------------------------------------- 839 837 !! *** FUNCTION iom_varid *** … … 844 842 CHARACTER(len=*) , INTENT(in ) :: cdvar ! name of the variable 845 843 INTEGER, DIMENSION(:), INTENT( out), OPTIONAL :: kdimsz ! size of each dimension 846 INTEGER, INTENT( out), OPTIONAL :: kndims ! size of the dimensions 844 INTEGER , INTENT( out), OPTIONAL :: kndims ! number of dimensions 845 LOGICAL , INTENT( out), OPTIONAL :: lduld ! true if the last dimension is unlimited (time) 847 846 LOGICAL , INTENT(in ), OPTIONAL :: ldstop ! stop if looking for non-existing variable (default = .TRUE.) 848 847 ! … … 874 873 iiv = iiv + 1 875 874 IF( iiv <= jpmax_vars ) THEN 876 iom_varid = iom_nf90_varid( kiomid, cdvar, iiv, kdimsz, kndims )875 iom_varid = iom_nf90_varid( kiomid, cdvar, iiv, kdimsz, kndims, lduld ) 877 876 ELSE 878 877 CALL ctl_stop( trim(clinfo), 'Too many variables in the file '//iom_file(kiomid)%name, & … … 892 891 ENDIF 893 892 IF( PRESENT(kndims) ) kndims = iom_file(kiomid)%ndims(iiv) 893 IF( PRESENT( lduld) ) lduld = iom_file(kiomid)%luld( iiv) 894 894 ENDIF 895 895 ENDIF … … 1270 1270 !--- overlap areas and extra hallows (mpp) 1271 1271 IF( PRESENT(pv_r2d) .AND. idom /= jpdom_unknown ) THEN 1272 CALL lbc_lnk( 'iom', pv_r2d,'Z', -999.,'no0')1272 CALL lbc_lnk( 'iom', pv_r2d,'Z', -999., kfillmode = jpfillnothing ) 1273 1273 ELSEIF( PRESENT(pv_r3d) .AND. idom /= jpdom_unknown ) THEN 1274 1274 ! this if could be simplified with the new lbc_lnk that works with any size of the 3rd dimension 1275 1275 IF( icnt(3) == inlev ) THEN 1276 CALL lbc_lnk( 'iom', pv_r3d,'Z', -999.,'no0')1276 CALL lbc_lnk( 'iom', pv_r3d,'Z', -999., kfillmode = jpfillnothing ) 1277 1277 ELSE ! put some arbitrary value (a call to lbc_lnk will be done later...) 1278 1278 DO jj = nlcj+1, jpj ; pv_r3d(1:nlci, jj, :) = pv_r3d(1:nlci, nlej, :) ; END DO … … 1299 1299 CALL xios_recv_field( trim(cdvar), pv_r3d) 1300 1300 IF(idom /= jpdom_unknown ) then 1301 CALL lbc_lnk( 'iom', pv_r3d,'Z', -999.,'no0')1301 CALL lbc_lnk( 'iom', pv_r3d,'Z', -999., kfillmode = jpfillnothing) 1302 1302 ENDIF 1303 1303 ELSEIF( PRESENT(pv_r2d) ) THEN … … 1306 1306 CALL xios_recv_field( trim(cdvar), pv_r2d) 1307 1307 IF(idom /= jpdom_unknown ) THEN 1308 CALL lbc_lnk('iom', pv_r2d,'Z',-999., 'no0')1308 CALL lbc_lnk('iom', pv_r2d,'Z',-999., kfillmode = jpfillnothing) 1309 1309 ENDIF 1310 1310 ELSEIF( PRESENT(pv_r1d) ) THEN … … 1669 1669 CHARACTER(LEN=*), INTENT(in) :: cdname 1670 1670 REAL(wp) , INTENT(in) :: pfield0d 1671 REAL(wp) , DIMENSION(jpi,jpj) :: zz ! masson1671 !! REAL(wp) , DIMENSION(jpi,jpj) :: zz ! masson 1672 1672 #if defined key_iomput 1673 zz(:,:)=pfield0d1674 CALL xios_send_field(cdname, zz)1675 !CALL xios_send_field(cdname, (/pfield0d/))1673 !!clem zz(:,:)=pfield0d 1674 !!clem CALL xios_send_field(cdname, zz) 1675 CALL xios_send_field(cdname, (/pfield0d/)) 1676 1676 #else 1677 1677 IF( .FALSE. ) WRITE(numout,*) cdname, pfield0d ! useless test to avoid compilation warnings … … 1979 1979 ! Cell vertices on boundries 1980 1980 DO jn = 1, 4 1981 CALL lbc_lnk( 'iom', z_bnds(jn,:,:,1), cdgrd, 1., p val=999._wp )1982 CALL lbc_lnk( 'iom', z_bnds(jn,:,:,2), cdgrd, 1., p val=999._wp )1981 CALL lbc_lnk( 'iom', z_bnds(jn,:,:,1), cdgrd, 1., pfillval=999._wp ) 1982 CALL lbc_lnk( 'iom', z_bnds(jn,:,:,2), cdgrd, 1., pfillval=999._wp ) 1983 1983 END DO 1984 1984 ! … … 2239 2239 CHARACTER(LEN=20) :: clfreq 2240 2240 CHARACTER(LEN=20) :: cldate 2241 CHARACTER(LEN=256) :: cltmpn !FUS needed for correct path with AGRIF 2242 INTEGER :: iln !FUS needed for correct path with AGRIF 2241 2243 INTEGER :: idx 2242 2244 INTEGER :: jn … … 2321 2323 END DO 2322 2324 ! 2323 IF( jn == 1 .AND. TRIM(Agrif_CFixed()) /= '0' ) clname = TRIM(Agrif_CFixed())//"_"//TRIM(clname) 2325 !FUS IF( jn == 1 .AND. TRIM(Agrif_CFixed()) /= '0' ) clname = TRIM(Agrif_CFixed())//"_"//TRIM(clname) 2326 !FUS see comment line 700 2327 IF( jn == 1 .AND. TRIM(Agrif_CFixed()) /= '0' ) THEN 2328 iln = INDEX(clname,'/',BACK=.true.) 2329 cltmpn = clname(1:iln) 2330 clname = clname(iln+1:LEN_TRIM(clname)) 2331 clname = TRIM(cltmpn)//TRIM(Agrif_CFixed())//'_'//TRIM(clname) 2332 ENDIF 2333 !FUS 2324 2334 IF( jn == 1 ) CALL iom_set_file_attr( cdid, name = clname ) 2325 2335 IF( jn == 2 ) CALL iom_set_file_attr( cdid, name_suffix = clname ) … … 2389 2399 !! NOT 'key_iomput' a few dummy routines 2390 2400 !!---------------------------------------------------------------------- 2391 2392 2401 SUBROUTINE iom_setkt( kt, cdname ) 2393 2402 INTEGER , INTENT(in):: kt … … 2404 2413 2405 2414 LOGICAL FUNCTION iom_use( cdname ) 2406 !!----------------------------------------------------------------------2407 !!----------------------------------------------------------------------2408 2415 CHARACTER(LEN=*), INTENT(in) :: cdname 2409 !!----------------------------------------------------------------------2410 2416 #if defined key_iomput 2411 2417 iom_use = xios_field_is_active( cdname ) … … 2414 2420 #endif 2415 2421 END FUNCTION iom_use 2416 2422 2423 SUBROUTINE iom_miss_val( cdname, pmiss_val ) 2424 CHARACTER(LEN=*), INTENT(in ) :: cdname 2425 REAL(wp) , INTENT(out) :: pmiss_val 2426 #if defined key_iomput 2427 ! get missing value 2428 CALL xios_get_field_attr( cdname, default_value = pmiss_val ) 2429 #else 2430 IF( .FALSE. ) WRITE(numout,*) cdname, pmiss_val ! useless test to avoid compilation warnings 2431 #endif 2432 END SUBROUTINE iom_miss_val 2433 2417 2434 !!====================================================================== 2418 2435 END MODULE iom -
NEMO/branches/2019/dev_r11233_AGRIF-05_jchanut_vert_coord_interp/src/OCE/IOM/iom_nf90.F90
r10522 r11573 187 187 188 188 189 FUNCTION iom_nf90_varid ( kiomid, cdvar, kiv, kdimsz, kndims )189 FUNCTION iom_nf90_varid ( kiomid, cdvar, kiv, kdimsz, kndims, lduld ) 190 190 !!----------------------------------------------------------------------- 191 191 !! *** FUNCTION iom_varid *** … … 198 198 INTEGER, DIMENSION(:), INTENT( out), OPTIONAL :: kdimsz ! size of the dimensions 199 199 INTEGER, INTENT( out), OPTIONAL :: kndims ! size of the dimensions 200 LOGICAL , INTENT( out), OPTIONAL :: lduld ! true if the last dimension is unlimited (time) 200 201 ! 201 202 INTEGER :: iom_nf90_varid ! iom variable Id … … 251 252 ENDIF 252 253 IF( PRESENT(kndims) ) kndims = iom_file(kiomid)%ndims(kiv) 254 IF( PRESENT( lduld) ) lduld = iom_file(kiomid)%luld(kiv) 253 255 ELSE 254 256 iom_nf90_varid = -1 ! variable not found, return error code: -1 -
NEMO/branches/2019/dev_r11233_AGRIF-05_jchanut_vert_coord_interp/src/OCE/IOM/restart.F90
r10425 r11573 70 70 IF( ln_rst_list ) THEN 71 71 nrst_lst = 1 72 nitrst = n stocklist( nrst_lst )72 nitrst = nn_stocklist( nrst_lst ) 73 73 ELSE 74 74 nitrst = nitend 75 75 ENDIF 76 76 ENDIF 77 78 IF( .NOT. ln_rst_list .AND. nn_stock == -1 ) RETURN ! we will never do any restart 77 79 78 80 ! frequency-based restart dumping (nn_stock) 79 IF( .NOT. ln_rst_list .AND. MOD( kt - 1, n stock ) == 0 ) THEN81 IF( .NOT. ln_rst_list .AND. MOD( kt - 1, nn_stock ) == 0 ) THEN 80 82 ! we use kt - 1 and not kt - nit000 to keep the same periodicity from the beginning of the experiment 81 nitrst = kt + n stock - 1 ! define the next value of nitrst for restart writing83 nitrst = kt + nn_stock - 1 ! define the next value of nitrst for restart writing 82 84 IF( nitrst > nitend ) nitrst = nitend ! make sure we write a restart at the end of the run 83 85 ENDIF … … 85 87 ! we open and define the ocean restart file one time step before writing the data (-> at nitrst - 1) 86 88 ! except if we write ocean restart files every time step or if an ocean restart file was writen at nitend - 1 87 IF( kt == nitrst - 1 .OR. n stock == 1 .OR. ( kt == nitend .AND. .NOT. lrst_oce ) ) THEN89 IF( kt == nitrst - 1 .OR. nn_stock == 1 .OR. ( kt == nitend .AND. .NOT. lrst_oce ) ) THEN 88 90 IF( nitrst <= nitend .AND. nitrst > 0 ) THEN 89 91 ! beware of the format used to write kt (default is i8.8, that should be large enough...) … … 184 186 lrst_oce = .FALSE. 185 187 IF( ln_rst_list ) THEN 186 nrst_lst = MIN(nrst_lst + 1, SIZE(n stocklist,1))187 nitrst = n stocklist( nrst_lst )188 nrst_lst = MIN(nrst_lst + 1, SIZE(nn_stocklist,1)) 189 nitrst = nn_stocklist( nrst_lst ) 188 190 ENDIF 189 191 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.