Sprint session 20 march 2008
A second sprintsession was held on March 20th, 2008, in the meeting room Innovation (how appropriate) of the new institute on Delta Technology Deltares.
Agenda
The meeting started with the following agenda:
...
Everyone is obviously free to join and contribute to each of these topics or to raise other items that are not on the agenda yet. It looks like it will be a very productive day. McTools is now at revision 759. Free dinner for the person to hit 1000!
Script demonstrating useful McTools applications (by Pieter and Kees)
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
clear all;fclose all;close all;clc cd f:\mctools\mc_toolbox; mcsettings addpath(fileparts(mfilename('fullpath'))); % edit getCalls getIsCalledBy getInputSize getInputVariables roundoff double2evalstr getFileName getVolume writemessage('init'); %% getInputVariables / getInputSize clear;fclose all;close all;clc quickstart internet d = readTransectData('Jarkus Data','Noord-Holland','03000','2006'); xInitial = d.xe(~isnan(d.ze)); %keep only the points with non-NaN z-values zInitial = d.ze(~isnan(d.ze)); %keep only the points with non-NaN z-values dbstop in getVolume at 42 dbstopcurrent [Volume, result, Boundaries] = getVolume(xInitial, zInitial); dbclear in getVolume at 42 dbstopcurrent writemessage(3,'Example of getInputVariables completed'); %% roundoff clear;fclose all;close all;clc X = 87643.7852; for n = -2:2:4 Xround = roundoff(X, n); disp(num2str(Xround)) end %% getdefaults dbstop in roundoff at 40 Xround = roundoff(X); dbclear in roundoff at 40 %% double2evalstr clear;fclose all;close all;clc dbstop in double2evalstr_test at 9 run double2evalstr_test dbstopcurrent dbstop getHsig_t_test at 30 dbstop getHsig_t_test at 41 run getHsig_t_test dbstopcurrent writemessage(4,'Example of double2evalstr_test completed'); %% getFileName clear;fclose all;close all;clc directory = 'D:\heijer\My Documents\Work\TU Delft\PhD project\Prob2B\ParametricStudy\DenHeijer2008\Case_10'; extension = 'txt'; exception = 'DP_Case_10_maxRD=068.7.txt'; fileid = []; dbstopcurrent fname = getFileName(directory, extension, exception, fileid) writemessage(5,'Example of getFileName completed'); %% writemessage writemessage(7,'Staring example of writemessage'); dbstopcurrent SavedMessages = writemessage('get') %% IsCalls fun = 'getDuneErosion_VTV2006'; directory = 'D:\heijer\My Documents\Program Files\McTools\mc_toolbox\mc_applications\mc_ucit\getDuneErosion\'; IsCalls = getCalls(fun, directory); IsCalls = getCalls(fun, directory, 'quiet'); dbstopcurrent writemessage(1,'Example of IsCalls completed'); %% IsCalledBy clear;fclose all;close all;clc fun = 'getVolume'; directory = 'D:\heijer\My Documents\Program Files\McTools\mc_toolbox\mc_applications\mc_ucit\getDuneErosion\'; [IsCalledBy, Line, Column] = getIsCalledBy(fun, directory); [IsCalledBy, Line, Column] = getIsCalledBy(fun, directory, 'quiet'); dbstopcurrent writemessage(2,'Example of IsCalledBy completed'); %% FD_GUI_figure cd( directory); run FD_GUI_figure dbstopcurrent writemessage(6,'Example of FD_GUI completed'); clc %% guidisp guidisp('set','FD_GUI_message_panel'); guidisp('test message panel'); guidisp('set',[]); guidisp('Test Command line'); dbstopcurrent writemessage(7,'Example of guidisp completed'); %% dbstate dbstop in getDuneErosion_test at 6 dbstop in getDuneErosion_VTV2006 at 12 getDuneErosion_test('VTV2006',1); dbstopcurrent writemessage(7,'Example of dbstate completed'); %% dbstopcurrent cd('D:\heijer\My Documents\Work\Deltares\Projects\McTools'); dbstopcurrent; pause(0.1); %% writemessage SavedMessages = writemessage('get') dbclear all |
Interfacing with Fortran
To use fortran functions from matlab there are a few options:
- the loadlibrary method
- the mexfile method
- the swig method
The loadlibrary method
Prerequisites:
.so/.dll -> the dynamic library with the prebuild fortran code
.h -> the header file describing the functions and arguments in c notation
...
This method is described in detail at the mathworks site
The mexfile method
This method uses the mex files (matlab specific dll's) to communicate between matlab and fortran. You make fortran (or c) aware of the internals of matlab. You wrap your method with the matlab function calling method (lhs, rhs, etc...) .
Matlab Fortran
See a simple example.
Code Block | ||||
---|---|---|---|---|
| ||||
C C CHECK FOR PROPER NUMBER OF ARGUMENTS C IF (NRHS .NE. 2) THEN CALL MEXERRMSGTXT('YPRIME requires two input arguments') ELSEIF (NLHS .GT. 1) THEN CALL MEXERRMSGTXT('YPRIME requires one output argument') ENDIF C C CHECK THE DIMENSIONS OF Y. IT CAN BE 4 X 1 OR 1 X 4. C M = MXGETM(PRHS(2)) N = MXGETN(PRHS(2)) C IF ((MAX(M,N) .NE. 4) .OR. (MIN(M,N) .NE. 1)) THEN CALL MEXERRMSGTXT('YPRIME requires that Y be a 4 x 1 vector') ENDIF |
Using SWIG.
SWIG is an open source program to use native c/c++/fortran routines from dynamic and modern languages. This is used in tcl/python/c#/R and many other languages. There has been some work to extend this method to matlab. This however doesnt seem to be completely implemented.
SWIG & Matlab
SWIG->octave
SWIG -> Matlab
Items that came up during the day
migrate Refference Guide generation to Build Server
- use http://www.artefact.tk/software/matlab/m2html/
- generate set of HTML pages nightly
- provide access to generated pages (upload to external Apache web server) or:
- install external TeamCity for all external projects and then embed them as
...
- (optional) add serach engine for HTML pages
merge ucit.wldelft.nl into public.wldelft.nl
- !! possible only after documentation generation will be migrated to build server and published on web-site
P: with copy of UCIT files
- try to mount it using WebDAV on unix - check if it is used
BUG in repository: svn co http://svn.wldelft.nl/repos/mctools/trunk/ mctools gives:
No Format |
---|
... A mctools\UCIT_Actions\ModelActions\Support\template\hwgxytot.def A mctools\UCIT_Actions\ModelActions\Support\template\default.sed A mctools\UCIT_Actions\ModelActions\Support\template\ym6.sco A mctools\UCIT_Actions\ModelActions\Support\template\run.bat.new svn: REPORT request failed on '/repos/mctools/!svn/vcc/default' svn: REPORT of '/repos/mctools/!svn/vcc/default': 200 OK (http://svn.wldelft.nl) |