Пример #1
0
 //---------------------------------------------------------
 //  init_filter
 //    sets up the time filtering operations in all objects
 //---------------------------------------------------------
 void ATC_CouplingEnergy::init_filter()
 {
   
   TimeIntegrator::TimeIntegrationType timeIntegrationType = timeIntegrators_[TEMPERATURE]->time_integration_type();
   
   
   
   
   if (timeFilterManager_.end_equilibrate()) { 
     if (timeIntegrationType==TimeIntegrator::GEAR) {
       if (equilibriumStart_) {
         
         
         
         if (atomicRegulator_->regulator_target()==AtomicRegulator::DYNAMICS) { // based on FE equation
           DENS_MAT vdotflamMat(-2.*(nodalAtomicFields_[TEMPERATURE].quantity())); // note 2 is for 1/2 vdotflam addition
           atomicRegulator_->reset_lambda_contribution(vdotflamMat);
         }
         else { // based on MD temperature equation
           DENS_MAT vdotflamMat(-1.*(nodalAtomicFields_[TEMPERATURE].quantity()));
           atomicRegulator_->reset_lambda_contribution(vdotflamMat);
         }
       }
     }
     else if (timeIntegrationType==TimeIntegrator::FRACTIONAL_STEP) {
       if (equilibriumStart_) {
         DENS_MAT powerMat(-1.*(nodalAtomicFields_[TEMPERATURE].quantity()));
         atomicRegulator_->reset_lambda_contribution(powerMat);
       }
     }
   }
 }
Пример #2
0
  void ATC_TransferThermal::init_filter()
  {
    // NOTE assume total filtered time derivatives are zero
    ATC_Transfer::init_filter();

    if (integrationType_==TimeIntegrator::VERLET) {
      // initialize restricted fields
      // NOTE: comment in to initialize fieldRateNdOld_ to current time deriviative
      // current assumption is that it is zero
      //DenseMatrix<double> atomicPower(nLocal_,1);
      //compute_atomic_power(atomicPower,
      //                   lammpsInterface_->vatom(),
      //                   lammpsInterface_->fatom());
      //restrict(atomicPower,fieldRateNdOld_[TEMPERATURE]);
      //fieldRateNdOld *= 2.;
      
      DENS_MAT atomicKineticEnergy(nLocal_,1);
      DENS_MAT nodalAtomicTemperature(nNodes_,1);
      compute_atomic_temperature(atomicKineticEnergy,
                                 lammpsInterface_->vatom());
      restrict(atomicKineticEnergy, nodalAtomicTemperature);
      nodalAtomicTemperature *= 2.;
      fieldNdOld_[TEMPERATURE] = nodalAtomicTemperature;
    }
    
    if (timeFilterManager_.end_equilibrate()) { // set up correct initial lambda power to enforce initial temperature rate of 0
      if (integrationType_==TimeIntegrator::VERLET) {
        if (equilibriumStart_) {
          if (thermostat_.get_thermostat_type()==Thermostat::FLUX) { // based on FE equation
            DENS_MAT vdotflamMat(-2.*fieldRateNdFiltered_[TEMPERATURE]); // note 2 is for 1/2 vdotflam addition
            thermostat_.reset_lambda_power(vdotflamMat);
          }
          else { // based on MD temperature equation
            DENS_MAT vdotflamMat(-1.*fieldRateNdFiltered_[TEMPERATURE]);
            thermostat_.reset_lambda_power(vdotflamMat);
          }
        }
      }
    }
    else { // set up space for filtered atomic power
      // should set up all data structures common to equilibration and filtering,
      // specifically filtered atomic power
      if (integrationType_==TimeIntegrator::FRACTIONAL_STEP) {
        dot_atomicTemp.reset(nNodes_,1);
        dot_atomicTempOld.reset(nNodes_,1);
        dot_dot_atomicTemp.reset(nNodes_,1);
        dot_dot_atomicTempOld.reset(nNodes_,1);
      }
    }
  }