Skip to content

Commit 9ec0e83

Browse files
committed
fixed jacobian accumulation and frozen coeffient jacobains
1 parent 65a9484 commit 9ec0e83

File tree

1 file changed

+28
-23
lines changed

1 file changed

+28
-23
lines changed

SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ class CAvgGrad_TurbSA final : public CAvgGrad_Scalar<FlowIndices> {
9090
/*--- For Jacobians -> Use of TSL approx. to compute derivatives of the gradients ---*/
9191
su2double diffusion_coefficient = nu_e/sigma - cb2_sigma*nu_c;
9292
if (implicit) {
93-
Jacobian_i[0][0] = diffusion_coefficient * -proj_vector_ij; //exact: ((1+cb2)*0.5 * Proj_Mean_GradScalarVar[0]-nu_e*proj_vector_ij)/sigma - cb2_sigma * (Proj_Mean_GradScalarVar[0] - ScalarVar_i[0] * proj_vector_ij);
94-
Jacobian_j[0][0] = diffusion_coefficient * proj_vector_ij; //exact: ((1+cb2)*0.5 * Proj_Mean_GradScalarVar[0]+nu_e*proj_vector_ij)/sigma - cb2_sigma * ScalarVar_i[0] * proj_vector_ij;
93+
Jacobian_i[0][0] = 0.5 * (diffusion_coefficient * -proj_vector_ij); //exact: ((1+cb2)*0.5 * Proj_Mean_GradScalarVar[0]-nu_e*proj_vector_ij)/sigma - cb2_sigma * (Proj_Mean_GradScalarVar[0] - ScalarVar_i[0] * proj_vector_ij);
94+
Jacobian_j[0][0] = 0.5 * (diffusion_coefficient * proj_vector_ij); //exact: ((1+cb2)*0.5 * Proj_Mean_GradScalarVar[0]+nu_e*proj_vector_ij)/sigma - cb2_sigma * ScalarVar_i[0] * proj_vector_ij;
9595
}
9696
}
9797

@@ -184,38 +184,40 @@ class CAvgGrad_TurbSA_Neg final : public CAvgGrad_Scalar<FlowIndices> {
184184
su2double term_2 = cb2*nu_tilde_i*fn_i* Proj_Mean_GradScalarVar[0]/sigma;
185185
Flux[0] = term_1 - term_2;
186186

187-
/*--- Buffer to store the values (prints values of all nodes per iteration) DELTE LATER
188-
unsigned long iter = config->GetMultizone_Problem() ? config->GetOuterIter() : config->GetInnerIter();
189-
std::ofstream URF_log_file
187+
/*--- Buffer to store the values (prints values of all nodes per iteration) DELTE LATER */
190188

191-
URF_log_file.open("diffusion_term.dat", std::ios::app);
192-
if (!URF_log_file.is_open()) {
193-
std::cerr << "Unable to open under_relaxation_buffer.dat" << std::endl;
194-
}
189+
// unsigned long iter = config->GetMultizone_Problem() ? config->GetOuterIter() : config->GetInnerIter();
190+
// std::ofstream URF_log_file;
195191

196-
if (URF_log_file.is_open())
197-
URF_log_file << "Iteration: " << iter << std::endl;
198-
URF_log_file << "Term 1: " << term_1/Proj_Mean_GradScalarVar[0] << std::endl;
199-
URF_log_file << "Term 2: " << term_2/Proj_Mean_GradScalarVar[0] << std::endl;
200-
URF_log_file << "Total: " << (term_1 - term_2)/Proj_Mean_GradScalarVar[0] << std::endl;
201-
URF_log_file << std::endl;
202-
}
192+
// URF_log_file.open("diffusion_term.dat", std::ios::app);
193+
// if (!URF_log_file.is_open()) {
194+
// std::cerr << "Unable to open under_relaxation_buffer.dat" << std::endl;
195+
// }
196+
197+
198+
// if (URF_log_file.is_open()) {
199+
// URF_log_file << "Iteration: " << iter << std::endl;
200+
// URF_log_file << "Term 1: " << (nu_ij + (1 + cb2)*nu_tilde_ij*fn_i)/sigma << std::endl;
201+
// URF_log_file << "Term 2: " << cb2*nu_tilde_i*fn_i/sigma << std::endl;
202+
// URF_log_file << "total: " << (nu_ij + (1 + cb2)*nu_tilde_ij*fn_i)/sigma - cb2*nu_tilde_i*fn_i/sigma << std::endl;
203+
// URF_log_file << std::endl;
204+
// }
203205

