![]()
Note
Assumes you created the project with bocca create
project demo --language=f90.
Edit the evaluate method in the implementation file (also known as ``the impl'') that Bocca has generated for you (by invoking Babel ). Use the bocca edit -i to go directly to each method.
$
bocca edit -i Function evaluate
The editor opens up in the place where the implementation code for evaluate must be put. You see a default implementation generated by Babel for all user methods: the throwing of an exception which says the method is not yet implemented.
recursive subroutine demo_Function_evaluate_mi(self, x, retval, exception)
use sidl
use sidl_NotImplementedException
use sidl_BaseInterface
use sidl_RuntimeException
use demo_Function
use demo_Function_impl
! DO-NOT-DELETE splicer.begin(demo.Function.evaluate.use)
! Insert-Code-Here {demo.Function.evaluate.use} (use statements)
! DO-NOT-DELETE splicer.end(demo.Function.evaluate.use)
implicit none
type(demo_Function_t) :: self
! in
real (kind=sidl_double) :: x
! in
real (kind=sidl_double) :: retval
! out
type(sidl_BaseInterface_t) :: exception
! out
! DO-NOT-DELETE splicer.begin(demo.Function.evaluate)
! Insert-Code-Here {demo.Function.evaluate} (evaluate method)
!
! This method has not been implemented
!
! DO-DELETE-WHEN-IMPLEMENTING exception.begin(demo.Function.evaluate)
type(sidl_BaseInterface_t) :: throwaway
type(sidl_NotImplementedException_t) :: notImpl
call new(notImpl, exception)
call setNote(notImpl, 'Not Implemented', exception)
call cast(notImpl, exception,throwaway)
call deleteRef(notImpl,throwaway)
return
! DO-DELETE-WHEN-IMPLEMENTING exception.end(demo.Function.evaluate)
! DO-NOT-DELETE splicer.end(demo.Function.evaluate)
end subroutine demo_Function_evaluate_mi
As the comment suggests, this method is ``not implemented'', but some
code has been inserted by Babel to make sure an exception is thrown
to inform the user if this method is called by mistake. Delete this
exception code and substitute an implementation for the
PiFunction (i.e., the integral from 0 to 1 of
4/(1 + x2)
is an approximation of
).
! DO-NOT-DELETE splicer.begin(demo.Function.evaluate)
retval = 4.0 / (1.0 + x * x)
! DO-NOT-DELETE splicer.end(demo.Function.evaluate)
Now in the same file just above the evaluate method, find the second method for the FunctionPort init method:
! DO-NOT-DELETE splicer.begin(demo.Function.init)
! Do nothing
! DO-NOT-DELETE splicer.end(demo.Function.init)
We don't have any initialization in this simple example, so we just eliminate the code that throws the exception when the method is executed.
After quitting the editor the state of the source code tree is updated if there are any dependencies on the edited implementation. Usually there are no dependencies on the implementation file, so Bocca does very little after you exit the editor and all you see is the information from the edit command about what file was edited:
/home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo/components/demo.Function/demo_Function_Impl.F90
Similarly edit the march method in the Integrator with
$
bocca edit -i Integrator march
recursive subroutine demo_Integrator_march_mi(self, lowBound, upBound, count, &
retval, exception)
use sidl
use sidl_NotImplementedException
use sidl_BaseInterface
use sidl_RuntimeException
use demo_Integrator
use demo_Integrator_impl
! DO-NOT-DELETE splicer.begin(demo.Integrator.march.use)
! Insert-Code-Here {demo.Integrator.march.use} (use statements)
! DO-NOT-DELETE splicer.end(demo.Integrator.march.use)
implicit none
type(demo_Integrator_t) :: self
! in
real (kind=sidl_double) :: lowBound
! in
real (kind=sidl_double) :: upBound
! in
integer (kind=sidl_int) :: count
! in
real (kind=sidl_double) :: retval
! out
type(sidl_BaseInterface_t) :: exception
! out
! DO-NOT-DELETE splicer.begin(demo.Integrator.march)
! Insert-Code-Here {demo.Integrator.march} (march method)
!
! This method has not been implemented
!
! DO-DELETE-WHEN-IMPLEMENTING exception.begin(demo.Integrator.march)
type(sidl_BaseInterface_t) :: throwaway
type(sidl_NotImplementedException_t) :: notImpl
call new(notImpl, exception)
call setNote(notImpl, 'Not Implemented', exception)
call cast(notImpl, exception,throwaway)
call deleteRef(notImpl,throwaway)
return
! DO-DELETE-WHEN-IMPLEMENTING exception.end(demo.Integrator.march)
! DO-NOT-DELETE splicer.end(demo.Integrator.march)
end subroutine demo_Integrator_march_mi
Again remove this boilerplate exception code and insert an implementation of the Trapezoid rule for integration that uses the FunctionPort :
! DO-NOT-DELETE splicer.begin(demo.Integrator.march.use)
! the port types we need go here. use gov_cca_Port use demo_FunctionPort
! DO-NOT-DELETE splicer.end(demo.Integrator.march.use)
! DO-NOT-DELETE splicer.begin(demo.Integrator.march)
! User's local declarations. We follow the pattern generated for us in Driver.go()
type(gov_cca_Port_t) :: port
type(gov_cca_Services_t) :: services
type(SIDL_BaseInterface_t) :: throwaway
type(SIDL_BaseInterface_t) :: dumex
type(demo_Integrator_wrap) :: dp
logical dr_port ! if dr_X true, the deleteRef(X) is needed before return.
type(demo_FunctionPort_t) :: odeRHS__p
! odeRHS__p is non-null if specific uses port obtained.
logical odeRHS_fetched
! odeRHS_fetched true if releaseport is needed for this port.
! a small message catalog for exception reporting
character (LEN=*) errMsg00
character (LEN=*) errMsg0
character (LEN=*) errMsg1
character (LEN=*) errMsg2
character (LEN=*) errMsg3
character (LEN=*) errMsg4
parameter(errMsg00= &
'NULL d_services pointer in demo.Integrator.march()')
parameter(errMsg0= &
'demo.Integrator: Error go() getPort(odeRHS) failed.')
parameter(errMsg1= &
'demo.Integrator: Error casting odeRHS to FunctionPort')
parameter(errMsg2= &
'demo.Integrator: Error in deleteRef(port) while getting odeRHS')
parameter(errMsg3= &
'demo.Integrator: Error calling releasePort(odeRHS).')
parameter(errMsg4= &
'demo.Integrator: Error in deleteRef for port odeRHS.')
! numerical method variable, other than the call arguments:
real (kind=sidl_double) :: h, fvalueleft, fvalueright, sum, left, right
integer i
BOCCA_EXTERNAL
! not crashing if something fails .eq. good bookkeeping and exception handling.
! start with initialization
call set_null( odeRHS__p)
odeRHS_fetched = .false.
call set_null(services)
call set_null(port)
call set_null(throwaway)
call set_null(dumex)
dr_port = .false.
call demo_Integrator__get_data_m(self,dp);
services = dp%d_private_data%d_services
retval = -4.0
if (is_null(services) ) then
call BOCCA_SIDL_THROW_F90(exception, errMsg00)
endif
! Use a demo.FunctionPort port with port name odeRHS
call getPort(services,"odeRHS", port, exception)
BOCCA_SIDL_CHECK_F90(exception, errMsg0)
odeRHS_fetched = .true.
! even if the next cast fails, must releasePort per odeRHS_fetched.
call cast(port, odeRHS__p, exception)
BOCCA_SIDL_CHECK_F90(exception, errMsg1)
! done with the generic port pointer. drop it.
call deleteRef(port, exception)
call set_null(port)
BOCCA_SIDL_CHECK_F90(exception, errMsg2)
!! here's the numerical work
! the trapezoidal rule
h = (upBound - lowBound) / count
sum = 0.0
fvalueleft = 0.0
fvalueright = 0.0
do i = 1,count
left = lowBound + (i - 1) * h
call evaluate(odeRHS__p, left, fvalueleft, exception)
BOCCA_SIDL_CHECK_F90(exception, 'error calculating fvalueleft')
right = lowBound + i * h
call evaluate(odeRHS__p, right, fvalueright, exception)
BOCCA_SIDL_CHECK_F90(exception, 'error calculating fvalueright')
sum = sum + fvalueleft + fvalueright
enddo
retval = h/2.0 * sum;
!! the numerical work is done.
BOCCAEXIT continue ! target point for normal and error cleanup.
if (not_null(port)) then
call deleteRef(port,throwaway)
call checkException(self, throwaway, 'cleanup port error', .false., dumex)
call set_null(port)
endif
! release odeRHS
if (odeRHS_fetched) then
odeRHS_fetched = .false.
call releasePort(services, 'odeRHS', throwaway)
call checkException(self, throwaway, errMsg3, .false., dumex)
if ( not_null(odeRHS__p) ) then
call deleteRef(odeRHS__p, throwaway)
call checkException(self, throwaway, errMsg4, .false., dumex)
call set_null(odeRHS__p)
endif
endif
! DO-NOT-DELETE splicer.end(demo.Integrator.march)
After quitting the editor the state of the source code tree is updated if there are any dependencies on the edited implementation. Usually there are no dependencies on the implementation file, so Bocca does very little after you exit the editor and all you see is the information from the edit command about what file was edited:
/home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo/components/demo.Integrator/demo_Integrator_Impl.F90
Finally for the Driver component we have to implement the GoPort details to get things going. Bocca will take you to the generated method, which looks like this:
$
bocca edit -i Driver go
recursive subroutine demo_Driver_go_mi(self, retval, exception)
use sidl
use sidl_NotImplementedException
use sidl_BaseInterface
use sidl_RuntimeException
use demo_Driver
use demo_Driver_impl
! DO-NOT-DELETE splicer.begin(demo.Driver.go.use)
! Bocca generated code. bocca.protected.begin(demo.Driver.go.use)
use gov_cca_Port
use demo_Integration
! Bocca generated code. bocca.protected.end(demo.Driver.go.use)
! DO-NOT-DELETE splicer.end(demo.Driver.go.use)
implicit none
type(demo_Driver_t) :: self
! in
integer (kind=sidl_int) :: retval
! out
type(sidl_BaseInterface_t) :: exception
! out
! DO-NOT-DELETE splicer.begin(demo.Driver.go)
! Insert-User-Declarations-Here
! Bocca generated code. bocca.protected.begin(demo.Driver.go:boccaGoProlog)
integer bocca_status
! The user's code should set bocca_status 0 if computation proceeded ok.
! The user's code should set bocca_status -1 if computation failed but might
! succeed on another call to go(), e.g. wheh a required port is not yet connected.
! The user's code should set bocca_status -2 if the computation failed and can
! never succeed in a future call.
! The users's code should NOT use return in this function;
! Exceptions that are not caught in user code will be converted to status -2.
!
type(gov_cca_Port_t) :: port
type(gov_cca_Services_t) :: services
type(SIDL_BaseInterface_t) :: throwaway
type(SIDL_BaseInterface_t) :: dumex
type(demo_Driver_wrap) :: dp
logical dr_port ! if dr_X true, the deleteRef(X) is needed before return.
type(demo_Integration_t) :: integrate__p ! non-null if specific uses port obtained.
logical integrate_fetched ! true if releaseport is needed for this port.
character (LEN=*) errMsg0_integrate
character (LEN=*) errMsg1_integrate
character (LEN=*) errMsg2_integrate
character (LEN=*) errMsg3_integrate
character (LEN=*) errMsg4_integrate
parameter(errMsg0_integrate= &
'demo.Driver: Error go() getPort(integrate) failed.')
parameter(errMsg1_integrate= &
'demo.Driver: Error casting gov.cca.Port integrate to type demo.Integration')
parameter(errMsg2_integrate= &
'demo.Driver: Error in deleteRef(port) while getting integrate')
parameter(errMsg3_integrate= &
'demo.Driver: Error calling releasePort(integrate). Continuing.')
parameter(errMsg4_integrate = &
'demo.Driver: Error in deleteRef for port integrate. Continuing.')
BOCCA_EXTERNAL
! not crashing if something fails requires good bookkeeping and exception handling.
call set_null(services)
call set_null(port)
call set_null(throwaway)
call set_null(dumex)
dr_port = .false.
bocca_status = 0
call demo_Driver__get_data_m(self,dp);
services = dp%d_private_data%d_services
if (is_null(services) ) then
call BOCCA_SIDL_THROW_F90(exception, 'NULL d_services pointer in demo.Driver.go()')
endif
! Use a demo.Integration port with port name integrate
call getPort(services,"integrate", port, throwaway)
if ( not_null(throwaway) ) then
call set_null(port)
call checkException(self, throwaway, errMsg0_integrate, .false., dumex)
! we will continue with port null (never successfully assigned) and set a flag.
endif
call set_null( integrate__p)
integrate_fetched = .false.
if ( not_null(port)) then
integrate_fetched = .true. ! even if the next cast fails, must releasePort.
call cast(port, integrate__p, exception)
BOCCA_SIDL_CHECK_F90(exception, errMsg1_integrate)
call deleteRef(port, exception)
call set_null(port)
BOCCA_SIDL_CHECK_F90(exception, errMsg2_integrate)
endif
! Bocca generated code. bocca.protected.end(demo.Driver.go:boccaGoProlog)
! When this block is rewritten by the user, we will not change it.
! All port instances should be rechecked for NULL before calling in user code.
! Not all ports need be connected in arbitrary use.
! The port instance names used in registerUsesPort appear as local variable
! names here with the suffix __p added.
! BEGIN REMOVE ME BLOCK
#ifdef _BOCCA_STDERR
write(*,*) 'USER FORGOT TO FILL IN THEIR FUNCTION demo.Driver.go.'
#endif
! END REMOVE ME BLOCK
! If unknown exceptions in the user code are tolerable and restart is ok,
! set bocca_status -1 instead.
! -2 means the component is so confused that it and probably the application
! should be destroyed.
!
BOCCAEXIT continue ! target point for normal and error cleanup. do not delete.
! Bocca generated code. bocca.protected.begin(demo.Driver.go:boccaGoEpilog)
if (not_null(port)) then
call deleteRef(port,throwaway)
call checkException(self, throwaway, 'cleanup port error', .false., dumex)
call set_null(port)
endif
! release integrate
if (integrate_fetched) then
integrate_fetched = .false.
call releasePort(services, 'integrate', throwaway)
call checkException(self, throwaway, errMsg3_integrate, .false., dumex)
if ( not_null(integrate__p) ) then
call deleteRef(integrate__p, throwaway)
call checkException(self, throwaway, errMsg4_integrate, .false., dumex)
call set_null(integrate__p)
endif
endif
! Bocca generated code. bocca.protected.end(demo.Driver.go:boccaGoEpilog)
! Insert-User-Exception-Cleanup-Here
retval = bocca_status
!
! This method has not been implemented
!
! DO-NOT-DELETE splicer.end(demo.Driver.go)
end subroutine demo_Driver_go_mi
Find the REMOVE block within the go method implementation, delete it, and insert the numerical logic needed to use the integrator.IntegratorPort port. Any required local variables should be inserted just before the boccaGoProlog protected block.
The go subroutine will be called by the framework when the component's run button (the name of this particular GoPort instance) is pushed in the GUI. Bocca generates the code to the Integration that the Driver is connected to. We just have to use it to compute the integral and return the proper value for bocca_status.
! DO-NOT-DELETE splicer.begin(demo.Driver.go) ! Insert-User-Declarations-Here
! local variables for integration real (kind=sidl_double) :: lowBound real (kind=sidl_double) :: upBound integer (kind=sidl_int) :: count real (kind=sidl_double) :: value
! Bocca generated code. bocca.protected.begin(demo.Driver.go:boccaGoProlog)
integer bocca_status
! The user's code should set bocca_status 0 if computation proceeded ok.
! The user's code should set bocca_status -1 if computation failed but might
! succeed on another call to go(), e.g. wheh a required port is not yet connected.
! The user's code should set bocca_status -2 if the computation failed and can
! never succeed in a future call.
! The users's code should NOT use return in this function;
! Exceptions that are not caught in user code will be converted to status -2.
!
type(gov_cca_Port_t) :: port
type(gov_cca_Services_t) :: services
type(SIDL_BaseInterface_t) :: throwaway
type(SIDL_BaseInterface_t) :: dumex
type(demo_Driver_wrap) :: dp
logical dr_port ! if dr_X true, the deleteRef(X) is needed before return.
type(demo_Integration_t) :: integrate__p ! non-null if specific uses port obtained.
logical integrate_fetched ! true if releaseport is needed for this port.
character (LEN=*) errMsg0_integrate
character (LEN=*) errMsg1_integrate
character (LEN=*) errMsg2_integrate
character (LEN=*) errMsg3_integrate
character (LEN=*) errMsg4_integrate
parameter(errMsg0_integrate= &
'demo.Driver: Error go() getPort(integrate) failed.')
parameter(errMsg1_integrate= &
'demo.Driver: Error casting gov.cca.Port integrate to type demo.Integration')
parameter(errMsg2_integrate= &
'demo.Driver: Error in deleteRef(port) while getting integrate')
parameter(errMsg3_integrate= &
'demo.Driver: Error calling releasePort(integrate). Continuing.')
parameter(errMsg4_integrate = &
'demo.Driver: Error in deleteRef for port integrate. Continuing.')
BOCCA_EXTERNAL
! not crashing if something fails requires good bookkeeping and exception handling.
call set_null(services)
call set_null(port)
call set_null(throwaway)
call set_null(dumex)
dr_port = .false.
bocca_status = 0
call demo_Driver__get_data_m(self,dp);
services = dp%d_private_data%d_services
if (is_null(services) ) then
call BOCCA_SIDL_THROW_F90(exception, 'NULL d_services pointer in demo.Driver.go()')
endif
! Use a demo.Integration port with port name integrate
call getPort(services,"integrate", port, throwaway)
if ( not_null(throwaway) ) then
call set_null(port)
call checkException(self, throwaway, errMsg0_integrate, .false., dumex)
! we will continue with port null (never successfully assigned) and set a flag.
endif
call set_null( integrate__p)
integrate_fetched = .false.
if ( not_null(port)) then
integrate_fetched = .true. ! even if the next cast fails, must releasePort.
call cast(port, integrate__p, exception)
BOCCA_SIDL_CHECK_F90(exception, errMsg1_integrate)
call deleteRef(port, exception)
call set_null(port)
BOCCA_SIDL_CHECK_F90(exception, errMsg2_integrate)
endif
! Bocca generated code. bocca.protected.end(demo.Driver.go:boccaGoProlog)
! When this block is rewritten by the user, we will not change it.
! All port instances should be rechecked for NULL before calling in user code.
! Not all ports need be connected in arbitrary use.
! The port instance names used in registerUsesPort appear as local variable
! names here with the suffix __p added.
! Initialize local variables
count = 100000
lowBound = 0.0
upBound = 1.0
if (not_null(integrate__p)) then
value = -1.0 ! nonsense number to confirm it is set
! operate on the port. if successful, set the status to 0 for ok.
bocca_status = -2
call march(integrate__p, lowBound, upBound, count, value, exception)
! jump to BOCCAEXIT if an error.
BOCCA_SIDL_CHECK_F90(exception,'Driver:go: problem calling integrate')
write(*,*) 'Value = ', value
bocca_status = 0
else
bocca_status = -1 ; ! integratorPort is not connected.
write(*,*) 'Driver: integrate port not connected. connect and try again'
endif
! If unknown exceptions in the user code are tolerable and restart is ok,
! set bocca_status -1 instead.
! -2 means the component is so confused that it and probably the application
! should be destroyed.
!
BOCCAEXIT continue ! target point for normal and error cleanup. do not delete.
! Bocca generated code. bocca.protected.begin(demo.Driver.go:boccaGoEpilog)
if (not_null(port)) then
call deleteRef(port,throwaway)
call checkException(self, throwaway, 'cleanup port error', .false., dumex)
call set_null(port)
endif
! release integrate
if (integrate_fetched) then
integrate_fetched = .false.
call releasePort(services, 'integrate', throwaway)
call checkException(self, throwaway, errMsg3_integrate, .false., dumex)
if ( not_null(integrate__p) ) then
call deleteRef(integrate__p, throwaway)
call checkException(self, throwaway, errMsg4_integrate, .false., dumex)
call set_null(integrate__p)
endif
endif
! Bocca generated code. bocca.protected.end(demo.Driver.go:boccaGoEpilog)
! Insert-User-Exception-Cleanup-Here
retval = bocca_status
! DO-NOT-DELETE splicer.end(demo.Driver.go)
After quitting the editor the state of the source code tree is updated if there are any dependencies on the edited implementation. Usually there are no dependencies on the implementation file, so Bocca does very little after you exit the editor and all you see is the information from the edit command about what file was edited.
/home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo/components/demo.Driver/demo_Driver_Impl.F90
Now remake your project tree to finish the components:
$
make
make[1]: Entering directory `/home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo' # ======================================================================= # No SIDL files in external/sidl, skipping build for external # ======================================================================= # ======================================================================= # Building in ports/, languages: f90 # ======================================================================= ## Building ports... # ======================================================================= # Building in components/clients/, languages: f90 # ======================================================================= ## Building clients... # ======================================================================= # Building in components/, languages: f90 # ======================================================================= [s] Building class/component demo.Driver: [s] creating class/component library: libdemo.Driver.la ... [s] finished libtooling: components/demo.Driver/libdemo.Driver.la ... [s] building /home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo/install/share/cca/demo/demo.Driver_depl.xml ... [s] creating Ccaffeine test script (components/tests/instantiation.gen.rc)... [s] Building class/component demo.Function: [s] creating class/component library: libdemo.Function.la ... [s] finished libtooling: components/demo.Function/libdemo.Function.la ... [s] building /home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo/install/share/cca/demo/demo.Function_depl.xml ... [s] creating Ccaffeine test script (components/tests/instantiation.gen.rc)... [s] Building class/component demo.Integrator: [s] creating class/component library: libdemo.Integrator.la ... [s] finished libtooling: components/demo.Integrator/libdemo.Integrator.la ... [s] building /home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo/install/share/cca/demo/demo.Integrator_depl.xml ... [s] creating Ccaffeine test script (components/tests/instantiation.gen.rc)... [s] Building class/component demo.emptyComponent: doing nothing -- library is up-to-date. Build summary: SUCCESS building demo.Driver SUCCESS building demo.Function SUCCESS building demo.Integrator ### To test instantiation of successfully built components, run 'make check' ### ################ Finished building everything ################# ####### You can run some simple tests with 'make check' ####### make[1]: Leaving directory `/home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo'
It is good practice to do a make check at this point:
$
make check
make[1]: Entering directory `/home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo' make --no-print-directory --no-builtin-rules -C components check ### Test library load and instantiation for the following languages: f90 Running instantiation tests only ### LDPATH=/home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo/install/lib:/usr/local/ACTS/cca/lib:/usr/local/ACTS/cca/lib:/usr/local/packages/java-1.6.0_14/jre/lib/i386/client:/usr/local/packages/java-1.6.0_14/jre/lib/i386/server::/usr/local/packages/java-1.6.0_14/jre/lib/i386::/usr/local/ACTS/cca/lib:/usr/local/ACTS/CCAtk/components/TauPerformance-1.7.3:/tau/i386_linux/lib/bindings-mpi-python-pdt:/usr/local/packages/ptoolsrte-0.31/packages/python-2.5.2/lib/python2.5:/usr/local/packages/ptoolsrte-0.31/packages/python-2.5.2/lib/python2.5/lib-dynload:/usr/local/packages/ptoolsrte-0.31/packages/python-2.5.2/lib/python2.5/site-packages:/usr/local/packages/ptoolsrte-0.31/packages/wx-2.8.9.1/lib:/usr/local/packages/ptoolsrte-0.31/packages/Mesa-7.2/lib64:/usr/local/packages/ptoolsrte-0.31/packages/boost/lib:/usr/local/packages/ptoolsrte-0.31/packages/python-2.5.2/lib:/usr/local/packages/openmpi/lib:/usr/local/packages/papi/lib:/usr/local/packages/vampirtrace/lib:/usr/local/packages/vampir-server/lib:/usr/local/packages/perfsuite/lib:/usr/local/packages/tau/i386_linux/lib:/usr/local/packages/dyninstAPI/i386-unknown-linux2.4/lib:/usr/local/packages/periscope/lib ### PYTHONPATH=/usr/local/ACTS/cca/lib/python2.5/site-packages:/home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo/install/lib/python2.5/site-packages:/usr/local/ACTS/cca/lib/cca-spec-babel-0_8_6-babel-1.4.0/python2.5/site-packages:/tau/i386_linux/lib/bindings-mpi-python-pdt:/usr/local/packages/ptoolsrte-0.31/packages/python-2.5.2/lib/python2.5:/usr/local/packages/ptoolsrte-0.31/packages/python-2.5.2/lib/python2.5/lib-dynload:/usr/local/packages/ptoolsrte-0.31/packages/python-2.5.2/lib/python2.5/site-packages:/usr/local/packages/ptoolsrte-0.31/packages/wx-2.8.9.1/lib:/usr/local/packages/ptoolsrte-0.31/packages/Mesa-7.2/lib64:/usr/local/packages/ptoolsrte-0.31/packages/boost/lib: ### CLASSPATH=/usr/local/ACTS/cca/lib/sidl-1.4.0.jar:/usr/local/ACTS/cca/lib/sidlstub_1.4.0.jar:/usr/local/ACTS/cca/lib/cca-spec.jar:/home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo/install/lib/java: ### Test script: /home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo/components/tests/instantiation.gen.rc Log file: /home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo/components/tests/instantiation.gen.rc.log SUCCESS: ==> Instantiation tests passed for all built components (see /home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo/components/tests/instantiation.gen.rc.log). make --no-print-directory --no-builtin-rules check-user make[1]: Leaving directory `/home/livetau/workshop-acts/cca/WORK/tutorial-src/doc/scratch/f90/demo'
You should now be able to instantiate these components, assemble them into an application, and run the application, following the same procedures as in Section 2, and get a result that's reasonably close to pi .
2010-08-11