Revision 8e448b0f43525ab900b169c98efccc3b4600659b authored by Thorsten Becker on 08 August 2007, 22:55:39 UTC, committed by Thorsten Becker on 08 August 2007, 22:55:39 UTC
input. For now, only the tracer innitial conditions can be set by using, for example, ictracer_grd_layers=2 ictracer_grd_file="tmask.grd" for this to work, the ggrd libraries from HC, as well as the -lgmt and -lnetcdf need to be linked, and -DUSE_GGRD needs to be defined on compile time. - rewrote TDEPV viscosity options 3 and 4 slightly to make them more efficient - added TDEPV viscosity option 6 eta = N_0 exp(E(T_0-T) + (1-z) Z_0 ) - took layers subroutine in Construct_arrays.c apart to allow calling the same function in a more flexible from other subroutines - addded error handling routine "myerror" to Pan_problem_misc_functions - made the output behavior of the multigrid solver convergence parameters consisent with verbosity setting (ie. use report instead of always stderr output) - changed tracer input parameter "tracer" and "chemical_buoyancy" to boolean routine for added flexibility (I hope) - made check_initial_composition consistent with tracer advection, exits after warning only for E->trace.itracer_warnings==1 - debugging output in Full_tracer_advection.c and Tracer_setup only gets printed to file for E->control.verbose == 1 - fixed some typos in Output_gzdir (that might have been introduced by asynchronous svn updating or something like that)
1 parent 2f477b3
MultiLayout.py
#!/usr/bin/env python
#
# Layout for MultiCoupled Application
#
#
from Layout import Layout
class MultiLayout(Layout):
def __init__(self, name, facility):
Layout.__init__(self, name, facility)
# containing communicator
self.ccomm = None
# embedded comminicator1
self.ecomm1 = None
# embedded comminicator2
self.ecomm2 = None
# list of communicators created to pass imformation
# between different solvers
self.ccommPlus1 = []
self.ccommPlus2 = []
self.ecommPlus1 = []
self.ecommPlus2 = []
self.comm = None
self.rank = 0
self.nodes = 0
return
def verify(self, application):
# check that we have at least 3 processor
if self.nodes < 3:
import journal
firewall = journal.firewall("MultiLayout")
firewall.log("'%s' requires at least 3 processors" \
% application.name)
containing_group = self.inventory.containing_group
embedded_group1 = self.inventory.embedded_group1
embedded_group2 = self.inventory.embedded_group2
# check for duplicated elements in the group
self.check_duplicated(containing_group)
self.check_duplicated(embedded_group1)
self.check_duplicated(embedded_group2)
# check that the three groups are disjoint
self.check_disjoint(containing_group, embedded_group1)
self.check_disjoint(containing_group, embedded_group2)
self.check_disjoint(embedded_group1, embedded_group2)
return
def createCommunicators(self):
# Create communicators for solvers and couplerd
world = self.comm
myrank = self.rank
containing_group = self.inventory.containing_group
embedded_group1 = self.inventory.embedded_group1
embedded_group2 = self.inventory.embedded_group2
# Communicator for solvers
self.ccomm = world.include(containing_group)
self.ecomm1 = world.include(embedded_group1)
self.ecomm2 = world.include(embedded_group2)
# Communicator for inter-solver communication
# ecommPlus1 is a list of communicators, with each communicator
# contains a node in embedded_group1 and the whole containing_group
# ecommPlus2 is similar
for node in containing_group:
self.ecommPlus1.append(world.include(embedded_group1 + [node]))
self.ecommPlus2.append(world.include(embedded_group2 + [node]))
# ccommPlus1 is a list of communicators, with each communicator
# contains a node in containing group and the whole embedded_group1
# commPlus2 is similar
for node in embedded_group1:
self.ccommPlus1.append(world.include(containing_group + [node]))
for node in embedded_group2:
self.ccommPlus2.append(world.include(containing_group + [node]))
return
class Inventory(Layout.Inventory):
import pyre.inventory
# The containing solver will run on these nodes
containing_group = pyre.inventory.slice("containing_group",
default=range(12))
# The embedded solver1 will run on these nodes
embedded_group1 = pyre.inventory.slice("embedded_group1",
default=[12])
# The embedded solver2 will run on these nodes
embedded_group2 = pyre.inventory.slice("embedded_group2",
default=[13])
# version
__id__ = "$Id$"
# End of file
Computing file changes ...