Skip to content

Commit 22155fd

Browse files
committed
added natural id to ReactionStepOperatorSplit argument list
1 parent 42074de commit 22155fd

10 files changed

+28
-12
lines changed

alquimia/alquimia_fortran_interface_mod.F90

+7-5
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,8 @@ subroutine ProcessCondition(pft_engine_state,condition,props,state,aux_data,stat
208208

209209
! take one (or more?) reaction steps in operator split mode
210210
interface
211-
subroutine ReactionStepOperatorSplit(pft_engine_state, delta_t, props, state, aux_data, status) bind(C)
212-
use, intrinsic :: iso_c_binding, only : c_ptr, c_double
211+
subroutine ReactionStepOperatorSplit(pft_engine_state, delta_t, props, state, aux_data, natural_id, status) bind(C)
212+
use, intrinsic :: iso_c_binding, only : c_ptr, c_double, c_int
213213
use AlquimiaContainers_module, only : AlquimiaSizes,AlquimiaProblemMetaData,AlquimiaProperties,&
214214
AlquimiaState,AlquimiaAuxiliaryData,AlquimiaAuxiliaryOutputData, AlquimiaEngineStatus,&
215215
AlquimiaGeochemicalCondition,AlquimiaEngineFunctionality
@@ -219,6 +219,7 @@ subroutine ReactionStepOperatorSplit(pft_engine_state, delta_t, props, state, au
219219
type(AlquimiaProperties) :: props
220220
type(AlquimiaState) :: state
221221
type(AlquimiaAuxiliaryData) :: aux_data
222+
integer(c_int),value :: natural_id
222223
type(AlquimiaEngineStatus) :: status
223224
end subroutine
224225
end interface
@@ -310,8 +311,8 @@ subroutine Alquimia_Fortran_ProcessCondition(this,pft_engine_state,condition,pro
310311
call engine_ProcessCondition(pft_engine_state,condition,props,state,aux_data,status)
311312
end subroutine
312313

313-
subroutine Alquimia_Fortran_ReactionStepOperatorSplit(this,pft_engine_state, delta_t, props, state, aux_data, status)
314-
use, intrinsic :: iso_c_binding, only : c_ptr, c_double,c_f_procpointer
314+
subroutine Alquimia_Fortran_ReactionStepOperatorSplit(this,pft_engine_state, delta_t, props, state, aux_data, natural_id, status)
315+
use, intrinsic :: iso_c_binding, only : c_ptr, c_double,c_f_procpointer,c_int
315316
use AlquimiaContainers_module, only : AlquimiaSizes,AlquimiaProblemMetaData,AlquimiaProperties,&
316317
AlquimiaState,AlquimiaAuxiliaryData,AlquimiaAuxiliaryOutputData, AlquimiaEngineStatus,&
317318
AlquimiaGeochemicalCondition,AlquimiaEngineFunctionality
@@ -322,12 +323,13 @@ subroutine Alquimia_Fortran_ReactionStepOperatorSplit(this,pft_engine_state, del
322323
type(AlquimiaProperties) :: props
323324
type(AlquimiaState) :: state
324325
type(AlquimiaAuxiliaryData) :: aux_data
326+
integer(c_int),value :: natural_id
325327
type(AlquimiaEngineStatus) :: status
326328

327329
procedure(ReactionStepOperatorSplit), pointer :: engine_ReactionStepOperatorSplit
328330

329331
call c_f_procpointer(this%c_interface%ReactionStepOperatorSplit,engine_ReactionStepOperatorSplit)
330-
call engine_ReactionStepOperatorSplit(pft_engine_state, delta_t, props, state, aux_data, status)
332+
call engine_ReactionStepOperatorSplit(pft_engine_state, delta_t, props, state, aux_data, natural_id, status)
331333
end subroutine
332334

333335
subroutine Alquimia_Fortran_GetAuxiliaryOutput(this,pft_engine_state,props,state,aux_data,aux_out,status)

alquimia/alquimia_interface.h

+1
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ extern "C" {
9393
AlquimiaProperties* props,
9494
AlquimiaState* state,
9595
AlquimiaAuxiliaryData* aux_data,
96+
int natural_id,
9697
AlquimiaEngineStatus* status);
9798

9899
/* Access to user selected geochemical data for output, i.e. pH,

alquimia/crunch_alquimia_interface.F90

+3-2
Original file line numberDiff line numberDiff line change
@@ -602,10 +602,10 @@ end subroutine ProcessCondition
602602

603603
! **************************************************************************** !
604604
subroutine ReactionStepOperatorSplit(cf_engine_state, &
605-
delta_t, properties, state, aux_data, status)
605+
delta_t, properties, state, aux_data, natural_id, status)
606606
! NOTE: Function signature is dictated by the alquimia API.
607607

608-
use, intrinsic :: iso_c_binding, only : c_ptr, c_double, c_f_pointer
608+
use, intrinsic :: iso_c_binding, only : c_ptr, c_double, c_f_pointer, c_int
609609

610610
use c_f_interface_module, only : f_c_string_ptr
611611

@@ -630,6 +630,7 @@ subroutine ReactionStepOperatorSplit(cf_engine_state, &
630630
type (AlquimiaProperties), intent(in) :: properties
631631
type (AlquimiaState), intent(inout) :: state
632632
type (AlquimiaAuxiliaryData), intent(inout) :: aux_data
633+
integer (c_int), value, intent(in) :: natural_id
633634
type (AlquimiaEngineStatus), intent(out) :: status
634635

635636
! local variables

alquimia/crunch_alquimia_interface.h

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ extern "C" {
6767
AlquimiaProperties* properties,
6868
AlquimiaState* state,
6969
AlquimiaAuxiliaryData* aux_data,
70+
int natural_id,
7071
AlquimiaEngineStatus* status);
7172
void crunch_alquimia_getauxiliaryoutput(
7273
void* cf_engine_state,

alquimia/crunch_alquimia_wrappers.F90

+3-1
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ subroutine Crunch_Alquimia_ReactionStepOperatorSplit( &
134134
properties, &
135135
state, &
136136
aux_data, &
137+
natural_id, &
137138
status) bind(C)
138139

139140
use, intrinsic :: iso_c_binding
@@ -149,10 +150,11 @@ subroutine Crunch_Alquimia_ReactionStepOperatorSplit( &
149150
type (AlquimiaProperties), intent(in) :: properties
150151
type (AlquimiaState), intent(inout) :: state
151152
type (AlquimiaAuxiliaryData), intent(inout) :: aux_data
153+
integer (c_int), value, intent(in) :: natural_id
152154
type (AlquimiaEngineStatus), intent(out) :: status
153155

154156
call ReactionStepOperatorSplit(cf_engine_state, delta_t, &
155-
properties, state, aux_data, status)
157+
properties, state, aux_data, natural_id, status)
156158

157159
end subroutine Crunch_Alquimia_ReactionStepOperatorSplit
158160

alquimia/pflotran_alquimia_interface.F90

+3-3
Original file line numberDiff line numberDiff line change
@@ -472,12 +472,12 @@ end subroutine ProcessCondition
472472

473473
! **************************************************************************** !
474474
subroutine ReactionStepOperatorSplit(pft_engine_state, &
475-
delta_t, properties, state, aux_data, status)
475+
delta_t, properties, state, aux_data, natural_id, status)
476476
! NOTE: Function signature is dictated by the alquimia API.
477477

478478
#include "petsc/finclude/petscsys.h"
479479
use petscsys
480-
use, intrinsic :: iso_c_binding, only : c_ptr, c_double, c_f_pointer
480+
use, intrinsic :: iso_c_binding, only : c_ptr, c_double, c_f_pointer, c_int
481481

482482
use c_f_interface_module, only : f_c_string_ptr
483483

@@ -494,14 +494,14 @@ subroutine ReactionStepOperatorSplit(pft_engine_state, &
494494
type (AlquimiaProperties), intent(in) :: properties
495495
type (AlquimiaState), intent(inout) :: state
496496
type (AlquimiaAuxiliaryData), intent(inout) :: aux_data
497+
integer (c_int) :: natural_id
497498
type (AlquimiaEngineStatus), intent(out) :: status
498499

499500
! local variables
500501
type(PFLOTRANEngineState), pointer :: engine_state
501502
PetscReal :: porosity, volume, vol_frac_prim
502503
PetscReal, allocatable :: guess(:)
503504
PetscInt :: i, num_newton_iterations, ierror
504-
PetscInt, parameter :: natural_id = -999
505505
PetscInt, parameter :: phase_index = 1
506506
logical, parameter :: copy_auxdata = .true.
507507
class(reaction_rt_type), pointer :: reaction

alquimia/pflotran_alquimia_interface.h

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ extern "C" {
6767
AlquimiaProperties* material_properties,
6868
AlquimiaState* state,
6969
AlquimiaAuxiliaryData* aux_data,
70+
int natural_id,
7071
AlquimiaEngineStatus* status);
7172
void pflotran_alquimia_getauxiliaryoutput(
7273
void* pft_engine_state,

alquimia/pflotran_alquimia_wrappers.F90

+3-1
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ subroutine PFloTran_Alquimia_ReactionStepOperatorSplit( &
133133
properties, &
134134
state, &
135135
aux_data, &
136+
natural_id, &
136137
status) bind(C)
137138

138139
use, intrinsic :: iso_c_binding
@@ -148,10 +149,11 @@ subroutine PFloTran_Alquimia_ReactionStepOperatorSplit( &
148149
type (AlquimiaProperties), intent(in) :: properties
149150
type (AlquimiaState), intent(inout) :: state
150151
type (AlquimiaAuxiliaryData), intent(inout) :: aux_data
152+
integer(c_int), value, intent(in) :: natural_id
151153
type (AlquimiaEngineStatus), intent(out) :: status
152154

153155
call ReactionStepOperatorSplit(pft_engine_state, delta_t, &
154-
properties, state, aux_data, status)
156+
properties, state, aux_data, natural_id, status)
155157

156158
end subroutine PFloTran_Alquimia_ReactionStepOperatorSplit
157159

drivers/BatchChemDriver.c

+3
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,7 @@ int BatchChemDriver_Run(BatchChemDriver* driver)
555555
printf("BatchChemDriver: running %s\n", driver->description);
556556

557557
double dt = driver->dt;
558+
int natural_id;
558559

559560
// Initialize the chemistry state and set up the solution vector.
560561
int status = BatchChemDriver_Initialize(driver);
@@ -569,10 +570,12 @@ int BatchChemDriver_Run(BatchChemDriver* driver)
569570
printf("BatchChemDriver: step %d (t = %g, dt = %g)\n", driver->step, driver->time, dt);
570571

571572
// Do the chemistry step.
573+
natural_id = -999;
572574
driver->chem.ReactionStepOperatorSplit(&driver->chem_engine,
573575
dt, &driver->chem_properties,
574576
&driver->chem_state,
575577
&driver->chem_aux_data,
578+
natural_id,
576579
&driver->chem_status);
577580
if (driver->chem_status.error != 0)
578581
{

drivers/TransportDriver.c

+3
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,7 @@ static int Run_OperatorSplit(TransportDriver* driver)
669669
double dx = (driver->x_max - driver->x_min) / driver->num_cells;
670670
double dt = Min(driver->dt, driver->cfl * dx / driver->vx);
671671
int num_primary = driver->chem_sizes.num_primary;
672+
int natural_id;
672673

673674
// Initialize the chemistry state in each cell, and set up the solution vector.
674675
int status = TransportDriver_Initialize(driver);
@@ -710,10 +711,12 @@ static int Run_OperatorSplit(TransportDriver* driver)
710711
}
711712

712713
// Do the chemistry step, using the advected state as input.
714+
natural_id = -999;
713715
driver->chem.ReactionStepOperatorSplit(&driver->chem_engine,
714716
dt, &driver->chem_properties[i],
715717
&driver->advected_chem_state,
716718
&driver->advected_chem_aux_data,
719+
natural_id,
717720
&driver->chem_status);
718721
if (driver->chem_status.error != 0)
719722
{

0 commit comments

Comments
 (0)