/***********************************************************************
*
* ELMER, A Computational Fluid Dynamics Program.
*
* Copyright 1st April 1995 - , Center for Scientific Computing,
* Finland.
*
* All rights reserved. No part of this program may be used,
* reproduced or transmitted in any form or by any means
* without the written permission of CSC.
*
* Address: Center for Scientific Computing
* Tietotie 6, P.O. BOX 405
* 02101 Espoo, Finland
* Tel. +358 0 457 2001
* Telefax: +358 0 457 2302
* EMail: Jari.Jarvinen@csc.fi
************************************************************************/
/***********************************************************************
Program: ELMER Front
Module: ecif_timestep.cpp
Language: C++
Date: 01.10.98
Version: 1.00
Author(s): Martti Verho
Revisions:
Abstract: Implementation
************************************************************************/
#include "ecif_parameterField.h"
#include "ecif_timestep.h"
//Initialize static class variables.
int Timestep::last_id = 0;
Model* Timestep::model = NULL;
// Constructors
Timestep::Timestep()
{
}
Timestep::Timestep(int pid) : Parameter(pid)
{
if ( pid > last_id ) last_id = pid;
}
Timestep::Timestep(int pid, char* data_string, char* param_name)
{
if ( pid > last_id ) last_id = pid;
setData(pid, data_string, param_name);
}
// Timestep specific output-method for Solver input file
ostream&
Timestep::output_sif(ostream& out, short indent_size, short indent_level, SifOutputControl& soc)
{
char QM = '\"';
// Fields NOT proper for steady case
int nof_non_steady = 6;
const char* non_steady[] = {
"TIMESTEPPING_METHOD",
"NEWMARK_BETA",
"BDF_ORDER",
"TIMESTEP_SIZES",
"TIMESTEP_INTERVALS",
"OUTPUT_INTERVALS"
};
// Fields NOT proper for transient case
int nof_non_transient = 1;
const char* non_transient[] = {
"STEADY_STATE_OUTPUT_INTERVAL",
//"STEADY_STATE_MAX_ITERATIONS"
};
// Parameter type and id
if (soc.outputType) {
LibFront::output_string(out, indent_size, indent_level++, getSifName(), false);
if (soc.outputId)
out << ' ' << ID();
out << endl;
}
// Check simulation type
bool is_steady = true;
ParameterField* pf = getFieldBySifName("Simulation Type");
char** data = pf->getDataStrings();
if ( LibFront::in("transient", data[0]) ) {
is_steady = false;
}
// Output proper fields
for (short i = 0; i < nofFields; i++) {
bool is_proper = true;
ParameterField* pf = fields[i];
// Check that field exists and it should be output
if ( !pf->isActiveInstance() ||
pf->getNofDataStrings() == 0 ||
( !soc.outputAll && !pf->isSifOutputField() )
)
continue;
// Check that field is proper for the steady/transient case
char* fn1 = (char*)pf->getGuiName();
// Steady state case
if (is_steady) {
// Skip non-steady fields
for (int k = 0; k < nof_non_steady; k++) {
if ( LibFront::in(fn1, non_steady[k]) ) {
is_proper = false;
break;
}
}
// Transient case
} else {
// Skip non-transient fields
for (int k = 0; k < nof_non_transient; k++) {
if ( LibFront::in(fn1, non_transient[k]) ) {
is_proper = false;
break;
}
}
}
// If field not proper for the case
if (!is_proper)
continue;
pf->output_sif(out, indent_size, indent_level, soc.sectionName);
}
return out;
}
void
Timestep::initClass(Model* mdl)
{
Timestep::model = mdl;
Timestep::last_id = 0;
}
void
Timestep::setName(char* param_name)
{
Parameter::setName(param_name, "Timestep");
}
syntax highlighted by Code2HTML, v. 0.9.1