[Developers] [Fwd: A couple of suggestions for ADMB]

John Sibert sibert at hawaii.edu
Fri Apr 9 12:08:09 PDT 2010


Anybody understand this issue? It seems quintessentially windoze.

-------- Original Message --------
Subject: 	A couple of suggestions for ADMB
Date: 	Thu, 08 Apr 2010 13:43:22 +1100
From: 	Fabrice Bouye <FabriceB at spc.int>
To: 	John Sibert <sibert at hawaii.edu>
CC: 	Shelton Harley <SheltonH at spc.int>, Simon Hoyle <SimonH at spc.int>, 
"nickd at spc.int" <NickD at spc.int>, "Adam Langley (NZ)" 
<adam_langley at xtra.co.nz>



Hi,

I have a couple or suggestions for ADBM that I have been bickering about 
with Dave over the past couple of days and Shelton has suggested that it 
would probably be good to send that over to the ADMB group.

1) Nick and Adam have had problems in the past when running MFCL on 
Windows Vista when the program is on the C: drive and we discovered the 
exact same issues when doing some tests on Simon Hoyle’s latop. So far, 
it appears the issue is not caused by MFLC code but by ADMB which tries 
to create a temporary file (varssave.tmp) on the root of the current 
drive* to store temporary gradient (see gradstak.cpp). Of course writing 
on C: is usually forbidden on Vista (even when you are an admin) and 
probably on 7 too.

*Nick and Adam solution was to move the executable to another partition 
and to run from it because you are allowed to write on other’s 
partitions’ roots.

I do not find normal that these temp files are created in a centralized 
location especially when nowadays we may end running several instances 
of MFLC at once on the same computer. They should be created in a user 
accessible temp folder (see below - which is probably the case for the 
Linux version) and should be time stamped (+user stamped on Linux) to 
avoid collision when doing multiple runs.

Note: this apply to other temp files as well not just varssave.tmp. 
Sometime an error happens with cmpdiff.tmp on Linux.

2) The location of the files can be tweaked by using the sys variable 
ADTMP1. This location is concatenated to the temp filenames using the 
old sprintf() C function. However the temp variables described in 
fvar.hpp only reserve 61 characters for the entire filepath :

gradstak.cpp

path = getenv("ADTMP1"); // NULL if not defined

#if defined(USE_ADPVM)

adstring string_path2;

if (path) string_path2=path;

string_path2+=ad_comm::subdir;

path=(char*) string_path2;

#endif

if (path != NULL)

{

#if defined ( __SUN__) || defined ( __GNU__) || defined(linux)

if (strlen(path)>0)

{

sprintf(&var_store_file_name[0],"%s/varssave.%s",path,

ad_random_part);

sprintf(&gradfile_name2[0],"%s/gradfil2.%s", path,

ad_random_part);

}

else

{

sprintf(&var_store_file_name[0],"varssave.tmp");

sprintf(&gradfile_name2[0],"gradfil2.tmp");

}

#else

if (lastchar(path)!='\\')

{

sprintf(&gradfile_name2[0],"%s\\gradfil2.%s", path,

ad_random_part);

// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

// change it to write into cwd

//

//sprintf(&var_store_file_name[0],"%s\\varssave.%s",path,

sprintf(&var_store_file_name[0],"varssave.%s",path,

ad_random_part);

}

else

{

sprintf(&gradfile_name2[0],"%sgradfil2.%s", path,

ad_random_part);

sprintf(&var_store_file_name[0],"%svarssave.%s",path,

ad_random_part);

}

#endif

}

else

{

sprintf(&gradfile_name2[0],"gradfil2.%s",

ad_random_part);

sprintf(&var_store_file_name[0],"varssave.%s",

ad_random_part);

}

create_gradfile();

fvar.hpp

char gradfile_name[61];

char gradfile_name1[61];

char gradfile_name2[61];

char var_store_file_name[61];

So if we define ADTMP1 and specify a path too long MFCL crashes in the 
end. If we are to work in the user’s regular temporary or document space 
on most recent version versions of windows, this is not acceptable as 
these values are too small (the runs will occur in an unique temp folder 
created using the current timestamp so this add 10~20 characters to the 
pathname):

2000, XP:

Temp space: C:\Documents and Settings\<usermane>\Local Settings\Temp

Document space: C:\Documents and Settings\<usermane>\<My Documents – 
subject to i18n>\<Some subfolder – subject to i18n>

Vista & 7

Temp space: C:\users\<usermane>\AppData\local\Temp

Document space: C:\users\<usermane>\Documents\<Some subfolder – subject 
to i18n>

Linux:

Temp space: /tmp

Document space: $(HOME)/<Some subfolder> or $(HOME)/Desktop/<Some subfolder>

Note: i18n = internationalization. IE :

On 2000/XP, pathes are localized to the user’s language.

English XP:

C:\Documents and Settings\<usermane>\Desktop\

C:\Documents and Settings\<usermane>\My Documents\

French XP:

C:\Documents and Settings\<usermane>\Bureau\

C:\Documents and Settings\<usermane>\Mes Documents\

On Vista/7 the REAL paths are always in English but will appear 
localized when viewed in Explorer

English 7:

C:\users\<usermane>\Desktop\

French 7:

C:\users\<usermane>\Desktop\ (will appear as 
C:\utilisateurs\<usermane>\Bureau\ when viewed in Explorer)

----
Fabrice Bouyé (http://fabricebouye.cv.fm/)
Fisheries IT Specialist
Tel: +687 26 20 00 (Ext 411)
Oceanic Fisheries, Pacific Community
http://www.spc.int/


-- 
John Sibert
Emeritus Researcher, SOEST
University of Hawaii at Manoa

Visit the ADMB project http://admb-project.org/




More information about the Developers mailing list