Skip to content

Commit

Permalink
add Gibson/Milstein Hybrid Stoch and MovingBoundary
Browse files Browse the repository at this point in the history
  • Loading branch information
jcschaff committed Aug 22, 2024
1 parent 2d37b6a commit edba7d7
Show file tree
Hide file tree
Showing 5 changed files with 636 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,34 @@ public void testSimJobScriptCVODE() throws IOException, XmlParseException, Expre
Assertions.assertEquals(expectedSlurmScript, slurmScript);
}

@Test
public void testSimJobScriptGibsonMilstein() throws IOException, XmlParseException, ExpressionException {
String simTaskResourcePath = "slurm_fixtures/gibson_milstein/SimID_274641698_0__0.simtask.xml";
String JOB_NAME = "V_REL_274641698_0_0";
// nc 100.0 10.0 0.01 0.1 -OV
String executable = "/usr/local/app/localsolvers/linux64/Hybrid_EM_x64";
String inputFilePath = "/share/apps/vcell3/users/schaff/SimID_274641698_0_.nc";
String[] command = new String[] { executable, inputFilePath, "100.0", "10.0", "0.01", "0.1", "-OV", "-tid", "0" };

String slurmScript = createScriptForNativeSolvers(simTaskResourcePath, command, JOB_NAME);
String expectedSlurmScript = readTextFileFromResource("slurm_fixtures/gibson_milstein/V_REL_274641698_0_0.slurm.sub");
Assertions.assertEquals(expectedSlurmScript, slurmScript);
}

@Test
public void testSimJobScriptMovingBoundary() throws IOException, XmlParseException, ExpressionException {
String simTaskResourcePath = "slurm_fixtures/moving_boundary/SimID_274641196_0__0.simtask.xml";
String JOB_NAME = "V_REL_274641196_0_0";

String executable = "/usr/local/app/localsolvers/linux64/MovingBoundary_x64";
String inputFilePath = "/share/apps/vcell3/users/schaff/SimID_274641196_0_mb.xml";
String[] command = new String[] { executable, "--config", inputFilePath, "-tid", "0" };

String slurmScript = createScriptForNativeSolvers(simTaskResourcePath, command, JOB_NAME);
String expectedSlurmScript = readTextFileFromResource("slurm_fixtures/moving_boundary/V_REL_274641196_0_0.slurm.sub");
Assertions.assertEquals(expectedSlurmScript, slurmScript);
}

