Hi,

On Apr 10, 2007, at 9:11 PM, Justin M. Shorb wrote:

Greetings,

I have been running a modified version of gromacs 3.3 and would like to run two kernel loops: one which is 330 and one which is 300. In the src/gmxlib/nonbonded/nb_kerneltype.h file it strictly says to use wrapper routines that are included in the gmx_nonbonded.h file, which I cannot find. I assume that in switching versions the filename has changed, and perhaps was meant to point me to nonbonded.c ? Given that nb_kerneltype.h says that it is part of the gromacs 4.0 version, I would not be surprised if a version misnomer occured. However, I would be more than happy if you can point me to where this file should be located.

In a similar light, is it possible to build and call two separate kernels within one run of gromacs, or would the tabulated files end up on top of each other? The nb_kerneltype.h seems to say you can use a build routine (probably setup_kernels() in nonbonded.c, but I want to make sure I'm not missing the gmx_nonbonded.h file somewhere).

Certainly. Each neighborlist is attached to a specific loop, but you can have as many neighborlists as you want. Your best option is likely to create the (different) neighborlists with the nonbonded setups they should have, and then call do_nonbonded() as declared in gromacs-x.y.z/include/nonbonded.h (sorry, the gmx_ prefix was lost when backported).


My plan currently is to use setup_kernels() to explicitly setup both kernels needed in the nb_kernel_list (which I believe is the list of kernels to be setup ranging from 1 to eNB_NBKERNEL_NR) and then simply force the kernel 300 to be created as well as the generic propagation kernel (typically 330). Then it should be a matter of choosing a different nrnb_ind index to run the alternate kernel in the do_nonbonded() routine.


As you might already have found out, setup_kernels() is a really trivial routine that sets kernel pointers based primarily on your architecture (SSE/SSE2/Altivec/ia64/etc.), and assigns NULL to the solvent-optimized kernel pointers if that type of optimization isn't present.

You can still call all kernels, although they might be generic (though optimized) C code if no acceleration has been implemented.

Are there double counting things that should be taken into account? And more importantly, is there an efficient subroutine written for such a matter that is being overlooked (hidden in a *.h file somewhere)?

There should be a routine in src/mdlib/ns.c that initalizes the kernel index based on the interactions in a particular neighborlist.

Cheers,

Erik


_______________________________________________
gmx-users mailing list    [email protected]
http://www.gromacs.org/mailman/listinfo/gmx-users
Please search the archive at http://www.gromacs.org/search before posting!
Please don't post (un)subscribe requests to the list. Use the 
www interface or send it to [EMAIL PROTECTED]
Can't post? Read http://www.gromacs.org/mailing_lists/users.php

Reply via email to