Hapi Engine Manual
HAPI engines are Volkswagen auto engines converted to full or 1/2 VW aircraft engines by Homebuilt Aircraft Products, Inc. (H.A.P.I.), initially of Calexico, California and later of Eloy, Arizona. Although the firm preferred the H.A.P.I. abbreviation, the Compiler has chosen to use HAPI, as many others have done. HAPI was founded in 1977 by Rex Taylor and his son Patrick while they were designing a light aircraft kit, the Hapicraft. The aircraft never materialized, but they became deeply involved in VW conversions in both kit and completely assembled form. Rex Taylor wrote an extensive series of articles in the EAA Sport Aviation magazine about VW conversions in general, and HAPI conversions in particular. The articles can be found in SA2/79 and in a ten-part series from SA12/79 through SA9/80. HAPI continued in business until 1989, when the engine assets were sold to Mosler Motors and Rex Taylor retired.
Hapi Engine Manual
4cyl; HAPI Model 50; 50hp@3200rpm; 1979-1989; Wt = 152#.Carbureted engine with optional single or dual ignition; starter and alternator were standard equipment except on Model 50-E.SA2/79.Applications: None found.
4cyl; HAPI Model 55; 55hp@3200rpm; 1983-1989; Wt = N/A.Carbureted engine with optional single or dual ignition; starter and alternator were standard equipment except on Model 55-E.BGP.Applications: None found.
4cyl; HAPI Model 60; 60hp@3200rpm; 1979-1989; Wt = 152#.Carbureted engine with optional single or dual ignition; starter and alternator were standard equipment except on Model 60-E. A turbocharged version also was available.SA2/79.Applications: (US) Bounsall Super Prospector.
4cyl; HAPI Model 75 Magnum; 75hp@3200rpm; 1983-1989; Wt = N/A.Carbureted engine with optional single or dual ignition; starter and alternator were standard equipment except on Model 75-E.BGP.Applications: None found.
4cyl; HAPI Model 82 Magnum Plus; 82hp@3400rpm; 1983-1989; Wt = N/A.Carbureted engine with optional single or dual ignition; starter and alternator were standard equipment except on Model 82-E.BGP.Applications: None found.
Executive Director Message: New Asphalt Facts website, Mayor Caldwell fixing potholes, and the PG Performance Grading System article in the LTAP quarterly newsletterFeatured Project: Runway and Taxiway Pavement Preservation ProgramFeatured HAPI Members: Goldwings Supply Service, Inc. and Crafco, Inc.December 2012Executive Director Message: Our December newsletter presents our updated website, which improves our ability to fulfill our mission of providing engineering promotion and education.
Experimental Releases: These releases have not yet been certified for use by Bloomberg customers, but have been released by the API library engineering team in order to address specific issues or add new features. Bloomberg customers should not use these releases unless specifically directed to do so.
Charm++ is a production-quality parallel programming system used bymultiple applications in science and engineering on supercomputers aswell as smaller clusters around the world. Currently the parallelplatforms supported by Charm++ are OpenPOWERsystems, Cray XE, XK, and XC systems, Omni-Path and Infiniband clusters,single workstations and networks of workstations (including x86 (runningLinux, Windows, MacOS)), etc. The communication protocols andinfrastructures supported by Charm++ are UDP, MPI, OFI, UCX, Infiniband,uGNI, and PAMI. Charm++ programs can run without changing the source onall these platforms. Charm++ programs can also interoperate with MPIprograms (Section 2.3.15). Please see the Installation and Usagesection for details about installing, compiling and running Charm++programs (Section 2.6.1).
The local branch of a NodeGroup NG, and hence its member fields andmethods, can be accessed through the method NG*CProxy_NG::ckLocalBranch() of its proxy. Note that accessing datamembers of a NodeGroup branch in this manner is not thread-safe bydefault, although you may implement your own mutual exclusion schemes toensure safety. One way to ensure safety is to use node-level locks,which are described in the Converse manual.
Although Charm++ supports automated parameter marshalling for entrymethods, you can also manually handle the process of packing andunpacking parameters by using messages. A message encapsulates all theparameters sent to an entry method. Since the parameters are alreadyencapsulated, sending messages is often more efficient than parametermarshalling, and can help to avoid unnecessary copying. Moreover, assumethat the receiver is unable to process the contents of the message atthe time that it receives it. For example, consider a tiled matrixmultiplication program, wherein each chare receives an \(A\)-tileand a \(B\)-tile before computing a partial result for\(C = A \times B\). If we were using parameter marshalled entrymethods, a chare would have to copy the first tile it received, in orderto save it for when it has both the tiles it needs. Then, upon receivingthe second tile, the chare would use the second tile and the first(saved) tile to compute a partial result. However, using messages, wewould just save a pointer to the message encapsulating the tilereceived first, instead of the tile data itself.
data sent to this entry method will be aggregated into largermessages before being sent, to reduce fine-grained overhead. Theaggregation is handled by the Topological Routing and AggregationModule (TRAM). The argument to this entry method must be a singlePUPable object. More details on TRAM are given in the TRAMsectionof the libraries manual.
To assign a bitvector priority, two methods are available. The first isto obtain a pointer to the priority field using CkPriorityPtr, and thenmanually set the bits using the bit-setting operations inherent to C. Toachieve this, one must know the format of the bitvector, which is asfollows: the bitvector is represented as an array of unsigned integers.The most significant bit of the first integer contains the first bit ofthe bitvector. The remaining bits of the first integer contain the next31 bits of the bitvector. Subsequent integers contain 32 bits each. Ifthe size of the bitvector is not a multiple of 32, then the last integercontains 0 bits for padding in the least-significant bits of theinteger.
In addition to the above mechanisms for invoking a callback, it is possiblethat a library may want to accept a callback which broadcasts to a groupor nodegroup, but then handles the exact logic for the broadcast manually.For example, if the data is already distributed across compute elements wecan avoid performing the actual broadcast, or if we want to send differentdata to each member of the group. To accomplish this, users can invoke
For details on the threads API available to threaded entry methods, seechapter 3 of the Converse programming manual. The use of threaded entrymethods is demonstrated in an example program located inexamples/charm++/threaded_ring.
Multicast operations (a broadcast to all members of a section) aredirectly supported by the section proxy. For array sections, multicastoperations by default use optimized spanning trees via the CkMulticastlibrary in Charm++. For group sections, multicast operations by defaultuse an unoptimized direct-sending implementation. To optimize messaging,group sections need to be manually delegated to CkMulticast (see22.214.171.124). Reductions are also supported for botharrays and group sections via the CkMulticast library.
It is important to note that Charm++ does not automatically delegategroup sections to the internal CkMulticast library, and instead defaultsto a point-to-point implementation of multicasts. To use CkMulticastwith group sections, the user must manually delegate after invokinggroup creation. See 126.96.36.199 for information on howto do this.
Charm++ has a built-in CkMulticast library that optimizes sectioncommunications. By default, the Charm++ runtime system will use thislibrary for array and cross-array sections. For group sections, the usermust manually delegate the section proxy to CkMulticast (see188.8.131.52).
Reductions over the elements of a section are supported through theCkMulticast library. As such, to perform reductions, the section musthave been delegated to CkMulticast, either automatically (which is thedefault case for array sections), or manually for group sections.
By default Charm++ uses the CkMulticast library for optimized broadcastsand reductions on array sections, but advanced Charm++ users can chooseto delegate 13 sections to custom libraries (called delegationmanagers). Note that group sections are not automatically delegated toCkMulticast and hence must be manually delegated to this library tobenefit from the optimized multicast tree implementation. This isexplained here, and see examples/charm++/groupsection for anexample.
One only needs to create one delegation manager group, and it can serveall multicast/reduction delegations for different array/group sectionsin an application. In the following we show a manual delegation exampleusing CkMulticast (the same can be applied to custom delegationmanagers):
The previous disk-based checkpoint/restart can be used as a faulttolerance scheme. However, it would be a very basic scheme in that whena failure occurs, the whole program gets killed and the user has tomanually restart the application from the checkpoint files. The doublelocal-storage checkpoint/restart protocol described in this subsectionprovides an automatic fault tolerance solution. When a failure occurs,the program can automatically detect the failure and restart from thecheckpoint. Further, this fault-tolerance protocol does not rely on anyreliable external storage (as needed in the previous method). Instead,it stores two copies of checkpoint data to two different locations (canbe memory or local disk). This double checkpointing ensures theavailability of one checkpoint in case the other is lost. The doublein-memory checkpoint/restart scheme is useful and efficient forapplications with small memory footprint at the checkpoint state. Thedouble in-disk variant stores checkpoints into local disk, thus can beuseful for applications with large memory footprint. 350c69d7ab