@Test
public void testSimJobScriptGibson() throws IOException, XmlParseException, ExpressionException {
String simTaskResourcePath = "slurm_fixtures/gibson/SimID_274635122_0__0.simtask.xml";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
<SimulationTask xmlns="http://sourceforge.net/projects/vcell/vcml" TaskId="0" JobIndex="0" isPowerUser="false">
<MathDescription Name="Copy of 3D pde_generated">
<Annotation>cloned from 'Copy of 3D pde_generated' owned by user frm
cloned from 'Copy of 3D pde_generated' owned by user anu
cloned from 'Copy of 3D pde_generated' owned by user schaff
cloned from 'Copy of 3D pde_generated' owned by user les</Annotation>
<Constant Name="_F_">96485.3321</Constant>
<Constant Name="_F_nmol_">9.64853321E-5</Constant>
<Constant Name="_N_pmol_">6.02214179E11</Constant>
<Constant Name="_PI_">3.141592653589793</Constant>
<Constant Name="_R_">8314.46261815</Constant>
<Constant Name="_T_">300.0</Constant>
<Constant Name="C_cyt_Count_initCount">0.0</Constant>
<Constant Name="Kf">2.0</Constant>
<Constant Name="kfl">2.0</Constant>
<Constant Name="KMOLE">0.001660538783162726</Constant>
<Constant Name="Kr">1000.0</Constant>
<Constant Name="netValence">1.0</Constant>
<Constant Name="Ran_cyt_Count_initCount">0.0</Constant>
<Constant Name="RanC_cyt_Count_initCount">0.0</Constant>
<Constant Name="RanC_nuc_Count_initCount">100.0</Constant>
<Constant Name="s2_Count_initCount">0.0</Constant>
<Constant Name="Size_cyt">14891.899581611733</Constant>
<Constant Name="Size_EC">124712.10435961554</Constant>
<Constant Name="Size_nm">1406.7733692487282</Constant>
<Constant Name="Size_nuc">3697.013658772733</Constant>
<Constant Name="Size_pm">4738.640600365477</Constant>
<Constant Name="UnitFactor_molecules_uM_neg_1_um_neg_3">(1.0 * pow(KMOLE, - 1.0))</Constant>
<Constant Name="UnitFactor_uM_um3_molecules_neg_1">(1.0 * pow(KMOLE,1.0))</Constant>
<Constant Name="Voltage_nm">0.0</Constant>
<Constant Name="Voltage_pm">0.0</Constant>
<StochasticVolumeVariable Name="C_cyt_Count" />
<StochasticVolumeVariable Name="Ran_cyt_Count" />
<StochasticVolumeVariable Name="RanC_cyt_Count" />
<StochasticVolumeVariable Name="RanC_nuc_Count" />
<StochasticVolumeVariable Name="s2_Count" />
<Function Name="C_cyt" Domain="Compartment">((C_cyt_Count * UnitFactor_uM_um3_molecules_neg_1) / Size_cyt)</Function>
<Function Name="J_flux0" Domain="Compartment">(kfl * (RanC_cyt - RanC_nuc))</Function>
<Function Name="J_r0" Domain="Compartment">((Kf * RanC_cyt) - ((Kr * Ran_cyt) * C_cyt))</Function>
<Function Name="P_flux0_probabilityRate" Domain="Compartment">(UnitFactor_molecules_uM_neg_1_um_neg_3 * kfl * Size_nm * RanC_cyt)</Function>
<Function Name="P_flux0_reverse_probabilityRate" Domain="Compartment">(kfl * UnitFactor_molecules_uM_neg_1_um_neg_3 * Size_nm * RanC_nuc)</Function>
<Function Name="P_r0_probabilityRate" Domain="Compartment">(Kf * RanC_cyt_Count * UnitFactor_molecules_uM_neg_1_um_neg_3 * UnitFactor_uM_um3_molecules_neg_1)</Function>
<Function Name="P_r0_reverse_probabilityRate" Domain="Compartment">(Kr * Ran_cyt_Count * C_cyt_Count * UnitFactor_molecules_uM_neg_1_um_neg_3 * UnitFactor_uM_um3_molecules_neg_1 * UnitFactor_uM_um3_molecules_neg_1 / Size_cyt)</Function>
<Function Name="Ran_cyt" Domain="Compartment">((Ran_cyt_Count * UnitFactor_uM_um3_molecules_neg_1) / Size_cyt)</Function>
<Function Name="RanC_cyt" Domain="Compartment">((RanC_cyt_Count * UnitFactor_uM_um3_molecules_neg_1) / Size_cyt)</Function>
<Function Name="RanC_nuc" Domain="Compartment">((RanC_nuc_Count * UnitFactor_uM_um3_molecules_neg_1) / Size_nuc)</Function>
<Function Name="s2" Domain="Compartment">(s2_Count / Size_pm)</Function>
<CompartmentSubDomain Name="Compartment">
<BoundaryType Boundary="Xm" Type="Value" />
<BoundaryType Boundary="Xp" Type="Value" />
<BoundaryType Boundary="Ym" Type="Value" />
<BoundaryType Boundary="Yp" Type="Value" />
<BoundaryType Boundary="Zm" Type="Value" />
<BoundaryType Boundary="Zp" Type="Value" />
<VariableInitialCount Name="RanC_cyt_Count">RanC_cyt_Count_initCount</VariableInitialCount>
<VariableInitialCount Name="Ran_cyt_Count">Ran_cyt_Count_initCount</VariableInitialCount>
<VariableInitialCount Name="C_cyt_Count">C_cyt_Count_initCount</VariableInitialCount>
<VariableInitialCount Name="RanC_nuc_Count">RanC_nuc_Count_initCount</VariableInitialCount>
<VariableInitialCount Name="s2_Count">s2_Count_initCount</VariableInitialCount>
<JumpProcess Name="r0">
<ProbabilityRate>P_r0_probabilityRate</ProbabilityRate>
<Effect VarName="RanC_cyt_Count" Operation="inc">-1.0</Effect>
<Effect VarName="Ran_cyt_Count" Operation="inc">1.0</Effect>
<Effect VarName="C_cyt_Count" Operation="inc">1.0</Effect>
</JumpProcess>
<JumpProcess Name="r0_reverse">
<ProbabilityRate>P_r0_reverse_probabilityRate</ProbabilityRate>
<Effect VarName="RanC_cyt_Count" Operation="inc">1.0</Effect>
<Effect VarName="Ran_cyt_Count" Operation="inc">-1.0</Effect>
<Effect VarName="C_cyt_Count" Operation="inc">-1.0</Effect>
</JumpProcess>
<JumpProcess Name="flux0">
<ProbabilityRate>P_flux0_probabilityRate</ProbabilityRate>
<Effect VarName="RanC_cyt_Count" Operation="inc">-1.0</Effect>
<Effect VarName="RanC_nuc_Count" Operation="inc">1.0</Effect>
</JumpProcess>
<JumpProcess Name="flux0_reverse">
<ProbabilityRate>P_flux0_reverse_probabilityRate</ProbabilityRate>
<Effect VarName="RanC_cyt_Count" Operation="inc">1.0</Effect>
<Effect VarName="RanC_nuc_Count" Operation="inc">-1.0</Effect>
</JumpProcess>
</CompartmentSubDomain>
<Version Name="Copy of 3D pde_generated" KeyValue="252546354" BranchId="84086541" Archived="0" Date="08-Feb-2023 01:54:34" FromVersionable="false">
<Owner Name="schaff" Identifier="17" />
<GroupAccess Type="1" />
<Annotation>cloned from 'Copy of 3D pde_generated' owned by user frm
cloned from 'Copy of 3D pde_generated' owned by user anu
cloned from 'Copy of 3D pde_generated' owned by user schaff
cloned from 'Copy of 3D pde_generated' owned by user les</Annotation>
</Version>
</MathDescription>
<Simulation Name="Copy of Copy of Hybrid Gibson Milstein">
<Annotation>cloned from 'Copy of Hybrid Gibson Milstein' owned by user frm
cloned from 'Hybrid Gibson Milstein' owned by user anu
cloned from 'Hybrid Gibson Milstein' owned by user schaff
cloned from 'Simulation0' owned by user les</Annotation>
<SolverTaskDescription TaskType="Unsteady" UseSymbolicJacobian="false" Solver="Hybrid (Gibson + Milstein Method)">
<TimeBound StartTime="0.0" EndTime="15.0" />
<TimeStep DefaultTime="0.1" MinTime="1.0E-8" MaxTime="1.0" />
<ErrorTolerance Absolut="1.0E-9" Relative="1.0E-9" />
<StochSimOptions UseCustomSeed="false" NumberOfTrial="1" Histogram="false" Epsilon="100.0" Lambda="10.0" MSRTolerance="0.01" SDETolerance="1.0E-4" />
<OutputOptions OutputTimeStep="0.5" />
<NumberProcessors>1</NumberProcessors>
</SolverTaskDescription>
<MathOverrides />
<Version Name="Copy of Copy of Hybrid Gibson Milstein" KeyValue="274641698" BranchId="274641699" Archived="0" Date="22-Aug-2024 00:50:57" FromVersionable="false">
<Owner Name="schaff" Identifier="17" />
<GroupAccess Type="1" />
<Annotation>cloned from 'Copy of Hybrid Gibson Milstein' owned by user frm
cloned from 'Hybrid Gibson Milstein' owned by user anu
cloned from 'Hybrid Gibson Milstein' owned by user schaff
cloned from 'Simulation0' owned by user les</Annotation>
</Version>
</Simulation>
<Geometry Name="nonspatial1435481798" Dimension="0">
<Annotation>cloned from 'nonspatial1435481798' owned by user frm
cloned from 'nonspatial660203233' owned by user anu
cloned from 'nonspatial637508148' owned by user schaff
cloned from 'nonspatial608887770' owned by user les</Annotation>
<Extent X="10.0" Y="10.0" Z="10.0" />
<Origin X="0.0" Y="0.0" Z="0.0" />
<SubVolume Name="Compartment" Handle="0" Type="Compartmental" KeyValue="252545856" />
<Version Name="nonspatial1435481798" KeyValue="252545853" BranchId="84086514" Archived="0" Date="08-Feb-2023 01:53:13" FromVersionable="false">
<Owner Name="schaff" Identifier="17" />
<GroupAccess Type="1" />
<Annotation>cloned from 'nonspatial1435481798' owned by user frm
cloned from 'nonspatial660203233' owned by user anu
cloned from 'nonspatial637508148' owned by user schaff
cloned from 'nonspatial608887770' owned by user les</Annotation>
</Version>
</Geometry>
</SimulationTask>
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
#!/usr/bin/bash
#SBATCH --partition=vcell
#SBATCH --reservation=
#SBATCH --qos=vcell
#SBATCH -J V_REL_274641698_0_0
#SBATCH -o /share/apps/vcell3/htclogs/V_REL_274641698_0_0.slurm.log
#SBATCH -e /share/apps/vcell3/htclogs/V_REL_274641698_0_0.slurm.log
#SBATCH --mem=4096M
#SBATCH --no-kill
#SBATCH --no-requeue
# VCell SlurmProxy memory limit source=Exception NoSuchFileException used FALLBACK_MEM_LIMIT_MB


#BEGIN---------SlurmProxy.generateScript():slurmInitSingularity----------
set -x

TMPDIR=/scratch/vcell
echo "using TMPDIR=$TMPDIR"
if [ ! -e $TMPDIR ]; then mkdir -p $TMPDIR ; fi
echo `hostname`

export MODULEPATH=/isg/shared/modulefiles:/tgcapps/modulefiles

source /usr/share/Modules/init/bash

module load singularity/vcell-3.10.0

echo "job running on host `hostname -f`"

echo "id is `id`"

echo "bash version is `bash --version`"
date

echo ENVIRONMENT
env

container_prefix=
if command -v singularity >/dev/null 2>&1; then
#
# Copy of singularity image will be downloaded if not found in /state/partition1/singularityImages/ghcr.io_virtualcell_vcell-batch_d6825f4.img
#
localSingularityImage=/state/partition1/singularityImages/ghcr.io_virtualcell_vcell-batch_d6825f4.img
if [ ! -e "$localSingularityImage" ]; then
echo "local singularity image $localSingularityImage not found, trying to download to hpc from "/share/apps/vcell3/singularityImages/ghcr.io_virtualcell_vcell-batch_d6825f4.img
mkdir -p /state/partition1/singularityImages
singularitytempfile=$(mktemp -up /share/apps/vcell3/singularityImages)
flock -E 100 -n /tmp/vcellSingularityLock_Rel_Version_7.6.0_build_28.lock sh -c "cp /share/apps/vcell3/singularityImages/ghcr.io_virtualcell_vcell-batch_d6825f4.img ${singularitytempfile} ; mv -n ${singularitytempfile} /state/partition1/singularityImages/ghcr.io_virtualcell_vcell-batch_d6825f4.img"
theStatus=$?
if [ $theStatus -eq 100 ]
then
echo "lock in use, waiting for lock owner to copy singularityImage"
let c=0
until [ -f $localSingularityImage ]
do
sleep 3
let c=c+1
if [ $c -eq 20 ]
then
echo "Exceeded wait time for lock owner to copy singularityImage"
break
fi
done
else
if [ $theStatus -eq 0 ]
then
echo copy succeeded
else
echo copy failed
fi
fi
rm -f ${singularitytempfile}
if [ ! -e "$localSingularityImage" ]; then
echo "Failed to copy $localSingularityImage to hpc from central"
exit 1
else
echo successful copy from /share/apps/vcell3/singularityImages/ghcr.io_virtualcell_vcell-batch_d6825f4.img to /state/partition1/singularityImages/ghcr.io_virtualcell_vcell-batch_d6825f4.img
fi
fi
container_prefix="singularity run --bind /share/apps/vcell3/users:/simdata --bind /share/apps/vcell7/users:/simdata_secondary --bind /share/apps/vcell12/users:/share/apps/vcell12/users --bind /share/apps/vcell3/htclogs:/htclogs --bind /scratch/vcell:/solvertmp $localSingularityImage --env java_mem_Xmx=4096M --env jmshost_sim_internal=rke-wn-01.cam.uchc.edu --env jmsport_sim_internal=31618 --env jmsrestport_sim_internal=30163 --env jmsuser=clientUser --env jmspswd=dummy --env jmsblob_minsize=100000 --env mongodbhost_internal=rke-wn-01.cam.uchc.edu --env mongodbport_internal=30019 --env mongodb_database=test --env primary_datadir_external=/share/apps/vcell3/users --env secondary_datadir_external=/share/apps/vcell7/users --env htclogdir_external=/share/apps/vcell3/htclogs --env softwareVersion=Rel_Version_7.6.0_build_28 --env serverid=REL "
else
echo "Required singularity command not found (maybe 'module load singularity/vcell-3.10.0' command didn't work) "
exit 1
fi
echo "container_prefix is '${container_prefix}'"
echo "3 date=`date`"
#END---------SlurmProxy.generateScript():slurmInitSingularity----------

#BEGIN---------SlurmProxy.generateScript():sendFailureMsg----------
sendFailureMsg() {
echo ${container_prefix} --msg-userid clientUser --msg-password dummy --msg-host rke-wn-01.cam.uchc.edu --msg-port 31618 --msg-job-host `hostname` --msg-job-userid schaff --msg-job-simkey 274641698 --msg-job-jobindex 0 --msg-job-taskid 0 --msg-job-errmsg "$1" SendErrorMsg
${container_prefix} --msg-userid clientUser --msg-password dummy --msg-host rke-wn-01.cam.uchc.edu --msg-port 31618 --msg-job-host `hostname` --msg-job-userid schaff --msg-job-simkey 274641698 --msg-job-jobindex 0 --msg-job-taskid 0 --msg-job-errmsg "$1" SendErrorMsg
stat=$?
if [[ $stat -ne 0 ]]; then
echo 'failed to send error message, retcode=$stat'
else
echo 'sent failure message'
fi
}
#END---------SlurmProxy.generateScript():sendFailureMsg----------
#BEGIN---------SlurmProxy.generateScript():hasExitProcessor----------
callExitProcessor( ) {
echo exitCommand = ${container_prefix}JavaPostprocessor64 274641698 schaff 17 0 0 $1 /share/apps/vcell3/htclogs/V_REL_274641698_0_0.slurm.sub
${container_prefix}JavaPostprocessor64 274641698 schaff 17 0 0 $1 /share/apps/vcell3/htclogs/V_REL_274641698_0_0.slurm.sub
}
#END---------SlurmProxy.generateScript():hasExitProcessor----------
echo
echo
#BEGIN---------SlurmProxy.generateScript():ExecutableCommand----------JavaPreprocessor64
echo "testing existance of native exe '/share/apps/vcell3/nativesolvers/JavaPreprocessor64' which overrides container invocations"
nativeExe=/share/apps/vcell3/nativesolvers/JavaPreprocessor64
if [ -e "${nativeExe}" ]; then
cmd_prefix="/share/apps/vcell3/nativesolvers/"
else
cmd_prefix="$container_prefix"
fi
echo "cmd_prefix is '${cmd_prefix}'"
echo "5 date=`date`"
echo command = ${cmd_prefix}JavaPreprocessor64 /share/apps/vcell3/users/schaff/SimID_274641698_0__0.simtask.xml /share/apps/vcell3/users/schaff
command="${cmd_prefix}JavaPreprocessor64 /share/apps/vcell3/users/schaff/SimID_274641698_0__0.simtask.xml /share/apps/vcell3/users/schaff "
$command
stat=$?
echo ${cmd_prefix}JavaPreprocessor64 /share/apps/vcell3/users/schaff/SimID_274641698_0__0.simtask.xml /share/apps/vcell3/users/schaff returned $stat
if [ $stat -ne 0 ]; then
callExitProcessor $stat
echo returning $stat to Slurm
exit $stat
fi
#END---------SlurmProxy.generateScript():ExecutableCommand----------JavaPreprocessor64
echo "1 date=`date`"

echo
#BEGIN---------SlurmProxy.generateScript():ExecutableCommand----------/usr/local/app/localsolvers/linux64/Hybrid_EM_x64
echo "testing existance of native exe '/share/apps/vcell3/nativesolvers/Hybrid_EM_x64' which overrides container invocations"
nativeExe=/share/apps/vcell3/nativesolvers/Hybrid_EM_x64
if [ -e "${nativeExe}" ]; then
cmd_prefix="/share/apps/vcell3/nativesolvers/"
else
cmd_prefix="$container_prefix"
fi
echo "cmd_prefix is '${cmd_prefix}'"
echo "5 date=`date`"
echo command = ${cmd_prefix}Hybrid_EM_x64 /share/apps/vcell3/users/schaff/SimID_274641698_0_.nc 100.0 10.0 0.01 0.1 -OV -tid 0
if [ -z ${LD_LIBRARY_PATH+x} ]; then
export LD_LIBRARY_PATH=/usr/local/app/localsolvers/linux64
else
export LD_LIBRARY_PATH=/usr/local/app/localsolvers/linux64:$LD_LIBRARY_PATH
fi
command="${cmd_prefix}Hybrid_EM_x64 /share/apps/vcell3/users/schaff/SimID_274641698_0_.nc 100.0 10.0 0.01 0.1 -OV -tid 0 "
$command
stat=$?
echo ${cmd_prefix}Hybrid_EM_x64 /share/apps/vcell3/users/schaff/SimID_274641698_0_.nc 100.0 10.0 0.01 0.1 -OV -tid 0 returned $stat
if [ $stat -ne 0 ]; then
callExitProcessor $stat
echo returning $stat to Slurm
exit $stat
fi
#END---------SlurmProxy.generateScript():ExecutableCommand----------Hybrid_EM_x64
callExitProcessor 0


#Following commands (if any) are read by JavaPostProcessor64


Loading

0 comments on commit edba7d7

Please sign in to comment.