void NormalModeMinimizer::initialize(ProtoMolApp* app){
    STSIntegrator::initialize(app);
    initializeForces();
    myPreviousNormalMode  = dynamic_cast<NormalModeUtilities*>(myPreviousIntegrator);
    //Check if using complement of prev integrator, then copy all integrator paramiters
    if(firstMode == -1 && numMode == -1){
        firstMode = myPreviousNormalMode->firstMode; numMode = myPreviousNormalMode->numMode;
        myGamma = myPreviousNormalMode->myGamma; mySeed = myPreviousNormalMode->mySeed; myTemp = myPreviousNormalMode->myTemp;
    }
    //NM initialization if OK
    NormalModeUtilities::initialize((int)app->positions.size(), app,
				    myForces, COMPLIMENT_FORCES); //last for complimentary forces, no gen noise
    //
    //initialize minimizer noise vars
    randStp = 0.0;
    //***********************************************************	
    //diagnostics
    avItrs = 0;		//average number of minimizer iterations/force calcs
    avMinForceCalc = 0;
    numSteps = 0;	//total steps

    //Set up minimum limit
    app->eigenInfo.myMinimumLimit = minLim;
    //
    gaussRandCoord1.zero(-1); //zero vector for use as random force
  }
Пример #2
0
  void NormalModeMori::initialize(ProtoMolApp* app){
    MTSIntegrator::initialize(app);
    //
    //point to bottom integrator, for average force
    myBottomNormalMode  = dynamic_cast<NormalModeUtilities*>(bottom());
    //check valid eigenvectors
    //NM initialization if OK
    NormalModeUtilities::initialize((int)app->positions.size(), app, myForces, NO_NM_FLAGS); //last for non-complimentary forces
    //
    //do first force calculation, and remove non sub-space part
    app->energies.clear();	//Need this or initial error, due to inner integrator energy?
    initializeForces();
    //
    //take initial C velocites from system and remove non-subspace part
    if(*Q != NULL) subspaceVelocity(&app->velocities, &app->velocities);
    //	
    //####diagnostics
    if(modeOutput != ""){
        //save initial positions
        ex0 = new Vector3DBlock;
        *ex0 = app->positions;
        ofstream myFile;
        myFile.open(modeOutput.c_str(),ofstream::out);
        //close file
        myFile.close();
    }

  }
  void NormalModeQuadratic::initialize( ProtoMolApp* app )
  {
    STSIntegrator::initialize( app );
    initializeForces();

    //if previous NM then it is diagonalize, so find pointer
    if ( top() != this ) {
      myPreviousNormalMode = dynamic_cast<NormalModeUtilities*>( myPreviousIntegrator );
    } else {
      myPreviousNormalMode = 0;
    }
    //NM initialization if OK //last for complimentary forces, no gen noise
    NormalModeUtilities::initialize( ( int )app->positions.size(), app, myForces, COMPLIMENT_FORCES );

    //modes
    cPos = new double[_3N];
    std::fill( cPos, cPos + _3N, 0.0 );

    //total steps
    numSteps = 0;
    currMode = firstMode - 1;
    if ( stepModes ) {
      app->eigenInfo.currentMode = firstMode;
    }

    //save initial positions
    ex0 = new Vector3DBlock;
    *ex0 = app->positions;

    total_time = 0.0;
  }
Пример #4
0
  void NormalModeLangLf::initialize(ProtoMolApp *app){
    MTSIntegrator::initialize(app);
    //check valid eigenvectors
    //NM initialization if OK
    int nm_flags = NO_NM_FLAGS;
    if(genCompNoise) nm_flags |= GEN_COMP_NOISE;
    NormalModeUtilities::initialize((int)app->positions.size(), app, myForces, nm_flags); //last int for no complimentary forces or gen noise: GEN_COMP_NOISE
    //
    //do first force calculation, and remove non sub-space part
    app->energies.clear();	//Need this or initial error, due to inner integrator energy?
    initializeForces();
    //
    //take initial C velocites from system and remove non-subspace part
    if(*Q != NULL) subspaceVelocity(&app->velocities, &app->velocities);
    //

  }
