Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

ComputeTclBC Class Reference

#include <ComputeTclBC.h>

Inheritance diagram for ComputeTclBC:

ComputeHomePatches Compute List of all members.

Public Member Functions

 ComputeTclBC (ComputeID c)
virtual ~ComputeTclBC ()
void doWork ()

Constructor & Destructor Documentation

ComputeTclBC::ComputeTclBC ComputeID  c  ) 
 

Definition at line 25 of file ComputeTclBC.C.

References NAMD_bug(), NAMD_die(), Node::Object(), ReductionMgr::Object(), REDUCTIONS_BASIC, ResizeArray< Elem >::resize(), Node::simParameters, simParams, SimParameters::tclBCScript, and ReductionMgr::willSubmit().

00026   : ComputeHomePatches(c), ap(patchList) {
00027 
00028   reduction = ReductionMgr::Object()->willSubmit(REDUCTIONS_BASIC);
00029   SimParameters *simParams = Node::Object()->simParameters;
00030 
00031   wrapmode = WRAPMODE_PATCH;
00032 
00033   drops.resize(Node::Object()->molecule->numAtoms);
00034   cleardrops();
00035 
00036 #ifdef NAMD_TCL
00037   interp = Tcl_CreateInterp();
00038   Tcl_CreateCommand(interp, "print", Tcl_print,
00039     (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
00040   Tcl_CreateCommand(interp, "wrapmode", Tcl_wrapmode,
00041     (ClientData) this, (Tcl_CmdDeleteProc *) NULL);
00042   Tcl_CreateObjCommand(interp, "cleardrops", Tcl_cleardrops,
00043     (ClientData) this, (Tcl_CmdDeleteProc *) NULL);
00044   Tcl_CreateCommand(interp, "vecadd", proc_vecadd,
00045     (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
00046   Tcl_CreateCommand(interp, "vecsub", proc_vecsub,
00047     (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
00048   Tcl_CreateCommand(interp, "vecscale", proc_vecscale,
00049     (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
00050   Tcl_CreateCommand(interp, "getbond", proc_getbond,
00051     (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
00052   Tcl_CreateCommand(interp, "getangle", proc_getangle,
00053     (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
00054   Tcl_CreateCommand(interp, "getdihedral", proc_getdihedral,
00055     (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
00056   Tcl_CreateCommand(interp, "anglegrad", proc_anglegrad,
00057     (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
00058   Tcl_CreateCommand(interp, "dihedralgrad", proc_dihedralgrad,
00059     (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
00060 
00061   // run script to define calcforces, etc.
00062   if ( simParams->tclBCScript ) {
00063     int code = Tcl_Eval(interp,simParams->tclBCScript);
00064     const char *result = Tcl_GetStringResult(interp);
00065     if (result && *result != 0) CkPrintf("TCL: %s\n",result);
00066     if (code != TCL_OK) {
00067       const char *errorInfo = Tcl_GetVar(interp,"errorInfo",0);
00068       NAMD_die(errorInfo);
00069     }
00070   } else NAMD_bug("tclBCScript pointer was NULL");
00071 
00072   // don't want these available until calcforces call
00073   Tcl_CreateObjCommand(interp, "dropatom", Tcl_dropatom,
00074     (ClientData) this, (Tcl_CmdDeleteProc *) NULL);
00075   Tcl_CreateObjCommand(interp, "nextatom", Tcl_nextatom,
00076     (ClientData) this, (Tcl_CmdDeleteProc *) NULL);
00077   Tcl_CreateObjCommand(interp, "getcoord", Tcl_getcoord,
00078     (ClientData) this, (Tcl_CmdDeleteProc *) NULL);
00079   Tcl_CreateObjCommand(interp, "getcell", Tcl_getcell,
00080     (ClientData) this, (Tcl_CmdDeleteProc *) NULL);
00081   Tcl_CreateObjCommand(interp, "getmass", Tcl_getmass,
00082     (ClientData) this, (Tcl_CmdDeleteProc *) NULL);
00083   Tcl_CreateObjCommand(interp, "getcharge", Tcl_getcharge,
00084     (ClientData) this, (Tcl_CmdDeleteProc *) NULL);
00085   Tcl_CreateObjCommand(interp, "getid", Tcl_getid,
00086     (ClientData) this, (Tcl_CmdDeleteProc *) NULL);
00087   Tcl_CreateObjCommand(interp, "addforce", Tcl_addforce,
00088     (ClientData) this, (Tcl_CmdDeleteProc *) NULL);
00089   Tcl_CreateObjCommand(interp, "addenergy", Tcl_addenergy,
00090     (ClientData) this, (Tcl_CmdDeleteProc *) NULL);
00091 
00092 #else
00093 
00094   NAMD_die("Sorry, tclBC is not available; built without TCL.");
00095 
00096 #endif
00097 
00098 }

ComputeTclBC::~ComputeTclBC  )  [virtual]
 

Definition at line 101 of file ComputeTclBC.C.

00101                             {
00102 #ifdef NAMD_TCL
00103   Tcl_DeleteInterp(interp);
00104 #endif
00105   delete reduction;
00106 }


Member Function Documentation

void ComputeTclBC::doWork  )  [virtual]
 

Reimplemented from Compute.

Definition at line 109 of file ComputeTclBC.C.

References SubmitReduction::item(), NAMD_die(), Node::Object(), REDUCTION_BC_ENERGY, Node::simParameters, simParams, SubmitReduction::submit(), and SimParameters::tclBCArgs.

00109                           {
00110 
00111   SimParameters *simParams = Node::Object()->simParameters;
00112   lattice = &(patchList[0].p->lattice);
00113   const int step = patchList[0].p->flags.step;
00114   char cmd[128];
00115 
00116   energy = 0;
00117   n_atom = -1;  // set initial flags for iteration by nextatom
00118 
00119 #ifdef NAMD_TCL
00120   sprintf(cmd,"calcforces %d %d %s",step,hasPatchZero,simParams->tclBCArgs);
00121   int code = Tcl_Eval(interp,cmd);
00122   if (code != TCL_OK) {
00123     const char *errorInfo = Tcl_GetVar(interp,"errorInfo",0);
00124     NAMD_die(errorInfo);
00125   }
00126   if (n_atom != -2) {
00127     NAMD_die("tclBCScript failed to call nextatom until failure");
00128   }
00129 #endif
00130 
00131   reduction->item(REDUCTION_BC_ENERGY) += energy;
00132   reduction->submit();
00133 
00134 }


The documentation for this class was generated from the following files:
Generated on Fri Jul 4 04:07:18 2008 for NAMD by  doxygen 1.3.9.1