コード例 #1
0
void
PorousFlow2PhasePS::initQpStatefulProperties()
{
  PorousFlowVariableBase::initQpStatefulProperties();

   buildQpPPSS();
}
コード例 #2
0
void
PorousFlow1PhaseP::computeQpProperties()
{
  // size stuff correctly and prepare the derivative matrices with zeroes
  PorousFlowVariableBase::computeQpProperties();

  buildQpPPSS();
  const Real dseff = dEffectiveSaturation_dP(_porepressure_var[_qp]);

  if (!_nodal_material)
  {
    (*_gradp_qp)[_qp][0] = _gradp_qp_var[_qp];
    (*_grads_qp)[_qp][0] = dseff * _gradp_qp_var[_qp];
  }

  // _porepressure is only dependent on _porepressure, and its derivative is 1
  if (_dictator.isPorousFlowVariable(_porepressure_varnum))
  {
    // _porepressure is a PorousFlow variable
    _dporepressure_dvar[_qp][0][_p_var_num] = 1.0;
    _dsaturation_dvar[_qp][0][_p_var_num] = dseff;
    if (!_nodal_material)
    {
      (*_dgradp_qp_dgradv)[_qp][0][_p_var_num] = 1.0;
      (*_dgrads_qp_dgradv)[_qp][0][_p_var_num] = dseff;
      (*_dgrads_qp_dv)[_qp][0][_p_var_num] =
          d2EffectiveSaturation_dP2(_porepressure_var[_qp]) * _gradp_qp_var[_qp];
    }
  }
}
コード例 #3
0
void
PorousFlow2PhasePS::computeQpProperties()
{
  PorousFlowVariableBase::computeQpProperties();

  buildQpPPSS();

  // _porepressure depends on _phase0_porepressure, and its derivative is 1
  if (_dictator.isPorousFlowVariable(_phase0_porepressure_varnum))
  {
    // _phase0_porepressure is a PorousFlow variable
    for (unsigned phase = 0; phase < _num_phases; ++phase)
    {
      _dporepressure_nodal_dvar[_qp][phase][_pvar] = 1.0;
      _dporepressure_qp_dvar[_qp][phase][_pvar] = 1.0;
      _dgradp_qp_dgradv[_qp][phase][_pvar] = 1.0;
    }
  }

  /// Calculate the capillary pressure and derivatives wrt saturation
  const Real dpc_nodal = dCapillaryPressure_dS(_phase1_saturation_nodal[_qp]);
  const Real dpc_qp = dCapillaryPressure_dS(_phase1_saturation_qp[_qp]);
  const Real d2pc_qp = d2CapillaryPressure_dS2(_phase1_saturation_qp[_qp]);

  // _saturation is only dependent on _phase1_saturation, and its derivative is +/- 1
  if (_dictator.isPorousFlowVariable(_phase1_saturation_varnum))
  {
    // _phase1_saturation is a porflow variable
    _dsaturation_nodal_dvar[_qp][0][_svar] = -1.0;
    _dsaturation_nodal_dvar[_qp][1][_svar] = 1.0;
    _dsaturation_qp_dvar[_qp][0][_svar] = -1.0;
    _dsaturation_qp_dvar[_qp][1][_svar] = 1.0;
    _dgrads_qp_dgradv[_qp][0][_svar] = -1.0;
    _dgrads_qp_dgradv[_qp][1][_svar] = 1.0;

    /// _phase1_porepressure depends on saturation through the capillary pressure function
    _dporepressure_nodal_dvar[_qp][1][_svar] = - dpc_nodal;
    _dporepressure_qp_dvar[_qp][1][_svar] = - dpc_qp;
    _dgradp_qp_dv[_qp][1][_svar] = - d2pc_qp * _grads_qp[_qp][1];
    _dgradp_qp_dgradv[_qp][1][_svar] = - dpc_qp;
  }

  // _temperature is only dependent on temperature, and its derivative is = 1
  if (_dictator.isPorousFlowVariable(_temperature_varnum))
  {
    // _phase0_temperature is a PorousFlow variable
    for (unsigned int phase = 0; phase < _num_phases; ++phase)
    {
      _dtemperature_nodal_dvar[_qp][phase][_tvar] = 1.0;
      _dtemperature_qp_dvar[_qp][phase][_tvar] = 1.0;
    }
  }
}
コード例 #4
0
ファイル: PorousFlow2PhasePP.C プロジェクト: Biyss/moose
void
PorousFlow2PhasePP::initQpStatefulProperties()
{
  PorousFlowVariableBase::initQpStatefulProperties();

  buildQpPPSS();

  /*
   * the derivatives of porepressure with respect to porepressure
   * remain fixed (at unity) throughout the simulation
   */
  // prepare the derivative matrix with zeroes
  for (unsigned phase = 0; phase < _num_phases; ++phase)
  {
    _dporepressure_nodal_dvar[_qp][phase].assign(_num_pf_vars, 0.0);
    _dporepressure_qp_dvar[_qp][phase].assign(_num_pf_vars, 0.0);
    _dgradp_qp_dgradv[_qp][phase].assign(_num_pf_vars, 0.0);
    _dgradp_qp_dv[_qp][phase].assign(_num_pf_vars, RealGradient());
  }

  if (_dictator_UO.isPorousFlowVariable(_phase0_porepressure_varnum))
  {
    // _phase0_porepressure is a PorousFlow variable
    _dporepressure_nodal_dvar[_qp][0][_p0var] = 1.0;
    _dporepressure_qp_dvar[_qp][0][_p0var] = 1.0;
    _dgradp_qp_dgradv[_qp][0][_p0var] = 1.0;
  }
  if (_dictator_UO.isPorousFlowVariable(_phase1_porepressure_varnum))
  {
    // _phase1_porepressure is a PorousFlow variable
    _dporepressure_nodal_dvar[_qp][1][_p1var] = 1.0;
    _dporepressure_qp_dvar[_qp][1][_p1var] = 1.0;
    _dgradp_qp_dgradv[_qp][1][_p1var] = 1.0;
  }

  // prepare the derivative matrix with zeroes
  for (unsigned phase = 0; phase < _num_phases; ++phase)
  {
    _dtemperature_nodal_dvar[_qp][phase].assign(_num_pf_vars, 0.0);
    _dtemperature_qp_dvar[_qp][phase].assign(_num_pf_vars, 0.0);
  }

  // _temperature is only dependent on _temperature, and its derivative is = 1
  if (_dictator_UO.isPorousFlowVariable(_temperature_varnum))
  {
    // _phase0_temperature is a porflow variable
    _dtemperature_nodal_dvar[_qp][0][_tvar] = 1.0;
    _dtemperature_nodal_dvar[_qp][1][_tvar] = 1.0;
    _dtemperature_qp_dvar[_qp][0][_tvar] = 1.0;
    _dtemperature_qp_dvar[_qp][1][_tvar] = 1.0;
  }
}
コード例 #5
0
ファイル: PorousFlow2PhasePS.C プロジェクト: harterj/moose
void
PorousFlow2PhasePS::computeQpProperties()
{
  // size stuff correctly and prepare the derivative matrices with zeroes
  PorousFlowVariableBase::computeQpProperties();

  const Real seff = buildQpPPSS();
  const Real dpc = dCapillaryPressure_dS(seff) * _dseff_ds;

  if (!_nodal_material)
  {
    (*_grads_qp)[_qp][0] = -_phase1_grads_qp[_qp];
    (*_grads_qp)[_qp][1] = _phase1_grads_qp[_qp];
    (*_gradp_qp)[_qp][0] = _phase0_gradp_qp[_qp];
    (*_gradp_qp)[_qp][1] = _phase0_gradp_qp[_qp] + dpc * (*_grads_qp)[_qp][1];
  }


  // _porepressure depends on _phase0_porepressure, and its derivative is 1
  if (_dictator.isPorousFlowVariable(_phase0_porepressure_varnum))
  {
    // _phase0_porepressure is a PorousFlow variable
    for (unsigned phase = 0; phase < _num_phases; ++phase)
    {
      _dporepressure_dvar[_qp][phase][_pvar] = 1.0;
      if (!_nodal_material)
        (*_dgradp_qp_dgradv)[_qp][phase][_pvar] = 1.0;
    }
  }

  // _saturation is only dependent on _phase1_saturation, and its derivative is +/- 1
  if (_dictator.isPorousFlowVariable(_phase1_saturation_varnum))
  {
    // _phase1_saturation is a porflow variable
    // _phase1_porepressure depends on saturation through the capillary pressure function
    _dsaturation_dvar[_qp][0][_svar] = -1.0;
    _dsaturation_dvar[_qp][1][_svar] = 1.0;
    _dporepressure_dvar[_qp][1][_svar] = dpc;

    if (!_nodal_material)
    {
      (*_dgrads_qp_dgradv)[_qp][0][_svar] = -1.0;
      (*_dgrads_qp_dgradv)[_qp][1][_svar] = 1.0;
      const Real d2pc_qp = d2CapillaryPressure_dS2(seff) * _dseff_ds * _dseff_ds;
      (*_dgradp_qp_dv)[_qp][1][_svar] = d2pc_qp * (*_grads_qp)[_qp][1];
      (*_dgradp_qp_dgradv)[_qp][1][_svar] = dpc;
    }
  }
}
コード例 #6
0
ファイル: PorousFlow2PhasePP.C プロジェクト: Biyss/moose
void
PorousFlow2PhasePP::computeQpProperties()
{
  buildQpPPSS();

  // prepare the derivative matrix with zeroes
  for (unsigned phase = 0; phase < _num_phases; ++phase)
  {
    _dsaturation_nodal_dvar[_qp][phase].assign(_num_pf_vars, 0.0);
    _dsaturation_qp_dvar[_qp][phase].assign(_num_pf_vars, 0.0);
    _dgrads_qp_dgradv[_qp][phase].assign(_num_pf_vars, 0.0);
    _dgrads_qp_dv[_qp][phase].assign(_num_pf_vars, RealGradient());
  }

  const Real pc_nodal = _phase0_porepressure_nodal[_qp] - _phase1_porepressure_nodal[_qp]; // this is <= 0
  const Real dseff_nodal = dEffectiveSaturation_dP(pc_nodal); // d(seff)/d(pc)
  const Real pc_qp = _phase0_porepressure_qp[_qp] - _phase1_porepressure_qp[_qp]; // this is <= 0
  const Real dseff_qp = dEffectiveSaturation_dP(pc_qp); // d(seff_qp)/d(pc_qp)
  const Real d2seff_qp = d2EffectiveSaturation_dP2(pc_qp); // d^2(seff_qp)/d(pc_qp)^2

  if (_dictator_UO.isPorousFlowVariable(_phase0_porepressure_varnum))
  {
    _dsaturation_nodal_dvar[_qp][0][_p0var] = dseff_nodal;
    _dsaturation_qp_dvar[_qp][0][_p0var] = dseff_qp;
    _dgrads_qp_dgradv[_qp][0][_p0var] = dseff_qp;
    _dgrads_qp_dv[_qp][0][_p0var] = d2seff_qp * (_phase0_gradp_qp[_qp] - _phase1_gradp_qp[_qp]);

    _dsaturation_nodal_dvar[_qp][1][_p0var] = - dseff_nodal;
    _dsaturation_qp_dvar[_qp][1][_p0var] = - dseff_qp;
    _dgrads_qp_dgradv[_qp][1][_p0var] = - dseff_qp;
    _dgrads_qp_dv[_qp][1][_p0var] = - d2seff_qp * (_phase0_gradp_qp[_qp] - _phase1_gradp_qp[_qp]);
  }

  if (_dictator_UO.isPorousFlowVariable(_phase1_porepressure_varnum))
  {
    _dsaturation_nodal_dvar[_qp][0][_p1var] = - dseff_nodal;
    _dsaturation_qp_dvar[_qp][0][_p1var] = - dseff_qp;
    _dgrads_qp_dgradv[_qp][0][_p1var] = - dseff_qp;
    _dgrads_qp_dv[_qp][0][_p1var] = - d2seff_qp * (_phase0_gradp_qp[_qp] - _phase1_gradp_qp[_qp]);

    _dsaturation_nodal_dvar[_qp][1][_p1var] = dseff_nodal;
    _dsaturation_qp_dvar[_qp][1][_p1var] = dseff_qp;
    _dgrads_qp_dgradv[_qp][1][_p1var] = dseff_qp;
    _dgrads_qp_dv[_qp][1][_p1var] = d2seff_qp * (_phase0_gradp_qp[_qp] - _phase1_gradp_qp[_qp]);
  }
}
コード例 #7
0
void
PorousFlow1PhaseFullySaturated::computeQpProperties()
{
  // Size vectors correctly and prepare the derivative matrices with zeroes
  PorousFlowVariableBase::computeQpProperties();

  buildQpPPSS();

  if (!_nodal_material)
    (*_gradp_qp)[_qp][0] = _gradp_qp_var[_qp];

  // _porepressure is only dependent on _porepressure, and its derivative is 1
  if (_dictator.isPorousFlowVariable(_porepressure_varnum))
  {
    // _porepressure is a PorousFlow variable
    _dporepressure_dvar[_qp][0][_p_var_num] = 1.0;
    if (!_nodal_material)
      (*_dgradp_qp_dgradv)[_qp][0][_p_var_num] = 1.0;
  }
}
コード例 #8
0
void
PorousFlow2PhasePP::computeQpProperties()
{
  // size stuff correctly and prepare the derivative matrices with zeroes
  PorousFlowVariableBase::computeQpProperties();

  const Real pc = buildQpPPSS();
  const Real dseff = dEffectiveSaturation_dP(pc); // d(seff)/d(pc)

  if (!_nodal_material)
  {
    (*_gradp_qp)[_qp][0] = _phase0_gradp_qp[_qp];
    (*_gradp_qp)[_qp][1] = _phase1_gradp_qp[_qp];
    (*_grads_qp)[_qp][0] = dseff * ((*_gradp_qp)[_qp][0] - (*_gradp_qp)[_qp][1]);
    (*_grads_qp)[_qp][1] = -(*_grads_qp)[_qp][0];
  }

  // the derivatives of porepressure with respect to porepressure
  // remain fixed (at unity) throughout the simulation
  if (_dictator.isPorousFlowVariable(_phase0_porepressure_varnum))
  {
    _dporepressure_dvar[_qp][0][_p0var] = 1.0;
    if (!_nodal_material)
      (*_dgradp_qp_dgradv)[_qp][0][_p0var] = 1.0;
  }
  if (_dictator.isPorousFlowVariable(_phase1_porepressure_varnum))
  {
    _dporepressure_dvar[_qp][1][_p1var] = 1.0;
    if (!_nodal_material)
      (*_dgradp_qp_dgradv)[_qp][1][_p1var] = 1.0;
  }

  if (_dictator.isPorousFlowVariable(_phase0_porepressure_varnum))
  {
    _dsaturation_dvar[_qp][0][_p0var] = dseff;
    _dsaturation_dvar[_qp][1][_p0var] = -dseff;
  }
  if (_dictator.isPorousFlowVariable(_phase1_porepressure_varnum))
  {
    _dsaturation_dvar[_qp][0][_p1var] = -dseff;
    _dsaturation_dvar[_qp][1][_p1var] = dseff;
  }

  if (!_nodal_material)
  {
    const Real d2seff_qp = d2EffectiveSaturation_dP2(pc); // d^2(seff_qp)/d(pc_qp)^2
    if (_dictator.isPorousFlowVariable(_phase0_porepressure_varnum))
    {
      (*_dgrads_qp_dgradv)[_qp][0][_p0var] = dseff;
      (*_dgrads_qp_dv)[_qp][0][_p0var] =
          d2seff_qp * (_phase0_gradp_qp[_qp] - _phase1_gradp_qp[_qp]);
      (*_dgrads_qp_dgradv)[_qp][1][_p0var] = -dseff;
      (*_dgrads_qp_dv)[_qp][1][_p0var] =
          -d2seff_qp * (_phase0_gradp_qp[_qp] - _phase1_gradp_qp[_qp]);
    }
    if (_dictator.isPorousFlowVariable(_phase1_porepressure_varnum))
    {
      (*_dgrads_qp_dgradv)[_qp][0][_p1var] = -dseff;
      (*_dgrads_qp_dv)[_qp][0][_p1var] =
          -d2seff_qp * (_phase0_gradp_qp[_qp] - _phase1_gradp_qp[_qp]);
      (*_dgrads_qp_dgradv)[_qp][1][_p1var] = dseff;
      (*_dgrads_qp_dv)[_qp][1][_p1var] =
          d2seff_qp * (_phase0_gradp_qp[_qp] - _phase1_gradp_qp[_qp]);
    }
  }
}
コード例 #9
0
void
PorousFlow1PhaseFullySaturated::initQpStatefulProperties()
{
  PorousFlowVariableBase::initQpStatefulProperties();
  buildQpPPSS();
}