/* Copyright (C) 2000-2004 Code contributed by Greg Collecutt, Joseph Hope and Paul Cochrane This file is part of xmds. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* $Id: xmdsintegraterk4ex.cc,v 1.13 2004/09/15 06:01:58 joehope Exp $ */ /*! @file xmdsintegraterk4ex.cc @brief Integrate element parsing classes and methods; fourth order Runge-Kutta in the explicit picture More detailed explanation... */ #include #include #include #include // ****************************************************************************** // ****************************************************************************** // xmdsIntegrateRK4EX public // ****************************************************************************** // ****************************************************************************** extern bool debugFlag; long nxmdsIntegrateRK4EXs=0; //!< The number of integrate RK4EX objects // ****************************************************************************** xmdsIntegrateRK4EX::xmdsIntegrateRK4EX( const xmdsSimulation *const yourSimulation, const bool& yourVerboseMode) : xmdsIntegrate(yourSimulation,yourVerboseMode), xmdsIntegrateEX(yourSimulation,yourVerboseMode), xmdsIntegrateRK4(yourSimulation,yourVerboseMode) { if(debugFlag) { nxmdsIntegrateRK4EXs++; printf("xmdsIntegrateRK4EX::xmdsIntegrateRK4EX\n"); printf("nxmdsIntegrateRK4EXs=%li\n",nxmdsIntegrateRK4EXs); } }; // ****************************************************************************** xmdsIntegrateRK4EX::~xmdsIntegrateRK4EX() { if(debugFlag) { nxmdsIntegrateRK4EXs--; printf("xmdsIntegrateRK4EX::~xmdsIntegrateRK4EX\n"); printf("nxmdsIntegrateRK4EXs=%li\n",nxmdsIntegrateRK4EXs); } }; // ****************************************************************************** void xmdsIntegrateRK4EX::processElement( const Element *const yourElement) { if(debugFlag) { printf("xmdsIntegrateRK4EX::processElement\n"); } if(verbose()) { printf("Processing integrate RK4EX element ...\n"); } xmdsIntegrate::processElement(yourElement); xmdsIntegrateRK4::processElement(yourElement); xmdsIntegrateEX::processElement(yourElement); }; // ****************************************************************************** // ****************************************************************************** // xmdsIntegrateRK4EX private // ****************************************************************************** // ****************************************************************************** // ****************************************************************************** void xmdsIntegrateRK4EX::writePrototypes( FILE *const outfile) const { if(debugFlag) { printf("xmdsIntegrateRK4EX::writePrototypes\n"); } fprintf(outfile,"// ********************************************************\n"); fprintf(outfile,"// segment %li (RK4EX) prototypes\n",segmentNumber); fprintf(outfile,"\n"); xmdsIntegrate::writePrototypes(outfile); xmdsIntegrateEX::writePrototypes(outfile); xmdsIntegrateRK4::writePrototypes(outfile); }; // ****************************************************************************** void xmdsIntegrateRK4EX::writeRoutines( FILE *const outfile) const { if(debugFlag) { printf("xmdsIntegrateRK4EX::writeRoutines\n"); } fprintf(outfile,"// ********************************************************\n"); fprintf(outfile,"// segment %li (RK4EX) routines\n",segmentNumber); fprintf(outfile,"\n"); xmdsIntegrate::writeRoutines(outfile); xmdsIntegrateEX::writeRoutines(outfile); xmdsIntegrateRK4::writeRoutines(outfile); }; // ****************************************************************************** void xmdsIntegrateRK4EX::writeSingleStepCode( FILE *const outfile, const stepCaseEnum& stepCase) const { if(debugFlag) { printf("xmdsIntegrateRK4EX::writeSingleStepCode\n"); } const char *const fieldName = simulation()->field()->name()->c_str(); const char *const propDim = simulation()->parameters()->propDimName.c_str(); list tempVectorNamesList; tempVectorNamesList.push_back("main"); const char* indent = " "; if(simulation()->parameters()->errorCheck) { indent = " "; } const char* noiseVector=""; if((simulation()->parameters()->stochastic)&&(!noNoises())) { noiseVector=",_noise_vector"; } simulation()->field()->vectors2space(outfile,0,tempVectorNamesList,indent); fprintf(outfile,"%s// a_k=a\n",indent); if(simulation()->parameters()->usempi&!simulation()->parameters()->stochastic) { fprintf(outfile,"%sfor(long _i1=0; _i1parameters()->usempi&!simulation()->parameters()->stochastic) { fprintf(outfile,"%sfor(long _i1=0; _i1parameters()->usempi&!simulation()->parameters()->stochastic) { fprintf(outfile,"%sfor(long _i1=0; _i1parameters()->usempi&!simulation()->parameters()->stochastic) { fprintf(outfile,"%sfor(long _i1=0; _i1parameters()->usempi&!simulation()->parameters()->stochastic) { fprintf(outfile,"%sfor(long _i1=0; _i1parameters()->usempi&!simulation()->parameters()->stochastic) { fprintf(outfile,"%sfor(long _i1=0; _i1parameters()->usempi&!simulation()->parameters()->stochastic) { fprintf(outfile,"%sfor(long _i1=0; _i1parameters()->usempi&!simulation()->parameters()->stochastic) { fprintf(outfile,"%sfor(long _i1=0; _i1parameters()->usempi&!simulation()->parameters()->stochastic) { fprintf(outfile,"%sfor(long _i1=0; _i1