[cig-commits] r6673 - in mc/3D/CitcomS/branches/compressible:
CitcomS CitcomS/Components CitcomS/Solver bin lib module tests
tan2 at geodynamics.org
tan2 at geodynamics.org
Tue Apr 24 15:16:52 PDT 2007
Author: tan2
Date: 2007-04-24 15:16:50 -0700 (Tue, 24 Apr 2007)
New Revision: 6673
Added:
mc/3D/CitcomS/branches/compressible/lib/Checkpoints.c
mc/3D/CitcomS/branches/compressible/lib/checkpoints.h
Modified:
mc/3D/CitcomS/branches/compressible/CitcomS/Components/IC.py
mc/3D/CitcomS/branches/compressible/CitcomS/Controller.py
mc/3D/CitcomS/branches/compressible/CitcomS/Solver/Solver.py
mc/3D/CitcomS/branches/compressible/bin/Citcom.c
mc/3D/CitcomS/branches/compressible/lib/Advection_diffusion.c
mc/3D/CitcomS/branches/compressible/lib/Composition_related.c
mc/3D/CitcomS/branches/compressible/lib/Full_tracer_advection.c
mc/3D/CitcomS/branches/compressible/lib/Initial_temperature.c
mc/3D/CitcomS/branches/compressible/lib/Instructions.c
mc/3D/CitcomS/branches/compressible/lib/Makefile.am
mc/3D/CitcomS/branches/compressible/lib/Material_properties.c
mc/3D/CitcomS/branches/compressible/lib/Output.c
mc/3D/CitcomS/branches/compressible/lib/Pan_problem_misc_functions.c
mc/3D/CitcomS/branches/compressible/lib/Problem_related.c
mc/3D/CitcomS/branches/compressible/lib/Process_buoyancy.c
mc/3D/CitcomS/branches/compressible/lib/Regional_tracer_advection.c
mc/3D/CitcomS/branches/compressible/lib/Size_does_matter.c
mc/3D/CitcomS/branches/compressible/lib/Tracer_setup.c
mc/3D/CitcomS/branches/compressible/lib/Viscosity_structures.c
mc/3D/CitcomS/branches/compressible/lib/global_defs.h
mc/3D/CitcomS/branches/compressible/module/bindings.c
mc/3D/CitcomS/branches/compressible/module/initial_conditions.c
mc/3D/CitcomS/branches/compressible/module/initial_conditions.h
mc/3D/CitcomS/branches/compressible/module/outputs.c
mc/3D/CitcomS/branches/compressible/module/outputs.h
mc/3D/CitcomS/branches/compressible/module/setProperties.c
mc/3D/CitcomS/branches/compressible/tests/Makefile.am
Log:
Implemented writing and reading (binary) checkpoints.
The checkpoint file is called [datafile].chkpt.[rank] and is outputed with an
interval of controller.checkpointFrequency. Before writing the checkpoint file,
the previous checkpoint file (if exists) is renamed to
[datafile].chkpt.[rank].bak.
To read back the checkpoint file, set solver.ic.restart=on. The old checkpoint
file, [datafile_old].chkpt.[rank] will be read in. The timestep information is
stored in the checkpoint file. There is no need to specify solution_cycles_init,
as the old way of restarting.
The old way of restarting (read in temperature from the velo files) will still
be available through solver.ic.tic_method=-1. (To do.)
Several things to do: clean up the old way of restarting tracers/composition,
documentation, does mat_control need checkpoints?
Modified: mc/3D/CitcomS/branches/compressible/CitcomS/Components/IC.py
===================================================================
--- mc/3D/CitcomS/branches/compressible/CitcomS/Components/IC.py 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/CitcomS/Components/IC.py 2007-04-24 22:16:50 UTC (rev 6673)
@@ -54,6 +54,7 @@
def launch(self):
+ self.initTracer()
self.initTemperature()
self.initPressure()
self.initVelocity()
@@ -61,13 +62,15 @@
return
+ def initTracer(self):
+ from CitcomSLib import init_tracer_composition
+ init_tracer_composition(self.all_variables)
+ return
+
def initTemperature(self):
- from CitcomSLib import constructTemperature, restartTemperature
- if self.inventory.restart:
- restartTemperature(self.all_variables)
- else:
- constructTemperature(self.all_variables)
+ from CitcomSLib import constructTemperature
+ constructTemperature(self.all_variables)
return
Modified: mc/3D/CitcomS/branches/compressible/CitcomS/Controller.py
===================================================================
--- mc/3D/CitcomS/branches/compressible/CitcomS/Controller.py 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/CitcomS/Controller.py 2007-04-24 22:16:50 UTC (rev 6673)
@@ -65,6 +65,8 @@
# do io for 0th step
self.save()
+
+ ### XXX: if stokes: advection tracers and terminate
return
@@ -142,6 +144,7 @@
def save(self):
self.solver.save(self.inventory.monitoringFrequency)
+ self.solver.checkpoint(self.inventory.checkpointFrequency)
return
@@ -151,3 +154,4 @@
import pyre.inventory
monitoringFrequency = pyre.inventory.int("monitoringFrequency", default=100)
+ checkpointFrequency = pyre.inventory.int("checkpointFrequency", default=100)
Modified: mc/3D/CitcomS/branches/compressible/CitcomS/Solver/Solver.py
===================================================================
--- mc/3D/CitcomS/branches/compressible/CitcomS/Solver/Solver.py 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/CitcomS/Solver/Solver.py 2007-04-24 22:16:50 UTC (rev 6673)
@@ -26,7 +26,7 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
-from CitcomSLib import CPU_time, output, output_time, return_dt, return_t, return_step
+from CitcomSLib import CPU_time, output, output_time, output_checkpoint, return_dt, return_t, return_step
from pyre.components.Component import Component
import journal
@@ -110,6 +110,8 @@
print >> stream, "[CitcomS.controller]"
print >> stream, ("monitoringFrequency=%d" %
application.controller.inventory.monitoringFrequency)
+ print >> stream, ("checkpointFrequency=%d" %
+ application.controller.inventory.checkpointFrequency)
print >> stream
self.setProperties(stream)
@@ -117,17 +119,25 @@
self.restart = self.inventory.ic.inventory.restart
self.ic_initTemperature = self.inventory.ic.initTemperature
+
+ self._setup()
+
return
def launch(self, application):
- self._setup()
+ if self.restart:
+ from CitcomSLib import readCheckpoint
+ readCheckpoint(self.all_variables)
- # initial conditions
- ic = self.inventory.ic
- ic.launch()
+ # XXX: if post_processing
+ # calling post_processing() and terminate
+ else:
+ # initial conditions
+ ic = self.inventory.ic
+ ic.launch()
- self.solveVelocities()
+ self.solveVelocities()
return
@@ -224,6 +234,14 @@
return
+ def checkpoint(self, checkpointFrequency):
+ step = self.step
+
+ if not (step % checkpointFrequency):
+ output_checkpoint(self.all_variables)
+ return
+
+
def setProperties(self, stream):
from CitcomSLib import Solver_set_properties
Modified: mc/3D/CitcomS/branches/compressible/bin/Citcom.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/bin/Citcom.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/bin/Citcom.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -35,6 +35,7 @@
#include "citcom_init.h"
#include "output.h"
#include "parallel_related.h"
+#include "checkpoints.h"
extern int Emergency_stop;
@@ -48,6 +49,8 @@
void general_stokes_solver();
void general_stokes_solver_pseudo_surf();
void read_instructions();
+ void initial_setup();
+ void initial_conditions();
void solve_constrained_flow();
void solve_derived_velocities();
void process_temp_field();
@@ -84,6 +87,7 @@
start_time = time = CPU_time0();
read_instructions(E, argv[1]);
+ initial_setup(E);
cpu_time_on_vp_it = CPU_time0();
initial_time = cpu_time_on_vp_it - time;
@@ -94,19 +98,27 @@
fflush(E->fp);
}
- if (E->control.post_p) {
- post_processing(E);
- parallel_process_termination();
+ /* This if-block is replaced by CitcomS.Solver.launch()*/
+ if (E->control.restart || E->control.post_p) {
+ read_checkpoint(E);
+
+ if (E->control.post_p) {
+ post_processing(E);
+ parallel_process_termination();
+ }
}
+ else {
+ initial_conditions(E);
- if(E->control.pseudo_free_surf) {
- if(E->mesh.topvbc == 2)
- general_stokes_solver_pseudo_surf(E);
- else
- assert(0);
+ if(E->control.pseudo_free_surf) {
+ if(E->mesh.topvbc == 2)
+ general_stokes_solver_pseudo_surf(E);
+ else
+ assert(0);
+ }
+ else
+ general_stokes_solver(E);
}
- else
- general_stokes_solver(E);
(E->problem_output)(E, E->monitor.solution_cycles);
@@ -122,8 +134,6 @@
parallel_process_termination();
}
- (E->next_buoyancy_field_init)(E);
-
while ( E->control.keep_going && (Emergency_stop == 0) ) {
/* The next few lines of code were replaced by
@@ -167,6 +177,10 @@
/* information about simulation time and wall clock time */
output_time(E, E->monitor.solution_cycles);
+ if ((E->monitor.solution_cycles % E->control.checkpoint_frequency)==0) {
+ output_checkpoint(E);
+ }
+
if(E->control.mat_control==1)
read_mat_from_file(E);
/*
Modified: mc/3D/CitcomS/branches/compressible/lib/Advection_diffusion.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Advection_diffusion.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Advection_diffusion.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -127,6 +127,7 @@
predictor(E,E->T,E->Tdot);
for(psc_pass=0;psc_pass<E->advection.temp_iterations;psc_pass++) {
+ /* XXX: replace inputdiff with refstate.conductivity */
pg_solver(E,E->T,E->Tdot,DTdot,E->convection.heat_sources,E->control.inputdiff,1,E->node);
corrector(E,E->T,E->Tdot,DTdot);
temperatures_conform_bcs(E);
@@ -329,6 +330,7 @@
get_global_shape_fn(E, el, &GN, &GNx, &dOmega, 0,
sphere_key, rtf, E->mesh.levmax, m);
+ /* XXX: replace diff with refstate.conductivity */
pg_shape_fn(E, el, &PG, &GNx, VV,
rtf, diff, m);
element_residual(E, el, PG, GNx, dOmega, VV, T, Tdot,
Added: mc/3D/CitcomS/branches/compressible/lib/Checkpoints.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Checkpoints.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Checkpoints.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -0,0 +1,471 @@
+/*
+ *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ *<LicenseText>
+ *
+ * CitcomS by Louis Moresi, Shijie Zhong, Lijie Han, Eh Tan,
+ * Clint Conrad, Michael Gurnis, and Eun-seo Choi.
+ * Copyright (C) 1994-2005, California Institute of Technology.
+ *
+ * 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
+ *
+ *</LicenseText>
+ *
+ *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+
+#include <sys/file.h>
+#include "element_definitions.h"
+#include "global_defs.h"
+
+/* Private function prototypes */
+static void backup_file(const char *output_file);
+static void write_sentinel(FILE *fp);
+static void read_sentinel(FILE *fp, int me);
+static void general_checkpoint(struct All_variables *E, FILE *fp);
+
+static void general_checkpoint(struct All_variables *E, FILE *fp);
+static void tracer_checkpoint(struct All_variables *E, FILE *fp);
+static void composition_checkpoint(struct All_variables *E, FILE *fp);
+static void energy_checkpoint(struct All_variables *E, FILE *fp);
+static void momentum_checkpoint(struct All_variables *E, FILE *fp);
+
+static void read_general_checkpoint(struct All_variables *E, FILE *fp);
+static void read_tracer_checkpoint(struct All_variables *E, FILE *fp);
+static void read_composition_checkpoint(struct All_variables *E, FILE *fp);
+static void read_energy_checkpoint(struct All_variables *E, FILE *fp);
+static void read_momentum_checkpoint(struct All_variables *E, FILE *fp);
+
+
+void output_checkpoint(struct All_variables *E)
+{
+ char output_file[255];
+ FILE *fp1;
+
+ sprintf(output_file, "%s.chkpt.%d", E->control.data_file, E->parallel.me);
+
+ backup_file(output_file);
+
+ fp1 = fopen(output_file, "wb");
+
+ /* checkpoint for general information */
+ /* this must be the first to be checkpointed */
+ general_checkpoint(E, fp1);
+
+ /* checkpoint for tracer/composition */
+ if(E->control.tracer) {
+ tracer_checkpoint(E, fp1);
+
+ if(E->composition.on)
+ composition_checkpoint(E, fp1);
+ }
+
+ /* checkpoint for energy equation */
+ energy_checkpoint(E, fp1);
+
+ /* checkpoint for momentum equation */
+ momentum_checkpoint(E, fp1);
+
+ fclose(fp1);
+ return;
+}
+
+
+void read_checkpoint(struct All_variables *E)
+{
+ char output_file[255];
+ FILE *fp;
+
+ /* open the checkpoint file */
+ snprintf(output_file, 254, "%s.chkpt.%d",
+ E->control.old_P_file, E->parallel.me);
+ fp = fopen(output_file, "rb");
+ if(fp == NULL) {
+ fprintf(stderr, "Cannot open file: %s\n", output_file);
+ exit(-1);
+ }
+
+ /* check mesh information in the checkpoint file */
+ read_general_checkpoint(E, fp);
+
+ /* read tracer/composition information in the checkpoint file */
+ if(E->control.tracer) {
+ read_tracer_checkpoint(E, fp);
+
+ if(E->composition.on)
+ read_composition_checkpoint(E, fp);
+ }
+
+ /* read energy information in the checkpoint file */
+ read_energy_checkpoint(E, fp);
+
+ /* read momentum information in the checkpoint file */
+ read_momentum_checkpoint(E, fp);
+
+ fclose(fp);
+ return;
+}
+
+
+static void backup_file(const char *output_file)
+{
+ char bak_file[255];
+ int ierr;
+
+ /* check the existence of output_file */
+ if(access(output_file, F_OK) == 0) {
+ /* if exist, renamed it to back up */
+ sprintf(bak_file, "%s.bak", output_file);
+ ierr = rename(output_file, bak_file);
+ if(ierr != 0) {
+ fprintf(stderr, "Warning, cannot backup checkpoint files\n");
+ }
+ }
+
+ return;
+}
+
+
+static void write_sentinel(FILE *fp)
+{
+ int a[4] = {0, 0, 0, 0};
+
+ fwrite(a, sizeof(int), 4, fp);
+}
+
+
+static void read_sentinel(FILE *fp, int me)
+{
+ int i, a[4];
+ char nonzero = 0;
+
+ fread(a, sizeof(int), 4, fp);
+
+ /* check whether a[i] are all zero */
+ for(i=0; i<4; i++)
+ nonzero |= a[i];
+
+ if(nonzero) {
+ fprintf(stderr, "Error in reading checkpoint file: wrong sentinel, "
+ "me=%d\n", me);
+ exit(-1);
+ }
+
+ return;
+}
+
+
+static void general_checkpoint(struct All_variables *E, FILE *fp)
+{
+ /* write mesh information */
+ fwrite(&(E->lmesh.nox), sizeof(int), 1, fp);
+ fwrite(&(E->lmesh.noy), sizeof(int), 1, fp);
+ fwrite(&(E->lmesh.noz), sizeof(int), 1, fp);
+ fwrite(&(E->parallel.nprocx), sizeof(int), 1, fp);
+ fwrite(&(E->parallel.nprocy), sizeof(int), 1, fp);
+ fwrite(&(E->parallel.nprocz), sizeof(int), 1, fp);
+ fwrite(&(E->sphere.caps_per_proc), sizeof(int), 1, fp);
+
+ /* write timing information */
+ fwrite(&(E->advection.timesteps), sizeof(int), 1, fp);
+ fwrite(&(E->advection.timestep), sizeof(float), 1, fp);
+
+ return;
+}
+
+
+static void read_general_checkpoint(struct All_variables *E, FILE *fp)
+{
+ int tmp[7];
+ double dtmp;
+
+ /* read mesh information */
+ fread(tmp, sizeof(int), 7, fp);
+
+ if((tmp[0] != E->lmesh.nox) ||
+ (tmp[1] != E->lmesh.noy) ||
+ (tmp[2] != E->lmesh.noz) ||
+ (tmp[3] != E->parallel.nprocx) ||
+ (tmp[4] != E->parallel.nprocy) ||
+ (tmp[5] != E->parallel.nprocz) ||
+ (tmp[6] != E->sphere.caps_per_proc)) {
+
+ fprintf(stderr, "Error in reading checkpoint file: mesh, me=%d\n",
+ E->parallel.me);
+ fprintf(stderr, "%d %d %d %d %d %d %d\n",
+ tmp[0], tmp[1], tmp[2], tmp[3],
+ tmp[4], tmp[5], tmp[6]);
+ exit(-1);
+ }
+
+ /* read timing information */
+ fread(&(E->advection.timesteps), sizeof(int), 1, fp);
+ fread(&(E->advection.timestep), sizeof(float), 1, fp);
+
+ E->monitor.solution_cycles = E->advection.timesteps;
+ return;
+}
+
+
+static void tracer_checkpoint(struct All_variables *E, FILE *fp)
+{
+ int m, i;
+
+ write_sentinel(fp);
+
+ fwrite(&(E->trace.number_of_basic_quantities), sizeof(int), 1, fp);
+ fwrite(&(E->trace.number_of_extra_quantities), sizeof(int), 1, fp);
+ fwrite(&(E->trace.nflavors), sizeof(int), 1, fp);
+ fwrite(&(E->trace.ilast_tracer_count), sizeof(int), 1, fp);
+
+ for(m=1; m<=E->sphere.caps_per_proc; m++)
+ fwrite(&(E->trace.ntracers[m]), sizeof(int), 1, fp);
+
+ for(m=1; m<=E->sphere.caps_per_proc; m++) {
+ for(i=0; i<E->trace.number_of_basic_quantities; i++) {
+ fwrite(E->trace.basicq[m][i], sizeof(double),
+ E->trace.ntracers[m]+1, fp);
+ }
+ for(i=0; i<E->trace.number_of_extra_quantities; i++) {
+ fwrite(E->trace.extraq[m][i], sizeof(double),
+ E->trace.ntracers[m]+1, fp);
+ }
+ fwrite(E->trace.ielement[m], sizeof(int),
+ E->trace.ntracers[m]+1, fp);
+ for(i=0; i<E->trace.nflavors; i++) {
+ fwrite(E->trace.ntracer_flavor[m][i], sizeof(double),
+ E->lmesh.nel+1, fp);
+ }
+ }
+
+ return;
+}
+
+
+static void read_tracer_checkpoint(struct All_variables *E, FILE *fp)
+{
+ void allocate_tracer_arrays();
+
+ int m, i, itmp;
+
+ read_sentinel(fp, E->parallel.me);
+
+ fread(&itmp, sizeof(int), 1, fp);
+ if (itmp != E->trace.number_of_basic_quantities) {
+ fprintf(stderr, "Error in reading checkpoint file: tracer basicq, me=%d\n",
+ E->parallel.me);
+ fprintf(stderr, "%d\n", itmp);
+ exit(-1);
+
+ }
+
+ fread(&itmp, sizeof(int), 1, fp);
+ if (itmp != E->trace.number_of_extra_quantities) {
+ fprintf(stderr, "Error in reading checkpoint file: tracer extraq, me=%d\n",
+ E->parallel.me);
+ fprintf(stderr, "%d\n", itmp);
+ exit(-1);
+
+ }
+
+ fread(&itmp, sizeof(int), 1, fp);
+ if (itmp != E->trace.nflavors) {
+ fprintf(stderr, "Error in reading checkpoint file: tracer nflavors, me=%d\n",
+ E->parallel.me);
+ fprintf(stderr, "%d\n", itmp);
+ exit(-1);
+
+ }
+
+ fread(&itmp, sizeof(int), 1, fp);
+ E->trace.ilast_tracer_count = itmp;
+
+ /* # of tracers, allocate memory */
+ for(m=1; m<=E->sphere.caps_per_proc; m++) {
+ fread(&itmp, sizeof(int), 1, fp);
+ allocate_tracer_arrays(E, m, itmp);
+ E->trace.ntracers[m] = itmp;
+ }
+
+ /* read tracer data */
+ for(m=1; m<=E->sphere.caps_per_proc; m++) {
+ for(i=0; i<E->trace.number_of_basic_quantities; i++) {
+ fread(E->trace.basicq[m][i], sizeof(double),
+ E->trace.ntracers[m]+1, fp);
+ }
+ for(i=0; i<E->trace.number_of_extra_quantities; i++) {
+ fread(E->trace.extraq[m][i], sizeof(double),
+ E->trace.ntracers[m]+1, fp);
+ }
+ fread(E->trace.ielement[m], sizeof(int),
+ E->trace.ntracers[m]+1, fp);
+ for(i=0; i<E->trace.nflavors; i++) {
+ fread(E->trace.ntracer_flavor[m][i], sizeof(double),
+ E->lmesh.nel+1, fp);
+ }
+ }
+
+ return;
+}
+
+
+static void composition_checkpoint(struct All_variables *E, FILE *fp)
+{
+ int m;
+
+ write_sentinel(fp);
+
+ fwrite(&(E->composition.bulk_composition), sizeof(double), 1, fp);
+ fwrite(&(E->composition.initial_bulk_composition), sizeof(double), 1, fp);
+
+ for(m=1; m<=E->sphere.caps_per_proc; m++) {
+ fwrite(E->composition.comp_el[m], sizeof(double),
+ E->lmesh.nel+1, fp);
+ }
+ for(m=1; m<=E->sphere.caps_per_proc; m++) {
+ fwrite(E->composition.comp_node[m], sizeof(double),
+ E->lmesh.nno+1, fp);
+ }
+
+ return;
+}
+
+
+static void read_composition_checkpoint(struct All_variables *E, FILE *fp)
+{
+ double tmp;
+ int m;
+
+ read_sentinel(fp, E->parallel.me);
+
+ fread(&tmp, sizeof(double), 1, fp);
+ E->composition.bulk_composition = tmp;
+
+ fread(&tmp, sizeof(double), 1, fp);
+ E->composition.initial_bulk_composition = tmp;
+
+ for(m=1; m<=E->sphere.caps_per_proc; m++) {
+ fread(E->composition.comp_el[m], sizeof(double),
+ E->lmesh.nel+1, fp);
+ }
+
+ for(m=1; m<=E->sphere.caps_per_proc; m++) {
+ fread(E->composition.comp_node[m], sizeof(double),
+ E->lmesh.nno+1, fp);
+ }
+
+ /* preventing uninitialized access */
+ E->trace.istat_iempty = 0;
+ E->composition.error_fraction = E->composition.bulk_composition
+ / E->composition.initial_bulk_composition - 1.0;
+
+ return;
+}
+
+
+static void energy_checkpoint(struct All_variables *E, FILE *fp)
+{
+ int m;
+
+ write_sentinel(fp);
+
+ for(m=1; m<=E->sphere.caps_per_proc; m++) {
+ fwrite(E->T[m], sizeof(double), E->lmesh.nno+1, fp);
+ fwrite(E->Tdot[m], sizeof(double), E->lmesh.nno+1, fp);
+ }
+
+ return;
+}
+
+
+static void read_energy_checkpoint(struct All_variables *E, FILE *fp)
+{
+ int m;
+
+ read_sentinel(fp, E->parallel.me);
+
+ for(m=1; m<=E->sphere.caps_per_proc; m++) {
+ fread(E->T[m], sizeof(double), E->lmesh.nno+1, fp);
+ fread(E->Tdot[m], sizeof(double), E->lmesh.nno+1, fp);
+ }
+
+ return;
+}
+
+
+static void momentum_checkpoint(struct All_variables *E, FILE *fp)
+{
+ int m, i;
+ int lev = E->mesh.levmax;
+
+ write_sentinel(fp);
+
+ fwrite(&(E->monitor.vdotv), sizeof(float), 1, fp);
+ fwrite(&(E->monitor.incompressibility), sizeof(float), 1, fp);
+
+ for(m=1; m<=E->sphere.caps_per_proc; m++) {
+ /* Pressure at equation points and nodes */
+ /* Writing E->NP instead of calling p_to_nodes() because p_to_nodes()
+ * contains parallel communication */
+ fwrite(E->P[m], sizeof(double), E->lmesh.npno+1, fp);
+ fwrite(E->NP[m], sizeof(float), E->lmesh.nno+1, fp);
+
+ /* velocity at equation points */
+ fwrite(E->U[m], sizeof(double), E->lmesh.neq+2, fp);
+
+ /* viscosity at quadrature points and node points */
+ fwrite(E->EVI[lev][m], sizeof(float),
+ (E->lmesh.nel+2)*vpoints[E->mesh.nsd], fp);
+ fwrite(E->VI[lev][m], sizeof(float), E->lmesh.nno+2, fp);
+ }
+
+ return;
+}
+
+
+static void read_momentum_checkpoint(struct All_variables *E, FILE *fp)
+{
+ void v_from_vector();
+
+ int m, i;
+ int lev = E->mesh.levmax;
+
+ read_sentinel(fp, E->parallel.me);
+
+ fread(&(E->monitor.vdotv), sizeof(float), 1, fp);
+ fread(&(E->monitor.incompressibility), sizeof(float), 1, fp);
+
+ for(m=1; m<=E->sphere.caps_per_proc; m++) {
+ /* Pressure at equation points and nodes */
+ fread(E->P[m], sizeof(double), E->lmesh.npno+1, fp);
+ fread(E->NP[m], sizeof(float), E->lmesh.nno+1, fp);
+
+ /* velocity at equation points */
+ fread(E->U[m], sizeof(double), E->lmesh.neq+2, fp);
+
+ /* viscosity at quadrature points and node points */
+ fread(E->EVI[lev][m], sizeof(float),
+ (E->lmesh.nel+2)*vpoints[E->mesh.nsd], fp);
+ fread(E->VI[lev][m], sizeof(float), E->lmesh.nno+2, fp);
+ }
+
+ /* update velocity array */
+ v_from_vector(E);
+
+ return;
+}
+
+
+
Modified: mc/3D/CitcomS/branches/compressible/lib/Composition_related.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Composition_related.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Composition_related.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -35,7 +35,6 @@
static void allocate_composition_memory(struct All_variables *E);
static void compute_elemental_composition_ratio_method(struct All_variables *E);
-static void init_composition(struct All_variables *E);
static void init_bulk_composition(struct All_variables *E);
static void check_initial_composition(struct All_variables *E);
static void map_composition_to_nodes(struct All_variables *E);
@@ -92,12 +91,8 @@
void composition_setup(struct All_variables *E)
{
+ allocate_composition_memory(E);
- if (E->composition.on) {
- allocate_composition_memory(E);
- init_composition(E);
- }
-
return;
}
@@ -207,7 +202,7 @@
}
-static void init_composition(struct All_variables *E)
+void init_composition(struct All_variables *E)
{
if (E->composition.ichemical_buoyancy==1 && E->composition.ibuoy_type==1) {
fill_composition(E);
@@ -386,6 +381,7 @@
/* If retarting tracers, the initital bulk composition is read from file */
+ // XXX: remove
if (E->trace.ic_method == 2 &&
!E->composition.ireset_initial_composition) {
Modified: mc/3D/CitcomS/branches/compressible/lib/Full_tracer_advection.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Full_tracer_advection.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Full_tracer_advection.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -126,7 +126,6 @@
char output_file[200];
void get_neighboring_caps();
- void initialize_tracers();
void analytical_test();
/* Some error control */
@@ -216,17 +215,14 @@
make_regular_grid(E);
- initialize_tracers(E);
-
-
if (E->trace.ianalytical_tracer_test==1) {
//TODO: walk into this code...
analytical_test(E);
parallel_process_termination();
}
- composition_setup(E);
- tracer_post_processing(E);
+ if (E->composition.on)
+ composition_setup(E);
return;
}
Modified: mc/3D/CitcomS/branches/compressible/lib/Initial_temperature.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Initial_temperature.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Initial_temperature.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -139,15 +139,14 @@
+/* This function is replaced by CitcomS.Components.IC.initTemperature()*/
void convection_initial_temperature(struct All_variables *E)
{
- if (E->control.restart)
- restart_tic(E);
- else if (E->control.post_p)
- restart_tic(E);
- else
- construct_tic(E);
+ void report();
+ report(E,"Initialize temperature field");
+ construct_tic(E);
+
/* Note: it is the callee's responsibility to conform tbc. */
/* like a call to temperatures_conform_bcs(E); */
@@ -161,14 +160,7 @@
void restart_tic(struct All_variables *E)
{
- /*
- if (E->control.lith_age)
- lith_age_restart_tic(E);
- else
- */
- restart_tic_from_file(E);
-
- return;
+ return;
}
@@ -219,7 +211,7 @@
}
if (E->parallel.me==0)
- fprintf(E->fp,"Reading %s for restarted temperature\n",output_file);
+ fprintf(E->fp,"Reading %s for initial temperature\n",output_file);
fgets(input_s,1000,fp);
sscanf(input_s,"%d %d %f",&ll,&mm,&restart_elapsed_time);
@@ -231,15 +223,13 @@
fgets(input_s,1000,fp);
sscanf(input_s,"%g %g %g %f",&(v1),&(v2),&(v3),&(g));
- /* E->sphere.cap[m].V[1][i] = d;
- E->sphere.cap[m].V[1][i] = e;
- E->sphere.cap[m].V[1][i] = f; */
+ /* Truncate the temperature to be within (0,1). */
+ /* This might not be desirable in some situations. */
E->T[m][i] = max(0.0,min(g,1.0));
}
}
fclose (fp);
- temperatures_conform_bcs(E);
return;
}
Modified: mc/3D/CitcomS/branches/compressible/lib/Instructions.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Instructions.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Instructions.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -145,6 +145,7 @@
(E->problem_tracer_setup)(E);
}
+ /* TODO: move to initial_conditions() */
if(E->control.mat_control) {
if(E->parallel.me ==0) fprintf(stderr,"IN Instructions.c\n");
fflush(stderr);
@@ -158,12 +159,8 @@
void read_instructions(struct All_variables *E, char *filename)
{
-
- void common_initial_fields();
void read_initial_settings();
void global_default_values();
- void general_stokes_solver_setup();
- void initial_mesh_solver_setup();
void setup_parser();
void shutdown_parser();
@@ -184,24 +181,53 @@
global_default_values(E);
read_initial_settings(E);
+ shutdown_parser(E);
+
+ return;
+}
+
+
+/* This function is replaced by CitcomS.Solver._setup() */
+void initial_setup(struct All_variables *E)
+{
+ void general_stokes_solver_setup();
+ void initial_mesh_solver_setup();
+
initial_mesh_solver_setup(E);
general_stokes_solver_setup(E);
+ (E->next_buoyancy_field_init)(E);
+
+
if (E->parallel.me==0) fprintf(stderr,"time=%f\n",
CPU_time0()-E->monitor.cpu_time_at_start);
+ return;
+}
+
+
+/* This function is replaced by CitcomS.Components.IC.launch()*/
+void initial_conditions(struct All_variables *E)
+{
+ void initialize_tracers();
+ void init_composition();
+ void common_initial_fields();
+
+ if (E->control.tracer==1) {
+ initialize_tracers(E);
+
+ if (E->composition.on)
+ init_composition(E);
+ }
+
(E->problem_initial_fields)(E); /* temperature/chemistry/melting etc */
common_initial_fields(E); /* velocity/pressure/viscosity (viscosity must be done LAST) */
- shutdown_parser(E);
-
return;
}
-
-
void read_initial_settings(struct All_variables *E)
{
void set_convection_defaults();
@@ -362,6 +388,7 @@
input_float("tole_compressibility",&(E->control.tole_comp),"0.0",m);
input_int("storage_spacing",&(E->control.record_every),"10",m);
+ input_int("checkpointFrequency",&(E->control.checkpoint_frequency),"100",m);
input_int("cpu_limits_in_seconds",&(E->control.record_all_until),"5",m);
input_boolean("precond",&(E->control.precondition),"off",m);
@@ -896,6 +923,7 @@
============================================================= */
+/* This function is replaced by CitcomS.Components.IC.launch()*/
void common_initial_fields(E)
struct All_variables *E;
{
@@ -914,7 +942,8 @@
return;
- }
+}
+
/* ========================================== */
void initial_pressure(E)
@@ -939,9 +968,6 @@
E->sphere.cap[m].V[1][i]=0.0;
E->sphere.cap[m].V[2][i]=0.0;
E->sphere.cap[m].V[3][i]=0.0;
- E->sphere.cap[m].Vprev[1][i]=0.0;
- E->sphere.cap[m].Vprev[2][i]=0.0;
- E->sphere.cap[m].Vprev[3][i]=0.0;
}
return;
Modified: mc/3D/CitcomS/branches/compressible/lib/Makefile.am
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Makefile.am 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Makefile.am 2007-04-24 22:16:50 UTC (rev 6673)
@@ -60,6 +60,8 @@
advection_diffusion.h \
advection.h \
BC_util.c \
+ Checkpoints.c \
+ checkpoints.h \
Citcom_init.c \
citcom_init.h \
Composition_related.c \
Modified: mc/3D/CitcomS/branches/compressible/lib/Material_properties.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Material_properties.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Material_properties.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -48,6 +48,15 @@
/* reference profile of coefficient of thermal expansion */
E->refstate.expansivity = (double *) malloc((noz+1)*sizeof(double));
+ /* reference profile of heat capacity */
+ E->refstate.capacity = (double *) malloc((noz+1)*sizeof(double));
+
+ /* reference profile of thermal conductivity */
+ E->refstate.conductivity = (double *) malloc((noz+1)*sizeof(double));
+
+ /* reference profile of gravity */
+ E->refstate.gravity = (double *) malloc((noz+1)*sizeof(double));
+
/* reference profile of temperature */
E->refstate.Tadi = (double *) malloc((noz+1)*sizeof(double));
@@ -75,6 +84,9 @@
z = 1 - r;
E->refstate.rho[i] = exp(tmp*z);
E->refstate.expansivity[i] = 1;
+ E->refstate.capacity[i] = 1;
+ E->refstate.conductivity[i] = 1;
+ E->refstate.gravity[i] = 1;
E->refstate.Tadi[i] = T0 * (exp(E->control.disptn_number * z) - 1);
}
Modified: mc/3D/CitcomS/branches/compressible/lib/Output.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Output.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Output.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -532,4 +532,3 @@
return;
}
-
Modified: mc/3D/CitcomS/branches/compressible/lib/Pan_problem_misc_functions.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Pan_problem_misc_functions.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Pan_problem_misc_functions.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -128,7 +128,7 @@
void get_buoyancy(struct All_variables *E, double **buoy)
{
- int i,m;
+ int i,j,m;
double temp,temp2;
void remove_horiz_ave2(struct All_variables*, double**);
@@ -156,6 +156,14 @@
phase_change_apply_670(E, buoy);
phase_change_apply_cmb(E, buoy);
+ /* convert density to buoyancy */
+ for(m=1;m<=E->sphere.caps_per_proc;m++)
+ for(i=1;i<=E->lmesh.noz;i++)
+ for(j=0;j<E->lmesh.nox*E->lmesh.noy;j++) {
+ int n = j*E->lmesh.noz + i;
+ buoy[m][n] *= E->refstate.gravity[i];
+ }
+
remove_horiz_ave2(E, buoy);
return;
}
Modified: mc/3D/CitcomS/branches/compressible/lib/Problem_related.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Problem_related.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Problem_related.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -1,6 +1,6 @@
/*
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- *
+ *
*<LicenseText>
*
* CitcomS by Louis Moresi, Shijie Zhong, Lijie Han, Eh Tan,
@@ -22,7 +22,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*</LicenseText>
- *
+ *
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
#include <math.h>
@@ -66,6 +66,8 @@
char output_file[255],input_s[1000];
E->monitor.elapsed_time = 0.0;
+
+#if 0
if ((E->control.restart || E->control.post_p)) {
sprintf(output_file, "%s.velo.%d.%d",E->control.old_P_file,E->parallel.me,E->monitor.solution_cycles_init);
fp=fopen(output_file,"r");
@@ -77,7 +79,7 @@
sscanf(input_s,"%d %d %f",&ll,&mm,&E->monitor.elapsed_time);
fclose(fp);
} /* end control.restart */
-
+#endif
return;
}
Modified: mc/3D/CitcomS/branches/compressible/lib/Process_buoyancy.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Process_buoyancy.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Process_buoyancy.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -107,6 +107,7 @@
uT = 0.0;
area = 0.0;
for(i=1;i<=vpts;i++) {
+ /* XXX: missing unit conversion, heat capacity and conductivity */
uT += u[i]*T[i]*dOmega.vpt[i] + dTdz[i]*dOmega.vpt[i];
}
Modified: mc/3D/CitcomS/branches/compressible/lib/Regional_tracer_advection.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Regional_tracer_advection.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Regional_tracer_advection.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -56,7 +56,6 @@
void regional_tracer_setup(struct All_variables *E)
{
- void initialize_tracers();
char output_file[255];
@@ -138,12 +137,7 @@
make_mesh_ijk(E);
-
- initialize_tracers(E);
-
-
composition_setup(E);
- tracer_post_processing(E);
return;
}
Modified: mc/3D/CitcomS/branches/compressible/lib/Size_does_matter.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Size_does_matter.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Size_does_matter.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -994,8 +994,8 @@
temp[node] = 0.0;
nz = ((E->ien[m][e].node[node]-1) % E->lmesh.noz) + 1;
for(nint=1;nint<=vpts;nint++) {
- /* XXX: missing heat capcity */
temp[node] += E->refstate.rho[nz]
+ * E->refstate.capacity[nz]
* dOmega.vpt[nint]
* g_point[nint].weight[E->mesh.nsd-1]
* E->N.vpt[GNVINDEX(node,nint)]; /* int Na dV */
Modified: mc/3D/CitcomS/branches/compressible/lib/Tracer_setup.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Tracer_setup.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Tracer_setup.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -51,6 +51,8 @@
void expand_later_array(struct All_variables *E, int j);
void expand_tracer_arrays(struct All_variables *E, int j);
void tracer_post_processing(struct All_variables *E);
+void allocate_tracer_arrays(struct All_variables *E,
+ int j, int number_of_tracers);
static void find_tracers(struct All_variables *E);
@@ -65,8 +67,6 @@
static void check_sum(struct All_variables *E);
static int isum_tracers(struct All_variables *E);
static void init_tracer_flavors(struct All_variables *E);
-static void allocate_tracer_arrays(struct All_variables *E,
- int j, int number_of_tracers);
static void reduce_tracer_arrays(struct All_variables *E);
static void put_away_later(struct All_variables *E, int j, int it);
static void eject_tracer(struct All_variables *E, int j, int it);
@@ -1246,8 +1246,8 @@
/* */
/* This function allocates memories to tracer arrays. */
-static void allocate_tracer_arrays(struct All_variables *E,
- int j, int number_of_tracers)
+void allocate_tracer_arrays(struct All_variables *E,
+ int j, int number_of_tracers)
{
int kk;
Modified: mc/3D/CitcomS/branches/compressible/lib/Viscosity_structures.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/Viscosity_structures.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/Viscosity_structures.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -178,21 +178,9 @@
fflush(E->fp_out);
}
+ /* interpolate from gauss quadrature points to node points for */
visc_from_gint_to_nodes(E,evisc,visc,E->mesh.levmax);
- visc_from_nodes_to_gint(E,visc,evisc,E->mesh.levmax);
-
- /*
- visc_to_node_interpolate(E,evisc,visc);
- */
-
- /* for(m=1;m<=E->sphere.caps_per_proc;m++) {
- for(i=1;i<=E->lmesh.nel;i++)
- if (i%E->lmesh.elz==0) {
- fprintf(E->fp_out,"%.4e %.4e %.4e %5d %2d\n",E->eco[m][i].centre[1],E->eco[m][i].centre[2],log10(evisc[m][(i-1)*vpts+1]),i,E->mat[m][i]);
-
- }
- } */
return;
}
Added: mc/3D/CitcomS/branches/compressible/lib/checkpoints.h
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/checkpoints.h 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/checkpoints.h 2007-04-24 22:16:50 UTC (rev 6673)
@@ -0,0 +1,31 @@
+/*
+ *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ *<LicenseText>
+ *
+ * CitcomS by Louis Moresi, Shijie Zhong, Lijie Han, Eh Tan,
+ * Clint Conrad, Michael Gurnis, and Eun-seo Choi.
+ * Copyright (C) 1994-2005, California Institute of Technology.
+ *
+ * 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
+ *
+ *</LicenseText>
+ *
+ *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+
+
+void output_checkpoint(struct All_variables *E);
+void read_checkpoint(struct All_variables *E);
Modified: mc/3D/CitcomS/branches/compressible/lib/global_defs.h
===================================================================
--- mc/3D/CitcomS/branches/compressible/lib/global_defs.h 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/lib/global_defs.h 2007-04-24 22:16:50 UTC (rev 6673)
@@ -498,6 +498,7 @@
int total_iteration_cycles;
int total_v_solver_calls;
+ int checkpoint_frequency;
int record_every;
int record_all_until;
@@ -510,6 +511,9 @@
struct REF_STATE {
double *rho;
double *expansivity;
+ double *capacity;
+ double *conductivity;
+ double *gravity;
double *Tadi;
double *dlnrhodr;
};
Modified: mc/3D/CitcomS/branches/compressible/module/bindings.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/module/bindings.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/module/bindings.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -169,16 +169,16 @@
/* from initial_conditions.h */
+ {pyCitcom_ic_init_tracer_composition__name__,
+ pyCitcom_ic_init_tracer_composition,
+ METH_VARARGS,
+ pyCitcom_ic_init_tracer_composition__doc__},
+
{pyCitcom_ic_constructTemperature__name__,
pyCitcom_ic_constructTemperature,
METH_VARARGS,
pyCitcom_ic_constructTemperature__doc__},
- {pyCitcom_ic_restartTemperature__name__,
- pyCitcom_ic_restartTemperature,
- METH_VARARGS,
- pyCitcom_ic_restartTemperature__doc__},
-
{pyCitcom_ic_initPressure__name__,
pyCitcom_ic_initPressure,
METH_VARARGS,
@@ -194,6 +194,11 @@
METH_VARARGS,
pyCitcom_ic_initViscosity__doc__},
+ {pyCitcom_ic_readCheckpoint__name__,
+ pyCitcom_ic_readCheckpoint,
+ METH_VARARGS,
+ pyCitcom_ic_readCheckpoint__doc__},
+
/* from mesher.h */
{pyCitcom_full_sphere_launch__name__,
@@ -223,6 +228,11 @@
METH_VARARGS,
pyCitcom_output_time__doc__},
+ {pyCitcom_output_checkpoint__name__,
+ pyCitcom_output_checkpoint,
+ METH_VARARGS,
+ pyCitcom_output_checkpoint__doc__},
+
/* from setProperties.h */
{pyCitcom_Advection_diffusion_set_properties__name__,
Modified: mc/3D/CitcomS/branches/compressible/module/initial_conditions.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/module/initial_conditions.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/module/initial_conditions.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -32,55 +32,55 @@
#include "global_defs.h"
-void construct_tic(struct All_variables*);
-void debug_tic(struct All_variables*);
+void initialize_tracers(struct All_variables*);
+void init_composition(struct All_variables*);
void initial_pressure(struct All_variables*);
void initial_velocity(struct All_variables*);
void initial_viscosity(struct All_variables*);
void report(struct All_variables*, char* str);
-void restart_tic(struct All_variables*);
+void read_checkpoint(struct All_variables*);
-char pyCitcom_ic_constructTemperature__doc__[] = "";
-char pyCitcom_ic_constructTemperature__name__[] = "constructTemperature";
+char pyCitcom_ic_init_tracer_composition__doc__[] = "";
+char pyCitcom_ic_init_tracer_composition__name__[] = "init_tracer_composition";
-PyObject * pyCitcom_ic_constructTemperature(PyObject *self, PyObject *args)
+PyObject * pyCitcom_ic_init_tracer_composition(PyObject *self, PyObject *args)
{
PyObject *obj;
struct All_variables* E;
- if (!PyArg_ParseTuple(args, "O:constructTemperature", &obj))
+ if (!PyArg_ParseTuple(args, "O:init_tracer_composition", &obj))
return NULL;
E = (struct All_variables*)(PyCObject_AsVoidPtr(obj));
- report(E,"Initialize temperature field");
- construct_tic(E);
+ if (E->control.tracer==1) {
+ initialize_tracers(E);
- if(E->control.verbose)
- debug_tic(E);
-
+ if (E->composition.on)
+ init_composition(E);
+ }
+
Py_INCREF(Py_None);
return Py_None;
}
-char pyCitcom_ic_restartTemperature__doc__[] = "";
-char pyCitcom_ic_restartTemperature__name__[] = "restartTemperature";
+char pyCitcom_ic_constructTemperature__doc__[] = "";
+char pyCitcom_ic_constructTemperature__name__[] = "constructTemperature";
-PyObject * pyCitcom_ic_restartTemperature(PyObject *self, PyObject *args)
+PyObject * pyCitcom_ic_constructTemperature(PyObject *self, PyObject *args)
{
PyObject *obj;
struct All_variables* E;
- if (!PyArg_ParseTuple(args, "O:restartTemperature", &obj))
+ if (!PyArg_ParseTuple(args, "O:constructTemperature", &obj))
return NULL;
E = (struct All_variables*)(PyCObject_AsVoidPtr(obj));
- report(E,"Initialize temperature field");
- restart_tic(E);
+ (E->problem_initial_fields)(E);
Py_INCREF(Py_None);
return Py_None;
@@ -154,6 +154,27 @@
+char pyCitcom_ic_readCheckpoint__doc__[] = "";
+char pyCitcom_ic_readCheckpoint__name__[] = "readCheckpoint";
+
+PyObject * pyCitcom_ic_readCheckpoint(PyObject *self, PyObject *args)
+{
+ PyObject *obj;
+ struct All_variables* E;
+
+ if (!PyArg_ParseTuple(args, "O:readCheckpoint", &obj))
+ return NULL;
+
+ E = (struct All_variables*)(PyCObject_AsVoidPtr(obj));
+
+ read_checkpoint(E);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+
+
/* $Id$ */
/* End of file */
Modified: mc/3D/CitcomS/branches/compressible/module/initial_conditions.h
===================================================================
--- mc/3D/CitcomS/branches/compressible/module/initial_conditions.h 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/module/initial_conditions.h 2007-04-24 22:16:50 UTC (rev 6673)
@@ -29,16 +29,16 @@
#define pyCitcom_initial_conditions_h
+extern char pyCitcom_ic_init_tracer_composition__name__[];
+extern char pyCitcom_ic_init_tracer_composition__doc__[];
+PyObject * pyCitcom_ic_init_tracer_composition(PyObject *, PyObject *);
+
+
extern char pyCitcom_ic_constructTemperature__name__[];
extern char pyCitcom_ic_constructTemperature__doc__[];
PyObject * pyCitcom_ic_constructTemperature(PyObject *, PyObject *);
-extern char pyCitcom_ic_restartTemperature__name__[];
-extern char pyCitcom_ic_restartTemperature__doc__[];
-PyObject * pyCitcom_ic_restartTemperature(PyObject *, PyObject *);
-
-
extern char pyCitcom_ic_initPressure__name__[];
extern char pyCitcom_ic_initPressure__doc__[];
PyObject * pyCitcom_ic_initPressure(PyObject *, PyObject *);
@@ -53,6 +53,12 @@
extern char pyCitcom_ic_initViscosity__doc__[];
PyObject * pyCitcom_ic_initViscosity(PyObject *, PyObject *);
+
+extern char pyCitcom_ic_readCheckpoint__name__[];
+extern char pyCitcom_ic_readCheckpoint__doc__[];
+PyObject * pyCitcom_ic_readCheckpoint(PyObject *, PyObject *);
+
+
#endif
/* $Id$ */
Modified: mc/3D/CitcomS/branches/compressible/module/outputs.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/module/outputs.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/module/outputs.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -102,6 +102,28 @@
}
+char pyCitcom_output_checkpoint__doc__[] = "";
+char pyCitcom_output_checkpoint__name__[] = "output_checkpoint";
+
+PyObject * pyCitcom_output_checkpoint(PyObject *self, PyObject *args)
+{
+ void read_checkpoint(struct All_variables*);
+ PyObject *obj;
+ struct All_variables* E;
+
+ if (!PyArg_ParseTuple(args, "O:output_checkpoint", &obj))
+ return NULL;
+
+ E = (struct All_variables*)(PyCObject_AsVoidPtr(obj));
+
+ output_checkpoint(E);
+
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+
/* $Id$ */
/* End of file */
Modified: mc/3D/CitcomS/branches/compressible/module/outputs.h
===================================================================
--- mc/3D/CitcomS/branches/compressible/module/outputs.h 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/module/outputs.h 2007-04-24 22:16:50 UTC (rev 6673)
@@ -40,6 +40,10 @@
extern char pyCitcom_output_time__doc__[];
PyObject * pyCitcom_output_time(PyObject *, PyObject *);
+extern char pyCitcom_output_checkpoint__name__[];
+extern char pyCitcom_output_checkpoint__doc__[];
+PyObject * pyCitcom_output_checkpoint(PyObject *, PyObject *);
+
#endif
/* $Id$ */
Modified: mc/3D/CitcomS/branches/compressible/module/setProperties.c
===================================================================
--- mc/3D/CitcomS/branches/compressible/module/setProperties.c 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/module/setProperties.c 2007-04-24 22:16:50 UTC (rev 6673)
@@ -462,6 +462,7 @@
E->advection.min_timesteps = 1;
E->advection.max_timesteps = 1;
E->advection.max_total_timesteps = 1;
+ E->control.checkpoint_frequency = 1;
E->control.record_every = 1;
E->control.record_all_until = 1;
Modified: mc/3D/CitcomS/branches/compressible/tests/Makefile.am
===================================================================
--- mc/3D/CitcomS/branches/compressible/tests/Makefile.am 2007-04-24 22:09:46 UTC (rev 6672)
+++ mc/3D/CitcomS/branches/compressible/tests/Makefile.am 2007-04-24 22:16:50 UTC (rev 6673)
@@ -25,9 +25,7 @@
EXTRA_DIST = \
array2d.cc \
- asap.py \
exchange.py \
- hrothgar.py \
signon.py \
test1.sh \
test2.sh \
More information about the cig-commits
mailing list