Пример #5
0
  void NormalModeRelax::initialize(ProtoMolApp* app){
    MTSIntegrator::initialize(app);
    //test not topmost integrator
    if(top() == this) report << error << "NormalModeRelax cannot be top integrator."<<endr;
    //
    initializeForces();
    //
    myPreviousNormalMode  = dynamic_cast<NormalModeUtilities*>(myPreviousIntegrator);
    //check valid eigenvectors
    firstMode = myPreviousNormalMode->firstMode; numMode = myPreviousNormalMode->numMode;
    //NM initialization if OK
    NormalModeUtilities::initialize((int)app->positions.size(), app, myForces, COMPLIMENT_FORCES); //last for complimentary forces
    //
    app->energies.clear();	//Need this or initial error, due to inner integrator energy?
    //
    //diagnostics
    avItrs = 0;		//average number of minimizer iterations/force calcs
    avMinForceCalc = 0;
    numSteps = 0;	//total steps

  }
Пример #6
0
	void NormalModeOpenMM::initialize( ProtoMolApp *app ) {
		report << plain << "OpenMM NML Vector information: Vector number " << app->eigenInfo.myNumEigenvectors << ", length " << app->eigenInfo.myEigenvectorLength << "." << endr;
		
		//NM initialization
		NormalModeUtilities::initialize( ( int )app->positions.size(), app,
										 myForces, NO_NM_FLAGS );

		//Set up minimum limit
		app->eigenInfo.myMinimumLimit = mMinimizationLimit;

		//Set number of eigenvectors in use
		app->eigenInfo.myNumUsedEigenvectors = _rfM;

		// Setup LTMD Parameters
		mLTMDParameters.blockDelta = mBlockDelta * Constant::ANGSTROM_NM;
		mLTMDParameters.sDelta = mSDelta * Constant::ANGSTROM_NM;
		mLTMDParameters.bdof = mBlockDOF;
		mLTMDParameters.res_per_block = mResiduesPerBlock;
		mLTMDParameters.modes = mModes;
		mLTMDParameters.rediagFreq = mRediagonalizationFrequency;
		mLTMDParameters.minLimit = mMinimizationLimit * Constant::KCAL_KJ;

		if( mProtomolDiagonalize ) {
			mLTMDParameters.ShouldProtoMolDiagonalize = true;
			std::cout << "Block Diagonalization: ProtoMol" << std::endl;
		} else {
			mLTMDParameters.ShouldProtoMolDiagonalize = false;
			std::cout << "Block Diagonalization: OpenMM" << std::endl;
		}

		if( shoudForceRediagOnMinFail ) {
			mLTMDParameters.ShouldForceRediagOnMinFail = true;
			std::cout << "Failure Rediagonalization: True" << std::endl;
		} else {
			mLTMDParameters.ShouldForceRediagOnMinFail = false;
			std::cout << "Failure Rediagonalization: False" << std::endl;
		}
		
		if( mRediagOnQuadratic ){
			mLTMDParameters.ShouldForceRediagOnQuadratic = true;
			std::cout << "Force Rediagonalization on Quadratic Minimization: True" << std::endl;
		}else{
			mLTMDParameters.ShouldForceRediagOnQuadratic = false;
			std::cout << "Force Rediagonalization on Quadratic Minimization: False" << std::endl;
		}
		
		if( !mProtomolDiagonalize ){
			switch( mBlockPlatform ){
				case 0: // Reference
					std::cout << "OpenMM Block Diagonalization Platform: Reference" << std::endl;
					mLTMDParameters.BlockDiagonalizePlatform = OpenMM::LTMD::Preference::Reference;
					break;
				case 1:	// OpenCL
					std::cout << "OpenMM Block Diagonalization Platform: OpenCL" << std::endl;
					mLTMDParameters.BlockDiagonalizePlatform = OpenMM::LTMD::Preference::OpenCL;
					break;
				case 2: // CUDA
					std::cout << "OpenMM Block Diagonalization Platform: CUDA" << std::endl;
					mLTMDParameters.BlockDiagonalizePlatform = OpenMM::LTMD::Preference::CUDA;
					break;
			}
		}
		
		int current_res = app->topology->atoms[0].residue_seq;
		int res_size = 0;
		for( int i = 0; i < app->topology->atoms.size(); i++ ) {
			if( app->topology->atoms[i].residue_seq != current_res ) {
				mLTMDParameters.residue_sizes.push_back( res_size );
				current_res = app->topology->atoms[i].residue_seq;
				res_size = 0;
			}
			res_size++;
		}
		mLTMDParameters.residue_sizes.push_back( res_size );
		
		if( mLTMDParameters.ShouldProtoMolDiagonalize ){
			//app->eigenInfo.OpenMMMinimize = true;
		}
		
		//initialize base
		OpenMMIntegrator::initialize( app );

		initializeForces();
	}