Changeset 4932 for branches/2014/dev_r4879_UKMO_NOC_MERGE
- Timestamp:
- 2014-12-01T11:08:54+01:00 (9 years ago)
- Location:
- branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM
- Files:
-
- 23 edited
- 8 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/1_namelist_cfg
r4329 r4932 183 183 !----------------------------------------------------------------------- 184 184 / 185 !----------------------------------------------------------------------- 186 &namobs ! observation usage ('key_diaobs') 187 !----------------------------------------------------------------------- 188 / 189 !----------------------------------------------------------------------- 190 &nam_asminc ! assimilation increments ('key_asminc') 191 !----------------------------------------------------------------------- 192 / -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/namelist_cfg
r4370 r4932 188 188 !----------------------------------------------------------------------- 189 189 / 190 !----------------------------------------------------------------------- 191 &namobs ! observation usage ('key_diaobs') 192 !----------------------------------------------------------------------- 193 / 194 !----------------------------------------------------------------------- 195 &nam_asminc ! assimilation increments ('key_asminc') 196 !----------------------------------------------------------------------- 197 / -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/CONFIG/ORCA2_LIM/cpp_ORCA2_LIM.fcm
r4523 r4932 1 bld::tool::fppkeys key_trabbl key_lim2 key_dynspg_flt key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_zdftke key_zdfddm key_zdftmx key_iomput key_mpp_mpi 1 bld::tool::fppkeys key_trabbl key_lim2 key_dynspg_flt key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_zdftke key_zdfddm key_zdftmx key_iomput key_mpp_mpi key_diaobs key_asminc -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/CONFIG/ORCA2_LIM3/cpp_ORCA2_LIM3.fcm
r4161 r4932 1 bld::tool::fppkeys key_trabbl key_lim3 key_dynspg_flt key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_zdftke key_zdfddm key_zdftmx key_iomput key_mpp_mpi 1 bld::tool::fppkeys key_trabbl key_lim3 key_dynspg_flt key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_zdftke key_zdfddm key_zdftmx key_iomput key_mpp_mpi key_diaobs key_asminc -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/CONFIG/SHARED/1_namelist_ref
r4924 r4932 1103 1103 ! ln_ssh Logical switch for SSH observations 1104 1104 1105 ln_sst = . true. ! Logical switch for SST observations1106 ln_reysst = . true. ! ln_reysst Logical switch for Reynolds observations1105 ln_sst = .false. ! Logical switch for SST observations 1106 ln_reysst = .false. ! ln_reysst Logical switch for Reynolds observations 1107 1107 ln_ghrsst = .false. ! ln_ghrsst Logical switch for GHRSST observations 1108 1108 1109 1109 ln_sstfb = .false. ! Logical switch for feedback SST data 1110 1110 ! ln_sss Logical switch for SSS observations 1111 ! ln_seaiceLogical switch for Sea Ice observations1111 ln_seaice = .false. ! Logical switch for Sea Ice observations 1112 1112 ! ln_vel3d Logical switch for velocity observations 1113 1113 ! ln_velavcur Logical switch for velocity daily av. cur. … … 1130 1130 ! sstfiles GHRSST input observation file name 1131 1131 ! ! sstfbfiles: Feedback SST input observation file name 1132 sstfbfiles = 'sst_01.nc' 'sst_02.nc' 'sst_03.nc' 'sst_04.nc' 'sst_05.nc'1132 sstfbfiles = 'sst_01.nc' 1133 1133 ! seaicefiles Sea Ice input observation file name 1134 seaicefiles = 'seaice_01.nc' 1134 1135 ! velavcurfiles Vel. cur. daily av. input file name 1135 1136 ! velhvcurfiles Vel. cur. high freq. input file name -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/CONFIG/SHARED/namelist_ref
r4924 r4932 1148 1148 ! ln_ssh Logical switch for SSH observations 1149 1149 1150 ln_sst = . true. ! Logical switch for SST observations1151 ln_reysst = . true. ! ln_reysst Logical switch for Reynolds observations1150 ln_sst = .false. ! Logical switch for SST observations 1151 ln_reysst = .false. ! ln_reysst Logical switch for Reynolds observations 1152 1152 ln_ghrsst = .false. ! ln_ghrsst Logical switch for GHRSST observations 1153 1153 1154 1154 ln_sstfb = .false. ! Logical switch for feedback SST data 1155 1155 ! ln_sss Logical switch for SSS observations 1156 ! ln_seaiceLogical switch for Sea Ice observations1156 ln_seaice = .false. ! Logical switch for Sea Ice observations 1157 1157 ! ln_vel3d Logical switch for velocity observations 1158 1158 ! ln_velavcur Logical switch for velocity daily av. cur. … … 1175 1175 ! sstfiles GHRSST input observation file name 1176 1176 ! ! sstfbfiles: Feedback SST input observation file name 1177 sstfbfiles = 'sst_01.nc' 'sst_02.nc' 'sst_03.nc' 'sst_04.nc' 'sst_05.nc' 1178 ! seaicefiles Sea Ice input observation file name 1177 sstfbfiles = 'sst_01.nc' 1178 ! seaicefiles Sea Ice input observation file names 1179 seaicefiles = 'seaice_01.nc' 1179 1180 ! velavcurfiles Vel. cur. daily av. input file name 1180 1181 ! velhvcurfiles Vel. cur. high freq. input file name -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/LIM_SRC_3/limdiahsb.F90
r4924 r4932 77 77 z1_area = 1.d0 / MAX( glob_sum( area(:,:) * tms(:,:) ), epsi06 ) 78 78 79 zinda = MAX( 0. d0 , SIGN( 1.d0, glob_sum( area(:,:) * tms(:,:) ) - epsi06 ) )79 zinda = MAX( 0._wp , SIGN( 1._wp , glob_sum( area(:,:) * tms(:,:) ) - epsi06 ) ) 80 80 ! ----------------------- ! 81 81 ! 1 - Content variations ! … … 153 153 ! 3 - Diagnostics writing ! 154 154 ! ----------------------- ! 155 zindb = MAX( 0. d0 , SIGN( 1.d0, zbg_ivo - epsi06 ) )155 zindb = MAX( 0._wp , SIGN( 1._wp , zbg_ivo - epsi06 ) ) 156 156 ! 157 157 CALL iom_put( 'ibgvoltot' , zbg_ivo * rhoic * r1_rau0 * 1.e-9 ) ! ice volume (km3 equivalent liquid) -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r4924 r4932 301 301 302 302 IF(lwp) THEN 303 WRITE(numout,*) ,' ztests : ', ztests303 WRITE(numout,*) ' ztests : ', ztests 304 304 IF ( ztests .NE. 4 ) THEN 305 305 WRITE(numout,*) 306 WRITE(numout,*) ,' !!!! ALERT !!! '307 WRITE(numout,*) ,' !!!! Something is wrong in the LIM3 initialization procedure '306 WRITE(numout,*) ' !!!! ALERT !!! ' 307 WRITE(numout,*) ' !!!! Something is wrong in the LIM3 initialization procedure ' 308 308 WRITE(numout,*) 309 WRITE(numout,*) ,' *** ztests is not equal to 4 '310 WRITE(numout,*) ,' *** ztest_i (i=1,4) = ', ztest_1, ztest_2, ztest_3, ztest_4311 WRITE(numout,*) ,' zat_i_ini : ', zat_i_ini(i_hemis)312 WRITE(numout,*) ,' zht_i_ini : ', zht_i_ini(i_hemis)309 WRITE(numout,*) ' *** ztests is not equal to 4 ' 310 WRITE(numout,*) ' *** ztest_i (i=1,4) = ', ztest_1, ztest_2, ztest_3, ztest_4 311 WRITE(numout,*) ' zat_i_ini : ', zat_i_ini(i_hemis) 312 WRITE(numout,*) ' zht_i_ini : ', zht_i_ini(i_hemis) 313 313 ENDIF ! ztests .NE. 4 314 314 ENDIF -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/OPA_SRC/ASM/asmbkg.F90
r3764 r4932 156 156 #if defined key_lim2 || defined key_lim3 157 157 IF(( nn_ice == 2 ) .OR. ( nn_ice == 3 )) THEN 158 CALL iom_rstput( kt, nitdin_r, inum, 'iceconc', 1.0 - frld(:,:) ) 158 IF(ALLOCATED(frld)) THEN 159 CALL iom_rstput( kt, nitdin_r, inum, 'iceconc', 1.0 - frld(:,:) ) 160 ELSE 161 CALL ctl_warn('Ice concentration not written to background as ice variable frld not allocated on this timestep') 162 ENDIF 159 163 ENDIF 160 164 #endif -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90
r4666 r4932 237 237 & ' Inconsistent options') 238 238 239 IF ( ( ln_bkgwri ).AND.( ( ln_asmdin ).OR.( ln_asmiau ) ) ) &240 & CALL ctl_stop( ' ln_bkgwri and either ln_asmdin or ln_asmiau are set to .true.:', &241 & ' The background state must be written before applying the increments')242 243 239 IF ( ( niaufn /= 0 ).AND.( niaufn /= 1 ) ) & 244 240 & CALL ctl_stop( ' niaufn /= 0 or niaufn /=1 :', & -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/OPA_SRC/DIA/diaharm.F90
r4924 r4932 328 328 X1= ana_amp(ji,jj,jh,1) 329 329 X2=-ana_amp(ji,jj,jh,2) 330 out_u(ji,jj, jh) = X1 * umask_i(ji,jj)331 out_u 330 out_u(ji,jj, jh) = X1 * umask_i(ji,jj) 331 out_u(ji,jj,nb_ana+jh) = X2 * umask_i(ji,jj) 332 332 ENDDO 333 333 ENDDO … … 362 362 X1=ana_amp(ji,jj,jh,1) 363 363 X2=-ana_amp(ji,jj,jh,2) 364 out_v(ji,jj, jh)=X1 * vmask_i(ji,jj)364 out_v(ji,jj, jh)=X1 * vmask_i(ji,jj) 365 365 out_v(ji,jj,nb_ana+jh)=X2 * vmask_i(ji,jj) 366 366 END DO -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90
r4924 r4932 483 483 CALL obs_grid_setup( ) 484 484 IF ( ( n1dint < 0 ).OR.( n1dint > 1 ) ) THEN 485 IF(lwp) WRITE(numout,cform_err) 486 IF(lwp) WRITE(numout,*) ' Choice of vertical (1D) interpolation method', & 487 & ' is not available' 488 nstop = nstop + 1 485 CALL ctl_stop(' Choice of vertical (1D) interpolation method', & 486 & ' is not available') 489 487 ENDIF 490 488 IF ( ( n2dint < 0 ).OR.( n2dint > 4 ) ) THEN 491 IF(lwp) WRITE(numout,cform_err) 492 IF(lwp) WRITE(numout,*) ' Choice of horizontal (2D) interpolation method', & 493 & ' is not available' 494 nstop = nstop + 1 489 CALL ctl_stop(' Choice of horizontal (2D) interpolation method', & 490 & ' is not available') 495 491 ENDIF 496 492 -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/OPA_SRC/OBS/jul2greg.h90
r2287 r4932 16 16 !! ! 06-05 (A. Vidard) Reformatted and refdate 17 17 !! ! 06-10 (A. Weaver) Cleanup 18 !! ! 2014-09 (D. Lea) Change to use FLOOR to deal with negative prelday 18 19 !!----------------------------------------------------------------------- 19 20 … … 82 83 83 84 zday = prelday 84 ksec = NINT( 86400. * MOD( zday, 1. ) )85 ksec = FLOOR( 86400. * MOD( zday, 1. ) ) 85 86 86 87 IF ( ksec < 0. ) ksec = 86400. + ksec -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/OPA_SRC/OBS/obs_grid.F90
r2715 r4932 412 412 ENDIF 413 413 414 IF (MAXVAL(ixpos(ipx1:ipx,ipy1:ipy)) == -1) CYCLE! cycle if no lookup points found 414 IF (.NOT. llfourflag) THEN 415 IF (MAXVAL(ixpos(ipx1:ipx,ipy1:ipy)) == -1) CYCLE! cycle if no lookup points found 416 ENDIF 415 417 416 418 jimin = 0 … … 996 998 df = ABS( iypos(ji+1,jj) - iypos(ji,jj) ) 997 999 tmpy1 = df 998 IF ( df < lim xdiff ) numy1 = numy1 + 11000 IF ( df < limydiff ) numy1 = numy1 + 1 999 1001 IF ( df < histsize ) histy1(df+1) = histy1(df+1) + 1 1000 1002 ENDIF … … 1002 1004 df = ABS( iypos(ji,jj+1) - iypos(ji,jj) ) 1003 1005 tmpy2 = df 1004 IF ( df < lim xdiff ) numy2 = numy2+11006 IF ( df < limydiff ) numy2 = numy2+1 1005 1007 IF ( df < histsize ) histy2(df+1) = histy2(df+1)+1 1006 1008 ENDIF -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/OPA_SRC/OBS/obs_read_prof.F90
r4292 r4932 143 143 INTEGER :: is3dt 144 144 INTEGER :: ip3dt 145 INTEGER :: ios 146 INTEGER :: ioserrcount 145 147 INTEGER, DIMENSION(kvars) :: & 146 148 & iv3dt … … 280 282 & krefdate = irefdate(jj) ) 281 283 284 ioserrcount=0 282 285 IF ( ldavtimset ) THEN 283 286 DO ji = 1, inpfiles(jj)%nobs … … 287 290 ! to be the end of the day 288 291 ! 289 READ( inpfiles(jj)%cdtyp(ji), '(I4)' ) itype 292 READ( inpfiles(jj)%cdtyp(ji), '(I4)', IOSTAT = ios, ERR = 900 ) itype 293 900 IF ( ios /= 0 ) THEN 294 itype = 0 ! Set type to zero if there is a problem in the string conversion 295 ENDIF 290 296 IF ( ANY (idailyavtypes == itype ) ) THEN 291 297 inpfiles(jj)%ptim(ji) = & … … 468 474 itypsmpp(:) = 0 469 475 470 476 ioserrcount = 0 471 477 DO jk = 1, iproftot 472 478 … … 552 558 553 559 ! Instrument type 554 READ( inpfiles(jj)%cdtyp(ji), '(I4)' ) itype 560 READ( inpfiles(jj)%cdtyp(ji), '(I4)', IOSTAT = ios, ERR = 901 ) itype 561 901 IF ( ios /= 0 ) THEN 562 IF (ioserrcount == 0) CALL ctl_warn ( 'Problem converting an instrument type to integer. Setting type to zero' ) 563 ioserrcount = ioserrcount + 1 564 itype = 0 565 ENDIF 566 555 567 profdata%ntyp(iprof) = itype 556 568 -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/OPA_SRC/OBS/obs_read_seaice.F90
r3651 r4932 120 120 INTEGER :: iobs 121 121 INTEGER :: iobstot 122 INTEGER :: ios 123 INTEGER :: ioserrcount 122 124 CHARACTER(len=8) :: cl_refdate 123 125 … … 335 337 ityp (:) = 0 336 338 itypmpp(:) = 0 337 339 340 ioserrcount=0 341 338 342 DO jk = 1, iobstot 339 343 … … 382 386 383 387 ! Instrument type 384 READ( inpfiles(jj)%cdtyp(ji), '(I4)' ) itype 388 READ( inpfiles(jj)%cdtyp(ji), '(I4)', IOSTAT = ios, ERR = 901 ) itype 389 901 IF ( ios /= 0 ) THEN 390 IF (ioserrcount == 0) CALL ctl_warn ( 'Problem converting an instrument type to integer. Setting type to zero' ) 391 ioserrcount = ioserrcount + 1 392 itype = 0 393 ENDIF 385 394 seaicedata%ntyp(iobs) = itype 386 395 IF ( itype < iseaicemaxtype + 1 ) THEN -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/OPA_SRC/OBS/obs_read_sla.F90
r3651 r4932 125 125 INTEGER :: iobs 126 126 INTEGER :: iobstot 127 INTEGER :: ios 128 INTEGER :: ioserrcount 127 129 CHARACTER(len=8) :: cl_refdate 128 130 … … 391 393 & iindx ) 392 394 393 CALL obs_surf_alloc( sladata, iobs, kvars, kextr, & 394 & jpi, jpj, kstp ) 395 CALL obs_surf_alloc( sladata, iobs, kvars, kextr, kstp, jpi, jpj ) 395 396 396 397 ! * Read obs/positions, QC, all variable and assign to sladata … … 400 401 ityp (:) = 0 401 402 itypmpp(:) = 0 403 404 ioserrcount = 0 402 405 403 406 DO jk = 1, iobstot … … 451 454 452 455 ! Instrument type 453 READ( inpfiles(jj)%cdtyp(ji), '(I4)' ) itype 456 READ( inpfiles(jj)%cdtyp(ji), '(I4)', IOSTAT = ios, ERR = 901 ) itype 457 901 IF ( ios /= 0 ) THEN 458 IF (ioserrcount == 0) CALL ctl_warn ( 'Problem converting an instrument type to integer. Setting type to zero' ) 459 ioserrcount = ioserrcount + 1 460 itype = 0 461 ENDIF 454 462 sladata%ntyp(iobs) = itype 455 463 ityp(itype+1) = ityp(itype+1) + 1 -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/OPA_SRC/OBS/obs_read_sst.F90
r3651 r4932 120 120 INTEGER :: iobs 121 121 INTEGER :: iobstot 122 INTEGER :: ios 123 INTEGER :: ioserrcount 122 124 CHARACTER(len=8) :: cl_refdate 123 125 … … 335 337 itypmpp(:) = 0 336 338 339 ioserrcount = 0 340 337 341 DO jk = 1, iobstot 338 342 … … 381 385 382 386 ! Instrument type 383 READ( inpfiles(jj)%cdtyp(ji), '(I4)' ) itype 387 READ( inpfiles(jj)%cdtyp(ji), '(I4)', IOSTAT = ios, ERR = 901 ) itype 388 901 IF ( ios /= 0 ) THEN 389 IF (ioserrcount == 0) CALL ctl_warn ( 'Problem converting an instrument type to integer. Setting type to zero' ) 390 ioserrcount = ioserrcount + 1 391 itype = 0 392 ENDIF 384 393 sstdata%ntyp(iobs) = itype 385 394 IF ( itype < isstmaxtype + 1 ) THEN -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/OPA_SRC/OBS/obs_read_vel.F90
r4292 r4932 130 130 INTEGER :: iproftot 131 131 INTEGER :: iuv3dt 132 INTEGER :: ios 133 INTEGER :: ioserrcount 132 134 INTEGER, DIMENSION(kvars) :: iv3dt 133 135 CHARACTER(len=8) :: cl_refdate … … 459 461 460 462 ! Instrument type 461 READ( inpfiles(jj)%cdtyp(ji), '(I4)' ) itype 463 READ( inpfiles(jj)%cdtyp(ji), '(I4)', IOSTAT = ios, ERR = 901 ) itype 464 901 IF ( ios /= 0 ) THEN 465 IF (ioserrcount == 0) CALL ctl_warn ( 'Problem converting an instrument type to integer. Setting type to zero' ) 466 ioserrcount = ioserrcount + 1 467 itype = 0 468 ENDIF 462 469 profdata%ntyp(iprof) = itype 463 470 -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/NEMO/OPA_SRC/OBS/obs_write.F90
r2287 r4932 6 6 7 7 !!---------------------------------------------------------------------- 8 !! cdf_wri_p3d : Write profile observation diagnostics in NetCDF format8 !! obs_wri_p3d : Write profile observation diagnostics in NetCDF format 9 9 !! obs_wri_sla : Write SLA observation related diagnostics 10 10 !! obs_wri_sst : Write SST observation related diagnostics 11 11 !! obs_wri_seaice: Write seaice observation related diagnostics 12 !! cdf_wri_vel : Write velocity observation diagnostics in NetCDF format 12 !! obs_wri_vel : Write velocity observation diagnostics in NetCDF format 13 !! obs_wri_stats : Print basic statistics on the data being written out 13 14 !!---------------------------------------------------------------------- 14 15 … … 31 32 USE obs_sla_types 32 33 USE obs_rot_vel ! Rotation of velocities 34 USE obs_mpp ! MPP support routines for observation diagnostics 35 USE lib_mpp ! MPP routines 33 36 34 37 IMPLICIT NONE … … 256 259 ! Write the obfbdata structure 257 260 CALL write_obfbdata( cfname, fbdata ) 258 261 262 ! Output some basic statistics 263 CALL obs_wri_stats( fbdata ) 264 259 265 CALL dealloc_obfbdata( fbdata ) 260 266 … … 414 420 CALL write_obfbdata( cfname, fbdata ) 415 421 422 ! Output some basic statistics 423 CALL obs_wri_stats( fbdata ) 424 416 425 CALL dealloc_obfbdata( fbdata ) 417 426 … … 565 574 CALL write_obfbdata( cfname, fbdata ) 566 575 576 ! Output some basic statistics 577 CALL obs_wri_stats( fbdata ) 578 567 579 CALL dealloc_obfbdata( fbdata ) 568 580 … … 715 727 CALL write_obfbdata( cfname, fbdata ) 716 728 729 ! Output some basic statistics 730 CALL obs_wri_stats( fbdata ) 731 717 732 CALL dealloc_obfbdata( fbdata ) 718 733 … … 722 737 !!----------------------------------------------------------------------- 723 738 !! 724 !! *** ROUTINE obs_wri_ p3d***739 !! *** ROUTINE obs_wri_vel *** 725 740 !! 726 741 !! ** Purpose : Write current (profile) observation … … 903 918 CALL write_obfbdata( cfname, fbdata ) 904 919 920 ! Output some basic statistics 921 CALL obs_wri_stats( fbdata ) 922 905 923 CALL dealloc_obfbdata( fbdata ) 906 924 … … 912 930 END SUBROUTINE obs_wri_vel 913 931 932 SUBROUTINE obs_wri_stats( fbdata ) 933 !!----------------------------------------------------------------------- 934 !! 935 !! *** ROUTINE obs_wri_stats *** 936 !! 937 !! ** Purpose : Output some basic statistics of the data being written out 938 !! 939 !! ** Method : 940 !! 941 !! ** Action : 942 !! 943 !! ! 2014-08 (D. Lea) Initial version 944 !!----------------------------------------------------------------------- 945 946 !! * Arguments 947 TYPE(obfbdata) :: fbdata 948 949 !! * Local declarations 950 INTEGER :: jvar 951 INTEGER :: jo 952 INTEGER :: jk 953 954 ! INTEGER :: nlev 955 ! INTEGER :: nlevmpp 956 ! INTEGER :: nobsmpp 957 INTEGER :: numgoodobs 958 INTEGER :: numgoodobsmpp 959 REAL(wp) :: zsumx 960 REAL(wp) :: zsumx2 961 REAL(wp) :: zomb 962 963 IF (lwp) THEN 964 WRITE(numout,*) '' 965 WRITE(numout,*) 'obs_wri_stats :' 966 WRITE(numout,*) '~~~~~~~~~~~~~~~' 967 ENDIF 968 969 DO jvar = 1, fbdata%nvar 970 zsumx=0.0_wp 971 zsumx2=0.0_wp 972 numgoodobs=0 973 DO jo = 1, fbdata%nobs 974 DO jk = 1, fbdata%nlev 975 IF ( ( fbdata%pob(jk,jo,jvar) < 9999.0 ) .AND. & 976 & ( fbdata%pdep(jk,jo) < 9999.0 ) .AND. & 977 & ( fbdata%padd(jk,jo,1,jvar) < 9999.0 ) ) THEN 978 979 zomb=fbdata%pob(jk, jo, jvar)-fbdata%padd(jk, jo, 1, jvar) 980 zsumx=zsumx+zomb 981 zsumx2=zsumx2+zomb**2 982 numgoodobs=numgoodobs+1 983 ENDIF 984 ENDDO 985 ENDDO 986 987 CALL obs_mpp_sum_integer( numgoodobs, numgoodobsmpp ) 988 CALL mpp_sum(zsumx) 989 CALL mpp_sum(zsumx2) 990 991 IF (lwp) THEN 992 WRITE(numout,*) 'Type: ',fbdata%cname(jvar),' Total number of good observations: ',numgoodobsmpp 993 WRITE(numout,*) 'Overall mean obs minus model of the good observations: ',zsumx/numgoodobsmpp 994 WRITE(numout,*) 'Overall RMS obs minus model of the good observations: ',sqrt( zsumx2/numgoodobsmpp ) 995 WRITE(numout,*) '' 996 ENDIF 997 998 ENDDO 999 1000 END SUBROUTINE obs_wri_stats 1001 914 1002 END MODULE obs_write -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/SETTE/sette.sh
r4924 r4932 140 140 # SAS :11 & 12 141 141 # ISOMIP :13 & 14 142 # ORCA2_AGRIF_LIM :15 143 for config in 9 10 #1 2 3 4 5 6 7 8 9 10 13 14 # 1 2 5 6 7 8 9 10 11 12 13 14 142 # ORCA2_LIM_OBS: 15 143 # ORCA2_AGRIF_LIM :16 144 for config in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 144 145 145 146 do … … 1126 1127 fi 1127 1128 1129 ## Test assimilation interface code, OBS and ASM for reproducibility 1130 ## Restartability not tested (ASM code not restartable while increments are being applied) 1131 if [ ${config} -eq 15 ] ; then 1132 ## Reproducibility tests for ORCA2_LIM_OBS 1133 export TEST_NAME="REPRO_4_4" 1134 cd ${CONFIG_DIR} 1135 . ./makenemo -m ${CMP_NAM} -n ORCA2_LIM_OBS -r ORCA2_LIM -j 8 add_key "key_mpp_rep key_diaobs key_asminc" del_key ${DEL_KEYS} 1136 cd ${SETTE_DIR} 1137 . ./param.cfg 1138 . ./all_functions.sh 1139 . ./prepare_exe_dir.sh 1140 JOB_FILE=${EXE_DIR}/run_job.sh 1141 NPROC=16 1142 if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 1143 cd ${EXE_DIR} 1144 set_namelist namelist_cfg nn_it000 1 1145 set_namelist namelist_cfg nn_itend 75 1146 set_namelist namelist_cfg nn_fwb 0 1147 set_namelist namelist_cfg ln_ctl .false. 1148 set_namelist namelist_cfg ln_clobber .true. 1149 set_namelist namelist_cfg jpni 4 1150 set_namelist namelist_cfg jpnj 4 1151 set_namelist namelist_cfg jpnij 16 1152 set_namelist namelist_cfg nn_solv 2 1153 set_namelist namelist_cfg ln_t3d .true. 1154 set_namelist namelist_cfg ln_s3d .true. 1155 set_namelist namelist_cfg ln_profb .true. 1156 set_namelist namelist_cfg ln_sst .true. 1157 set_namelist namelist_cfg ln_sstfb .true. 1158 set_namelist namelist_cfg ln_sla .true. 1159 set_namelist namelist_cfg ln_slafb .true. 1160 set_namelist namelist_cfg ln_seaice .false. 1161 set_namelist namelist_cfg ln_bkgwri .true. 1162 set_namelist namelist_cfg ln_trainc .true. 1163 set_namelist namelist_cfg ln_dyninc .true. 1164 set_namelist namelist_cfg ln_sshinc .true. 1165 set_namelist namelist_cfg ln_asmiau .true. 1166 if [ ${USING_MPMD} == "yes" ] ; then 1167 set_xio_using_server iodef.xml true 1168 else 1169 set_xio_using_server iodef.xml false 1170 fi 1171 cd ${SETTE_DIR} 1172 . ./prepare_job.sh input_ORCA2_LIM_OBS.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 1173 cd ${SETTE_DIR} 1174 . ./fcm_job.sh $NPROC ${JOB_FILE} ${INTERACT_FLAG} ${MPIRUN_FLAG} 1175 1176 cd ${SETTE_DIR} 1177 export TEST_NAME="REPRO_2_8" 1178 . ./prepare_exe_dir.sh 1179 JOB_FILE=${EXE_DIR}/run_job.sh 1180 NPROC=16 1181 if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 1182 cd ${EXE_DIR} 1183 set_namelist namelist_cfg nn_it000 1 1184 set_namelist namelist_cfg nn_itend 75 1185 set_namelist namelist_cfg nn_fwb 0 1186 set_namelist namelist_cfg ln_ctl .false. 1187 set_namelist namelist_cfg ln_clobber .true. 1188 set_namelist namelist_cfg jpni 2 1189 set_namelist namelist_cfg jpnj 8 1190 set_namelist namelist_cfg jpnij 16 1191 set_namelist namelist_cfg nn_solv 2 1192 set_namelist namelist_cfg ln_t3d .true. 1193 set_namelist namelist_cfg ln_s3d .true. 1194 set_namelist namelist_cfg ln_profb .true. 1195 set_namelist namelist_cfg ln_sst .true. 1196 set_namelist namelist_cfg ln_sstfb .true. 1197 set_namelist namelist_cfg ln_sla .true. 1198 set_namelist namelist_cfg ln_slafb .true. 1199 set_namelist namelist_cfg ln_seaice .false. 1200 set_namelist namelist_cfg ln_bkgwri .true. 1201 set_namelist namelist_cfg ln_trainc .true. 1202 set_namelist namelist_cfg ln_dyninc .true. 1203 set_namelist namelist_cfg ln_sshinc .true. 1204 set_namelist namelist_cfg ln_asmiau .true. 1205 if [ ${USING_MPMD} == "yes" ] ; then 1206 set_xio_using_server iodef.xml true 1207 else 1208 set_xio_using_server iodef.xml false 1209 fi 1210 cd ${SETTE_DIR} 1211 . ./prepare_job.sh input_ORCA2_LIM_OBS.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 1212 cd ${SETTE_DIR} 1213 . ./fcm_job.sh $NPROC ${JOB_FILE} ${INTERACT_FLAG} ${MPIRUN_FLAG} 1214 fi 1128 1215 # TEST FOR ORCA2_LIM_AGRIF : simple test of running AGRIF (no restartability neither reproducibility tests) 1129 if [ ${config} -eq 1 5] ; then1216 if [ ${config} -eq 16 ] ; then 1130 1217 ## ORCA2_LIM with Agulhas AGRIF zoom in MPI 1131 1218 export TEST_NAME="SHORT" -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/SETTE/sette_rpt
r4924 r4932 171 171 rm f1.tmp$$ 172 172 endif 173 <<<<<<< .working 173 174 if ( -d ./WORCA2LIM3_LONG ) then 174 175 set dorv = `ls -1rtd ./WORCA2LIM3_LONG/{$mach}/* | tail -1l ` … … 178 179 set f2o = ./WORCA2LIM3_LONG/{$mach}/{$dorv}/SHORT/ocean.output 179 180 set f2s = ./WORCA2LIM3_LONG/{$mach}/{$dorv}/SHORT/solver.stat 180 181 ======= 182 NEXT0: 183 if ( -d ./WSAS_LONG ) then 184 set dorv = `ls -1rtd ./WSAS_LONG/{$mach}/* | tail -1l ` 185 set dorv = $dorv:t 186 set f1o = ./WSAS_LONG/{$mach}/{$dorv}/LONG/ocean.output 187 set f1s = ./WSAS_LONG/{$mach}/{$dorv}/LONG/solver.stat 188 set f2o = ./WSAS_LONG/{$mach}/{$dorv}/SHORT/ocean.output 189 set f2s = ./WSAS_LONG/{$mach}/{$dorv}/SHORT/solver.stat 190 >>>>>>> .merge-right.r4926 191 192 <<<<<<< .working 181 193 set nl = `wc -l $f2s` 182 194 tail -$nl[1] $f1s > f1.tmp$$ … … 237 249 238 250 NEXT: 251 ======= 252 foreach f ( $f1o $f1s $f2o $f2s ) 253 if ( ! -f $f ) then 254 echo 'SAS restartability inconclusive ( ' $f:t ' not found )' 255 goto NEXT 256 endif 257 end 258 259 set nl = `wc -l $f2s` 260 tail -$nl[1] $f1s > f1.tmp$$ 261 cmp -s f1.tmp$$ $f2s 262 if ( $status == 0 ) then 263 echo "SAS restartability passed" 264 else 265 echo "SAS restartability FAILED" 266 if ( $pass == 1 ) then 267 echo "<return> to view solver.stat differences" 268 set y = $< 269 sdiff f1.tmp$$ $f2s 270 echo "<return> to view ocean.output differences" 271 set y = $< 272 sdiff $f1o $f2o | grep "|" 273 echo "<return> to continue" 274 set y = $< 275 endif 276 endif 277 rm f1.tmp$$ 278 endif 279 280 NEXT: 281 >>>>>>> .merge-right.r4926 239 282 echo 240 283 … … 376 419 set f2s = ./WORCA2LIM3_16/{$mach}/{$dorv}/REPRO_4_4/solver.stat 377 420 421 <<<<<<< .working 378 422 cmp -s $f1s $f2s 379 423 if ( $status == 0 ) then … … 429 473 NEXT1: 430 474 475 ======= 476 if ( -d ./WSAS_32 ) then 477 set dorv = `ls -1rtd ./WSAS_32/{$mach}/* | tail -1l ` 478 set dorv = $dorv:t 479 set f1o = ./WSAS_32/{$mach}/{$dorv}/REPRO_4_8/ocean.output 480 set f1s = ./WSAS_32/{$mach}/{$dorv}/REPRO_4_8/solver.stat 481 set f2o = ./WSAS_32/{$mach}/{$dorv}/REPRO_8_4/ocean.output 482 set f2s = ./WSAS_32/{$mach}/{$dorv}/REPRO_8_4/solver.stat 483 484 foreach f ( $f1o $f1s $f2o $f2s ) 485 if ( ! -f $f ) then 486 echo 'SAS reproducibility inconclusive ( ' $f:t ' not found )' 487 goto NEXT1 488 endif 489 end 490 491 cmp -s $f1s $f2s 492 if ( $status == 0 ) then 493 echo "SAS reproducibility passed" 494 else 495 echo "SAS reproducibility FAILED" 496 if ( $pass == 1 ) then 497 echo "<return> to view solver.stat differences" 498 set y = $< 499 sdiff $f1s $f2s 500 echo "<return> to view ocean.output differences" 501 set y = $< 502 sdiff $f1o $f2o | grep "|" 503 echo "<return> to continue" 504 set y = $< 505 endif 506 endif 507 endif 508 NEXT1: 509 510 >>>>>>> .merge-right.r4926 431 511 if ( -d ./WORCA2AGUL_1_2 ) then 432 512 set dorv = `ls -1rtd ./WORCA2AGUL_1_2/{$mach}/* | tail -1l ` -
branches/2014/dev_r4879_UKMO_NOC_MERGE/NEMOGCM/TOOLS/OBSTOOLS/src/date_utils.F90
r3000 r4932 34 34 35 35 END SUBROUTINE add_date 36 37 38 SUBROUTINE add_days_to_date(initial_date,days,final_date) 39 40 ! Add a number of days to initial_date and return it in final_date 41 42 IMPLICIT NONE 43 44 45 !! Arguments 46 INTEGER,INTENT(in) :: initial_date ! Initial date (YYYYMMDD) 47 INTEGER,INTENT(in) :: days ! Number of days to add 48 INTEGER,INTENT(out) :: final_date ! Final date (YYYYMMDD) 49 50 !! Local variables 51 52 INTEGER :: isec,imin,ihours,iyear,imon,iday ! temporary results 53 REAL(dp):: juld 54 55 ! Account for lack of hours in date format (initial_date*100) 56 CALL split_date(initial_date*100,iyear,imon,iday,ihours) 57 58 CALL greg2jul(0,0,ihours,iday,imon,iyear,juld) 59 60 juld=juld+REAL(days) 61 62 CALL jul2greg(isec,imin,ihours,iday,imon,iyear,juld) 63 64 final_date=(iyear*1000000+imon*10000+iday*100+ihours)/100 65 66 END SUBROUTINE add_days_to_date 67 36 68 37 69 SUBROUTINE split_date(iyyyymmddhh,iyyyy,imm,idd,ihh) … … 379 411 END FUNCTION diffdate 380 412 413 INTEGER FUNCTION difftime(itime1,itime2) 414 415 ! Compute difference in minutes between times 416 ! Assumes HHMM or HMM or MM or M format for dates 417 ! 418 ! ORDER MATTERS - itime1 is ealier time 419 ! Result is an integer number of minutes 420 421 IMPLICIT NONE 422 INTEGER, INTENT(IN) :: itime1,itime2 ! Times to be diffed. 423 INTEGER :: imin1, imin2, ihr1, ihr2 424 425 ihr1 = (itime1/100) 426 ihr2 = (itime2/100) 427 428 imin1 = (itime1 - ihr1*100) + (60 * ihr1) 429 imin2 = (itime2 - ihr2*100) + (60 * ihr2) 430 431 ! Assume that itime2 is later, so wrap around midnight if necessary. 432 IF (imin2 < imin1) THEN 433 imin2 = imin2 + 24*60 434 END IF 435 436 difftime = imin2 - imin1 437 438 END FUNCTION difftime 439 440 441 INTEGER FUNCTION add_mins_to_time(itime1, imin_add) 442 443 ! Add number of minutes onto given time 444 ! Assumes time in HHMM or HMM or MM or M format 445 ! 446 ! Result is in HHMM format 447 448 IMPLICIT NONE 449 INTEGER, INTENT(IN) :: itime1,imin_add 450 INTEGER :: imin1, ihr1, imin2, ihr2 451 452 ihr1 = (itime1/100) 453 454 ! itime1 in minutes from previous midnight 455 imin1 = (itime1 - ihr1*100) + (60 * ihr1) 456 457 imin1 = imin1 + imin_add 458 459 ! Add 1day if time went nagative 460 IF (imin1 < 0) THEN 461 imin1 = imin1 + 24*60 462 END IF 463 464 ! Turn number of minutes back into HHMM 465 ihr2 = imin1/60 466 imin2 = imin1 - ihr2*60 467 468 DO 469 IF (ihr2<0) THEN 470 ihr2 = ihr2 + 24 471 ELSE IF (ihr2>=24) THEN 472 ihr2 = ihr2 - 24 473 END IF 474 IF ((ihr2>=0).OR.(ihr2<24)) EXIT 475 END DO 476 477 add_mins_to_time = ihr2*100 + imin2 478 479 END FUNCTION add_mins_to_time 480 381 481 382 482 END MODULE date_utils
Note: See TracChangeset
for help on using the changeset viewer.