diff --git a/GNUmakefile b/GNUmakefile index e79b993b037ec701fde2b5c25a1ec332533141bd..4b07fa03087a6a9e5608bee004b8c860a0fca5c4 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -13,7 +13,7 @@ src_test_set_max_speed = test_set_max_speed.f derived_types.f set_max_speed.f go src_test_get_snapshot = test_get_snapshot.f get_snapshot.f dispatch_snapshot.f write_eddy.f send_snapshot.f receive_snapshot.f local_extrema.f set_max_speed.f outermost_possible_level.f get_1_outerm.f max_speed_contour_ssh.f good_contour.f spherical_polygon_area.f mean_speed.f inside_4.f set_all_outerm.f -src_test_set_all_outerm = test_set_all_outerm.f derived_types.f dispatch_snapshot.f set_all_outerm.f write_eddy.f send_snapshot.f local_extrema.f get_1_outerm.f good_contour.f spherical_polygon_area.f +src_test_set_all_outerm = test_set_all_outerm.f derived_types.f set_all_outerm.f local_extrema.f get_1_outerm.f good_contour.f spherical_polygon_area.f sources := $(shell cat ${makefile_dir}/file_list) @@ -55,7 +55,7 @@ test_get_snapshot: ${obj_test_get_snapshot} test_set_all_outerm: ${obj_test_set_all_outerm} depend ${makefile_dir}/depend.mk: - makedepf90 -free -Wmissing -Wconfused $(addprefix -I, ${VPATH}) -nosrc $(addprefix -u , ${lib_list} shapelib netcdf) ${sources} >${makefile_dir}/depend.mk + makedepf90 -free -Wmissing -Wconfused $(addprefix -I, ${VPATH}) -nosrc $(addprefix -u , ${lib_list} shapelib netcdf intrinsic) ${sources} >${makefile_dir}/depend.mk TAGS: ${sources} ctags -e --language-force=fortran $^ diff --git a/Tests/plot_snapshot.py b/Tests/plot_snapshot.py index f437558ca24161e39036d52a94068caf1f352497..130458325a75736a3e560b689f879d4737ca971c 100755 --- a/Tests/plot_snapshot.py +++ b/Tests/plot_snapshot.py @@ -16,6 +16,7 @@ import matplotlib.pyplot as plt import netCDF4 from mpl_toolkits import basemap import math +import itertools parser = argparse.ArgumentParser() parser.add_argument("-v", "--velocity", help = "plot velocity field", @@ -40,11 +41,20 @@ m.plot(lon_2d.reshape(-1), lat_2d.reshape(-1), latlon = True, marker = "+", reader_extr = shapefile.Reader("extremum_1") reader_outer = shapefile.Reader("outermost_contour_1") -reader_m_s = shapefile.Reader("max_speed_contour_1") + +try: + reader_m_s = shapefile.Reader("max_speed_contour_1") +except shapefile.ShapefileException: + print("Shapefile max_speed_contour_1 not found. " + "Max-speed contours will not be plotted.") + w = shapefile.Writer(shapeType = shapefile.NULL) + m_s_iterShapes = itertools.repeat(w) +else: + m_s_iterShapes = reader_m_s.iterShapes() for shape_rec_extr, shape_outer, shape_m_s \ in zip(reader_extr.iterShapeRecords(), reader_outer.iterShapes(), - reader_m_s.iterShapes()): + m_s_iterShapes): points = shape_rec_extr.shape.points[0] if shape_rec_extr.record[4] == 0: diff --git a/Tests/test_set_all_outerm.f b/Tests/test_set_all_outerm.f index cb38946c0667a4c09dbd7b3ed98160ebc4a36bd7..b38f8a5cf23356ce512edf7757c0e5b8aac9326e 100644 --- a/Tests/test_set_all_outerm.f +++ b/Tests/test_set_all_outerm.f @@ -2,16 +2,16 @@ program test_set_all_outerm use contour_531, only: null_polyline use derived_types, only: snapshot - use dispatch_snapshot_m, only: dispatch_snapshot use jumble, only: new_unit, get_command_arg_dyn use netcdf, only: nf90_nowrite use netcdf95, only: nf95_open, nf95_close, nf95_inq_varid, nf95_get_var, & - find_coord, nf95_inquire_dimension + find_coord, nf95_inquire_dimension, nf95_get_att use nr_util, only: pi use set_all_outerm_m, only: set_all_outerm use shapelib, only: shpt_point, shpt_polygon, shpfileobject, ftdouble, & shpclose, ftinteger - use shapelib_03, only: shp_create_03, dbf_add_field_03 + use shapelib_03, only: shp_create_03, dbf_add_field_03, shp_append_point_03, & + dbf_write_attribute_03, shp_append_null_03, shp_append_simple_object_03 implicit none @@ -33,9 +33,11 @@ program test_set_all_outerm ! grid points real, parameter:: deg_over_rad = pi / 180. + real, parameter:: rad_over_deg = 180. / pi integer ncid, varid, dimid, i real, allocatable:: ssh(:, :) ! (nlon, nlat) sea-surface height, in m + real Fill_Value TYPE(shpfileobject) hshp_extremum ! shapefile extremum_$m. The fields in the DBF file are, in that @@ -46,15 +48,12 @@ program test_set_all_outerm ! shapefile outermost_contour_$m. The fields in the DBF file are, ! in that order: area, ssh, date index, eddy index, twice. - TYPE(shpfileobject) hshp_max_speed - ! shapefile x_speed_contour_$m. The fields in the DBF file are, in - ! that order: area, ssh, spped, date index, eddy index. - - integer ifield, unit_isolated, unit_number_eddies + integer ifield, unit_isolated, ishape !-------------------------------------------------------------- - call get_command_arg_dyn(1, filename) + call get_command_arg_dyn(1, filename, & + "Required argument: NetCDF file containing adt") print *, "min_amp = ? " read *, min_amp @@ -75,6 +74,8 @@ program test_set_all_outerm allocate(ssh(nlon, nlat)) call nf95_inq_varid(ncid, "adt", varid) call nf95_get_var(ncid, varid, ssh) + call nf95_get_att(ncid, varid, "_FillValue", Fill_Value) + where (ssh == Fill_Value) ssh = huge(0.) call nf95_close(ncid) @@ -83,15 +84,6 @@ program test_set_all_outerm = [longitude(2) - longitude(1), latitude(2) - latitude(1)] & * deg_over_rad, ssh = ssh) - do i = 1, s%number_vis_eddies - s%list_vis(i)%max_speed_contour%polyline = null_polyline() - s%list_vis(i)%max_speed_contour%ssh = s%list_vis(i)%ssh_extremum - s%list_vis(i)%max_speed_contour%area = 0. - s%list_vis(i)%max_speed = 0. - end do - - s%number_eddies = s%number_vis_eddies - call shp_create_03("extremum_1", shpt_point, hshp_extremum) call dbf_add_field_03(ifield, hshp_extremum, 'ssh', ftdouble, nwidth = 13, & ndecimals = 6) @@ -118,44 +110,58 @@ program test_set_all_outerm call dbf_add_field_03(ifield, hshp_outermost, 'twice', ftinteger, & nwidth = 1, ndecimals = 0) - call shp_create_03("max_speed_contour_1", shpt_polygon, hshp_max_speed) - call dbf_add_field_03(ifield, hshp_max_speed, 'area', ftdouble, nwidth = 20, & - ndecimals = 6) - call dbf_add_field_03(ifield, hshp_max_speed, 'ssh', ftdouble, nwidth = 13, & - ndecimals = 6) - call dbf_add_field_03(ifield, hshp_max_speed, 'speed', & - ftdouble, nwidth = 13, ndecimals = 6) - call dbf_add_field_03(ifield, hshp_max_speed, 'date_index', ftinteger, & - nwidth = 4, ndecimals = 0) - call dbf_add_field_03(ifield, hshp_max_speed, 'eddy_index', ftinteger, & - nwidth = 5, ndecimals = 0) - call new_unit(unit_isolated) open(unit_isolated, file = "isolated_nodes_1.csv", status = "replace", & action = "write") write(unit_isolated, fmt = *) '"date index" "eddy index"' ! title line - call new_unit(unit_number_eddies) - open(unit_number_eddies, file = "number_eddies_1.csv", status = "replace", & - action = "write") - write(unit_number_eddies, fmt = *) '"date index" ' & - // '"number of visible eddies" "number of interpolated eddies"' - ! (title line) + do i = 1, s%number_vis_eddies + call shp_append_point_03(ishape, hshp_extremum, & + s%list_vis(i)%coord_extr * rad_over_deg) + call dbf_write_attribute_03(hshp_extremum, ishape, 0, & + s%list_vis(i)%ssh_extremum) + call dbf_write_attribute_03(hshp_extremum, ishape, 1, 1) + call dbf_write_attribute_03(hshp_extremum, ishape, 2, i) + call dbf_write_attribute_03(hshp_extremum, ishape, 3, & + merge(1, 0, s%list_vis(i)%interpolated)) + call dbf_write_attribute_03(hshp_extremum, ishape, 4, & + merge(1, 0, s%list_vis(i)%cyclone)) + call dbf_write_attribute_03(hshp_extremum, ishape, 5, & + merge(1, 0, s%list_vis(i)%suff_amp)) + + if (s%list_vis(i)%interpolated) then + call shp_append_null_03(ishape, hshp_outermost) + else + if (s%list_vis(i)%outermost_contour%n_points == 0) then + call shp_append_null_03(ishape, hshp_outermost) + else + call shp_append_simple_object_03(ishape, hshp_outermost, & + shpt_polygon, & + s%list_vis(i)%outermost_contour%points * rad_over_deg) + end if + end if + + call dbf_write_attribute_03(hshp_outermost, ishape, 0, & + s%list_vis(i)%outermost_contour%area) + call dbf_write_attribute_03(hshp_outermost, ishape, 1, & + s%list_vis(i)%outermost_contour%ssh) + call dbf_write_attribute_03(hshp_outermost, ishape, 2, 1) + call dbf_write_attribute_03(hshp_outermost, ishape, 3, i) + call dbf_write_attribute_03(hshp_outermost, ishape, 4, & + merge(1, 0, s%list_vis(i)%twice)) + + if (s%list_vis(i)%delta_in == huge(0) .and. s%list_vis(i)%delta_out & + == huge(0)) write(unit_isolated, fmt = *) 1, i + end do - call dispatch_snapshot(s, hshp_extremum, hshp_outermost, hshp_max_speed, & - unit_isolated, unit_number_eddies, k = 1, m = 1, k_begin = 1, & - max_delta = 4) + print *, "s%number_vis_eddies = ", s%number_vis_eddies CALL shpclose(hshp_extremum) print *, 'Created shapefile "extremum_1".' CALL shpclose(hshp_outermost) print *, 'Created shapefile "outermost_contour_1".' - CALL shpclose(hshp_max_speed) - print *, 'Created shapefile "max_speed_contour_1".' close(unit_isolated) print *, 'Created "isolated_nodes_1.csv".' - close(unit_number_eddies) - print *, 'Created "number_eddies_1.csv".' print *, "Average number of points per outermost contour: ", & sum(s%list_vis%outermost_contour%n_points) / real(s%number_vis_eddies) diff --git a/Tests/tests.json b/Tests/tests.json index f49928848313d6ba29229a8f35328ab180f9e515..e7ad8dd0feefa8a3e62d5d2203359bbd4efda04b 100644 --- a/Tests/tests.json +++ b/Tests/tests.json @@ -145,12 +145,12 @@ "input": "1e-3\n" }, { - "args": ["$compil_prod_dir/test_inside_4", "$input_dir/outermost_5"], + "args": ["$compil_prod_dir/test_inside_4", "$input_dir/outermost_eddy_5"], "title": "Inside_4_true", "stdin": "$stdin_dir/inside_4_true_nml.txt" }, { - "args": ["$compil_prod_dir/test_inside_4", "$input_dir/outermost_5"], + "args": ["$compil_prod_dir/test_inside_4", "$input_dir/outermost_eddy_5"], "title": "Inside_4_false", "stdin": "$stdin_dir/inside_4_false_nml.txt" }, diff --git a/depend.mk b/depend.mk index 175beb861a5cc3a23b0bed6e72ec2c4256f89089..cd0d446148c481de8ce75084a2a6cb6a66bb40f4 100644 --- a/depend.mk +++ b/depend.mk @@ -11,7 +11,7 @@ test_inside_4.o : inside_4.o test_local_extrema.o : local_extrema.o test_max_speed_contour_ssh.o : max_speed_contour_ssh.o test_mean_speed.o : mean_speed.o -test_set_all_outerm.o : set_all_outerm.o dispatch_snapshot.o derived_types.o +test_set_all_outerm.o : set_all_outerm.o derived_types.o test_set_max_speed.o : set_max_speed.o derived_types.o test_get_1_outerm.o : get_1_outerm.o derived_types.o write_eddy.o : derived_types.o