204-
if (URF_log_file.is_open()) {
205-
URF_log_file.close();
206-
} ---*/
206+
// if (URF_log_file.is_open()) {
207+
// URF_log_file.close();
208+
// }
207209

208210
/*--- For Jacobians -> Use of TSL approx. to compute derivatives of the gradients
209211
* To form the exact jacobians, use the chain and product rules.
210-
* The diffusion coefficient following Diskin's approach is: A = (nu_ij + (1+cb2)*nut_tilde_ij -cb2*nu_tilde_i)*fn_i = B*fni
212+
* The diffusion coefficient following Diskin's approach is: A = (nu_ij + (1+cb2)*nut_tilde_ij -cb2*nu_tilde_i)*fn_i = B*fni + nu_ij
211213
* dA/dnut_i = dB/dnut_i *fni + dfni/dnut_i * B
212214
* dA/dnut_j = dB/dnut_j *fni + dfni/dnut_j * B
213215
* Flux = A*Proj_Mean_GradScalarVar[0]
214216
* dFlux_dnuti = dA/dnut_i*Proj_Mean_GradScalarVar[0] + A*proj_vector_ij
215217
* dFlux_dnutj = dA/dnut_j*Proj_Mean_GradScalarVar[0] - A*proj_vector_ij
216218
* ---*/
217219

218-
su2double B = (nu_ij + (1 + cb2)*nu_tilde_ij) - cb2*nu_tilde_i;
220+
su2double B = (1 + cb2)*nu_tilde_ij - cb2*nu_tilde_i;
219221

220222
su2double dfni_dnut_i = -1 * 6.0*(cb2-1)*cn1*pow(nu_i+nu_j,3.0) * pow(((cb2-1)*nu_tilde_i-(cb2+1)*nu_tilde_j),2.0) / pow((pow(((cb2+1)*nu_tilde_i - (cb2+1)*nu_tilde_j),3.0) + cn1*pow((nu_i+nu_j),3.0)),2.0);
221223
su2double dfni_dnut_j = 6.0*(cb2-1)*cn1*pow(nu_i+nu_j,3.0) * pow(((cb2+1)*nu_tilde_j-(cb2-1)*nu_tilde_i),2.0) / pow((pow(((cb2+1)*nu_tilde_j - (cb2-1)*nu_tilde_i),3.0) - cn1*pow((nu_i+nu_j),3.0)),2.0);
@@ -226,9 +228,12 @@ class CAvgGrad_TurbSA_Neg final : public CAvgGrad_Scalar<FlowIndices> {
226228
su2double dA_dnut_i = (dB_dnut_i *fn_i + dfni_dnut_i * B)/sigma;
227229
su2double dA_dnut_j = (dB_dnut_j *fn_i + dfni_dnut_j * B)/sigma;
228230

231+
/* Assuming forzen diffusion coefficients:*/
232+
su2double diffusion_coefficient = (nu_ij + (1 + cb2)*nu_tilde_ij*fn_i) /sigma - cb2*nu_tilde_i*fn_i/sigma;
233+
229234
if (implicit) {
230-
Jacobian_i[0][0] = dA_dnut_i*Proj_Mean_GradScalarVar[0] + B*fn_i*proj_vector_ij/sigma;
231-
Jacobian_j[0][0] = dA_dnut_j*Proj_Mean_GradScalarVar[0] - B*fn_i*proj_vector_ij/sigma;
235+
Jacobian_i[0][0] = 0.5 * diffusion_coefficient * -proj_vector_ij; //exact: 0.5* (dA_dnut_i*Proj_Mean_GradScalarVar[0] + B*fn_i*proj_vector_ij/sigma);
236+
Jacobian_j[0][0] = 0.5 * diffusion_coefficient * proj_vector_ij; //exact: 0.5* (dA_dnut_j*Proj_Mean_GradScalarVar[0] - B*fn_i*proj_vector_ij/sigma);
232237
}
233238
}
234239

0 commit comments

Comments
 (0)