diff --git a/GNUmakefile b/GNUmakefile index bb36ba89a07beb3cb840eb1de03be565181372be..25f6de276f47d7c0e41152ac6e4f102b3ccefc46 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -15,6 +15,8 @@ src_test_get_snapshot = test_get_snapshot.f get_snapshot.f dispatch_snapshot.f w 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 +src_test_weight = test_weight.f weight.f derived_types.f + sources := $(shell cat ${makefile_dir}/file_list) lib_list = contour_531 numer_rec_95 shapelib_03 netcdf95 geometry jumble netcdff fortrangis shp fortranc nr_util @@ -26,9 +28,10 @@ obj_test_get_1_outerm := $(src_test_get_1_outerm:.f=.o) obj_test_set_max_speed := $(src_test_set_max_speed:.f=.o) obj_test_get_snapshot := $(src_test_get_snapshot:.f=.o) obj_test_set_all_outerm := $(src_test_set_all_outerm:.f=.o) +obj_test_weight := $(src_test_weight:.f=.o) objects := $(sources:.f=.o) -execut = test_good_contour test_inside_4 test_get_1_outerm test_local_extrema test_max_speed_contour_ssh test_mean_speed test_set_max_speed test_get_snapshot test_set_all_outerm +execut = test_good_contour test_inside_4 test_get_1_outerm test_local_extrema test_max_speed_contour_ssh test_mean_speed test_set_max_speed test_get_snapshot test_set_all_outerm test_weight # 3. Compiler-dependent part @@ -57,6 +60,7 @@ test_local_extrema: ${obj_test_local_extrema} test_mean_speed: mean_speed.o test_get_snapshot: ${obj_test_get_snapshot} test_set_all_outerm: ${obj_test_set_all_outerm} +test_weight: ${obj_test_weight} depend ${makefile_dir}/depend.mk: makedepf90 -free -Wmissing -Wconfused $(addprefix -I, ${VPATH}) -nosrc $(addprefix -u , ${lib_list} shapelib netcdf intrinsic) ${sources} >${makefile_dir}/depend.mk diff --git a/Tests/test_get_1_outerm.f b/Tests/test_get_1_outerm.f index ae3a1aaf1f0224b7ddb2640693b64727be0ce45a..2adec74419b6ce2a8943e966a22807ad494f4107 100644 --- a/Tests/test_get_1_outerm.f +++ b/Tests/test_get_1_outerm.f @@ -10,7 +10,7 @@ program test_get_1_outerm use get_1_outerm_m, only: get_1_outerm use shapelib, only: shpt_polygon, shpfileobject, ftdouble, shpclose use shapelib_03, only: shp_create_03, dbf_add_field_03, & - shp_append_simple_object_03, dbf_write_attribute_03 + shp_append_object_03, dbf_write_attribute_03 implicit none @@ -83,7 +83,7 @@ program test_get_1_outerm call shp_create_03("test_get_1_outerm", shpt_polygon, shphandle) call dbf_add_field_03(field_number, shphandle, 'level', ftdouble, & nwidth = 13, ndecimals = 6) - call shp_append_simple_object_03(shape_number, shphandle, shpt_polygon, & + call shp_append_object_03(shape_number, shphandle, shpt_polygon, & outermost_contour%points / pi * 180.) call dbf_write_attribute_03(shphandle, shape_number, ifield = 0, & fieldvalue = outermost_contour%ssh) diff --git a/Tests/test_good_contour.f b/Tests/test_good_contour.f index a42c65b750b960825f8bc405726238f745132b7d..02d8b3861a6354bf963f1cdd45eae1398fdbc307 100644 --- a/Tests/test_good_contour.f +++ b/Tests/test_good_contour.f @@ -9,7 +9,7 @@ program test_good_contour use nr_util, only: assert use shapelib, only: shpt_polygon, shpfileobject, ftdouble, shpclose use shapelib_03, only: shp_create_03, dbf_add_field_03, & - shp_append_simple_object_03, dbf_write_attribute_03 + shp_append_object_03, dbf_write_attribute_03 implicit none @@ -75,8 +75,7 @@ program test_good_contour call shp_create_03("test_good_contour", shpt_polygon, shphandle) call dbf_add_field_03(field_number, shphandle, 'level', ftdouble, & nwidth = 13, ndecimals = 6) - call shp_append_simple_object_03(shape_number, shphandle, shpt_polygon, & - c%points) + call shp_append_object_03(shape_number, shphandle, shpt_polygon, c%points) call dbf_write_attribute_03(shphandle, shape_number, ifield = 0, & fieldvalue = level) CALL shpclose(shphandle) diff --git a/Tests/test_set_all_outerm.f b/Tests/test_set_all_outerm.f index b38f8a5cf23356ce512edf7757c0e5b8aac9326e..3804111785455a75daeaebbd5c9a63d0e5fb9457 100644 --- a/Tests/test_set_all_outerm.f +++ b/Tests/test_set_all_outerm.f @@ -11,7 +11,7 @@ program test_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, shp_append_point_03, & - dbf_write_attribute_03, shp_append_null_03, shp_append_simple_object_03 + dbf_write_attribute_03, shp_append_null_03, shp_append_object_03 implicit none @@ -135,8 +135,7 @@ program test_set_all_outerm 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, & + call shp_append_object_03(ishape, hshp_outermost, shpt_polygon, & s%list_vis(i)%outermost_contour%points * rad_over_deg) end if end if diff --git a/Tests/test_set_max_speed.f b/Tests/test_set_max_speed.f index 956b16e229d6ecbcd0f54fde793cb08de27727c0..b82560bb8be6dc80cdeaf7369be046db0c40b1ff 100644 --- a/Tests/test_set_max_speed.f +++ b/Tests/test_set_max_speed.f @@ -12,7 +12,7 @@ program test_set_max_speed use shapelib, only: shpt_polygon, shpfileobject, ftdouble, shpclose, & shpobject, dbfreadattribute use shapelib_03, only: shp_open_03, shp_create_03, dbf_add_field_03, & - shp_append_simple_object_03, dbf_write_attribute_03, shp_read_object_03 + shp_append_object_03, dbf_write_attribute_03, shp_read_object_03 implicit none @@ -112,7 +112,7 @@ program test_set_max_speed call dbf_add_field_03(ifield, hshp, 'speed', ftdouble, nwidth = 20, & ndecimals = 6) - call shp_append_simple_object_03(ishape, hshp, shpt_polygon, & + call shp_append_object_03(ishape, hshp, shpt_polygon, & e%max_speed_contour%points * rad_over_deg) call dbf_write_attribute_03(hshp, ishape, 0, e%max_speed_contour%ssh) call dbf_write_attribute_03(hshp, ishape, 1, e%max_speed_contour%area) diff --git a/Tests/test_weight.f b/Tests/test_weight.f new file mode 100644 index 0000000000000000000000000000000000000000..8ae642aa07f4a3858cb211fa0a4acf4a5c40d5cb --- /dev/null +++ b/Tests/test_weight.f @@ -0,0 +1,24 @@ +program test_weight + + use derived_types, only: eddy + use nr_util, only: pi + use weight_m, only: weight + + implicit none + + real, parameter:: deg_over_rad = pi / 180. + type(eddy) e1, e2 + + !--------------------------------------------------------------------- + + e1%max_speed = 0.15 + e1%max_speed_contour%area = pi * 5e4**2 + e1%coord_extr(2) = - 20. * deg_over_rad + + e2%max_speed = 0.1 + e2%max_speed_contour%area = pi * 6e4**2 + e2%coord_extr(2) = - 25. * deg_over_rad + + print *, "weight = ", weight(e1, e2) + +end program test_weight diff --git a/Tests/tests.json b/Tests/tests.json index a8958fb1412d781fa904ecd5e67be0acf21f2508..284b5f87e3cc84080421d5ac7e7f1fc3c094b322 100644 --- a/Tests/tests.json +++ b/Tests/tests.json @@ -185,5 +185,6 @@ ["$input_dir/2006_01/uv_region_5.nc", "uv.nc"]], "input": "1e-3\n", "description": "Same as Get_snapshot_region_4 with larger domain." - } + }, + {"args": "$compil_prod_dir/test_weight", "title": "Weight"} ] diff --git a/depend.mk b/depend.mk index cd0d446148c481de8ce75084a2a6cb6a66bb40f4..ffea460e81a66f0e1ea3471815572235829d355c 100644 --- a/depend.mk +++ b/depend.mk @@ -15,3 +15,5 @@ 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 +weight.o : derived_types.o +test_weight.o : weight.o derived_types.o diff --git a/derived_types.f b/derived_types.f index 3ed5b5b584f4fcaf2a3813f7aa494b0baf828a0d..4f705e1f1dd1e430cadd523e9ea209907b7f9109 100644 --- a/derived_types.f +++ b/derived_types.f @@ -16,7 +16,7 @@ module derived_types real ssh_extremum ! in m logical cyclone type(ssh_contour) outermost_contour, max_speed_contour - real max_speed ! average on max_speed_contour, in m s-1 + real max_speed ! average of azimuthal speed on max_speed_contour, in m s-1 logical suff_amp ! outermost_contour found and sufficient ! amplitude of ssh between extremum and ! outermost contour diff --git a/file_list b/file_list index 73904baf99023dcbf10e1e62da5074354dbc8b65..5dde0340feff08d0168d67dd4d43a1a2f5f3b476 100644 --- a/file_list +++ b/file_list @@ -23,3 +23,5 @@ test_set_all_outerm.f test_set_max_speed.f test_get_1_outerm.f write_eddy.f +weight.f +test_weight.f diff --git a/weight.f b/weight.f new file mode 100644 index 0000000000000000000000000000000000000000..d7a5719548bc67a0f54372c6fc4ca2e37c097bc6 --- /dev/null +++ b/weight.f @@ -0,0 +1,46 @@ +module weight_m + + implicit none + + private rossby_number + +contains + + pure real function weight(e1, e2) + + ! Computes the weight of an edge. + + use derived_types, only: eddy + + type(eddy), intent(in):: e1, e2 + + !-------------------------------------------------------- + + weight = abs(rossby_number(e2) - rossby_number(e1)) + + end function weight + + !**************************************************** + + pure real function rossby_number(e) + + ! Computes the Rossby number for the maximum-speed contour. + + use derived_types, only: eddy + use nr_util, only: pi + + type(eddy), intent(in):: e + + ! Local: + + real, parameter:: omega = 2 * pi / 86164. + ! angular speed of rotation of the Earth, in rad s-1 + + !---------------------------------------------------------- + + rossby_number = abs(e%max_speed / (sqrt(e%max_speed_contour%area / pi) & + * 2. * omega * sin(e%coord_extr(2)))) + + end function rossby_number + +end module weight_m diff --git a/write_eddy.f b/write_eddy.f index ef3ea1a8e7d53c96e6a332792d88bac209ebd580..c329d63768c3927017f546c304b5fe56ae377d97 100644 --- a/write_eddy.f +++ b/write_eddy.f @@ -10,7 +10,7 @@ contains use nr_util, only: pi use shapelib, only: shpfileobject, shpt_polygon use shapelib_03, only: shp_append_point_03, dbf_write_attribute_03, & - shp_append_simple_object_03, shp_append_null_03 + shp_append_object_03, shp_append_null_03 type(eddy), intent(in):: e integer, intent(in):: k ! date index @@ -54,15 +54,15 @@ contains if (e%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, e%outermost_contour%points * rad_over_deg) + call shp_append_object_03(ishape, hshp_outermost, shpt_polygon, & + e%outermost_contour%points * rad_over_deg) end if if (e%max_speed == 0.) then call shp_append_null_03(ishape, hshp_max_speed) else - call shp_append_simple_object_03(ishape, hshp_max_speed, & - shpt_polygon, e%max_speed_contour%points * rad_over_deg) + call shp_append_object_03(ishape, hshp_max_speed, shpt_polygon, & + e%max_speed_contour%points * rad_over_deg) end if end if