The following files are needed to call the BVW library from FORTRAN77.
bvw99.c: the library of algorithms,
bvw99.h: header file with function prototypes,
ftest_bvw99.f: example and test program for FORTRAN77 on an SGI,
ftest2_bvw99.f: example and test program for FORTRAN77 on non-SGIs,
call_bvw99.c: shell for the flux code (pmix) without height adjustment. Variables are passed to this shell by address (rather than be value), which some users might find easier to work with. Arguements are ordered as for calls to pmix,
call_ht_adj99.c: shell for ht_adh99.c similar to call_bvw99.c,
ftest_ht_adj99.f: example and test program for FORTRAN77 on SGIs,
ftest2_ht_adj99.f: example and test program for FORTRAN77 on non-SGIs,
Makefile: makefile for compiling 'C' and 'FORTRAN' versions of the model. Note that the makefile is designed for SGIs, and will have to be modified for other platforms.
testdata99.dat: input and output data for the test program.
It is a lot easier to program if you have examples, and even better if you can cut and paste. These examples are taken from the test codes.
integer astab, air_moist_prm, count, dyn_in_prm, pmix, sfc_moist_prm, ss_prm, warn
real dom_phs_spd, h_sig, lhf, q_star, shf, tau(2), t_star, u_star(2), wave_age, ww_stab, z_over_L, zo_m(2)
real air_moist_val, CONVECT, CONV_CRIT, dyn_in_val, pressure, ref_ht_tq, ref_ht_wind, rel_wind_ang, salinity, sfc_moist_val, ss_val, t_air, t_skin
count = pmix( dyn_in_prm, dyn_in_val, rel_wind_ang, CONVECT, CONV_CRIT, pressure, air_moist_prm, air_moist_val, sfc_moist_prm, sfc_moist_val, salinity, ss_prm, ss_val, t_air, t_skin, ref_ht_wind, ref_ht_tq, astab, warn, shf, lhf, tau, u_star, t_star, q_star, z_over_L, wave_age, dom_phs_spd, h_sig, ww_stab, zo_m )
integer astab, air_moist_prm, count, dyn_in_prm, eqv_neut, ht_adj, i, num, sfc_moist_prm, ss_prm, warn
real dom_phs_spd, h_sig, lhf, q_at_z, q_star, shf, t_at_z, tau(2), t_star, u_at_z, u_star(2), wave_age, ww_stab, z_over_L, zo_m(2)
real air_moist_val, CONVECT, CONV_CRIT, dyn_in_val, pressure, ref_ht_tq, ref_ht_wind, rel_wind_ang, salinity, sfc_moist_val, ss_val, t_air, t_skin, z_wanted
count = ht_adj( dyn_in_prm, dyn_in_val, rel_wind_ang, CONVECT, CONV_CRIT, pressure, air_moist_prm, air_moist_val, sfc_moist_prm, sfc_moist_val, salinity, ss_prm, ss_val, t_air, t_skin, ref_ht_wind, ref_ht_tq, astab, warn, shf, lhf, tau, u_star, t_star, q_star, z_over_L, wave_age, dom_phs_spd, h_sig, ww_stab, zo_m, eqv_neut, z_wanted, u_at_z, t_at_z, q_at_z )
It is a lot easier to program if you have examples, and even better if you can cut and paste. These examples are taken from the test codes.
external pmix
integer astab, air_moist_prm, count, dyn_in_prm, pmix, sfc_moist_prm, ss_prm, warn
real dom_phs_spd, h_sig, lhf, q_star, shf, tau(2), t_star, u_star(2), wave_age, ww_stab, z_over_L, zo_m(2)
real air_moist_val, CONVECT, CONV_CRIT, dyn_in_val, pressure, ref_ht_tq, ref_ht_wind, rel_wind_ang, salinity, sfc_moist_val, ss_val, t_air, t_skin
bvw_flag = pmix( %val(dyn_in_prm), %val(dyn_in_val), %val(rel_wind_ang), %val(CONVECT), %val(CONV_CRIT), %val(pressure), %val(air_moist_prm), %val(air_moist_val), %val(sfc_moist_prm), %val(sfc_moist_val), %val(salinity), %val(ss_prm), %val(ss_val), %val(t_air), %val(t_skin), %val(ref_ht_wind), %val(ref_ht_tq), %val(astab), %val(warn), shf, lhf, tau, u_star, t_star, q_star, z_over_L, wave_age, dom_phs_spd, h_sig, ww_stab, zo_m )
external ht_adj
integer astab, air_moist_prm, bvw_flag, dyn_in_prm, eqv_neut, ht_adj, i, num, sfc_moist_prm, ss_prm, warn
real dom_phs_spd, h_sig, lhf, q_at_z, q_star, shf, t_at_z, tau(2), t_star, u_at_z, u_star(2), wave_age, ww_stab, z_over_L, zo_m(2)
real air_moist_val, CONVECT, CONV_CRIT, dyn_in_val, pressure, ref_ht_tq, ref_ht_wind, rel_wind_ang, salinity, sfc_moist_val, ss_val, t_air, t_skin, z_wanted
bvw_flag = ht_adj( %val(dyn_in_prm), %val(dyn_in_val), %val(rel_wind_ang), %val(CONVECT), %val(CONV_CRIT), %val(pressure), %val(air_moist_prm), %val(air_moist_val), %val(sfc_moist_prm), %val(sfc_moist_val), %val(salinity), %val(ss_prm), %val(ss_val), %val(t_air), %val(t_skin), %val(ref_ht_wind), %val(ref_ht_tq), %val(astab), %val(warn), shf, lhf, tau, u_star, t_star, q_star, z_over_L, wave_age, dom_phs_spd, h_sig, ww_stab, zo_m, %val(eqv_neut), %val(z_wanted), u_at_z, t_at_z, q_at_z )
The following is an example of how to compile a test routine.
cc bvw99.c -lm -c
f77 ftest2_bvw99.f bvw99.o -o ftest_bvw99
The executable code will be named ftest_bvw99.
The flux and seastate model is programmed in 'C'. The bulk of the documentation is in the subroutine pmix. Wrappers for calling the programs from IDL and FORTRAN have been developed for the '99 version of the code.
Status: tested and working, except for a bug at very low wind speeds U10 < 0.6 m/s) when the sea state is set to local equilibrium.
Warnings:
1) There are very few checks on the range of input parameters: unbelievable input will result in unbelievable output.
2) The influence of a difference in the directions of wind velocity and mean wave propagation is underestimated. This model is an improvement over models with only one horizontal dimension; however, several problems remain to be resolved.
Last update: 20 Sept., 2005