#include <ComputeTclBC.h>
Inheritance diagram for ComputeTclBC:

Public Member Functions | |
| ComputeTclBC (ComputeID c) | |
| virtual | ~ComputeTclBC () |
| void | doWork () |
|
|
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 }
|
|
|
Definition at line 101 of file ComputeTclBC.C. 00101 {
00102 #ifdef NAMD_TCL
00103 Tcl_DeleteInterp(interp);
00104 #endif
00105 delete reduction;
00106 }
|
|
|
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 }
|
1.3.9.1