- Timestamp:
- 2016-05-26T11:08:07+02:00 (8 years ago)
- Location:
- branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/SETTE
- Files:
-
- 4 deleted
- 5 edited
- 3 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/SETTE/all_functions.sh
r6617 r6625 286 286 echo "################" >> ${SETTE_DIR}/output.sette 287 287 288 inxml=$1289 288 VAR_NAME=$( grep "^.*<.*file_definition.*type.*=" ${EXE_DIR}/$1 | sed -e "s% *\!.*%%" ) 290 289 if [ ${#VAR_NAME} -eq 0 ] 291 290 then 292 # This may have failed because the job is using XIOS_2.0 conventions and the file descriptions have moved to file_def.xml293 # Check again in case this is the case294 VAR_NAME=$( grep "^.*<.*file_definition.*type.*=" ${EXE_DIR}/file_def.xml | sed -e "s% *\!.*%%" )295 inxml="file_def.xml"296 if [ ${#VAR_NAME} -eq 0 ]297 then298 291 echo "doing \"set_xio_file_type $@\". " 299 292 echo "xml_tag: file_definition with variable: type is empty" 300 echo "confirm that an appropriate file_definition is in \"${EXE_DIR}/$1\" or file_def.xml"293 echo "confirm that an appropriate file_definition is in \"${EXE_DIR}/$1\" " 301 294 echo "exit" 302 295 echo "error in executing script : set_xio_file_type $@" >> ${SETTE_DIR}/output.sette 303 296 echo "....." >> ${SETTE_DIR}/output.sette 304 297 exit 1 305 fi306 298 fi 307 299 if [ $2 == "one_file" ] 308 300 then 309 sed -e "s:multiple_file:one_file:" ${EXE_DIR}/$ inxml > ${EXE_DIR}/$inxml.tmp301 sed -e "s:multiple_file:one_file:" ${EXE_DIR}/$1 > ${EXE_DIR}/$1.tmp 310 302 else 311 sed -e "s:one_file:multiple_file:" ${EXE_DIR}/$ inxml > ${EXE_DIR}/$inxml.tmp312 fi 313 mv ${EXE_DIR}/$ inxml.tmp ${EXE_DIR}/$inxml303 sed -e "s:one_file:multiple_file:" ${EXE_DIR}/$1 > ${EXE_DIR}/$1.tmp 304 fi 305 mv ${EXE_DIR}/$1.tmp ${EXE_DIR}/$1 314 306 315 307 echo "finished script : set_xio_file_type $@" >> ${SETTE_DIR}/output.sette … … 344 336 if [ ${#VAR_NAME} -eq 0 ] 345 337 then 346 # This may have failed because the iodef file is using XIOS_2.0 syntax where "boolean" has reduced to "bool"347 # Check again in case this is the case348 VAR_NAME=$( grep "^.*<.*variable id.*=.*using_server.*=.*bool" ${EXE_DIR}/$1 | sed -e "s% *\!.*%%" )349 if [ ${#VAR_NAME} -eq 0 ]350 then351 338 echo "doing \"set_xio_using_server $@\". " 352 echo "xml_tag: "variable id=using_server" with either variable: boolean or boolis empty"339 echo "xml_tag: "variable id=using_server" with variable: boolean is empty" 353 340 echo "confirm that an appropriate variable id is in \"${EXE_DIR}/$1\" " 354 341 echo "exit" … … 356 343 echo "....." >> ${SETTE_DIR}/output.sette 357 344 exit 1 358 fi359 345 fi 360 346 if [ $2 == "false" ] -
branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/SETTE/prepare_exe_dir.sh
r6617 r6625 70 70 export EXE_DIR=${CONFIG_DIR}/${NEW_CONF}/${TEST_NAME} 71 71 72 cp -r L${CONFIG_DIR}/${NEW_CONF}/EXP00/* ${EXE_DIR}/.73 if [ ! -f ${EXE_DIR}/file_def.xml ]; then cp -r ${SETTE_DIR}/iodef_sette.xml ${EXE_DIR}/iodef.xml; fi 72 cp -r ${CONFIG_DIR}/${NEW_CONF}/EXP00/* ${EXE_DIR}/. 73 cp -r ${SETTE_DIR}/iodef_sette.xml ${EXE_DIR}/iodef.xml 74 74 cd ${EXE_DIR} -
branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/SETTE/prepare_job.sh
r6617 r6625 186 186 # if [ ${MPI_FLAG} == "no" ] ; then 187 187 case ${COMPILER} in 188 X64_MOBILIS *)188 X64_MOBILIS) 189 189 NB_REM=$( echo $NB_PROC $NXIO_PROC | awk '{print ( $1 + $2 ) % 16}') 190 190 if [ ${NB_REM} == 0 ] ; then … … 280 280 fi 281 281 ;; 282 openmpi_NAVITI_MERCATOR)282 ifort_MERCATOR_CLUSTER) 283 283 echo NB_PROCS ${NB_PROC} 284 284 echo NB_NODES ${NB_NODES} … … 289 289 NB_PROC_NODE=${NB_PROC} 290 290 else 291 if [ ${NB_PROC} -le 16] ; then291 if [ ${NB_PROC} -le 8 ] ; then 292 292 NB_NODES=1 293 293 QUEUE=mono 294 294 NB_PROC_NODE=${NB_PROC} 295 295 else 296 NB_NODES=$( echo $NB_PROC | awk '{print $1 - $1 % 16}' | awk '{print $1 / 16}')296 NB_NODES=$( echo $NB_PROC | awk '{print $1 - $1 % 8}' | awk '{print $1 / 8 }') 297 297 QUEUE=multi 298 NB_PROC_NODE= 16298 NB_PROC_NODE=8 299 299 fi 300 300 fi … … 324 324 325 325 case ${COMPILER} in 326 openmpi_NAVITI_MERCATOR) 326 ifort_MERCATOR_CLUSTER) 327 #cat run_sette_test.job | sed -e"s:QUEUE:${QUEUE}:" > run_sette_test1.job 328 #cat run_sette_test.job | sed -e"s/NPROC_NODE/${NB_PROC_NODE}/" > run_sette_test1.job 329 #-e"s/NPROC_NODE/${NB_PROC_NODE}/" > run_sette_test1.job 327 330 cat run_sette_test.job | sed -e"s/NPROC_NODE/${NB_PROC_NODE}/" \ 328 331 -e"s:QUEUE:${QUEUE}:" > run_sette_test1.job -
branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/SETTE/sette.sh
r6617 r6625 140 140 # SAS :11 & 12 141 141 # ISOMIP :13 & 14 142 # ORCA2_LIM_OBS :15 143 # ORCA2_AGRIF_LIM :16 & 17 144 # 18 & 19 145 for config in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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 146 145 147 146 do … … 1238 1237 set_namelist namelist_cfg jpnj 2 1239 1238 set_namelist namelist_cfg jpnij 2 1240 #1241 1239 set_namelist 1_namelist_cfg nn_it000 1 1242 1240 set_namelist 1_namelist_cfg nn_itend 150 1243 1241 set_namelist 1_namelist_cfg ln_ctl .false. 1244 1242 set_namelist 1_namelist_cfg ln_clobber .true. 1245 1246 1243 if [ ${USING_MPMD} == "yes" ] ; then 1247 1244 set_xio_using_server iodef.xml true … … 1255 1252 fi 1256 1253 1257 # test code corruption with AGRIF1258 # Compile and run with or without AGRIF ORCA2_LIM1259 if [ ${config} -eq 17 ] ; then1260 # First run same as 16 but without zoom1261 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.cfg1266 . ./all_functions.sh1267 . ./prepare_exe_dir.sh1268 JOB_FILE=${EXE_DIR}/run_job.sh1269 NPROC=41270 if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi1271 cd ${EXE_DIR}1272 set_namelist namelist_cfg nn_it000 11273 set_namelist namelist_cfg nn_itend 751274 set_namelist namelist_cfg ln_ctl .false.1275 set_namelist namelist_cfg ln_clobber .true.1276 set_namelist namelist_cfg nn_fwb 01277 set_namelist namelist_cfg jpni 21278 set_namelist namelist_cfg jpnj 21279 set_namelist namelist_cfg jpnij 41280 #1281 # Set the number of fine grids to zero:1282 sed -i "1s/.*/0/" ${EXE_DIR}/AGRIF_FixedGrids.in1283 1284 if [ ${USING_MPMD} == "yes" ] ; then1285 set_xio_using_server iodef.xml true1286 else1287 set_xio_using_server iodef.xml false1288 fi1289 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.cfg1299 . ./all_functions.sh1300 . ./prepare_exe_dir.sh1301 JOB_FILE=${EXE_DIR}/run_job.sh1302 NPROC=41303 if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi1304 cd ${EXE_DIR}1305 set_namelist namelist_cfg nn_it000 11306 set_namelist namelist_cfg nn_itend 751307 set_namelist namelist_cfg ln_ctl .false.1308 set_namelist namelist_cfg ln_clobber .true.1309 set_namelist namelist_cfg nn_fwb 01310 set_namelist namelist_cfg jpni 21311 set_namelist namelist_cfg jpnj 21312 set_namelist namelist_cfg jpnij 41313 #1314 if [ ${USING_MPMD} == "yes" ] ; then1315 set_xio_using_server iodef.xml true1316 else1317 set_xio_using_server iodef.xml false1318 fi1319 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 1324 fi1325 1326 ## Restartability tests for ORCA2_LIM_AGRIF1327 if [ ${config} -eq 18 ] ; then1328 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.cfg1333 . ./all_functions.sh1334 . ./prepare_exe_dir.sh1335 JOB_FILE=${EXE_DIR}/run_job.sh1336 NPROC=41337 if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi1338 cd ${EXE_DIR}1339 set_namelist namelist_cfg cn_exp \"O2LP_LONG\"1340 set_namelist namelist_cfg nn_it000 11341 set_namelist namelist_cfg nn_itend 1501342 set_namelist namelist_cfg nn_stock 751343 set_namelist namelist_cfg ln_clobber .true.1344 set_namelist namelist_cfg nn_fwb 01345 set_namelist namelist_cfg jpni 21346 set_namelist namelist_cfg jpnj 21347 set_namelist namelist_cfg jpnij 41348 set_namelist namelist_cfg nn_solv 21349 #1350 set_namelist 1_namelist_cfg cn_exp \"O2LP_LONG\"1351 set_namelist 1_namelist_cfg nn_it000 11352 set_namelist 1_namelist_cfg nn_itend 3001353 set_namelist 1_namelist_cfg nn_stock 1501354 set_namelist 1_namelist_cfg ln_ctl .false.1355 set_namelist 1_namelist_cfg ln_clobber .true.1356 #1357 if [ ${USING_MPMD} == "yes" ] ; then1358 set_xio_using_server iodef.xml true1359 else1360 set_xio_using_server iodef.xml false1361 fi1362 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.sh1368 cd ${EXE_DIR}1369 set_namelist namelist_cfg cn_exp \"O2LP_SHORT\"1370 set_namelist namelist_cfg nn_it000 761371 set_namelist namelist_cfg nn_itend 1501372 set_namelist namelist_cfg nn_stock 751373 set_namelist namelist_cfg ln_rstart .true.1374 set_namelist namelist_cfg nn_rstctl 21375 set_namelist namelist_cfg ln_clobber .true.1376 set_namelist namelist_cfg nn_fwb 01377 set_namelist namelist_cfg jpni 21378 set_namelist namelist_cfg jpnj 21379 1380 set_namelist namelist_cfg jpnij 41381 set_namelist namelist_cfg nn_solv 21382 set_namelist 1_namelist_cfg cn_exp \"O2LP_SHORT\"1383 set_namelist 1_namelist_cfg nn_it000 1511384 set_namelist 1_namelist_cfg nn_itend 3001385 set_namelist 1_namelist_cfg nn_stock 1501386 set_namelist 1_namelist_cfg ln_rstart .true.1387 set_namelist 1_namelist_cfg nn_rstctl 21388 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++)) ; do1395 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 done1401 if [ ${USING_MPMD} == "yes" ] ; then1402 set_xio_using_server iodef.xml true1403 else1404 set_xio_using_server iodef.xml false1405 fi1406 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}1410 fi1411 1412 ## Reproducibility tests for ORCA2_LIM_AGRIF1413 if [ ${config} -eq 19 ] ; then1414 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.cfg1419 . ./all_functions.sh1420 . ./prepare_exe_dir.sh1421 JOB_FILE=${EXE_DIR}/run_job.sh1422 NPROC=161423 if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi1424 cd ${EXE_DIR}1425 set_namelist namelist_cfg nn_it000 11426 set_namelist namelist_cfg nn_itend 751427 set_namelist namelist_cfg ln_ctl .false.1428 set_namelist namelist_cfg ln_clobber .true.1429 set_namelist namelist_cfg nn_fwb 01430 set_namelist namelist_cfg jpni 41431 set_namelist namelist_cfg jpnj 41432 set_namelist namelist_cfg jpnij 161433 set_namelist namelist_cfg nn_solv 21434 #1435 set_namelist 1_namelist_cfg nn_it000 11436 set_namelist 1_namelist_cfg nn_itend 1501437 set_namelist 1_namelist_cfg ln_ctl .false.1438 set_namelist 1_namelist_cfg ln_clobber .true.1439 1440 if [ ${USING_MPMD} == "yes" ] ; then1441 set_xio_using_server iodef.xml true1442 else1443 set_xio_using_server iodef.xml false1444 fi1445 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.sh1453 JOB_FILE=${EXE_DIR}/run_job.sh1454 NPROC=161455 if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi1456 cd ${EXE_DIR}1457 set_namelist namelist_cfg nn_it000 11458 set_namelist namelist_cfg nn_itend 751459 set_namelist namelist_cfg ln_ctl .false.1460 set_namelist namelist_cfg ln_clobber .true.1461 set_namelist namelist_cfg nn_fwb 01462 set_namelist namelist_cfg jpni 21463 set_namelist namelist_cfg jpnj 81464 set_namelist namelist_cfg jpnij 161465 set_namelist namelist_cfg nn_solv 21466 #1467 set_namelist 1_namelist_cfg nn_it000 11468 set_namelist 1_namelist_cfg nn_itend 1501469 set_namelist 1_namelist_cfg ln_ctl .false.1470 set_namelist 1_namelist_cfg ln_clobber .true.1471 1472 if [ ${USING_MPMD} == "yes" ] ; then1473 set_xio_using_server iodef.xml true1474 else1475 set_xio_using_server iodef.xml false1476 fi1477 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}1481 fi1482 1483 1254 done -
branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/SETTE/sette_rpt
r6617 r6625 440 440 endif 441 441 442 443 if ( -d ./WORCA2AGUL_LONG ) then444 set dorv = `ls -1rtd ./WORCA2AGUL_LONG/{$mach}/* | tail -1l `445 set dorv = $dorv:t446 set f1o = ./WORCA2AGUL_LONG/{$mach}/{$dorv}/LONG/ocean.output447 set f1s = ./WORCA2AGUL_LONG/{$mach}/{$dorv}/LONG/solver.stat448 set f2o = ./WORCA2AGUL_LONG/{$mach}/{$dorv}/SHORT/ocean.output449 set f2s = ./WORCA2AGUL_LONG/{$mach}/{$dorv}/SHORT/solver.stat450 451 set nl = `wc -l $f2s`452 tail -$nl[1] $f1s > f1.tmp$$453 cmp -s f1.tmp$$ $f2s454 if ( $status == 0 ) then455 echo "ORCA2_LIM_AGRIF restartability passed"456 else457 echo "ORCA2_LIM_AGRIF restartability FAILED"458 if ( $pass == 1 ) then459 echo "<return> to view solver.stat differences"460 set y = $<461 sdiff f1.tmp$$ $f2s462 echo "<return> to view ocean.output differences"463 set y = $<464 sdiff $f1o $f2o | grep "|"465 echo "<return> to continue"466 set y = $<467 endif468 endif469 rm f1.tmp$$470 endif471 472 if ( -d ./WORCA2AGUL_16 ) then473 set dorv = `ls -1rtd ./WORCA2AGUL_16/{$mach}/* | tail -1l `474 set dorv = $dorv:t475 set f1o = ./WORCA2AGUL_16/{$mach}/{$dorv}/REPRO_2_8/ocean.output476 set f1s = ./WORCA2AGUL_16/{$mach}/{$dorv}/REPRO_2_8/solver.stat477 set f2o = ./WORCA2AGUL_16/{$mach}/{$dorv}/REPRO_4_4/ocean.output478 set f2s = ./WORCA2AGUL_16/{$mach}/{$dorv}/REPRO_4_4/solver.stat479 480 cmp -s $f1s $f2s481 if ( $status == 0 ) then482 echo "ORCA2_LIM_AGRIF reproducibility passed"483 else484 echo "ORCA2_LIM_AGRIF reproducibility FAILED"485 if ( $pass == 1 ) then486 echo "<return> to view solver.stat differences"487 set y = $<488 sdiff $f1s $f2s489 echo "<return> to view ocean.output differences"490 set y = $<491 sdiff $f1o $f2o | grep "|"492 echo "<return> to continue"493 set y = $<494 endif495 endif496 endif497 498 if ( -d ./WORCA2AGUL_2_2_NAG ) then499 set dorv = `ls -1rtd ./WORCA2AGUL_2_2_NAG/{$mach}/* | tail -1l `500 set dorv = $dorv:t501 set f1o = ./WORCA2AGUL_2_2_NAG/{$mach}/{$dorv}/SHORT_NOAGRIF/ocean.output502 set f1s = ./WORCA2AGUL_2_2_NAG/{$mach}/{$dorv}/SHORT_NOAGRIF/solver.stat503 set dorv = `ls -1rtd ./WORCA2AGUL_2_2/{$mach}/* | tail -1l `504 set dorv = $dorv:t505 set f2o = ./WORCA2AGUL_2_2/{$mach}/{$dorv}/SHORT_NOZOOM/ocean.output506 set f2s = ./WORCA2AGUL_2_2/{$mach}/{$dorv}/SHORT_NOZOOM/solver.stat507 508 cmp -s $f1s $f2s509 if ( $status == 0 ) then510 echo "ORCA2_LIM_AGRIF code corruption test passed"511 else512 echo "ORCA2_LIM_AGRIF code corruption test FAILED"513 if ( $pass == 1 ) then514 echo "<return> to view solver.stat differences"515 set y = $<516 sdiff $f1s $f2s517 echo "<return> to view ocean.output differences"518 set y = $<519 sdiff $f1o $f2o | grep "|"520 echo "<return> to continue"521 set y = $<522 endif523 endif524 endif525 526 442 echo "<return> for second (more detailed) pass (y/n)" 527 443 set y = $<
Note: See TracChangeset
for help on using the changeset viewer.