Skip to content

Commit

Permalink
Merge pull request #28 from VirtualPlanetaryLaboratory/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
RoryBarnes authored Jan 4, 2019
2 parents 7a72c80 + 6ce1dbf commit d41e7ab
Show file tree
Hide file tree
Showing 5 changed files with 255 additions and 4 deletions.
35 changes: 33 additions & 2 deletions src/module.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ void InitializeModule(MODULE *module,int iNumBodies) {
module->iaFlare = malloc(iNumBodies*sizeof(int));
module->iaGalHabit = malloc(iNumBodies*sizeof(int));
module->iaSpiNBody = malloc(iNumBodies*sizeof(int));
module->iaMagmOc = malloc(iNumBodies*sizeof(int));
module->iaEqtideStellar = malloc(iNumBodies*sizeof(int));

// Initialize some of the recently malloc'd values in module
Expand All @@ -93,6 +94,7 @@ void InitializeModule(MODULE *module,int iNumBodies) {
module->iaFlare[iBody] = -1;
module->iaGalHabit[iBody] = -1;
module->iaSpiNBody[iBody] = -1;
module->iaMagmOc[iBody] = -1;
module->iaEqtideStellar[iBody] = -1;
}

Expand Down Expand Up @@ -165,6 +167,12 @@ void InitializeModule(MODULE *module,int iNumBodies) {
module->fnFinalizeUpdateVelY = malloc(iNumBodies*sizeof(fnFinalizeUpdateVelYModule));
module->fnFinalizeUpdateVelZ = malloc(iNumBodies*sizeof(fnFinalizeUpdateVelZModule));

module->fnFinalizeUpdateWaterMassMOAtm = malloc(iNumBodies*sizeof(fnFinalizeUpdateWaterMassMOAtmModule));
module->fnFinalizeUpdateWaterMassSol = malloc(iNumBodies*sizeof(fnFinalizeUpdateWaterMassSolModule));
module->fnFinalizeUpdateSurfTemp = malloc(iNumBodies*sizeof(fnFinalizeUpdateSurfTempModule));
module->fnFinalizeUpdatePotTemp = malloc(iNumBodies*sizeof(fnFinalizeUpdatePotTempModule));
module->fnFinalizeUpdateSolidRadius = malloc(iNumBodies*sizeof(fnFinalizeUpdateSolidRadiusModule));

// Function Pointer Matrices
module->fnLogBody = malloc(iNumBodies*sizeof(fnLogBodyModule*));
module->fnInitializeBody = malloc(iNumBodies*sizeof(fnInitializeBodyModule*));
Expand Down Expand Up @@ -215,6 +223,8 @@ void FinalizeModule(BODY *body,MODULE *module,int iBody) {
iNumModules++;
if (body[iBody].bSpiNBody)
iNumModules++;
if (body[iBody].bMagmOc)
iNumModules++;
if (body[iBody].bEqtide && body[iBody].bStellar) {
iNumModuleMulti++;
}
Expand Down Expand Up @@ -301,6 +311,12 @@ void FinalizeModule(BODY *body,MODULE *module,int iBody) {
module->fnFinalizeUpdateVelY[iBody] = malloc(iNumModules*sizeof(fnFinalizeUpdateVelYModule));
module->fnFinalizeUpdateVelZ[iBody] = malloc(iNumModules*sizeof(fnFinalizeUpdateVelZModule));

module->fnFinalizeUpdateWaterMassMOAtm[iBody] = malloc(iNumModules*sizeof(fnFinalizeUpdateWaterMassMOAtmModule));
module->fnFinalizeUpdateWaterMassSol[iBody] = malloc(iNumModules*sizeof(fnFinalizeUpdateWaterMassSolModule));
module->fnFinalizeUpdateSurfTemp[iBody] = malloc(iNumModules*sizeof(fnFinalizeUpdateSurfTempModule));
module->fnFinalizeUpdatePotTemp[iBody] = malloc(iNumModules*sizeof(fnFinalizeUpdatePotTempModule));
module->fnFinalizeUpdateSolidRadius[iBody] = malloc(iNumModules*sizeof(fnFinalizeUpdateSolidRadiusModule));

for (iModule = 0; iModule < (iNumModules); iModule++) {
/* Initialize all module functions pointers to point to their respective
NULL function. The modules that need actual function will replace them
Expand Down Expand Up @@ -371,6 +387,12 @@ void FinalizeModule(BODY *body,MODULE *module,int iBody) {
module->fnFinalizeUpdateVelX[iBody][iModule] = &FinalizeUpdateNULL;
module->fnFinalizeUpdateVelY[iBody][iModule] = &FinalizeUpdateNULL;
module->fnFinalizeUpdateVelZ[iBody][iModule] = &FinalizeUpdateNULL;

module->fnFinalizeUpdateWaterMassMOAtm[iBody][iModule] = &FinalizeUpdateNULL;
module->fnFinalizeUpdateWaterMassSol[iBody][iModule] = &FinalizeUpdateNULL;
module->fnFinalizeUpdateSurfTemp[iBody][iModule] = &FinalizeUpdateNULL;
module->fnFinalizeUpdatePotTemp[iBody][iModule] = &FinalizeUpdateNULL;
module->fnFinalizeUpdateSolidRadius[iBody][iModule] = &FinalizeUpdateNULL;
}

/************************
Expand Down Expand Up @@ -511,8 +533,11 @@ void ReadModules(BODY *body,CONTROL *control,FILES *files,MODULE *module,OPTIONS
body[iFile-1].bGalHabit = 1;
module->iBitSum[iFile-1] += GALHABIT;
} else if (memcmp(sLower(saTmp[iModule]),"spinbody",8) == 0) {
body[iFile-1].bSpiNBody = 1;
module->iBitSum[iFile-1] += SPINBODY;
body[iFile-1].bSpiNBody = 1;
module->iBitSum[iFile-1] += SPINBODY;
} else if (memcmp(sLower(saTmp[iModule]),"magmoc",6) == 0) {
body[iFile-1].bMagmOc = 1;
module->iBitSum[iFile-1] += MAGMOC;
} else {
if (control->Io.iVerbose >= VERBERR)
fprintf(stderr,"ERROR: Unknown Module %s provided to %s.\n",saTmp[iModule],options->cName);
Expand Down Expand Up @@ -565,6 +590,11 @@ void PrintModuleList(FILE *file,int iBitSum) {
space = 1;
fprintf(file,"GALHABIT");
}
if (iBitSum & MAGMOC) {
if (space) fprintf(file," ");
space = 1;
fprintf(file,"MAGMOC");
}
if (iBitSum & POISE) {
if (space) fprintf(file," ");
space = 1;
Expand Down Expand Up @@ -608,6 +638,7 @@ void InitializeBodyModules(BODY **body,int iNumBodies) {
(*body)[iBody].bStellar = 0;
(*body)[iBody].bThermint = 0;
(*body)[iBody].bSpiNBody = 0;
(*body)[iBody].bMagmOc = 0;
}
}

Expand Down
5 changes: 5 additions & 0 deletions src/options.c
Original file line number Diff line number Diff line change
Expand Up @@ -986,6 +986,11 @@ void ReadBodyFileNames(CONTROL *control,FILES *files,OPTIONS *options,INFILE *in
LineExit(infile->cIn,lTmp[0]);
}
files->iNumInputs=iNumIndices+1;
if (files->iNumInputs >= MAXFILES) {
fprintf(stderr,"ERROR: Number of input files (%d) exceeds MAXFILES (%d).\n",files->iNumInputs,MAXFILES);
fprintf(stderr,"Either use less body files, or increase MAXFILES in vplanet.h.\n");
LineExit(infile->cIn,lTmp[0]);
}
} else {
if (control->Io.iVerbose >= VERBERR)
fprintf(stderr,"ERROR: Option %s is required in file %s.\n",options->cName,infile->cIn);
Expand Down
1 change: 0 additions & 1 deletion src/output.c
Original file line number Diff line number Diff line change
Expand Up @@ -1877,5 +1877,4 @@ void InitializeOutput(OUTPUT *output,fnWriteOutput fnWrite[]) {
InitializeOutputFlare(output,fnWrite);
InitializeOutputGalHabit(output,fnWrite);
InitializeOutputSpiNBody(output, fnWrite);

}
150 changes: 150 additions & 0 deletions src/update.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,11 @@ void InitializeUpdate(BODY*body,CONTROL *control,MODULE *module,UPDATE *update,f
update[iBody].iNumVelX = 0;
update[iBody].iNumVelY = 0;
update[iBody].iNumVelZ = 0;
update[iBody].iNumWaterMassMOAtm = 0;
update[iBody].iNumWaterMassSol = 0;
update[iBody].iNumSurfTemp = 0;
update[iBody].iNumPotTemp = 0;
update[iBody].iNumSolidRadius = 0;
update[iBody].iNumLostAngMom=0;
update[iBody].iNumLostEng=0;
update[iBody].iNumVars=0;
Expand Down Expand Up @@ -350,6 +355,151 @@ void InitializeUpdate(BODY*body,CONTROL *control,MODULE *module,UPDATE *update,f
iVar++;
}

update[iBody].iWaterMassMOAtm = -1;
if (update[iBody].iNumWaterMassMOAtm) {
update[iBody].iWaterMassMOAtm = iVar;
update[iBody].iaVar[iVar] = VWATERMASSMOATM;
update[iBody].iNumEqns[iVar] = update[iBody].iNumWaterMassMOAtm;
update[iBody].pdVar[iVar] = &body[iBody].dWaterMassMOAtm;
update[iBody].iNumBodies[iVar] = malloc(update[iBody].iNumWaterMassMOAtm*sizeof(int));
update[iBody].iaBody[iVar] = malloc(update[iBody].iNumWaterMassMOAtm*sizeof(int*));
update[iBody].iaType[iVar] = malloc(update[iBody].iNumWaterMassMOAtm*sizeof(int));
update[iBody].iaModule[iVar] = malloc(update[iBody].iNumWaterMassMOAtm*sizeof(int));

if (control->Evolve.iOneStep == RUNGEKUTTA) {
control->Evolve.tmpUpdate[iBody].pdVar[iVar] = &control->Evolve.tmpBody[iBody].dWaterMassMOAtm;
control->Evolve.tmpUpdate[iBody].iNumBodies[iVar] = malloc(update[iBody].iNumWaterMassMOAtm*sizeof(int));
control->Evolve.tmpUpdate[iBody].daDerivProc[iVar] = malloc(update[iBody].iNumWaterMassMOAtm*sizeof(double));
control->Evolve.tmpUpdate[iBody].iaType[iVar] = malloc(update[iBody].iNumWaterMassMOAtm*sizeof(int));
control->Evolve.tmpUpdate[iBody].iaModule[iVar] = malloc(update[iBody].iNumWaterMassMOAtm*sizeof(int));
control->Evolve.tmpUpdate[iBody].iaBody[iVar] = malloc(update[iBody].iNumWaterMassMOAtm*sizeof(int*));
}

iEqn=0;
for (iModule=0;iModule<module->iNumModules[iBody];iModule++)
module->fnFinalizeUpdateWaterMassMOAtm[iBody][iModule](body,update,&iEqn,iVar,iBody,iFoo);

(*fnUpdate)[iBody][iVar]=malloc(iEqn*sizeof(fnUpdateVariable));
update[iBody].daDerivProc[iVar]=malloc(iEqn*sizeof(double));
iVar++;
}

update[iBody].iWaterMassSol = -1;
if (update[iBody].iNumWaterMassSol) {
update[iBody].iWaterMassSol = iVar;
update[iBody].iaVar[iVar] = VWATERMASSSOL;
update[iBody].iNumEqns[iVar] = update[iBody].iNumWaterMassSol;
update[iBody].pdVar[iVar] = &body[iBody].dWaterMassSol;
update[iBody].iNumBodies[iVar] = malloc(update[iBody].iNumWaterMassSol*sizeof(int));
update[iBody].iaBody[iVar] = malloc(update[iBody].iNumWaterMassSol*sizeof(int*));
update[iBody].iaType[iVar] = malloc(update[iBody].iNumWaterMassSol*sizeof(int));
update[iBody].iaModule[iVar] = malloc(update[iBody].iNumWaterMassSol*sizeof(int));

if (control->Evolve.iOneStep == RUNGEKUTTA) {
control->Evolve.tmpUpdate[iBody].pdVar[iVar] = &control->Evolve.tmpBody[iBody].dWaterMassSol;
control->Evolve.tmpUpdate[iBody].iNumBodies[iVar] = malloc(update[iBody].iNumWaterMassSol*sizeof(int));
control->Evolve.tmpUpdate[iBody].daDerivProc[iVar] = malloc(update[iBody].iNumWaterMassSol*sizeof(double));
control->Evolve.tmpUpdate[iBody].iaType[iVar] = malloc(update[iBody].iNumWaterMassSol*sizeof(int));
control->Evolve.tmpUpdate[iBody].iaModule[iVar] = malloc(update[iBody].iNumWaterMassSol*sizeof(int));
control->Evolve.tmpUpdate[iBody].iaBody[iVar] = malloc(update[iBody].iNumWaterMassSol*sizeof(int*));
}

iEqn=0;
for (iModule=0;iModule<module->iNumModules[iBody];iModule++)
module->fnFinalizeUpdateWaterMassSol[iBody][iModule](body,update,&iEqn,iVar,iBody,iFoo);

(*fnUpdate)[iBody][iVar]=malloc(iEqn*sizeof(fnUpdateVariable));
update[iBody].daDerivProc[iVar]=malloc(iEqn*sizeof(double));
iVar++;
}

update[iBody].iSurfTemp = -1;
if (update[iBody].iNumSurfTemp) {
update[iBody].iSurfTemp = iVar;
update[iBody].iaVar[iVar] = VSURFTEMP;
update[iBody].iNumEqns[iVar] = update[iBody].iNumSurfTemp;
update[iBody].pdVar[iVar] = &body[iBody].dSurfTemp;
update[iBody].iNumBodies[iVar] = malloc(update[iBody].iNumSurfTemp*sizeof(int));
update[iBody].iaBody[iVar] = malloc(update[iBody].iNumSurfTemp*sizeof(int*));
update[iBody].iaType[iVar] = malloc(update[iBody].iNumSurfTemp*sizeof(int));
update[iBody].iaModule[iVar] = malloc(update[iBody].iNumSurfTemp*sizeof(int));

if (control->Evolve.iOneStep == RUNGEKUTTA) {
control->Evolve.tmpUpdate[iBody].pdVar[iVar] = &control->Evolve.tmpBody[iBody].dSurfTemp;
control->Evolve.tmpUpdate[iBody].iNumBodies[iVar] = malloc(update[iBody].iNumSurfTemp*sizeof(int));
control->Evolve.tmpUpdate[iBody].daDerivProc[iVar] = malloc(update[iBody].iNumSurfTemp*sizeof(double));
control->Evolve.tmpUpdate[iBody].iaType[iVar] = malloc(update[iBody].iNumSurfTemp*sizeof(int));
control->Evolve.tmpUpdate[iBody].iaModule[iVar] = malloc(update[iBody].iNumSurfTemp*sizeof(int));
control->Evolve.tmpUpdate[iBody].iaBody[iVar] = malloc(update[iBody].iNumSurfTemp*sizeof(int*));
}

iEqn=0;
for (iModule=0;iModule<module->iNumModules[iBody];iModule++)
module->fnFinalizeUpdateSurfTemp[iBody][iModule](body,update,&iEqn,iVar,iBody,iFoo);

(*fnUpdate)[iBody][iVar]=malloc(iEqn*sizeof(fnUpdateVariable));
update[iBody].daDerivProc[iVar]=malloc(iEqn*sizeof(double));
iVar++;
}

update[iBody].iPotTemp = -1;
if (update[iBody].iNumPotTemp) {
update[iBody].iPotTemp = iVar;
update[iBody].iaVar[iVar] = VPOTTEMP;
update[iBody].iNumEqns[iVar] = update[iBody].iNumPotTemp;
update[iBody].pdVar[iVar] = &body[iBody].dPotTemp;
update[iBody].iNumBodies[iVar] = malloc(update[iBody].iNumPotTemp*sizeof(int));
update[iBody].iaBody[iVar] = malloc(update[iBody].iNumPotTemp*sizeof(int*));
update[iBody].iaType[iVar] = malloc(update[iBody].iNumPotTemp*sizeof(int));
update[iBody].iaModule[iVar] = malloc(update[iBody].iNumPotTemp*sizeof(int));

if (control->Evolve.iOneStep == RUNGEKUTTA) {
control->Evolve.tmpUpdate[iBody].pdVar[iVar] = &control->Evolve.tmpBody[iBody].dPotTemp;
control->Evolve.tmpUpdate[iBody].iNumBodies[iVar] = malloc(update[iBody].iNumPotTemp*sizeof(int));
control->Evolve.tmpUpdate[iBody].daDerivProc[iVar] = malloc(update[iBody].iNumPotTemp*sizeof(double));
control->Evolve.tmpUpdate[iBody].iaType[iVar] = malloc(update[iBody].iNumPotTemp*sizeof(int));
control->Evolve.tmpUpdate[iBody].iaModule[iVar] = malloc(update[iBody].iNumPotTemp*sizeof(int));
control->Evolve.tmpUpdate[iBody].iaBody[iVar] = malloc(update[iBody].iNumPotTemp*sizeof(int*));
}

iEqn=0;
for (iModule=0;iModule<module->iNumModules[iBody];iModule++)
module->fnFinalizeUpdatePotTemp[iBody][iModule](body,update,&iEqn,iVar,iBody,iFoo);

(*fnUpdate)[iBody][iVar]=malloc(iEqn*sizeof(fnUpdateVariable));
update[iBody].daDerivProc[iVar]=malloc(iEqn*sizeof(double));
iVar++;
}

update[iBody].iSolidRadius = -1;
if (update[iBody].iNumSolidRadius) {
update[iBody].iSolidRadius = iVar;
update[iBody].iaVar[iVar] = VSOLIDRADIUS;
update[iBody].iNumEqns[iVar] = update[iBody].iNumSolidRadius;
update[iBody].pdVar[iVar] = &body[iBody].dSolidRadius;
update[iBody].iNumBodies[iVar] = malloc(update[iBody].iNumSolidRadius*sizeof(int));
update[iBody].iaBody[iVar] = malloc(update[iBody].iNumSolidRadius*sizeof(int*));
update[iBody].iaType[iVar] = malloc(update[iBody].iNumSolidRadius*sizeof(int));
update[iBody].iaModule[iVar] = malloc(update[iBody].iNumSolidRadius*sizeof(int));

if (control->Evolve.iOneStep == RUNGEKUTTA) {
control->Evolve.tmpUpdate[iBody].pdVar[iVar] = &control->Evolve.tmpBody[iBody].dSolidRadius;
control->Evolve.tmpUpdate[iBody].iNumBodies[iVar] = malloc(update[iBody].iNumSolidRadius*sizeof(int));
control->Evolve.tmpUpdate[iBody].daDerivProc[iVar] = malloc(update[iBody].iNumSolidRadius*sizeof(double));
control->Evolve.tmpUpdate[iBody].iaType[iVar] = malloc(update[iBody].iNumSolidRadius*sizeof(int));
control->Evolve.tmpUpdate[iBody].iaModule[iVar] = malloc(update[iBody].iNumSolidRadius*sizeof(int));
control->Evolve.tmpUpdate[iBody].iaBody[iVar] = malloc(update[iBody].iNumSolidRadius*sizeof(int*));
}

iEqn=0;
for (iModule=0;iModule<module->iNumModules[iBody];iModule++)
module->fnFinalizeUpdateSolidRadius[iBody][iModule](body,update,&iEqn,iVar,iBody,iFoo);

(*fnUpdate)[iBody][iVar]=malloc(iEqn*sizeof(fnUpdateVariable));
update[iBody].daDerivProc[iVar]=malloc(iEqn*sizeof(double));
iVar++;
}

/* 26Al Core */
update[iBody].i26AlCore = -1;
if (update[iBody].iNum26AlCore) {
Expand Down
Loading

0 comments on commit d41e7ab

Please sign in to comment.